From a1789ddde42033f1b05cc4929491214ee6e79383 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 17 Dec 2015 09:15:42 +0100 Subject: Update to MediaWiki 1.26.0 --- CREDITS | 10 +- Gemfile.lock | 50 +- Gruntfile.js | 47 +- HISTORY | 555 +- RELEASE-NOTES-1.25 | 627 -- RELEASE-NOTES-1.26 | 312 + Rakefile | 14 + api.php | 17 +- autoload.php | 88 +- composer.json | 48 +- composer.lock | 395 -- docs/doxygen_first_page.php | 2 +- docs/extension.schema.json | 131 +- docs/hooks.txt | 1282 ++-- docs/kss/styleguide-template/index.html | 5 +- docs/kss/styleguide-template/public/kss.less | 5 + docs/linkcache.txt | 2 +- docs/memcached.txt | 1 - docs/scripts.txt | 5 +- docs/sitelist.txt | 2 +- docs/uidesign/design.html | 1 + extensions/Cite/CiteCSSFileModule.php | 34 + extensions/Cite/Cite_body.php | 163 +- extensions/Cite/Gruntfile.js | 9 +- extensions/Cite/citeParserTests.txt | 36 +- extensions/Cite/composer.json | 10 + extensions/Cite/extension.json | 35 +- extensions/Cite/i18n/ady-cyrl.json | 8 + extensions/Cite/i18n/af.json | 5 +- extensions/Cite/i18n/av.json | 8 + extensions/Cite/i18n/awa.json | 10 + extensions/Cite/i18n/az.json | 4 +- extensions/Cite/i18n/be.json | 8 + extensions/Cite/i18n/bho.json | 8 + extensions/Cite/i18n/bs.json | 10 +- extensions/Cite/i18n/ce.json | 4 +- extensions/Cite/i18n/dty.json | 8 + extensions/Cite/i18n/es.json | 5 +- extensions/Cite/i18n/fo.json | 1 + extensions/Cite/i18n/gom-latn.json | 8 + extensions/Cite/i18n/gu.json | 6 +- extensions/Cite/i18n/hr.json | 13 +- extensions/Cite/i18n/jut.json | 17 +- extensions/Cite/i18n/khw.json | 8 + extensions/Cite/i18n/ksh.json | 10 +- extensions/Cite/i18n/ku-latn.json | 8 + extensions/Cite/i18n/kw.json | 5 +- extensions/Cite/i18n/lt.json | 16 +- extensions/Cite/i18n/luz.json | 8 + extensions/Cite/i18n/mg.json | 3 +- extensions/Cite/i18n/mzn.json | 8 + extensions/Cite/i18n/olo.json | 8 + extensions/Cite/i18n/pa.json | 5 +- extensions/Cite/i18n/sa.json | 5 +- extensions/Cite/i18n/scn.json | 43 +- extensions/Cite/i18n/sco.json | 8 + extensions/Cite/i18n/sgs.json | 8 + extensions/Cite/i18n/si.json | 5 +- extensions/Cite/i18n/sr-ec.json | 5 +- extensions/Cite/i18n/szl.json | 8 + extensions/Cite/i18n/vi.json | 4 +- extensions/Cite/i18n/vro.json | 8 + extensions/Cite/i18n/wuu.json | 8 + extensions/Cite/i18n/xmf.json | 8 + extensions/Cite/i18n/yue.json | 8 +- extensions/Cite/modules/ext.cite.a11y.css | 16 + extensions/Cite/modules/ext.cite.a11y.js | 38 + extensions/Cite/modules/ext.cite.css | 37 - extensions/Cite/modules/ext.cite.js | 38 - extensions/Cite/modules/ext.cite.print.css | 3 + extensions/Cite/modules/ext.cite.style.css | 83 + extensions/Cite/modules/ext.cite.style.fa.css | 15 + extensions/Cite/modules/ext.cite.styles.css | 21 + extensions/Cite/modules/ext.rtlcite.css | 6 - extensions/CiteThisPage/CiteThisPage.alias.php | 9 +- extensions/CiteThisPage/CiteThisPage.php | 2 +- extensions/CiteThisPage/Gruntfile.js | 25 + extensions/CiteThisPage/composer.json | 10 + extensions/CiteThisPage/extension.json | 4 +- extensions/CiteThisPage/i18n/ady-cyrl.json | 11 + extensions/CiteThisPage/i18n/aeb-latn.json | 9 + extensions/CiteThisPage/i18n/af.json | 6 +- extensions/CiteThisPage/i18n/ang.json | 8 + extensions/CiteThisPage/i18n/awa.json | 2 +- extensions/CiteThisPage/i18n/az.json | 4 +- extensions/CiteThisPage/i18n/azb.json | 10 +- extensions/CiteThisPage/i18n/bho.json | 7 +- extensions/CiteThisPage/i18n/bs.json | 5 +- extensions/CiteThisPage/i18n/ce.json | 4 +- extensions/CiteThisPage/i18n/da.json | 2 +- extensions/CiteThisPage/i18n/dty.json | 9 + extensions/CiteThisPage/i18n/en-gb.json | 9 + extensions/CiteThisPage/i18n/fo.json | 4 +- extensions/CiteThisPage/i18n/gd.json | 6 +- extensions/CiteThisPage/i18n/gom-latn.json | 9 + extensions/CiteThisPage/i18n/gu.json | 11 +- extensions/CiteThisPage/i18n/hil.json | 5 +- extensions/CiteThisPage/i18n/ht.json | 4 +- extensions/CiteThisPage/i18n/hu.json | 7 +- extensions/CiteThisPage/i18n/hy.json | 4 +- extensions/CiteThisPage/i18n/jut.json | 5 +- extensions/CiteThisPage/i18n/khw.json | 9 + extensions/CiteThisPage/i18n/kn.json | 4 +- extensions/CiteThisPage/i18n/ko.json | 2 +- extensions/CiteThisPage/i18n/ksh.json | 2 +- extensions/CiteThisPage/i18n/kw.json | 4 +- extensions/CiteThisPage/i18n/luz.json | 9 + extensions/CiteThisPage/i18n/lv.json | 4 +- extensions/CiteThisPage/i18n/mg.json | 3 +- extensions/CiteThisPage/i18n/ml.json | 2 +- extensions/CiteThisPage/i18n/mn.json | 4 +- extensions/CiteThisPage/i18n/mzn.json | 9 + extensions/CiteThisPage/i18n/nan.json | 8 +- extensions/CiteThisPage/i18n/olo.json | 9 + extensions/CiteThisPage/i18n/or.json | 2 +- extensions/CiteThisPage/i18n/pa.json | 6 +- extensions/CiteThisPage/i18n/pl.json | 5 +- extensions/CiteThisPage/i18n/prs.json | 9 + extensions/CiteThisPage/i18n/pt.json | 6 +- extensions/CiteThisPage/i18n/sa.json | 7 +- extensions/CiteThisPage/i18n/scn.json | 15 +- extensions/CiteThisPage/i18n/sco.json | 9 + extensions/CiteThisPage/i18n/sd.json | 10 +- extensions/CiteThisPage/i18n/sgs.json | 2 + extensions/CiteThisPage/i18n/si.json | 7 +- extensions/CiteThisPage/i18n/th.json | 5 +- extensions/CiteThisPage/i18n/tl.json | 7 +- extensions/CiteThisPage/i18n/tr.json | 8 +- extensions/CiteThisPage/i18n/uk.json | 2 +- extensions/CiteThisPage/i18n/vro.json | 9 + extensions/CiteThisPage/i18n/war.json | 9 + extensions/CiteThisPage/i18n/wo.json | 9 + extensions/CiteThisPage/i18n/wuu.json | 7 +- extensions/CiteThisPage/i18n/xmf.json | 9 + extensions/CiteThisPage/i18n/yo.json | 2 + extensions/ConfirmEdit/CHANGELOG.md | 9 + extensions/ConfirmEdit/ConfirmEdit.alias.php | 6 +- extensions/ConfirmEdit/ConfirmEdit.php | 190 +- .../FancyCaptcha/FancyCaptcha.class.php | 14 +- extensions/ConfirmEdit/FancyCaptcha/extension.json | 10 +- .../ConfirmEdit/FancyCaptcha/i18n/ady-cyrl.json | 10 + extensions/ConfirmEdit/FancyCaptcha/i18n/af.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json | 8 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/av.json | 8 + extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json | 3 +- extensions/ConfirmEdit/FancyCaptcha/i18n/bho.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json | 7 +- extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json | 5 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json | 3 +- extensions/ConfirmEdit/FancyCaptcha/i18n/dty.json | 11 + extensions/ConfirmEdit/FancyCaptcha/i18n/el.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/es.json | 16 +- extensions/ConfirmEdit/FancyCaptcha/i18n/et.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json | 7 +- extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json | 3 +- extensions/ConfirmEdit/FancyCaptcha/i18n/gd.json | 8 + .../ConfirmEdit/FancyCaptcha/i18n/gom-deva.json | 4 +- .../ConfirmEdit/FancyCaptcha/i18n/gom-latn.json | 10 + extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json | 5 +- extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json | 6 +- extensions/ConfirmEdit/FancyCaptcha/i18n/he.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json | 7 +- extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json | 7 +- extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json | 11 +- .../ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json | 2 +- extensions/ConfirmEdit/FancyCaptcha/i18n/km.json | 7 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json | 2 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json | 6 +- extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json | 3 +- extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json | 12 +- extensions/ConfirmEdit/FancyCaptcha/i18n/luz.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/mg.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json | 2 +- extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json | 5 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json | 9 +- extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json | 6 +- extensions/ConfirmEdit/FancyCaptcha/i18n/mzn.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json | 7 +- extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json | 5 +- extensions/ConfirmEdit/FancyCaptcha/i18n/olo.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/or.json | 6 +- extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json | 5 +- extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json | 3 +- extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json | 6 +- extensions/ConfirmEdit/FancyCaptcha/i18n/sco.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/sgs.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/shn.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/si.json | 8 +- extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json | 8 +- extensions/ConfirmEdit/FancyCaptcha/i18n/su.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json | 1 + extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json | 8 +- extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json | 10 +- .../ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json | 7 +- extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json | 2 +- extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json | 4 +- extensions/ConfirmEdit/FancyCaptcha/i18n/war.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/wo.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/wuu.json | 9 + extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json | 9 +- .../ConfirmEdit/FancyCaptcha/i18n/zh-hant.json | 4 +- extensions/ConfirmEdit/Gruntfile.js | 30 + .../ConfirmEdit/MathCaptcha/MathCaptcha.class.php | 7 +- .../QuestyCaptcha/QuestyCaptcha.class.php | 4 +- extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json | 7 +- extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json | 11 +- extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json | 2 +- extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json | 5 +- extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json | 5 +- extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json | 3 +- extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json | 2 +- extensions/ConfirmEdit/README | 44 - extensions/ConfirmEdit/README.md | 152 + .../ConfirmEdit/ReCaptcha/ReCaptcha.class.php | 4 +- extensions/ConfirmEdit/ReCaptcha/i18n/es.json | 13 +- extensions/ConfirmEdit/ReCaptchaNoCaptcha.php | 2 + .../ReCaptchaNoCaptcha.class.php | 148 + .../ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php | 13 + .../ConfirmEdit/ReCaptchaNoCaptcha/extension.json | 17 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json | 14 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json | 14 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json | 12 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json | 14 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json | 14 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json | 14 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json | 9 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json | 8 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json | 14 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json | 13 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json | 13 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json | 12 + .../ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json | 14 + .../ReCaptchaNoCaptcha/i18n/zh-hans.json | 14 + extensions/ConfirmEdit/SimpleCaptcha/Captcha.php | 192 +- extensions/ConfirmEdit/composer.json | 10 + extensions/ConfirmEdit/extension.json | 129 + extensions/ConfirmEdit/i18n/ady-cyrl.json | 8 + extensions/ConfirmEdit/i18n/an.json | 4 +- extensions/ConfirmEdit/i18n/arz.json | 1 + extensions/ConfirmEdit/i18n/bs.json | 12 +- extensions/ConfirmEdit/i18n/ce.json | 2 +- extensions/ConfirmEdit/i18n/ckb.json | 4 +- extensions/ConfirmEdit/i18n/dty.json | 8 + extensions/ConfirmEdit/i18n/el.json | 2 +- extensions/ConfirmEdit/i18n/et.json | 2 +- extensions/ConfirmEdit/i18n/eu.json | 6 +- extensions/ConfirmEdit/i18n/fi.json | 5 +- extensions/ConfirmEdit/i18n/gd.json | 8 + extensions/ConfirmEdit/i18n/glk.json | 8 + extensions/ConfirmEdit/i18n/gom-latn.json | 8 + extensions/ConfirmEdit/i18n/gu.json | 6 +- extensions/ConfirmEdit/i18n/hi.json | 5 +- extensions/ConfirmEdit/i18n/hrx.json | 8 + extensions/ConfirmEdit/i18n/ht.json | 4 +- extensions/ConfirmEdit/i18n/ilo.json | 2 +- extensions/ConfirmEdit/i18n/is.json | 4 +- extensions/ConfirmEdit/i18n/jut.json | 15 +- extensions/ConfirmEdit/i18n/km.json | 4 +- extensions/ConfirmEdit/i18n/ksh.json | 14 +- extensions/ConfirmEdit/i18n/kw.json | 4 +- extensions/ConfirmEdit/i18n/ky.json | 6 +- extensions/ConfirmEdit/i18n/lt.json | 18 +- extensions/ConfirmEdit/i18n/luz.json | 8 + extensions/ConfirmEdit/i18n/mg.json | 1 + extensions/ConfirmEdit/i18n/mk.json | 14 +- extensions/ConfirmEdit/i18n/mr.json | 4 +- extensions/ConfirmEdit/i18n/ms.json | 4 +- extensions/ConfirmEdit/i18n/mzn.json | 8 + extensions/ConfirmEdit/i18n/nds-nl.json | 1 + extensions/ConfirmEdit/i18n/olo.json | 8 + extensions/ConfirmEdit/i18n/pnb.json | 1 + extensions/ConfirmEdit/i18n/qu.json | 1 + extensions/ConfirmEdit/i18n/scn.json | 31 +- extensions/ConfirmEdit/i18n/shy-latn.json | 8 + extensions/ConfirmEdit/i18n/sq.json | 4 +- extensions/ConfirmEdit/i18n/sr-ec.json | 4 +- extensions/ConfirmEdit/i18n/sr-el.json | 4 +- extensions/ConfirmEdit/i18n/su.json | 1 + extensions/ConfirmEdit/i18n/tr.json | 5 +- extensions/ConfirmEdit/i18n/tt-cyrl.json | 8 + extensions/ConfirmEdit/i18n/war.json | 8 + extensions/ConfirmEdit/i18n/wo.json | 8 + extensions/ConfirmEdit/i18n/wuu.json | 8 + extensions/ConfirmEdit/i18n/xmf.json | 8 + extensions/ConfirmEdit/i18n/yue.json | 11 +- extensions/ConfirmEdit/i18n/zh-hans.json | 2 +- extensions/ConfirmEdit/includes/CaptchaStore.php | 18 +- extensions/Gadgets/GadgetHooks.php | 92 +- extensions/Gadgets/Gadgets.alias.php | 10 +- extensions/Gadgets/Gadgets.namespaces.php | 122 + extensions/Gadgets/Gadgets.php | 1 + extensions/Gadgets/Gadgets_body.php | 305 +- extensions/Gadgets/Gruntfile.js | 19 + extensions/Gadgets/SpecialGadgets.php | 25 +- .../Gadgets/api/ApiQueryGadgetCategories.php | 54 +- extensions/Gadgets/api/ApiQueryGadgets.php | 89 +- extensions/Gadgets/composer.json | 10 + extensions/Gadgets/extension.json | 42 +- extensions/Gadgets/i18n/ast.json | 23 +- extensions/Gadgets/i18n/be-tarask.json | 4 +- extensions/Gadgets/i18n/bho.json | 8 + extensions/Gadgets/i18n/bn.json | 9 +- extensions/Gadgets/i18n/bs.json | 5 +- extensions/Gadgets/i18n/ca.json | 6 +- extensions/Gadgets/i18n/ce.json | 2 +- extensions/Gadgets/i18n/cs.json | 7 +- extensions/Gadgets/i18n/cv.json | 8 + extensions/Gadgets/i18n/de.json | 17 +- extensions/Gadgets/i18n/dty.json | 9 + extensions/Gadgets/i18n/el.json | 49 +- extensions/Gadgets/i18n/en.json | 7 +- extensions/Gadgets/i18n/es.json | 12 +- extensions/Gadgets/i18n/et.json | 23 +- extensions/Gadgets/i18n/eu.json | 8 +- extensions/Gadgets/i18n/fa.json | 4 +- extensions/Gadgets/i18n/fo.json | 13 +- extensions/Gadgets/i18n/fr.json | 30 +- extensions/Gadgets/i18n/gl.json | 18 +- extensions/Gadgets/i18n/he.json | 23 +- extensions/Gadgets/i18n/hi.json | 13 +- extensions/Gadgets/i18n/hu.json | 1 + extensions/Gadgets/i18n/id.json | 2 +- extensions/Gadgets/i18n/ilo.json | 19 +- extensions/Gadgets/i18n/it.json | 9 +- extensions/Gadgets/i18n/jut.json | 11 +- extensions/Gadgets/i18n/kk-cyrl.json | 2 +- extensions/Gadgets/i18n/ko.json | 10 +- extensions/Gadgets/i18n/ksh.json | 12 +- extensions/Gadgets/i18n/lb.json | 6 +- extensions/Gadgets/i18n/lt.json | 32 +- extensions/Gadgets/i18n/mk.json | 7 +- extensions/Gadgets/i18n/nap.json | 44 + extensions/Gadgets/i18n/ne.json | 7 +- extensions/Gadgets/i18n/nl.json | 21 +- extensions/Gadgets/i18n/olo.json | 14 + extensions/Gadgets/i18n/pl.json | 9 +- extensions/Gadgets/i18n/pt-br.json | 5 +- extensions/Gadgets/i18n/qqq.json | 7 +- extensions/Gadgets/i18n/ru.json | 11 +- extensions/Gadgets/i18n/sa.json | 7 +- extensions/Gadgets/i18n/sah.json | 10 +- extensions/Gadgets/i18n/shn.json | 11 + extensions/Gadgets/i18n/sq.json | 7 +- extensions/Gadgets/i18n/sr-ec.json | 7 +- extensions/Gadgets/i18n/tr.json | 21 +- extensions/Gadgets/i18n/uk.json | 27 +- extensions/Gadgets/i18n/vi.json | 7 +- extensions/Gadgets/i18n/xmf.json | 11 + extensions/Gadgets/i18n/zh-hans.json | 7 +- extensions/Gadgets/i18n/zh-hant.json | 25 +- extensions/Gadgets/includes/GadgetRepo.php | 63 + .../includes/GadgetResourceLoaderModule.php | 61 + .../includes/MediaWikiGadgetsDefinitionRepo.php | 233 + extensions/Gadgets/tests/GadgetTest.php | 35 +- extensions/ImageMap/Gruntfile.js | 19 + extensions/ImageMap/extension.json | 3 +- extensions/ImageMap/i18n/ce.json | 2 +- extensions/ImageMap/i18n/es.json | 11 +- extensions/ImageMap/i18n/lt.json | 8 +- extensions/ImageMap/i18n/nap.json | 19 + extensions/ImageMap/i18n/olo.json | 19 + extensions/ImageMap/i18n/sa.json | 5 +- extensions/ImageMap/i18n/sr-ec.json | 2 +- extensions/ImageMap/i18n/sr-el.json | 2 +- extensions/InputBox/Gruntfile.js | 20 + extensions/InputBox/InputBox.classes.php | 198 +- extensions/InputBox/composer.json | 11 + extensions/InputBox/extension.json | 15 +- extensions/InputBox/i18n/ady-cyrl.json | 8 + extensions/InputBox/i18n/anp.json | 8 + extensions/InputBox/i18n/ast.json | 2 +- extensions/InputBox/i18n/awa.json | 14 + extensions/InputBox/i18n/az.json | 4 +- extensions/InputBox/i18n/azb.json | 6 +- extensions/InputBox/i18n/be.json | 7 +- extensions/InputBox/i18n/bho.json | 8 + extensions/InputBox/i18n/bs.json | 4 +- extensions/InputBox/i18n/cu.json | 2 +- extensions/InputBox/i18n/din.json | 8 + extensions/InputBox/i18n/dty.json | 8 + extensions/InputBox/i18n/ee.json | 4 +- extensions/InputBox/i18n/es.json | 13 +- extensions/InputBox/i18n/eu.json | 4 +- extensions/InputBox/i18n/gom-latn.json | 8 + extensions/InputBox/i18n/gu.json | 5 +- extensions/InputBox/i18n/hi.json | 6 +- extensions/InputBox/i18n/hy.json | 4 +- extensions/InputBox/i18n/ja.json | 5 +- extensions/InputBox/i18n/jut.json | 13 +- extensions/InputBox/i18n/khw.json | 8 + extensions/InputBox/i18n/krc.json | 9 + extensions/InputBox/i18n/ksh.json | 2 +- extensions/InputBox/i18n/lt.json | 9 +- extensions/InputBox/i18n/luz.json | 8 + extensions/InputBox/i18n/mg.json | 8 + extensions/InputBox/i18n/mr.json | 2 +- extensions/InputBox/i18n/mzn.json | 1 + extensions/InputBox/i18n/nap.json | 9 +- extensions/InputBox/i18n/ne.json | 9 +- extensions/InputBox/i18n/nl.json | 2 +- extensions/InputBox/i18n/olo.json | 15 + extensions/InputBox/i18n/pa.json | 8 + extensions/InputBox/i18n/ps.json | 3 + extensions/InputBox/i18n/ro.json | 3 +- extensions/InputBox/i18n/sa.json | 8 +- extensions/InputBox/i18n/scn.json | 5 +- extensions/InputBox/i18n/sco.json | 8 + extensions/InputBox/i18n/sd.json | 8 +- extensions/InputBox/i18n/sgs.json | 1 + extensions/InputBox/i18n/sh.json | 4 +- extensions/InputBox/i18n/tcy.json | 9 + extensions/InputBox/i18n/te.json | 2 + extensions/InputBox/i18n/tr.json | 6 +- extensions/InputBox/i18n/war.json | 8 + extensions/InputBox/i18n/wuu.json | 7 +- extensions/InputBox/i18n/xmf.json | 8 + extensions/InputBox/resources/ext.inputBox.js | 2 +- .../InputBox/resources/ext.inputBox.styles.css | 4 + extensions/Interwiki/Gruntfile.js | 33 + extensions/Interwiki/Interwiki.alias.php | 12 +- extensions/Interwiki/Interwiki_body.php | 24 +- extensions/Interwiki/composer.json | 12 + extensions/Interwiki/extension.json | 7 +- extensions/Interwiki/i18n/ast.json | 18 +- extensions/Interwiki/i18n/bn.json | 3 +- extensions/Interwiki/i18n/ce.json | 2 +- extensions/Interwiki/i18n/de.json | 2 +- extensions/Interwiki/i18n/el.json | 5 +- extensions/Interwiki/i18n/en.json | 138 +- extensions/Interwiki/i18n/es.json | 8 +- extensions/Interwiki/i18n/fa.json | 1 + extensions/Interwiki/i18n/fi.json | 20 +- extensions/Interwiki/i18n/fy.json | 3 + extensions/Interwiki/i18n/it.json | 2 +- extensions/Interwiki/i18n/ja.json | 14 +- extensions/Interwiki/i18n/ka.json | 2 +- extensions/Interwiki/i18n/km.json | 6 +- extensions/Interwiki/i18n/ko.json | 42 +- extensions/Interwiki/i18n/ksh.json | 10 +- extensions/Interwiki/i18n/lt.json | 2 +- extensions/Interwiki/i18n/mg.json | 1 + extensions/Interwiki/i18n/mk.json | 2 +- extensions/Interwiki/i18n/ml.json | 14 +- extensions/Interwiki/i18n/mr.json | 18 +- extensions/Interwiki/i18n/nap.json | 3 + extensions/Interwiki/i18n/nl.json | 28 +- extensions/Interwiki/i18n/pl.json | 7 +- extensions/Interwiki/i18n/ps.json | 4 +- extensions/Interwiki/i18n/pt.json | 7 +- extensions/Interwiki/i18n/ru.json | 2 +- extensions/Interwiki/i18n/scn.json | 16 +- extensions/Interwiki/i18n/sr-el.json | 2 +- extensions/Interwiki/i18n/sw.json | 4 +- extensions/Interwiki/i18n/uk.json | 2 +- extensions/Interwiki/i18n/vi.json | 2 +- extensions/Interwiki/i18n/zh-hans.json | 8 +- extensions/Interwiki/phpcs.xml | 8 + extensions/LocalisationUpdate/Autoload.php | 35 +- extensions/LocalisationUpdate/Gruntfile.js | 19 + .../LocalisationUpdate/LocalisationUpdate.php | 21 +- extensions/LocalisationUpdate/composer.json | 47 + extensions/LocalisationUpdate/extension.json | 4 +- extensions/Nuke/Gruntfile.js | 28 + extensions/Nuke/Nuke.alias.php | 13 +- extensions/Nuke/Nuke.hooks.php | 1 + extensions/Nuke/Nuke.php | 2 + extensions/Nuke/Nuke_body.php | 71 +- extensions/Nuke/SpecialNuke.php | 2 +- extensions/Nuke/composer.json | 12 + extensions/Nuke/extension.json | 4 +- extensions/Nuke/i18n/ar.json | 8 +- extensions/Nuke/i18n/ast.json | 1 + extensions/Nuke/i18n/ce.json | 7 +- extensions/Nuke/i18n/de.json | 2 +- extensions/Nuke/i18n/en.json | 64 +- extensions/Nuke/i18n/es.json | 9 +- extensions/Nuke/i18n/eu.json | 3 +- extensions/Nuke/i18n/fi.json | 1 + extensions/Nuke/i18n/fr.json | 1 + extensions/Nuke/i18n/gsw.json | 5 +- extensions/Nuke/i18n/id.json | 12 +- extensions/Nuke/i18n/ilo.json | 1 + extensions/Nuke/i18n/jut.json | 11 +- extensions/Nuke/i18n/jv.json | 6 +- extensions/Nuke/i18n/kk-cyrl.json | 1 + extensions/Nuke/i18n/krc.json | 3 +- extensions/Nuke/i18n/ksh.json | 8 +- extensions/Nuke/i18n/ml.json | 1 + extensions/Nuke/i18n/nb.json | 4 +- extensions/Nuke/i18n/nl.json | 2 +- extensions/Nuke/i18n/pt-br.json | 8 +- extensions/Nuke/i18n/ru.json | 2 +- extensions/Nuke/i18n/sa.json | 10 + extensions/Nuke/i18n/scn.json | 12 +- extensions/Nuke/i18n/sr-ec.json | 6 +- extensions/Nuke/i18n/sr-el.json | 4 +- extensions/Nuke/i18n/uk.json | 7 +- extensions/Nuke/i18n/uz.json | 10 + extensions/Nuke/i18n/vi.json | 1 + extensions/Nuke/i18n/zh-hant.json | 5 +- extensions/Nuke/phpcs.xml | 8 + extensions/ParserFunctions/Gruntfile.js | 25 + .../ParserFunctions/ParserFunctions.i18n.magic.php | 33 +- extensions/ParserFunctions/composer.json | 10 + extensions/ParserFunctions/extension.json | 4 +- extensions/ParserFunctions/i18n/ady-cyrl.json | 13 + extensions/ParserFunctions/i18n/af.json | 5 +- extensions/ParserFunctions/i18n/ast.json | 2 +- extensions/ParserFunctions/i18n/av.json | 8 + extensions/ParserFunctions/i18n/awa.json | 11 + extensions/ParserFunctions/i18n/be.json | 11 + extensions/ParserFunctions/i18n/bho.json | 11 + extensions/ParserFunctions/i18n/ckb.json | 8 + extensions/ParserFunctions/i18n/da.json | 5 +- extensions/ParserFunctions/i18n/dty.json | 12 + extensions/ParserFunctions/i18n/ee.json | 8 + extensions/ParserFunctions/i18n/el.json | 2 +- extensions/ParserFunctions/i18n/es.json | 32 +- extensions/ParserFunctions/i18n/fo.json | 11 + extensions/ParserFunctions/i18n/gd.json | 10 + extensions/ParserFunctions/i18n/gom-latn.json | 11 + extensions/ParserFunctions/i18n/gu.json | 12 + extensions/ParserFunctions/i18n/he.json | 4 +- extensions/ParserFunctions/i18n/ht.json | 8 + extensions/ParserFunctions/i18n/hy.json | 11 + extensions/ParserFunctions/i18n/khw.json | 11 + extensions/ParserFunctions/i18n/kk-cyrl.json | 10 +- extensions/ParserFunctions/i18n/krc.json | 11 + extensions/ParserFunctions/i18n/lt.json | 21 +- extensions/ParserFunctions/i18n/luz.json | 11 + extensions/ParserFunctions/i18n/mg.json | 11 + extensions/ParserFunctions/i18n/mt.json | 11 + extensions/ParserFunctions/i18n/mzn.json | 11 + extensions/ParserFunctions/i18n/nan.json | 9 + extensions/ParserFunctions/i18n/nap.json | 19 +- extensions/ParserFunctions/i18n/nds-nl.json | 11 + extensions/ParserFunctions/i18n/olo.json | 12 + extensions/ParserFunctions/i18n/pa.json | 11 + extensions/ParserFunctions/i18n/pnb.json | 6 +- extensions/ParserFunctions/i18n/ro.json | 5 +- extensions/ParserFunctions/i18n/sco.json | 11 + extensions/ParserFunctions/i18n/si.json | 5 +- extensions/ParserFunctions/i18n/szl.json | 1 + extensions/ParserFunctions/i18n/th.json | 6 +- extensions/ParserFunctions/i18n/tt-cyrl.json | 11 + extensions/ParserFunctions/i18n/vro.json | 11 + extensions/ParserFunctions/i18n/war.json | 8 + extensions/ParserFunctions/i18n/wo.json | 9 + extensions/ParserFunctions/i18n/wuu.json | 11 + extensions/ParserFunctions/i18n/xmf.json | 11 + extensions/ParserFunctions/i18n/yo.json | 3 + extensions/PdfHandler/Gruntfile.js | 19 + extensions/PdfHandler/PdfHandler.image.php | 4 +- extensions/PdfHandler/PdfHandler_body.php | 13 +- extensions/PdfHandler/Rakefile | 14 + extensions/PdfHandler/composer.json | 10 + extensions/PdfHandler/extension.json | 3 +- extensions/PdfHandler/i18n/ast.json | 4 + extensions/PdfHandler/i18n/cs.json | 4 + extensions/PdfHandler/i18n/es.json | 4 +- extensions/PdfHandler/i18n/fr.json | 7 +- extensions/PdfHandler/i18n/gl.json | 8 +- extensions/PdfHandler/i18n/gu.json | 6 +- extensions/PdfHandler/i18n/hi.json | 6 +- extensions/PdfHandler/i18n/hu.json | 7 +- extensions/PdfHandler/i18n/it.json | 4 +- extensions/PdfHandler/i18n/kk-cyrl.json | 11 + extensions/PdfHandler/i18n/ksh.json | 4 +- extensions/PdfHandler/i18n/lt.json | 13 +- extensions/PdfHandler/i18n/ml.json | 4 + extensions/PdfHandler/i18n/nap.json | 18 + extensions/PdfHandler/i18n/nb.json | 7 +- extensions/PdfHandler/i18n/ne.json | 8 + extensions/PdfHandler/i18n/nl.json | 4 +- extensions/PdfHandler/i18n/olo.json | 9 + extensions/PdfHandler/i18n/qqq.json | 4 + extensions/PdfHandler/i18n/roa-tara.json | 4 + extensions/PdfHandler/i18n/ru.json | 6 +- extensions/PdfHandler/i18n/sa.json | 6 +- extensions/PdfHandler/i18n/tr.json | 10 +- extensions/PdfHandler/i18n/uk.json | 7 +- extensions/PdfHandler/i18n/vi.json | 4 + extensions/PdfHandler/i18n/zh-hans.json | 2 +- extensions/PdfHandler/i18n/zh-hant.json | 4 + extensions/Poem/Gruntfile.js | 19 + extensions/Poem/LICENSE | 121 + extensions/Poem/composer.json | 10 + extensions/Poem/extension.json | 4 +- extensions/Renameuser/Gruntfile.js | 25 + extensions/Renameuser/RenameUserJob.php | 12 +- extensions/Renameuser/Renameuser.alias.php | 9 +- extensions/Renameuser/Renameuser.hooks.php | 9 +- extensions/Renameuser/Renameuser.php | 2 + extensions/Renameuser/RenameuserLogFormatter.php | 3 +- extensions/Renameuser/RenameuserSQL.php | 74 +- extensions/Renameuser/SpecialRenameuser.php | 9 - extensions/Renameuser/cleanupArchiveUserText.php | 11 +- extensions/Renameuser/composer.json | 12 + extensions/Renameuser/extension.json | 6 +- extensions/Renameuser/i18n/azb.json | 7 +- extensions/Renameuser/i18n/bn.json | 4 +- extensions/Renameuser/i18n/bs.json | 15 +- extensions/Renameuser/i18n/ce.json | 16 +- extensions/Renameuser/i18n/cv.json | 6 +- extensions/Renameuser/i18n/de.json | 5 +- extensions/Renameuser/i18n/en.json | 72 +- extensions/Renameuser/i18n/eo.json | 12 +- extensions/Renameuser/i18n/es.json | 31 +- extensions/Renameuser/i18n/fa.json | 2 +- extensions/Renameuser/i18n/fy.json | 4 +- extensions/Renameuser/i18n/he.json | 2 +- extensions/Renameuser/i18n/id.json | 4 +- extensions/Renameuser/i18n/ilo.json | 6 +- extensions/Renameuser/i18n/jut.json | 37 +- extensions/Renameuser/i18n/kk-cyrl.json | 4 +- extensions/Renameuser/i18n/ko.json | 2 +- extensions/Renameuser/i18n/krc.json | 31 +- extensions/Renameuser/i18n/ksh.json | 16 +- extensions/Renameuser/i18n/ku-latn.json | 5 +- extensions/Renameuser/i18n/ne.json | 8 +- extensions/Renameuser/i18n/nn.json | 12 +- extensions/Renameuser/i18n/ro.json | 1 + extensions/Renameuser/i18n/sa.json | 9 +- extensions/Renameuser/i18n/scn.json | 5 +- extensions/Renameuser/i18n/sq.json | 8 +- extensions/Renameuser/i18n/yi.json | 3 + extensions/Renameuser/phpcs.xml | 8 + extensions/Renameuser/renameUserCleanup.php | 174 +- .../Renameuser/specials/SpecialRenameuser.php | 217 +- extensions/SpamBlacklist/BaseBlacklist.php | 118 +- extensions/SpamBlacklist/EmailBlacklist.php | 9 + extensions/SpamBlacklist/Gruntfile.js | 25 + extensions/SpamBlacklist/SpamBlacklistHooks.php | 7 +- extensions/SpamBlacklist/composer.json | 10 + extensions/SpamBlacklist/extension.json | 3 +- extensions/SpamBlacklist/i18n/ast.json | 5 +- extensions/SpamBlacklist/i18n/be-tarask.json | 6 +- extensions/SpamBlacklist/i18n/bs.json | 5 +- extensions/SpamBlacklist/i18n/ce.json | 2 +- extensions/SpamBlacklist/i18n/de.json | 5 +- extensions/SpamBlacklist/i18n/et.json | 5 +- extensions/SpamBlacklist/i18n/fr.json | 5 +- extensions/SpamBlacklist/i18n/gl.json | 8 +- extensions/SpamBlacklist/i18n/kk-cyrl.json | 7 +- extensions/SpamBlacklist/i18n/ksh.json | 2 +- extensions/SpamBlacklist/i18n/lt.json | 24 + extensions/SpamBlacklist/i18n/ml.json | 5 +- extensions/SpamBlacklist/i18n/nap.json | 24 + extensions/SpamBlacklist/i18n/or.json | 2 +- extensions/SpamBlacklist/i18n/pt.json | 5 +- extensions/SpamBlacklist/i18n/ru.json | 4 +- extensions/SpamBlacklist/i18n/sa.json | 9 +- extensions/SpamBlacklist/i18n/scn.json | 6 +- extensions/SpamBlacklist/i18n/tr.json | 17 +- extensions/SpamBlacklist/i18n/uk.json | 10 +- extensions/SpamBlacklist/i18n/zh-hans.json | 2 +- extensions/SyntaxHighlight_GeSHi/.csslintrc | 13 + extensions/SyntaxHighlight_GeSHi/Gruntfile.js | 60 + extensions/SyntaxHighlight_GeSHi/README | 50 +- .../ResourceLoaderGeSHiLocalModule.php | 37 - .../ResourceLoaderGeSHiModule.php | 79 - .../ResourceLoaderGeSHiVisualEditorModule.php | 58 + .../SyntaxHighlight_GeSHi.class.php | 698 +-- .../SyntaxHighlight_GeSHi.compat.php | 135 + .../SyntaxHighlight_GeSHi.langs.php | 236 - .../SyntaxHighlight_GeSHi.lexers.php | 577 ++ .../SyntaxHighlight_GeSHi.php | 3 +- extensions/SyntaxHighlight_GeSHi/composer.json | 39 + extensions/SyntaxHighlight_GeSHi/extension.json | 82 +- extensions/SyntaxHighlight_GeSHi/geshi/docs/BUGS | 29 - .../SyntaxHighlight_GeSHi/geshi/docs/CHANGES | 976 ---- .../SyntaxHighlight_GeSHi/geshi/docs/COPYING | 339 -- extensions/SyntaxHighlight_GeSHi/geshi/docs/README | 33 - extensions/SyntaxHighlight_GeSHi/geshi/docs/THANKS | 268 - extensions/SyntaxHighlight_GeSHi/geshi/docs/TODO | 71 - .../__filesource/fsource_geshi_core_geshi.php.html | 4616 --------------- .../geshi/docs/api/blank.html | 13 - .../geshi/docs/api/classtrees_geshi.html | 24 - .../geshi/docs/api/elementindex.html | 867 --- .../geshi/docs/api/elementindex_geshi.html | 864 --- .../geshi/docs/api/errors.html | 20 - .../geshi/docs/api/geshi/core/GeSHi.html | 2676 --------- .../geshi/docs/api/geshi/core/_geshi.php.html | 478 -- .../geshi/docs/api/index.html | 24 - .../geshi/docs/api/li_geshi.html | 46 - .../geshi/docs/api/media/banner.css | 33 - .../geshi/docs/api/media/images/AbstractClass.png | Bin 459 -> 0 bytes .../docs/api/media/images/AbstractClass_logo.png | Bin 1010 -> 0 bytes .../geshi/docs/api/media/images/AbstractMethod.png | Bin 566 -> 0 bytes .../docs/api/media/images/AbstractPrivateClass.png | Bin 646 -> 0 bytes .../api/media/images/AbstractPrivateClass_logo.png | Bin 1331 -> 0 bytes .../api/media/images/AbstractPrivateMethod.png | Bin 672 -> 0 bytes .../geshi/docs/api/media/images/Class.png | Bin 438 -> 0 bytes .../geshi/docs/api/media/images/Class_logo.png | Bin 1306 -> 0 bytes .../geshi/docs/api/media/images/Constant.png | Bin 621 -> 0 bytes .../geshi/docs/api/media/images/Constructor.png | Bin 666 -> 0 bytes .../geshi/docs/api/media/images/Destructor.png | Bin 753 -> 0 bytes .../geshi/docs/api/media/images/Function.png | Bin 478 -> 0 bytes .../geshi/docs/api/media/images/Global.png | Bin 580 -> 0 bytes .../geshi/docs/api/media/images/I.png | Bin 111 -> 0 bytes .../geshi/docs/api/media/images/Index.png | Bin 449 -> 0 bytes .../geshi/docs/api/media/images/Interface.png | Bin 457 -> 0 bytes .../geshi/docs/api/media/images/Interface_logo.png | Bin 1306 -> 0 bytes .../geshi/docs/api/media/images/L.png | Bin 118 -> 0 bytes .../geshi/docs/api/media/images/Lminus.png | Bin 133 -> 0 bytes .../geshi/docs/api/media/images/Lplus.png | Bin 139 -> 0 bytes .../geshi/docs/api/media/images/Method.png | Bin 528 -> 0 bytes .../geshi/docs/api/media/images/Page.png | Bin 460 -> 0 bytes .../geshi/docs/api/media/images/Page_logo.png | Bin 1102 -> 0 bytes .../geshi/docs/api/media/images/PrivateClass.png | Bin 645 -> 0 bytes .../docs/api/media/images/PrivateClass_logo.png | Bin 1511 -> 0 bytes .../geshi/docs/api/media/images/PrivateMethod.png | Bin 710 -> 0 bytes .../docs/api/media/images/PrivateVariable.png | Bin 641 -> 0 bytes .../geshi/docs/api/media/images/StaticMethod.png | Bin 528 -> 0 bytes .../geshi/docs/api/media/images/StaticVariable.png | Bin 564 -> 0 bytes .../geshi/docs/api/media/images/T.png | Bin 119 -> 0 bytes .../geshi/docs/api/media/images/Tminus.png | Bin 135 -> 0 bytes .../geshi/docs/api/media/images/Tplus.png | Bin 140 -> 0 bytes .../geshi/docs/api/media/images/Variable.png | Bin 564 -> 0 bytes .../geshi/docs/api/media/images/blank.png | Bin 105 -> 0 bytes .../geshi/docs/api/media/images/class_folder.png | Bin 497 -> 0 bytes .../geshi/docs/api/media/images/empty.png | Bin 90 -> 0 bytes .../geshi/docs/api/media/images/file.png | Bin 218 -> 0 bytes .../geshi/docs/api/media/images/folder.png | Bin 367 -> 0 bytes .../docs/api/media/images/function_folder.png | Bin 476 -> 0 bytes .../geshi/docs/api/media/images/next_button.png | Bin 509 -> 0 bytes .../docs/api/media/images/next_button_disabled.png | Bin 405 -> 0 bytes .../geshi/docs/api/media/images/package.png | Bin 515 -> 0 bytes .../geshi/docs/api/media/images/package_folder.png | Bin 419 -> 0 bytes .../docs/api/media/images/previous_button.png | Bin 505 -> 0 bytes .../api/media/images/previous_button_disabled.png | Bin 405 -> 0 bytes .../docs/api/media/images/private_class_logo.png | Bin 1511 -> 0 bytes .../geshi/docs/api/media/images/tutorial.png | Bin 301 -> 0 bytes .../docs/api/media/images/tutorial_folder.png | Bin 425 -> 0 bytes .../geshi/docs/api/media/images/up_button.png | Bin 527 -> 0 bytes .../geshi/docs/api/media/stylesheet.css | 146 - .../geshi/docs/api/packages.html | 29 - .../geshi/docs/api/todolist.html | 42 - .../geshi/docs/geshi-doc.html | 4077 ------------- .../SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt | 1741 ------ .../SyntaxHighlight_GeSHi/geshi/docs/phpdoc.ini | 90 - extensions/SyntaxHighlight_GeSHi/geshi/geshi.php | 4788 --------------- .../SyntaxHighlight_GeSHi/geshi/geshi/4cs.php | 137 - .../SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php | 228 - .../geshi/geshi/6502kickass.php | 239 - .../SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php | 187 - .../geshi/geshi/68000devpac.php | 166 - .../SyntaxHighlight_GeSHi/geshi/geshi/abap.php | 1407 ----- .../geshi/geshi/actionscript.php | 195 - .../geshi/geshi/actionscript3.php | 471 -- .../SyntaxHighlight_GeSHi/geshi/geshi/ada.php | 130 - .../SyntaxHighlight_GeSHi/geshi/geshi/aimms.php | 316 - .../SyntaxHighlight_GeSHi/geshi/geshi/algol68.php | 328 -- .../SyntaxHighlight_GeSHi/geshi/geshi/apache.php | 481 -- .../geshi/geshi/applescript.php | 155 - .../geshi/geshi/apt_sources.php | 153 - .../SyntaxHighlight_GeSHi/geshi/geshi/arm.php | 3316 ----------- .../SyntaxHighlight_GeSHi/geshi/geshi/asm.php | 601 -- .../SyntaxHighlight_GeSHi/geshi/geshi/asp.php | 162 - .../geshi/geshi/asymptote.php | 192 - .../SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php | 510 -- .../geshi/geshi/autohotkey.php | 371 -- .../SyntaxHighlight_GeSHi/geshi/geshi/autoit.php | 1173 ---- .../SyntaxHighlight_GeSHi/geshi/geshi/avisynth.php | 193 - .../SyntaxHighlight_GeSHi/geshi/geshi/awk.php | 156 - .../geshi/geshi/bascomavr.php | 183 - .../SyntaxHighlight_GeSHi/geshi/geshi/bash.php | 472 -- .../SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php | 339 -- .../SyntaxHighlight_GeSHi/geshi/geshi/bf.php | 113 - .../SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php | 181 - .../geshi/geshi/blitzbasic.php | 183 - .../SyntaxHighlight_GeSHi/geshi/geshi/bnf.php | 117 - .../SyntaxHighlight_GeSHi/geshi/geshi/boo.php | 215 - extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php | 279 - .../geshi/geshi/c_loadrunner.php | 321 - .../SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php | 225 - .../SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php | 870 --- .../SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php | 124 - .../SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php | 184 - .../SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php | 122 - .../SyntaxHighlight_GeSHi/geshi/geshi/cfm.php | 297 - .../geshi/geshi/chaiscript.php | 138 - .../SyntaxHighlight_GeSHi/geshi/geshi/chapel.php | 169 - .../SyntaxHighlight_GeSHi/geshi/geshi/cil.php | 194 - .../SyntaxHighlight_GeSHi/geshi/geshi/clojure.php | 132 - .../SyntaxHighlight_GeSHi/geshi/geshi/cmake.php | 179 - .../SyntaxHighlight_GeSHi/geshi/geshi/cobol.php | 457 -- .../geshi/geshi/coffeescript.php | 144 - .../SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php | 568 -- .../geshi/geshi/cpp-winapi.php | 836 --- .../SyntaxHighlight_GeSHi/geshi/geshi/cpp.php | 244 - .../SyntaxHighlight_GeSHi/geshi/geshi/csharp.php | 254 - .../SyntaxHighlight_GeSHi/geshi/geshi/css.php | 346 -- .../SyntaxHighlight_GeSHi/geshi/geshi/cuesheet.php | 136 - extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php | 250 - .../SyntaxHighlight_GeSHi/geshi/geshi/dart.php | 159 - .../SyntaxHighlight_GeSHi/geshi/geshi/dcl.php | 190 - .../SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php | 129 - .../SyntaxHighlight_GeSHi/geshi/geshi/dcs.php | 180 - .../SyntaxHighlight_GeSHi/geshi/geshi/delphi.php | 299 - .../SyntaxHighlight_GeSHi/geshi/geshi/diff.php | 194 - .../SyntaxHighlight_GeSHi/geshi/geshi/div.php | 124 - .../SyntaxHighlight_GeSHi/geshi/geshi/dos.php | 225 - .../SyntaxHighlight_GeSHi/geshi/geshi/dot.php | 162 - extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php | 206 - .../geshi/geshi/ecmascript.php | 208 - .../SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php | 393 -- .../SyntaxHighlight_GeSHi/geshi/geshi/email.php | 220 - .../SyntaxHighlight_GeSHi/geshi/geshi/epc.php | 152 - .../SyntaxHighlight_GeSHi/geshi/geshi/erlang.php | 439 -- .../SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php | 138 - .../SyntaxHighlight_GeSHi/geshi/geshi/ezt.php | 134 - .../SyntaxHighlight_GeSHi/geshi/geshi/f1.php | 149 - .../SyntaxHighlight_GeSHi/geshi/geshi/falcon.php | 217 - .../SyntaxHighlight_GeSHi/geshi/geshi/fo.php | 326 -- .../SyntaxHighlight_GeSHi/geshi/geshi/fortran.php | 158 - .../geshi/geshi/freebasic.php | 139 - .../geshi/geshi/freeswitch.php | 166 - .../SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php | 211 - .../SyntaxHighlight_GeSHi/geshi/geshi/gambas.php | 212 - .../SyntaxHighlight_GeSHi/geshi/geshi/gdb.php | 194 - .../SyntaxHighlight_GeSHi/geshi/geshi/genero.php | 461 -- .../SyntaxHighlight_GeSHi/geshi/geshi/genie.php | 155 - .../SyntaxHighlight_GeSHi/geshi/geshi/gettext.php | 95 - .../SyntaxHighlight_GeSHi/geshi/geshi/glsl.php | 203 - .../SyntaxHighlight_GeSHi/geshi/geshi/gml.php | 367 -- .../SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php | 294 - .../SyntaxHighlight_GeSHi/geshi/geshi/go.php | 373 -- .../SyntaxHighlight_GeSHi/geshi/geshi/groovy.php | 1009 ---- .../SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php | 151 - .../SyntaxHighlight_GeSHi/geshi/geshi/haskell.php | 204 - .../SyntaxHighlight_GeSHi/geshi/geshi/haxe.php | 158 - .../SyntaxHighlight_GeSHi/geshi/geshi/hicest.php | 106 - .../SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php | 102 - .../geshi/geshi/html4strict.php | 188 - .../SyntaxHighlight_GeSHi/geshi/geshi/html5.php | 210 - .../SyntaxHighlight_GeSHi/geshi/geshi/icon.php | 210 - .../SyntaxHighlight_GeSHi/geshi/geshi/idl.php | 121 - .../SyntaxHighlight_GeSHi/geshi/geshi/ini.php | 127 - .../SyntaxHighlight_GeSHi/geshi/geshi/inno.php | 210 - .../SyntaxHighlight_GeSHi/geshi/geshi/intercal.php | 120 - .../SyntaxHighlight_GeSHi/geshi/geshi/io.php | 136 - .../geshi/geshi/ispfpanel.php | 165 - extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php | 188 - .../SyntaxHighlight_GeSHi/geshi/geshi/java.php | 980 ---- .../SyntaxHighlight_GeSHi/geshi/geshi/java5.php | 1035 ---- .../geshi/geshi/javascript.php | 172 - .../SyntaxHighlight_GeSHi/geshi/geshi/jcl.php | 155 - .../SyntaxHighlight_GeSHi/geshi/geshi/jquery.php | 236 - .../SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php | 327 -- .../SyntaxHighlight_GeSHi/geshi/geshi/klonec.php | 280 - .../SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php | 308 - .../SyntaxHighlight_GeSHi/geshi/geshi/latex.php | 221 - .../SyntaxHighlight_GeSHi/geshi/geshi/lb.php | 160 - .../SyntaxHighlight_GeSHi/geshi/geshi/ldif.php | 114 - .../SyntaxHighlight_GeSHi/geshi/geshi/lisp.php | 147 - .../SyntaxHighlight_GeSHi/geshi/geshi/llvm.php | 383 -- .../geshi/geshi/locobasic.php | 128 - .../SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php | 343 -- .../SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php | 159 - .../geshi/geshi/lotusformulas.php | 316 - .../geshi/geshi/lotusscript.php | 189 - .../SyntaxHighlight_GeSHi/geshi/geshi/lscript.php | 385 -- .../SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php | 1276 ---- .../SyntaxHighlight_GeSHi/geshi/geshi/lua.php | 182 - .../SyntaxHighlight_GeSHi/geshi/geshi/m68k.php | 141 - .../SyntaxHighlight_GeSHi/geshi/geshi/magiksf.php | 191 - .../SyntaxHighlight_GeSHi/geshi/geshi/make.php | 149 - .../SyntaxHighlight_GeSHi/geshi/geshi/mapbasic.php | 906 --- .../SyntaxHighlight_GeSHi/geshi/geshi/matlab.php | 225 - .../SyntaxHighlight_GeSHi/geshi/geshi/mirc.php | 169 - .../SyntaxHighlight_GeSHi/geshi/geshi/mmix.php | 191 - .../SyntaxHighlight_GeSHi/geshi/geshi/modula2.php | 134 - .../SyntaxHighlight_GeSHi/geshi/geshi/modula3.php | 133 - .../SyntaxHighlight_GeSHi/geshi/geshi/mpasm.php | 162 - .../SyntaxHighlight_GeSHi/geshi/geshi/mxml.php | 143 - .../SyntaxHighlight_GeSHi/geshi/geshi/mysql.php | 472 -- .../SyntaxHighlight_GeSHi/geshi/geshi/nagios.php | 223 - .../SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php | 161 - .../SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php | 189 - .../SyntaxHighlight_GeSHi/geshi/geshi/nginx.php | 868 --- .../SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php | 201 - .../SyntaxHighlight_GeSHi/geshi/geshi/nsis.php | 351 -- .../SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php | 133 - .../SyntaxHighlight_GeSHi/geshi/geshi/objc.php | 356 -- .../SyntaxHighlight_GeSHi/geshi/geshi/objeck.php | 114 - .../geshi/geshi/ocaml-brief.php | 110 - .../SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php | 185 - .../SyntaxHighlight_GeSHi/geshi/geshi/octave.php | 513 -- .../SyntaxHighlight_GeSHi/geshi/geshi/oobas.php | 133 - .../SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php | 169 - .../SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php | 612 -- .../SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php | 494 -- .../SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php | 155 - .../SyntaxHighlight_GeSHi/geshi/geshi/oz.php | 142 - .../SyntaxHighlight_GeSHi/geshi/geshi/parasail.php | 128 - .../SyntaxHighlight_GeSHi/geshi/geshi/parigp.php | 293 - .../SyntaxHighlight_GeSHi/geshi/geshi/pascal.php | 163 - .../SyntaxHighlight_GeSHi/geshi/geshi/pcre.php | 186 - .../SyntaxHighlight_GeSHi/geshi/geshi/per.php | 300 - .../SyntaxHighlight_GeSHi/geshi/geshi/perl.php | 211 - .../SyntaxHighlight_GeSHi/geshi/geshi/perl6.php | 195 - .../SyntaxHighlight_GeSHi/geshi/geshi/pf.php | 176 - .../geshi/geshi/php-brief.php | 220 - .../SyntaxHighlight_GeSHi/geshi/geshi/php.php | 1115 ---- .../SyntaxHighlight_GeSHi/geshi/geshi/pic16.php | 139 - .../SyntaxHighlight_GeSHi/geshi/geshi/pike.php | 101 - .../geshi/geshi/pixelbender.php | 173 - .../SyntaxHighlight_GeSHi/geshi/geshi/pli.php | 198 - .../SyntaxHighlight_GeSHi/geshi/geshi/plsql.php | 254 - .../geshi/geshi/postgresql.php | 285 - .../geshi/geshi/postscript.php | 217 - .../SyntaxHighlight_GeSHi/geshi/geshi/povray.php | 198 - .../geshi/geshi/powerbuilder.php | 416 -- .../geshi/geshi/powershell.php | 275 - .../SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php | 372 -- .../SyntaxHighlight_GeSHi/geshi/geshi/progress.php | 483 -- .../SyntaxHighlight_GeSHi/geshi/geshi/prolog.php | 141 - .../geshi/geshi/properties.php | 125 - .../SyntaxHighlight_GeSHi/geshi/geshi/providex.php | 297 - .../geshi/geshi/purebasic.php | 301 - .../SyntaxHighlight_GeSHi/geshi/geshi/pycon.php | 62 - .../SyntaxHighlight_GeSHi/geshi/geshi/pys60.php | 271 - .../SyntaxHighlight_GeSHi/geshi/geshi/python.php | 242 - extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php | 147 - .../SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php | 160 - .../SyntaxHighlight_GeSHi/geshi/geshi/qml.php | 351 -- .../SyntaxHighlight_GeSHi/geshi/geshi/racket.php | 964 ---- .../SyntaxHighlight_GeSHi/geshi/geshi/rails.php | 404 -- .../SyntaxHighlight_GeSHi/geshi/geshi/rbs.php | 224 - .../SyntaxHighlight_GeSHi/geshi/geshi/rebol.php | 194 - .../SyntaxHighlight_GeSHi/geshi/geshi/reg.php | 231 - .../SyntaxHighlight_GeSHi/geshi/geshi/rexx.php | 160 - .../SyntaxHighlight_GeSHi/geshi/geshi/robots.php | 98 - .../SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php | 131 - .../SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php | 481 -- .../SyntaxHighlight_GeSHi/geshi/geshi/ruby.php | 229 - .../SyntaxHighlight_GeSHi/geshi/geshi/rust.php | 235 - .../SyntaxHighlight_GeSHi/geshi/geshi/sas.php | 288 - .../SyntaxHighlight_GeSHi/geshi/geshi/scala.php | 136 - .../SyntaxHighlight_GeSHi/geshi/geshi/scheme.php | 168 - .../SyntaxHighlight_GeSHi/geshi/geshi/scilab.php | 293 - .../SyntaxHighlight_GeSHi/geshi/geshi/scl.php | 148 - .../SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php | 163 - .../geshi/geshi/smalltalk.php | 152 - .../SyntaxHighlight_GeSHi/geshi/geshi/smarty.php | 190 - .../SyntaxHighlight_GeSHi/geshi/geshi/spark.php | 127 - .../SyntaxHighlight_GeSHi/geshi/geshi/sparql.php | 153 - .../SyntaxHighlight_GeSHi/geshi/geshi/sql.php | 168 - .../geshi/geshi/standardml.php | 216 - .../geshi/geshi/stonescript.php | 305 - .../geshi/geshi/systemverilog.php | 315 - .../SyntaxHighlight_GeSHi/geshi/geshi/tcl.php | 192 - .../SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php | 352 -- .../SyntaxHighlight_GeSHi/geshi/geshi/text.php | 82 - .../geshi/geshi/thinbasic.php | 866 --- .../SyntaxHighlight_GeSHi/geshi/geshi/tsql.php | 379 -- .../geshi/geshi/typoscript.php | 298 - .../SyntaxHighlight_GeSHi/geshi/geshi/unicon.php | 208 - .../SyntaxHighlight_GeSHi/geshi/geshi/upc.php | 268 - .../SyntaxHighlight_GeSHi/geshi/geshi/urbi.php | 198 - .../SyntaxHighlight_GeSHi/geshi/geshi/uscript.php | 297 - .../SyntaxHighlight_GeSHi/geshi/geshi/vala.php | 149 - .../SyntaxHighlight_GeSHi/geshi/geshi/vb.php | 155 - .../SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php | 180 - .../SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php | 153 - .../SyntaxHighlight_GeSHi/geshi/geshi/vedit.php | 101 - .../SyntaxHighlight_GeSHi/geshi/geshi/verilog.php | 193 - .../SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php | 181 - .../SyntaxHighlight_GeSHi/geshi/geshi/vim.php | 418 -- .../geshi/geshi/visualfoxpro.php | 454 -- .../geshi/geshi/visualprolog.php | 127 - .../geshi/geshi/whitespace.php | 119 - .../SyntaxHighlight_GeSHi/geshi/geshi/whois.php | 178 - .../SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php | 367 -- .../SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php | 141 - .../SyntaxHighlight_GeSHi/geshi/geshi/xml.php | 155 - .../geshi/geshi/xorg_conf.php | 122 - .../SyntaxHighlight_GeSHi/geshi/geshi/xpp.php | 434 -- .../SyntaxHighlight_GeSHi/geshi/geshi/yaml.php | 148 - .../SyntaxHighlight_GeSHi/geshi/geshi/z80.php | 142 - .../SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php | 148 - .../SyntaxHighlight_GeSHi/i18n/ady-cyrl.json | 10 + extensions/SyntaxHighlight_GeSHi/i18n/af.json | 9 +- extensions/SyntaxHighlight_GeSHi/i18n/an.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/ar.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/arz.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/as.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/ast.json | 20 +- extensions/SyntaxHighlight_GeSHi/i18n/az.json | 8 + extensions/SyntaxHighlight_GeSHi/i18n/ba.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/bcc.json | 7 +- .../SyntaxHighlight_GeSHi/i18n/be-tarask.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/bg.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/bn.json | 16 +- extensions/SyntaxHighlight_GeSHi/i18n/br.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/bs.json | 12 +- extensions/SyntaxHighlight_GeSHi/i18n/ca.json | 16 +- extensions/SyntaxHighlight_GeSHi/i18n/ce.json | 8 +- extensions/SyntaxHighlight_GeSHi/i18n/ckb.json | 8 + extensions/SyntaxHighlight_GeSHi/i18n/cs.json | 20 +- extensions/SyntaxHighlight_GeSHi/i18n/da.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/de.json | 20 +- extensions/SyntaxHighlight_GeSHi/i18n/diq.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/dsb.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/el.json | 11 +- extensions/SyntaxHighlight_GeSHi/i18n/en.json | 22 +- extensions/SyntaxHighlight_GeSHi/i18n/eo.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/es.json | 21 +- extensions/SyntaxHighlight_GeSHi/i18n/et.json | 16 +- extensions/SyntaxHighlight_GeSHi/i18n/eu.json | 8 +- extensions/SyntaxHighlight_GeSHi/i18n/fa.json | 13 +- extensions/SyntaxHighlight_GeSHi/i18n/fi.json | 15 +- extensions/SyntaxHighlight_GeSHi/i18n/fr.json | 24 +- extensions/SyntaxHighlight_GeSHi/i18n/frp.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/fur.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/ga.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/gl.json | 21 +- .../SyntaxHighlight_GeSHi/i18n/gom-deva.json | 11 + .../SyntaxHighlight_GeSHi/i18n/gom-latn.json | 11 + extensions/SyntaxHighlight_GeSHi/i18n/grc.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/gsw.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/gu.json | 10 - extensions/SyntaxHighlight_GeSHi/i18n/he.json | 20 +- extensions/SyntaxHighlight_GeSHi/i18n/hi.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/hr.json | 12 +- extensions/SyntaxHighlight_GeSHi/i18n/hsb.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/ht.json | 11 + extensions/SyntaxHighlight_GeSHi/i18n/hu.json | 19 +- extensions/SyntaxHighlight_GeSHi/i18n/ia.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/id.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/ie.json | 5 +- extensions/SyntaxHighlight_GeSHi/i18n/ig.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/ilo.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/io.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/it.json | 13 +- extensions/SyntaxHighlight_GeSHi/i18n/ja.json | 14 +- extensions/SyntaxHighlight_GeSHi/i18n/jut.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/jv.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/ka.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/kk-arab.json | 12 - extensions/SyntaxHighlight_GeSHi/i18n/kk-cyrl.json | 12 - extensions/SyntaxHighlight_GeSHi/i18n/kk-latn.json | 12 - extensions/SyntaxHighlight_GeSHi/i18n/km.json | 4 +- extensions/SyntaxHighlight_GeSHi/i18n/kn.json | 8 + extensions/SyntaxHighlight_GeSHi/i18n/ko.json | 16 +- extensions/SyntaxHighlight_GeSHi/i18n/ksh.json | 17 +- extensions/SyntaxHighlight_GeSHi/i18n/ku-latn.json | 9 + extensions/SyntaxHighlight_GeSHi/i18n/lb.json | 12 +- extensions/SyntaxHighlight_GeSHi/i18n/li.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/lrc.json | 9 + extensions/SyntaxHighlight_GeSHi/i18n/lt.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/lv.json | 2 +- extensions/SyntaxHighlight_GeSHi/i18n/mg.json | 9 - extensions/SyntaxHighlight_GeSHi/i18n/mk.json | 17 +- extensions/SyntaxHighlight_GeSHi/i18n/ml.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/mr.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/ms.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/nah.json | 9 - extensions/SyntaxHighlight_GeSHi/i18n/nb.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/nds-nl.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/nds.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/nl.json | 11 +- extensions/SyntaxHighlight_GeSHi/i18n/nn.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/oc.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/olo.json | 8 + extensions/SyntaxHighlight_GeSHi/i18n/om.json | 8 + extensions/SyntaxHighlight_GeSHi/i18n/os.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/pam.json | 9 + extensions/SyntaxHighlight_GeSHi/i18n/pdc.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/pfl.json | 9 - extensions/SyntaxHighlight_GeSHi/i18n/pl.json | 20 +- extensions/SyntaxHighlight_GeSHi/i18n/pms.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/ps.json | 5 +- extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/pt.json | 17 +- extensions/SyntaxHighlight_GeSHi/i18n/qqq.json | 15 +- extensions/SyntaxHighlight_GeSHi/i18n/qu.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/ro.json | 19 +- .../SyntaxHighlight_GeSHi/i18n/roa-tara.json | 10 +- extensions/SyntaxHighlight_GeSHi/i18n/ru.json | 10 +- extensions/SyntaxHighlight_GeSHi/i18n/rue.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/sah.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/shn.json | 8 + extensions/SyntaxHighlight_GeSHi/i18n/si.json | 13 - extensions/SyntaxHighlight_GeSHi/i18n/sk.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/sl.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/sr-ec.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/sr-el.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/stq.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/su.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/sv.json | 11 +- extensions/SyntaxHighlight_GeSHi/i18n/ta.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/te.json | 9 +- extensions/SyntaxHighlight_GeSHi/i18n/tg-cyrl.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/tg-latn.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/tk.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/tl.json | 7 +- .../SyntaxHighlight_GeSHi/i18n/tokipona.json | 8 + extensions/SyntaxHighlight_GeSHi/i18n/tr.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/uk.json | 22 +- extensions/SyntaxHighlight_GeSHi/i18n/ur.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/vec.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/vep.json | 8 - extensions/SyntaxHighlight_GeSHi/i18n/vi.json | 17 +- extensions/SyntaxHighlight_GeSHi/i18n/vo.json | 12 - extensions/SyntaxHighlight_GeSHi/i18n/yi.json | 10 - extensions/SyntaxHighlight_GeSHi/i18n/yue.json | 7 +- extensions/SyntaxHighlight_GeSHi/i18n/zh-hans.json | 20 +- extensions/SyntaxHighlight_GeSHi/i18n/zh-hant.json | 17 +- .../maintenance/updateCSS.php | 54 + .../maintenance/updateLanguageList.php | 54 - .../maintenance/updateLexerList.php | 60 + .../modules/pygments.generated.css | 64 + .../modules/pygments.wrapper.css | 42 + .../ve.ce.MWSyntaxHighlightNode.css | 11 + .../ve.ce.MWSyntaxHighlightNode.js | 89 + .../ve.dm.MWSyntaxHighlightNode.js | 135 + .../ve.ui.MWSyntaxHighlightInspector.css | 10 + .../ve.ui.MWSyntaxHighlightInspector.js | 163 + .../ve.ui.MWSyntaxHighlightInspectorTool.js | 37 + extensions/SyntaxHighlight_GeSHi/phpcs.xml | 8 + .../pygments/PYGMENTS_LICENSE | 25 + .../pygments/create_pygmentize_bundle | 68 + .../SyntaxHighlight_GeSHi/pygments/pygmentize | Bin 0 -> 673141 bytes .../SyntaxHighlight_GeSHi/tests/parserTests.txt | 156 + extensions/TitleBlacklist/Gruntfile.js | 19 + extensions/TitleBlacklist/TitleBlacklist.hooks.php | 70 +- extensions/TitleBlacklist/TitleBlacklist.list.php | 40 +- extensions/TitleBlacklist/composer.json | 10 + extensions/TitleBlacklist/extension.json | 15 +- extensions/TitleBlacklist/i18n/ar.json | 1 - extensions/TitleBlacklist/i18n/ast.json | 9 +- extensions/TitleBlacklist/i18n/be-tarask.json | 5 +- extensions/TitleBlacklist/i18n/bn.json | 3 +- extensions/TitleBlacklist/i18n/bs.json | 7 +- extensions/TitleBlacklist/i18n/ce.json | 12 +- extensions/TitleBlacklist/i18n/cs.json | 1 - extensions/TitleBlacklist/i18n/de.json | 6 +- extensions/TitleBlacklist/i18n/en.json | 1 - extensions/TitleBlacklist/i18n/es.json | 13 +- extensions/TitleBlacklist/i18n/et.json | 9 +- extensions/TitleBlacklist/i18n/fa.json | 1 - extensions/TitleBlacklist/i18n/fr.json | 9 +- extensions/TitleBlacklist/i18n/gl.json | 17 +- extensions/TitleBlacklist/i18n/gu.json | 5 +- extensions/TitleBlacklist/i18n/he.json | 1 - extensions/TitleBlacklist/i18n/ilo.json | 1 - extensions/TitleBlacklist/i18n/it.json | 1 - extensions/TitleBlacklist/i18n/ja.json | 10 +- extensions/TitleBlacklist/i18n/kk-cyrl.json | 5 +- extensions/TitleBlacklist/i18n/ko.json | 9 +- extensions/TitleBlacklist/i18n/krc.json | 3 +- extensions/TitleBlacklist/i18n/ksh.json | 7 +- extensions/TitleBlacklist/i18n/lt.json | 20 +- extensions/TitleBlacklist/i18n/mk.json | 1 - extensions/TitleBlacklist/i18n/ml.json | 12 +- extensions/TitleBlacklist/i18n/nap.json | 30 + extensions/TitleBlacklist/i18n/nl.json | 5 +- extensions/TitleBlacklist/i18n/oc.json | 1 + extensions/TitleBlacklist/i18n/pt.json | 1 - extensions/TitleBlacklist/i18n/qqq.json | 6 +- extensions/TitleBlacklist/i18n/roa-tara.json | 1 + extensions/TitleBlacklist/i18n/ru.json | 6 +- extensions/TitleBlacklist/i18n/scn.json | 11 + extensions/TitleBlacklist/i18n/sr-ec.json | 5 +- extensions/TitleBlacklist/i18n/sr-el.json | 4 +- extensions/TitleBlacklist/i18n/sv.json | 1 - extensions/TitleBlacklist/i18n/uk.json | 9 +- extensions/TitleBlacklist/i18n/vi.json | 1 - extensions/TitleBlacklist/i18n/yue.json | 5 +- extensions/TitleBlacklist/i18n/zh-hans.json | 1 - extensions/TitleBlacklist/i18n/zh-hant.json | 1 - extensions/WikiEditor/Gruntfile.js | 19 + extensions/WikiEditor/WikiEditor.hooks.php | 43 +- extensions/WikiEditor/composer.json | 5 +- extensions/WikiEditor/extension.json | 35 +- extensions/WikiEditor/i18n/af.json | 8 +- extensions/WikiEditor/i18n/aln.json | 11 +- extensions/WikiEditor/i18n/an.json | 6 +- extensions/WikiEditor/i18n/ar.json | 8 +- extensions/WikiEditor/i18n/arz.json | 6 +- extensions/WikiEditor/i18n/as.json | 14 +- extensions/WikiEditor/i18n/ast.json | 19 +- extensions/WikiEditor/i18n/az.json | 6 +- extensions/WikiEditor/i18n/azb.json | 39 +- extensions/WikiEditor/i18n/ba.json | 6 +- extensions/WikiEditor/i18n/be-tarask.json | 12 +- extensions/WikiEditor/i18n/be.json | 6 +- extensions/WikiEditor/i18n/bg.json | 6 +- extensions/WikiEditor/i18n/bjn.json | 4 +- extensions/WikiEditor/i18n/bn.json | 23 +- extensions/WikiEditor/i18n/bpy.json | 6 +- extensions/WikiEditor/i18n/br.json | 6 +- extensions/WikiEditor/i18n/bs.json | 26 +- extensions/WikiEditor/i18n/ca.json | 7 +- extensions/WikiEditor/i18n/ce.json | 48 +- extensions/WikiEditor/i18n/ckb.json | 8 +- extensions/WikiEditor/i18n/cs.json | 18 +- extensions/WikiEditor/i18n/cy.json | 6 +- extensions/WikiEditor/i18n/da.json | 6 +- extensions/WikiEditor/i18n/de.json | 39 +- extensions/WikiEditor/i18n/diq.json | 6 +- extensions/WikiEditor/i18n/dsb.json | 6 +- extensions/WikiEditor/i18n/el.json | 9 +- extensions/WikiEditor/i18n/en.json | 20 +- extensions/WikiEditor/i18n/eo.json | 7 +- extensions/WikiEditor/i18n/es.json | 41 +- extensions/WikiEditor/i18n/et.json | 42 +- extensions/WikiEditor/i18n/eu.json | 15 +- extensions/WikiEditor/i18n/fa.json | 31 +- extensions/WikiEditor/i18n/fi.json | 7 +- extensions/WikiEditor/i18n/fr.json | 30 +- extensions/WikiEditor/i18n/frp.json | 6 +- extensions/WikiEditor/i18n/fy.json | 1 + extensions/WikiEditor/i18n/gd.json | 6 +- extensions/WikiEditor/i18n/gl.json | 44 +- extensions/WikiEditor/i18n/grc.json | 11 +- extensions/WikiEditor/i18n/gsw.json | 6 +- extensions/WikiEditor/i18n/gu.json | 12 +- extensions/WikiEditor/i18n/gv.json | 6 +- extensions/WikiEditor/i18n/he.json | 39 +- extensions/WikiEditor/i18n/hi.json | 17 +- extensions/WikiEditor/i18n/hr.json | 8 +- extensions/WikiEditor/i18n/hsb.json | 6 +- extensions/WikiEditor/i18n/hu.json | 23 +- extensions/WikiEditor/i18n/hy.json | 6 +- extensions/WikiEditor/i18n/ia.json | 6 +- extensions/WikiEditor/i18n/id.json | 6 +- extensions/WikiEditor/i18n/ilo.json | 212 +- extensions/WikiEditor/i18n/is.json | 11 +- extensions/WikiEditor/i18n/it.json | 41 +- extensions/WikiEditor/i18n/ja.json | 21 +- extensions/WikiEditor/i18n/jv.json | 6 +- extensions/WikiEditor/i18n/ka.json | 6 +- extensions/WikiEditor/i18n/kk-cyrl.json | 30 +- extensions/WikiEditor/i18n/km.json | 8 +- extensions/WikiEditor/i18n/kn.json | 22 +- extensions/WikiEditor/i18n/ko.json | 45 +- extensions/WikiEditor/i18n/krc.json | 6 +- extensions/WikiEditor/i18n/ksh.json | 36 +- extensions/WikiEditor/i18n/kw.json | 6 +- extensions/WikiEditor/i18n/ky.json | 6 +- extensions/WikiEditor/i18n/la.json | 6 +- extensions/WikiEditor/i18n/lb.json | 21 +- extensions/WikiEditor/i18n/li.json | 6 +- extensions/WikiEditor/i18n/lrc.json | 21 +- extensions/WikiEditor/i18n/lt.json | 47 +- extensions/WikiEditor/i18n/lus.json | 4 +- extensions/WikiEditor/i18n/lv.json | 8 +- extensions/WikiEditor/i18n/min.json | 6 +- extensions/WikiEditor/i18n/mk.json | 41 +- extensions/WikiEditor/i18n/ml.json | 6 +- extensions/WikiEditor/i18n/mr.json | 6 +- extensions/WikiEditor/i18n/ms.json | 6 +- extensions/WikiEditor/i18n/mt.json | 6 +- extensions/WikiEditor/i18n/nah.json | 6 +- extensions/WikiEditor/i18n/nap.json | 206 + extensions/WikiEditor/i18n/nb.json | 6 +- extensions/WikiEditor/i18n/nds-nl.json | 6 +- extensions/WikiEditor/i18n/ne.json | 123 +- extensions/WikiEditor/i18n/nl.json | 12 +- extensions/WikiEditor/i18n/nn.json | 6 +- extensions/WikiEditor/i18n/oc.json | 28 +- extensions/WikiEditor/i18n/olo.json | 62 + extensions/WikiEditor/i18n/or.json | 6 +- extensions/WikiEditor/i18n/os.json | 14 +- extensions/WikiEditor/i18n/pa.json | 31 +- extensions/WikiEditor/i18n/pam.json | 8 + extensions/WikiEditor/i18n/pl.json | 42 +- extensions/WikiEditor/i18n/pms.json | 6 +- extensions/WikiEditor/i18n/pnb.json | 6 +- extensions/WikiEditor/i18n/ps.json | 33 +- extensions/WikiEditor/i18n/pt-br.json | 6 +- extensions/WikiEditor/i18n/pt.json | 38 +- extensions/WikiEditor/i18n/qqq.json | 74 +- extensions/WikiEditor/i18n/qu.json | 6 +- extensions/WikiEditor/i18n/ro.json | 14 +- extensions/WikiEditor/i18n/roa-tara.json | 42 +- extensions/WikiEditor/i18n/ru.json | 43 +- extensions/WikiEditor/i18n/rue.json | 6 +- extensions/WikiEditor/i18n/sa.json | 52 +- extensions/WikiEditor/i18n/sah.json | 6 +- extensions/WikiEditor/i18n/sc.json | 2 +- extensions/WikiEditor/i18n/scn.json | 18 +- extensions/WikiEditor/i18n/shn.json | 8 + extensions/WikiEditor/i18n/shy-latn.json | 8 + extensions/WikiEditor/i18n/si.json | 6 +- extensions/WikiEditor/i18n/sk.json | 7 +- extensions/WikiEditor/i18n/sl.json | 40 +- extensions/WikiEditor/i18n/sq.json | 11 +- extensions/WikiEditor/i18n/sr-ec.json | 44 +- extensions/WikiEditor/i18n/sr-el.json | 52 +- extensions/WikiEditor/i18n/su.json | 6 +- extensions/WikiEditor/i18n/sv.json | 13 +- extensions/WikiEditor/i18n/sw.json | 6 +- extensions/WikiEditor/i18n/ta.json | 14 +- extensions/WikiEditor/i18n/te.json | 6 +- extensions/WikiEditor/i18n/th.json | 6 +- extensions/WikiEditor/i18n/tk.json | 6 +- extensions/WikiEditor/i18n/tl.json | 12 +- extensions/WikiEditor/i18n/tr.json | 6 +- extensions/WikiEditor/i18n/tt-cyrl.json | 34 +- extensions/WikiEditor/i18n/uk.json | 22 +- extensions/WikiEditor/i18n/uz.json | 6 +- extensions/WikiEditor/i18n/vec.json | 6 +- extensions/WikiEditor/i18n/vi.json | 18 +- extensions/WikiEditor/i18n/yi.json | 38 +- extensions/WikiEditor/i18n/yo.json | 6 +- extensions/WikiEditor/i18n/yue.json | 11 +- extensions/WikiEditor/i18n/zh-hans.json | 39 +- extensions/WikiEditor/i18n/zh-hant.json | 18 +- extensions/WikiEditor/modules/ext.wikiEditor.js | 50 +- .../modules/ext.wikiEditor.toolbar.hideSig.js | 14 - .../modules/images/toolbar/arrow-down.svg | 1 + .../modules/images/toolbar/arrow-ltr.svg | 1 + .../modules/images/toolbar/arrow-rtl.svg | 1 + .../modules/images/toolbar/button-sprite.png | Bin 17742 -> 5775 bytes .../modules/images/toolbar/button-sprite.svg | 2 + .../modules/images/toolbar/format-big.svg | 23 + .../modules/images/toolbar/format-bold-A.svg | 22 + .../modules/images/toolbar/format-bold-B.svg | 23 + .../modules/images/toolbar/format-bold-F.svg | 22 + .../modules/images/toolbar/format-bold-G.svg | 22 + .../modules/images/toolbar/format-bold-N.svg | 22 + .../modules/images/toolbar/format-bold-P.svg | 22 + .../modules/images/toolbar/format-bold-V.svg | 22 + .../modules/images/toolbar/format-bold.svg | 22 + .../modules/images/toolbar/format-indent-rtl.png | Bin 0 -> 499 bytes .../modules/images/toolbar/format-indent-rtl.svg | 34 + .../modules/images/toolbar/format-indent.png | Bin 0 -> 492 bytes .../modules/images/toolbar/format-indent.svg | 34 + .../modules/images/toolbar/format-italic-A.svg | 126 + .../modules/images/toolbar/format-italic-C.svg | 22 + .../modules/images/toolbar/format-italic-I.svg | 99 + .../modules/images/toolbar/format-italic-K.svg | 126 + .../modules/images/toolbar/format-italic.svg | 22 + .../modules/images/toolbar/format-olist-rtl.svg | 37 + .../modules/images/toolbar/format-olist.svg | 39 + .../modules/images/toolbar/format-small.svg | 108 + .../modules/images/toolbar/format-subscript.svg | 108 + .../modules/images/toolbar/format-superscript.svg | 23 + .../modules/images/toolbar/format-ulist-rtl.svg | 39 + .../modules/images/toolbar/format-ulist.svg | 37 + .../modules/images/toolbar/insert-file.svg | 36 + .../modules/images/toolbar/insert-gallery.svg | 44 + .../modules/images/toolbar/insert-ilink.svg | 28 + .../modules/images/toolbar/insert-link.svg | 20 + .../modules/images/toolbar/insert-newline.svg | 105 + .../modules/images/toolbar/insert-nowiki.svg | 112 + .../modules/images/toolbar/insert-redirect-rtl.svg | 103 + .../modules/images/toolbar/insert-redirect.svg | 118 + .../modules/images/toolbar/insert-reference.svg | 88 + .../modules/images/toolbar/insert-signature.png | Bin 680 -> 865 bytes .../modules/images/toolbar/insert-signature.svg | 49 + .../modules/images/toolbar/insert-table.svg | 37 + .../modules/images/toolbar/insert-xlink.svg | 125 + .../modules/images/toolbar/search-replace.svg | 46 + .../modules/jquery.wikiEditor.dialogs.config.js | 164 +- .../modules/jquery.wikiEditor.dialogs.config.less | 2 +- .../modules/jquery.wikiEditor.dialogs.js | 11 +- .../modules/jquery.wikiEditor.dialogs.less | 2 +- extensions/WikiEditor/modules/jquery.wikiEditor.js | 68 +- .../WikiEditor/modules/jquery.wikiEditor.less | 8 +- .../modules/jquery.wikiEditor.preview.less | 2 +- .../modules/jquery.wikiEditor.toolbar.config.js | 27 +- .../modules/jquery.wikiEditor.toolbar.js | 122 +- .../modules/jquery.wikiEditor.toolbar.less | 44 +- .../modules/templates/dialogInsertFile.html | 35 + .../modules/templates/dialogInsertLink.html | 21 + .../modules/templates/dialogInsertReference.html | 9 + .../modules/templates/dialogInsertTable.html | 60 + .../modules/templates/dialogReplace.html | 24 + img_auth.php | 12 +- includes/AjaxDispatcher.php | 12 +- includes/AjaxResponse.php | 30 +- includes/AuthPlugin.php | 16 + includes/Block.php | 158 +- includes/CategoryFinder.php | 4 +- includes/CategoryViewer.php | 2 +- includes/CdbCompat.php | 45 - includes/ChangeTags.php | 1214 ---- includes/Collation.php | 8 +- includes/DefaultSettings.php | 563 +- includes/Defines.php | 7 +- includes/EditPage.php | 137 +- includes/Export.php | 4 +- includes/FileDeleteForm.php | 4 +- includes/GitInfo.php | 4 +- includes/GlobalFunctions.php | 265 +- includes/HistoryBlob.php | 8 +- includes/Hooks.php | 21 +- includes/Html.php | 111 +- includes/HttpFunctions.php | 6 +- includes/Import.php | 69 +- includes/Linker.php | 88 +- includes/MWNamespace.php | 12 + includes/MWTimestamp.php | 42 +- includes/MagicWord.php | 13 +- includes/MediaWiki.php | 282 +- includes/Message.php | 81 +- includes/MessageBlobStore.php | 390 -- includes/MimeMagic.php | 14 +- includes/MovePage.php | 67 +- includes/OutputPage.php | 525 +- includes/PHPVersionCheck.php | 146 +- includes/Preferences.php | 135 +- includes/PrefixSearch.php | 6 +- includes/ProtectionForm.php | 57 +- includes/Revision.php | 30 +- includes/RevisionList.php | 4 +- includes/Sanitizer.php | 111 +- includes/Setup.php | 74 +- includes/SiteStats.php | 4 +- includes/SquidPurgeClient.php | 24 +- includes/Status.php | 10 +- includes/StreamFile.php | 8 +- includes/StubObject.php | 2 +- includes/TemplateParser.php | 9 +- includes/Title.php | 270 +- includes/User.php | 528 +- includes/UserRightsProxy.php | 4 +- includes/WatchedItem.php | 79 +- includes/WebRequest.php | 113 +- includes/WebResponse.php | 19 +- includes/WebStart.php | 6 +- includes/WikiMap.php | 62 +- includes/Xml.php | 125 +- includes/XmlSelect.php | 132 + includes/ZhConversion.php | 1949 +++---- includes/actions/Action.php | 10 + includes/actions/DeleteAction.php | 2 + includes/actions/EditAction.php | 2 + includes/actions/HistoryAction.php | 33 +- includes/actions/InfoAction.php | 95 +- includes/actions/RawAction.php | 52 +- includes/actions/RevertAction.php | 2 + includes/actions/RollbackAction.php | 3 + includes/actions/UnprotectAction.php | 1 - includes/actions/WatchAction.php | 2 +- includes/api/ApiBase.php | 169 +- includes/api/ApiBlock.php | 16 +- includes/api/ApiCreateAccount.php | 16 +- includes/api/ApiDelete.php | 4 +- includes/api/ApiEditPage.php | 86 +- includes/api/ApiEmailUser.php | 2 +- includes/api/ApiExpandTemplates.php | 32 +- includes/api/ApiFeedRecentChanges.php | 12 +- includes/api/ApiFeedWatchlist.php | 17 +- includes/api/ApiFileRevert.php | 2 + includes/api/ApiFormatBase.php | 23 +- includes/api/ApiFormatDump.php | 58 - includes/api/ApiFormatFeedWrapper.php | 9 - includes/api/ApiFormatJson.php | 16 +- includes/api/ApiFormatPhp.php | 3 +- includes/api/ApiFormatRaw.php | 28 +- includes/api/ApiFormatWddx.php | 162 - includes/api/ApiFormatXml.php | 11 +- includes/api/ApiHelp.php | 188 +- includes/api/ApiImageRotate.php | 4 +- includes/api/ApiImport.php | 7 +- includes/api/ApiLogin.php | 19 +- includes/api/ApiMain.php | 209 +- includes/api/ApiMessage.php | 30 + includes/api/ApiMove.php | 2 + includes/api/ApiOptions.php | 14 + includes/api/ApiPageSet.php | 69 +- includes/api/ApiParamInfo.php | 49 +- includes/api/ApiParse.php | 126 +- includes/api/ApiProtect.php | 9 +- includes/api/ApiQuery.php | 23 +- includes/api/ApiQueryAllCategories.php | 3 +- includes/api/ApiQueryAllDeletedRevisions.php | 45 +- includes/api/ApiQueryAllLinks.php | 1 + includes/api/ApiQueryAllMessages.php | 8 +- includes/api/ApiQueryAllPages.php | 12 +- includes/api/ApiQueryAllUsers.php | 11 +- includes/api/ApiQueryBacklinksprop.php | 8 +- includes/api/ApiQueryBase.php | 21 +- includes/api/ApiQueryBlocks.php | 9 +- includes/api/ApiQueryCategories.php | 5 +- includes/api/ApiQueryCategoryInfo.php | 2 +- includes/api/ApiQueryCategoryMembers.php | 11 +- includes/api/ApiQueryContributors.php | 6 +- includes/api/ApiQueryDeletedRevisions.php | 8 +- includes/api/ApiQueryDeletedrevs.php | 2 +- includes/api/ApiQueryDuplicateFiles.php | 2 +- includes/api/ApiQueryExtLinksUsage.php | 3 +- includes/api/ApiQueryExternalLinks.php | 2 +- includes/api/ApiQueryFileRepoInfo.php | 24 +- includes/api/ApiQueryFilearchive.php | 5 +- includes/api/ApiQueryIWBacklinks.php | 1 + includes/api/ApiQueryIWLinks.php | 3 +- includes/api/ApiQueryImageInfo.php | 6 +- includes/api/ApiQueryImages.php | 2 +- includes/api/ApiQueryInfo.php | 19 +- includes/api/ApiQueryLangBacklinks.php | 1 + includes/api/ApiQueryLangLinks.php | 5 +- includes/api/ApiQueryLinks.php | 4 +- includes/api/ApiQueryLogEvents.php | 3 +- includes/api/ApiQueryPageProps.php | 4 +- includes/api/ApiQueryPagesWithProp.php | 3 +- includes/api/ApiQueryProtectedTitles.php | 5 +- includes/api/ApiQueryRandom.php | 181 +- includes/api/ApiQueryRecentChanges.php | 5 +- includes/api/ApiQueryRevisions.php | 101 +- includes/api/ApiQueryRevisionsBase.php | 38 +- includes/api/ApiQuerySearch.php | 32 +- includes/api/ApiQuerySiteinfo.php | 18 +- includes/api/ApiQueryStashImageInfo.php | 4 + includes/api/ApiQueryTags.php | 3 +- includes/api/ApiQueryTokens.php | 4 + includes/api/ApiQueryUserContributions.php | 5 +- includes/api/ApiQueryUserInfo.php | 52 +- includes/api/ApiQueryUsers.php | 7 +- includes/api/ApiQueryWatchlist.php | 5 +- includes/api/ApiQueryWatchlistRaw.php | 31 +- includes/api/ApiResult.php | 164 +- includes/api/ApiRevisionDelete.php | 4 +- includes/api/ApiRollback.php | 2 + includes/api/ApiSetNotificationTimestamp.php | 4 +- includes/api/ApiStashEdit.php | 7 +- includes/api/ApiUnblock.php | 8 +- includes/api/ApiUndelete.php | 9 +- includes/api/ApiUpload.php | 24 +- includes/api/i18n/ar.json | 4 +- includes/api/i18n/ast.json | 10 + includes/api/i18n/ba.json | 13 + includes/api/i18n/bcl.json | 10 + includes/api/i18n/be-tarask.json | 4 +- includes/api/i18n/br.json | 13 + includes/api/i18n/bs.json | 5 +- includes/api/i18n/ca.json | 17 +- includes/api/i18n/ce.json | 3 +- includes/api/i18n/ckb.json | 8 + includes/api/i18n/cs.json | 105 +- includes/api/i18n/de.json | 107 +- includes/api/i18n/el.json | 89 +- includes/api/i18n/en-gb.json | 2 +- includes/api/i18n/en.json | 457 +- includes/api/i18n/es.json | 564 +- includes/api/i18n/et.json | 42 + includes/api/i18n/eu.json | 11 +- includes/api/i18n/fa.json | 7 +- includes/api/i18n/fi.json | 8 +- includes/api/i18n/fo.json | 39 + includes/api/i18n/fr.json | 421 +- includes/api/i18n/gl.json | 414 +- includes/api/i18n/he.json | 1185 +++- includes/api/i18n/ht.json | 8 + includes/api/i18n/hu.json | 13 +- includes/api/i18n/ia.json | 3 + includes/api/i18n/is.json | 10 + includes/api/i18n/it.json | 90 +- includes/api/i18n/ja.json | 374 +- includes/api/i18n/ko.json | 78 +- includes/api/i18n/ksh.json | 669 ++- includes/api/i18n/ku-latn.json | 23 +- includes/api/i18n/ky.json | 19 + includes/api/i18n/lb.json | 65 +- includes/api/i18n/lv.json | 7 +- includes/api/i18n/mk.json | 241 +- includes/api/i18n/mr.json | 12 + includes/api/i18n/nap.json | 12 +- includes/api/i18n/nb.json | 91 +- includes/api/i18n/ne.json | 13 + includes/api/i18n/nl.json | 42 +- includes/api/i18n/oc.json | 73 +- includes/api/i18n/olo.json | 12 + includes/api/i18n/or.json | 14 + includes/api/i18n/pl.json | 256 +- includes/api/i18n/ps.json | 21 + includes/api/i18n/pt-br.json | 276 +- includes/api/i18n/pt.json | 15 +- includes/api/i18n/qqq.json | 366 +- includes/api/i18n/ru.json | 197 +- includes/api/i18n/shn.json | 8 + includes/api/i18n/si.json | 1 + includes/api/i18n/sq.json | 12 + includes/api/i18n/sv.json | 75 +- includes/api/i18n/ta.json | 13 + includes/api/i18n/tr.json | 12 +- includes/api/i18n/uk.json | 1286 ++++- includes/api/i18n/vi.json | 75 +- includes/api/i18n/wuu.json | 8 + includes/api/i18n/yi.json | 10 + includes/api/i18n/zh-hans.json | 743 ++- includes/api/i18n/zh-hant.json | 42 +- includes/cache/BacklinkCache.php | 6 +- includes/cache/CacheDependency.php | 8 +- includes/cache/FileCacheBase.php | 4 +- includes/cache/HTMLFileCache.php | 1 + includes/cache/LCStoreStaticArray.php | 140 + includes/cache/LinkBatch.php | 2 +- includes/cache/LinkCache.php | 87 +- includes/cache/LocalisationCache.php | 13 +- includes/cache/MessageBlobStore.php | 425 ++ includes/cache/MessageCache.php | 557 +- includes/cache/ResourceFileCache.php | 4 +- includes/cache/UserCache.php | 4 +- includes/changes/ChangesFeed.php | 4 + includes/changes/ChangesList.php | 39 +- includes/changes/EnhancedChangesList.php | 262 +- includes/changes/RecentChange.php | 113 +- includes/changetags/ChangeTags.php | 1258 ++++ includes/changetags/ChangeTagsLogList.php | 3 +- includes/changetags/ChangeTagsRevisionList.php | 3 +- includes/clientpool/RedisConnectionPool.php | 108 +- includes/compat/CdbCompat.php | 45 + includes/compat/IPSetCompat.php | 28 + includes/compat/normal/UtfNormal.php | 129 + includes/compat/normal/UtfNormalDefines.php | 186 + includes/compat/normal/UtfNormalUtil.php | 100 + includes/config/ConfigFactory.php | 3 + includes/content/ContentHandler.php | 54 +- includes/content/CssContent.php | 44 + includes/content/CssContentHandler.php | 19 + includes/content/JavaScriptContent.php | 47 + includes/content/JavaScriptContentHandler.php | 18 + includes/content/TextContentHandler.php | 9 + includes/content/WikitextContent.php | 4 +- includes/context/ContextSource.php | 1 + includes/context/DerivativeContext.php | 7 +- includes/context/IContextSource.php | 3 +- includes/context/MutableContext.php | 82 + includes/context/RequestContext.php | 20 +- includes/dao/DBAccessObjectUtils.php | 59 + includes/db/DBConnRef.php | 524 ++ includes/db/Database.php | 310 +- includes/db/DatabaseError.php | 19 +- includes/db/DatabaseMssql.php | 8 +- includes/db/DatabaseMysql.php | 40 +- includes/db/DatabaseMysqlBase.php | 82 +- includes/db/DatabaseMysqli.php | 43 +- includes/db/DatabaseOracle.php | 38 +- includes/db/DatabasePostgres.php | 25 +- includes/db/DatabaseSqlite.php | 49 +- includes/db/IDatabase.php | 1513 +++++ includes/db/LBFactory.php | 11 +- includes/db/LBFactoryMulti.php | 2 +- includes/db/LoadBalancer.php | 147 +- includes/db/LoadMonitor.php | 87 - includes/db/LoadMonitorMySQL.php | 124 + includes/debug/MWDebug.php | 6 +- includes/debug/logger/LegacyLogger.php | 101 +- includes/debug/logger/LegacySpi.php | 4 +- includes/debug/logger/LoggerFactory.php | 14 +- includes/debug/logger/MonologSpi.php | 35 +- includes/debug/logger/NullSpi.php | 8 +- includes/debug/logger/Spi.php | 8 +- includes/debug/logger/monolog/AvroFormatter.php | 139 + includes/debug/logger/monolog/BufferHandler.php | 47 + includes/debug/logger/monolog/KafkaHandler.php | 224 + includes/debug/logger/monolog/LegacyFormatter.php | 4 +- includes/debug/logger/monolog/LineFormatter.php | 177 + includes/deferred/DeferredUpdates.php | 68 +- includes/deferred/HTMLCacheUpdate.php | 3 +- includes/deferred/LinksDeletionUpdate.php | 105 + includes/deferred/LinksUpdate.php | 85 - includes/deferred/SiteStatsUpdate.php | 14 +- includes/diff/DifferenceEngine.php | 27 +- includes/diff/TableDiffFormatter.php | 2 +- includes/diff/UnifiedDiffFormatter.php | 10 + includes/exception/BadTitleError.php | 16 +- includes/exception/HttpError.php | 20 +- includes/exception/MWException.php | 8 +- includes/exception/MWExceptionHandler.php | 367 +- includes/filebackend/FSFile.php | 9 +- includes/filebackend/FileBackend.php | 15 +- includes/filebackend/FileBackendGroup.php | 2 + includes/filebackend/FileBackendMultiWrite.php | 176 +- includes/filebackend/FileBackendStore.php | 80 +- includes/filebackend/FileOp.php | 4 +- includes/filebackend/MemoryFileBackend.php | 8 +- includes/filebackend/SwiftFileBackend.php | 151 +- includes/filebackend/TempFSFile.php | 15 +- includes/filebackend/lockmanager/DBLockManager.php | 2 +- includes/filebackend/lockmanager/FSLockManager.php | 4 +- includes/filebackend/lockmanager/LockManager.php | 1 - includes/filerepo/FileBackendDBRepoWrapper.php | 356 ++ includes/filerepo/FileRepo.php | 43 +- includes/filerepo/ForeignAPIRepo.php | 4 +- includes/filerepo/ForeignDBRepo.php | 32 +- includes/filerepo/ForeignDBViaLBRepo.php | 10 + includes/filerepo/LocalRepo.php | 113 +- includes/filerepo/file/ArchivedFile.php | 4 +- includes/filerepo/file/File.php | 65 +- includes/filerepo/file/ForeignAPIFile.php | 19 +- includes/filerepo/file/LocalFile.php | 289 +- includes/gallery/PackedImageGallery.php | 4 +- includes/gallery/PackedOverlayImageGallery.php | 2 +- includes/gallery/TraditionalImageGallery.php | 4 +- includes/htmlform/HTMLAutoCompleteSelectField.php | 14 +- includes/htmlform/HTMLButtonField.php | 36 +- includes/htmlform/HTMLCheckField.php | 62 +- includes/htmlform/HTMLCheckMatrix.php | 42 +- includes/htmlform/HTMLForm.php | 185 +- includes/htmlform/HTMLFormField.php | 193 +- includes/htmlform/HTMLFormFieldWithButton.php | 73 + includes/htmlform/HTMLInfoField.php | 10 + includes/htmlform/HTMLMultiSelectField.php | 60 +- includes/htmlform/HTMLRadioField.php | 17 + includes/htmlform/HTMLSelectAndOtherField.php | 5 +- includes/htmlform/HTMLSelectField.php | 22 + includes/htmlform/HTMLSelectNamespace.php | 16 +- .../htmlform/HTMLSelectNamespaceWithButton.php | 17 + includes/htmlform/HTMLSelectOrOtherField.php | 4 + includes/htmlform/HTMLSubmitField.php | 2 + includes/htmlform/HTMLTextAreaField.php | 44 + includes/htmlform/HTMLTextField.php | 61 +- includes/htmlform/HTMLTextFieldWithButton.php | 17 + includes/htmlform/HTMLTitleTextField.php | 81 + includes/htmlform/HTMLUserTextField.php | 47 + includes/htmlform/OOUIHTMLForm.php | 221 + includes/htmlform/VFormHTMLForm.php | 6 +- includes/installer/DatabaseInstaller.php | 4 +- includes/installer/DatabaseUpdater.php | 3 +- includes/installer/Installer.php | 51 +- includes/installer/LocalSettingsGenerator.php | 11 +- includes/installer/MssqlInstaller.php | 1 - includes/installer/MssqlUpdater.php | 2 +- includes/installer/MysqlInstaller.php | 10 +- includes/installer/MysqlUpdater.php | 5 + includes/installer/PostgresInstaller.php | 11 +- includes/installer/PostgresUpdater.php | 10 + includes/installer/SqliteInstaller.php | 4 +- includes/installer/WebInstaller.php | 29 +- includes/installer/WebInstallerPage.php | 37 +- includes/installer/i18n/ar.json | 9 +- includes/installer/i18n/ast.json | 8 +- includes/installer/i18n/azb.json | 30 + includes/installer/i18n/ba.json | 7 + includes/installer/i18n/bcl.json | 1 + includes/installer/i18n/be-tarask.json | 3 +- includes/installer/i18n/bg.json | 43 +- includes/installer/i18n/bn.json | 17 +- includes/installer/i18n/bs.json | 27 +- includes/installer/i18n/ca.json | 3 +- includes/installer/i18n/ce.json | 9 +- includes/installer/i18n/ckb.json | 1 + includes/installer/i18n/cs.json | 3 +- includes/installer/i18n/cu.json | 4 + includes/installer/i18n/da.json | 11 +- includes/installer/i18n/de-ch.json | 6 +- includes/installer/i18n/de.json | 2 +- includes/installer/i18n/el.json | 63 +- includes/installer/i18n/en-gb.json | 1 - includes/installer/i18n/en.json | 2 - includes/installer/i18n/eo.json | 10 +- includes/installer/i18n/es.json | 56 +- includes/installer/i18n/et.json | 7 +- includes/installer/i18n/eu.json | 4 +- includes/installer/i18n/fa.json | 19 +- includes/installer/i18n/fo.json | 15 +- includes/installer/i18n/fr.json | 3 +- includes/installer/i18n/fy.json | 1 + includes/installer/i18n/gl.json | 7 +- includes/installer/i18n/he.json | 3 +- includes/installer/i18n/hi.json | 8 +- includes/installer/i18n/hu.json | 19 +- includes/installer/i18n/hy.json | 35 +- includes/installer/i18n/ia.json | 7 +- includes/installer/i18n/id.json | 1 - includes/installer/i18n/it.json | 17 +- includes/installer/i18n/ja.json | 11 +- includes/installer/i18n/jut.json | 5 +- includes/installer/i18n/km.json | 3 + includes/installer/i18n/kn.json | 4 +- includes/installer/i18n/ko.json | 76 +- includes/installer/i18n/ksh.json | 99 +- includes/installer/i18n/ku-latn.json | 48 +- includes/installer/i18n/lb.json | 3 +- includes/installer/i18n/lrc.json | 4 + includes/installer/i18n/lv.json | 15 +- includes/installer/i18n/mai.json | 4 +- includes/installer/i18n/mg.json | 12 + includes/installer/i18n/mk.json | 6 +- includes/installer/i18n/mr.json | 5 +- includes/installer/i18n/nan.json | 11 +- includes/installer/i18n/nap.json | 102 +- includes/installer/i18n/nb.json | 1 - includes/installer/i18n/ne.json | 55 +- includes/installer/i18n/nl.json | 6 +- includes/installer/i18n/nn.json | 4 +- includes/installer/i18n/olo.json | 59 + includes/installer/i18n/or.json | 17 +- includes/installer/i18n/pl.json | 19 +- includes/installer/i18n/pms.json | 4 +- includes/installer/i18n/ps.json | 22 + includes/installer/i18n/pt-br.json | 19 +- includes/installer/i18n/pt.json | 6 +- includes/installer/i18n/qqq.json | 6 +- includes/installer/i18n/ro.json | 14 +- includes/installer/i18n/ru.json | 3 +- includes/installer/i18n/sah.json | 9 +- includes/installer/i18n/sco.json | 3 +- includes/installer/i18n/sd.json | 8 + includes/installer/i18n/sk.json | 5 +- includes/installer/i18n/sq.json | 40 +- includes/installer/i18n/sr-ec.json | 5 +- includes/installer/i18n/su.json | 7 + includes/installer/i18n/sv.json | 5 +- includes/installer/i18n/tokipona.json | 8 + includes/installer/i18n/tr.json | 53 +- includes/installer/i18n/tt-cyrl.json | 7 +- includes/installer/i18n/udm.json | 12 +- includes/installer/i18n/uk.json | 13 +- includes/installer/i18n/vi.json | 5 +- includes/installer/i18n/wuu.json | 4 +- includes/installer/i18n/xmf.json | 33 + includes/installer/i18n/yi.json | 15 + includes/installer/i18n/zh-hans.json | 5 +- includes/installer/i18n/zh-hant.json | 12 +- includes/interwiki/Interwiki.php | 21 +- includes/jobqueue/Job.php | 46 +- includes/jobqueue/JobQueue.php | 81 +- includes/jobqueue/JobQueueDB.php | 98 +- includes/jobqueue/JobQueueFederated.php | 35 +- includes/jobqueue/JobQueueGroup.php | 143 +- includes/jobqueue/JobQueueRedis.php | 151 +- includes/jobqueue/JobRunner.php | 171 +- includes/jobqueue/JobSpecification.php | 71 +- .../jobqueue/aggregator/JobQueueAggregator.php | 2 +- .../aggregator/JobQueueAggregatorRedis.php | 8 + includes/jobqueue/jobs/ActivityUpdateJob.php | 75 + includes/jobqueue/jobs/AssembleUploadChunksJob.php | 2 +- includes/jobqueue/jobs/DoubleRedirectJob.php | 20 +- includes/jobqueue/jobs/DuplicateJob.php | 2 +- includes/jobqueue/jobs/EmaillingJob.php | 4 +- includes/jobqueue/jobs/EnotifNotifyJob.php | 2 +- includes/jobqueue/jobs/EnqueueJob.php | 21 +- includes/jobqueue/jobs/HTMLCacheUpdateJob.php | 2 +- includes/jobqueue/jobs/NullJob.php | 2 +- includes/jobqueue/jobs/PublishStashedFileJob.php | 2 +- includes/jobqueue/jobs/RecentChangesUpdateJob.php | 8 +- includes/jobqueue/jobs/RefreshLinksJob.php | 51 +- includes/jobqueue/jobs/ThumbnailRenderJob.php | 14 +- includes/jobqueue/jobs/UploadFromUrlJob.php | 6 +- includes/json/FormatJson.php | 2 +- includes/libs/BufferingStatsdDataFactory.php | 34 +- includes/libs/CSSMin.php | 73 +- includes/libs/HashRing.php | 4 +- includes/libs/HttpStatus.php | 28 +- includes/libs/IPSet.php | 276 - includes/libs/JavaScriptMinifier.php | 8 + includes/libs/MapCacheLRU.php | 7 +- includes/libs/MultiHttpClient.php | 55 +- includes/libs/ObjectFactory.php | 49 +- includes/libs/ProcessCacheLRU.php | 7 +- includes/libs/ReplacementArray.php | 9 +- includes/libs/RiffExtractor.php | 100 + includes/libs/SamplingStatsdClient.php | 133 + includes/libs/ScopedPHPTimeout.php | 84 - includes/libs/XmlTypeCheck.php | 35 +- includes/libs/composer/ComposerLock.php | 3 + includes/libs/eventrelayer/EventRelayer.php | 65 + includes/libs/eventrelayer/EventRelayerMCRD.php | 66 + includes/libs/normal/UtfNormal.php | 129 - includes/libs/normal/UtfNormalDefines.php | 186 - includes/libs/normal/UtfNormalUtil.php | 99 - includes/libs/objectcache/APCBagOStuff.php | 31 +- includes/libs/objectcache/BagOStuff.php | 201 +- includes/libs/objectcache/EmptyBagOStuff.php | 2 +- includes/libs/objectcache/HashBagOStuff.php | 14 +- includes/libs/objectcache/ReplicatedBagOStuff.php | 129 + includes/libs/objectcache/WANObjectCache.php | 746 +++ includes/libs/objectcache/WinCacheBagOStuff.php | 33 +- includes/libs/objectcache/XCacheBagOStuff.php | 23 +- .../libs/virtualrest/ParsoidVirtualRESTService.php | 221 +- .../virtualrest/RestbaseVirtualRESTService.php | 242 +- .../libs/virtualrest/SwiftVirtualRESTService.php | 6 +- includes/libs/virtualrest/VirtualRESTService.php | 15 +- .../libs/virtualrest/VirtualRESTServiceClient.php | 12 +- includes/logging/ContentModelLogFormatter.php | 34 + includes/logging/LogEntry.php | 34 +- includes/logging/LogEventsList.php | 8 +- includes/logging/LogFormatter.php | 10 +- includes/logging/LogPager.php | 5 +- includes/logging/PatrolLogFormatter.php | 6 +- includes/logging/ProtectLogFormatter.php | 70 + includes/mail/EmailNotification.php | 61 +- includes/mail/UserMailer.php | 140 +- includes/media/Bitmap.php | 7 +- includes/media/BitmapMetadataHandler.php | 8 +- includes/media/DjVu.php | 96 +- includes/media/DjVuImage.php | 10 +- includes/media/Exif.php | 12 +- includes/media/ExifBitmap.php | 78 +- includes/media/FormatMetadata.php | 35 +- includes/media/GIF.php | 8 +- includes/media/GIFMetadataExtractor.php | 4 +- includes/media/IPTC.php | 4 +- includes/media/ImageHandler.php | 4 +- includes/media/Jpeg.php | 2 +- includes/media/JpegMetadataExtractor.php | 4 +- includes/media/MediaHandler.php | 4 +- .../MediaTransformInvalidParametersException.php | 3 +- includes/media/PNG.php | 8 +- includes/media/PNGMetadataExtractor.php | 16 +- includes/media/SVG.php | 15 +- includes/media/SVGMetadataExtractor.php | 17 +- includes/media/TransformationalImageHandler.php | 2 +- includes/media/WebP.php | 306 + includes/media/XCF.php | 6 +- includes/media/XMP.php | 245 +- includes/media/XMPInfo.php | 11 +- includes/media/XMPValidate.php | 60 +- includes/media/tinyrgb.icc | Bin 0 -> 524 bytes includes/mime.info | 2 +- includes/objectcache/MemcachedBagOStuff.php | 15 +- includes/objectcache/MemcachedClient.php | 15 +- includes/objectcache/MemcachedPeclBagOStuff.php | 22 +- includes/objectcache/MemcachedPhpBagOStuff.php | 14 +- includes/objectcache/MultiWriteBagOStuff.php | 88 +- includes/objectcache/ObjectCache.php | 189 +- includes/objectcache/ObjectCacheSessionHandler.php | 45 +- includes/objectcache/RedisBagOStuff.php | 130 +- includes/objectcache/SqlBagOStuff.php | 78 +- includes/page/Article.php | 129 +- includes/page/ImagePage.php | 35 +- includes/page/WikiPage.php | 417 +- includes/pager/ReverseChronologicalPager.php | 6 +- includes/pager/TablePager.php | 7 + includes/parser/CacheTime.php | 2 +- includes/parser/CoreParserFunctions.php | 25 +- includes/parser/LinkHolderArray.php | 1 - includes/parser/MWTidy.php | 323 +- includes/parser/Parser.php | 221 +- includes/parser/ParserCache.php | 51 +- includes/parser/ParserDiffTest.php | 21 - includes/parser/ParserOptions.php | 99 +- includes/parser/ParserOutput.php | 37 +- includes/parser/Preprocessor_DOM.php | 26 +- includes/parser/Preprocessor_Hash.php | 24 +- includes/parser/StripState.php | 27 +- includes/password/EncryptedPassword.php | 2 +- includes/password/PasswordPolicyChecks.php | 115 + includes/password/UserPasswordPolicy.php | 201 + includes/poolcounter/PoolCounter.php | 9 +- includes/poolcounter/PoolCounterRedis.php | 7 +- includes/poolcounter/PoolWorkArticleView.php | 8 +- includes/profiler/ProfileSection.php | 5 +- includes/profiler/Profiler.php | 26 +- includes/profiler/ProfilerFunctions.php | 2 +- includes/profiler/ProfilerStub.php | 3 + includes/profiler/ProfilerXhprof.php | 45 +- includes/profiler/SectionProfiler.php | 9 +- includes/profiler/TransactionProfiler.php | 56 +- includes/profiler/output/ProfilerOutputDump.php | 6 +- includes/profiler/output/ProfilerOutputStats.php | 6 +- includes/profiler/output/ProfilerOutputText.php | 2 +- includes/profiler/output/ProfilerOutputUdp.php | 2 +- includes/rcfeed/MachineReadableRCFeedFormatter.php | 4 +- includes/rcfeed/RCFeedFormatter.php | 3 +- includes/registration/CoreVersionChecker.php | 68 + includes/registration/ExtensionProcessor.php | 27 +- includes/registration/ExtensionRegistry.php | 52 +- includes/registration/Processor.php | 20 +- .../DerivativeResourceLoaderContext.php | 76 +- includes/resourceloader/ResourceLoader.php | 553 +- includes/resourceloader/ResourceLoaderContext.php | 33 +- .../ResourceLoaderEditToolbarModule.php | 31 +- .../resourceloader/ResourceLoaderFileModule.php | 122 +- .../ResourceLoaderForeignApiModule.php | 33 + includes/resourceloader/ResourceLoaderImage.php | 25 +- .../resourceloader/ResourceLoaderImageModule.php | 193 +- .../ResourceLoaderJqueryMsgModule.php | 66 + .../ResourceLoaderLanguageDataModule.php | 16 +- .../ResourceLoaderLanguageNamesModule.php | 18 +- includes/resourceloader/ResourceLoaderModule.php | 479 +- .../ResourceLoaderOOUIImageModule.php | 86 + .../resourceloader/ResourceLoaderRawFileModule.php | 52 + .../resourceloader/ResourceLoaderSiteModule.php | 9 - .../resourceloader/ResourceLoaderSkinModule.php | 13 +- .../ResourceLoaderSpecialCharacterDataModule.php | 19 +- .../resourceloader/ResourceLoaderStartUpModule.php | 191 +- .../ResourceLoaderUserCSSPrefsModule.php | 18 +- .../ResourceLoaderUserDefaultsModule.php | 19 +- .../ResourceLoaderUserOptionsModule.php | 21 +- .../resourceloader/ResourceLoaderWikiModule.php | 198 +- includes/revisiondelete/RevDelItem.php | 2 + includes/revisiondelete/RevDelList.php | 24 +- includes/revisiondelete/RevDelLogItem.php | 27 +- includes/revisiondelete/RevDelRevisionItem.php | 2 +- includes/revisiondelete/RevisionDeleter.php | 4 +- includes/search/SearchEngine.php | 4 +- includes/search/SearchHighlighter.php | 2 +- includes/search/SearchMySQL.php | 6 +- includes/search/SearchPostgres.php | 2 +- includes/search/SearchResultSet.php | 35 +- includes/search/SearchSqlite.php | 4 +- includes/site/CachingSiteStore.php | 6 +- includes/site/DBSiteStore.php | 6 +- includes/site/SiteExporter.php | 20 +- includes/site/SiteSQLStore.php | 2 +- includes/skins/MediaWikiI18N.php | 4 +- includes/skins/Skin.php | 48 +- includes/skins/SkinFallbackTemplate.php | 6 +- includes/skins/SkinTemplate.php | 23 +- includes/specialpage/ChangesListSpecialPage.php | 3 +- includes/specialpage/FormSpecialPage.php | 6 +- includes/specialpage/QueryPage.php | 49 +- includes/specialpage/RedirectSpecialPage.php | 33 +- includes/specialpage/SpecialPage.php | 27 +- includes/specialpage/SpecialPageFactory.php | 61 +- includes/specials/SpecialActiveusers.php | 29 +- includes/specials/SpecialAllMessages.php | 18 +- includes/specials/SpecialAllPages.php | 83 +- includes/specials/SpecialAncientpages.php | 6 +- includes/specials/SpecialBlock.php | 39 +- includes/specials/SpecialBlockList.php | 77 +- includes/specials/SpecialBrokenRedirects.php | 4 +- includes/specials/SpecialChangeContentModel.php | 223 + includes/specials/SpecialChangeEmail.php | 13 +- includes/specials/SpecialChangePassword.php | 3 +- includes/specials/SpecialComparePages.php | 3 + includes/specials/SpecialConfirmemail.php | 8 + includes/specials/SpecialContributions.php | 8 +- includes/specials/SpecialDeletedContributions.php | 8 +- includes/specials/SpecialDiff.php | 8 +- includes/specials/SpecialDoubleRedirects.php | 5 +- includes/specials/SpecialEditTags.php | 20 +- includes/specials/SpecialEditWatchlist.php | 7 +- includes/specials/SpecialEmailuser.php | 7 +- includes/specials/SpecialExport.php | 207 +- includes/specials/SpecialFewestrevisions.php | 4 +- includes/specials/SpecialFileDuplicateSearch.php | 6 +- includes/specials/SpecialFilepath.php | 11 +- includes/specials/SpecialImport.php | 144 +- includes/specials/SpecialJavaScriptTest.php | 108 +- includes/specials/SpecialLinkSearch.php | 68 +- includes/specials/SpecialListDuplicatedFiles.php | 4 +- includes/specials/SpecialListfiles.php | 14 +- includes/specials/SpecialListredirects.php | 4 +- includes/specials/SpecialListusers.php | 16 +- includes/specials/SpecialLockdb.php | 4 +- includes/specials/SpecialMIMEsearch.php | 7 +- includes/specials/SpecialMediaStatistics.php | 12 +- includes/specials/SpecialMergeHistory.php | 2 + includes/specials/SpecialMostcategories.php | 4 +- includes/specials/SpecialMostinterwikis.php | 4 +- includes/specials/SpecialMostlinked.php | 4 +- includes/specials/SpecialMostlinkedcategories.php | 2 +- includes/specials/SpecialMovepage.php | 338 +- includes/specials/SpecialMyLanguage.php | 26 +- includes/specials/SpecialMyRedirectPages.php | 55 +- includes/specials/SpecialNewpages.php | 4 +- includes/specials/SpecialPageLanguage.php | 7 +- includes/specials/SpecialPagesWithProp.php | 8 +- includes/specials/SpecialPasswordReset.php | 2 +- includes/specials/SpecialPermanentLink.php | 8 +- includes/specials/SpecialPreferences.php | 9 +- includes/specials/SpecialProtectedtitles.php | 12 +- includes/specials/SpecialRandomInCategory.php | 16 +- includes/specials/SpecialRandompage.php | 20 +- includes/specials/SpecialRecentchanges.php | 23 +- includes/specials/SpecialRecentchangeslinked.php | 1 + includes/specials/SpecialResetTokens.php | 5 + includes/specials/SpecialRevisiondelete.php | 36 +- includes/specials/SpecialRunJobs.php | 15 +- includes/specials/SpecialSearch.php | 152 +- includes/specials/SpecialShortpages.php | 2 +- includes/specials/SpecialSpecialpages.php | 27 +- includes/specials/SpecialStatistics.php | 43 +- includes/specials/SpecialTags.php | 97 +- includes/specials/SpecialUndelete.php | 15 +- includes/specials/SpecialUnlockdb.php | 4 +- includes/specials/SpecialUnusedcategories.php | 4 +- includes/specials/SpecialUnusedtemplates.php | 4 +- includes/specials/SpecialUnwatchedpages.php | 4 +- includes/specials/SpecialUpload.php | 14 +- includes/specials/SpecialUploadStash.php | 4 +- includes/specials/SpecialUserlogin.php | 115 +- includes/specials/SpecialUserrights.php | 8 +- includes/specials/SpecialVersion.php | 76 +- includes/specials/SpecialWantedfiles.php | 2 +- includes/specials/SpecialWantedtemplates.php | 5 +- includes/specials/SpecialWatchlist.php | 1 + includes/specials/SpecialWhatlinkshere.php | 53 +- includes/templates/Usercreate.php | 8 +- includes/templates/Userlogin.php | 5 + includes/tidy.conf | 22 - includes/tidy/Html5Depurate.php | 45 + includes/tidy/RaggettBase.php | 47 + includes/tidy/RaggettExternal.php | 73 + includes/tidy/RaggettInternalHHVM.php | 29 + includes/tidy/RaggettInternalPHP.php | 52 + includes/tidy/RaggettWrapper.php | 89 + includes/tidy/TidyDriverBase.php | 40 + includes/tidy/tidy.conf | 22 + includes/title/MalformedTitleException.php | 54 +- includes/title/MediaWikiTitleCodec.php | 34 +- includes/title/TitleValue.php | 24 +- includes/upload/UploadBase.php | 93 +- includes/upload/UploadFromUrl.php | 4 +- includes/utils/AutoloadGenerator.php | 74 +- includes/utils/AvroValidator.php | 184 + includes/utils/BatchRowIterator.php | 278 + includes/utils/BatchRowUpdate.php | 133 + includes/utils/BatchRowWriter.php | 71 + includes/utils/IP.php | 6 +- includes/utils/MWCryptHKDF.php | 8 +- includes/utils/MWCryptRand.php | 8 +- includes/utils/MWFunction.php | 40 - includes/utils/RowUpdateGenerator.php | 39 + includes/utils/UIDGenerator.php | 21 +- includes/utils/iterators/IteratorDecorator.php | 50 + includes/utils/iterators/NotRecursiveIterator.php | 35 + includes/widget/AUTHORS.txt | 11 + includes/widget/ComplexNamespaceInputWidget.php | 110 + includes/widget/ComplexTitleInputWidget.php | 67 + includes/widget/LICENSE.txt | 25 + includes/widget/NamespaceInputWidget.php | 66 + includes/widget/TitleInputWidget.php | 60 + includes/widget/UserInputWidget.php | 29 + jsduck.json | 3 +- languages/ConverterRule.php | 26 +- languages/Language.php | 310 +- languages/LanguageConverter.php | 17 +- languages/Names.php | 27 +- languages/classes/LanguageEo.php | 2 +- languages/classes/LanguageEt.php | 10 +- languages/classes/LanguageFi.php | 4 +- languages/classes/LanguageKsh.php | 2 +- languages/i18n/ace.json | 15 +- languages/i18n/ady-cyrl.json | 1305 +++++ languages/i18n/aeb-arab.json | 654 +++ languages/i18n/aeb-latn.json | 285 + languages/i18n/aeb.json | 917 --- languages/i18n/af.json | 124 +- languages/i18n/aln.json | 64 +- languages/i18n/am.json | 6 +- languages/i18n/an.json | 56 +- languages/i18n/ang.json | 96 +- languages/i18n/ar.json | 197 +- languages/i18n/arc.json | 22 +- languages/i18n/arn.json | 10 +- languages/i18n/arq.json | 230 +- languages/i18n/ary.json | 10 +- languages/i18n/arz.json | 103 +- languages/i18n/as.json | 158 +- languages/i18n/ase.json | 612 ++ languages/i18n/ast.json | 305 +- languages/i18n/avk.json | 7 +- languages/i18n/awa.json | 224 +- languages/i18n/az.json | 18 +- languages/i18n/azb.json | 605 +- languages/i18n/ba.json | 151 +- languages/i18n/bar.json | 3 +- languages/i18n/bcc.json | 11 +- languages/i18n/bcl.json | 32 +- languages/i18n/be-tarask.json | 238 +- languages/i18n/be.json | 55 +- languages/i18n/bg.json | 196 +- languages/i18n/bgn.json | 129 +- languages/i18n/bho.json | 1145 +++- languages/i18n/bjn.json | 9 +- languages/i18n/bn.json | 211 +- languages/i18n/bo.json | 13 +- languages/i18n/bpy.json | 18 +- languages/i18n/br.json | 29 +- languages/i18n/bs.json | 1094 ++-- languages/i18n/ca.json | 165 +- languages/i18n/cdo.json | 170 +- languages/i18n/ce.json | 594 +- languages/i18n/ckb.json | 107 +- languages/i18n/cps.json | 2 +- languages/i18n/crh-cyrl.json | 13 +- languages/i18n/crh-latn.json | 21 +- languages/i18n/cs.json | 181 +- languages/i18n/cu.json | 5 +- languages/i18n/cv.json | 145 +- languages/i18n/cy.json | 16 +- languages/i18n/da.json | 153 +- languages/i18n/de-formal.json | 1 - languages/i18n/de.json | 258 +- languages/i18n/diq.json | 34 +- languages/i18n/dsb.json | 11 +- languages/i18n/dtp.json | 3 +- languages/i18n/dty.json | 1180 ++++ languages/i18n/egl.json | 70 +- languages/i18n/el.json | 419 +- languages/i18n/en.json | 191 +- languages/i18n/eo.json | 268 +- languages/i18n/es.json | 641 +- languages/i18n/et.json | 276 +- languages/i18n/eu.json | 134 +- languages/i18n/ext.json | 8 +- languages/i18n/fa.json | 259 +- languages/i18n/fi.json | 227 +- languages/i18n/fo.json | 42 +- languages/i18n/fr.json | 262 +- languages/i18n/frc.json | 11 +- languages/i18n/frp.json | 51 +- languages/i18n/frr.json | 172 +- languages/i18n/fur.json | 5 +- languages/i18n/fy.json | 284 +- languages/i18n/ga.json | 9 +- languages/i18n/gan-hans.json | 5 +- languages/i18n/gan-hant.json | 5 +- languages/i18n/gd.json | 21 +- languages/i18n/gl.json | 233 +- languages/i18n/gn.json | 2 +- languages/i18n/gom-deva.json | 776 +++ languages/i18n/gom-latn.json | 463 +- languages/i18n/grc.json | 23 +- languages/i18n/gsw.json | 686 ++- languages/i18n/gu.json | 234 +- languages/i18n/gv.json | 26 +- languages/i18n/hak.json | 2 +- languages/i18n/he.json | 211 +- languages/i18n/hi.json | 365 +- languages/i18n/hif-latn.json | 10 +- languages/i18n/hil.json | 363 +- languages/i18n/hr.json | 62 +- languages/i18n/hrx.json | 72 +- languages/i18n/hsb.json | 161 +- languages/i18n/ht.json | 177 +- languages/i18n/hu.json | 377 +- languages/i18n/hy.json | 92 +- languages/i18n/ia.json | 265 +- languages/i18n/id.json | 156 +- languages/i18n/ie.json | 5 +- languages/i18n/ig.json | 23 +- languages/i18n/ilo.json | 649 ++- languages/i18n/inh.json | 8 +- languages/i18n/io.json | 11 +- languages/i18n/is.json | 201 +- languages/i18n/it.json | 194 +- languages/i18n/ja.json | 285 +- languages/i18n/jv.json | 26 +- languages/i18n/ka.json | 338 +- languages/i18n/kaa.json | 2 +- languages/i18n/kab.json | 17 +- languages/i18n/khw.json | 356 +- languages/i18n/ki.json | 16 +- languages/i18n/kiu.json | 2 +- languages/i18n/kk-arab.json | 5 +- languages/i18n/kk-cyrl.json | 738 ++- languages/i18n/kk-latn.json | 5 +- languages/i18n/km.json | 232 +- languages/i18n/kn.json | 234 +- languages/i18n/ko.json | 268 +- languages/i18n/krc.json | 42 +- languages/i18n/ksh.json | 1458 ++--- languages/i18n/ku-latn.json | 526 +- languages/i18n/kw.json | 187 +- languages/i18n/ky.json | 130 +- languages/i18n/la.json | 34 +- languages/i18n/lad.json | 23 +- languages/i18n/lb.json | 169 +- languages/i18n/lez.json | 10 +- languages/i18n/lg.json | 4 +- languages/i18n/li.json | 13 +- languages/i18n/lij.json | 3 +- languages/i18n/lmo.json | 5 +- languages/i18n/loz.json | 2 +- languages/i18n/lrc.json | 1832 +++--- languages/i18n/lt.json | 436 +- languages/i18n/lus.json | 32 +- languages/i18n/luz.json | 691 +++ languages/i18n/lv.json | 355 +- languages/i18n/lzh.json | 128 +- languages/i18n/mai.json | 212 +- languages/i18n/map-bms.json | 55 +- languages/i18n/mdf.json | 8 +- languages/i18n/mg.json | 158 +- languages/i18n/mhr.json | 38 +- languages/i18n/min.json | 31 +- languages/i18n/mk.json | 224 +- languages/i18n/ml.json | 218 +- languages/i18n/mn.json | 196 +- languages/i18n/mr.json | 41 +- languages/i18n/ms.json | 194 +- languages/i18n/mt.json | 481 +- languages/i18n/my.json | 7 +- languages/i18n/myv.json | 163 +- languages/i18n/mzn.json | 183 +- languages/i18n/nah.json | 108 +- languages/i18n/nan.json | 142 +- languages/i18n/nap.json | 273 +- languages/i18n/nb.json | 150 +- languages/i18n/nds-nl.json | 29 +- languages/i18n/nds.json | 5 +- languages/i18n/ne.json | 1612 ++++-- languages/i18n/nl.json | 254 +- languages/i18n/nn.json | 68 +- languages/i18n/oc.json | 90 +- languages/i18n/olo.json | 811 +++ languages/i18n/or.json | 125 +- languages/i18n/os.json | 632 +- languages/i18n/pa.json | 39 +- languages/i18n/pam.json | 117 +- languages/i18n/pdc.json | 13 +- languages/i18n/pfl.json | 4 +- languages/i18n/pl.json | 418 +- languages/i18n/pms.json | 122 +- languages/i18n/pnb.json | 239 +- languages/i18n/prg.json | 6 +- languages/i18n/ps.json | 325 +- languages/i18n/pt-br.json | 266 +- languages/i18n/pt.json | 292 +- languages/i18n/qqq.json | 251 +- languages/i18n/qu.json | 24 +- languages/i18n/rm.json | 9 +- languages/i18n/ro.json | 199 +- languages/i18n/roa-tara.json | 471 +- languages/i18n/ru.json | 224 +- languages/i18n/rue.json | 18 +- languages/i18n/rup.json | 7 +- languages/i18n/sa.json | 1073 ++-- languages/i18n/sah.json | 197 +- languages/i18n/sat.json | 4 +- languages/i18n/sc.json | 210 +- languages/i18n/scn.json | 1625 +++--- languages/i18n/sco.json | 37 +- languages/i18n/sd.json | 50 +- languages/i18n/sdc.json | 2 +- languages/i18n/sdh.json | 629 ++ languages/i18n/se.json | 2 +- languages/i18n/sei.json | 2 +- languages/i18n/ses.json | 18 +- languages/i18n/sgs.json | 1331 +++-- languages/i18n/sh.json | 15 +- languages/i18n/shi.json | 2 +- languages/i18n/si.json | 481 +- languages/i18n/sk.json | 209 +- languages/i18n/sl.json | 207 +- languages/i18n/sli.json | 8 +- languages/i18n/sma.json | 2 +- languages/i18n/so.json | 16 +- languages/i18n/sq.json | 268 +- languages/i18n/sr-ec.json | 271 +- languages/i18n/sr-el.json | 200 +- languages/i18n/srn.json | 2 +- languages/i18n/stq.json | 11 +- languages/i18n/su.json | 159 +- languages/i18n/sv.json | 204 +- languages/i18n/sw.json | 483 +- languages/i18n/szl.json | 96 +- languages/i18n/ta.json | 527 +- languages/i18n/te.json | 194 +- languages/i18n/tg-cyrl.json | 17 +- languages/i18n/tg-latn.json | 7 +- languages/i18n/th.json | 132 +- languages/i18n/tk.json | 29 +- languages/i18n/tl.json | 74 +- languages/i18n/tr.json | 474 +- languages/i18n/tt-cyrl.json | 116 +- languages/i18n/tt-latn.json | 1 - languages/i18n/tyv.json | 40 +- languages/i18n/tzm.json | 2 +- languages/i18n/ug-arab.json | 11 +- languages/i18n/uk.json | 288 +- languages/i18n/ur.json | 74 +- languages/i18n/uz.json | 55 +- languages/i18n/vec.json | 135 +- languages/i18n/vep.json | 25 +- languages/i18n/vi.json | 244 +- languages/i18n/vo.json | 43 +- languages/i18n/vro.json | 51 +- languages/i18n/wa.json | 4 +- languages/i18n/war.json | 49 +- languages/i18n/wo.json | 91 +- languages/i18n/wuu.json | 339 +- languages/i18n/xmf.json | 2021 ++++++- languages/i18n/yi.json | 98 +- languages/i18n/yo.json | 21 +- languages/i18n/yue.json | 391 +- languages/i18n/zh-hans.json | 259 +- languages/i18n/zh-hant.json | 297 +- languages/i18n/zh-tw.json | 3 - languages/messages/MessagesAce.php | 1 - languages/messages/MessagesAdy.php | 11 + languages/messages/MessagesAdy_cyrl.php | 13 + languages/messages/MessagesAeb.php | 7 +- languages/messages/MessagesAeb_arab.php | 13 + languages/messages/MessagesAf.php | 1 - languages/messages/MessagesAln.php | 1 - languages/messages/MessagesAn.php | 1 - languages/messages/MessagesAr.php | 1 - languages/messages/MessagesArc.php | 1 - languages/messages/MessagesArz.php | 1 - languages/messages/MessagesAs.php | 15 +- languages/messages/MessagesAst.php | 2 +- languages/messages/MessagesAv.php | 1 - languages/messages/MessagesAvk.php | 5 +- languages/messages/MessagesAzb.php | 51 +- languages/messages/MessagesBa.php | 1 - languages/messages/MessagesBcc.php | 3 +- languages/messages/MessagesBe_tarask.php | 1 - languages/messages/MessagesBg.php | 3 +- languages/messages/MessagesBgn.php | 104 +- languages/messages/MessagesBjn.php | 1 - languages/messages/MessagesBr.php | 1 - languages/messages/MessagesBs.php | 3 +- languages/messages/MessagesBxr.php | 1 - languages/messages/MessagesCa.php | 1 - languages/messages/MessagesCdo.php | 1 - languages/messages/MessagesCe.php | 18 +- languages/messages/MessagesCkb.php | 1 - languages/messages/MessagesCs.php | 1 - languages/messages/MessagesCv.php | 2 +- languages/messages/MessagesDa.php | 1 - languages/messages/MessagesDe.php | 1 - languages/messages/MessagesDiq.php | 1 - languages/messages/MessagesDsb.php | 5 +- languages/messages/MessagesDty.php | 11 + languages/messages/MessagesEl.php | 1 - languages/messages/MessagesEn.php | 3 +- languages/messages/MessagesEo.php | 1 - languages/messages/MessagesEs.php | 1 - languages/messages/MessagesEt.php | 1 - languages/messages/MessagesFa.php | 1 - languages/messages/MessagesFi.php | 1 - languages/messages/MessagesFr.php | 1 - languages/messages/MessagesFrp.php | 1 - languages/messages/MessagesFur.php | 1 - languages/messages/MessagesFy.php | 1 - languages/messages/MessagesGag.php | 1 - languages/messages/MessagesGl.php | 1 - languages/messages/MessagesGom.php | 11 + languages/messages/MessagesGom_deva.php | 31 + languages/messages/MessagesGsw.php | 1 - languages/messages/MessagesGu.php | 1 - languages/messages/MessagesHe.php | 1 - languages/messages/MessagesHr.php | 1 - languages/messages/MessagesHsb.php | 1 - languages/messages/MessagesHt.php | 1 - languages/messages/MessagesHu.php | 1 - languages/messages/MessagesHy.php | 1 - languages/messages/MessagesIa.php | 1 - languages/messages/MessagesId.php | 1 - languages/messages/MessagesIe.php | 1 - languages/messages/MessagesIs.php | 1 - languages/messages/MessagesIt.php | 2 - languages/messages/MessagesJa.php | 1 - languages/messages/MessagesKa.php | 1 - languages/messages/MessagesKaa.php | 1 - languages/messages/MessagesKhw.php | 17 +- languages/messages/MessagesKk_arab.php | 1 - languages/messages/MessagesKk_cyrl.php | 1 - languages/messages/MessagesKk_latn.php | 1 - languages/messages/MessagesKl.php | 2 +- languages/messages/MessagesKm.php | 1 - languages/messages/MessagesKo.php | 4 +- languages/messages/MessagesKrc.php | 1 - languages/messages/MessagesKsh.php | 1 - languages/messages/MessagesKw.php | 1 - languages/messages/MessagesLa.php | 1 - languages/messages/MessagesLad.php | 1 - languages/messages/MessagesLb.php | 1 - languages/messages/MessagesLi.php | 1 - languages/messages/MessagesLij.php | 1 - languages/messages/MessagesLrc.php | 262 +- languages/messages/MessagesLt.php | 1 - languages/messages/MessagesLuz.php | 11 + languages/messages/MessagesLv.php | 93 +- languages/messages/MessagesMdf.php | 1 - languages/messages/MessagesMg.php | 1 - languages/messages/MessagesMin.php | 1 - languages/messages/MessagesMk.php | 1 - languages/messages/MessagesMl.php | 3 +- languages/messages/MessagesMr.php | 3 +- languages/messages/MessagesMs.php | 1 - languages/messages/MessagesMt.php | 1 - languages/messages/MessagesMyv.php | 17 +- languages/messages/MessagesMzn.php | 6 +- languages/messages/MessagesNb.php | 1 - languages/messages/MessagesNds.php | 1 - languages/messages/MessagesNds_nl.php | 1 - languages/messages/MessagesNl.php | 1 - languages/messages/MessagesNn.php | 1 - languages/messages/MessagesOc.php | 1 - languages/messages/MessagesOlo.php | 14 + languages/messages/MessagesOr.php | 1 - languages/messages/MessagesOs.php | 1 - languages/messages/MessagesPa.php | 1 - languages/messages/MessagesPl.php | 1 - languages/messages/MessagesPnb.php | 18 + languages/messages/MessagesPnt.php | 2 - languages/messages/MessagesPs.php | 1 - languages/messages/MessagesPt.php | 1 - languages/messages/MessagesPt_br.php | 1 - languages/messages/MessagesQu.php | 1 - languages/messages/MessagesRo.php | 1 - languages/messages/MessagesRu.php | 1 - languages/messages/MessagesRue.php | 1 - languages/messages/MessagesSa.php | 41 +- languages/messages/MessagesScn.php | 3 +- languages/messages/MessagesSd.php | 1 - languages/messages/MessagesSdc.php | 1 - languages/messages/MessagesSdh.php | 13 + languages/messages/MessagesSe.php | 1 - languages/messages/MessagesSh.php | 1 - languages/messages/MessagesSi.php | 1 - languages/messages/MessagesSk.php | 1 - languages/messages/MessagesSl.php | 1 - languages/messages/MessagesSq.php | 2 - languages/messages/MessagesSr_ec.php | 1 - languages/messages/MessagesSu.php | 3 +- languages/messages/MessagesSv.php | 1 - languages/messages/MessagesSw.php | 1 - languages/messages/MessagesTe.php | 1 - languages/messages/MessagesTh.php | 1 - languages/messages/MessagesTl.php | 1 - languages/messages/MessagesTr.php | 1 - languages/messages/MessagesTt_cyrl.php | 5 +- languages/messages/MessagesUdm.php | 3 +- languages/messages/MessagesUk.php | 1 - languages/messages/MessagesUr.php | 1 - languages/messages/MessagesVec.php | 1 - languages/messages/MessagesVi.php | 1 - languages/messages/MessagesYi.php | 1 - languages/messages/MessagesYue.php | 49 +- languages/messages/MessagesZh.php | 1 - load.php | 13 +- maintenance/Maintenance.php | 25 +- maintenance/archives/patch-il_from_namespace.sql | 2 +- maintenance/archives/patch-pl_from_namespace.sql | 2 +- maintenance/archives/patch-tl_from_namespace.sql | 2 +- maintenance/backup.inc | 4 +- maintenance/backupTextPass.inc | 8 +- maintenance/benchmarks/benchmarkHooks.php | 2 +- maintenance/checkComposerLockUpToDate.php | 2 +- maintenance/checkImages.php | 20 +- maintenance/checkSyntax.php | 4 +- maintenance/checkUsernames.php | 2 +- maintenance/cleanupRemovedModules.php | 14 +- maintenance/cleanupTable.inc | 1 - maintenance/cleanupUploadStash.php | 1 + maintenance/convertExtensionToRegistration.php | 39 +- maintenance/copyFileBackend.php | 12 +- maintenance/createAndPromote.php | 21 +- maintenance/deleteArchivedFiles.inc | 84 - maintenance/deleteArchivedFiles.php | 79 +- maintenance/deleteArchivedRevisions.inc | 61 - maintenance/deleteArchivedRevisions.php | 28 +- maintenance/deleteBatch.php | 4 +- maintenance/deleteDefaultMessages.php | 5 +- maintenance/deleteEqualMessages.php | 12 +- maintenance/deleteImageMemcached.php | 89 - maintenance/dictionary/mediawiki.dic | 6 +- maintenance/eraseArchivedFile.php | 1 - maintenance/exportSites.php | 8 +- maintenance/findHooks.php | 15 +- maintenance/fixDefaultJsonContentPages.php | 128 + maintenance/fixSlaveDesync.php | 246 - maintenance/generateJsonI18n.php | 134 +- maintenance/getConfiguration.php | 2 +- maintenance/importImages.php | 12 +- maintenance/importSites.php | 6 +- maintenance/install.php | 8 +- maintenance/interwiki.list | 1 - maintenance/interwiki.sql | 1 - maintenance/jsduck/categories.json | 19 +- maintenance/jsduck/custom_tags.rb | 4 +- maintenance/jsduck/eg-iframe.html | 2 +- maintenance/jsduck/external.js | 1 - maintenance/jsparse.php | 4 +- maintenance/language/StatOutputs.php | 8 +- maintenance/language/checkLanguage.inc | 2 +- maintenance/language/generateNormalizerDataAr.php | 3 +- maintenance/language/generateNormalizerDataMl.php | 3 +- maintenance/language/languages.inc | 2 +- maintenance/language/zhtable/Makefile.py | 13 +- maintenance/language/zhtable/simp2trad.manual | 5 +- .../language/zhtable/simp2trad_noconvert.manual | 7 +- maintenance/language/zhtable/simpphrases.manual | 30 +- .../language/zhtable/simpphrases_exclude.manual | 5 +- maintenance/language/zhtable/symme_supp.manual | 4 +- maintenance/language/zhtable/toCN.manual | 224 +- maintenance/language/zhtable/toHK.manual | 233 +- maintenance/language/zhtable/toSimp.manual | 34 +- maintenance/language/zhtable/toTW.manual | 88 +- maintenance/language/zhtable/toTrad.manual | 86 +- maintenance/language/zhtable/trad2simp.manual | 50 +- .../language/zhtable/trad2simp_noconvert.manual | 6 +- maintenance/language/zhtable/tradphrases.manual | 479 +- .../language/zhtable/tradphrases_exclude.manual | 43 +- maintenance/migrateFileRepoLayout.php | 232 + maintenance/namespaceDupes.php | 190 +- maintenance/parse.php | 3 +- maintenance/populateCategory.php | 10 - maintenance/populateContentModel.php | 207 + .../archives/patch-textsearch_bug66650.sql | 5 + maintenance/postgres/update-keys.sql | 5 + maintenance/purgeChangedFiles.php | 2 - maintenance/rebuildFileCache.php | 4 +- maintenance/rebuildImages.php | 1 - maintenance/rebuildLocalisationCache.php | 8 - maintenance/refreshLinks.php | 11 +- maintenance/resources/update-oojs-ui.sh | 55 +- maintenance/resources/update-oojs.sh | 26 +- maintenance/runJobs.php | 18 +- maintenance/showJobs.php | 57 +- maintenance/sql.php | 33 +- maintenance/sqlite.php | 4 +- maintenance/storage/fixBug20757.php | 4 +- maintenance/storage/recompressTracked.php | 4 +- maintenance/syncFileBackend.php | 1 + maintenance/tables.sql | 10 +- maintenance/update.php | 20 +- maintenance/updateCollation.php | 2 - maintenance/validateRegistrationFile.php | 27 +- maintenance/waitForSlave.php | 11 +- mw-config/config.css | 29 + mw-config/config.js | 28 +- mw-config/images/help-question-hover.gif | Bin 0 -> 1246 bytes mw-config/images/help-question.gif | Bin 0 -> 126 bytes mw-config/index.php5 | 26 - opensearch_desc.php | 2 +- phpcs.xml | 14 + resources/Resources.php | 513 +- resources/ResourcesOOUI.php | 132 + resources/lib/es5-shim/es5-shim.js | 782 +-- resources/lib/jquery.client/jquery.client.js | 9 +- resources/lib/jquery.i18n/CREDITS | 9 + resources/lib/jquery.i18n/GPL-LICENSE | 339 ++ resources/lib/jquery.i18n/MIT-LICENSE | 21 + resources/lib/jquery.i18n/README.md | 432 ++ .../jquery.i18n/src/jquery.i18n.emitter.bidi.js | 88 + .../lib/jquery.i18n/src/jquery.i18n.emitter.js | 168 + .../lib/jquery.i18n/src/jquery.i18n.fallbacks.js | 186 + resources/lib/jquery.i18n/src/jquery.i18n.js | 287 + .../lib/jquery.i18n/src/jquery.i18n.language.js | 472 ++ .../jquery.i18n/src/jquery.i18n.messagestore.js | 125 + .../lib/jquery.i18n/src/jquery.i18n.parser.js | 309 + resources/lib/jquery.i18n/src/languages/bs.js | 22 + resources/lib/jquery.i18n/src/languages/dsb.js | 22 + resources/lib/jquery.i18n/src/languages/fi.js | 49 + resources/lib/jquery.i18n/src/languages/ga.js | 38 + resources/lib/jquery.i18n/src/languages/he.js | 31 + resources/lib/jquery.i18n/src/languages/hsb.js | 21 + resources/lib/jquery.i18n/src/languages/hu.js | 26 + resources/lib/jquery.i18n/src/languages/hy.js | 25 + resources/lib/jquery.i18n/src/languages/la.js | 54 + resources/lib/jquery.i18n/src/languages/ml.js | 98 + resources/lib/jquery.i18n/src/languages/os.js | 76 + resources/lib/jquery.i18n/src/languages/ru.js | 29 + resources/lib/jquery.i18n/src/languages/sl.js | 26 + resources/lib/jquery.i18n/src/languages/uk.js | 39 + resources/lib/json2/json2.js | 126 +- resources/lib/mustache/LICENSE | 10 + resources/lib/oojs-ui/i18n/af.json | 8 +- resources/lib/oojs-ui/i18n/ar.json | 10 +- resources/lib/oojs-ui/i18n/arq.json | 7 +- resources/lib/oojs-ui/i18n/as.json | 25 + resources/lib/oojs-ui/i18n/ast.json | 9 +- resources/lib/oojs-ui/i18n/be-tarask.json | 21 +- resources/lib/oojs-ui/i18n/be.json | 17 +- resources/lib/oojs-ui/i18n/bg.json | 13 +- resources/lib/oojs-ui/i18n/bn.json | 9 +- resources/lib/oojs-ui/i18n/bs.json | 5 +- resources/lib/oojs-ui/i18n/ca.json | 11 +- resources/lib/oojs-ui/i18n/ckb.json | 13 +- resources/lib/oojs-ui/i18n/cs.json | 4 +- resources/lib/oojs-ui/i18n/cu.json | 3 +- resources/lib/oojs-ui/i18n/da.json | 7 +- resources/lib/oojs-ui/i18n/de.json | 6 +- resources/lib/oojs-ui/i18n/dty.json | 18 + resources/lib/oojs-ui/i18n/el.json | 8 +- resources/lib/oojs-ui/i18n/en-ca.json | 22 + resources/lib/oojs-ui/i18n/en.json | 6 +- resources/lib/oojs-ui/i18n/eo.json | 17 +- resources/lib/oojs-ui/i18n/es.json | 6 +- resources/lib/oojs-ui/i18n/et.json | 9 +- resources/lib/oojs-ui/i18n/eu.json | 10 +- resources/lib/oojs-ui/i18n/fa.json | 15 +- resources/lib/oojs-ui/i18n/fi.json | 14 +- resources/lib/oojs-ui/i18n/fr.json | 18 +- resources/lib/oojs-ui/i18n/gl.json | 6 +- resources/lib/oojs-ui/i18n/glk.json | 23 + resources/lib/oojs-ui/i18n/gu.json | 12 +- resources/lib/oojs-ui/i18n/he.json | 6 +- resources/lib/oojs-ui/i18n/hi.json | 7 +- resources/lib/oojs-ui/i18n/hrx.json | 12 + resources/lib/oojs-ui/i18n/hu-formal.json | 21 + resources/lib/oojs-ui/i18n/hu.json | 10 +- resources/lib/oojs-ui/i18n/hy.json | 7 +- resources/lib/oojs-ui/i18n/ia.json | 9 +- resources/lib/oojs-ui/i18n/id.json | 4 +- resources/lib/oojs-ui/i18n/ilo.json | 4 +- resources/lib/oojs-ui/i18n/is.json | 6 +- resources/lib/oojs-ui/i18n/it.json | 13 +- resources/lib/oojs-ui/i18n/ja.json | 9 +- resources/lib/oojs-ui/i18n/jv.json | 18 +- resources/lib/oojs-ui/i18n/ka.json | 4 +- resources/lib/oojs-ui/i18n/km.json | 23 +- resources/lib/oojs-ui/i18n/ko.json | 13 +- resources/lib/oojs-ui/i18n/krc.json | 4 +- resources/lib/oojs-ui/i18n/krl.json | 10 + resources/lib/oojs-ui/i18n/ksh.json | 5 +- resources/lib/oojs-ui/i18n/ku-latn.json | 7 +- resources/lib/oojs-ui/i18n/la.json | 15 + resources/lib/oojs-ui/i18n/lb.json | 5 +- resources/lib/oojs-ui/i18n/li.json | 21 + resources/lib/oojs-ui/i18n/lt.json | 20 +- resources/lib/oojs-ui/i18n/luz.json | 21 + resources/lib/oojs-ui/i18n/mk.json | 6 +- resources/lib/oojs-ui/i18n/ml.json | 18 +- resources/lib/oojs-ui/i18n/mr.json | 11 +- resources/lib/oojs-ui/i18n/ms.json | 11 +- resources/lib/oojs-ui/i18n/nap.json | 21 +- resources/lib/oojs-ui/i18n/nb.json | 6 +- resources/lib/oojs-ui/i18n/nl.json | 4 +- resources/lib/oojs-ui/i18n/oc.json | 9 +- resources/lib/oojs-ui/i18n/olo.json | 23 + resources/lib/oojs-ui/i18n/om.json | 4 +- resources/lib/oojs-ui/i18n/or.json | 7 +- resources/lib/oojs-ui/i18n/pa.json | 9 +- resources/lib/oojs-ui/i18n/pl.json | 11 +- resources/lib/oojs-ui/i18n/pms.json | 13 +- resources/lib/oojs-ui/i18n/ps.json | 6 +- resources/lib/oojs-ui/i18n/pt-br.json | 17 +- resources/lib/oojs-ui/i18n/pt.json | 8 +- resources/lib/oojs-ui/i18n/qqq.json | 6 +- resources/lib/oojs-ui/i18n/ro.json | 6 +- resources/lib/oojs-ui/i18n/roa-tara.json | 6 +- resources/lib/oojs-ui/i18n/ru.json | 9 +- resources/lib/oojs-ui/i18n/sa.json | 14 + resources/lib/oojs-ui/i18n/sah.json | 16 +- resources/lib/oojs-ui/i18n/sco.json | 15 +- resources/lib/oojs-ui/i18n/sh.json | 14 +- resources/lib/oojs-ui/i18n/sk.json | 14 +- resources/lib/oojs-ui/i18n/sl.json | 4 +- resources/lib/oojs-ui/i18n/sq.json | 11 +- resources/lib/oojs-ui/i18n/sr-ec.json | 4 +- resources/lib/oojs-ui/i18n/su.json | 21 + resources/lib/oojs-ui/i18n/sv.json | 9 +- resources/lib/oojs-ui/i18n/ta.json | 17 +- resources/lib/oojs-ui/i18n/te.json | 11 +- resources/lib/oojs-ui/i18n/tl.json | 13 +- resources/lib/oojs-ui/i18n/uk.json | 10 +- resources/lib/oojs-ui/i18n/vec.json | 11 +- resources/lib/oojs-ui/i18n/vi.json | 13 +- resources/lib/oojs-ui/i18n/xmf.json | 19 + resources/lib/oojs-ui/i18n/yi.json | 7 +- resources/lib/oojs-ui/i18n/yue.json | 16 +- resources/lib/oojs-ui/i18n/zh-hans.json | 17 +- resources/lib/oojs-ui/i18n/zh-hant.json | 9 +- resources/lib/oojs-ui/oojs-ui-apex-noimages.css | 2956 ++++++++++ resources/lib/oojs-ui/oojs-ui-apex.js | 28 + .../lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css | 64 - .../oojs-ui/oojs-ui-mediawiki-icons-content.css | 76 - .../oojs-ui-mediawiki-icons-editing-advanced.css | 166 - .../oojs-ui-mediawiki-icons-editing-core.css | 88 - .../oojs-ui-mediawiki-icons-editing-list.css | 34 - .../oojs-ui-mediawiki-icons-editing-styling.css | 495 -- .../oojs-ui-mediawiki-icons-interactions.css | 106 - .../lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css | 100 - .../oojs-ui/oojs-ui-mediawiki-icons-location.css | 34 - .../lib/oojs-ui/oojs-ui-mediawiki-icons-media.css | 46 - .../oojs-ui/oojs-ui-mediawiki-icons-moderation.css | 148 - .../oojs-ui/oojs-ui-mediawiki-icons-movement.css | 64 - .../lib/oojs-ui/oojs-ui-mediawiki-icons-user.css | 34 - .../oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css | 28 - .../lib/oojs-ui/oojs-ui-mediawiki-noimages.css | 931 ++- resources/lib/oojs-ui/oojs-ui-mediawiki.css | 3204 ---------- resources/lib/oojs-ui/oojs-ui-mediawiki.js | 19 +- resources/lib/oojs-ui/oojs-ui.js | 6101 ++++++++++++++++---- .../themes/apex/icons-editing-advanced.json | 79 + .../oojs-ui/themes/apex/icons-editing-core.json | 24 + .../oojs-ui/themes/apex/icons-editing-list.json | 22 + .../oojs-ui/themes/apex/icons-editing-styling.json | 72 + .../lib/oojs-ui/themes/apex/icons-moderation.json | 33 + .../lib/oojs-ui/themes/apex/icons-movement.json | 27 + resources/lib/oojs-ui/themes/apex/icons.json | 51 + .../lib/oojs-ui/themes/apex/images/icons/add.png | Bin 0 -> 144 bytes .../lib/oojs-ui/themes/apex/images/icons/add.svg | 6 + .../oojs-ui/themes/apex/images/icons/advanced.png | Bin 0 -> 464 bytes .../oojs-ui/themes/apex/images/icons/advanced.svg | 6 + .../lib/oojs-ui/themes/apex/images/icons/alert.png | Bin 0 -> 422 bytes .../lib/oojs-ui/themes/apex/images/icons/alert.svg | 8 + .../themes/apex/images/icons/align-center.png | Bin 0 -> 165 bytes .../themes/apex/images/icons/align-center.svg | 6 + .../themes/apex/images/icons/align-float-left.png | Bin 0 -> 176 bytes .../themes/apex/images/icons/align-float-left.svg | 6 + .../themes/apex/images/icons/align-float-right.png | Bin 0 -> 176 bytes .../themes/apex/images/icons/align-float-right.svg | 6 + .../themes/apex/images/icons/arched-arrow-ltr.png | Bin 0 -> 266 bytes .../themes/apex/images/icons/arched-arrow-ltr.svg | 6 + .../themes/apex/images/icons/arched-arrow-rtl.png | Bin 0 -> 264 bytes .../themes/apex/images/icons/arched-arrow-rtl.svg | 6 + .../oojs-ui/themes/apex/images/icons/arrow-ltr.png | Bin 0 -> 197 bytes .../oojs-ui/themes/apex/images/icons/arrow-ltr.svg | 6 + .../oojs-ui/themes/apex/images/icons/arrow-rtl.png | Bin 0 -> 198 bytes .../oojs-ui/themes/apex/images/icons/arrow-rtl.svg | 6 + .../themes/apex/images/icons/bigger-ltr.png | Bin 0 -> 341 bytes .../themes/apex/images/icons/bigger-ltr.svg | 7 + .../themes/apex/images/icons/bigger-rtl.png | Bin 0 -> 342 bytes .../themes/apex/images/icons/bigger-rtl.svg | 7 + .../lib/oojs-ui/themes/apex/images/icons/block.png | Bin 0 -> 295 bytes .../lib/oojs-ui/themes/apex/images/icons/block.svg | 4 + .../themes/apex/images/icons/blockUndo-ltr.png | Bin 0 -> 309 bytes .../themes/apex/images/icons/blockUndo-ltr.svg | 6 + .../themes/apex/images/icons/blockUndo-rtl.png | Bin 0 -> 317 bytes .../themes/apex/images/icons/blockUndo-rtl.svg | 6 + .../oojs-ui/themes/apex/images/icons/bold-a.png | Bin 0 -> 276 bytes .../oojs-ui/themes/apex/images/icons/bold-a.svg | 6 + .../themes/apex/images/icons/bold-arab-ain.png | Bin 0 -> 284 bytes .../themes/apex/images/icons/bold-arab-ain.svg | 6 + .../themes/apex/images/icons/bold-arab-dad.png | Bin 0 -> 310 bytes .../themes/apex/images/icons/bold-arab-dad.svg | 6 + .../themes/apex/images/icons/bold-armn-to.png | Bin 0 -> 342 bytes .../themes/apex/images/icons/bold-armn-to.svg | 6 + .../oojs-ui/themes/apex/images/icons/bold-b.png | Bin 0 -> 219 bytes .../oojs-ui/themes/apex/images/icons/bold-b.svg | 6 + .../themes/apex/images/icons/bold-cyrl-be.png | Bin 0 -> 228 bytes .../themes/apex/images/icons/bold-cyrl-be.svg | 6 + .../themes/apex/images/icons/bold-cyrl-te.png | Bin 0 -> 145 bytes .../themes/apex/images/icons/bold-cyrl-te.svg | 6 + .../themes/apex/images/icons/bold-cyrl-zhe.png | Bin 0 -> 337 bytes .../themes/apex/images/icons/bold-cyrl-zhe.svg | 6 + .../oojs-ui/themes/apex/images/icons/bold-f.png | Bin 0 -> 150 bytes .../oojs-ui/themes/apex/images/icons/bold-f.svg | 6 + .../oojs-ui/themes/apex/images/icons/bold-g.png | Bin 0 -> 313 bytes .../oojs-ui/themes/apex/images/icons/bold-g.svg | 6 + .../themes/apex/images/icons/bold-geor-man.png | Bin 0 -> 294 bytes .../themes/apex/images/icons/bold-geor-man.svg | 6 + .../oojs-ui/themes/apex/images/icons/bold-l.png | Bin 0 -> 143 bytes .../oojs-ui/themes/apex/images/icons/bold-l.svg | 6 + .../oojs-ui/themes/apex/images/icons/bold-n.png | Bin 0 -> 176 bytes .../oojs-ui/themes/apex/images/icons/bold-n.svg | 6 + .../oojs-ui/themes/apex/images/icons/bold-v.png | Bin 0 -> 256 bytes .../oojs-ui/themes/apex/images/icons/bold-v.svg | 6 + .../themes/apex/images/icons/calendar-ltr.png | Bin 0 -> 213 bytes .../themes/apex/images/icons/calendar-ltr.svg | 4 + .../themes/apex/images/icons/calendar-rtl.png | Bin 0 -> 216 bytes .../themes/apex/images/icons/calendar-rtl.svg | 4 + .../oojs-ui/themes/apex/images/icons/cancel.png | Bin 0 -> 350 bytes .../oojs-ui/themes/apex/images/icons/cancel.svg | 6 + .../oojs-ui/themes/apex/images/icons/caret-ltr.png | Bin 0 -> 251 bytes .../oojs-ui/themes/apex/images/icons/caret-ltr.svg | 4 + .../oojs-ui/themes/apex/images/icons/caret-rtl.png | Bin 0 -> 252 bytes .../oojs-ui/themes/apex/images/icons/caret-rtl.svg | 4 + .../oojs-ui/themes/apex/images/icons/caretDown.png | Bin 0 -> 246 bytes .../oojs-ui/themes/apex/images/icons/caretDown.svg | 4 + .../oojs-ui/themes/apex/images/icons/caretUp.png | Bin 0 -> 243 bytes .../oojs-ui/themes/apex/images/icons/caretUp.svg | 4 + .../themes/apex/images/icons/case-sensitive.png | Bin 0 -> 369 bytes .../themes/apex/images/icons/case-sensitive.svg | 7 + .../lib/oojs-ui/themes/apex/images/icons/check.png | Bin 0 -> 235 bytes .../lib/oojs-ui/themes/apex/images/icons/check.svg | 6 + .../oojs-ui/themes/apex/images/icons/circle.png | Bin 0 -> 244 bytes .../oojs-ui/themes/apex/images/icons/circle.svg | 4 + .../lib/oojs-ui/themes/apex/images/icons/close.png | Bin 0 -> 237 bytes .../lib/oojs-ui/themes/apex/images/icons/close.svg | 6 + .../lib/oojs-ui/themes/apex/images/icons/code.png | Bin 0 -> 272 bytes .../lib/oojs-ui/themes/apex/images/icons/code.svg | 7 + .../oojs-ui/themes/apex/images/icons/collapse.png | Bin 0 -> 195 bytes .../oojs-ui/themes/apex/images/icons/collapse.svg | 6 + .../oojs-ui/themes/apex/images/icons/comment.png | Bin 0 -> 211 bytes .../oojs-ui/themes/apex/images/icons/comment.svg | 6 + .../themes/apex/images/icons/downTriangle.png | Bin 0 -> 212 bytes .../themes/apex/images/icons/downTriangle.svg | 4 + .../oojs-ui/themes/apex/images/icons/edit-ltr.png | Bin 0 -> 282 bytes .../oojs-ui/themes/apex/images/icons/edit-ltr.svg | 6 + .../oojs-ui/themes/apex/images/icons/edit-rtl.png | Bin 0 -> 287 bytes .../oojs-ui/themes/apex/images/icons/edit-rtl.svg | 6 + .../themes/apex/images/icons/editLock-ltr.png | Bin 0 -> 312 bytes .../themes/apex/images/icons/editLock-ltr.svg | 8 + .../themes/apex/images/icons/editLock-rtl.png | Bin 0 -> 328 bytes .../themes/apex/images/icons/editLock-rtl.svg | 8 + .../themes/apex/images/icons/editUndo-ltr.png | Bin 0 -> 392 bytes .../themes/apex/images/icons/editUndo-ltr.svg | 11 + .../themes/apex/images/icons/editUndo-rtl.png | Bin 0 -> 379 bytes .../themes/apex/images/icons/editUndo-rtl.svg | 11 + .../oojs-ui/themes/apex/images/icons/ellipsis.png | Bin 0 -> 166 bytes .../oojs-ui/themes/apex/images/icons/ellipsis.svg | 14 + .../oojs-ui/themes/apex/images/icons/expand.png | Bin 0 -> 196 bytes .../oojs-ui/themes/apex/images/icons/expand.svg | 6 + .../themes/apex/images/icons/external-link-ltr.png | Bin 0 -> 239 bytes .../themes/apex/images/icons/external-link-ltr.svg | 7 + .../themes/apex/images/icons/external-link-rtl.png | Bin 0 -> 232 bytes .../themes/apex/images/icons/external-link-rtl.svg | 7 + .../oojs-ui/themes/apex/images/icons/find-ltr.png | Bin 0 -> 307 bytes .../oojs-ui/themes/apex/images/icons/find-ltr.svg | 7 + .../oojs-ui/themes/apex/images/icons/find-rtl.png | Bin 0 -> 307 bytes .../oojs-ui/themes/apex/images/icons/find-rtl.svg | 7 + .../oojs-ui/themes/apex/images/icons/flag-ltr.png | Bin 0 -> 231 bytes .../oojs-ui/themes/apex/images/icons/flag-ltr.svg | 4 + .../oojs-ui/themes/apex/images/icons/flag-rtl.png | Bin 0 -> 237 bytes .../oojs-ui/themes/apex/images/icons/flag-rtl.svg | 4 + .../themes/apex/images/icons/flagUndo-ltr.png | Bin 0 -> 301 bytes .../themes/apex/images/icons/flagUndo-ltr.svg | 16 + .../themes/apex/images/icons/flagUndo-rtl.png | Bin 0 -> 294 bytes .../themes/apex/images/icons/flagUndo-rtl.svg | 16 + .../oojs-ui/themes/apex/images/icons/help-ltr.png | Bin 0 -> 528 bytes .../oojs-ui/themes/apex/images/icons/help-ltr.svg | 10 + .../oojs-ui/themes/apex/images/icons/help-rtl.png | Bin 0 -> 543 bytes .../oojs-ui/themes/apex/images/icons/help-rtl.svg | 10 + .../oojs-ui/themes/apex/images/icons/history.png | Bin 0 -> 541 bytes .../oojs-ui/themes/apex/images/icons/history.svg | 7 + .../themes/apex/images/icons/indent-ltr.png | Bin 0 -> 243 bytes .../themes/apex/images/icons/indent-ltr.svg | 9 + .../themes/apex/images/icons/indent-rtl.png | Bin 0 -> 243 bytes .../themes/apex/images/icons/indent-rtl.svg | 9 + .../lib/oojs-ui/themes/apex/images/icons/info.png | Bin 0 -> 321 bytes .../lib/oojs-ui/themes/apex/images/icons/info.svg | 6 + .../oojs-ui/themes/apex/images/icons/insert.png | Bin 0 -> 144 bytes .../oojs-ui/themes/apex/images/icons/insert.svg | 6 + .../oojs-ui/themes/apex/images/icons/italic-a.png | Bin 0 -> 284 bytes .../oojs-ui/themes/apex/images/icons/italic-a.svg | 6 + .../apex/images/icons/italic-arab-keheh-jeem.png | Bin 0 -> 334 bytes .../apex/images/icons/italic-arab-keheh-jeem.svg | 6 + .../themes/apex/images/icons/italic-arab-meem.png | Bin 0 -> 270 bytes .../themes/apex/images/icons/italic-arab-meem.svg | 6 + .../themes/apex/images/icons/italic-armn-sha.png | Bin 0 -> 338 bytes .../themes/apex/images/icons/italic-armn-sha.svg | 6 + .../oojs-ui/themes/apex/images/icons/italic-c.png | Bin 0 -> 301 bytes .../oojs-ui/themes/apex/images/icons/italic-c.svg | 6 + .../oojs-ui/themes/apex/images/icons/italic-d.png | Bin 0 -> 330 bytes .../oojs-ui/themes/apex/images/icons/italic-d.svg | 6 + .../oojs-ui/themes/apex/images/icons/italic-e.png | Bin 0 -> 256 bytes .../oojs-ui/themes/apex/images/icons/italic-e.svg | 6 + .../themes/apex/images/icons/italic-geor-kan.png | Bin 0 -> 289 bytes .../themes/apex/images/icons/italic-geor-kan.svg | 6 + .../oojs-ui/themes/apex/images/icons/italic-i.png | Bin 0 -> 218 bytes .../oojs-ui/themes/apex/images/icons/italic-i.svg | 6 + .../oojs-ui/themes/apex/images/icons/italic-k.png | Bin 0 -> 285 bytes .../oojs-ui/themes/apex/images/icons/italic-k.svg | 6 + .../oojs-ui/themes/apex/images/icons/italic-s.png | Bin 0 -> 323 bytes .../oojs-ui/themes/apex/images/icons/italic-s.svg | 6 + .../oojs-ui/themes/apex/images/icons/language.png | Bin 0 -> 402 bytes .../oojs-ui/themes/apex/images/icons/language.svg | 7 + .../themes/apex/images/icons/layout-ltr.png | Bin 0 -> 166 bytes .../themes/apex/images/icons/layout-ltr.svg | 7 + .../themes/apex/images/icons/layout-rtl.png | Bin 0 -> 163 bytes .../themes/apex/images/icons/layout-rtl.svg | 7 + .../lib/oojs-ui/themes/apex/images/icons/link.png | Bin 0 -> 301 bytes .../lib/oojs-ui/themes/apex/images/icons/link.svg | 8 + .../themes/apex/images/icons/listBullet-ltr.png | Bin 0 -> 183 bytes .../themes/apex/images/icons/listBullet-ltr.svg | 11 + .../themes/apex/images/icons/listBullet-rtl.png | Bin 0 -> 176 bytes .../themes/apex/images/icons/listBullet-rtl.svg | 11 + .../themes/apex/images/icons/listNumbered-ltr.png | Bin 0 -> 257 bytes .../themes/apex/images/icons/listNumbered-ltr.svg | 11 + .../themes/apex/images/icons/listNumbered-rtl.png | Bin 0 -> 258 bytes .../themes/apex/images/icons/listNumbered-rtl.svg | 11 + .../lib/oojs-ui/themes/apex/images/icons/lock.png | Bin 0 -> 196 bytes .../lib/oojs-ui/themes/apex/images/icons/lock.svg | 6 + .../lib/oojs-ui/themes/apex/images/icons/menu.png | Bin 0 -> 172 bytes .../lib/oojs-ui/themes/apex/images/icons/menu.svg | 6 + .../oojs-ui/themes/apex/images/icons/move-ltr.png | Bin 0 -> 219 bytes .../oojs-ui/themes/apex/images/icons/move-ltr.svg | 6 + .../oojs-ui/themes/apex/images/icons/move-rtl.png | Bin 0 -> 213 bytes .../oojs-ui/themes/apex/images/icons/move-rtl.svg | 6 + .../lib/oojs-ui/themes/apex/images/icons/move.png | Bin 0 -> 249 bytes .../lib/oojs-ui/themes/apex/images/icons/move.svg | 4 + .../themes/apex/images/icons/newline-ltr.png | Bin 0 -> 263 bytes .../themes/apex/images/icons/newline-ltr.svg | 6 + .../themes/apex/images/icons/newline-rtl.png | Bin 0 -> 282 bytes .../themes/apex/images/icons/newline-rtl.svg | 6 + .../themes/apex/images/icons/noWikiText-ltr.png | Bin 0 -> 234 bytes .../themes/apex/images/icons/noWikiText-ltr.svg | 6 + .../themes/apex/images/icons/noWikiText-rtl.png | Bin 0 -> 228 bytes .../themes/apex/images/icons/noWikiText-rtl.svg | 6 + .../oojs-ui/themes/apex/images/icons/notice.png | Bin 0 -> 254 bytes .../oojs-ui/themes/apex/images/icons/notice.svg | 6 + .../themes/apex/images/icons/outdent-ltr.png | Bin 0 -> 239 bytes .../themes/apex/images/icons/outdent-ltr.svg | 9 + .../themes/apex/images/icons/outdent-rtl.png | Bin 0 -> 241 bytes .../themes/apex/images/icons/outdent-rtl.svg | 9 + .../themes/apex/images/icons/outline-ltr.png | Bin 0 -> 153 bytes .../themes/apex/images/icons/outline-ltr.svg | 7 + .../themes/apex/images/icons/outline-rtl.png | Bin 0 -> 154 bytes .../themes/apex/images/icons/outline-rtl.svg | 7 + .../oojs-ui/themes/apex/images/icons/picture.png | Bin 0 -> 308 bytes .../oojs-ui/themes/apex/images/icons/picture.svg | 8 + .../themes/apex/images/icons/puzzle-ltr.png | Bin 0 -> 327 bytes .../themes/apex/images/icons/puzzle-ltr.svg | 4 + .../themes/apex/images/icons/puzzle-rtl.png | Bin 0 -> 338 bytes .../themes/apex/images/icons/puzzle-rtl.svg | 4 + .../themes/apex/images/icons/quotes-ltr.png | Bin 0 -> 288 bytes .../themes/apex/images/icons/quotes-ltr.svg | 6 + .../themes/apex/images/icons/quotes-rtl.png | Bin 0 -> 276 bytes .../themes/apex/images/icons/quotes-rtl.svg | 6 + .../themes/apex/images/icons/quotesAdd-ltr.png | Bin 0 -> 293 bytes .../themes/apex/images/icons/quotesAdd-ltr.svg | 6 + .../themes/apex/images/icons/quotesAdd-rtl.png | Bin 0 -> 285 bytes .../themes/apex/images/icons/quotesAdd-rtl.svg | 6 + .../themes/apex/images/icons/redirect-ltr.png | Bin 0 -> 381 bytes .../themes/apex/images/icons/redirect-ltr.svg | 8 + .../themes/apex/images/icons/redirect-rtl.png | Bin 0 -> 381 bytes .../themes/apex/images/icons/redirect-rtl.svg | 9 + .../apex/images/icons/regular-expression.png | Bin 0 -> 343 bytes .../apex/images/icons/regular-expression.svg | 9 + .../oojs-ui/themes/apex/images/icons/remove.png | Bin 0 -> 172 bytes .../oojs-ui/themes/apex/images/icons/remove.svg | 6 + .../oojs-ui/themes/apex/images/icons/search.png | Bin 0 -> 245 bytes .../oojs-ui/themes/apex/images/icons/search.svg | 6 + .../themes/apex/images/icons/secure-link.png | Bin 0 -> 200 bytes .../themes/apex/images/icons/secure-link.svg | 6 + .../oojs-ui/themes/apex/images/icons/settings.png | Bin 0 -> 191 bytes .../oojs-ui/themes/apex/images/icons/settings.svg | 6 + .../themes/apex/images/icons/smaller-ltr.png | Bin 0 -> 341 bytes .../themes/apex/images/icons/smaller-ltr.svg | 7 + .../themes/apex/images/icons/smaller-rtl.png | Bin 0 -> 342 bytes .../themes/apex/images/icons/smaller-rtl.svg | 7 + .../themes/apex/images/icons/specialCharacter.png | Bin 0 -> 349 bytes .../themes/apex/images/icons/specialCharacter.svg | 6 + .../lib/oojs-ui/themes/apex/images/icons/star.png | Bin 0 -> 435 bytes .../lib/oojs-ui/themes/apex/images/icons/star.svg | 4 + .../themes/apex/images/icons/strikethrough-a.png | Bin 0 -> 299 bytes .../themes/apex/images/icons/strikethrough-a.svg | 7 + .../themes/apex/images/icons/strikethrough-s.png | Bin 0 -> 307 bytes .../themes/apex/images/icons/strikethrough-s.svg | 7 + .../themes/apex/images/icons/strikethrough-y.png | Bin 0 -> 237 bytes .../themes/apex/images/icons/strikethrough-y.svg | 7 + .../themes/apex/images/icons/subscript-ltr.png | Bin 0 -> 244 bytes .../themes/apex/images/icons/subscript-ltr.svg | 5 + .../themes/apex/images/icons/subscript-rtl.png | Bin 0 -> 240 bytes .../themes/apex/images/icons/subscript-rtl.svg | 5 + .../themes/apex/images/icons/superscript-ltr.png | Bin 0 -> 241 bytes .../themes/apex/images/icons/superscript-ltr.svg | 5 + .../themes/apex/images/icons/superscript-rtl.png | Bin 0 -> 240 bytes .../themes/apex/images/icons/superscript-rtl.svg | 5 + .../themes/apex/images/icons/table-caption.png | Bin 0 -> 154 bytes .../themes/apex/images/icons/table-caption.svg | 7 + .../apex/images/icons/table-insert-column-ltr.png | Bin 0 -> 164 bytes .../apex/images/icons/table-insert-column-ltr.svg | 7 + .../apex/images/icons/table-insert-column-rtl.png | Bin 0 -> 165 bytes .../apex/images/icons/table-insert-column-rtl.svg | 7 + .../apex/images/icons/table-insert-row-after.png | Bin 0 -> 153 bytes .../apex/images/icons/table-insert-row-after.svg | 7 + .../apex/images/icons/table-insert-row-before.png | Bin 0 -> 151 bytes .../apex/images/icons/table-insert-row-before.svg | 7 + .../themes/apex/images/icons/table-merge-cells.png | Bin 0 -> 220 bytes .../themes/apex/images/icons/table-merge-cells.svg | 10 + .../lib/oojs-ui/themes/apex/images/icons/table.png | Bin 0 -> 151 bytes .../lib/oojs-ui/themes/apex/images/icons/table.svg | 6 + .../lib/oojs-ui/themes/apex/images/icons/tag.png | Bin 0 -> 260 bytes .../lib/oojs-ui/themes/apex/images/icons/tag.svg | 6 + .../themes/apex/images/icons/templateAdd-ltr.png | Bin 0 -> 193 bytes .../themes/apex/images/icons/templateAdd-ltr.svg | 7 + .../themes/apex/images/icons/templateAdd-rtl.png | Bin 0 -> 202 bytes .../themes/apex/images/icons/templateAdd-rtl.svg | 7 + .../apex/images/icons/text-dir-lefttoright.png | Bin 0 -> 224 bytes .../apex/images/icons/text-dir-lefttoright.svg | 6 + .../apex/images/icons/text-dir-righttoleft.png | Bin 0 -> 233 bytes .../apex/images/icons/text-dir-righttoleft.svg | 6 + .../themes/apex/images/icons/text-style.png | Bin 0 -> 309 bytes .../themes/apex/images/icons/text-style.svg | 7 + .../themes/apex/images/icons/translation-ltr.png | Bin 0 -> 429 bytes .../themes/apex/images/icons/translation-ltr.svg | 4 + .../themes/apex/images/icons/translation-rtl.png | Bin 0 -> 434 bytes .../themes/apex/images/icons/translation-rtl.svg | 4 + .../lib/oojs-ui/themes/apex/images/icons/trash.png | Bin 0 -> 193 bytes .../lib/oojs-ui/themes/apex/images/icons/trash.svg | 4 + .../themes/apex/images/icons/trashUndo-ltr.png | Bin 0 -> 254 bytes .../themes/apex/images/icons/trashUndo-ltr.svg | 6 + .../themes/apex/images/icons/trashUndo-rtl.png | Bin 0 -> 280 bytes .../themes/apex/images/icons/trashUndo-rtl.svg | 6 + .../themes/apex/images/icons/unLock-ltr.png | Bin 0 -> 196 bytes .../themes/apex/images/icons/unLock-ltr.svg | 6 + .../themes/apex/images/icons/unLock-rtl.png | Bin 0 -> 198 bytes .../themes/apex/images/icons/unLock-rtl.svg | 6 + .../oojs-ui/themes/apex/images/icons/unStar.png | Bin 0 -> 262 bytes .../oojs-ui/themes/apex/images/icons/unStar.svg | 4 + .../themes/apex/images/icons/underline-a.png | Bin 0 -> 290 bytes .../themes/apex/images/icons/underline-a.svg | 7 + .../themes/apex/images/icons/underline-u.png | Bin 0 -> 205 bytes .../themes/apex/images/icons/underline-u.svg | 7 + .../themes/apex/images/icons/upTriangle.png | Bin 0 -> 203 bytes .../themes/apex/images/icons/upTriangle.svg | 4 + .../oojs-ui/themes/apex/images/icons/wikiText.png | Bin 0 -> 163 bytes .../oojs-ui/themes/apex/images/icons/wikiText.svg | 15 + .../oojs-ui/themes/apex/images/icons/window.png | Bin 0 -> 251 bytes .../oojs-ui/themes/apex/images/icons/window.svg | 7 + .../themes/apex/images/indicators/alert.png | Bin 0 -> 233 bytes .../themes/apex/images/indicators/alert.svg | 6 + .../themes/apex/images/indicators/arrow-down.png | Bin 0 -> 169 bytes .../themes/apex/images/indicators/arrow-down.svg | 6 + .../themes/apex/images/indicators/arrow-ltr.png | Bin 0 -> 166 bytes .../themes/apex/images/indicators/arrow-ltr.svg | 6 + .../themes/apex/images/indicators/arrow-rtl.png | Bin 0 -> 171 bytes .../themes/apex/images/indicators/arrow-rtl.svg | 6 + .../themes/apex/images/indicators/arrow-up.png | Bin 0 -> 171 bytes .../themes/apex/images/indicators/arrow-up.svg | 6 + .../themes/apex/images/indicators/clear.png | Bin 0 -> 240 bytes .../themes/apex/images/indicators/clear.svg | 6 + .../themes/apex/images/indicators/required.png | Bin 0 -> 241 bytes .../themes/apex/images/indicators/required.svg | 6 + .../themes/apex/images/indicators/search-ltr.png | Bin 0 -> 232 bytes .../themes/apex/images/indicators/search-ltr.svg | 6 + .../themes/apex/images/indicators/search-rtl.png | Bin 0 -> 232 bytes .../themes/apex/images/indicators/search-rtl.svg | 6 + .../themes/apex/images/textures/pending.gif | Bin 0 -> 2032 bytes .../themes/apex/images/textures/transparency.png | Bin 0 -> 145 bytes .../themes/apex/images/textures/transparency.svg | 7 + .../oojs-ui/themes/apex/images/toolbar-shadow.png | Bin 0 -> 131 bytes resources/lib/oojs-ui/themes/apex/indicators.json | 23 + resources/lib/oojs-ui/themes/apex/textures.json | 8 + .../themes/mediawiki/icons-accessibility.json | 19 + .../lib/oojs-ui/themes/mediawiki/icons-alerts.json | 39 + .../oojs-ui/themes/mediawiki/icons-content.json | 56 + .../themes/mediawiki/icons-editing-advanced.json | 85 + .../themes/mediawiki/icons-editing-core.json | 45 + .../themes/mediawiki/icons-editing-list.json | 28 + .../themes/mediawiki/icons-editing-styling.json | 78 + .../themes/mediawiki/icons-interactions.json | 58 + .../lib/oojs-ui/themes/mediawiki/icons-layout.json | 42 + .../oojs-ui/themes/mediawiki/icons-location.json | 25 + .../lib/oojs-ui/themes/mediawiki/icons-media.json | 33 + .../oojs-ui/themes/mediawiki/icons-moderation.json | 59 + .../oojs-ui/themes/mediawiki/icons-movement.json | 33 + .../lib/oojs-ui/themes/mediawiki/icons-user.json | 25 + .../oojs-ui/themes/mediawiki/icons-wikimedia.json | 15 + resources/lib/oojs-ui/themes/mediawiki/icons.json | 76 + .../mediawiki/images/icons/add-constructive.svg | 2 +- .../themes/mediawiki/images/icons/add-invert.svg | 2 +- .../oojs-ui/themes/mediawiki/images/icons/add.svg | 2 +- .../mediawiki/images/icons/advanced-invert.png | Bin 453 -> 443 bytes .../mediawiki/images/icons/advanced-invert.svg | 2 +- .../themes/mediawiki/images/icons/advanced.png | Bin 404 -> 400 bytes .../themes/mediawiki/images/icons/advanced.svg | 2 +- .../themes/mediawiki/images/icons/alert-invert.png | Bin 469 -> 460 bytes .../themes/mediawiki/images/icons/alert-invert.svg | 4 +- .../mediawiki/images/icons/alert-warning.png | Bin 594 -> 594 bytes .../mediawiki/images/icons/alert-warning.svg | 4 +- .../themes/mediawiki/images/icons/alert.png | Bin 433 -> 422 bytes .../themes/mediawiki/images/icons/alert.svg | 4 +- .../mediawiki/images/icons/align-center-invert.png | Bin 0 -> 180 bytes .../mediawiki/images/icons/align-center-invert.svg | 6 + .../themes/mediawiki/images/icons/align-center.svg | 2 +- .../images/icons/align-float-left-invert.png | Bin 0 -> 193 bytes .../images/icons/align-float-left-invert.svg | 6 + .../mediawiki/images/icons/align-float-left.svg | 2 +- .../images/icons/align-float-right-invert.png | Bin 0 -> 197 bytes .../images/icons/align-float-right-invert.svg | 6 + .../mediawiki/images/icons/align-float-right.svg | 2 +- .../images/icons/arched-arrow-ltr-invert.png | Bin 351 -> 336 bytes .../images/icons/arched-arrow-ltr-invert.svg | 10 +- .../mediawiki/images/icons/arched-arrow-ltr.png | Bin 309 -> 292 bytes .../mediawiki/images/icons/arched-arrow-ltr.svg | 10 +- .../images/icons/arched-arrow-rtl-invert.png | Bin 331 -> 328 bytes .../images/icons/arched-arrow-rtl-invert.svg | 10 +- .../mediawiki/images/icons/arched-arrow-rtl.png | Bin 286 -> 291 bytes .../mediawiki/images/icons/arched-arrow-rtl.svg | 10 +- .../mediawiki/images/icons/arrow-ltr-invert.png | Bin 0 -> 205 bytes .../mediawiki/images/icons/arrow-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/arrow-ltr.svg | 2 +- .../mediawiki/images/icons/arrow-rtl-invert.png | Bin 0 -> 204 bytes .../mediawiki/images/icons/arrow-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/arrow-rtl.svg | 2 +- .../mediawiki/images/icons/article-ltr-invert.png | Bin 0 -> 208 bytes .../mediawiki/images/icons/article-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/article-ltr.svg | 2 +- .../mediawiki/images/icons/article-rtl-invert.png | Bin 0 -> 204 bytes .../mediawiki/images/icons/article-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/article-rtl.svg | 2 +- .../images/icons/articleCheck-ltr-invert.png | Bin 0 -> 332 bytes .../images/icons/articleCheck-ltr-invert.svg | 9 + .../mediawiki/images/icons/articleCheck-ltr.svg | 2 +- .../images/icons/articleCheck-rtl-invert.png | Bin 0 -> 323 bytes .../images/icons/articleCheck-rtl-invert.svg | 9 + .../mediawiki/images/icons/articleCheck-rtl.svg | 2 +- .../images/icons/articleSearch-ltr-invert.png | Bin 0 -> 375 bytes .../images/icons/articleSearch-ltr-invert.svg | 6 + .../mediawiki/images/icons/articleSearch-ltr.svg | 2 +- .../images/icons/articleSearch-rtl-invert.png | Bin 0 -> 416 bytes .../images/icons/articleSearch-rtl-invert.svg | 6 + .../mediawiki/images/icons/articleSearch-rtl.svg | 2 +- .../themes/mediawiki/images/icons/bell-invert.png | Bin 0 -> 283 bytes .../themes/mediawiki/images/icons/bell-invert.svg | 4 + .../oojs-ui/themes/mediawiki/images/icons/bell.svg | 2 +- .../mediawiki/images/icons/bellOn-ltr-invert.png | Bin 0 -> 427 bytes .../mediawiki/images/icons/bellOn-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/bellOn-ltr.png | Bin 365 -> 365 bytes .../themes/mediawiki/images/icons/bellOn-ltr.svg | 2 +- .../mediawiki/images/icons/bellOn-rtl-invert.png | Bin 0 -> 429 bytes .../mediawiki/images/icons/bellOn-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/bellOn-rtl.png | Bin 376 -> 370 bytes .../themes/mediawiki/images/icons/bellOn-rtl.svg | 2 +- .../themes/mediawiki/images/icons/beta-invert.png | Bin 0 -> 373 bytes .../themes/mediawiki/images/icons/beta-invert.svg | 4 + .../mediawiki/images/icons/betaLaunch-invert.png | Bin 0 -> 355 bytes .../mediawiki/images/icons/betaLaunch-invert.svg | 4 + .../themes/mediawiki/images/icons/betaLaunch.svg | 2 +- .../mediawiki/images/icons/bigger-ltr-invert.png | Bin 0 -> 378 bytes .../mediawiki/images/icons/bigger-ltr-invert.svg | 7 + .../themes/mediawiki/images/icons/bigger-ltr.svg | 8 +- .../mediawiki/images/icons/bigger-rtl-invert.png | Bin 0 -> 381 bytes .../mediawiki/images/icons/bigger-rtl-invert.svg | 7 + .../themes/mediawiki/images/icons/bigger-rtl.svg | 8 +- .../mediawiki/images/icons/block-destructive.svg | 2 +- .../themes/mediawiki/images/icons/block-invert.svg | 2 +- .../themes/mediawiki/images/icons/block.svg | 2 +- .../images/icons/blockUndo-ltr-invert.svg | 2 +- .../mediawiki/images/icons/blockUndo-ltr.svg | 2 +- .../images/icons/blockUndo-rtl-invert.svg | 2 +- .../mediawiki/images/icons/blockUndo-rtl.svg | 2 +- .../mediawiki/images/icons/bold-a-invert.png | Bin 0 -> 301 bytes .../mediawiki/images/icons/bold-a-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-a.svg | 2 +- .../images/icons/bold-arab-ain-invert.png | Bin 0 -> 322 bytes .../images/icons/bold-arab-ain-invert.svg | 6 + .../mediawiki/images/icons/bold-arab-ain.png | Bin 289 -> 284 bytes .../mediawiki/images/icons/bold-arab-ain.svg | 2 +- .../images/icons/bold-arab-dad-invert.png | Bin 0 -> 348 bytes .../images/icons/bold-arab-dad-invert.svg | 6 + .../mediawiki/images/icons/bold-arab-dad.png | Bin 315 -> 310 bytes .../mediawiki/images/icons/bold-arab-dad.svg | 2 +- .../mediawiki/images/icons/bold-armn-to-invert.png | Bin 0 -> 378 bytes .../mediawiki/images/icons/bold-armn-to-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-armn-to.png | Bin 342 -> 342 bytes .../themes/mediawiki/images/icons/bold-armn-to.svg | 2 +- .../mediawiki/images/icons/bold-b-invert.png | Bin 0 -> 240 bytes .../mediawiki/images/icons/bold-b-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-b.svg | 2 +- .../mediawiki/images/icons/bold-cyrl-be-invert.png | Bin 0 -> 250 bytes .../mediawiki/images/icons/bold-cyrl-be-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-cyrl-be.png | Bin 232 -> 228 bytes .../themes/mediawiki/images/icons/bold-cyrl-be.svg | 2 +- .../mediawiki/images/icons/bold-cyrl-te-invert.png | Bin 0 -> 154 bytes .../mediawiki/images/icons/bold-cyrl-te-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-cyrl-te.svg | 2 +- .../images/icons/bold-cyrl-zhe-invert.png | Bin 0 -> 375 bytes .../images/icons/bold-cyrl-zhe-invert.svg | 6 + .../mediawiki/images/icons/bold-cyrl-zhe.png | Bin 343 -> 337 bytes .../mediawiki/images/icons/bold-cyrl-zhe.svg | 2 +- .../mediawiki/images/icons/bold-f-invert.png | Bin 0 -> 158 bytes .../mediawiki/images/icons/bold-f-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-f.svg | 2 +- .../mediawiki/images/icons/bold-g-invert.png | Bin 0 -> 373 bytes .../mediawiki/images/icons/bold-g-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-g.png | Bin 315 -> 313 bytes .../themes/mediawiki/images/icons/bold-g.svg | 2 +- .../images/icons/bold-geor-man-invert.png | Bin 0 -> 325 bytes .../images/icons/bold-geor-man-invert.svg | 6 + .../mediawiki/images/icons/bold-geor-man.png | Bin 297 -> 294 bytes .../mediawiki/images/icons/bold-geor-man.svg | 2 +- .../mediawiki/images/icons/bold-l-invert.png | Bin 0 -> 152 bytes .../mediawiki/images/icons/bold-l-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-l.svg | 2 +- .../mediawiki/images/icons/bold-n-invert.png | Bin 0 -> 176 bytes .../mediawiki/images/icons/bold-n-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-n.svg | 2 +- .../mediawiki/images/icons/bold-v-invert.png | Bin 0 -> 279 bytes .../mediawiki/images/icons/bold-v-invert.svg | 6 + .../themes/mediawiki/images/icons/bold-v.svg | 2 +- .../mediawiki/images/icons/book-ltr-invert.png | Bin 0 -> 262 bytes .../mediawiki/images/icons/book-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/book-ltr.svg | 2 +- .../mediawiki/images/icons/book-rtl-invert.png | Bin 0 -> 260 bytes .../mediawiki/images/icons/book-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/book-rtl.svg | 2 +- .../mediawiki/images/icons/bookmark-ltr-invert.png | Bin 0 -> 239 bytes .../mediawiki/images/icons/bookmark-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/bookmark-ltr.svg | 2 +- .../mediawiki/images/icons/bookmark-rtl-invert.png | Bin 0 -> 235 bytes .../mediawiki/images/icons/bookmark-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/bookmark-rtl.svg | 2 +- .../themes/mediawiki/images/icons/bright.png | Bin 0 -> 422 bytes .../themes/mediawiki/images/icons/bright.svg | 8 + .../mediawiki/images/icons/browser-ltr-invert.png | Bin 0 -> 233 bytes .../mediawiki/images/icons/browser-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/browser-ltr.svg | 2 +- .../mediawiki/images/icons/browser-rtl-invert.png | Bin 0 -> 224 bytes .../mediawiki/images/icons/browser-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/browser-rtl.svg | 2 +- .../mediawiki/images/icons/calendar-ltr-invert.png | Bin 0 -> 255 bytes .../mediawiki/images/icons/calendar-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/calendar-ltr.png | Bin 0 -> 213 bytes .../themes/mediawiki/images/icons/calendar-ltr.svg | 4 + .../mediawiki/images/icons/calendar-rtl-invert.png | Bin 0 -> 239 bytes .../mediawiki/images/icons/calendar-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/calendar-rtl.png | Bin 0 -> 216 bytes .../themes/mediawiki/images/icons/calendar-rtl.svg | 4 + .../mediawiki/images/icons/cancel-invert.png | Bin 378 -> 376 bytes .../mediawiki/images/icons/cancel-invert.svg | 2 +- .../themes/mediawiki/images/icons/cancel.png | Bin 351 -> 350 bytes .../themes/mediawiki/images/icons/cancel.svg | 2 +- .../mediawiki/images/icons/caret-ltr-invert.png | Bin 0 -> 271 bytes .../mediawiki/images/icons/caret-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/caret-ltr.png | Bin 250 -> 251 bytes .../themes/mediawiki/images/icons/caret-ltr.svg | 2 +- .../mediawiki/images/icons/caret-rtl-invert.png | Bin 0 -> 284 bytes .../mediawiki/images/icons/caret-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/caret-rtl.svg | 2 +- .../mediawiki/images/icons/caretDown-invert.png | Bin 0 -> 257 bytes .../mediawiki/images/icons/caretDown-invert.svg | 4 + .../themes/mediawiki/images/icons/caretDown.svg | 2 +- .../mediawiki/images/icons/caretUp-invert.png | Bin 0 -> 263 bytes .../mediawiki/images/icons/caretUp-invert.svg | 4 + .../themes/mediawiki/images/icons/caretUp.png | Bin 252 -> 243 bytes .../themes/mediawiki/images/icons/caretUp.svg | 2 +- .../images/icons/case-sensitive-invert.png | Bin 0 -> 434 bytes .../images/icons/case-sensitive-invert.svg | 7 + .../mediawiki/images/icons/case-sensitive.png | Bin 368 -> 369 bytes .../mediawiki/images/icons/case-sensitive.svg | 4 +- .../mediawiki/images/icons/check-destructive.png | Bin 0 -> 261 bytes .../mediawiki/images/icons/check-destructive.svg | 6 + .../mediawiki/images/icons/circle-constructive.svg | 4 +- .../mediawiki/images/icons/circle-invert.svg | 4 +- .../themes/mediawiki/images/icons/circle.svg | 4 +- .../images/icons/citeArticle-ltr-invert.png | Bin 0 -> 245 bytes .../images/icons/citeArticle-ltr-invert.svg | 6 + .../mediawiki/images/icons/citeArticle-ltr.svg | 2 +- .../images/icons/citeArticle-rtl-invert.png | Bin 0 -> 246 bytes .../images/icons/citeArticle-rtl-invert.svg | 6 + .../mediawiki/images/icons/citeArticle-rtl.svg | 2 +- .../themes/mediawiki/images/icons/clear-invert.png | Bin 0 -> 338 bytes .../themes/mediawiki/images/icons/clear-invert.svg | 6 + .../themes/mediawiki/images/icons/clear.svg | 6 +- .../themes/mediawiki/images/icons/clock-invert.png | Bin 0 -> 370 bytes .../themes/mediawiki/images/icons/clock-invert.svg | 6 + .../themes/mediawiki/images/icons/clock.svg | 2 +- .../mediawiki/images/icons/close-ltr-invert.png | Bin 333 -> 314 bytes .../mediawiki/images/icons/close-ltr-invert.svg | 4 +- .../themes/mediawiki/images/icons/close-ltr.png | Bin 296 -> 282 bytes .../themes/mediawiki/images/icons/close-ltr.svg | 4 +- .../mediawiki/images/icons/close-rtl-invert.png | Bin 357 -> 339 bytes .../mediawiki/images/icons/close-rtl-invert.svg | 4 +- .../themes/mediawiki/images/icons/close-rtl.png | Bin 319 -> 299 bytes .../themes/mediawiki/images/icons/close-rtl.svg | 4 +- .../themes/mediawiki/images/icons/code-invert.png | Bin 297 -> 297 bytes .../themes/mediawiki/images/icons/code-invert.svg | 2 +- .../oojs-ui/themes/mediawiki/images/icons/code.png | Bin 272 -> 272 bytes .../oojs-ui/themes/mediawiki/images/icons/code.svg | 2 +- .../mediawiki/images/icons/collapse-invert.png | Bin 204 -> 205 bytes .../mediawiki/images/icons/collapse-invert.svg | 2 +- .../themes/mediawiki/images/icons/collapse.png | Bin 207 -> 195 bytes .../themes/mediawiki/images/icons/collapse.svg | 2 +- .../mediawiki/images/icons/comment-invert.svg | 2 +- .../themes/mediawiki/images/icons/comment.svg | 2 +- .../mediawiki/images/icons/die-ltr-invert.png | Bin 0 -> 284 bytes .../mediawiki/images/icons/die-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/die-ltr.svg | 2 +- .../mediawiki/images/icons/die-rtl-invert.png | Bin 0 -> 281 bytes .../mediawiki/images/icons/die-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/die-rtl.svg | 2 +- .../mediawiki/images/icons/downTriangle-invert.png | Bin 0 -> 217 bytes .../mediawiki/images/icons/downTriangle-invert.svg | 4 + .../themes/mediawiki/images/icons/downTriangle.svg | 2 +- .../mediawiki/images/icons/download-ltr-invert.png | Bin 0 -> 270 bytes .../mediawiki/images/icons/download-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/download-ltr.svg | 2 +- .../mediawiki/images/icons/download-rtl-invert.png | Bin 0 -> 275 bytes .../mediawiki/images/icons/download-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/download-rtl.svg | 2 +- .../mediawiki/images/icons/edit-ltr-invert.svg | 2 +- .../images/icons/edit-ltr-progressive.svg | 2 +- .../themes/mediawiki/images/icons/edit-ltr.svg | 2 +- .../mediawiki/images/icons/edit-rtl-invert.png | Bin 314 -> 316 bytes .../mediawiki/images/icons/edit-rtl-invert.svg | 2 +- .../images/icons/edit-rtl-progressive.png | Bin 480 -> 487 bytes .../images/icons/edit-rtl-progressive.svg | 2 +- .../themes/mediawiki/images/icons/edit-rtl.png | Bin 284 -> 287 bytes .../themes/mediawiki/images/icons/edit-rtl.svg | 2 +- .../mediawiki/images/icons/editLock-ltr-invert.svg | 2 +- .../themes/mediawiki/images/icons/editLock-ltr.svg | 2 +- .../mediawiki/images/icons/editLock-rtl-invert.svg | 2 +- .../themes/mediawiki/images/icons/editLock-rtl.svg | 2 +- .../mediawiki/images/icons/editUndo-ltr-invert.png | Bin 447 -> 456 bytes .../mediawiki/images/icons/editUndo-ltr-invert.svg | 4 +- .../themes/mediawiki/images/icons/editUndo-ltr.png | Bin 390 -> 392 bytes .../themes/mediawiki/images/icons/editUndo-ltr.svg | 4 +- .../mediawiki/images/icons/editUndo-rtl-invert.png | Bin 439 -> 435 bytes .../mediawiki/images/icons/editUndo-rtl-invert.svg | 4 +- .../themes/mediawiki/images/icons/editUndo-rtl.png | Bin 379 -> 379 bytes .../themes/mediawiki/images/icons/editUndo-rtl.svg | 4 +- .../mediawiki/images/icons/expand-invert.svg | 2 +- .../themes/mediawiki/images/icons/expand.svg | 2 +- .../images/icons/external-link-ltr-invert.png | Bin 184 -> 251 bytes .../images/icons/external-link-ltr-invert.svg | 6 +- .../mediawiki/images/icons/external-link-ltr.png | Bin 168 -> 239 bytes .../mediawiki/images/icons/external-link-ltr.svg | 6 +- .../images/icons/external-link-rtl-invert.png | Bin 180 -> 250 bytes .../images/icons/external-link-rtl-invert.svg | 6 +- .../mediawiki/images/icons/external-link-rtl.png | Bin 164 -> 232 bytes .../mediawiki/images/icons/external-link-rtl.svg | 6 +- .../themes/mediawiki/images/icons/eye-invert.png | Bin 0 -> 399 bytes .../themes/mediawiki/images/icons/eye-invert.svg | 7 + .../oojs-ui/themes/mediawiki/images/icons/eye.png | Bin 353 -> 368 bytes .../oojs-ui/themes/mediawiki/images/icons/eye.svg | 2 +- .../mediawiki/images/icons/eyeClosed-invert.png | Bin 0 -> 339 bytes .../mediawiki/images/icons/eyeClosed-invert.svg | 4 + .../themes/mediawiki/images/icons/eyeClosed.png | Bin 324 -> 315 bytes .../themes/mediawiki/images/icons/eyeClosed.svg | 2 +- .../mediawiki/images/icons/find-ltr-invert.png | Bin 0 -> 346 bytes .../mediawiki/images/icons/find-ltr-invert.svg | 7 + .../themes/mediawiki/images/icons/find-ltr.png | Bin 298 -> 307 bytes .../themes/mediawiki/images/icons/find-ltr.svg | 4 +- .../mediawiki/images/icons/find-rtl-invert.png | Bin 0 -> 351 bytes .../mediawiki/images/icons/find-rtl-invert.svg | 7 + .../themes/mediawiki/images/icons/find-rtl.png | Bin 297 -> 307 bytes .../themes/mediawiki/images/icons/find-rtl.svg | 4 +- .../mediawiki/images/icons/flag-ltr-invert.svg | 2 +- .../themes/mediawiki/images/icons/flag-ltr.svg | 2 +- .../mediawiki/images/icons/flag-rtl-invert.svg | 2 +- .../themes/mediawiki/images/icons/flag-rtl.svg | 2 +- .../mediawiki/images/icons/flagUndo-ltr-invert.png | Bin 306 -> 309 bytes .../mediawiki/images/icons/flagUndo-ltr-invert.svg | 6 +- .../themes/mediawiki/images/icons/flagUndo-ltr.png | Bin 295 -> 301 bytes .../themes/mediawiki/images/icons/flagUndo-ltr.svg | 6 +- .../mediawiki/images/icons/flagUndo-rtl-invert.svg | 6 +- .../themes/mediawiki/images/icons/flagUndo-rtl.svg | 6 +- .../images/icons/folderPlaceholder-ltr-invert.png | Bin 0 -> 177 bytes .../images/icons/folderPlaceholder-ltr-invert.svg | 4 + .../images/icons/folderPlaceholder-ltr.svg | 2 +- .../images/icons/folderPlaceholder-rtl-invert.png | Bin 0 -> 179 bytes .../images/icons/folderPlaceholder-rtl-invert.svg | 4 + .../images/icons/folderPlaceholder-rtl.svg | 2 +- .../mediawiki/images/icons/funnel-ltr-invert.png | Bin 0 -> 252 bytes .../mediawiki/images/icons/funnel-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/funnel-ltr.svg | 2 +- .../mediawiki/images/icons/funnel-rtl-invert.png | Bin 0 -> 253 bytes .../mediawiki/images/icons/funnel-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/funnel-rtl.svg | 2 +- .../themes/mediawiki/images/icons/halfBright.png | Bin 0 -> 354 bytes .../themes/mediawiki/images/icons/halfBright.svg | 4 + .../themes/mediawiki/images/icons/heart-invert.png | Bin 0 -> 299 bytes .../themes/mediawiki/images/icons/heart-invert.svg | 4 + .../mediawiki/images/icons/help-ltr-invert.png | Bin 603 -> 606 bytes .../mediawiki/images/icons/help-ltr-invert.svg | 4 +- .../themes/mediawiki/images/icons/help-ltr.png | Bin 529 -> 528 bytes .../themes/mediawiki/images/icons/help-ltr.svg | 4 +- .../mediawiki/images/icons/help-rtl-invert.png | Bin 622 -> 615 bytes .../mediawiki/images/icons/help-rtl-invert.svg | 4 +- .../themes/mediawiki/images/icons/help-rtl.png | Bin 543 -> 543 bytes .../themes/mediawiki/images/icons/help-rtl.svg | 4 +- .../mediawiki/images/icons/history-invert.png | Bin 628 -> 629 bytes .../mediawiki/images/icons/history-invert.svg | 4 +- .../themes/mediawiki/images/icons/history.png | Bin 543 -> 541 bytes .../themes/mediawiki/images/icons/history.svg | 4 +- .../mediawiki/images/icons/image-ltr-invert.png | Bin 0 -> 229 bytes .../mediawiki/images/icons/image-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/image-ltr.svg | 2 +- .../mediawiki/images/icons/image-rtl-invert.png | Bin 0 -> 221 bytes .../mediawiki/images/icons/image-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/image-rtl.svg | 2 +- .../mediawiki/images/icons/imageAdd-ltr-invert.png | Bin 0 -> 268 bytes .../mediawiki/images/icons/imageAdd-ltr-invert.svg | 7 + .../themes/mediawiki/images/icons/imageAdd-ltr.svg | 4 +- .../mediawiki/images/icons/imageAdd-rtl-invert.png | Bin 0 -> 254 bytes .../mediawiki/images/icons/imageAdd-rtl-invert.svg | 7 + .../themes/mediawiki/images/icons/imageAdd-rtl.svg | 4 +- .../images/icons/imageLock-ltr-invert.png | Bin 0 -> 310 bytes .../images/icons/imageLock-ltr-invert.svg | 4 + .../mediawiki/images/icons/imageLock-ltr.svg | 2 +- .../images/icons/imageLock-rtl-invert.png | Bin 0 -> 311 bytes .../images/icons/imageLock-rtl-invert.svg | 4 + .../mediawiki/images/icons/imageLock-rtl.svg | 2 +- .../mediawiki/images/icons/indent-ltr-invert.png | Bin 0 -> 211 bytes .../mediawiki/images/icons/indent-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/indent-ltr.svg | 2 +- .../mediawiki/images/icons/indent-rtl-invert.png | Bin 0 -> 212 bytes .../mediawiki/images/icons/indent-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/indent-rtl.svg | 2 +- .../themes/mediawiki/images/icons/info-invert.png | Bin 377 -> 359 bytes .../themes/mediawiki/images/icons/info-invert.svg | 2 +- .../oojs-ui/themes/mediawiki/images/icons/info.png | Bin 328 -> 321 bytes .../oojs-ui/themes/mediawiki/images/icons/info.svg | 2 +- .../mediawiki/images/icons/insert-invert.png | Bin 0 -> 148 bytes .../mediawiki/images/icons/insert-invert.svg | 6 + .../themes/mediawiki/images/icons/insert.svg | 2 +- .../mediawiki/images/icons/italic-a-invert.png | Bin 0 -> 321 bytes .../mediawiki/images/icons/italic-a-invert.svg | 6 + .../themes/mediawiki/images/icons/italic-a.svg | 2 +- .../images/icons/italic-arab-keheh-jeem-invert.png | Bin 0 -> 379 bytes .../images/icons/italic-arab-keheh-jeem-invert.svg | 6 + .../images/icons/italic-arab-keheh-jeem.png | Bin 333 -> 334 bytes .../images/icons/italic-arab-keheh-jeem.svg | 2 +- .../images/icons/italic-arab-meem-invert.png | Bin 0 -> 301 bytes .../images/icons/italic-arab-meem-invert.svg | 6 + .../mediawiki/images/icons/italic-arab-meem.png | Bin 271 -> 270 bytes .../mediawiki/images/icons/italic-arab-meem.svg | 2 +- .../images/icons/italic-armn-sha-invert.png | Bin 0 -> 369 bytes .../images/icons/italic-armn-sha-invert.svg | 6 + .../mediawiki/images/icons/italic-armn-sha.png | Bin 339 -> 338 bytes .../mediawiki/images/icons/italic-armn-sha.svg | 2 +- .../mediawiki/images/icons/italic-c-invert.png | Bin 0 -> 353 bytes .../mediawiki/images/icons/italic-c-invert.svg | 6 + .../themes/mediawiki/images/icons/italic-c.png | Bin 300 -> 301 bytes .../themes/mediawiki/images/icons/italic-c.svg | 2 +- .../mediawiki/images/icons/italic-d-invert.png | Bin 0 -> 378 bytes .../mediawiki/images/icons/italic-d-invert.svg | 6 + .../themes/mediawiki/images/icons/italic-d.png | Bin 324 -> 330 bytes .../themes/mediawiki/images/icons/italic-d.svg | 2 +- .../mediawiki/images/icons/italic-e-invert.png | Bin 0 -> 280 bytes .../mediawiki/images/icons/italic-e-invert.svg | 6 + .../themes/mediawiki/images/icons/italic-e.png | Bin 254 -> 256 bytes .../themes/mediawiki/images/icons/italic-e.svg | 2 +- .../images/icons/italic-geor-kan-invert.png | Bin 0 -> 318 bytes .../images/icons/italic-geor-kan-invert.svg | 6 + .../mediawiki/images/icons/italic-geor-kan.png | Bin 287 -> 289 bytes .../mediawiki/images/icons/italic-geor-kan.svg | 2 +- .../mediawiki/images/icons/italic-i-invert.png | Bin 0 -> 233 bytes .../mediawiki/images/icons/italic-i-invert.svg | 6 + .../themes/mediawiki/images/icons/italic-i.png | Bin 208 -> 218 bytes .../themes/mediawiki/images/icons/italic-i.svg | 2 +- .../mediawiki/images/icons/italic-k-invert.png | Bin 0 -> 303 bytes .../mediawiki/images/icons/italic-k-invert.svg | 6 + .../themes/mediawiki/images/icons/italic-k.svg | 2 +- .../mediawiki/images/icons/italic-s-invert.png | Bin 0 -> 372 bytes .../mediawiki/images/icons/italic-s-invert.svg | 6 + .../themes/mediawiki/images/icons/italic-s.png | Bin 321 -> 323 bytes .../themes/mediawiki/images/icons/italic-s.svg | 2 +- .../mediawiki/images/icons/journal-ltr-invert.png | Bin 0 -> 203 bytes .../mediawiki/images/icons/journal-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/journal-ltr.svg | 2 +- .../mediawiki/images/icons/journal-rtl-invert.png | Bin 0 -> 206 bytes .../mediawiki/images/icons/journal-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/journal-rtl.svg | 2 +- .../mediawiki/images/icons/key-ltr-invert.png | Bin 0 -> 315 bytes .../mediawiki/images/icons/key-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/key-ltr.svg | 2 +- .../mediawiki/images/icons/key-rtl-invert.png | Bin 0 -> 302 bytes .../mediawiki/images/icons/key-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/key-rtl.svg | 2 +- .../mediawiki/images/icons/keyboard-ltr-invert.png | Bin 0 -> 195 bytes .../mediawiki/images/icons/keyboard-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/keyboard-ltr.svg | 2 +- .../mediawiki/images/icons/keyboard-rtl-invert.png | Bin 0 -> 199 bytes .../mediawiki/images/icons/keyboard-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/keyboard-rtl.svg | 2 +- .../mediawiki/images/icons/language-invert.png | Bin 0 -> 490 bytes .../mediawiki/images/icons/language-invert.svg | 7 + .../themes/mediawiki/images/icons/language.png | Bin 410 -> 402 bytes .../themes/mediawiki/images/icons/language.svg | 4 +- .../mediawiki/images/icons/largerText-ltr.png | Bin 0 -> 357 bytes .../mediawiki/images/icons/largerText-ltr.svg | 6 + .../mediawiki/images/icons/largerText-rtl.png | Bin 0 -> 357 bytes .../mediawiki/images/icons/largerText-rtl.svg | 6 + .../mediawiki/images/icons/layout-ltr-invert.png | Bin 0 -> 175 bytes .../mediawiki/images/icons/layout-ltr-invert.svg | 7 + .../themes/mediawiki/images/icons/layout-ltr.svg | 4 +- .../mediawiki/images/icons/layout-rtl-invert.png | Bin 0 -> 170 bytes .../mediawiki/images/icons/layout-rtl-invert.svg | 7 + .../themes/mediawiki/images/icons/layout-rtl.svg | 4 +- .../mediawiki/images/icons/link-ltr-invert.png | Bin 467 -> 507 bytes .../mediawiki/images/icons/link-ltr-invert.svg | 19 +- .../themes/mediawiki/images/icons/link-ltr.png | Bin 423 -> 436 bytes .../themes/mediawiki/images/icons/link-ltr.svg | 19 +- .../images/icons/listBullet-ltr-invert.png | Bin 0 -> 203 bytes .../images/icons/listBullet-ltr-invert.svg | 4 + .../mediawiki/images/icons/listBullet-ltr.svg | 2 +- .../images/icons/listBullet-rtl-invert.png | Bin 0 -> 184 bytes .../images/icons/listBullet-rtl-invert.svg | 4 + .../mediawiki/images/icons/listBullet-rtl.svg | 2 +- .../images/icons/listNumbered-ltr-invert.png | Bin 0 -> 184 bytes .../images/icons/listNumbered-ltr-invert.svg | 4 + .../mediawiki/images/icons/listNumbered-ltr.svg | 2 +- .../images/icons/listNumbered-rtl-invert.png | Bin 0 -> 196 bytes .../images/icons/listNumbered-rtl-invert.svg | 4 + .../mediawiki/images/icons/listNumbered-rtl.svg | 2 +- .../images/icons/lock-ltr-destructive.svg | 2 +- .../mediawiki/images/icons/lock-ltr-invert.svg | 2 +- .../themes/mediawiki/images/icons/lock-ltr.svg | 2 +- .../images/icons/lock-rtl-destructive.svg | 2 +- .../mediawiki/images/icons/lock-rtl-invert.svg | 2 +- .../themes/mediawiki/images/icons/lock-rtl.svg | 2 +- .../mediawiki/images/icons/logOut-ltr-invert.png | Bin 0 -> 244 bytes .../mediawiki/images/icons/logOut-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/logOut-ltr.svg | 2 +- .../mediawiki/images/icons/logOut-rtl-invert.png | Bin 0 -> 252 bytes .../mediawiki/images/icons/logOut-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/logOut-rtl.svg | 2 +- .../mediawiki/images/icons/logo-cc-invert.png | Bin 0 -> 448 bytes .../mediawiki/images/icons/logo-cc-invert.svg | 6 + .../images/icons/logo-wikimediaCommons-invert.png | Bin 0 -> 575 bytes .../images/icons/logo-wikimediaCommons-invert.svg | 7 + .../images/icons/logo-wikimediaCommons.svg | 2 +- .../images/icons/logo-wikipedia-invert.png | Bin 0 -> 512 bytes .../images/icons/logo-wikipedia-invert.svg | 6 + .../mediawiki/images/icons/logo-wikipedia.png | Bin 459 -> 459 bytes .../mediawiki/images/icons/logo-wikipedia.svg | 2 +- .../mediawiki/images/icons/map-ltr-invert.png | Bin 0 -> 336 bytes .../mediawiki/images/icons/map-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/map-ltr.svg | 2 +- .../mediawiki/images/icons/map-rtl-invert.png | Bin 0 -> 354 bytes .../mediawiki/images/icons/map-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/map-rtl.svg | 2 +- .../mediawiki/images/icons/mapPin-invert.png | Bin 0 -> 401 bytes .../mediawiki/images/icons/mapPin-invert.svg | 4 + .../themes/mediawiki/images/icons/mapPin.svg | 2 +- .../images/icons/mapPinAdd-ltr-invert.png | Bin 0 -> 410 bytes .../images/icons/mapPinAdd-ltr-invert.svg | 9 + .../mediawiki/images/icons/mapPinAdd-ltr.svg | 4 +- .../images/icons/mapPinAdd-rtl-invert.png | Bin 0 -> 404 bytes .../images/icons/mapPinAdd-rtl-invert.svg | 9 + .../mediawiki/images/icons/mapPinAdd-rtl.svg | 4 +- .../themes/mediawiki/images/icons/menu-invert.png | Bin 181 -> 246 bytes .../themes/mediawiki/images/icons/menu-invert.svg | 16 +- .../oojs-ui/themes/mediawiki/images/icons/menu.png | Bin 170 -> 218 bytes .../oojs-ui/themes/mediawiki/images/icons/menu.svg | 16 +- .../mediawiki/images/icons/message-ltr-invert.png | Bin 0 -> 328 bytes .../mediawiki/images/icons/message-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/message-ltr.svg | 2 +- .../mediawiki/images/icons/message-rtl-invert.png | Bin 0 -> 335 bytes .../mediawiki/images/icons/message-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/message-rtl.svg | 2 +- .../oojs-ui/themes/mediawiki/images/icons/moon.png | Bin 0 -> 352 bytes .../oojs-ui/themes/mediawiki/images/icons/moon.svg | 4 + .../themes/mediawiki/images/icons/move-invert.png | Bin 0 -> 256 bytes .../themes/mediawiki/images/icons/move-invert.svg | 4 + .../mediawiki/images/icons/move-ltr-invert.svg | 2 +- .../themes/mediawiki/images/icons/move-ltr.svg | 2 +- .../mediawiki/images/icons/move-rtl-invert.png | Bin 221 -> 220 bytes .../mediawiki/images/icons/move-rtl-invert.svg | 2 +- .../themes/mediawiki/images/icons/move-rtl.png | Bin 214 -> 213 bytes .../themes/mediawiki/images/icons/move-rtl.svg | 2 +- .../oojs-ui/themes/mediawiki/images/icons/move.svg | 2 +- .../images/icons/newWindow-ltr-invert.png | Bin 0 -> 223 bytes .../images/icons/newWindow-ltr-invert.svg | 6 + .../mediawiki/images/icons/newWindow-ltr.svg | 2 +- .../images/icons/newWindow-rtl-invert.png | Bin 0 -> 239 bytes .../images/icons/newWindow-rtl-invert.svg | 6 + .../mediawiki/images/icons/newWindow-rtl.svg | 2 +- .../mediawiki/images/icons/newline-ltr-invert.png | Bin 0 -> 287 bytes .../mediawiki/images/icons/newline-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/newline-ltr.png | Bin 267 -> 263 bytes .../themes/mediawiki/images/icons/newline-ltr.svg | 6 +- .../mediawiki/images/icons/newline-rtl-invert.png | Bin 0 -> 296 bytes .../mediawiki/images/icons/newline-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/newline-rtl.svg | 6 +- .../images/icons/newspaper-ltr-invert.png | Bin 0 -> 203 bytes .../images/icons/newspaper-ltr-invert.svg | 4 + .../mediawiki/images/icons/newspaper-ltr.svg | 2 +- .../images/icons/newspaper-rtl-invert.png | Bin 0 -> 201 bytes .../images/icons/newspaper-rtl-invert.svg | 4 + .../mediawiki/images/icons/newspaper-rtl.svg | 2 +- .../images/icons/noWikiText-ltr-invert.png | Bin 0 -> 242 bytes .../images/icons/noWikiText-ltr-invert.svg | 6 + .../mediawiki/images/icons/noWikiText-ltr.svg | 2 +- .../images/icons/noWikiText-rtl-invert.png | Bin 0 -> 233 bytes .../images/icons/noWikiText-rtl-invert.svg | 6 + .../mediawiki/images/icons/noWikiText-rtl.svg | 2 +- .../themes/mediawiki/images/icons/notBright.png | Bin 0 -> 291 bytes .../themes/mediawiki/images/icons/notBright.svg | 4 + .../mediawiki/images/icons/notice-invert.png | Bin 0 -> 276 bytes .../mediawiki/images/icons/notice-invert.svg | 6 + .../themes/mediawiki/images/icons/notice.png | Bin 0 -> 254 bytes .../themes/mediawiki/images/icons/notice.svg | 6 + .../icons/ongoingConversation-ltr-invert.png | Bin 0 -> 325 bytes .../icons/ongoingConversation-ltr-invert.svg | 6 + .../icons/ongoingConversation-ltr-progressive.png | Bin 0 -> 380 bytes .../icons/ongoingConversation-ltr-progressive.svg | 6 + .../images/icons/ongoingConversation-ltr.png | Bin 0 -> 299 bytes .../images/icons/ongoingConversation-ltr.svg | 6 + .../icons/ongoingConversation-rtl-invert.png | Bin 0 -> 332 bytes .../icons/ongoingConversation-rtl-invert.svg | 6 + .../icons/ongoingConversation-rtl-progressive.png | Bin 0 -> 368 bytes .../icons/ongoingConversation-rtl-progressive.svg | 6 + .../images/icons/ongoingConversation-rtl.png | Bin 0 -> 296 bytes .../images/icons/ongoingConversation-rtl.svg | 6 + .../mediawiki/images/icons/outdent-ltr-invert.png | Bin 0 -> 210 bytes .../mediawiki/images/icons/outdent-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/outdent-ltr.svg | 2 +- .../mediawiki/images/icons/outdent-rtl-invert.png | Bin 0 -> 211 bytes .../mediawiki/images/icons/outdent-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/outdent-rtl.svg | 2 +- .../mediawiki/images/icons/outline-ltr-invert.png | Bin 0 -> 163 bytes .../mediawiki/images/icons/outline-ltr-invert.svg | 7 + .../themes/mediawiki/images/icons/outline-ltr.svg | 4 +- .../mediawiki/images/icons/outline-rtl-invert.png | Bin 0 -> 162 bytes .../mediawiki/images/icons/outline-rtl-invert.svg | 7 + .../themes/mediawiki/images/icons/outline-rtl.svg | 4 +- .../images/icons/photoGallery-ltr-invert.png | Bin 0 -> 238 bytes .../images/icons/photoGallery-ltr-invert.svg | 6 + .../mediawiki/images/icons/photoGallery-ltr.svg | 2 +- .../images/icons/photoGallery-rtl-invert.png | Bin 0 -> 232 bytes .../images/icons/photoGallery-rtl-invert.svg | 6 + .../mediawiki/images/icons/photoGallery-rtl.svg | 2 +- .../mediawiki/images/icons/picture-invert.png | Bin 396 -> 335 bytes .../mediawiki/images/icons/picture-invert.svg | 6 +- .../themes/mediawiki/images/icons/picture.png | Bin 350 -> 308 bytes .../themes/mediawiki/images/icons/picture.svg | 6 +- .../mediawiki/images/icons/play-ltr-invert.png | Bin 0 -> 331 bytes .../mediawiki/images/icons/play-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/play-ltr.svg | 2 +- .../mediawiki/images/icons/play-rtl-invert.png | Bin 0 -> 335 bytes .../mediawiki/images/icons/play-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/play-rtl.svg | 2 +- .../mediawiki/images/icons/printer-ltr-invert.png | Bin 0 -> 235 bytes .../mediawiki/images/icons/printer-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/printer-ltr.svg | 2 +- .../mediawiki/images/icons/printer-rtl-invert.png | Bin 0 -> 235 bytes .../mediawiki/images/icons/printer-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/printer-rtl.svg | 2 +- .../mediawiki/images/icons/puzzle-ltr-invert.png | Bin 0 -> 349 bytes .../mediawiki/images/icons/puzzle-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/puzzle-ltr.png | Bin 344 -> 327 bytes .../themes/mediawiki/images/icons/puzzle-ltr.svg | 2 +- .../mediawiki/images/icons/puzzle-rtl-invert.png | Bin 0 -> 372 bytes .../mediawiki/images/icons/puzzle-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/puzzle-rtl.png | Bin 360 -> 338 bytes .../themes/mediawiki/images/icons/puzzle-rtl.svg | 2 +- .../mediawiki/images/icons/quotes-ltr-invert.png | Bin 0 -> 347 bytes .../mediawiki/images/icons/quotes-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/quotes-ltr.png | Bin 319 -> 321 bytes .../themes/mediawiki/images/icons/quotes-ltr.svg | 17 +- .../mediawiki/images/icons/quotes-rtl-invert.png | Bin 0 -> 351 bytes .../mediawiki/images/icons/quotes-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/quotes-rtl.png | Bin 326 -> 318 bytes .../themes/mediawiki/images/icons/quotes-rtl.svg | 17 +- .../images/icons/quotesAdd-ltr-invert.png | Bin 0 -> 315 bytes .../images/icons/quotesAdd-ltr-invert.svg | 6 + .../mediawiki/images/icons/quotesAdd-ltr.png | Bin 293 -> 293 bytes .../mediawiki/images/icons/quotesAdd-ltr.svg | 2 +- .../images/icons/quotesAdd-rtl-invert.png | Bin 0 -> 306 bytes .../images/icons/quotesAdd-rtl-invert.svg | 6 + .../mediawiki/images/icons/quotesAdd-rtl.png | Bin 287 -> 285 bytes .../mediawiki/images/icons/quotesAdd-rtl.svg | 2 +- .../mediawiki/images/icons/redirect-ltr-invert.png | Bin 0 -> 444 bytes .../mediawiki/images/icons/redirect-ltr-invert.svg | 8 + .../themes/mediawiki/images/icons/redirect-ltr.png | Bin 382 -> 381 bytes .../themes/mediawiki/images/icons/redirect-ltr.svg | 2 +- .../mediawiki/images/icons/redirect-rtl-invert.png | Bin 0 -> 440 bytes .../mediawiki/images/icons/redirect-rtl-invert.svg | 9 + .../themes/mediawiki/images/icons/redirect-rtl.svg | 4 +- .../images/icons/regular-expression-invert.png | Bin 0 -> 422 bytes .../images/icons/regular-expression-invert.svg | 9 + .../mediawiki/images/icons/regular-expression.png | Bin 340 -> 343 bytes .../mediawiki/images/icons/regular-expression.svg | 8 +- .../mediawiki/images/icons/remove-destructive.svg | 2 +- .../mediawiki/images/icons/remove-invert.svg | 2 +- .../themes/mediawiki/images/icons/remove.svg | 2 +- .../mediawiki/images/icons/ribbonPrize-invert.png | Bin 0 -> 461 bytes .../mediawiki/images/icons/ribbonPrize-invert.svg | 9 + .../themes/mediawiki/images/icons/ribbonPrize.png | Bin 402 -> 394 bytes .../themes/mediawiki/images/icons/ribbonPrize.svg | 2 +- .../mediawiki/images/icons/search-ltr-invert.png | Bin 372 -> 372 bytes .../mediawiki/images/icons/search-ltr-invert.svg | 2 +- .../themes/mediawiki/images/icons/search-ltr.png | Bin 350 -> 348 bytes .../themes/mediawiki/images/icons/search-ltr.svg | 2 +- .../mediawiki/images/icons/search-rtl-invert.png | Bin 376 -> 386 bytes .../mediawiki/images/icons/search-rtl-invert.svg | 2 +- .../themes/mediawiki/images/icons/search-rtl.png | Bin 341 -> 347 bytes .../themes/mediawiki/images/icons/search-rtl.svg | 2 +- .../mediawiki/images/icons/secure-link-invert.png | Bin 215 -> 215 bytes .../mediawiki/images/icons/secure-link-invert.svg | 2 +- .../themes/mediawiki/images/icons/secure-link.png | Bin 201 -> 200 bytes .../themes/mediawiki/images/icons/secure-link.svg | 2 +- .../mediawiki/images/icons/settings-invert.svg | 2 +- .../themes/mediawiki/images/icons/settings.svg | 2 +- .../images/icons/signature-ltr-invert.png | Bin 0 -> 514 bytes .../images/icons/signature-ltr-invert.svg | 4 + .../mediawiki/images/icons/signature-ltr.svg | 2 +- .../images/icons/signature-rtl-invert.png | Bin 0 -> 530 bytes .../images/icons/signature-rtl-invert.svg | 4 + .../mediawiki/images/icons/signature-rtl.png | Bin 446 -> 447 bytes .../mediawiki/images/icons/signature-rtl.svg | 2 +- .../mediawiki/images/icons/smaller-ltr-invert.png | Bin 0 -> 382 bytes .../mediawiki/images/icons/smaller-ltr-invert.svg | 7 + .../themes/mediawiki/images/icons/smaller-ltr.svg | 8 +- .../mediawiki/images/icons/smaller-rtl-invert.png | Bin 0 -> 381 bytes .../mediawiki/images/icons/smaller-rtl-invert.svg | 7 + .../themes/mediawiki/images/icons/smaller-rtl.svg | 8 +- .../mediawiki/images/icons/smallerText-ltr.png | Bin 0 -> 287 bytes .../mediawiki/images/icons/smallerText-ltr.svg | 6 + .../mediawiki/images/icons/smallerText-rtl.png | Bin 0 -> 279 bytes .../mediawiki/images/icons/smallerText-rtl.svg | 6 + .../images/icons/specialCharacter-invert.png | Bin 0 -> 413 bytes .../images/icons/specialCharacter-invert.svg | 6 + .../mediawiki/images/icons/specialCharacter.png | Bin 360 -> 349 bytes .../mediawiki/images/icons/specialCharacter.svg | 2 +- .../images/icons/speechBubble-ltr-invert.png | Bin 0 -> 175 bytes .../images/icons/speechBubble-ltr-invert.svg | 6 + .../mediawiki/images/icons/speechBubble-ltr.svg | 2 +- .../images/icons/speechBubble-rtl-invert.png | Bin 0 -> 176 bytes .../images/icons/speechBubble-rtl-invert.svg | 6 + .../mediawiki/images/icons/speechBubble-rtl.svg | 2 +- .../images/icons/speechBubbleAdd-ltr-invert.png | Bin 0 -> 175 bytes .../images/icons/speechBubbleAdd-ltr-invert.svg | 7 + .../mediawiki/images/icons/speechBubbleAdd-ltr.svg | 2 +- .../images/icons/speechBubbleAdd-rtl-invert.png | Bin 0 -> 176 bytes .../images/icons/speechBubbleAdd-rtl-invert.svg | 7 + .../mediawiki/images/icons/speechBubbleAdd-rtl.svg | 4 +- .../images/icons/speechBubbles-ltr-invert.png | Bin 0 -> 187 bytes .../images/icons/speechBubbles-ltr-invert.svg | 6 + .../mediawiki/images/icons/speechBubbles-ltr.svg | 2 +- .../images/icons/speechBubbles-rtl-invert.png | Bin 0 -> 191 bytes .../images/icons/speechBubbles-rtl-invert.svg | 6 + .../mediawiki/images/icons/speechBubbles-rtl.svg | 2 +- .../mediawiki/images/icons/star-constructive.png | Bin 0 -> 643 bytes .../mediawiki/images/icons/star-constructive.svg | 4 + .../themes/mediawiki/images/icons/star-invert.svg | 2 +- .../oojs-ui/themes/mediawiki/images/icons/star.svg | 2 +- .../themes/mediawiki/images/icons/stop-invert.png | Bin 0 -> 440 bytes .../themes/mediawiki/images/icons/stop-invert.svg | 4 + .../oojs-ui/themes/mediawiki/images/icons/stop.svg | 2 +- .../images/icons/strikethrough-a-invert.png | Bin 0 -> 324 bytes .../images/icons/strikethrough-a-invert.svg | 7 + .../mediawiki/images/icons/strikethrough-a.svg | 4 +- .../images/icons/strikethrough-s-invert.png | Bin 0 -> 339 bytes .../images/icons/strikethrough-s-invert.svg | 7 + .../mediawiki/images/icons/strikethrough-s.png | Bin 306 -> 307 bytes .../mediawiki/images/icons/strikethrough-s.svg | 4 +- .../images/icons/strikethrough-y-invert.png | Bin 0 -> 264 bytes .../images/icons/strikethrough-y-invert.svg | 7 + .../mediawiki/images/icons/strikethrough-y.png | Bin 244 -> 237 bytes .../mediawiki/images/icons/strikethrough-y.svg | 4 +- .../images/icons/stripeFlow-ltr-invert.svg | 2 +- .../mediawiki/images/icons/stripeFlow-ltr.svg | 2 +- .../images/icons/stripeFlow-rtl-invert.svg | 2 +- .../mediawiki/images/icons/stripeFlow-rtl.svg | 2 +- .../images/icons/stripeSideMenu-invert.svg | 6 +- .../mediawiki/images/icons/stripeSideMenu.svg | 6 +- .../images/icons/stripeSummary-ltr-invert.svg | 2 +- .../mediawiki/images/icons/stripeSummary-ltr.svg | 2 +- .../images/icons/stripeSummary-rtl-invert.svg | 2 +- .../mediawiki/images/icons/stripeSummary-rtl.svg | 2 +- .../images/icons/stripeToC-ltr-invert.svg | 2 +- .../images/icons/stripeToC-ltr-progressive.svg | 2 +- .../mediawiki/images/icons/stripeToC-ltr.svg | 2 +- .../images/icons/stripeToC-rtl-invert.svg | 2 +- .../images/icons/stripeToC-rtl-progressive.svg | 2 +- .../mediawiki/images/icons/stripeToC-rtl.svg | 2 +- .../images/icons/subscript-ltr-invert.png | Bin 0 -> 272 bytes .../images/icons/subscript-ltr-invert.svg | 5 + .../mediawiki/images/icons/subscript-ltr.svg | 4 +- .../images/icons/subscript-rtl-invert.png | Bin 0 -> 258 bytes .../images/icons/subscript-rtl-invert.svg | 5 + .../mediawiki/images/icons/subscript-rtl.svg | 4 +- .../mediawiki/images/icons/sun-ltr-invert.png | Bin 0 -> 461 bytes .../mediawiki/images/icons/sun-ltr-invert.svg | 5 + .../themes/mediawiki/images/icons/sun-ltr.png | Bin 409 -> 408 bytes .../themes/mediawiki/images/icons/sun-ltr.svg | 2 +- .../mediawiki/images/icons/sun-rtl-invert.png | Bin 0 -> 455 bytes .../mediawiki/images/icons/sun-rtl-invert.svg | 5 + .../themes/mediawiki/images/icons/sun-rtl.png | Bin 392 -> 398 bytes .../themes/mediawiki/images/icons/sun-rtl.svg | 2 +- .../images/icons/superscript-ltr-invert.png | Bin 0 -> 271 bytes .../images/icons/superscript-ltr-invert.svg | 5 + .../mediawiki/images/icons/superscript-ltr.svg | 4 +- .../images/icons/superscript-rtl-invert.png | Bin 0 -> 264 bytes .../images/icons/superscript-rtl-invert.svg | 5 + .../mediawiki/images/icons/superscript-rtl.svg | 4 +- .../images/icons/table-caption-invert.png | Bin 0 -> 164 bytes .../images/icons/table-caption-invert.svg | 7 + .../mediawiki/images/icons/table-caption.svg | 4 +- .../icons/table-insert-column-ltr-invert.png | Bin 0 -> 167 bytes .../icons/table-insert-column-ltr-invert.svg | 7 + .../images/icons/table-insert-column-ltr.svg | 8 +- .../icons/table-insert-column-rtl-invert.png | Bin 0 -> 169 bytes .../icons/table-insert-column-rtl-invert.svg | 7 + .../images/icons/table-insert-column-rtl.svg | 8 +- .../images/icons/table-insert-row-after-invert.png | Bin 0 -> 159 bytes .../images/icons/table-insert-row-after-invert.svg | 7 + .../images/icons/table-insert-row-after.svg | 8 +- .../icons/table-insert-row-before-invert.png | Bin 0 -> 161 bytes .../icons/table-insert-row-before-invert.svg | 7 + .../images/icons/table-insert-row-before.svg | 8 +- .../themes/mediawiki/images/icons/table-invert.png | Bin 0 -> 158 bytes .../themes/mediawiki/images/icons/table-invert.svg | 6 + .../images/icons/table-merge-cells-invert.png | Bin 0 -> 234 bytes .../images/icons/table-merge-cells-invert.svg | 10 + .../mediawiki/images/icons/table-merge-cells.svg | 12 +- .../themes/mediawiki/images/icons/table.png | Bin 150 -> 151 bytes .../themes/mediawiki/images/icons/table.svg | 3 +- .../mediawiki/images/icons/tag-constructive.png | Bin 419 -> 419 bytes .../mediawiki/images/icons/tag-constructive.svg | 2 +- .../mediawiki/images/icons/tag-destructive.png | Bin 438 -> 442 bytes .../mediawiki/images/icons/tag-destructive.svg | 2 +- .../themes/mediawiki/images/icons/tag-invert.png | Bin 295 -> 290 bytes .../themes/mediawiki/images/icons/tag-invert.svg | 2 +- .../mediawiki/images/icons/tag-progressive.png | Bin 424 -> 426 bytes .../mediawiki/images/icons/tag-progressive.svg | 2 +- .../themes/mediawiki/images/icons/tag-warning.png | Bin 403 -> 399 bytes .../themes/mediawiki/images/icons/tag-warning.svg | 2 +- .../oojs-ui/themes/mediawiki/images/icons/tag.png | Bin 262 -> 260 bytes .../oojs-ui/themes/mediawiki/images/icons/tag.svg | 2 +- .../images/icons/templateAdd-ltr-invert.png | Bin 0 -> 203 bytes .../images/icons/templateAdd-ltr-invert.svg | 7 + .../mediawiki/images/icons/templateAdd-ltr.svg | 4 +- .../images/icons/templateAdd-rtl-invert.png | Bin 0 -> 212 bytes .../images/icons/templateAdd-rtl-invert.svg | 7 + .../mediawiki/images/icons/templateAdd-rtl.svg | 4 +- .../images/icons/text-dir-lefttoright-invert.png | Bin 0 -> 240 bytes .../images/icons/text-dir-lefttoright-invert.svg | 6 + .../images/icons/text-dir-lefttoright.svg | 2 +- .../images/icons/text-dir-righttoleft-invert.png | Bin 0 -> 251 bytes .../images/icons/text-dir-righttoleft-invert.svg | 6 + .../images/icons/text-dir-righttoleft.svg | 2 +- .../mediawiki/images/icons/text-style-invert.png | Bin 0 -> 351 bytes .../mediawiki/images/icons/text-style-invert.svg | 7 + .../themes/mediawiki/images/icons/text-style.png | Bin 306 -> 309 bytes .../themes/mediawiki/images/icons/text-style.svg | 4 +- .../images/icons/translation-ltr-invert.png | Bin 0 -> 473 bytes .../images/icons/translation-ltr-invert.svg | 4 + .../mediawiki/images/icons/translation-ltr.svg | 2 +- .../images/icons/translation-rtl-invert.png | Bin 0 -> 489 bytes .../images/icons/translation-rtl-invert.svg | 4 + .../mediawiki/images/icons/translation-rtl.png | Bin 437 -> 434 bytes .../mediawiki/images/icons/translation-rtl.svg | 2 +- .../themes/mediawiki/images/icons/trash-invert.svg | 2 +- .../themes/mediawiki/images/icons/trash.svg | 2 +- .../images/icons/trashUndo-ltr-invert.svg | 2 +- .../mediawiki/images/icons/trashUndo-ltr.svg | 2 +- .../images/icons/trashUndo-rtl-invert.svg | 2 +- .../mediawiki/images/icons/trashUndo-rtl.svg | 2 +- .../images/icons/unLock-ltr-destructive.svg | 2 +- .../mediawiki/images/icons/unLock-ltr-invert.svg | 2 +- .../themes/mediawiki/images/icons/unLock-ltr.svg | 2 +- .../images/icons/unLock-rtl-destructive.svg | 2 +- .../mediawiki/images/icons/unLock-rtl-invert.svg | 2 +- .../themes/mediawiki/images/icons/unLock-rtl.svg | 2 +- .../mediawiki/images/icons/unStar-constructive.png | Bin 0 -> 382 bytes .../mediawiki/images/icons/unStar-constructive.svg | 4 + .../mediawiki/images/icons/underline-a-invert.png | Bin 0 -> 328 bytes .../mediawiki/images/icons/underline-a-invert.svg | 7 + .../themes/mediawiki/images/icons/underline-a.png | Bin 295 -> 290 bytes .../themes/mediawiki/images/icons/underline-a.svg | 4 +- .../mediawiki/images/icons/underline-u-invert.png | Bin 0 -> 221 bytes .../mediawiki/images/icons/underline-u-invert.svg | 7 + .../themes/mediawiki/images/icons/underline-u.png | Bin 220 -> 205 bytes .../themes/mediawiki/images/icons/underline-u.svg | 4 +- .../mediawiki/images/icons/upTriangle-invert.png | Bin 0 -> 214 bytes .../mediawiki/images/icons/upTriangle-invert.svg | 4 + .../themes/mediawiki/images/icons/upTriangle.svg | 2 +- .../mediawiki/images/icons/upload-ltr-invert.png | Bin 0 -> 267 bytes .../mediawiki/images/icons/upload-ltr-invert.svg | 6 + .../themes/mediawiki/images/icons/upload-ltr.svg | 2 +- .../mediawiki/images/icons/upload-rtl-invert.png | Bin 0 -> 270 bytes .../mediawiki/images/icons/upload-rtl-invert.svg | 6 + .../themes/mediawiki/images/icons/upload-rtl.svg | 2 +- .../images/icons/userActive-ltr-invert.png | Bin 0 -> 367 bytes .../images/icons/userActive-ltr-invert.svg | 4 + .../mediawiki/images/icons/userActive-ltr.svg | 2 +- .../images/icons/userActive-rtl-invert.png | Bin 0 -> 363 bytes .../images/icons/userActive-rtl-invert.svg | 4 + .../mediawiki/images/icons/userActive-rtl.svg | 2 +- .../mediawiki/images/icons/userAvatar-invert.png | Bin 0 -> 288 bytes .../mediawiki/images/icons/userAvatar-invert.svg | 8 + .../themes/mediawiki/images/icons/userAvatar.svg | 2 +- .../images/icons/userInactive-ltr-invert.png | Bin 0 -> 321 bytes .../images/icons/userInactive-ltr-invert.svg | 4 + .../mediawiki/images/icons/userInactive-ltr.png | Bin 288 -> 286 bytes .../mediawiki/images/icons/userInactive-ltr.svg | 2 +- .../images/icons/userInactive-rtl-invert.png | Bin 0 -> 321 bytes .../images/icons/userInactive-rtl-invert.svg | 4 + .../mediawiki/images/icons/userInactive-rtl.svg | 2 +- .../mediawiki/images/icons/userTalk-ltr-invert.png | Bin 0 -> 347 bytes .../mediawiki/images/icons/userTalk-ltr-invert.svg | 4 + .../themes/mediawiki/images/icons/userTalk-ltr.svg | 2 +- .../mediawiki/images/icons/userTalk-rtl-invert.png | Bin 0 -> 358 bytes .../mediawiki/images/icons/userTalk-rtl-invert.svg | 4 + .../themes/mediawiki/images/icons/userTalk-rtl.svg | 2 +- .../images/icons/viewDetails-ltr-invert.svg | 4 +- .../mediawiki/images/icons/viewDetails-ltr.svg | 4 +- .../images/icons/visionSimulator-invert.png | Bin 238 -> 0 bytes .../images/icons/visionSimulator-invert.svg | 4 - .../images/icons/watchlist-ltr-invert.png | Bin 0 -> 338 bytes .../images/icons/watchlist-ltr-invert.svg | 6 + .../images/icons/watchlist-rtl-invert.png | Bin 0 -> 330 bytes .../images/icons/watchlist-rtl-invert.svg | 6 + .../mediawiki/images/icons/watchlist-rtl.svg | 2 +- .../mediawiki/images/icons/wikiText-invert.png | Bin 0 -> 171 bytes .../mediawiki/images/icons/wikiText-invert.svg | 15 + .../themes/mediawiki/images/icons/wikiText.svg | 4 +- .../images/icons/wikitrail-ltr-invert.png | Bin 0 -> 470 bytes .../images/icons/wikitrail-ltr-invert.svg | 8 + .../mediawiki/images/icons/wikitrail-ltr.png | Bin 409 -> 399 bytes .../mediawiki/images/icons/wikitrail-ltr.svg | 4 +- .../images/icons/wikitrail-rtl-invert.png | Bin 0 -> 471 bytes .../images/icons/wikitrail-rtl-invert.svg | 8 + .../mediawiki/images/icons/window-invert.svg | 4 +- .../themes/mediawiki/images/icons/window.svg | 4 +- .../mediawiki/images/indicators/alert-invert.svg | 4 +- .../themes/mediawiki/images/indicators/alert.svg | 4 +- .../images/indicators/arrow-down-invert.png | Bin 184 -> 133 bytes .../images/indicators/arrow-down-invert.svg | 14 +- .../mediawiki/images/indicators/arrow-down.png | Bin 173 -> 134 bytes .../mediawiki/images/indicators/arrow-down.svg | 14 +- .../images/indicators/arrow-ltr-invert.svg | 14 +- .../mediawiki/images/indicators/arrow-ltr.svg | 14 +- .../images/indicators/arrow-rtl-invert.svg | 14 +- .../mediawiki/images/indicators/arrow-rtl.svg | 14 +- .../images/indicators/arrow-up-invert.svg | 14 +- .../mediawiki/images/indicators/arrow-up.svg | 14 +- .../mediawiki/images/indicators/clear-invert.png | Bin 0 -> 262 bytes .../mediawiki/images/indicators/clear-invert.svg | 6 + .../themes/mediawiki/images/indicators/clear.png | Bin 0 -> 240 bytes .../themes/mediawiki/images/indicators/clear.svg | 6 + .../images/indicators/required-invert.svg | 4 +- .../mediawiki/images/indicators/required.svg | 4 +- .../images/indicators/search-ltr-invert.png | Bin 251 -> 255 bytes .../images/indicators/search-ltr-invert.svg | 4 +- .../mediawiki/images/indicators/search-ltr.png | Bin 231 -> 232 bytes .../mediawiki/images/indicators/search-ltr.svg | 4 +- .../images/indicators/search-rtl-invert.png | Bin 261 -> 259 bytes .../images/indicators/search-rtl-invert.svg | 4 +- .../mediawiki/images/indicators/search-rtl.png | Bin 234 -> 232 bytes .../mediawiki/images/indicators/search-rtl.svg | 4 +- .../mediawiki/images/textures/transparency.svg | 15 +- .../lib/oojs-ui/themes/mediawiki/indicators.json | 30 + .../lib/oojs-ui/themes/mediawiki/textures.json | 8 + resources/lib/oojs/oojs.jquery.js | 103 +- resources/lib/phpjs-sha1/LICENSE.txt | 20 + resources/lib/phpjs-sha1/sha1.js | 147 + resources/lib/qunitjs/qunit.css | 17 +- resources/lib/qunitjs/qunit.js | 1389 ++++- resources/lib/sinonjs/sinon-1.10.3.js | 5073 ---------------- resources/lib/sinonjs/sinon-1.15.4.js | 5949 +++++++++++++++++++ resources/lib/sinonjs/sinon-ie-1.10.3.js | 100 - resources/lib/sinonjs/sinon-ie-1.15.4.js | 103 + resources/src/dom-level2-skip.js | 6 + resources/src/jquery.tipsy/jquery.tipsy.js | 30 +- resources/src/jquery/jquery.accessKeyLabel.js | 6 +- resources/src/jquery/jquery.autoEllipsis.js | 38 +- resources/src/jquery/jquery.byteLimit.js | 29 +- resources/src/jquery/jquery.color.js | 12 +- resources/src/jquery/jquery.colorUtil.js | 150 +- resources/src/jquery/jquery.expandableField.js | 23 +- resources/src/jquery/jquery.farbtastic.js | 8 +- resources/src/jquery/jquery.getAttrs.js | 4 +- resources/src/jquery/jquery.hidpi.js | 59 +- resources/src/jquery/jquery.highlightText.js | 21 +- resources/src/jquery/jquery.localize.js | 8 +- resources/src/jquery/jquery.makeCollapsible.js | 9 +- resources/src/jquery/jquery.mwExtension.js | 37 +- resources/src/jquery/jquery.placeholder.js | 279 +- .../src/jquery/jquery.qunit.completenessTest.js | 31 +- resources/src/jquery/jquery.spinner.js | 2 +- resources/src/jquery/jquery.suggestions.js | 58 +- resources/src/jquery/jquery.tablesorter.js | 419 +- resources/src/jquery/jquery.textSelection.js | 11 +- resources/src/mediawiki.action/images/checker.png | Bin 0 -> 81 bytes .../mediawiki.action.edit.collapsibleFooter.js | 40 +- .../src/mediawiki.action/mediawiki.action.edit.css | 3 - .../mediawiki.action.edit.editWarning.js | 2 +- .../src/mediawiki.action/mediawiki.action.edit.js | 51 +- .../mediawiki.action.edit.preview.js | 87 +- .../mediawiki.action.edit.stash.js | 2 +- .../mediawiki.action/mediawiki.action.history.js | 2 +- .../mediawiki.action.view.filepage.css | 71 + .../mediawiki.action.view.filepage.print.css | 8 + .../mediawiki.action.view.metadata.css | 6 + .../mediawiki.action.view.postEdit.js | 28 +- .../src/mediawiki.api/mediawiki.ForeignApi.js | 109 + resources/src/mediawiki.api/mediawiki.api.edit.js | 6 +- resources/src/mediawiki.api/mediawiki.api.js | 124 +- resources/src/mediawiki.api/mediawiki.api.login.js | 1 + .../src/mediawiki.api/mediawiki.api.options.js | 4 +- resources/src/mediawiki.api/mediawiki.api.parse.js | 2 +- .../src/mediawiki.api/mediawiki.api.upload.js | 391 ++ resources/src/mediawiki.api/mediawiki.api.watch.js | 2 +- resources/src/mediawiki.language/languages/bs.js | 4 +- resources/src/mediawiki.language/languages/dsb.js | 4 +- resources/src/mediawiki.language/languages/fi.js | 4 +- resources/src/mediawiki.language/languages/ga.js | 4 +- resources/src/mediawiki.language/languages/he.js | 4 +- resources/src/mediawiki.language/languages/hsb.js | 4 +- resources/src/mediawiki.language/languages/hu.js | 4 +- resources/src/mediawiki.language/languages/hy.js | 4 +- resources/src/mediawiki.language/languages/la.js | 8 +- resources/src/mediawiki.language/languages/os.js | 4 +- resources/src/mediawiki.language/languages/ru.js | 4 +- resources/src/mediawiki.language/languages/sl.js | 4 +- resources/src/mediawiki.language/languages/uk.js | 18 +- resources/src/mediawiki.language/mediawiki.cldr.js | 2 +- .../mediawiki.language/mediawiki.language.init.js | 10 +- .../src/mediawiki.language/mediawiki.language.js | 26 +- .../mediawiki.language.numbers.js | 96 +- .../src/mediawiki.language/specialcharacters.json | 446 +- resources/src/mediawiki.legacy/ajax.js | 194 - resources/src/mediawiki.legacy/commonPrint.css | 44 - resources/src/mediawiki.legacy/images/checker.png | Bin 81 -> 0 bytes .../src/mediawiki.legacy/images/feed-icon.png | Bin 542 -> 0 bytes .../src/mediawiki.legacy/images/feed-icon.svg | 1 - resources/src/mediawiki.legacy/images/question.png | Bin 316 -> 0 bytes resources/src/mediawiki.legacy/images/question.svg | 1 - resources/src/mediawiki.legacy/oldshared.css | 13 - resources/src/mediawiki.legacy/protect.js | 3 +- resources/src/mediawiki.legacy/shared.css | 278 +- resources/src/mediawiki.legacy/wikibits.js | 38 +- resources/src/mediawiki.less/mediawiki.mixins.less | 4 +- .../src/mediawiki.less/mediawiki.ui/mixins.less | 29 +- .../src/mediawiki.less/mediawiki.ui/variables.less | 13 + .../mediawiki.messagePoster.factory.js | 14 +- .../src/mediawiki.page/mediawiki.page.gallery.css | 101 + .../src/mediawiki.page/mediawiki.page.gallery.js | 37 +- .../mediawiki.page.gallery.print.css | 35 + .../mediawiki.page.image.pagination.js | 9 +- .../mediawiki.page/mediawiki.page.patrol.ajax.js | 8 +- .../src/mediawiki.page/mediawiki.page.ready.js | 11 + .../src/mediawiki.page/mediawiki.page.startup.js | 11 +- .../mediawiki.page/mediawiki.page.watch.ajax.js | 15 +- resources/src/mediawiki.skinning/content.css | 3 +- resources/src/mediawiki.skinning/elements.css | 13 +- .../mediawiki.special.changeemail.js | 1 + .../mediawiki.special.changeslist.css | 4 +- .../mediawiki.special.changeslist.enhanced.css | 4 + .../mediawiki.special.changeslist.legend.js | 33 +- .../src/mediawiki.special/mediawiki.special.css | 11 +- .../mediawiki.special.movePage.css | 8 + .../mediawiki.special.movePage.js | 5 +- .../mediawiki.special.preferences.css | 17 + .../mediawiki.special.preferences.js | 43 +- .../mediawiki.special/mediawiki.special.search.css | 1 + .../mediawiki.special/mediawiki.special.search.js | 6 +- .../mediawiki.special.unwatchedPages.js | 4 +- .../mediawiki.special/mediawiki.special.upload.js | 79 +- .../mediawiki.special.userlogin.common.js | 72 - .../mediawiki.special.userlogin.signup.js | 2 +- .../mediawiki.special.version.css | 4 +- .../src/mediawiki.special/templates/thumbnail.html | 1 - resources/src/mediawiki.toolbar/toolbar.js | 2 +- resources/src/mediawiki.ui/components/buttons.less | 16 +- .../src/mediawiki.ui/components/checkbox.less | 3 + resources/src/mediawiki.ui/components/icons.less | 33 +- .../src/mediawiki.ui/components/images/ok.png | Bin 442 -> 0 bytes .../src/mediawiki.ui/components/images/ok.svg | 1 - resources/src/mediawiki.widgets/AUTHORS.txt | 10 + resources/src/mediawiki.widgets/LICENSE.txt | 25 + .../mediawiki.widgets/mw.widgets.CalendarWidget.js | 558 ++ .../mw.widgets.CalendarWidget.less | 243 + .../mw.widgets.CategoryCapsuleItemWidget.js | 189 + .../mw.widgets.CategorySelector.js | 378 ++ ...mw.widgets.ComplexNamespaceInputWidget.base.css | 26 + .../mw.widgets.ComplexNamespaceInputWidget.js | 118 + .../mw.widgets.ComplexTitleInputWidget.base.css | 20 + .../mw.widgets.ComplexTitleInputWidget.js | 63 + .../mw.widgets.DateInputWidget.js | 629 ++ .../mw.widgets.DateInputWidget.less | 134 + .../mw.widgets.NamespaceInputWidget.js | 69 + .../mw.widgets.TitleInputWidget.css | 57 + .../mw.widgets.TitleInputWidget.js | 341 ++ .../mw.widgets.TitleOptionWidget.js | 82 + .../mw.widgets.UserInputWidget.js | 119 + resources/src/mediawiki/images/feed-icon.png | Bin 0 -> 542 bytes resources/src/mediawiki/images/feed-icon.svg | 1 + resources/src/mediawiki/images/question.png | Bin 0 -> 316 bytes resources/src/mediawiki/images/question.svg | 1 + ...awiki.ForeignStructuredUpload.BookletLayout.css | 5 + ...iawiki.ForeignStructuredUpload.BookletLayout.js | 247 + .../mediawiki/mediawiki.ForeignStructuredUpload.js | 184 + resources/src/mediawiki/mediawiki.ForeignUpload.js | 135 + resources/src/mediawiki/mediawiki.RegExp.js | 22 + resources/src/mediawiki/mediawiki.Title.js | 118 +- .../mediawiki/mediawiki.Upload.BookletLayout.js | 543 ++ resources/src/mediawiki/mediawiki.Upload.Dialog.js | 205 + resources/src/mediawiki/mediawiki.Upload.js | 368 ++ resources/src/mediawiki/mediawiki.Uri.js | 19 +- resources/src/mediawiki/mediawiki.Uri.loose.regexp | 22 + .../src/mediawiki/mediawiki.Uri.strict.regexp | 13 + resources/src/mediawiki/mediawiki.apihelp.css | 4 + .../src/mediawiki/mediawiki.confirmCloseWindow.js | 68 +- resources/src/mediawiki/mediawiki.cookie.js | 6 +- resources/src/mediawiki/mediawiki.debug.js | 14 +- resources/src/mediawiki/mediawiki.errorLogger.js | 3 + resources/src/mediawiki/mediawiki.experiments.js | 110 + resources/src/mediawiki/mediawiki.feedback.js | 19 +- resources/src/mediawiki/mediawiki.feedlink.css | 16 + resources/src/mediawiki/mediawiki.filewarning.less | 6 +- resources/src/mediawiki/mediawiki.htmlform.css | 51 + resources/src/mediawiki/mediawiki.htmlform.js | 40 +- .../src/mediawiki/mediawiki.htmlform.ooui.css | 31 + resources/src/mediawiki/mediawiki.inspect.js | 39 +- resources/src/mediawiki/mediawiki.jqueryMsg.js | 363 +- resources/src/mediawiki/mediawiki.js | 923 +-- resources/src/mediawiki/mediawiki.log.js | 1 + .../mediawiki/mediawiki.notification.common.css | 7 + resources/src/mediawiki/mediawiki.notification.css | 15 +- resources/src/mediawiki/mediawiki.notification.js | 21 +- resources/src/mediawiki/mediawiki.notify.js | 5 +- resources/src/mediawiki/mediawiki.searchSuggest.js | 161 +- resources/src/mediawiki/mediawiki.startUp.js | 11 - resources/src/mediawiki/mediawiki.storage.js | 58 + resources/src/mediawiki/mediawiki.template.js | 8 +- .../src/mediawiki/mediawiki.template.mustache.js | 2 +- .../src/mediawiki/mediawiki.template.regexp.js | 15 + resources/src/mediawiki/mediawiki.toc.js | 12 +- resources/src/mediawiki/mediawiki.user.js | 34 +- resources/src/mediawiki/mediawiki.userSuggest.js | 6 +- resources/src/mediawiki/mediawiki.util.js | 15 +- resources/src/moment-local-dmy.js | 16 + resources/src/oojs-ui-local.css | 7 + resources/src/polyfill-nodeTypes.js | 19 + resources/src/startup.js | 73 +- skins/ArchLinux/ArchLinuxTemplate.php | 11 +- skins/ArchLinux/Gruntfile.js | 20 + skins/ArchLinux/composer.json | 10 + skins/ArchLinux/main.css | 7 +- skins/ArchLinux/skin.json | 7 +- skins/CologneBlue/Gruntfile.js | 20 + skins/CologneBlue/SkinCologneBlue.php | 2 +- skins/CologneBlue/composer.json | 10 + skins/CologneBlue/i18n/arq.json | 8 + skins/CologneBlue/i18n/en.json | 3 + skins/CologneBlue/i18n/es.json | 7 +- skins/CologneBlue/i18n/fo.json | 9 +- skins/CologneBlue/i18n/hu.json | 6 +- skins/CologneBlue/i18n/ilo.json | 8 + skins/CologneBlue/i18n/ne.json | 5 +- skins/CologneBlue/i18n/nl.json | 4 +- skins/CologneBlue/i18n/pt-br.json | 9 +- skins/CologneBlue/i18n/scn.json | 7 +- skins/CologneBlue/skin.json | 4 +- skins/Modern/Gruntfile.js | 20 + skins/Modern/composer.json | 10 + skins/Modern/i18n/arq.json | 8 + skins/Modern/i18n/en.json | 3 + skins/Modern/i18n/es.json | 5 +- skins/Modern/i18n/fo.json | 8 + skins/Modern/i18n/hu.json | 6 +- skins/Modern/i18n/ko.json | 2 +- skins/Modern/i18n/ne.json | 5 +- skins/Modern/i18n/nl.json | 4 +- skins/Modern/i18n/pt-br.json | 9 +- skins/Modern/i18n/scn.json | 6 +- skins/Modern/skin.json | 4 +- skins/MonoBook/Gruntfile.js | 20 + skins/MonoBook/MonoBookTemplate.php | 11 +- skins/MonoBook/composer.json | 10 + skins/MonoBook/i18n/arq.json | 8 + skins/MonoBook/i18n/bs.json | 4 +- skins/MonoBook/i18n/dty.json | 8 + skins/MonoBook/i18n/es.json | 5 +- skins/MonoBook/i18n/fo.json | 8 + skins/MonoBook/i18n/ne.json | 5 +- skins/MonoBook/i18n/nl.json | 4 +- skins/MonoBook/i18n/pt-br.json | 7 +- skins/MonoBook/i18n/sah.json | 1 + skins/MonoBook/i18n/scn.json | 4 +- skins/MonoBook/main.css | 7 +- skins/MonoBook/skin.json | 7 +- skins/Vector/Gruntfile.js | 32 + skins/Vector/SkinVector.php | 7 +- skins/Vector/Vector.php | 2 +- skins/Vector/VectorTemplate.php | 124 +- skins/Vector/collapsibleTabs.js | 5 +- skins/Vector/components/common.less | 13 +- skins/Vector/components/tabs.less | 2 + skins/Vector/components/watchstar.less | 4 +- skins/Vector/composer.json | 46 +- skins/Vector/i18n/ady-cyrl.json | 15 +- skins/Vector/i18n/aeb-latn.json | 14 + skins/Vector/i18n/aeb.json | 5 +- skins/Vector/i18n/an.json | 6 +- skins/Vector/i18n/ang.json | 5 +- skins/Vector/i18n/arn.json | 3 +- skins/Vector/i18n/arq.json | 3 +- skins/Vector/i18n/arz.json | 3 +- skins/Vector/i18n/ba.json | 6 +- skins/Vector/i18n/bho.json | 8 +- skins/Vector/i18n/bs.json | 9 +- skins/Vector/i18n/ce.json | 6 +- skins/Vector/i18n/din.json | 11 + skins/Vector/i18n/dty.json | 16 + skins/Vector/i18n/ee.json | 6 +- skins/Vector/i18n/eml.json | 9 + skins/Vector/i18n/fo.json | 1 + skins/Vector/i18n/frp.json | 3 +- skins/Vector/i18n/fy.json | 2 +- skins/Vector/i18n/glk.json | 13 + skins/Vector/i18n/gom-deva.json | 7 +- skins/Vector/i18n/gom-latn.json | 2 +- skins/Vector/i18n/gsw.json | 3 +- skins/Vector/i18n/gu.json | 2 +- skins/Vector/i18n/hil.json | 12 +- skins/Vector/i18n/hrx.json | 6 +- skins/Vector/i18n/ht.json | 6 +- skins/Vector/i18n/ilo.json | 2 +- skins/Vector/i18n/jut.json | 11 + skins/Vector/i18n/jv.json | 3 +- skins/Vector/i18n/kea.json | 9 + skins/Vector/i18n/khw.json | 3 +- skins/Vector/i18n/kk-cyrl.json | 2 +- skins/Vector/i18n/km.json | 3 +- skins/Vector/i18n/ko.json | 7 +- skins/Vector/i18n/ksh.json | 8 +- skins/Vector/i18n/ku-latn.json | 9 +- skins/Vector/i18n/kw.json | 3 +- skins/Vector/i18n/ky.json | 6 +- skins/Vector/i18n/lrc.json | 4 +- skins/Vector/i18n/lt.json | 4 +- skins/Vector/i18n/luz.json | 9 +- skins/Vector/i18n/mdf.json | 6 +- skins/Vector/i18n/mg.json | 3 +- skins/Vector/i18n/mk.json | 2 +- skins/Vector/i18n/mn.json | 6 +- skins/Vector/i18n/mzn.json | 3 +- skins/Vector/i18n/nan.json | 5 +- skins/Vector/i18n/nap.json | 2 +- skins/Vector/i18n/ne.json | 5 +- skins/Vector/i18n/nl.json | 4 +- skins/Vector/i18n/olo.json | 19 + skins/Vector/i18n/or.json | 3 +- skins/Vector/i18n/pnb.json | 3 +- skins/Vector/i18n/prs.json | 11 + skins/Vector/i18n/ro.json | 3 +- skins/Vector/i18n/sa.json | 5 +- skins/Vector/i18n/sc.json | 4 +- skins/Vector/i18n/scn.json | 11 +- skins/Vector/i18n/sd.json | 11 +- skins/Vector/i18n/sgs.json | 4 +- skins/Vector/i18n/shy-latn.json | 8 + skins/Vector/i18n/si.json | 9 +- skins/Vector/i18n/sk.json | 5 +- skins/Vector/i18n/ta.json | 6 +- skins/Vector/i18n/tl.json | 3 +- skins/Vector/i18n/tr.json | 6 +- skins/Vector/i18n/ur.json | 5 +- skins/Vector/i18n/vec.json | 3 +- skins/Vector/i18n/vro.json | 3 +- skins/Vector/i18n/wo.json | 3 +- skins/Vector/i18n/wuu.json | 6 +- skins/Vector/i18n/xmf.json | 6 +- skins/Vector/i18n/yo.json | 3 +- skins/Vector/i18n/za.json | 6 +- skins/Vector/i18n/zh-hans.json | 2 +- skins/Vector/i18n/zh-hant.json | 5 +- skins/Vector/phpcs.xml | 7 + skins/Vector/responsive.less | 78 + skins/Vector/skin.json | 19 +- .../skinStyles/jquery.ui/jquery.ui.button.css | 13 - .../Vector/skinStyles/mediawiki.notification.less | 14 +- skins/Vector/skinStyles/ooui.less | 4 + tests/TestsAutoLoader.php | 13 +- tests/browser/environments.yml | 4 +- tests/browser/features/create_account.feature | 5 + .../step_definitions/create_account_steps.rb | 8 + .../features/support/pages/create_account_page.rb | 1 + tests/browser/features/support/pages/main_page.rb | 6 +- .../support/pages/preferences_appearance_page.rb | 2 +- .../features/support/pages/view_history_page.rb | 4 +- tests/parser/parserTest.inc | 9 +- tests/parser/parserTests.txt | 4327 ++++++++++---- .../parser/preprocess/All_system_messages.expected | 6 +- tests/parser/preprocess/All_system_messages.txt | 6 +- tests/parserTests.php | 2 +- tests/phpunit/LessFileCompilationTest.php | 6 +- tests/phpunit/Makefile | 1 - tests/phpunit/MediaWikiTestCase.php | 30 +- tests/phpunit/README | 17 +- tests/phpunit/ResourceLoaderTestCase.php | 44 +- tests/phpunit/data/css/comments.css | 7 + tests/phpunit/data/helpers/WellProtectedClass.php | 29 +- .../data/import/ImportLinkCacheIntegrationTest.xml | 43 + .../data/less/common/test.common.mixins.less | 1 - tests/phpunit/data/less/module/styles.css | 3 +- tests/phpunit/data/media/2_webp_a.webp | Bin 0 -> 17128 bytes tests/phpunit/data/media/2_webp_ll.webp | Bin 0 -> 29360 bytes tests/phpunit/data/media/srgb.jpg | Bin 0 -> 7738 bytes tests/phpunit/data/media/tinyrgb.icc | Bin 0 -> 524 bytes tests/phpunit/data/media/tinyrgb.jpg | Bin 0 -> 5118 bytes tests/phpunit/data/media/webp_animated.webp | Bin 0 -> 380850 bytes tests/phpunit/data/templates/bad_partial.mustache | 1 + tests/phpunit/data/templates/has_partial.mustache | 1 + tests/phpunit/includes/BlockTest.php | 114 +- .../includes/ConsecutiveParametersMatcher.php | 123 + tests/phpunit/includes/EditPageTest.php | 55 + tests/phpunit/includes/ExtraParserTest.php | 3 +- tests/phpunit/includes/FauxRequestTest.php | 43 +- tests/phpunit/includes/FauxResponseTest.php | 7 + .../includes/GlobalFunctions/GlobalTest.php | 103 +- .../includes/GlobalFunctions/wfArrayPlus2dTest.php | 94 + .../includes/GlobalFunctions/wfTimestampTest.php | 1 + .../includes/GlobalFunctions/wfUrlencodeTest.php | 2 + .../includes/ImportLinkCacheIntegrationTest.php | 112 + tests/phpunit/includes/LinkFilterTest.php | 12 +- tests/phpunit/includes/LinkerTest.php | 66 +- tests/phpunit/includes/MediaWikiTest.php | 157 + tests/phpunit/includes/MessageTest.php | 33 + tests/phpunit/includes/MimeMagicTest.php | 2 +- tests/phpunit/includes/MovePageTest.php | 2 +- tests/phpunit/includes/OutputPageTest.php | 168 +- tests/phpunit/includes/PrefixSearchTest.php | 5 + tests/phpunit/includes/SanitizerTest.php | 12 +- .../includes/SanitizerValidateEmailTest.php | 2 +- tests/phpunit/includes/StatusTest.php | 4 +- tests/phpunit/includes/TemplateParserTest.php | 15 +- tests/phpunit/includes/TestingAccessWrapper.php | 34 +- .../phpunit/includes/TestingAccessWrapperTest.php | 18 + .../phpunit/includes/TitleArrayFromResultTest.php | 2 +- tests/phpunit/includes/TitlePermissionTest.php | 22 +- tests/phpunit/includes/TitleTest.php | 101 +- tests/phpunit/includes/UserTest.php | 130 +- tests/phpunit/includes/WikiMapTest.php | 108 + tests/phpunit/includes/WikiReferenceTest.php | 80 + tests/phpunit/includes/XmlJsTest.php | 2 +- tests/phpunit/includes/XmlTest.php | 6 +- tests/phpunit/includes/api/ApiBlockTest.php | 6 +- tests/phpunit/includes/api/ApiEditPageTest.php | 113 +- tests/phpunit/includes/api/ApiLoginTest.php | 4 +- tests/phpunit/includes/api/ApiMainTest.php | 171 +- tests/phpunit/includes/api/ApiMessageTest.php | 20 +- .../phpunit/includes/api/ApiQueryAllPagesTest.php | 6 +- tests/phpunit/includes/api/ApiResultTest.php | 194 +- .../phpunit/includes/api/ApiRevisionDeleteTest.php | 4 +- tests/phpunit/includes/api/ApiTestCase.php | 1 + tests/phpunit/includes/api/ApiUnblockTest.php | 4 +- tests/phpunit/includes/api/ApiUploadTest.php | 36 +- .../includes/api/format/ApiFormatDumpTest.php | 63 - .../includes/api/format/ApiFormatWddxTest.php | 80 - .../api/query/ApiQueryContinueTestBase.php | 5 +- tests/phpunit/includes/api/query/ApiQueryTest.php | 2 +- .../includes/api/query/ApiQueryTestBase.php | 14 +- tests/phpunit/includes/cache/MessageCacheTest.php | 29 +- .../phpunit/includes/changes/RecentChangeTest.php | 327 +- tests/phpunit/includes/config/HashConfigTest.php | 2 +- .../includes/content/ContentHandlerTest.php | 179 +- .../includes/content/CssContentHandlerTest.php | 30 + tests/phpunit/includes/content/CssContentTest.php | 45 +- .../content/JavaScriptContentHandlerTest.php | 30 + .../includes/content/JavaScriptContentTest.php | 53 +- tests/phpunit/includes/content/JsonContentTest.php | 2 +- .../includes/content/TextContentHandlerTest.php | 12 + tests/phpunit/includes/content/TextContentTest.php | 8 +- .../content/WikitextContentHandlerTest.php | 5 + .../phpunit/includes/db/DatabaseMysqlBaseTest.php | 2 +- tests/phpunit/includes/db/DatabaseSqliteTest.php | 25 +- tests/phpunit/includes/db/ORMTableTest.php | 19 - tests/phpunit/includes/debug/MWDebugTest.php | 4 +- .../includes/debug/logger/LegacyLoggerTest.php | 175 + .../includes/debug/logger/MonologSpiTest.php | 136 + .../debug/logger/monolog/AvroFormatterTest.php | 64 + .../debug/logger/monolog/KafkaHandlerTest.php | 207 + .../debug/logger/monolog/LineFormatterTest.php | 75 + .../includes/debug/logging/LegacyLoggerTest.php | 122 - .../includes/deferred/DeferredUpdatesTest.php | 37 +- .../includes/diff/ArrayDiffFormatterTest.php | 4 +- tests/phpunit/includes/exception/HttpErrorTest.php | 65 + .../phpunit/includes/exception/MWExceptionTest.php | 2 +- .../includes/filebackend/FileBackendTest.php | 52 +- .../includes/filebackend/SwiftFileBackendTest.php | 148 + .../filerepo/FileBackendDBRepoWrapperTest.php | 138 + .../filerepo/MigrateFileRepoLayoutTest.php | 114 + .../htmlform/HTMLAutoCompleteSelectFieldTest.php | 2 +- tests/phpunit/includes/json/FormatJsonTest.php | 10 +- tests/phpunit/includes/libs/ArrayUtilsTest.php | 12 +- tests/phpunit/includes/libs/CSSMinTest.php | 57 +- tests/phpunit/includes/libs/IEUrlExtensionTest.php | 33 + tests/phpunit/includes/libs/IPSetTest.php | 252 - .../includes/libs/JavaScriptMinifierTest.php | 19 +- tests/phpunit/includes/libs/ObjectFactoryTest.php | 41 +- .../phpunit/includes/libs/ProcessCacheLRUTest.php | 2 +- .../includes/libs/SamplingStatsdClientTest.php | 43 + tests/phpunit/includes/libs/XhprofTest.php | 16 +- .../includes/libs/composer/ComposerLockTest.php | 61 + .../includes/logging/BlockLogFormatterTest.php | 372 ++ .../includes/logging/DeleteLogFormatterTest.php | 527 ++ .../phpunit/includes/logging/LogFormatterTest.php | 321 +- .../includes/logging/LogFormatterTestCase.php | 65 + .../includes/logging/MergeLogFormatterTest.php | 67 + .../includes/logging/MoveLogFormatterTest.php | 270 + .../includes/logging/NewUsersLogFormatterTest.php | 207 + .../includes/logging/PageLangLogFormatterTest.php | 53 + .../includes/logging/PatrolLogFormatterTest.php | 118 + .../includes/logging/ProtectLogFormatterTest.php | 63 + .../includes/logging/RightsLogFormatterTest.php | 157 + .../includes/logging/UploadLogFormatterTest.php | 166 + tests/phpunit/includes/media/ExifBitmapTest.php | 39 +- .../phpunit/includes/media/FormatMetadataTest.php | 33 - tests/phpunit/includes/media/WebPTest.php | 127 + tests/phpunit/includes/media/XMPValidateTest.php | 5 +- .../phpunit/includes/objectcache/BagOStuffTest.php | 34 +- .../objectcache/MultiWriteBagOStuffTest.php | 55 + .../objectcache/ReplicatedBagOStuffTest.php | 62 + .../includes/objectcache/WANObjectCacheTest.php | 292 + .../phpunit/includes/parser/MagicVariableTest.php | 2 + .../includes/parser/MediaWikiParserTest.php | 2 +- tests/phpunit/includes/parser/NewParserTest.php | 10 +- .../phpunit/includes/parser/ParserMethodsTest.php | 4 + tests/phpunit/includes/parser/TagHooksTest.php | 7 +- tests/phpunit/includes/parser/TidyTest.php | 3 +- .../includes/password/PasswordPolicyChecksTest.php | 136 + .../includes/password/UserPasswordPolicyTest.php | 234 + .../registration/CoreVersionCheckerTest.php | 38 + .../registration/ExtensionProcessorTest.php | 16 +- .../registration/ExtensionRegistryTest.php | 2 + .../DerivativeResourceLoaderContextTest.php | 78 + .../ResourceLoaderFileModuleTest.php | 22 +- .../resourceloader/ResourceLoaderImageTest.php | 3 - .../resourceloader/ResourceLoaderModuleTest.php | 58 +- .../ResourceLoaderStartUpModuleTest.php | 74 +- .../includes/resourceloader/ResourceLoaderTest.php | 11 +- .../ResourceLoaderWikiModuleTest.php | 49 +- .../phpunit/includes/site/CachingSiteStoreTest.php | 8 +- tests/phpunit/includes/site/DBSiteStoreTest.php | 24 + tests/phpunit/includes/site/HashSiteStoreTest.php | 2 +- tests/phpunit/includes/site/SiteExporterTest.php | 4 +- tests/phpunit/includes/site/SiteImporterTest.php | 12 +- .../includes/specials/SpecialBlankPageTest.php | 25 + .../includes/specials/SpecialPageTestBase.php | 165 + .../includes/specials/SpecialPreferencesTest.php | 3 +- .../includes/specials/SpecialSearchTest.php | 106 +- tests/phpunit/includes/title/ForeignTitleTest.php | 4 +- .../title/MediaWikiPageLinkRendererTest.php | 2 +- tests/phpunit/includes/upload/UploadStashTest.php | 2 +- tests/phpunit/includes/utils/AvroValidatorTest.php | 96 + .../phpunit/includes/utils/BatchRowUpdateTest.php | 243 + tests/phpunit/includes/utils/IPTest.php | 273 +- tests/phpunit/includes/utils/MWFunctionTest.php | 34 - tests/phpunit/includes/utils/UIDGeneratorTest.php | 10 +- tests/phpunit/languages/LanguageTest.php | 100 +- .../phpunit/languages/classes/LanguageArqTest.php | 2 +- tests/phpunit/maintenance/backupTextPassTest.php | 8 +- tests/phpunit/mocks/MockWebRequest.php | 26 + .../mocks/content/DummyContentForTesting.php | 121 + .../content/DummyContentHandlerForTesting.php | 42 + .../phpunit/mocks/content/DummyNonTextContent.php | 121 + .../mocks/content/DummyNonTextContentHandler.php | 46 + tests/phpunit/phpunit.php | 35 +- tests/phpunit/structure/AutoLoaderTest.php | 4 +- tests/phpunit/structure/AvailableRightsTest.php | 4 +- tests/phpunit/structure/ResourcesTest.php | 52 +- tests/phpunit/suites/UploadFromUrlTestSuite.php | 4 +- tests/qunit/QUnitTestResources.php | 15 +- tests/qunit/data/generateJqueryMsgData.php | 3 +- tests/qunit/data/mediawiki.jqueryMsg.data.js | 3 +- tests/qunit/data/testrunner.js | 99 +- .../resources/jquery/jquery.accessKeyLabel.test.js | 40 +- .../resources/jquery/jquery.autoEllipsis.test.js | 4 +- .../suites/resources/jquery/jquery.color.test.js | 2 +- .../resources/jquery/jquery.colorUtil.test.js | 36 +- .../suites/resources/jquery/jquery.hidpi.test.js | 16 + .../resources/jquery/jquery.localize.test.js | 14 +- .../jquery/jquery.makeCollapsible.test.js | 18 + .../resources/jquery/jquery.mwExtension.test.js | 15 +- .../resources/jquery/jquery.placeholder.test.js | 172 +- .../jquery/jquery.tablesorter.parsers.test.js | 220 +- .../resources/jquery/jquery.tablesorter.test.js | 413 +- .../resources/jquery/jquery.textSelection.test.js | 33 +- .../mediawiki.api/mediawiki.ForeignApi.test.js | 39 + .../resources/mediawiki.api/mediawiki.api.test.js | 346 +- .../mediawiki.api/mediawiki.api.upload.test.js | 35 + .../mediawiki.api/mediawiki.api.watch.test.js | 6 +- .../resources/mediawiki/mediawiki.RegExp.test.js | 38 + .../resources/mediawiki/mediawiki.Title.test.js | 171 +- .../resources/mediawiki/mediawiki.Uri.test.js | 10 +- .../resources/mediawiki/mediawiki.cldr.test.js | 6 +- .../resources/mediawiki/mediawiki.cookie.test.js | 4 +- .../mediawiki/mediawiki.errorLogger.test.js | 2 +- .../mediawiki/mediawiki.experiments.test.js | 63 + .../mediawiki/mediawiki.jqueryMsg.test.js | 269 +- .../resources/mediawiki/mediawiki.jscompat.test.js | 2 +- .../resources/mediawiki/mediawiki.language.test.js | 14 +- .../mediawiki.messagePoster.factory.test.js | 2 +- .../resources/mediawiki/mediawiki.storage.test.js | 36 + .../suites/resources/mediawiki/mediawiki.test.js | 283 +- .../resources/mediawiki/mediawiki.toc.test.js | 2 +- .../resources/mediawiki/mediawiki.track.test.js | 18 + .../resources/mediawiki/mediawiki.util.test.js | 127 +- tests/qunit/suites/resources/startup.test.js | 4 +- tests/testHelpers.inc | 2 +- thumb.php | 65 +- vendor/README.md | 30 + vendor/autoload.php | 2 +- vendor/composer.json | 35 + vendor/composer.lock | 1064 ++++ vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 509 +- vendor/composer/autoload_files.php | 10 + vendor/composer/autoload_namespaces.php | 7 +- vendor/composer/autoload_psr4.php | 9 +- vendor/composer/autoload_real.php | 14 +- vendor/composer/installed.json | 987 +++- vendor/composer/semver/CHANGELOG.md | 28 + vendor/composer/semver/LICENSE | 19 + vendor/composer/semver/README.md | 70 + vendor/composer/semver/composer.json | 57 + vendor/composer/semver/src/Comparator.php | 111 + .../semver/src/Constraint/AbstractConstraint.php | 65 + .../composer/semver/src/Constraint/Constraint.php | 181 + .../semver/src/Constraint/ConstraintInterface.php | 37 + .../semver/src/Constraint/EmptyConstraint.php | 59 + .../semver/src/Constraint/MultiConstraint.php | 96 + vendor/composer/semver/src/Semver.php | 127 + vendor/composer/semver/src/VersionParser.php | 520 ++ vendor/firebase/php-jwt/Authentication/JWT.php | 334 ++ .../php-jwt/Exceptions/BeforeValidException.php | 6 + .../php-jwt/Exceptions/ExpiredException.php | 6 + .../Exceptions/SignatureInvalidException.php | 6 + vendor/firebase/php-jwt/LICENSE | 30 + vendor/firebase/php-jwt/README.md | 93 + vendor/firebase/php-jwt/composer.json | 25 + vendor/firebase/php-jwt/package.xml | 77 + vendor/firebase/php-jwt/phpunit.xml.dist | 19 + vendor/firebase/php-jwt/run-tests.sh | 38 + vendor/firebase/php-jwt/tests/JWTTest.php | 231 + vendor/firebase/php-jwt/tests/autoload.php.dist | 17 + vendor/firebase/php-jwt/tests/bootstrap.php | 7 + vendor/kzykhys/pygments/README.md | 99 + vendor/kzykhys/pygments/composer.json | 17 + vendor/kzykhys/pygments/composer.lock | 118 + vendor/kzykhys/pygments/phpunit.xml.dist | 28 + .../pygments/src/KzykHys/Pygments/Pygments.php | 200 + .../test/KzykHys/Pygments/PygmentsTest.php | 116 + .../KzykHys/Pygments/Resources/css/default.css | 61 + .../Pygments/Resources/css/default.prefix.css | 62 + .../KzykHys/Pygments/Resources/example/php.php.in | 21 + .../Pygments/Resources/example/php.php.linenos.out | 43 + .../KzykHys/Pygments/Resources/example/php.php.out | 22 + vendor/leafo/lessphp/LICENSE | 660 --- vendor/leafo/lessphp/Makefile | 7 - vendor/leafo/lessphp/README.md | 96 - vendor/leafo/lessphp/composer.json | 25 - vendor/leafo/lessphp/docs/docs.md | 1400 ----- vendor/leafo/lessphp/lessc.inc.php | 3768 ------------ vendor/leafo/lessphp/lessify | 23 - vendor/leafo/lessphp/lessify.inc.php | 447 -- vendor/leafo/lessphp/package.sh | 35 - vendor/leafo/lessphp/plessc | 250 - vendor/leafo/lessphp/tests/ApiTest.php | 196 - vendor/leafo/lessphp/tests/ErrorHandlingTest.php | 81 - vendor/leafo/lessphp/tests/InputTest.php | 89 - vendor/leafo/lessphp/tests/README.md | 24 - vendor/leafo/lessphp/tests/bootstrap.sh | 38 - .../lessphp/tests/inputs/accessors.less.disable | 36 - vendor/leafo/lessphp/tests/inputs/arity.less | 77 - vendor/leafo/lessphp/tests/inputs/attributes.less | 41 - vendor/leafo/lessphp/tests/inputs/builtins.less | 96 - vendor/leafo/lessphp/tests/inputs/colors.less | 154 - .../lessphp/tests/inputs/compile_on_mixin.less | 39 - vendor/leafo/lessphp/tests/inputs/data-uri.less | 7 - vendor/leafo/lessphp/tests/inputs/directives.less | 28 - vendor/leafo/lessphp/tests/inputs/escape.less | 18 - vendor/leafo/lessphp/tests/inputs/font_family.less | 28 - vendor/leafo/lessphp/tests/inputs/guards.less | 74 - vendor/leafo/lessphp/tests/inputs/hacks.less | 6 - vendor/leafo/lessphp/tests/inputs/hi.less | 5 - vendor/leafo/lessphp/tests/inputs/ie.less | 12 - vendor/leafo/lessphp/tests/inputs/import.less | 56 - .../leafo/lessphp/tests/inputs/interpolation.less | 47 - vendor/leafo/lessphp/tests/inputs/keyframes.less | 52 - vendor/leafo/lessphp/tests/inputs/math.less | 122 - vendor/leafo/lessphp/tests/inputs/media.less | 68 - vendor/leafo/lessphp/tests/inputs/misc.less | 100 - .../lessphp/tests/inputs/mixin_functions.less | 33 - .../tests/inputs/mixin_merging.less.disable | 100 - vendor/leafo/lessphp/tests/inputs/mixins.less | 197 - vendor/leafo/lessphp/tests/inputs/nested.less | 60 - .../lessphp/tests/inputs/pattern_matching.less | 157 - vendor/leafo/lessphp/tests/inputs/scopes.less | 40 - .../lessphp/tests/inputs/selector_expressions.less | 29 - vendor/leafo/lessphp/tests/inputs/site_demos.less | 120 - .../leafo/lessphp/tests/inputs/test-imports/a.less | 6 - .../leafo/lessphp/tests/inputs/test-imports/b.less | 12 - .../lessphp/tests/inputs/test-imports/file1.less | 16 - .../lessphp/tests/inputs/test-imports/file2.less | 6 - .../lessphp/tests/inputs/test-imports/file3.less | 7 - .../tests/inputs/test-imports/inner/file1.less | 6 - .../tests/inputs/test-imports/inner/file2.less | 4 - vendor/leafo/lessphp/tests/inputs/variables.less | 44 - .../lessphp/tests/inputs_lessjs/mixins-args.less | 205 - .../tests/inputs_lessjs/mixins-named-args.less | 36 - .../leafo/lessphp/tests/inputs_lessjs/strings.less | 51 - vendor/leafo/lessphp/tests/outputs/accessors.css | 14 - vendor/leafo/lessphp/tests/outputs/arity.css | 25 - vendor/leafo/lessphp/tests/outputs/attributes.css | 105 - vendor/leafo/lessphp/tests/outputs/builtins.css | 61 - vendor/leafo/lessphp/tests/outputs/colors.css | 103 - .../lessphp/tests/outputs/compile_on_mixin.css | 29 - vendor/leafo/lessphp/tests/outputs/data-uri.css | 6 - vendor/leafo/lessphp/tests/outputs/directives.css | 27 - vendor/leafo/lessphp/tests/outputs/escape.css | 14 - vendor/leafo/lessphp/tests/outputs/font_family.css | 17 - vendor/leafo/lessphp/tests/outputs/guards.css | 27 - vendor/leafo/lessphp/tests/outputs/hacks.css | 4 - vendor/leafo/lessphp/tests/outputs/hi.css | 3 - vendor/leafo/lessphp/tests/outputs/ie.css | 9 - vendor/leafo/lessphp/tests/outputs/import.css | 51 - .../leafo/lessphp/tests/outputs/interpolation.css | 28 - vendor/leafo/lessphp/tests/outputs/keyframes.css | 48 - vendor/leafo/lessphp/tests/outputs/math.css | 69 - vendor/leafo/lessphp/tests/outputs/media.css | 70 - vendor/leafo/lessphp/tests/outputs/misc.css | 68 - .../lessphp/tests/outputs/mixin_functions.css | 7 - .../leafo/lessphp/tests/outputs/mixin_merging.css | 42 - vendor/leafo/lessphp/tests/outputs/mixins.css | 92 - vendor/leafo/lessphp/tests/outputs/nested.css | 51 - vendor/leafo/lessphp/tests/outputs/nesting.css | 6 - .../lessphp/tests/outputs/pattern_matching.css | 72 - vendor/leafo/lessphp/tests/outputs/scopes.css | 11 - .../lessphp/tests/outputs/selector_expressions.css | 25 - vendor/leafo/lessphp/tests/outputs/site_demos.css | 76 - vendor/leafo/lessphp/tests/outputs/variables.css | 19 - .../lessphp/tests/outputs_lessjs/mixins-args.css | 113 - .../tests/outputs_lessjs/mixins-named-args.css | 27 - .../leafo/lessphp/tests/outputs_lessjs/strings.css | 40 - vendor/leafo/lessphp/tests/sort.php | 57 - vendor/liuggio/statsd-php-client/CHANGELOG.md | 17 + vendor/liuggio/statsd-php-client/README.md | 152 + vendor/liuggio/statsd-php-client/Readme.md | 149 - vendor/liuggio/statsd-php-client/composer.json | 2 +- vendor/liuggio/statsd-php-client/phpunit.xml | 15 + vendor/liuggio/statsd-php-client/phpunit.xml.dist | 15 - .../src/Liuggio/StatsdClient/Entity/StatsdData.php | 28 +- .../StatsdClient/Entity/StatsdDataInterface.php | 6 + .../Liuggio/StatsdClient/Service/StatsdService.php | 196 + .../src/Liuggio/StatsdClient/StatsdClient.php | 8 +- .../StatsdClient/Service/StatsdServiceTest.php | 86 + vendor/mediawiki/at-ease/COPYING | 342 ++ vendor/mediawiki/at-ease/README.md | 59 + vendor/mediawiki/at-ease/src/Functions.php | 75 + vendor/monolog/monolog/.php_cs | 15 + vendor/monolog/monolog/CHANGELOG.mdown | 226 + vendor/monolog/monolog/LICENSE | 19 + vendor/monolog/monolog/README.mdown | 302 + vendor/monolog/monolog/composer.json | 61 + vendor/monolog/monolog/doc/extending.md | 76 + vendor/monolog/monolog/doc/sockets.md | 37 + vendor/monolog/monolog/doc/usage.md | 162 + vendor/monolog/monolog/phpunit.xml.dist | 19 + .../monolog/monolog/src/Monolog/ErrorHandler.php | 208 + .../src/Monolog/Formatter/ChromePHPFormatter.php | 79 + .../src/Monolog/Formatter/ElasticaFormatter.php | 87 + .../src/Monolog/Formatter/FlowdockFormatter.php | 104 + .../src/Monolog/Formatter/FormatterInterface.php | 36 + .../src/Monolog/Formatter/GelfMessageFormatter.php | 111 + .../src/Monolog/Formatter/HtmlFormatter.php | 140 + .../src/Monolog/Formatter/JsonFormatter.php | 116 + .../src/Monolog/Formatter/LineFormatter.php | 159 + .../src/Monolog/Formatter/LogglyFormatter.php | 47 + .../src/Monolog/Formatter/LogstashFormatter.php | 165 + .../src/Monolog/Formatter/MongoDBFormatter.php | 105 + .../src/Monolog/Formatter/NormalizerFormatter.php | 158 + .../src/Monolog/Formatter/ScalarFormatter.php | 48 + .../src/Monolog/Formatter/WildfireFormatter.php | 113 + .../src/Monolog/Handler/AbstractHandler.php | 184 + .../Monolog/Handler/AbstractProcessingHandler.php | 66 + .../src/Monolog/Handler/AbstractSyslogHandler.php | 92 + .../monolog/src/Monolog/Handler/AmqpHandler.php | 98 + .../src/Monolog/Handler/BrowserConsoleHandler.php | 184 + .../monolog/src/Monolog/Handler/BufferHandler.php | 117 + .../src/Monolog/Handler/ChromePHPHandler.php | 204 + .../monolog/src/Monolog/Handler/CouchDBHandler.php | 72 + .../monolog/src/Monolog/Handler/CubeHandler.php | 151 + .../src/Monolog/Handler/DoctrineCouchDBHandler.php | 45 + .../src/Monolog/Handler/DynamoDbHandler.php | 89 + .../src/Monolog/Handler/ElasticSearchHandler.php | 128 + .../src/Monolog/Handler/ErrorLogHandler.php | 82 + .../monolog/src/Monolog/Handler/FilterHandler.php | 140 + .../FingersCrossed/ActivationStrategyInterface.php | 28 + .../ChannelLevelActivationStrategy.php | 59 + .../ErrorLevelActivationStrategy.php | 34 + .../src/Monolog/Handler/FingersCrossedHandler.php | 153 + .../monolog/src/Monolog/Handler/FirePHPHandler.php | 195 + .../src/Monolog/Handler/FleepHookHandler.php | 126 + .../src/Monolog/Handler/FlowdockHandler.php | 103 + .../monolog/src/Monolog/Handler/GelfHandler.php | 73 + .../monolog/src/Monolog/Handler/GroupHandler.php | 80 + .../src/Monolog/Handler/HandlerInterface.php | 90 + .../monolog/src/Monolog/Handler/HipChatHandler.php | 337 ++ .../src/Monolog/Handler/LogEntriesHandler.php | 55 + .../monolog/src/Monolog/Handler/LogglyHandler.php | 106 + .../monolog/src/Monolog/Handler/MailHandler.php | 55 + .../src/Monolog/Handler/MandrillHandler.php | 71 + .../Monolog/Handler/MissingExtensionException.php | 21 + .../monolog/src/Monolog/Handler/MongoDBHandler.php | 55 + .../src/Monolog/Handler/NativeMailerHandler.php | 176 + .../src/Monolog/Handler/NewRelicHandler.php | 198 + .../monolog/src/Monolog/Handler/NullHandler.php | 45 + .../src/Monolog/Handler/PHPConsoleHandler.php | 243 + .../monolog/src/Monolog/Handler/PsrHandler.php | 56 + .../src/Monolog/Handler/PushoverHandler.php | 185 + .../monolog/src/Monolog/Handler/RavenHandler.php | 190 + .../monolog/src/Monolog/Handler/RedisHandler.php | 63 + .../monolog/src/Monolog/Handler/RollbarHandler.php | 73 + .../src/Monolog/Handler/RotatingFileHandler.php | 153 + .../src/Monolog/Handler/SamplingHandler.php | 82 + .../monolog/src/Monolog/Handler/SlackHandler.php | 292 + .../monolog/src/Monolog/Handler/SocketHandler.php | 284 + .../monolog/src/Monolog/Handler/StreamHandler.php | 104 + .../src/Monolog/Handler/SwiftMailerHandler.php | 87 + .../monolog/src/Monolog/Handler/SyslogHandler.php | 67 + .../src/Monolog/Handler/SyslogUdp/UdpSocket.php | 46 + .../src/Monolog/Handler/SyslogUdpHandler.php | 80 + .../monolog/src/Monolog/Handler/TestHandler.php | 195 + .../Monolog/Handler/WhatFailureGroupHandler.php | 57 + .../src/Monolog/Handler/ZendMonitorHandler.php | 95 + vendor/monolog/monolog/src/Monolog/Logger.php | 629 ++ .../monolog/src/Monolog/Processor/GitProcessor.php | 64 + .../Monolog/Processor/IntrospectionProcessor.php | 82 + .../Monolog/Processor/MemoryPeakUsageProcessor.php | 40 + .../src/Monolog/Processor/MemoryProcessor.php | 63 + .../src/Monolog/Processor/MemoryUsageProcessor.php | 40 + .../src/Monolog/Processor/ProcessIdProcessor.php | 31 + .../Monolog/Processor/PsrLogMessageProcessor.php | 48 + .../monolog/src/Monolog/Processor/TagProcessor.php | 34 + .../monolog/src/Monolog/Processor/UidProcessor.php | 38 + .../monolog/src/Monolog/Processor/WebProcessor.php | 105 + vendor/monolog/monolog/src/Monolog/Registry.php | 134 + .../monolog/tests/Monolog/ErrorHandlerTest.php | 31 + .../Monolog/Formatter/ChromePHPFormatterTest.php | 158 + .../Monolog/Formatter/ElasticaFormatterTest.php | 79 + .../Monolog/Formatter/FlowdockFormatterTest.php | 55 + .../Monolog/Formatter/GelfMessageFormatterTest.php | 204 + .../tests/Monolog/Formatter/JsonFormatterTest.php | 78 + .../tests/Monolog/Formatter/LineFormatterTest.php | 208 + .../Monolog/Formatter/LogglyFormatterTest.php | 40 + .../Monolog/Formatter/LogstashFormatterTest.php | 289 + .../Monolog/Formatter/MongoDBFormatterTest.php | 253 + .../Monolog/Formatter/NormalizerFormatterTest.php | 254 + .../Monolog/Formatter/ScalarFormatterTest.php | 98 + .../Monolog/Formatter/WildfireFormatterTest.php | 142 + .../tests/Monolog/Handler/AbstractHandlerTest.php | 115 + .../Handler/AbstractProcessingHandlerTest.php | 80 + .../tests/Monolog/Handler/AmqpHandlerTest.php | 136 + .../Monolog/Handler/BrowserConsoleHandlerTest.php | 130 + .../tests/Monolog/Handler/BufferHandlerTest.php | 158 + .../tests/Monolog/Handler/ChromePHPHandlerTest.php | 141 + .../tests/Monolog/Handler/CouchDBHandlerTest.php | 31 + .../Monolog/Handler/DoctrineCouchDBHandlerTest.php | 52 + .../tests/Monolog/Handler/DynamoDbHandlerTest.php | 73 + .../Monolog/Handler/ElasticSearchHandlerTest.php | 239 + .../tests/Monolog/Handler/ErrorLogHandlerTest.php | 66 + .../tests/Monolog/Handler/FilterHandlerTest.php | 170 + .../Monolog/Handler/FingersCrossedHandlerTest.php | 255 + .../tests/Monolog/Handler/FirePHPHandlerTest.php | 96 + .../tests/Monolog/Handler/FleepHookHandlerTest.php | 85 + .../tests/Monolog/Handler/FlowdockHandlerTest.php | 88 + .../Monolog/Handler/GelfHandlerLegacyTest.php | 95 + .../tests/Monolog/Handler/GelfHandlerTest.php | 117 + .../Monolog/Handler/GelfMockMessagePublisher.php | 25 + .../tests/Monolog/Handler/GroupHandlerTest.php | 89 + .../tests/Monolog/Handler/HipChatHandlerTest.php | 240 + .../Monolog/Handler/LogEntriesHandlerTest.php | 84 + .../tests/Monolog/Handler/MailHandlerTest.php | 75 + .../tests/Monolog/Handler/MockRavenClient.php | 27 + .../tests/Monolog/Handler/MongoDBHandlerTest.php | 65 + .../Monolog/Handler/NativeMailerHandlerTest.php | 61 + .../tests/Monolog/Handler/NewRelicHandlerTest.php | 192 + .../tests/Monolog/Handler/NullHandlerTest.php | 33 + .../Monolog/Handler/PHPConsoleHandlerTest.php | 271 + .../tests/Monolog/Handler/PsrHandlerTest.php | 50 + .../tests/Monolog/Handler/PushoverHandlerTest.php | 141 + .../tests/Monolog/Handler/RavenHandlerTest.php | 185 + .../tests/Monolog/Handler/RedisHandlerTest.php | 71 + .../Monolog/Handler/RotatingFileHandlerTest.php | 99 + .../tests/Monolog/Handler/SamplingHandlerTest.php | 33 + .../tests/Monolog/Handler/SlackHandlerTest.php | 133 + .../tests/Monolog/Handler/SocketHandlerTest.php | 282 + .../tests/Monolog/Handler/StreamHandlerTest.php | 118 + .../Monolog/Handler/SwiftMailerHandlerTest.php | 65 + .../tests/Monolog/Handler/SyslogHandlerTest.php | 44 + .../tests/Monolog/Handler/SyslogUdpHandlerTest.php | 49 + .../tests/Monolog/Handler/TestHandlerTest.php | 58 + .../tests/Monolog/Handler/UdpSocketTest.php | 46 + .../Handler/WhatFailureGroupHandlerTest.php | 121 + .../Monolog/Handler/ZendMonitorHandlerTest.php | 69 + .../monolog/monolog/tests/Monolog/LoggerTest.php | 447 ++ .../tests/Monolog/Processor/GitProcessorTest.php | 29 + .../Processor/IntrospectionProcessorTest.php | 123 + .../Processor/MemoryPeakUsageProcessorTest.php | 42 + .../Monolog/Processor/MemoryUsageProcessorTest.php | 42 + .../Monolog/Processor/ProcessIdProcessorTest.php | 30 + .../Processor/PsrLogMessageProcessorTest.php | 43 + .../tests/Monolog/Processor/TagProcessorTest.php | 29 + .../tests/Monolog/Processor/UidProcessorTest.php | 27 + .../tests/Monolog/Processor/WebProcessorTest.php | 98 + .../monolog/tests/Monolog/PsrLogCompatTest.php | 47 + .../monolog/monolog/tests/Monolog/RegistryTest.php | 63 + vendor/monolog/monolog/tests/Monolog/TestCase.php | 58 + vendor/nmred/kafka-php/LICENSE | 27 + vendor/nmred/kafka-php/README.md | 496 ++ vendor/nmred/kafka-php/src/Kafka/Client.php | 290 + .../nmred/kafka-php/src/Kafka/ClusterMetaData.php | 53 + vendor/nmred/kafka-php/src/Kafka/Consumer.php | 378 ++ vendor/nmred/kafka-php/src/Kafka/Exception.php | 31 + .../kafka-php/src/Kafka/Exception/NotSupported.php | 33 + .../kafka-php/src/Kafka/Exception/OutOfRange.php | 33 + .../kafka-php/src/Kafka/Exception/Protocol.php | 33 + .../nmred/kafka-php/src/Kafka/Exception/Socket.php | 33 + .../src/Kafka/Exception/SocketConnect.php | 33 + .../kafka-php/src/Kafka/Exception/SocketEOF.php | 33 + .../src/Kafka/Exception/SocketTimeout.php | 33 + vendor/nmred/kafka-php/src/Kafka/Log.php | 78 + .../kafka-php/src/Kafka/MetaDataFromKafka.php | 200 + vendor/nmred/kafka-php/src/Kafka/Offset.php | 305 + vendor/nmred/kafka-php/src/Kafka/Produce.php | 337 ++ .../nmred/kafka-php/src/Kafka/Protocol/Decoder.php | 430 ++ .../nmred/kafka-php/src/Kafka/Protocol/Encoder.php | 652 +++ .../Kafka/Protocol/Fetch/Helper/CommitOffset.php | 119 + .../src/Kafka/Protocol/Fetch/Helper/Consumer.php | 39 + .../src/Kafka/Protocol/Fetch/Helper/FreeStream.php | 117 + .../src/Kafka/Protocol/Fetch/Helper/Helper.php | 160 + .../Kafka/Protocol/Fetch/Helper/HelperAbstract.php | 71 + .../kafka-php/src/Kafka/Protocol/Fetch/Message.php | 175 + .../src/Kafka/Protocol/Fetch/MessageSet.php | 269 + .../src/Kafka/Protocol/Fetch/Partition.php | 375 ++ .../kafka-php/src/Kafka/Protocol/Fetch/Topic.php | 345 ++ .../kafka-php/src/Kafka/Protocol/Protocol.php | 230 + vendor/nmred/kafka-php/src/Kafka/Socket.php | 365 ++ vendor/nmred/kafka-php/src/Kafka/ZooKeeper.php | 364 ++ vendor/oojs/oojs-ui/.csscomb.json | 24 - vendor/oojs/oojs-ui/.csslintrc | 11 - vendor/oojs/oojs-ui/.npmignore | 2 - vendor/oojs/oojs-ui/AUTHORS.txt | 3 +- vendor/oojs/oojs-ui/Doxyfile | 33 - vendor/oojs/oojs-ui/Gruntfile.js | 401 -- vendor/oojs/oojs-ui/History.md | 1242 ++-- vendor/oojs/oojs-ui/LICENSE-MIT | 2 +- vendor/oojs/oojs-ui/README.md | 12 +- vendor/oojs/oojs-ui/bin/docparser.rb | 70 +- .../oojs/oojs-ui/bin/generate-JSPHP-for-karma.php | 20 +- vendor/oojs/oojs-ui/bin/testsuitegenerator.rb | 12 +- vendor/oojs/oojs-ui/build/banner.txt | 10 - vendor/oojs/oojs-ui/build/modules.json | 240 - vendor/oojs/oojs-ui/build/tasks/colorize-svg.js | 538 -- vendor/oojs/oojs-ui/build/tasks/typos.js | 89 - vendor/oojs/oojs-ui/build/typos.json | 17 - vendor/oojs/oojs-ui/composer.json | 24 - vendor/oojs/oojs-ui/demos/demo.js | 55 +- vendor/oojs/oojs-ui/demos/index.html | 11 +- vendor/oojs/oojs-ui/demos/infusion.js | 58 +- vendor/oojs/oojs-ui/demos/pages/dialogs.js | 318 +- vendor/oojs/oojs-ui/demos/pages/icons.js | 16 +- vendor/oojs/oojs-ui/demos/pages/toolbars.js | 27 +- vendor/oojs/oojs-ui/demos/pages/widgets.js | 470 +- vendor/oojs/oojs-ui/demos/styles/demo.css | 12 +- vendor/oojs/oojs-ui/demos/widgets.php | 309 +- vendor/oojs/oojs-ui/i18n/af.json | 8 +- vendor/oojs/oojs-ui/i18n/ar.json | 10 +- vendor/oojs/oojs-ui/i18n/arq.json | 7 +- vendor/oojs/oojs-ui/i18n/as.json | 25 + vendor/oojs/oojs-ui/i18n/ast.json | 9 +- vendor/oojs/oojs-ui/i18n/be-tarask.json | 21 +- vendor/oojs/oojs-ui/i18n/be.json | 17 +- vendor/oojs/oojs-ui/i18n/bg.json | 13 +- vendor/oojs/oojs-ui/i18n/bn.json | 9 +- vendor/oojs/oojs-ui/i18n/bs.json | 5 +- vendor/oojs/oojs-ui/i18n/ca.json | 11 +- vendor/oojs/oojs-ui/i18n/ckb.json | 13 +- vendor/oojs/oojs-ui/i18n/cs.json | 4 +- vendor/oojs/oojs-ui/i18n/cu.json | 3 +- vendor/oojs/oojs-ui/i18n/da.json | 7 +- vendor/oojs/oojs-ui/i18n/de.json | 6 +- vendor/oojs/oojs-ui/i18n/dty.json | 18 + vendor/oojs/oojs-ui/i18n/el.json | 8 +- vendor/oojs/oojs-ui/i18n/en-ca.json | 22 + vendor/oojs/oojs-ui/i18n/en.json | 6 +- vendor/oojs/oojs-ui/i18n/eo.json | 17 +- vendor/oojs/oojs-ui/i18n/es.json | 6 +- vendor/oojs/oojs-ui/i18n/et.json | 9 +- vendor/oojs/oojs-ui/i18n/eu.json | 10 +- vendor/oojs/oojs-ui/i18n/fa.json | 15 +- vendor/oojs/oojs-ui/i18n/fi.json | 14 +- vendor/oojs/oojs-ui/i18n/fr.json | 18 +- vendor/oojs/oojs-ui/i18n/gl.json | 6 +- vendor/oojs/oojs-ui/i18n/glk.json | 23 + vendor/oojs/oojs-ui/i18n/gu.json | 12 +- vendor/oojs/oojs-ui/i18n/he.json | 6 +- vendor/oojs/oojs-ui/i18n/hi.json | 7 +- vendor/oojs/oojs-ui/i18n/hrx.json | 12 + vendor/oojs/oojs-ui/i18n/hu-formal.json | 21 + vendor/oojs/oojs-ui/i18n/hu.json | 10 +- vendor/oojs/oojs-ui/i18n/hy.json | 7 +- vendor/oojs/oojs-ui/i18n/ia.json | 9 +- vendor/oojs/oojs-ui/i18n/id.json | 4 +- vendor/oojs/oojs-ui/i18n/ilo.json | 4 +- vendor/oojs/oojs-ui/i18n/is.json | 6 +- vendor/oojs/oojs-ui/i18n/it.json | 13 +- vendor/oojs/oojs-ui/i18n/ja.json | 9 +- vendor/oojs/oojs-ui/i18n/jv.json | 18 +- vendor/oojs/oojs-ui/i18n/ka.json | 4 +- vendor/oojs/oojs-ui/i18n/km.json | 23 +- vendor/oojs/oojs-ui/i18n/ko.json | 13 +- vendor/oojs/oojs-ui/i18n/krc.json | 4 +- vendor/oojs/oojs-ui/i18n/krl.json | 10 + vendor/oojs/oojs-ui/i18n/ksh.json | 5 +- vendor/oojs/oojs-ui/i18n/ku-latn.json | 7 +- vendor/oojs/oojs-ui/i18n/la.json | 15 + vendor/oojs/oojs-ui/i18n/lb.json | 5 +- vendor/oojs/oojs-ui/i18n/li.json | 21 + vendor/oojs/oojs-ui/i18n/lt.json | 20 +- vendor/oojs/oojs-ui/i18n/luz.json | 21 + vendor/oojs/oojs-ui/i18n/mk.json | 6 +- vendor/oojs/oojs-ui/i18n/ml.json | 18 +- vendor/oojs/oojs-ui/i18n/mr.json | 11 +- vendor/oojs/oojs-ui/i18n/ms.json | 11 +- vendor/oojs/oojs-ui/i18n/nap.json | 21 +- vendor/oojs/oojs-ui/i18n/nb.json | 6 +- vendor/oojs/oojs-ui/i18n/nl.json | 4 +- vendor/oojs/oojs-ui/i18n/oc.json | 9 +- vendor/oojs/oojs-ui/i18n/olo.json | 23 + vendor/oojs/oojs-ui/i18n/om.json | 4 +- vendor/oojs/oojs-ui/i18n/or.json | 7 +- vendor/oojs/oojs-ui/i18n/pa.json | 9 +- vendor/oojs/oojs-ui/i18n/pl.json | 11 +- vendor/oojs/oojs-ui/i18n/pms.json | 13 +- vendor/oojs/oojs-ui/i18n/ps.json | 6 +- vendor/oojs/oojs-ui/i18n/pt-br.json | 17 +- vendor/oojs/oojs-ui/i18n/pt.json | 8 +- vendor/oojs/oojs-ui/i18n/qqq.json | 6 +- vendor/oojs/oojs-ui/i18n/ro.json | 6 +- vendor/oojs/oojs-ui/i18n/roa-tara.json | 6 +- vendor/oojs/oojs-ui/i18n/ru.json | 9 +- vendor/oojs/oojs-ui/i18n/sa.json | 14 + vendor/oojs/oojs-ui/i18n/sah.json | 16 +- vendor/oojs/oojs-ui/i18n/sco.json | 15 +- vendor/oojs/oojs-ui/i18n/sh.json | 14 +- vendor/oojs/oojs-ui/i18n/sk.json | 14 +- vendor/oojs/oojs-ui/i18n/sl.json | 4 +- vendor/oojs/oojs-ui/i18n/sq.json | 11 +- vendor/oojs/oojs-ui/i18n/sr-ec.json | 4 +- vendor/oojs/oojs-ui/i18n/su.json | 21 + vendor/oojs/oojs-ui/i18n/sv.json | 9 +- vendor/oojs/oojs-ui/i18n/ta.json | 17 +- vendor/oojs/oojs-ui/i18n/te.json | 11 +- vendor/oojs/oojs-ui/i18n/tl.json | 13 +- vendor/oojs/oojs-ui/i18n/uk.json | 10 +- vendor/oojs/oojs-ui/i18n/vec.json | 11 +- vendor/oojs/oojs-ui/i18n/vi.json | 13 +- vendor/oojs/oojs-ui/i18n/xmf.json | 19 + vendor/oojs/oojs-ui/i18n/yi.json | 7 +- vendor/oojs/oojs-ui/i18n/yue.json | 16 +- vendor/oojs/oojs-ui/i18n/zh-hans.json | 17 +- vendor/oojs/oojs-ui/i18n/zh-hant.json | 9 +- vendor/oojs/oojs-ui/jsduck.categories.json | 80 - vendor/oojs/oojs-ui/jsduck.eg-iframe.html | 33 - vendor/oojs/oojs-ui/jsduck.external.js | 26 - vendor/oojs/oojs-ui/jsduck.json | 16 - vendor/oojs/oojs-ui/php/Element.php | 48 +- vendor/oojs/oojs-ui/php/HtmlSnippet.php | 2 +- vendor/oojs/oojs-ui/php/Tag.php | 20 +- vendor/oojs/oojs-ui/php/Theme.php | 26 +- vendor/oojs/oojs-ui/php/Widget.php | 10 + vendor/oojs/oojs-ui/php/elements/ButtonElement.php | 102 - .../oojs/oojs-ui/php/elements/FlaggedElement.php | 133 - vendor/oojs/oojs-ui/php/elements/GroupElement.php | 129 - vendor/oojs/oojs-ui/php/elements/IconElement.php | 76 - .../oojs/oojs-ui/php/elements/IndicatorElement.php | 78 - vendor/oojs/oojs-ui/php/elements/LabelElement.php | 77 - .../oojs-ui/php/elements/TabIndexedElement.php | 88 - vendor/oojs/oojs-ui/php/elements/TitledElement.php | 74 - .../oojs/oojs-ui/php/layouts/ActionFieldLayout.php | 55 + vendor/oojs/oojs-ui/php/layouts/FieldLayout.php | 73 +- vendor/oojs/oojs-ui/php/layouts/FormLayout.php | 2 +- .../oojs/oojs-ui/php/layouts/HorizontalLayout.php | 27 + .../oojs/oojs-ui/php/mixins/AccessKeyedElement.php | 76 + vendor/oojs/oojs-ui/php/mixins/ButtonElement.php | 69 + vendor/oojs/oojs-ui/php/mixins/FlaggedElement.php | 133 + vendor/oojs/oojs-ui/php/mixins/GroupElement.php | 129 + vendor/oojs/oojs-ui/php/mixins/IconElement.php | 76 + .../oojs/oojs-ui/php/mixins/IndicatorElement.php | 78 + vendor/oojs/oojs-ui/php/mixins/LabelElement.php | 77 + .../oojs/oojs-ui/php/mixins/TabIndexedElement.php | 88 + vendor/oojs/oojs-ui/php/mixins/TitledElement.php | 74 + .../oojs/oojs-ui/php/widgets/ButtonInputWidget.php | 14 +- vendor/oojs/oojs-ui/php/widgets/ButtonWidget.php | 2 + .../oojs-ui/php/widgets/CheckboxInputWidget.php | 2 + .../oojs-ui/php/widgets/DropdownInputWidget.php | 11 +- vendor/oojs/oojs-ui/php/widgets/IconWidget.php | 2 +- .../oojs/oojs-ui/php/widgets/IndicatorWidget.php | 2 +- vendor/oojs/oojs-ui/php/widgets/InputWidget.php | 10 +- vendor/oojs/oojs-ui/php/widgets/LabelWidget.php | 2 +- .../oojs/oojs-ui/php/widgets/RadioInputWidget.php | 2 + .../oojs-ui/php/widgets/RadioSelectInputWidget.php | 127 + .../oojs/oojs-ui/php/widgets/TextInputWidget.php | 63 +- vendor/oojs/oojs-ui/src/ActionSet.js | 504 -- vendor/oojs/oojs-ui/src/Dialog.js | 323 -- vendor/oojs/oojs-ui/src/Element.js | 748 --- vendor/oojs/oojs-ui/src/Error.js | 91 - vendor/oojs/oojs-ui/src/HtmlSnippet.js | 29 - vendor/oojs/oojs-ui/src/Layout.js | 33 - vendor/oojs/oojs-ui/src/Process.js | 166 - vendor/oojs/oojs-ui/src/Theme.js | 48 - vendor/oojs/oojs-ui/src/Tool.js | 279 - vendor/oojs/oojs-ui/src/ToolFactory.js | 120 - vendor/oojs/oojs-ui/src/ToolGroup.js | 338 -- vendor/oojs/oojs-ui/src/ToolGroupFactory.js | 38 - vendor/oojs/oojs-ui/src/Toolbar.js | 481 -- vendor/oojs/oojs-ui/src/Widget.js | 102 - vendor/oojs/oojs-ui/src/Window.js | 628 -- vendor/oojs/oojs-ui/src/WindowManager.js | 675 --- vendor/oojs/oojs-ui/src/core.js | 286 - vendor/oojs/oojs-ui/src/dialogs/MessageDialog.js | 325 -- vendor/oojs/oojs-ui/src/dialogs/ProcessDialog.js | 296 - vendor/oojs/oojs-ui/src/elements/ButtonElement.js | 263 - .../oojs/oojs-ui/src/elements/ClippableElement.js | 205 - .../oojs/oojs-ui/src/elements/DraggableElement.js | 142 - .../oojs-ui/src/elements/DraggableGroupElement.js | 261 - vendor/oojs/oojs-ui/src/elements/FlaggedElement.js | 209 - vendor/oojs/oojs-ui/src/elements/GroupElement.js | 290 - vendor/oojs/oojs-ui/src/elements/IconElement.js | 187 - .../oojs/oojs-ui/src/elements/IndicatorElement.js | 168 - vendor/oojs/oojs-ui/src/elements/LabelElement.js | 152 - vendor/oojs/oojs-ui/src/elements/LookupElement.js | 352 -- vendor/oojs/oojs-ui/src/elements/PendingElement.js | 84 - vendor/oojs/oojs-ui/src/elements/PopupElement.js | 36 - .../oojs/oojs-ui/src/elements/TabIndexedElement.js | 138 - vendor/oojs/oojs-ui/src/elements/TitledElement.js | 106 - vendor/oojs/oojs-ui/src/intro.js.txt | 3 - .../oojs/oojs-ui/src/layouts/ActionFieldLayout.js | 81 - vendor/oojs/oojs-ui/src/layouts/BookletLayout.js | 542 -- vendor/oojs/oojs-ui/src/layouts/CardLayout.js | 138 - vendor/oojs/oojs-ui/src/layouts/FieldLayout.js | 160 - vendor/oojs/oojs-ui/src/layouts/FieldsetLayout.js | 86 - vendor/oojs/oojs-ui/src/layouts/FormLayout.js | 119 - vendor/oojs/oojs-ui/src/layouts/IndexLayout.js | 452 -- vendor/oojs/oojs-ui/src/layouts/MenuLayout.js | 156 - vendor/oojs/oojs-ui/src/layouts/PageLayout.js | 138 - vendor/oojs/oojs-ui/src/layouts/PanelLayout.js | 55 - vendor/oojs/oojs-ui/src/layouts/StackLayout.js | 214 - vendor/oojs/oojs-ui/src/outro.js.txt | 1 - vendor/oojs/oojs-ui/src/styles/Dialog.less | 35 - vendor/oojs/oojs-ui/src/styles/Element.less | 9 - vendor/oojs/oojs-ui/src/styles/Layout.less | 5 - vendor/oojs/oojs-ui/src/styles/Tool.less | 5 - vendor/oojs/oojs-ui/src/styles/ToolGroup.less | 21 - vendor/oojs/oojs-ui/src/styles/Toolbar.less | 52 - vendor/oojs/oojs-ui/src/styles/Widget.less | 5 - vendor/oojs/oojs-ui/src/styles/Window.less | 32 - vendor/oojs/oojs-ui/src/styles/WindowManager.less | 39 - vendor/oojs/oojs-ui/src/styles/common.less | 102 - vendor/oojs/oojs-ui/src/styles/core.less | 114 - .../oojs-ui/src/styles/dialogs/MessageDialog.less | 45 - .../oojs-ui/src/styles/dialogs/ProcessDialog.less | 52 - .../oojs-ui/src/styles/elements/ButtonElement.less | 62 - .../src/styles/elements/ClippableElement.less | 7 - .../src/styles/elements/DraggableElement.less | 22 - .../src/styles/elements/DraggableGroupElement.less | 11 - .../src/styles/elements/FlaggedElement.less | 5 - .../oojs-ui/src/styles/elements/GroupElement.less | 5 - .../oojs-ui/src/styles/elements/IconElement.less | 5 - .../src/styles/elements/IndicatorElement.less | 5 - .../oojs-ui/src/styles/elements/LabelElement.less | 5 - .../oojs-ui/src/styles/elements/LookupElement.less | 10 - .../oojs-ui/src/styles/elements/PopupElement.less | 5 - .../src/styles/elements/TabIndexedElement.less | 5 - .../oojs-ui/src/styles/elements/TitledElement.less | 5 - vendor/oojs/oojs-ui/src/styles/images/grab.cur | Bin 326 -> 0 bytes vendor/oojs/oojs-ui/src/styles/images/grabbing.cur | Bin 326 -> 0 bytes .../src/styles/layouts/ActionFieldLayout.less | 26 - .../oojs-ui/src/styles/layouts/BookletLayout.less | 43 - .../oojs-ui/src/styles/layouts/CardLayout.less | 5 - .../oojs-ui/src/styles/layouts/FieldLayout.less | 59 - .../oojs-ui/src/styles/layouts/FieldsetLayout.less | 31 - .../oojs-ui/src/styles/layouts/FormLayout.less | 5 - .../oojs-ui/src/styles/layouts/IndexLayout.less | 13 - .../oojs-ui/src/styles/layouts/MenuLayout.less | 108 - .../oojs-ui/src/styles/layouts/PageLayout.less | 5 - .../oojs-ui/src/styles/layouts/PanelLayout.less | 19 - .../oojs-ui/src/styles/layouts/StackLayout.less | 10 - vendor/oojs/oojs-ui/src/styles/theme.less | 91 - .../src/styles/toolgroups/BarToolGroup.less | 51 - .../src/styles/toolgroups/ListToolGroup.less | 21 - .../src/styles/toolgroups/MenuToolGroup.less | 19 - .../src/styles/toolgroups/PopupToolGroup.less | 73 - .../oojs/oojs-ui/src/styles/tools/PopupTool.less | 12 - .../oojs-ui/src/styles/tools/ToolGroupTool.less | 5 - .../oojs-ui/src/styles/widgets/ActionWidget.less | 5 - .../src/styles/widgets/ButtonGroupWidget.less | 5 - .../src/styles/widgets/ButtonInputWidget.less | 8 - .../src/styles/widgets/ButtonOptionWidget.less | 18 - .../src/styles/widgets/ButtonSelectWidget.less | 8 - .../oojs-ui/src/styles/widgets/ButtonWidget.less | 8 - .../src/styles/widgets/CheckboxInputWidget.less | 5 - .../oojs-ui/src/styles/widgets/ComboBoxWidget.less | 13 - .../src/styles/widgets/DecoratedOptionWidget.less | 12 - .../src/styles/widgets/DropdownInputWidget.less | 17 - .../oojs-ui/src/styles/widgets/DropdownWidget.less | 33 - .../oojs-ui/src/styles/widgets/IconWidget.less | 10 - .../src/styles/widgets/IndicatorWidget.less | 10 - .../oojs-ui/src/styles/widgets/InputWidget.less | 5 - .../oojs-ui/src/styles/widgets/LabelWidget.less | 7 - .../src/styles/widgets/MenuOptionWidget.less | 21 - .../styles/widgets/MenuSectionOptionWidget.less | 8 - .../src/styles/widgets/MenuSelectWidget.less | 15 - .../oojs-ui/src/styles/widgets/OptionWidget.less | 20 - .../src/styles/widgets/OutlineControlsWidget.less | 32 - .../src/styles/widgets/OutlineOptionWidget.less | 9 - .../src/styles/widgets/OutlineSelectWidget.less | 5 - .../src/styles/widgets/PopupButtonWidget.less | 12 - .../oojs-ui/src/styles/widgets/PopupWidget.less | 49 - .../src/styles/widgets/ProgressBarWidget.less | 5 - .../src/styles/widgets/RadioInputWidget.less | 5 - .../src/styles/widgets/RadioOptionWidget.less | 13 - .../src/styles/widgets/RadioSelectWidget.less | 5 - .../oojs-ui/src/styles/widgets/SearchWidget.less | 25 - .../oojs-ui/src/styles/widgets/SelectWidget.less | 5 - .../src/styles/widgets/TabOptionWidget.less | 8 - .../src/styles/widgets/TabSelectWidget.less | 9 - .../styles/widgets/TextInputMenuSelectWidget.less | 5 - .../src/styles/widgets/TextInputWidget.less | 71 - .../src/styles/widgets/ToggleButtonWidget.less | 8 - .../src/styles/widgets/ToggleSwitchWidget.less | 41 - .../oojs-ui/src/styles/widgets/ToggleWidget.less | 5 - vendor/oojs/oojs-ui/src/themes/apex/ApexTheme.js | 18 - vendor/oojs/oojs-ui/src/themes/apex/common.less | 27 - vendor/oojs/oojs-ui/src/themes/apex/core.less | 12 - vendor/oojs/oojs-ui/src/themes/apex/elements.less | 247 - .../src/themes/apex/icons-editing-advanced.json | 75 - .../src/themes/apex/icons-editing-core.json | 24 - .../src/themes/apex/icons-editing-list.json | 22 - .../src/themes/apex/icons-editing-styling.json | 72 - .../oojs-ui/src/themes/apex/icons-moderation.json | 33 - .../oojs-ui/src/themes/apex/icons-movement.json | 27 - vendor/oojs/oojs-ui/src/themes/apex/icons.json | 50 - .../oojs-ui/src/themes/apex/images/icons/add.svg | 6 - .../src/themes/apex/images/icons/advanced.svg | 6 - .../oojs-ui/src/themes/apex/images/icons/alert.svg | 8 - .../src/themes/apex/images/icons/align-center.svg | 6 - .../themes/apex/images/icons/align-float-left.svg | 6 - .../themes/apex/images/icons/align-float-right.svg | 6 - .../themes/apex/images/icons/arched-arrow-ltr.svg | 6 - .../themes/apex/images/icons/arched-arrow-rtl.svg | 6 - .../src/themes/apex/images/icons/arrow-ltr.svg | 6 - .../src/themes/apex/images/icons/arrow-rtl.svg | 6 - .../src/themes/apex/images/icons/bigger-ltr.svg | 7 - .../src/themes/apex/images/icons/bigger-rtl.svg | 7 - .../oojs-ui/src/themes/apex/images/icons/block.svg | 4 - .../src/themes/apex/images/icons/blockUndo-ltr.svg | 6 - .../src/themes/apex/images/icons/blockUndo-rtl.svg | 6 - .../src/themes/apex/images/icons/bold-a.svg | 6 - .../src/themes/apex/images/icons/bold-arab-ain.svg | 6 - .../src/themes/apex/images/icons/bold-arab-dad.svg | 6 - .../src/themes/apex/images/icons/bold-armn-to.svg | 6 - .../src/themes/apex/images/icons/bold-b.svg | 6 - .../src/themes/apex/images/icons/bold-cyrl-be.svg | 6 - .../src/themes/apex/images/icons/bold-cyrl-te.svg | 6 - .../src/themes/apex/images/icons/bold-cyrl-zhe.svg | 6 - .../src/themes/apex/images/icons/bold-f.svg | 6 - .../src/themes/apex/images/icons/bold-g.svg | 6 - .../src/themes/apex/images/icons/bold-geor-man.svg | 6 - .../src/themes/apex/images/icons/bold-l.svg | 6 - .../src/themes/apex/images/icons/bold-n.svg | 6 - .../src/themes/apex/images/icons/bold-v.svg | 6 - .../src/themes/apex/images/icons/cancel.svg | 6 - .../src/themes/apex/images/icons/caret-ltr.svg | 4 - .../src/themes/apex/images/icons/caret-rtl.svg | 4 - .../src/themes/apex/images/icons/caretDown.svg | 4 - .../src/themes/apex/images/icons/caretUp.svg | 4 - .../themes/apex/images/icons/case-sensitive.svg | 7 - .../oojs-ui/src/themes/apex/images/icons/check.svg | 6 - .../src/themes/apex/images/icons/circle.svg | 2 - .../oojs-ui/src/themes/apex/images/icons/close.svg | 6 - .../oojs-ui/src/themes/apex/images/icons/code.svg | 7 - .../src/themes/apex/images/icons/collapse.svg | 6 - .../src/themes/apex/images/icons/comment.svg | 6 - .../src/themes/apex/images/icons/downTriangle.svg | 4 - .../src/themes/apex/images/icons/edit-ltr.svg | 6 - .../src/themes/apex/images/icons/edit-rtl.svg | 6 - .../src/themes/apex/images/icons/editLock-ltr.svg | 8 - .../src/themes/apex/images/icons/editLock-rtl.svg | 8 - .../src/themes/apex/images/icons/editUndo-ltr.svg | 11 - .../src/themes/apex/images/icons/editUndo-rtl.svg | 11 - .../src/themes/apex/images/icons/ellipsis.svg | 14 - .../src/themes/apex/images/icons/expand.svg | 6 - .../themes/apex/images/icons/external-link-ltr.svg | 7 - .../themes/apex/images/icons/external-link-rtl.svg | 7 - .../src/themes/apex/images/icons/find-ltr.svg | 7 - .../src/themes/apex/images/icons/find-rtl.svg | 7 - .../src/themes/apex/images/icons/flag-ltr.svg | 4 - .../src/themes/apex/images/icons/flag-rtl.svg | 4 - .../src/themes/apex/images/icons/flagUndo-ltr.svg | 16 - .../src/themes/apex/images/icons/flagUndo-rtl.svg | 16 - .../src/themes/apex/images/icons/help-ltr.svg | 10 - .../src/themes/apex/images/icons/help-rtl.svg | 10 - .../src/themes/apex/images/icons/history.svg | 7 - .../src/themes/apex/images/icons/indent-ltr.svg | 9 - .../src/themes/apex/images/icons/indent-rtl.svg | 9 - .../oojs-ui/src/themes/apex/images/icons/info.svg | 6 - .../src/themes/apex/images/icons/insert.svg | 6 - .../src/themes/apex/images/icons/italic-a.svg | 6 - .../apex/images/icons/italic-arab-keheh-jeem.svg | 6 - .../themes/apex/images/icons/italic-arab-meem.svg | 6 - .../themes/apex/images/icons/italic-armn-sha.svg | 6 - .../src/themes/apex/images/icons/italic-c.svg | 6 - .../src/themes/apex/images/icons/italic-d.svg | 6 - .../src/themes/apex/images/icons/italic-e.svg | 6 - .../themes/apex/images/icons/italic-geor-kan.svg | 6 - .../src/themes/apex/images/icons/italic-i.svg | 6 - .../src/themes/apex/images/icons/italic-k.svg | 6 - .../src/themes/apex/images/icons/italic-s.svg | 6 - .../src/themes/apex/images/icons/language.svg | 7 - .../src/themes/apex/images/icons/layout-ltr.svg | 7 - .../src/themes/apex/images/icons/layout-rtl.svg | 7 - .../oojs-ui/src/themes/apex/images/icons/link.svg | 8 - .../themes/apex/images/icons/listBullet-ltr.svg | 11 - .../themes/apex/images/icons/listBullet-rtl.svg | 11 - .../themes/apex/images/icons/listNumbered-ltr.svg | 11 - .../themes/apex/images/icons/listNumbered-rtl.svg | 11 - .../oojs-ui/src/themes/apex/images/icons/lock.svg | 6 - .../oojs-ui/src/themes/apex/images/icons/menu.svg | 6 - .../src/themes/apex/images/icons/move-ltr.svg | 6 - .../src/themes/apex/images/icons/move-rtl.svg | 6 - .../oojs-ui/src/themes/apex/images/icons/move.svg | 4 - .../src/themes/apex/images/icons/newline-ltr.svg | 6 - .../src/themes/apex/images/icons/newline-rtl.svg | 6 - .../themes/apex/images/icons/noWikiText-ltr.svg | 6 - .../themes/apex/images/icons/noWikiText-rtl.svg | 6 - .../src/themes/apex/images/icons/outdent-ltr.svg | 9 - .../src/themes/apex/images/icons/outdent-rtl.svg | 9 - .../src/themes/apex/images/icons/outline-ltr.svg | 7 - .../src/themes/apex/images/icons/outline-rtl.svg | 7 - .../src/themes/apex/images/icons/picture.svg | 8 - .../src/themes/apex/images/icons/puzzle-ltr.svg | 4 - .../src/themes/apex/images/icons/puzzle-rtl.svg | 4 - .../src/themes/apex/images/icons/quotes-ltr.svg | 6 - .../src/themes/apex/images/icons/quotes-rtl.svg | 6 - .../src/themes/apex/images/icons/quotesAdd-ltr.svg | 6 - .../src/themes/apex/images/icons/quotesAdd-rtl.svg | 6 - .../src/themes/apex/images/icons/redirect-ltr.svg | 8 - .../src/themes/apex/images/icons/redirect-rtl.svg | 9 - .../apex/images/icons/regular-expression.svg | 9 - .../src/themes/apex/images/icons/remove.svg | 6 - .../src/themes/apex/images/icons/search.svg | 6 - .../src/themes/apex/images/icons/secure-link.svg | 6 - .../src/themes/apex/images/icons/settings.svg | 6 - .../src/themes/apex/images/icons/smaller-ltr.svg | 7 - .../src/themes/apex/images/icons/smaller-rtl.svg | 7 - .../themes/apex/images/icons/specialCharacter.svg | 6 - .../oojs-ui/src/themes/apex/images/icons/star.svg | 4 - .../themes/apex/images/icons/strikethrough-a.svg | 7 - .../themes/apex/images/icons/strikethrough-s.svg | 7 - .../themes/apex/images/icons/strikethrough-y.svg | 7 - .../src/themes/apex/images/icons/subscript-ltr.svg | 5 - .../src/themes/apex/images/icons/subscript-rtl.svg | 5 - .../themes/apex/images/icons/superscript-ltr.svg | 5 - .../themes/apex/images/icons/superscript-rtl.svg | 5 - .../src/themes/apex/images/icons/table-caption.svg | 7 - .../apex/images/icons/table-insert-column-ltr.svg | 11 - .../apex/images/icons/table-insert-column-rtl.svg | 11 - .../apex/images/icons/table-insert-row-after.svg | 11 - .../apex/images/icons/table-insert-row-before.svg | 11 - .../themes/apex/images/icons/table-merge-cells.svg | 10 - .../oojs-ui/src/themes/apex/images/icons/table.svg | 7 - .../oojs-ui/src/themes/apex/images/icons/tag.svg | 6 - .../themes/apex/images/icons/templateAdd-ltr.svg | 7 - .../themes/apex/images/icons/templateAdd-rtl.svg | 7 - .../apex/images/icons/text-dir-lefttoright.svg | 6 - .../apex/images/icons/text-dir-righttoleft.svg | 6 - .../src/themes/apex/images/icons/text-style.svg | 7 - .../themes/apex/images/icons/translation-ltr.svg | 4 - .../themes/apex/images/icons/translation-rtl.svg | 4 - .../oojs-ui/src/themes/apex/images/icons/trash.svg | 4 - .../src/themes/apex/images/icons/trashUndo-ltr.svg | 6 - .../src/themes/apex/images/icons/trashUndo-rtl.svg | 6 - .../src/themes/apex/images/icons/unLock-ltr.svg | 4 - .../src/themes/apex/images/icons/unLock-rtl.svg | 4 - .../src/themes/apex/images/icons/unStar.svg | 4 - .../src/themes/apex/images/icons/underline-a.svg | 7 - .../src/themes/apex/images/icons/underline-u.svg | 7 - .../src/themes/apex/images/icons/upTriangle.svg | 4 - .../src/themes/apex/images/icons/wikiText.svg | 15 - .../src/themes/apex/images/icons/window.svg | 7 - .../src/themes/apex/images/indicators/alert.svg | 6 - .../themes/apex/images/indicators/arrow-down.svg | 6 - .../themes/apex/images/indicators/arrow-ltr.svg | 6 - .../themes/apex/images/indicators/arrow-rtl.svg | 6 - .../src/themes/apex/images/indicators/arrow-up.svg | 6 - .../src/themes/apex/images/indicators/required.svg | 6 - .../themes/apex/images/indicators/search-ltr.svg | 6 - .../themes/apex/images/indicators/search-rtl.svg | 6 - .../src/themes/apex/images/textures/pending.gif | Bin 2032 -> 0 bytes .../themes/apex/images/textures/transparency.svg | 10 - .../src/themes/apex/images/toolbar-shadow.png | Bin 131 -> 0 bytes .../oojs/oojs-ui/src/themes/apex/indicators.json | 22 - vendor/oojs/oojs-ui/src/themes/apex/layouts.less | 135 - vendor/oojs/oojs-ui/src/themes/apex/textures.json | 8 - vendor/oojs/oojs-ui/src/themes/apex/tools.less | 422 -- vendor/oojs/oojs-ui/src/themes/apex/widgets.less | 797 --- vendor/oojs/oojs-ui/src/themes/apex/windows.less | 307 - vendor/oojs/oojs-ui/src/themes/blank/BlankTheme.js | 32 - vendor/oojs/oojs-ui/src/themes/blank/common.less | 10 - vendor/oojs/oojs-ui/src/themes/blank/core.less | 12 - vendor/oojs/oojs-ui/src/themes/blank/elements.less | 29 - .../src/themes/blank/images/icons/README.txt | 1 - .../src/themes/blank/images/indicators/README.txt | 1 - .../src/themes/blank/images/textures/README.txt | 1 - vendor/oojs/oojs-ui/src/themes/blank/layouts.less | 26 - vendor/oojs/oojs-ui/src/themes/blank/tools.less | 20 - vendor/oojs/oojs-ui/src/themes/blank/widgets.less | 77 - vendor/oojs/oojs-ui/src/themes/blank/windows.less | 11 - .../oojs-ui/src/themes/mediawiki/MediaWikiTheme.js | 56 - .../oojs/oojs-ui/src/themes/mediawiki/common.less | 69 - vendor/oojs/oojs-ui/src/themes/mediawiki/core.less | 12 - .../oojs-ui/src/themes/mediawiki/elements.less | 319 - .../oojs-ui/src/themes/mediawiki/icons-alerts.json | 33 - .../src/themes/mediawiki/icons-content.json | 50 - .../themes/mediawiki/icons-editing-advanced.json | 75 - .../src/themes/mediawiki/icons-editing-core.json | 45 - .../src/themes/mediawiki/icons-editing-list.json | 22 - .../themes/mediawiki/icons-editing-styling.json | 72 - .../src/themes/mediawiki/icons-interactions.json | 52 - .../oojs-ui/src/themes/mediawiki/icons-layout.json | 43 - .../src/themes/mediawiki/icons-location.json | 19 - .../oojs-ui/src/themes/mediawiki/icons-media.json | 27 - .../src/themes/mediawiki/icons-moderation.json | 52 - .../src/themes/mediawiki/icons-movement.json | 27 - .../oojs-ui/src/themes/mediawiki/icons-user.json | 19 - .../src/themes/mediawiki/icons-wikimedia.json | 9 - .../oojs/oojs-ui/src/themes/mediawiki/icons.json | 75 - .../src/themes/mediawiki/images/icons/add.svg | 6 - .../src/themes/mediawiki/images/icons/advanced.svg | 4 - .../src/themes/mediawiki/images/icons/alert.svg | 8 - .../themes/mediawiki/images/icons/align-center.svg | 6 - .../mediawiki/images/icons/align-float-left.svg | 6 - .../mediawiki/images/icons/align-float-right.svg | 6 - .../mediawiki/images/icons/arched-arrow-ltr.svg | 6 - .../mediawiki/images/icons/arched-arrow-rtl.svg | 6 - .../themes/mediawiki/images/icons/arrow-ltr.svg | 6 - .../themes/mediawiki/images/icons/arrow-rtl.svg | 6 - .../themes/mediawiki/images/icons/article-ltr.svg | 6 - .../themes/mediawiki/images/icons/article-rtl.svg | 6 - .../mediawiki/images/icons/articleCheck-ltr.svg | 9 - .../mediawiki/images/icons/articleCheck-rtl.svg | 9 - .../mediawiki/images/icons/articleSearch-ltr.svg | 6 - .../mediawiki/images/icons/articleSearch-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/bell.svg | 4 - .../themes/mediawiki/images/icons/bellOn-ltr.svg | 4 - .../themes/mediawiki/images/icons/bellOn-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/beta.svg | 4 - .../themes/mediawiki/images/icons/betaLaunch.svg | 4 - .../themes/mediawiki/images/icons/bigger-ltr.svg | 7 - .../themes/mediawiki/images/icons/bigger-rtl.svg | 7 - .../src/themes/mediawiki/images/icons/block.svg | 4 - .../mediawiki/images/icons/blockUndo-ltr.svg | 6 - .../mediawiki/images/icons/blockUndo-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/bold-a.svg | 6 - .../mediawiki/images/icons/bold-arab-ain.svg | 6 - .../mediawiki/images/icons/bold-arab-dad.svg | 6 - .../themes/mediawiki/images/icons/bold-armn-to.svg | 6 - .../src/themes/mediawiki/images/icons/bold-b.svg | 6 - .../themes/mediawiki/images/icons/bold-cyrl-be.svg | 6 - .../themes/mediawiki/images/icons/bold-cyrl-te.svg | 6 - .../mediawiki/images/icons/bold-cyrl-zhe.svg | 6 - .../src/themes/mediawiki/images/icons/bold-f.svg | 6 - .../src/themes/mediawiki/images/icons/bold-g.svg | 6 - .../mediawiki/images/icons/bold-geor-man.svg | 6 - .../src/themes/mediawiki/images/icons/bold-l.svg | 6 - .../src/themes/mediawiki/images/icons/bold-n.svg | 6 - .../src/themes/mediawiki/images/icons/bold-v.svg | 6 - .../src/themes/mediawiki/images/icons/book-ltr.svg | 4 - .../src/themes/mediawiki/images/icons/book-rtl.svg | 4 - .../themes/mediawiki/images/icons/bookmark-ltr.svg | 4 - .../themes/mediawiki/images/icons/bookmark-rtl.svg | 4 - .../themes/mediawiki/images/icons/browser-ltr.svg | 4 - .../themes/mediawiki/images/icons/browser-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/cancel.svg | 6 - .../themes/mediawiki/images/icons/caret-ltr.svg | 4 - .../themes/mediawiki/images/icons/caret-rtl.svg | 4 - .../themes/mediawiki/images/icons/caretDown.svg | 4 - .../src/themes/mediawiki/images/icons/caretUp.svg | 4 - .../mediawiki/images/icons/case-sensitive.svg | 7 - .../src/themes/mediawiki/images/icons/check.svg | 6 - .../src/themes/mediawiki/images/icons/circle.svg | 2 - .../mediawiki/images/icons/citeArticle-ltr.svg | 6 - .../mediawiki/images/icons/citeArticle-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/clear.svg | 6 - .../src/themes/mediawiki/images/icons/clock.svg | 6 - .../themes/mediawiki/images/icons/close-ltr.svg | 4 - .../themes/mediawiki/images/icons/close-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/code.svg | 7 - .../src/themes/mediawiki/images/icons/collapse.svg | 6 - .../src/themes/mediawiki/images/icons/comment.svg | 6 - .../src/themes/mediawiki/images/icons/die-ltr.svg | 4 - .../src/themes/mediawiki/images/icons/die-rtl.svg | 4 - .../themes/mediawiki/images/icons/downTriangle.svg | 4 - .../themes/mediawiki/images/icons/download-ltr.svg | 6 - .../themes/mediawiki/images/icons/download-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/edit-ltr.svg | 6 - .../src/themes/mediawiki/images/icons/edit-rtl.svg | 6 - .../themes/mediawiki/images/icons/editLock-ltr.svg | 8 - .../themes/mediawiki/images/icons/editLock-rtl.svg | 8 - .../themes/mediawiki/images/icons/editUndo-ltr.svg | 11 - .../themes/mediawiki/images/icons/editUndo-rtl.svg | 11 - .../src/themes/mediawiki/images/icons/ellipsis.svg | 14 - .../src/themes/mediawiki/images/icons/expand.svg | 6 - .../mediawiki/images/icons/external-link-ltr.svg | 7 - .../mediawiki/images/icons/external-link-rtl.svg | 7 - .../src/themes/mediawiki/images/icons/eye.svg | 7 - .../themes/mediawiki/images/icons/eyeClosed.svg | 4 - .../src/themes/mediawiki/images/icons/find-ltr.svg | 7 - .../src/themes/mediawiki/images/icons/find-rtl.svg | 7 - .../src/themes/mediawiki/images/icons/flag-ltr.svg | 4 - .../src/themes/mediawiki/images/icons/flag-rtl.svg | 4 - .../themes/mediawiki/images/icons/flagUndo-ltr.svg | 16 - .../themes/mediawiki/images/icons/flagUndo-rtl.svg | 16 - .../images/icons/folderPlaceholder-ltr.svg | 4 - .../images/icons/folderPlaceholder-rtl.svg | 4 - .../themes/mediawiki/images/icons/funnel-ltr.svg | 6 - .../themes/mediawiki/images/icons/funnel-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/heart.svg | 4 - .../src/themes/mediawiki/images/icons/help-ltr.svg | 10 - .../src/themes/mediawiki/images/icons/help-rtl.svg | 10 - .../src/themes/mediawiki/images/icons/history.svg | 7 - .../themes/mediawiki/images/icons/image-ltr.svg | 6 - .../themes/mediawiki/images/icons/image-rtl.svg | 6 - .../themes/mediawiki/images/icons/imageAdd-ltr.svg | 7 - .../themes/mediawiki/images/icons/imageAdd-rtl.svg | 7 - .../mediawiki/images/icons/imageLock-ltr.svg | 4 - .../mediawiki/images/icons/imageLock-rtl.svg | 4 - .../themes/mediawiki/images/icons/indent-ltr.svg | 6 - .../themes/mediawiki/images/icons/indent-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/info.svg | 6 - .../src/themes/mediawiki/images/icons/insert.svg | 6 - .../src/themes/mediawiki/images/icons/italic-a.svg | 6 - .../images/icons/italic-arab-keheh-jeem.svg | 6 - .../mediawiki/images/icons/italic-arab-meem.svg | 6 - .../mediawiki/images/icons/italic-armn-sha.svg | 6 - .../src/themes/mediawiki/images/icons/italic-c.svg | 6 - .../src/themes/mediawiki/images/icons/italic-d.svg | 6 - .../src/themes/mediawiki/images/icons/italic-e.svg | 6 - .../mediawiki/images/icons/italic-geor-kan.svg | 6 - .../src/themes/mediawiki/images/icons/italic-i.svg | 6 - .../src/themes/mediawiki/images/icons/italic-k.svg | 6 - .../src/themes/mediawiki/images/icons/italic-s.svg | 6 - .../themes/mediawiki/images/icons/journal-ltr.svg | 4 - .../themes/mediawiki/images/icons/journal-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/key-ltr.svg | 4 - .../src/themes/mediawiki/images/icons/key-rtl.svg | 4 - .../themes/mediawiki/images/icons/keyboard-ltr.svg | 6 - .../themes/mediawiki/images/icons/keyboard-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/language.svg | 7 - .../themes/mediawiki/images/icons/layout-ltr.svg | 7 - .../themes/mediawiki/images/icons/layout-rtl.svg | 7 - .../src/themes/mediawiki/images/icons/link-ltr.svg | 13 - .../src/themes/mediawiki/images/icons/link-rtl.svg | 6 - .../mediawiki/images/icons/listBullet-ltr.svg | 4 - .../mediawiki/images/icons/listBullet-rtl.svg | 4 - .../mediawiki/images/icons/listNumbered-ltr.svg | 4 - .../mediawiki/images/icons/listNumbered-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/lock-ltr.svg | 6 - .../src/themes/mediawiki/images/icons/lock-rtl.svg | 6 - .../themes/mediawiki/images/icons/logOut-ltr.svg | 6 - .../themes/mediawiki/images/icons/logOut-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/logo-cc.svg | 6 - .../images/icons/logo-wikimediaCommons.svg | 7 - .../mediawiki/images/icons/logo-wikipedia.svg | 6 - .../src/themes/mediawiki/images/icons/map-ltr.svg | 4 - .../src/themes/mediawiki/images/icons/map-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/mapPin.svg | 4 - .../mediawiki/images/icons/mapPinAdd-ltr.svg | 9 - .../mediawiki/images/icons/mapPinAdd-rtl.svg | 9 - .../src/themes/mediawiki/images/icons/menu.svg | 10 - .../themes/mediawiki/images/icons/message-ltr.svg | 6 - .../themes/mediawiki/images/icons/message-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/move-ltr.svg | 6 - .../src/themes/mediawiki/images/icons/move-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/move.svg | 4 - .../mediawiki/images/icons/newWindow-ltr.svg | 6 - .../mediawiki/images/icons/newWindow-rtl.svg | 6 - .../themes/mediawiki/images/icons/newline-ltr.svg | 6 - .../themes/mediawiki/images/icons/newline-rtl.svg | 6 - .../mediawiki/images/icons/newspaper-ltr.svg | 4 - .../mediawiki/images/icons/newspaper-rtl.svg | 4 - .../mediawiki/images/icons/noWikiText-ltr.svg | 6 - .../mediawiki/images/icons/noWikiText-rtl.svg | 6 - .../themes/mediawiki/images/icons/outdent-ltr.svg | 6 - .../themes/mediawiki/images/icons/outdent-rtl.svg | 6 - .../themes/mediawiki/images/icons/outline-ltr.svg | 7 - .../themes/mediawiki/images/icons/outline-rtl.svg | 7 - .../mediawiki/images/icons/photoGallery-ltr.svg | 6 - .../mediawiki/images/icons/photoGallery-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/picture.svg | 8 - .../src/themes/mediawiki/images/icons/play-ltr.svg | 6 - .../src/themes/mediawiki/images/icons/play-rtl.svg | 6 - .../themes/mediawiki/images/icons/printer-ltr.svg | 4 - .../themes/mediawiki/images/icons/printer-rtl.svg | 4 - .../themes/mediawiki/images/icons/puzzle-ltr.svg | 4 - .../themes/mediawiki/images/icons/puzzle-rtl.svg | 4 - .../themes/mediawiki/images/icons/quotes-ltr.svg | 11 - .../themes/mediawiki/images/icons/quotes-rtl.svg | 11 - .../mediawiki/images/icons/quotesAdd-ltr.svg | 6 - .../mediawiki/images/icons/quotesAdd-rtl.svg | 6 - .../themes/mediawiki/images/icons/redirect-ltr.svg | 8 - .../themes/mediawiki/images/icons/redirect-rtl.svg | 9 - .../mediawiki/images/icons/regular-expression.svg | 9 - .../src/themes/mediawiki/images/icons/remove.svg | 6 - .../themes/mediawiki/images/icons/ribbonPrize.svg | 9 - .../themes/mediawiki/images/icons/search-ltr.svg | 6 - .../themes/mediawiki/images/icons/search-rtl.svg | 6 - .../themes/mediawiki/images/icons/secure-link.svg | 6 - .../src/themes/mediawiki/images/icons/settings.svg | 6 - .../mediawiki/images/icons/signature-ltr.svg | 4 - .../mediawiki/images/icons/signature-rtl.svg | 4 - .../themes/mediawiki/images/icons/smaller-ltr.svg | 7 - .../themes/mediawiki/images/icons/smaller-rtl.svg | 7 - .../mediawiki/images/icons/specialCharacter.svg | 6 - .../mediawiki/images/icons/speechBubble-ltr.svg | 6 - .../mediawiki/images/icons/speechBubble-rtl.svg | 6 - .../mediawiki/images/icons/speechBubbleAdd-ltr.svg | 7 - .../mediawiki/images/icons/speechBubbleAdd-rtl.svg | 7 - .../mediawiki/images/icons/speechBubbles-ltr.svg | 6 - .../mediawiki/images/icons/speechBubbles-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/star.svg | 4 - .../src/themes/mediawiki/images/icons/stop.svg | 4 - .../mediawiki/images/icons/strikethrough-a.svg | 7 - .../mediawiki/images/icons/strikethrough-s.svg | 7 - .../mediawiki/images/icons/strikethrough-y.svg | 7 - .../mediawiki/images/icons/stripeFlow-ltr.svg | 4 - .../mediawiki/images/icons/stripeFlow-rtl.svg | 4 - .../mediawiki/images/icons/stripeSideMenu.svg | 12 - .../mediawiki/images/icons/stripeSummary-ltr.svg | 6 - .../mediawiki/images/icons/stripeSummary-rtl.svg | 6 - .../mediawiki/images/icons/stripeToC-ltr.svg | 6 - .../mediawiki/images/icons/stripeToC-rtl.svg | 6 - .../mediawiki/images/icons/subscript-ltr.svg | 5 - .../mediawiki/images/icons/subscript-rtl.svg | 5 - .../src/themes/mediawiki/images/icons/sun-ltr.svg | 5 - .../src/themes/mediawiki/images/icons/sun-rtl.svg | 5 - .../mediawiki/images/icons/superscript-ltr.svg | 5 - .../mediawiki/images/icons/superscript-rtl.svg | 5 - .../mediawiki/images/icons/table-caption.svg | 7 - .../images/icons/table-insert-column-ltr.svg | 11 - .../images/icons/table-insert-column-rtl.svg | 11 - .../images/icons/table-insert-row-after.svg | 11 - .../images/icons/table-insert-row-before.svg | 11 - .../mediawiki/images/icons/table-merge-cells.svg | 10 - .../src/themes/mediawiki/images/icons/table.svg | 7 - .../src/themes/mediawiki/images/icons/tag.svg | 6 - .../mediawiki/images/icons/templateAdd-ltr.svg | 7 - .../mediawiki/images/icons/templateAdd-rtl.svg | 7 - .../images/icons/text-dir-lefttoright.svg | 6 - .../images/icons/text-dir-righttoleft.svg | 6 - .../themes/mediawiki/images/icons/text-style.svg | 7 - .../mediawiki/images/icons/translation-ltr.svg | 4 - .../mediawiki/images/icons/translation-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/trash.svg | 4 - .../mediawiki/images/icons/trashUndo-ltr.svg | 6 - .../mediawiki/images/icons/trashUndo-rtl.svg | 6 - .../themes/mediawiki/images/icons/unLock-ltr.svg | 4 - .../themes/mediawiki/images/icons/unLock-rtl.svg | 4 - .../src/themes/mediawiki/images/icons/unStar.svg | 4 - .../themes/mediawiki/images/icons/underline-a.svg | 7 - .../themes/mediawiki/images/icons/underline-u.svg | 7 - .../themes/mediawiki/images/icons/upTriangle.svg | 4 - .../themes/mediawiki/images/icons/upload-ltr.svg | 6 - .../themes/mediawiki/images/icons/upload-rtl.svg | 6 - .../mediawiki/images/icons/userActive-ltr.svg | 4 - .../mediawiki/images/icons/userActive-rtl.svg | 4 - .../themes/mediawiki/images/icons/userAvatar.svg | 8 - .../mediawiki/images/icons/userInactive-ltr.svg | 4 - .../mediawiki/images/icons/userInactive-rtl.svg | 4 - .../themes/mediawiki/images/icons/userTalk-ltr.svg | 4 - .../themes/mediawiki/images/icons/userTalk-rtl.svg | 4 - .../themes/mediawiki/images/icons/viewCompact.svg | 14 - .../mediawiki/images/icons/viewDetails-ltr.svg | 9 - .../mediawiki/images/icons/viewDetails-rtl.svg | 9 - .../mediawiki/images/icons/visionSimulator.svg | 4 - .../mediawiki/images/icons/watchlist-ltr.svg | 6 - .../mediawiki/images/icons/watchlist-rtl.svg | 6 - .../src/themes/mediawiki/images/icons/wikiText.svg | 15 - .../mediawiki/images/icons/wikitrail-ltr.svg | 8 - .../mediawiki/images/icons/wikitrail-rtl.svg | 8 - .../src/themes/mediawiki/images/icons/window.svg | 7 - .../themes/mediawiki/images/indicators/alert.svg | 6 - .../mediawiki/images/indicators/arrow-down.svg | 8 - .../mediawiki/images/indicators/arrow-ltr.svg | 8 - .../mediawiki/images/indicators/arrow-rtl.svg | 8 - .../mediawiki/images/indicators/arrow-up.svg | 8 - .../mediawiki/images/indicators/required.svg | 6 - .../mediawiki/images/indicators/search-ltr.svg | 6 - .../mediawiki/images/indicators/search-rtl.svg | 6 - .../themes/mediawiki/images/textures/pending.gif | Bin 2032 -> 0 bytes .../mediawiki/images/textures/transparency.svg | 10 - .../oojs-ui/src/themes/mediawiki/indicators.json | 29 - .../oojs/oojs-ui/src/themes/mediawiki/layouts.less | 135 - .../oojs-ui/src/themes/mediawiki/textures.json | 8 - .../oojs/oojs-ui/src/themes/mediawiki/tools.less | 422 -- .../oojs/oojs-ui/src/themes/mediawiki/widgets.less | 978 ---- .../oojs/oojs-ui/src/themes/mediawiki/windows.less | 300 - vendor/oojs/oojs-ui/src/toolgroups/BarToolGroup.js | 35 - .../oojs/oojs-ui/src/toolgroups/ListToolGroup.js | 133 - .../oojs/oojs-ui/src/toolgroups/MenuToolGroup.js | 58 - .../oojs/oojs-ui/src/toolgroups/PopupToolGroup.js | 187 - vendor/oojs/oojs-ui/src/tools/PopupTool.js | 59 - vendor/oojs/oojs-ui/src/tools/ToolGroupTool.js | 96 - vendor/oojs/oojs-ui/src/widgets/ActionWidget.js | 170 - .../oojs/oojs-ui/src/widgets/ButtonGroupWidget.js | 53 - .../oojs/oojs-ui/src/widgets/ButtonInputWidget.js | 121 - .../oojs/oojs-ui/src/widgets/ButtonOptionWidget.js | 60 - .../oojs/oojs-ui/src/widgets/ButtonSelectWidget.js | 62 - vendor/oojs/oojs-ui/src/widgets/ButtonWidget.js | 215 - .../oojs-ui/src/widgets/CheckboxInputWidget.js | 110 - vendor/oojs/oojs-ui/src/widgets/ComboBoxWidget.js | 230 - .../oojs-ui/src/widgets/DecoratedOptionWidget.js | 55 - .../oojs-ui/src/widgets/DropdownInputWidget.js | 137 - vendor/oojs/oojs-ui/src/widgets/DropdownWidget.js | 149 - vendor/oojs/oojs-ui/src/widgets/GroupWidget.js | 48 - vendor/oojs/oojs-ui/src/widgets/IconWidget.js | 54 - vendor/oojs/oojs-ui/src/widgets/IndicatorWidget.js | 52 - vendor/oojs/oojs-ui/src/widgets/InputWidget.js | 207 - vendor/oojs/oojs-ui/src/widgets/ItemWidget.js | 48 - vendor/oojs/oojs-ui/src/widgets/LabelWidget.js | 84 - .../oojs/oojs-ui/src/widgets/MenuOptionWidget.js | 33 - .../oojs-ui/src/widgets/MenuSectionOptionWidget.js | 55 - .../oojs/oojs-ui/src/widgets/MenuSelectWidget.js | 254 - vendor/oojs/oojs-ui/src/widgets/OptionWidget.js | 177 - .../oojs-ui/src/widgets/OutlineControlsWidget.js | 145 - .../oojs-ui/src/widgets/OutlineOptionWidget.js | 130 - .../oojs-ui/src/widgets/OutlineSelectWidget.js | 34 - .../oojs/oojs-ui/src/widgets/PopupButtonWidget.js | 57 - vendor/oojs/oojs-ui/src/widgets/PopupWidget.js | 395 -- .../oojs/oojs-ui/src/widgets/ProgressBarWidget.js | 96 - .../oojs/oojs-ui/src/widgets/RadioInputWidget.js | 94 - .../oojs/oojs-ui/src/widgets/RadioOptionWidget.js | 66 - .../oojs/oojs-ui/src/widgets/RadioSelectWidget.js | 58 - vendor/oojs/oojs-ui/src/widgets/SearchWidget.js | 176 - vendor/oojs/oojs-ui/src/widgets/SelectWidget.js | 630 -- vendor/oojs/oojs-ui/src/widgets/TabOptionWidget.js | 31 - vendor/oojs/oojs-ui/src/widgets/TabSelectWidget.js | 33 - .../src/widgets/TextInputMenuSelectWidget.js | 103 - vendor/oojs/oojs-ui/src/widgets/TextInputWidget.js | 535 -- .../oojs/oojs-ui/src/widgets/ToggleButtonWidget.js | 114 - .../oojs/oojs-ui/src/widgets/ToggleSwitchWidget.js | 92 - vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js | 71 - vendor/oojs/oojs-ui/tests/Element.test.js | 52 - vendor/oojs/oojs-ui/tests/JSPHP.test.karma.js | 61 - vendor/oojs/oojs-ui/tests/JSPHP.test.standalone.js | 55 - vendor/oojs/oojs-ui/tests/Process.test.js | 179 - .../oojs-ui/tests/QUnit.assert.equalDomElement.js | 113 - .../oojs-ui/tests/elements/FlaggedElement.test.js | 64 - vendor/oojs/oojs-ui/tests/index.php | 77 - vendor/oyejorge/less.php/CHANGES.md | 6 + vendor/oyejorge/less.php/LICENSE | 178 + vendor/oyejorge/less.php/README.md | 322 ++ vendor/oyejorge/less.php/bin/lessc | 191 + vendor/oyejorge/less.php/composer.json | 31 + vendor/oyejorge/less.php/lessc.inc.php | 268 + .../less.php/lib/Less/.easymin/ignore_prefixes | 2 + vendor/oyejorge/less.php/lib/Less/Autoloader.php | 79 + vendor/oyejorge/less.php/lib/Less/Cache.php | 316 + vendor/oyejorge/less.php/lib/Less/Colors.php | 170 + vendor/oyejorge/less.php/lib/Less/Configurable.php | 69 + vendor/oyejorge/less.php/lib/Less/Environment.php | 166 + .../oyejorge/less.php/lib/Less/Exception/Chunk.php | 203 + .../less.php/lib/Less/Exception/Compiler.php | 11 + .../less.php/lib/Less/Exception/Parser.php | 125 + vendor/oyejorge/less.php/lib/Less/Functions.php | 1183 ++++ vendor/oyejorge/less.php/lib/Less/Less.php.combine | 17 + vendor/oyejorge/less.php/lib/Less/Mime.php | 41 + vendor/oyejorge/less.php/lib/Less/Output.php | 49 + .../oyejorge/less.php/lib/Less/Output/Mapped.php | 122 + vendor/oyejorge/less.php/lib/Less/Parser.php | 2627 +++++++++ .../less.php/lib/Less/SourceMap/Base64VLQ.php | 187 + .../less.php/lib/Less/SourceMap/Generator.php | 365 ++ vendor/oyejorge/less.php/lib/Less/Tree.php | 90 + vendor/oyejorge/less.php/lib/Less/Tree/Alpha.php | 51 + .../oyejorge/less.php/lib/Less/Tree/Anonymous.php | 58 + .../oyejorge/less.php/lib/Less/Tree/Assignment.php | 39 + .../oyejorge/less.php/lib/Less/Tree/Attribute.php | 54 + vendor/oyejorge/less.php/lib/Less/Tree/Call.php | 121 + vendor/oyejorge/less.php/lib/Less/Tree/Color.php | 230 + vendor/oyejorge/less.php/lib/Less/Tree/Comment.php | 51 + .../oyejorge/less.php/lib/Less/Tree/Condition.php | 72 + .../less.php/lib/Less/Tree/DefaultFunc.php | 34 + .../less.php/lib/Less/Tree/DetachedRuleset.php | 40 + .../oyejorge/less.php/lib/Less/Tree/Dimension.php | 201 + .../oyejorge/less.php/lib/Less/Tree/Directive.php | 100 + vendor/oyejorge/less.php/lib/Less/Tree/Element.php | 75 + .../oyejorge/less.php/lib/Less/Tree/Expression.php | 97 + vendor/oyejorge/less.php/lib/Less/Tree/Extend.php | 77 + vendor/oyejorge/less.php/lib/Less/Tree/Import.php | 307 + .../oyejorge/less.php/lib/Less/Tree/Javascript.php | 30 + vendor/oyejorge/less.php/lib/Less/Tree/Keyword.php | 44 + vendor/oyejorge/less.php/lib/Less/Tree/Media.php | 179 + .../oyejorge/less.php/lib/Less/Tree/Mixin/Call.php | 202 + .../less.php/lib/Less/Tree/Mixin/Definition.php | 241 + .../oyejorge/less.php/lib/Less/Tree/NameValue.php | 41 + .../oyejorge/less.php/lib/Less/Tree/Negative.php | 37 + .../oyejorge/less.php/lib/Less/Tree/Operation.php | 70 + vendor/oyejorge/less.php/lib/Less/Tree/Paren.php | 35 + vendor/oyejorge/less.php/lib/Less/Tree/Quoted.php | 81 + vendor/oyejorge/less.php/lib/Less/Tree/Rule.php | 115 + vendor/oyejorge/less.php/lib/Less/Tree/Ruleset.php | 643 +++ .../less.php/lib/Less/Tree/RulesetCall.php | 26 + .../oyejorge/less.php/lib/Less/Tree/Selector.php | 168 + .../less.php/lib/Less/Tree/UnicodeDescriptor.php | 29 + vendor/oyejorge/less.php/lib/Less/Tree/Unit.php | 147 + .../less.php/lib/Less/Tree/UnitConversions.php | 35 + vendor/oyejorge/less.php/lib/Less/Tree/Url.php | 76 + vendor/oyejorge/less.php/lib/Less/Tree/Value.php | 48 + .../oyejorge/less.php/lib/Less/Tree/Variable.php | 52 + vendor/oyejorge/less.php/lib/Less/Version.php | 15 + vendor/oyejorge/less.php/lib/Less/Visitor.php | 49 + .../less.php/lib/Less/Visitor/extendFinder.php | 114 + .../oyejorge/less.php/lib/Less/Visitor/import.php | 139 + .../less.php/lib/Less/Visitor/joinSelector.php | 70 + .../less.php/lib/Less/Visitor/processExtends.php | 469 ++ .../oyejorge/less.php/lib/Less/Visitor/toCSS.php | 292 + .../less.php/lib/Less/VisitorReplacing.php | 75 + vendor/psr/log/Psr/Log/LoggerAwareTrait.php | 22 - vendor/psr/log/Psr/Log/LoggerTrait.php | 131 - vendor/ruflin/elastica/CHANGELOG.md | 1038 ++++ vendor/ruflin/elastica/CONTRIBUTING.md | 75 + vendor/ruflin/elastica/Dockerfile | 58 + vendor/ruflin/elastica/LICENSE.txt | 21 + vendor/ruflin/elastica/Makefile | 108 + vendor/ruflin/elastica/README.md | 31 + vendor/ruflin/elastica/Vagrantfile | 18 + vendor/ruflin/elastica/ansible/es-playbook.yml | 20 + vendor/ruflin/elastica/ansible/provision.sh | 63 + .../elastica/ansible/roles/base/tasks/main.yml | 13 + .../ansible/roles/elasticsearch/handlers/main.yml | 6 + .../ansible/roles/elasticsearch/tasks/main.yml | 101 + .../roles/elasticsearch/templates/config-0.yml | 10 + .../roles/elasticsearch/templates/config-1.yml | 10 + .../elasticsearch/templates/config-default.yml | 40 + .../elasticsearch/templates/elasticsearch.service | 229 + .../roles/elasticsearch/templates/logging.yml | 56 + .../elastica/ansible/roles/nginx/handlers/main.yml | 6 + .../elastica/ansible/roles/nginx/tasks/main.yml | 26 + .../ansible/roles/nginx/templates/mime.types.j2 | 109 + .../ansible/roles/nginx/templates/nginx.conf.j2 | 35 + .../elastica/ansible/roles/php/tasks/main.yml | 43 + vendor/ruflin/elastica/composer.json | 43 + vendor/ruflin/elastica/docker-compose.yml | 27 + .../ruflin/elastica/env/elasticsearch/Dockerfile | 26 + .../elastica/env/elasticsearch/elasticsearch.yml | 39 + .../ruflin/elastica/env/elasticsearch/logging.yml | 56 + vendor/ruflin/elastica/env/nginx/mime.types | 109 + vendor/ruflin/elastica/env/nginx/nginx.conf | 38 + .../elastica/lib/Elastica/AbstractUpdateAction.php | 568 ++ .../Elastica/Aggregation/AbstractAggregation.php | 97 + .../Aggregation/AbstractSimpleAggregation.php | 37 + .../Aggregation/AbstractTermsAggregation.php | 97 + .../elastica/lib/Elastica/Aggregation/Avg.php | 11 + .../lib/Elastica/Aggregation/Cardinality.php | 38 + .../lib/Elastica/Aggregation/DateHistogram.php | 130 + .../lib/Elastica/Aggregation/DateRange.php | 22 + .../lib/Elastica/Aggregation/ExtendedStats.php | 11 + .../elastica/lib/Elastica/Aggregation/Filter.php | 53 + .../elastica/lib/Elastica/Aggregation/Filters.php | 59 + .../lib/Elastica/Aggregation/GeoDistance.php | 104 + .../lib/Elastica/Aggregation/GeohashGrid.php | 68 + .../lib/Elastica/Aggregation/GlobalAggregation.php | 11 + .../lib/Elastica/Aggregation/Histogram.php | 59 + .../elastica/lib/Elastica/Aggregation/IpRange.php | 72 + .../elastica/lib/Elastica/Aggregation/Max.php | 11 + .../elastica/lib/Elastica/Aggregation/Min.php | 11 + .../elastica/lib/Elastica/Aggregation/Missing.php | 32 + .../elastica/lib/Elastica/Aggregation/Nested.php | 32 + .../lib/Elastica/Aggregation/Percentiles.php | 59 + .../elastica/lib/Elastica/Aggregation/Range.php | 58 + .../lib/Elastica/Aggregation/ReverseNested.php | 49 + .../lib/Elastica/Aggregation/ScriptedMetric.php | 82 + .../lib/Elastica/Aggregation/SignificantTerms.php | 27 + .../elastica/lib/Elastica/Aggregation/Stats.php | 11 + .../elastica/lib/Elastica/Aggregation/Sum.php | 11 + .../elastica/lib/Elastica/Aggregation/Terms.php | 23 + .../elastica/lib/Elastica/Aggregation/TopHits.php | 156 + .../lib/Elastica/Aggregation/ValueCount.php | 32 + vendor/ruflin/elastica/lib/Elastica/Bulk.php | 442 ++ .../ruflin/elastica/lib/Elastica/Bulk/Action.php | 228 + .../lib/Elastica/Bulk/Action/AbstractDocument.php | 166 + .../lib/Elastica/Bulk/Action/CreateDocument.php | 10 + .../lib/Elastica/Bulk/Action/DeleteDocument.php | 33 + .../lib/Elastica/Bulk/Action/IndexDocument.php | 53 + .../lib/Elastica/Bulk/Action/UpdateDocument.php | 65 + .../ruflin/elastica/lib/Elastica/Bulk/Response.php | 46 + .../elastica/lib/Elastica/Bulk/ResponseSet.php | 141 + vendor/ruflin/elastica/lib/Elastica/Client.php | 719 +++ vendor/ruflin/elastica/lib/Elastica/Cluster.php | 192 + .../elastica/lib/Elastica/Cluster/Health.php | 185 + .../elastica/lib/Elastica/Cluster/Health/Index.php | 137 + .../elastica/lib/Elastica/Cluster/Health/Shard.php | 102 + .../elastica/lib/Elastica/Cluster/Settings.php | 202 + vendor/ruflin/elastica/lib/Elastica/Connection.php | 320 + .../lib/Elastica/Connection/ConnectionPool.php | 122 + .../Connection/Strategy/CallbackStrategy.php | 51 + .../Elastica/Connection/Strategy/RoundRobin.php | 24 + .../lib/Elastica/Connection/Strategy/Simple.php | 30 + .../Connection/Strategy/StrategyFactory.php | 45 + .../Connection/Strategy/StrategyInterface.php | 17 + vendor/ruflin/elastica/lib/Elastica/Document.php | 356 ++ .../Exception/Bulk/Response/ActionException.php | 65 + .../Elastica/Exception/Bulk/ResponseException.php | 98 + .../lib/Elastica/Exception/Bulk/UdpException.php | 8 + .../lib/Elastica/Exception/BulkException.php | 6 + .../lib/Elastica/Exception/ClientException.php | 11 + .../Exception/Connection/GuzzleException.php | 50 + .../Exception/Connection/HttpException.php | 86 + .../Exception/Connection/MemcacheException.php | 13 + .../Exception/Connection/ThriftException.php | 49 + .../lib/Elastica/Exception/ConnectionException.php | 58 + .../Elastica/Exception/ElasticsearchException.php | 91 + .../lib/Elastica/Exception/ExceptionInterface.php | 11 + .../lib/Elastica/Exception/InvalidException.php | 11 + .../lib/Elastica/Exception/JSONParseException.php | 9 + .../lib/Elastica/Exception/NotFoundException.php | 11 + .../Elastica/Exception/NotImplementedException.php | 13 + .../Exception/PartialShardFailureException.php | 28 + .../Elastica/Exception/QueryBuilderException.php | 11 + .../lib/Elastica/Exception/ResponseException.php | 70 + .../lib/Elastica/Exception/RuntimeException.php | 11 + .../elastica/lib/Elastica/Facet/AbstractFacet.php | 145 + .../elastica/lib/Elastica/Facet/DateHistogram.php | 58 + .../ruflin/elastica/lib/Elastica/Facet/Filter.php | 27 + .../elastica/lib/Elastica/Facet/GeoCluster.php | 66 + .../elastica/lib/Elastica/Facet/GeoDistance.php | 69 + .../elastica/lib/Elastica/Facet/Histogram.php | 96 + .../ruflin/elastica/lib/Elastica/Facet/Query.php | 27 + .../ruflin/elastica/lib/Elastica/Facet/Range.php | 143 + .../elastica/lib/Elastica/Facet/Statistical.php | 64 + .../ruflin/elastica/lib/Elastica/Facet/Terms.php | 137 + .../elastica/lib/Elastica/Facet/TermsStats.php | 107 + .../lib/Elastica/Filter/AbstractFilter.php | 59 + .../lib/Elastica/Filter/AbstractGeoDistance.php | 198 + .../lib/Elastica/Filter/AbstractGeoShape.php | 52 + .../elastica/lib/Elastica/Filter/AbstractMulti.php | 89 + .../ruflin/elastica/lib/Elastica/Filter/Bool.php | 15 + .../elastica/lib/Elastica/Filter/BoolAnd.php | 20 + .../elastica/lib/Elastica/Filter/BoolFilter.php | 133 + .../elastica/lib/Elastica/Filter/BoolNot.php | 42 + .../ruflin/elastica/lib/Elastica/Filter/BoolOr.php | 20 + .../ruflin/elastica/lib/Elastica/Filter/Exists.php | 34 + .../lib/Elastica/Filter/GeoBoundingBox.php | 49 + .../elastica/lib/Elastica/Filter/GeoDistance.php | 76 + .../lib/Elastica/Filter/GeoDistanceRange.php | 103 + .../elastica/lib/Elastica/Filter/GeoPolygon.php | 56 + .../lib/Elastica/Filter/GeoShapePreIndexed.php | 84 + .../lib/Elastica/Filter/GeoShapeProvided.php | 73 + .../elastica/lib/Elastica/Filter/GeohashCell.php | 47 + .../elastica/lib/Elastica/Filter/HasChild.php | 95 + .../elastica/lib/Elastica/Filter/HasParent.php | 69 + vendor/ruflin/elastica/lib/Elastica/Filter/Ids.php | 94 + .../elastica/lib/Elastica/Filter/Indices.php | 78 + .../ruflin/elastica/lib/Elastica/Filter/Limit.php | 34 + .../elastica/lib/Elastica/Filter/MatchAll.php | 20 + .../elastica/lib/Elastica/Filter/Missing.php | 60 + .../ruflin/elastica/lib/Elastica/Filter/Nested.php | 62 + .../elastica/lib/Elastica/Filter/NumericRange.php | 13 + .../ruflin/elastica/lib/Elastica/Filter/Prefix.php | 80 + .../ruflin/elastica/lib/Elastica/Filter/Query.php | 91 + .../ruflin/elastica/lib/Elastica/Filter/Range.php | 73 + .../ruflin/elastica/lib/Elastica/Filter/Regexp.php | 112 + .../ruflin/elastica/lib/Elastica/Filter/Script.php | 47 + .../ruflin/elastica/lib/Elastica/Filter/Term.php | 47 + .../ruflin/elastica/lib/Elastica/Filter/Terms.php | 149 + .../ruflin/elastica/lib/Elastica/Filter/Type.php | 59 + vendor/ruflin/elastica/lib/Elastica/Index.php | 515 ++ .../elastica/lib/Elastica/Index/Settings.php | 366 ++ .../ruflin/elastica/lib/Elastica/Index/Stats.php | 108 + .../ruflin/elastica/lib/Elastica/Index/Status.php | 150 + vendor/ruflin/elastica/lib/Elastica/JSON.php | 67 + vendor/ruflin/elastica/lib/Elastica/Log.php | 81 + .../elastica/lib/Elastica/Multi/ResultSet.php | 205 + .../ruflin/elastica/lib/Elastica/Multi/Search.php | 203 + vendor/ruflin/elastica/lib/Elastica/Node.php | 161 + vendor/ruflin/elastica/lib/Elastica/Node/Info.php | 220 + vendor/ruflin/elastica/lib/Elastica/Node/Stats.php | 113 + vendor/ruflin/elastica/lib/Elastica/Param.php | 167 + vendor/ruflin/elastica/lib/Elastica/Percolator.php | 194 + vendor/ruflin/elastica/lib/Elastica/Query.php | 488 ++ .../elastica/lib/Elastica/Query/AbstractQuery.php | 13 + vendor/ruflin/elastica/lib/Elastica/Query/Bool.php | 15 + .../elastica/lib/Elastica/Query/BoolQuery.php | 111 + .../elastica/lib/Elastica/Query/Boosting.php | 50 + .../ruflin/elastica/lib/Elastica/Query/Builder.php | 935 +++ .../ruflin/elastica/lib/Elastica/Query/Common.php | 172 + .../elastica/lib/Elastica/Query/ConstantScore.php | 70 + .../ruflin/elastica/lib/Elastica/Query/DisMax.php | 62 + .../elastica/lib/Elastica/Query/Filtered.php | 97 + .../elastica/lib/Elastica/Query/FunctionScore.php | 260 + .../ruflin/elastica/lib/Elastica/Query/Fuzzy.php | 87 + .../elastica/lib/Elastica/Query/FuzzyLikeThis.php | 217 + .../elastica/lib/Elastica/Query/HasChild.php | 65 + .../elastica/lib/Elastica/Query/HasParent.php | 63 + vendor/ruflin/elastica/lib/Elastica/Query/Ids.php | 121 + .../ruflin/elastica/lib/Elastica/Query/Image.php | 187 + .../ruflin/elastica/lib/Elastica/Query/Match.php | 222 + .../elastica/lib/Elastica/Query/MatchAll.php | 20 + .../elastica/lib/Elastica/Query/MatchPhrase.php | 13 + .../lib/Elastica/Query/MatchPhrasePrefix.php | 13 + .../elastica/lib/Elastica/Query/MoreLikeThis.php | 198 + .../elastica/lib/Elastica/Query/MultiMatch.php | 191 + .../ruflin/elastica/lib/Elastica/Query/Nested.php | 48 + .../ruflin/elastica/lib/Elastica/Query/Prefix.php | 47 + .../elastica/lib/Elastica/Query/QueryString.php | 282 + .../ruflin/elastica/lib/Elastica/Query/Range.php | 38 + .../ruflin/elastica/lib/Elastica/Query/Regexp.php | 40 + .../ruflin/elastica/lib/Elastica/Query/Simple.php | 54 + .../lib/Elastica/Query/SimpleQueryString.php | 83 + vendor/ruflin/elastica/lib/Elastica/Query/Term.php | 49 + .../ruflin/elastica/lib/Elastica/Query/Terms.php | 107 + .../elastica/lib/Elastica/Query/TopChildren.php | 53 + .../elastica/lib/Elastica/Query/Wildcard.php | 40 + .../ruflin/elastica/lib/Elastica/QueryBuilder.php | 114 + .../elastica/lib/Elastica/QueryBuilder/DSL.php | 22 + .../lib/Elastica/QueryBuilder/DSL/Aggregation.php | 470 ++ .../lib/Elastica/QueryBuilder/DSL/Filter.php | 480 ++ .../lib/Elastica/QueryBuilder/DSL/Query.php | 586 ++ .../lib/Elastica/QueryBuilder/DSL/Suggest.php | 83 + .../elastica/lib/Elastica/QueryBuilder/Facade.php | 64 + .../elastica/lib/Elastica/QueryBuilder/Version.php | 101 + .../Elastica/QueryBuilder/Version/Version090.php | 97 + .../Elastica/QueryBuilder/Version/Version100.php | 123 + .../Elastica/QueryBuilder/Version/Version110.php | 131 + .../Elastica/QueryBuilder/Version/Version120.php | 137 + .../Elastica/QueryBuilder/Version/Version130.php | 142 + .../Elastica/QueryBuilder/Version/Version140.php | 145 + .../Elastica/QueryBuilder/Version/Version150.php | 14 + vendor/ruflin/elastica/lib/Elastica/Request.php | 204 + .../lib/Elastica/Rescore/AbstractRescore.php | 36 + .../ruflin/elastica/lib/Elastica/Rescore/Query.php | 91 + vendor/ruflin/elastica/lib/Elastica/Response.php | 308 + vendor/ruflin/elastica/lib/Elastica/Result.php | 217 + vendor/ruflin/elastica/lib/Elastica/ResultSet.php | 433 ++ .../ruflin/elastica/lib/Elastica/ScanAndScroll.php | 80 + vendor/ruflin/elastica/lib/Elastica/Script.php | 163 + .../ruflin/elastica/lib/Elastica/ScriptFields.php | 65 + vendor/ruflin/elastica/lib/Elastica/Scroll.php | 174 + vendor/ruflin/elastica/lib/Elastica/Search.php | 553 ++ .../elastica/lib/Elastica/SearchableInterface.php | 52 + vendor/ruflin/elastica/lib/Elastica/Snapshot.php | 176 + vendor/ruflin/elastica/lib/Elastica/Status.php | 177 + vendor/ruflin/elastica/lib/Elastica/Suggest.php | 65 + .../lib/Elastica/Suggest/AbstractSuggest.php | 97 + .../AbstractCandidateGenerator.php | 8 + .../Suggest/CandidateGenerator/DirectGenerator.php | 140 + .../elastica/lib/Elastica/Suggest/Completion.php | 26 + .../elastica/lib/Elastica/Suggest/Phrase.php | 164 + .../ruflin/elastica/lib/Elastica/Suggest/Term.php | 129 + .../elastica/lib/Elastica/Tool/CrossIndex.php | 160 + .../lib/Elastica/Transport/AbstractTransport.php | 113 + .../elastica/lib/Elastica/Transport/Guzzle.php | 179 + .../elastica/lib/Elastica/Transport/Http.php | 190 + .../lib/Elastica/Transport/HttpAdapter.php | 156 + .../elastica/lib/Elastica/Transport/Https.php | 27 + .../elastica/lib/Elastica/Transport/Memcache.php | 109 + .../elastica/lib/Elastica/Transport/Null.php | 13 + .../lib/Elastica/Transport/NullTransport.php | 46 + .../elastica/lib/Elastica/Transport/Thrift.php | 176 + vendor/ruflin/elastica/lib/Elastica/Type.php | 572 ++ .../elastica/lib/Elastica/Type/AbstractType.php | 205 + .../ruflin/elastica/lib/Elastica/Type/Mapping.php | 297 + vendor/ruflin/elastica/lib/Elastica/Util.php | 194 + vendor/ruflin/elastica/phpdoc.dist.xml | 13 + vendor/ruflin/elastica/test/bootstrap.php | 5 + vendor/ruflin/elastica/test/data/test.doc | Bin 0 -> 22016 bytes vendor/ruflin/elastica/test/data/test.docx | Bin 0 -> 25890 bytes vendor/ruflin/elastica/test/data/test.jpg | Bin 0 -> 4459 bytes vendor/ruflin/elastica/test/data/test.pdf | Bin 0 -> 16107 bytes vendor/ruflin/elastica/test/data/test.txt | 1 + .../test/lib/Elastica/Test/Aggregation/AvgTest.php | 39 + .../Test/Aggregation/BaseAggregationTest.php | 8 + .../Elastica/Test/Aggregation/CardinalityTest.php | 132 + .../Test/Aggregation/DateHistogramTest.php | 103 + .../Elastica/Test/Aggregation/DateRangeTest.php | 52 + .../Test/Aggregation/ExtendedStatsTest.php | 45 + .../lib/Elastica/Test/Aggregation/FilterTest.php | 113 + .../lib/Elastica/Test/Aggregation/FiltersTest.php | 120 + .../Elastica/Test/Aggregation/GeoDistanceTest.php | 46 + .../Elastica/Test/Aggregation/GeohashGridTest.php | 46 + .../Test/Aggregation/GlobalAggregationTest.php | 27 + .../Elastica/Test/Aggregation/HistogramTest.php | 47 + .../lib/Elastica/Test/Aggregation/IpRangeTest.php | 57 + .../test/lib/Elastica/Test/Aggregation/MaxTest.php | 79 + .../test/lib/Elastica/Test/Aggregation/MinTest.php | 40 + .../lib/Elastica/Test/Aggregation/MissingTest.php | 39 + .../lib/Elastica/Test/Aggregation/NestedTest.php | 63 + .../Elastica/Test/Aggregation/PercentilesTest.php | 125 + .../lib/Elastica/Test/Aggregation/RangeTest.php | 78 + .../Test/Aggregation/ReverseNestedTest.php | 134 + .../lib/Elastica/Test/Aggregation/ScriptTest.php | 87 + .../Test/Aggregation/ScriptedMetricTest.php | 50 + .../Test/Aggregation/SignificantTermsTest.php | 72 + .../lib/Elastica/Test/Aggregation/StatsTest.php | 44 + .../test/lib/Elastica/Test/Aggregation/SumTest.php | 40 + .../lib/Elastica/Test/Aggregation/TermsTest.php | 41 + .../lib/Elastica/Test/Aggregation/TopHitsTest.php | 385 ++ .../Elastica/Test/Aggregation/ValueCountTest.php | 40 + .../elastica/test/lib/Elastica/Test/Base.php | 142 + .../test/lib/Elastica/Test/Bulk/ActionTest.php | 66 + .../lib/Elastica/Test/Bulk/ResponseSetTest.php | 200 + .../elastica/test/lib/Elastica/Test/BulkTest.php | 792 +++ .../elastica/test/lib/Elastica/Test/ClientTest.php | 1160 ++++ .../lib/Elastica/Test/Cluster/Health/IndexTest.php | 144 + .../lib/Elastica/Test/Cluster/Health/ShardTest.php | 85 + .../test/lib/Elastica/Test/Cluster/HealthTest.php | 147 + .../lib/Elastica/Test/Cluster/SettingsTest.php | 117 + .../test/lib/Elastica/Test/ClusterTest.php | 83 + .../Test/Connection/ConnectionPoolTest.php | 112 + .../Connection/Strategy/CallbackStrategyTest.php | 97 + .../Strategy/CallbackStrategyTestHelper.php | 20 + .../Test/Connection/Strategy/EmptyStrategy.php | 17 + .../Test/Connection/Strategy/RoundRobinTest.php | 128 + .../Test/Connection/Strategy/SimpleTest.php | 113 + .../Connection/Strategy/StrategyFactoryTest.php | 84 + .../test/lib/Elastica/Test/ConnectionTest.php | 121 + .../test/lib/Elastica/Test/DocumentTest.php | 349 ++ .../test/lib/Elastica/Test/ExampleTest.php | 61 + .../Test/Exception/AbstractExceptionTest.php | 31 + .../Bulk/Response/ActionExceptionTest.php | 8 + .../Test/Exception/Bulk/ResponseExceptionTest.php | 8 + .../Test/Exception/Bulk/UdpExceptionTest.php | 8 + .../Elastica/Test/Exception/BulkExceptionTest.php | 6 + .../Test/Exception/ClientExceptionTest.php | 6 + .../Exception/Connection/GuzzleExceptionTest.php | 14 + .../Exception/Connection/HttpExceptionTest.php | 8 + .../Exception/Connection/MemcacheExceptionTest.php | 8 + .../Exception/Connection/ThriftExceptionTest.php | 14 + .../Test/Exception/ConnectionExceptionTest.php | 6 + .../Test/Exception/ElasticsearchExceptionTest.php | 6 + .../Test/Exception/InvalidExceptionTest.php | 6 + .../Test/Exception/JSONParseExceptionTest.php | 6 + .../Test/Exception/NotFoundExceptionTest.php | 6 + .../Test/Exception/NotImplementedExceptionTest.php | 19 + .../Exception/PartialShardFailureExceptionTest.php | 54 + .../Test/Exception/QueryBuilderExceptionTest.php | 6 + .../Test/Exception/ResponseExceptionTest.php | 65 + .../Test/Exception/RuntimeExceptionTest.php | 6 + .../lib/Elastica/Test/Facet/DateHistogramTest.php | 106 + .../test/lib/Elastica/Test/Facet/FilterTest.php | 42 + .../lib/Elastica/Test/Facet/GeoClusterTest.php | 57 + .../test/lib/Elastica/Test/Facet/QueryTest.php | 42 + .../lib/Elastica/Test/Facet/StatisticalTest.php | 82 + .../lib/Elastica/Test/Facet/TermsStatsTest.php | 113 + .../test/lib/Elastica/Test/Facet/TermsTest.php | 74 + .../test/lib/Elastica/Test/Filter/AbstractTest.php | 81 + .../test/lib/Elastica/Test/Filter/BoolAndTest.php | 86 + .../lib/Elastica/Test/Filter/BoolFilterTest.php | 200 + .../test/lib/Elastica/Test/Filter/BoolNotTest.php | 27 + .../test/lib/Elastica/Test/Filter/BoolOrTest.php | 90 + .../test/lib/Elastica/Test/Filter/ExistsTest.php | 36 + .../Elastica/Test/Filter/GeoBoundingBoxTest.php | 55 + .../Elastica/Test/Filter/GeoDistanceRangeTest.php | 220 + .../lib/Elastica/Test/Filter/GeoDistanceTest.php | 141 + .../lib/Elastica/Test/Filter/GeoPolygonTest.php | 65 + .../Test/Filter/GeoShapePreIndexedTest.php | 102 + .../Elastica/Test/Filter/GeoShapeProvidedTest.php | 103 + .../lib/Elastica/Test/Filter/GeohashCellTest.php | 68 + .../test/lib/Elastica/Test/Filter/HasChildTest.php | 213 + .../lib/Elastica/Test/Filter/HasParentTest.php | 153 + .../test/lib/Elastica/Test/Filter/IdsTest.php | 244 + .../test/lib/Elastica/Test/Filter/IndicesTest.php | 125 + .../test/lib/Elastica/Test/Filter/LimitTest.php | 34 + .../test/lib/Elastica/Test/Filter/MatchAllTest.php | 20 + .../test/lib/Elastica/Test/Filter/MissingTest.php | 78 + .../test/lib/Elastica/Test/Filter/MultiTest.php | 109 + .../Test/Filter/NestedFilterWithSetFilterTest.php | 110 + .../test/lib/Elastica/Test/Filter/NestedTest.php | 127 + .../lib/Elastica/Test/Filter/NumericRangeTest.php | 37 + .../test/lib/Elastica/Test/Filter/PrefixTest.php | 138 + .../test/lib/Elastica/Test/Filter/QueryTest.php | 51 + .../test/lib/Elastica/Test/Filter/RangeTest.php | 61 + .../test/lib/Elastica/Test/Filter/RegexpTest.php | 162 + .../test/lib/Elastica/Test/Filter/ScriptTest.php | 57 + .../test/lib/Elastica/Test/Filter/TermTest.php | 24 + .../test/lib/Elastica/Test/Filter/TermsTest.php | 129 + .../test/lib/Elastica/Test/Filter/TypeTest.php | 32 + .../test/lib/Elastica/Test/Index/SettingsTest.php | 338 ++ .../test/lib/Elastica/Test/Index/StatsTest.php | 24 + .../test/lib/Elastica/Test/Index/StatusTest.php | 74 + .../elastica/test/lib/Elastica/Test/IndexTest.php | 901 +++ .../elastica/test/lib/Elastica/Test/LogTest.php | 196 + .../test/lib/Elastica/Test/Multi/SearchTest.php | 575 ++ .../test/lib/Elastica/Test/Node/InfoTest.php | 79 + .../elastica/test/lib/Elastica/Test/NodeTest.php | 75 + .../elastica/test/lib/Elastica/Test/ParamTest.php | 115 + .../test/lib/Elastica/Test/PercolatorTest.php | 328 ++ .../test/lib/Elastica/Test/Query/BoolQueryTest.php | 171 + .../test/lib/Elastica/Test/Query/BoostingTest.php | 89 + .../test/lib/Elastica/Test/Query/BuilderTest.php | 273 + .../test/lib/Elastica/Test/Query/CommonTest.php | 63 + .../lib/Elastica/Test/Query/ConstantScoreTest.php | 162 + .../test/lib/Elastica/Test/Query/DisMaxTest.php | 84 + .../lib/Elastica/Test/Query/EscapeStringTest.php | 36 + .../test/lib/Elastica/Test/Query/FilteredTest.php | 124 + .../lib/Elastica/Test/Query/FunctionScoreTest.php | 324 ++ .../lib/Elastica/Test/Query/FuzzyLikeThisTest.php | 300 + .../test/lib/Elastica/Test/Query/FuzzyTest.php | 136 + .../test/lib/Elastica/Test/Query/HasChildTest.php | 117 + .../test/lib/Elastica/Test/Query/HasParentTest.php | 108 + .../test/lib/Elastica/Test/Query/HighlightTest.php | 48 + .../test/lib/Elastica/Test/Query/IdsTest.php | 187 + .../test/lib/Elastica/Test/Query/ImageTest.php | 159 + .../test/lib/Elastica/Test/Query/MatchAllTest.php | 49 + .../test/lib/Elastica/Test/Query/MatchTest.php | 339 ++ .../lib/Elastica/Test/Query/MoreLikeThisTest.php | 240 + .../lib/Elastica/Test/Query/MultiMatchTest.php | 214 + .../test/lib/Elastica/Test/Query/NestedTest.php | 30 + .../lib/Elastica/Test/Query/PostFilterTest.php | 64 + .../test/lib/Elastica/Test/Query/PrefixTest.php | 27 + .../lib/Elastica/Test/Query/QueryStringTest.php | 189 + .../test/lib/Elastica/Test/Query/RangeTest.php | 79 + .../test/lib/Elastica/Test/Query/RegexpTest.php | 31 + .../test/lib/Elastica/Test/Query/RescoreTest.php | 236 + .../Elastica/Test/Query/SimpleQueryStringTest.php | 103 + .../test/lib/Elastica/Test/Query/SimpleTest.php | 19 + .../test/lib/Elastica/Test/Query/TermTest.php | 27 + .../test/lib/Elastica/Test/Query/TermsTest.php | 65 + .../test/lib/Elastica/Test/Query/WildcardTest.php | 106 + .../Test/QueryBuilder/DSL/AbstractDSLTest.php | 97 + .../Test/QueryBuilder/DSL/AggregationTest.php | 58 + .../Elastica/Test/QueryBuilder/DSL/FilterTest.php | 58 + .../Elastica/Test/QueryBuilder/DSL/QueryTest.php | 85 + .../Elastica/Test/QueryBuilder/DSL/SuggestTest.php | 32 + .../lib/Elastica/Test/QueryBuilder/VersionTest.php | 67 + .../test/lib/Elastica/Test/QueryBuilderTest.php | 88 + .../elastica/test/lib/Elastica/Test/QueryTest.php | 458 ++ .../test/lib/Elastica/Test/RequestTest.php | 95 + .../test/lib/Elastica/Test/ResponseTest.php | 205 + .../test/lib/Elastica/Test/ResultSetTest.php | 95 + .../elastica/test/lib/Elastica/Test/ResultTest.php | 131 + .../test/lib/Elastica/Test/ScanAndScrollTest.php | 78 + .../test/lib/Elastica/Test/ScriptFieldsTest.php | 93 + .../elastica/test/lib/Elastica/Test/ScriptTest.php | 169 + .../elastica/test/lib/Elastica/Test/ScrollTest.php | 105 + .../elastica/test/lib/Elastica/Test/SearchTest.php | 647 +++ .../test/lib/Elastica/Test/ShutdownTest.php | 74 + .../test/lib/Elastica/Test/SnapshotTest.php | 109 + .../elastica/test/lib/Elastica/Test/StatusTest.php | 133 + .../lib/Elastica/Test/Suggest/CompletionTest.php | 140 + .../test/lib/Elastica/Test/Suggest/PhraseTest.php | 82 + .../test/lib/Elastica/Test/Suggest/TermTest.php | 105 + .../test/lib/Elastica/Test/Tool/CrossIndexTest.php | 135 + .../Test/Transport/AbstractTransportTest.php | 80 + .../lib/Elastica/Test/Transport/GuzzleTest.php | 180 + .../test/lib/Elastica/Test/Transport/HttpTest.php | 246 + .../lib/Elastica/Test/Transport/MemcacheTest.php | 176 + .../Elastica/Test/Transport/NullTransportTest.php | 96 + .../lib/Elastica/Test/Transport/ThriftTest.php | 135 + .../Test/Transport/TransportBenchmarkTest.php | 261 + .../test/lib/Elastica/Test/Type/MappingTest.php | 331 ++ .../elastica/test/lib/Elastica/Test/TypeTest.php | 968 ++++ .../elastica/test/lib/Elastica/Test/UtilTest.php | 139 + vendor/ruflin/elastica/test/phpunit.xhprof.xml | 39 + vendor/ruflin/elastica/test/phpunit.xml.dist | 27 + vendor/symfony/process/CHANGELOG.md | 40 + .../process/Exception/ExceptionInterface.php | 21 + .../process/Exception/InvalidArgumentException.php | 21 + .../symfony/process/Exception/LogicException.php | 21 + .../process/Exception/ProcessFailedException.php | 53 + .../process/Exception/ProcessTimedOutException.php | 69 + .../symfony/process/Exception/RuntimeException.php | 21 + vendor/symfony/process/ExecutableFinder.php | 89 + vendor/symfony/process/LICENSE | 19 + vendor/symfony/process/PhpExecutableFinder.php | 86 + vendor/symfony/process/PhpProcess.php | 71 + vendor/symfony/process/Pipes/AbstractPipes.php | 74 + vendor/symfony/process/Pipes/PipesInterface.php | 60 + vendor/symfony/process/Pipes/UnixPipes.php | 214 + vendor/symfony/process/Pipes/WindowsPipes.php | 254 + vendor/symfony/process/Process.php | 1526 +++++ vendor/symfony/process/ProcessBuilder.php | 287 + vendor/symfony/process/ProcessUtils.php | 115 + vendor/symfony/process/README.md | 51 + .../symfony/process/Tests/AbstractProcessTest.php | 1205 ++++ .../symfony/process/Tests/ExecutableFinderTest.php | 149 + .../symfony/process/Tests/NonStopableProcess.php | 36 + .../process/Tests/PhpExecutableFinderTest.php | 97 + vendor/symfony/process/Tests/PhpProcessTest.php | 49 + .../Tests/PipeStdinInStdoutStdErrStreamSelect.php | 63 + .../symfony/process/Tests/ProcessBuilderTest.php | 225 + .../process/Tests/ProcessFailedExceptionTest.php | 136 + .../process/Tests/ProcessInSigchildEnvironment.php | 22 + vendor/symfony/process/Tests/ProcessUtilsTest.php | 48 + .../process/Tests/SigchildDisabledProcessTest.php | 263 + .../process/Tests/SigchildEnabledProcessTest.php | 148 + vendor/symfony/process/Tests/SignalListener.php | 16 + vendor/symfony/process/Tests/SimpleProcessTest.php | 222 + vendor/symfony/process/composer.json | 33 + vendor/symfony/process/phpunit.xml.dist | 27 + vendor/wikimedia/assert/COPYING | 21 + vendor/wikimedia/assert/README.md | 43 + vendor/wikimedia/assert/composer.json | 24 + vendor/wikimedia/assert/phpunit.xml.dist | 27 + vendor/wikimedia/assert/src/Assert.php | 204 + vendor/wikimedia/assert/src/AssertionException.php | 16 + vendor/wikimedia/assert/src/InvariantException.php | 18 + .../assert/src/ParameterAssertionException.php | 49 + .../assert/src/ParameterElementTypeException.php | 43 + .../assert/src/ParameterTypeException.php | 43 + .../assert/src/PostconditionException.php | 18 + .../wikimedia/assert/src/PreconditionException.php | 17 + .../wikimedia/assert/tests/phpunit/AssertTest.php | 156 + vendor/wikimedia/avro/LICENSE.txt | 308 + vendor/wikimedia/avro/NOTICE.txt | 9 + vendor/wikimedia/avro/README.md | 23 + vendor/wikimedia/avro/lib/avro.php | 195 + vendor/wikimedia/avro/lib/avro/data_file.php | 535 ++ vendor/wikimedia/avro/lib/avro/datum.php | 984 ++++ vendor/wikimedia/avro/lib/avro/debug.php | 194 + vendor/wikimedia/avro/lib/avro/gmp.php | 222 + vendor/wikimedia/avro/lib/avro/io.php | 494 ++ vendor/wikimedia/avro/lib/avro/protocol.php | 86 + vendor/wikimedia/avro/lib/avro/schema.php | 1457 +++++ vendor/wikimedia/avro/lib/avro/util.php | 67 + vendor/wikimedia/cdb/COPYING | 183 +- vendor/wikimedia/cdb/Doxyfile | 32 - vendor/wikimedia/cdb/README.md | 31 +- vendor/wikimedia/cdb/composer.json | 26 - vendor/wikimedia/cdb/doc/README | 1 - vendor/wikimedia/cdb/src/Reader.php | 17 + vendor/wikimedia/cdb/src/Reader/DBA.php | 13 + vendor/wikimedia/cdb/src/Reader/PHP.php | 286 +- vendor/wikimedia/cdb/src/Writer.php | 2 +- vendor/wikimedia/cdb/src/Writer/DBA.php | 1 + vendor/wikimedia/cdb/src/Writer/PHP.php | 1 + vendor/wikimedia/cdb/test/CdbTest.php | 95 - vendor/wikimedia/composer-merge-plugin/.arcconfig | 6 + vendor/wikimedia/composer-merge-plugin/.arclint | 13 + vendor/wikimedia/composer-merge-plugin/LICENSE | 2 +- vendor/wikimedia/composer-merge-plugin/README.md | 133 +- .../wikimedia/composer-merge-plugin/composer.json | 18 +- .../wikimedia/composer-merge-plugin/src/Logger.php | 102 + .../src/Merge/ExtraPackage.php | 487 ++ .../src/Merge/MissingFileException.php | 18 + .../src/Merge/PluginState.php | 327 ++ .../src/Merge/StabilityFlags.php | 181 + .../composer-merge-plugin/src/MergePlugin.php | 427 +- vendor/wikimedia/ip-set/COPYING | 339 ++ vendor/wikimedia/ip-set/README.md | 83 + vendor/wikimedia/ip-set/src/IPSet.php | 284 + vendor/wikimedia/utfnormal/COPYING | 342 ++ vendor/wikimedia/utfnormal/Doxyfile | 32 + vendor/wikimedia/wrappedstring/LICENSE | 19 + vendor/wikimedia/wrappedstring/README.md | 24 + .../wikimedia/wrappedstring/src/WrappedString.php | 110 + vendor/zordius/lightncandy/HISTORY.md | 180 +- vendor/zordius/lightncandy/LICENSE.txt | 2 +- vendor/zordius/lightncandy/README.md | 91 +- vendor/zordius/lightncandy/UPGRADE.md | 4 + vendor/zordius/lightncandy/build/gen_doc | 2 +- vendor/zordius/lightncandy/src/lightncandy.php | 540 +- vendor/zordius/lightncandy/tests/LCRun3Test.php | 18 +- .../zordius/lightncandy/tests/LightnCandyTest.php | 159 +- vendor/zordius/lightncandy/tests/contextTest.php | 300 + vendor/zordius/lightncandy/tests/errorTest.php | 23 +- .../zordius/lightncandy/tests/helpers_for_test.php | 12 +- .../zordius/lightncandy/tests/regressionTest.php | 609 ++ 6321 files changed, 253887 insertions(+), 187373 deletions(-) delete mode 100644 RELEASE-NOTES-1.25 create mode 100644 RELEASE-NOTES-1.26 create mode 100644 Rakefile delete mode 100644 composer.lock create mode 100644 extensions/Cite/CiteCSSFileModule.php create mode 100644 extensions/Cite/composer.json create mode 100644 extensions/Cite/i18n/ady-cyrl.json create mode 100644 extensions/Cite/i18n/av.json create mode 100644 extensions/Cite/i18n/awa.json create mode 100644 extensions/Cite/i18n/be.json create mode 100644 extensions/Cite/i18n/bho.json create mode 100644 extensions/Cite/i18n/dty.json create mode 100644 extensions/Cite/i18n/gom-latn.json create mode 100644 extensions/Cite/i18n/khw.json create mode 100644 extensions/Cite/i18n/ku-latn.json create mode 100644 extensions/Cite/i18n/luz.json create mode 100644 extensions/Cite/i18n/mzn.json create mode 100644 extensions/Cite/i18n/olo.json create mode 100644 extensions/Cite/i18n/sco.json create mode 100644 extensions/Cite/i18n/sgs.json create mode 100644 extensions/Cite/i18n/szl.json create mode 100644 extensions/Cite/i18n/vro.json create mode 100644 extensions/Cite/i18n/wuu.json create mode 100644 extensions/Cite/i18n/xmf.json create mode 100644 extensions/Cite/modules/ext.cite.a11y.css create mode 100644 extensions/Cite/modules/ext.cite.a11y.js delete mode 100644 extensions/Cite/modules/ext.cite.css delete mode 100644 extensions/Cite/modules/ext.cite.js create mode 100644 extensions/Cite/modules/ext.cite.print.css create mode 100644 extensions/Cite/modules/ext.cite.style.css create mode 100644 extensions/Cite/modules/ext.cite.style.fa.css create mode 100644 extensions/Cite/modules/ext.cite.styles.css delete mode 100644 extensions/Cite/modules/ext.rtlcite.css create mode 100644 extensions/CiteThisPage/Gruntfile.js create mode 100644 extensions/CiteThisPage/composer.json create mode 100644 extensions/CiteThisPage/i18n/ady-cyrl.json create mode 100644 extensions/CiteThisPage/i18n/aeb-latn.json create mode 100644 extensions/CiteThisPage/i18n/ang.json create mode 100644 extensions/CiteThisPage/i18n/dty.json create mode 100644 extensions/CiteThisPage/i18n/en-gb.json create mode 100644 extensions/CiteThisPage/i18n/gom-latn.json create mode 100644 extensions/CiteThisPage/i18n/khw.json create mode 100644 extensions/CiteThisPage/i18n/luz.json create mode 100644 extensions/CiteThisPage/i18n/mzn.json create mode 100644 extensions/CiteThisPage/i18n/olo.json create mode 100644 extensions/CiteThisPage/i18n/prs.json create mode 100644 extensions/CiteThisPage/i18n/sco.json create mode 100644 extensions/CiteThisPage/i18n/vro.json create mode 100644 extensions/CiteThisPage/i18n/war.json create mode 100644 extensions/CiteThisPage/i18n/wo.json create mode 100644 extensions/CiteThisPage/i18n/xmf.json create mode 100644 extensions/ConfirmEdit/CHANGELOG.md create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/ady-cyrl.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/av.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/bho.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/dty.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/gd.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/gom-latn.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/luz.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/mg.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/mzn.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/olo.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/sco.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/sgs.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/shn.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/war.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/wo.json create mode 100644 extensions/ConfirmEdit/FancyCaptcha/i18n/wuu.json create mode 100644 extensions/ConfirmEdit/Gruntfile.js delete mode 100644 extensions/ConfirmEdit/README create mode 100644 extensions/ConfirmEdit/README.md create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha.php create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json create mode 100644 extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json create mode 100644 extensions/ConfirmEdit/composer.json create mode 100644 extensions/ConfirmEdit/extension.json create mode 100644 extensions/ConfirmEdit/i18n/ady-cyrl.json create mode 100644 extensions/ConfirmEdit/i18n/dty.json create mode 100644 extensions/ConfirmEdit/i18n/gd.json create mode 100644 extensions/ConfirmEdit/i18n/glk.json create mode 100644 extensions/ConfirmEdit/i18n/gom-latn.json create mode 100644 extensions/ConfirmEdit/i18n/hrx.json create mode 100644 extensions/ConfirmEdit/i18n/luz.json create mode 100644 extensions/ConfirmEdit/i18n/mzn.json create mode 100644 extensions/ConfirmEdit/i18n/olo.json create mode 100644 extensions/ConfirmEdit/i18n/shy-latn.json create mode 100644 extensions/ConfirmEdit/i18n/tt-cyrl.json create mode 100644 extensions/ConfirmEdit/i18n/war.json create mode 100644 extensions/ConfirmEdit/i18n/wo.json create mode 100644 extensions/ConfirmEdit/i18n/wuu.json create mode 100644 extensions/ConfirmEdit/i18n/xmf.json create mode 100644 extensions/Gadgets/Gadgets.namespaces.php create mode 100644 extensions/Gadgets/Gruntfile.js create mode 100644 extensions/Gadgets/composer.json create mode 100644 extensions/Gadgets/i18n/bho.json create mode 100644 extensions/Gadgets/i18n/cv.json create mode 100644 extensions/Gadgets/i18n/dty.json create mode 100644 extensions/Gadgets/i18n/nap.json create mode 100644 extensions/Gadgets/i18n/olo.json create mode 100644 extensions/Gadgets/i18n/shn.json create mode 100644 extensions/Gadgets/i18n/xmf.json create mode 100644 extensions/Gadgets/includes/GadgetRepo.php create mode 100644 extensions/Gadgets/includes/GadgetResourceLoaderModule.php create mode 100644 extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php create mode 100644 extensions/ImageMap/Gruntfile.js create mode 100644 extensions/ImageMap/i18n/nap.json create mode 100644 extensions/ImageMap/i18n/olo.json create mode 100644 extensions/InputBox/Gruntfile.js create mode 100644 extensions/InputBox/composer.json create mode 100644 extensions/InputBox/i18n/ady-cyrl.json create mode 100644 extensions/InputBox/i18n/anp.json create mode 100644 extensions/InputBox/i18n/awa.json create mode 100644 extensions/InputBox/i18n/bho.json create mode 100644 extensions/InputBox/i18n/din.json create mode 100644 extensions/InputBox/i18n/dty.json create mode 100644 extensions/InputBox/i18n/gom-latn.json create mode 100644 extensions/InputBox/i18n/khw.json create mode 100644 extensions/InputBox/i18n/krc.json create mode 100644 extensions/InputBox/i18n/luz.json create mode 100644 extensions/InputBox/i18n/mg.json create mode 100644 extensions/InputBox/i18n/olo.json create mode 100644 extensions/InputBox/i18n/pa.json create mode 100644 extensions/InputBox/i18n/sco.json create mode 100644 extensions/InputBox/i18n/tcy.json create mode 100644 extensions/InputBox/i18n/war.json create mode 100644 extensions/InputBox/i18n/xmf.json create mode 100644 extensions/Interwiki/Gruntfile.js create mode 100644 extensions/Interwiki/composer.json create mode 100644 extensions/Interwiki/phpcs.xml create mode 100644 extensions/LocalisationUpdate/Gruntfile.js create mode 100644 extensions/LocalisationUpdate/composer.json create mode 100644 extensions/Nuke/Gruntfile.js create mode 100644 extensions/Nuke/composer.json create mode 100644 extensions/Nuke/i18n/sa.json create mode 100644 extensions/Nuke/i18n/uz.json create mode 100644 extensions/Nuke/phpcs.xml create mode 100644 extensions/ParserFunctions/Gruntfile.js create mode 100644 extensions/ParserFunctions/composer.json create mode 100644 extensions/ParserFunctions/i18n/ady-cyrl.json create mode 100644 extensions/ParserFunctions/i18n/av.json create mode 100644 extensions/ParserFunctions/i18n/awa.json create mode 100644 extensions/ParserFunctions/i18n/be.json create mode 100644 extensions/ParserFunctions/i18n/bho.json create mode 100644 extensions/ParserFunctions/i18n/ckb.json create mode 100644 extensions/ParserFunctions/i18n/dty.json create mode 100644 extensions/ParserFunctions/i18n/ee.json create mode 100644 extensions/ParserFunctions/i18n/fo.json create mode 100644 extensions/ParserFunctions/i18n/gd.json create mode 100644 extensions/ParserFunctions/i18n/gom-latn.json create mode 100644 extensions/ParserFunctions/i18n/gu.json create mode 100644 extensions/ParserFunctions/i18n/ht.json create mode 100644 extensions/ParserFunctions/i18n/hy.json create mode 100644 extensions/ParserFunctions/i18n/khw.json create mode 100644 extensions/ParserFunctions/i18n/krc.json create mode 100644 extensions/ParserFunctions/i18n/luz.json create mode 100644 extensions/ParserFunctions/i18n/mg.json create mode 100644 extensions/ParserFunctions/i18n/mt.json create mode 100644 extensions/ParserFunctions/i18n/mzn.json create mode 100644 extensions/ParserFunctions/i18n/nan.json create mode 100644 extensions/ParserFunctions/i18n/nds-nl.json create mode 100644 extensions/ParserFunctions/i18n/olo.json create mode 100644 extensions/ParserFunctions/i18n/pa.json create mode 100644 extensions/ParserFunctions/i18n/sco.json create mode 100644 extensions/ParserFunctions/i18n/tt-cyrl.json create mode 100644 extensions/ParserFunctions/i18n/vro.json create mode 100644 extensions/ParserFunctions/i18n/war.json create mode 100644 extensions/ParserFunctions/i18n/wo.json create mode 100644 extensions/ParserFunctions/i18n/wuu.json create mode 100644 extensions/ParserFunctions/i18n/xmf.json create mode 100644 extensions/PdfHandler/Gruntfile.js create mode 100644 extensions/PdfHandler/Rakefile create mode 100644 extensions/PdfHandler/composer.json create mode 100644 extensions/PdfHandler/i18n/kk-cyrl.json create mode 100644 extensions/PdfHandler/i18n/nap.json create mode 100644 extensions/PdfHandler/i18n/ne.json create mode 100644 extensions/PdfHandler/i18n/olo.json create mode 100644 extensions/Poem/Gruntfile.js create mode 100644 extensions/Poem/LICENSE create mode 100644 extensions/Poem/composer.json create mode 100644 extensions/Renameuser/Gruntfile.js delete mode 100644 extensions/Renameuser/SpecialRenameuser.php create mode 100644 extensions/Renameuser/composer.json create mode 100644 extensions/Renameuser/phpcs.xml create mode 100644 extensions/SpamBlacklist/Gruntfile.js create mode 100644 extensions/SpamBlacklist/composer.json create mode 100644 extensions/SpamBlacklist/i18n/lt.json create mode 100644 extensions/SpamBlacklist/i18n/nap.json create mode 100644 extensions/SyntaxHighlight_GeSHi/.csslintrc create mode 100644 extensions/SyntaxHighlight_GeSHi/Gruntfile.js delete mode 100644 extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php create mode 100644 extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiVisualEditorModule.php create mode 100644 extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.compat.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php create mode 100644 extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.lexers.php create mode 100644 extensions/SyntaxHighlight_GeSHi/composer.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/BUGS delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/COPYING delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/README delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/THANKS delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/TODO delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/__filesource/fsource_geshi_core_geshi.php.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/blank.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/classtrees_geshi.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex_geshi.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/errors.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/GeSHi.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/_geshi.php.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/index.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/li_geshi.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/banner.css delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass_logo.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractMethod.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass_logo.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateMethod.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class_logo.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constant.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constructor.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Destructor.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Function.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Global.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/I.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Index.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface_logo.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/L.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lminus.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lplus.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Method.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page_logo.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass_logo.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateMethod.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateVariable.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticMethod.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticVariable.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/T.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tminus.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tplus.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Variable.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/blank.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/class_folder.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/empty.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/file.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/folder.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/function_folder.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button_disabled.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package_folder.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button_disabled.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/private_class_logo.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial_folder.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/up_button.png delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/stylesheet.css delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/packages.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/api/todolist.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/docs/phpdoc.ini delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoit.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/avisynth.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/coffeescript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/cuesheet.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/dot.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/m68k.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/magiksf.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/make.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/mapbasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/matlab.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/mirc.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/mmix.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula2.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula3.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/mpasm.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/mxml.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/standardml.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ady-cyrl.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/as.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/az.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ckb.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/fur.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ga.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/gom-deva.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/gom-latn.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/grc.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/gu.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ht.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ig.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/io.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/kk-arab.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/kk-cyrl.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/kk-latn.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/kn.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ku-latn.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/lrc.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/mg.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/nah.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/nds-nl.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/olo.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/om.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/os.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/pam.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/pdc.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/pfl.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/qu.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/shn.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/si.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ta.json create mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/tokipona.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/ur.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/vep.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/vo.json delete mode 100644 extensions/SyntaxHighlight_GeSHi/i18n/yi.json create mode 100644 extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php delete mode 100644 extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php create mode 100644 extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/pygments.generated.css create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/pygments.wrapper.css create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.css create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.js create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.dm.MWSyntaxHighlightNode.js create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.css create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.js create mode 100644 extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspectorTool.js create mode 100644 extensions/SyntaxHighlight_GeSHi/phpcs.xml create mode 100644 extensions/SyntaxHighlight_GeSHi/pygments/PYGMENTS_LICENSE create mode 100644 extensions/SyntaxHighlight_GeSHi/pygments/create_pygmentize_bundle create mode 100644 extensions/SyntaxHighlight_GeSHi/pygments/pygmentize create mode 100644 extensions/SyntaxHighlight_GeSHi/tests/parserTests.txt create mode 100644 extensions/TitleBlacklist/Gruntfile.js create mode 100644 extensions/TitleBlacklist/composer.json create mode 100644 extensions/TitleBlacklist/i18n/nap.json create mode 100644 extensions/TitleBlacklist/i18n/scn.json create mode 100644 extensions/WikiEditor/Gruntfile.js create mode 100644 extensions/WikiEditor/i18n/nap.json create mode 100644 extensions/WikiEditor/i18n/olo.json create mode 100644 extensions/WikiEditor/i18n/pam.json create mode 100644 extensions/WikiEditor/i18n/shn.json create mode 100644 extensions/WikiEditor/i18n/shy-latn.json delete mode 100644 extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js create mode 100644 extensions/WikiEditor/modules/images/toolbar/arrow-down.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/arrow-ltr.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/arrow-rtl.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/button-sprite.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-big.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-bold.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.png create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-indent.png create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-indent.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-italic-I.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-italic.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-olist-rtl.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-olist.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-small.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-subscript.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-superscript.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-ulist-rtl.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/format-ulist.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-file.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-link.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-newline.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-redirect-rtl.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-reference.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-signature.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-table.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg create mode 100644 extensions/WikiEditor/modules/images/toolbar/search-replace.svg create mode 100644 extensions/WikiEditor/modules/templates/dialogInsertFile.html create mode 100644 extensions/WikiEditor/modules/templates/dialogInsertLink.html create mode 100644 extensions/WikiEditor/modules/templates/dialogInsertReference.html create mode 100644 extensions/WikiEditor/modules/templates/dialogInsertTable.html create mode 100644 extensions/WikiEditor/modules/templates/dialogReplace.html delete mode 100644 includes/CdbCompat.php delete mode 100644 includes/ChangeTags.php delete mode 100644 includes/MessageBlobStore.php create mode 100644 includes/XmlSelect.php delete mode 100644 includes/api/ApiFormatDump.php delete mode 100644 includes/api/ApiFormatWddx.php create mode 100644 includes/api/i18n/ast.json create mode 100644 includes/api/i18n/ba.json create mode 100644 includes/api/i18n/bcl.json create mode 100644 includes/api/i18n/br.json create mode 100644 includes/api/i18n/ckb.json create mode 100644 includes/api/i18n/et.json create mode 100644 includes/api/i18n/fo.json create mode 100644 includes/api/i18n/ht.json create mode 100644 includes/api/i18n/is.json create mode 100644 includes/api/i18n/ky.json create mode 100644 includes/api/i18n/mr.json create mode 100644 includes/api/i18n/ne.json create mode 100644 includes/api/i18n/olo.json create mode 100644 includes/api/i18n/or.json create mode 100644 includes/api/i18n/shn.json create mode 100644 includes/api/i18n/sq.json create mode 100644 includes/api/i18n/ta.json create mode 100644 includes/api/i18n/wuu.json create mode 100644 includes/api/i18n/yi.json create mode 100644 includes/cache/LCStoreStaticArray.php create mode 100644 includes/cache/MessageBlobStore.php create mode 100644 includes/changetags/ChangeTags.php create mode 100644 includes/compat/CdbCompat.php create mode 100644 includes/compat/IPSetCompat.php create mode 100644 includes/compat/normal/UtfNormal.php create mode 100644 includes/compat/normal/UtfNormalDefines.php create mode 100644 includes/compat/normal/UtfNormalUtil.php create mode 100644 includes/context/MutableContext.php create mode 100644 includes/dao/DBAccessObjectUtils.php create mode 100644 includes/db/DBConnRef.php create mode 100644 includes/db/IDatabase.php create mode 100644 includes/db/LoadMonitorMySQL.php create mode 100644 includes/debug/logger/monolog/AvroFormatter.php create mode 100644 includes/debug/logger/monolog/BufferHandler.php create mode 100644 includes/debug/logger/monolog/KafkaHandler.php create mode 100644 includes/debug/logger/monolog/LineFormatter.php create mode 100644 includes/deferred/LinksDeletionUpdate.php create mode 100644 includes/filerepo/FileBackendDBRepoWrapper.php create mode 100644 includes/htmlform/HTMLFormFieldWithButton.php create mode 100644 includes/htmlform/HTMLSelectNamespaceWithButton.php create mode 100644 includes/htmlform/HTMLTextFieldWithButton.php create mode 100644 includes/htmlform/HTMLTitleTextField.php create mode 100644 includes/htmlform/HTMLUserTextField.php create mode 100644 includes/htmlform/OOUIHTMLForm.php create mode 100644 includes/installer/i18n/azb.json create mode 100644 includes/installer/i18n/olo.json create mode 100644 includes/installer/i18n/sd.json create mode 100644 includes/installer/i18n/tokipona.json create mode 100644 includes/installer/i18n/xmf.json create mode 100644 includes/jobqueue/jobs/ActivityUpdateJob.php delete mode 100644 includes/libs/IPSet.php create mode 100644 includes/libs/RiffExtractor.php create mode 100644 includes/libs/SamplingStatsdClient.php delete mode 100644 includes/libs/ScopedPHPTimeout.php create mode 100644 includes/libs/eventrelayer/EventRelayer.php create mode 100644 includes/libs/eventrelayer/EventRelayerMCRD.php delete mode 100644 includes/libs/normal/UtfNormal.php delete mode 100644 includes/libs/normal/UtfNormalDefines.php delete mode 100644 includes/libs/normal/UtfNormalUtil.php create mode 100644 includes/libs/objectcache/ReplicatedBagOStuff.php create mode 100644 includes/libs/objectcache/WANObjectCache.php create mode 100644 includes/logging/ContentModelLogFormatter.php create mode 100644 includes/logging/ProtectLogFormatter.php create mode 100644 includes/media/WebP.php create mode 100644 includes/media/tinyrgb.icc create mode 100644 includes/password/PasswordPolicyChecks.php create mode 100644 includes/password/UserPasswordPolicy.php create mode 100644 includes/registration/CoreVersionChecker.php create mode 100644 includes/resourceloader/ResourceLoaderForeignApiModule.php create mode 100644 includes/resourceloader/ResourceLoaderJqueryMsgModule.php create mode 100644 includes/resourceloader/ResourceLoaderOOUIImageModule.php create mode 100644 includes/resourceloader/ResourceLoaderRawFileModule.php create mode 100644 includes/specials/SpecialChangeContentModel.php delete mode 100644 includes/tidy.conf create mode 100644 includes/tidy/Html5Depurate.php create mode 100644 includes/tidy/RaggettBase.php create mode 100644 includes/tidy/RaggettExternal.php create mode 100644 includes/tidy/RaggettInternalHHVM.php create mode 100644 includes/tidy/RaggettInternalPHP.php create mode 100644 includes/tidy/RaggettWrapper.php create mode 100644 includes/tidy/TidyDriverBase.php create mode 100644 includes/tidy/tidy.conf create mode 100644 includes/utils/AvroValidator.php create mode 100644 includes/utils/BatchRowIterator.php create mode 100644 includes/utils/BatchRowUpdate.php create mode 100644 includes/utils/BatchRowWriter.php delete mode 100644 includes/utils/MWFunction.php create mode 100644 includes/utils/RowUpdateGenerator.php create mode 100644 includes/utils/iterators/IteratorDecorator.php create mode 100644 includes/utils/iterators/NotRecursiveIterator.php create mode 100644 includes/widget/AUTHORS.txt create mode 100644 includes/widget/ComplexNamespaceInputWidget.php create mode 100644 includes/widget/ComplexTitleInputWidget.php create mode 100644 includes/widget/LICENSE.txt create mode 100644 includes/widget/NamespaceInputWidget.php create mode 100644 includes/widget/TitleInputWidget.php create mode 100644 includes/widget/UserInputWidget.php create mode 100644 languages/i18n/ady-cyrl.json create mode 100644 languages/i18n/aeb-arab.json create mode 100644 languages/i18n/aeb-latn.json delete mode 100644 languages/i18n/aeb.json create mode 100644 languages/i18n/ase.json create mode 100644 languages/i18n/dty.json create mode 100644 languages/i18n/gom-deva.json create mode 100644 languages/i18n/luz.json create mode 100644 languages/i18n/olo.json create mode 100644 languages/i18n/sdh.json create mode 100644 languages/messages/MessagesAdy.php create mode 100644 languages/messages/MessagesAdy_cyrl.php create mode 100644 languages/messages/MessagesAeb_arab.php create mode 100644 languages/messages/MessagesDty.php create mode 100644 languages/messages/MessagesGom.php create mode 100644 languages/messages/MessagesGom_deva.php create mode 100644 languages/messages/MessagesLuz.php create mode 100644 languages/messages/MessagesOlo.php create mode 100644 languages/messages/MessagesSdh.php delete mode 100644 maintenance/deleteArchivedFiles.inc delete mode 100644 maintenance/deleteArchivedRevisions.inc delete mode 100644 maintenance/deleteImageMemcached.php create mode 100644 maintenance/fixDefaultJsonContentPages.php delete mode 100644 maintenance/fixSlaveDesync.php create mode 100644 maintenance/migrateFileRepoLayout.php create mode 100644 maintenance/populateContentModel.php create mode 100644 maintenance/postgres/archives/patch-textsearch_bug66650.sql create mode 100644 mw-config/images/help-question-hover.gif create mode 100644 mw-config/images/help-question.gif delete mode 100644 mw-config/index.php5 create mode 100644 phpcs.xml create mode 100644 resources/ResourcesOOUI.php create mode 100644 resources/lib/jquery.i18n/CREDITS create mode 100644 resources/lib/jquery.i18n/GPL-LICENSE create mode 100644 resources/lib/jquery.i18n/MIT-LICENSE create mode 100644 resources/lib/jquery.i18n/README.md create mode 100644 resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js create mode 100644 resources/lib/jquery.i18n/src/jquery.i18n.emitter.js create mode 100644 resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js create mode 100644 resources/lib/jquery.i18n/src/jquery.i18n.js create mode 100644 resources/lib/jquery.i18n/src/jquery.i18n.language.js create mode 100644 resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js create mode 100644 resources/lib/jquery.i18n/src/jquery.i18n.parser.js create mode 100644 resources/lib/jquery.i18n/src/languages/bs.js create mode 100644 resources/lib/jquery.i18n/src/languages/dsb.js create mode 100644 resources/lib/jquery.i18n/src/languages/fi.js create mode 100644 resources/lib/jquery.i18n/src/languages/ga.js create mode 100644 resources/lib/jquery.i18n/src/languages/he.js create mode 100644 resources/lib/jquery.i18n/src/languages/hsb.js create mode 100644 resources/lib/jquery.i18n/src/languages/hu.js create mode 100644 resources/lib/jquery.i18n/src/languages/hy.js create mode 100644 resources/lib/jquery.i18n/src/languages/la.js create mode 100644 resources/lib/jquery.i18n/src/languages/ml.js create mode 100644 resources/lib/jquery.i18n/src/languages/os.js create mode 100644 resources/lib/jquery.i18n/src/languages/ru.js create mode 100644 resources/lib/jquery.i18n/src/languages/sl.js create mode 100644 resources/lib/jquery.i18n/src/languages/uk.js create mode 100644 resources/lib/mustache/LICENSE create mode 100644 resources/lib/oojs-ui/i18n/as.json create mode 100644 resources/lib/oojs-ui/i18n/dty.json create mode 100644 resources/lib/oojs-ui/i18n/en-ca.json create mode 100644 resources/lib/oojs-ui/i18n/glk.json create mode 100644 resources/lib/oojs-ui/i18n/hrx.json create mode 100644 resources/lib/oojs-ui/i18n/hu-formal.json create mode 100644 resources/lib/oojs-ui/i18n/krl.json create mode 100644 resources/lib/oojs-ui/i18n/la.json create mode 100644 resources/lib/oojs-ui/i18n/li.json create mode 100644 resources/lib/oojs-ui/i18n/luz.json create mode 100644 resources/lib/oojs-ui/i18n/olo.json create mode 100644 resources/lib/oojs-ui/i18n/sa.json create mode 100644 resources/lib/oojs-ui/i18n/su.json create mode 100644 resources/lib/oojs-ui/i18n/xmf.json create mode 100644 resources/lib/oojs-ui/oojs-ui-apex-noimages.css create mode 100644 resources/lib/oojs-ui/oojs-ui-apex.js delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css delete mode 100644 resources/lib/oojs-ui/oojs-ui-mediawiki.css create mode 100644 resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json create mode 100644 resources/lib/oojs-ui/themes/apex/icons-editing-core.json create mode 100644 resources/lib/oojs-ui/themes/apex/icons-editing-list.json create mode 100644 resources/lib/oojs-ui/themes/apex/icons-editing-styling.json create mode 100644 resources/lib/oojs-ui/themes/apex/icons-moderation.json create mode 100644 resources/lib/oojs-ui/themes/apex/icons-movement.json create mode 100644 resources/lib/oojs-ui/themes/apex/icons.json create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/add.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/add.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/advanced.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/advanced.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/alert.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/alert.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/align-center.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/align-center.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/block.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/block.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-a.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-a.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-b.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-b.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-f.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-f.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-g.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-l.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-l.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-n.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-n.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-v.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/bold-v.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/cancel.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/cancel.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caret-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caret-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caretDown.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caretDown.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caretUp.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/caretUp.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/check.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/check.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/circle.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/circle.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/close.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/close.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/code.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/code.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/collapse.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/collapse.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/comment.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/comment.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/expand.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/expand.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/history.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/history.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/info.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/info.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/insert.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/insert.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-a.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-a.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-c.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-d.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-e.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-i.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-k.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-k.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/italic-s.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/language.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/language.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/link.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/link.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/lock.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/lock.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/menu.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/menu.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/move.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/move.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/notice.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/notice.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/picture.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/picture.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/redirect-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/redirect-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/redirect-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/redirect-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/remove.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/remove.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/search.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/search.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/secure-link.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/settings.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/settings.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/star.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/star.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-caption.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-caption.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/table.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/tag.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/tag.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/text-style.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/text-style.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/translation-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/translation-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/translation-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/translation-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/trash.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/trash.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/unStar.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/unStar.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/underline-a.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/underline-u.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/wikiText.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/wikiText.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/window.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/icons/window.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/alert.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/clear.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/clear.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/required.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/required.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/textures/pending.gif create mode 100644 resources/lib/oojs-ui/themes/apex/images/textures/transparency.png create mode 100644 resources/lib/oojs-ui/themes/apex/images/textures/transparency.svg create mode 100644 resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png create mode 100644 resources/lib/oojs-ui/themes/apex/indicators.json create mode 100644 resources/lib/oojs-ui/themes/apex/textures.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-accessibility.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-alerts.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-content.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-editing-list.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-layout.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-location.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-media.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-movement.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-user.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons-wikimedia.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/icons.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.svg delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png delete mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png create mode 100644 resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.svg create mode 100644 resources/lib/oojs-ui/themes/mediawiki/indicators.json create mode 100644 resources/lib/oojs-ui/themes/mediawiki/textures.json create mode 100644 resources/lib/phpjs-sha1/LICENSE.txt create mode 100644 resources/lib/phpjs-sha1/sha1.js delete mode 100644 resources/lib/sinonjs/sinon-1.10.3.js create mode 100644 resources/lib/sinonjs/sinon-1.15.4.js delete mode 100644 resources/lib/sinonjs/sinon-ie-1.10.3.js create mode 100644 resources/lib/sinonjs/sinon-ie-1.15.4.js create mode 100644 resources/src/dom-level2-skip.js create mode 100644 resources/src/mediawiki.action/images/checker.png create mode 100644 resources/src/mediawiki.action/mediawiki.action.view.filepage.css create mode 100644 resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css create mode 100644 resources/src/mediawiki.api/mediawiki.ForeignApi.js create mode 100644 resources/src/mediawiki.api/mediawiki.api.upload.js delete mode 100644 resources/src/mediawiki.legacy/ajax.js delete mode 100644 resources/src/mediawiki.legacy/images/checker.png delete mode 100644 resources/src/mediawiki.legacy/images/feed-icon.png delete mode 100644 resources/src/mediawiki.legacy/images/feed-icon.svg delete mode 100644 resources/src/mediawiki.legacy/images/question.png delete mode 100644 resources/src/mediawiki.legacy/images/question.svg create mode 100644 resources/src/mediawiki.page/mediawiki.page.gallery.css create mode 100644 resources/src/mediawiki.page/mediawiki.page.gallery.print.css create mode 100644 resources/src/mediawiki.special/mediawiki.special.movePage.css delete mode 100644 resources/src/mediawiki.special/mediawiki.special.userlogin.common.js delete mode 100644 resources/src/mediawiki.ui/components/images/ok.png delete mode 100644 resources/src/mediawiki.ui/components/images/ok.svg create mode 100644 resources/src/mediawiki.widgets/AUTHORS.txt create mode 100644 resources/src/mediawiki.widgets/LICENSE.txt create mode 100644 resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less create mode 100644 resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css create mode 100644 resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css create mode 100644 resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less create mode 100644 resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.css create mode 100644 resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js create mode 100644 resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js create mode 100644 resources/src/mediawiki/images/feed-icon.png create mode 100644 resources/src/mediawiki/images/feed-icon.svg create mode 100644 resources/src/mediawiki/images/question.png create mode 100644 resources/src/mediawiki/images/question.svg create mode 100644 resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.css create mode 100644 resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js create mode 100644 resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js create mode 100644 resources/src/mediawiki/mediawiki.ForeignUpload.js create mode 100644 resources/src/mediawiki/mediawiki.RegExp.js create mode 100644 resources/src/mediawiki/mediawiki.Upload.BookletLayout.js create mode 100644 resources/src/mediawiki/mediawiki.Upload.Dialog.js create mode 100644 resources/src/mediawiki/mediawiki.Upload.js create mode 100644 resources/src/mediawiki/mediawiki.Uri.loose.regexp create mode 100644 resources/src/mediawiki/mediawiki.Uri.strict.regexp create mode 100644 resources/src/mediawiki/mediawiki.experiments.js create mode 100644 resources/src/mediawiki/mediawiki.feedlink.css create mode 100644 resources/src/mediawiki/mediawiki.htmlform.css create mode 100644 resources/src/mediawiki/mediawiki.htmlform.ooui.css create mode 100644 resources/src/mediawiki/mediawiki.notification.common.css delete mode 100644 resources/src/mediawiki/mediawiki.startUp.js create mode 100644 resources/src/mediawiki/mediawiki.storage.js create mode 100644 resources/src/mediawiki/mediawiki.template.regexp.js create mode 100644 resources/src/moment-local-dmy.js create mode 100644 resources/src/oojs-ui-local.css create mode 100644 resources/src/polyfill-nodeTypes.js create mode 100644 skins/ArchLinux/Gruntfile.js create mode 100644 skins/ArchLinux/composer.json create mode 100644 skins/CologneBlue/Gruntfile.js create mode 100644 skins/CologneBlue/composer.json create mode 100644 skins/CologneBlue/i18n/arq.json create mode 100644 skins/CologneBlue/i18n/ilo.json create mode 100644 skins/Modern/Gruntfile.js create mode 100644 skins/Modern/composer.json create mode 100644 skins/Modern/i18n/arq.json create mode 100644 skins/Modern/i18n/fo.json create mode 100644 skins/MonoBook/Gruntfile.js create mode 100644 skins/MonoBook/composer.json create mode 100644 skins/MonoBook/i18n/arq.json create mode 100644 skins/MonoBook/i18n/dty.json create mode 100644 skins/MonoBook/i18n/fo.json create mode 100644 skins/Vector/Gruntfile.js create mode 100644 skins/Vector/i18n/aeb-latn.json create mode 100644 skins/Vector/i18n/din.json create mode 100644 skins/Vector/i18n/dty.json create mode 100644 skins/Vector/i18n/eml.json create mode 100644 skins/Vector/i18n/glk.json create mode 100644 skins/Vector/i18n/jut.json create mode 100644 skins/Vector/i18n/kea.json create mode 100644 skins/Vector/i18n/olo.json create mode 100644 skins/Vector/i18n/prs.json create mode 100644 skins/Vector/i18n/shy-latn.json create mode 100644 skins/Vector/phpcs.xml create mode 100644 skins/Vector/responsive.less create mode 100644 skins/Vector/skinStyles/ooui.less create mode 100644 tests/phpunit/data/css/comments.css create mode 100644 tests/phpunit/data/import/ImportLinkCacheIntegrationTest.xml create mode 100644 tests/phpunit/data/media/2_webp_a.webp create mode 100644 tests/phpunit/data/media/2_webp_ll.webp create mode 100644 tests/phpunit/data/media/srgb.jpg create mode 100644 tests/phpunit/data/media/tinyrgb.icc create mode 100644 tests/phpunit/data/media/tinyrgb.jpg create mode 100644 tests/phpunit/data/media/webp_animated.webp create mode 100644 tests/phpunit/data/templates/bad_partial.mustache create mode 100644 tests/phpunit/data/templates/has_partial.mustache create mode 100644 tests/phpunit/includes/ConsecutiveParametersMatcher.php create mode 100644 tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php create mode 100644 tests/phpunit/includes/ImportLinkCacheIntegrationTest.php create mode 100644 tests/phpunit/includes/MediaWikiTest.php create mode 100644 tests/phpunit/includes/WikiMapTest.php create mode 100644 tests/phpunit/includes/WikiReferenceTest.php delete mode 100644 tests/phpunit/includes/api/format/ApiFormatDumpTest.php delete mode 100644 tests/phpunit/includes/api/format/ApiFormatWddxTest.php create mode 100644 tests/phpunit/includes/content/CssContentHandlerTest.php create mode 100644 tests/phpunit/includes/content/JavaScriptContentHandlerTest.php create mode 100644 tests/phpunit/includes/content/TextContentHandlerTest.php create mode 100644 tests/phpunit/includes/debug/logger/LegacyLoggerTest.php create mode 100644 tests/phpunit/includes/debug/logger/MonologSpiTest.php create mode 100644 tests/phpunit/includes/debug/logger/monolog/AvroFormatterTest.php create mode 100644 tests/phpunit/includes/debug/logger/monolog/KafkaHandlerTest.php create mode 100644 tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php delete mode 100644 tests/phpunit/includes/debug/logging/LegacyLoggerTest.php create mode 100644 tests/phpunit/includes/exception/HttpErrorTest.php create mode 100644 tests/phpunit/includes/filebackend/SwiftFileBackendTest.php create mode 100644 tests/phpunit/includes/filerepo/FileBackendDBRepoWrapperTest.php create mode 100644 tests/phpunit/includes/filerepo/MigrateFileRepoLayoutTest.php delete mode 100644 tests/phpunit/includes/libs/IPSetTest.php create mode 100644 tests/phpunit/includes/libs/SamplingStatsdClientTest.php create mode 100644 tests/phpunit/includes/logging/BlockLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/DeleteLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/LogFormatterTestCase.php create mode 100644 tests/phpunit/includes/logging/MergeLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/MoveLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/NewUsersLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/PageLangLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/PatrolLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/ProtectLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/RightsLogFormatterTest.php create mode 100644 tests/phpunit/includes/logging/UploadLogFormatterTest.php create mode 100644 tests/phpunit/includes/media/WebPTest.php create mode 100644 tests/phpunit/includes/objectcache/MultiWriteBagOStuffTest.php create mode 100644 tests/phpunit/includes/objectcache/ReplicatedBagOStuffTest.php create mode 100644 tests/phpunit/includes/objectcache/WANObjectCacheTest.php create mode 100644 tests/phpunit/includes/password/PasswordPolicyChecksTest.php create mode 100644 tests/phpunit/includes/password/UserPasswordPolicyTest.php create mode 100644 tests/phpunit/includes/registration/CoreVersionCheckerTest.php create mode 100644 tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php create mode 100644 tests/phpunit/includes/specials/SpecialBlankPageTest.php create mode 100644 tests/phpunit/includes/specials/SpecialPageTestBase.php create mode 100644 tests/phpunit/includes/utils/AvroValidatorTest.php create mode 100644 tests/phpunit/includes/utils/BatchRowUpdateTest.php delete mode 100644 tests/phpunit/includes/utils/MWFunctionTest.php create mode 100644 tests/phpunit/mocks/MockWebRequest.php create mode 100644 tests/phpunit/mocks/content/DummyContentForTesting.php create mode 100644 tests/phpunit/mocks/content/DummyContentHandlerForTesting.php create mode 100644 tests/phpunit/mocks/content/DummyNonTextContent.php create mode 100644 tests/phpunit/mocks/content/DummyNonTextContentHandler.php create mode 100644 tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js create mode 100644 tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js create mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js create mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js create mode 100644 tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js create mode 100644 vendor/README.md create mode 100644 vendor/composer.json create mode 100644 vendor/composer.lock create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/semver/CHANGELOG.md create mode 100644 vendor/composer/semver/LICENSE create mode 100644 vendor/composer/semver/README.md create mode 100644 vendor/composer/semver/composer.json create mode 100644 vendor/composer/semver/src/Comparator.php create mode 100644 vendor/composer/semver/src/Constraint/AbstractConstraint.php create mode 100644 vendor/composer/semver/src/Constraint/Constraint.php create mode 100644 vendor/composer/semver/src/Constraint/ConstraintInterface.php create mode 100644 vendor/composer/semver/src/Constraint/EmptyConstraint.php create mode 100644 vendor/composer/semver/src/Constraint/MultiConstraint.php create mode 100644 vendor/composer/semver/src/Semver.php create mode 100644 vendor/composer/semver/src/VersionParser.php create mode 100644 vendor/firebase/php-jwt/Authentication/JWT.php create mode 100644 vendor/firebase/php-jwt/Exceptions/BeforeValidException.php create mode 100644 vendor/firebase/php-jwt/Exceptions/ExpiredException.php create mode 100644 vendor/firebase/php-jwt/Exceptions/SignatureInvalidException.php create mode 100644 vendor/firebase/php-jwt/LICENSE create mode 100644 vendor/firebase/php-jwt/README.md create mode 100644 vendor/firebase/php-jwt/composer.json create mode 100644 vendor/firebase/php-jwt/package.xml create mode 100644 vendor/firebase/php-jwt/phpunit.xml.dist create mode 100644 vendor/firebase/php-jwt/run-tests.sh create mode 100644 vendor/firebase/php-jwt/tests/JWTTest.php create mode 100644 vendor/firebase/php-jwt/tests/autoload.php.dist create mode 100644 vendor/firebase/php-jwt/tests/bootstrap.php create mode 100644 vendor/kzykhys/pygments/README.md create mode 100644 vendor/kzykhys/pygments/composer.json create mode 100644 vendor/kzykhys/pygments/composer.lock create mode 100644 vendor/kzykhys/pygments/phpunit.xml.dist create mode 100644 vendor/kzykhys/pygments/src/KzykHys/Pygments/Pygments.php create mode 100644 vendor/kzykhys/pygments/test/KzykHys/Pygments/PygmentsTest.php create mode 100644 vendor/kzykhys/pygments/test/KzykHys/Pygments/Resources/css/default.css create mode 100644 vendor/kzykhys/pygments/test/KzykHys/Pygments/Resources/css/default.prefix.css create mode 100644 vendor/kzykhys/pygments/test/KzykHys/Pygments/Resources/example/php.php.in create mode 100644 vendor/kzykhys/pygments/test/KzykHys/Pygments/Resources/example/php.php.linenos.out create mode 100644 vendor/kzykhys/pygments/test/KzykHys/Pygments/Resources/example/php.php.out delete mode 100644 vendor/leafo/lessphp/LICENSE delete mode 100644 vendor/leafo/lessphp/Makefile delete mode 100644 vendor/leafo/lessphp/README.md delete mode 100644 vendor/leafo/lessphp/composer.json delete mode 100644 vendor/leafo/lessphp/docs/docs.md delete mode 100644 vendor/leafo/lessphp/lessc.inc.php delete mode 100644 vendor/leafo/lessphp/lessify delete mode 100644 vendor/leafo/lessphp/lessify.inc.php delete mode 100644 vendor/leafo/lessphp/package.sh delete mode 100644 vendor/leafo/lessphp/plessc delete mode 100644 vendor/leafo/lessphp/tests/ApiTest.php delete mode 100644 vendor/leafo/lessphp/tests/ErrorHandlingTest.php delete mode 100644 vendor/leafo/lessphp/tests/InputTest.php delete mode 100644 vendor/leafo/lessphp/tests/README.md delete mode 100644 vendor/leafo/lessphp/tests/bootstrap.sh delete mode 100644 vendor/leafo/lessphp/tests/inputs/accessors.less.disable delete mode 100644 vendor/leafo/lessphp/tests/inputs/arity.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/attributes.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/builtins.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/colors.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/compile_on_mixin.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/data-uri.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/directives.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/escape.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/font_family.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/guards.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/hacks.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/hi.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/ie.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/import.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/interpolation.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/keyframes.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/math.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/media.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/misc.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/mixin_functions.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/mixin_merging.less.disable delete mode 100644 vendor/leafo/lessphp/tests/inputs/mixins.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/nested.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/pattern_matching.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/scopes.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/selector_expressions.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/site_demos.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/test-imports/a.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/test-imports/b.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/test-imports/file1.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/test-imports/file2.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/test-imports/file3.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/test-imports/inner/file1.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/test-imports/inner/file2.less delete mode 100644 vendor/leafo/lessphp/tests/inputs/variables.less delete mode 100644 vendor/leafo/lessphp/tests/inputs_lessjs/mixins-args.less delete mode 100644 vendor/leafo/lessphp/tests/inputs_lessjs/mixins-named-args.less delete mode 100644 vendor/leafo/lessphp/tests/inputs_lessjs/strings.less delete mode 100644 vendor/leafo/lessphp/tests/outputs/accessors.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/arity.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/attributes.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/builtins.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/colors.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/compile_on_mixin.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/data-uri.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/directives.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/escape.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/font_family.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/guards.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/hacks.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/hi.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/ie.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/import.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/interpolation.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/keyframes.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/math.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/media.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/misc.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/mixin_functions.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/mixin_merging.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/mixins.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/nested.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/nesting.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/pattern_matching.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/scopes.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/selector_expressions.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/site_demos.css delete mode 100644 vendor/leafo/lessphp/tests/outputs/variables.css delete mode 100644 vendor/leafo/lessphp/tests/outputs_lessjs/mixins-args.css delete mode 100644 vendor/leafo/lessphp/tests/outputs_lessjs/mixins-named-args.css delete mode 100644 vendor/leafo/lessphp/tests/outputs_lessjs/strings.css delete mode 100644 vendor/leafo/lessphp/tests/sort.php create mode 100644 vendor/liuggio/statsd-php-client/CHANGELOG.md create mode 100644 vendor/liuggio/statsd-php-client/README.md delete mode 100644 vendor/liuggio/statsd-php-client/Readme.md create mode 100644 vendor/liuggio/statsd-php-client/phpunit.xml delete mode 100644 vendor/liuggio/statsd-php-client/phpunit.xml.dist create mode 100644 vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Service/StatsdService.php create mode 100644 vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Service/StatsdServiceTest.php create mode 100644 vendor/mediawiki/at-ease/COPYING create mode 100644 vendor/mediawiki/at-ease/README.md create mode 100644 vendor/mediawiki/at-ease/src/Functions.php create mode 100644 vendor/monolog/monolog/.php_cs create mode 100644 vendor/monolog/monolog/CHANGELOG.mdown create mode 100644 vendor/monolog/monolog/LICENSE create mode 100644 vendor/monolog/monolog/README.mdown create mode 100644 vendor/monolog/monolog/composer.json create mode 100644 vendor/monolog/monolog/doc/extending.md create mode 100644 vendor/monolog/monolog/doc/sockets.md create mode 100644 vendor/monolog/monolog/doc/usage.md create mode 100644 vendor/monolog/monolog/phpunit.xml.dist create mode 100644 vendor/monolog/monolog/src/Monolog/ErrorHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Logger.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Registry.php create mode 100644 vendor/monolog/monolog/tests/Monolog/ErrorHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/ChromePHPFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/ElasticaFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/FlowdockFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/GelfMessageFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/JsonFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/LogglyFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/LogstashFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/MongoDBFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/ScalarFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Formatter/WildfireFormatterTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/AbstractHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/AbstractProcessingHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/AmqpHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/BrowserConsoleHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/BufferHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/CouchDBHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/DynamoDbHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/ElasticSearchHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/ErrorLogHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/FilterHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/FingersCrossedHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/FleepHookHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerLegacyTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/GelfMockMessagePublisher.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/GroupHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/LogEntriesHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/MailHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/MockRavenClient.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/NativeMailerHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/NullHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/PHPConsoleHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/PsrHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/RavenHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/RedisHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/RotatingFileHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/SamplingHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/SocketHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/StreamHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/SyslogHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/SyslogUdpHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/TestHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/UdpSocketTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Handler/ZendMonitorHandlerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/LoggerTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/GitProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/MemoryUsageProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/ProcessIdProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/PsrLogMessageProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/TagProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/UidProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/Processor/WebProcessorTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/PsrLogCompatTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/RegistryTest.php create mode 100644 vendor/monolog/monolog/tests/Monolog/TestCase.php create mode 100644 vendor/nmred/kafka-php/LICENSE create mode 100644 vendor/nmred/kafka-php/README.md create mode 100644 vendor/nmred/kafka-php/src/Kafka/Client.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/ClusterMetaData.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Consumer.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception/NotSupported.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception/OutOfRange.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception/Protocol.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception/Socket.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception/SocketConnect.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception/SocketEOF.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Exception/SocketTimeout.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Log.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/MetaDataFromKafka.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Offset.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Produce.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Decoder.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Encoder.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Helper/CommitOffset.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Helper/Consumer.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Helper/FreeStream.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Helper/Helper.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Helper/HelperAbstract.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Message.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/MessageSet.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Partition.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Fetch/Topic.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Protocol/Protocol.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/Socket.php create mode 100644 vendor/nmred/kafka-php/src/Kafka/ZooKeeper.php delete mode 100644 vendor/oojs/oojs-ui/.csscomb.json delete mode 100644 vendor/oojs/oojs-ui/.csslintrc delete mode 100644 vendor/oojs/oojs-ui/.npmignore delete mode 100644 vendor/oojs/oojs-ui/Doxyfile delete mode 100644 vendor/oojs/oojs-ui/Gruntfile.js delete mode 100644 vendor/oojs/oojs-ui/build/banner.txt delete mode 100644 vendor/oojs/oojs-ui/build/modules.json delete mode 100644 vendor/oojs/oojs-ui/build/tasks/colorize-svg.js delete mode 100644 vendor/oojs/oojs-ui/build/tasks/typos.js delete mode 100644 vendor/oojs/oojs-ui/build/typos.json delete mode 100644 vendor/oojs/oojs-ui/composer.json create mode 100644 vendor/oojs/oojs-ui/i18n/as.json create mode 100644 vendor/oojs/oojs-ui/i18n/dty.json create mode 100644 vendor/oojs/oojs-ui/i18n/en-ca.json create mode 100644 vendor/oojs/oojs-ui/i18n/glk.json create mode 100644 vendor/oojs/oojs-ui/i18n/hrx.json create mode 100644 vendor/oojs/oojs-ui/i18n/hu-formal.json create mode 100644 vendor/oojs/oojs-ui/i18n/krl.json create mode 100644 vendor/oojs/oojs-ui/i18n/la.json create mode 100644 vendor/oojs/oojs-ui/i18n/li.json create mode 100644 vendor/oojs/oojs-ui/i18n/luz.json create mode 100644 vendor/oojs/oojs-ui/i18n/olo.json create mode 100644 vendor/oojs/oojs-ui/i18n/sa.json create mode 100644 vendor/oojs/oojs-ui/i18n/su.json create mode 100644 vendor/oojs/oojs-ui/i18n/xmf.json delete mode 100644 vendor/oojs/oojs-ui/jsduck.categories.json delete mode 100644 vendor/oojs/oojs-ui/jsduck.eg-iframe.html delete mode 100644 vendor/oojs/oojs-ui/jsduck.external.js delete mode 100644 vendor/oojs/oojs-ui/jsduck.json delete mode 100644 vendor/oojs/oojs-ui/php/elements/ButtonElement.php delete mode 100644 vendor/oojs/oojs-ui/php/elements/FlaggedElement.php delete mode 100644 vendor/oojs/oojs-ui/php/elements/GroupElement.php delete mode 100644 vendor/oojs/oojs-ui/php/elements/IconElement.php delete mode 100644 vendor/oojs/oojs-ui/php/elements/IndicatorElement.php delete mode 100644 vendor/oojs/oojs-ui/php/elements/LabelElement.php delete mode 100644 vendor/oojs/oojs-ui/php/elements/TabIndexedElement.php delete mode 100644 vendor/oojs/oojs-ui/php/elements/TitledElement.php create mode 100644 vendor/oojs/oojs-ui/php/layouts/ActionFieldLayout.php create mode 100644 vendor/oojs/oojs-ui/php/layouts/HorizontalLayout.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/AccessKeyedElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/ButtonElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/FlaggedElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/GroupElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/IconElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/IndicatorElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/LabelElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/TabIndexedElement.php create mode 100644 vendor/oojs/oojs-ui/php/mixins/TitledElement.php create mode 100644 vendor/oojs/oojs-ui/php/widgets/RadioSelectInputWidget.php delete mode 100644 vendor/oojs/oojs-ui/src/ActionSet.js delete mode 100644 vendor/oojs/oojs-ui/src/Dialog.js delete mode 100644 vendor/oojs/oojs-ui/src/Element.js delete mode 100644 vendor/oojs/oojs-ui/src/Error.js delete mode 100644 vendor/oojs/oojs-ui/src/HtmlSnippet.js delete mode 100644 vendor/oojs/oojs-ui/src/Layout.js delete mode 100644 vendor/oojs/oojs-ui/src/Process.js delete mode 100644 vendor/oojs/oojs-ui/src/Theme.js delete mode 100644 vendor/oojs/oojs-ui/src/Tool.js delete mode 100644 vendor/oojs/oojs-ui/src/ToolFactory.js delete mode 100644 vendor/oojs/oojs-ui/src/ToolGroup.js delete mode 100644 vendor/oojs/oojs-ui/src/ToolGroupFactory.js delete mode 100644 vendor/oojs/oojs-ui/src/Toolbar.js delete mode 100644 vendor/oojs/oojs-ui/src/Widget.js delete mode 100644 vendor/oojs/oojs-ui/src/Window.js delete mode 100644 vendor/oojs/oojs-ui/src/WindowManager.js delete mode 100644 vendor/oojs/oojs-ui/src/core.js delete mode 100644 vendor/oojs/oojs-ui/src/dialogs/MessageDialog.js delete mode 100644 vendor/oojs/oojs-ui/src/dialogs/ProcessDialog.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/ButtonElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/ClippableElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/DraggableElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/DraggableGroupElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/FlaggedElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/GroupElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/IconElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/IndicatorElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/LabelElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/LookupElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/PendingElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/PopupElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/TabIndexedElement.js delete mode 100644 vendor/oojs/oojs-ui/src/elements/TitledElement.js delete mode 100644 vendor/oojs/oojs-ui/src/intro.js.txt delete mode 100644 vendor/oojs/oojs-ui/src/layouts/ActionFieldLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/BookletLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/CardLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/FieldLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/FieldsetLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/FormLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/IndexLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/MenuLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/PageLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/PanelLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/layouts/StackLayout.js delete mode 100644 vendor/oojs/oojs-ui/src/outro.js.txt delete mode 100644 vendor/oojs/oojs-ui/src/styles/Dialog.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/Element.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/Layout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/Tool.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/ToolGroup.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/Toolbar.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/Widget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/Window.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/WindowManager.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/common.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/core.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/dialogs/MessageDialog.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/dialogs/ProcessDialog.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/ButtonElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/ClippableElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/DraggableElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/DraggableGroupElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/FlaggedElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/GroupElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/IconElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/IndicatorElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/LabelElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/LookupElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/PopupElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/TabIndexedElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/elements/TitledElement.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/images/grab.cur delete mode 100644 vendor/oojs/oojs-ui/src/styles/images/grabbing.cur delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/ActionFieldLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/BookletLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/CardLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/FieldLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/FieldsetLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/FormLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/IndexLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/MenuLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/PageLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/PanelLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/layouts/StackLayout.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/theme.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/toolgroups/BarToolGroup.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/toolgroups/ListToolGroup.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/toolgroups/MenuToolGroup.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/toolgroups/PopupToolGroup.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/tools/PopupTool.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/tools/ToolGroupTool.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ActionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ButtonGroupWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ButtonInputWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ButtonOptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ButtonSelectWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ButtonWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/CheckboxInputWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ComboBoxWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/DecoratedOptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/DropdownInputWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/DropdownWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/IconWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/IndicatorWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/InputWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/LabelWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/MenuOptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/MenuSectionOptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/MenuSelectWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/OptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/OutlineControlsWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/OutlineOptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/OutlineSelectWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/PopupButtonWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/PopupWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ProgressBarWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/RadioInputWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/RadioOptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/RadioSelectWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/SearchWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/SelectWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/TabOptionWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/TabSelectWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/TextInputMenuSelectWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/TextInputWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ToggleButtonWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ToggleSwitchWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/styles/widgets/ToggleWidget.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/ApexTheme.js delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/common.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/core.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/elements.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/icons-editing-advanced.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/icons-editing-core.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/icons-editing-list.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/icons-editing-styling.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/icons-moderation.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/icons-movement.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/icons.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/add.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/advanced.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/alert.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-center.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-left.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-right.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/block.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-ain.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-dad.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-armn-to.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-b.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-be.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-te.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-zhe.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-f.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-g.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-geor-man.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-l.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-n.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-v.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/cancel.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretDown.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretUp.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/case-sensitive.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/check.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/circle.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/close.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/code.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/collapse.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/comment.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/downTriangle.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/ellipsis.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/expand.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/history.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/info.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/insert.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-keheh-jeem.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-meem.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-armn-sha.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-c.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-d.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-e.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-geor-kan.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-i.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-k.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-s.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/language.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/link.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/lock.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/menu.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/move.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/picture.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/regular-expression.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/remove.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/search.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/secure-link.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/settings.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/specialCharacter.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/star.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-s.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-y.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-caption.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-after.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-before.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-merge-cells.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/table.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/tag.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-lefttoright.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-righttoleft.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-style.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/trash.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/unStar.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-u.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/upTriangle.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/wikiText.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/icons/window.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/alert.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-down.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-up.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/required.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/textures/pending.gif delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/textures/transparency.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/images/toolbar-shadow.png delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/indicators.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/layouts.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/textures.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/tools.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/widgets.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/apex/windows.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/BlankTheme.js delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/common.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/core.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/elements.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/images/icons/README.txt delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/images/indicators/README.txt delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/images/textures/README.txt delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/layouts.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/tools.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/widgets.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/blank/windows.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/MediaWikiTheme.js delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/common.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/core.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/elements.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-alerts.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-content.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-advanced.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-core.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-list.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-styling.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-interactions.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-layout.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-location.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-media.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-moderation.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-movement.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-user.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons-wikimedia.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/icons.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/add.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/advanced.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/alert.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-center.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-left.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-right.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bell.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/beta.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/betaLaunch.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/block.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-ain.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-dad.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-armn-to.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-b.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-be.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-te.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-zhe.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-f.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-g.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-geor-man.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-l.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-n.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-v.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/cancel.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretDown.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretUp.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/case-sensitive.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/check.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/circle.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clear.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clock.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/code.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/collapse.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/comment.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/downTriangle.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ellipsis.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/expand.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eye.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eyeClosed.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/heart.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/history.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/info.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/insert.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-meem.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-armn-sha.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-c.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-d.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-e.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-geor-kan.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-i.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-k.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-s.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/language.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-cc.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikimediaCommons.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikipedia.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPin.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/menu.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/picture.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/regular-expression.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/remove.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ribbonPrize.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/secure-link.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/settings.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/specialCharacter.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/star.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stop.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-s.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-y.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSideMenu.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-caption.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-after.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-before.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-merge-cells.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/tag.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-lefttoright.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-righttoleft.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-style.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trash.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unStar.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-a.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-u.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upTriangle.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userAvatar.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewCompact.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/visionSimulator.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikiText.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/window.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/alert.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-down.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-up.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/required.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-ltr.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-rtl.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/pending.gif delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/transparency.svg delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/indicators.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/layouts.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/textures.json delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/tools.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/widgets.less delete mode 100644 vendor/oojs/oojs-ui/src/themes/mediawiki/windows.less delete mode 100644 vendor/oojs/oojs-ui/src/toolgroups/BarToolGroup.js delete mode 100644 vendor/oojs/oojs-ui/src/toolgroups/ListToolGroup.js delete mode 100644 vendor/oojs/oojs-ui/src/toolgroups/MenuToolGroup.js delete mode 100644 vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js delete mode 100644 vendor/oojs/oojs-ui/src/tools/PopupTool.js delete mode 100644 vendor/oojs/oojs-ui/src/tools/ToolGroupTool.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ActionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ButtonGroupWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ButtonInputWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ButtonOptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ButtonSelectWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ButtonWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/CheckboxInputWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ComboBoxWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/DecoratedOptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/DropdownInputWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/DropdownWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/GroupWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/IconWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/IndicatorWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/InputWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ItemWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/LabelWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/MenuOptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/MenuSectionOptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/MenuSelectWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/OptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/OutlineControlsWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/OutlineSelectWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/PopupButtonWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/PopupWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ProgressBarWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/RadioInputWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/RadioOptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/RadioSelectWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/SearchWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/SelectWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/TabOptionWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/TabSelectWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/TextInputMenuSelectWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/TextInputWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ToggleButtonWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ToggleSwitchWidget.js delete mode 100644 vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js delete mode 100644 vendor/oojs/oojs-ui/tests/Element.test.js delete mode 100644 vendor/oojs/oojs-ui/tests/JSPHP.test.karma.js delete mode 100644 vendor/oojs/oojs-ui/tests/JSPHP.test.standalone.js delete mode 100644 vendor/oojs/oojs-ui/tests/Process.test.js delete mode 100644 vendor/oojs/oojs-ui/tests/QUnit.assert.equalDomElement.js delete mode 100644 vendor/oojs/oojs-ui/tests/elements/FlaggedElement.test.js delete mode 100644 vendor/oojs/oojs-ui/tests/index.php create mode 100644 vendor/oyejorge/less.php/CHANGES.md create mode 100644 vendor/oyejorge/less.php/LICENSE create mode 100644 vendor/oyejorge/less.php/README.md create mode 100644 vendor/oyejorge/less.php/bin/lessc create mode 100644 vendor/oyejorge/less.php/composer.json create mode 100644 vendor/oyejorge/less.php/lessc.inc.php create mode 100644 vendor/oyejorge/less.php/lib/Less/.easymin/ignore_prefixes create mode 100644 vendor/oyejorge/less.php/lib/Less/Autoloader.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Cache.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Colors.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Configurable.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Environment.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Exception/Chunk.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Exception/Compiler.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Exception/Parser.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Functions.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Less.php.combine create mode 100644 vendor/oyejorge/less.php/lib/Less/Mime.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Output.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Output/Mapped.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Parser.php create mode 100644 vendor/oyejorge/less.php/lib/Less/SourceMap/Base64VLQ.php create mode 100644 vendor/oyejorge/less.php/lib/Less/SourceMap/Generator.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Alpha.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Anonymous.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Assignment.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Attribute.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Call.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Color.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Comment.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Condition.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/DefaultFunc.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/DetachedRuleset.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Dimension.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Directive.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Element.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Expression.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Extend.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Import.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Javascript.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Keyword.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Media.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Call.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Definition.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/NameValue.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Negative.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Operation.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Paren.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Quoted.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Rule.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Ruleset.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/RulesetCall.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Selector.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/UnicodeDescriptor.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Unit.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/UnitConversions.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Url.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Value.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Tree/Variable.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Version.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Visitor.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Visitor/extendFinder.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Visitor/import.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Visitor/joinSelector.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Visitor/processExtends.php create mode 100644 vendor/oyejorge/less.php/lib/Less/Visitor/toCSS.php create mode 100644 vendor/oyejorge/less.php/lib/Less/VisitorReplacing.php delete mode 100644 vendor/psr/log/Psr/Log/LoggerAwareTrait.php delete mode 100644 vendor/psr/log/Psr/Log/LoggerTrait.php create mode 100644 vendor/ruflin/elastica/CHANGELOG.md create mode 100644 vendor/ruflin/elastica/CONTRIBUTING.md create mode 100644 vendor/ruflin/elastica/Dockerfile create mode 100644 vendor/ruflin/elastica/LICENSE.txt create mode 100644 vendor/ruflin/elastica/Makefile create mode 100644 vendor/ruflin/elastica/README.md create mode 100644 vendor/ruflin/elastica/Vagrantfile create mode 100644 vendor/ruflin/elastica/ansible/es-playbook.yml create mode 100644 vendor/ruflin/elastica/ansible/provision.sh create mode 100644 vendor/ruflin/elastica/ansible/roles/base/tasks/main.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/elasticsearch/handlers/main.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/elasticsearch/tasks/main.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-0.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-1.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-default.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/elasticsearch.service create mode 100644 vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/logging.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/nginx/handlers/main.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/nginx/tasks/main.yml create mode 100644 vendor/ruflin/elastica/ansible/roles/nginx/templates/mime.types.j2 create mode 100644 vendor/ruflin/elastica/ansible/roles/nginx/templates/nginx.conf.j2 create mode 100644 vendor/ruflin/elastica/ansible/roles/php/tasks/main.yml create mode 100644 vendor/ruflin/elastica/composer.json create mode 100644 vendor/ruflin/elastica/docker-compose.yml create mode 100644 vendor/ruflin/elastica/env/elasticsearch/Dockerfile create mode 100644 vendor/ruflin/elastica/env/elasticsearch/elasticsearch.yml create mode 100644 vendor/ruflin/elastica/env/elasticsearch/logging.yml create mode 100644 vendor/ruflin/elastica/env/nginx/mime.types create mode 100644 vendor/ruflin/elastica/env/nginx/nginx.conf create mode 100644 vendor/ruflin/elastica/lib/Elastica/AbstractUpdateAction.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractAggregation.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractSimpleAggregation.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractTermsAggregation.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Avg.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Cardinality.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/DateHistogram.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/DateRange.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/ExtendedStats.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Filter.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Filters.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/GeoDistance.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/GeohashGrid.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/GlobalAggregation.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Histogram.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/IpRange.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Max.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Min.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Missing.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Nested.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Percentiles.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Range.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/ReverseNested.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/ScriptedMetric.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/SignificantTerms.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Stats.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Sum.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/Terms.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/TopHits.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Aggregation/ValueCount.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/Action.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/Action/AbstractDocument.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/Action/CreateDocument.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/Action/DeleteDocument.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/Action/IndexDocument.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/Action/UpdateDocument.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/Response.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Bulk/ResponseSet.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Client.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Cluster.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Cluster/Health.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Index.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Shard.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Cluster/Settings.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Connection.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Connection/ConnectionPool.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/CallbackStrategy.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/RoundRobin.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/Simple.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/StrategyFactory.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/StrategyInterface.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Document.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/Response/ActionException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/ResponseException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/UdpException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/BulkException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/ClientException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/Connection/GuzzleException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/Connection/HttpException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/Connection/MemcacheException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/Connection/ThriftException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/ConnectionException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/ElasticsearchException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/ExceptionInterface.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/InvalidException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/JSONParseException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/NotFoundException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/NotImplementedException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/PartialShardFailureException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/QueryBuilderException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/ResponseException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Exception/RuntimeException.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/AbstractFacet.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/DateHistogram.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/Filter.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/GeoCluster.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/GeoDistance.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/Histogram.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/Query.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/Range.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/Statistical.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/Terms.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Facet/TermsStats.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/AbstractFilter.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoDistance.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoShape.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/AbstractMulti.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Bool.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/BoolAnd.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/BoolFilter.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/BoolNot.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/BoolOr.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Exists.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/GeoBoundingBox.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistance.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistanceRange.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/GeoPolygon.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapePreIndexed.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapeProvided.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/GeohashCell.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/HasChild.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/HasParent.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Ids.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Indices.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Limit.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/MatchAll.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Missing.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Nested.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/NumericRange.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Prefix.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Query.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Range.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Regexp.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Script.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Term.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Terms.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Filter/Type.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Index.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Index/Settings.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Index/Stats.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Index/Status.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/JSON.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Log.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Multi/ResultSet.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Multi/Search.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Node.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Node/Info.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Node/Stats.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Param.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Percolator.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/AbstractQuery.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Bool.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/BoolQuery.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Boosting.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Builder.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Common.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/ConstantScore.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/DisMax.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Filtered.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/FunctionScore.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Fuzzy.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/FuzzyLikeThis.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/HasChild.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/HasParent.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Ids.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Image.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Match.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/MatchAll.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrase.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrasePrefix.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/MoreLikeThis.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/MultiMatch.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Nested.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Prefix.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/QueryString.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Range.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Regexp.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Simple.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/SimpleQueryString.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Term.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Terms.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/TopChildren.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Query/Wildcard.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Aggregation.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Filter.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Query.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Suggest.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Facade.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version090.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version100.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version110.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version120.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version130.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version140.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version150.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Request.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Rescore/AbstractRescore.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Rescore/Query.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Response.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Result.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/ResultSet.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/ScanAndScroll.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Script.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/ScriptFields.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Scroll.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Search.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/SearchableInterface.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Snapshot.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Status.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Suggest.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Suggest/AbstractSuggest.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Suggest/CandidateGenerator/AbstractCandidateGenerator.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Suggest/CandidateGenerator/DirectGenerator.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Suggest/Completion.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Suggest/Phrase.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Suggest/Term.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Tool/CrossIndex.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/AbstractTransport.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/Guzzle.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/Http.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/HttpAdapter.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/Https.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/Memcache.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/Null.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/NullTransport.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Transport/Thrift.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Type.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Type/AbstractType.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Type/Mapping.php create mode 100644 vendor/ruflin/elastica/lib/Elastica/Util.php create mode 100644 vendor/ruflin/elastica/phpdoc.dist.xml create mode 100644 vendor/ruflin/elastica/test/bootstrap.php create mode 100644 vendor/ruflin/elastica/test/data/test.doc create mode 100644 vendor/ruflin/elastica/test/data/test.docx create mode 100644 vendor/ruflin/elastica/test/data/test.jpg create mode 100644 vendor/ruflin/elastica/test/data/test.pdf create mode 100644 vendor/ruflin/elastica/test/data/test.txt create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/AvgTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/BaseAggregationTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/CardinalityTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateHistogramTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateRangeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ExtendedStatsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FilterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FiltersTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeoDistanceTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeohashGridTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GlobalAggregationTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/HistogramTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/IpRangeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MaxTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MinTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MissingTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/NestedTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/PercentilesTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/RangeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ReverseNestedTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptedMetricTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SignificantTermsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/StatsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SumTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TermsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TopHitsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ValueCountTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Base.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ActionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ResponseSetTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/BulkTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ClientTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/IndexTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/ShardTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/HealthTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/SettingsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ClusterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/ConnectionPoolTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTestHelper.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/EmptyStrategy.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/RoundRobinTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/SimpleTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/StrategyFactoryTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ConnectionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/DocumentTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ExampleTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/AbstractExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Bulk/Response/ActionExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Bulk/ResponseExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Bulk/UdpExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/BulkExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/ClientExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Connection/GuzzleExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Connection/HttpExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Connection/MemcacheExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Connection/ThriftExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/ConnectionExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/ElasticsearchExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/InvalidExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/JSONParseExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/NotFoundExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/NotImplementedExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/PartialShardFailureExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/QueryBuilderExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/ResponseExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/RuntimeExceptionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/DateHistogramTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/FilterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/GeoClusterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/QueryTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/StatisticalTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsStatsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/AbstractTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolAndTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolFilterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolNotTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolOrTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ExistsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoBoundingBoxTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceRangeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoPolygonTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapePreIndexedTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapeProvidedTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeohashCellTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasChildTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasParentTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IdsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IndicesTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/LimitTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MatchAllTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MissingTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MultiTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedFilterWithSetFilterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NumericRangeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/PrefixTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/QueryTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RangeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RegexpTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ScriptTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TypeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Index/SettingsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatusTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/IndexTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/LogTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Multi/SearchTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Node/InfoTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/NodeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ParamTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/PercolatorTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoolQueryTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoostingTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BuilderTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/CommonTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ConstantScoreTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/DisMaxTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/EscapeStringTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FilteredTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FunctionScoreTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyLikeThisTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasChildTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasParentTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HighlightTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/IdsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ImageTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchAllTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MoreLikeThisTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MultiMatchTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/NestedTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PostFilterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PrefixTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/QueryStringTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RangeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RegexpTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RescoreTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleQueryStringTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Query/WildcardTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AbstractDSLTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AggregationTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/FilterTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/QueryTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/SuggestTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/VersionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilderTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/QueryTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/RequestTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ResponseTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ResultSetTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ResultTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ScanAndScrollTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptFieldsTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ScrollTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/SearchTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/ShutdownTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/SnapshotTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/StatusTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/CompletionTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/PhraseTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/TermTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Tool/CrossIndexTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/AbstractTransportTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/GuzzleTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/HttpTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/MemcacheTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/NullTransportTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/ThriftTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/TransportBenchmarkTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/TypeTest.php create mode 100644 vendor/ruflin/elastica/test/lib/Elastica/Test/UtilTest.php create mode 100644 vendor/ruflin/elastica/test/phpunit.xhprof.xml create mode 100644 vendor/ruflin/elastica/test/phpunit.xml.dist create mode 100644 vendor/symfony/process/CHANGELOG.md create mode 100644 vendor/symfony/process/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/process/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/process/Exception/LogicException.php create mode 100644 vendor/symfony/process/Exception/ProcessFailedException.php create mode 100644 vendor/symfony/process/Exception/ProcessTimedOutException.php create mode 100644 vendor/symfony/process/Exception/RuntimeException.php create mode 100644 vendor/symfony/process/ExecutableFinder.php create mode 100644 vendor/symfony/process/LICENSE create mode 100644 vendor/symfony/process/PhpExecutableFinder.php create mode 100644 vendor/symfony/process/PhpProcess.php create mode 100644 vendor/symfony/process/Pipes/AbstractPipes.php create mode 100644 vendor/symfony/process/Pipes/PipesInterface.php create mode 100644 vendor/symfony/process/Pipes/UnixPipes.php create mode 100644 vendor/symfony/process/Pipes/WindowsPipes.php create mode 100644 vendor/symfony/process/Process.php create mode 100644 vendor/symfony/process/ProcessBuilder.php create mode 100644 vendor/symfony/process/ProcessUtils.php create mode 100644 vendor/symfony/process/README.md create mode 100644 vendor/symfony/process/Tests/AbstractProcessTest.php create mode 100644 vendor/symfony/process/Tests/ExecutableFinderTest.php create mode 100644 vendor/symfony/process/Tests/NonStopableProcess.php create mode 100644 vendor/symfony/process/Tests/PhpExecutableFinderTest.php create mode 100644 vendor/symfony/process/Tests/PhpProcessTest.php create mode 100644 vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php create mode 100644 vendor/symfony/process/Tests/ProcessBuilderTest.php create mode 100644 vendor/symfony/process/Tests/ProcessFailedExceptionTest.php create mode 100644 vendor/symfony/process/Tests/ProcessInSigchildEnvironment.php create mode 100644 vendor/symfony/process/Tests/ProcessUtilsTest.php create mode 100644 vendor/symfony/process/Tests/SigchildDisabledProcessTest.php create mode 100644 vendor/symfony/process/Tests/SigchildEnabledProcessTest.php create mode 100644 vendor/symfony/process/Tests/SignalListener.php create mode 100644 vendor/symfony/process/Tests/SimpleProcessTest.php create mode 100644 vendor/symfony/process/composer.json create mode 100644 vendor/symfony/process/phpunit.xml.dist create mode 100644 vendor/wikimedia/assert/COPYING create mode 100644 vendor/wikimedia/assert/README.md create mode 100644 vendor/wikimedia/assert/composer.json create mode 100644 vendor/wikimedia/assert/phpunit.xml.dist create mode 100644 vendor/wikimedia/assert/src/Assert.php create mode 100644 vendor/wikimedia/assert/src/AssertionException.php create mode 100644 vendor/wikimedia/assert/src/InvariantException.php create mode 100644 vendor/wikimedia/assert/src/ParameterAssertionException.php create mode 100644 vendor/wikimedia/assert/src/ParameterElementTypeException.php create mode 100644 vendor/wikimedia/assert/src/ParameterTypeException.php create mode 100644 vendor/wikimedia/assert/src/PostconditionException.php create mode 100644 vendor/wikimedia/assert/src/PreconditionException.php create mode 100644 vendor/wikimedia/assert/tests/phpunit/AssertTest.php create mode 100644 vendor/wikimedia/avro/LICENSE.txt create mode 100644 vendor/wikimedia/avro/NOTICE.txt create mode 100644 vendor/wikimedia/avro/README.md create mode 100644 vendor/wikimedia/avro/lib/avro.php create mode 100644 vendor/wikimedia/avro/lib/avro/data_file.php create mode 100644 vendor/wikimedia/avro/lib/avro/datum.php create mode 100644 vendor/wikimedia/avro/lib/avro/debug.php create mode 100644 vendor/wikimedia/avro/lib/avro/gmp.php create mode 100644 vendor/wikimedia/avro/lib/avro/io.php create mode 100644 vendor/wikimedia/avro/lib/avro/protocol.php create mode 100644 vendor/wikimedia/avro/lib/avro/schema.php create mode 100644 vendor/wikimedia/avro/lib/avro/util.php delete mode 100644 vendor/wikimedia/cdb/Doxyfile delete mode 100644 vendor/wikimedia/cdb/composer.json delete mode 100644 vendor/wikimedia/cdb/doc/README delete mode 100644 vendor/wikimedia/cdb/test/CdbTest.php create mode 100644 vendor/wikimedia/composer-merge-plugin/.arcconfig create mode 100644 vendor/wikimedia/composer-merge-plugin/.arclint create mode 100644 vendor/wikimedia/composer-merge-plugin/src/Logger.php create mode 100644 vendor/wikimedia/composer-merge-plugin/src/Merge/ExtraPackage.php create mode 100644 vendor/wikimedia/composer-merge-plugin/src/Merge/MissingFileException.php create mode 100644 vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php create mode 100644 vendor/wikimedia/composer-merge-plugin/src/Merge/StabilityFlags.php create mode 100644 vendor/wikimedia/ip-set/COPYING create mode 100644 vendor/wikimedia/ip-set/README.md create mode 100644 vendor/wikimedia/ip-set/src/IPSet.php create mode 100644 vendor/wikimedia/utfnormal/COPYING create mode 100644 vendor/wikimedia/utfnormal/Doxyfile create mode 100644 vendor/wikimedia/wrappedstring/LICENSE create mode 100644 vendor/wikimedia/wrappedstring/README.md create mode 100644 vendor/wikimedia/wrappedstring/src/WrappedString.php create mode 100644 vendor/zordius/lightncandy/tests/contextTest.php diff --git a/CREDITS b/CREDITS index c7cf2c18..44adc4ff 100644 --- a/CREDITS +++ b/CREDITS @@ -1,6 +1,6 @@ {{int:version-credits-summary}} @@ -24,6 +24,7 @@ following names for their contribution to the product. * Bryan Tong Minh * Chad Horohoe * Charles Melbye +* Chris Steipp * church of emacs * Daniel Friesen * Daniel Kinzler @@ -43,6 +44,7 @@ following names for their contribution to the product. * Jack D. Pond * Jack Phoenix * Jackmcbarn +* James Forrester * Jan Paul Posma * Jason Richey * Jeroen De Dauw @@ -91,6 +93,7 @@ following names for their contribution to the product. * Tim Starling * Timo Tijhof * Trevor Parscal +* Tyler Anthony Romeo * Victor Vasiliev * Yesid Carrillo * Yuri Astrakhan @@ -116,7 +119,6 @@ following names for their contribution to the product. * Brianna Laugher * Carlin * Carsten Nielsen -* Chris Steipp * Christian Aistleitner * Christian Neubauer * Conrad Irwin @@ -139,6 +141,7 @@ following names for their contribution to the product. * fomafix * FunPika * Gabriel Wicke +* Geoffrey Mon * Gero Scholz * Gilles van den Hoven * Grunny @@ -227,6 +230,7 @@ following names for their contribution to the product. * Simon Walker * Solitarius * Søren Løvborg +* Southparkfan * Srikanth Lakshmanan * Stefano Codari * Str4nd @@ -235,11 +239,11 @@ following names for their contribution to the product. * The Evil IP address * Tim Landscheidt * Tisane -* Tyler Anthony Romeo * Umherirrender * Van de Bugger * Ville Stadista * Vitaliy Filippov +* Vivek Ghaisas * Waldir Pimenta * William Demchick * Yusuke Matsubara diff --git a/Gemfile.lock b/Gemfile.lock index 0b360aed..3a695ef7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,19 +5,19 @@ GEM astrolabe (1.3.0) parser (>= 2.2.0.pre.3, < 3.0) builder (3.2.2) - childprocess (0.5.5) + childprocess (0.5.6) ffi (~> 1.0, >= 1.0.11) - cucumber (1.3.19) + cucumber (1.3.20) builder (>= 2.1.2) diff-lcs (>= 1.1.3) gherkin (~> 2.12) multi_json (>= 1.7.5, < 2.0) multi_test (>= 0.1.2) - data_magic (0.20) + data_magic (0.21) faker (>= 1.1.2) yml_reader (>= 0.4) diff-lcs (1.2.5) - domain_name (0.5.23) + domain_name (0.5.24) unf (>= 0.0.5, < 1.0.0) faker (1.4.3) i18n (~> 0.5) @@ -26,18 +26,18 @@ GEM faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) http-cookie (~> 1.0.0) - ffi (1.9.6) + ffi (1.9.10) gherkin (2.12.2) multi_json (~> 1.3) headless (1.0.2) http-cookie (1.0.2) domain_name (~> 0.5) i18n (0.7.0) - json (1.8.2) - mediawiki_api (0.3.1) + json (1.8.3) + mediawiki_api (0.4.1) faraday (~> 0.9, >= 0.9.0) faraday-cookie_jar (~> 0.0, >= 0.0.6) - mediawiki_selenium (1.0.1) + mediawiki_selenium (1.2.1) cucumber (~> 1.3, >= 1.3.10) headless (~> 1.0, >= 1.0.1) json (~> 1.8, >= 1.8.1) @@ -47,35 +47,36 @@ GEM rspec-expectations (~> 2.14, >= 2.14.4) syntax (~> 1.2, >= 1.2.0) thor (~> 0.19, >= 0.19.1) - mime-types (2.4.3) - multi_json (1.11.0) + mime-types (2.6.1) + multi_json (1.11.2) multi_test (0.1.2) multipart-post (2.0.0) netrc (0.10.3) - page-object (1.0.3) + page-object (1.1.0) page_navigation (>= 0.9) selenium-webdriver (>= 2.44.0) watir-webdriver (>= 0.6.11) page_navigation (0.9) data_magic (>= 0.14) - parser (2.2.0.3) + parser (2.2.2.6) ast (>= 1.1, < 3.0) - powerpack (0.1.0) + powerpack (0.1.1) rainbow (2.0.0) - rest-client (1.7.3) + rest-client (1.8.0) + http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 3.0) netrc (~> 0.7) rspec-expectations (2.99.2) diff-lcs (>= 1.1.3, < 2.0) - rubocop (0.29.1) + rubocop (0.32.1) astrolabe (~> 1.3) - parser (>= 2.2.0.1, < 3.0) + parser (>= 2.2.2.5, < 3.0) powerpack (~> 0.1) rainbow (>= 1.99.1, < 3.0) ruby-progressbar (~> 1.4) - ruby-progressbar (1.7.1) + ruby-progressbar (1.7.5) rubyzip (1.1.7) - selenium-webdriver (2.45.0) + selenium-webdriver (2.46.2) childprocess (~> 0.5) multi_json (~> 1.0) rubyzip (~> 1.0) @@ -84,15 +85,18 @@ GEM thor (0.19.1) unf (0.1.4) unf_ext - unf_ext (0.0.6) - watir-webdriver (0.7.0) - selenium-webdriver (>= 2.45) - websocket (1.2.1) + unf_ext (0.0.7.1) + watir-webdriver (0.8.0) + selenium-webdriver (>= 2.46.2) + websocket (1.2.2) yml_reader (0.5) PLATFORMS ruby DEPENDENCIES - mediawiki_selenium (~> 1.0.1) + mediawiki_selenium (~> 1.2.1) rubocop + +BUNDLED WITH + 1.10.5 diff --git a/Gruntfile.js b/Gruntfile.js index 573db69a..8dbeb6bf 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -12,55 +12,40 @@ module.exports = function ( grunt ) { wgScriptPath = process.env.MW_SCRIPT_PATH, karmaProxy = {}; - karmaProxy[wgScriptPath] = wgServer + wgScriptPath; + karmaProxy[ wgScriptPath ] = wgServer + wgScriptPath; grunt.initConfig( { - pkg: grunt.file.readJSON( 'package.json' ), jshint: { options: { jshintrc: true }, - all: [ - '*.js', - '{includes,languages,resources,tests}/**/*.js' - ] + all: '.' }, jscs: { - all: [ - '<%= jshint.all %>', - // Auto-generated file with JSON (double quotes) - '!tests/qunit/data/mediawiki.jqueryMsg.data.js', - // Skip functions are stored as script files but wrapped in a function when - // executed. node-jscs trips on the would-be "Illegal return statement". - '!resources/src/*-skip.js' - - // Exclude all files ignored by jshint - ].concat( grunt.file.read( '.jshintignore' ).split( '\n' ).reduce( function ( patterns, pattern ) { - // Filter out empty lines - if ( pattern.length && pattern[0] !== '#' ) { - patterns.push( '!' + pattern ); - } - return patterns; - }, [] ) ) + all: '.' }, jsonlint: { all: [ '.jscsrc', - '{languages,maintenance,resources}/**/*.json', - 'package.json' + '**/*.json', + '!{docs/js,extensions,node_modules,skins,vendor}/**' ] }, banana: { + options: { + disallowBlankTranslations: false, + disallowDuplicateTranslations: false, + disallowUnusedTranslations: false + }, core: 'languages/i18n/', api: 'includes/api/i18n/', installer: 'includes/installer/i18n/' }, watch: { files: [ - '<%= jscs.all %>', - '<%= jsonlint.all %>', - '.jshintignore', - '.jshintrc' + '.js*', + '**/*', + '!{docs,extensions,node_modules,skins,vendor}/**' ], tasks: 'test' }, @@ -107,14 +92,14 @@ module.exports = function ( grunt ) { } if ( !process.env.MW_SCRIPT_PATH ) { grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' + - 'Set this like $wgScriptPath, e.g. "/w"'); + 'Set this like $wgScriptPath, e.g. "/w"' ); } return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH ); } ); - grunt.registerTask( 'lint', ['jshint', 'jscs', 'jsonlint', 'banana'] ); + grunt.registerTask( 'lint', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] ); grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] ); - grunt.registerTask( 'test', ['lint'] ); + grunt.registerTask( 'test', [ 'lint' ] ); grunt.registerTask( 'default', 'test' ); }; diff --git a/HISTORY b/HISTORY index 6ea5c2e0..07f0fac1 100644 --- a/HISTORY +++ b/HISTORY @@ -1,4 +1,550 @@ -Change notes from older releases. For current info see RELEASE-NOTES-1.25. +Change notes from older releases. For current info see RELEASE-NOTES-1.26. + +== MediaWiki 1.25 == + +=== Configuration changes in 1.25 === +* $wgPageShowWatchingUsers was removed. +* $wgLocalVirtualHosts has been added to replace $wgConf->localVHosts. +* $wgAntiLockFlags was removed. +* $wgJavaScriptTestConfig was removed. +* Edit tokens returned from User::getEditToken may change on every call. Token + validity must be checked by passing the user-supplied token to + User::matchEditToken rather than by testing for equality with a + newly-generated token. +* (T74951) The UserGetLanguageObject hook may be passed any IContextSource + for its $context parameter. Formerly it was documented as receiving a + RequestContext specifically. +* Profiling was restructured and $wgProfiler now requires an 'output' parameter. + See StartProfiler.sample for details. +* $wgMangleFlashPolicy was added to make MediaWiki's mangling of anything that + might be a flash policy directive configurable. +* ApiOpenSearch now supports XML output. The OpenSearchXml extension should no + longer be used. If extracts and page images are desired, the TextExtracts and + PageImages extensions are required. +* $wgOpenSearchTemplate is deprecated in favor of $wgOpenSearchTemplates. +* Edits are now prepared via AJAX as users type edit summaries. This behavior + can be disabled via $wgAjaxEditStash. +* (T46740) The temporary option $wgIncludejQueryMigrate was removed, along + with the jQuery Migrate library, as indicated when this option was provided in + MediaWiki 1.24. +* ProfilerStandard and ProfilerSimpleTrace were removed. Make sure that any + StartProfiler.php config is updated to reflect this. Xhprof is available + for zend/hhvm. Also, for hhvm, one can consider using its xenon profiler. +* Default value of $wgSVGConverters['rsvg'] now uses the 'rsvg-convert' binary + rather than 'rsvg'. +* Default value of $wgSVGConverters['ImageMagick'] now uses transparent + background with white fallback color, rather than just white background. + * MediaWikiBagOStuff class removed, make sure any object cache config + uses SqlBagOStuff instead. +* The 'daemonized' flag must be set to true in $wgJobTypeConf for any redis + job queues. This means that mediawiki/services/jobrunner service has to + be installed and running for any such queues to work. +* $wgAutopromoteOnce no longer supports the 'view' event. For keeping some + compatibility, any 'view' event triggers will still trigger on 'edit'. +* $wgExtensionDirectory was added for when your extensions directory is somewhere + other than $IP/extensions (as $wgStyleDirectory does with the skins directory). + +=== New features in 1.25 === +* (T64861) Updated plural rules to CLDR 26. Includes incompatible changes + for plural forms in Russian, Prussian, Tagalog, Manx and several languages + that fall back to Russian. +* (T60139) ResourceLoaderFileModule now supports language fallback + for 'languageScripts'. +* Added a new hook, "ContentAlterParserOutput", to allow extensions to modify the + parser output for a content object before links update. +* (T37785) Enhanced recent changes and extended watchlist are now default. + Documentation: https://meta.wikimedia.org/wiki/Help:Enhanced_recent_changes + and https://www.mediawiki.org/wiki/Manual:$wgDefaultUserOptions. +* (T69341) SVG images will no longer be base64-encoded when being embedded + in CSS. This results in slight size increase before gzip compression (due to + percent-encoding), but up to 20% decrease after it. +* Update jStorage to v0.4.12. +* MediaWiki now natively supports page status indicators: icons (or short text + snippets) usually displayed in the top-right corner of the page. They have + been in use on Wikipedia for a long time, implemented using templates and CSS + absolute positioning. + - Basic wikitext syntax: [[File:Foo.svg|20px]] + - Usage instructions: https://www.mediawiki.org/wiki/Help:Page_status_indicators + - Adjusting custom skins to support indicators: + https://www.mediawiki.org/wiki/Manual:Skinning#Page_status_indicators +* Edit tokens may now be time-limited: passing a maximum age to + User::matchEditToken will reject any older tokens. +* The debug logging internals have been overhauled, and are now using the + PSR-3 interfaces. +* Update CSSJanus to v1.1.1. +* Update lessphp to v0.5.0. +* Added a hook, "ApiOpenSearchSuggest", to allow extensions to provide extracts + and images for ApiOpenSearch output. The semantics are identical to the + "OpenSearchXml" hook provided by the OpenSearchXml extension. +* PrefixSearchBackend hook now has an $offset parameter. Combined with $limit, + this allows for pagination of prefix results. Extensions using this hook + should implement supporting behavior. Not doing so can result in undefined + behavior from API clients trying to continue through prefix results. +* Update jQuery from v1.11.1 to v1.11.3. +* External libraries installed via composer will now be displayed + on Special:Version in their own section. Extensions or skins that are + installed via composer will not be shown in this section as it is assumed + they will add the proper credits to the skins or extensions section. They + can also be accessed through the API via the new siprop=libraries to + ApiQuerySiteInfo. +* Update QUnit from v1.14.0 to v1.16.0. +* Update Moment.js from v2.8.3 to v2.8.4. +* Special:Tags now allows for manipulating the list of user-modifiable change + tags. +* Added 'managetags' user right and 'ChangeTagCanCreate', 'ChangeTagCanDelete', + and 'ChangeTagCanCreate' hooks to allow for managing user-modifiable change + tags. +* Added 'ChangeTagsListActive' hook, to separate the concepts of "defined" and + "active" formerly conflated by the 'ListDefinedTags' hook. +* Added TemplateParser class that provides a server-side interface to cachable + dynamically-compiled Mustache templates (currently uses lightncandy library). +* Clickable anchors for each section heading in the content are now generated + and appear in the gutter on hovering over the heading. +* Added 'CategoryViewer::doCategoryQuery' and 'CategoryViewer::generateLink' hooks + to allow extensions to override how links to pages are rendered within NS_CATEGORY +* (T19665) Special:WantedPages only lists page which having at least one red link + pointing to it. +* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be + used for conditional registration of API modules. +* New hook 'EnhancedChangesList::getLogText' to alter, remove or add to the + links of a group of changes in EnhancedChangesList. +* A full interface for StatsD metric reporting has been added to the context + interface, reachable via IContextSource::getStats(). +* Move the jQuery Client library from being mastered in MediaWiki as v0.1.0 to a + proper, published library, which is now tagged as v1.0.0. +* A new message (defaulting to blank), 'editnotice-notext', can be shown to users + when they are editing if no edit notices apply to the page being edited. +* (T94536) You can now make the sitenotice appear to logged-in users only by + editing MediaWiki:Anonnotice and replacing its content with "". Setting it to + "-" (default) will continue disable it and fallback to MediaWiki:Sitenotice. +* Modifying the tagging of a revision or log entry is now available via + Special:EditTags, generally accessed via the revision-deletion-like interface + on history pages and Special:Log is likely to be more useful. +* Added 'applychangetags' and 'changetags' user rights. +* (T35235) LogFormatter subclasses are now responsible for formatting the + parameters for API log event output. Extensions should implement the new + getParametersForApi() method in their log formatters. + +==== External libraries ==== +* MediaWiki now requires certain external libraries to be installed. In the past + these were bundled inside the Git repository of MediaWiki core, but now they + need to be installed separately. For users using the tarball, this will be taken + care of and no action will be required. Users using Git will either need to use + composer to fetch dependencies or use the mediawiki/vendor repository which includes + all dependencies for MediaWiki core and ones used in Wikimedia deployment. Detailed + instructions can be found at: + https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries +* The following libraries are now required: +** psr/log + This library provides the interfaces set by the PSR-3 standard (http://www.php-fig.org/psr/psr-3/) + which are used by MediaWiki internally via the + MediaWiki\Logger\LoggerFactory class. + See the structured logging RfC (https://www.mediawiki.org/wiki/Requests_for_comment/Structured_logging) + for more background information. +** cssjanus/cssjanus + This library was formerly bundled with MediaWiki core and has been removed. + It automatically flips CSS for RTL support. +** leafo/lessphp + This library was formerly bundled with MediaWiki core and has been removed. + It compiles LESS files into CSS. +** wikimedia/cdb + This library was formerly a part of MediaWiki core, and has been moved into a separate library. + It provides CDB functions which are used in the Interwiki and Localization caches. + More information about the library can be found at https://www.mediawiki.org/wiki/CDB. +** liuggio/statsd-php-client + This library provides a StatsD client API for logging application metrics to a remote server. + +=== Bug fixes in 1.25 === +* (T73003) No additional code will be generated to try to load CSS-embedded + SVG images in Internet Explorer 6 and 7, as they don't support them anyway. +* (T69021) On Special:BookSources, corrected validation of ISBNs (both + 10- and 13-digit forms) containing "X". +* Page moving was refactored into a MovePage class. As part of that: +** The AbortMove hook was removed. +** MovePageIsValidMove is for extensions to specify whether a page + cannot be moved for technical reasons, and should not be overridden. +** MovePageCheckPermissions is for checking whether the given user is + allowed to make the move. +** Title::moveNoAuth() was deprecated. Use the MovePage class instead. +** Title::moveTo() was deprecated. Use the MovePage class instead. +** Title::isValidMoveOperation() broken down into MovePage::isValidMove() + and MovePage::checkPermissions(). +* (T18530) Multiple autocomments are now formatted in an edit summary. +* (T70361) Autocomments containing "/*" are parsed correctly. +* The Special:WhatLinksHere page linked from 'Number of redirects to this page' + on action=info about a file page does not list file links anymore. +* (T78637) Search bar is not autofocused unless it is empty so that proper scrolling using arrow keys is possible. +* (T50853) Database::makeList() modified to handle 'NULL' separately when building IN clause +* (T85192) Captcha position modified in Usercreate template. As a result: +** extrafields parameter added to Usercreate.php to insert additional data +** 'extend' method added to QuickTemplate to append additional values to any field of data array +* (T86974) Several Title methods now load from the database when necessary + (instead of returning incorrect results) even when the page ID is known. +* (T74070) Duplicate search for archived files on file upload now omits the extension. + This requires the fa_sha1 field being populated. +* Removed rel="archives" from the "View history" link, as it did not pass + HTML validation. +* $wgUseTidy is now set when parserTests are run with the tidy option to match + output on wiki. +* (T37472) update.php will purge ResourceLoader cache unless --nopurge is passed to it. +* (T72109) mediawiki.language should respect $wgTranslateNumerals in convertNumber(). + +=== Action API changes in 1.25 === +* (T67403) XML tag highlighting is now only performed for formats + "xmlfm" and "wddxfm". +* action=paraminfo supports generalized submodules (modules=query+value), + querymodules and formatmodules are deprecated +* action=paraminfo no longer outputs descriptions and other help text by + default. If needed, it may be requested using the new 'helpformat' parameter. +* action=help has been completely rewritten, and outputs help in HTML + rather than plain text. +* Hitting api.php without specifying an action now displays only the help for + the main module, with links to submodule help. +* API help is no longer displayed on errors. +* 'uselang' is now a recognized API parameter; "uselang=user" may be used to + explicitly select the language from the current user's preferences, and + "uselang=content" may be used to select the wiki's content language. +* Default output format for the API is now jsonfm. +* Simplified continuation will return a "batchcomplete" property in the result + when a batch of pages is complete. +* Pretty-printed HTML output now has nicer formatting and (if available) + better syntax highlighting. +* Deprecated list=deletedrevs in favor of newly-added prop=deletedrevisions and + list=alldeletedrevisions. +* prop=revisions will gracefully continue when given too many revids or titles, + rather than just ignoring the extras. +* prop=revisions will no longer die if rvcontentformat doesn't match a + revision's content model; it will instead warn and omit the content. +* If the user has the 'deletedhistory' right, action=query's revids parameter + will now recognize deleted revids. +* prop=revisions may be used as a generator, generating revids. +* (T68776) format=json results will no longer be corrupted when + $wgMangleFlashPolicy is in effect. format=php results will cleanly return an + error instead of returning invalid serialized data. +* Generators may now return data for the generated pages when used with + action=query. +* Query page data for generator=search and generator=prefixsearch will now + include an "index" field, which may be used by the client for sorting the + search results. +* ApiOpenSearch now supports XML output. +* ApiOpenSearch will now output descriptions and URLs as array indexes 2 and 3 + in JSON format. +* (T76051) list=tags will now continue correctly. +* (T76052) list=tags can now indicate whether a tag is defined. +* (T75522) list=prefixsearch now supports continuation +* (T78737) action=expandtemplates can now return page properties. +* (T78690) list=allimages now accepts multiple pipe-separated values + for the 'aimime' parameter. +* prop=info with inprop=protections will now return applicable protection types + with the 'restrictiontypes' key. +* (T85417) When resolving redirects, ApiPageSet will now add the targets of + interwiki redirects to the list of interwiki titles. +* (T85417) When outputting the list of redirect titles, a 'tointerwiki' + property (like the existing 'tofragment' property) will be set. +* Added action=managetags to allow for managing the list of + user-modifiable change tags. Actually modifying the tagging of a revision or + log entry is not implemented yet. +* list=tags has additional properties to indicate 'active' status and tag + sources. +* siprop=libraries was added to ApiQuerySiteInfo to list installed external libraries. +* (T88010) Added action=checktoken, to test a CSRF token's validity. +* (T88010) Added intestactions to prop=info, to allow querying of + Title::userCan() via the API. +* Default type param for query list=watchlist and list=recentchanges has + been changed from all types (e.g. including 'external') to 'edit|new|log'. +* Added formatversion to format=json. Still "experimental" as further changes + to the output formatting might still be made. +* (T73020) Log event details are now always under a 'params' subkey for + list=logevents, and a 'logparams' subkey for list=watchlist and + list=recentchanges. +* Log event details are changing formatting: + * block events now report flags as an array rather than as a comma-separated + list. + * patrol events now report the 'auto' flag as a boolean (absent/empty string + for BC formats) rather than as an integer. + * rights events now report the old and new group lists as arrays rather than + as comma-separated lists. + * merge events use new-style formatting. + * delete/event and delete/revision events use new-style formatting. +* The root node and various other nodes will now always be an object in formats + such as json that distinguish between arrays and objects. + * Except for action=opensearch where the spec requires an array. + +=== Action API internal changes in 1.25 === +* ApiHelp has been rewritten to support i18n and paginated HTML output. + Most existing modules should continue working without changes, but should do + the following: + * Add an i18n message "apihelp-{$moduleName}-description" to replace getDescription(). + * Add i18n messages "apihelp-{$moduleName}-param-{$param}" for each parameter + to replace getParamDescription(). If necessary, the settings array returned + by getParams() can use the new ApiBase::PARAM_HELP_MSG key to override the + message. + * Implement getExamplesMessages() to replace getExamples(). +* Modules with submodules (like action=query) must have their submodules + override ApiBase::getParent() to return the correct parent object. +* The 'APIGetDescription' and 'APIGetParamDescription' hooks are deprecated, + and will have no effect for modules using i18n messages. Use + 'APIGetDescriptionMessages' and 'APIGetParamDescriptionMessages' instead. +* Api formatters will no longer be asked to display the help screen on errors. +* ApiMain::getCredits() was removed. The credits are available in the + 'api-credits' i18n message. +* ApiFormatBase has been changed to support i18n and syntax highlighting via + extensions with the new 'ApiFormatHighlight' hook. Core syntax highlighting + has been removed. +* ApiFormatBase now always buffers. Output is done when + ApiFormatBase::closePrinter is called. +* Much of the logic in ApiQueryRevisions has been split into ApiQueryRevisionsBase. +* The 'revids' parameter supplied by ApiPageSet will now count deleted + revisions as "good" if the user has the 'deletedhistory' right. New methods + ApiPageSet::getLiveRevisionIDs() and ApiPageSet::getDeletedRevisionIDs() are + provided to access just the live or just the deleted revids. +* Added ApiPageSet::setGeneratorData() and ApiPageSet::populateGeneratorData() + to allow generators to include data in the action=query result. +* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be + used for conditional registration of API modules. +* Added ApiBase::lacksSameOriginSecurity() to allow modules to easily check if + the current request was sent with the 'callback' parameter (or any future + method that breaks the same-origin policy). +* Profiling methods in ApiBase are deprecated and no longer need to be called. +* ApiResult was greatly overhauled. See inline documentation for details. +* ApiResult will automatically convert objects to strings or arrays (depending + on whether a __toString() method exists on the object), and will refuse to + add unsupported value types. + * An informal interface, ApiSerializable, exists to override the default + object conversion. +* ApiResult/ApiFormatBase "raw mode" is deprecated. +* ApiFormatXml now assumes defaults and so on instead of throwing errors when + metadata isn't set. +* (T35235) LogFormatter subclasses are now responsible for formatting log event + parameters for the API. +* Many modules have changed result data formats. While this shouldn't affect + clients not using the experimental formatversion=2, code using + ApiResult::getResultData() without the transformations for backwards + compatibility may need updating, as will code that wasn't following the old + conventions for API boolean output. +* The following methods have been deprecated and may be removed in a future + release: + * ApiBase::getDescription + * ApiBase::getParamDescription + * ApiBase::getExamples + * ApiBase::makeHelpMsg + * ApiBase::makeHelpArrayToString + * ApiBase::makeHelpMsgParameters + * ApiBase::getModuleProfileName + * ApiBase::profileIn + * ApiBase::profileOut + * ApiBase::safeProfileOut + * ApiBase::getProfileTime + * ApiBase::profileDBIn + * ApiBase::profileDBOut + * ApiBase::getProfileDBTime + * ApiBase::getResultData + * ApiFormatBase::setUnescapeAmps + * ApiFormatBase::getWantsHelp + * ApiFormatBase::setHelp + * ApiFormatBase::formatHTML + * ApiFormatBase::setBufferResult + * ApiFormatBase::getDescription + * ApiFormatBase::getNeedsRawData + * ApiMain::setHelp + * ApiMain::reallyMakeHelpMsg + * ApiMain::makeHelpMsgHeader + * ApiResult::setRawMode + * ApiResult::getIsRawMode + * ApiResult::getData + * ApiResult::setElement + * ApiResult::setContent + * ApiResult::setIndexedTagName_recursive + * ApiResult::setIndexedTagName_internal + * ApiResult::setParsedLimit + * ApiResult::beginContinuation + * ApiResult::setContinueParam + * ApiResult::setGeneratorContinueParam + * ApiResult::endContinuation + * ApiResult::size + * ApiResult::convertStatusToArray + * ApiQueryImageInfo::getPropertyDescriptions + * ApiQueryLogEvents::addLogParams +* The following classes have been deprecated and may be removed in a future + release: + * ApiQueryDeletedrevs + +=== Languages updated in 1.25 === + +MediaWiki supports over 350 languages. Many localisations are updated +regularly. Below only new and removed languages are listed, as well as +changes to languages because of Bugzilla reports. + +* Languages added: +** awa (अवधी / Awadhi), thanks to translator 1AnuraagPandey; +** bgn (بلوچی رخشانی / Western Balochi), thanks to translators + Baloch Afghanistan, Ibrahim khashrowdi and Rachitrali; +** ses (Koyraboro Senni), thanks to translator Songhay. +* (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's + interface language to kk where unexpected. +* The Chinese conversion table was substantially updated to fix a lot of + bugs and ensure better reading experience for different variants. + +=== Other changes in 1.25 === +* (T45591) Links to MediaWiki.org translatable help were added to indicators, + mostly in special pages. Local custom target titles can be placed in the + relevant '(namespace-X|action name|special page name)-helppage' system + message. Extensions can use the addHelpLink() function to do the same. +* The skin autodiscovery mechanism, deprecated in MediaWiki 1.23, has been + removed. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for + migration guide for creators and users of custom skins that relied on it. +* Javascript variables 'wgFileCanRotate' and 'wgFileExtensions' now only + available on Special:Upload. +* (T58257) Set site logo from mediawiki.skinning.interface module instead of + inline styles in the HTML. +* Removed ApiQueryUsers::getAutoGroups(). (deprecated since 1.20) +* Removed XmlDumpWriter::schemaVersion(). (deprecated since 1.20) +* Removed LogEventsList::getDisplayTitle(). (deprecated since 1.20) +* Removed Preferences::trySetUserEmail(). (deprecated since 1.20) +* Removed mw.user.name() and mw.user.anonymous() methods. (deprecated since 1.20) +* Removed 'ok' and 'err' parameters in the mediawiki.api modules. (deprecated + since 1.20) +* Removed 'async' parameter from the mw.Api#getCategories() method. (deprecated + since 1.20) +* Removed 'jquery.json' module. (deprecated since 1.24) + Use the 'json' module and global JSON object instead. +* Deprecated OutputPage::readOnlyPage() and OutputPage::rateLimited(). + Also, the former will now throw an MWException if called with one or more + arguments. +* Removed hitcounters and associated code. +* The "temp" zone of the upload respository is now considered private. If it + already exists (such as under the images/ directory), please make sure that + the directory is not web readable (e.g. via a .htaccess file). +* BREAKING CHANGE: In the XML dump format used by Special:Export and + dumpBackup.php, the and tags now apprear before the + tag, instead of after the and tags. + The new schema version is 0.10, the new schema URI is: + https://www.mediawiki.org/xml/export-0.10.xsd +* MWFunction::call() and MWFunction::callArray() were removed, having being + deprecated in 1.22. +* Deprecated the getInternalLinkAttributes, getInternalLinkAttributesObj, + and getInternalLinkAttributes methods in Linker, and removed + getExternalLinkAttributes method, which was deprecated in MediaWiki 1.18. +* Removed Sites class, which was deprecated in 1.21 and replaced by SiteSQLStore. +* Added wgRelevantArticleId to the client-side config, for use on special pages. +* Deprecated the TitleIsCssOrJsPage hook. Superseded by the + ContentHandlerDefaultModelFor hook since MediaWiki 1.21. +* Deprecated the TitleIsWikitextPage hook. Superseded by the + ContentHandlerDefaultModelFor hook since MediaWiki 1.21. +* Changed parsing of variables in schema (.sql) files: +** The substituted values are no longer parsed. (Formerly, several passes + were made for each variable, so depending on the order in which variables + were defined, variables might have been found inside encoded values. This + is no longer the case.) +** Variables are no longer string encoded when the /*$var*/ syntax is used. + If string encoding is necessary, use the '{$var}' syntax instead. +** Variable names must only consist of one or more of the characters + "A-Za-z0-9_". +** In source text of the form '{$A}'{$B}' or `{$A}`{$B}`, where variable A + does not exist yet variable B does, the latter may not be replaced. + However, this difference is unlikely to arise in practice. +* (T67278) RFC, PMID, and ISBN "magic links" must be surrounded by non-word + characters on both sides. +* The FormatAutocomments hook will now receive $pre and $post as booleans, + rather than as strings that must be prepended or appended to $comment. +* (T30950, T31025) RFC, PMID, and ISBN "magic links" can no longer contain + newlines; but they can contain   and other non-newline whitespace. +* The 'mediawiki.action.edit' ResourceLoader module no longer generates the edit + toolbar, which has been moved to a separate 'mediawiki.toolbar' module. If you + relied on this behavior, update your scripts' dependencies. +* HTMLForm's 'vform' display style has been separated to a subclass. Therefore: + * HTMLForm::isVForm() is now deprecated. + * You can no longer do this: + $form = new HTMLForm( … ); + $form->setDisplayFormat( 'vform' ); // throws exception + Instead, do this: + $form = HTMLForm::factory( 'vform', … ); +* Deprecated Revision methods getRawUser(), getRawUserText() and getRawComment(). +* BREAKING CHANGE: mediawiki.user.generateRandomSessionId: + The alphabet of the prior string returned was A-Za-z0-9 and now it is 0-9A-F +* (T87504) Avoid serving SVG background-images in CSS for Opera 12, which + renders them incorrectly when combined with border-radius or background-size. +* Removed maintenance script dumpSisterSites.php. +* DatabaseBase class constructors must be called using the array argument style. + Ideally, DatabaseBase:factory() should be used instead in most cases. +* Deprecated ParserOutput::addSecondaryDataUpdate and ParserOutput::getSecondaryDataUpdates. + This is a hard deprecation, with getSecondaryDataUpdates returning an empty array and + addSecondaryDataUpdate throwing an exception. These functions will be removed in 1.26, + since they interfere with caching of ParserOutput objects. +* Introduced new hook 'SecondaryDataUpdates' that allows extensions to inject custom updates. +* Introduced new hook 'OpportunisticLinksUpdate' that allows extensions to perform + updates when a page is re-rendered. +* EditPage::attemptSave has been modified not to call handleStatus itself and + instead just returns the Status object. Extension calling it should be aware of + this. +* Removed class DBObject. (unused since 1.10) +* wfDiff() is deprecated. +* The -m (maximum replication lag) option of refreshLinks.php was removed. + It had no effect since MediaWiki 1.18 and should be removed from any cron + jobs or similar scripts you may have set up. +* (T85864) The following messages no longer support raw html: redirectto, + thisisdeleted, viewdeleted, editlink, retrievedfrom, version-poweredby-others, + retrievedfrom, thisisdeleted, viewsourcelink, lastmodifiedat, laggedslavemode, + protect-summary-cascade +* All BloomCache related code has been removed. This was largely experimental. +* $wgResourceModuleSkinStyles no longer supports per-module local or remote paths. They + can only be set for the entire skin. +* Removed global function swap(). (deprecated since 1.24) +* Deprecated the ".php5" file extension entry points and the $wgScriptExtension + configuration variable. Refer to the ".php" files instead. If you want + ".php5" URLs to continue to work, set up redirects. In Apache, this can be + done by enabling mod_rewrite and adding the following rules to your + configuration: + + RewriteEngine On + RewriteBase / + RewriteRule ^(.*)\.php5 $1.php [R=301,L] + +* The global importScriptURI and importStylesheetURI functions, as well as the + loadedScripts object, from wikibits.js (deprecated since 1.17) now emit + warnings through mw.log.warn when accessed. + + +== Compatibility == + +MediaWiki 1.25 requires PHP 5.3.3 or later. There is experimental support for +HHVM 3.3.0. + +MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but +support for them is somewhat less mature. There is experimental support for +Oracle and Microsoft SQL Server. + +The supported versions are: + +* MySQL 5.0.3 or later +* PostgreSQL 8.3 or later +* SQLite 3.3.7 or later +* Oracle 9.0.1 or later +* Microsoft SQL Server 2005 (9.00.1399) + +== Upgrading == + +1.25 has several database changes since 1.24, and will not work without schema +updates. Note that due to changes to some very large tables like the revision +table, the schema update may take quite long (minutes on a medium sized site, +many hours on a large site). + +If upgrading from before 1.11, and you are using a wiki as a commons +repository, make sure that it is updated as well. Otherwise, errors may arise +due to database schema changes. + +If upgrading from before 1.7, you may want to run refreshLinks.php to ensure +new database fields are filled with data. + +If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to +1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed +with MediaWiki 1.21. + +Don't forget to always back up your database before upgrading! + +See the file UPGRADE for more detailed upgrade instructions. + +For notes on 1.24.x and older releases, see HISTORY. == MediaWiki 1.24 == @@ -194,6 +740,13 @@ Change notes from older releases. For current info see RELEASE-NOTES-1.25. Special:DeletedContributions * Added DeletedContributionsLineEnding hook allowing extensions to format Special:DeletedContributions lines +* (T69525) You can now make MediaWiki speed up its thumbnail rendering by using + intermediary thumbnails. $wgThumbnailBuckets must be set to a list of target + thumbnail widths; when a new thumbnail needs to be rendered, MediaWiki will + find the smallest bucket smaller than the original but larger than the target + width + $wgThumbnailMinimumBucketDistance, and it will scale that thumbnail, + rather than the original, down to the target size at greater speed in return + for minor loss of fidelity. === Bug fixes in 1.24 === * (bug 50572) MediaWiki:Blockip should support gender diff --git a/RELEASE-NOTES-1.25 b/RELEASE-NOTES-1.25 deleted file mode 100644 index 08a6c157..00000000 --- a/RELEASE-NOTES-1.25 +++ /dev/null @@ -1,627 +0,0 @@ -Security reminder: If you have PHP's register_globals option set, you must -turn it off. MediaWiki will not work with it enabled. - -== MediaWiki 1.25.3 == - -This is a security and maintenance release of the MediaWiki 1.25 branch. - -=== Changes since 1.25.2 === - -* (T98975) Fix having multiple callbacks for a single hook. -* (T107632) maintenance/refreshLinks.php did not always remove all links - pointing to nonexistent pages. -* (T104142) $wgEmergencyContact and $wgPasswordSender now use their default - value if set to an empty string. -* (T62174) Provide fallbacks for use of mb_convert_encoding() in - HtmlFormatter. It was causing an error when accessing the api help page - if the mbstring PHP extension was not installed. -* (T105896) Confirmation emails would sometimes contain invalid codes. -* (T105597) Fixed edit stash inclusion queries. -* (T91850) SECURITY: Add throttle check in ApiUpload and SpecialUpload -* (T91203, T91205) SECURITY: API: Improve validation in chunked uploading -* (T95589) SECURITY: RevDel: Check all revisions for suppression, not just the - first -* (T108616) SECURITY: Avoid exposure of local path in PNG thumbnails - -== MediaWiki 1.25.2 == - -This is a security and maintenance release of the MediaWiki 1.25 branch. - -=== Changes since 1.25.1 === - -* (T94116) SECURITY: Compare API watchlist token in constant time -* (T97391) SECURITY: Escape error message strings in thumb.php -* (T106893) SECURITY: Don't leak autoblocked IP addresses on - Special:DeletedContributions -* (T102562) Fix InstantCommons parameters to handle the new HTTPS-only - policy of Wikimedia Commons. -* (T100767) Setting a configuration setting for skin or extension to - false in LocalSettings.php was not working. -* (T100635) API action=opensearch json output no longer breaks when - $wgDebugToolbar is enabled. -* (T102522) Using an extension.json or skin.json file which has - a "manifest_version" property for 1.26 compatability will no longer - trigger warnings. -* (T86156) Running updateSearchIndex.php will not throw an error as - page_restrictions has been added to the locked table list. -* Special:Version would throw notices if using SVN due to an incorrectly - named variable. Add an additional check that an index is defined. - -== MediaWiki 1.25.1 == - -This is a bug fix release of the MediaWiki 1.25 branch. - -=== Changes since 1.25 === -* (T100351) Fix syntax errors in extension.json of ConfirmEdit extension - -== MediaWiki 1.25 == - -MediaWiki 1.25.x is the stable branch and is recommended for use in production. - -=== Configuration changes in 1.25 === -* $wgPageShowWatchingUsers was removed. -* $wgLocalVirtualHosts has been added to replace $wgConf->localVHosts. -* $wgAntiLockFlags was removed. -* $wgJavaScriptTestConfig was removed. -* Edit tokens returned from User::getEditToken may change on every call. Token - validity must be checked by passing the user-supplied token to - User::matchEditToken rather than by testing for equality with a - newly-generated token. -* (T74951) The UserGetLanguageObject hook may be passed any IContextSource - for its $context parameter. Formerly it was documented as receiving a - RequestContext specifically. -* Profiling was restructured and $wgProfiler now requires an 'output' parameter. - See StartProfiler.sample for details. -* $wgMangleFlashPolicy was added to make MediaWiki's mangling of anything that - might be a flash policy directive configurable. -* ApiOpenSearch now supports XML output. The OpenSearchXml extension should no - longer be used. If extracts and page images are desired, the TextExtracts and - PageImages extensions are required. -* $wgOpenSearchTemplate is deprecated in favor of $wgOpenSearchTemplates. -* Edits are now prepared via AJAX as users type edit summaries. This behavior - can be disabled via $wgAjaxEditStash. -* (T46740) The temporary option $wgIncludejQueryMigrate was removed, along - with the jQuery Migrate library, as indicated when this option was provided in - MediaWiki 1.24. -* ProfilerStandard and ProfilerSimpleTrace were removed. Make sure that any - StartProfiler.php config is updated to reflect this. Xhprof is available - for zend/hhvm. Also, for hhvm, one can consider using its xenon profiler. -* Default value of $wgSVGConverters['rsvg'] now uses the 'rsvg-convert' binary - rather than 'rsvg'. -* Default value of $wgSVGConverters['ImageMagick'] now uses transparent - background with white fallback color, rather than just white background. - * MediaWikiBagOStuff class removed, make sure any object cache config - uses SqlBagOStuff instead. -* The 'daemonized' flag must be set to true in $wgJobTypeConf for any redis - job queues. This means that mediawiki/services/jobrunner service has to - be installed and running for any such queues to work. -* $wgAutopromoteOnce no longer supports the 'view' event. For keeping some - compatibility, any 'view' event triggers will still trigger on 'edit'. -* $wgExtensionDirectory was added for when your extensions directory is somewhere - other than $IP/extensions (as $wgStyleDirectory does with the skins directory). - -=== New features in 1.25 === -* (T64861) Updated plural rules to CLDR 26. Includes incompatible changes - for plural forms in Russian, Prussian, Tagalog, Manx and several languages - that fall back to Russian. -* (T60139) ResourceLoaderFileModule now supports language fallback - for 'languageScripts'. -* Added a new hook, "ContentAlterParserOutput", to allow extensions to modify the - parser output for a content object before links update. -* (T37785) Enhanced recent changes and extended watchlist are now default. - Documentation: https://meta.wikimedia.org/wiki/Help:Enhanced_recent_changes - and https://www.mediawiki.org/wiki/Manual:$wgDefaultUserOptions. -* (T69341) SVG images will no longer be base64-encoded when being embedded - in CSS. This results in slight size increase before gzip compression (due to - percent-encoding), but up to 20% decrease after it. -* Update jStorage to v0.4.12. -* MediaWiki now natively supports page status indicators: icons (or short text - snippets) usually displayed in the top-right corner of the page. They have - been in use on Wikipedia for a long time, implemented using templates and CSS - absolute positioning. - - Basic wikitext syntax: [[File:Foo.svg|20px]] - - Usage instructions: https://www.mediawiki.org/wiki/Help:Page_status_indicators - - Adjusting custom skins to support indicators: - https://www.mediawiki.org/wiki/Manual:Skinning#Page_status_indicators -* Edit tokens may now be time-limited: passing a maximum age to - User::matchEditToken will reject any older tokens. -* The debug logging internals have been overhauled, and are now using the - PSR-3 interfaces. -* Update CSSJanus to v1.1.1. -* Update lessphp to v0.5.0. -* Added a hook, "ApiOpenSearchSuggest", to allow extensions to provide extracts - and images for ApiOpenSearch output. The semantics are identical to the - "OpenSearchXml" hook provided by the OpenSearchXml extension. -* PrefixSearchBackend hook now has an $offset parameter. Combined with $limit, - this allows for pagination of prefix results. Extensions using this hook - should implement supporting behavior. Not doing so can result in undefined - behavior from API clients trying to continue through prefix results. -* Update jQuery from v1.11.1 to v1.11.3. -* External libraries installed via composer will now be displayed - on Special:Version in their own section. Extensions or skins that are - installed via composer will not be shown in this section as it is assumed - they will add the proper credits to the skins or extensions section. They - can also be accessed through the API via the new siprop=libraries to - ApiQuerySiteInfo. -* Update QUnit from v1.14.0 to v1.16.0. -* Update Moment.js from v2.8.3 to v2.8.4. -* Special:Tags now allows for manipulating the list of user-modifiable change - tags. -* Added 'managetags' user right and 'ChangeTagCanCreate', 'ChangeTagCanDelete', - and 'ChangeTagCanCreate' hooks to allow for managing user-modifiable change - tags. -* Added 'ChangeTagsListActive' hook, to separate the concepts of "defined" and - "active" formerly conflated by the 'ListDefinedTags' hook. -* Added TemplateParser class that provides a server-side interface to cachable - dynamically-compiled Mustache templates (currently uses lightncandy library). -* Clickable anchors for each section heading in the content are now generated - and appear in the gutter on hovering over the heading. -* Added 'CategoryViewer::doCategoryQuery' and 'CategoryViewer::generateLink' hooks - to allow extensions to override how links to pages are rendered within NS_CATEGORY -* (T19665) Special:WantedPages only lists page which having at least one red link - pointing to it. -* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be - used for conditional registration of API modules. -* New hook 'EnhancedChangesList::getLogText' to alter, remove or add to the - links of a group of changes in EnhancedChangesList. -* A full interface for StatsD metric reporting has been added to the context - interface, reachable via IContextSource::getStats(). -* Move the jQuery Client library from being mastered in MediaWiki as v0.1.0 to a - proper, published library, which is now tagged as v1.0.0. -* A new message (defaulting to blank), 'editnotice-notext', can be shown to users - when they are editing if no edit notices apply to the page being edited. -* (T94536) You can now make the sitenotice appear to logged-in users only by - editing MediaWiki:Anonnotice and replacing its content with "". Setting it to - "-" (default) will continue disable it and fallback to MediaWiki:Sitenotice. -* Modifying the tagging of a revision or log entry is now available via - Special:EditTags, generally accessed via the revision-deletion-like interface - on history pages and Special:Log is likely to be more useful. -* Added 'applychangetags' and 'changetags' user rights. -* (T35235) LogFormatter subclasses are now responsible for formatting the - parameters for API log event output. Extensions should implement the new - getParametersForApi() method in their log formatters. - -==== External libraries ==== -* MediaWiki now requires certain external libraries to be installed. In the past - these were bundled inside the Git repository of MediaWiki core, but now they - need to be installed separately. For users using the tarball, this will be taken - care of and no action will be required. Users using Git will either need to use - composer to fetch dependencies or use the mediawiki/vendor repository which includes - all dependencies for MediaWiki core and ones used in Wikimedia deployment. Detailed - instructions can be found at: - https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries -* The following libraries are now required: -** psr/log - This library provides the interfaces set by the PSR-3 standard (http://www.php-fig.org/psr/psr-3/) - which are used by MediaWiki internally via the - MediaWiki\Logger\LoggerFactory class. - See the structured logging RfC (https://www.mediawiki.org/wiki/Requests_for_comment/Structured_logging) - for more background information. -** cssjanus/cssjanus - This library was formerly bundled with MediaWiki core and has been removed. - It automatically flips CSS for RTL support. -** leafo/lessphp - This library was formerly bundled with MediaWiki core and has been removed. - It compiles LESS files into CSS. -** wikimedia/cdb - This library was formerly a part of MediaWiki core, and has been moved into a separate library. - It provides CDB functions which are used in the Interwiki and Localization caches. - More information about the library can be found at https://www.mediawiki.org/wiki/CDB. -** liuggio/statsd-php-client - This library provides a StatsD client API for logging application metrics to a remote server. - -=== Bug fixes in 1.25 === -* (T73003) No additional code will be generated to try to load CSS-embedded - SVG images in Internet Explorer 6 and 7, as they don't support them anyway. -* (T69021) On Special:BookSources, corrected validation of ISBNs (both - 10- and 13-digit forms) containing "X". -* Page moving was refactored into a MovePage class. As part of that: -** The AbortMove hook was removed. -** MovePageIsValidMove is for extensions to specify whether a page - cannot be moved for technical reasons, and should not be overridden. -** MovePageCheckPermissions is for checking whether the given user is - allowed to make the move. -** Title::moveNoAuth() was deprecated. Use the MovePage class instead. -** Title::moveTo() was deprecated. Use the MovePage class instead. -** Title::isValidMoveOperation() broken down into MovePage::isValidMove() - and MovePage::checkPermissions(). -* (T18530) Multiple autocomments are now formatted in an edit summary. -* (T70361) Autocomments containing "/*" are parsed correctly. -* The Special:WhatLinksHere page linked from 'Number of redirects to this page' - on action=info about a file page does not list file links anymore. -* (T78637) Search bar is not autofocused unless it is empty so that proper scrolling using arrow keys is possible. -* (T50853) Database::makeList() modified to handle 'NULL' separately when building IN clause -* (T85192) Captcha position modified in Usercreate template. As a result: -** extrafields parameter added to Usercreate.php to insert additional data -** 'extend' method added to QuickTemplate to append additional values to any field of data array -* (T86974) Several Title methods now load from the database when necessary - (instead of returning incorrect results) even when the page ID is known. -* (T74070) Duplicate search for archived files on file upload now omits the extension. - This requires the fa_sha1 field being populated. -* Removed rel="archives" from the "View history" link, as it did not pass - HTML validation. -* $wgUseTidy is now set when parserTests are run with the tidy option to match - output on wiki. -* (T37472) update.php will purge ResourceLoader cache unless --nopurge is passed to it. -* (T72109) mediawiki.language should respect $wgTranslateNumerals in convertNumber(). - -=== Action API changes in 1.25 === -* (T67403) XML tag highlighting is now only performed for formats - "xmlfm" and "wddxfm". -* action=paraminfo supports generalized submodules (modules=query+value), - querymodules and formatmodules are deprecated -* action=paraminfo no longer outputs descriptions and other help text by - default. If needed, it may be requested using the new 'helpformat' parameter. -* action=help has been completely rewritten, and outputs help in HTML - rather than plain text. -* Hitting api.php without specifying an action now displays only the help for - the main module, with links to submodule help. -* API help is no longer displayed on errors. -* 'uselang' is now a recognized API parameter; "uselang=user" may be used to - explicitly select the language from the current user's preferences, and - "uselang=content" may be used to select the wiki's content language. -* Default output format for the API is now jsonfm. -* Simplified continuation will return a "batchcomplete" property in the result - when a batch of pages is complete. -* Pretty-printed HTML output now has nicer formatting and (if available) - better syntax highlighting. -* Deprecated list=deletedrevs in favor of newly-added prop=deletedrevisions and - list=alldeletedrevisions. -* prop=revisions will gracefully continue when given too many revids or titles, - rather than just ignoring the extras. -* prop=revisions will no longer die if rvcontentformat doesn't match a - revision's content model; it will instead warn and omit the content. -* If the user has the 'deletedhistory' right, action=query's revids parameter - will now recognize deleted revids. -* prop=revisions may be used as a generator, generating revids. -* (T68776) format=json results will no longer be corrupted when - $wgMangleFlashPolicy is in effect. format=php results will cleanly return an - error instead of returning invalid serialized data. -* Generators may now return data for the generated pages when used with - action=query. -* Query page data for generator=search and generator=prefixsearch will now - include an "index" field, which may be used by the client for sorting the - search results. -* ApiOpenSearch now supports XML output. -* ApiOpenSearch will now output descriptions and URLs as array indexes 2 and 3 - in JSON format. -* (T76051) list=tags will now continue correctly. -* (T76052) list=tags can now indicate whether a tag is defined. -* (T75522) list=prefixsearch now supports continuation -* (T78737) action=expandtemplates can now return page properties. -* (T78690) list=allimages now accepts multiple pipe-separated values - for the 'aimime' parameter. -* prop=info with inprop=protections will now return applicable protection types - with the 'restrictiontypes' key. -* (T85417) When resolving redirects, ApiPageSet will now add the targets of - interwiki redirects to the list of interwiki titles. -* (T85417) When outputting the list of redirect titles, a 'tointerwiki' - property (like the existing 'tofragment' property) will be set. -* Added action=managetags to allow for managing the list of - user-modifiable change tags. Actually modifying the tagging of a revision or - log entry is not implemented yet. -* list=tags has additional properties to indicate 'active' status and tag - sources. -* siprop=libraries was added to ApiQuerySiteInfo to list installed external libraries. -* (T88010) Added action=checktoken, to test a CSRF token's validity. -* (T88010) Added intestactions to prop=info, to allow querying of - Title::userCan() via the API. -* Default type param for query list=watchlist and list=recentchanges has - been changed from all types (e.g. including 'external') to 'edit|new|log'. -* Added formatversion to format=json. Still "experimental" as further changes - to the output formatting might still be made. -* (T73020) Log event details are now always under a 'params' subkey for - list=logevents, and a 'logparams' subkey for list=watchlist and - list=recentchanges. -* Log event details are changing formatting: - * block events now report flags as an array rather than as a comma-separated - list. - * patrol events now report the 'auto' flag as a boolean (absent/empty string - for BC formats) rather than as an integer. - * rights events now report the old and new group lists as arrays rather than - as comma-separated lists. - * merge events use new-style formatting. - * delete/event and delete/revision events use new-style formatting. -* The root node and various other nodes will now always be an object in formats - such as json that distinguish between arrays and objects. - * Except for action=opensearch where the spec requires an array. - -=== Action API internal changes in 1.25 === -* ApiHelp has been rewritten to support i18n and paginated HTML output. - Most existing modules should continue working without changes, but should do - the following: - * Add an i18n message "apihelp-{$moduleName}-description" to replace getDescription(). - * Add i18n messages "apihelp-{$moduleName}-param-{$param}" for each parameter - to replace getParamDescription(). If necessary, the settings array returned - by getParams() can use the new ApiBase::PARAM_HELP_MSG key to override the - message. - * Implement getExamplesMessages() to replace getExamples(). -* Modules with submodules (like action=query) must have their submodules - override ApiBase::getParent() to return the correct parent object. -* The 'APIGetDescription' and 'APIGetParamDescription' hooks are deprecated, - and will have no effect for modules using i18n messages. Use - 'APIGetDescriptionMessages' and 'APIGetParamDescriptionMessages' instead. -* Api formatters will no longer be asked to display the help screen on errors. -* ApiMain::getCredits() was removed. The credits are available in the - 'api-credits' i18n message. -* ApiFormatBase has been changed to support i18n and syntax highlighting via - extensions with the new 'ApiFormatHighlight' hook. Core syntax highlighting - has been removed. -* ApiFormatBase now always buffers. Output is done when - ApiFormatBase::closePrinter is called. -* Much of the logic in ApiQueryRevisions has been split into ApiQueryRevisionsBase. -* The 'revids' parameter supplied by ApiPageSet will now count deleted - revisions as "good" if the user has the 'deletedhistory' right. New methods - ApiPageSet::getLiveRevisionIDs() and ApiPageSet::getDeletedRevisionIDs() are - provided to access just the live or just the deleted revids. -* Added ApiPageSet::setGeneratorData() and ApiPageSet::populateGeneratorData() - to allow generators to include data in the action=query result. -* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be - used for conditional registration of API modules. -* Added ApiBase::lacksSameOriginSecurity() to allow modules to easily check if - the current request was sent with the 'callback' parameter (or any future - method that breaks the same-origin policy). -* Profiling methods in ApiBase are deprecated and no longer need to be called. -* ApiResult was greatly overhauled. See inline documentation for details. -* ApiResult will automatically convert objects to strings or arrays (depending - on whether a __toString() method exists on the object), and will refuse to - add unsupported value types. - * An informal interface, ApiSerializable, exists to override the default - object conversion. -* ApiResult/ApiFormatBase "raw mode" is deprecated. -* ApiFormatXml now assumes defaults and so on instead of throwing errors when - metadata isn't set. -* (T35235) LogFormatter subclasses are now responsible for formatting log event - parameters for the API. -* Many modules have changed result data formats. While this shouldn't affect - clients not using the experimental formatversion=2, code using - ApiResult::getResultData() without the transformations for backwards - compatibility may need updating, as will code that wasn't following the old - conventions for API boolean output. -* The following methods have been deprecated and may be removed in a future - release: - * ApiBase::getDescription - * ApiBase::getParamDescription - * ApiBase::getExamples - * ApiBase::makeHelpMsg - * ApiBase::makeHelpArrayToString - * ApiBase::makeHelpMsgParameters - * ApiBase::getModuleProfileName - * ApiBase::profileIn - * ApiBase::profileOut - * ApiBase::safeProfileOut - * ApiBase::getProfileTime - * ApiBase::profileDBIn - * ApiBase::profileDBOut - * ApiBase::getProfileDBTime - * ApiBase::getResultData - * ApiFormatBase::setUnescapeAmps - * ApiFormatBase::getWantsHelp - * ApiFormatBase::setHelp - * ApiFormatBase::formatHTML - * ApiFormatBase::setBufferResult - * ApiFormatBase::getDescription - * ApiFormatBase::getNeedsRawData - * ApiMain::setHelp - * ApiMain::reallyMakeHelpMsg - * ApiMain::makeHelpMsgHeader - * ApiResult::setRawMode - * ApiResult::getIsRawMode - * ApiResult::getData - * ApiResult::setElement - * ApiResult::setContent - * ApiResult::setIndexedTagName_recursive - * ApiResult::setIndexedTagName_internal - * ApiResult::setParsedLimit - * ApiResult::beginContinuation - * ApiResult::setContinueParam - * ApiResult::setGeneratorContinueParam - * ApiResult::endContinuation - * ApiResult::size - * ApiResult::convertStatusToArray - * ApiQueryImageInfo::getPropertyDescriptions - * ApiQueryLogEvents::addLogParams -* The following classes have been deprecated and may be removed in a future - release: - * ApiQueryDeletedrevs - -=== Languages updated in 1.25 === - -MediaWiki supports over 350 languages. Many localisations are updated -regularly. Below only new and removed languages are listed, as well as -changes to languages because of Bugzilla reports. - -* Languages added: -** awa (अवधी / Awadhi), thanks to translator 1AnuraagPandey; -** bgn (بلوچی رخشانی / Western Balochi), thanks to translators - Baloch Afghanistan, Ibrahim khashrowdi and Rachitrali; -** ses (Koyraboro Senni), thanks to translator Songhay. -* (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's - interface language to kk where unexpected. -* The Chinese conversion table was substantially updated to fix a lot of - bugs and ensure better reading experience for different variants. - -=== Other changes in 1.25 === -* (T45591) Links to MediaWiki.org translatable help were added to indicators, - mostly in special pages. Local custom target titles can be placed in the - relevant '(namespace-X|action name|special page name)-helppage' system - message. Extensions can use the addHelpLink() function to do the same. -* The skin autodiscovery mechanism, deprecated in MediaWiki 1.23, has been - removed. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for - migration guide for creators and users of custom skins that relied on it. -* Javascript variables 'wgFileCanRotate' and 'wgFileExtensions' now only - available on Special:Upload. -* (T58257) Set site logo from mediawiki.skinning.interface module instead of - inline styles in the HTML. -* Removed ApiQueryUsers::getAutoGroups(). (deprecated since 1.20) -* Removed XmlDumpWriter::schemaVersion(). (deprecated since 1.20) -* Removed LogEventsList::getDisplayTitle(). (deprecated since 1.20) -* Removed Preferences::trySetUserEmail(). (deprecated since 1.20) -* Removed mw.user.name() and mw.user.anonymous() methods. (deprecated since 1.20) -* Removed 'ok' and 'err' parameters in the mediawiki.api modules. (deprecated - since 1.20) -* Removed 'async' parameter from the mw.Api#getCategories() method. (deprecated - since 1.20) -* Removed 'jquery.json' module. (deprecated since 1.24) - Use the 'json' module and global JSON object instead. -* Deprecated OutputPage::readOnlyPage() and OutputPage::rateLimited(). - Also, the former will now throw an MWException if called with one or more - arguments. -* Removed hitcounters and associated code. -* The "temp" zone of the upload respository is now considered private. If it - already exists (such as under the images/ directory), please make sure that - the directory is not web readable (e.g. via a .htaccess file). -* BREAKING CHANGE: In the XML dump format used by Special:Export and - dumpBackup.php, the and tags now apprear before the - tag, instead of after the and tags. - The new schema version is 0.10, the new schema URI is: - https://www.mediawiki.org/xml/export-0.10.xsd -* MWFunction::call() and MWFunction::callArray() were removed, having being - deprecated in 1.22. -* Deprecated the getInternalLinkAttributes, getInternalLinkAttributesObj, - and getInternalLinkAttributes methods in Linker, and removed - getExternalLinkAttributes method, which was deprecated in MediaWiki 1.18. -* Removed Sites class, which was deprecated in 1.21 and replaced by SiteSQLStore. -* Added wgRelevantArticleId to the client-side config, for use on special pages. -* Deprecated the TitleIsCssOrJsPage hook. Superseded by the - ContentHandlerDefaultModelFor hook since MediaWiki 1.21. -* Deprecated the TitleIsWikitextPage hook. Superseded by the - ContentHandlerDefaultModelFor hook since MediaWiki 1.21. -* Changed parsing of variables in schema (.sql) files: -** The substituted values are no longer parsed. (Formerly, several passes - were made for each variable, so depending on the order in which variables - were defined, variables might have been found inside encoded values. This - is no longer the case.) -** Variables are no longer string encoded when the /*$var*/ syntax is used. - If string encoding is necessary, use the '{$var}' syntax instead. -** Variable names must only consist of one or more of the characters - "A-Za-z0-9_". -** In source text of the form '{$A}'{$B}' or `{$A}`{$B}`, where variable A - does not exist yet variable B does, the latter may not be replaced. - However, this difference is unlikely to arise in practice. -* (T67278) RFC, PMID, and ISBN "magic links" must be surrounded by non-word - characters on both sides. -* The FormatAutocomments hook will now receive $pre and $post as booleans, - rather than as strings that must be prepended or appended to $comment. -* (T30950, T31025) RFC, PMID, and ISBN "magic links" can no longer contain - newlines; but they can contain   and other non-newline whitespace. -* The 'mediawiki.action.edit' ResourceLoader module no longer generates the edit - toolbar, which has been moved to a separate 'mediawiki.toolbar' module. If you - relied on this behavior, update your scripts' dependencies. -* HTMLForm's 'vform' display style has been separated to a subclass. Therefore: - * HTMLForm::isVForm() is now deprecated. - * You can no longer do this: - $form = new HTMLForm( … ); - $form->setDisplayFormat( 'vform' ); // throws exception - Instead, do this: - $form = HTMLForm::factory( 'vform', … ); -* Deprecated Revision methods getRawUser(), getRawUserText() and getRawComment(). -* BREAKING CHANGE: mediawiki.user.generateRandomSessionId: - The alphabet of the prior string returned was A-Za-z0-9 and now it is 0-9A-F -* (T87504) Avoid serving SVG background-images in CSS for Opera 12, which - renders them incorrectly when combined with border-radius or background-size. -* Removed maintenance script dumpSisterSites.php. -* DatabaseBase class constructors must be called using the array argument style. - Ideally, DatabaseBase:factory() should be used instead in most cases. -* Deprecated ParserOutput::addSecondaryDataUpdate and ParserOutput::getSecondaryDataUpdates. - This is a hard deprecation, with getSecondaryDataUpdates returning an empty array and - addSecondaryDataUpdate throwing an exception. These functions will be removed in 1.26, - since they interfere with caching of ParserOutput objects. -* Introduced new hook 'SecondaryDataUpdates' that allows extensions to inject custom updates. -* Introduced new hook 'OpportunisticLinksUpdate' that allows extensions to perform - updates when a page is re-rendered. -* EditPage::attemptSave has been modified not to call handleStatus itself and - instead just returns the Status object. Extension calling it should be aware of - this. -* Removed class DBObject. (unused since 1.10) -* wfDiff() is deprecated. -* The -m (maximum replication lag) option of refreshLinks.php was removed. - It had no effect since MediaWiki 1.18 and should be removed from any cron - jobs or similar scripts you may have set up. -* (T85864) The following messages no longer support raw html: redirectto, - thisisdeleted, viewdeleted, editlink, retrievedfrom, version-poweredby-others, - retrievedfrom, thisisdeleted, viewsourcelink, lastmodifiedat, laggedslavemode, - protect-summary-cascade -* All BloomCache related code has been removed. This was largely experimental. -* $wgResourceModuleSkinStyles no longer supports per-module local or remote paths. They - can only be set for the entire skin. -* Removed global function swap(). (deprecated since 1.24) -* Deprecated the ".php5" file extension entry points and the $wgScriptExtension - configuration variable. Refer to the ".php" files instead. If you want - ".php5" URLs to continue to work, set up redirects. In Apache, this can be - done by enabling mod_rewrite and adding the following rules to your - configuration: - - RewriteEngine On - RewriteBase / - RewriteRule ^(.*)\.php5 $1.php [R=301,L] - -* The global importScriptURI and importStylesheetURI functions, as well as the - loadedScripts object, from wikibits.js (deprecated since 1.17) now emit - warnings through mw.log.warn when accessed. - -== Compatibility == - -MediaWiki 1.25 requires PHP 5.3.3 or later. There is experimental support for -HHVM 3.3.0. - -MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but -support for them is somewhat less mature. There is experimental support for -Oracle and Microsoft SQL Server. - -The supported versions are: - -* MySQL 5.0.3 or later -* PostgreSQL 8.3 or later -* SQLite 3.3.7 or later -* Oracle 9.0.1 or later -* Microsoft SQL Server 2005 (9.00.1399) - -== Upgrading == - -1.25 has several database changes since 1.24, and will not work without schema -updates. Note that due to changes to some very large tables like the revision -table, the schema update may take quite long (minutes on a medium sized site, -many hours on a large site). - -If upgrading from before 1.11, and you are using a wiki as a commons -repository, make sure that it is updated as well. Otherwise, errors may arise -due to database schema changes. - -If upgrading from before 1.7, you may want to run refreshLinks.php to ensure -new database fields are filled with data. - -If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to -1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed -with MediaWiki 1.21. - -Don't forget to always back up your database before upgrading! - -See the file UPGRADE for more detailed upgrade instructions. - -For notes on 1.24.x and older releases, see HISTORY. - -== Online documentation == - -Documentation for both end-users and site administrators is available on -MediaWiki.org, and is covered under the GNU Free Documentation License (except -for pages that explicitly state that their contents are in the public domain): - - https://www.mediawiki.org/wiki/Documentation - -== Mailing list == - -A mailing list is available for MediaWiki user support and discussion: - - https://lists.wikimedia.org/mailman/listinfo/mediawiki-l - -A low-traffic announcements-only list is also available: - - https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce - -It's highly recommended that you sign up for one of these lists if you're -going to run a public MediaWiki, so you can be notified of security fixes. - -== IRC help == - -There's usually someone online in #mediawiki on irc.freenode.net. diff --git a/RELEASE-NOTES-1.26 b/RELEASE-NOTES-1.26 new file mode 100644 index 00000000..81405f50 --- /dev/null +++ b/RELEASE-NOTES-1.26 @@ -0,0 +1,312 @@ +Security reminder: If you have PHP's register_globals option set, you must +turn it off. MediaWiki will not work with it enabled. + +== MediaWiki 1.26 == + +=== Configuration changes in 1.26 === +* $wgPasswordResetRoutes['email'] = true by default. +* $wgEnableParserCache was deprecated, set $wgParserCacheType to CACHE_NONE + instead if you want to disable the parser cache. +* New-style continuation is now the default for API action=continue. Clients may + use the 'rawcontinue' parameter to receive raw query-continue data, but the + new style is encouraged as it's harder to implement incorrectly. +* Deprecated API formats dump and wddx have been completely removed. +* (T7645) The "Signature" button on the edit toolbar is now hidden by default + in non-talk namespaces. A new configuration variable, + $wgExtraSignatureNamespaces, controls in which subject (non-talk) namespaces + the "Signature" button on the edit toolbar will be displayed. +* $wgResourceLoaderUseESI was deprecated and removed. This was an experimental + feature that was never enabled by default. +* $wgResourceLoaderExperimentalAsyncLoading was deprecated and removed. + This experimental feature was never enabled by default and is obsolete as of + MediaWiki 1.26, in where ResourceLoader became fully asynchronous. +* $wgMasterWaitTimeout was removed (deprecated in 1.24). +* Fields in ParserOptions are now private. Use the accessors instead. +* Custom LESS functions (defined via $wgResourceLoaderLESSFunctions or + in extension.json) have been removed, after being deprecated in 1.24. +* $wgAlwaysUseTidy has been removed. +* ResetSessionID hook has been removed. Nothing seems to use it. +* Certain AuthPlugin methods are deprecated in favor of new hooks: +** AuthPlugin::initUser() is replaced by LocalUserCreated. +** AuthPlugin::updateUser() is replaced by UserLoggedIn. +** AuthPlugin::updateExternalDB() is replaced by the existing UserSaveSettings. +** AuthPlugin::updateExternalDBGroups() is replaced by UserGroupsChanged. +** AuthPluginUser::isHidden() is replaced by UserIsHidden. +** AuthPluginUser::isLocked() is replaced by UserIsLocked. +* The UserRights hook is deprecated in favor of the new UserGroupsChanged hook. +* AuthPlugin::initUser() and AuthPlugin::updateUser() should no longer replace + the passed User object. +* $wgBlockAllowsUTEdit is now set to true by default. This allows + blocked users to edit their talk pages unless explicitly disabled + when they are being blocked. + +=== New features in 1.26 === +* (T51506) Now action=info gives estimates of actual watchers for a page. + See $wgRCMaxAge, $wgWatchersMaxAge and $wgUnwatchedPageSecret + to learn how to configure if needed. +* Change tags can now be hidden in the interface by disabling the associated + "tag-" interface message. +* ':' (colon) is now invalid in usernames for new accounts. Existing accounts + are not affected. +* Added a new hook, 'LogException', to log exceptions in nonstandard ways. +* Revive the 'SpecialSearchResultsAppend' hook which occurs after the list of + search results are rendered. The initial use case is to append a "give us + feedback" link beneath the search results. +* Added a new hook, 'RejectParserCacheValue', which allows extensions to + reject an otherwise-successful parser cache lookup. The intent is to allow + extensions to manage the eviction of archaic HTML output from the cache. +* (T68699) The expiration of the UserID and Token login cookies + ($wgExtendedLoginCookieExpiration) can be configured independently of the + expiration of all other cookies ($wgCookieExpiration). +* (T50519) Support for generating JPEG/PNG thumbnails from WebP images added + if ImageMagick is used as image scaler ($wgUseImageMagick = true). Uploading + of WebP images still disabled by default. Add $wgFileExtensions[] = + 'webp'; to LocalSettings.php to enable uploading of WebP images. +* Added new hooks 'EnhancedChangesListModifyLineData' & + 'EnhancedChangesListModifyBlockLineData', to modify the data used to build + lines in enhanced recentchanges and watchlist. +* Caches that need purging ability now use the WANObjectCache interface. + This corresponds to a new $wgMainWANCache setting, which defaults to using + the $wgMainCacheType settings. +* Callers needing fast light-weight data stores use $wgMainStash to select + the store type from $wgObjectCaches. The default is the local database. +* Interface message overrides in the MediaWiki namespace will now be cached in + memcached and APC (if available), rather than memcached and local files. +* Added a new hook, 'RandomPageQuery', to allow modification of the query used + by Special:Random to select random pages. +* $wgTransactionalTimeLimit was added, which controls the request time limit + for potentially slow POST requests that need to be as atomic as possible. +* ResourceLoader now loads all scripts asynchronously. The top-queue and + startup modules are no longer synchronously loaded. +* 'mediawiki.ui.button' styles are no longer unconditionally loaded on every + page. During the deprecation period, the styles will only be loaded on pages + which contain 'mw-ui-button' in their HTML. Starting in 1.28, the styles will + only be loaded if explicitly required. +* If search returns zero results and current search engine has a "did you mean" + suggestion, results for suggestion will be shown. Can be disabled by setting + $wgSearchRunSuggestedQuery to false. +* Added several JavaScript libraries for uploading files to MediaWiki + from the client-side. See documentation for mw.Upload and its + subclasses for more information. +* Added OOUI dialogs and layout for file upload interfaces. See + documentation for mw.Upload.Dialog, mw.Upload.BookletLayout and its + subclasses for more information. + +== extension.json changes in 1.26 == +* (T99344) The extension.json schema is now versioned. All extensions + and skins should set a "manifest_version" property corresponding to + the schema version they were written for. The only supported version + currently is "1". +* (T102523) The error message if a non-array attribute is set was improved. +* (T107646) Configuration settings can now specify how they should be merged, + which is necessary for arrays using integer keys. +* (T110389) Adding namespaces through extension.json now actually works +* $wgNamespaceProtection can now be set in extension.json. +* $wgCapitalLinkOverrides can now be set in extension.json. +* (T97186) Extensions using a custom prefix for their configuration settings + can now set a "_prefix" key to override the default of "wg". +* (T99084) Extensions can now specify what MediaWiki core versions they + depend upon. +* (T105236) The extension.json schema now validates custom classes in + the "ResourceModules" property properly. + +=== External library changes in 1.26 === +==== Upgraded external libraries ==== +* Updated es5-shim from v4.0.0 to v4.1.5. +* Updated json2 from revision 2014-02-04 to 2015-05-03. +* Updated Sinon.JS from 1.10.3 to 1.15.4. +* Updated jQuery Client from v1.0.0 to v2.0.0. +* Updated QUnit from v1.17.1 to v1.18.0. +* Updated liuggio/statsd-php-client from v1.0.12 to v1.0.16. +* Updated oojs/oojs-ui from v0.11.3 to v0.12.12. +* Updated wikimedia/cdb from v1.0.1 to v1.3.0. +* Updated wikimedia/utfnormal from v1.0.2 to v1.0.3. +* Updated wikimedia/composer-merge-plugin from v1.0.0 to v1.3.0. +* Updated zordius/lightncandy from v0.18 to v0.21. + +==== New external libraries ==== +* Added composer/semver v1.0.0. +* Added mediawiki/at-ease v1.1.0. +* Added wikimedia/assert v0.2.2. +* Added wikimedia/ip-set v1.0.1. +* Added wikimedia/wrappedstring v2.0.0. + +==== Removed and replaced external libraries ==== +* Replaced leafo/lessphp v0.5.0 with oyejorge/less.php v1.7.0.9. + +=== Bug fixes in 1.26 === +* (T53283) load.php sometimes sends 304 response without full headers +* (T65198) Talk page tabs now have a "rel=discussion" attribute +* (T98841) {{msgnw:}} now preserves comments even when subst: is not used. +* (T104142) $wgEmergencyContact and $wgPasswordSender now use their default + value if set to an empty string. + +=== Action API changes in 1.26 === +* New-style continuation is now the default for action=continue. Clients may + use the 'rawcontinue' parameter to receive raw query-continue data, but the + new style is encouraged as it's harder to implement incorrectly. +* Deprecated API formats dump and wddx have been completely removed. +* API action=query&list=tags: The displayname can now be boolean false if the + tag is meant to be hidden from user interfaces. +* action=import no longer allows both the namespace= and rootpage= parameters + to be set. If they are both set, the value of rootpage= will be ignored. +* prop=revision output in enum mode is now sorted by timestamp rather than + revision ID. This usually won't make any difference. +* (T102645) Namespace list from meta=siteinfo&siprop=namespaces is now an array + with formatversion=2. +* Various other output from meta=siteinfo will now always be arrays instead of + sometimes being numerically-indexed objects with formatversion=2. +* When errors about users being blocked are returned, they now include + information about the relevant block. +* (T99926) list=random has higher limits, in line with other API modules. +* list=random's rnredirect parameter is deprecated in favor of a new + rnfilterredir parameter that also allows for listing both redirects and + non-redirects. +* list=random now supports continuation. +* API responses to GET requests may now include ETag and Last-Modified headers, + and will honor corresponding If-None-Match and If-Modified-Since on such + requests. + +=== Action API internal changes in 1.26 === +* New metadata item ApiResult::META_KVP_MERGE to allow for merging the KVP key + into the value when the value is an assoc. +* API action modules may now provide values for the RFC 7232 ETag and + Last-Modified headers. The API will check these against If-None-Match and + If-Modified-Since request headers on GET requests and avoid executing the + module when appropriate. + +=== Languages updated in 1.26 === + +MediaWiki supports over 350 languages. Many localisations are updated +regularly. Below only new and removed languages are listed, as well as +changes to languages because of Phabricator reports. + +* Languages added: +** ase (American sign language), thanks to translator Icemandeaf +** dty (डोटेली/Doteli), thanks to translators जनक राज भटà¥à¤Ÿ, बिपà¥à¤²à¤¬ आननà¥à¤¦, + मेश सिंह बोहरा, and राम पà¥à¤°à¤¸à¤¾à¤¦ जोशी +** luz (لئری دوٙمینی / Southern Luri) +** olo (Livvinкarjala / Livvi-Karelian), thanks to translators Denö, Hiloin Natoi, + Ilja.mos, and Mashoi7 + +=== Other changes in 1.26 === +* ChangeTags::tagDescription() will return false if the interface message + for the tag is disabled. +* Added PageHistoryPager::doBatchLookups hook. +* Added $wikiId parameter to FormatAutocomments hook. +* Added ParserCacheSaveComplete to ParserCache +* supportsDirectEditing and supportsDirectApiEditing methods added to + ContentHandler, to provide a way for ApiEditPage and EditPage to check + if direct editing of content is allowed. These methods return false, + by default for the ContentHandler base class and true for TextContentHandler + and it's derivative classes (everything in core). For Content types that + do not support direct editing, an alternative mechanism should be provided + for editing, such as action overrides or specific api modules. +* mediaWiki.confirmCloseWindow now returns an object of functions, instead of + one function. The callback can't be called directly any more. The callback + function is replaced with confirmCloseWindow.release(). +* BREAKING CHANGE: Added an optional ResouceLoaderContext parameter to + ResourceLoaderModule::getDependencies(). Extension classes that override that + method should be updated. If they aren't updated, PHP Strict standards + warnings will appear when E_STRICT error reporting is enabled. Note: in the + near future, this parameter will probably become non-optional. +* Removed maintenance script deleteImageMemcached.php. +* MWFunction::newObj() was removed (deprecated in 1.25). + ObjectFactory::getObjectFromSpec() should be used instead. +* The parser will no longer randomize the string it uses to mark the place of + items that were stripped during parsing. It will use a fixed string instead. + This causes the parser to re-use the regular expressions it uses to search + and replace markers rather than generate novel expressions on each parse. + Re-using regular expressions will improve performance on HHVM and the + forthcoming PHP 7. The interfaces changes accompanying this change are: + - Parser::getRandomString() and Parser::uniqPrefix() have been deprecated. + - The $uniq_prefix argument for Parser::extractTagsAndParams() and the + $prefix argument for StripState::_construct() are deprecated and their + value is ignored. +* wfSuppressWarnings() and wfRestoreWarnings() were split into a separate library, + mediawiki/at-ease, and are now deprecated. Callers should use + MediaWiki\suppressWarnings() and MediaWiki\restoreWarnings() directly. +* The Block class constructor now takes an associative array of parameters + instead of many optional positional arguments. Calling the constructor the old + way will issue a deprecation warning. +* The jquery.mwExtension module was deprecated. +* $wgSpecialPageGroups was removed (deprecated in 1.21). +* SpecialPageFactory::setGroup was removed (deprecated in 1.21). +* SpecialPageFactory::getGroup was removed (deprecated in 1.21). +* DatabaseBase::ignoreErrors() is now protected. +* BREAKING CHANGE: mediawiki.legacy.ajax has been removed, following + a lengthy deprecation period. +* The ScopedPHPTimeout class was removed. +* Removed maintenance script fixSlaveDesync.php. +* Watchlist tokens, SpecialResetTokens, and User::getTokenFromOption() + are deprecated. Applications using those can work via the OAuth + extension instead. New tokens types should not be added. +* DatabaseBase::errorCount() was removed (unused). +* $wgDeferredUpdateList was removed. +* DeferredUpdates::addHTMLCacheUpdate() was removed. + +== Compatibility == + +MediaWiki 1.26 requires PHP 5.3.3 or later. There is experimental support for +HHVM 3.3.0. + +MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but +support for them is somewhat less mature. There is experimental support for +Oracle and Microsoft SQL Server. + +The supported versions are: + +* MySQL 5.0.3 or later +* PostgreSQL 8.3 or later +* SQLite 3.3.7 or later +* Oracle 9.0.1 or later +* Microsoft SQL Server 2005 (9.00.1399) + +== Upgrading == + +1.26 has several database changes since 1.25, and will not work without schema +updates. Note that due to changes to some very large tables like the revision +table, the schema update may take quite long (minutes on a medium sized site, +many hours on a large site). + +If upgrading from before 1.11, and you are using a wiki as a commons +repository, make sure that it is updated as well. Otherwise, errors may arise +due to database schema changes. + +If upgrading from before 1.7, you may want to run refreshLinks.php to ensure +new database fields are filled with data. + +If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to +1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed +with MediaWiki 1.21. + +Don't forget to always back up your database before upgrading! + +See the file UPGRADE for more detailed upgrade instructions. + +For notes on 1.25.x and older releases, see HISTORY. + +== Online documentation == + +Documentation for both end-users and site administrators is available on +MediaWiki.org, and is covered under the GNU Free Documentation License (except +for pages that explicitly state that their contents are in the public domain): + + https://www.mediawiki.org/wiki/Documentation + +== Mailing list == + +A mailing list is available for MediaWiki user support and discussion: + + https://lists.wikimedia.org/mailman/listinfo/mediawiki-l + +A low-traffic announcements-only list is also available: + + https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce + +It's highly recommended that you sign up for one of these lists if you're +going to run a public MediaWiki, so you can be notified of security fixes. + +== IRC help == + +There's usually someone online in #mediawiki on irc.freenode.net. diff --git a/Rakefile b/Rakefile new file mode 100644 index 00000000..6eef1216 --- /dev/null +++ b/Rakefile @@ -0,0 +1,14 @@ +require 'bundler/setup' + +require 'rubocop/rake_task' +RuboCop::RakeTask.new(:rubocop) do |task| + # if you use mediawiki-vagrant, rubocop will by default use it's .rubocop.yml + # the next line makes it explicit that you want .rubocop.yml from the directory + # where `bundle exec rake` is executed + task.options = ['-c', '.rubocop.yml'] +end + +task default: [:test] + +desc 'Run all build/tests commands (CI entry point)' +task test: [:rubocop] diff --git a/api.php b/api.php index 615c71ca..af7c4525 100644 --- a/api.php +++ b/api.php @@ -73,7 +73,7 @@ try { $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI ); // Last chance hook before executing the API - wfRunHooks( 'ApiBeforeMain', array( &$processor ) ); + Hooks::run( 'ApiBeforeMain', array( &$processor ) ); if ( !$processor instanceof ApiMain ) { throw new MWException( 'ApiBeforeMain hook set $processor to a non-ApiMain class' ); } @@ -88,18 +88,9 @@ if ( $processor ) { $processor->execute(); } -if ( function_exists( 'fastcgi_finish_request' ) ) { - fastcgi_finish_request(); -} - -// Execute any deferred updates -DeferredUpdates::doUpdates(); - // Log what the user did, for book-keeping purposes. $endtime = microtime( true ); -wfLogProfilingData(); - // Log the request if ( $wgAPIRequestLog ) { $items = array( @@ -128,7 +119,5 @@ if ( $wgAPIRequestLog ) { wfDebug( "Logged API request to $wgAPIRequestLog\n" ); } -// Shut down the database. foo()->bar() syntax is not supported in PHP4: we won't ever actually -// get here to worry about whether this should be = or =&, but the file has to parse properly. -$lb = wfGetLBFactory(); -$lb->shutdown(); +$mediawiki = new MediaWiki(); +$mediawiki->doPostOutputShutdown( 'fast' ); diff --git a/autoload.php b/autoload.php index fd2fdcd0..c5629e0d 100644 --- a/autoload.php +++ b/autoload.php @@ -8,6 +8,7 @@ $wgAutoloadLocalClasses = array( 'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php', 'Action' => __DIR__ . '/includes/actions/Action.php', 'ActiveUsersPager' => __DIR__ . '/includes/specials/SpecialActiveusers.php', + 'ActivityUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/ActivityUpdateJob.php', 'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php', 'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php', 'AllMessagesTablePager' => __DIR__ . '/includes/specials/SpecialAllMessages.php', @@ -36,14 +37,12 @@ $wgAutoloadLocalClasses = array( 'ApiFileRevert' => __DIR__ . '/includes/api/ApiFileRevert.php', 'ApiFormatBase' => __DIR__ . '/includes/api/ApiFormatBase.php', 'ApiFormatDbg' => __DIR__ . '/includes/api/ApiFormatDbg.php', - 'ApiFormatDump' => __DIR__ . '/includes/api/ApiFormatDump.php', 'ApiFormatFeedWrapper' => __DIR__ . '/includes/api/ApiFormatFeedWrapper.php', 'ApiFormatJson' => __DIR__ . '/includes/api/ApiFormatJson.php', 'ApiFormatNone' => __DIR__ . '/includes/api/ApiFormatNone.php', 'ApiFormatPhp' => __DIR__ . '/includes/api/ApiFormatPhp.php', 'ApiFormatRaw' => __DIR__ . '/includes/api/ApiFormatRaw.php', 'ApiFormatTxt' => __DIR__ . '/includes/api/ApiFormatTxt.php', - 'ApiFormatWddx' => __DIR__ . '/includes/api/ApiFormatWddx.php', 'ApiFormatXml' => __DIR__ . '/includes/api/ApiFormatXml.php', 'ApiFormatXmlRsd' => __DIR__ . '/includes/api/ApiRsd.php', 'ApiFormatYaml' => __DIR__ . '/includes/api/ApiFormatYaml.php', @@ -150,6 +149,7 @@ $wgAutoloadLocalClasses = array( 'AutoLoader' => __DIR__ . '/includes/AutoLoader.php', 'AutoloadGenerator' => __DIR__ . '/includes/utils/AutoloadGenerator.php', 'Autopromote' => __DIR__ . '/includes/Autopromote.php', + 'AvroValidator' => __DIR__ . '/includes/utils/AvroValidator.php', 'BacklinkCache' => __DIR__ . '/includes/cache/BacklinkCache.php', 'BacklinkJobUtils' => __DIR__ . '/includes/jobqueue/utils/BacklinkJobUtils.php', 'BackupDumper' => __DIR__ . '/maintenance/backup.inc', @@ -158,6 +158,9 @@ $wgAutoloadLocalClasses = array( 'BagOStuff' => __DIR__ . '/includes/libs/objectcache/BagOStuff.php', 'BaseDump' => __DIR__ . '/maintenance/backupPrefetch.inc', 'BaseTemplate' => __DIR__ . '/includes/skins/BaseTemplate.php', + 'BatchRowIterator' => __DIR__ . '/includes/utils/BatchRowIterator.php', + 'BatchRowUpdate' => __DIR__ . '/includes/utils/BatchRowUpdate.php', + 'BatchRowWriter' => __DIR__ . '/includes/utils/BatchRowWriter.php', 'BatchedQueryRunner' => __DIR__ . '/maintenance/runBatchedQuery.php', 'BcryptPassword' => __DIR__ . '/includes/password/BcryptPassword.php', 'BenchHttpHttps' => __DIR__ . '/maintenance/benchmarks/bench_HTTP_HTTPS.php', @@ -201,12 +204,12 @@ $wgAutoloadLocalClasses = array( 'CategoryPage' => __DIR__ . '/includes/page/CategoryPage.php', 'CategoryPager' => __DIR__ . '/includes/specials/SpecialCategories.php', 'CategoryViewer' => __DIR__ . '/includes/CategoryViewer.php', - 'CdbException' => __DIR__ . '/includes/CdbCompat.php', - 'CdbReader' => __DIR__ . '/includes/CdbCompat.php', - 'CdbWriter' => __DIR__ . '/includes/CdbCompat.php', + 'CdbException' => __DIR__ . '/includes/compat/CdbCompat.php', + 'CdbReader' => __DIR__ . '/includes/compat/CdbCompat.php', + 'CdbWriter' => __DIR__ . '/includes/compat/CdbCompat.php', 'CgzCopyTransaction' => __DIR__ . '/maintenance/storage/recompressTracked.php', 'ChangePassword' => __DIR__ . '/maintenance/changePassword.php', - 'ChangeTags' => __DIR__ . '/includes/ChangeTags.php', + 'ChangeTags' => __DIR__ . '/includes/changetags/ChangeTags.php', 'ChangeTagsList' => __DIR__ . '/includes/changetags/ChangeTagsList.php', 'ChangeTagsLogItem' => __DIR__ . '/includes/changetags/ChangeTagsLogItem.php', 'ChangeTagsLogList' => __DIR__ . '/includes/changetags/ChangeTagsLogList.php', @@ -257,6 +260,7 @@ $wgAutoloadLocalClasses = array( 'ConstantDependency' => __DIR__ . '/includes/cache/CacheDependency.php', 'Content' => __DIR__ . '/includes/content/Content.php', 'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php', + 'ContentModelLogFormatter' => __DIR__ . '/includes/logging/ContentModelLogFormatter.php', 'ContextSource' => __DIR__ . '/includes/context/ContextSource.php', 'ContribsPager' => __DIR__ . '/includes/specials/SpecialContributions.php', 'ConvertExtensionToRegistration' => __DIR__ . '/maintenance/convertExtensionToRegistration.php', @@ -270,6 +274,7 @@ $wgAutoloadLocalClasses = array( 'CopyJobQueue' => __DIR__ . '/maintenance/copyJobQueue.php', 'CoreParserFunctions' => __DIR__ . '/includes/parser/CoreParserFunctions.php', 'CoreTagHooks' => __DIR__ . '/includes/parser/CoreTagHooks.php', + 'CoreVersionChecker' => __DIR__ . '/includes/registration/CoreVersionChecker.php', 'CreateAndPromote' => __DIR__ . '/maintenance/createAndPromote.php', 'CreateFileOp' => __DIR__ . '/includes/filebackend/FileOp.php', 'CreditsAction' => __DIR__ . '/includes/actions/CreditsAction.php', @@ -279,7 +284,8 @@ $wgAutoloadLocalClasses = array( 'CurlHttpRequest' => __DIR__ . '/includes/HttpFunctions.php', 'DBAccessBase' => __DIR__ . '/includes/dao/DBAccessBase.php', 'DBAccessError' => __DIR__ . '/includes/db/LBFactory.php', - 'DBConnRef' => __DIR__ . '/includes/db/LoadBalancer.php', + 'DBAccessObjectUtils' => __DIR__ . '/includes/dao/DBAccessObjectUtils.php', + 'DBConnRef' => __DIR__ . '/includes/db/DBConnRef.php', 'DBConnectionError' => __DIR__ . '/includes/db/DatabaseError.php', 'DBError' => __DIR__ . '/includes/db/DatabaseError.php', 'DBExpectedError' => __DIR__ . '/includes/db/DatabaseError.php', @@ -310,14 +316,11 @@ $wgAutoloadLocalClasses = array( 'DeferredUpdates' => __DIR__ . '/includes/deferred/DeferredUpdates.php', 'DeleteAction' => __DIR__ . '/includes/actions/DeleteAction.php', 'DeleteArchivedFiles' => __DIR__ . '/maintenance/deleteArchivedFiles.php', - 'DeleteArchivedFilesImplementation' => __DIR__ . '/maintenance/deleteArchivedFiles.inc', 'DeleteArchivedRevisions' => __DIR__ . '/maintenance/deleteArchivedRevisions.php', - 'DeleteArchivedRevisionsImplementation' => __DIR__ . '/maintenance/deleteArchivedRevisions.inc', 'DeleteBatch' => __DIR__ . '/maintenance/deleteBatch.php', 'DeleteDefaultMessages' => __DIR__ . '/maintenance/deleteDefaultMessages.php', 'DeleteEqualMessages' => __DIR__ . '/maintenance/deleteEqualMessages.php', 'DeleteFileOp' => __DIR__ . '/includes/filebackend/FileOp.php', - 'DeleteImageCache' => __DIR__ . '/maintenance/deleteImageMemcached.php', 'DeleteLogFormatter' => __DIR__ . '/includes/logging/DeleteLogFormatter.php', 'DeleteOldRevisions' => __DIR__ . '/maintenance/deleteOldRevisions.php', 'DeleteOrphanedRevisions' => __DIR__ . '/maintenance/deleteOrphanedRevisions.php', @@ -383,6 +386,9 @@ $wgAutoloadLocalClasses = array( 'EnqueueJob' => __DIR__ . '/includes/jobqueue/jobs/EnqueueJob.php', 'EraseArchivedFile' => __DIR__ . '/maintenance/eraseArchivedFile.php', 'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php', + 'EventRelayer' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php', + 'EventRelayerMCRD' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerMCRD.php', + 'EventRelayerNull' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php', 'Exif' => __DIR__ . '/includes/media/Exif.php', 'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php', 'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php', @@ -418,6 +424,7 @@ $wgAutoloadLocalClasses = array( 'Field' => __DIR__ . '/includes/db/DatabaseUtility.php', 'File' => __DIR__ . '/includes/filerepo/file/File.php', 'FileBackend' => __DIR__ . '/includes/filebackend/FileBackend.php', + 'FileBackendDBRepoWrapper' => __DIR__ . '/includes/filerepo/FileBackendDBRepoWrapper.php', 'FileBackendError' => __DIR__ . '/includes/filebackend/FileBackend.php', 'FileBackendException' => __DIR__ . '/includes/filebackend/FileBackend.php', 'FileBackendGroup' => __DIR__ . '/includes/filebackend/FileBackendGroup.php', @@ -440,9 +447,9 @@ $wgAutoloadLocalClasses = array( 'FindHooks' => __DIR__ . '/maintenance/findHooks.php', 'FindMissingFiles' => __DIR__ . '/maintenance/findMissingFiles.php', 'FixBug20757' => __DIR__ . '/maintenance/storage/fixBug20757.php', + 'FixDefaultJsonContentPages' => __DIR__ . '/maintenance/fixDefaultJsonContentPages.php', 'FixDoubleRedirects' => __DIR__ . '/maintenance/fixDoubleRedirects.php', 'FixExtLinksProtocolRelative' => __DIR__ . '/maintenance/fixExtLinksProtocolRelative.php', - 'FixSlaveDesync' => __DIR__ . '/maintenance/fixSlaveDesync.php', 'FixTimestamps' => __DIR__ . '/maintenance/fixTimestamps.php', 'FixUserRegistration' => __DIR__ . '/maintenance/fixUserRegistration.php', 'ForeignAPIFile' => __DIR__ . '/includes/filerepo/file/ForeignAPIFile.php', @@ -491,6 +498,7 @@ $wgAutoloadLocalClasses = array( 'HTMLFormField' => __DIR__ . '/includes/htmlform/HTMLFormField.php', 'HTMLFormFieldCloner' => __DIR__ . '/includes/htmlform/HTMLFormFieldCloner.php', 'HTMLFormFieldRequiredOptionsException' => __DIR__ . '/includes/htmlform/HTMLFormFieldRequiredOptionsException.php', + 'HTMLFormFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLFormFieldWithButton.php', 'HTMLHiddenField' => __DIR__ . '/includes/htmlform/HTMLHiddenField.php', 'HTMLInfoField' => __DIR__ . '/includes/htmlform/HTMLInfoField.php', 'HTMLIntField' => __DIR__ . '/includes/htmlform/HTMLIntField.php', @@ -501,11 +509,15 @@ $wgAutoloadLocalClasses = array( 'HTMLSelectField' => __DIR__ . '/includes/htmlform/HTMLSelectField.php', 'HTMLSelectLimitField' => __DIR__ . '/includes/htmlform/HTMLSelectLimitField.php', 'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/HTMLSelectNamespace.php', + 'HTMLSelectNamespaceWithButton' => __DIR__ . '/includes/htmlform/HTMLSelectNamespaceWithButton.php', 'HTMLSelectOrOtherField' => __DIR__ . '/includes/htmlform/HTMLSelectOrOtherField.php', 'HTMLSubmitField' => __DIR__ . '/includes/htmlform/HTMLSubmitField.php', 'HTMLTagFilter' => __DIR__ . '/includes/htmlform/HTMLTagFilter.php', 'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php', 'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php', + 'HTMLTextFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLTextFieldWithButton.php', + 'HTMLTitleTextField' => __DIR__ . '/includes/htmlform/HTMLTitleTextField.php', + 'HTMLUserTextField' => __DIR__ . '/includes/htmlform/HTMLUserTextField.php', 'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php', 'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php', 'HashConfig' => __DIR__ . '/includes/config/HashConfig.php', @@ -527,14 +539,14 @@ $wgAutoloadLocalClasses = array( 'ICacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php', 'IContextSource' => __DIR__ . '/includes/context/IContextSource.php', 'IDBAccessObject' => __DIR__ . '/includes/dao/IDBAccessObject.php', - 'IDatabase' => __DIR__ . '/includes/db/Database.php', + 'IDatabase' => __DIR__ . '/includes/db/IDatabase.php', 'IEContentAnalyzer' => __DIR__ . '/includes/libs/IEContentAnalyzer.php', 'IEUrlExtension' => __DIR__ . '/includes/libs/IEUrlExtension.php', 'IJobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php', 'IORMRow' => __DIR__ . '/includes/db/IORMRow.php', 'IORMTable' => __DIR__ . '/includes/db/IORMTable.php', 'IP' => __DIR__ . '/includes/utils/IP.php', - 'IPSet' => __DIR__ . '/includes/libs/IPSet.php', + 'IPSet' => __DIR__ . '/includes/compat/IPSetCompat.php', 'IPTC' => __DIR__ . '/includes/media/IPTC.php', 'IRCColourfulRCFeedFormatter' => __DIR__ . '/includes/rcfeed/IRCColourfulRCFeedFormatter.php', 'IcuCollation' => __DIR__ . '/includes/Collation.php', @@ -566,6 +578,7 @@ $wgAutoloadLocalClasses = array( 'InstallerOverrides' => __DIR__ . '/mw-config/overrides.php', 'Interwiki' => __DIR__ . '/includes/interwiki/Interwiki.php', 'InvalidPassword' => __DIR__ . '/includes/password/InvalidPassword.php', + 'IteratorDecorator' => __DIR__ . '/includes/utils/iterators/IteratorDecorator.php', 'IuConverter' => __DIR__ . '/languages/classes/LanguageIu.php', 'JSCompilerContext' => __DIR__ . '/includes/libs/jsminplus.php', 'JSMinPlus' => __DIR__ . '/includes/libs/jsminplus.php', @@ -606,6 +619,7 @@ $wgAutoloadLocalClasses = array( 'LCStoreCDB' => __DIR__ . '/includes/cache/LocalisationCache.php', 'LCStoreDB' => __DIR__ . '/includes/cache/LocalisationCache.php', 'LCStoreNull' => __DIR__ . '/includes/cache/LocalisationCache.php', + 'LCStoreStaticArray' => __DIR__ . '/includes/cache/LCStoreStaticArray.php', 'LangMemUsage' => __DIR__ . '/maintenance/language/langmemusage.php', 'Language' => __DIR__ . '/languages/Language.php', 'LanguageAr' => __DIR__ . '/languages/classes/LanguageAr.php', @@ -666,7 +680,7 @@ $wgAutoloadLocalClasses = array( 'LinkHolderArray' => __DIR__ . '/includes/parser/LinkHolderArray.php', 'LinkSearchPage' => __DIR__ . '/includes/specials/SpecialLinkSearch.php', 'Linker' => __DIR__ . '/includes/Linker.php', - 'LinksDeletionUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php', + 'LinksDeletionUpdate' => __DIR__ . '/includes/deferred/LinksDeletionUpdate.php', 'LinksUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php', 'ListDuplicatedFilesPage' => __DIR__ . '/includes/specials/SpecialListDuplicatedFiles.php', 'ListVariants' => __DIR__ . '/maintenance/language/listVariants.php', @@ -674,7 +688,7 @@ $wgAutoloadLocalClasses = array( 'LoadBalancer' => __DIR__ . '/includes/db/LoadBalancer.php', 'LoadBalancerSingle' => __DIR__ . '/includes/db/LBFactorySingle.php', 'LoadMonitor' => __DIR__ . '/includes/db/LoadMonitor.php', - 'LoadMonitorMySQL' => __DIR__ . '/includes/db/LoadMonitor.php', + 'LoadMonitorMySQL' => __DIR__ . '/includes/db/LoadMonitorMySQL.php', 'LoadMonitorNull' => __DIR__ . '/includes/db/LoadMonitor.php', 'LocalFile' => __DIR__ . '/includes/filerepo/file/LocalFile.php', 'LocalFileDeleteBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php', @@ -705,7 +719,6 @@ $wgAutoloadLocalClasses = array( 'MWDocGen' => __DIR__ . '/maintenance/mwdocgen.php', 'MWException' => __DIR__ . '/includes/exception/MWException.php', 'MWExceptionHandler' => __DIR__ . '/includes/exception/MWExceptionHandler.php', - 'MWFunction' => __DIR__ . '/includes/utils/MWFunction.php', 'MWHookException' => __DIR__ . '/includes/Hooks.php', 'MWHttpRequest' => __DIR__ . '/includes/HttpFunctions.php', 'MWMemcached' => __DIR__ . '/includes/objectcache/MemcachedClient.php', @@ -714,7 +727,6 @@ $wgAutoloadLocalClasses = array( 'MWOldPassword' => __DIR__ . '/includes/password/MWOldPassword.php', 'MWSaltedPassword' => __DIR__ . '/includes/password/MWSaltedPassword.php', 'MWTidy' => __DIR__ . '/includes/parser/MWTidy.php', - 'MWTidyWrapper' => __DIR__ . '/includes/parser/MWTidy.php', 'MWTimestamp' => __DIR__ . '/includes/MWTimestamp.php', 'MachineReadableRCFeedFormatter' => __DIR__ . '/includes/rcfeed/MachineReadableRCFeedFormatter.php', 'MagicWord' => __DIR__ . '/includes/MagicWord.php', @@ -744,12 +756,28 @@ $wgAutoloadLocalClasses = array( 'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php', 'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php', 'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php', + 'MediaWiki\\Logger\\Monolog\\AvroFormatter' => __DIR__ . '/includes/debug/logger/monolog/AvroFormatter.php', + 'MediaWiki\\Logger\\Monolog\\BufferHandler' => __DIR__ . '/includes/debug/logger/monolog/BufferHandler.php', + 'MediaWiki\\Logger\\Monolog\\KafkaHandler' => __DIR__ . '/includes/debug/logger/monolog/KafkaHandler.php', 'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php', 'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php', + 'MediaWiki\\Logger\\Monolog\\LineFormatter' => __DIR__ . '/includes/debug/logger/monolog/LineFormatter.php', 'MediaWiki\\Logger\\Monolog\\SyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php', 'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php', 'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php', 'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php', + 'MediaWiki\\Tidy\\Html5Depurate' => __DIR__ . '/includes/tidy/Html5Depurate.php', + 'MediaWiki\\Tidy\\RaggettBase' => __DIR__ . '/includes/tidy/RaggettBase.php', + 'MediaWiki\\Tidy\\RaggettExternal' => __DIR__ . '/includes/tidy/RaggettExternal.php', + 'MediaWiki\\Tidy\\RaggettInternalHHVM' => __DIR__ . '/includes/tidy/RaggettInternalHHVM.php', + 'MediaWiki\\Tidy\\RaggettInternalPHP' => __DIR__ . '/includes/tidy/RaggettInternalPHP.php', + 'MediaWiki\\Tidy\\RaggettWrapper' => __DIR__ . '/includes/tidy/RaggettWrapper.php', + 'MediaWiki\\Tidy\\TidyDriverBase' => __DIR__ . '/includes/tidy/TidyDriverBase.php', + 'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php', + 'MediaWiki\\Widget\\ComplexTitleInputWidget' => __DIR__ . '/includes/widget/ComplexTitleInputWidget.php', + 'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . '/includes/widget/NamespaceInputWidget.php', + 'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php', + 'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php', 'MemCachedClientforWiki' => __DIR__ . '/includes/objectcache/MemcachedClient.php', 'MemcLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MemcLockManager.php', 'MemcachedBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedBagOStuff.php', @@ -760,10 +788,11 @@ $wgAutoloadLocalClasses = array( 'MergeLogFormatter' => __DIR__ . '/includes/logging/MergeLogFormatter.php', 'MergeMessageFileList' => __DIR__ . '/maintenance/mergeMessageFileList.php', 'Message' => __DIR__ . '/includes/Message.php', - 'MessageBlobStore' => __DIR__ . '/includes/MessageBlobStore.php', + 'MessageBlobStore' => __DIR__ . '/includes/cache/MessageBlobStore.php', 'MessageCache' => __DIR__ . '/includes/cache/MessageCache.php', 'MessageContent' => __DIR__ . '/includes/content/MessageContent.php', 'MessageSpecifier' => __DIR__ . '/includes/libs/MessageSpecifier.php', + 'MigrateFileRepoLayout' => __DIR__ . '/maintenance/migrateFileRepoLayout.php', 'MigrateUserGroup' => __DIR__ . '/maintenance/migrateUserGroup.php', 'MimeMagic' => __DIR__ . '/includes/MimeMagic.php', 'MinifyScript' => __DIR__ . '/maintenance/minify.php', @@ -788,6 +817,7 @@ $wgAutoloadLocalClasses = array( 'MultiHttpClient' => __DIR__ . '/includes/libs/MultiHttpClient.php', 'MultiWriteBagOStuff' => __DIR__ . '/includes/objectcache/MultiWriteBagOStuff.php', 'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php', + 'MutableContext' => __DIR__ . '/includes/context/MutableContext.php', 'MwSql' => __DIR__ . '/maintenance/sql.php', 'MyLocalSettingsGenerator' => __DIR__ . '/mw-config/overrides.php', 'MySQLField' => __DIR__ . '/includes/db/DatabaseMysqlBase.php', @@ -804,6 +834,7 @@ $wgAutoloadLocalClasses = array( 'NewPagesPager' => __DIR__ . '/includes/specials/SpecialNewpages.php', 'NewUsersLogFormatter' => __DIR__ . '/includes/logging/NewUsersLogFormatter.php', 'NolinesImageGallery' => __DIR__ . '/includes/gallery/NolinesImageGallery.php', + 'NotRecursiveIterator' => __DIR__ . '/includes/utils/iterators/NotRecursiveIterator.php', 'NukeNS' => __DIR__ . '/maintenance/nukeNS.php', 'NukePage' => __DIR__ . '/maintenance/nukePage.php', 'NullFileJournal' => __DIR__ . '/includes/filebackend/filejournal/FileJournal.php', @@ -811,6 +842,7 @@ $wgAutoloadLocalClasses = array( 'NullJob' => __DIR__ . '/includes/jobqueue/jobs/NullJob.php', 'NullLockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php', 'NullRepo' => __DIR__ . '/includes/filerepo/NullRepo.php', + 'OOUIHTMLForm' => __DIR__ . '/includes/htmlform/OOUIHTMLForm.php', 'ORAField' => __DIR__ . '/includes/db/DatabaseOracle.php', 'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php', 'ORMIterator' => __DIR__ . '/includes/db/ORMIterator.php', @@ -873,6 +905,7 @@ $wgAutoloadLocalClasses = array( 'Password' => __DIR__ . '/includes/password/Password.php', 'PasswordError' => __DIR__ . '/includes/password/PasswordError.php', 'PasswordFactory' => __DIR__ . '/includes/password/PasswordFactory.php', + 'PasswordPolicyChecks' => __DIR__ . '/includes/password/PasswordPolicyChecks.php', 'PatchSql' => __DIR__ . '/maintenance/patchSql.php', 'PathRouter' => __DIR__ . '/includes/PathRouter.php', 'PathRouterPatternReplacer' => __DIR__ . '/includes/PathRouter.php', @@ -890,6 +923,7 @@ $wgAutoloadLocalClasses = array( 'PoolWorkArticleView' => __DIR__ . '/includes/poolcounter/PoolWorkArticleView.php', 'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php', 'PopulateCategory' => __DIR__ . '/maintenance/populateCategory.php', + 'PopulateContentModel' => __DIR__ . '/maintenance/populateContentModel.php', 'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php', 'PopulateImageSha1' => __DIR__ . '/maintenance/populateImageSha1.php', 'PopulateLogSearch' => __DIR__ . '/maintenance/populateLogSearch.php', @@ -926,6 +960,7 @@ $wgAutoloadLocalClasses = array( 'ProfilerXhprof' => __DIR__ . '/includes/profiler/ProfilerXhprof.php', 'Protect' => __DIR__ . '/maintenance/protect.php', 'ProtectAction' => __DIR__ . '/includes/actions/ProtectAction.php', + 'ProtectLogFormatter' => __DIR__ . '/includes/logging/ProtectLogFormatter.php', 'ProtectedPagesPager' => __DIR__ . '/includes/specials/SpecialProtectedpages.php', 'ProtectedTitlesPager' => __DIR__ . '/includes/specials/SpecialProtectedtitles.php', 'ProtectionForm' => __DIR__ . '/includes/ProtectionForm.php', @@ -980,6 +1015,7 @@ $wgAutoloadLocalClasses = array( 'RenderAction' => __DIR__ . '/includes/actions/RenderAction.php', 'ReplacementArray' => __DIR__ . '/includes/libs/ReplacementArray.php', 'Replacer' => __DIR__ . '/includes/libs/replacers/Replacer.php', + 'ReplicatedBagOStuff' => __DIR__ . '/includes/libs/objectcache/ReplicatedBagOStuff.php', 'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php', 'RequestContext' => __DIR__ . '/includes/context/RequestContext.php', 'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php', @@ -989,11 +1025,15 @@ $wgAutoloadLocalClasses = array( 'ResourceLoaderEditToolbarModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderEditToolbarModule.php', 'ResourceLoaderFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFileModule.php', 'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php', + 'ResourceLoaderForeignApiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderForeignApiModule.php', 'ResourceLoaderImage' => __DIR__ . '/includes/resourceloader/ResourceLoaderImage.php', 'ResourceLoaderImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderImageModule.php', + 'ResourceLoaderJqueryMsgModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderJqueryMsgModule.php', 'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageDataModule.php', 'ResourceLoaderLanguageNamesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageNamesModule.php', 'ResourceLoaderModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderModule.php', + 'ResourceLoaderOOUIImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIImageModule.php', + 'ResourceLoaderRawFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderRawFileModule.php', 'ResourceLoaderSiteModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteModule.php', 'ResourceLoaderSkinModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSkinModule.php', 'ResourceLoaderSpecialCharacterDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php', @@ -1030,19 +1070,21 @@ $wgAutoloadLocalClasses = array( 'RevisionList' => __DIR__ . '/includes/RevisionList.php', 'RevisionListBase' => __DIR__ . '/includes/RevisionList.php', 'RevisiondeleteAction' => __DIR__ . '/includes/actions/RevisiondeleteAction.php', + 'RiffExtractor' => __DIR__ . '/includes/libs/RiffExtractor.php', 'RightsLogFormatter' => __DIR__ . '/includes/logging/RightsLogFormatter.php', 'RollbackAction' => __DIR__ . '/includes/actions/RollbackAction.php', 'RollbackEdits' => __DIR__ . '/maintenance/rollbackEdits.php', + 'RowUpdateGenerator' => __DIR__ . '/includes/utils/RowUpdateGenerator.php', 'RunJobs' => __DIR__ . '/maintenance/runJobs.php', 'RunningStat' => __DIR__ . '/includes/libs/RunningStat.php', 'SQLiteField' => __DIR__ . '/includes/db/DatabaseSqlite.php', 'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php', 'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php', + 'SamplingStatsdClient' => __DIR__ . '/includes/libs/SamplingStatsdClient.php', 'Sanitizer' => __DIR__ . '/includes/Sanitizer.php', 'SavepointPostgres' => __DIR__ . '/includes/db/DatabasePostgres.php', 'ScopedCallback' => __DIR__ . '/includes/libs/ScopedCallback.php', 'ScopedLock' => __DIR__ . '/includes/filebackend/lockmanager/ScopedLock.php', - 'ScopedPHPTimeout' => __DIR__ . '/includes/libs/ScopedPHPTimeout.php', 'SearchDatabase' => __DIR__ . '/includes/search/SearchDatabase.php', 'SearchDump' => __DIR__ . '/maintenance/dumpIterator.php', 'SearchEngine' => __DIR__ . '/includes/search/SearchEngine.php', @@ -1098,6 +1140,7 @@ $wgAutoloadLocalClasses = array( 'SpecialBookSources' => __DIR__ . '/includes/specials/SpecialBooksources.php', 'SpecialCachedPage' => __DIR__ . '/includes/specials/SpecialCachedPage.php', 'SpecialCategories' => __DIR__ . '/includes/specials/SpecialCategories.php', + 'SpecialChangeContentModel' => __DIR__ . '/includes/specials/SpecialChangeContentModel.php', 'SpecialChangeEmail' => __DIR__ . '/includes/specials/SpecialChangeEmail.php', 'SpecialChangePassword' => __DIR__ . '/includes/specials/SpecialChangePassword.php', 'SpecialComparePages' => __DIR__ . '/includes/specials/SpecialComparePages.php', @@ -1290,18 +1333,20 @@ $wgAutoloadLocalClasses = array( 'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php', 'UserNotLoggedIn' => __DIR__ . '/includes/exception/UserNotLoggedIn.php', 'UserOptions' => __DIR__ . '/maintenance/userOptions.inc', + 'UserPasswordPolicy' => __DIR__ . '/includes/password/UserPasswordPolicy.php', 'UserRightsProxy' => __DIR__ . '/includes/UserRightsProxy.php', 'UsercreateTemplate' => __DIR__ . '/includes/templates/Usercreate.php', 'UserloginTemplate' => __DIR__ . '/includes/templates/Userlogin.php', 'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php', 'UsersPager' => __DIR__ . '/includes/specials/SpecialListusers.php', - 'UtfNormal' => __DIR__ . '/includes/libs/normal/UtfNormal.php', + 'UtfNormal' => __DIR__ . '/includes/compat/normal/UtfNormal.php', 'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php', 'VFormHTMLForm' => __DIR__ . '/includes/htmlform/VFormHTMLForm.php', 'ValidateRegistrationFile' => __DIR__ . '/maintenance/validateRegistrationFile.php', 'ViewAction' => __DIR__ . '/includes/actions/ViewAction.php', 'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php', 'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php', + 'WANObjectCache' => __DIR__ . '/includes/libs/objectcache/WANObjectCache.php', 'WaitForSlave' => __DIR__ . '/maintenance/waitForSlave.php', 'WantedCategoriesPage' => __DIR__ . '/includes/specials/SpecialWantedcategories.php', 'WantedFilesPage' => __DIR__ . '/includes/specials/SpecialWantedfiles.php', @@ -1330,6 +1375,7 @@ $wgAutoloadLocalClasses = array( 'WebInstallerUpgrade' => __DIR__ . '/includes/installer/WebInstallerPage.php', 'WebInstallerUpgradeDoc' => __DIR__ . '/includes/installer/WebInstallerPage.php', 'WebInstallerWelcome' => __DIR__ . '/includes/installer/WebInstallerPage.php', + 'WebPHandler' => __DIR__ . '/includes/media/WebP.php', 'WebRequest' => __DIR__ . '/includes/WebRequest.php', 'WebRequestUpload' => __DIR__ . '/includes/WebRequest.php', 'WebResponse' => __DIR__ . '/includes/WebResponse.php', @@ -1359,7 +1405,7 @@ $wgAutoloadLocalClasses = array( 'Xml' => __DIR__ . '/includes/Xml.php', 'XmlDumpWriter' => __DIR__ . '/includes/Export.php', 'XmlJsCode' => __DIR__ . '/includes/Xml.php', - 'XmlSelect' => __DIR__ . '/includes/Xml.php', + 'XmlSelect' => __DIR__ . '/includes/XmlSelect.php', 'XmlTypeCheck' => __DIR__ . '/includes/libs/XmlTypeCheck.php', 'ZhConverter' => __DIR__ . '/languages/classes/LanguageZh.php', 'ZipDirectoryReader' => __DIR__ . '/includes/utils/ZipDirectoryReader.php', diff --git a/composer.json b/composer.json index 1b6ce8e6..991084e6 100644 --- a/composer.json +++ b/composer.json @@ -16,31 +16,44 @@ "wiki": "https://www.mediawiki.org/" }, "require": { + "composer/semver": "1.0.0", "cssjanus/cssjanus": "1.1.1", "ext-iconv": "*", - "leafo/lessphp": "0.5.0", - "liuggio/statsd-php-client": "1.0.12", - "oojs/oojs-ui": "0.11.3", + "liuggio/statsd-php-client": "1.0.16", + "oyejorge/less.php": "1.7.0.9", + "mediawiki/at-ease": "1.1.0", + "oojs/oojs-ui": "0.12.12", "php": ">=5.3.3", "psr/log": "1.0.0", - "wikimedia/cdb": "1.0.1", - "wikimedia/composer-merge-plugin": "1.0.0", - "wikimedia/utfnormal": "1.0.2", - "zordius/lightncandy": "0.18" + "wikimedia/assert": "0.2.2", + "wikimedia/cdb": "1.3.0", + "wikimedia/composer-merge-plugin": "1.3.0", + "wikimedia/ip-set": "1.0.1", + "wikimedia/utfnormal": "1.0.3", + "wikimedia/wrappedstring": "2.0.0", + "zordius/lightncandy": "0.21" }, "require-dev": { - "jakub-onderka/php-parallel-lint": "~0.8", + "jakub-onderka/php-parallel-lint": "0.9", "justinrainbow/json-schema": "~1.3", "phpunit/phpunit": "3.7.37", - "mediawiki/mediawiki-codesniffer": "0.1.0" + "mediawiki/mediawiki-codesniffer": "0.3.0", + "wikimedia/avro": "1.7.7", + "nmred/kafka-php": "0.1.4", + "monolog/monolog": "1.14.0" }, "suggest": { - "ext-fileinfo": "*", - "ext-intl": "*", - "ext-mbstring": "*", - "ext-wikidiff2": "*", - "ext-apc": "*", - "monolog/monolog": "*" + "ext-fileinfo": "Improved mime magic detection", + "ext-intl": "ICU integration", + "ext-mbstring": "Multibyte string support", + "ext-wikidiff2": "Diff accelerator", + "ext-apc": "Local data and opcode cache", + "monolog/monolog": "Flexible debug logging system", + "nmred/kafka-php": "Send debug log events to kafka", + "pear/mail": "Mail sending support", + "pear/mail_mime": "Mail sending support", + "pear/mail_mime-decode": "Mail sending support", + "wikimedia/avro": "Binary serialization format used with kafka" }, "autoload": { "psr-0": { @@ -49,7 +62,7 @@ }, "scripts": { "lint": "parallel-lint --exclude vendor", - "phpcs": "phpcs $PHPCS_ARGS -s --standard=vendor/mediawiki/mediawiki-codesniffer/MediaWiki --ignore=vendor --encoding=utf-8 --extensions=php,php5,inc,sample", + "phpcs": "phpcs -p $PHPCS_ARGS", "test": [ "composer lint", "composer phpcs" @@ -65,7 +78,8 @@ "merge-plugin": { "include": [ "composer.local.json" - ] + ], + "merge-dev": false } } } diff --git a/composer.lock b/composer.lock deleted file mode 100644 index f996c1ca..00000000 --- a/composer.lock +++ /dev/null @@ -1,395 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "7773886a1b354296ed03b85d233488aa", - "packages": [ - { - "name": "cssjanus/cssjanus", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/cssjanus/php-cssjanus.git", - "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cssjanus/php-cssjanus/zipball/62a9c32e6e140de09082b40a6e99d868ad14d4e0", - "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "jakub-onderka/php-parallel-lint": "0.8.*", - "phpunit/phpunit": "3.7.*", - "squizlabs/php_codesniffer": "1.*" - }, - "type": "library", - "autoload": { - "psr-0": { - "": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "Convert CSS stylesheets between left-to-right and right-to-left.", - "time": "2014-11-14 20:00:50" - }, - { - "name": "leafo/lessphp", - "version": "v0.5.0", - "source": { - "type": "git", - "url": "https://github.com/leafo/lessphp.git", - "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/leafo/lessphp/zipball/0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283", - "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283", - "shasum": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "lessc.inc.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "GPL-3.0" - ], - "authors": [ - { - "name": "Leaf Corcoran", - "email": "leafot@gmail.com", - "homepage": "http://leafo.net" - } - ], - "description": "lessphp is a compiler for LESS written in PHP.", - "homepage": "http://leafo.net/lessphp/", - "time": "2014-11-24 18:39:20" - }, - { - "name": "liuggio/statsd-php-client", - "version": "v1.0.12", - "source": { - "type": "git", - "url": "https://github.com/liuggio/statsd-php-client.git", - "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/liuggio/statsd-php-client/zipball/a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7", - "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "require-dev": { - "monolog/monolog": ">=1.2.0" - }, - "suggest": { - "monolog/monolog": "Monolog, in order to do generate statistic from log >=1.2.0)" - }, - "type": "library", - "autoload": { - "psr-0": { - "Liuggio": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Giulio De Donato", - "email": "liuggio@gmail.com" - } - ], - "description": "Statsd (Object Oriented) client library for PHP", - "homepage": "https://github.com/liuggio/statsd-php-client/", - "keywords": [ - "etsy", - "monitoring", - "php", - "statsd" - ], - "time": "2014-09-17 21:37:49" - }, - { - "name": "oojs/oojs-ui", - "version": "v0.11.3", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/oojs-ui.git", - "reference": "a03de5681e28e4fad1e27f8cccab32a2c5b484e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/oojs-ui/zipball/a03de5681e28e4fad1e27f8cccab32a2c5b484e5", - "reference": "a03de5681e28e4fad1e27f8cccab32a2c5b484e5", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "jakub-onderka/php-parallel-lint": "0.8.*", - "mediawiki/mediawiki-codesniffer": "0.1.0", - "squizlabs/php_codesniffer": "2.1.*" - }, - "type": "library", - "autoload": { - "classmap": [ - "php/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Provides library of common widgets, layouts, and windows.", - "homepage": "https://www.mediawiki.org/wiki/OOjs_UI", - "time": "2015-05-12 11:58:55" - }, - { - "name": "psr/log", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2012-12-21 11:40:51" - }, - { - "name": "wikimedia/cdb", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/cdb.git", - "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/cdb/zipball/3b7d5366c88eccf2517ebac57c59eb557c82f46c", - "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Tim Starling", - "email": "tstarling@wikimedia.org" - }, - { - "name": "Chad Horohoe", - "email": "chad@wikimedia.org" - } - ], - "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.", - "homepage": "https://www.mediawiki.org/wiki/CDB", - "time": "2014-12-08 19:26:44" - }, - { - "name": "wikimedia/composer-merge-plugin", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "ed426b785f9f786b33be4fd78584e43f4e962356" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/ed426b785f9f786b33be4fd78584e43f4e962356", - "reference": "ed426b785f9f786b33be4fd78584e43f4e962356", - "shasum": "" - }, - "require": { - "composer-plugin-api": "1.0.0", - "php": ">=5.3.2" - }, - "require-dev": { - "composer/composer": "1.0.*@dev", - "jakub-onderka/php-parallel-lint": "~0.8", - "phpspec/prophecy-phpunit": "~1.0", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.1.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Wikimedia\\Composer\\MergePlugin" - }, - "autoload": { - "psr-4": { - "Wikimedia\\Composer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Composer plugin to merge multiple composer.json files", - "time": "2015-02-21 00:57:13" - }, - { - "name": "wikimedia/utfnormal", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/utfnormal.git", - "reference": "bb892a53a76116ad0982445a849043687cb6e778" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/utfnormal/zipball/bb892a53a76116ad0982445a849043687cb6e778", - "reference": "bb892a53a76116ad0982445a849043687cb6e778", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "ext-mbstring": "*", - "jakub-onderka/php-parallel-lint": "0.8.*", - "mediawiki/mediawiki-codesniffer": "0.1.0", - "phpunit/phpunit": "4.4.*", - "squizlabs/php_codesniffer": "2.1.*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "Brion Vibber", - "email": "bvibber@wikimedia.org" - } - ], - "homepage": "https://www.mediawiki.org/wiki/utfnormal", - "time": "2015-03-12 01:54:47" - }, - { - "name": "zordius/lightncandy", - "version": "v0.18", - "source": { - "type": "git", - "url": "https://github.com/zordius/lightncandy.git", - "reference": "24be6909c37391f4648ce1fdf19036b11bd56d05" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zordius/lightncandy/zipball/24be6909c37391f4648ce1fdf19036b11bd56d05", - "reference": "24be6909c37391f4648ce1fdf19036b11bd56d05", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.0.17" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/lightncandy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Zordius Chen", - "email": "zordius@yahoo-inc.com" - } - ], - "description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).", - "homepage": "https://github.com/zordius/lightncandy", - "keywords": [ - "handlebars", - "logicless", - "mustache", - "php", - "template" - ], - "time": "2015-01-01 04:37:19" - } - ], - "packages-dev": null, - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "ext-iconv": "*", - "php": ">=5.3.3" - }, - "platform-dev": [] -} diff --git a/docs/doxygen_first_page.php b/docs/doxygen_first_page.php index 9949d133..77ae1dcf 100644 --- a/docs/doxygen_first_page.php +++ b/docs/doxygen_first_page.php @@ -1,5 +1,5 @@ tag if $resultArr was filled. -$editPage : the EditPage object -$text : the new text of the article (has yet to be saved) -&$resultArr : data in this array will be added to the API result +$editPage: the EditPage object +$text: the new text of the article (has yet to be saved) +&$resultArr: data in this array will be added to the API result 'ApiFeedContributions::feedItem': Called to convert the result of ContribsPager into a FeedItem instance that ApiFeedContributions can consume. Implementors of this hook may cancel the hook to signal that the item is not viewable in the provided context. -$row: A row of data from ContribsPager. The set of data returned by ContribsPager - can be adjusted by handling the ContribsPager::reallyDoQuery hook. +$row: A row of data from ContribsPager. The set of data returned by + ContribsPager can be adjusted by handling the ContribsPager::reallyDoQuery + hook. $context: An IContextSource implementation. -&$feedItem: Set this to a FeedItem instance if the callback can handle the provided - row. This is provided to the hook as a null, if it is non null then another callback - has already handled the hook. +&$feedItem: Set this to a FeedItem instance if the callback can handle the + provided row. This is provided to the hook as a null, if it is non null then + another callback has already handled the hook. 'ApiFormatHighlight': Use to syntax-highlight API pretty-printed output. When highlighting, add output to $context->getOutput() and return false. @@ -407,12 +407,14 @@ Use this hook to modify a module's description. $module: ApiBase Module object &$msg: Array of Message objects -'APIGetParamDescription': DEPRECATED! Use APIGetParamDescriptionMessages instead. +'APIGetParamDescription': DEPRECATED! Use APIGetParamDescriptionMessages +instead. Use this hook to modify a module's parameter descriptions. &$module: ApiBase Module object &$desc: Array of parameter descriptions -'APIGetParamDescriptionMessages': Use this hook to modify a module's parameter descriptions. +'APIGetParamDescriptionMessages': Use this hook to modify a module's parameter +descriptions. $module: ApiBase Module object &$msg: Array of arrays of Message objects @@ -420,23 +422,30 @@ $module: ApiBase Module object $module: ApiBase Module object &$help: Array of HTML strings to be joined for the output. $options: Array Options passed to ApiHelp::getHelp +&$tocData: Array If a TOC is being generated, this array has keys as anchors in + the page and values as for Linker::generateTOC(). 'ApiMain::moduleManager': Called when ApiMain has finished initializing its module manager. Can be used to conditionally register API modules. $moduleManager: ApiModuleManager Module manager instance +'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when +an exception is thrown during API action execution. +$apiMain: Calling ApiMain instance. +$e: Exception object. + 'ApiOpenSearchSuggest': Called when constructing the OpenSearch results. Hooks can alter or append to the array. &$results: array with integer keys to associative arrays. Keys in associative -array: - - title: Title object. - - redirect from: Title or null. - - extract: Description for this result. - - extract trimmed: If truthy, the extract will not be trimmed to - $wgOpenSearchDescriptionLength. - - image: Thumbnail for this result. Value is an array with subkeys 'source' - (url), 'width', 'height', 'alt', 'align'. - - url: Url for the given title. + array: + - title: Title object. + - redirect from: Title or null. + - extract: Description for this result. + - extract trimmed: If truthy, the extract will not be trimmed to + $wgOpenSearchDescriptionLength. + - image: Thumbnail for this result. Value is an array with subkeys 'source' + (url), 'width', 'height', 'alt', 'align'. + - url: Url for the given title. 'ApiQuery::moduleManager': Called when ApiQuery has finished initializing its module manager. Can be used to conditionally register API query modules. @@ -462,6 +471,19 @@ just add your callback to the $tokenFunctions array and return true (returning false makes no sense). $tokenFunctions: array(action => callback) +'APIQueryRecentChangesTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes +instead. +Use this hook to add custom tokens to list=recentchanges. Every token has an +action, which will be used in the rctoken parameter and in the output +(actiontoken="..."), and a callback function which should return the token, or +false if the user isn't allowed to obtain it. The prototype of the callback +function is func($pageid, $title, $rc), where $pageid is the page ID of the +page associated to the revision the token is requested for, $title the +associated Title object and $rc the associated RecentChange object. In the +hook, just add your callback to the $tokenFunctions array and return true +(returning false makes no sense). +$tokenFunctions: array(action => callback) + 'APIQueryRevisionsTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. Use this hook to add custom tokens to prop=revisions. Every token has an action, which will be used in the rvtoken parameter and in the output @@ -474,18 +496,6 @@ just add your callback to the $tokenFunctions array and return true (returning false makes no sense). $tokenFunctions: array(action => callback) -'APIQueryRecentChangesTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. -Use this hook to add custom tokens to list=recentchanges. Every token has an -action, which will be used in the rctoken parameter and in the output -(actiontoken="..."), and a callback function which should return the token, or -false if the user isn't allowed to obtain it. The prototype of the callback -function is func($pageid, $title, $rc), where $pageid is the page ID of the -page associated to the revision the token is requested for, $title the -associated Title object and $rc the associated RecentChange object. In the -hook, just add your callback to the $tokenFunctions array and return true -(returning false makes no sense). -$tokenFunctions: array(action => callback) - 'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the sites general information. $module: the current ApiQuerySiteInfo module @@ -510,11 +520,6 @@ your callback to the $tokenFunctions array and return true (returning false makes no sense). $tokenFunctions: array(action => callback) -'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when -an exception is thrown during API action execution. -$apiMain: Calling ApiMain instance. -$e: Exception object. - 'ApiRsdServiceApis': Add or remove APIs from the RSD services list. Each service should have its own entry in the $apis array and have a unique name, passed as key for the array that represents the service data. In this data array, the @@ -524,17 +529,18 @@ key-value-pair identified by the apiLink key is required. 'ApiTokensGetTokenTypes': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. Use this hook to extend action=tokens with new token types. &$tokenTypes: supported token types in format 'type' => callback function -used to retrieve this type of tokens. + used to retrieve this type of tokens. 'Article::MissingArticleConditions': Before fetching deletion & move log entries to display a message of a non-existing page being deleted/moved, give extensions a chance to hide their (unrelated) log entries. &$conds: Array of query conditions (all of which have to be met; conditions will -AND in the final query) + AND in the final query) $logTypes: Array of log types being queried -'ArticleAfterFetchContent': After fetching content of an article from the -database. DEPRECATED, use ArticleAfterFetchContentObject instead. +'ArticleAfterFetchContent': DEPRECATED! Use ArticleAfterFetchContentObject +instead. +After fetching content of an article from the database. $article: the article (object) being loaded from the database &$content: the content (string) of the article @@ -554,6 +560,13 @@ this to change the content in this area or how it is loaded. $diffEngine: the DifferenceEngine $output: the OutputPage object +'ArticleContentViewCustom': Allows to output the text of the article in a +different format than wikitext. Note that it is preferable to implement proper +handing for a custom data type using the ContentHandler facility. +$content: content of the page, as a Content object +$title: title of the page +$output: reference to $wgOut + 'ArticleDelete': Before an article is deleted. $wikiPage: the WikiPage (object) being deleted $user: the user (object) deleting the article @@ -584,7 +597,7 @@ $recipient: User (object) who's talk page was edited article has been changed. $wikiPage: the WikiPage (object) $editInfo: data holder that includes the parser output ($editInfo->output) for -that page after the change + that page after the change $changed: bool for if the page was changed 'ArticleEditUpdatesDeleteFromRecentchanges': Before deleting old entries from @@ -597,8 +610,8 @@ $title: Title (object) used to create the article object $article: Article (object) that will be returned $context: IContextSource (object) -'ArticleInsertComplete': After a new article is created. DEPRECATED, use -PageContentInsertComplete. +'ArticleInsertComplete': DEPRECATED! Use PageContentInsertComplete. +After a new article is created. $wikiPage: WikiPage created $user: User creating the article $text: New content @@ -642,23 +655,24 @@ $moveonly: boolean whether it was for move only or not 'ArticlePurge': Before executing "&action=purge". $wikiPage: WikiPage (object) to purge -'ArticleRevisionVisibilitySet': Called when changing visibility of one or more -revisions of an article. -&$title: Title object of the article - 'ArticleRevisionUndeleted': After an article revision is restored. $title: the article title $revision: the revision $oldPageID: the page ID of the revision when archived (may be null) +'ArticleRevisionVisibilitySet': Called when changing visibility of one or more +revisions of an article. +$title: Title object of the article +$ids: Ids to set the visibility for + 'ArticleRollbackComplete': After an article rollback is completed. $wikiPage: the WikiPage that was edited $user: the user who did the rollback $revision: the revision the page was reverted back to $current: the reverted revision -'ArticleSave': Before an article is saved. DEPRECATED, use PageContentSave -instead. +'ArticleSave': DEPRECATED! Use PageContentSave instead. +Before an article is saved. $wikiPage: the WikiPage (object) being saved $user: the user (object) saving the article $text: the new article text @@ -667,8 +681,8 @@ $isminor: minor flag $iswatch: watch flag $section: section # -'ArticleSaveComplete': After an article has been updated. DEPRECATED, use -PageContentSaveComplete instead. +'ArticleSaveComplete': DEPRECATED! Use PageContentSaveComplete instead. +After an article has been updated. $wikiPage: WikiPage modified $user: User performing the modification $text: New content @@ -699,6 +713,14 @@ the user is redirected back to the page. &$sectionanchor: The section anchor link (e.g. "#overview" ) &$extraq: Extra query parameters which can be added via hooked functions +'ArticleViewCustom': DEPRECATED! Use ArticleContentViewCustom instead. +Allows to output the text of the article in a different format than wikitext. +Note that it is preferable to implement proper handing for a custom data type +using the ContentHandler facility. +$text: text of the page +$title: title of the page +$output: reference to $wgOut + 'ArticleViewFooter': After showing the footer section of an ordinary page view $article: Article object $patrolFooterShown: boolean whether patrol footer is shown @@ -707,28 +729,14 @@ $patrolFooterShown: boolean whether patrol footer is shown viewing. &$article: the article &$pcache: whether to try the parser cache or not -&$outputDone: whether the output for this page finished or not. Set to a ParserOutput -object to both indicate that the output is done and what parser output was used. +&$outputDone: whether the output for this page finished or not. Set to + a ParserOutput object to both indicate that the output is done and what + parser output was used. 'ArticleViewRedirect': Before setting "Redirected from ..." subtitle when a redirect was followed. $article: target article (object) -'ArticleViewCustom': Allows to output the text of the article in a different -format than wikitext. DEPRECATED, use ArticleContentViewCustom instead. Note -that it is preferable to implement proper handing for a custom data type using -the ContentHandler facility. -$text: text of the page -$title: title of the page -$output: reference to $wgOut - -'ArticleContentViewCustom': Allows to output the text of the article in a -different format than wikitext. Note that it is preferable to implement proper -handing for a custom data type using the ContentHandler facility. -$content: content of the page, as a Content object -$title: title of the page -$output: reference to $wgOut - 'AuthPluginAutoCreate': Called when creating a local account for an user logged in from an external authentication method. $user: User object created locally @@ -743,16 +751,16 @@ $args: arguments $user: user $result: result of checking autopromote condition -'BacklinkCacheGetPrefix': Allows to set prefix for a specific link table. -$table: table name -&$prefix: prefix - 'BacklinkCacheGetConditions': Allows to set conditions for query when links to certain title are fetched. $table: table name $title: title of the page to which backlinks are sought &$conds: query conditions +'BacklinkCacheGetPrefix': Allows to set prefix for a specific link table. +$table: table name +&$prefix: prefix + 'BadImage': When checking against the bad image list. Change $bad and return false to override. If an image is "bad", it is not rendered inline in wiki pages or galleries in category pages. @@ -765,10 +773,27 @@ $template BaseTemplate $portlet: string portlet name &$html: string +'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array +and returning it for the skin to output. You can add items to the toolbox while +still letting the skin make final decisions on skin-specific markup conventions +using this hook. +&$sk: The BaseTemplate base skin template +&$toolbox: An array of toolbox items, see BaseTemplate::getToolbox and + BaseTemplate::makeListItem for details on the format of individual items + inside of this array. + 'BeforeDisplayNoArticleText': Before displaying message key "noarticletext" or "noarticletext-nopermission" at Article::showMissingArticle(). $article: article object +'BeforeHttpsRedirect': Prior to forcing HTTP->HTTPS redirect. Gives a chance to +override how the redirect is output by modifying, or by returning false, and +letting standard HTTP rendering take place. +ATTENTION: This hook is likely to be removed soon due to overall design of the +system. +$context: IContextSource object +&$redirect: string URL, modifiable + 'BeforeInitialize': Before anything is initialized in MediaWiki::performRequest(). &$title: Title being used for request @@ -782,13 +807,6 @@ $mediaWiki: Mediawiki object &$out: OutputPage object &$skin: Skin object -'BeforeHttpsRedirect': Prior to forcing HTTP->HTTPS redirect. Gives a chance to -override how the redirect is output by modifying, or by returning false, and -letting standard HTTP rendering take place. -ATTENTION: This hook is likely to be removed soon due to overall design of the system. -$context: IContextSource object -&$redirect: string URL, modifiable - 'BeforePageRedirect': Prior to sending an HTTP redirect. Gives a chance to override how the redirect is output by modifying, or by returning false and taking over the output. @@ -820,13 +838,6 @@ newly created user. &$injected_html: Any HTML to inject after the "logged in" message of a newly created user account -'BitmapHandlerTransform': before a file is transformed, gives extension the -possibility to transform it themselves -$handler: BitmapHandler -$image: File -&$scalerParams: Array with scaler parameters -&$mto: null, set to a MediaTransformOutput - 'BitmapHandlerCheckImageArea': By BitmapHandler::normaliseParams, after all normalizations have been performed, except for the $wgMaxImageArea check. $image: File @@ -834,10 +845,12 @@ $image: File &$checkImageAreaHookResult: null, set to true or false to override the $wgMaxImageArea check result. -'PerformRetroactiveAutoblock': Called before a retroactive autoblock is applied -to a user. -$block: Block object (which is set to be autoblocking) -&$blockIds: Array of block IDs of the autoblock +'BitmapHandlerTransform': before a file is transformed, gives extension the +possibility to transform it themselves +$handler: BitmapHandler +$image: File +&$scalerParams: Array with scaler parameters +&$mto: null, set to a MediaTransformOutput 'BlockIp': Before an IP address or user is blocked. $block: the Block object about to be saved @@ -856,7 +869,7 @@ $output: OutputPage object in use to be able to access the wiki via HTTPS. $ip: The IP address in human-readable form &$canDo: This reference should be set to false if the client may not be able -to use HTTPS + to use HTTPS 'CanonicalNamespaces': For extensions adding their own namespaces or altering the defaults. @@ -893,13 +906,18 @@ $type: The category type. Either 'page', 'img' or 'subcat' $title: Title object for the categorized page $html: Requested html content of anchor &$link: Returned value. When set to a non-null value by a hook subscriber -this value will be used as the anchor instead of Linker::link + this value will be used as the anchor instead of Linker::link 'ChangePasswordForm': For extensions that need to add a field to the ChangePassword form via the Preferences form. &$extraFields: An array of arrays that hold fields like would be passed to the pretty function. +'ChangesListInitRows': Batch process change list rows prior to rendering. +$changesList: ChangesList instance +$rows: The data that will be rendered. May be a ResultWrapper instance or + an array. + 'ChangesListInsertArticleLink': Override or augment link to article in RC list. &$changesList: ChangesList instance. &$articlelink: HTML of link to article (already filled-in). @@ -908,18 +926,17 @@ ChangePassword form via the Preferences form. $unpatrolled: Whether or not we are showing unpatrolled changes. $watched: Whether or not the change is watched by the user. -'ChangesListInitRows': Batch process change list rows prior to rendering. -$changesList: ChangesList instance -$rows: The data that will be rendered. May be a ResultWrapper instance or - an array. - -'ChangesListSpecialPageFilters': Called after building form options on pages inheriting from ChangesListSpecialPage (in core: RecentChanges, RecentChangesLinked and Watchlist). +'ChangesListSpecialPageFilters': Called after building form options on pages +inheriting from ChangesListSpecialPage (in core: RecentChanges, +RecentChangesLinked and Watchlist). $special: ChangesListSpecialPage instance &$filters: associative array of filter definitions. The keys are the HTML name/URL parameters. Each key maps to an associative array with a 'msg' (message key) and a 'default' value. -'ChangesListSpecialPageQuery': Called when building SQL query on pages inheriting from ChangesListSpecialPage (in core: RecentChanges, RecentChangesLinked and Watchlist). +'ChangesListSpecialPageQuery': Called when building SQL query on pages +inheriting from ChangesListSpecialPage (in core: RecentChanges, +RecentChangesLinked and Watchlist). $name: name of the special page, e.g. 'Watchlist' &$tables: array of tables to be queried &$fields: array of columns to select @@ -960,14 +977,6 @@ $user: user initiating the action uses are in active use. &$tags: list of all active tags. Append to this array. -'LoginUserMigrated': Called during login to allow extensions the opportunity to -inform a user that their username doesn't exist for a specific reason, instead -of letting the login form give the generic error message that the account does -not exist. For example, when the account has been renamed or deleted. -$user: the User object being authenticated against. -&$msg: the message identifier for abort reason, or an array to pass a message - key and parameters. - 'Collation::factory': Called if $wgCategoryCollation is an unknown collation. $collationName: Name of the collation in question &$collationObject: Null. Replace with a subclass of the Collation class that @@ -977,24 +986,14 @@ $collationName: Name of the collation in question successfully. $user: user (object) whose email is being confirmed -'ContentHandlerDefaultModelFor': Called when the default content model is determined -for a given title. May be used to assign a different model for that title. -$title: the Title in question -&$model: the model name. Use with CONTENT_MODEL_XXX constants. - -'ContentHandlerForModelID': Called when a ContentHandler is requested for a given -content model name, but no entry for that model exists in $wgContentHandlers. -$modeName: the requested content model name -&$handler: set this to a ContentHandler object, if desired. - -'ContentModelCanBeUsedOn': Called to determine whether that content model can -be used on a given page. This is especially useful to prevent some content models -to be used in some special location. -$contentModel: ID of the content model in question -$title: the Title in question. -&$ok: Output parameter, whether it is OK to use $contentModel on $title. -Handler functions that modify $ok should generally return false to prevent further -hooks from further modifying $ok. +'ContentAlterParserOutput': Modify parser output for a given content object. +Called by Content::getParserOutput after parsing has finished. Can be used +for changes that depend on the result of the parsing but have to be done +before LinksUpdate is called (such as adding tracking categories based on +the rendered HTML). +$content: The Content to render +$title: Title of the page, as context +$parserOutput: ParserOutput to manipulate 'ContentGetParserOutput': Customize parser output for a given content object, called by AbstractContent::getParserOutput. May be used to override the normal @@ -1003,36 +1002,40 @@ $content: The Content to render $title: Title of the page, as context $revId: The revision ID, as context $options: ParserOptions for rendering. To avoid confusing the parser cache, -the output can only depend on parameters provided to this hook function, not on global state. -$generateHtml: boolean, indicating whether full HTML should be generated. If false, -generation of HTML may be skipped, but other information should still be present in the -ParserOutput object. + the output can only depend on parameters provided to this hook function, not + on global state. +$generateHtml: boolean, indicating whether full HTML should be generated. If + false, generation of HTML may be skipped, but other information should still + be present in the ParserOutput object. &$output: ParserOutput, to manipulate or replace -'ContentAlterParserOutput': Modify parser output for a given content object. -Called by Content::getParserOutput after parsing has finished. Can be used -for changes that depend on the result of the parsing but have to be done -before LinksUpdate is called (such as adding tracking categories based on -the rendered HTML). -$content: The Content to render -$title: Title of the page, as context -$parserOutput: ParserOutput to manipulate +'ContentHandlerDefaultModelFor': Called when the default content model is +determined for a given title. May be used to assign a different model for that +title. +$title: the Title in question +&$model: the model name. Use with CONTENT_MODEL_XXX constants. -'ConvertContent': Called by AbstractContent::convert when a conversion to another -content model is requested. -$content: The Content object to be converted. -$toModel: The ID of the content model to convert to. -$lossy: boolean indicating whether lossy conversion is allowed. -&$result: Output parameter, in case the handler function wants to provide a -converted Content object. Note that $result->getContentModel() must return $toModel. -Handler functions that modify $result should generally return false to further -attempts at conversion. +'ContentHandlerForModelID': Called when a ContentHandler is requested for +a given content model name, but no entry for that model exists in +$wgContentHandlers. +$modeName: the requested content model name +&$handler: set this to a ContentHandler object, if desired. + +'ContentModelCanBeUsedOn': Called to determine whether that content model can +be used on a given page. This is especially useful to prevent some content +models to be used in some special location. +$contentModel: ID of the content model in question +$title: the Title in question. +&$ok: Output parameter, whether it is OK to use $contentModel on $title. + Handler functions that modify $ok should generally return false to prevent + further hooks from further modifying $ok. 'ContribsPager::getQueryInfo': Before the contributions query is about to run &$pager: Pager object for contributions &$queryInfo: The query for the contribs Pager -'ContribsPager::reallyDoQuery': Called before really executing the query for My Contributions +'ContribsPager::reallyDoQuery': Called before really executing the query for My +Contributions &$data: an array of results of all contribs queries $pager: The ContribsPager object hooked into $offset: Index offset, inclusive @@ -1050,18 +1053,28 @@ $id: User identifier $title: User page title &$tools: Array of tool links +'ConvertContent': Called by AbstractContent::convert when a conversion to +another content model is requested. +Handler functions that modify $result should generally return false to disable +further attempts at conversion. +$content: The Content object to be converted. +$toModel: The ID of the content model to convert to. +$lossy: boolean indicating whether lossy conversion is allowed. +&$result: Output parameter, in case the handler function wants to provide a + converted Content object. Note that $result->getContentModel() must return + $toModel. + 'CustomEditor': When invoking the page editor +Return true to allow the normal editor to be used, or false if implementing +a custom editor, e.g. for a special namespace, etc. $article: Article being edited $user: User performing the edit -Return true to allow the normal editor to be used, or false -if implementing a custom editor, e.g. for a special namespace, -etc. - 'DatabaseOraclePostInit': Called after initialising an Oracle database &$db: the DatabaseOracle object -'DeletedContribsPager::reallyDoQuery': Called before really executing the query for Special:DeletedContributions +'DeletedContribsPager::reallyDoQuery': Called before really executing the query +for Special:DeletedContributions Similar to ContribsPager::reallyDoQuery &$data: an array of results of all contribs queries $pager: The DeletedContribsPager object hooked into @@ -1069,29 +1082,14 @@ $offset: Index offset, inclusive $limit: Exact query limit $descending: Query direction, false for ascending, true for descending -'DeletedContributionsLineEnding': Called before a DeletedContributions HTML line is finished. +'DeletedContributionsLineEnding': Called before a DeletedContributions HTML line +is finished. Similar to ContributionsLineEnding $page: SpecialPage object for DeletedContributions &$ret: the HTML line $row: the DB row for this line &$classes: the classes to add to the surrounding
  • -'NewDifferenceEngine': Called when a new DifferenceEngine object is made -$title: the diff page title (nullable) -&$oldId: the actual old Id to use in the diff -&$newId: the actual new Id to use in the diff (0 means current) -$old: the ?old= param value from the url -$new: the ?new= param value from the url - -'GetDifferenceEngine': Called when getting a new difference engine interface object -Return false for valid object in $differenceEngine or true for the default difference engine -$context: IContextSource context to be used for diff -$old: Revision ID to show and diff with -$new: Either a revision ID or one of the strings 'cur', 'prev' or 'next' -$refreshCache: If set, refreshes the diff cache -$unhide: If set, allow viewing deleted revs -&$differenceEngine: output parameter, difference engine object to be used for diff - 'DiffRevisionTools': Override or extend the revision tools available from the diff view, i.e. undo, etc. $newRev: Revision object of the "new" revision @@ -1108,8 +1106,8 @@ an article $article: article (object) being viewed $oldid: oldid (int) being viewed -'DoEditSectionLink': Override the HTML generated for section edit links -* Deprecated in favour of SkinEditSectionLinks hook * +'DoEditSectionLink': DEPRECATED! Use SkinEditSectionLinks instead. +Override the HTML generated for section edit links $skin: Skin object rendering the UI $title: Title object for the title being linked to (may not be the same as the page title, if the section is included from a template) @@ -1128,20 +1126,21 @@ $section: Section being edited &$error: Error message to return $summary: Edit summary for page -'EditFilterMerged': Post-section-merge edit filter. -DEPRECATED, use EditFilterMergedContent instead. +'EditFilterMerged': DEPRECATED! Use EditFilterMergedContent instead. +Post-section-merge edit filter. $editor: EditPage instance (object) $text: content of the edit box &$error: error message to return $summary: Edit summary for page 'EditFilterMergedContent': Post-section-merge edit filter. -This may be triggered by the EditPage or any other facility that modifies page content. -Use the $status object to indicate whether the edit should be allowed, and to provide -a reason for disallowing it. Return false to abort the edit, and true to continue. -Returning true if $status->isOK() returns false means "don't save but continue user -interaction", e.g. show the edit form. $status->apiHookResult can be set to an array -to be returned by api.php action=edit. This is used to deliver captchas. +This may be triggered by the EditPage or any other facility that modifies page +content. Use the $status object to indicate whether the edit should be allowed, +and to provide a reason for disallowing it. Return false to abort the edit, and +true to continue. Returning true if $status->isOK() returns false means "don't +save but continue user interaction", e.g. show the edit form. +$status->apiHookResult can be set to an array to be returned by api.php +action=edit. This is used to deliver captchas. $context: object implementing the IContextSource interface. $content: content of the edit box, as a Content object. $status: Status object to represent errors, etc. @@ -1149,15 +1148,15 @@ $summary: Edit summary for page $user: the User object representing the user whois performing the edit. $minoredit: whether the edit was marked as minor by the user. +'EditFormInitialText': Allows modifying the edit form when editing existing +pages +$editPage: EditPage object + 'EditFormPreloadText': Allows population of the edit form when creating new pages &$text: Text to preload with &$title: Title object representing the page being created -'EditFormInitialText': Allows modifying the edit form when editing existing -pages -$editPage: EditPage object - 'EditPage::attemptSave': Called before an article is saved, that is before WikiPage::doEditContent() is called $editpage_Obj: the current EditPage object @@ -1174,31 +1173,30 @@ $request: Webrequest return value is ignored (should always return true) 'EditPage::showEditForm:fields': allows injection of form field into edit form +Return value is ignored (should always return true) $editor: the EditPage instance for reference $out: an OutputPage instance to write to -return value is ignored (should always return true) 'EditPage::showEditForm:initial': before showing the edit form -$editor: EditPage instance (object) -$out: an OutputPage instance to write to - Return false to halt editing; you'll need to handle error messages, etc. yourself. Alternatively, modifying $error and returning true will cause the contents of $error to be echoed at the top of the edit form as wikitext. Return true without altering $error to allow the edit to proceed. +$editor: EditPage instance (object) +$out: an OutputPage instance to write to 'EditPage::showReadOnlyForm:initial': similar to EditPage::showEditForm:initial but for the read-only 'view source' variant of the edit form. +Return value is ignored (should always return true) $editor: EditPage instance (object) &$out: an OutputPage instance to write to -return value is ignored (should always return true) 'EditPage::showStandardInputs:options': allows injection of form fields into the editOptions area +Return value is ignored (should always be true) $editor: EditPage instance (object) $out: an OutputPage instance to write to &$tabindex: HTML tabindex of the last edit check/button -return value is ignored (should always be true) 'EditPageBeforeConflictDiff': allows modifying the EditPage object and output when there's an edit conflict. Return false to halt normal diff output; in @@ -1230,25 +1228,18 @@ $title: title of page being edited &$msg: localization message name, overridable. Default is either 'copyrightwarning' or 'copyrightwarning2'. -'EditPageGetDiffText': DEPRECATED. Use EditPageGetDiffContent instead. Allow -modifying the wikitext that will be used in "Show changes". Note that it is -preferable to implement diff handling for different data types using the -ContentHandler facility. -$editPage: EditPage object -&$newtext: wikitext that will be used as "your version" - 'EditPageGetDiffContent': Allow modifying the wikitext that will be used in "Show changes". Note that it is preferable to implement diff handling for different data types using the ContentHandler facility. $editPage: EditPage object &$newtext: wikitext that will be used as "your version" -'EditPageGetPreviewText': DEPRECATED. Use EditPageGetPreviewContent instead. -Allow modifying the wikitext that will be previewed. Note that it is preferable -to implement previews for different data types using the ContentHandler -facility. +'EditPageGetDiffText': DEPRECATED! Use EditPageGetDiffContent instead. +Allow modifying the wikitext that will be used in "Show changes". Note that it +is preferable to implement diff handling for different data types using the +ContentHandler facility. $editPage: EditPage object -&$toparse: wikitext that will be parsed +&$newtext: wikitext that will be used as "your version" 'EditPageGetPreviewContent': Allow modifying the wikitext that will be previewed. Note that it is preferable to implement previews for different data @@ -1256,7 +1247,15 @@ types using the ContentHandler facility. $editPage: EditPage object &$content: Content object to be previewed (may be replaced by hook function) -'EditPageNoSuchSection': When a section edit request is given for an non-existent section +'EditPageGetPreviewText': DEPRECATED! Use EditPageGetPreviewContent instead. +Allow modifying the wikitext that will be previewed. Note that it is preferable +to implement previews for different data types using the ContentHandler +facility. +$editPage: EditPage object +&$toparse: wikitext that will be parsed + +'EditPageNoSuchSection': When a section edit request is given for an +non-existent section &$editpage: The current EditPage object &$res: the HTML of the error text @@ -1267,26 +1266,27 @@ $title: title of page being edited &$msg: localization message name, overridable. Default is 'editpage-tos-summary' 'EmailConfirmed': When checking that the user's email address is "confirmed". -$user: User being checked -$confirmed: Whether or not the email address is confirmed This runs before the other checks, such as anonymity and the real check; return true to allow those checks to occur, and false if checking is done. +$user: User being checked +$confirmed: Whether or not the email address is confirmed 'EmailUser': Before sending email from one user to another. -$to: address of receiving user -$from: address of sending user +$to: MailAddress object of receiving user +$from: MailAddress object of sending user $subject: subject of the mail $text: text of the mail +&$error: Out-param for an error 'EmailUserCC': Before sending the copy of the email to the author. -$to: address of receiving user -$from: address of sending user +$to: MailAddress object of receiving user +$from: MailAddress object of sending user $subject: subject of the mail $text: text of the mail 'EmailUserComplete': After sending email from one user to another. -$to: address of receiving user -$from: address of sending user +$to: MailAddress object of receiving user +$from: MailAddress object of sending user $subject: subject of the mail $text: text of the mail @@ -1302,10 +1302,25 @@ $editToken: The user's edit token. 'EnhancedChangesList::getLogText': to alter, remove or add to the links of a group of changes in EnhancedChangesList. +Hook subscribers can return false to omit this line from recentchanges. $changesList: EnhancedChangesList object &$links: The links that were generated by EnhancedChangesList $block: The RecentChanges objects in that block +'EnhancedChangesListModifyLineData': to alter data used to build +a grouped recent change inner line in EnhancedChangesList. +Hook subscribers can return false to omit this line from recentchanges. +$changesList: EnhancedChangesList object +&$data: An array with all the components that will be joined in order to create the line +$block: An array of RecentChange objects in that block +$rc: The RecentChange object for this line + +'EnhancedChangesListModifyBlockLineData': to alter data used to build +a non-grouped recent change line in EnhancedChangesList. +$changesList: EnhancedChangesList object +&$data: An array with all the components that will be joined in order to create the line +$rc: The RecentChange object for this line + 'ExemptFromAccountCreationThrottle': Exemption from the account creation throttle. $ip: The ip address of the user @@ -1314,11 +1329,12 @@ $ip: The ip address of the user change the tables headers. &$extTypes: associative array of extensions types -'ExtractThumbParameters': Called when extracting thumbnail parameters from a -thumbnail file name. -DEPRECATED: Media handler should override MediaHandler::parseParamString instead. +'ExtractThumbParameters': DEPRECATED! Media handler should override +MediaHandler::parseParamString instead. +Called when extracting thumbnail parameters from a thumbnail file name. $thumbname: the base name of the thumbnail file -&$params: the currently extracted params (has source name, temp or archived zone) +&$params: the currently extracted params (has source name, temp or archived +zone) 'FetchChangesList': When fetching the ChangesList derivative for a particular user. @@ -1341,6 +1357,12 @@ $thumb: the MediaTransformOutput object $tmpThumbPath: The temporary file system path of the transformed file $thumbPath: The permanent storage path of the transformed file +'FileUndeleteComplete': When a file is undeleted +$title: title object to the file +$fileVersions: array of undeleted versions. Empty if all versions were restored +$user: user who performed the undeletion +$reason: reason + 'FileUpload': When a file upload occurs. $file : Image object representing the file that was uploaded $reupload : Boolean indicating if there was a previously another image there or @@ -1348,26 +1370,23 @@ $reupload : Boolean indicating if there was a previously another image there or $hasDescription : Boolean indicating that there was already a description page and a new one from the comment wasn't created (since 1.17) -'FileUndeleteComplete': When a file is undeleted -$title: title object to the file -$fileVersions: array of undeleted versions. Empty if all versions were restored -$user: user who performed the undeletion -$reason: reason - 'FormatAutocomments': When an autocomment is formatted by the Linker. - &$comment: Reference to the accumulated comment. Initially null, when set the - default code will be skipped. - $pre: Boolean, true if there is text before this autocomment - $auto: The extracted part of the parsed comment before the call to the hook. - $post: Boolean, true if there is text after this autocomment - $title: An optional title object used to links to sections. Can be null. - $local: Boolean indicating whether section links should refer to local page. +&$comment: Reference to the accumulated comment. Initially null, when set the + default code will be skipped. +$pre: Boolean, true if there is text before this autocomment +$auto: The extracted part of the parsed comment before the call to the hook. +$post: Boolean, true if there is text after this autocomment +$title: An optional title object used to links to sections. Can be null. +$local: Boolean indicating whether section links should refer to local page. +$wikiId: String containing the ID (as used by WikiMap) of the wiki from which the + autocomment originated; null for the local wiki. Added in 1.26, should default + to null in handler functions, for backwards compatibility. 'GalleryGetModes': Get list of classes that can render different modes of a - gallery +gallery. &$modeArray: An associative array mapping mode names to classes that implement - that mode. It is expected all registered classes are a subclass of - ImageGalleryBase. + that mode. It is expected all registered classes are a subclass of + ImageGalleryBase. 'GetAutoPromoteGroups': When determining which autopromote groups a user is entitled to be in. @@ -1392,18 +1411,32 @@ $query: query options passed to Title::getCanonicalURL() $title: Title object that we need to get a sortkey for &$sortkey: Sortkey to use. +'GetDifferenceEngine': Called when getting a new difference engine interface +object Return false for valid object in $differenceEngine or true for the +default difference engine. +$context: IContextSource context to be used for diff +$old: Revision ID to show and diff with +$new: Either a revision ID or one of the strings 'cur', 'prev' or 'next' +$refreshCache: If set, refreshes the diff cache +$unhide: If set, allow viewing deleted revs +&$differenceEngine: output parameter, difference engine object to be used for + diff + 'GetDoubleUnderscoreIDs': Modify the list of behavior switch (double underscore) magic words. Called by MagicWord. &$doubleUnderscoreIDs: array of strings 'GetExtendedMetadata': Get extended file metadata for the API -&$combinedMeta: Array of the form: 'MetadataPropName' => array( -'value' => prop value, 'source' => 'name of hook' ). +&$combinedMeta: Array of the form: + 'MetadataPropName' => array( + value' => prop value, + 'source' => 'name of hook' + ). $file: File object of file in question $context: RequestContext (including language to use) $single: Only extract the current language; if false, the prop value should -be in the metadata multi-language array format: -mediawiki.org/wiki/Manual:File_metadata_handling#Multi-language_array_format + be in the metadata multi-language array format: + mediawiki.org/wiki/Manual:File_metadata_handling#Multi-language_array_format &$maxCacheTime: how long the results can be cached 'GetFullURL': Modify fully-qualified URLs used in redirects/export/offsite data. @@ -1411,9 +1444,9 @@ $title: Title object of page $url: string value as output (out parameter, can modify) $query: query options passed to Title::getFullURL() -'GetHumanTimestamp': Pre-emptively override the human-readable timestamp generated -by MWTimestamp::getHumanTimestamp(). Return false in this hook to use the custom -output. +'GetHumanTimestamp': Pre-emptively override the human-readable timestamp +generated by MWTimestamp::getHumanTimestamp(). Return false in this hook to use +the custom output. &$output: string for the output timestamp $timestamp: MWTimestamp object of the current (user-adjusted) timestamp $relativeTo: MWTimestamp object of the relative (user-adjusted) timestamp @@ -1430,7 +1463,7 @@ $query: query options passed to Title::getInternalURL() 'GetLinkColours': modify the CSS class of an array of page links. $linkcolour_ids: array of prefixed DB keys of the pages linked to, - indexed by page_id. + indexed by page_id. &$colours: (output) array of CSS classes, indexed by prefixed DB keys 'GetLocalURL': Modify local URLs as output into page links. Note that if you are @@ -1442,15 +1475,15 @@ $title: Title object of page &$url: string value as output (out parameter, can modify) $query: query options passed to Title::getLocalURL() -'GetLocalURL::Internal': Modify local URLs to internal pages. +'GetLocalURL::Article': Modify local URLs specifically pointing to article paths +without any fancy queries or variants. $title: Title object of page &$url: string value as output (out parameter, can modify) -$query: query options passed to Title::getLocalURL() -'GetLocalURL::Article': Modify local URLs specifically pointing to article paths -without any fancy queries or variants. +'GetLocalURL::Internal': Modify local URLs to internal pages. $title: Title object of page &$url: string value as output (out parameter, can modify) +$query: query options passed to Title::getLocalURL() 'GetLogTypesOnUser': Add log types where the target is a userpage &$types: Array of log types @@ -1465,9 +1498,10 @@ the media handler metadata output. 'GetNewMessagesAlert': Disable or modify the new messages alert &$newMessagesAlert: An empty string by default. If the user has new talk page -messages, this should be populated with an alert message to that effect -$newtalks: An empty array if the user has no new messages or an array containing -links and revisions if there are new messages (See User::getNewMessageLinks) + messages, this should be populated with an alert message to that effect +$newtalks: An empty array if the user has no new messages or an array + containing links and revisions if there are new messages (See + User::getNewMessageLinks) $user: The user object of the user who is loading the page $out: OutputPage object (to check what type of page the user is on) @@ -1476,8 +1510,8 @@ $user: User whose preferences are being modified. &$preferences: Preferences description array, to be fed to an HTMLForm object 'GetRelativeTimestamp': Pre-emptively override the relative timestamp generated -by MWTimestamp::getRelativeTimestamp(). Return false in this hook to use the custom -output. +by MWTimestamp::getRelativeTimestamp(). Return false in this hook to use the +custom output. &$output: string for the output timestamp &$diff: DateInterval representing the difference between the timestamps $timestamp: MWTimestamp object of the current (user-adjusted) timestamp @@ -1493,7 +1527,7 @@ should be plain text with no special coloring, bolding, etc. to show that they're errors; presenting them properly to the user as errors is done by the caller. $title: Title object being checked against -$user : Current user object +$user: Current user object $action: Action being checked $result: User permissions error to add. If none, return true. @@ -1504,9 +1538,8 @@ populate $result with the reason in the form of array( messagename, param1, param2, ... ). For consistency, error messages should be plain text with no special coloring, bolding, etc. to show that they're errors; presenting them properly to the user as errors is done by the caller. - $title: Title object being checked against -$user : Current user object +$user: Current user object $action: Action being checked $result: User permissions error to add. If none, return true. @@ -1521,7 +1554,8 @@ $rev: Revision object 'HTMLFileCache::useFileCache': Override whether a page should be cached in file cache. -$context: An IContextSource object with information about the request being served. +$context: An IContextSource object with information about the request being + served. 'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki image insertion. You can skip the default logic entirely by returning false, or @@ -1536,7 +1570,6 @@ just modify a few things using call-by-reference. &$time: Timestamp of file in 'YYYYMMDDHHIISS' string form, or false for current &$res: Final HTML output, used if you return false - 'ImageOpenShowImageInlineBefore': Call potential extension just before showing the image on an image page. $imagePage: ImagePage object ($this) @@ -1576,29 +1609,29 @@ using img_auth.php. header message cannot receive/use parameters. 'ImportHandleLogItemXMLTag': When parsing a XML tag in a log item. +Return false to stop further processing of the tag $reader: XMLReader object $logInfo: Array of information -Return false to stop further processing of the tag 'ImportHandlePageXMLTag': When parsing a XML tag in a page. +Return false to stop further processing of the tag $reader: XMLReader object $pageInfo: Array of information -Return false to stop further processing of the tag 'ImportHandleRevisionXMLTag': When parsing a XML tag in a page revision. +Return false to stop further processing of the tag $reader: XMLReader object $pageInfo: Array of page information $revisionInfo: Array of revision information -Return false to stop further processing of the tag 'ImportHandleToplevelXMLTag': When parsing a top level XML tag. -$reader: XMLReader object Return false to stop further processing of the tag +$reader: XMLReader object 'ImportHandleUploadXMLTag': When parsing a XML tag in a file upload. +Return false to stop further processing of the tag $reader: XMLReader object $revisionInfo: Array of information -Return false to stop further processing of the tag 'InfoAction': When building information to display on the action=info page. $context: IContextSource object @@ -1611,11 +1644,11 @@ $ignoreRedirect: boolean to skip redirect check $target: Title/string of redirect target $article: Article object -'InterwikiLoadPrefix': When resolving if a given prefix is an interwiki or not. -Return true without providing an interwiki to continue interwiki search. -$prefix: interwiki prefix we are looking for. -&$iwData: output array describing the interwiki with keys iw_url, iw_local, - iw_trans and optionally iw_api and iw_wikiid. +'InternalParseBeforeLinks': during Parser's internalParse method before links +but after nowiki/noinclude/includeonly/onlyinclude and other processings. +&$parser: Parser object +&$text: string containing partially parsed text +&$stripState: Parser's internal StripState object 'InternalParseBeforeSanitize': during Parser's internalParse method just before the parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/ @@ -1625,11 +1658,11 @@ template/parser function execution which respect nowiki and HTML-comments. &$text: string containing partially parsed text &$stripState: Parser's internal StripState object -'InternalParseBeforeLinks': during Parser's internalParse method before links -but after nowiki/noinclude/includeonly/onlyinclude and other processings. -&$parser: Parser object -&$text: string containing partially parsed text -&$stripState: Parser's internal StripState object +'InterwikiLoadPrefix': When resolving if a given prefix is an interwiki or not. +Return true without providing an interwiki to continue interwiki search. +$prefix: interwiki prefix we are looking for. +&$iwData: output array describing the interwiki with keys iw_url, iw_local, + iw_trans and optionally iw_api and iw_wikiid. 'InvalidateEmailComplete': Called after a user's email has been invalidated successfully. @@ -1666,18 +1699,18 @@ $user: User the password is being validated for $code: The language code or the language we're looking for a messages file for &$file: The messages file path, you can override this to change the location. -'LanguageGetNamespaces': Provide custom ordering for namespaces or -remove namespaces. Do not use this hook to add namespaces. Use -CanonicalNamespaces for that. -&$namespaces: Array of namespaces indexed by their numbers - -'LanguageGetMagic': DEPRECATED, use $magicWords in a file listed in +'LanguageGetMagic': DEPRECATED! Use $magicWords in a file listed in $wgExtensionMessagesFiles instead. Use this to define synonyms of magic words depending of the language $magicExtensions: associative array of magic words synonyms $lang: language code (string) -'LanguageGetSpecialPageAliases': DEPRECATED, use $specialPageAliases in a file +'LanguageGetNamespaces': Provide custom ordering for namespaces or +remove namespaces. Do not use this hook to add namespaces. Use +CanonicalNamespaces for that. +&$namespaces: Array of namespaces indexed by their numbers + +'LanguageGetSpecialPageAliases': DEPRECATED! Use $specialPageAliases in a file listed in $wgExtensionMessagesFiles instead. Use to define aliases of special pages names depending of the language $specialPageAliases: associative array of magic words synonyms @@ -1685,7 +1718,7 @@ $lang: language code (string) 'LanguageGetTranslatedLanguageNames': Provide translated language names. &$names: array of language code => language name -$code language of the preferred translations +$code: language of the preferred translations 'LanguageLinks': Manipulate a page's language links. This is called in various places to allow extensions to define the effective language @@ -1710,8 +1743,9 @@ $target: the Title that the link is pointing to &$html: the contents that the tag should have (raw HTML); null means "default". &$customAttribs: the HTML attributes that the tag should have, in -associative array form, with keys and values unescaped. Should be merged with -default values, with a value of false meaning to suppress the attribute. + associative array form, with keys and values unescaped. Should be merged + with default values, with a value of false meaning to suppress the + attribute. &$query: the query string to add to the generated URL (the bit after the "?"), in associative array form, with keys and values unescaped. &$options: array of options. Can include 'known', 'broken', 'noclasses'. @@ -1773,7 +1807,7 @@ including delete and insert, has completed for all link tables &$tags: The list of tags. 'LoadExtensionSchemaUpdates': Called during database installation and updates. -&updater: A DatabaseUpdater subclass +&$updater: A DatabaseUpdater subclass 'LocalFile::getHistory': Called before file history query performed. $file: the File object @@ -1792,7 +1826,8 @@ cache. $cache: The LocalisationCache object $code: language code &$alldata: The localisation data from core and extensions -&purgeBlobs: whether to purge/update the message blobs via MessageBlobStore::clear() +&$purgeBlobs: whether to purge/update the message blobs via + MessageBlobStore::clear() 'LocalisationCacheRecacheFallback': Called for each language when merging fallback data into the cache. @@ -1808,16 +1843,19 @@ localisation checks. 'LocalisationIgnoredOptionalMessages': When fetching the list of ignored and optional localisation messages -&$ignored Array of ignored message keys -&$optional Array of optional message keys +&$ignored: Array of ignored message keys +&$optional: Array of optional message keys + +'LocalUserCreated': Called when a local user has been created +$user: User object for the created user +$autocreated: Boolean, whether this was an auto-creation -'LogEventsListGetExtraInputs': When getting extra inputs to display on Special:Log -for a specific log type +'LogEventsListGetExtraInputs': When getting extra inputs to display on +Special:Log for a specific log type $type: String of log type being displayed $logEventsList: LogEventsList object for context and access to the WebRequest &$input: string HTML of an input element - 'LogEventsListShowLogExtract': Called before the string is added to OutputPage. Returning false will prevent the string from being added to the OutputPage. &$s: html string to show for the log extract @@ -1840,10 +1878,12 @@ $param: Associative Array with the following additional options: "<div ...>$1</div>"). - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS) -'LogException': Called before an exception (or PHP error) is logged. This is meant for integration -with external error aggregation services; returning false will NOT prevent logging. +'LogException': Called before an exception (or PHP error) is logged. This is +meant for integration with external error aggregation services; returning false +will NOT prevent logging. $e: The exception (in case of a plain old PHP error, a wrapping ErrorException) -$suppressed: true if the error was suppressed via error_reporting()/wfSuppressWarnings() +$suppressed: true if the error was suppressed via + error_reporting()/wfSuppressWarnings() 'LoginAuthenticateAudit': A login attempt for a valid user account either succeeded or failed. No return data is accepted; this hook is for auditing only. @@ -1852,11 +1892,26 @@ $password: the password being submitted and found wanting $retval: a LoginForm class constant with authenticateUserData() return value (SUCCESS, WRONG_PASS, etc.). -'LoginPasswordResetMessage': User is being requested to reset their password on login. -Use this hook to change the Message that will be output on Special:ChangePassword. +'LoginFormValidErrorMessages': Called in LoginForm when a function gets valid +error messages. Allows to add additional error messages (except messages already +in LoginForm::$validErrorMessages). +&$messages: Already added messages (inclusive messages from + LoginForm::$validErrorMessages) + +'LoginPasswordResetMessage': User is being requested to reset their password on +login. Use this hook to change the Message that will be output on +Special:ChangePassword. &$msg: Message object that will be shown to the user $username: Username of the user who's password was expired. +'LoginUserMigrated': Called during login to allow extensions the opportunity to +inform a user that their username doesn't exist for a specific reason, instead +of letting the login form give the generic error message that the account does +not exist. For example, when the account has been renamed or deleted. +$user: the User object being authenticated against. +&$msg: the message identifier for abort reason, or an array to pass a message + key and parameters. + 'LogLine': Processes a single log entry on Special:Log. $log_type: string for the type of log entry (e.g. 'move'). Corresponds to logging.log_type database field. @@ -1877,13 +1932,13 @@ Special:LonelyPages. &$conds: conditions for the query &$joinConds: join conditions for the query +'MagicWordwgVariableIDs': When defining new magic words IDs. +$variableIDs: array of strings + 'MaintenanceRefreshLinksInit': before executing the refreshLinks.php maintenance script. $refreshLinks: RefreshLinks object -'MagicWordwgVariableIDs': When defining new magic words IDs. -$variableIDs: array of strings - 'MakeGlobalVariablesScript': Called at end of OutputPage::getJSVars. Ideally, this hook should only be used to add variables that depend on the current page/request; static configuration should be added through @@ -1914,10 +1969,6 @@ $user: $wgUser $request: $wgRequest $mediaWiki: The $mediawiki object -'MessagesPreLoad': When loading a message from the database. -$title: title of the message (string) -$message: value (string), change it to the message you want to define - 'MessageCache::get': When fetching a message. Can be used to override the key for customisations. Given and returned message key must be in special format: 1) first letter must be in lower case according to the content language. @@ -1929,15 +1980,17 @@ caches. $title: name of the page changed. $text: new contents of the page. -'MimeMagicInit': Before processing the list mapping MIME types to media types -and the list mapping MIME types to file extensions. -As an extension author, you are encouraged to submit patches to MediaWiki's -core to add new MIME types to mime.types. +'MessagesPreLoad': When loading a message from the database. +$title: title of the message (string) +$message: value (string), change it to the message you want to define + +'MimeMagicGuessFromContent': Allows MW extensions guess the MIME by content. $mimeMagic: Instance of MimeMagic. - Use $mimeMagic->addExtraInfo( $stringOfInfo ); - for adding new MIME info to the list. - Use $mimeMagic->addExtraTypes( $stringOfTypes ); - for adding new MIME types to the list. +&$head: First 1024 bytes of the file in a string (in - Do not alter!). +&$tail: More or equal than last 65558 bytes of the file in a string + (in - Do not alter!). +$file: File path. +&$mime: MIME type (out). 'MimeMagicImproveFromExtension': Allows MW extensions to further improve the MIME type detected by considering the file extension. @@ -1945,13 +1998,15 @@ $mimeMagic: Instance of MimeMagic. $ext: File extension. &$mime: MIME type (in/out). -'MimeMagicGuessFromContent': Allows MW extensions guess the MIME by content. +'MimeMagicInit': Before processing the list mapping MIME types to media types +and the list mapping MIME types to file extensions. +As an extension author, you are encouraged to submit patches to MediaWiki's +core to add new MIME types to mime.types. $mimeMagic: Instance of MimeMagic. -&$head: First 1024 bytes of the file in a string (in - Do not alter!). -&$tail: More or equal than last 65558 bytes of the file in a string - (in - Do not alter!). -$file: File path. -&$mime: MIME type (out). + Use $mimeMagic->addExtraInfo( $stringOfInfo ); + for adding new MIME info to the list. + Use $mimeMagic->addExtraTypes( $stringOfTypes ); + for adding new MIME types to the list. 'ModifyExportQuery': Modify the query used by the exporter. $db: The database object to be queried. @@ -1960,27 +2015,20 @@ $db: The database object to be queried. &$opts: Options for the query. &$join_conds: Join conditions for the query. -'MovePageCheckPermissions': Specify whether the user is allowed to move the page. +'MovePageCheckPermissions': Specify whether the user is allowed to move the +page. $oldTitle: Title object of the current (old) location $newTitle: Title object of the new location $user: User making the move $reason: string of the reason provided by the user $status: Status object to pass error messages to -'MovePageIsValidMove': Specify whether a page can be moved for technical reasons. +'MovePageIsValidMove': Specify whether a page can be moved for technical +reasons. $oldTitle: Title object of the current (old) location $newTitle: Title object of the new location $status: Status object to pass error messages to -'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array -and returning it for the skin to output. You can add items to the toolbox while -still letting the skin make final decisions on skin-specific markup conventions -using this hook. -&$sk: The BaseTemplate base skin template -&$toolbox: An array of toolbox items, see BaseTemplate::getToolbox and - BaseTemplate::makeListItem for details on the format of individual items - inside of this array. - 'NamespaceIsMovable': Called when determining if it is possible to pages in a namespace. $index: Integer; the index of the namespace being checked. @@ -1988,6 +2036,13 @@ $result: Boolean; whether MediaWiki currently thinks that pages in this namespace are movable. Hooks may change this value to override the return value of MWNamespace::isMovable(). +'NewDifferenceEngine': Called when a new DifferenceEngine object is made +$title: the diff page title (nullable) +&$oldId: the actual old Id to use in the diff +&$newId: the actual new Id to use in the diff (0 means current) +$old: the ?old= param value from the url +$new: the ?new= param value from the url + 'NewRevisionFromEditComplete': Called when a revision was inserted due to an edit. $wikiPage: the WikiPage edited @@ -2049,11 +2104,7 @@ $sk: The Skin that called OutputPage::headElement 'OutputPageCheckLastModified': when checking if the page has been modified since the last visit. &$modifiedTimes: array of timestamps. - The following keys are set: page, user, epoch - -'OutputPageParserOutput': after adding a parserOutput to $wgOut -$out: OutputPage instance (object) -$parserOutput: parserOutput instance being added in $out + The following keys are set: page, user, epoch 'OutputPageMakeCategoryLinks': Links are about to be generated for the page's categories. Implementations should return false if they generate the category @@ -2064,6 +2115,10 @@ $categories: associative array, keys are category names, values are category $links: array, intended to hold the result. Must be an associative array with category types as keys and arrays of HTML links as values. +'OutputPageParserOutput': after adding a parserOutput to $wgOut +$out: OutputPage instance (object) +$parserOutput: parserOutput instance being added in $out + 'PageContentInsertComplete': After a new article is created. $wikiPage: WikiPage created $user: User creating the article @@ -2099,7 +2154,8 @@ $isMinor: Whether or not the edit was marked as minor $isWatch: (No longer used) $section: (No longer used) $flags: Flags passed to WikiPage::doEditContent() -$revision: New Revision of the article (can be null for edits that change nothing) +$revision: New Revision of the article (can be null for edits that change + nothing) $status: Status object about to be returned by doEditContent() $baseRevId: the rev ID (or false) this edit was based on @@ -2112,6 +2168,13 @@ $row: the revision row for this line $s: the string representing this parsed line $classes: array containing the
  • element classes +'PageHistoryPager::doBatchLookups': Called after the pager query was run, before +any output is generated, to allow batch lookups for prefetching information +needed for display. If the hook handler returns false, the regular behavior of +doBatchLookups() is skipped. +$pager: the PageHistoryPager +$result: a ResultWrapper representing the query result + 'PageHistoryPager::getQueryInfo': when a history pager query parameter set is constructed. $pager: the pager @@ -2123,7 +2186,7 @@ the key. &$confstr: reference to a hash key string which can be modified $user: User (object) requesting the page -'PageViewUpdate': Allow database (or other) changes to be made after a +'PageViewUpdates': Allow database (or other) changes to be made after a page view is seen by MediaWiki. Note this does not capture views made via external caches such as Squid. $wikipage: WikiPage (object) for the page being viewed. @@ -2145,6 +2208,11 @@ $stripState: stripState used (object) $parser: Parser object being used $text: text that will be returned +'ParserAfterUnstrip': Called after the first unstripGeneral() in +Parser::internalParseHalfParsed() +$parser: Parser object being used +$text: text that will be returned + 'ParserBeforeInternalParse': Called at the beginning of Parser::internalParse(). $parser: Parser object $text: text to parse @@ -2160,6 +2228,14 @@ $stripState: stripState used (object) $parser: Parser object being used $text: actual text +'ParserCacheSaveComplete': Called after a ParserOutput has been committed to +the parser cache. +$parserCache: ParserCache object $parserOutput was stored in +$parserOutput: ParserOutput object that was stored +$title: Title of the page that was parsed to generate $parserOutput +$popts: ParserOptions used for generating $parserOutput +$revId: ID of the revision that was parsed to create $parserOutput + 'ParserClearState': Called at the end of Parser::clearState(). $parser: Parser object being cleared @@ -2173,7 +2249,7 @@ $parser: Newly-cloned Parser object custom magic word $parser: Parser object $varCache: array to store the value in case of multiples calls of the - same magic word + same magic word $index: index (string) of the magic $ret: value of the magic word (the hook should set it) $frame: PPFrame object to use for expanding any template variables @@ -2188,7 +2264,7 @@ cache or return false to not use it. $parser: Parser object $varCache: variable cache (array) -'ParserLimitReport': DEPRECATED, use ParserLimitReportPrepare and +'ParserLimitReport': DEPRECATED! Use ParserLimitReportPrepare and ParserLimitReportFormat instead. Called at the end of Parser:parse() when the parser will include comments about size of the text parsed. @@ -2203,11 +2279,11 @@ $key: Key for the limit report item (string) &$value: Value of the limit report item &$report: String onto which to append the data $isHTML: If true, $report is an HTML table with two columns; if false, it's - text intended for display in a monospaced font. + text intended for display in a monospaced font. $localize: If false, $report should be output in English. -'ParserLimitReportPrepare': Called at the end of Parser:parse() when the parser will -include comments about size of the text parsed. Hooks should use +'ParserLimitReportPrepare': Called at the end of Parser:parse() when the parser +will include comments about size of the text parsed. Hooks should use $output->setLimitReportData() to populate data. Functions for this hook should not use $wgLang; do that in ParserLimitReportFormat instead. $parser: Parser object @@ -2230,39 +2306,51 @@ $section: the section number, zero-based, but section 0 is usually empty &$sectionContent: ref to the content of the section. modify this. $showEditLinks: boolean describing whether this section has an edit link -'ParserTestParser': Called when creating a new instance of Parser in -tests/parser/parserTest.inc. -$parser: Parser object created - 'ParserTestGlobals': Allows to define globals for parser tests. &$globals: Array with all the globals which should be set for parser tests. The arrays keys serve as the globals names, its values are the globals values. +'ParserTestParser': Called when creating a new instance of Parser in +tests/parser/parserTest.inc. +$parser: Parser object created + 'ParserTestTables': Alter the list of tables to duplicate when parser tests are run. Use when page save hooks require the presence of custom tables to ensure that tests continue to run properly. &$tables: array of table names +'PasswordPoliciesForUser': Alter the effective password policy for a user. +$user: User object whose policy you are modifying +&$effectivePolicy: Array of policy statements that apply to this user +$purpose: string indicating purpose of the check, one of 'login', 'create', + or 'reset' + +'PerformRetroactiveAutoblock': Called before a retroactive autoblock is applied +to a user. +$block: Block object (which is set to be autoblocking) +&$blockIds: Array of block IDs of the autoblock + 'PersonalUrls': Alter the user-specific navigation links (e.g. "my page, my talk page, my contributions" etc). &$personal_urls: Array of link specifiers (see SkinTemplate.php) &$title: Title object representing the current page -$skin: SkinTemplate object providing context (e.g. to check if the user is logged in, etc.) +$skin: SkinTemplate object providing context (e.g. to check if the user is + logged in, etc.) 'PingLimiter': Allows extensions to override the results of User::pingLimiter(). -&$user : User performing the action -$action : Action being performed -&$result : Whether or not the action should be prevented -Change $result and return false to give a definitive answer, otherwise -the built-in rate limiting checks are used, if enabled. +&$user: User performing the action +$action: Action being performed +&$result: Whether or not the action should be prevented + Change $result and return false to give a definitive answer, otherwise + the built-in rate limiting checks are used, if enabled. $incrBy: Amount to increment counter by 'PlaceNewSection': Override placement of new sections. Return false and put the merged text into $text to override the default behavior. -$wikipage : WikiPage object -$oldtext : the text of the article before editing -$subject : subject of the new section -&$text : text of the new section +$wikipage: WikiPage object +$oldtext: the text of the article before editing +$subject: subject of the new section +&$text: text of the new section 'PostLoginRedirect': Modify the post login redirect behavior. Occurs after signing up or logging in, allows for interception of redirect. @@ -2274,32 +2362,33 @@ Occurs after signing up or logging in, allows for interception of redirect. success: display a return to link using $wgRedirectOnLogin if needed successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed +'PreferencesFormPreSave': Override preferences being saved +$formData: array of user submitted data +$form: PreferencesForm object, also a ContextSource +$user: User object with preferences to be saved set +&$result: boolean indicating success + 'PreferencesGetLegend': Override the text used for the of a preferences section. $form: the PreferencesForm object. This is a ContextSource as well $key: the section name -&$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may be overridden - -'PreferencesFormPreSave': Override preferences being saved - $formData: array of user submitted data - $form: PreferencesForm object, also a ContextSource - $user: User object with preferences to be saved set - &$result: boolean indicating success +&$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may + be overridden 'PrefixSearchBackend': Override the title prefix search used for OpenSearch and AJAX search suggestions. Put results into &$results outparam and return false. -$ns : array of int namespace keys to search in -$search : search term (not guaranteed to be conveniently normalized) -$limit : maximum number of results to return -&$results : out param: array of page names (strings) -$offset : number of results to offset from the beginning +$ns: array of int namespace keys to search in +$search: search term (not guaranteed to be conveniently normalized) +$limit: maximum number of results to return +&$results: out param: array of page names (strings) +$offset: number of results to offset from the beginning 'PrefixSearchExtractNamespace': Called if core was not able to extract a namespace from the search string so that extensions can attempt it. -$namespaces : array of int namespace keys to search in (change this if you can -extract namespaces) -$search : search term (replace this with term without the namespace if you can -extract one) +$namespaces: array of int namespace keys to search in (change this if you can + extract namespaces) +$search: search term (replace this with term without the namespace if you can + extract one) 'PrefsEmailAudit': Called when user changes their email address. $user: User (object) changing his email address @@ -2327,6 +2416,12 @@ shown. $article: the page the form is shown for $out: OutputPage object +'RandomPageQuery': Lets you modify the query used by Special:Random to select +random pages. +&$tables: Database tables to be used in the query +&$conds: Conditions to be applied in the query +&$joinConds: Join conditions to be applied in the query + 'RawPageViewBeforeOutput': Right before the text is blown out in action=raw. &$obj: RawAction object &$text: The text that's going to be the output @@ -2339,10 +2434,18 @@ names such as "oldid" that are preserved when using redirecting special pages such as Special:MyPage and Special:MyTalk. &$redirectParams: An array of parameters preserved by redirecting special pages. +'RejectParserCacheValue': Return false to reject an otherwise usable +cached value from the Parser cache. NOTE: CARELESS USE OF THIS HOOK CAN +HAVE CATASTROPHIC CONSEQUENCES FOR HIGH-TRAFFIC INSTALLATIONS. USE WITH +EXTREME CARE. +$parserOutput: ParserOutput value. +$wikiPage: WikiPage object. +$parserOptions: ParserOptions object. + 'RequestContextCreateSkin': Called when RequestContext::getSkin creates a skin instance. Can be used by an extension override what skin is used in certain contexts. -IContextSource $context: The RequestContext the skin is being created for. +$context: (IContextSource) The RequestContext the skin is being created for. &$skin: A variable reference you may set a Skin instance or string key on to override the skin that will be used for the context. @@ -2350,9 +2453,12 @@ IContextSource $context: The RequestContext the skin is being created for. $user: The user having their password expiration reset &$newExpire: The new expiration date -'ResetSessionID': Called from wfResetSessionID -$oldSessionID: old session id -$newSessionID: new session id +'ResourceLoaderForeignApiModules': Called from ResourceLoaderForeignApiModule. +Use this to add dependencies to 'mediawiki.ForeignApi' module when you wish +to override its behavior. See the module docs for more information. +&$dependencies: string[] List of modules that 'mediawiki.ForeignApi' should +depend on +$context: ResourceLoaderContext|null 'ResourceLoaderGetConfigVars': Called at the end of ResourceLoaderStartUpModule::getConfigSettings(). Use this to export static @@ -2360,8 +2466,9 @@ configuration variables to JavaScript. Things that depend on the current page or request state must be added through MakeGlobalVariablesScript instead. &$vars: array( variable name => value ) -'ResourceLoaderGetLessVars': Called in ResourceLoader::getLessVars after variables -from $wgResourceLoaderLESSVars are added. Can be used to add context-based variables. +'ResourceLoaderGetLessVars': Called in ResourceLoader::getLessVars after +variables from $wgResourceLoaderLESSVars are added. Can be used to add +context-based variables. &$lessVars: array of variables already added 'ResourceLoaderRegisterModules': Right before modules information is required, @@ -2371,17 +2478,16 @@ loader request or generating HTML output. 'ResourceLoaderTestModules': Let you add new JavaScript testing modules. This is called after the addition of 'qunit' and MediaWiki testing resources. -&testModules: array of JavaScript testing modules. The 'qunit' framework, +&$testModules: array of JavaScript testing modules. The 'qunit' framework, included in core, is fed using tests/qunit/QUnitTestResources.php. -&ResourceLoader object - -To add a new qunit module named 'myext.tests': -testModules['qunit']['myext.tests'] = array( - 'script' => 'extension/myext/tests.js', - 'dependencies' => -); -For QUnit framework, the mediawiki.tests.qunit.testrunner dependency will be -added to any module. + To add a new qunit module named 'myext.tests': + $testModules['qunit']['myext.tests'] = array( + 'script' => 'extension/myext/tests.js', + 'dependencies' => + ); + For QUnit framework, the mediawiki.tests.qunit.testrunner dependency will be + added to any module. +&$ResourceLoader: object 'RevisionInsertComplete': Called after a revision is inserted into the database. &$revision: the Revision @@ -2392,35 +2498,35 @@ $data: the data stored in old_text. The meaning depends on $flags: if external $flags: a comma-delimited list of strings representing the options used. May include: utf8 (this will always be set for new revisions); gzip; external. -'SearchGetNearMatchBefore': Perform exact-title-matches in "go" searches before -the normal operations. -$allSearchTerms : Array of the search terms in all content languages -&$titleResult : Outparam; the value to return. A Title object or null. +'SearchableNamespaces': An option to modify which namespaces are searchable. +&$arr: Array of namespaces ($nsId => $name) which will be used. 'SearchAfterNoDirectMatch': If there was no match for the exact result. This runs before lettercase variants are attempted, whereas 'SearchGetNearMatch' runs after. -$term : Search term string -&$title : Outparam; set to $title object and return false for a match +$term: Search term string +&$title: Outparam; set to $title object and return false for a match 'SearchGetNearMatch': An extra chance for exact-title-matches in "go" searches if nothing was found. -$term : Search term string -&$title : Outparam; set to $title object and return false for a match +$term: Search term string +&$title: Outparam; set to $title object and return false for a match + +'SearchGetNearMatchBefore': Perform exact-title-matches in "go" searches before +the normal operations. +$allSearchTerms: Array of the search terms in all content languages +&$titleResult: Outparam; the value to return. A Title object or null. 'SearchGetNearMatchComplete': A chance to modify exact-title-matches in "go" searches. -$term : Search term string -&$title : Current Title object that is being returned (null if none found). +$term: Search term string +&$title: Current Title object that is being returned (null if none found). 'SearchResultInitFromTitle': Set the revision used when displaying a page in search results. -$title : Current Title object being displayed in search results. +$title: Current Title object being displayed in search results. &$id: Revision ID (default is false, for latest) -'SearchableNamespaces': An option to modify which namespaces are searchable. -&$arr : Array of namespaces ($nsId => $name) which will be used. - 'SecondaryDataUpdates': Allows modification of the list of DataUpdates to perform when page content is modified. Currently called by AbstractContent::getSecondaryDataUpdates. @@ -2441,24 +2547,23 @@ $nt: the Title object &$prefix: optional text to display after $html &$ret: the value to return if your hook returns false +'SendWatchlistEmailNotification': Return true to send watchlist email +notification +$targetUser: the user whom to send watchlist email notification +$title: the page title +$enotif: EmailNotification object + 'SetupAfterCache': Called in Setup.php, after cache objects are set 'ShowMissingArticle': Called when generating the output for a non-existent page. $article: The article object corresponding to the page -'ShowRawCssJs': Customise the output of raw CSS and JavaScript in page views. -DEPRECATED, use the ContentGetParserOutput hook instead! +'ShowRawCssJs': DEPRECATED! Use the ContentGetParserOutput hook instead. +Customise the output of raw CSS and JavaScript in page views. $text: Text being shown $title: Title of the custom script/stylesheet page $output: Current OutputPage object -'ShowSearchHitTitle': Customise display of search hit title/link. -&$title: Title to link to -&$text: Text to use for the link -$result: The search result -$terms: The search terms entered -$page: The SpecialSearch object. - 'ShowSearchHit': Customize display of search hit. $searchPage: The SpecialSearch instance. $result: The SearchResult to show @@ -2475,17 +2580,31 @@ $terms: Search terms, for highlighting hit. Must include the
  • ...
  • tags. Will only be used if the hook function returned false. -'SiteNoticeBefore': Before the sitenotice/anonnotice is composed. Return true to -allow the normal method of notice selection/rendering to work, or change the -value of $siteNotice and return false to alter it. -&$siteNotice: HTML returned as the sitenotice +'ShowSearchHitTitle': Customise display of search hit title/link. +&$title: Title to link to +&$text: Text to use for the link +$result: The search result +$terms: The search terms entered +$page: The SpecialSearch object. + +'SidebarBeforeOutput': Allows to edit sidebar just before it is output by skins. +Warning: This hook is run on each display. You should consider to use +'SkinBuildSidebar' that is aggressively cached. $skin: Skin object +&$bar: Sidebar content + Modify $bar to add or modify sidebar portlets. 'SiteNoticeAfter': After the sitenotice/anonnotice is composed. &$siteNotice: HTML sitenotice. Alter the contents of $siteNotice to add to/alter the sitenotice/anonnotice. $skin: Skin object +'SiteNoticeBefore': Before the sitenotice/anonnotice is composed. Return true to +allow the normal method of notice selection/rendering to work, or change the +value of $siteNotice and return false to alter it. +&$siteNotice: HTML returned as the sitenotice +$skin: Skin object + 'SkinAfterBottomScripts': At the end of Skin::bottomScripts(). $skin: Skin object &$text: bottomScripts Text. Append to $text to add additional text/scripts after @@ -2502,12 +2621,6 @@ $skin: Skin object &$bar: Sidebar contents Modify $bar to add or modify sidebar portlets. -'SidebarBeforeOutput': Allows to edit sidebar just before its output by skins. -$skin Skin object -&$bar: Sidebar content -Modify $bar to add or modify sidebar portlets. -Warning: This hook is run on each display. You should consider to use 'SkinBuildSidebar' that is aggressively cached. - 'SkinCopyrightFooter': Allow for site and per-namespace customization of copyright notice. $title: displayed page title @@ -2515,8 +2628,8 @@ $type: 'normal' or 'history' for old/diff views &$msg: overridable message; usually 'copyright' or 'history_copyright'. This message must be in HTML format, not wikitext! &$link: overridable HTML link to be passed into the message as $1 -&$forContent: overridable flag if copyright footer is shown in content language. - This parameter is deprecated. +&$forContent: DEPRECATED! overridable flag if copyright footer is shown in + content language. 'SkinEditSectionLinks': Modify the section edit links $skin: Skin object rendering the UI @@ -2526,18 +2639,18 @@ $section: The designation of the section being pointed to, to be included in the link, like "§ion=$section" $tooltip: The default tooltip. Escape before using. By default, this is wrapped in the 'editsectionhint' message. -&$result: Array containing all link detail arrays. Each link detail array should contain - the following keys: - * targetTitle - Target Title object - * text - String for the text - * attribs - Array of attributes - * query - Array of query parameters to add to the URL - * options - Array of options for Linker::link +&$result: Array containing all link detail arrays. Each link detail array should + contain the following keys: + - targetTitle - Target Title object + - text - String for the text + - attribs - Array of attributes + - query - Array of query parameters to add to the URL + - options - Array of options for Linker::link $lang: The language code to use for the link in the wfMessage function 'SkinGetPoweredBy': TODO &$text: additional 'powered by' icons in HTML. Note: Modern skin does not use -the MediaWiki icon but plain text instead. + the MediaWiki icon but plain text instead. $skin: Skin object 'SkinPreloadExistence': Supply titles that should be added to link existence @@ -2546,13 +2659,13 @@ cache before the page is rendered. $skin: Skin object 'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle(). -&$subpages: Subpage links HTML -$skin: Skin object -$out: OutputPage object If false is returned $subpages will be used instead of the HTML subPageSubtitle() generates. If true is returned, $subpages will be ignored and the rest of subPageSubtitle() will run. +&$subpages: Subpage links HTML +$skin: Skin object +$out: OutputPage object 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink': After creating the "permanent link" tab. @@ -2567,13 +2680,18 @@ $languageLinkTitle: Title object belonging to the external language link. $title: Title object of the page the link belongs to. $outputPage: The OutputPage object the links are built from. -To alter the structured navigation links in SkinTemplates, there are three -hooks called in different spots: - 'SkinTemplateNavigation': Called on content pages after the tabs have been added, but before variants have been added. +&$sktemplate: SkinTemplate object +&$links: Structured navigation links. This is used to alter the navigation for + skins which use buildNavigationUrls such as Vector. + 'SkinTemplateNavigation::SpecialPage': Called on special pages after the special tab is added but before variants have been added. +&$sktemplate: SkinTemplate object +&$links: Structured navigation links. This is used to alter the navigation for + skins which use buildNavigationUrls such as Vector. + 'SkinTemplateNavigation::Universal': Called on both content and special pages after variants have been added. &$sktemplate: SkinTemplate object @@ -2615,10 +2733,6 @@ software. $software: The array of software in format 'name' => 'version'. See SpecialVersion::softwareInformation(). -'SpecialPageBeforeFormDisplay': Before executing the HTMLForm object. -$name: name of the special page -&$form: HTMLForm object - 'SpecialBlockModifyFormFields': Add more fields to Special:Block $sp: SpecialPage object, for context &$fields: Current HTMLForm fields @@ -2668,7 +2782,7 @@ Special:NewPages. &$special: NewPagesPager object (subclass of ReverseChronologicalPager) $opts: FormOptions object containing special page options &$conds: array of WHERE conditionals for query -&tables: array of tables to be queried +&$tables: array of tables to be queried &$fields: array of columns to select &$join_conds: join conditions for the tables @@ -2678,8 +2792,8 @@ $special: the special page object name/URL parameters. Each key maps to an associative array with a 'msg' (message key) and a 'default' value. -'SpecialPage_initList': Called when setting up SpecialPageFactory::$list, use this -hook to remove a core special page or conditionally register special pages. +'SpecialPage_initList': Called when setting up SpecialPageFactory::$list, use +this hook to remove a core special page or conditionally register special pages. $list: list (array) of core special pages 'SpecialPageAfterExecute': Called after SpecialPage::execute. @@ -2690,6 +2804,10 @@ $subPage: the subpage string or null if no subpage was specified $special: the SpecialPage object $subPage: the subpage string or null if no subpage was specified +'SpecialPageBeforeFormDisplay': Before executing the HTMLForm object. +$name: name of the special page +&$form: HTMLForm object + 'SpecialPasswordResetOnSubmit': When executing a form submission on Special:PasswordReset. $users: array of User objects. @@ -2707,8 +2825,9 @@ use this to change some selection criteria or substitute a different title. &$title: If the hook returns false, a Title object to use instead of the result from the normal query -'SpecialRecentChangesFilters': Called after building form options at -RecentChanges. Deprecated, use ChangesListSpecialPageFilters instead. +'SpecialRecentChangesFilters': DEPRECATED! Use ChangesListSpecialPageFilters +instead. +Called after building form options at RecentChanges. $special: the special page object &$filters: associative array of filter definitions. The keys are the HTML name/URL parameters. Each key maps to an associative array with a 'msg' @@ -2719,9 +2838,10 @@ SpecialRecentChanges. &$extraOpts: array of added items, to which can be added $opts: FormOptions for this request -'SpecialRecentChangesQuery': Called when building SQL query for -SpecialRecentChanges and SpecialRecentChangesLinked. Deprecated, use -ChangesListSpecialPageQuery instead. +'SpecialRecentChangesQuery': DEPRECATED! Use ChangesListSpecialPageQuery +instead. +Called when building SQL query for SpecialRecentChanges and +SpecialRecentChangesLinked. &$conds: array of WHERE conditionals for query &$tables: array of tables to be queried &$join_conds: join conditions for the tables @@ -2732,7 +2852,10 @@ $opts: FormOptions for this request 'SpecialResetTokensTokens': Called when building token list for SpecialResetTokens. &$tokens: array of token information arrays in the format of - array( 'preference' => '', 'label-message' => '' ) + array( + 'preference' => '', + 'label-message' => '', + ) 'SpecialSearchCreateLink': Called when making the message to create a page or go to the existing page. @@ -2749,9 +2872,6 @@ the advanced form, a.k.a. power search box. $term: the search term (not a title object) $opts: an array of hidden options (containing 'redirs' and 'profile') -'SpecialSearchProfiles': Allows modification of search profiles. -&$profiles: profiles, which can be modified. - 'SpecialSearchProfileForm': Allows modification of search profile forms. $search: special page object &$form: String: form html @@ -2759,10 +2879,13 @@ $profile: String: current search profile $term: String: search term $opts: Array: key => value of hidden options for inclusion in custom forms -'SpecialSearchSetupEngine': Allows passing custom data to search engine. -$search: SpecialSearch special page object -$profile: String: current search profile -$engine: the search engine +'SpecialSearchProfiles': Allows modification of search profiles. +&$profiles: profiles, which can be modified. + +'SpecialSearchResults': Called before search result display +$term: string of search term +&$titleMatches: empty or SearchResultSet object +&$textMatches: empty or SearchResultSet object 'SpecialSearchResultsPrepend': Called immediately before returning HTML on the search results page. Useful for including an external search @@ -2772,19 +2895,24 @@ $specialSearch: SpecialSearch object ($this) $output: $wgOut $term: Search term specified by the user -'SpecialSearchResults': Called before search result display -$term: string of search term -&$titleMatches: empty or SearchResultSet object -&$textMatches: empty or SearchResultSet object +'SpecialSearchResultsAppend': Called immediately before returning HTML +on the search results page. Useful for including a feedback link. +$specialSearch: SpecialSearch object ($this) +$output: $wgOut + +'SpecialSearchSetupEngine': Allows passing custom data to search engine. +$search: SpecialSearch special page object +$profile: String: current search profile +$engine: the search engine 'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics. &$extraStats: Array to save the new stats - ( $extraStats[''] => ; - can be an array with the keys "name" and "number": - "name" is the HTML to be displayed in the name column - "number" is the number to be displayed. - or, can be the number to be displayed and is the - message key to use in the name column, + $extraStats[''] => ; + can be an array with the keys "name" and "number": + "name" is the HTML to be displayed in the name column + "number" is the number to be displayed. + or, can be the number to be displayed and is the + message key to use in the name column, $context: IContextSource object 'SpecialUploadComplete': Called after successfully uploading a file from @@ -2795,26 +2923,27 @@ $form: The SpecialUpload object $wgVersion: Current $wgVersion for you to use &$versionUrl: Raw url to link to (eg: release notes) -'SpecialWatchlistFilters': Called after building form options at Watchlist. -Deprecated, use ChangesListSpecialPageFilters instead. +'SpecialWatchlistFilters': DEPRECATED! Use ChangesListSpecialPageFilters +instead. +Called after building form options at Watchlist. $special: the special page object &$filters: associative array of filter definitions. The keys are the HTML name/URL parameters. Each key maps to an associative array with a 'msg' (message key) and a 'default' value. -'SpecialWatchlistQuery': Called when building sql query for SpecialWatchlist. -Deprecated, use ChangesListSpecialPageQuery instead. +'SpecialWatchlistGetNonRevisionTypes': Called when building sql query for +SpecialWatchlist. Allows extensions to register custom values they have +inserted to rc_type so they can be returned as part of the watchlist. +&$nonRevisionTypes: array of values in the rc_type field of recentchanges table + +'SpecialWatchlistQuery': DEPRECATED! Use ChangesListSpecialPageQuery instead. +Called when building sql query for SpecialWatchlist. &$conds: array of WHERE conditionals for query &$tables: array of tables to be queried &$join_conds: join conditions for the tables &$fields: array of query fields $opts: A FormOptions object with watchlist options for the current request -'SpecialWatchlistGetNonRevisionTypes': Called when building sql query for -SpecialWatchlist. Allows extensions to register custom values they have -inserted to rc_type so they can be returned as part of the watchlist. -&$nonRevisionTypes: array of values in the rc_type field of recentchanges table - 'TestCanonicalRedirect': Called when about to force a redirect to a canonical URL for a title when we have no other parameters on the URL. Gives a chance for extensions that alter page view behavior radically to abort that redirect or @@ -2838,32 +2967,17 @@ $res: database result used to create the object $title: The title being tested. &$exists: Whether the title exists. -'TitleQuickPermissions': Called from Title::checkQuickPermissions to add to -or override the quick permissions check. -$title: The Title object being accessed -$user: The User performing the action -$action: Action being performed -&$errors: Array of errors -$doExpensiveQueries: Whether to do expensive DB queries -$short: Whether to return immediately on first error - 'TitleGetEditNotices': Allows extensions to add edit notices $title: The Title object for the page the edit notices are for $oldid: Revision ID that the edit notices are for (or 0 for latest) -&$notices: Array of notices. Keys are i18n message keys, values are parseAsBlock()ed messages. +&$notices: Array of notices. Keys are i18n message keys, values are +parseAsBlock()ed messages. 'TitleGetRestrictionTypes': Allows extensions to modify the types of protection that can be applied. $title: The title in question. &$types: The types of protection available. -'TitleIsCssOrJsPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead. -Called when determining if a page is a CSS or JS page. -$title: Title object that is being checked -$result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page. - Hooks may change this value to override the return value of - Title::isCssOrJsPage(). - 'TitleIsAlwaysKnown': Called when determining if a page exists. Allows overriding default behavior for determining if a page exists. If $isKnown is kept as null, regular checks happen. If it's a boolean, this value is returned @@ -2871,6 +2985,13 @@ by the isKnown method. $title: Title object that is being checked &$isKnown: Boolean|null; whether MediaWiki currently thinks this page is known +'TitleIsCssOrJsPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead. +Called when determining if a page is a CSS or JS page. +$title: Title object that is being checked +$result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page. + Hooks may change this value to override the return value of + Title::isCssOrJsPage(). + 'TitleIsMovable': Called when determining if it is possible to move a page. Note that this hook is not called for interwiki pages or pages in immovable namespaces: for these, isMovable() always returns false. @@ -2900,6 +3021,15 @@ $pageid: database ID of the page that's been moved $redirid: database ID of the created redirect $reason: reason for the move +'TitleQuickPermissions': Called from Title::checkQuickPermissions to add to +or override the quick permissions check. +$title: The Title object being accessed +$user: The User performing the action +$action: Action being performed +&$errors: Array of errors +$doExpensiveQueries: Whether to do expensive DB queries +$short: Whether to return immediately on first error + 'TitleReadWhitelist': Called at the end of read permissions checks, just before adding the default error message if nothing allows the user to read the page. If a handler wants a title to *not* be whitelisted, it should also return false. @@ -2932,16 +3062,16 @@ $title: Title object of the page that we're about to undelete $title: title object related to the revision $rev: revision (object) that will be viewed -'UnknownAction': An unknown "action" has occurred (useful for defining your own -actions). -$action: action name -$article: article "acted on" - 'UnitTestsList': Called when building a list of paths containing PHPUnit tests. Since 1.24: Paths pointing to a directory will be recursively scanned for test case files matching the suffix "Test.php". &$paths: list of test cases and directories to search. +'UnknownAction': An unknown "action" has occurred (useful for defining your own +actions). +$action: action name +$article: article "acted on" + 'UnwatchArticle': Before a watch is removed from an article. $user: user watching $page: WikiPage object to be removed @@ -2954,10 +3084,13 @@ $page: WikiPage object that was watched 'UpdateUserMailerFormattedPageStatus': Before notification email gets sent. $formattedPageStatus: list of valid page states -'UploadForm:initial': Before the upload form is generated. You might set the -member-variables $uploadFormTextTop and $uploadFormTextAfterSummary to inject -text (HTML) either before or after the editform. -$form: UploadForm object +'UploadComplete': Upon completion of a file upload. +$uploadBase: UploadBase (or subclass) object. File can be accessed by + $uploadBase->getLocalFile(). + +'UploadCreateFromRequest': When UploadBase::createFromRequest has been called. +$type: (string) the requested upload type +&$className: the class name of the Upload instance to be created 'UploadForm:BeforeProcessing': At the beginning of processUpload(). Lets you poke at member variables like $mUploadDescription before the file is saved. Do @@ -2966,12 +3099,10 @@ blank form with no error message; use UploadVerification and UploadVerifyFile instead. $form: UploadForm object -'UploadCreateFromRequest': When UploadBase::createFromRequest has been called. -$type: (string) the requested upload type -&$className: the class name of the Upload instance to be created - -'UploadComplete': when Upload completes an upload. -&$upload: an UploadBase child instance +'UploadForm:initial': Before the upload form is generated. You might set the +member-variables $uploadFormTextTop and $uploadFormTextAfterSummary to inject +text (HTML) either before or after the editform. +$form: UploadForm object 'UploadFormInitDescriptor': After the descriptor for the upload form as been assembled. @@ -2983,25 +3114,21 @@ $descriptor: (array) the HTMLForm descriptor 'UploadVerification': Additional chances to reject an uploaded file. Consider using UploadVerifyFile instead. -string $saveName: destination file name -string $tempName: filesystem path to the temporary file for checks -string &$error: output: message key for message to show if upload canceled by +$saveName: (string) destination file name +$tempName: (string) filesystem path to the temporary file for checks +&$error: (string) output: message key for message to show if upload canceled by returning false. May also be an array, where the first element is the message key and the remaining elements are used as parameters to the message. 'UploadVerifyFile': extra file verification, based on MIME type, etc. Preferred in most cases over UploadVerification. -object $upload: an instance of UploadBase, with all info about the upload -string $mime: The uploaded file's MIME type, as detected by MediaWiki. Handlers - will typically only apply for specific MIME types. -object &$error: output: true if the file is valid. Otherwise, an indexed array +$upload: (object) an instance of UploadBase, with all info about the upload +$mime: (string) The uploaded file's MIME type, as detected by MediaWiki. + Handlers will typically only apply for specific MIME types. +&$error: (object) output: true if the file is valid. Otherwise, an indexed array representing the problem with the file, where the first element is the message key and the remaining elements are used as parameters to the message. -'UploadComplete': Upon completion of a file upload. -$uploadBase: UploadBase (or subclass) object. File can be accessed by - $uploadBase->getLocalFile(). - 'User::mailPasswordInternal': before creation and mailing of a user's new temporary password $user: the user who sent the message out @@ -3021,7 +3148,7 @@ $res: database result used to create the object 'userCan': To interrupt/advise the "user can do X to Y article" check. If you want to display an error message, try getUserPermissionsErrors. $title: Title object being checked against -$user : Current user object +$user: Current user object $action: Action being checked $result: Pointer to result returned if hook returns false. If null is returned, userCan checks are continued by internal code. @@ -3062,7 +3189,8 @@ $user: User object &$timestamp: timestamp, change this to override local email authentication timestamp -'UserGetImplicitGroups': DEPRECATED, called in User::getImplicitGroups(). +'UserGetImplicitGroups': DEPRECATED! +Called in User::getImplicitGroups(). &$groups: List of implicit (automatically-assigned) groups 'UserGetLanguageObject': Called when getting user's interface language object. @@ -3077,6 +3205,12 @@ $context: IContextSource object $user: User to get rights for &$rights: Current rights +'UserGroupsChanged': Called after user groups are changed. +$user: User whose groups changed +$added: Groups added +$removed: Groups removed +$performer: User who performed the change, false if via autopromotion + 'UserIsBlockedFrom': Check if a user is blocked from a specific page (for specific block exemptions). $user: User in question @@ -3094,6 +3228,14 @@ $ip: User's IP address false if a UserGetRights hook might remove the named right. $right: The user right being checked +'UserIsHidden': Check if the user's name should be hidden. See User::isHidden(). +$user: User in question. +&$hidden: Set true if the user's name should be hidden. + +'UserIsLocked': Check if the user is locked. See User::isLocked(). +$user: User in question. +&$locked: Set true if the user should be locked. + 'UserLoadAfterLoadFromSession': Called to authenticate users on external or environmental means; occurs after session is loaded. $user: user object being loaded @@ -3117,6 +3259,9 @@ database. $user: User object &$options: Options, can be modified. +'UserLoggedIn': Called after a user is logged in +$user: User object for the logged-in user + 'UserLoginComplete': After a user has logged in. $user: the user object that was created on login $inject_html: Any HTML to inject after the "logged in" message. @@ -3132,16 +3277,16 @@ $user: the user object _after_ logout (won't have name, ID, etc.) $inject_html: Any HTML to inject after the "logged out" message. $oldName: name of the user before logout (string) +'UserMailerChangeReturnPath': Called to generate a VERP return address +when UserMailer sends an email, with a bounce handling extension. +$to: Array of MailAddress objects for the recipients +&$returnPath: The return address string + 'UserRemoveGroup': Called when removing a group; return false to override stock group removal. $user: the user object that is to have a group removed &$group: the group to be removed, can be modified -'UserRights': After a user's group memberships are changed. -$user : User object that was changed -$add : Array of strings corresponding to groups added -$remove: Array of strings corresponding to groups removed - 'UserRequiresHTTPS': Called to determine whether a user needs to be switched to HTTPS. $user: User in question. @@ -3162,13 +3307,19 @@ message(s). $user: user retrieving new talks messages $talks: array of new talks page(s) -'UserSaveSettings': Called when saving user settings. -$user: User object +'UserRights': DEPRECATED! Use UserGroupsChanged instead. +After a user's group memberships are changed. +&$user: User object that was changed +$add: Array of strings corresponding to groups added +$remove: Array of strings corresponding to groups removed 'UserSaveOptions': Called just before saving user preferences/options. $user: User object &$options: Options, modifiable +'UserSaveSettings': Called when saving user settings. +$user: User object + 'UserSetCookies': Called when setting user cookies. $user: User object &$session: session array, will be added to $_SESSION @@ -3196,16 +3347,6 @@ invalidated and GetExtendedMetadata hook called again). $timestamp: The timestamp metadata was generated $file: The file the metadata is for -'UserMailerChangeReturnPath': Called to generate a VERP return address -when UserMailer sends an email, with a bounce handling extension. -$to: Array of MailAddress objects for the recipients -&$returnPath: The return address string - -'LoginFormValidErrorMessages': Called in LoginForm when a function gets valid error -messages. Allows to add additional error messages (except messages already in -LoginForm::$validErrorMessages). -&$messages Already added messages (inclusive messages from LoginForm::$validErrorMessages) - 'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be used to alter the SQL query which gets the list of wanted pages. &$wantedPages: WantedPagesPage object @@ -3244,6 +3385,17 @@ Return false to prevent setting of the cookie. &$expire: Cookie expiration, as for PHP's setcookie() $options: Options passed to WebResponse::setcookie() +'wfShellWikiCmd': Called when generating a shell-escaped command line string to +run a MediaWiki cli script. +&$script: MediaWiki cli script path +&$parameters: Array of arguments and options to the script +&$options: Associative array of options, may contain the 'php' and 'wrapper' + keys + +'wgQueryPages': Called when initialising list of QueryPage subclasses, use this +to add new query pages to be updated with maintenance/updateSpecialPages.php. +$qp: The list of QueryPages + 'WhatLinksHereProps': Allows annotations to be added to WhatLinksHere $row: The DB row of the entry. $title: The Title of the page where the link comes FROM @@ -3264,17 +3416,6 @@ $page: the WikiPage $content: the Content to generate updates for &$updates: the array of DataUpdate objects. Hook function may want to add to it. -'wfShellWikiCmd': Called when generating a shell-escaped command line string to -run a MediaWiki cli script. -&$script: MediaWiki cli script path -&$parameters: Array of arguments and options to the script -&$options: Associative array of options, may contain the 'php' and 'wrapper' - keys - -'wgQueryPages': Called when initialising list of QueryPage subclasses, use this -to add new query pages to be updated with maintenance/updateSpecialPages.php. -$qp: The list of QueryPages - 'XmlDumpWriterOpenPage': Called at the end of XmlDumpWriter::openPage, to allow extra metadata to be added. $obj: The XmlDumpWriter object. @@ -3289,16 +3430,5 @@ $obj: The XmlDumpWriter object. $row: The database row for the revision. $text: The revision text. -'XMPGetInfo': Called when obtaining the list of XMP tags to extract. Can be used -to add additional tags to extract. -&$items: Array containing information on which items to extract. See XMPInfo for - details on the format. - -'XMPGetResults': Called just before returning the results array of parsing xmp -data. Can be used to post-process the results. -&$data: Array of metadata sections (such as $data['xmp-general']) each section - is an array of metadata tags returned (each tag is either a value, or an array - of values). - More hooks might be available but undocumented, you can execute "php maintenance/findHooks.php" to find hidden ones. diff --git a/docs/kss/styleguide-template/index.html b/docs/kss/styleguide-template/index.html index 933260ec..d1ae26af 100644 --- a/docs/kss/styleguide-template/index.html +++ b/docs/kss/styleguide-template/index.html @@ -55,10 +55,11 @@ {{else}} {{#whenDepth 2}} -

    {{ reference }} {{ header }}

    +

    {{ reference }} {{ header }}

    {{/whenDepth}} {{#whenDepth 3}} -

    {{ reference }} {{ header }}

    + +

    {{ reference }} {{ header }}

    {{/whenDepth}} {{/whenDepth}} {{#ifAny markup modifiers}} diff --git a/docs/kss/styleguide-template/public/kss.less b/docs/kss/styleguide-template/public/kss.less index eeea1a87..3727694d 100644 --- a/docs/kss/styleguide-template/public/kss.less +++ b/docs/kss/styleguide-template/public/kss.less @@ -106,6 +106,11 @@ nav { h1, h2, h3, h4, h5, h6, p { margin-left: 20px; + + a { + text-decoration: none; + color: #000; + } } p { diff --git a/docs/linkcache.txt b/docs/linkcache.txt index 266f200d..13b69613 100644 --- a/docs/linkcache.txt +++ b/docs/linkcache.txt @@ -21,4 +21,4 @@ foreach( $pages as $page ){ } $batch = new LinkBatch( $titles ); -$batch->execute(); \ No newline at end of file +$batch->execute(); diff --git a/docs/memcached.txt b/docs/memcached.txt index d18b199e..ad2307fd 100644 --- a/docs/memcached.txt +++ b/docs/memcached.txt @@ -152,7 +152,6 @@ Newtalk: Parser Cache: stored in: $parserMemc - controlled by: $wgEnableParserCache key: $wgDBname:pcache:idhash:$pageid-$renderkey!$hash $pageid: id of the page $renderkey: 1 if action=render, 0 otherwise diff --git a/docs/scripts.txt b/docs/scripts.txt index 178bb157..53dff36e 100644 --- a/docs/scripts.txt +++ b/docs/scripts.txt @@ -49,7 +49,4 @@ Primary scripts: There is also a file with a .php5 extension for each script. They can be used if the web server needs a .php5 to run the file with the PHP 5 engine and runs .php -scripts with PHP 4. To use these files, you have to modify $wgScriptExtension to -'.php5' is LocalSettings.php but it is already done by the config script if you -used mw-config/index.php5 for installation. - +scripts with PHP 4. You should not use them anymore. diff --git a/docs/sitelist.txt b/docs/sitelist.txt index 48c7ce52..24e1b9a7 100644 --- a/docs/sitelist.txt +++ b/docs/sitelist.txt @@ -44,4 +44,4 @@ The XML elements are used as follows: ** link: Generic URL template, often the document root. ** page_path: (for mediawiki sites) URL template for wiki pages (corresponds to the target wiki's $wgArticlePath setting) ** file_path: (for mediawiki sites) URL pattern for application entry points and resources (corresponds to the target wiki's $wgScriptPath setting). -* forward: Whether using a prefix defined by a localid tag in the URL will cause the request to be redirected to the corresponding page on the target wiki (currently unused). E.g. whether http://wiki.acme.com/wiki/foo:Buzz should be forwarded to http://wiki.foo.com/read/Buzz. (CAVEAT: not yet implement, can be specified but has no effect) \ No newline at end of file +* forward: Whether using a prefix defined by a localid tag in the URL will cause the request to be redirected to the corresponding page on the target wiki (currently unused). E.g. whether http://wiki.acme.com/wiki/foo:Buzz should be forwarded to http://wiki.foo.com/read/Buzz. (CAVEAT: not yet implement, can be specified but has no effect) diff --git a/docs/uidesign/design.html b/docs/uidesign/design.html index 51c1b552..6ab57d7d 100644 --- a/docs/uidesign/design.html +++ b/docs/uidesign/design.html @@ -2,6 +2,7 @@ + diff --git a/extensions/Cite/CiteCSSFileModule.php b/extensions/Cite/CiteCSSFileModule.php new file mode 100644 index 00000000..308abf09 --- /dev/null +++ b/extensions/Cite/CiteCSSFileModule.php @@ -0,0 +1,34 @@ +.css file present will be used. + $langCodes = array_merge( array( $wgContLang->getCode() ), + $wgContLang->getFallbackLanguages() ); + foreach ( $langCodes as $lang ) { + $langStyleFile = 'ext.cite.style.' . $lang . '.css'; + $localPath = $this->getLocalPath( $langStyleFile ); + if ( file_exists( $localPath ) ) { + $this->styles[] = $langStyleFile; + break; + } + } + } +} diff --git a/extensions/Cite/Cite_body.php b/extensions/Cite/Cite_body.php index 6072cdfc..41021b04 100644 --- a/extensions/Cite/Cite_body.php +++ b/extensions/Cite/Cite_body.php @@ -178,8 +178,8 @@ class Cite { $this->mInCite = false; $parserOutput = $parser->getOutput(); - $parserOutput->addModules( 'ext.cite' ); - $parserOutput->addModuleStyles( 'ext.rtlcite' ); + $parserOutput->addModules( 'ext.cite.a11y' ); + $parserOutput->addModuleStyles( 'ext.cite.styles' ); if ( is_callable( array( $frame, 'setVolatile' ) ) ) { $frame->setVolatile(); @@ -364,8 +364,8 @@ class Cite { --$cnt; } - if ( $cnt == 0 ) { - return array ( $key, $group, $follow ); + if ( $cnt === 0 ) { + return array( $key, $group, $follow ); } else { // Invalid key return array( false, false, false ); @@ -394,7 +394,6 @@ class Cite { if ( !isset( $this->mGroupCnt[$group] ) ) { $this->mGroupCnt[$group] = 0; } - if ( $follow != null ) { if ( isset( $this->mRefs[$group][$follow] ) && is_array( $this->mRefs[$group][$follow] ) ) { // add text to the note that is being followed @@ -418,6 +417,7 @@ class Cite { // return an empty string : this is not a reference return ''; } + if ( $key === null ) { // No key // $this->mRefs[$group][] = $str; @@ -425,49 +425,48 @@ class Cite { $this->mRefCallStack[] = array( 'new', $call, $str, $key, $group, $this->mOutCnt ); return $this->linkRef( $group, $this->mOutCnt ); - } elseif ( is_string( $key ) ) { - // Valid key - if ( !isset( $this->mRefs[$group][$key] ) || !is_array( $this->mRefs[$group][$key] ) ) { - // First occurrence - $this->mRefs[$group][$key] = array( - 'text' => $str, - 'count' => 0, - 'key' => ++$this->mOutCnt, - 'number' => ++$this->mGroupCnt[$group] - ); - $this->mRefCallStack[] = array( 'new', $call, $str, $key, $group, $this->mOutCnt ); - - return - $this->linkRef( - $group, - $key, - $this->mRefs[$group][$key]['key'] . "-" . $this->mRefs[$group][$key]['count'], - $this->mRefs[$group][$key]['number'], - "-" . $this->mRefs[$group][$key]['key'] - ); - } else { - // We've been here before - if ( $this->mRefs[$group][$key]['text'] === null && $str !== '' ) { - // If no text found before, use this text - $this->mRefs[$group][$key]['text'] = $str; - $this->mRefCallStack[] = array( 'assign', $call, $str, $key, $group, - $this->mRefs[$group][$key]['key'] ); - } else { - $this->mRefCallStack[] = array( 'increment', $call, $str, $key, $group, - $this->mRefs[$group][$key]['key'] ); - } - return - $this->linkRef( - $group, - $key, - $this->mRefs[$group][$key]['key'] . "-" . ++$this->mRefs[$group][$key]['count'], - $this->mRefs[$group][$key]['number'], - "-" . $this->mRefs[$group][$key]['key'] - ); - } - } else { + } + if ( !is_string( $key ) ) { throw new Exception( 'Invalid stack key: ' . serialize( $key ) ); } + + // Valid key + if ( !isset( $this->mRefs[$group][$key] ) || !is_array( $this->mRefs[$group][$key] ) ) { + // First occurrence + $this->mRefs[$group][$key] = array( + 'text' => $str, + 'count' => 0, + 'key' => ++$this->mOutCnt, + 'number' => ++$this->mGroupCnt[$group] + ); + $this->mRefCallStack[] = array( 'new', $call, $str, $key, $group, $this->mOutCnt ); + + return $this->linkRef( + $group, + $key, + $this->mRefs[$group][$key]['key'] . "-" . $this->mRefs[$group][$key]['count'], + $this->mRefs[$group][$key]['number'], + "-" . $this->mRefs[$group][$key]['key'] + ); + } + + // We've been here before + if ( $this->mRefs[$group][$key]['text'] === null && $str !== '' ) { + // If no text found before, use this text + $this->mRefs[$group][$key]['text'] = $str; + $this->mRefCallStack[] = array( 'assign', $call, $str, $key, $group, + $this->mRefs[$group][$key]['key'] ); + } else { + $this->mRefCallStack[] = array( 'increment', $call, $str, $key, $group, + $this->mRefs[$group][$key]['key'] ); + } + return $this->linkRef( + $group, + $key, + $this->mRefs[$group][$key]['key'] . "-" . ++$this->mRefs[$group][$key]['count'], + $this->mRefs[$group][$key]['number'], + "-" . $this->mRefs[$group][$key]['key'] + ); } /** @@ -505,7 +504,7 @@ class Cite { } } - # Sanity checks that specified element exists. + // Sanity checks that specified element exists. if ( $key === null ) { return; } @@ -520,7 +519,7 @@ class Cite { case 'new': # Rollback the addition of new elements to the stack. unset( $this->mRefs[$group][$key] ); - if ( count( $this->mRefs[$group] ) == 0 ) { + if ( count( $this->mRefs[$group] ) === 0 ) { unset( $this->mRefs[$group] ); unset( $this->mGroupCnt[$group] ); } @@ -550,19 +549,17 @@ class Cite { if ( $this->mInCite || $this->mInReferences ) { if ( is_null( $str ) ) { return htmlspecialchars( "" ); - } else { - return htmlspecialchars( "$str" ); - } - } else { - $this->mCallCnt++; - $this->mInReferences = true; - $ret = $this->guardedReferences( $str, $argv, $parser ); - $this->mInReferences = false; - if ( is_callable( array( $frame, 'setVolatile' ) ) ) { - $frame->setVolatile(); } - return $ret; + return htmlspecialchars( "$str" ); } + $this->mCallCnt++; + $this->mInReferences = true; + $ret = $this->guardedReferences( $str, $argv, $parser ); + $this->mInReferences = false; + if ( is_callable( array( $frame, 'setVolatile' ) ) ) { + $frame->setVolatile(); + } + return $ret; } /** @@ -579,7 +576,7 @@ class Cite { if ( isset( $argv['group'] ) && $wgAllowCiteGroups ) { $group = $argv['group']; - unset ( $argv['group'] ); + unset( $argv['group'] ); } if ( strval( $str ) !== '' ) { @@ -587,7 +584,7 @@ class Cite { # Detect whether we were sent already rendered s # Mostly a side effect of using #tag to call references - $count = substr_count( $str, $parser->uniqPrefix() . "-ref-" ); + $count = substr_count( $str, Parser::MARKER_PREFIX . "-ref-" ); for ( $i = 1; $i <= $count; $i++ ) { if ( count( $this->mRefCallStack ) < 1 ) { break; @@ -622,21 +619,22 @@ class Cite { if ( count( $argv ) && $wgAllowCiteGroups ) { return $this->error( 'cite_error_references_invalid_parameters_group' ); - } elseif ( count( $argv ) ) { + } + if ( count( $argv ) ) { return $this->error( 'cite_error_references_invalid_parameters' ); - } else { - $s = $this->referencesFormat( $group ); - if ( $parser->getOptions()->getIsSectionPreview() ) { - return $s; - } + } - # Append errors generated while processing - if ( count( $this->mReferencesErrors ) > 0 ) { - $s .= "\n" . implode( "
    \n", $this->mReferencesErrors ); - $this->mReferencesErrors = array(); - } + $s = $this->referencesFormat( $group ); + if ( $parser->getOptions()->getIsSectionPreview() ) { return $s; } + + # Append errors generated while processing + if ( count( $this->mReferencesErrors ) > 0 ) { + $s .= "\n" . implode( "
    \n", $this->mReferencesErrors ); + $this->mReferencesErrors = array(); + } + return $s; } /** @@ -647,7 +645,7 @@ class Cite { * @return string XHTML ready for output */ function referencesFormat( $group ) { - if ( ( count( $this->mRefs ) == 0 ) || ( empty( $this->mRefs[$group] ) ) ) { + if ( ( count( $this->mRefs ) === 0 ) || ( empty( $this->mRefs[$group] ) ) ) { return ''; } @@ -935,7 +933,7 @@ class Cite { $this->refKey( $key, $count ), $this->referencesKey( $key . $subkey ), $this->getLinkLabel( $label, $group, - ( ( $group == self::DEFAULT_GROUP ) ? '' : "$group " ) . $wgContLang->formatNum( $label ) ) + ( ( $group === self::DEFAULT_GROUP ) ? '' : "$group " ) . $wgContLang->formatNum( $label ) ) )->inContentLanguage()->plain() ); } @@ -958,7 +956,7 @@ class Cite { $sep = wfMessage( 'cite_references_link_many_sep' )->inContentLanguage()->plain(); $and = wfMessage( 'cite_references_link_many_and' )->inContentLanguage()->plain(); - if ( $cnt == 1 ) { + if ( $cnt === 1 ) { // Enforce always returning a string return (string)$arr[0]; } else { @@ -1049,8 +1047,10 @@ class Cite { } /** - * Called at the end of page processing to append an error if refs were - * used without a references tag. + * Called at the end of page processing to append a default references + * section, if refs were used without a main references tag. If there are references + * in a custom group, and there is no references tag for it, show an error + * message for that group. * * @param $afterParse bool true if called from the ParserAfterParse hook * @param $parser Parser @@ -1059,6 +1059,9 @@ class Cite { * @return bool */ function checkRefsNoReferences( $afterParse, &$parser, &$text ) { + if ( is_null( $parser->extCite ) ) { + return true; + } if ( $parser->extCite !== $this ) { return $parser->extCite->checkRefsNoReferences( $afterParse, $parser, $text ); } @@ -1074,10 +1077,10 @@ class Cite { } foreach ( $this->mRefs as $group => $refs ) { - if ( count( $refs ) == 0 ) { + if ( count( $refs ) === 0 ) { continue; } - if ( $group == self::DEFAULT_GROUP ) { + if ( $group === self::DEFAULT_GROUP ) { $text .= $this->referencesFormat( $group, '', '' ); } else { $text .= "\n
    " . @@ -1146,7 +1149,7 @@ class Cite { $ret = '' . $msg . ''; - if ( $parse == 'parse' ) { + if ( $parse === 'parse' ) { $ret = $this->mParser->recursiveTagParse( $ret ); } diff --git a/extensions/Cite/Gruntfile.js b/extensions/Cite/Gruntfile.js index 0e5498ee..dd62b9a8 100644 --- a/extensions/Cite/Gruntfile.js +++ b/extensions/Cite/Gruntfile.js @@ -7,13 +7,20 @@ /*jshint node:true */ module.exports = function ( grunt ) { 'use strict'; + grunt.loadNpmTasks( 'grunt-jsonlint' ); grunt.loadNpmTasks( 'grunt-banana-checker' ); grunt.initConfig( { banana: { all: ['i18n/'] + }, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] } } ); - grunt.registerTask( 'test', [ 'banana' ] ); + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); grunt.registerTask( 'default', 'test' ); }; diff --git a/extensions/Cite/citeParserTests.txt b/extensions/Cite/citeParserTests.txt index 047b11a1..acd3056d 100644 --- a/extensions/Cite/citeParserTests.txt +++ b/extensions/Cite/citeParserTests.txt @@ -304,7 +304,7 @@ Wikipedia rocks![n !! end !! test -Simple , with in group, with groupname in chinese +Simple , with in group, with groupname in Chinese !! input AAAref aBBBnote bCCCref c @@ -397,7 +397,7 @@ wa' cha' wej loS vagh jav Soch chorgh Hut wa'maH !! endarticle !! test - with custom group link + with custom group link with number names in Klingon !! input Wikipedia rocks!Proceeds of Rockology, vol. XXI @@ -449,3 +449,35 @@ foo !! end + +!! test + with no name and no content. +!! input +Bla. +!! result +

    Bla.Cite error: Invalid <ref> tag; +refs with no name must have content +

    +!! end + +!! test + with an empty-string name parameter and no content. +!! input +Bla. +!! result +

    Bla.Cite error: Invalid <ref> tag; +refs with no name must have content +

    +!! end + +!! test + with a non-empty name parameter and no content. +!! input +Bla. +!! result +Bla.
    [1]
      +
    1. ↑ Cite error: Invalid <ref> tag; +no text was provided for refs named void
    2. +
    + +!! end diff --git a/extensions/Cite/composer.json b/extensions/Cite/composer.json new file mode 100644 index 00000000..fd380fb7 --- /dev/null +++ b/extensions/Cite/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/Cite/extension.json b/extensions/Cite/extension.json index ff1d4442..e983e36b 100644 --- a/extensions/Cite/extension.json +++ b/extensions/Cite/extension.json @@ -22,17 +22,32 @@ ] }, "ResourceModules": { - "ext.cite": { - "scripts": "ext.cite.js", - "styles": "ext.cite.css", + "ext.cite.styles": { + "styles": { + "ext.cite.styles.css": {}, + "ext.cite.print.css": { + "media": "print" + } + }, + "position": "bottom" + }, + "ext.cite.a11y": { + "scripts": "ext.cite.a11y.js", + "styles": "ext.cite.a11y.css", "messages": [ "cite_references_link_accessibility_label", "cite_references_link_many_accessibility_label" - ] + ], + "position": "bottom" }, - "ext.rtlcite": { - "styles": "ext.rtlcite.css", - "position": "top" + "ext.cite.style": { + "class": "CiteCSSFileModule", + "styles": "ext.cite.style.css", + "position": "top", + "targets": [ + "desktop", + "mobile" + ] } }, "ResourceFileModulePaths": { @@ -44,9 +59,11 @@ "CiteCacheReferences": false }, "AutoloadClasses": { - "Cite": "Cite_body.php" + "Cite": "Cite_body.php", + "CiteCSSFileModule": "CiteCSSFileModule.php" }, "ParserTestFiles": [ "citeParserTests.txt" - ] + ], + "manifest_version": 1 } diff --git a/extensions/Cite/i18n/ady-cyrl.json b/extensions/Cite/i18n/ady-cyrl.json new file mode 100644 index 00000000..23dba394 --- /dev/null +++ b/extensions/Cite/i18n/ady-cyrl.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "SmartNart12" + ] + }, + "cite_error": "Ð¦Ð¸Ñ‚Ñ ÐºÑŠÑƒÐ°Ð½Ñ‡: $1" +} diff --git a/extensions/Cite/i18n/af.json b/extensions/Cite/i18n/af.json index 9d65e408..37ba82d5 100644 --- a/extensions/Cite/i18n/af.json +++ b/extensions/Cite/i18n/af.json @@ -1,11 +1,12 @@ { "@metadata": { "authors": [ - "Naudefj" + "Naudefj", + "Arnobarnard" ] }, "cite-desc": "Maak en etikette beskikbaar vir sitasie.", - "cite_error": "Citefout: $1", + "cite_error": "Verwysingfout: $1", "cite_error_ref_numeric_key": "Ongeldige etiket <ref>;\ndie naam kan nie 'n eenvoudige heelgetal wees nie.\nGebruik 'n beskrywende titel", "cite_error_ref_no_key": "Ongeldige etiket <ref>;\n\"refs\" sonder inhoud moet 'n naam hê", "cite_error_ref_too_many_keys": "Ongeldig <ref>-etiket;\nongeldige name, byvoorbeeld te veel" diff --git a/extensions/Cite/i18n/av.json b/extensions/Cite/i18n/av.json new file mode 100644 index 00000000..9a27177d --- /dev/null +++ b/extensions/Cite/i18n/av.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Gazimagomedov" + ] + }, + "cite_error": "ЦитированиÑлъул гъалатӀ: $1" +} diff --git a/extensions/Cite/i18n/awa.json b/extensions/Cite/i18n/awa.json new file mode 100644 index 00000000..0b6c8ff2 --- /dev/null +++ b/extensions/Cite/i18n/awa.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "1AnuraagPandey" + ] + }, + "cite_error": "सनà¥à¤¦à¤°à¥à¤­ तà¥à¤°à¥à¤Ÿà¤¿: $1", + "cite_references_link_accessibility_label": "ऊपर जावा जाà¤", + "cite_references_link_many_accessibility_label": "इस तक ऊपर जायें:" +} diff --git a/extensions/Cite/i18n/az.json b/extensions/Cite/i18n/az.json index e5c1b149..5fb1b144 100644 --- a/extensions/Cite/i18n/az.json +++ b/extensions/Cite/i18n/az.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ - "Vago" + "Vago", + "Wertuose" ] }, + "cite_error": "Sitat sÉ™hvi: $1", "cite_reference_link_key_with_num": "$1_$2", "cite_reference_link_prefix": "sitat_istinad-", "cite_references_link_prefix": "sitat_qeyd-", diff --git a/extensions/Cite/i18n/be.json b/extensions/Cite/i18n/be.json new file mode 100644 index 00000000..7b8f6f22 --- /dev/null +++ b/extensions/Cite/i18n/be.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Чаховіч УладзіÑлаў" + ] + }, + "cite_error": "Памылка Ñ†Ñ‹Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ $1" +} diff --git a/extensions/Cite/i18n/bho.json b/extensions/Cite/i18n/bho.json new file mode 100644 index 00000000..3556b998 --- /dev/null +++ b/extensions/Cite/i18n/bho.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "SatyamMishra" + ] + }, + "cite_error": "उदà¥à¤§à¤°à¤£ खराबी:$1" +} diff --git a/extensions/Cite/i18n/bs.json b/extensions/Cite/i18n/bs.json index d4844f27..c1c7d940 100644 --- a/extensions/Cite/i18n/bs.json +++ b/extensions/Cite/i18n/bs.json @@ -3,7 +3,9 @@ "authors": [ "CERminator", "Reedy", - "KWiki" + "KWiki", + "Semso98", + "Srdjan m" ] }, "cite-desc": "Dodaje oznake i za citiranje", @@ -18,10 +20,12 @@ "cite_error_no_link_label_group": "Nedovoljan broj proizvoljnih naslova linkova za grupu \"$1\".\nDefiniÅ¡ite viÅ¡e putem poruke [[MediaWiki:$2]].", "cite_error_references_no_text": "Nevaljana oznaka <ref>;\nnije naveden tekst za reference s imenom $1", "cite_error_included_ref": "Nedostaje oznaka za zatvaranje </ref> nakon <ref>", - "cite_error_group_refs_without_references": "<ref> oznake postoje za grupu pod imenom \"$1\", ali nije pronaÄ‘ena pripadajuća oznaka <references group=\"$1\"/>", + "cite_error_group_refs_without_references": "<ref> oznake postoje za grupu pod imenom \"$1\", ali nije pronaÄ‘ena pripadajuća <references group=\"$1\"/> oznaka, ili zatvarajući </ref> nedostaje", "cite_error_references_group_mismatch": "<ref> oznaka u <references> ima atribut grupe konflikta \"$1\".", "cite_error_references_missing_group": "<ref> oznaka definisana u <references> ima atribut grupe \"$1\" koji se ne pojavljuje u ranijem tekstu.", "cite_error_references_missing_key": "<ref> oznaka s imenom \"$1\" definirana u <references> nije koriÅ¡tena u ranijem tekstu.", "cite_error_references_no_key": "<ref> oznaka definisana u <references> nema imenski atribut.", - "cite_error_empty_references_define": "<ref> oznaka definirana u <references> s imenom \"$1\" nema nikakvog sadržaja." + "cite_error_empty_references_define": "<ref> oznaka definirana u <references> s imenom \"$1\" nema nikakvog sadržaja.", + "cite_references_link_accessibility_label": "Vrati se na vrh", + "cite_references_link_many_accessibility_label": "Vrati se na:" } diff --git a/extensions/Cite/i18n/ce.json b/extensions/Cite/i18n/ce.json index b345a128..8e0983b0 100644 --- a/extensions/Cite/i18n/ce.json +++ b/extensions/Cite/i18n/ce.json @@ -4,11 +4,11 @@ "Умар" ] }, - "cite-desc": " а тегаш тӀетовжорашан тӀетуху", + "cite-desc": " а тегаш тӀетовжарийн тӀетуху", "cite_error": "ГӀалат дешнаш далорна $1", "cite_error_ref_numeric_key": "ÐийÑа йоцу тег <ref>;\nцӀе дуьззина терахь хилийла дац. Лелае йозанан цӀе", "cite_error_ref_no_key": "ÐийÑа йоцу тег <ref>;\nчулацам боцу Ñлементан цӀе хийла еза.", - "cite_error_ref_too_many_keys": "ÐийÑа йоцу тег <ref>;\nгӀалатан цӀераш, тӀех дукха хила мега", + "cite_error_ref_too_many_keys": "ÐийÑа йоцу тег <ref>;\nгӀалатан цӀерш, тӀех дукха хила мега", "cite_error_ref_no_input": "ÐийÑа йоцу тег <ref>;\nцӀе йоцу Ñлементан чулацам хийла беза.", "cite_error_references_invalid_parameters": "ÐийÑа йоцу тег <references>;\nпараметраш шорйина Ñц.\nЛелае <references />", "cite_error_references_invalid_parameters_group": "ГӀалате тег <references>;\nлело мега параметр '''group'''.\nЛелае <references /> Ñ <references group=\"…\" />", diff --git a/extensions/Cite/i18n/dty.json b/extensions/Cite/i18n/dty.json new file mode 100644 index 00000000..7f2cbc04 --- /dev/null +++ b/extensions/Cite/i18n/dty.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "रमेश सिंह बोहरा" + ] + }, + "cite_error": "उदà¥à¤¦à¤°à¤£ तà¥à¤°à¥à¤Ÿà¥€: $1" +} diff --git a/extensions/Cite/i18n/es.json b/extensions/Cite/i18n/es.json index 214a02e3..2ef4b694 100644 --- a/extensions/Cite/i18n/es.json +++ b/extensions/Cite/i18n/es.json @@ -16,10 +16,11 @@ "Muro de Aguas", "Remember the dot", "Sanbec", - "Translationista" + "Translationista", + "Macofe" ] }, - "cite-desc": "Añade las etiquietas y para utilizar notas al pie.", + "cite-desc": "Añade las etiquetas y para citas.", "cite_error": "Error en la cita: $1", "cite_error_ref_numeric_key": "Etiqueta <ref> no válida;\nel nombre no puede ser un número entero. Use un título descriptivo", "cite_error_ref_no_key": "Etiqueta <ref> no válida;\nlas referencias sin contenido deben tener un nombre", diff --git a/extensions/Cite/i18n/fo.json b/extensions/Cite/i18n/fo.json index bfd3f923..a166e500 100644 --- a/extensions/Cite/i18n/fo.json +++ b/extensions/Cite/i18n/fo.json @@ -5,5 +5,6 @@ ] }, "cite-desc": "Leggur afturat og lyklaorð, fyri ávísingar", + "cite_error": "Keldufeilur: $1", "cite_error_group_refs_without_references": "<ref> lyklaorð (tags) eru til fyri ein bólk sum eitur \"$1\", men onki tilsvarandi <references group=\"$1\"/> lyklaorð varð funnið, ella manglar ein lukkandi </ref>" } diff --git a/extensions/Cite/i18n/gom-latn.json b/extensions/Cite/i18n/gom-latn.json new file mode 100644 index 00000000..f0200bfb --- /dev/null +++ b/extensions/Cite/i18n/gom-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "The Discoverer" + ] + }, + "cite_error": "Sondhorbant chuk: $1" +} diff --git a/extensions/Cite/i18n/gu.json b/extensions/Cite/i18n/gu.json index 39c38754..0d08471c 100644 --- a/extensions/Cite/i18n/gu.json +++ b/extensions/Cite/i18n/gu.json @@ -19,11 +19,13 @@ "cite_error_no_link_label_group": "\"$1\" સમૂહ માટે કસà«àªŸàª® બેકલિંક લેબલ ખલાસ થઈ ગયાં.\n[[MediaWiki:$2]] સંદેશામાં વહારે લેબલ બનાવો..", "cite_error_references_no_text": "અમાનà«àª¯ <ref> ટેગ;\n$1નામના સંદરà«àª­ માટે કોઈ પણ લેખન અપાયà«àª‚ નથી", "cite_error_included_ref": "<ref> ટેગને બંધ કરતà«àª‚ </ref> ખૂટે છે", - "cite_error_group_refs_without_references": " \"$1\" નામના સમૂહમાં <ref> ટેગ વિહરમાન છે, પણ તેને અનà«àª°à«‚પ <references group=\"$1\"/> ટેગ ન મળà«àª¯à«‹.", + "cite_error_group_refs_without_references": " \"$1\" નામના સમૂહમાં <ref> ટેગ વિહરમાન છે, પણ તેને અનà«àª°à«‚પ <references group=\"$1\"/> ટેગ ન મળà«àª¯à«‹. અથવા સમાપà«àª¤àª¿ </ref> ખà«àªŸà«‡ છે.", "cite_error_references_group_mismatch": "<ref> ટેગને <references> માં આ વિરોધાભાસી લકà«àª·àª£ છે : \"$1\".", "cite_error_references_missing_group": "<references>માં વà«àª¯àª¾àª–à«àª¯àª¾àª¯à«€àª¤ <ref> ટેગનો સમૂહ ગà«àª£ \"$1\" છે જે પહેલાંની પહેલાંના લેખનમાં નથી.", "cite_error_references_missing_key": "<references> માં વà«àª¯àª¾àª–à«àª¯àª¾àª¯àª¿àª¤ $1\" નામ સાથેનà«àª‚ <ref> ટેગ આગળના લેખનમાં વપરાયો નથી.", "cite_error_references_no_key": "<ref> ટેગની વà«àª¯àª¾àª–à«àª¯àª¾ <references> ને કોઈ નામકરણ નથી.", "cite_error_empty_references_define": "<ref> ટેગની વà«àª¯àª¾àª–à«àª¯àª¾ <references> માં \"$1\" નામે છે તેને કોઈ content નથી.", - "cite_references_link_many_format_backlink_labels": "" + "cite_references_link_many_format_backlink_labels": "", + "cite_references_link_accessibility_label": "ઉપર જાઓ", + "cite_references_link_many_accessibility_label": "અહીં સà«àª§à«€ ઉપર જાઓ:" } diff --git a/extensions/Cite/i18n/hr.json b/extensions/Cite/i18n/hr.json index ea9d2300..4131849c 100644 --- a/extensions/Cite/i18n/hr.json +++ b/extensions/Cite/i18n/hr.json @@ -5,16 +5,17 @@ "Dnik", "Roberta F.", "SpeedyGonsales", - "MaGa" + "MaGa", + "Bugoslav" ] }, "cite-desc": "Dodaje i oznake, za citiranje", "cite_error": "PogrjeÅ¡ka u citiranju: $1", - "cite_error_ref_numeric_key": "nevažeća <ref> oznaka; naziv ne smije biti jednostavni broj, koristite opisni naziv", - "cite_error_ref_no_key": "nevažeća <ref> oznaka; izvori bez sadržaja moraju imati naziv", - "cite_error_ref_too_many_keys": "nevažeća <ref> oznaka; loÅ¡ naziv, npr. previÅ¡e naziva", - "cite_error_ref_no_input": "nevažeća <ref> oznaka; izvori bez imena moraju imati sadržaj", - "cite_error_references_invalid_parameters": "nevažeća <references> oznaka; parametri nisu dozvoljeni, koristite <references />", + "cite_error_ref_numeric_key": "nevaljana <ref> oznaka; naziv ne smije biti jednostavni broj, koristite opisni naziv", + "cite_error_ref_no_key": "nevaljana <ref> oznaka; izvori bez sadržaja moraju imati naziv", + "cite_error_ref_too_many_keys": "nevaljana <ref> oznaka; loÅ¡ naziv, npr. previÅ¡e naziva", + "cite_error_ref_no_input": "nevaljana <ref> oznaka; izvori bez imena moraju imati sadržaj", + "cite_error_references_invalid_parameters": "nevaljana <references> oznaka; parametri nisu dozvoljeni, koristite <references />", "cite_error_references_invalid_parameters_group": "neispravna <references> oznaka,\ndopuÅ¡tena je samo opcija \"group\".\nKoristite <references />, ili <references group=\"...\" />", "cite_error_references_no_backlink_label": "potroÅ¡ene sve posebne oznake za poveznice unatrag, definirajte viÅ¡e u poruci [[MediaWiki:Cite references link many format backlink labels]]", "cite_error_no_link_label_group": "nedovoljan broj proizvoljnih naslova poveznica za grupu \"$1\".\nDefinirajte viÅ¡e putem poruke [[MediaWiki:$2]].", diff --git a/extensions/Cite/i18n/jut.json b/extensions/Cite/i18n/jut.json index 896c793d..252e4a18 100644 --- a/extensions/Cite/i18n/jut.json +++ b/extensions/Cite/i18n/jut.json @@ -1,15 +1,16 @@ { "@metadata": { "authors": [ - "HuslÃ¥ke" + "HuslÃ¥ke", + "Jyllanj" ] }, - "cite_error": "FodnÃ¥tfejl: $1", - "cite_error_ref_numeric_key": "Ugyldigt <ref>-tag; \"name\" kan ikke være et simpelt heltal, brug en beskrivende titel", - "cite_error_ref_no_key": "Ugyldigt <ref>-tag: Et <ref>-tag uden indhold skal have et navn", - "cite_error_ref_too_many_keys": "Ugyldigt <ref>-tag: Ugyldege navne, fx før mange", - "cite_error_ref_no_input": "Ugyldigt <ref>-tag: Et <ref>-tag uden navn skal have indhold", - "cite_error_references_invalid_parameters": "Ugyldig <references>-tag: Parametre er ikke tilladt, brug i stedet <references />", + "cite_error": "Fuednotfejl: $1", + "cite_error_ref_numeric_key": "Udjylji <ref>-tag; \"name\" kan ett wær e simpel hieltal, brug en beskriiwenje titel", + "cite_error_ref_no_key": "Udjylji <ref>-tag: E <ref>-tag uen inholj skal ha e naun", + "cite_error_ref_too_many_keys": "Udjylji <ref>-tag: Udjylji naun, fx for mÃ¥ng", + "cite_error_ref_no_input": "Udjylji <ref>-tag: E <ref>-tag uen naun skal ha inholj", + "cite_error_references_invalid_parameters": "Udjyldi <references>-tag: Parameter ä ett tillæt, brug istæ <references />", "cite_error_references_no_backlink_label": "For mange <ref>-tags har det samme \"name\", tillad flere i beskeden [[MediaWiki:Cite_references_link_many_format_backlink_labels]]", - "cite_error_references_no_text": "Ugyldigt <ref>-tag: Der er ikke specificeret nogen fodnotetekst til navnet $1" + "cite_error_references_no_text": "Udjylji <ref>-tag: Där ä ett specificiirtj noe fuednottekst te naune $1" } diff --git a/extensions/Cite/i18n/khw.json b/extensions/Cite/i18n/khw.json new file mode 100644 index 00000000..6731f65d --- /dev/null +++ b/extensions/Cite/i18n/khw.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Rachitrali" + ] + }, + "cite_error": "Ø­ÙˆØ§Ù„Û Ø®Ø·Ø§: $1" +} diff --git a/extensions/Cite/i18n/ksh.json b/extensions/Cite/i18n/ksh.json index 70806351..5a12a58e 100644 --- a/extensions/Cite/i18n/ksh.json +++ b/extensions/Cite/i18n/ksh.json @@ -7,22 +7,22 @@ }, "cite-desc": "Erlaub Quelle un Referenze met un aanzejevve.", "cite_error": "Fähler in cite met Referenze: $1", - "cite_error_ref_numeric_key": "Fähler en cite:\nEne <ref>-Name kann kei Zahl sin.\nNemm enne Tittel, dä jät säht.", - "cite_error_ref_no_key": "Fähler en cite:\nE <ref> oohne Enhalt moß ene Name han.\nNemm enne Tittel, dä jät säht.", + "cite_error_ref_numeric_key": "Fähler en cite:\nEne <ref>-Name kann kei Zahl sin.\nNemm en Övverschreff , di jät säht.", + "cite_error_ref_no_key": "Fähler en cite:\nE <ref> oohne Enhalt moß ene Nahme han.\nNemm en Övverschreff, di jät säht.", "cite_error_ref_too_many_keys": "Fähler en cite:\nZo fill <ref>-Name,\nudder kapodde ene Name.", "cite_error_ref_no_input": "Fähler en cite:\nE <ref> oohne Name moß ene Enhallt han.", "cite_error_references_invalid_parameters": "Fähler en cite:\nE <references> moß oohne Parrametere sin.\nNemm eifach <references /> un söns nix.", "cite_error_references_invalid_parameters_group": "Fähler en cite:\nE <references> darf nur dä Parrameeter „group“ han.\nNemm eifach <references /> udder <references group=\"...\" /> un söns nix.", "cite_error_references_no_backlink_label": "Fähler en cite:\nNit jenoch Name för retuur-Lengks.\nDonn mieh en dä Sigg [[MediaWiki:Cite references link many format backlink labels]] enndrare.", - "cite_error_no_link_label_group": "För de Jruppe „$1“ senn er kein Bezeichnunge för Links mieh doh.\nDonn op [[MediaWiki:$2]] noch e paa dobei.", + "cite_error_no_link_label_group": "För de Jroppe „$1“ senn_er kein Bezeichnonge för Lengks mih doh.\nDonn op [[MediaWiki:$2]] noch e paa dobei.", "cite_error_references_no_text": "Fähler en cite:\nEt wohr keine Tex aanjejovve för de\n<ref>s met dämm Name „$1“.", "cite_error_included_ref": "Hee för dat <ref> ham_mer kei zopaß </ref>", "cite_error_group_refs_without_references": "Et sinn_er <ref>-Befähle för de Jrop „$1“ en heh dä Sigg, ävver mer han keine <references group=\"$1\"/>-Befähl jefonge, udder dä Befähl </ref> zom zohmaache es nit doh.", "cite_error_references_group_mismatch": "Dä <ref> Befähl en <references> hät en widerschpröschlesche Jroppe-Eijeschaff „$1“.", "cite_error_references_missing_group": "Dä <ref> Befähl, aanjejoove em Befähl <references>, hät en Jroppe-Eijeschaff „$1“, di ävver em Täx doför nit vörjekumme es.", - "cite_error_references_missing_key": "Dä <ref> Befähl mem Naame „$1“, aanjejoove em Befähl <references>, es em Täx doför nit vörjekumme.", + "cite_error_references_missing_key": "Dä <ref> Befähl mem Nahme „$1“, aanjejovve em Befähl <references>, es em Täx doför nit vörjekumme.", "cite_error_references_no_key": "Dä <ref> Befähl, aanjejoove em Befähl <references>, hät kei Eijeschaff name= aanjejovve.", - "cite_error_empty_references_define": "Dä <ref> Befähl mem Naame „$1“, aanjejoove em Befähl <references> mem Name „$1“, hät keine Enhallt.", + "cite_error_empty_references_define": "Dä <ref> Befähl mem Nahme „$1“, aanjejoove em Befähl <references> mem Nahme „$1“, hät keine Enhallt.", "cite_reference_link_key_with_num": "$1_$2", "cite_reference_link_prefix": "fohss_noht_betreck_", "cite_references_link_prefix": "fohss_noht_nommer_", diff --git a/extensions/Cite/i18n/ku-latn.json b/extensions/Cite/i18n/ku-latn.json new file mode 100644 index 00000000..361e0d3c --- /dev/null +++ b/extensions/Cite/i18n/ku-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Bikarhêner" + ] + }, + "cite_error": "Çewtîya sîte: $1" +} diff --git a/extensions/Cite/i18n/kw.json b/extensions/Cite/i18n/kw.json index 554967e4..f259cf4b 100644 --- a/extensions/Cite/i18n/kw.json +++ b/extensions/Cite/i18n/kw.json @@ -2,8 +2,9 @@ "@metadata": { "authors": [ "Kernoweger", - "Nrowe" + "Nrowe", + "Kw-Moon" ] }, - "cite_error": "Gwall devynna: $1" + "cite_error": "Kammwrians devynna: $1" } diff --git a/extensions/Cite/i18n/lt.json b/extensions/Cite/i18n/lt.json index 8610680a..471c3d57 100644 --- a/extensions/Cite/i18n/lt.json +++ b/extensions/Cite/i18n/lt.json @@ -3,7 +3,8 @@ "authors": [ "Garas", "Homo", - "Matasg" + "Matasg", + "Albertas" ] }, "cite-desc": "Prideda ir žymes citavimui", @@ -13,6 +14,17 @@ "cite_error_ref_too_many_keys": "Neleistina <ref> gairÄ—; neleistini vardai, pvz., per daug", "cite_error_ref_no_input": "Neleistina <ref> gairÄ—; nuorodos be vardo turi turÄ—ti turinį", "cite_error_references_invalid_parameters": "Neleistina <references> gairÄ—; neleidžiami jokie parametrai, naudokite <references />", + "cite_error_references_invalid_parameters_group": "Netinkama <references> žymÄ—;\nleidžiama tik parametrų \"grupÄ—\".\nNaudokite <references /> arba <references group=\"...\" />", "cite_error_references_no_backlink_label": "BaigÄ—si antraÅ¡tÄ—s.\nNurodykite daugiau [[MediaWiki:Cite references link many format backlink labels]] sisteminiame tekste", - "cite_error_included_ref": "TrÅ«ksta uždaromojo </ref> žymei <ref>" + "cite_error_no_link_label_group": "Grupei \"$1\" pasibaigÄ— pritaikytos nuorodų žymÄ—s. Galite apibrėžti daugiau [[MediaWiki:$2]] žinutÄ—je.", + "cite_error_references_no_text": "Netinkama <ref> žymÄ—;\nnebuvo pateiktas tekstas nuorodoms su pavadinimu $1", + "cite_error_included_ref": "TrÅ«ksta uždaromojo </ref> žymei <ref>", + "cite_error_group_refs_without_references": "<ref> žymÄ—s egzistuoja grupei vardu \"$1\", bet atitinkama <references group=\"$1\"/> žymÄ— buvo nerasta arba trÅ«ksta žymÄ—s uždarymo </ref>", + "cite_error_references_group_mismatch": "<ref> žymÄ—, esanti <references>, turi nesutampantį grupÄ—s atributÄ… \"$1\".", + "cite_error_references_missing_group": "<ref> žymÄ—, apibrėžta <references>, neturi grupÄ—s atributo \"$1\", kuris nebuvo nurodytas ir ankstesniame tekste.", + "cite_error_references_missing_key": "<ref> žymÄ— vardu \"$1\", apibrėžta <references>, nÄ—ra naudojama ankstesniame tekste.", + "cite_error_references_no_key": "<ref> žymÄ—, apibrėžta <references>, neturi vardo atributo.", + "cite_error_empty_references_define": "<ref> žymÄ—, apibrėžta <references>, su vardu \"$1\", neturi turinio.", + "cite_references_link_accessibility_label": "Å okti aukÅ¡tyn", + "cite_references_link_many_accessibility_label": "Å okti į:" } diff --git a/extensions/Cite/i18n/luz.json b/extensions/Cite/i18n/luz.json new file mode 100644 index 00000000..13528b76 --- /dev/null +++ b/extensions/Cite/i18n/luz.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "علی ساکی لرستانی" + ] + }, + "cite_error": "استناد خطا:$1" +} diff --git a/extensions/Cite/i18n/mg.json b/extensions/Cite/i18n/mg.json index e07ae517..b280650d 100644 --- a/extensions/Cite/i18n/mg.json +++ b/extensions/Cite/i18n/mg.json @@ -4,5 +4,6 @@ "Jagwar" ] }, - "cite-desc": "Mamnpy ny balizy et ho an'ny tsiahy." + "cite-desc": "Mamnpy ny balizy et ho an'ny tsiahy.", + "cite_error": "Hadisoan-tsiahy: $1" } diff --git a/extensions/Cite/i18n/mzn.json b/extensions/Cite/i18n/mzn.json new file mode 100644 index 00000000..ea273831 --- /dev/null +++ b/extensions/Cite/i18n/mzn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "محک" + ] + }, + "cite_error": "خطای منبع: $1" +} diff --git a/extensions/Cite/i18n/olo.json b/extensions/Cite/i18n/olo.json new file mode 100644 index 00000000..0489bc07 --- /dev/null +++ b/extensions/Cite/i18n/olo.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "cite_error": "Citaciihaireh: $1" +} diff --git a/extensions/Cite/i18n/pa.json b/extensions/Cite/i18n/pa.json index fd37c8bc..b6027843 100644 --- a/extensions/Cite/i18n/pa.json +++ b/extensions/Cite/i18n/pa.json @@ -1,8 +1,9 @@ { "@metadata": { "authors": [ - "Babanwalia" + "Babanwalia", + "Satdeep gill" ] }, - "cite_error": "ਗ਼ਲਤੀ ਦਾ ਹਵਾਲਾ ਦਿਉ:" + "cite_error": "ਹਵਾਲੇ ਵਿੱਚ ਗਲਤੀ:$1" } diff --git a/extensions/Cite/i18n/sa.json b/extensions/Cite/i18n/sa.json index 5b113d98..9f2c02ea 100644 --- a/extensions/Cite/i18n/sa.json +++ b/extensions/Cite/i18n/sa.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Shubha" + "Shubha", + "NehalDaveND" ] }, "cite-desc": "\nAdds तथा उदà¥à¤§à¤°à¤£à¤¾à¤¨à¤¾à¤‚ कृते समà¥à¤ªà¤°à¥à¤•à¤¤à¤¨à¥à¤¤à¤µà¤ƒ", @@ -21,5 +22,5 @@ "cite_error_references_missing_group": "<ref> अङà¥à¤•à¤¨à¤ªà¤°à¤¿à¤­à¤¾à¤·à¤¿à¤¤à¥‡ <references> à¤à¤¤à¤¸à¥à¤®à¤¿à¤¨à¥ गणसà¥à¤¯ विशेषः \"$1\" यशà¥à¤š पूरà¥à¤µà¤²à¥‡à¤–े न दृषà¥à¤Ÿà¤®à¥ ।", "cite_error_references_missing_key": "<ref> अङà¥à¤•à¤¨à¤‚ \"$1\" नामà¥à¤¨à¤¾ सह परिभाषितमॠ<references> पूरà¥à¤µà¤²à¥‡à¤–े उपयोगाय न जातमॠ।", "cite_error_references_no_key": "<ref>अङà¥à¤•à¤¨à¥‡ परिभाषितं <references> किमपि नामलकà¥à¤·à¤£à¤‚ न विदà¥à¤¯à¤¤à¥‡ ।", - "cite_error_empty_references_define": "<ref> अङà¥à¤•à¤¨à¥‡ परिभाषितं <references> \"$1\" नामिका कापि सामगà¥à¤°à¥€ न विदà¥à¤¯à¤¤à¥‡ ।" + "cite_error_empty_references_define": "<ref> अङà¥à¤•à¤¨à¥‡ परिभाषितं <references> \"$1\" नामकः कोऽपि अनà¥à¤¤à¤°à¥à¤µà¤¿à¤·à¤¯à¤ƒ न विदà¥à¤¯à¤¤à¥‡ ।" } diff --git a/extensions/Cite/i18n/scn.json b/extensions/Cite/i18n/scn.json index 919e7662..7542e25e 100644 --- a/extensions/Cite/i18n/scn.json +++ b/extensions/Cite/i18n/scn.json @@ -3,30 +3,35 @@ "authors": [ "Markos90", "Melos", - "Santu" + "Santu", + "Pippinu", + "Sarvaturi" ] }, - "cite-desc": "Junci li tag e pi gistiri li citazzioni", - "cite_error": "Sbàgghiu nnâ funzioni Cite $1", - "cite_error_ref_numeric_key": "Sbàgghiu ni l'usu dû marcaturi <ref>: lu nomu pò èssiri nu nùmmiru sanu. Usari nu tìtulu discrittivu", - "cite_error_ref_no_key": "Sbàgghiu ni l'usu dû marcaturi <ref>: li ref vacanti non ponnu èssiri senza nomu.", - "cite_error_ref_too_many_keys": "Sbàgghiu ni l'usu dû marcaturi <ref>: nomi non vàlidi (pi es. nùmmiru troppu àutu)", - "cite_error_ref_no_input": "Sbàgghiu ni l'usu dû marcaturi <ref>: li ref senza nomu non ponnu èssiri vacanti", - "cite_error_references_invalid_parameters": "Sbàgghiu ni l'usu dû marcaturi <references>: paràmitri non ammittuti, usari li marcaturi <references />", - "cite_error_references_invalid_parameters_group": "Sbàgghiu ni l'usu dû marcaturi <references>; \nsulu lu paràmitru \"group\" è pirmittutu.\nUsari <references /> oppuru <references group=\"...\" />", - "cite_error_references_no_backlink_label": "Etichetti di rimannata pirsunalizzati finuti, aumintari lu nùmmiru ntô missàggiu [[MediaWiki:Cite references link many format backlink labels]]", - "cite_error_references_no_text": "Marcaturi <ref> non vàlidu; non vinni nnicatu nuddu testu pô marcaturi $1", - "cite_error_included_ref": "</ref> di chiusura mancanti pô marcaturi <ref>", - "cite_error_group_refs_without_references": "Sù prisenti dê marcatura <ref> pi nu gruppu chiamatu \"$1\" ma nun fu truvatu nissunu marcaturi <references group=\"$1\"/> currispunnenti", - "cite_error_references_group_mismatch": "Lu tag <ref> n <references> havi attribuiutu lu gruppu \"$1\" n conflittu.", - "cite_error_references_missing_group": "Lu tag <ref> difinutu n <references> havi n'attributu gruppu \"$1\" ca nun cumpari ni lu testu pricidenti.", - "cite_error_references_missing_key": "Lu tag <ref> cu nomu \"$1\" difinutu n <references> nun è usatu nô testu pricidenti.", - "cite_error_references_no_key": "Lu tag <ref> difinutu n <references> nun havi n'attributu nomu.", - "cite_error_empty_references_define": "Lu tag <ref> difinutu n <references> cu lu nomu \"$1\" nun havi alcun cuntinutu.", + "cite-desc": "Agghiunci l'etichetti e , pi citazzioni", + "cite_error": "Erruri ntâ citazzioni: $1", + "cite_error_ref_numeric_key": "Etichetta <ref> nun bona;\nlu nomu nun pò èssiri nu nùmmiru sanu. Adupirari nu tìtulu discrittivu", + "cite_error_ref_no_key": "Etichetta <ref> nun bona: li ref vacanti hannu a aviri un nomu", + "cite_error_ref_too_many_keys": "Etichetta <ref> nun bona;\nnoma nun vàlidi, p'es. nn'havi troppu assai", + "cite_error_ref_no_input": "Etichetta <ref> nun bona;\nli ref senza nomu hannu a aviri un cuntinutu", + "cite_error_references_invalid_parameters": "Etichetta <references> nun bona;\nnun vèninu accittati paràmitri.\nAdupirari <references />", + "cite_error_references_invalid_parameters_group": "Etichetta <references> nun bona;\nveni accittatu sulu lu paràmitru \"group\".\nAdupirari <references />, o puru <references group=\"...\" />", + "cite_error_references_no_backlink_label": "Fineru l'etichetti di rimannu p'arreri pirsunalizzati.\nDifinìrinni chiossai ntô missaggiu [[MediaWiki:Cite references link many format backlink labels]].", + "cite_error_no_link_label_group": "Fineru l'etichetti pirsunalizzati pî liami dû gruppu «$1».\nDifinirinni chiossai ntô missaggiu [[MediaWiki:$2]].", + "cite_error_references_no_text": "Etichetta <ref> nun bona;\nnun vinni furnutu nuddu testu pî ref cu nomu $1", + "cite_error_included_ref": "Ammanca l’etichetta </ref> pi chiùdiri l'etichetta <ref>", + "cite_error_group_refs_without_references": "Ci sunnu etichetti <ref> pi nu gruppu chiamatu «$1», pirò nun c'è nudda etichetta <references group=\"$1\"/> currispunnenti, o puru ammanca n'etichetta </ref> di chiusura", + "cite_error_references_group_mismatch": "N'etichetta <ref> nta <references> havi l'attribbutu gruppu n cunfrittu, \"$1\".", + "cite_error_references_missing_group": "N'etichetta <ref> difinuta nta <references> havi comu attribbutu group \"$1\" ca nun cumpari nta lu testu pricidenti.", + "cite_error_references_missing_key": "N'etichetta <ref> difinuta nta <references> havi comu attribbutu name \"$1\" ca nun è adupiratu ntô testu pricidenti.", + "cite_error_references_no_key": "N'etichetta <ref> difinuta nta <references> nun havi n'attribbutu nomu.", + "cite_error_empty_references_define": "L'etichetta <ref> difinuta nta <references> cû nomu \"$1\" nun havi nuddu cuntinutu.", "cite_reference_link_prefix": "muntuari ref", "cite_references_link_prefix": "muntuari annutazzioni", "cite_references_link_one": "
  • [[#$2|'''^''']] $3
  • ", "cite_references_link_many": "
  • '''^''' $2 $3
  • ", "cite_references_link_many_format": "''[[#$1|$3]]''", - "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz" + "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz", + "cite_references_link_accessibility_label": "Attorna pi supra", + "cite_references_link_many_accessibility_label": "Attorna pi supra unni:" } diff --git a/extensions/Cite/i18n/sco.json b/extensions/Cite/i18n/sco.json new file mode 100644 index 00000000..05071d4f --- /dev/null +++ b/extensions/Cite/i18n/sco.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "AmaryllisGardener" + ] + }, + "cite_error": "Cite error: $1" +} diff --git a/extensions/Cite/i18n/sgs.json b/extensions/Cite/i18n/sgs.json new file mode 100644 index 00000000..ba1299af --- /dev/null +++ b/extensions/Cite/i18n/sgs.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Hugo.arg" + ] + }, + "cite_error": "CÄ—tavÄ—ma soklÄ«dÄ—msË $1" +} diff --git a/extensions/Cite/i18n/si.json b/extensions/Cite/i18n/si.json index 12a9644d..953c8fea 100644 --- a/extensions/Cite/i18n/si.json +++ b/extensions/Cite/i18n/si.json @@ -3,11 +3,12 @@ "authors": [ "Budhajeewa", "Thameera123", - "නන්දිමිතුරු" + "නන්දිමිතුරු", + "Singhalawap" ] }, "cite-desc": "උපහරණයන් සඳහà·, සහ ටà·à¶œà¶ºà¶±à·Š, එකතු කරයි", - "cite_error": "උපන්â€à¶ºà·à·ƒ දà·à·‚ය: $1", + "cite_error": "උපුටà·à¶¯à·à¶šà·Šà·€à·“ම් දà·à·‚ය: $1", "cite_error_ref_numeric_key": "අනීතික <ref> ටà·à¶œà¶º;\nනම සරල පූර්ණà·à¶‚කයක් විය නොහà·à¶š. විස්තරà·à·“ලි à·à·’ර්ෂයක් භà·à·€à·’ත෠කරන්න", "cite_error_ref_no_key": "අනීතික <ref> ටà·à¶œà¶º;\nපෙළ විරහිත ආà·à·Šâ€à¶»à·šà¶º සඳහ෠නමක් තිබිය යුතුය", "cite_error_ref_too_many_keys": "අනීතික <ref> ටà·à¶œà¶º;\nඅනීතික නà·à¶¸à¶ºà¶±à·Š, නිද. පමණට à·€à·à¶©à·’", diff --git a/extensions/Cite/i18n/sr-ec.json b/extensions/Cite/i18n/sr-ec.json index 1e76c907..a45bde1e 100644 --- a/extensions/Cite/i18n/sr-ec.json +++ b/extensions/Cite/i18n/sr-ec.json @@ -4,7 +4,8 @@ "Milicevic01", "Millosh", "Rancher", - "Михајло Ðнђелковић" + "Михајло Ðнђелковић", + "Srdjan m" ] }, "cite-desc": "Додаје и ознаке за цитирање.", @@ -18,7 +19,7 @@ "cite_error_references_no_backlink_label": "ÐеÑтале Ñу поÑебне ознаке за задње везе. Одреди их више у поруци [[MediaWiki:Cite references link many format backlink labels]].", "cite_error_references_no_text": "Лоша ознака <ref>; нема текÑта за ref-ове под именом $1.", "cite_error_included_ref": "Затвара </ref> који недоÑтаје <ref> тагу", - "cite_error_group_refs_without_references": "ПоÑтоје ознаке <ref> за групу Ñ Ð¸Ð¼ÐµÐ½Ð¾Ð¼ „$1“, али нема одговарајуће ознаке <references group=\"$1\"/>", + "cite_error_group_refs_without_references": "ПоÑтоје ознаке <ref> за групу Ñ Ð¸Ð¼ÐµÐ½Ð¾Ð¼ „$1“, али нема одговарајуће ознаке <references group=\"$1\"/>, или затварајући </ref> недоÑтаје", "cite_reference_link_key_with_num": "$1_$2", "cite_reference_link_prefix": "cite_ref-", "cite_references_link_prefix": "cite_note-", diff --git a/extensions/Cite/i18n/szl.json b/extensions/Cite/i18n/szl.json new file mode 100644 index 00000000..15386404 --- /dev/null +++ b/extensions/Cite/i18n/szl.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Krol111" + ] + }, + "cite_error": "Feler rozszerzyÅ„o ''cite'': $1" +} diff --git a/extensions/Cite/i18n/vi.json b/extensions/Cite/i18n/vi.json index 8c5d6534..fe82e135 100644 --- a/extensions/Cite/i18n/vi.json +++ b/extensions/Cite/i18n/vi.json @@ -24,6 +24,6 @@ "cite_error_references_no_key": " Thẻ <ref> được định nghÄ©a trong <references> không có thuá»™c tính name.", "cite_error_empty_references_define": "Thẻ <ref> được định nghÄ©a trong <references> có tên “$1†không có ná»™i dung.", "cite_references_link_many_format_backlink_labels": "a ă â b c d Ä‘ e ê g h i k l m n o ô Æ¡ p q r s t u Æ° v x y\naa aă aâ ab ac ad aÄ‘ ae aê ag ah ai ak al am an ao aô aÆ¡ ap aq ar as at au aÆ° av ax ay\năa ăă ăâ ăb ăc ăd ăđ ăe ăê ăg ăh ăi ăk ăl ăm ăn ăo ăô ăơ ăp ăq ăr ăs ăt ău ăư ăv ăx ăy\nâa âă ââ âb âc âd âđ âe âê âg âh âi âk âl âm ân âo âô âơ âp âq âr âs ât âu âư âv âx ây\nba bă bâ bb bc bd bÄ‘ be bê bg bh bi bk bl bm bn bo bô bÆ¡ bp bq br bs bt bu bÆ° bv bx by\nca că câ cb cc cd cÄ‘ ce cê cg ch ci ck cl cm cn co cô cÆ¡ cp cq cr cs ct cu cÆ° cv cx cy\nda dă dâ db dc dd dÄ‘ de dê dg dh di dk dl dm dn do dô dÆ¡ dp dq dr ds dt du dÆ° dv dx dy\nÄ‘a đă đâ Ä‘b Ä‘c Ä‘d Ä‘Ä‘ Ä‘e đê Ä‘g Ä‘h Ä‘i Ä‘k Ä‘l Ä‘m Ä‘n Ä‘o đô Ä‘Æ¡ Ä‘p Ä‘q Ä‘r Ä‘s Ä‘t Ä‘u Ä‘Æ° Ä‘v Ä‘x Ä‘y\nea eă eâ eb ec ed eÄ‘ ee eê eg eh ei ek el em en eo eô eÆ¡ ep eq er es et eu eÆ° ev ex ey\nêa êă êâ êb êc êd êđ êe êê êg êh êi êk êl êm ên êo êô êơ êp êq êr ês êt êu êư êv êx êy\nga gă gâ gb gc gd gÄ‘ ge gê gg gh gi gk gl gm gn go gô gÆ¡ gp gq gr gs gt gu gÆ° gv gx gy\nha hă hâ hb hc hd hÄ‘ he hê hg hh hi hk hl hm hn ho hô hÆ¡ hp hq hr hs ht hu hÆ° hv hx hy\nia iă iâ ib ic id iÄ‘ ie iê ig ih ii ik il im in io iô iÆ¡ ip iq ir is it iu iÆ° iv ix iy\nka kă kâ kb kc kd kÄ‘ ke kê kg kh ki kk kl km kn ko kô kÆ¡ kp kq kr ks kt ku kÆ° kv kx ky\nla lă lâ lb lc ld lÄ‘ le lê lg lh li lk ll lm ln lo lô lÆ¡ lp lq lr ls lt lu lÆ° lv lx ly\nma mă mâ mb mc md mÄ‘ me mê mg mh mi mk ml mm mn mo mô mÆ¡ mp mq mr ms mt mu mÆ° mv mx my\nna nă nâ nb nc nd nÄ‘ ne nê ng nh ni nk nl nm nn no nô nÆ¡ np nq nr ns nt nu nÆ° nv nx ny\noa oă oâ ob oc od oÄ‘ oe oê og oh oi ok ol om on oo oô oÆ¡ op oq or os ot ou oÆ° ov ox oy\nôa ôă ôâ ôb ôc ôd ôđ ôe ôê ôg ôh ôi ôk ôl ôm ôn ôo ôô ôơ ôp ôq ôr ôs ôt ôu ôư ôv ôx ôy\nÆ¡a ơă ơâ Æ¡b Æ¡c Æ¡d Æ¡Ä‘ Æ¡e ơê Æ¡g Æ¡h Æ¡i Æ¡k Æ¡l Æ¡m Æ¡n Æ¡o ơô Æ¡Æ¡ Æ¡p Æ¡q Æ¡r Æ¡s Æ¡t Æ¡u Æ¡Æ° Æ¡v Æ¡x Æ¡y\npa pă pâ pb pc pd pÄ‘ pe pê pg ph pi pk pl pm pn po pô pÆ¡ pp pq pr ps pt pu pÆ° pv px py\nqa qă qâ qb qc qd qÄ‘ qe qê qg qh qi qk ql qm qn qo qô qÆ¡ qp qq qr qs qt qu qÆ° qv qx qy\nra ră râ rb rc rd rÄ‘ re rê rg rh ri rk rl rm rn ro rô rÆ¡ rp rq rr rs rt ru rÆ° rv rx ry\nsa să sâ sb sc sd sÄ‘ se sê sg sh si sk sl sm sn so sô sÆ¡ sp sq sr ss st su sÆ° sv sx sy\nta tă tâ tb tc td tÄ‘ te tê tg th ti tk tl tm tn to tô tÆ¡ tp tq tr ts tt tu tÆ° tv tx ty\nua uă uâ ub uc ud uÄ‘ ue uê ug uh ui uk ul um un uo uô uÆ¡ up uq ur us ut uu uÆ° uv ux uy\nÆ°a ưă ưâ Æ°b Æ°c Æ°d Æ°Ä‘ Æ°e ưê Æ°g Æ°h Æ°i Æ°k Æ°l Æ°m Æ°n Æ°o ưô Æ°Æ¡ Æ°p Æ°q Æ°r Æ°s Æ°t Æ°u Æ°Æ° Æ°v Æ°x Æ°y\nva vă vâ vb vc vd vÄ‘ ve vê vg vh vi vk vl vm vn vo vô vÆ¡ vp vq vr vs vt vu vÆ° vv vx vy\nxa xă xâ xb xc xd xÄ‘ xe xê xg xh xi xk xl xm xn xo xô xÆ¡ xp xq xr xs xt xu xÆ° xv xx xy\nya yă yâ yb yc yd yÄ‘ ye yê yg yh yi yk yl ym yn yo yô yÆ¡ yp yq yr ys yt yu yÆ° yv yx yy", - "cite_references_link_accessibility_label": "Nhảy lên", - "cite_references_link_many_accessibility_label": "Nhảy lên tá»›i:" + "cite_references_link_accessibility_label": "BÆ°á»›c lên", + "cite_references_link_many_accessibility_label": "BÆ°á»›c lên tá»›i:" } diff --git a/extensions/Cite/i18n/vro.json b/extensions/Cite/i18n/vro.json new file mode 100644 index 00000000..74bd10c4 --- /dev/null +++ b/extensions/Cite/i18n/vro.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Võrok" + ] + }, + "cite_error": "Näütämise viga: $1" +} diff --git a/extensions/Cite/i18n/wuu.json b/extensions/Cite/i18n/wuu.json new file mode 100644 index 00000000..19f41a0f --- /dev/null +++ b/extensions/Cite/i18n/wuu.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Poiuyt" + ] + }, + "cite_error": "引用出错:$1" +} diff --git a/extensions/Cite/i18n/xmf.json b/extensions/Cite/i18n/xmf.json new file mode 100644 index 00000000..3a8a410f --- /dev/null +++ b/extensions/Cite/i18n/xmf.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Silovan" + ] + }, + "cite_error": "ციტირáƒáƒ¤áƒáƒ¨ ჩილáƒáƒ—რ$1" +} diff --git a/extensions/Cite/i18n/yue.json b/extensions/Cite/i18n/yue.json index 96a305e5..6f809a84 100644 --- a/extensions/Cite/i18n/yue.json +++ b/extensions/Cite/i18n/yue.json @@ -1,5 +1,9 @@ { - "@metadata": [], + "@metadata": { + "authors": [ + "CRCHF" + ] + }, "cite-desc": "加 åŒ æ¨™ç±¤ç”¨éŸ¿å¼•ç”¨åº¦", "cite_error": "引用錯誤 $1", "cite_error_ref_numeric_key": "無效嘅呼å«; 需è¦ä¸€å€‹éžæ•´æ•¸å˜…匙", @@ -8,6 +12,6 @@ "cite_error_ref_no_input": "無效嘅呼å«; 未指定輸入", "cite_error_references_invalid_parameters": "無效嘅åƒæ•¸; 唔需è¦æœ‰å˜¢", "cite_error_references_invalid_parameters_group": "無效嘅<references>標籤;\nåªå®¹è¨± \"group\" åƒæ•¸ã€‚\n用<references />,或<references group=\"...\" />", - "cite_error_references_no_backlink_label": "用晒啲自定返回標籤, 響 [[MediaWiki:Cite_references_link_many_format_backlink_labels]] ä¿¡æ¯å†æ•´å¤šå•²", + "cite_error_references_no_backlink_label": "用晒啲自定返回標籤, 響 [[MediaWiki:Cite references link many format backlink labels]] ä¿¡æ¯å†æ•´å¤šå•²", "cite_error_references_no_text": "無效嘅<ref>標籤;\n無文字æ供於å為$1嘅åƒç…§" } diff --git a/extensions/Cite/modules/ext.cite.a11y.css b/extensions/Cite/modules/ext.cite.a11y.css new file mode 100644 index 00000000..4ea7a814 --- /dev/null +++ b/extensions/Cite/modules/ext.cite.a11y.css @@ -0,0 +1,16 @@ +/** + * Per http://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html + * and https://en.wikipedia.org/w/index.php?oldid=572888139#Scrolling_past_the_bottom_of_the_page... + */ +.cite-accessibility-label { + position: absolute !important; + /* Workaround a Webkit/Blink bug about positioning within columns as many wikis format references with several columns */ + top: -99999px; + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); + padding: 0 !important; + border: 0 !important; + height: 1px !important; + width: 1px !important; + overflow: hidden; +} diff --git a/extensions/Cite/modules/ext.cite.a11y.js b/extensions/Cite/modules/ext.cite.a11y.js new file mode 100644 index 00000000..fbec1f32 --- /dev/null +++ b/extensions/Cite/modules/ext.cite.a11y.js @@ -0,0 +1,38 @@ +/** + * Main JavaScript for the Cite extension. The main purpose of this file + * is to add accessibility attributes to the citation links as that can + * hardly be done server side (bug 38141). + * + * @author Marius Hoch + */ +( function ( mw, $ ) { + 'use strict'; + + mw.hook( 'wikipage.content' ).add( function ( $content ) { + var accessibilityLabelOne = mw.msg( 'cite_references_link_accessibility_label' ), + accessibilityLabelMany = mw.msg( 'cite_references_link_many_accessibility_label' ); + + $content.find( '.mw-cite-backlink' ).each( function () { + var $links = $( this ).find( 'a' ), + label; + + if ( $links.length > 1 ) { + // This citation is used multiple times. Let's only set the accessibility label on the first link, the + // following ones should then be self-explaining. This is needed to make sure this isn't getting + // too wordy. + label = accessibilityLabelMany; + } else { + label = accessibilityLabelOne; + } + + // We can't use aria-label over here as that's not supported consistently across all screen reader / browser + // combinations. We have to use visually hidden spans for the accessibility labels instead. + $links.eq( 0 ).prepend( + $( '' ) + .addClass( 'cite-accessibility-label' ) + // Also make sure we have at least one space between the accessibility label and the visual one + .text( label + ' ' ) + ); + } ); + } ); +} )( mediaWiki, jQuery ); diff --git a/extensions/Cite/modules/ext.cite.css b/extensions/Cite/modules/ext.cite.css deleted file mode 100644 index d24ce591..00000000 --- a/extensions/Cite/modules/ext.cite.css +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Per http://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html - * and https://en.wikipedia.org/w/index.php?oldid=572888139#Scrolling_past_the_bottom_of_the_page... - */ -.cite-accessibility-label { - position: absolute !important; - /* Workaround a Webkit/Blink bug about positioning within columns as many wikis format references with several columns */ - top: -99999px; - clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ - clip: rect(1px, 1px, 1px, 1px); - padding: 0 !important; - border: 0 !important; - height: 1px !important; - width: 1px !important; - overflow: hidden; -} - -.mw-cite-backlink, -.cite-accessibility-label { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; -} - -/* Highlight clicked reference in blue to help navigation */ -ol.references li:target, -sup.reference:target { - background-color: #def; /* fallback */ - background-color: rgba(0, 127, 255, 0.133); -} - -@media print { - .mw-cite-backlink { - display: none; - } -} diff --git a/extensions/Cite/modules/ext.cite.js b/extensions/Cite/modules/ext.cite.js deleted file mode 100644 index fbec1f32..00000000 --- a/extensions/Cite/modules/ext.cite.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Main JavaScript for the Cite extension. The main purpose of this file - * is to add accessibility attributes to the citation links as that can - * hardly be done server side (bug 38141). - * - * @author Marius Hoch - */ -( function ( mw, $ ) { - 'use strict'; - - mw.hook( 'wikipage.content' ).add( function ( $content ) { - var accessibilityLabelOne = mw.msg( 'cite_references_link_accessibility_label' ), - accessibilityLabelMany = mw.msg( 'cite_references_link_many_accessibility_label' ); - - $content.find( '.mw-cite-backlink' ).each( function () { - var $links = $( this ).find( 'a' ), - label; - - if ( $links.length > 1 ) { - // This citation is used multiple times. Let's only set the accessibility label on the first link, the - // following ones should then be self-explaining. This is needed to make sure this isn't getting - // too wordy. - label = accessibilityLabelMany; - } else { - label = accessibilityLabelOne; - } - - // We can't use aria-label over here as that's not supported consistently across all screen reader / browser - // combinations. We have to use visually hidden spans for the accessibility labels instead. - $links.eq( 0 ).prepend( - $( '' ) - .addClass( 'cite-accessibility-label' ) - // Also make sure we have at least one space between the accessibility label and the visual one - .text( label + ' ' ) - ); - } ); - } ); -} )( mediaWiki, jQuery ); diff --git a/extensions/Cite/modules/ext.cite.print.css b/extensions/Cite/modules/ext.cite.print.css new file mode 100644 index 00000000..6467acca --- /dev/null +++ b/extensions/Cite/modules/ext.cite.print.css @@ -0,0 +1,3 @@ +.mw-cite-backlink { + display: none; +} diff --git a/extensions/Cite/modules/ext.cite.style.css b/extensions/Cite/modules/ext.cite.style.css new file mode 100644 index 00000000..6a5e7b8f --- /dev/null +++ b/extensions/Cite/modules/ext.cite.style.css @@ -0,0 +1,83 @@ +/* CSS for Parsoid Cite extension */ + +/* Style for s */ +span.mw-ref { + vertical-align: super; + line-height: 1; + font-size: smaller; + /* Make sure the brackets and the numbers aren't jumbled after LTR words in RTL wikis */ + unicode-bidi: embed; +} + +/* With a group set */ +span.mw-ref a[data-mw-group]::after { + content: "[" attr(data-mw-group) " " counter(mw-Ref, decimal) "]"} + +/* Groups with special appearance */ +span.mw-ref a[data-mw-group="decimal"]::after { + content: "[" counter(mw-Ref, decimal) "]"; +} +span.mw-ref a[data-mw-group="lower-alpha"]::after { + content: "[" counter(mw-Ref, lower-alpha) "]"; +} +span.mw-ref a[data-mw-group="upper-alpha"]::after { + content: "[" counter(mw-Ref, upper-alpha) "]"; +} +span.mw-ref a[data-mw-group="lower-greek"]::after { + content: "[" counter(mw-Ref, lower-greek) "]"; +} +span.mw-ref a[data-mw-group="lower-roman"]::after { + content: "[" counter(mw-Ref, lower-roman) "]"; +} +span.mw-ref a[data-mw-group="upper-roman"]::after { + content: "[" counter(mw-Ref, upper-roman) "]"; +} +span.mw-ref a[data-mw-group="error-test"]::after { + content: "[" counter(mw-Ref, symbols(cyclic "first" "second" "last!")) "]"; +} + +/* Without a group */ +span.mw-ref a::after { + content: "[" counter(mw-Ref, decimal) "]"; +} + +/* Hide the default rendering in browsers that support content + * generation by selecting for ::after pseudo-element.*/ +x-thereisnoelementwiththisname::after, span.mw-reflink-text { + display: none; +} + +/* Style for linkbacks from to s */ +ol.mw-references { + counter-reset: mw-ref-linkback; +} + +ol.mw-references li { + counter-increment: mw-ref-linkback; +} + +[rel="mw:referencedBy"] { + counter-reset: mw-ref-linkback -1; +} + +[rel="mw:referencedBy"]::before { + content: "↑ "; +} + +span[rel="mw:referencedBy"] a::before { + counter-increment: mw-ref-linkback; + content: counters(mw-ref-linkback, ".", decimal); + vertical-align: super; + line-height: 1; + font-size: smaller; +} + +span[rel="mw:referencedBy"] a::after { + content: " "; +} + +/* Hide the default rendering in browsers that support content + * generation by selecting for ::after pseudo-element.*/ +x-thereisnoelementwiththisname[rel="mw:referencedBy"]::before, span.mw-linkback-text { + display: none; +} diff --git a/extensions/Cite/modules/ext.cite.style.fa.css b/extensions/Cite/modules/ext.cite.style.fa.css new file mode 100644 index 00000000..e44e05a6 --- /dev/null +++ b/extensions/Cite/modules/ext.cite.style.fa.css @@ -0,0 +1,15 @@ +/* Farsi Cite CSS */ +/* s with a group */ +span.mw-ref a[data-mw-group]::after { + content: "[" attr(data-mw-group) " " counter(mw-Ref, persian) "]"; +} + +/* s without a group */ +span.mw-ref a::after { + content: "[" counter(mw-Ref, persian) "]"; +} + +/* Linkbacks from to s */ +span[rel="mw:referencedBy"] a::before { + content: counters(mw-ref-linkback, "Ù«", persian); +} diff --git a/extensions/Cite/modules/ext.cite.styles.css b/extensions/Cite/modules/ext.cite.styles.css new file mode 100644 index 00000000..b836fff2 --- /dev/null +++ b/extensions/Cite/modules/ext.cite.styles.css @@ -0,0 +1,21 @@ +.mw-cite-backlink, +.cite-accessibility-label { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* Isolation to fix references in case of RTL words at the end of a reference */ +sup.reference { + unicode-bidi: -moz-isolate; + unicode-bidi: -webkit-isolate; + unicode-bidi: isolate; +} + +/* Highlight clicked reference in blue to help navigation */ +ol.references li:target, +sup.reference:target { + background-color: #def; /* fallback */ + background-color: rgba(0, 127, 255, 0.133); +} diff --git a/extensions/Cite/modules/ext.rtlcite.css b/extensions/Cite/modules/ext.rtlcite.css deleted file mode 100644 index 9b88d531..00000000 --- a/extensions/Cite/modules/ext.rtlcite.css +++ /dev/null @@ -1,6 +0,0 @@ -/* Isolation to fix references in case of RTL words at the end of a reference */ -sup.reference { - unicode-bidi: -moz-isolate; - unicode-bidi: -webkit-isolate; - unicode-bidi: isolate; -} diff --git a/extensions/CiteThisPage/CiteThisPage.alias.php b/extensions/CiteThisPage/CiteThisPage.alias.php index 44656578..951fd1c2 100644 --- a/extensions/CiteThisPage/CiteThisPage.alias.php +++ b/extensions/CiteThisPage/CiteThisPage.alias.php @@ -19,7 +19,7 @@ $specialPageAliases['ar'] = array( 'CiteThisPage' => array( 'استشهاد' ), ); -/** Egyptian Spoken Arabic (مصرى) */ +/** Egyptian Arabic (مصرى) */ $specialPageAliases['arz'] = array( 'CiteThisPage' => array( 'استشهاد' ), ); @@ -144,7 +144,7 @@ $specialPageAliases['fr'] = array( 'CiteThisPage' => array( 'Citer' ), ); -/** Franco-Provençal (arpetan) */ +/** Arpitan (arpetan) */ $specialPageAliases['frp'] = array( 'CiteThisPage' => array( 'Citar' ), ); @@ -249,6 +249,11 @@ $specialPageAliases['lb'] = array( 'CiteThisPage' => array( 'Zitéierhellëf' ), ); +/** Northern Luri (لۊری شومالی) */ +$specialPageAliases['lrc'] = array( + 'CiteThisPage' => array( 'تیار_کئردئن_ئی_بألگە', 'تیارگە' ), +); + /** Literary Chinese (文言) */ $specialPageAliases['lzh'] = array( 'CiteThisPage' => array( '引文' ), diff --git a/extensions/CiteThisPage/CiteThisPage.php b/extensions/CiteThisPage/CiteThisPage.php index 34b85e04..836c6f5c 100644 --- a/extensions/CiteThisPage/CiteThisPage.php +++ b/extensions/CiteThisPage/CiteThisPage.php @@ -9,7 +9,7 @@ if ( function_exists( 'wfLoadExtension' ) ) { 'Deprecated PHP entry point used for CiteThisPage extension. Please use wfLoadExtension instead, ' . 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' ); */ - return; + return true; } else { die( 'This version of the CiteThisPage extension requires MediaWiki 1.25+' ); } diff --git a/extensions/CiteThisPage/Gruntfile.js b/extensions/CiteThisPage/Gruntfile.js new file mode 100644 index 00000000..de137b58 --- /dev/null +++ b/extensions/CiteThisPage/Gruntfile.js @@ -0,0 +1,25 @@ +/*! + * Grunt file + * + * @package CiteThisPage + */ + +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-jsonlint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.initConfig( { + banana: { + all: ["i18n/"] + }, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/CiteThisPage/composer.json b/extensions/CiteThisPage/composer.json new file mode 100644 index 00000000..fd380fb7 --- /dev/null +++ b/extensions/CiteThisPage/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/CiteThisPage/extension.json b/extensions/CiteThisPage/extension.json index bf81d4c8..f4e7ef18 100644 --- a/extensions/CiteThisPage/extension.json +++ b/extensions/CiteThisPage/extension.json @@ -26,6 +26,7 @@ }, "ResourceModules": { "ext.citeThisPage": { + "position": "top", "styles": "ext.citeThisPage.css" } }, @@ -40,5 +41,6 @@ "SpecialCiteThisPage": "SpecialCiteThisPage.php", "CiteThisPageOutput": "SpecialCiteThisPage.php", "CiteThisPageHooks": "CiteThisPage.hooks.php" - } + }, + "manifest_version": 1 } diff --git a/extensions/CiteThisPage/i18n/ady-cyrl.json b/extensions/CiteThisPage/i18n/ady-cyrl.json new file mode 100644 index 00000000..83e6af78 --- /dev/null +++ b/extensions/CiteThisPage/i18n/ady-cyrl.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "SamGamgee", + "TheRossatron", + "Inyzh" + ] + }, + "citethispage-link": "Мы нÑкIубгъор Ñ†Ð¸Ñ‚Ñ ÑˆIын", + "tooltip-citethispage": "Мы Ñайтыр Ñ†Ð¸Ñ‚Ñ Ð·ÑÑ€ÑпшIыщтым Ñ„ÑгъÑхьыгъÑу информацие" +} diff --git a/extensions/CiteThisPage/i18n/aeb-latn.json b/extensions/CiteThisPage/i18n/aeb-latn.json new file mode 100644 index 00000000..3e535d93 --- /dev/null +++ b/extensions/CiteThisPage/i18n/aeb-latn.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Csisc" + ] + }, + "citethispage-link": "SÄ«tÄ« hÄ“ il-pÄj", + "tooltip-citethispage": "MaÄ£lÅ«mÄ“t kifÄ“c tiktib fi- xidimtik illÄ« jibt il-maÄ£lÅ«mÄ“t mtÄ“Ä£ik min hÅ«nÄ«" +} diff --git a/extensions/CiteThisPage/i18n/af.json b/extensions/CiteThisPage/i18n/af.json index ca7c9a81..87caa90f 100644 --- a/extensions/CiteThisPage/i18n/af.json +++ b/extensions/CiteThisPage/i18n/af.json @@ -2,13 +2,15 @@ "@metadata": { "authors": [ "Naudefj", - "SPQRobin" + "SPQRobin", + "Arnobarnard", + "Fwolff" ] }, "citethispage": "Aanhaling", "citethispage-desc": "Maak 'n [[Special:Cite|spesiale bladsy vir sitasie]], en 'n skakel daarna in hulpmiddels beskikbaar", "citethispage-link": "Haal dié blad aan", - "tooltip-citethispage": "Inligting oor hoe u hierdie bladsy kan citeer", + "tooltip-citethispage": "Inligting oor hoe u hierdie bladsy kan verwys", "citethispage-change-submit": "Aanhaling", "citethispage-change-target": "Bladsy:" } diff --git a/extensions/CiteThisPage/i18n/ang.json b/extensions/CiteThisPage/i18n/ang.json new file mode 100644 index 00000000..d478393b --- /dev/null +++ b/extensions/CiteThisPage/i18n/ang.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "JJohnson1701" + ] + }, + "citethispage-link": "Þisne tramet meldian" +} diff --git a/extensions/CiteThisPage/i18n/awa.json b/extensions/CiteThisPage/i18n/awa.json index 108657a4..3866ddc1 100644 --- a/extensions/CiteThisPage/i18n/awa.json +++ b/extensions/CiteThisPage/i18n/awa.json @@ -4,6 +4,6 @@ "1AnuraagPandey" ] }, - "citethispage-link": "इस पनà¥à¤¨à¥‡ को उदà¥à¤§à¥ƒà¤¤ करें", + "citethispage-link": "इ पनà¥à¤¨à¤¾ कय उदà¥à¤§à¥ƒà¤¤ करा जाय", "tooltip-citethispage": "इस पृषà¥à¤  को उदà¥à¤§à¥ƒà¤¤ करने के लिये जानकारी" } diff --git a/extensions/CiteThisPage/i18n/az.json b/extensions/CiteThisPage/i18n/az.json index 61772010..53115206 100644 --- a/extensions/CiteThisPage/i18n/az.json +++ b/extensions/CiteThisPage/i18n/az.json @@ -1,10 +1,12 @@ { "@metadata": { "authors": [ - "Cekli829" + "Cekli829", + "Wertuose" ] }, "citethispage": "Sayt", + "citethispage-link": "Bu sÉ™hifÉ™ni mÉ™nbÉ™ göstÉ™r", "citethispage-change-submit": "Sayt", "citethispage-change-target": "SÉ™hifÉ™:" } diff --git a/extensions/CiteThisPage/i18n/azb.json b/extensions/CiteThisPage/i18n/azb.json index 94ad3515..5da33756 100644 --- a/extensions/CiteThisPage/i18n/azb.json +++ b/extensions/CiteThisPage/i18n/azb.json @@ -2,14 +2,16 @@ "@metadata": { "authors": [ "Amir a57", - "Mousa" + "Mousa", + "KoroÄŸlu", + "Alp Er Tunqa" ] }, "citethispage": "سایت", "citethispage-desc": "بیر اؤزل [[Special:Cite|آلینتی]] صحیÙه‌سی Ùˆ آراج-قوتوسو باغلانتی‌سی آرتیرار", - "citethispage-link": "بو صحیÙه‌دن آلینتی گؤتور", - "tooltip-citethispage": "بو صحیÙه‌دن نئجه آلینتی گؤتورمک اوچون بیلگیلر", + "citethispage-link": "بو صÙحه‌دن آلینتی گؤتور", + "tooltip-citethispage": "بو صÙحه‌دن نئجه آلینتی گؤتورمک اوچون بیلگیلر", "citethispage-change-submit": "سایت", - "citethispage-change-target": "صحیÙÙ‡:", + "citethispage-change-target": "صÙحه:", "citethispage-content": "__NOTOC__\n
    \n\n== {{FULLPAGENAME}} اوچون قایناق‌جالیق بیلگیلری ==\n\n* صحیÙÙ‡ آدی: {{FULLPAGENAME}}\n* یارادیجی: {{SITENAME}} ایستیÙاده‌چیلری\n* نشر ائدن: ''{{SITENAME}}ØŒ {{int:sitesubtitle}}''.\n* سون نوسخه‌نین تاریخی: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* گؤتورن تاریخ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* قالیجی آدرس: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* صحیÙÙ‡ نوسخه بلیردنی: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/bho.json b/extensions/CiteThisPage/i18n/bho.json index e38456f4..61a6a80f 100644 --- a/extensions/CiteThisPage/i18n/bho.json +++ b/extensions/CiteThisPage/i18n/bho.json @@ -2,9 +2,10 @@ "@metadata": { "authors": [ "Nepaboy", - "Ganesh" + "Ganesh", + "SatyamMishra" ] }, - "citethispage-link": "ई पनà¥à¤¨à¤¾ के उलà¥à¤²à¥‡à¤– करीं", - "tooltip-citethispage": "इ पनà¥à¤¨à¤¾ के कइसे हवाला करे के बा ओ पर जानकारी" + "citethispage-link": "ठपनà¥à¤¨à¤¾ के हवाला देईं", + "tooltip-citethispage": "ठपनà¥à¤¨à¤¾ के हवाला देवे के तरीका के जानकारी" } diff --git a/extensions/CiteThisPage/i18n/bs.json b/extensions/CiteThisPage/i18n/bs.json index ca14c26d..67e89919 100644 --- a/extensions/CiteThisPage/i18n/bs.json +++ b/extensions/CiteThisPage/i18n/bs.json @@ -1,11 +1,12 @@ { "@metadata": { "authors": [ - "CERminator" + "CERminator", + "Srdjan m" ] }, "citethispage": "Citiranje", - "citethispage-desc": "Dodaje posebnu stranicu za [[Special:Cite|citiranje]] i link u alatnoj kutiji", + "citethispage-desc": "Dodaje posebnu stranicu za [[Special:CiteThisPage|citiranje]] i link u alatnoj kutiji", "citethispage-link": "Citiraj ovu stranicu", "tooltip-citethispage": "Informacije kako citirati ovu stranicu", "citethispage-change-submit": "Citiraj", diff --git a/extensions/CiteThisPage/i18n/ce.json b/extensions/CiteThisPage/i18n/ce.json index 2b2e277d..beceafa8 100644 --- a/extensions/CiteThisPage/i18n/ce.json +++ b/extensions/CiteThisPage/i18n/ce.json @@ -6,10 +6,10 @@ ] }, "citethispage": "ÐгӀона тӀе йолу библиографин хьажоргаш", - "citethispage-desc": "ГӀирÑан тӀе туху [[Special:CiteThisPage|дешнаш дало]] белхан агӀо а хьажорг а", + "citethispage-desc": "ГӀирÑан тӀе туху [[Special:CiteThisPage|дешнаш дало]] белхан агӀо а, хьажорг а", "citethispage-link": "ÐгӀонах лаьцна дешнаш дало", "tooltip-citethispage": "ХӀара бу хаам агӀонах лаьцна дешнаш муха дало деза гойтуш", "citethispage-change-submit": "Кечъе хьажоргаш", "citethispage-change-target": "ÐгӀо:", - "citethispage-content": "__NOTOC__\n
    \n\n== {{FULLPAGENAME}} агӀона библиографин хаамаш ==\n\n* Яззам: {{FULLPAGENAME}}\n* Ðвтор: {{SITENAME}} автораш\n* Кхоьллина: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ТӀехьара хийцам бина: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ЧуÑьккхина терахь: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Даиман йолу хьажорг: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ÐгӀон верÑийн ID: {{REVISIONID}}\n\n
    \n " + "citethispage-content": "__NOTOC__\n
    \n\n== {{FULLPAGENAME}} агӀона библиографин хаамаш ==\n\n* Яззам: {{FULLPAGENAME}}\n* Ðвтор: {{SITENAME}} автораш\n* Кхоьллина: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ТӀаьххьара хийцам бина: {{CURRENTYEAR}} шаран {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTTIME}} UTC\n* ЧуÑьккхина терахь: {{CURRENTYEAR}} {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTTIME}} UTC\n* Даиман йолу хьажорг: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ÐгӀон верÑийн ID: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/da.json b/extensions/CiteThisPage/i18n/da.json index c3d28270..b0f1b7a9 100644 --- a/extensions/CiteThisPage/i18n/da.json +++ b/extensions/CiteThisPage/i18n/da.json @@ -9,7 +9,7 @@ }, "citethispage": "Citér", "citethispage-desc": "Tilføjer en [[Special:Cite|specialside til citering]] og en henvisning i værktøjsmenuen", - "citethispage-link": "Citér denne artikel", + "citethispage-link": "Citér denne side", "tooltip-citethispage": "Information om, hvordan man kan citere denne side", "citethispage-change-submit": "Citér", "citethispage-change-target": "Side:", diff --git a/extensions/CiteThisPage/i18n/dty.json b/extensions/CiteThisPage/i18n/dty.json new file mode 100644 index 00000000..9abbc2f9 --- /dev/null +++ b/extensions/CiteThisPage/i18n/dty.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "रमेश सिंह बोहरा" + ] + }, + "citethispage-link": "यो पाना बनाउनà¥à¤¯à¤¾", + "tooltip-citethispage": "यै पृषà¥à¤ à¤•à¥‹ जानकारी उदà¥à¤§à¥ƒà¤¤ गदà¥à¤¦à¤¾à¤•à¤¿ निमति जानकारी" +} diff --git a/extensions/CiteThisPage/i18n/en-gb.json b/extensions/CiteThisPage/i18n/en-gb.json new file mode 100644 index 00000000..f5f68abe --- /dev/null +++ b/extensions/CiteThisPage/i18n/en-gb.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Chase me ladies, I'm the Cavalry" + ] + }, + "citethispage-link": "Cite this page", + "tooltip-citethispage": "Information on how to cite this page" +} diff --git a/extensions/CiteThisPage/i18n/fo.json b/extensions/CiteThisPage/i18n/fo.json index 30b46d5e..076f0790 100644 --- a/extensions/CiteThisPage/i18n/fo.json +++ b/extensions/CiteThisPage/i18n/fo.json @@ -2,11 +2,13 @@ "@metadata": { "authors": [ "Diupwijk", - "Spacebirdy" + "Spacebirdy", + "EileenSanda" ] }, "citethispage": "Sitera", "citethispage-link": "Sitera hesa síðuna", + "tooltip-citethispage": "Kunning um hvussu henda síðan kann endurgevast", "citethispage-change-submit": "Sitera", "citethispage-change-target": "Síða:" } diff --git a/extensions/CiteThisPage/i18n/gd.json b/extensions/CiteThisPage/i18n/gd.json index b7775b40..bbfd4b28 100644 --- a/extensions/CiteThisPage/i18n/gd.json +++ b/extensions/CiteThisPage/i18n/gd.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Akerbeltz" + "Akerbeltz", + "Caoimhin" ] }, - "citethispage-link": "Thoir iomradh air an duilleag seo" + "citethispage-link": "Thoir iomradh air an duilleag seo", + "tooltip-citethispage": "Mar a nì thu iomradh dhan duilleig seo" } diff --git a/extensions/CiteThisPage/i18n/gom-latn.json b/extensions/CiteThisPage/i18n/gom-latn.json new file mode 100644 index 00000000..cc4f1338 --- /dev/null +++ b/extensions/CiteThisPage/i18n/gom-latn.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "The Discoverer" + ] + }, + "citethispage-link": "Hem pan odhrut kor", + "tooltip-citethispage": "Hem pan odhrut korche khatir mahiti" +} diff --git a/extensions/CiteThisPage/i18n/gu.json b/extensions/CiteThisPage/i18n/gu.json index 802c6197..ca36f4b8 100644 --- a/extensions/CiteThisPage/i18n/gu.json +++ b/extensions/CiteThisPage/i18n/gu.json @@ -3,13 +3,16 @@ "authors": [ "Dsvyas", "KartikMistry", - "Sushant savla" + "Sushant savla", + "Arbhatt", + "Ashok modhvadia" ] }, "citethispage": "ટાંકો", - "citethispage-desc": "[[Special:Cite|સંદરà«àª­]] ખાસ પાનà«àª‚ અને સાધન પેટીની કડી ઉમેરે છે", + "citethispage-desc": "[[Special:CiteThisPage|સંદરà«àª­]] ખાસ પાનà«àª‚ અને સાધન પેટીની કડી ઉમેરે છે", "citethispage-link": "આ પાનà«àª‚ ટાંકો", - "tooltip-citethispage": "આ પાનાંને સમરà«àª¥àª¨ કઈ રીતે આપવà«àª‚ તેની માહિતી", + "tooltip-citethispage": "આ પાનાંનો સંદરà«àª­ કઈ રીતે ટાંકવો તેની માહિતી", "citethispage-change-submit": "ટાંકો", - "citethispage-change-target": "પાનà«àª‚:" + "citethispage-change-target": "પાનà«àª‚:", + "citethispage-content": "__NOTOC__\n
    \n\n== Bibliographic details for {{FULLPAGENAME}} ==\n\n* Page name: {{FULLPAGENAME}}\n* Author: {{SITENAME}} contributors\n* Publisher: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Date of last revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date retrieved: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Page Version ID: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/hil.json b/extensions/CiteThisPage/i18n/hil.json index 7b142e04..d0e33114 100644 --- a/extensions/CiteThisPage/i18n/hil.json +++ b/extensions/CiteThisPage/i18n/hil.json @@ -1,8 +1,9 @@ { "@metadata": { "authors": [ - "Jose77" + "Jose77", + "Redhotchili23" ] }, - "citethispage-link": "Tumuron ining artikulo" + "citethispage-link": "Tumuron ining panid" } diff --git a/extensions/CiteThisPage/i18n/ht.json b/extensions/CiteThisPage/i18n/ht.json index dfb067ab..c6f94580 100644 --- a/extensions/CiteThisPage/i18n/ht.json +++ b/extensions/CiteThisPage/i18n/ht.json @@ -1,12 +1,14 @@ { "@metadata": { "authors": [ - "Masterches" + "Masterches", + "Tisave" ] }, "citethispage": "Sitasyon", "citethispage-desc": "Ajoute yon paj espesyal [[Special:Cite|sitasyon]] epitou yon lyen nan bwat zouti yo", "citethispage-link": "Site paj sa", + "tooltip-citethispage": "Enfòmasyon sou kijan pou site paj sa a", "citethispage-change-submit": "Site", "citethispage-change-target": "Paj:" } diff --git a/extensions/CiteThisPage/i18n/hu.json b/extensions/CiteThisPage/i18n/hu.json index a4f775c4..be1c6207 100644 --- a/extensions/CiteThisPage/i18n/hu.json +++ b/extensions/CiteThisPage/i18n/hu.json @@ -3,14 +3,15 @@ "authors": [ "Dani", "Glanthor Reviol", - "Tgr" + "Tgr", + "Tacsipacsi" ] }, - "citethispage": "Hivatkozás", + "citethispage": "Ezen lap idézése", "citethispage-desc": "[[Special:Cite|Hivatkozás-készítő]] speciális lap és link az eszközdobozba", "citethispage-link": "Hogyan hivatkozz erre a lapra", "tooltip-citethispage": "Információk a lap idézésével kapcsolatban", "citethispage-change-submit": "Mehet", "citethispage-change-target": "Lap neve:", - "citethispage-content": "__NOTOC__\n
    \n\n'''FONTOS MEGJEGYZÉS:''' A legtöbb tanár és szakember nem tartja helyesnek a [[harmadlagos forrás]]ok – mint a lexikonok – kizárólagos forrásként való felhasználását. A Wiki cikkeket háttérinformációnak, vagy a további kutatómunka kiindulásaként érdemes használni.\n\nMint minden [[{{ns:project}}:Ki írja a Wikipédiát|közösség által készített]] hivatkozásnál, a wiki tartalmában is lehetségesek hibák vagy pontatlanságok: kérjük, több független forrásból ellenőrizd a tényeket és ismerd meg a [[{{ns:project}}:Jogi nyilatkozat|jogi nyilatkozatunkat]], mielőtt a wiki adatait felhasználod.\n\n
    \n\n== {{FULLPAGENAME}} lap adatai ==\n\n* Lap neve: {{FULLPAGENAME}} \n* SzerzÅ‘: Wiki szerkesztÅ‘k\n* Kiadó: ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. \n* A legutóbbi változat dátuma: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Letöltés dátuma: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Ãllandó hivatkozás: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Lapváltozat-azonosító: {{REVISIONID}}\n\nLégy szíves, ellenÅ‘rizd, hogy ezek az adatok megfelelnek-e a kívánalmaidnak. További információhoz lásd az '''[[{{ns:project}}:Idézés a Wikipédiából|Idézés a Wikipédiából]]''' lapot.\n\n
    \n " + "citethispage-content": "__NOTOC__\n
    \n\n== {{FULLPAGENAME}} bibliográfiai információi ==\n\n* Lap neve: {{FULLPAGENAME}} \n* SzerzÅ‘: {{SITENAME}}-szerkesztÅ‘k\n* Kiadó: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* A legutóbbi változat dátuma: {{REVISIONYEAR}}. {{REVISIONMONTH}}. {{REVISIONDAY2}}.\n* Letöltés dátuma: {{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}., {{CURRENTTIME}} (UTC)\n* Ãllandó hivatkozás: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Lapváltozat-azonosító: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/hy.json b/extensions/CiteThisPage/i18n/hy.json index cfe3104d..43dbbfb4 100644 --- a/extensions/CiteThisPage/i18n/hy.json +++ b/extensions/CiteThisPage/i18n/hy.json @@ -3,11 +3,13 @@ "authors": [ "Chaojoker", "Teak", - "Vadgt" + "Vadgt", + "Ô´Õ¡Õ¾Õ«Õ© ÕÕ¡Ö€Õ¸ÕµÕ¡Õ¶" ] }, "citethispage": "Õ”Õ¡Õ²Õ¾Õ¡Õ®Õ¥Õ¬ Õ¡ÕµÕ½ Õ§Õ»Õ¨", "citethispage-link": "Õ”Õ¡Õ²Õ¾Õ¡Õ®Õ¥Õ¬ Õ¡ÕµÕ½ Õ§Õ»Õ¨", + "tooltip-citethispage": "ÕÕ¥Õ²Õ¥Õ¯Õ¡Õ¿Õ¾Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶, Õ©Õ¥ Õ«Õ¶Õ¹ÕºÕ¥Õ½ ÕºÕ¥Õ¿Ö„ Õ§ Õ´Õ¥Õ»Õ¢Õ¥Ö€Õ¥Õ¬ Õ¡ÕµÕ½ Õ§Õ»Õ¨", "citethispage-change-submit": "Õ”Õ¡Õ²Õ¾Õ¡Õ®Õ¥Õ¬", "citethispage-change-target": "Ô·Õ».", "citethispage-content": "__NOTOC__\n
    \n\n== {{FULLPAGENAME}} Õ§Õ»Õ« Õ´Õ¡Õ¿Õ¥Õ¶Õ¡Õ£Ö€Õ¡Õ¯Õ¡Õ¶ Õ´Õ¡Õ¶Ö€Õ¡Õ´Õ¡Õ½Õ¶Õ¥Ö€ ==\n\n* Ô·Õ»Õ¡Õ¶Õ¸Ö‚Õ¶Õ {{FULLPAGENAME}}\n* Õ€Õ¥Õ²Õ«Õ¶Õ¡Õ¯Õ {{SITENAME}} contributors\n* Õ€Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ«Õ¹Õ ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ÕŽÕ¥Ö€Õ»Õ«Õ¶Õ¶ Õ¾Õ¥Ö€Õ¡Õ¶Õ¡ÕµÕ´Õ¡Õ¶ Õ©Õ«Õ¾Õ {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} Õ€Ô¿Ôº\n* ÕŽÕ¥Ö€Õ½Õ¿Õ¡ÖÕ´Õ¡Õ¶ Õ©Õ«Õ¾Õ {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} Õ€Ô¿Ôº\n* Õ„Õ·Õ¿Õ¡Õ¯Õ¡Õ¶ Õ°Õ¡Õ½ÖÕ¥Õ {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Ô·Õ»Õ« Õ¾Õ¡Ö€Õ¯Õ¡Õ®Õ« Õ©Õ«Õ¾Õ {{REVISIONID}}\n\n
    \n " diff --git a/extensions/CiteThisPage/i18n/jut.json b/extensions/CiteThisPage/i18n/jut.json index a258a4d3..989b02ad 100644 --- a/extensions/CiteThisPage/i18n/jut.json +++ b/extensions/CiteThisPage/i18n/jut.json @@ -1,11 +1,12 @@ { "@metadata": { "authors": [ - "HuslÃ¥ke" + "HuslÃ¥ke", + "Jyllanj" ] }, "citethispage": "FodnÃ¥t", - "citethispage-link": "FodnÃ¥ter denne ertikel", + "citethispage-link": "Citiir siden", "citethispage-change-submit": "FodnÃ¥t", "citethispage-change-target": "Side:" } diff --git a/extensions/CiteThisPage/i18n/khw.json b/extensions/CiteThisPage/i18n/khw.json new file mode 100644 index 00000000..c7dec6e5 --- /dev/null +++ b/extensions/CiteThisPage/i18n/khw.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Rachitrali" + ] + }, + "citethispage-link": "Ú¾ÛŒÛ ØµÙحو حوالو دیت", + "tooltip-citethispage": "معلومات برائے Ú©ÛŒÛ Ù‚Ø³Ù…Û Ú¾ÛŒÛ ØµÙحوتے Ø­ÙˆØ§Ù„Û Ø¯ÛŒÙˆÙ†Ùˆ بوئے" +} diff --git a/extensions/CiteThisPage/i18n/kn.json b/extensions/CiteThisPage/i18n/kn.json index a3f22390..60028b2d 100644 --- a/extensions/CiteThisPage/i18n/kn.json +++ b/extensions/CiteThisPage/i18n/kn.json @@ -2,10 +2,12 @@ "@metadata": { "authors": [ "Nayvik", - "Shushruth" + "Shushruth", + "VASANTH S.N." ] }, "citethispage": "ಉಲà³à²²à³‡à²–ಿಸಿ", "citethispage-link": "ಈ ಪà³à²Ÿà²µà²¨à³à²¨à³ ಉಲà³à²²à³‡à²–ಿಸಿ", + "tooltip-citethispage": "ಈ ಪà³à²Ÿà²µà²¨à³à²¨à³ ಹೇಗೆ ಉಲà³à²²à³‡à²–ಿಸಬಹà³à²¦à³ ಎಂಬà³à²¦à²° ಬಗà³à²—ೆ ಮಾಹಿತಿ", "citethispage-change-target": "ಪà³à²Ÿ:" } diff --git a/extensions/CiteThisPage/i18n/ko.json b/extensions/CiteThisPage/i18n/ko.json index c55f220b..5546fd4b 100644 --- a/extensions/CiteThisPage/i18n/ko.json +++ b/extensions/CiteThisPage/i18n/ko.json @@ -8,7 +8,7 @@ ] }, "citethispage": "ì¸ìš©", - "citethispage-desc": "[[Special:Cite|ì¸ìš©]] 특수 문서와 ë„êµ¬ëª¨ìŒ ë§í¬ë¥¼ 추가합니다", + "citethispage-desc": "[[Special:CiteThisPage|ì¸ìš©]] 특수 문서와 ë„êµ¬ëª¨ìŒ ë§í¬ë¥¼ 추가합니다", "citethispage-link": "ì´ ë¬¸ì„œ ì¸ìš©í•˜ê¸°", "tooltip-citethispage": "ì´ ë¬¸ì„œë¥¼ ì¸ìš©í•˜ëŠ” ë°©ë²•ì— ëŒ€í•œ ì •ë³´", "citethispage-change-submit": "ì¸ìš©", diff --git a/extensions/CiteThisPage/i18n/ksh.json b/extensions/CiteThisPage/i18n/ksh.json index 7684dd97..453489b2 100644 --- a/extensions/CiteThisPage/i18n/ksh.json +++ b/extensions/CiteThisPage/i18n/ksh.json @@ -10,5 +10,5 @@ "tooltip-citethispage": "Enfommazjuhne doh drövver, wi mer heh di Sigg zitteere sullt.", "citethispage-change-submit": "ZittÄ—ere", "citethispage-change-target": "Sigk:", - "citethispage-content": "__NOTOC__\n
    \n__NOTOC__\n
    \n== De biblejojraafesche Aanjabe för di Sigg „{{FULLPAGENAME}}“ ==\n\n* Siggetittel: {{FULLPAGENAME}}\n* Schriever: Beärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}\n* Rußjävver: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Et läz jändert aam: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)\n* Affjeroofe aam: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)\n* URL met Beschtand: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Version: {{REVISIONID}}\n
    \n " + "citethispage-content": "__NOTOC__\n
    \n__NOTOC__\n
    \n== De biblejojraafesche Aanjabe för di Sigg „{{FULLPAGENAME}}“ ==\n\n* Siggetittel: {{FULLPAGENAME}}\n* Schriever: Beärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}\n* Rußjävver: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Et läz jeändert aam: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)\n* Affjeroofe aam: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)\n* URL met Beschtand: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Version: {{REVISIONID}}\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/kw.json b/extensions/CiteThisPage/i18n/kw.json index d8b80b72..d38fbfc2 100644 --- a/extensions/CiteThisPage/i18n/kw.json +++ b/extensions/CiteThisPage/i18n/kw.json @@ -7,8 +7,8 @@ ] }, "citethispage": "Devynna", - "citethispage-link": "Devynna an erthygel-ma", - "tooltip-citethispage": "Kedhlow war fatel dhevynnir an folen-ma", + "citethispage-link": "Devynna an erthygel ma", + "tooltip-citethispage": "Kedhlow a-dro dhe dhevynna an folen ma", "citethispage-change-submit": "Devynna", "citethispage-change-target": "Folen:" } diff --git a/extensions/CiteThisPage/i18n/luz.json b/extensions/CiteThisPage/i18n/luz.json new file mode 100644 index 00000000..47286df3 --- /dev/null +++ b/extensions/CiteThisPage/i18n/luz.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "علی ساکی لرستانی" + ] + }, + "citethispage-link": "یادکرد پیڤأند ئی مأقالە", + "tooltip-citethispage": "اطلاعات د نحڤە ئیستناد Ú¤Û• ئی بألگە" +} diff --git a/extensions/CiteThisPage/i18n/lv.json b/extensions/CiteThisPage/i18n/lv.json index 6d6f1ba0..c51a4695 100644 --- a/extensions/CiteThisPage/i18n/lv.json +++ b/extensions/CiteThisPage/i18n/lv.json @@ -1,11 +1,13 @@ { "@metadata": { "authors": [ - "Xil" + "Xil", + "Kikos" ] }, "citethispage": "CitÄ“Å¡ana", "citethispage-link": "Atsauce uz Å¡o lapu", + "tooltip-citethispage": "InformÄcija par Å¡Ä«s lapas citÄ“Å¡anu", "citethispage-change-submit": "ParÄdÄ«t atsauci", "citethispage-change-target": "Raksts:" } diff --git a/extensions/CiteThisPage/i18n/mg.json b/extensions/CiteThisPage/i18n/mg.json index cedb8122..145e7530 100644 --- a/extensions/CiteThisPage/i18n/mg.json +++ b/extensions/CiteThisPage/i18n/mg.json @@ -4,5 +4,6 @@ "Jagwar" ] }, - "citethispage-link": "Hitanisa ity pejy ity" + "citethispage-link": "Hitanisa ity pejy ity", + "tooltip-citethispage": "Fampahalalana mikasika ny fitsiahivana ity pejy ity" } diff --git a/extensions/CiteThisPage/i18n/ml.json b/extensions/CiteThisPage/i18n/ml.json index e87a900d..00224c06 100644 --- a/extensions/CiteThisPage/i18n/ml.json +++ b/extensions/CiteThisPage/i18n/ml.json @@ -6,7 +6,7 @@ ] }, "citethispage": "ഉദàµà´§à´°à´¿à´•àµà´•àµà´•", - "citethispage-desc": "[[Special:Cite|സൈറàµà´±àµ‡à´·àµ»]] à´Žà´¨àµà´¨ à´ªàµà´°à´¤àµà´¯àµ‡à´• താളàµà´‚, പണി സഞàµà´šà´¿ à´•à´£àµà´£à´¿à´¯àµà´‚ ചേർകàµà´•àµà´¨àµà´¨àµ", + "citethispage-desc": "[[Special:CiteThisPage|സൈറàµà´±àµ‡à´·àµ»]] à´Žà´¨àµà´¨ à´ªàµà´°à´¤àµà´¯àµ‡à´• താളàµà´‚, പണി സഞàµà´šà´¿ à´•à´£àµà´£à´¿à´¯àµà´‚ ചേർകàµà´•àµà´¨àµà´¨àµ", "citethispage-link": "à´ˆ താൾ ഉദàµà´§à´°à´¿à´•àµà´•àµà´•", "tooltip-citethispage": "à´ˆ താളിനെ à´Žà´™àµà´™à´¨àµ† അവലംബിതമാകàµà´•à´¾à´‚ à´Žà´¨àµà´¨ വിവരങàµà´™àµ¾", "citethispage-change-submit": "ഉദàµà´§à´°à´¿à´•àµà´•àµà´•", diff --git a/extensions/CiteThisPage/i18n/mn.json b/extensions/CiteThisPage/i18n/mn.json index 4854c3c9..e8ad61b3 100644 --- a/extensions/CiteThisPage/i18n/mn.json +++ b/extensions/CiteThisPage/i18n/mn.json @@ -2,11 +2,13 @@ "@metadata": { "authors": [ "Chinneeb", - "MongolWiki" + "MongolWiki", + "Sembuk" ] }, "citethispage": "Иш татах", "citethispage-link": "ЭндÑÑÑ Ð¸Ñˆ татах", + "tooltip-citethispage": "Ð­Ð½Ñ Ñ…ÑƒÑƒÐ´Ñыг Ñ…ÑрхÑн ÑшлÑÑ… тухай мÑдÑÑлÑл", "citethispage-change-submit": "Иш татах", "citethispage-change-target": "ХуудаÑ:" } diff --git a/extensions/CiteThisPage/i18n/mzn.json b/extensions/CiteThisPage/i18n/mzn.json new file mode 100644 index 00000000..7063f6ec --- /dev/null +++ b/extensions/CiteThisPage/i18n/mzn.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "محک" + ] + }, + "citethispage-link": "این مقاله‌ی Ùمنبع", + "tooltip-citethispage": "اطلاعات هدائن Ú©Ù‡ این صÙحه چتی منبع بیارده" +} diff --git a/extensions/CiteThisPage/i18n/nan.json b/extensions/CiteThisPage/i18n/nan.json index db78d893..aa0c43ce 100644 --- a/extensions/CiteThisPage/i18n/nan.json +++ b/extensions/CiteThisPage/i18n/nan.json @@ -1,7 +1,13 @@ { - "@metadata": [], + "@metadata": { + "authors": [ + "Ianbu", + "å”å‰è¨¶å¾·çš„ä¾å¾ž" + ] + }, "citethispage": "Ãn-iÅng", "citethispage-link": "Ãn-iÅng chit phiâ¿ bûn-chiuâ¿", + "tooltip-citethispage": "Koan-hÄ“ án-chóaâ¿ Ä«ng chit iaÌh--ê soat-bêng.", "citethispage-change-submit": "Ãn-iÅng", "citethispage-change-target": "IaÌh:" } diff --git a/extensions/CiteThisPage/i18n/olo.json b/extensions/CiteThisPage/i18n/olo.json new file mode 100644 index 00000000..81a34f6f --- /dev/null +++ b/extensions/CiteThisPage/i18n/olo.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Ilja.mos" + ] + }, + "citethispage-link": "Viittua täh sivuh", + "tooltip-citethispage": "Tiedo sit, kui viitata täh sivuh" +} diff --git a/extensions/CiteThisPage/i18n/or.json b/extensions/CiteThisPage/i18n/or.json index 2caf67b1..8dab6290 100644 --- a/extensions/CiteThisPage/i18n/or.json +++ b/extensions/CiteThisPage/i18n/or.json @@ -7,7 +7,7 @@ }, "citethispage": "ଆଧାର ଦେବେ", "citethispage-desc": "à¬à¬• [[Special:Cite|ଆଧାର]] ବିଶେଷ ପୃଷà­à¬ à¬¾ ଓ ଉପକରଣ ପେଡ଼ିର ଲିଙà­à¬• ଯୋଡ଼ିଥାà¬", - "citethispage-link": "à¬à¬¹à¬¿ ପୃଷà­à¬ à¬¾à¬Ÿà¬¿à¬°à­‡ ପà­à¬°à¬®à¬¾à¬£ ଯୋଡ଼ିବେ", + "citethispage-link": "à¬à¬¹à¬¿ ପୃଷà­à¬ à¬¾à¬Ÿà¬¿à¬°à­‡ ଆଧାର ଯୋଡ଼ିବେ", "tooltip-citethispage": "ଆଧାରଟିଠଦେବା ଉପରେ ଅଧିକ ସୂଚନା", "citethispage-change-submit": "ଆଧାର ଦେବେ", "citethispage-change-target": "ପୃଷà­à¬ à¬¾:", diff --git a/extensions/CiteThisPage/i18n/pa.json b/extensions/CiteThisPage/i18n/pa.json index 900b9d1e..cac7a4de 100644 --- a/extensions/CiteThisPage/i18n/pa.json +++ b/extensions/CiteThisPage/i18n/pa.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Babanwalia" + "Babanwalia", + "Satdeep gill" ] }, - "citethispage-link": "ਇਸ ਸਫ਼ੇ ਦਾ ਹਵਾਲਾ ਦਿਉ" + "citethispage-link": "ਇਸ ਸਫ਼ੇ ਦਾ ਹਵਾਲਾ ਦਿਉ", + "tooltip-citethispage": "ਇਸ ਸਫ਼ੇ ਦਾ ਹਵਾਲੇ ਦੇਣ ਸਬੰਧੀ ਜਾਣਕਾਰੀ" } diff --git a/extensions/CiteThisPage/i18n/pl.json b/extensions/CiteThisPage/i18n/pl.json index 4b886e8b..37043353 100644 --- a/extensions/CiteThisPage/i18n/pl.json +++ b/extensions/CiteThisPage/i18n/pl.json @@ -2,13 +2,14 @@ "@metadata": { "authors": [ "Sp5uhe", - "Chrumps" + "Chrumps", + "Peter Bowman" ] }, "citethispage": "Bibliografia", "citethispage-desc": "Dodaje stronÄ™ specjalnÄ… [[Special:CiteThisPage|obsÅ‚ugi cytowaÅ„]] i link w pasku narzÄ™dziowym", "citethispage-link": "Cytowanie tego artykuÅ‚u", "tooltip-citethispage": "Informacja o tym jak należy cytować tÄ™ stronÄ™", - "citethispage-change-submit": "stwórz wpis bibliograficzny", + "citethispage-change-submit": "Stwórz wpis bibliograficzny", "citethispage-change-target": "Strona:" } diff --git a/extensions/CiteThisPage/i18n/prs.json b/extensions/CiteThisPage/i18n/prs.json new file mode 100644 index 00000000..d4abca2f --- /dev/null +++ b/extensions/CiteThisPage/i18n/prs.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Mjbmr" + ] + }, + "citethispage-link": "یاد کردن این صÙحه", + "tooltip-citethispage": "اطلاعات درباره اینکه چگونه از این صÙحه یاد کنید" +} diff --git a/extensions/CiteThisPage/i18n/pt.json b/extensions/CiteThisPage/i18n/pt.json index 6154433e..6c4d7ba6 100644 --- a/extensions/CiteThisPage/i18n/pt.json +++ b/extensions/CiteThisPage/i18n/pt.json @@ -5,7 +5,8 @@ "Lijealso", "Malafaya", "555", - "Vitorvicentevalente" + "Vitorvicentevalente", + "Fúlvio" ] }, "citethispage": "Citar esta página", @@ -13,5 +14,6 @@ "citethispage-link": "Citar esta página", "tooltip-citethispage": "Informação sobre como citar esta página", "citethispage-change-submit": "Citar", - "citethispage-change-target": "Página:" + "citethispage-change-target": "Página:", + "citethispage-content": "__NOTOC__\n
    \n\n== Detalhes bibliográficos para {{FULLPAGENAME}} ==\n\n* Nome da página: {{FULLPAGENAME}}\n* Autor: Contribuidores de {{SITENAME}}\n* Publicado: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data da última revisão: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data de acesso: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID da versão da página: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/sa.json b/extensions/CiteThisPage/i18n/sa.json index 7d55f514..b5647e79 100644 --- a/extensions/CiteThisPage/i18n/sa.json +++ b/extensions/CiteThisPage/i18n/sa.json @@ -2,14 +2,15 @@ "@metadata": { "authors": [ "Ansumang", - "Shubha" + "Shubha", + "NehalDaveND" ] }, "citethispage": "उदाहरति", - "citethispage-desc": "[[Special:Cite|बाहà¥à¤¯à¤¾à¤§à¤¾à¤°à¥ˆà¤ƒ]] यà¥à¤•à¥à¤¤à¤‚ किञà¥à¤šà¤¨ विशेषपृषà¥à¤ à¤®à¥ उपकरणपेटिकानà¥à¤¬à¤¨à¥à¤§à¤‚ च योजयति", + "citethispage-desc": "[[Special:Cite|बाहà¥à¤¯à¤¾à¤§à¤¾à¤°à¥ˆà¤ƒ]] यà¥à¤•à¥à¤¤à¤‚ किञà¥à¤šà¤¨ विशिषà¥à¤Ÿà¤ªà¥ƒà¤·à¥à¤ à¤®à¥ उपकरणपेटिकानà¥à¤¬à¤¨à¥à¤§à¤‚ च योजयति", "citethispage-link": "असà¥à¤¯ पृषà¥à¤ à¤¸à¥à¤¯ उलà¥à¤²à¥‡à¤–ः कà¥à¤°à¤¿à¤¯à¤¤à¤¾à¤®à¥", "tooltip-citethispage": "असà¥à¤¯ पृषà¥à¤ à¤¸à¥à¤¯ उलà¥à¤²à¥‡à¤–ः कथमिति विवरणमà¥", "citethispage-change-submit": "उदाहरति", - "citethispage-change-target": "पृषà¥à¤ :", + "citethispage-change-target": "पृषà¥à¤ à¤®à¥ :", "citethispage-content": "__NOTOC__\n
    \n\n== {{FULLPAGENAME}} इतà¥à¤¯à¤¸à¥à¤¯ आधारगà¥à¤¨à¤¨à¥à¤¥à¤µà¤¿à¤µà¤°à¤£à¤®à¥ ==\n\n* पृषà¥à¤ à¤¨à¤¾à¤® : {{FULLPAGENAME}}\n* लेखकः: {{SITENAME}} योगदातारः\n* पà¥à¤°à¤•à¤¾à¤¶à¤•à¤ƒ: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* अनà¥à¤¤à¤¿à¤®à¤¾à¤µà¥ƒà¤¤à¥à¤¤à¥‡à¤ƒ दिनाङà¥à¤•à¤ƒ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* पà¥à¤¨à¤ƒ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¸à¥à¤¯ दिनाङà¥à¤•à¤ƒ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* शाशà¥à¤µà¤¤à¤‚ URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* पृषà¥à¤ à¤¾à¤µà¥ƒà¤¤à¥à¤¤à¥‡à¤ƒ ID: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/scn.json b/extensions/CiteThisPage/i18n/scn.json index 2c01cb5a..0874963e 100644 --- a/extensions/CiteThisPage/i18n/scn.json +++ b/extensions/CiteThisPage/i18n/scn.json @@ -2,13 +2,16 @@ "@metadata": { "authors": [ "Santu", - "Gmelfi" + "Gmelfi", + "Pippinu", + "Sarvaturi" ] }, - "citethispage": "Muntuazzioni", - "citethispage-desc": "Junci na pàggina spiciali pi li [[Special:Cite|cosi di muntuari]] e nu lijami ntê strumenti", + "citethispage": "Ammintua sta pàggina", + "citethispage-desc": "Agghiunci na pàggina spiciali pî [[Special:CiteThisPage|citazzioni]] e na lijami ntâ sbarra dî strummenti", "citethispage-link": "Muntùa sta pàggina", - "tooltip-citethispage": "Nfurmazzioni su comu citari sta pàggina", - "citethispage-change-submit": "Cria la cosa di muntuari", - "citethispage-change-target": "Pàggina di muntari" + "tooltip-citethispage": "Nfurmazzioni pi comu citari sta pàggina", + "citethispage-change-submit": "Crìa la citazzioni", + "citethispage-change-target": "Pàggina:", + "citethispage-content": "__NOTOC__\n
    \n\n== Dittagghî bibbliugràfici pi {{FULLPAGENAME}} ==\n\n* Nomu dâ pàggina: {{FULLPAGENAME}}\n* Auturi: Li cuntribbutura di {{SITENAME}}\n* Edituri: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data di l'ùrtimu canciamentu: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data dâ cunzurtazzioni: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* URL pirmanenti: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Còdici ID dâ virsioni dâ pàggina: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/sco.json b/extensions/CiteThisPage/i18n/sco.json new file mode 100644 index 00000000..1f7e9c4b --- /dev/null +++ b/extensions/CiteThisPage/i18n/sco.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "AmaryllisGardener" + ] + }, + "citethispage-link": "Cite this page", + "tooltip-citethispage": "Information on hou tae cite this page" +} diff --git a/extensions/CiteThisPage/i18n/sd.json b/extensions/CiteThisPage/i18n/sd.json index 97b9045f..2f474924 100644 --- a/extensions/CiteThisPage/i18n/sd.json +++ b/extensions/CiteThisPage/i18n/sd.json @@ -1,4 +1,10 @@ { - "@metadata": [], - "citethispage": "حواليو" + "@metadata": { + "authors": [ + "Sindhu" + ] + }, + "citethispage": "حواليو", + "citethispage-link": "هن صÙحي جو حوالو Úيو", + "tooltip-citethispage": "هن صÙحي جو حوالو ڪيئن Úجي بابت معلومات" } diff --git a/extensions/CiteThisPage/i18n/sgs.json b/extensions/CiteThisPage/i18n/sgs.json index 86fb9d4e..d68cd0c6 100644 --- a/extensions/CiteThisPage/i18n/sgs.json +++ b/extensions/CiteThisPage/i18n/sgs.json @@ -5,5 +5,7 @@ ] }, "citethispage": "CitoutÄ—", + "citethispage-link": "CÄ—toutÄ— ton poslapi", + "tooltip-citethispage": "PÄiÅ¡kÄ—nÄ—ms, kÄp cÄ—toutÄ— ton poslapi", "citethispage-change-target": "Poslapis:" } diff --git a/extensions/CiteThisPage/i18n/si.json b/extensions/CiteThisPage/i18n/si.json index e191fffc..27c9ae09 100644 --- a/extensions/CiteThisPage/i18n/si.json +++ b/extensions/CiteThisPage/i18n/si.json @@ -2,13 +2,14 @@ "@metadata": { "authors": [ "Budhajeewa", - "නන්දිමිතුරු" + "නන්දිමිතුරු", + "Singhalawap" ] }, "citethispage": "උපන්â€à¶ºà·à·ƒà¶º", "citethispage-desc": "[[Special:Cite|උපහරණ]] විà·à·šà·‚ පිටුවක් හ෠මෙවලම්ගොන්න සබà·à¶³à·’යක් එක්කරයි", - "citethispage-link": "මෙම පිටුව උපන්â€à¶ºà·à·ƒ කරන්න", - "tooltip-citethispage": "මෙම පිටුව උපුට෠දක්වන්නේ කෙසේද යන්න පිළිබඳ තොරතුරු.", + "citethispage-link": "මෙම පිටුව උපුට෠දක්වන්න", + "tooltip-citethispage": "මෙම පිටුව උපුටà·à¶œà·à¶±à·“මක්සේ දක්වන ආකà·à¶»à¶º පිළිබඳ තොරතුරු.", "citethispage-change-submit": "උපන්â€à¶ºà·à·ƒà¶º", "citethispage-change-target": "පිටුව:" } diff --git a/extensions/CiteThisPage/i18n/th.json b/extensions/CiteThisPage/i18n/th.json index 3265fe75..e47d8e69 100644 --- a/extensions/CiteThisPage/i18n/th.json +++ b/extensions/CiteThisPage/i18n/th.json @@ -2,13 +2,14 @@ "@metadata": { "authors": [ "Octahedron80", - "Passawuth" + "Passawuth", + "Horus" ] }, "citethispage": "อ้างอิง", "citethispage-desc": "เพิ่มหน้า[[Special:Cite|อ้างอิง]]พิเศษà¹à¸¥à¸°à¸¥à¸´à¸‡à¸à¹Œà¸šà¸™à¸à¸¥à¹ˆà¸­à¸‡à¹€à¸„รื่องมือ", "citethispage-link": "อ้างอิงหน้านี้", - "tooltip-citethispage": "ข้อมูลเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸§à¸´à¸˜à¸µà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰", + "tooltip-citethispage": "สารสนเทศเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸§à¸´à¸˜à¸µà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰", "citethispage-change-submit": "อ้างอิง", "citethispage-change-target": "หน้า:" } diff --git a/extensions/CiteThisPage/i18n/tl.json b/extensions/CiteThisPage/i18n/tl.json index f5545a55..dbd3ad69 100644 --- a/extensions/CiteThisPage/i18n/tl.json +++ b/extensions/CiteThisPage/i18n/tl.json @@ -1,13 +1,14 @@ { "@metadata": { "authors": [ - "AnakngAraw" + "AnakngAraw", + "Sky Harbor" ] }, "citethispage": "Tukuyin", "citethispage-desc": "Nagdaragdag ng isang natatanging pahinang [[Special:Cite|pampagtutukoy]] at kawing sa kahon (lalagyan) ng kagamitan", - "citethispage-link": "Tukuyin ang pahinang ito", - "tooltip-citethispage": "Kabatiran kung paano tutukuyin ang pahinang ito", + "citethispage-link": "Isangguni ang pahinang ito", + "tooltip-citethispage": "Impormasyon sa kung paano dapat isangguni ang pahinang ito", "citethispage-change-submit": "Tukuyin", "citethispage-change-target": "Pahina:", "citethispage-content": "__NOTOC__\n
    \n\n== Mga detalyeng pangtalaaklatan para sa {{FULLPAGENAME}} ==\n\n* Pangalan ng pahina: {{FULLPAGENAME}}\n* May-akda: {{SITENAME}} contributors\n* Tagapaglathala: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Petsa ng huling pagbabago: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Petsa ng pagbawi: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Pamalagiang URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID ng Bersiyon ng Pahina: {{REVISIONID}}\n\n
    \n " diff --git a/extensions/CiteThisPage/i18n/tr.json b/extensions/CiteThisPage/i18n/tr.json index ea216489..d67792aa 100644 --- a/extensions/CiteThisPage/i18n/tr.json +++ b/extensions/CiteThisPage/i18n/tr.json @@ -4,14 +4,16 @@ "Erkan Yilmaz", "Joseph", "Srhat", - "Uğur Başak" + "Uğur Başak", + "Incelemeelemani", + "Stultiwikia" ] }, "citethispage": "Kaynak göster", "citethispage-desc": "[[Special:Cite|Alıntı]] özel sayfa ve araç kutusu linkini ekler", "citethispage-link": "Sayfayı kaynak göster", - "tooltip-citethispage": "Bu sayfanın nasıl alıntı yapılacağı hakkında bilgi", + "tooltip-citethispage": "Bu sayfadan nasıl alıntı yapılacağı hakkında bilgi", "citethispage-change-submit": "Belirt", "citethispage-change-target": "Sayfa:", - "citethispage-content": "__NOTOC__\n
    İçindekiler: [[#APA stil|APA]] | [[#MLA stil|MLA]] | [[#MHRA stil|MHRA]] | [[#Chicago stil|Chicago]] | [[#CBE/CSE stil|CSE]] | [[#Bluebook stil|Bluebook]] | [[#BibTeX stil|BibTeX]]
    \n\n'''NOTE:''' Most teachers and professionals do not consider encyclopedias citable reference material for most purposes. Wikipedia articles should be used for background information, and as a starting point for further research, but not as a final source for important facts.\n\nAs with any [[Vikipedi:Vikipedi kim yazar|community-built]] reference, there is a possibility for error in Wikipedia's content — please check your facts against multiple sources and read our [[Vikipedi:Genel_Bilgi_Paktı|disclaimers]] for more information.\n\n
    \n\n== \"{{FULLPAGENAME}}\" sayfasının [[bibliyografya|bibliyografik]] detayları ==\n\n* Sayfanın adı: {{FULLPAGENAME}}\n* Yazar(lar): Vikipedi'de katkıda bulunanlar, bak [{{fullurl:{{FULLPAGENAME}}|action=history}} sayfanın geçmişi]\n* Editör: ''{{SITENAME}}, {{MedyaViki:Sitesubtitle}}''. \n* Son düzenleme tarih: {{CURRENTDAY}}. {{CURRENTMONTHNAME}}\n* Son isteme tarih: {{CURRENTYEAR}}, {{CURRENTTIME}} ([[UTC]])\n* Geçerli URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sayfanın versiyon no.: {{REVISIONID}}\n\n
    \n
    \n\n== \"{{FULLPAGENAME}}\" sayfanın kaynak olarak gösterim imkanları ==\n\n=== [[APA]] stil ===\nWikipedia contributors ({{CURRENTYEAR}}). {{FULLPAGENAME}}. ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Retrieved {{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}} from {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA]] stil ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} <{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}>.\n\n=== [[MHRA]] stil ===\nWikipedia contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, <{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}> [accessed {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}]\n\n=== [[Chicago]] stil ===\nWikipedia contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}).\n\n=== [[CBE/CSE]] stil ===\nWikipedia contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}]. Available from: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook]] stil ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}).\n\n=== [[BibTeX]] stil ===\n\n @misc{ wiki:xxx,\n yazar(lar) = \"{{SITENAME}}\",\n başlık = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n yıl = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n not = \"[Online; accessed {{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}]\"\n }\n\nWhen using the [[LaTeX]] package url (\\usepackage{url} somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed {{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}]\"\n }\n\n\n
    \n\n\n[[de:MediaWiki:citethispage-content]]\n[[en:MediaWiki:Cite text]]\n" + "citethispage-content": "__NOTOC__\n
    İçindekiler: [[#APA stilinde|APA]] | [[#MLA stilinde|MLA]] | [[#MHRA stilinde|MHRA]] | [[#Chicago stilinde|Chicago]] | [[#CBE/CSE stilinde|CSE]] | [[#Bluebook stilinde|Bluebook]] | [[#BibTeX stilinde|BibTeX]]
    \n\n'''NOT:''' Çoğu öğretmen ve profesyoneller pek çok amaç için ansiklopedileri atıfta bulunulabilen referans materyaller olarak görmezler. {{SITENAME}} makaleleri daha fazla araştırma için başlangıç noktası ve arka plan bilgileri olarak kullanılmalıdır. Ancak önemli gerçekler için son kaynak olarak görülmemelidir. \n\nHerhangi bir topluluğun ürettiği referans içeriklerde olduğu gibi, {{SITENAME}} makalelerinin içeriğinde de olası hatalar bulunabilir. Lütfen birden fazla kaynaktan doğrulayıp, kontrol ediniz ve daha fazla bilgi için {{SITENAME}} Feragatnamesini okuyunuz. \n\n
    \n\n== \"{{FULLPAGENAME}}\" sayfasının bibliyografik detayları ==\n\n* Sayfanın adı: {{FULLPAGENAME}}\n* Yazar(lar): {{SITENAME}} sitesinde katkıda bulunanlar için [{{fullurl:{{FULLPAGENAME}}|action=history}} sayfanın geçmişine] bakınız.\n* Editör: ''{{SITENAME}}, {{MedyaViki:Sitesubtitle}}''. \n* Son düzenleme tarihi: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}\n* Son istek zamanı: {{CURRENTTIME}}, {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} (UTC)\n* Geçerli URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sayfanın versiyon nu.: {{REVISIONID}}\n\n
    \n
    \n\n== \"{{FULLPAGENAME}}\" sayfasının kaynak olarak gösterim türleri ==\n\n=== [[APA]] stilinde ===\nWikipedia contributors ({{CURRENTYEAR}}). {{FULLPAGENAME}}. ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Retrieved {{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}} from {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA]] stilinde ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} <{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}>.\n\n=== [[MHRA]] stilinde ===\n{{SITENAME}} sitesinde katkıda bulunanlar: '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, <{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}> [accessed {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}]\n\n=== [[Chicago]] stilinde ===\n{{SITENAME}} sitesinde katkıda bulunanlar: \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}).\n\n=== [[CBE/CSE]] stilinde ===\n{{SITENAME}} sitesinde katkıda bulunanlar: {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}]. Kullanılabilir adres: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook]] stilinde ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (son ziyaret {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}).\n\n=== [[BibTeX]] stilinde ===\n\n @misc{ wiki:xxx,\n yazar(lar) = \"{{SITENAME}}\",\n başlık = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n yıl = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n not = \"[Çevrimiçi; erişim {{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}]\"\n }\n\n[[LaTeX]] paketi url adresi kullanımında (giriş bölümündeki \\usepackage{url}) çok daha fazla biçimlendirilmiş web adresleri verelibilir. Bu nedenle aşağıdakileri tercih edebilirsiniz:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Çevrimiçi; erişim {{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}]\"\n }\n\n\n
    " } diff --git a/extensions/CiteThisPage/i18n/uk.json b/extensions/CiteThisPage/i18n/uk.json index e2404c03..291a8f59 100644 --- a/extensions/CiteThisPage/i18n/uk.json +++ b/extensions/CiteThisPage/i18n/uk.json @@ -13,5 +13,5 @@ "tooltip-citethispage": "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ те, Ñк цитувати цю Ñторінку", "citethispage-change-submit": "Процитувати", "citethispage-change-target": "Сторінка:", - "citethispage-content": "__NOTOC__\n
    \n\n== Бібліографічні дані Ñтатті {{FULLPAGENAME}} ==\n\n* Ðазва: {{FULLPAGENAME}}\n* Ðвтор: {{SITENAME}} contributors\n* Опубліковано: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата оÑтанньої зміни: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата цитуваннÑ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ПоÑтійне поÑиланнÑ: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID верÑÑ–Ñ— Ñторінки: {{REVISIONID}}\n\n
    \n " + "citethispage-content": "__NOTOC__\n
    \n\n== Бібліографічні дані Ñтатті {{FULLPAGENAME}} ==\n\n* Ðазва: {{FULLPAGENAME}}\n* Ðвтор: допиÑувачі {{GRAMMAR:genitive|{{SITENAME}}}}\n* Опубліковано: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата оÑтанньої зміни: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата цитуваннÑ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ПоÑтійне поÑиланнÑ: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID верÑÑ–Ñ— Ñторінки: {{REVISIONID}}\n\n
    \n " } diff --git a/extensions/CiteThisPage/i18n/vro.json b/extensions/CiteThisPage/i18n/vro.json new file mode 100644 index 00000000..f6bd9ba5 --- /dev/null +++ b/extensions/CiteThisPage/i18n/vro.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Võrok" + ] + }, + "citethispage-link": "Tsiteeriq seod lehte", + "tooltip-citethispage": "Teedüs tsitiirmisviise kotsilõ" +} diff --git a/extensions/CiteThisPage/i18n/war.json b/extensions/CiteThisPage/i18n/war.json new file mode 100644 index 00000000..1adae350 --- /dev/null +++ b/extensions/CiteThisPage/i18n/war.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "JinJian" + ] + }, + "citethispage-link": "Ig-cite ini nga pakli", + "tooltip-citethispage": "Impormasyon kun uunanhon pag-cite hini nga pakli" +} diff --git a/extensions/CiteThisPage/i18n/wo.json b/extensions/CiteThisPage/i18n/wo.json new file mode 100644 index 00000000..4f20a235 --- /dev/null +++ b/extensions/CiteThisPage/i18n/wo.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Ibou" + ] + }, + "citethispage-link": "Tudd xët wii", + "tooltip-citethispage": "Xibaar ci naka ngay man a tuddee xët wi" +} diff --git a/extensions/CiteThisPage/i18n/wuu.json b/extensions/CiteThisPage/i18n/wuu.json index 014f9b9b..976017ed 100644 --- a/extensions/CiteThisPage/i18n/wuu.json +++ b/extensions/CiteThisPage/i18n/wuu.json @@ -1,7 +1,12 @@ { - "@metadata": [], + "@metadata": { + "authors": [ + "Poiuyt" + ] + }, "citethispage": "引用", "citethispage-link": "引用该篇文章", + "tooltip-citethispage": "有关哪亨引用该页个信æ¯", "citethispage-change-submit": "引用", "citethispage-change-target": "页é¢:" } diff --git a/extensions/CiteThisPage/i18n/xmf.json b/extensions/CiteThisPage/i18n/xmf.json new file mode 100644 index 00000000..ad895f6b --- /dev/null +++ b/extensions/CiteThisPage/i18n/xmf.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Silovan" + ] + }, + "citethispage-link": "თე ხáƒáƒ¡áƒ·áƒšáƒáƒ¨ ციტირáƒáƒ¤áƒ", + "tooltip-citethispage": "ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ თე ხáƒáƒ¡áƒ·áƒšáƒáƒ¨ ციტირáƒáƒ¤áƒáƒ¨áƒ”ნი" +} diff --git a/extensions/CiteThisPage/i18n/yo.json b/extensions/CiteThisPage/i18n/yo.json index 64867132..6086f493 100644 --- a/extensions/CiteThisPage/i18n/yo.json +++ b/extensions/CiteThisPage/i18n/yo.json @@ -4,5 +4,7 @@ "Demmy" ] }, + "citethispage-link": "Ẹ á¹£e ìtá»Ìka ojúewé yìí", + "tooltip-citethispage": "ÃŒdáhùn-ìbéèrè lórí bí a á¹£e le tá»Ìka ojúewé yìí", "citethispage-change-target": "Ojúewé:" } diff --git a/extensions/ConfirmEdit/CHANGELOG.md b/extensions/ConfirmEdit/CHANGELOG.md new file mode 100644 index 00000000..328ef157 --- /dev/null +++ b/extensions/ConfirmEdit/CHANGELOG.md @@ -0,0 +1,9 @@ +ConfirmEdit Changelog +========= + +### Changelog + +#### Version 1.2 + +Fixes bug 46132 - ConfirmEdit fatal error when using MathCaptcha and current Math extension. +See . diff --git a/extensions/ConfirmEdit/ConfirmEdit.alias.php b/extensions/ConfirmEdit/ConfirmEdit.alias.php index e04d8cd8..8a01fd5b 100644 --- a/extensions/ConfirmEdit/ConfirmEdit.alias.php +++ b/extensions/ConfirmEdit/ConfirmEdit.alias.php @@ -19,7 +19,7 @@ $specialPageAliases['ar'] = array( 'Captcha' => array( 'كابتشا' ), ); -/** Egyptian Spoken Arabic (مصرى) */ +/** Egyptian Arabic (مصرى) */ $specialPageAliases['arz'] = array( 'Captcha' => array( 'كابتشا' ), ); @@ -94,9 +94,9 @@ $specialPageAliases['kw'] = array( 'Captcha' => array( 'Captcha' ), ); -/** لوری (لوری) */ +/** Northern Luri (لۊری شومالی) */ $specialPageAliases['lrc'] = array( - 'Captcha' => array( 'رازینه_کپچا' ), + 'Captcha' => array( 'رازینە_کأپچا' ), ); /** Macedonian (македонÑки) */ diff --git a/extensions/ConfirmEdit/ConfirmEdit.php b/extensions/ConfirmEdit/ConfirmEdit.php index 479abb54..8116e5a0 100644 --- a/extensions/ConfirmEdit/ConfirmEdit.php +++ b/extensions/ConfirmEdit/ConfirmEdit.php @@ -30,181 +30,17 @@ * @ingroup Extensions */ -if ( !defined( 'MEDIAWIKI' ) ) { - exit; +if ( function_exists( 'wfLoadExtension' ) ) { + wfLoadExtension( 'ConfirmEdit' ); + // Keep i18n globals so mergeMessageFileList.php doesn't break + $wgMessagesDirs['ConfirmEdit'] = __DIR__ . '/i18n'; + $wgExtensionMessagesFiles['ConfirmEditAlias'] = __DIR__ . '/ConfirmEdit.alias.php'; + /* wfWarn( + 'Deprecated PHP entry point used for ConfirmEdit extension. ' . + 'Please use wfLoadExtension instead, ' . + 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' + ); */ + return; +} else { + die( 'This version of the ConfirmEdit extension requires MediaWiki 1.25+' ); } -if ( !defined( 'MW_SUPPORTS_CONTENTHANDLER' ) ) { - throw Exception( 'This version of ConfirmEdit requires MediaWiki 1.21 or later' ); -} - -$wgExtensionCredits['antispam'][] = array( - 'path' => __FILE__, - 'name' => 'ConfirmEdit', - 'author' => array( 'Brion Vibber', '...' ), - 'url' => 'https://www.mediawiki.org/wiki/Extension:ConfirmEdit', - 'version' => '1.3', - 'descriptionmsg' => 'captcha-desc', - 'license-name' => 'GPL-2.0+', -); - -/** - * The 'skipcaptcha' permission key can be given out to - * let known-good users perform triggering actions without - * having to go through the captcha. - * - * By default, sysops and registered bot accounts will be - * able to skip, while others have to go through it. - */ -$wgGroupPermissions['*' ]['skipcaptcha'] = false; -$wgGroupPermissions['user' ]['skipcaptcha'] = false; -$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false; -$wgGroupPermissions['bot' ]['skipcaptcha'] = true; // registered bots -$wgGroupPermissions['sysop' ]['skipcaptcha'] = true; -$wgAvailableRights[] = 'skipcaptcha'; - -/** - * List of IP ranges to allow to skip the captcha, similar to the group setting: - * "$wgGroupPermission[...]['skipcaptcha'] = true" - * - * Specific IP addresses or CIDR-style ranges may be used, - * for instance: - * $wgCaptchaWhitelistIP = array('192.168.1.0/24', '10.1.0.0/16'); - */ -$wgCaptchaWhitelistIP = false; - -$wgCaptcha = null; -$wgCaptchaClass = 'SimpleCaptcha'; - -/** - * Actions which can trigger a captcha - * - * If the 'edit' trigger is on, *every* edit will trigger the captcha. - * This may be useful for protecting against vandalbot attacks. - * - * If using the default 'addurl' trigger, the captcha will trigger on - * edits that include URLs that aren't in the current version of the page. - * This should catch automated linkspammers without annoying people when - * they make more typical edits. - * - * The captcha code should not use $wgCaptchaTriggers, but CaptchaTriggers() - * which also takes into account per namespace triggering. - */ -$wgCaptchaTriggers = array(); -$wgCaptchaTriggers['edit'] = false; // Would check on every edit -$wgCaptchaTriggers['create'] = false; // Check on page creation. -$wgCaptchaTriggers['sendemail'] = false; // Special:Emailuser -$wgCaptchaTriggers['addurl'] = true; // Check on edits that add URLs -$wgCaptchaTriggers['createaccount'] = true; // Special:Userlogin&type=signup -$wgCaptchaTriggers['badlogin'] = true; // Special:Userlogin after failure - -/** - * You may wish to apply special rules for captcha triggering on some namespaces. - * $wgCaptchaTriggersOnNamespace[][] forces an always on / - * always off configuration with that trigger for the given namespace. - * Leave unset to use the global options ($wgCaptchaTriggers). - * - * Shall not be used with 'createaccount' (it is not checked). - */ -$wgCaptchaTriggersOnNamespace = array(); - -# Example: -# $wgCaptchaTriggersOnNamespace[NS_TALK]['create'] = false; //Allow creation of talk pages without captchas. -# $wgCaptchaTriggersOnNamespace[NS_PROJECT]['edit'] = true; //Show captcha whenever editing Project pages. - -/** - * Indicate how to store per-session data required to match up the - * internal captcha data with the editor. - * - * 'CaptchaSessionStore' uses PHP's session storage, which is cookie-based - * and may fail for anons with cookies disabled. - * - * 'CaptchaCacheStore' uses $wgMemc, which avoids the cookie dependency - * but may be fragile depending on cache configuration. - */ -$wgCaptchaStorageClass = 'CaptchaSessionStore'; - -/** - * Number of seconds a captcha session should last in the data cache - * before expiring when managing through CaptchaCacheStore class. - * - * Default is a half hour. - */ -$wgCaptchaSessionExpiration = 30 * 60; - -/** - * Number of seconds after a bad login that a captcha will be shown to - * that client on the login form to slow down password-guessing bots. - * - * Has no effect if 'badlogin' is disabled in $wgCaptchaTriggers or - * if there is not a caching engine enabled. - * - * Default is five minutes. - */ -$wgCaptchaBadLoginExpiration = 5 * 60; - -/** - * Allow users who have confirmed their email addresses to post - * URL links without being harassed by the captcha. - */ -$ceAllowConfirmedEmail = false; - -/** - * Number of bad login attempts before triggering the captcha. 0 means the - * captcha is presented on the first login. - */ -$wgCaptchaBadLoginAttempts = 3; - -/** - * Regex to whitelist URLs to known-good sites... - * For instance: - * $wgCaptchaWhitelist = '#^https?://([a-z0-9-]+\\.)?(wikimedia|wikipedia)\.org/#i'; - * Local admins can define a whitelist under [[MediaWiki:captcha-addurl-whitelist]] - */ -$wgCaptchaWhitelist = false; - -/** - * Additional regexes to check for. Use full regexes; can match things - * other than URLs such as junk edits. - * - * If the new version matches one and the old version doesn't, - * toss up the captcha screen. - * - * @fixme Add a message for local admins to add items as well. - */ -$wgCaptchaRegexes = array(); - -/** Register special page */ -$wgSpecialPages['Captcha'] = 'CaptchaSpecialPage'; - -$wgMessagesDirs['ConfirmEdit'] = __DIR__ . '/i18n'; -$wgExtensionMessagesFiles['ConfirmEditAlias'] = __DIR__ . "/ConfirmEdit.alias.php"; - -$wgHooks['EditPageBeforeEditButtons'][] = 'ConfirmEditHooks::confirmEditPage'; -$wgHooks['UserCreateForm'][] = 'ConfirmEditHooks::injectUserCreate'; -$wgHooks['AbortNewAccount'][] = 'ConfirmEditHooks::confirmUserCreate'; -$wgHooks['LoginAuthenticateAudit'][] = 'ConfirmEditHooks::triggerUserLogin'; -$wgHooks['UserLoginForm'][] = 'ConfirmEditHooks::injectUserLogin'; -$wgHooks['AbortLogin'][] = 'ConfirmEditHooks::confirmUserLogin'; -$wgHooks['EmailUserForm'][] = 'ConfirmEditHooks::injectEmailUser'; -$wgHooks['EmailUser'][] = 'ConfirmEditHooks::confirmEmailUser'; -$wgHooks['EditPage::showEditForm:fields'][] = 'ConfirmEditHooks::showEditFormFields'; -$wgHooks['EditFilterMergedContent'][] = 'ConfirmEditHooks::confirmEditMerged'; - -if ( !defined( 'MW_EDITFILTERMERGED_SUPPORTS_API' ) ) { - $wgHooks['APIEditBeforeSave'][] = 'ConfirmEditHooks::confirmEditAPI'; -} - -$wgHooks['APIGetAllowedParams'][] = 'ConfirmEditHooks::APIGetAllowedParams'; -$wgHooks['APIGetParamDescription'][] = 'ConfirmEditHooks::APIGetParamDescription'; -$wgHooks['AddNewAccountApiForm'][] = 'ConfirmEditHooks::addNewAccountApiForm'; -$wgHooks['AddNewAccountApiResult'][] = 'ConfirmEditHooks::addNewAccountApiResult'; -$wgHooks['UnitTestsList'][] = 'ConfirmEditHooks::onUnitTestsList'; - -$wgExtensionFunctions[] = 'ConfirmEditHooks::confirmEditSetup'; - -$wgAutoloadClasses['ConfirmEditHooks'] = __DIR__ . '/includes/ConfirmEditHooks.php'; -$wgAutoloadClasses['SimpleCaptcha'] = __DIR__ . '/SimpleCaptcha/Captcha.php'; -$wgAutoloadClasses['CaptchaStore'] = __DIR__ . '/includes/CaptchaStore.php'; -$wgAutoloadClasses['CaptchaSessionStore'] = __DIR__ . '/includes/CaptchaStore.php'; -$wgAutoloadClasses['CaptchaCacheStore'] = __DIR__ . '/includes/CaptchaStore.php'; -$wgAutoloadClasses['CaptchaSpecialPage'] = __DIR__ . '/includes/specials/SpecialCaptcha.php'; diff --git a/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.class.php b/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.class.php index 0de148c2..d36e9149 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.class.php +++ b/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.class.php @@ -14,7 +14,7 @@ class FancyCaptcha extends SimpleCaptcha { if ( !$backend ) { $backend = new FSFileBackend( array( 'name' => 'captcha-backend', - 'wikiId' => wfWikiId(), + 'wikiId' => wfWikiId(), 'lockManager' => new NullLockManager( array() ), 'containerPaths' => array( 'captcha-render' => $wgCaptchaDirectory ), 'fileMode' => 777 @@ -88,19 +88,20 @@ class FancyCaptcha extends SimpleCaptcha { /** * Insert the captcha prompt into the edit form. + * @param OutputPage $out */ - function getForm() { + function getForm( OutputPage $out ) { global $wgOut, $wgEnableAPI; // Uses addModuleStyles so it is loaded when JS is disabled. - $wgOut->addModuleStyles( 'ext.confirmEdit.fancyCaptcha.styles' ); + $out->addModuleStyles( 'ext.confirmEdit.fancyCaptcha.styles' ); $title = SpecialPage::getTitleFor( 'Captcha', 'image' ); $index = $this->getCaptchaIndex(); if ( $wgEnableAPI ) { // Loaded only if JS is enabled - $wgOut->addModules( 'ext.confirmEdit.fancyCaptcha' ); + $out->addModules( 'ext.confirmEdit.fancyCaptcha' ); $captchaReload = Html::element( 'small', @@ -143,9 +144,10 @@ class FancyCaptcha extends SimpleCaptcha { ) ); // tab in before the edit textarea if ( $this->action == 'usercreate' ) { - $form .= HTML::element( 'small',array( + // use raw element, because the message can contain links or some other html + $form .= HTML::rawelement( 'small',array( 'class' => 'mw-createacct-captcha-assisted' - ), wfMessage( 'createacct-imgcaptcha-help' ) + ), wfMessage( 'createacct-imgcaptcha-help' )->parse() ); } $form .= Html::element( 'input', array( diff --git a/extensions/ConfirmEdit/FancyCaptcha/extension.json b/extensions/ConfirmEdit/FancyCaptcha/extension.json index dba07d9b..f4ba4e5f 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/extension.json +++ b/extensions/ConfirmEdit/FancyCaptcha/extension.json @@ -15,15 +15,15 @@ "ResourceModules": { "ext.confirmEdit.fancyCaptcha.styles": { "position": "top", - "targets": [ - "mobile", - "desktop" - ], "styles": "ext.confirmEdit.fancyCaptcha.css" }, "ext.confirmEdit.fancyCaptcha": { "scripts": "ext.confirmEdit.fancyCaptcha.js", - "dependencies": "mediawiki.api" + "dependencies": "mediawiki.api", + "targets": [ + "mobile", + "desktop" + ] }, "ext.confirmEdit.fancyCaptchaMobile": { "scripts": "ext.confirmEdit.fancyCaptcha.js", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ady-cyrl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ady-cyrl.json new file mode 100644 index 00000000..58fa2f71 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ady-cyrl.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "SamGamgee", + "Highlander45temp" + ] + }, + "fancycaptcha-createaccount": "ÐÐºÐºÐ°ÑƒÐ½Ñ‚Ð¼Ñ ÑаутоублÑным ашIоухъумÑнÑу, тыолъÑIу ычIÑгъ плIÑмыем ит гущыIÑÑ…ÑÑ€ итхÑÑ… ([[Special:Captcha/help|къызгурIонÑу...]]):", + "fancycaptcha-reload-text": "КIÑу шIÑ‹" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/af.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/af.json index 88935feb..2a2c7612 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/af.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/af.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Naudefj" + "Naudefj", + "Arnobarnard" ] }, + "fancycaptcha-createaccount": "Om hierdie wiki teen geoutomatiseerde rekeningskepping te beskerm, vra ons u vriendelik om die woorde wat in die boks hieronder vertoon word in te voer ([[Special:Captcha/help|meer inligting]]):", "fancycaptcha-reload-text": "Verfris" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json index 7cb6dd5d..cd7247f1 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json @@ -2,12 +2,14 @@ "@metadata": { "authors": [ "Meno25", - "Ramsis II" + "Ramsis II", + "Ghaly" ] }, "fancycaptcha-addurl": "تعديلك Ùيه لينكات خارجية جديدة\nعلشان تساعد ÙÙ‰ الحماية من السبام الاوتوماتيكى، لو سمحت تكتب الكلمات اللى باينة تحت ÙÙ‰ الصندوء ([[Special:Captcha/help|معلومات زيادة]]):", "fancycaptcha-badlogin": "علشان تساعد ÙÙ‰ الحماية من السرقة الاتوماتيكية للباسورد، لو سمحت تدخل الكلمات اللى باينة تحت ÙÙ‰ الصندوء ([[Special:Captcha/help|معلومات زيادة]]):", - "fancycaptcha-createaccount": "علشان تساعد ÙÙ‰ الحماية من الÙتح الاوتوماتيكى للحسابات،لو سمحت تدخل الكلمات اللى باينة تحت ÙÙ‰ الصندوء ([[Special:Captcha/help|معلومات زيادة]]):", + "fancycaptcha-createaccount": "علشان تساعد ٠الحماية من الÙتح الاوتوماتيكى للحسابات،لو سمحت تدخل الكلمات اللى باينه تحت ٠الصندوء ([[Special:Captcha/help|معلومات زياده]]):", "fancycaptcha-create": "علشان تبتدى صÙحة جديدة، لو سمحت تدخل الكلمات اللى ظاهرة تحت ÙÙ‰ الصندوق\n([[Special:Captcha/help|معلومات زيادة]]):", - "fancycaptcha-edit": "علشان تعدل ÙÙ‰ الصÙحة دى،لو سمحت تكتب الكلمات اللى باينة تحت ÙÙ‰ الصندوء ([[Special:Captcha/help|معلومات زيادة]]):" + "fancycaptcha-edit": "علشان تعدل ÙÙ‰ الصÙحة دى،لو سمحت تكتب الكلمات اللى باينة تحت ÙÙ‰ الصندوء ([[Special:Captcha/help|معلومات زيادة]]):", + "fancycaptcha-reload-text": "تحديث" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json index b3cd7520..292030a6 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json @@ -11,5 +11,7 @@ "fancycaptcha-create": "Pa crear la páxina, por favor escribi nel caxellu les pallabres qu'apaecen embaxo ([[Special:Captcha/help|más información]]):", "fancycaptcha-edit": "Pa editar la páxina, por favor escribi nel caxellu les pallabres qu'apaecen embaxo ([[Special:Captcha/help|más información]]):", "fancycaptcha-sendemail": "Pa protexer la wiki escontra'l corréu puxarra automáticu, pidimos-y qu'escriba nel caxellu les pallabres qu'apaecen embaxo ([[Special:Captcha/help|más información]]):", - "fancycaptcha-reload-text": "Refrescar" + "fancycaptcha-reload-text": "Refrescar", + "apihelp-fancycaptchareload-description": "Solicitar un FancyCaptcha nuevu.", + "apihelp-fancycaptchareload-example-1": "Solicitar un FancyCaptcha nuevu" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/av.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/av.json new file mode 100644 index 00000000..6eacbda3 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/av.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Gazimagomedov" + ] + }, + "fancycaptcha-reload-text": "ЦӀигьабизе" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json index d02714fe..92eab2ea 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json @@ -10,5 +10,6 @@ "fancycaptcha-createaccount": "Иҫәп Ñҙмаларын автоматик булдырыуҙан һаҡлау маҡÑатында, зинһар, күрһәтелгән һүҙҙәрҙе түбәндәге юлға керетегеҙ ([[Special:Captcha/help|тулыраҡ мәғлүмәт]]):", "fancycaptcha-create": "Яңы бит булдырыу Ó©Ñөн, зинһар, күрһәтелгән һүҙҙәрҙе түбәндәге юлға керетегеҙ ([[Special:Captcha/help|тулыраҡ мәғлүмәт]]):", "fancycaptcha-edit": "Был битте мөхәррирләү Ó©Ñөн, зинһар, күрһәтелгән һүҙҙәрҙе түбәндәге юлға керетегеҙ ([[Special:Captcha/help|тулыраҡ мәғлүмәт]]):", - "fancycaptcha-sendemail": "Ðвтоматик Ñпамдан һаҡлау маҡÑатында, зинһар, күрһәтелгән һүҙҙәрҙе түбәндәге юлға керетегеҙ ([[Special:Captcha/help|тулыраҡ мәғлүмәт]]):" + "fancycaptcha-sendemail": "Ðвтоматик Ñпамдан һаҡлау маҡÑатында, зинһар, күрһәтелгән һүҙҙәрҙе түбәндәге юлға керетегеҙ ([[Special:Captcha/help|тулыраҡ мәғлүмәт]]):", + "fancycaptcha-reload-text": "Яңыртыу" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/bho.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bho.json new file mode 100644 index 00000000..b44e05d1 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bho.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "SatyamMishra" + ] + }, + "fancycaptcha-createaccount": "आटोमेटिक खाता बनवले के रोके खातिर आ विकि के मशीन हमला से बचावे खातिर रउआठसे बाकस की नीचे लउकत शबà¥à¤¦ डाले के अनà¥à¤°à¥‹à¤§ बा ([[Special:Captcha/help|अउरी जानकारी]]):", + "fancycaptcha-reload-text": "रिफà¥à¤°à¥‡à¤¶" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json index 4c82c2c2..a9040073 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json @@ -2,12 +2,13 @@ "@metadata": { "authors": [ "CERminator", - "DzWiki" + "DzWiki", + "Semso98" ] }, - "fancycaptcha-addurl": "VaÅ¡a izmjena ukljuÄuje nove vanjske linkove.\nDa bi se zaÅ¡titili od automatskog spama, molimo da unesete rijeÄi koje su prikazane u kutiji ([[Special:Captcha/help|viÅ¡e informacija]]):", + "fancycaptcha-addurl": "VaÅ¡a izmjena ukljuÄuje nove vanjske linkove.\nDa bi se zaÅ¡titili wiki od automatskog spama, molimo da unesete rijeÄi koje su prikazane u kutiji ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "fancycaptcha-badlogin": "Da bi pomogli u sprjeÄavanju protiv automatskog probijanja Å¡ifre, molimo Vas da unesete rijeÄi koje su prikazane ispod u kutiji ([[Special:Captcha/help|viÅ¡e informacija]]):", - "fancycaptcha-createaccount": "Da bi pomogli u sprjeÄavanju automatskog pravljenja raÄuna, molimo Vas da unesete rijeÄi koje su prikazane u kutiji ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", + "fancycaptcha-createaccount": "Da bi zaÅ¡titili wiki od automatiziranog pravljenja raÄuna, ljubazno Vas molimo da unesete rijeÄi koje će se pojaviti u kutiji ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "fancycaptcha-create": "Da bi ste napravili stranicu, molimo Vas unesite rijeÄi koje su prikazane u kutiji ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "fancycaptcha-edit": "Da bi ste ureÄ‘ivali ovu stranicu, molimo Vas unesite rijeÄi koje su prikazane u kutiji ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "fancycaptcha-sendemail": "Da bi pomogli u sprjeÄavanju protiv automatskog spamovanja, molimo Vas da unesete rijeÄi koje su prikazane ispod u kutiji ([[Special:Captcha/help|viÅ¡e informacija]]):", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json index f8f8eb76..6a17fa25 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json @@ -1,8 +1,9 @@ { "@metadata": { "authors": [ - "Yejianfei" + "Yejianfei", + "å”å‰è¨¶å¾·çš„ä¾å¾ž" ] }, - "fancycaptcha-badlogin": "為ð¡…ä¿è­·ç¶­åŸºç™¾ç§‘å…å—自動化其密碼破解,儂家誠摯其起動æ±è¼¸åº•ä¸‹åº•æ–¹æ¡†åº•è£¡å…¶é©—證碼([[Special:Captcha/help|更価信æ¯]]):" + "fancycaptcha-badlogin": "為ð¡…é¿å…維基百科乞自動化其密碼破解,儂家起動æ±æ‹å‡ºä¸‹åº•æ–¹æ¡†è£¡å‹¢å…¶é©—證碼([[Special:Captcha/help|更価信æ¯]]):" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json index 6d529037..6ba7a527 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json @@ -4,5 +4,6 @@ "Asoxor" ] }, - "fancycaptcha-createaccount": "بۆ یارمەتیدانی بەرگری Ù„Û• دروستکردنی خۆکاری ھەژمار، تکایە ئەو وشانە Ù„Û• خوارەوەدا دیارن Ù„Û• بۆکسەکەدا بنووسە ([[Special:Captcha/help|زانیاریی زۆرتر]]):" + "fancycaptcha-createaccount": "بۆ پاراستنی ویکییەکە Ù„Û• دروستکردنی ھەژمار بە Ø´ÛŽÙˆÛ•ÛŒ ئۆتۆماتیکی، تکات Ù„ÛŽ دەکەین ئەو وشانەی Ú©Û• Ù„Û• چوارچێوەکەدان داخل بکە ([[Special:Captcha/help|زانیاریی زیاتر]]):", + "fancycaptcha-reload-text": "نوێکردنەوە" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/dty.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/dty.json new file mode 100644 index 00000000..5a4b0773 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/dty.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "रमेश सिंह बोहरा", + "जनक राज भटà¥à¤Ÿ", + "राम पà¥à¤°à¤¸à¤¾à¤¦ जोशी" + ] + }, + "fancycaptcha-createaccount": "विकिलाई आफॠमनपरी बनौनà¥à¤¯à¤¾ खाताबठे बचाउनलाई हाम तमलाई तलका बकसमी धेकिया वेबमी जान बिनमà¥à¤° अनà¥à¤°à¥‹à¤§ गधौ: ([[Special:Captcha/help|अधिक जानकारी]]):", + "fancycaptcha-reload-text": "ताजागदà¥à¤¯à¥à¤¯à¤¾" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/el.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/el.json index 4ad1ab9b..4c0b35e8 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/el.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/el.json @@ -9,11 +9,11 @@ "Evropi" ] }, - "fancycaptcha-addurl": "Η επεξεÏγασία σας πεÏιλαμβάνει νέους εξωτεÏικοÏÏ‚ σÏνδεσμους.\nΩς βοήθεια για την Ï€Ïοστασία από αυτόματα spam, παÏακαλοÏμε γÏάψτε τις λέξεις που εμφανίζονται παÏακάτω στο πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", + "fancycaptcha-addurl": "Η επεξεÏγασία σας πεÏιλαμβάνει νέους εξωτεÏικοÏÏ‚ συνδέσμους.\nΩς βοήθεια για την Ï€Ïοστασία του wiki από αυτόματα spam, παÏακαλοÏμε γÏάψτε τις λέξεις που εμφανίζονται παÏακάτω στο πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", "fancycaptcha-badlogin": "Ως βοήθεια για την Ï€Ïοστασία από αυτόματα Ï€ÏογÏάμματα σπασίματος κωδικών, παÏακαλοÏμε γÏάψτε τις λέξεις που εμφανίζονται παÏακάτω στο πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", "fancycaptcha-createaccount": "Για την Ï€Ïοστασία του wiki ενάντια σε αυτοματοποιημένη δημιουÏγία λογαÏιασμών, σας παÏακαλοÏμε ευγενικά να εισάγετε τις λέξεις που εμφανίζονται κάτω από το πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", "fancycaptcha-create": "Για να δημιουÏγήσετε αυτήν την σελίδα, παÏακαλώ εισάγετε τις λέξεις που εμφανίζονται παÏακάτω μέσα στο κουτί\n([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", "fancycaptcha-edit": "Για να επεξεÏγαστείτε αυτήν την σελίδα, παÏακαλώ εισάγετε τις λέξεις που εμφανίζονται παÏακάτω μέσα στο κουτί\n([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", - "fancycaptcha-sendemail": "Ως βοήθεια για την Ï€Ïοστασία από αυτόματα Ï€ÏογÏάμματα σπασίματος κωδικών, παÏακαλοÏμε γÏάψτε τις λέξεις που εμφανίζονται παÏακάτω στο πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", + "fancycaptcha-sendemail": "Ως βοήθεια για την Ï€Ïοστασία του wiki από αυτόματα Ï€ÏογÏάμματα σπασίματος κωδικών, παÏακαλοÏμε γÏάψτε τις λέξεις που εμφανίζονται παÏακάτω στο πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", "fancycaptcha-reload-text": "Ανανέωση" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/es.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/es.json index 035e9ca5..2deeff4b 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/es.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/es.json @@ -10,11 +10,13 @@ "Macofe" ] }, - "fancycaptcha-addurl": "Tu edición incluye nuevos enlaces externos. \nPara protegernos contra el spam automatizado, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", - "fancycaptcha-badlogin": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):", - "fancycaptcha-createaccount": "Para proteger el wiki contra la creación automática de cuentas, te pedimos amablemente que escribas en la caja las palabras que se muestran debajo ([[Special:Captcha/help|más información]]):", - "fancycaptcha-create": "Para crear la página, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", - "fancycaptcha-edit": "Para editar esta página, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", - "fancycaptcha-sendemail": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):", - "fancycaptcha-reload-text": "Actualizar" + "fancycaptcha-addurl": "Tu edición incluye enlaces externos nuevos. \nPara protegernos contra el spam automatizado, escribe en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", + "fancycaptcha-badlogin": "Para proteger el wiki del descifrado de contraseñas automatizado, escribe en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", + "fancycaptcha-createaccount": "Para proteger el wiki contra la creación automática de cuentas, escribe en el recuadro las palabras que se muestran debajo ([[Special:Captcha/help|más información]]):", + "fancycaptcha-create": "Para crear la página, escribe en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", + "fancycaptcha-edit": "Para editar esta página, escribe en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", + "fancycaptcha-sendemail": "Para proteger el wiki contra el spam automatizado, escribe en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", + "fancycaptcha-reload-text": "Actualizar", + "apihelp-fancycaptchareload-description": "Obtener un FancyCaptcha nuevo.", + "apihelp-fancycaptchareload-example-1": "Obtener un FancyCaptcha nuevo" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/et.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/et.json index 0b88b3b1..19eb44c4 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/et.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/et.json @@ -11,5 +11,7 @@ "fancycaptcha-create": "Lehekülje loomiseks sisesta palun allpool olevas kastis kuvatud sõnad ([[Special:Captcha/help|lisateave]]):", "fancycaptcha-edit": "Selle lehekülje muutmiseks sisesta palun allpool olevas kastis kuvatud sõnad ([[Special:Captcha/help|lisateave]]):", "fancycaptcha-sendemail": "Palun sisesta allpool olevas kastis kuvatud sõnad. Abinõu on kaitseks automaadistatud rämpsmuudatuste vastu ([[Special:Captcha/help|lisateave]]):", - "fancycaptcha-reload-text": "Vaheta" + "fancycaptcha-reload-text": "Vaheta", + "apihelp-fancycaptchareload-description": "Uue FancyCaptcha hankimine.", + "apihelp-fancycaptchareload-example-1": "Hangi uus FancyCaptcha" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json index 52b23336..c2932b27 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json @@ -6,7 +6,8 @@ "Ladsgroup", "Meisam", "Reza1615", - "Wayiran" + "Wayiran", + "Ùلورانس" ] }, "fancycaptcha-addurl": "ویرایش شما حاوی پیوند به بیرون جدیدی است.\nبرای جلوگیری از هرزنگاری خودکار ویکی، ما با احترام از شما می‌خواهیم واژه‌ای را Ú©Ù‡ در تصویر می‌بینید در جعبهٔ زیر وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):", @@ -15,5 +16,7 @@ "fancycaptcha-create": "برای ایجاد این صÙحه، لطÙاً واژه‌ای را Ú©Ù‡ در تصویر می‌بینید وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):", "fancycaptcha-edit": "برای ویرایش این صÙحه، لطÙاً واژه‌ای را Ú©Ù‡ در تصویر می‌بینید وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):", "fancycaptcha-sendemail": "برای Ú©Ù…Ú© به محاÙظت در برابر هرزه‌نگاری خودکار، ما با احترام از شما می‌خواهیم واژه‌هایی را Ú©Ù‡ در جعبهٔ زیر نمایش داده می‌شوند وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):", - "fancycaptcha-reload-text": "تازه‌کردن" + "fancycaptcha-reload-text": "تازه کردن", + "apihelp-fancycaptchareload-description": "یک FancyCaptcha جدید بیاور.", + "apihelp-fancycaptchareload-example-1": "یک FancyCaptcha جدید بیاور." } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json index d44078d6..2fc58c2d 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json @@ -6,5 +6,6 @@ ] }, "fancycaptcha-addurl": "Tín rætting inniheldur nýggjar uttanhýsis slóðir.\nFyri at verja wikiina ímóti sjálvvirkandi kontoupprættan, vilja vit vinarliga biðja teg um at skriva inn tey orð, sum koma fyri í teiginum niðanfyri, til tess at stovna eina konto:
    ([[Special:Captcha/help|meira kunning]]):", - "fancycaptcha-createaccount": "Fyri at verja wikiina ímóti sjálvvirkandi kontoupprættan, vilja vit vinarliga biðja teg um at skriva inn tey orð, sum koma fyri í teiginum niðanfyri, so at tú kanst stovna eina konto:\n([[Special:Captcha/help|meira kunning]]):" + "fancycaptcha-createaccount": "Fyri at verja wikiina ímóti sjálvvirkandi kontoupprættan, vilja vit vinarliga biðja teg um at skriva inn tey orð, sum koma fyri í teiginum niðanfyri, so at tú kanst stovna eina konto:\n([[Special:Captcha/help|meira kunning]]):", + "fancycaptcha-reload-text": "Dagfør" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/gd.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gd.json new file mode 100644 index 00000000..9b8dce15 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gd.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "GunChleoc" + ] + }, + "fancycaptcha-createaccount": "Gus an uicidh a dhìon an aghaidh cruthachadh chunntasan fèin-obrachail, bu mhiann leinn gun cuir thu na faclan a-steach a chì thu fon bhogsa ([[Special:Captcha/help|barrachd fiosrachaidh]]):" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json index 72b667b7..4e9463c3 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Darshan kandolkar" + "Darshan kandolkar", + "Vaishali Parab" ] }, + "fancycaptcha-createaccount": "सà¥à¤µà¤¯à¤‚चलीत वांगडी नोंद करपासावन वाचपा खातीर आमी तà¥à¤®à¤šà¥‡à¤•à¤¡à¥‡à¤¨ मागणी करता, सकयल दिलà¥à¤²à¥€à¤‚ उतरां बॉकà¥à¤¸à¤¾à¤‚त बरयात. ([[Special:Captcha/help|चड मà¥à¤¹à¤¾à¤¯à¤¤à¥€]]):", "fancycaptcha-reload-text": "ताजें करात" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-latn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-latn.json new file mode 100644 index 00000000..024ec918 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-latn.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "The Discoverer" + ] + }, + "fancycaptcha-badlogin": "Swaysanchalit gupitutor crack korpasavn vachchea khatir, ami tumche kode magtat ki khala dil'lim utram boxant boroiat ([[Special:Captcha/help|anik mahiti]]):", + "fancycaptcha-createaccount": "Swaysanchalit vangdi nond korpasavn vachchea khatir, ami tumche kode magtat ki khala dil'lim utram boxant boroiat ([[Special:Captcha/help|anik mahiti]]):", + "fancycaptcha-reload-text": "Tajem korat" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json index 2c27d4ae..f2c8ae74 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json @@ -8,8 +8,9 @@ }, "fancycaptcha-addurl": "In Dyynere Bearbeitig het s neiji externi Link.\nZum Schutz vor automatisiertem Spamming gib des Wort in s Fäld unten yy. Druck derno nomol uf „Syte spychere“. [[Special:Captcha/help|(Frogen oder Probläm?)]]", "fancycaptcha-badlogin": "Zum Schutz vor ere Kompromittierig vu Dyynm Benutzerkonto gib des Wort in s Fäld unten yy [[Special:Captcha/help|(Frogen oder Probläm?)]]:", - "fancycaptcha-createaccount": "Zum Schutz vor ere automatisierte Aalag vu Benutzerkonte gib bitte des Wort in s Fäld unten yy ([[Special:Captcha/help|Frogen oder Probläm?]]):", + "fancycaptcha-createaccount": "Zum Schutz vum Wiki vor ere automatisierte Aalag vu Benutzerkonte gib bitte des Wort in s Fäld unten yy ([[Special:Captcha/help|Frogen oder Probläm?]]):", "fancycaptcha-create": "Zum d Syten aalege gib des Wort in s Fäld unten yy. [[Special:Captcha/help|(Frogen oder Probläm?)]]", "fancycaptcha-edit": "Zum d Syte bearbeite gib des Wort in s Fäld unten yy. [[Special:Captcha/help|(Frogen oder Probläm?)]]", - "fancycaptcha-sendemail": "As Schutz gege e automatischs Spamming, gib bitte des Wort in s Fäld unten yy ([[Special:Captcha/help|meh Informatione]]):" + "fancycaptcha-sendemail": "As Schutz gege e automatischs Spamming, gib bitte des Wort in s Fäld unten yy ([[Special:Captcha/help|meh Informatione]]):", + "fancycaptcha-reload-text": "nej lade" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json index 03c46f94..13890937 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json @@ -3,7 +3,8 @@ "authors": [ "Ashok modhvadia", "Dsvyas", - "Sushant savla" + "Sushant savla", + "Arbhatt" ] }, "fancycaptcha-addurl": "તમે કરેલા ફેરફારોમાં નવી બાહà«àª¯ કડીઓ સામેલ છે. \nવિકિને સà«àªµàªšàª¾àª²àª¿àª¤ સà«àªªà«‡àª®/સà«àªªàª¾àª®(spam)થી બચાવવા માટે અમે તમને જણાવીઠછીઠકે કૃપયા નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજà«àª¨àª¾ ખાનામાં લખો.\n([[Special:Captcha/help|વધૠવિગત]]):", @@ -11,5 +12,6 @@ "fancycaptcha-createaccount": "આપોઆપ નવા ખાતા ખà«àª²àª¤àª¾ રોકવા અને વિકીને તેનાથી બચાવવા માટે. અમે તમને જણાવીઠછીઠકે કૃપયા નીચે દેખાતા શબà«àª¦à«‹ ખાનામાં લખો. ([[Special:Captcha/help|વધૠમાહિતી]]):", "fancycaptcha-create": "પાનà«àª‚ બનાવવા માટે નીચે દેખાતા શબà«àª¦à«‹ ખાનામાં ટાઈપ કરો ([[Special:Captcha/help|વધૠમાહિતી]]):", "fancycaptcha-edit": "આ પાનામાં ફેરફાર કરવા માટે નીચે દેખાતા શબà«àª¦à«‹ ખાનામાં ટાઈપ કરો ([[Special:Captcha/help|વધૠમાહિતી]]):", - "fancycaptcha-sendemail": "વિકિને આપોઆપ થતી સà«àªªà«…મીંગથી બચાવવા માટે. અમે તમને જણાવીઠછીઠકે કૃપયા નીચે આપેલા શબà«àª¦ તેની બાજà«àª¨àª¾ ખાનામાં લખો ([[Special:Captcha/help|વધૠમાહિતી]]):" + "fancycaptcha-sendemail": "વિકિને આપોઆપ થતી સà«àªªà«…મીંગથી બચાવવા માટે. અમે તમને જણાવીઠછીઠકે કૃપયા નીચે આપેલા શબà«àª¦ તેની બાજà«àª¨àª¾ ખાનામાં લખો ([[Special:Captcha/help|વધૠમાહિતી]]):", + "fancycaptcha-reload-text": "પà«àª¨àªƒ તાજà«àª‚" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/he.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/he.json index 22b66574..28aad5b7 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/he.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/he.json @@ -13,5 +13,7 @@ "fancycaptcha-create": "כדי ליצור ×ת הדף, × × ×œ×”×§×œ×™×“ ×ת ×”×ž×™×œ×™× ×”×ž×•×¤×™×¢×•×ª בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):", "fancycaptcha-edit": "כדי לערוך ×ת הדף, × × ×œ×”×§×œ×™×“ ×ת ×”×ž×™×œ×™× ×”×ž×•×¤×™×¢×•×ª בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):", "fancycaptcha-sendemail": "×›×”×’× ×” מפני ספ×× ×וטומטי, × × ×œ×”×§×œ×™×“ ×ת ×”×ž×™×œ×™× ×”×ž×•×¤×™×¢×•×ª בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):", - "fancycaptcha-reload-text": "רענון" + "fancycaptcha-reload-text": "רענון", + "apihelp-fancycaptchareload-description": "קבלת FancyCaptcha חדשה.", + "apihelp-fancycaptchareload-example-1": "קבלת FancyCaptcha חדשה" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json index 3dc47f3b..df653631 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Kaustubh", - "Siddhartha Ghai" + "Siddhartha Ghai", + "Hindustanilanguage" ] }, "fancycaptcha-addurl": "आपके समà¥à¤ªà¤¾à¤¦à¤¨ में नई बाहरी कड़ियाठहैं।\nसà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ सà¥à¤ªà¥…म से बचाव में सहायता के लिये नीचे दिये हà¥à¤ शबà¥à¤¦ बकà¥à¤¸à¥‡ में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):", @@ -10,5 +11,7 @@ "fancycaptcha-createaccount": "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ सदसà¥à¤¯ पंजीकरण से बचाव के लिये हम आपसे निवेदन करते हैं की नीचे दिये शबà¥à¤¦ बकà¥à¤¸à¥‡ में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):", "fancycaptcha-create": "यह पृषà¥à¤  बनाने के लिये कृपया नीचे दिये शबà¥à¤¦ बकà¥à¤¸à¥‡ में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):", "fancycaptcha-edit": "यह पृषà¥à¤  बदलने के लिये, नीचे दिखने वाले अकà¥à¤·à¤° टेकà¥à¤¸à¥à¤Ÿ बकà¥à¤¸à¥‡à¤®à¥‡à¤‚ लिखें ([[Special:Captcha/help|अधिक जानकारी]]):", - "fancycaptcha-reload-text": "रिफ़à¥à¤°à¥‡à¤¶" + "fancycaptcha-reload-text": "रिफ़à¥à¤°à¥‡à¤¶", + "apihelp-fancycaptchareload-description": "नया लà¥à¤­à¤¾à¤µà¤¨à¤¾-कैपचा पà¥à¤°à¤¾à¤ªà¥à¤¤ करें।", + "apihelp-fancycaptchareload-example-1": "नया लà¥à¤­à¤¾à¤µà¤¨à¤¾-कैपचा पà¥à¤°à¤¾à¤ªà¥à¤¤ करें।" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json index 2df395fd..dd66d3b7 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Xelgen" + "Xelgen", + "Ô´Õ¡Õ¾Õ«Õ© ÕÕ¡Ö€Õ¸ÕµÕ¡Õ¶" ] }, + "fancycaptcha-createaccount": "ÕŽÕ«Ö„Õ«Õ¶ Õ´Õ¡Õ½Õ¶Õ¡Õ¯ÖÕ¡ÕµÕ«Õ¶ Õ°Õ¡Õ·Õ«Õ¾Õ¶Õ¥Ö€Õ« Õ¡Õ¾Õ¿Õ¸Õ´Õ¡Õ¿ Õ£Ö€Õ¡Õ¶ÖÕ¸Ö‚Õ´Õ«Ö ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¥Õ¬Õ¸Ö‚ Õ¶ÕºÕ¡Õ¿Õ¡Õ¯Õ¸Õ¾, Õ­Õ¶Õ¤Ö€Õ¸Ö‚Õ´ Õ¥Õ¶Ö„ ÕÕ¥Õ¦ Õ£Ö€Õ¥Õ¬ Õ¶Õ¥Ö€Ö„Ö‡Õ« Õ¿Õ¸Ö‚ÖƒÕ¸Ö‚Õ´ Õ£Ö€Õ¾Õ¡Õ® Õ¢Õ¡Õ¼Õ¥Ö€Õ¨ ([[Special:Captcha/help|Õ«Õ´Õ¡Õ¶Õ¡Õ¬ Õ¡Õ¾Õ¥Õ¬Õ«Õ¶]])Ö‰", "fancycaptcha-reload-text": "Õ„Õ¥Õ¯ Õ¡ÕµÕ¬" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json index 5c4e1ea6..df154395 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json @@ -10,5 +10,7 @@ "fancycaptcha-create": "Tapno makaaramid ti panid, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):", "fancycaptcha-edit": "Tapno makaurnos daytoy a panid, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):", "fancycaptcha-sendemail": "Tapno makasalakniban ti wiki kadagiti automatiko a panag-spam, naemmakami nga agdawat nga ikabilmo dagiti balikas nga agparang dita baba iti kahon ([[Special:Captcha/help|adu pay a pakaammo]]):", - "fancycaptcha-reload-text": "Pasadiwaen" + "fancycaptcha-reload-text": "Pasadiwaen", + "apihelp-fancycaptchareload-description": "Mangala iti baro a FancyCaptcha.", + "apihelp-fancycaptchareload-example-1": "Mangala iti baro a FancyCaptcha" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json index 7ac5c734..c8c21539 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json @@ -4,7 +4,8 @@ "Aotake", "Fryed-peach", "Marine-Blue", - "Shirayuki" + "Shirayuki", + "Takot" ] }, "fancycaptcha-desc": "Confirm Edit 用ã®è£…飾的㪠CAPTCHA ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼", @@ -14,5 +15,7 @@ "fancycaptcha-create": "ページを新è¦ä½œæˆã™ã‚‹ã«ã¯ã€ä¸‹è¨˜ã®ç¢ºèªç”¨ã®æ–‡å­—列を欄ã«å…¥åŠ›ã—ã¦ãã ã•ã„ ([[Special:Captcha/help|詳細]]):", "fancycaptcha-edit": "ã“ã®ãƒšãƒ¼ã‚¸ã‚’編集ã™ã‚‹ã«ã¯ã€ä¸‹è¨˜ã®ç¢ºèªç”¨ã®æ–‡å­—列を欄ã«å…¥åŠ›ã—ã¦ãã ã•ã„ ([[Special:Captcha/help|詳細]]):", "fancycaptcha-sendemail": "ウィキã¸ã®è‡ªå‹•ã‚¹ãƒ‘ム攻撃を防ããŸã‚ã€ãŠæ‰‹æ•°ã‚’ãŠã‹ã‘ã—ã¾ã™ãŒä¸‹è¨˜ã®ç¢ºèªç”¨ã®æ–‡å­—列を欄ã«å…¥åŠ›ã—ã¦ãã ã•ã„ ([[Special:Captcha/help|詳細]]):", - "fancycaptcha-reload-text": "æ›´æ–°" + "fancycaptcha-reload-text": "æ›´æ–°", + "apihelp-fancycaptchareload-description": "æ–°ã—ã„ FancyCaptcha ã‚’å–å¾—", + "apihelp-fancycaptchareload-example-1": "æ–°ã—ã„ FancyCaptcha ã‚’å–å¾—" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json index 9b35bb77..36e909fc 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json @@ -2,12 +2,13 @@ "@metadata": { "authors": [ "Christian List", - "HuslÃ¥ke" + "HuslÃ¥ke", + "Jyllanj" ] }, "fancycaptcha-addurl": "Din ændring tilføjer nye eksterne henvisninger. For at beskytte mod automatiseret spam, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):", - "fancycaptcha-badlogin": "For at beskytte mod automatiske forsøg pÃ¥ at gætte adgangskoden, skal du indtaste ordet som vises i feltet nedenfor. ([[Special:Captcha/help|mere information]]):", - "fancycaptcha-createaccount": "For at beskytte mod automatisk oprettelse af brugernavne, der bruges til spam, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):", - "fancycaptcha-create": "For at oprette en ny side, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):", - "fancycaptcha-edit": "or at redigere denne side\n([[Special:Captcha/help|more info]]):" + "fancycaptcha-badlogin": "For Ã¥ beskøtt mod automatisk forsyeg pÃ¥ Ã¥ djiet adgÃ¥ngskoden, skal du intast uerden som wises i feltje nierfor. ([[Special:Captcha/help|mier informasjon]]):", + "fancycaptcha-createaccount": "For Ã¥ beskøtt mod automatisk oprettels Ã¥ brugenaun, som bruges te spam, skal du intast uerde som wises nierfor i feltje unje dä. ([[Special:Captcha/help|mier informasjon]]):", + "fancycaptcha-create": "For Ã¥ oprett en ny siid, skal du intast uerde som wises nierfor i feltje unje dä. ([[Special:Captcha/help|mier informasjon]]):", + "fancycaptcha-edit": "For Ã¥ redigiir siden, skal du intast uerden, som stor i feltje nierfor ([[Special:Captcha/help|mier informasjon]]):" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json index 0eb4f32f..6ee6ff25 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json @@ -6,7 +6,7 @@ }, "fancycaptcha-addurl": "Түзетуіңізде жаңа Ñыртқы Ñілтемелер бар екен. Өздік түрде «Ñпам» жаÑалуынан қорғану үшін,\nтөмендегі көрÑетілген Ñөздерді аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):", "fancycaptcha-badlogin": "ÒšÒ±Ð¿Ð¸Ñ Ñөзді өздікті бұздырудан қорғану үшін, төмендегі\nкөрÑетілген Ñөздерді аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):", - "fancycaptcha-createaccount": "Жаңа тіркелгі өздікті жаÑалуынан қорғану үшін, төмендегі\nкөрÑетілген Ñөздерді аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):", + "fancycaptcha-createaccount": "Жаңа тіркелгі өздікті жаÑалуынан қорғану үшін, төмендегі\nкөрÑетілген Ñөздерді аумаққа енгізіңіз ([[Special:Captcha/help|көбірек ақпарат]]):", "fancycaptcha-create": "Түзетуіңізде жаңа Ñыртқы Ñілтемелер бар екен. Өздік түрде «Ñпам» жаÑалуынан қорғану үшін,\nтөмендегі көрÑетілген Ñөздерді аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):", "fancycaptcha-edit": "Түзетуіңізде жаңа Ñыртқы Ñілтемелер бар екен. Өздік түрде «Ñпам» жаÑалуынан қорғану үшін,\nтөмендегі көрÑетілген Ñөздерді аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):", "fancycaptcha-reload-text": "Жаңарту" diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/km.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/km.json index a5035e0b..6700d186 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/km.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/km.json @@ -5,9 +5,10 @@ "គីមស៊្រុន" ] }, - "fancycaptcha-addurl": "កំណែប្រែរបស់អ្នកមានážáŸ†ážŽáž—្ជាប់ážáž¶áž„ក្រៅ។\n\nដើម្បីការពារពីស្ប៉ាមស្វáŸáž™áž”្រវážáŸ’ážáž· សូមបញ្ជូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", + "fancycaptcha-addurl": "កំណែប្រែរបស់អ្នកមានážáŸ†ážŽáž—្ជាប់ážáž¶áž„ក្រៅ។\n\nដើម្បីការពារវិគីពីស្ប៉ាមស្វáŸáž™áž”្រវážáŸ’ážáž· សូមវាយបញ្ចូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", "fancycaptcha-badlogin": "ដើម្បីការពារការបំបែកពាក្យសម្ងាážáŸ‹ážŠáŸ„យស្វáŸáž™áž”្រវážáŸ’ážáž· សូមបញ្ជូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", - "fancycaptcha-createaccount": "ដើម្បីការពារការបង្កើážáž‚ណនីដោយស្វáŸáž™áž”្រវážáŸ’ážáž· សូមបញ្ជូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", + "fancycaptcha-createaccount": "ដើម្បីការពារការបង្កើážáž‚ណនីដោយស្វáŸáž™áž”្រវážáŸ’ážáž· សូមវាយបញ្ចូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", "fancycaptcha-create": "ដើម្បីបង្កើážáž‘ំពáŸážšáž“áŸáŸ‡ សូមបញ្ជូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", - "fancycaptcha-edit": "ដើម្បីកែប្រែទំពáŸážšáž“áŸáŸ‡ សូមបញ្ជូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖" + "fancycaptcha-edit": "ដើម្បីកែប្រែទំពáŸážšáž“áŸáŸ‡ សូមវាយបញ្ចូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", + "fancycaptcha-sendemail": "ដើម្បីការពារវិគីពីស្ប៉ាមស្វáŸáž™áž”្រវážáŸ’ážáž· សូមវាយបញ្ចូលពាក្យážáž¶áž„ក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json index bf3ee0de..e9028cd6 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json @@ -13,5 +13,7 @@ "fancycaptcha-create": "문서를 만드려면 ì•„ëž˜ì˜ ìƒìž ì•ˆì— ìžˆëŠ” 낱ë§ì„ 입력해주세요 ([[Special:Captcha/help|ìžì„¸í•œ ì •ë³´]]):", "fancycaptcha-edit": "ì´ ë¬¸ì„œë¥¼ 편집하려면 ì•„ëž˜ì˜ ìƒìž ì•ˆì— ìžˆëŠ” 낱ë§ì„ 입력해주세요 ([[Special:Captcha/help|ìžì„¸í•œ ì •ë³´]]):", "fancycaptcha-sendemail": "ìžë™í™”ëœ ìŠ¤íŒ¸ìœ¼ë¡œë¶€í„° 위키를 보호하기 위해, 친절하게 요청하며 아래 ìƒìžì— 나타나는 낱ë§ì„ 입력해주세요 ([[Special:Captcha/help|ìžì„¸í•œ ì •ë³´]]):", - "fancycaptcha-reload-text": "새로 고침" + "fancycaptcha-reload-text": "새로 고침", + "apihelp-fancycaptchareload-description": "새 FancyCaptcha를 얻습니다.", + "apihelp-fancycaptchareload-example-1": "새 FancyCaptcha 얻기" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json index 1e7e16b6..2c3ae2c3 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json @@ -4,7 +4,7 @@ "Purodha" ] }, - "fancycaptcha-desc": "Määt e nett Käptsche för dä Confirm Edit Projramm-Zohsatz", + "fancycaptcha-desc": "Määt e nett Kaptscha för dä Confirm Edit Projramm-Zohsatz\n", "fancycaptcha-addurl": "Do häß neuje Lengks op frembde Websigge dobei jedonn.\nMer schöze ons Wiki jäje automattesche SPAM, dröm\ndon di Wööter en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])", "fancycaptcha-badlogin": "Mer schöze Metmaacher en unsem Wiki jäje automatesche\nPaßwoot-Knackerei, dröm don di Wööt onge en dat Käßje\nendraare. ([[Special:Captcha/help|Verklierung]])", "fancycaptcha-createaccount": "Mer schöze uns Wiki dojäje, dat mer en Masse automatesch\nMetmaacher aanmeldt.\nDröm beß esu joot un\ndon di Wööt onge en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json index 949f4595..75b7f65e 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Chorobek" + "Chorobek", + "Janatkg" ] }, - "fancycaptcha-sendemail": "Ðвтоматташтырылган Ñпамдан коргонууга жардам катары бул Ñөздөрдү төмөндөгү көзөнөккө киргизиңиз ([[Special:Captcha/help|more info]]):" + "fancycaptcha-sendemail": "Ðвтоматташтырылган Ñпамдан коргонууга жардам катары бул Ñөздөрдү төмөндөгү көзөнөккө киргизиңиз ([[Special:Captcha/help|more info]]):", + "fancycaptcha-reload-text": "Жаңылоо" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json index 1dc4b8b6..811da399 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json @@ -11,5 +11,6 @@ "fancycaptcha-create": "Fir dës Säit unzeleeën, gitt w.e.g. déi Wierder an, déi an der Këscht ënnendrënner stinn ([[Special:Captcha/help|méi Informatiounen]]):", "fancycaptcha-edit": "Fir dës Säit z'änneren, gitt w.e.g. déi Wierder an, déi an der Këscht ënnendrënner stinn ([[Special:Captcha/help|méi Informatiounen]]):", "fancycaptcha-sendemail": "Fir eis géint automatescht Spammen ze schützen, froe mir Iech fir d'Wierder déi an der Këscht ënnendrënner stinn anzeginn ([[Special:Captcha/help|méi Informatiounen]]):", - "fancycaptcha-reload-text": "Aktualiséieren" + "fancycaptcha-reload-text": "Aktualiséieren", + "apihelp-fancycaptchareload-description": "En neie FancyCaptcha kréien," } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json index 2bfc9e63..846f0ae5 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json @@ -2,9 +2,17 @@ "@metadata": { "authors": [ "Eitvys200", - "Hugo.arg" + "Hugo.arg", + "Albertas" ] }, + "fancycaptcha-addurl": "JÅ«sų pakeitimuose yra nauja iÅ¡orinÄ— nuoroda.\nKad apsaugotume šį viki nuo automatizuoto brukalo, maloniai praÅ¡ome JÅ«sų įvesti žemiau nurodytus žodžius į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "fancycaptcha-badlogin": "Kad apsaugotume viki nuo automatizuoto slaptažodžių nulaužinÄ—jimo, maloniai praÅ¡ome įvesti žemiau nurodytus žodžius į langelį ([[Special:Captcha/help|daugiau informacijos]]):", "fancycaptcha-createaccount": "Siekiant apsaugoti wiki nuo automatinių paskyrų kÅ«rimo, praÅ¡ome jus įvesti žodžius, matomus rÄ—melyje apaÄioje ([[Special:Captcha/help|plaÄiau...]]):", - "fancycaptcha-reload-text": "Atnaujinti" + "fancycaptcha-create": "Kad sukurtumÄ—te puslapį, praÅ¡ome įvesti žemiau nurodytus žodžius į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "fancycaptcha-edit": "Kad atliktumÄ—te Å¡io puslapio pakeitimÄ…, praÅ¡ome įvesti žemiau nurodytus žodžius į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "fancycaptcha-sendemail": "Kad apsaugotumÄ—me viki nuo automatizuoto brukalo, maloniai praÅ¡ome JÅ«sų įvesti žemiau nurodytus žodžius į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "fancycaptcha-reload-text": "Atnaujinti", + "apihelp-fancycaptchareload-description": "Gauti naujÄ… FancyCaptcha.", + "apihelp-fancycaptchareload-example-1": "Gauti naujÄ… FancyCaptcha" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/luz.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/luz.json new file mode 100644 index 00000000..70fcf7b2 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/luz.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "علی ساکی لرستانی" + ] + }, + "fancycaptcha-createaccount": "سیکە ڤیکینە د بأرابأر ئیجاد حیسآۉ خۉدکار مۉحاÙیظأت بۉکۉنیم،ئیما مەربانوٙنە د ئیشا ئیخیم Ú©Û• کلمە یلی Ú©Û• دوٙمین ظاهیر ئیڤانە ڤارید بۉکۉنیت ([[Special:Captcha/help|more info]]):", + "fancycaptcha-reload-text": "Ù†Û‰ کیردأن" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mg.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mg.json new file mode 100644 index 00000000..cf7ad349 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mg.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Jagwar" + ] + }, + "fancycaptcha-createaccount": "Mba hiarovana ity wiki ity amin'ny famoronana kaonty ho azy, soraty ny teny hitanao amin'ny boaty eo embany ([[Special:Captcha/help|fampahalalana fanampiny]]):", + "fancycaptcha-reload-text": "Vaozina" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json index 356bb113..9bd1fa88 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json @@ -4,7 +4,7 @@ "Bjankuloski06" ] }, - "fancycaptcha-desc": "Збогатен Ñоздавач CAPTCHA за потврда на уредувања", + "fancycaptcha-desc": "Збогатен Ñоздавач Ñликичка за потврда на уредувања", "fancycaptcha-addurl": "Вашето уредување вклучува нови надворешни врÑки.\nСо цел да Ñе заштитиме од автоматизиран Ñпам, би ве замолиле да ги внеÑете зборовите на Ñликичката подолу ([[Special:Captcha/help|повеќе информации]]):", "fancycaptcha-badlogin": "Со цел да Ñе заштитиме од автоматизирано пробивање на лозинки, би ве замолиле да ги внеÑете зборовите на Ñликичката подолу ([[Special:Captcha/help|повеќе информации]]):", "fancycaptcha-createaccount": "Со цел да Ñе заштитиме од автоматизирано Ñоздавање на Ñметки, би ве замолиле да ги внеÑете зборовите на Ñликичката подолу ([[Special:Captcha/help|повеќе информации]]):", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json index 16bfdd52..e3ac1a22 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json @@ -4,12 +4,13 @@ "Kaustubh", "Mahitgar", "संतोष दहिवळ", - "BPositive" + "BPositive", + "V.narsikar" ] }, "fancycaptcha-addurl": "तà¥à¤®à¤šà¥à¤¯à¤¾ संपादनात नवीन बाहà¥à¤¯ दà¥à¤µà¥‡ आहेत.\nआपोआप होणारà¥â€à¤¯à¤¾ संपादनांपासून बचावासाठी, खाली दिसणारे शबà¥à¤¦ दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", "fancycaptcha-badlogin": "आपोआप होणारà¥â€à¤¯à¤¾ परवलीचà¥à¤¯à¤¾ शबà¥à¤¦à¤¾à¤šà¥à¤¯à¤¾ चोरीपासून वाचणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिसणारे शबà¥à¤¦ दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", - "fancycaptcha-createaccount": "आपोआप होणारà¥â€à¤¯à¤¾ सदसà¥à¤¯ नोंदणीपासून वाचणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिसणारे शबà¥à¤¦ दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", + "fancycaptcha-createaccount": "या विकिस, आपोआप होणारà¥â€à¤¯à¤¾ सदसà¥à¤¯ नोंदणीपासून सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ राखणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€,आमà¥à¤¹à¥€ आपणास सांगतो कि खाली दिसणारे शबà¥à¤¦ दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", "fancycaptcha-create": "हे पान तयार करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिसणारे शबà¥à¤¦ दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", "fancycaptcha-edit": "हे पान संपादित करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिसणारे शबà¥à¤¦ दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", "fancycaptcha-sendemail": "आपोआप होणारà¥â€à¤¯à¤¾ उतà¥à¤ªà¤¾à¤¤à¤¾à¤ªà¤¾à¤¸à¥‚न वाचणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिसणारे शबà¥à¤¦ दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json index 0d1aae63..83f44c68 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json @@ -2,14 +2,17 @@ "@metadata": { "authors": [ "Anakmalaysia", - "Aviator" + "Aviator", + "Pizza1016" ] }, "fancycaptcha-addurl": "Suntingan anda mengandungi pautan luar baru. Untuk membanteras kegiatan spam automatik, anda diminta mengisi huruf-huruf berikut dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", "fancycaptcha-badlogin": "Untuk membanteras kegiatan meneka kata laluan secara automatik, anda diminta mengisi huruf-huruf berikut dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", - "fancycaptcha-createaccount": "Untuk membanteras kegiatan pembukaan akaun secara automatik, anda diminta mengisi huruf-huruf berikut dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", + "fancycaptcha-createaccount": "Untuk melindungi wiki ini dari pembukaan akaun secara automatik, kami memohon anda untuk mengisi perkataan-perkataan berikut dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", "fancycaptcha-create": "Untuk mencipta laman ini, anda diminta mengisi huruf-huruf berikut dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", "fancycaptcha-edit": "Untuk menyunting laman ini, anda diminta mengisi huruf-huruf berikut dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", "fancycaptcha-sendemail": "Untuk membanteras kegiatan spam secara automatik, anda diminta mengisi huruf-huruf berikut dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", - "fancycaptcha-reload-text": "Muat semula" + "fancycaptcha-reload-text": "Muat semula", + "apihelp-fancycaptchareload-description": "Dapatkan FancyCaptcha baru.", + "apihelp-fancycaptchareload-example-1": "Dapatkan FancyCaptcha baru" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json index 6488dc43..86fd5220 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Chrisportelli" + "Chrisportelli", + "Leli Forte" ] }, "fancycaptcha-addurl": "Il-modifika tiegħek tinkludi ħoloq esterni Ä¡odda.\nSabiex tipproteÄ¡i kontra spam awtomatiku, jekk jogħġbok solvi din is-somma sempliÄ‹i t'hawn taħt u daħħal ir-risposta fil-kaxxa ([[Special:Captcha/help|aktar informazzjoni]]):", @@ -9,5 +10,6 @@ "fancycaptcha-createaccount": "Bħala miżura ta' prekawzjoni kontra l-ħolqien awtomatiku tal-kontijiet, jekk jogħġbok daħħal fil-kaxxa l-ittri li jidhru hawn taħt ([[Special:Captcha/help|aktar informazzjoni]]):", "fancycaptcha-create": "Sabiex toħloq din il-paÄ¡na, jekk jogħġbok daħħal il-kliem li jidhru hawn taħt fil-kaxxa ([[Special:Captcha/help|aktar informazzjoni]]):", "fancycaptcha-edit": "Sabiex timmodifika din il-paÄ¡na, jekk jogħġbok daħħal il-kliem li jidhru hawn taħt fil-kaxxa ([[Special:Captcha/help|aktar informazzjoni]]):", - "fancycaptcha-sendemail": "Bħala prekawzjoni kontra l-ispam awtomatiku, jekk jogħġbok daħħal fil-kaxxa l-ittri li jidhru hawn taħt ([[Special:Captcha/help|aktar informazzjoni]]):" + "fancycaptcha-sendemail": "Bħala prekawzjoni kontra l-ispam awtomatiku, jekk jogħġbok daħħal fil-kaxxa l-ittri li jidhru hawn taħt ([[Special:Captcha/help|aktar informazzjoni]]):", + "fancycaptcha-reload-text": "AÄ¡Ä¡orna" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mzn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mzn.json new file mode 100644 index 00000000..2240f528 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mzn.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "محک" + ] + }, + "fancycaptcha-createaccount": "چون نخامبی Ú©Ù‡ کاروری حیسابون ره روباتون بسازÙÙ† Ùˆ خودکار بساته بَواشÙن، Ø´Ùما جه خامبی Ú©Ù‡ این کلمه Ú©Ù‡ عکس دله وینّی ره بنویسین([[Special:Captcha/help|کامل Ùاطلاعات]]):", + "fancycaptcha-reload-text": "نو هاکردن" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json index c9831353..d2f8485c 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "बिपà¥à¤²à¤¬ आननà¥à¤¦" + "बिपà¥à¤²à¤¬ आननà¥à¤¦", + "राम पà¥à¤°à¤¸à¤¾à¤¦ जोशी" ] }, + "fancycaptcha-createaccount": "विकिलाई आफॠमनपरी बनाउने खाताबाट बचाउनकोलागि हामी तपाईंलाई तलका बकसमा देखिने वेबमा जान बिनमà¥à¤° अनà¥à¤°à¥‹à¤§ गरà¥à¤¦à¤›à¥Œà¤‚: ([[Special:Captcha/help|अधिक जानकारी]]):", "fancycaptcha-reload-text": "ताजागरà¥à¤¨à¥‡" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json index e5b40b23..19e1222e 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "HanV", - "Siebrand" + "Siebrand", + "Esketti" ] }, "fancycaptcha-desc": "Generator voor opgedirkte captcha's voor ConfirmEdit", @@ -12,5 +13,7 @@ "fancycaptcha-create": "Voer de woorden die hieronder verschijnen in het invoerveld in om de pagina aan te maken ([[Special:Captcha/help|meer informatie]]):", "fancycaptcha-edit": "Voer de woorden die hieronder verschijnen in het invoerveld in om deze pagina te bewerken ([[Special:Captcha/help|meer informatie]]):", "fancycaptcha-sendemail": "Voer de woorden die hieronder getoond worden in het invoerveld in als bescherming tegen spam ([[Special:Captcha/help|meer informatie]]):", - "fancycaptcha-reload-text": "Vernieuwen" + "fancycaptcha-reload-text": "Vernieuwen", + "apihelp-fancycaptchareload-description": "Een nieuwe FancyCaptcha.", + "apihelp-fancycaptchareload-example-1": "Een nieuwe FancyCaptcha" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json index df234c8c..706cbebb 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json @@ -2,12 +2,13 @@ "@metadata": { "authors": [ "Harald Khan", - "Njardarlogar" + "Njardarlogar", + "Ranveig" ] }, "fancycaptcha-addurl": "Endringa di inneheld nye utlenkjer.\nFor Ã¥ hjelpa oss med Ã¥ unngÃ¥ automatisert spam, ver venleg og skriv inn orda som kjem til syne i boksen under ([[Special:Captcha/help|meir informasjon]]):", "fancycaptcha-badlogin": "Skriv inn orda som kjem til syne i boksen nedanfor for Ã¥ hjelpa oss med Ã¥ unngÃ¥ automatisert passordknekking ([[Special:Captcha/help|meir informasjon]]):", - "fancycaptcha-createaccount": "Skriv inn orda som kjem til syne i boksen nedanfor for Ã¥ hjelpa oss med Ã¥ unngÃ¥ automatisk kontooppretting ([[Special:Captcha/help|meir informasjon]]):", + "fancycaptcha-createaccount": "For Ã¥ hindre automatisk kontooppretting mÃ¥ me be om at du skriv inn orda som kjem til syne i boksen nedanfor ([[Special:Captcha/help|meir informasjon]]):", "fancycaptcha-create": "Skriv inn orda som kjem til syne i boksen nedanfor for Ã¥ oppretta sida ([[Special:Captcha/help|meir informasjon]]):", "fancycaptcha-edit": "For Ã¥ endra denne sida, ver venleg og skriv inn orda som kjem til syne i boksen nedanfor ([[Special:Captcha/help|meir informasjon]]):", "fancycaptcha-sendemail": "For Ã¥ hjelpa til mot sjølvgÃ¥ande spamming, skriv inn orda som kjem til syne i boksen under ([[Special:Captcha/help|meir informasjon]]):", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/olo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/olo.json new file mode 100644 index 00000000..5802bd5b --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/olo.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "fancycaptcha-createaccount": "Ku suojata wikii automuattizesti luajittulois tililöis, kyzymmö sinuu kirjuttamah al olijat sanat kodazeh ([[Special:Captcha/help|ližätieduo]]):", + "fancycaptcha-reload-text": "Päivitä" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/or.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/or.json index 26dd49cc..95b6cecc 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/or.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/or.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Psubhashish" + "Psubhashish", + "Jnanaranjan Sahu" ] }, "fancycaptcha-addurl": "ଆପଣଙà­à¬• ସମà­à¬ªà¬¾à¬¦à¬¨à¬¾à¬°à­‡ ନୂଆ ବାହାର ଲିଙà­à¬• ରହିଛି ।\nଆପେଆପେ ହେଉଥିବା ସà­à¬ªà¬¾à¬®à¬° ପà­à¬°à¬¤à¬¿à¬°à­‹à¬§ କରିବା ନିମନà­à¬¤à­‡ ଘର ତଳେ ଥିବା ଶବà­à¬¦à¬¸à¬¬à­ ଦିଅନà­à¬¤à­ ([[Special:Captcha/help|ଅଧିକ ବିବରଣୀ]]):", @@ -9,5 +10,6 @@ "fancycaptcha-createaccount": "ଆପେଆପେ ଖାତା ଖୋଲିବାକୠଅଟକାଇବା ପାଇଠଦୟାକରି à¬à¬¹à¬¿ ଘରଭିତରେ ଥିବା ଶବà­à¬¦à¬¸à¬¬à­à¬•à­ ତାହା ତଳେ ଥିବା ବାକà­à¬¸à¬°à­‡ ଟାଇପ କରନà­à¬¤à­ । ([[Special:Captcha/help|ଅଧିକ ସୂଚନା]]):", "fancycaptcha-create": "à¬à¬¹à¬¿ ପୃଷà­à¬ à¬¾à¬Ÿà¬¿à¬•à­ ତିଆରିବା ନିମନà­à¬¤à­‡, ଘର ତଳେ ଥିବା ଶବà­à¬¦à¬Ÿà¬¿à¬•à­ à¬à¬ à¬¾à¬°à­‡ ଦିଅନà­à¬¤à­ ([[Special:Captcha/help|ଅଧିକ ଜାଣନà­à¬¤à­]]):", "fancycaptcha-edit": "à¬à¬¹à¬¿ ପୃଷà­à¬ à¬¾à¬Ÿà¬¿à¬•à­ ବଦଳାଇବା ନିମନà­à¬¤à­‡, ଘର ତଳେ ଥିବା ଶବà­à¬¦à¬Ÿà¬¿à¬•à­ à¬à¬ à¬¾à¬°à­‡ ଦିଅନà­à¬¤à­ ([[Special:Captcha/help|ଅଧିକ ଜାଣନà­à¬¤à­]]):", - "fancycaptcha-sendemail": "ଆପେଆପେ ହେଉଥିବା ସà­à¬ªà¬¾à¬®à¬•à­ ରୋକିବା ନିମନà­à¬¤à­‡ ଦୟାକରି à¬à¬¹à¬¿ ଘରଭିତରେ ଥିବା ଶବà­à¬¦à¬¸à¬¬à­à¬•à­ ତାହା ତଳେ ଥିବା ବାକà­à¬¸à¬°à­‡ ଟାଇପ କରନà­à¬¤à­ । ([[Special:Captcha/help|ଅଧିକ ସୂଚନା]]):" + "fancycaptcha-sendemail": "ଆପେଆପେ ହେଉଥିବା ସà­à¬ªà¬¾à¬®à¬•à­ ରୋକିବା ନିମନà­à¬¤à­‡ ଦୟାକରି à¬à¬¹à¬¿ ଘରଭିତରେ ଥିବା ଶବà­à¬¦à¬¸à¬¬à­à¬•à­ ତାହା ତଳେ ଥିବା ବାକà­à¬¸à¬°à­‡ ଟାଇପ କରନà­à¬¤à­ । ([[Special:Captcha/help|ଅଧିକ ସୂଚନା]]):", + "fancycaptcha-reload-text": "ରିଫà­à¬°à­‡à¬¸" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json index f94c4815..e28b1888 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Babanwalia" + "Babanwalia", + "Satdeep gill" ] }, + "fancycaptcha-createaccount": "ਵਿਕੀ ਉੱਤੇ ਆਪ ਮà©à¨¹à¨¾à¨°à©‡ ਖਾਤੇ ਬਣਾਉਣ ਤੋਂ ਬਚਾਅ ਲਈ ਅਸੀਂ ਤà©à¨¹à¨¾à¨¨à©‚à©° ਬੇਨਤੀ ਕਰਦੇ ਹਾਂ ਕਿ ਇੱਥੇ ਦਿਸ ਰਹੇ ਸ਼ਬਦਾਂ ਨੂੰ ਹੇਠਾਂ ਦਿੱਤੇ ਬਕਸੇ ਵਿੱਚ ਲਿਖੋ ([[Special:Captcha/help|ਹੋਰ ਜਾਣਕਾਰੀ]]):", "fancycaptcha-reload-text": "ਮà©à©œ ਤਾਜ਼ਾ ਕਰੋ" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json index 6cd11fc5..6a125e56 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json @@ -6,8 +6,9 @@ }, "fancycaptcha-addurl": "تواڈی تبدیلی Ú† نویں بارلے جوڑ نیں۔\nاس صÙØ­Û’ نوں تبدیل کرن واسطے، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|مزید جانکاری]]):", "fancycaptcha-badlogin": "اپنے آپ کنجی توڑن دے خلا٠مدد واسطے، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|مزید جانکاری]]):", - "fancycaptcha-createaccount": "اپنے آپ غلط نویں کھاتے بنان نوں روکن واسطے، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|مزید جانکاری]]):", + "fancycaptcha-createaccount": "اپنے آپ غلط نویں کھاتے بنان توں روکن لئی، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|Ûور جانکاری]]):", "fancycaptcha-create": "صÙØ­Û Ø¨Ù†Ø§Ù† واسطے، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|مزید جانکاری]]):", "fancycaptcha-edit": "اس صÙØ­Û’ تے تبدیلی کرن واسطے، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|مزید جانکاری]]):", - "fancycaptcha-sendemail": "اپنے آپ غلط مال آن نوں روکن واسطے، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|مزید جانکاری]]):" + "fancycaptcha-sendemail": "اپنے آپ غلط مال آن نوں روکن واسطے، Ù…Ûربانی کر Ú©Û’ ڈبے Ú† دتے Ú¯Û“ شبداں نوں Ù„Ú©Ú¾Ùˆ ([[Special:Captcha/help|مزید جانکاری]]):", + "fancycaptcha-reload-text": "سجرا" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json index fc5b67e3..4f7d780a 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json @@ -14,5 +14,7 @@ "fancycaptcha-create": "Para criar a página, por favor, introduza na caixa abaixo as palavras apresentadas ([[Special:Captcha/help|mais informações]]):", "fancycaptcha-edit": "Para editar esta página, por favor, introduza na caixa abaixo as palavras apresentadas ([[Special:Captcha/help|mais informações]]):", "fancycaptcha-sendemail": "Para proteger esta wiki contra o spam automatizado, por favor, introduza na caixa as palavras que aparecem abaixo ([[Special:Captcha/help|mais informações]]):", - "fancycaptcha-reload-text": "Atualizar" + "fancycaptcha-reload-text": "Atualizar", + "apihelp-fancycaptchareload-description": "Gerar novo FancyCaptcha.", + "apihelp-fancycaptchareload-example-1": "Gerar novo FancyCaptcha" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json index 10b7911c..ce1b3d73 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json @@ -4,6 +4,8 @@ "AlimanRuna" ] }, + "fancycaptcha-createaccount": "Kay wikitaqa kikinmanta rakiquna kichariymanta amachanapaqqa, ama hina kaspa, kay qatiq kahachapi rikch'ariq rimakunata yaykuchiy ([[Special:Captcha/help|astawan rikuy]]):", "fancycaptcha-create": "P'anqata kamarinaykipaqqa kay qatiq kahachapi kaq rimakunata yaykuchiy ([[Special:Captcha/help|astawan yachay]]):", - "fancycaptcha-edit": "Kay p'anqata llamk'anaykipaqqa kay qatiq kahachapi kaq rimakunata yaykuchiy ([[Special:Captcha/help|astawan yachay]]):" + "fancycaptcha-edit": "Kay p'anqata llamk'anaykipaqqa kay qatiq kahachapi kaq rimakunata yaykuchiy ([[Special:Captcha/help|astawan yachay]]):", + "fancycaptcha-reload-text": "Musuqchay" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json index 1044377d..531eeedb 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json @@ -3,7 +3,8 @@ "authors": [ "Firilacroco", "Mihai", - "Minisarm" + "Minisarm", + "ImGelu" ] }, "fancycaptcha-addurl": "Modificarea dumneavoastră include legături externe noi.\nPentru a împiedica roboÈ›ii de spam, vă rugăm să introduceÈ›i cuvintele care apar mai jos în căsuță ([[Special:Captcha/help|mai multe detalii]]):", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json index 836beb53..8fb969ff 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json @@ -14,5 +14,7 @@ "fancycaptcha-create": "Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñтраницы, пожалуйÑта, введите буквы, которые видны на изображении ниже ([[Special:Captcha/help|подробнее…]]):", "fancycaptcha-edit": "Ð”Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтраницы, пожалуйÑта, введите буквы, которые видны на изображении ниже ([[Special:Captcha/help|подробнее…]]):", "fancycaptcha-sendemail": "Ð’ целÑÑ… защиты от автоматичеÑкого Ñпама проÑим Ð²Ð°Ñ Ð²Ð²ÐµÑти Ñлова, показанные ниже в рамке ([[Special:Captcha/help|подробнее…]]):", - "fancycaptcha-reload-text": "Обновить" + "fancycaptcha-reload-text": "Обновить", + "apihelp-fancycaptchareload-description": "Получить новую FancyCaptcha.", + "apihelp-fancycaptchareload-example-1": "Получить новую FancyCaptcha" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json index 35e36ec7..7fde4daf 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Gmelfi" + "Gmelfi", + "Pippinu" ] }, - "fancycaptcha-createaccount": "Comu misura pricauzzionali contra li tintativa di riggistrazzioni automatica, t'addumannamu gintirmenti di nzirìri ntâ casedda cassutta li paroli ca cumpàrunu appressu ([[Special:Captcha/help|comu funziona?]]):" + "fancycaptcha-createaccount": "Comu misura pricauzzionali contra li tintativa di riggistrazzioni automatica, t'addumannamu gintirmenti di nzirìri ntâ casedda cassutta li paroli ca cumpàrunu appressu ([[Special:Captcha/help|comu funziona?]]):", + "fancycaptcha-reload-text": "Aggiorna" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sco.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sco.json new file mode 100644 index 00000000..737d931c --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sco.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "AmaryllisGardener" + ] + }, + "fancycaptcha-createaccount": "Tae pertect the wiki against automatit accoont creation, we kindly ask ye tae enter the wirds that appear ablo in the box ([[Special:Captcha/help|mair info]]):", + "fancycaptcha-reload-text": "Refresh" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sgs.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sgs.json new file mode 100644 index 00000000..1827ca4e --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sgs.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Hugo.arg" + ] + }, + "fancycaptcha-createaccount": "Ka wiki bÅ«tom apsergieta nu autuomatÄ—Å¡ka nauduotuojÄ— padÄ—rbÄ—ma ta Tamstas praÅ¡uom Ä«raÅ¡Ä«tÄ— žuodius, katrÅ«s veizat apatiuo([[Special:Captcha/help|pagelba]]):", + "fancycaptcha-reload-text": "ParkrautÄ—" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/shn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/shn.json new file mode 100644 index 00000000..a5394cbc --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/shn.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Saosukham" + ] + }, + "fancycaptcha-createaccount": "á€á‚ƒá‚‡áµá‚…á€á€ºá‚‡á¶á‚„ႇ ဢá¼á€ºá€šá‚ƒá‚‰áµá€á€ºá€¸á€á€®á‚‡á¶á€®á‚‡ မိူá€á€ºá‚ˆá‚ဵá€á€ºá€¸á€¢á¶á€½á€„်ႉ, á‚á€á€ºá€¸á¶á‚‚်ႈá€á€¯áµá€ºá€¸á€šá€½á¼á€ºá€¸ á¸á€á€ºá‚ˆáµá€á€ºá‚‡ á‚ႂ်ႈသႂ်ႇပá¼á€º á€á€°á€á€ºá€œá€­áµá€ºá‚ˆ á¸á€­á€°á€á€ºá€¸á€¢á€½áµá€ºá‚‡á€™á‚ƒá€¸ á€á€®á‚ˆá¼á‚‚်းလွáµá€ºá€¸á€á‚‚်ႈá¼á‚†á‚‰ ([[Special:Captcha/help|more info]]):", + "fancycaptcha-reload-text": "á¶á€­á€¯á¼á€ºá€¸á€žá¢á¼á€ºá‚‰" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/si.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/si.json index b376277e..df638495 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/si.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/si.json @@ -3,13 +3,15 @@ "authors": [ "Singhalawap", "Thameera123", - "නන්දිමිතුරු" + "නන්දිමිතුරු", + "හරිත" ] }, "fancycaptcha-addurl": "ඔබගේ සංස්කරණයෙහි නව බà·à·„ිර සබà·à¶³à·’යන් අඩංගුයි.\nස්වයංක්â€à¶»à·“ය අයà·à¶ à·’ත තà·à¶´à·‘ලෙන් ආරක්ෂ෠වනු වස්, පහත පෙන්නුම් කෙරෙන වචන කොටුව තුල ඇතුලත් කරන්න ([[Special:Captcha/help|à·€à·à¶©à·’මනත් තොරතුරු]]):", "fancycaptcha-badlogin": "ස්වයංක්â€à¶»à·“ය මුරපද බිඳීම වලක්වනු වස්, පහත පෙන්නුම් කෙරෙන වචන කොටුව තුල ඇතුලත් කරන්න ([[Special:Captcha/help|à·€à·à¶©à·’මනත් තොරතුරු]]):", - "fancycaptcha-createaccount": "ස්වයංක්â€à¶»à·“යව ගිණුම් තà·à¶±à·“ම à·€à·à¶½à¶šà·”මâ€à¶§ සඳහà·, පහත දà·à¶šà·Šà·€à·™à¶± වචන CAPTCHA කොටුව තුල ඇතුලත් කරන්න ([[Special:Captcha/help|à·€à·à¶©à·’මනත් තොරතුරු]]):", + "fancycaptcha-createaccount": "ස්වයංක්â€à¶»à·“යව ගිණුම් තà·à¶±à·“මෙන් විකිය ආරක්ෂ෠කිරීමට, පහත පෙනෙන වචන කොටුව තුල ඇතුලත් කරන ලෙස ඉල්ල෠සිටිමු ([[Special:Captcha/help|à·€à·à¶©à·’මනත් තොරතුරු]]):", "fancycaptcha-create": "පිටුව තනනු වස්, පහත පෙන්නුම් කෙරෙන වචන කොටුව තුල ඇතුලත් කරන්න ([[Special:Captcha/help|à·€à·à¶©à·’මනත් තොරතුරු]]):", "fancycaptcha-edit": "මෙම පිටුව සංස්කරණය කරනු වස්, පහත පෙන්නුම් කෙරෙන වචන කොටුව තුල ඇතුලත් කරන්න ([[Special:Captcha/help|à·€à·à¶©à·’මනත් තොරතුරු]]):", - "fancycaptcha-sendemail": "ස්වයංක්â€à¶»à·“ය ස්පෑම් කිරීම්වලින් ආරක්ෂ෠කිරීම සඳහ෠උදව් වීමට පහත කොටුවේ පෙන්වන වචන ඇතුළත් කරන්න ([[Special:Captcha/help|more info]]):" + "fancycaptcha-sendemail": "ස්වයංක්â€à¶»à·“ය ස්පෑම් කිරීම්වලින් ආරක්ෂ෠කිරීම සඳහ෠උදව් වීමට පහත කොටුවේ පෙන්වන වචන ඇතුළත් කරන්න ([[Special:Captcha/help|more info]]):", + "fancycaptcha-reload-text": "Refresh කරන්න" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json index 50d8f799..d2344b99 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json @@ -2,13 +2,15 @@ "@metadata": { "authors": [ "Dori", - "Olsi" + "Olsi", + "Liridon" ] }, "fancycaptcha-addurl": "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:
    ([[Special:Captcha|Çfarë është kjo?]])", "fancycaptcha-badlogin": "Për tu mbrojtur nga metoda automatike të gjetjes së fjalëkalimeve ju kërkojmë të vendosni fjalët e figurës në kuti ([[Special:Captcha/help|më shumë informacion]]):", - "fancycaptcha-createaccount": "Për të mbrojtur kundër hapjeve të llogarive në mënyrë automatike ju lutem shtypni çfarë shfaqet tek figura e mëposhtme ([[Special:Captcha|Çfarë është kjo?]]):", + "fancycaptcha-createaccount": "Për të mbrojtur wiki kundër krijimit të llogarive të automatizuara, ne mirësisht ju kërkojmë që të shkruani fjalët që shfaqen në kutinë poshtë ([[Special:Captcha/help|më shumë info]]):", "fancycaptcha-create": "Për të krijuar një faqe, ju lutem shtypni çfarë shfaqet tek figura e mëposhtme ([[Special:Captcha|Çfarë është kjo?]]):", "fancycaptcha-edit": "Për të redaktuar këtë faqe ju lutem shtypni çfarë shfaqet tek figura e mëposhtme ([[Special:Captcha|Çfarë është kjo?]]):", - "fancycaptcha-sendemail": "Për t'u mbrojtur nga metoda automatike e gjetjes së fjalëkalimeve ju kërkojmë të vendosni fjalët e figurës në kuti ([[Special:Captcha/help|më shumë informacion]]):" + "fancycaptcha-sendemail": "Për t'u mbrojtur nga metoda automatike e gjetjes së fjalëkalimeve ju kërkojmë të vendosni fjalët e figurës në kuti ([[Special:Captcha/help|më shumë informacion]]):", + "fancycaptcha-reload-text": "Rifresko" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/su.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/su.json index 94003d21..5b0a3b83 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/su.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/su.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Irwangatot" + "Irwangatot", + "Kandar" ] }, + "fancycaptcha-createaccount": "Pikeun ngajaga wikina tina akun jieunan otomatis, mangga asupkeun kecap anu némbongan dina kotak di handap ([[Special:Captcha/help|émbaran leuwih lengkep]]):", "fancycaptcha-edit": "Éditan Anjeun ngeusikeun tumbu kaluar nu anyar. Pikeun panangtayungan ka spam otomatis, mangga asukkeun kecap di handapeun ieu ka kotak anu disadiakeun ([[Special:Captcha/help|salengkeupna]]):" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json index f880ed4d..08b036d8 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json @@ -4,5 +4,6 @@ "Krol111" ] }, + "fancycaptcha-createaccount": "Coby chrůńić Wikipedyje uod automatycznygo tworzyÅ„o kůnt proÅ›imy Ća, wszkryflej tekst kery půńiżyj widisz we tekstowy plac ([[Special:Captcha/help|wjyncyj informacyji]])", "fancycaptcha-reload-text": "UodÅ›wjyż" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json index f8fb25f3..4eda0641 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json @@ -2,11 +2,13 @@ "@metadata": { "authors": [ "Shanmugamp7", - "மதனாஹரனà¯" + "மதனாஹரனà¯", + "Jayarathina" ] }, "fancycaptcha-badlogin": "தானியஙà¯à®•à¯ கடவà¯à®šà¯ சொல௠உடைதà¯à®¤à®²à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ பாதà¯à®•à®¾à®•à¯à®• உதவà¯à®µà®¤à®±à¯à®•à®¾à®•à®¤à¯ தயவ௠செயà¯à®¤à¯ கீழேயà¯à®³à¯à®³ பெடà¯à®Ÿà®¿à®¯à®¿à®²à¯ தோனà¯à®±à¯à®®à¯ சொறà¯à®•à®³à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯ ([[Special:Captcha/help|கூடிய தகவலà¯]]):", - "fancycaptcha-createaccount": "தானியஙà¯à®•à®¿à®¯à®¾à®• கணகà¯à®•à¯ உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ பாதà¯à®•à®¾à®•à¯à®• உதவ, தயவà¯à®šà¯†à®¯à¯à®¤à¯ கீழே தெரியà¯à®®à¯ வாரà¯à®¤à¯à®¤à¯ˆà®•à®³à¯ˆ பெடà¯à®Ÿà®¿à®¯à®¿à®²à¯ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯ ([[Special:Captcha/help|மேலà¯à®®à¯ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯]]):", + "fancycaptcha-createaccount": "தானியஙà¯à®•à®¿à®¯à®¾à®• கணகà¯à®•à¯ உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ விகà¯à®•à®¿à®¯à®¿à®©à¯ˆà®ªà¯à®ªà®¾à®¤à¯à®•à®¾à®•à¯à®•, தயவà¯à®šà¯†à®¯à¯à®¤à¯ கீழே தெரியà¯à®®à¯ வாரà¯à®¤à¯à®¤à¯ˆà®•à®³à¯ˆ பெடà¯à®Ÿà®¿à®¯à®¿à®²à¯ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯ ([[Special:Captcha/help|மேலà¯à®®à¯ விவரஙà¯à®•à®³à¯à®•à¯à®•à¯]]):", "fancycaptcha-create": "பகà¯à®•à®¤à¯à®¤à¯ˆ உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®±à¯à®•à®¾à®•, தயவ௠செயà¯à®¤à¯ கீழே பெடà¯à®Ÿà®¿à®¯à®¿à®²à¯ தோனà¯à®±à¯à®•à®¿à®©à¯à®± சொறà¯à®•à®³à¯ˆ உளà¯à®³à®¿à®Ÿà¯à®™à¯à®•à®³à¯ ([[Special:Captcha/help|கூடிய தகவலà¯]]):", - "fancycaptcha-edit": "இபà¯à®ªà®•à¯à®•à®¤à¯à®¤à¯ˆà®¤à¯ தொகà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯à®¤à¯ தயவ௠செயà¯à®¤à¯ கீழேயà¯à®³à¯à®³ பெடà¯à®Ÿà®¿à®¯à®¿à®²à¯ தோனà¯à®±à¯à®®à¯ சொறà¯à®•à®³à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯ ([[Special:Captcha/help|கூடிய தகவலà¯]]):" + "fancycaptcha-edit": "இபà¯à®ªà®•à¯à®•à®¤à¯à®¤à¯ˆà®¤à¯ தொகà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯à®¤à¯ தயவ௠செயà¯à®¤à¯ கீழேயà¯à®³à¯à®³ பெடà¯à®Ÿà®¿à®¯à®¿à®²à¯ தோனà¯à®±à¯à®®à¯ சொறà¯à®•à®³à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯ ([[Special:Captcha/help|கூடிய தகவலà¯]]):", + "fancycaptcha-reload-text": "பà¯à®¤à¯à®ªà¯à®ªà®¿" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json index 0a54f5e3..3b27ffaf 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json @@ -3,14 +3,18 @@ "authors": [ "Emperyan", "Joseph", - "Runningfridgesrule" + "Runningfridgesrule", + "Stultiwikia", + "Arystanbek" ] }, "fancycaptcha-addurl": "DeÄŸiÅŸikliÄŸiniz yeni dış baÄŸlantılar içeriyor.\nVikiyi otomatik spamdan korumak için, aÅŸağıdaki sözcükleri kutunun içine yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", "fancycaptcha-badlogin": "Vikiyi otomatik parola kırma yöntemine karşı korumak için, aÅŸağıdaki sözcükleri kutunun içine yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", - "fancycaptcha-createaccount": "Vikiyi otomatik hesap oluÅŸturmaya karşı korumaya yardım etmek için, aÅŸağıdaki sözcükleri kutunun içine yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", + "fancycaptcha-createaccount": "Vikiyi otomatik hesap oluÅŸturmaya karşı korumak için, aÅŸağıdaki kutuda beliren sözcükleri yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", "fancycaptcha-create": "Sayfayı oluÅŸturmak için, lütfen aÅŸağıdaki kutuda görünen kelimeleri girin ([[Special:Captcha/help|daha fazla bilgi]]):", "fancycaptcha-edit": "Bu sayfayı deÄŸiÅŸtirmek için, lütfen aÅŸağıdaki kutuda görünen kelimeleri girin ([[Special:Captcha/help|daha fazla bilgi]]):", "fancycaptcha-sendemail": "Vikiyi otomatik spamlerden korumak için, aÅŸağıdaki sözcükleri kutunun içine yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", - "fancycaptcha-reload-text": "Yenile" + "fancycaptcha-reload-text": "Yenile", + "apihelp-fancycaptchareload-description": "Yeni bir FancyCaptcha.", + "apihelp-fancycaptchareload-example-1": "Yeni bir FancyCaptcha olsun" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json index 1878ee6c..399ad826 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Derslek" + "Derslek", + "Ильнар" ] }, + "fancycaptcha-createaccount": "Кулланучы Ñзмалары автоматик рәвештә ÑÑалудан Ñаклар өчен, почмакта курәÑәтелгән Ñузләрне кертүне Ñорыйбыз ([[Special:Captcha/help|тулырак…]]):", "fancycaptcha-reload-text": "Яңарту" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json index 3adba1e1..8ae59313 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json @@ -5,7 +5,8 @@ "Andriykopanytsia", "Base", "Dim Grits", - "Ytsukeng Fyvaprol" + "Ytsukeng Fyvaprol", + "Ðта" ] }, "fancycaptcha-desc": "Чудернацький CAPTCHA-генератор Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ", @@ -15,5 +16,7 @@ "fancycaptcha-create": "Щоб Ñтворити Ñторінку, будь лаÑка, введіть у текÑтове поле Ñлова, зображені на картинці: ([[Special:Captcha/help|докладніше]]):", "fancycaptcha-edit": "Щоб редагувати цю Ñторінку, будь лаÑка, введіть у текÑтове поле Ñлова, зображені на картинці: ([[Special:Captcha/help|докладніше]]):", "fancycaptcha-sendemail": "Ð”Ð»Ñ Ð·Ð°Ñ…Ð¸Ñту вікі від автоматичного Ñпаму проÑимо Ð²Ð°Ñ Ð²Ð²ÐµÑти Ñлова, Ñкі показані нижче в полі ([[Special:Captcha/help|more info]]):", - "fancycaptcha-reload-text": "Оновити" + "fancycaptcha-reload-text": "Оновити", + "apihelp-fancycaptchareload-description": "Отримати нову FancyCaptcha.", + "apihelp-fancycaptchareload-example-1": "Отримати нову FancyCaptcha" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json index e9adcdd2..a17bd613 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json @@ -6,7 +6,7 @@ }, "fancycaptcha-addurl": "La to modifica la include dei novi colegamenti esterni.\nPar jutarne a conbàtar el spam, par piaser inserissi ne la casela le parole che vien fora qua soto ([[Special:Captcha/help|magiori informazion]]):", "fancycaptcha-badlogin": "Par precauzion contro i tentativi de forzatura automatica de le password, par piaser inserissi ne la casela le parole che vien fora qua soto ([[Special:Captcha/help|magiori informazion]]):", - "fancycaptcha-createaccount": "Par jutarne a inpedir la creazion automatica dei account, par piaser inserissi ne la casela le parole che vien fora qua soto ([[Special:Captcha/help|magiori informazion]]):", + "fancycaptcha-createaccount": "Par deféndar la wiki da la creazion automatica dei account, te domandemo par piaser de inserir ne la casela le parole che vien fora qua soto ([[Special:Captcha/help|piassè informazion]]):", "fancycaptcha-create": "Par crear la pagina, par piaser inserissi ne la casela le parole che vien fora qua soto ([[Special:Captcha/help|magiori informazion]]):", "fancycaptcha-edit": "Par modificar la pagina, par piaser inserissi ne la casela le parole che vien fora qua soto ([[Special:Captcha/help|magiori informazion]]):", "fancycaptcha-sendemail": "Par precauzion contro i tentativi de forzatura automatica de le password, par piaser inserissi ne la casela le parole che vien fora qua soto ([[Special:Captcha/help|magiori informazion]]):", diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json index 198490e4..175f183b 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json @@ -4,5 +4,7 @@ "Võrok" ] }, - "fancycaptcha-badlogin": "Salasõna automaatsõ vällänuhkmisõ vasta kirodaq pildi päält sõnaq alanolõvahe kasti\n([[Special:Captcha/help|Abiteedüs]]):" + "fancycaptcha-badlogin": "Salasõna automaatsõ vällänuhkmisõ vasta kirodaq pildi päält sõnaq alanolõvahe kasti\n([[Special:Captcha/help|Abiteedüs]]):", + "fancycaptcha-createaccount": "Olõq hää, kirodaq alanpuul kastin olõvaq sõnaq. Seo om kaitsõs kontodõ automaatsõ luumisõ iist ([[Special:Captcha/help|lisateave]]):", + "fancycaptcha-reload-text": "Vaihtaq" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/war.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/war.json new file mode 100644 index 00000000..ee79d678 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/war.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "JinJian" + ] + }, + "fancycaptcha-createaccount": "Para mapasaliporan an wiki kontra han automated account creation, nahangyo kami nga igbutang an mga pulong nga nagawas ha ubos han kahon ([[Special:Captcha/help|dugang nga impormasyon]]):", + "fancycaptcha-reload-text": "Refresh" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/wo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/wo.json new file mode 100644 index 00000000..390afec2 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/wo.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Ibou" + ] + }, + "fancycaptcha-createaccount": "Ngir aar wiki bi ci sosum sàq ci anam gu boppu, Danu laay ñaan nga duggal baat yiy feeñ ci néeg biy toftal \n([[Special:Captcha/help|yeneeni xibaar]]):", + "fancycaptcha-reload-text": "Yeesal" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/wuu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/wuu.json new file mode 100644 index 00000000..5e45ad00 --- /dev/null +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/wuu.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Poiuyt" + ] + }, + "fancycaptcha-createaccount": "为仔ä¿æŠ¤æœ¬wikiå¼—å—自动账户创建个破å,我里请求你输入下底方框中显示个文字([[Special:Captcha/help|更多信æ¯]]):", + "fancycaptcha-reload-text": "刷新" +} diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json index 455856b3..c017021f 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json @@ -4,10 +4,13 @@ "Yueman" ] }, - "fancycaptcha-addurl": "你嘅編輯包括咗新嘅外部連çµã€‚為咗防止自動化嘅濫貼,請響下é¢å€‹ç›’度輸入下é¢å˜…文字 ([[Special:Captcha/help|更多資訊]]):", - "fancycaptcha-badlogin": "為咗防止ä¸ç•¶ç¨‹å¼ç ´è§£å¯†ç¢¼ï¼Œè«‹éŸ¿ä¸‹é¢å€‹ç›’度輸入下é¢å˜…文字 ([[Special:Captcha/help|更多資訊]]):", + "fancycaptcha-addurl": "你嘅編輯包括咗新嘅出é¢é€£çµã€‚\n為咗防止自動化嘅濫貼,請響下é¢å€‹ç›’度輸入下é¢å˜…å­— ([[Special:Captcha/help|更多資訊]]):", + "fancycaptcha-badlogin": "為咗防止ä¸ç•¶ç¨‹å¼ç ´è§£å¯†ç¢¼ï¼Œè«‹éŸ¿ä¸‹é¢å€‹ç›’度輸入下é¢å˜…å­— ([[Special:Captcha/help|更多資訊]]):", "fancycaptcha-createaccount": "為咗防止自動化開新戶å£ï¼Œè«‹éŸ¿ä¸‹é¢å€‹ç›’度輸入下é¢å˜…文字 ([[Special:Captcha/help|更多資訊]]):", "fancycaptcha-create": "è¦é–‹ä¸€å€‹æ–°ç‰ˆï¼Œè«‹éŸ¿ä¸‹é¢å€‹ç›’度輸入下é¢å˜…文字 ([[Special:Captcha/help|更多資訊]]):", "fancycaptcha-edit": "è¦ç·¨è¼¯å‘¢ä¸€ç‰ˆï¼Œè«‹éŸ¿ä¸‹é¢å€‹ç›’度輸入下é¢å˜…文字 ([[Special:Captcha/help|更多資訊]]):", - "fancycaptcha-reload-text": "é‡æ–°æ•´ç†" + "fancycaptcha-sendemail": "為咗防止自動化嘅濫貼,請響下é¢å€‹ç›’度輸入下é¢å˜…å­— ([[Special:Captcha/help|更多資訊]]):", + "fancycaptcha-reload-text": "é‡æ–°æ•´ç†", + "apihelp-fancycaptchareload-description": "攞個新FancyCaptcha。", + "apihelp-fancycaptchareload-example-1": "攞個新FancyCaptcha。" } diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hant.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hant.json index 22bc1f0a..f97f09a3 100644 --- a/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hant.json +++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hant.json @@ -14,5 +14,7 @@ "fancycaptcha-create": "為了防止自動建立é é¢ç¨‹å¼ï¼Œæˆ‘們è¦éº»ç…©æ‚¨è¼¸å…¥åœ¨ä¸‹é¢çš„方框中顯示的單字 ([[Special:Captcha/help|更多資訊]]):", "fancycaptcha-edit": "è‹¥è¦ç·¨è¼¯æ­¤é é¢ï¼Œè«‹è¼¸å…¥åœ¨ä¸‹é¢çš„方框中顯示的單字 ([[Special:Captcha/help|更多資訊]]):", "fancycaptcha-sendemail": "為了防止垃圾編輯程å¼ï¼Œæˆ‘們è¦éº»ç…©æ‚¨è¼¸å…¥åœ¨ä¸‹é¢çš„方框中顯示的單字 ([[Special:Captcha/help|更多資訊]]):", - "fancycaptcha-reload-text": "é‡æ–°æ•´ç†" + "fancycaptcha-reload-text": "é‡æ–°æ•´ç†", + "apihelp-fancycaptchareload-description": "å–å¾—æ–° FancyCaptcha。", + "apihelp-fancycaptchareload-example-1": "å–å¾—æ–° FancyCaptcha。" } diff --git a/extensions/ConfirmEdit/Gruntfile.js b/extensions/ConfirmEdit/Gruntfile.js new file mode 100644 index 00000000..f1f30d41 --- /dev/null +++ b/extensions/ConfirmEdit/Gruntfile.js @@ -0,0 +1,30 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-contrib-jshint' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + + grunt.initConfig( { + jshint: { + all: [ + '*.js' + ] + }, + banana: { + all: [ + 'i18n/', + '**/i18n/' + ] + }, + jsonlint: { + all: [ + '*.json', + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jshint', 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.class.php b/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.class.php index d3e4af69..4eba6e40 100644 --- a/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.class.php +++ b/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.class.php @@ -16,8 +16,11 @@ class MathCaptcha extends SimpleCaptcha { $resultArr['captcha']['question'] = $sum; } - /** Produce a nice little form */ - function getForm() { + /** + * Produce a nice little form + * @param OutputPage $out + */ + function getForm( OutputPage $out ) { list( $sum, $answer ) = $this->pickSum(); $index = $this->storeCaptcha( array( 'answer' => $answer ) ); diff --git a/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.class.php b/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.class.php index 2e5274a8..e07dc5dc 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.class.php +++ b/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.class.php @@ -13,7 +13,7 @@ class QuestyCaptcha extends SimpleCaptcha { /** Validate a captcha response */ function keyMatch( $answer, $info ) { if ( is_array( $info['answer'] ) ) { - return in_array( strtolower( $answer ), $info['answer'] ); + return in_array( strtolower( $answer ), array_map( 'strtolower', $info['answer'] ) ); } else { return strtolower( $answer ) == strtolower( $info['answer'] ); } @@ -41,7 +41,7 @@ class QuestyCaptcha extends SimpleCaptcha { return array( 'question' => $question, 'answer' => $answer ); } - function getForm() { + function getForm( OutputPage $out ) { $captcha = $this->getCaptcha(); if ( !$captcha ) { die( "No questions found; set some in LocalSettings.php using the format from QuestyCaptcha.php." ); diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json index d075aea2..bdaa24d6 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json +++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json @@ -1,14 +1,15 @@ { "@metadata": { "authors": [ - "CERminator" + "CERminator", + "KWiki" ] }, "questycaptcha-addurl": "VaÅ¡a izmjena ukljuÄuje nove vanjske linkove.\nDa bi pomogli protiv automatskog spama, molimo odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "questycaptcha-badlogin": "Da bi pomogli u sprjeÄavanju protiv automatskog probijanja Å¡ifre, molimo Vas da odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "questycaptcha-createaccount": "Da bi pomogli u sprjeÄavanju automatskog pravljenja raÄuna, molimo Vas da odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", - "questycaptcha-create": "Da bi ste napravili stranicu, molimo Vas da odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", - "questycaptcha-edit": "Da bi ste uredili ovu stranicu, molimo Vas da odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", + "questycaptcha-create": "Da biste napravili stranicu, molimo Vas da odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", + "questycaptcha-edit": "Da biste uredili ovu stranicu, molimo Vas da odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "questycaptcha-sendemail": "Da bi pomogli u zaÅ¡titi protiv automatskog spamovanja, molimo Vas da odgovorite na pitanje koje je prikazano ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "questycaptchahelp-text": "Websajtovi koji podržavaju doprinose iz javnosti, kao Å¡to je ovaj viki, Äesto zloupotrebljavaju vandali koji koriste automatizovane alate da Å¡alju svoje linkove ka mnogim sajtovima.\nIako se ovi neželjeni linkovi mogu ukloniti, oni ipak zadaju veliku muku.\n\nPonekad, pogotovo kad se dodaju novi internet linkovi na stranicu, wiki može tražiti od Vas da odgovorite na pitanje. PoÅ¡to je teÅ¡ko automatizovati ovakav zadatak, on omogućuje svim pravim ljudima da vrÅ¡e svoje izmjene, ali će zato sprijeÄiti vandale i ostale robotske napadaÄe.\n\nMolimo Vas da kontaktirate [[Special:ListAdmins|administratore stranice]] za pomoć ako je ovo prepreka za Vas da pravite uobiÄajene izmjene.\n\nKliknite 'nazad' ('back') dugme vaÅ¡eg preglednika da se vratite na polje za unos teksta." } diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json index 7dbf4d06..88017495 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json +++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json @@ -3,14 +3,15 @@ "authors": [ "Crazymadlover", "Pertile", - "Sporeunai" + "Sporeunai", + "Macofe" ] }, - "questycaptcha-addurl": "Tu edición incluye nuevos enlaces externos. \nPara protegernos contra el spam automatizado, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):", - "questycaptcha-badlogin": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):", - "questycaptcha-createaccount": "Para proteger el wiki de la creación automática de cuentas, resuelve por favor la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):", + "questycaptcha-addurl": "Tu edición incluye enlaces externos nuevos. \nPara proteger el wiki contra el spam automatizado, te pedimos que respondas la pregunta que aparece debajo ([[Special:Captcha/help|más información]]):", + "questycaptcha-badlogin": "Para proteger el wiki contra el descifrado automatizado de contraseñas, te pedimos que respondas la pregunta que aparece debajo ([[Special:Captcha/help|más información]]):", + "questycaptcha-createaccount": "Para proteger el wiki contra la creación automatizada de cuentas, te pedimos que respondas la pregunta que aparece debajo ([[Special:Captcha/help|más información]]):", "questycaptcha-create": "Para crear la página, por favor responde la pregunta que aparece abajo ([[Special:Captcha/help|más información]]):", "questycaptcha-edit": "Para editar esta página, por favor responde la pregunta que aparece abajo ([[Special:Captcha/help|más información]]):", - "questycaptcha-sendemail": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):", + "questycaptcha-sendemail": "Para proteger el wiki contra el spam automatizado, te pedimos que respondas la pregunta que aparece debajo ([[Special:Captcha/help|más información]]):", "questycaptchahelp-text": "Sitios Web que aceptan contribuciones del público, como este wiki, son constantemente abusadas por enviadores de spam quienes usan herramientas automáticas para agregar sus enlaces a muchos sitios.\nAsí estos enlaces spam puedan ser borrados, son una molestia significativa.\n\nA veces, especialmente cuando se agregan nuevos enlaces web a una página, el wiki puede pedirte que respondas a una pregunta.\nYa que esta es una tarea que es difícil de automatizar, eso permitirá que más seres humanos reales hagan sus contribuciones mientras detiene a la mayor parte de enviadores de spam y otros atacantes robóticos.\n\nPor favor contacta a los [[Special:ListAdmins|administradores del sitio]] para asistencia si esto está impidiéndote hacer contribuciones legítimas.\n\nHaz click en el botón 'atrás' en tu navegador para regresar al editor de página." } diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json index c6d159d8..fba290b7 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json +++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json @@ -10,5 +10,5 @@ "questycaptcha-create": "Lehekülje loomiseks vasta palun alljärgnevale küsimusele ([[Special:Captcha/help|lisateave]]):", "questycaptcha-edit": "Selle lehekülje muutmiseks vasta palun alljärgnevale küsimusele ([[Special:Captcha/help|lisateave]]):", "questycaptcha-sendemail": "Palun vasta alljärgnevale küsimusele. Abinõu on kaitseks automaadistatud rämpsmuudatuste eest ([[Special:Captcha/help|lisateave]]):", - "questycaptchahelp-text": "Võrgukohti, mis lubavad külastajatel sisu muuta, nagu ka see viki, kasutavad sageli rämpsposti levitajad, lisades näiteks lehekülgedele reklaamilinke. Kuigi neid linke saab eemaldada, on nad siiski tülikad.\n\nKasutajakontot registreerides või mõnele lehele uusi internetiaadresse postitades võidakse paluda sul küsimusele vastata.\nKuna sellist tegevust on raske automaadistada, on see efektiivseks kaitseks rämpspostirobotite vastu ja lubab samas tavakasutajatel rahus muudatusi teha.\n\nKui sul tekib raskusi muudatuste tegemisel, võta palun ühendust selle võrgukoha [[Special:ListAdmins|administraatoritega]].\n\nRedigeerimislehele naasmiseks klõpsa võrgulehitseja ''tagasi''-nuppu." + "questycaptchahelp-text": "Võrgukohti, mis lubavad külastajatel sisu muuta, nagu ka see viki, kasutavad sageli rämpsposti levitajad, kes lisavad lehekülgedele näiteks reklaamlinke. Kuigi neid linke saab eemaldada, on nad siiski tülikad.\n\nKui registreerid kasutajakonto või lisad mõnele leheküljele uusi veebilinke, võidakse paluda sul küsimusele vastata.\nKuna küsimusele vastamist on raske automaadistada, on see tõhusaks kaitseks rämpspostirobotite vastu ja lubab samas tavakasutajatel rahus muudatusi teha.\n\nKui sul tekib raskusi muudatuste tegemisel, võta palun ühendust selle võrgukoha [[Special:ListAdmins|administraatoritega]].\n\nRedigeerimislehele naasmiseks klõpsa veebilehitseja ''tagasi''-nuppu." } diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json index d1bc823e..c1c7583a 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json +++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Als-Chlämens", - "Als-Holder" + "Als-Holder", + "J. 'mach' wust" ] }, "questycaptcha-addurl": "In Dynere Bearbeitig het s neji extärni Links.\nAs Schutz gege automatischi Spam, beantwort bitte d Frog, wu do unter gnännt wird ([[Special:Captcha/help|meh Informatione]]):", @@ -11,5 +12,5 @@ "questycaptcha-create": "Go d Syte aalege, beantwort bitte d Frog, wu do unte gnännt wird ([[Special:Captcha/help|meh Informatione]]):", "questycaptcha-edit": "Go die Syte bearbeite, beantwort bitte d Frog, wu do unte gnännt wird ([[Special:Captcha/help|meh Informatione]]):", "questycaptcha-sendemail": "As Schutz gege e automatischs Spamming, beantwort bitte d Frog, wu do unte gnännt wird ([[Special:Captcha/help|meh Informatione]]):", - "questycaptchahelp-text": "Websyte, wu jede cha byytrage, wie des Wiki, wäre vylmol missbrucht vu Spammer, wu automatischi Wärchzyg bruche go ihri Gleicher (Links) in meglischt vyli Syte yyfiege.\nAu wänn die Spamgleicher chenne wider uusegnuu wäre, sin si einewäg e zimlig Ärgernis.\n\nAb un zue, vor allem wänn neji Netzgleicher (Weblinks) in e Syte yygfiegt wäre, forderet s Wiki Di villicht uf, e Frog z beantworte.\nWel des e Ufgab isch, wu mer schwär cha automatisiere, isch des e Megligkeit, Spammer un anderi automatischi Attacke z verhindere, derwylscht di meischte mänschlige Benutzer ihri Bearbeitige chenne byytrage.\n\nBitte nimm Kontakt uf zue dr [[Special:ListAdmins|Website-Administratore]] fir Hilf, wänn des unerwarteterwys verhinderet, ass Du chasch rächtmäßigi Bearbeitige mache.\n\nDruck dr 'Zruck'-Chnopf in Dyym Browser go zuem Bearbeitigsfänschter zruckgoh." + "questycaptchahelp-text": "Websyte, wu alli chenne byytrage, wie des Wiki, wäre vylmol missbrucht vu Spammer, wu automatischi Wärchzyg bruche go ihri Link in meglischt vyli Syte yyfiege.\nAu wänn die Spamlink chenne wider uusegnuu wäre, sin si einewäg e zimlig Ärgernis.\n\nAb un zue, vor allem wänn neji Weblink in e Syte yygfiegt wäre, forderet s Wiki Di villicht uf, e Frog z beantworte.\nWel des e Ufgab isch, wu mer schwär cha automatisiere, isch des e Megligkeit, Spammer un anderi automatischi Attacke z verhindere, derwylscht di meischte mänschlige Benutzer ihri Bearbeitige chenne byytrage.\n\nBitte nimm Kontakt uf zue dr [[Special:ListAdmins|Website-Administratore]] fir Hilf, wänn des unerwarteterwys verhinderet, ass Du chasch rächtmäßigi Bearbeitige mache.\n\nDruck dr 'Zruck'-Chnopf in Dyym Browser go zuem Bearbeitigsfänschter zruckgoh." } diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json index 81aa74f5..db3fda1a 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json +++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Michawiki" + "Michawiki", + "J budissin" ] }, "questycaptcha-addurl": "Twoja zmÄ›na wobsahuje nowe eksterne wotkazy.\nZa Å¡kit pÅ™ećiwo awtomatizowanemu spamej, wotmoÅ‚w proÅ¡u na praÅ¡enje, kotrež so deleka jewi ([[Special:Captcha/help|dalÅ¡e informacije]]):", @@ -10,5 +11,5 @@ "questycaptcha-create": "Zo by stronu wutworiÅ‚, wotmoÅ‚w proÅ¡u na praÅ¡enje, kotrež so deleka jewi ([[Special:Captcha/help|dalÅ¡e informacije]]):", "questycaptcha-edit": "Zo by tutu stronu zmÄ›niÅ‚, wotmoÅ‚w proÅ¡u na praÅ¡enje, kotrež so deleka jewi ([[Special:Captcha/help|dalÅ¡e informacije]]):", "questycaptcha-sendemail": "Za Å¡kit pÅ™ećiwo awtomatiskemu spamowanju, wotmoÅ‚w proÅ¡u na praÅ¡enje, kotrež so deleka jewi ([[Special:Captcha/help|dalÅ¡e informacije]]):", - "questycaptchahelp-text": "WebsydÅ‚a, kotrež pÅ™inoÅ¡ki ze zjawnosće akceptuja, kaž tutón wiki, so Äasto wot spamarjow znjewužiwaja, kotÅ™iž awtomatizowane nastroje wužiwaja, zo bychu swoje wotkazy wjele sydÅ‚am pÅ™idali. HaÄrunjež so tute spamowe wotkazy hodźa wotstronić, su wone njesnadne mjerzanje.\n\nDruhdy, wosebje, hdyž so nowe webwotkazy stronje pÅ™idawaja, wiki so ći nÄ›Äeho praÅ¡a.\nDokelž to je nadawk, kotryž hodźi so jenož ćežko awtomatizować, dowoluje to woprawdźitym wosobam swoje pÅ™inoÅ¡ki wotpósÅ‚ać, mjeztym zo so najwjace spamarjow a druhich nadpadowacych botow blokuje. \n\nProÅ¡u staj so z [[Special:ListAdmins|administratorami sydÅ‚a]] z prostwu wo pomoc do zwiska, jeli to će haći legitimne pÅ™inoÅ¡ki pósÅ‚ać. \n\nKlikÅ„ na tłócatko \"Wróćo\" w swojim wobhladowaku, zo by so k wobdźěłowanskemu woknu wróćiÅ‚." + "questycaptchahelp-text": "WebsydÅ‚a, kotrež pÅ™inoÅ¡ki ze zjawnosće akceptuja, kaž tutón wiki, so Äasto wot spamarjow znjewužiwaja, kotÅ™iž awtomatizowane nastroje wužiwaja, zo bychu swoje wotkazy wjele sydÅ‚am pÅ™idali. HaÄrunjež so tute spamowe wotkazy hodźa wotstronić, su wone njesnadnje mjerzace.\n\nDruhdy, wosebje, hdyž so stronje nowe webwotkazy pÅ™idawaja, wiki so će něšto praÅ¡a.\nDokelž je to nadawk, kotryž hodźi so jenož ćežko awtomatizować, dowoluje to woprawdźitym wosobam swoje pÅ™inoÅ¡ki wotpósÅ‚ać, mjeztym zo so najwjace spamarjow a druhich nadpadowacych botow blokuje. \n\nProÅ¡u pÅ™iÅ„dź z [[Special:ListAdmins|administratorami sydÅ‚a]] do rozmoÅ‚wy wo pomoc, jeli to će haći legitimne pÅ™inoÅ¡ki wotpósÅ‚ać. \n\nKlikÅ„ na tłóÄatko \"Wróćo\" w swojim wobhladowaku, zo by so k wobdźěłowanskemu woknu wróćiÅ‚." } diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json index 7756e006..63ddbcdf 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json +++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json @@ -4,11 +4,12 @@ "Purodha" ] }, + "questycaptcha-desc": "Dä Kaptscha-Jennerahtor för et Zohsazprojramm Confirm Edit", "questycaptcha-addurl": "Ding Änderung säz neu Lengks noh ußerhallef vum Wiki.\nÖm uns jäje der automattesch dobeijedonn SPAM ze hellefe,\nbes esu joot un donn di Frooch be_anntwoode, di heh dronger shteiht.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])", "questycaptcha-badlogin": "Öm uns jäje et automattesche Paßwootknacke ze hellefe,\nbes esu joot un donn di Frooch be_anntwoode, di heh dronge shteiht.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])", "questycaptcha-createaccount": "Öm uns jäje et maßesch automattesch neu Metmaacher Aanlääje ze hellefe,\nbes esu joot un donn di Frooch be_anntwoode, di heh dronger shteiht.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])", "questycaptcha-create": "Öm di Sigg aanzelääje,\nbes esu joot, donn di Frooch be_anntwoode, di heh dronge shteiht.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])", - "questycaptcha-edit": "Öm di Sigg ze änderee,\nbes esu joot, donn di Frooch be_anntwoode, di heh dronge shteiht.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])", + "questycaptcha-edit": "Öm di Sigg ze änderee,\nbes esu joohd, donn di Frohch be_anntwoode, di heh dronge schhteiht.\n([[Special:Captcha/help|Mih Enfommazjuhne]])", "questycaptcha-sendemail": "Öm et Wiki jääje automattesch enjedraare SPAM ze schötze,\nbes esu joot, donn di Frooch be_anntwoode, di heh dronger shteiht.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])", "questycaptchahelp-text": "Websigge, di Beijdrääsch vun de Öffentleschkeit aannämme, wi dat Wiki heh,\nwääde öff vun SPAMmer heimjesöhk. Di bruche Projramme\nför ier Lengks udder annder Jedrieße automattesch en dousende Wikis erin\nze bränge. Der SPAM kam_mer wider fott maache, ävver dä\nblief e Ärjeneß.\n\nManschmohl, besönders, wann De neu Lengks en en Sigg donn wells, künnt et\nWiki Desch bedde, en Frooch ze be_antwoode. Nohdämm dat schwiiresch mem\nautomattesche Projramm henzekrijje es, löht et de Minsche ier Beidrääsch\nmaache, deiht ävver de miehßte SPAMmer un ander Robots affhallde.\n\nDonn Desh aan de [[Special:ListAdmins|Köbeße vum Wiki]] wende,\nwann et Der trozdämm en de Fööß kütt, un De Dinge aanshtändejje Beijdraach\nnit en et Wiki kriß!\n\nDä „Retuur“-Lengk udder -Knopp vun Dingem Brauser brängk Desch wider op\ndi Sigg zom Ändere, woh De jraad wohß." } diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json index 1e9798b6..d02f3b11 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json +++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json @@ -4,7 +4,7 @@ "Bjankuloski06" ] }, - "questycaptcha-desc": "Создавач CAPTCHA Ñо текнувало за потврда на уредувања", + "questycaptcha-desc": "Создавач на Ñликички Ñо текнувало за потврда на уредувања", "questycaptcha-addurl": "Вашето уредување Ñодржи нови надворешни врÑки.\nЗа го заштитиме викито од автоматизиран Ñпам, би ве замолиле да одговорите на прашањето подолу ([[Special:Captcha/help|повеќе инфо]]):", "questycaptcha-badlogin": "За да ни помогнете да Ñе заштитиме од автоматизирано пробивање на лозинки, би ве замолиле да одговорите на прашањето подолу ([[Special:Captcha/help|повеќе инфо]]):", "questycaptcha-createaccount": "За да ни помогнете да Ñе заштитиме од автоматизирано Ñоздавање на Ñметки, би ве замолиле да одговорите на прашањето подолу ([[Special:Captcha/help|повеќе инфо]]):", diff --git a/extensions/ConfirmEdit/README b/extensions/ConfirmEdit/README deleted file mode 100644 index 7a331e6b..00000000 --- a/extensions/ConfirmEdit/README +++ /dev/null @@ -1,44 +0,0 @@ -ConfirmEdit extension for MediaWiki - -This extension provides various CAPTCHA tools for MediaWiki, to allow -for protection against spambots and other automated tools. - -For more information, see the extension homepage at: -http://www.mediawiki.org/wiki/Extension:ConfirmEdit - -== Overview == - -The following modules are included in ConfirmEdit: - -* SimpleCaptcha - users have to solve an arithmetic math problem -* MathCaptcha - users have to solve a math problem that's displayed as -an image -* FancyCaptcha - users have to identify a series of characters, displayed -in a stylized way -* QuestyCaptcha - users have to answer a question, out of a series of -questions defined by the administrator(s) -* ReCaptcha - users have to identify a series of characters, either -visually or audially, from a widget provided by the reCAPTCHA service - -== License == - -ConfirmEdit is published under the GPL license. - -== Authors == - -The main framework, and the SimpleCaptcha and FancyCaptcha modules, were -written by Brion Vibber. - -The MathCaptcha module was written by Rob Church. - -The QuestyCaptcha module was written by Benjamin Lees. - -The reCAPTCHA module was written by Mike Crawford and Ben Maurer. - -Additional maintenance work was done by Yaron Koren. - -== Changelog == - -= Version 1.2 -Fixes bug 46132 - ConfirmEdit fatal error when using MathCaptcha and current Math extension. -See . diff --git a/extensions/ConfirmEdit/README.md b/extensions/ConfirmEdit/README.md new file mode 100644 index 00000000..584dd337 --- /dev/null +++ b/extensions/ConfirmEdit/README.md @@ -0,0 +1,152 @@ +ConfirmEdit +========= + +ConfirmEdit extension for MediaWiki + +This extension provides various CAPTCHA tools for MediaWiki, to allow +for protection against spambots and other automated tools. + +For more information, see the extension homepage at: +http://www.mediawiki.org/wiki/Extension:ConfirmEdit + +### Overview + +The following modules are included in ConfirmEdit: + +* SimpleCaptcha - users have to solve an arithmetic math problem +* MathCaptcha - users have to solve a math problem that's displayed as +an image +* FancyCaptcha - users have to identify a series of characters, displayed +in a stylized way +* QuestyCaptcha - users have to answer a question, out of a series of +questions defined by the administrator(s) +* ReCaptcha - users have to identify a series of characters, either +visually or audially, from a widget provided by the reCAPTCHA service + +### License + +ConfirmEdit is published under the GPL license. + +### Authors + +The main framework, and the SimpleCaptcha and FancyCaptcha modules, were +written by Brion Vibber. + +The MathCaptcha module was written by Rob Church. + +The QuestyCaptcha module was written by Benjamin Lees. + +The reCAPTCHA module was written by Mike Crawford and Ben Maurer. + +Additional maintenance work was done by Yaron Koren. + +### Configuations Comments +```php +/** + * List of IP ranges to allow to skip the captcha, similar to the group setting: + * "$wgGroupPermission[...]['skipcaptcha'] = true" + * + * Specific IP addresses or CIDR-style ranges may be used, + * for instance: + * $wgCaptchaWhitelistIP = array('192.168.1.0/24', '10.1.0.0/16'); + */ +$wgCaptchaWhitelistIP = false; + +/** + * Actions which can trigger a captcha + * + * If the 'edit' trigger is on, *every* edit will trigger the captcha. + * This may be useful for protecting against vandalbot attacks. + * + * If using the default 'addurl' trigger, the captcha will trigger on + * edits that include URLs that aren't in the current version of the page. + * This should catch automated linkspammers without annoying people when + * they make more typical edits. + * + * The captcha code should not use $wgCaptchaTriggers, but CaptchaTriggers() + * which also takes into account per namespace triggering. + */ +$wgCaptchaTriggers = array(); +$wgCaptchaTriggers['edit'] = false; // Would check on every edit +$wgCaptchaTriggers['create'] = false; // Check on page creation. +$wgCaptchaTriggers['sendemail'] = false; // Special:Emailuser +$wgCaptchaTriggers['addurl'] = true; // Check on edits that add URLs +$wgCaptchaTriggers['createaccount'] = true; // Special:Userlogin&type=signup +$wgCaptchaTriggers['badlogin'] = true; // Special:Userlogin after failure + +/** + * You may wish to apply special rules for captcha triggering on some namespaces. + * $wgCaptchaTriggersOnNamespace[][] forces an always on / + * always off configuration with that trigger for the given namespace. + * Leave unset to use the global options ($wgCaptchaTriggers). + * + * Shall not be used with 'createaccount' (it is not checked). + */ +$wgCaptchaTriggersOnNamespace = array(); + +# Example: +# $wgCaptchaTriggersOnNamespace[NS_TALK]['create'] = false; //Allow creation of talk pages without captchas. +# $wgCaptchaTriggersOnNamespace[NS_PROJECT]['edit'] = true; //Show captcha whenever editing Project pages. + +/** + * Indicate how to store per-session data required to match up the + * internal captcha data with the editor. + * + * 'CaptchaSessionStore' uses PHP's session storage, which is cookie-based + * and may fail for anons with cookies disabled. + * + * 'CaptchaCacheStore' uses $wgMemc, which avoids the cookie dependency + * but may be fragile depending on cache configuration. + */ +$wgCaptchaStorageClass = 'CaptchaSessionStore'; + +/** + * Number of seconds a captcha session should last in the data cache + * before expiring when managing through CaptchaCacheStore class. + * + * Default is a half hour. + */ +$wgCaptchaSessionExpiration = 30 * 60; + +/** + * Number of seconds after a bad login that a captcha will be shown to + * that client on the login form to slow down password-guessing bots. + * + * Has no effect if 'badlogin' is disabled in $wgCaptchaTriggers or + * if there is not a caching engine enabled. + * + * Default is five minutes. + */ +$wgCaptchaBadLoginExpiration = 5 * 60; + +/** + * Allow users who have confirmed their email addresses to post + * URL links without being harassed by the captcha. + */ +$ceAllowConfirmedEmail = false; + +/** + * Number of bad login attempts before triggering the captcha. 0 means the + * captcha is presented on the first login. + */ +$wgCaptchaBadLoginAttempts = 3; + +/** + * Regex to whitelist URLs to known-good sites... + * For instance: + * $wgCaptchaWhitelist = '#^https?://([a-z0-9-]+\\.)?(wikimedia|wikipedia)\.org/#i'; + * Local admins can define a whitelist under [[MediaWiki:captcha-addurl-whitelist]] + */ +$wgCaptchaWhitelist = false; + +/** + * Additional regexes to check for. Use full regexes; can match things + * other than URLs such as junk edits. + * + * If the new version matches one and the old version doesn't, + * toss up the captcha screen. + * + * @fixme Add a message for local admins to add items as well. + */ +$wgCaptchaRegexes = array(); +``` diff --git a/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.class.php b/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.class.php index cd274a97..90dc4f65 100644 --- a/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.class.php +++ b/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.class.php @@ -7,9 +7,9 @@ class ReCaptcha extends SimpleCaptcha { /** * Displays the reCAPTCHA widget. * If $this->recaptcha_error is set, it will display an error in the widget. - * + * @param OutputPage $out */ - function getForm() { + function getForm( OutputPage $out ) { global $wgReCaptchaPublicKey, $wgReCaptchaTheme; $useHttps = ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ); diff --git a/extensions/ConfirmEdit/ReCaptcha/i18n/es.json b/extensions/ConfirmEdit/ReCaptcha/i18n/es.json index 9ccbef30..ffcf7394 100644 --- a/extensions/ConfirmEdit/ReCaptcha/i18n/es.json +++ b/extensions/ConfirmEdit/ReCaptcha/i18n/es.json @@ -2,13 +2,14 @@ "@metadata": { "authors": [ "Fitoschido", - "Sporeunai" + "Sporeunai", + "Macofe" ] }, - "recaptcha-edit": "Para ayudar a protegernos contra el spam de ediciones automáticas, seleccione sólo las fotos de gatos en el cuadro siguiente:", - "recaptcha-addurl": "La edición incluye nuevos enlaces externos. Para proteger la wiki contra el spam automatizado, le rogamos que escriba las dos palabras que ves en el cuadro siguiente:", - "recaptcha-badlogin": "Para proteger el wiki contra el robo automatizado de contraseñas, te pedimos por favor que selecciones únicamente las fotos de gatos en el cuadro siguiente:", - "recaptcha-createaccount": "Para protegernos de la creación automática de cuentas, escribe las dos palabras que ves en el cuadro de abajo:", + "recaptcha-edit": "Para proteger el wiki contra el spam automatizado, te pedimos que escribas las dos palabras que ves en el cuadro siguiente:", + "recaptcha-addurl": "Tu edición incluye enlaces externos nuevos. Para proteger el wiki contra el spam automatizado, te pedimos que escribas las dos palabras que ves en el cuadro siguiente:", + "recaptcha-badlogin": "Para proteger el wiki contra el descifrado automatizado de contraseñas, te pedimos que escribas las dos palabras que ves en el cuadro siguiente:", + "recaptcha-createaccount": "Para proteger el wiki contra la creación automatizada de cuentas, te pedimos que escribas las dos palabras que ves en el cuadro siguiente:", "recaptcha-createaccount-fail": "ReCAPTCHA incorrecto o sin responder.", - "recaptcha-create": "Para proteger contra creación automatizada página wiki, amablemente le pedimos que escriba las dos palabras que ves en el cuadro siguiente:" + "recaptcha-create": "Para proteger el wiki contra la creación automatizada de páginas, te pedimos que escribas las dos palabras que ves en el cuadro siguiente:" } diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha.php b/extensions/ConfirmEdit/ReCaptchaNoCaptcha.php new file mode 100644 index 00000000..17796e57 --- /dev/null +++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha.php @@ -0,0 +1,2 @@ +addHeadItem( + 'g-recaptchascript', + '' + ); + $output = Html::element( 'div', array( + 'class' => array( + 'g-recaptcha', + 'mw-confirmedit-captcha-fail' => !!$this->error, + ), + 'data-sitekey' => $wgReCaptchaSiteKey + ) ); + $htmlUrlencoded = htmlspecialchars( urlencode( $wgReCaptchaSiteKey ) ); + $output .= << +
    +
    +
    + +
    +
    + +
    +
    +
    + +HTML; + return $output; + } + + protected function logCheckError( $info ) { + if ( $info instanceof Status ) { + $errors = $status->getErrorsArray(); + $error = $errors[0][0]; + } elseif ( is_array( $info ) ) { + $error = implode( ',', $info ); + } else { + $error = $info; + } + wfDebugLog( 'captcha', 'Unable to validate response: ' . $error ); + } + + /** + * Check, if the user solved the captcha. + * + * Based on reference implementation: + * https://github.com/google/recaptcha#php + * + * @return boolean + */ + function passCaptcha() { + global $wgRequest, $wgReCaptchaSecretKey, $wgReCaptchaSendRemoteIP; + + $url = 'https://www.google.com/recaptcha/api/siteverify'; + // Build data to append to request + $data = array( + 'secret' => $wgReCaptchaSecretKey, + 'response' => $wgRequest->getVal( 'g-recaptcha-response' ), + ); + if ( $wgReCaptchaSendRemoteIP ) { + $data['remoteip'] = $wgRequest->getIP(); + } + $url = wfAppendQuery( $url, $data ); + $request = MWHttpRequest::factory( $url, array( 'method' => 'GET' ) ); + $status = $request->execute(); + if ( !$status->isOK() ) { + $this->error = 'http'; + $this->logStatusError( $status ); + return false; + } + $response = FormatJson::decode( $request->getContent(), true ); + if ( !$response ) { + $this->error = 'json'; + $this->logStatusError( $this->error ); + return false; + } + if ( isset( $response['error-codes'] ) ) { + $this->error = 'recaptcha-api'; + $this->logCheckError( $response['error-codes'] ); + return false; + } + + return $response['success']; + } + + function addCaptchaAPI( &$resultArr ) { + global $wgReCaptchaSiteKey; + + $resultArr['captcha']['type'] = 'recaptchanocaptcha'; + $resultArr['captcha']['mime'] = 'image/png'; + $resultArr['captcha']['key'] = $wgReCaptchaSiteKey; + $resultArr['captcha']['error'] = $this->error; + } + + /** + * Show a message asking the user to enter a captcha on edit + * The result will be treated as wiki text + * + * @param $action string Action being performed + * @return string Wikitext + */ + function getMessage( $action ) { + $name = 'renocaptcha-' . $action; + $msg = wfMessage( $name ); + + $text = $msg->isDisabled() ? wfMessage( 'renocaptcha-edit' )->text() : $msg->text(); + if ( $this->error ) { + $text = '
    ' . $text . '
    '; + } + return $text; + } + + public function APIGetAllowedParams( &$module, &$params, $flags ) { + if ( $flags && $this->isAPICaptchaModule( $module ) ) { + $params['g-recaptcha-response'] = null; + } + + return true; + } + + public function APIGetParamDescription( &$module, &$desc ) { + if ( $this->isAPICaptchaModule( $module ) ) { + $desc['g-recaptcha-response'] = 'Field from the ReCaptcha widget'; + } + + return true; + } +} diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php new file mode 100644 index 00000000..e7528b7a --- /dev/null +++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php @@ -0,0 +1,13 @@ +getCaptcha(); $index = $this->storeCaptcha( $captcha ); @@ -69,28 +69,12 @@ class SimpleCaptcha { if ( !isset( $page->ConfirmEdit_ActivateCaptcha ) ) { return; } - unset( $page->ConfirmEdit_ActivateCaptcha ); - $out->addHTML( - Html::openElement( - 'div', - array( - 'id' => 'mw-confirmedit-error-area', - 'class' => 'errorbox' - ) - ) . - Html::element( - 'strong', - array(), - $out->msg( 'errorpagetitle' )->text() - ) . - Html::element( - 'div', - array( 'id' => 'errorbox-body' ), - $out->msg( 'captcha-sendemail-fail' )->text() - ) . - Html::closeElement( 'div' ) - ); - $this->showEditCaptcha = true; + + if ( $this->action !== 'edit' ) { + unset( $page->ConfirmEdit_ActivateCaptcha ); + $out->addWikiText( $this->getMessage( $this->action ) ); + $out->addHTML( $this->getForm( $out ) ); + } } /** @@ -102,11 +86,10 @@ class SimpleCaptcha { $page = $editPage->getArticle()->getPage(); $out = $context->getOutput(); if ( isset( $page->ConfirmEdit_ActivateCaptcha ) || - $this->showEditCaptcha || - $this->shouldCheck( $page, '', '', false ) + $this->shouldCheck( $page, '', '', $context ) ) { $out->addWikiText( $this->getMessage( $this->action ) ); - $out->addHTML( $this->getForm() ); + $out->addHTML( $this->getForm( $out ) ); } unset( $page->ConfirmEdit_ActivateCaptcha ); } @@ -143,7 +126,7 @@ class SimpleCaptcha { $form->addFooterText( "
    " . $wgOut->parse( $this->getMessage( 'sendemail' ) ) . - $this->getForm() . + $this->getForm( $wgOut ) . "
    \n" ); } return true; @@ -163,9 +146,13 @@ class SimpleCaptcha { wfDebug( "ConfirmEdit: user group allows skipping captcha on account creation\n" ); return true; } + LoggerFactory::getInstance( 'authmanager' )->info( 'Captcha shown on account creation', array( + 'event' => 'captcha.display', + 'type' => 'accountcreation', + ) ); $captcha = "
    " . $wgOut->parse( $this->getMessage( 'createaccount' ) ) . - $this->getForm() . + $this->getForm( $wgOut ) . "
    \n"; // for older MediaWiki versions if ( is_callable( array( $template, 'extend' ) ) ) { @@ -188,10 +175,14 @@ class SimpleCaptcha { if ( $this->isBadLoginTriggered() ) { global $wgOut; + LoggerFactory::getInstance( 'authmanager' )->info( 'Captcha shown on login', array( + 'event' => 'captcha.display', + 'type' => 'login', + ) ); $this->action = 'badlogin'; $captcha = "
    " . $wgOut->parse( $this->getMessage( 'badlogin' ) ) . - $this->getForm() . + $this->getForm( $wgOut ) . "
    \n"; // for older MediaWiki versions if ( is_callable( array( $template, 'extend' ) ) ) { @@ -302,23 +293,37 @@ class SimpleCaptcha { * @param WikiPage $page * @param $content Content|string * @param $section string - * @param $isContent bool If true, $content is a Content object - * @param $oldtext string The content of the revision prior to $content. When + * @param IContextSource $context + * @param $oldtext string The content of the revision prior to $content. When * null this will be loaded from the database. * @return bool true if the captcha should run */ - function shouldCheck( WikiPage $page, $content, $section, $isContent = false, $oldtext = null ) { - $title = $page->getTitle(); - $this->trigger = ''; + function shouldCheck( WikiPage $page, $content, $section, $context, $oldtext = null ) { + global $ceAllowConfirmedEmail; - if ( $oldtext === null ) { - global $wgRequest; - $loadOldtextFlags = $wgRequest->wasPosted() - ? Revision::READ_LATEST - : Revision::READ_NORMAL; + if ( !$context instanceof IContextSource ) { + $context = RequestContext::getMain(); + } + + $request = $context->getRequest(); + $user = $context->getUser(); + + // captcha check exceptions, which will return always false + if ( $user->isAllowed( 'skipcaptcha' ) ) { + wfDebug( "ConfirmEdit: user group allows skipping captcha\n" ); + return false; + } elseif ( $this->isIPWhitelisted() ) { + wfDebug( "ConfirmEdit: user IP is whitelisted" ); + return false; + } elseif ( $ceAllowConfirmedEmail && $user->isEmailConfirmed() ) { + wfDebug( "ConfirmEdit: user has confirmed mail, skipping captcha\n" ); + return false; } - if ( $isContent ) { + $title = $page->getTitle(); + $this->trigger = ''; + + if ( $content instanceof Content ) { if ( $content->getModel() == CONTENT_MODEL_WIKITEXT ) { $newtext = $content->getNativeData(); } else { @@ -330,27 +335,10 @@ class SimpleCaptcha { $isEmpty = $content === ''; } - global $wgUser; - if ( $wgUser->isAllowed( 'skipcaptcha' ) ) { - wfDebug( "ConfirmEdit: user group allows skipping captcha\n" ); - return false; - } - if ( $this->isIPWhitelisted() ) - return false; - - - global $wgEmailAuthentication, $ceAllowConfirmedEmail; - if ( $wgEmailAuthentication && $ceAllowConfirmedEmail && - $wgUser->isEmailConfirmed() ) { - wfDebug( "ConfirmEdit: user has confirmed mail, skipping captcha\n" ); - return false; - } - if ( $this->captchaTriggers( $title, 'edit' ) ) { // Check on all edits - global $wgUser; $this->trigger = sprintf( "edit trigger by '%s' at [[%s]]", - $wgUser->getName(), + $user->getName(), $title->getPrefixedText() ); $this->action = 'edit'; wfDebug( "ConfirmEdit: checking all edits...\n" ); @@ -359,18 +347,23 @@ class SimpleCaptcha { if ( $this->captchaTriggers( $title, 'create' ) && !$title->exists() ) { // Check if creating a page - global $wgUser; $this->trigger = sprintf( "Create trigger by '%s' at [[%s]]", - $wgUser->getName(), + $user->getName(), $title->getPrefixedText() ); $this->action = 'create'; wfDebug( "ConfirmEdit: checking on page creation...\n" ); return true; } + // The following checks are expensive and should be done only, if we can assume, that the edit will be saved + if ( !$request->wasPosted() ) { + wfDebug( "ConfirmEdit: request not posted, assuming that no content will be saved -> no CAPTCHA check" ); + return false; + } + if ( !$isEmpty && $this->captchaTriggers( $title, 'addurl' ) ) { // Only check edits that add URLs - if ( $isContent ) { + if ( $content instanceof Content ) { // Get links from the database $oldLinks = $this->getLinksFromTracker( $title ); // Share a parse operation with Article::doEdit() @@ -382,7 +375,7 @@ class SimpleCaptcha { } } else { // Get link changes in the slowest way known to man - $oldtext = isset( $oldtext ) ? $oldtext : $this->loadText( $title, $section, $loadOldtextFlags ); + $oldtext = isset( $oldtext ) ? $oldtext : $this->loadText( $title, $section ); $oldLinks = $this->findLinks( $title, $oldtext ); $newLinks = $this->findLinks( $title, $newtext ); } @@ -392,10 +385,9 @@ class SimpleCaptcha { $numLinks = count( $addedLinks ); if ( $numLinks > 0 ) { - global $wgUser; $this->trigger = sprintf( "%dx url trigger by '%s' at [[%s]]: %s", $numLinks, - $wgUser->getName(), + $user->getName(), $title->getPrefixedText(), implode( ", ", $addedLinks ) ); $this->action = 'addurl'; @@ -405,8 +397,11 @@ class SimpleCaptcha { global $wgCaptchaRegexes; if ( $newtext !== null && $wgCaptchaRegexes ) { + if ( !is_array( $wgCaptchaRegexes ) ) { + throw new UnexpectedValueException( '$wgCaptchaRegexes is required to be an array, ' . gettype( $wgCaptchaRegexes ) . ' given.' ); + } // Custom regex checks. Reuse $oldtext if set above. - $oldtext = isset( $oldtext ) ? $oldtext : $this->loadText( $title, $section, $loadOldtextFlags ); + $oldtext = isset( $oldtext ) ? $oldtext : $this->loadText( $title, $section ); foreach ( $wgCaptchaRegexes as $regex ) { $newMatches = array(); @@ -418,11 +413,10 @@ class SimpleCaptcha { $numHits = count( $addedMatches ); if ( $numHits > 0 ) { - global $wgUser; $this->trigger = sprintf( "%dx %s at [[%s]]: %s", $numHits, $regex, - $wgUser->getName(), + $user->getName(), $title->getPrefixedText(), implode( ", ", $addedMatches ) ); $this->action = 'edit'; @@ -562,18 +556,18 @@ class SimpleCaptcha { * @param WikiPage $page * @param $newtext string * @param $section - * @param $isContent bool + * @param IContextSource $context * @return bool false if the CAPTCHA is rejected, true otherwise */ - private function doConfirmEdit( WikiPage $page, $newtext, $section, $isContent = false ) { - global $wgRequest; - if ( $wgRequest->getVal( 'captchaid' ) ) { - $wgRequest->setVal( 'wpCaptchaId', $wgRequest->getVal( 'captchaid' ) ); + private function doConfirmEdit( WikiPage $page, $newtext, $section, IContextSource $context ) { + $request = $context->getRequest(); + if ( $request->getVal( 'captchaid' ) ) { + $request->setVal( 'wpCaptchaId', $request->getVal( 'captchaid' ) ); } - if ( $wgRequest->getVal( 'captchaword' ) ) { - $wgRequest->setVal( 'wpCaptchaWord', $wgRequest->getVal( 'captchaword' ) ); + if ( $request->getVal( 'captchaword' ) ) { + $request->setVal( 'wpCaptchaWord', $request->getVal( 'captchaword' ) ); } - if ( $this->shouldCheck( $page, $newtext, $section, $isContent ) ) { + if ( $this->shouldCheck( $page, $newtext, $section, $context ) ) { return $this->passCaptchaLimited(); } else { wfDebug( "ConfirmEdit: no need to show captcha.\n" ); @@ -598,8 +592,23 @@ class SimpleCaptcha { # The CAPTCHA was already checked and approved return true; } + if ( !$context->canUseWikiPage() ) { + // we check WikiPage only + // try to get an appropriate title for this page + $title = $context->getTitle(); + if ( $title instanceof Title ) { + $title = $title->getFullText(); + } else { + // otherwise it's an unknown page where this function is called from + $title = 'unknown'; + } + // log this error, it could be a problem in another extension, edits should always have a WikiPage if + // they go through EditFilterMergedContent. + wfDebug( __METHOD__ . ': Skipped ConfirmEdit check: No WikiPage for title ' . $title ); + return true; + } $page = $context->getWikiPage(); - if ( !$this->doConfirmEdit( $page, $content, false, true ) ) { + if ( !$this->doConfirmEdit( $page, $content, false, $context ) ) { if ( $legacyMode ) { $status->fatal( 'hookaborted' ); } @@ -614,7 +623,7 @@ class SimpleCaptcha { function confirmEditAPI( $editPage, $newText, &$resultArr ) { $page = $editPage->getArticle()->getPage(); - if ( !$this->doConfirmEdit( $page, $newText, false, false ) ) { + if ( !$this->doConfirmEdit( $page, $newText, false, $editPage->getArticle()->getContext() ) ) { $this->addCaptchaAPI( $resultArr ); return false; } @@ -632,7 +641,13 @@ class SimpleCaptcha { function confirmUserCreate( $u, &$message, &$status = null ) { if ( $this->needCreateAccountCaptcha() ) { $this->trigger = "new account '" . $u->getName() . "'"; - if ( !$this->passCaptchaLimited() ) { + $success = $this->passCaptchaLimited(); + LoggerFactory::getInstance( 'authmanager' )->info( 'Captcha submitted on account creation', array( + 'event' => 'captcha.submit', + 'type' => 'accountcreation', + 'successful' => $success, + ) ); + if ( !$success ) { // For older MediaWiki $message = wfMessage( 'captcha-createaccount-fail' )->text(); // For MediaWiki 1.23+ @@ -682,7 +697,13 @@ class SimpleCaptcha { return true; $this->trigger = "post-badlogin login '" . $u->getName() . "'"; - if ( !$this->passCaptchaLimited() ) { + $success = $this->passCaptchaLimited(); + LoggerFactory::getInstance( 'authmanager' )->info( 'Captcha submitted on login', array( + 'event' => 'captcha.submit', + 'type' => 'login', + 'successful' => $success, + ) ); + if ( !$success ) { // Emulate a bad-password return to confuse the shit out of attackers $retval = LoginForm::WRONG_PASS; return false; @@ -768,13 +789,13 @@ class SimpleCaptcha { * * @see self::passCaptcha() */ - private function passCaptchaLimited() { + public function passCaptchaLimited() { global $wgUser; // don't increase pingLimiter here, just check, if CAPTCHA limit exceeded if ( $wgUser->pingLimiter( 'badcaptcha', 0 ) ) { // for debugging add an proper error message, the user just see an false captcha error message - wfDebug( 'ConfirmEdit: User reached RateLimit, preventing action.' ); + $this->log( 'User reached RateLimit, preventing action.' ); return false; } @@ -965,6 +986,11 @@ class SimpleCaptcha { if ( $warning['message'] === 'captcha-createaccount-fail' ) { $this->addCaptchaAPI( $result ); $result['result'] = 'NeedCaptcha'; + + LoggerFactory::getInstance( 'authmanager' )->info( 'Captcha data added in account creation API', array( + 'event' => 'captcha.display', + 'type' => 'accountcreation', + ) ); } } } diff --git a/extensions/ConfirmEdit/composer.json b/extensions/ConfirmEdit/composer.json new file mode 100644 index 00000000..f2883f7a --- /dev/null +++ b/extensions/ConfirmEdit/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude vendor" + ] + } +} diff --git a/extensions/ConfirmEdit/extension.json b/extensions/ConfirmEdit/extension.json new file mode 100644 index 00000000..8082005b --- /dev/null +++ b/extensions/ConfirmEdit/extension.json @@ -0,0 +1,129 @@ +{ + "@doc": "Please read README.md", + "name": "ConfirmEdit", + "version": "1.4.0", + "author": [ + "Brion Vibber", + "..." + ], + "url": "https://www.mediawiki.org/wiki/Extension:ConfirmEdit", + "descriptionmsg": "captcha-desc", + "license-name": "GPL-2.0+", + "type": "antispam", + "GroupPermissions": { + "*": { + "skipcaptcha": false + }, + "user": { + "skipcaptcha": false + }, + "autoconfirmed": { + "skipcaptcha": false + }, + "bot": { + "skipcaptcha": true + }, + "sysop": { + "skipcaptcha": true + } + }, + "AvailableRights": [ + "skipcaptcha" + ], + "ExtensionFunctions": [ + "ConfirmEditHooks::confirmEditSetup" + ], + "SpecialPages": { + "Captcha": "CaptchaSpecialPage" + }, + "MessagesDirs": { + "ConfirmEdit": [ + "i18n" + ] + }, + "ExtensionMessagesFiles": { + "ConfirmEditAlias": "ConfirmEdit.alias.php" + }, + "AutoloadClasses": { + "ConfirmEditHooks": "includes/ConfirmEditHooks.php", + "SimpleCaptcha": "SimpleCaptcha/Captcha.php", + "CaptchaStore": "includes/CaptchaStore.php", + "CaptchaSessionStore": "includes/CaptchaStore.php", + "CaptchaCacheStore": "includes/CaptchaStore.php", + "CaptchaSpecialPage": "includes/specials/SpecialCaptcha.php" + }, + "Hooks": { + "EditPageBeforeEditButtons": [ + "ConfirmEditHooks::confirmEditPage" + ], + "UserCreateForm": [ + "ConfirmEditHooks::injectUserCreate" + ], + "AbortNewAccount": [ + "ConfirmEditHooks::confirmUserCreate" + ], + "LoginAuthenticateAudit": [ + "ConfirmEditHooks::triggerUserLogin" + ], + "UserLoginForm": [ + "ConfirmEditHooks::injectUserLogin" + ], + "AbortLogin": [ + "ConfirmEditHooks::confirmUserLogin" + ], + "EmailUserForm": [ + "ConfirmEditHooks::injectEmailUser" + ], + "EmailUser": [ + "ConfirmEditHooks::confirmEmailUser" + ], + "EditPage::showEditForm:fields": [ + "ConfirmEditHooks::showEditFormFields" + ], + "EditFilterMergedContent": [ + "ConfirmEditHooks::confirmEditMerged" + ], + "APIGetAllowedParams": [ + "ConfirmEditHooks::APIGetAllowedParams" + ], + "APIGetParamDescription": [ + "ConfirmEditHooks::APIGetParamDescription" + ], + "AddNewAccountApiForm": [ + "ConfirmEditHooks::addNewAccountApiForm" + ], + "AddNewAccountApiResult": [ + "ConfirmEditHooks::addNewAccountApiResult" + ], + "APIEditBeforeSave": [ + "ConfirmEditHooks::confirmEditAPI" + ], + "UnitTestsList": [ + "ConfirmEditHooks::onUnitTestsList" + ] + }, + "config": { + "_prefix": "", + "wgCaptchaWhitelistIP": false, + "wgCaptcha": null, + "wgCaptchaClass": "SimpleCaptcha", + "wgCaptchaTriggers": { + "edit": false, + "create": false, + "sendemail": false, + "addurl": true, + "createaccount": true, + "badlogin": true, + "_merge_strategy": "array_plus" + }, + "wgCaptchaTriggersOnNamespace": [], + "wgCaptchaStorageClass": "CaptchaSessionStore", + "wgCaptchaSessionExpiration": 1800, + "wgCaptchaBadLoginExpiration": 300, + "ceAllowConfirmedEmail": false, + "wgCaptchaBadLoginAttempts": 3, + "wgCaptchaWhitelist": false, + "wgCaptchaRegexes": [] + }, + "manifest_version": 1 +} diff --git a/extensions/ConfirmEdit/i18n/ady-cyrl.json b/extensions/ConfirmEdit/i18n/ady-cyrl.json new file mode 100644 index 00000000..67350961 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/ady-cyrl.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "GR44 Luc" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/an.json b/extensions/ConfirmEdit/i18n/an.json index f8d7fd92..232f3bd9 100644 --- a/extensions/ConfirmEdit/i18n/an.json +++ b/extensions/ConfirmEdit/i18n/an.json @@ -1,11 +1,13 @@ { "@metadata": { "authors": [ - "Juanpabl" + "Juanpabl", + "Carlos Cristia" ] }, "captcha-edit": "Ta editar ista pachina, faiga por favor a suma simpla que apareixe contino y escriba a solución en a caixa ([[Special:Captcha/help|más información]]):", "captcha-desc": "Implementación de CAPTCHA ta protecher contra o spam y dovinanza de claus.", + "captcha-label": "CAPTCHA", "captcha-addurl": "A suya edición encluye vinclos esternos. Ta aduyar-nos en a proteción contra o spam automatizato, por favor, faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más información]]):", "captcha-badlogin": "Ta aduyar-nos en a protección contra a obtención automatizata de claus d'acceso, por favor faiga a suma simpla que amaneixe contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más información]]):", "captcha-createaccount": "Ta aduyar-nos en a proteción contra a creyación automatica de cuentas, por favor faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más información]]):", diff --git a/extensions/ConfirmEdit/i18n/arz.json b/extensions/ConfirmEdit/i18n/arz.json index 90eacb67..90030c38 100644 --- a/extensions/ConfirmEdit/i18n/arz.json +++ b/extensions/ConfirmEdit/i18n/arz.json @@ -8,6 +8,7 @@ }, "captcha-edit": "علشان تعدل ÙÙ‰ الصÙحة دى، لو سمحت تحل المسالة الرياضية البسيطة اللى تحت Ùˆ اكتب الاجاية ÙÙ‰ الصندوء ([[Special:Captcha/help|معلومات اكتر]]):", "captcha-desc": "تطبيق بسيط لـ كابتشا", + "captcha-label": "كابتشا", "captcha-addurl": "التعديل بتاعك Ùيه لينكات خارجية جديدة.\nعلشان تساعد ÙÙ‰ الحماية من السبام الاوتوماتيكى،لو سمحت تحل المسالة الرياضية البسيطة اللى تحت Ùˆ اكتب الاجابة ÙÙ‰ الصندوء([[Special:Captcha/help|معلومات اكتر]]):", "captcha-badlogin": "علشان تساعد ÙÙ‰ الحماية من السرقة الاوتوماتيكية للباسورد، لو سمجت تحل المسألة الرياضية البسيطة اللى تحت Ùˆ تكتب الاجابة جوه الصندوء([[Special:Captcha/help|معلومات اكتر]]):", "captcha-createaccount": "علشان تساعد ÙÙ‰ الحماية من Ùتح الحساب الاوتوماتيكى،لو سمحت تحل المسألة الرياضية البسيطة اللى تحت Ùˆ تكتب الاجابة جوه الصندوء ([[Special:Captcha/help|معلومات اكتر]]):", diff --git a/extensions/ConfirmEdit/i18n/bs.json b/extensions/ConfirmEdit/i18n/bs.json index 3cff1ce8..cc234a82 100644 --- a/extensions/ConfirmEdit/i18n/bs.json +++ b/extensions/ConfirmEdit/i18n/bs.json @@ -3,18 +3,20 @@ "authors": [ "BrokenArrow", "CERminator", - "Palapa" + "Palapa", + "Semso98" ] }, "captcha-edit": "VaÅ¡a izmjena ukljuÄuje nove URL linkove; kao zaÅ¡tita od automatizovanog vandalizma, moraćete da izraÄunate zadatak ispod i upiÅ¡ete odgovor u prozor:\n([[Special:Captcha/help|Å ta je ovo?]]):", "captcha-desc": "Omogućava CAPTCHA tehnike za zaÅ¡titu protiv spama i probijanja Å¡ifre", - "captcha-addurl": "VaÅ¡a izmjena ukljuÄuje nove URL linkove; kao zaÅ¡tita od automatizovanog vandalizma, moraćete da upiÅ¡ete rezultat prikazane sume u okvir ([[Special:Captcha/help|Å ta je ovo?]]):", + "captcha-label": "CAPTCHA", + "captcha-addurl": "VaÅ¡a izmjena ukljuÄuje nove vanjske linkove.\nKako bi zaÅ¡titili wiki od automatizovanog vandalizma, molimo vas da ispod rijeÅ¡ite jednostavan zbir i upiÅ¡ete rezultat u kutiju kako bi saÄuvali izmjenu ([[Special:Captcha/help|viÅ¡e informacija]]):", "captcha-badlogin": "Da bi ste pomogli protiv automatskog probijanja Å¡ifre, molimo rijeÅ¡ite jednostavan zadatak sabiranja ispod i unesite rezultat u kutiju ([[Special:Captcha/help|viÅ¡e informacija]]):", - "captcha-createaccount": "Kao zaÅ¡tita od automatizovanog vandalizma, moraćete da ukucate rezultat sume u okvir ispod da biste registrovali nalog:\n
    ([[Special:Captcha/help|Å ta je ovo?]])", + "captcha-createaccount": "Da bi zaÅ¡titili wiki od automatiziranog pravljenja raÄuna, ljubazno Vas molimo da unesete rijeÄi koje će se pojaviti u kutiji ispod ([[Special:Captcha/help|viÅ¡e informacija]]):", "captcha-createaccount-fail": "NetaÄan unos ili nedostajući CAPTCHA.", "captcha-create": "Da bi ste napravili stranicu; kao zaÅ¡tita od automatizovanog vandalizma, moraćete da ukucate rezultat prikazane sume u okvir ispod:\n([[Special:Captcha/help|Å ta je ovo?]])", - "captcha-sendemail": "Da bi ste pomogli protiv automatskog stavljanja linkova, molimo rijeÅ¡ite jednostavan zadatak sabiranja ispod i unesite rezultat u kutiju ([[Special:Captcha/help|viÅ¡e informacija]]):", - "captcha-sendemail-fail": "NetaÄan unos ili nedostatak Å¡ifre za potvrÄ‘ivanje.", + "captcha-sendemail": "Da bi ste pomogli protiv automatskog probijanja Å¡ifre, molimo rijeÅ¡ite jednostavan zadatak sabiranja ispod i unesite rezultat u kutiju ([[Special:Captcha/help|viÅ¡e informacija]]):", + "captcha-sendemail-fail": "NetaÄan unos ili nedostajući CAPTCHA.", "captcha-disabledinapi": "Ova akcija zahtjeva captchu, tako da se ne može izvrÅ¡iti preko API.", "captchahelp-title": "Pomoć pri captcha", "captchahelp-cookies-needed": "Da bi ste ovo mogli raditi potrebno je da omogućite kolaÄiće (cookies) u VaÅ¡em pregledniku.", diff --git a/extensions/ConfirmEdit/i18n/ce.json b/extensions/ConfirmEdit/i18n/ce.json index c33406f4..fc42d0de 100644 --- a/extensions/ConfirmEdit/i18n/ce.json +++ b/extensions/ConfirmEdit/i18n/ce.json @@ -4,6 +4,6 @@ "Умар" ] }, - "captcha-desc": "Спамах ларо а пароль харжа а CAPTCHA таронаш хуьлуьйту", + "captcha-desc": "Спамах ларо а, пароль харжа а CAPTCHA таронаш хуьлуьйту", "right-skipcaptcha": "CAPTCHA-хьажар кхочушдар, CAPTCHA чекхдалар доцуш" } diff --git a/extensions/ConfirmEdit/i18n/ckb.json b/extensions/ConfirmEdit/i18n/ckb.json index f1383341..cd128a87 100644 --- a/extensions/ConfirmEdit/i18n/ckb.json +++ b/extensions/ConfirmEdit/i18n/ckb.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Calak" + "Calak", + "Muhammed taha" ] }, + "captcha-label": "کاپچا", "right-skipcaptcha": "جێبەجێکردنی کردەوەکانی پێویست بە کاپچا بەبێ بەکارھێنانی کاپچا" } diff --git a/extensions/ConfirmEdit/i18n/dty.json b/extensions/ConfirmEdit/i18n/dty.json new file mode 100644 index 00000000..06b41e9f --- /dev/null +++ b/extensions/ConfirmEdit/i18n/dty.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "रमेश सिंह बोहरा" + ] + }, + "captcha-label": "कà¥à¤¯à¤¾à¤ªà¥à¤šà¤¾" +} diff --git a/extensions/ConfirmEdit/i18n/el.json b/extensions/ConfirmEdit/i18n/el.json index 9922c589..ad219474 100644 --- a/extensions/ConfirmEdit/i18n/el.json +++ b/extensions/ConfirmEdit/i18n/el.json @@ -22,7 +22,7 @@ "captcha-createaccount-fail": "Εσφαλμένος ή μη διαθέσιμο CAPTCHA.", "captcha-create": "Για να δημιουÏγήσετε τη σελίδα, παÏακαλοÏμε υπολογίστε το παÏακάτω απλό άθÏοισμα και γÏάψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", "captcha-sendemail": "Για την Ï€Ïοστασία του βίκι απέναντι σε αυτοματοποιημένες ανεπιθÏμητες δημοσιεÏσεις, παÏακαλοÏμε υπολογίστε το παÏακάτω απλό άθÏοισμα και γÏάψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|πεÏισσότεÏες πληÏοφοÏίες]]):", - "captcha-sendemail-fail": "Λανθασμένος ή μη πληκτÏολογημένος κωδικός επιβεβαίωσης.", + "captcha-sendemail-fail": "Λανθασμένος ή μη πληκτÏολογημένος κωδικός οπτικής επαλήθευσης (CAPTCHA).", "captcha-disabledinapi": "Η ενέÏγεια αυτή απαιτεί επαλήθευση Î»ÎµÎºÏ„Î¹ÎºÎ¿Ï ÎºÎµÎ¹Î¼Î­Î½Î¿Ï… και για αυτό δεν μποÏεί να γίνει μέσω του API.", "captchahelp-title": "Βοήθεια για CAPTCHA", "captchahelp-cookies-needed": "Θα Ï€Ïέπει να έχετε τα cookies ενεÏγοποιημένα στον πεÏιηγητή σας για να εκτελεστεί η λειτουÏγία.", diff --git a/extensions/ConfirmEdit/i18n/et.json b/extensions/ConfirmEdit/i18n/et.json index 8d688a6a..d6f0e807 100644 --- a/extensions/ConfirmEdit/i18n/et.json +++ b/extensions/ConfirmEdit/i18n/et.json @@ -19,7 +19,7 @@ "captcha-disabledinapi": "Ãœhes selle toiminguga tuleb läbida robotilõks ja seetõttu ei saa seda API kaudu sooritada.", "captchahelp-title": "Mis on robotilõks?", "captchahelp-cookies-needed": "Selle toimimiseks peab veebilehitseja lubama küpsiseid.", - "captchahelp-text": "Võrgukohti, mis lubavad külastajatel sisu muuta, nagu ka see viki, kasutavad sageli rämpsposti levitajad, lisades näiteks lehekülgedele reklaamilinke. Kuigi neid linke saab eemaldada, on nad siiski tülikad.\n\nKasutajakontot registreerides või mõnele lehele uusi internetiaadresse postitades näidatakse moonutatud tekstiga pilti ja palutakse sisestada seal kuvatud sõnad. Kuna selliselt pildilt on arvutil raske teksti välja lugeda, on see efektiivseks kaitseks rämpspostirobotite vastu ja lubab samas tavakasutajatel rahus muudatusi teha.\n\nKahjuks võib see tekitada ebamugavusi nägemisraskustega inimestele või neile, kes kasutavad tehiskõneseadet või tekstipõhist veebilehitsejat. Hetkel pole meil helipõhist alternatiivi.\nKui sul tekib raskusi muudatuste tegemisel, võta palun ühendust selle võrgukoha [[Special:ListAdmins|administraatoritega]].\n\nKonto registreerimise lehele või redigeerimisaknasse tagasi jõudmiseks klõpsa veebilehitseja tagasi-nuppu.", + "captchahelp-text": "Võrgukohti, mis lubavad külastajatel sisu muuta, nagu ka see viki, kasutavad sageli rämpsposti levitajad, kes lisavad lehekülgedele näiteks reklaamlinke. Kuigi neid linke saab eemaldada, on nad siiski tülikad.\n\nKui registreerid kasutajakonto või lisad mõnele leheküljele uusi veebilinke, näidatakse sulle värvilise või moonutatud tekstiga pilti ning palutakse sisestada sellel kuvatud sõnad. Kuna arvutil raske pildilt teksti välja lugeda, on see tõhusaks kaitseks rämpspostirobotite vastu ja lubab samas tavakasutajatel rahus muudatusi teha.\n\nKahjuks võib see tekitada ebamugavusi nägemisraskustega inimestele või neile, kes kasutavad tehiskõneseadet või tekstipõhist veebilehitsejat. Hetkel pole meil helipõhist alternatiivi.\nKui sul tekib raskusi muudatuste tegemisel, võta palun ühendust selle võrgukoha [[Special:ListAdmins|administraatoritega]].\n\nKonto registreerimise lehele või redigeerimislehele naasmiseks klõpsa veebilehitseja ''tagasi''-nuppu.", "captcha-addurl-whitelist": " #
    \n# Süntaks:\n#  * Kõik alates märgist \"#\" kuni rea lõpuni on kommentaar\n#  * Iga rida, mis ei ole tühi, on regulaaravaldise osa, milleks sobib internetiaadressi osadest ainult hostinimi\n  #
    ", "right-skipcaptcha": "Sooritada robotilõksu vallapäästvaid toiminguid testi läbimata" } diff --git a/extensions/ConfirmEdit/i18n/eu.json b/extensions/ConfirmEdit/i18n/eu.json index 726d0e5f..353f3c39 100644 --- a/extensions/ConfirmEdit/i18n/eu.json +++ b/extensions/ConfirmEdit/i18n/eu.json @@ -5,15 +5,19 @@ "BrokenArrow", "Kobazulo", "Pi", - "Xabier Armendaritz" + "Xabier Armendaritz", + "Subi", + "Sator" ] }, "captcha-edit": "Orri hau editatzeko, ebatz ezazu beheko batuketa erraz hau, eta idatz ezazu erantzuna kutxan ([[Special:Captcha/help|argibide gehiago]]):", "captcha-desc": "CAPTCHA teknika erabiltzen ditu, spametik eta pasahitz-asmatzeetatik babesteko", + "captcha-label": "CAPTCHA", "captcha-addurl": "Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:
    ([[Special:Captcha/help|Zer da hau?]])", "captcha-createaccount": "Spam-a saihesteko, mesedez, irudian agertzen den hizki edo zenbaki kodea, beheko laukian idatzi zure kontua sortzeko:
    ([[Special:Captcha/help|Zer da hau?]])", "captcha-createaccount-fail": "CAPTCHA kodea falta da, edo desegokia da.", "captcha-create": "Orri hau sortzeko, ebatz ezazu beheko batuketa erraz hau, eta idatz ezazu erantzuna kutxan ([[Special:Captcha/help|argibide gehiago]]):", + "captcha-sendemail-fail": "CAPTCHA kodea falta da, edo desegokia da.", "captchahelp-title": "Captcha laguntza", "captchahelp-cookies-needed": "Beharrezkoa da nabigatzailean cookieak gaituta izatea honek funtzionatzeko.", "captchahelp-text": "Publikoki aldaketak egiteko aukerak dituzten webguneetan, wiki honetan bezalaxe, spam testuak gehitzen dira sarritan tresna automatikoak erabiliz.\nLotura horiek ezabatu egin daitezkeen arren, traba dira.\n\nBatzuetan, eta bereziki webgune berri bateko loturak gehitzen dituzunean, hitz batzuk dituen irudi bat agertuko zaizu, eta bertan ageri den testua idazteko eskatuko zaizu. Lan hori automatizatzeko zaila da, eta pertsonei ezer kostatzen ez zaigunez, spam testuak saihesteko lagungarria da.\n\nZoritxarrez, ikusmen mugatua edo testu bidezko nabigatzaileak erabiltzen dituzten erabiltzeek arazoak izan ditzakete. Horrelako zerbait gertatzen bazaizu, mesedez, jarri [[Special:ListAdmins|administratzaileekin]] harremanetan.\n\nZure nabigatzaileko 'atzera' lotura erabili aldaketen orrialdera itzultzeko." diff --git a/extensions/ConfirmEdit/i18n/fi.json b/extensions/ConfirmEdit/i18n/fi.json index f26a68b2..ef0ab50f 100644 --- a/extensions/ConfirmEdit/i18n/fi.json +++ b/extensions/ConfirmEdit/i18n/fi.json @@ -10,7 +10,8 @@ "Stryn", "Varusmies", "Syreeni", - "Pxos" + "Pxos", + "Jack Phoenix" ] }, "captcha-edit": "Ratkaise alla oleva laskutoimitus jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):", @@ -27,6 +28,6 @@ "captchahelp-title": "CAPTCHA-ohje", "captchahelp-cookies-needed": "Tämä toiminto vaatii evästeiden hyväksymistä selaimessa.", "captchahelp-text": "Verkkosivut, jotka sallivat ulkopuolisten lisätä sisältöä, joutuvat usein spam-hyökkäysten kohteeksi. Spam-hyökkäyksessä spammerit käyttävät työkaluja, jotka automaattisesti lisäävät linkkejä monille sivuille. Vaikka nämä linkit voidaan poistaa, aiheutuu niistä silti merkittävää haittaa.\n\nJoskus, erityisesti kun lisäät uusia linkkejä, saatat nähdä kuvan, jossa on värillistä ja vääristynyttä tekstiä, ja sinua pyydetään kirjoittamaan sen sisältämät sanat. Tätä tehtävää on vaikea automatisoida, joten se estää automaattiset lisäykset, mutta sallii ihmisten tehdä muutoksia sivustoon.\n\nValitettavasti tämä saattaa haitata käyttäjiä, joilla on rajoittunut näkökyky tai käyttäjiä, jotka käyttävät teksti- tai puhepohjaisia selaimia. \nTällä hetkellä ei ole käytettävissä puhepohjaista vaihtoehtoa. \nOta yhteyttä [[Special:ListAdmins|sivuston ylläpitäjiin]], jos et pysty tekemään asianmukaisia muutoksia.\n\nVarmistus ei toimi, jos evästeet eivät ole selaimessa käytössä.\n\nVoit palata muokkaustilaan selaimen paluutoiminnolla.", - "captcha-addurl-whitelist": " #
    \n# Syntaksi on seuraava:\n#  * Kaikki #-merkistä eteenpäin on kommenttia\n#  * Jokainen ei-tyhjä rivi on säännöllisen lausekkeen osa, joka suoritetaan vain linkeissä esiintyville verkkonimille.\n  #
    ", + "captcha-addurl-whitelist": " #
    \n# Syntaksi on seuraava:\n#  * Kaikki #-merkistä eteenpäin on kommenttia\n#  * Jokainen ei-tyhjä rivi on säännöllisen lausekkeen osa, joka suoritetaan vain linkeissä esiintyville verkkonimille.\n  #
    ", "right-skipcaptcha": "Suorittaa ilman CAPTCHA-kysymystä toimintoja, jotka normaalisti vaatisivat tarkastusta" } diff --git a/extensions/ConfirmEdit/i18n/gd.json b/extensions/ConfirmEdit/i18n/gd.json new file mode 100644 index 00000000..4ce90edf --- /dev/null +++ b/extensions/ConfirmEdit/i18n/gd.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "GunChleoc" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/glk.json b/extensions/ConfirmEdit/i18n/glk.json new file mode 100644 index 00000000..6bb858c4 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/glk.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "V6rg" + ] + }, + "captcha-label": "کأپچا" +} diff --git a/extensions/ConfirmEdit/i18n/gom-latn.json b/extensions/ConfirmEdit/i18n/gom-latn.json new file mode 100644 index 00000000..714a3548 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/gom-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "The Discoverer" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/gu.json b/extensions/ConfirmEdit/i18n/gu.json index 32a47276..c375af49 100644 --- a/extensions/ConfirmEdit/i18n/gu.json +++ b/extensions/ConfirmEdit/i18n/gu.json @@ -4,12 +4,12 @@ "Ashok modhvadia", "Dsvyas", "KartikMistry", - "Sushant savla" + "Sushant savla", + "Arbhatt" ] }, "captcha-edit": "આ લેખમાં ફેરફાર કરવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજà«àª¨àª¾ ખાનામાં લખો ([[Special:Captcha/help|more info]]):", - "captcha-desc": "", - "captcha-label": "CAPTCHA", + "captcha-label": "કેપà«àªšàª¾", "captcha-addurl": "તમે કરેલા ફેરફારોમાં નવી બાહà«àª¯ કડીઓ સામેલ છે. સà«àªµàªšàª¾àª²àª¿àª¤ સà«àªªà«‡àª®/સà«àªªàª¾àª®(spam) થી વિકિના બચાવ માટે, કૃપયા નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજà«àª¨àª¾ ખાનામાં લખો અને આપનà«àª‚ સંપાદન સાચવો ([[Special:Captcha/help|more info]]):", "captcha-badlogin": "આપોઆપ થતી ગà«àªªà«àª¤àª¸àª‚જà«àªžàª¾àª¨à«€ ચોરી (password cracking)થી વિકિના બચાવ માટે, કૃપયા નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજà«àª¨àª¾ ખાનામાં લખો ([[Special:Captcha/help|more info]]):", "captcha-createaccount": "આપોઆપ નવા ખાતા ખà«àª²àªµàª¾àª¥à«€ વિકિના બચાવ માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજà«àª¨àª¾ ખાનામાં લખો ([[Special:Captcha/help|વધૠવિગત]]):", diff --git a/extensions/ConfirmEdit/i18n/hi.json b/extensions/ConfirmEdit/i18n/hi.json index 39e0d3be..78a64eef 100644 --- a/extensions/ConfirmEdit/i18n/hi.json +++ b/extensions/ConfirmEdit/i18n/hi.json @@ -5,11 +5,12 @@ "Kaustubh", "Shyam", "Siddhartha Ghai", - "आलोक" + "आलोक", + "संजीव कà¥à¤®à¤¾à¤°" ] }, "captcha-edit": "यह पनà¥à¤¨à¤¾ संपादित करने के लिये नीचे दिये हà¥à¤ आसान गणित पà¥à¤°à¤¶à¥à¤¨ का उतà¥à¤¤à¤° बकà¥à¤¸à¥‡ में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):", - "captcha-desc": "आसानसे कॅपचा (captcha) का इसà¥à¤¤à¥‡à¤®à¤¾à¤²", + "captcha-desc": "आसानसे कॅपचा (captcha) का इसà¥à¤¤à¥‡à¤®à¤¾à¤²\nसà¥à¤ªà¥ˆà¤® और कà¥à¤Ÿ शबà¥à¤¦-अनà¥à¤®à¤¾à¤¨ से बचने के लिठकॅपचा (CAPTCHA) तकनीक पà¥à¤°à¤¦à¤¾à¤¨ करता है", "captcha-label": "कैपà¥à¤šà¤¾", "captcha-addurl": "आपके समà¥à¤ªà¤¾à¤¦à¤¨ में नई बाहरी कड़ियाठहैं।\nसà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ सà¥à¤ªà¥…म से बचाव में सहायता के लिये नीचे दिये हà¥à¤ आसान गणित पà¥à¤°à¤¶à¥à¤¨ का उतà¥à¤¤à¤° बकà¥à¤¸à¥‡ में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):", "captcha-badlogin": "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ कूटशबà¥à¤¦ भेद से बचाव में सहायता के लिये नीचे दिये हà¥à¤ आसान गणित पà¥à¤°à¤¶à¥à¤¨ का उतà¥à¤¤à¤° बकà¥à¤¸à¥‡ में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):", diff --git a/extensions/ConfirmEdit/i18n/hrx.json b/extensions/ConfirmEdit/i18n/hrx.json new file mode 100644 index 00000000..08ae787e --- /dev/null +++ b/extensions/ConfirmEdit/i18n/hrx.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Midnight Gambler" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/ht.json b/extensions/ConfirmEdit/i18n/ht.json index 97561273..a0bfc442 100644 --- a/extensions/ConfirmEdit/i18n/ht.json +++ b/extensions/ConfirmEdit/i18n/ht.json @@ -2,11 +2,13 @@ "@metadata": { "authors": [ "Boukman", - "Masterches" + "Masterches", + "Tisave" ] }, "captcha-edit": "Pou ou kapab modifye paj sa, nou mande w kalkile ti adisyon fasil sa epitou mete rezilta, repons ou an nan bwat ki bò kote l ([[Special:Captcha/help|konnen plis sou fonksyon sa]]):", "captcha-desc": "Yon enplemantasyon captcha senp", + "captcha-label": "CAPTCHA", "captcha-addurl": "Edisyon ou an genyen nouvo lyen pou andeyò.\nPou ede nou pwoteje sistèm an kont pouryèl, tanpri, fè ti adisyon fasil sa epi bay repons ou an nan bwat ([[Special:Captcha/help|plis èd sou fonksyon sa]]):", "captcha-badlogin": "Pou ede nou lite kont òdinatè ki ap krake, pirate mopas yo, tanpri rezoud ti adisyon fasil sa epi mete repons ou an nan bwat ([[Special:Captcha/help|konnen plis sou fonksyon sa]]):", "captcha-createaccount": "Pou ede nou lite kont kreyasyon kont otomatik yo, souple rezoud ti adisyon sa epi mete nan bwat an repons ou an ([[Special:Captcha/help|konnen plis sou fonksyon sa]]):" diff --git a/extensions/ConfirmEdit/i18n/ilo.json b/extensions/ConfirmEdit/i18n/ilo.json index 30ef903e..7c7723c5 100644 --- a/extensions/ConfirmEdit/i18n/ilo.json +++ b/extensions/ConfirmEdit/i18n/ilo.json @@ -17,7 +17,7 @@ "captcha-disabledinapi": "Daytoy nga aramid ket nasken ti captcha, saan a mabalin a maaramid idiay API.", "captchahelp-title": "Tulong ti CAPTCHA", "captchahelp-cookies-needed": "Masapul nga adda galietas ti pagbasabasam tapno mabalin daytoy.", - "captchahelp-text": "Dagiti sapot a pagsaadan nga agaw-awat kadagiti maipablaak iti publiko, kasla daytoy a wiki, ket kanayon nga inabuso dagiti spammers nga agus-usar ti automatiko a ramramit ti pinagipablaak da kadagiti kukua da a panilpo ti adu a pagsasaadan.\nMaikkat met dagitoy a panilpo, mgen makariri da unay.\n\nNo sagpaminsan pay, nangruna no agikabil kadagiti baro a panilpo ti sapot iti panid, ti wiki ket baka agiparang ti imahen a nakoloran wenno bakkaweng a teksto ken agdamag kenka nga agmakinilya kadagiti balikas a naiparang.\nYantangay daytoy ket obra a narigat a ma-automatiko, agpalubos kadagiti agpayso a tattao ti agipablaak bayat nga agpasardeng ti kaaduan a spammers ken dagiti robot nga agraraut.\n\nDaksangasat a padaksan na dagiti agar-aramat a marigatan nga agkita wenno agus-usar ti naibasta ti teksto wenno naibasta ti bitla a pagbasabasa.\nAwan pay tatta ti mangeg a pagpilian a mabalin a gun-oden.\nPangngaasi a kontaken ti [[Special:ListAdmins|administrador ti pagsaadan]] para iti tulong no daytoy ket saan a napadpadaanan a mangpawil ti lehitimado a panagtiynaymo.\n\nPeslen ti 'agsubli' a buton dita pagbasabasam (browser) ti agsubli idiay panid ti panag-urnos.", + "captchahelp-text": "Dagiti website nga agaw-awat kadagiti maipablaak manipud iti publiko, kasla iti daytoy a wiki, ket masansan nga abusuen dagiti spammer nga agus-usar kadagiti automatiko a ramit tapno agipablaak kadagiti bukodda a silpo kadagiti adu a sitio. Bayat a mabalin a maikkat dagitoy a silpo, dagitoy ket nakaro a makariro.\n\nIti sagpaminsan, nangruna no agikabil kadagiti baro a silpo ti web iti panid, mabalin nga agiparang kenka ti wiki iti maysa a ladawan a namarisan wenno bakkaweng a teksto ken agdamag kenka nga agimakinilya kadagiti maiparang a balikas.\n\nYantangay a daytoy ket obra a narigat a ma-automatiko, kaaduan a mangipalubos nga agipablaak kadagiti pudno a tao bayat nga agpasardeng kadagiti kaaduan nga spammer ken dagiti dadduma nga agraraut a robot.\n\nDaksangasat met a parigatenna dagiti agar-aramat a saan unay a makakita wenno agus-usar kadagiti pagbasabasa a naibatay iti teksto wenno naibatay iti bitla.\nIti agdama awan kami pay iti maysa a magun-od a pagpilian nga audio.\nPangngaasi a kontaken dagiti [[Special:ListAdmins|administrador ti sitio]] para iti tulong no daytoy ket nabigla a mangpawil kenka manipud iti panagaramid kadagiti lehitimado a tignaymo.\n\nPinduten ti buton ti \"back\" dita pagbasabasam tapno makasubli iti editor ti panid.", "captcha-addurl-whitelist": " #
    \n# Dagiti sumaganad a gramatika:\n#   * Amin-amin a naggapu iti \"#\" a kabalinan inggana ti kalpasan ti linia ket komentario\n#   * Amin a saan a blanko a linia ket regex fragment a mangipada laeng ti naggapuan a nagsangailian iti uneg ti URLs\n #
    ", "right-skipcaptcha": "Pakabaelan ti agkalbit ti CAPTCHA kadagiti aramid a saan a mapan ti CAPTCHA." } diff --git a/extensions/ConfirmEdit/i18n/is.json b/extensions/ConfirmEdit/i18n/is.json index 839ac1ac..c6b692cb 100644 --- a/extensions/ConfirmEdit/i18n/is.json +++ b/extensions/ConfirmEdit/i18n/is.json @@ -2,10 +2,12 @@ "@metadata": { "authors": [ "S.Örvarr.S", - "Snævar" + "Snævar", + "Sveinn í Felli" ] }, "captcha-edit": "Til að breyta þessari síðu, vinsamlegast finndu summuna að neðan og skrifaðu svarið í\nreitinn ([[Special:Captcha/help|frekari upplýsinngar]]):", + "captcha-label": "CAPTCHA", "captcha-addurl": "Breyting þín felur í sér viðbætta ytri tengla. Til að verjast sjálfvirku\nauglýsingarusli, biðjum við þig vinsamlegast að finna summuna að neðan og skrifa svarið í reitinn til að vista breytinguna þína. ([[Special:Captcha/help|frekari upplýsinngar]]):", "captcha-badlogin": "Til að verjast sjálfvirkum leyniorðaárásum, biðjum við þig vinsamlegast að finnda summuna að neðan og skrifa svarið í reitinn ([[Special:Captcha/help|frekari upplýsinngar]]):", "captcha-createaccount": "Til að verjast sjálfvirkri stofnun aðganga, biðjum þig vinsamlegast að finna summuna að neðan og skrifa svarið í reitinn ([[Special:Captcha/help|frekari upplýsinngar]]):", diff --git a/extensions/ConfirmEdit/i18n/jut.json b/extensions/ConfirmEdit/i18n/jut.json index 2b989b47..db7d472d 100644 --- a/extensions/ConfirmEdit/i18n/jut.json +++ b/extensions/ConfirmEdit/i18n/jut.json @@ -3,18 +3,19 @@ "authors": [ "Christian List", "Huslåke", - "Ælsån" + "Ælsån", + "Jyllanj" ] }, - "captcha-edit": "For at redigere denne side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):", + "captcha-edit": "For å redigiir siden, skal du djie sware på rejnestøkke nierfor, å åndjie resultate i feltje unje dä. ([[Special:Captcha/help|mier informasjon]]):", "captcha-desc": "Semple captcha implementåsje", "captcha-addurl": "Din redigering tilføjer nye eksterne henvisninger til artiklen. Som beskyttelse mod automatiseret spam, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):", - "captcha-badlogin": "For at beskytte mod automatiske forsøg på at gætte adgangskoden, skal du give svaret på regnestykket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):", + "captcha-badlogin": "For å beskøtt wikien mod automatisiirtje adgångskodedjietneng, skal du lös dä enkel rejnestøkke nierfor å skriiw resultate i boksi ([[Special:Captcha/help|flier opløsnenge]]):", "captcha-createaccount": "For at beskytte mod automatisk oprettelse af brugernavne, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):", "captcha-createaccount-fail": "Forkert eller manglende bekræftelseskode.", - "captcha-create": "For at oprette en ny side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):", - "captchahelp-title": "Captcha-hjælp", - "captchahelp-cookies-needed": "Din browser skal understøtte cookies, før dette kan gennemføres.", + "captcha-create": "For å oprett en ny siid, skal du djie sware på rejnestøkke nierfor, å åndjie resultate i feltje unje dä. ([[Special:Captcha/help|mier informasjon]]):", + "captchahelp-title": "Captcha-hjälp", + "captchahelp-cookies-needed": "Dej browser skal ha cookies slotj til, føj detj kan wirk.", "captchahelp-text": "Websites der accepterer indhold fra offentligheden, bliver ofte udsat for angreb fra spammere. Disse angreb sker med automatiske værktøjer, der anbringer de samme links på et stort antal websites på kort tid. Selvom disse links kan fjernes, er de en vedligeholdelsesmæssig byrde.\n\nI visse tilfælde, specielt når der tilføjes nye links til denne wiki, vil softwaren vise dig et billede af et stykke forvredet og sløret tekst. Du skal indtaste det ord, der vises, før du kan gennemføre handlingen. Formålet er at skelne mellem mennesker og automatiserede værktøjer, da de sidste har meget svært ved at genkende ordene.\n\nDesværre kan dette medføre problemer for svagtseende brugere, og brugere der bruger software der oplæser indholdet af siden. For øjeblikket findes der ikke et lydbaseret alternativ. Kontakt venligst en administrator med henblik på at få hjælp, hvis dette forhindrer tilføjelsen af godartet materiale.\n\nTryk på 'tilbage'-knappen i din browser for at returnere til redigeringssiden.", - "captcha-addurl-whitelist": " #
    \n# Vejledning:\n#  * Alt fra et \"#\"-tegn til slutningen af en linie er en kommentar\n#  * Alle ikke-blanke linier benyttes som regulært udtryk, der anvendes på hostnavne i URLer\n  #
    " + "captcha-addurl-whitelist": " #
    \n# Wejliedneng:\n#   * Ållt fra e \"#\"-tejn te slutnengen å en linie ä i kommentar\n#   * Åll intj-blank linie benøtts som regulær uttrykk, där anwenjs på hostnaun i URLe\n #
    " } diff --git a/extensions/ConfirmEdit/i18n/km.json b/extensions/ConfirmEdit/i18n/km.json index 6ab7ea71..53ed0d2c 100644 --- a/extensions/ConfirmEdit/i18n/km.json +++ b/extensions/ConfirmEdit/i18n/km.json @@ -8,10 +8,12 @@ }, "captcha-edit": "ដើម្បីកែប្រែ​ទំពáŸážšáž“áŸáŸ‡ សូមដោះស្រាយ​ប្រមាណវិធីបូក​ážáž¶áž„ក្រោម​នáŸáŸ‡ážšáž½áž…​បញ្ជូលចម្លើយ​ទៅក្នុង​ប្រអប់សិន([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“​បន្ážáŸ‚ម]])៖", "captcha-desc": "ផ្ដល់បច្ចáŸáž€áž‘áŸážŸ CAPTCHA ដើម្បីការពារពីស្ប៉ាមនិងការការទាយពាក្យសំងាážáŸ‹", + "captcha-label": "CAPTCHA", "captcha-addurl": "កំណែ​របស់អ្នក​មាន​ážáŸ†ážŽáž—្ជាប់ក្រៅ​ážáŸ’មី។ ដើម្បី​ជួយបង្ការ​ស្ប៉ាម​ស្វáŸáž™áž”្រវážáŸ’ážáž· សូមដោះស្រាយ​ប្រមាណវិធីបូក​ážáž¶áž„ក្រោម​នáŸáŸ‡ážšáž½áž…​បញ្ជូលចម្លើយ​ទៅក្នុង​ប្រអប់សិនមុនពáŸáž›ážšáž€áŸ’សាទុកកំណែរបស់អ្នក([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“​បន្ážáŸ‚ម]])៖", "captcha-badlogin": "ដើម្បីការពារការបំបែកពាក្យសម្ងាážáŸ‹ážŠáŸ„យស្វáŸáž™áž”្រវážáŸ’ážáž· សូមដោះស្រាយផលបូកážáž¶áž„ក្រោមរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", "captcha-createaccount": "ដើម្បី​បង្ការការបង្កើážâ€‹áž‚ណនី​ស្វáŸáž™áž”្រវážáŸ’ážáž· សូមដោះស្រាយ​ប្រមាណវិធីបូក​ážáž¶áž„ក្រោម​នáŸáŸ‡ážšáž½áž…​បញ្ជូលចម្លើយ​ទៅក្នុង​ប្រអប់សិន([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“​បន្ážáŸ‚ម]])៖", - "captcha-createaccount-fail": "កូដផ្ទៀងផ្ទាážáŸ‹áž”ាážáŸ‹áž”ង់ឬមិនážáŸ’រឹមážáŸ’រូវ។", + "captcha-createaccount-fail": "CAPTCHAបាážáŸ‹áž¬áž˜áž·áž“ážáŸ’រឹមážáŸ’រូវ។", "captcha-create": "ដើម្បី​បង្កើážâ€‹áž‘ំពáŸážš សូមដោះស្រាយ​ប្រមាណវិធីបូក​ážáž¶áž„ក្រោម​នáŸáŸ‡ážšáž½áž…​បញ្ជូលចម្លើយ​ទៅក្នុង​ប្រអប់សិន([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“​បន្ážáŸ‚ម]])៖", + "captcha-sendemail": "ដើម្បីការពារវិគីពីស្ប៉ាមស្វáŸáž™áž”្រវážáŸ’ážáž· សូមដោះស្រាយចំណោទងាយៗážáž¶áž„ក្រោមរួចវាយបញ្ជូលចម្លើយទៅក្នុងប្រអប់ ([[Special:Captcha/help|áž–áŸážáŸŒáž˜áž¶áž“បន្ážáŸ‚ម]])៖", "captchahelp-title": "ជំនួយអំពី Captcha" } diff --git a/extensions/ConfirmEdit/i18n/ksh.json b/extensions/ConfirmEdit/i18n/ksh.json index 7fa0e352..a12d482e 100644 --- a/extensions/ConfirmEdit/i18n/ksh.json +++ b/extensions/ConfirmEdit/i18n/ksh.json @@ -5,19 +5,19 @@ ] }, "captcha-edit": "Öm de Sigg ze ändere, don di Zahle onge zosamme zälle un don de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])", - "captcha-desc": "Brängk en „Kaptscha“ en et Wiki, öm jääje SPAM un jäje et Paßwööter-Dorschprobeere ze schöze.", - "captcha-label": "Kaptscha", + "captcha-desc": "Brängk en „Kaptscha“ en et Wikki, öm jähje der SPAM un jähje et Paßwööter-Dorschprobehre ze schöze.", + "captcha-label": "Kaptscha", "captcha-addurl": "Do häß neu Lingks op frembde Websigge dobei jedonn.\nMer schöze uns Wiki jäje automatesche SPAM, dröm\ndon di Zahle onge zosamme träcke un don de Antwoot\nen dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])", "captcha-badlogin": "Mer schöze Metmaacher en unsem Wiki jäje automatesche\nPaßwoot-Knackerei, dröm don di Zahle onge zosamme zälle,\nun de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])", "captcha-createaccount": "Mer schöze uns Wiki dojäje, dat mer en Masse automatesch\nMetmaacher aanmeldt. Dröm beß esu joot un\ndon di Zahle onge zosamme zälle un don de Antwoot\nen dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])", - "captcha-createaccount-fail": "Di Bestähtejong (CAPTCHA) fähld udder es verkeht.", + "captcha-createaccount-fail": "Di Beschtähtejong (et Kaptscha) fähld udder es verkihert.", "captcha-create": "Öm di Sigg neu aanzelääje, don di Zahle onge zosamme zälle,\nun don de Antwoot en dat Käßje endraare. (Verklierung)", "captcha-sendemail": "För automettesche SPAM ze verhendere, donn di Zahle onge zosamme zälle,\nun don de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])", - "captcha-sendemail-fail": "Di Bestähtejong (CAPTCHA) fähld udder es verkeht.", - "captcha-disabledinapi": "För di Aufjab moß en extra Bestätejon enjejovve wääde, un dat künne mer nit övver de API.", - "captchahelp-title": "Äklierung zum Kaptscha SPAM-Schotz", + "captcha-sendemail-fail": "Di Beschtähtejong (et Kaptscha) fähld udder es verkihrt.", + "captcha-disabledinapi": "För di Aufjab moss en äxtra Beschtähtejong pä Kaptscha ennjejovve wähde, un dat künne mer nit övver er API maache.", + "captchahelp-title": "Äklihrong zom Kaptscha-SPAM-Schotz", "captchahelp-cookies-needed": "Do moß Cookies en Dingem Brauser enjeschalldt han, domet da hee fluppe kann.", "captchahelp-text": "Op Web Saits wi dat Wiki hee, wo jeder jät beidraare kann, do kumme se öff wi de Fleeje un don met Projramme un fun Hand Lengks op de eije Websigge bloß fö Reklahme affläje, der ohne Senn un Verschtand. Esu ene SPAM kam_mer widder fott maache, dat määt ävver Ärjer un Opwand.\n\nSu jät wulle_mer nit hann, un donn_et jlish widder fottschmiiße.\n\nDomet mer do_met nidd_esu fill Ärrbed hann,\nmaache_mer dänne Autmaate et Lävve schwer.\nWann uns Wikki merk, et künnd_esu jet em Bösch sinn, dann zeisch et e Belldsche med jät dren, un fröhsch, dat mer dat jenau esu ennjävve sullt,\nwi et do schteiht. För_enne Minsch eß dat eifach, ävver dat es fodammp schwierich ze projrammehre.\nDat es e beßßje läßtish för der Minsch, ävver de Robbotter hälld et unß bahl kumplett fum Lief, un su jesinn, ess et netto enne Jewenn.\n\nWann De Dich ens fordeis, es och nit schlimm, De wees norr_enß jefrooch, un wat De jetipp häs, kütt nit fott.\n\nSchaad es, mer hann noch keine Wääsch, dat met Schprohch udder sönswi ze maache, su dat Lück met Schprohch_Ußßjaave, Braille, un met nur Tex em Brauser oohne Bellder, em Räähn schtonn künnte. Dooht Ãœhr Zeush eets enß oohne Lengk schpeischere, un saat dä [[Special:ListAdmins|Wikki_Köbesse]],\nwann Ãœhr Probbleme hatt. Do weed_Ãœch jehollfe weede.\n\nJetz kanns De met Dingem Brauser singem „Zeröck“-Knopp wigger maache, wo De fürher wohß.", "captcha-addurl-whitelist": " #
    \n# Dä Opbou es:\n# * Alles fun enem #-Zeiche bes an et Engk fun ene Reih es ene Kommentaa för de Minsche\n# * Jede Reih met jet dren es en Stöck rejolähre Ußdrok, wat Domains en URL treffe kann\n  #
    ", - "right-skipcaptcha": "De Opforderung fum Kaptscha överjonn" + "right-skipcaptcha": "De Opforderung fum Kaptscha överjonn" } diff --git a/extensions/ConfirmEdit/i18n/kw.json b/extensions/ConfirmEdit/i18n/kw.json index 34d2400b..d677b41e 100644 --- a/extensions/ConfirmEdit/i18n/kw.json +++ b/extensions/ConfirmEdit/i18n/kw.json @@ -2,9 +2,11 @@ "@metadata": { "authors": [ "Kernoweger", - "Nrowe" + "Nrowe", + "Kw-Moon" ] }, + "captcha-label": "CAPTCHA", "captcha-createaccount-fail": "Koden afydhya kamm po gwag.", "captcha-sendemail-fail": "Koden afydhya kamm po gwag." } diff --git a/extensions/ConfirmEdit/i18n/ky.json b/extensions/ConfirmEdit/i18n/ky.json index fdd6c275..8de22049 100644 --- a/extensions/ConfirmEdit/i18n/ky.json +++ b/extensions/ConfirmEdit/i18n/ky.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ - "Chorobek" + "Chorobek", + "Janatkg" ] }, "captcha-edit": "Бул баракты оңдош үчүн бул жөнөкөй ÑÑепти чыгарып, жообун көзөнөккө жазыңыз ([[Special:Captcha/help|more info]]):", - "captcha-desc": "СырÑөздү жандыруудан жана керекÑиз маалыматтардан (Ñпам) коргонуу макÑатында CAPTCHA ыкмаÑÑ‹ колдонулат" + "captcha-desc": "СырÑөздү жандыруудан жана керекÑиз маалыматтардан (Ñпам) коргонуу макÑатында CAPTCHA ыкмаÑÑ‹ колдонулат", + "captcha-label": "Каптча" } diff --git a/extensions/ConfirmEdit/i18n/lt.json b/extensions/ConfirmEdit/i18n/lt.json index 7cbe2aad..7df38745 100644 --- a/extensions/ConfirmEdit/i18n/lt.json +++ b/extensions/ConfirmEdit/i18n/lt.json @@ -4,12 +4,24 @@ "Eitvys200", "Garas", "Homo", - "Matasg" + "Matasg", + "Albertas" ] }, "captcha-edit": "Kad redaguotumÄ—te šį straipsnį, apskaiÄiuokite Å¡iÄ… paprastÄ… sumÄ… ir įveskite atsakymÄ… į laukelį ([[Special:Captcha/help|daugiau informacijos]]):", + "captcha-desc": "Pateikia CAPTCHA metodikas, kaip apsisaugoti nuo brukalo ir slaptažodžių spÄ—liojimo", "captcha-label": "CAPTCHA", - "captcha-createaccount-fail": "Blogas arba nerastas patvirtinimo kodas.", + "captcha-addurl": "JÅ«sų pakeitimuose yra nauja iÅ¡orinÄ— nuoroda.\nKad apsaugotume viki nuo automatinio brukalo, mes maloniai praÅ¡ome JÅ«sų suskaiÄiuoti paprastÄ… sumÄ…, pateiktÄ… žemiau, ir įvesti atsakymÄ… į langelį, kad JÅ«sų pakeitimai bÅ«tų iÅ¡saugoti, ([[Special:Captcha/help|daugiau informacijos]]):", + "captcha-badlogin": "Kad apsaugotume viki nuo automatinio slaptažodžių nulaužinÄ—jimo, mes maloniai praÅ¡ome JÅ«sų apskaiÄiuoti paprastÄ… sumÄ…, pateiktÄ… žemiau, ir įvesti atsakymÄ… į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "captcha-createaccount": "Kad apsaugotume viki nuo automatinio paskyrų kÅ«rimo, mes maloniai praÅ¡ome apskaiÄiuoti paprastÄ… sumÄ…, pateiktÄ… žemiau, ir įvesti atsakymÄ… į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "captcha-createaccount-fail": "Neteisingas arba nenurodytas patvirtinimo kodas.", + "captcha-create": "Kad sukurtumÄ—te puslapį, praÅ¡ome apskaiÄiuoti paprastÄ… sumÄ…, pateiktÄ… žemiau, ir įvesti atsakymÄ… į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "captcha-sendemail": "Kad apsaugotume viki nuo automatinio brukalo, maloniai praÅ¡ome apskaiÄiuoti paprastÄ… sumÄ…, pateiktÄ… žemiau, ir įvesti atsakymÄ… į langelį ([[Special:Captcha/help|daugiau informacijos]]):", + "captcha-sendemail-fail": "Neteisingas arba nenurodytas CAPTCHA.", + "captcha-disabledinapi": "Å is veiksmas reikalauja nurodyti patvirtinimo kodÄ…, todÄ—l jis negali bÅ«ti atliktas per API.", "captchahelp-title": "CAPTCHA pagalba", - "captchahelp-cookies-needed": "Jums reikia bÅ«ti įjungus sausainÄ—lius savo narÅ¡yklÄ—je kad tai veiktu" + "captchahelp-cookies-needed": "Jums reikia bÅ«ti įjungus sausainÄ—lius savo narÅ¡yklÄ—je kad tai veiktu", + "captchahelp-text": "Tinklapis, kuris priima įraÅ¡us iÅ¡ vieÅ¡umos, kaip Å¡is vikis, yra dažnai iÅ¡naudojamas brukalių, kurie naudoja automatizuotus įrankius savo nuorodoms įraÅ¡yti į daugelį tinklapių. Nors Å¡ios brukalo nuorodos gali bÅ«ti paÅ¡alintos, bet tai daryti yra labai nemalonu.\n\nKartais, ypaÄ kai į puslapį įraÅ¡oma nauja internetinÄ— nuoroda, vikis gali parodyti paveikslÄ—lį su nuspalvintu ar sudarkytu tekstu ir papraÅ¡yti įvesti rodomus žodžius. Tai yra sunkiai automatizuojama užduotis, todÄ—l dauguma tikrų žmonių galÄ—s pateikti įraÅ¡us, o dauguma brukalių ir kitų robotizuotų atakuotojų bus sustabdyti.\n\nDeja, tai gali sukelti sunkumų naudotojams, kurie prastai mato arba naudoja tekstu-grįstas arba kalba-grįstas narÅ¡ykles.\nÅ iuo metu negalime pasiÅ«lyti audio alternatyvos.\nPraÅ¡ome susisiekti su [[Special:ListAdmins|tinklapio administratoriais]] dÄ—l pagalbos, jeigu tai netikÄ—tai trukdo Jums atlikti teisÄ—tus veiksmus.\n\nPaspauskite \"Atgal\" mygtukÄ… savo narÅ¡yklÄ—je, kad grįžtumÄ—te į puslapio redaktorių.", + "captcha-addurl-whitelist": " #
    \n# SintaksÄ— tokia:\n#   * Viskas nuo \"#\" simbolio iki eilutÄ—s pabaigos yra komentaras\n#   * Kiekviena netuÅ¡Äia eilutÄ— yra reguliariosios iÅ¡raiÅ¡kos fragmentas, kuris atitinka tik serverių vardus esanÄius URL adresuose\n #
    ", + "right-skipcaptcha": "Atlikti apsaugos teksto reikalaujanÄius veiksmus, nereikalaujant nurodyti apsaugos teksto" } diff --git a/extensions/ConfirmEdit/i18n/luz.json b/extensions/ConfirmEdit/i18n/luz.json new file mode 100644 index 00000000..f71703a6 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/luz.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "علی ساکی لرستانی" + ] + }, + "captcha-label": "کپچآۉ" +} diff --git a/extensions/ConfirmEdit/i18n/mg.json b/extensions/ConfirmEdit/i18n/mg.json index 8d084555..13705c05 100644 --- a/extensions/ConfirmEdit/i18n/mg.json +++ b/extensions/ConfirmEdit/i18n/mg.json @@ -4,5 +4,6 @@ "Jagwar" ] }, + "captcha-label": "CAPTCHA", "right-skipcaptcha": "Manao tao mampisy ny captcha fa tsy mila mameno azy" } diff --git a/extensions/ConfirmEdit/i18n/mk.json b/extensions/ConfirmEdit/i18n/mk.json index 9ace5735..a2e38efb 100644 --- a/extensions/ConfirmEdit/i18n/mk.json +++ b/extensions/ConfirmEdit/i18n/mk.json @@ -6,19 +6,19 @@ ] }, "captcha-edit": "За да ја уредите оваа Ñтраница потребно е да го најдете решението на едноÑтавната задача поÑтавена подолу и одговорот да го внеÑете во Ñоодветното поле за одговор([[Special:Captcha/help|повеќе информации]]):", - "captcha-desc": "Овозможува техники од CAPTCHA за заштита од Ñпам и погодување на лозинки", - "captcha-label": "CAPTCHA", + "captcha-desc": "Овозможува техники од проверка Ñо Ñликичка за заштита од Ñпам и погодување на лозинки", + "captcha-label": "Сликичка за проверка", "captcha-addurl": "Вашето уредување Ñодржи нови надворешни врÑки.\nЗа да ни помогнете да Ñе заштитиме од автоматизиран Ñпам, би ве замолиле да ја решите проÑтата задача подолу и да го внеÑете резултатот во полето за да можете да го зачувате уредувањето ([[Special:Captcha/help|повеќе инфо]]):", "captcha-badlogin": "За да ни помогнете да Ñе заштитиме од автоматизирано пробивање на лозинки, би ве замолиле да ја решите проÑтата задача подолу и внеÑете резултатот во полето ([[Special:Captcha/help|повеќе информации]]):", "captcha-createaccount": "За да ни помогнете да Ñе заштитиме од автоматизирано Ñоздавање на Ñметки, би ве замолиле да ја решите проÑтата задача подолу и да го внеÑете резултатот во полето ([[Special:Captcha/help|повеќе инфо]]):", - "captcha-createaccount-fail": "CAPTCHA е неточен или недоÑтаÑува.", + "captcha-createaccount-fail": "ВнеÑеното е неточно или недоÑтаÑува", "captcha-create": "За да ја Ñоздадете Ñтраницата, прво решете ја проÑтата задача подолу и впишете го решението во полето ([[Special:Captcha/help|повеќе инфо]]):", "captcha-sendemail": "За да Ñе заштитиме од автоматизирано Ñпамирање, би Ñакале да ве замолиме да ја решите проÑтата задача подолу и да го внеÑете резултатот во полето ([[Special:Captcha/help|повеќе информации]]):", - "captcha-sendemail-fail": "CAPTCHA е неточен или недоÑтаÑува.", - "captcha-disabledinapi": "Ова дејÑтво бара CAPTCHA, така што не може да Ñе изврши преку иавршник.", - "captchahelp-title": "Помош Ñо Captcha", + "captcha-sendemail-fail": "ВнеÑеното е неточно или недоÑтаÑува", + "captcha-disabledinapi": "Ова дејÑтво бара проверка Ñо Ñликичка, така што не може да Ñе изврши преку иавршник.", + "captchahelp-title": "Помош Ñо проверката", "captchahelp-cookies-needed": "Треба да имате овозможено колачиња за да може ова да работи.", "captchahelp-text": "Семрежните меÑта кои прифаќаат учеÑтво на јавноÑта, како ова вики, чеÑтопати Ñтрадаат од Ñпамери кои кориÑтат автоматизирани алатки за да ги додаваат нивните врÑки на голем број мережни Ñтраници. Иако врÑките на Ñпамерот може да Ñе отÑтранат, тие значително ја пореметуваат нашата работа.\n\nПонекогаш, оÑобено кога додава нови врÑки на Ñтраница, викито може да ви прикаже обоен или извитоперен текÑÑ‚ и да ви побара да ги впишете прикажаните зборови. \nБидејќи ова е задача која е тешко да Ñе автоматизира, им овозможува виÑтинÑките кориÑници да придонеÑуваат, а им попречува на Ñпамерите и другите роботÑки напаѓачи.\n\nЗа жал, ова може да е проблем за кориÑници Ñо лош вид, или оние кои кориÑтат прелиÑтувачи на оÑнова на текÑÑ‚ или глаÑовни наредби.\nВо моментов немаме аудио-алтернатива за ова.\nКонтактирајте ги [[Special:ListAdmins|админиÑтраторите на Ñтраната]] за помош доколку ова неочекувано ве Ñпречува во правењето на иÑкрени придонеÑи. \n\nСтиÑнете на копчето „назад“ во вашиот прелиÑувач за да Ñе вратите на уредувањето на Ñтраницата.", "captcha-addurl-whitelist": " #
    \n# ÐžÐ¿Ð¸Ñ Ð½Ð° ÑинтакÑата:\n#  * Сето она што Ñтои по знакот „#“, па до крајот на редот е коментар\n#  * Секој непразен ред Ñе Ñмета за фрагмент од регуларен израз кој одговара Ñамо на имиња во URL адреÑи\n  #
    ", - "right-skipcaptcha": "Изведување на акции кои повикуваат captcha без да одат преку captcha ÑиÑтемот" + "right-skipcaptcha": "Изведување на дејÑтва кои повикуваат Ñликичка без да одат преку нејзиниот ÑиÑтем" } diff --git a/extensions/ConfirmEdit/i18n/mr.json b/extensions/ConfirmEdit/i18n/mr.json index 9aacf299..6226efd1 100644 --- a/extensions/ConfirmEdit/i18n/mr.json +++ b/extensions/ConfirmEdit/i18n/mr.json @@ -4,11 +4,13 @@ "Kaustubh", "Mahitgar", "V.narsikar", - "संतोष दहिवळ" + "संतोष दहिवळ", + "अभय नातू" ] }, "captcha-edit": "हे पान संपादित करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिलेले सोपे गणित सोडवून तà¥à¤¯à¤¾à¤šà¥‡ उतà¥à¤¤à¤° दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", "captcha-desc": "उतà¥à¤ªà¤¾à¤¤ आणि परवलीचà¥à¤¯à¤¾ शबà¥à¤¦à¤¾à¤‚चà¥à¤¯à¤¾ चोरी पासून सूरकà¥à¤·à¥€à¤¤ ठेवणाऱà¥à¤¯à¤¾ ओळखपटवा-पदà¥à¤§à¤¤à¥€ CAPTCHA techniques पà¥à¤°à¤µà¤¤à¥‡.", + "captcha-label": "कॅपà¥à¤šà¤¾", "captcha-addurl": "तà¥à¤®à¤šà¥à¤¯à¤¾ संपादनात नवीन बाहà¥à¤¯à¤¦à¥à¤µà¥‡ आहेत. आपोआप होणारà¥â€à¤¯à¤¾ सà¥à¤ªà¥…म पासून वाचणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिलेले सोपे गणित सोडवून तà¥à¤¯à¤¾à¤šà¥‡ उतà¥à¤¤à¤° दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", "captcha-badlogin": "आपोआप होणारà¥â€à¤¯à¤¾ परवलीचà¥à¤¯à¤¾ शबà¥à¤¦à¤¾à¤šà¥à¤¯à¤¾ चोरीपासून वाचणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिलेले सोपे गणित सोडवून तà¥à¤¯à¤¾à¤šà¥‡ उतà¥à¤¤à¤° दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", "captcha-createaccount": "आपोआप होणारà¥â€à¤¯à¤¾ सदसà¥à¤¯ नोंदणीपासून वाचणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€, खाली दिलेले सोपे गणित सोडवून तà¥à¤¯à¤¾à¤šà¥‡ उतà¥à¤¤à¤° दिलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ मधà¥à¤¯à¥‡ लिहा ([[Special:Captcha/help|अधिक माहिती]]):", diff --git a/extensions/ConfirmEdit/i18n/ms.json b/extensions/ConfirmEdit/i18n/ms.json index e34515c1..865e98da 100644 --- a/extensions/ConfirmEdit/i18n/ms.json +++ b/extensions/ConfirmEdit/i18n/ms.json @@ -13,10 +13,10 @@ "captcha-addurl": "Suntingan anda mengandungi pautan luar baru.\nUntuk melindungi wiki daripada spam automatik, anda diminta supaya menyelesaikan kira-kira di bawah dan memasukkan jawapannya dalam kotak yang disediakan untuk menyimpan suntingan anda ([[Special:Captcha/help|maklumat lanjut]]):", "captcha-badlogin": "Untuk melindungi wiki daripada kegiatan meneka kata laluan secara automatik, anda diminta supaya menyelesaikan kira-kira di bawah dan masukkan jawapannya dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", "captcha-createaccount": "Untuk melindungi wiki daripada pembukaan akaun secara automatik, anda diminta supaya menyelesaikan kira-kira di bawah dan masukkan jawapannya dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", - "captcha-createaccount-fail": "Kod pengesahan tidak betul atau tidak ada.", + "captcha-createaccount-fail": "Kod CAPTCHA tidak betul atau tidak ada.", "captcha-create": "Untuk mencipta laman tersebut, sila selesaikan kira-kira di bawah dan masukkan jawapannya dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", "captcha-sendemail": "Untuk melindungi wiki daripada spam automatik, anda diminta supaya menyelesaikan kira-kira di bawah dan masukkan jawapannya dalam kotak yang disediakan ([[Special:Captcha/help|maklumat lanjut]]):", - "captcha-sendemail-fail": "Kod pengesahan tidak betul atau tidak ada.", + "captcha-sendemail-fail": "Kod CAPTCHA tidak betul atau tidak ada.", "captcha-disabledinapi": "Tindakan ini memerlukan captcha, maka ia tidak boleh dilakukan melalui API.", "captchahelp-title": "Bantuan CAPTCHA", "captchahelp-cookies-needed": "Sila aktifkan ''cookies'' pada pelayar web anda.", diff --git a/extensions/ConfirmEdit/i18n/mzn.json b/extensions/ConfirmEdit/i18n/mzn.json new file mode 100644 index 00000000..df6a95ec --- /dev/null +++ b/extensions/ConfirmEdit/i18n/mzn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "محک" + ] + }, + "captcha-label": "کپچا" +} diff --git a/extensions/ConfirmEdit/i18n/nds-nl.json b/extensions/ConfirmEdit/i18n/nds-nl.json index feebfd31..121241b3 100644 --- a/extensions/ConfirmEdit/i18n/nds-nl.json +++ b/extensions/ConfirmEdit/i18n/nds-nl.json @@ -6,6 +6,7 @@ }, "captcha-edit": "Um disse zied te bewarken, mu'j eerst t antwoord op disse eenvoudige somme invullen ([[Special:Captcha/help|meer informasie]]):", "captcha-desc": "Biedt CAPTCHA-technieken um bescharming te biejen tegen spam en t raojen van wachtwoorden", + "captcha-label": "CAPTCHA", "captcha-addurl": "In joew bewarking staon nieje uutgaonde verwiezingen.\nVul ter de bescharming van disse wiki tegen automatiese moekbiedragen t antwoord op de somme in, in t invoerveld dat hieronder steet, um joew bewarking op te slaon:
    \n([[Special:Captcha/help|meer informasie]])", "captcha-badlogin": "Vul ter de bescharming van disse wiki tegen t automaties kraken van wachtwoorden t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):", "captcha-createaccount": "Vul ter bescharming van disse wiki tegen t automaties anmaken van gebrukers t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):", diff --git a/extensions/ConfirmEdit/i18n/olo.json b/extensions/ConfirmEdit/i18n/olo.json new file mode 100644 index 00000000..27f78b7a --- /dev/null +++ b/extensions/ConfirmEdit/i18n/olo.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Denö" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/pnb.json b/extensions/ConfirmEdit/i18n/pnb.json index 498dfbcc..4583e67b 100644 --- a/extensions/ConfirmEdit/i18n/pnb.json +++ b/extensions/ConfirmEdit/i18n/pnb.json @@ -6,6 +6,7 @@ }, "captcha-edit": "اس صÙØ­Û’ نوں تبدیل کرن واسطے، Ù…Ûربانی کر Ú©Û’ اے Ø³Ø§Ø¯Û Ø¬Û“ سوال نوں حل کر Ú©Û’ ڈبے Ú† جواب Ù„Ú©Ú¾ دیو ([[Special:Captcha/help|مزید جانکاری]]):", "captcha-desc": "کیپچا ول سپام تے کنجی اندازے توں بچن لئی دیندا اے۔", + "captcha-label": "کیپچا", "captcha-addurl": "تواڈی تبدیلی Ú† نویں بارلے جوڑ نیں۔\nاس صÙØ­Û’ نوں تبدیل کرن واسطے، Ù…Ûربانی کر Ú©Û’ اے Ø³Ø§Ø¯Û Ø¬Û“ سوال نوں حل کر Ú©Û’ ڈبے Ú† جواب Ù„Ú©Ú¾ دیو ([[Special:Captcha/help|مزید جانکاری]]):", "captcha-badlogin": "اپنے آپ کنجی توڑن دے خلا٠مدد واسطے، Ù…Ûربانی کر Ú©Û’ اے Ø³Ø§Ø¯Û Ø¬Û“ سوال نوں حل کر Ú©Û’ ڈبے Ú† جواب Ù„Ú©Ú¾ دیو ([[Special:Captcha/help|مزید جانکاری]]):", "captcha-createaccount": "اپنے آپ غلط نویں کھاتے بنان نوں روکن واسطے، Ù…Ûربانی کر Ú©Û’ اے Ø³Ø§Ø¯Û Ø¬Û“ سوال نوں حل کر Ú©Û’ ڈبے Ú† جواب Ù„Ú©Ú¾ دیو ([[Special:Captcha/help|مزید جانکاری]]):", diff --git a/extensions/ConfirmEdit/i18n/qu.json b/extensions/ConfirmEdit/i18n/qu.json index 6a82ba37..0c5dd201 100644 --- a/extensions/ConfirmEdit/i18n/qu.json +++ b/extensions/ConfirmEdit/i18n/qu.json @@ -4,6 +4,7 @@ "AlimanRuna" ] }, + "captcha-label": "CAPTCHA", "captcha-badlogin": "Wikita kikinmanta millay ruraq yaykuna rima chamqaymanta amachanapaqqa, kay qatiq yapayta ruraspa yapasqata kahachapi yaykuchiy ([[Special:Captcha/help|astawan yachay]]):", "captchahelp-title": "Captcha nisqamanta yanapay" } diff --git a/extensions/ConfirmEdit/i18n/scn.json b/extensions/ConfirmEdit/i18n/scn.json index a3e95a35..aa50eba9 100644 --- a/extensions/ConfirmEdit/i18n/scn.json +++ b/extensions/ConfirmEdit/i18n/scn.json @@ -3,20 +3,25 @@ "authors": [ "Melos", "Santu", - "Gmelfi" + "Gmelfi", + "Pippinu", + "Sarvaturi" ] }, - "captcha-edit": "Pi mudificaru la pàggina è nicissàriu arisòrviri lu sèmprici càlculu prisintati di sècutu e nziriri lu risurtatu nnâ casedda\n([[Special:Captcha/help|chiossai nfurmazzioni]]):", - "captcha-desc": "Sèmprici mplimintazzioni di na Captcha", + "captcha-edit": "Pi putiri canciari sta pàggina, pi favuri arrisorvi la summa fàcili ca c'è ccassutta e scrivi lu risurtatu ntâ casedda\n([[Special:Captcha/help|àutri nfurmazzioni]]):", + "captcha-desc": "Furnisci miccanismi CAPTCHA pi prutèggiri dû spam e di cui prova a nzirtari li password", "captcha-label": "CAPTCHA", - "captcha-addurl": "La mudìfica addumannata junci novi lijami di fora a la pàggina; pi pricauzzioni contr'a lu nzirimentu autumàticu di spam, è nicissarii arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):", - "captcha-badlogin": "Pi pricauzzioni contr'a li tintativi di furzatura autumàtica dâ password, è nicussàriu arisòrviri lu sèmprici càlculu prusuntatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):", - "captcha-createaccount": "Pi pricauzzioni contr'a li tintativi di criazzioni autumàtica di l'account, pi riggistràrisi è nicissàriu arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):", - "captcha-createaccount-fail": "Còdici di virìfica sbagghiatu o ca manca.", - "captcha-create": "Pi criari la pàggina è nicissàriu arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda:
    \n([[Special:Captcha/help|chiossai nfurmazzioni]]):", - "captchahelp-title": "Chi cos'è lu captcha?", - "captchahelp-cookies-needed": "È nicissàriu abbilitari li cookie supra lu browser pi jiri avanti", - "captchahelp-text": "Ô spissu accàpita ca li siti Web ca accunzèntunu missaggi pùbbrichi, comu a stu wiki, sù pigghiati di mira di spammer ca ùsanu strumenti autumàtichi pi nziriri lijami pubbricitari ammeri assai nùmmira di siti. Macari ca li lijami ca non sunnu disiati si ponnu livari, sta cosa è, nti ogni casu, na granni camurrìa.\n\nNni tanti casi, p'asèmpiu quannu si voli jùnciri novi lijami Web nti na pàggina, lu software wiki pò ammustrari na mmàggini cu nu testu nicu acculuratu e/o difurmatu addumannannu di scrivìrilu nni na finistredda. Siccomu si tratta di na cosa difficili di fari pi nu computer, stu miccanìsimu pirmetti a (quasi tutti) l'utenti riali di cumplitari lu nzirimentu disiatu, mpidennu la trasuta a li chiossai di li spammer e di l'àutri attacchi autumatizzati.\n\nPi sfurtuna, stu strataggemma pò mèttiri 'n difficultati a l'utenti ca hannu prubremi di vista o a chiddi ca ùsanu browser testuali o basati supr'a la sìntesi vucali. Purtroppu aoggi non ci sunnu àutri miccanìsimi abbasati supr'a missaggi sunori; si sti pruciduri mpidìsciunu lu nzirimentu di nfurmazzioni ca si pènzanu ca sù liggìttimi, siti prigati di cuntattari [[Special:ListAdmins|l'amministraturi dû situ]] e addumannàrini l'assistenza.\n\nFari clic supra ô buttuni 'back' dû browser pi turnari a la pàggina di mudìfica.", - "captcha-addurl-whitelist": " #
    \n# La sintassi è chista:\n#  * Tuttu chiddu ca veni doppu nu caràtttrt \"#\" è nu cummentu, nzinu a la fini di la riga\n#  * Tutti li righi npn vacanti sunnu frammenti di sprissioni riulari ca s'àpplicanu a lu sulu nomu di l'host ntê URL\n  #
    ", - "right-skipcaptcha": "Fà l'azzioni ca attivàssiru lu captcha senza passari pi lu captcha" + "captcha-addurl": "Lu tò canciamentu cunteni lijami pi fora novi.\nP'addifènniri la wiki dû spam autumatizzatu, t'addumannamu pi curtisìa d'arrisòrviri la summa fàcili ca c'è ccassutta e scrìviri lu risurtatu ntâ casedda, avanti di putiri sarvari lu canciamentu ([[Special:Captcha/help|àutri nfurmazzioni]]):", + "captcha-badlogin": "P'addifènniri la wiki dî tintativi di furzatura autumàtica dî password, t'addumannamu pi curtisìa d'arrisòrviri la summa fàcili ca c'è ccassutta e scrìviri lu risurtatu ntâ casedda ([[Special:Captcha/help|àutri nfurmazzioni]]):", + "captcha-createaccount": "P'addifènniri la wiki dâ criazzioni autumàtica di cunti, t'addumannamu pi curtisìa d'arrisòrviri la summa fàcili ca c'è ccassutta e scrìviri lu risurtatu ntâ casedda ([[Special:Captcha/help|àutri nfurmazzioni]]):", + "captcha-createaccount-fail": "CAPTCHA sbagghiatu o ammancanti.", + "captcha-create": "Pi putiri criari la pàggina, pi favuri arrisorvi la summa fàcili ca c'è ccassutta e scrivi lu risurtatu ntâ casedda ([[Special:Captcha/help|àutri nfurmazzioni]]):", + "captcha-sendemail": "P'addifènniri la wiki dû spam autumatizzatu, t'addumannamu pi curtisìa d'arrisòrviri la summa fàcili ca c'è ccassutta e scrìviri lu risurtatu ntâ casedda ([[Special:Captcha/help|àutri nfurmazzioni]]):", + "captcha-sendemail-fail": "CAPTCHA sbagghiatu o mancanti.", + "captcha-disabledinapi": "St’azzioni addumanna nu CAPTCHA, dunca nun si pò esèguiri pi menzu di l'API.", + "captchahelp-title": "Guida pî CAPTCHA", + "captchahelp-cookies-needed": "S’hannu a attivari li cookie ntô browser pi fari funziunari stu miccanismu.", + "captchahelp-text": "Quannu li siti Web accèttanu cuntinuti dû pùbblicu, comu fa sta wiki, ammatti spissu ca vèninu sfruttati di malintinziunati ch'adòpiranu strummenti autumatizzati pi carricari liami versu li sò siti.\nCu tuttu ca sti liami si ponnu livari, sunnu sempri na siccatura.\n\nCerti voti, spicialmenti quannu s'agghiùncinu liami novi nta na pàggina, la wiki pò ammustrari na mmàggini cûn testu culuratu o sdillabbratu, e t'addumanna di scrìviri li palori ca cunteni.\nComu chi è diffìcili fari st'azzioni di manera autumàtica, stu miccanismu cunzenti ê cristiani di pubblicari li sò cuntinuti, ô tempu stissu bluccannu la maiur parti dî spammer e di bot ca fannu dammaggi.\n\nPurtroppu, chistu pò dari prubblemi a l'utenti ca nun vìdinu bonu o a chiddi ca adòpiranu browser tistuali o sintitizzatura vucali.\nComu a ora nun avemu n'altirnativa àudiu a dispusizzioni. Si nun s'arrinesci a purtari a tèrmini n'opirazzioni liggìttima, cuntattari pi favuri [[Special:ListAdmins|l'amministratura dû situ]] e addumannari assistenza.\n\nCarcari lu buttuni «arreri» dû browser pi turnari â pàggina di canciamentu.", + "captcha-addurl-whitelist": " #
    \n# La sintassi è chista:\n#   * Tuttu chiddu ca c'è di nu caràttiri \"#\" fina â fini dâ riga è nu cummentu\n#   * Ogni riga nun vacanti è nu frammentu di sprissioni rigulari ca havi a currispùnniri ô sulu host di l'URL\n #
    ", + "right-skipcaptcha": "Esiguiri l'azzioni c'addumànnanu nu CAPTCHA senza aviri a passari pû CAPTCHA" } diff --git a/extensions/ConfirmEdit/i18n/shy-latn.json b/extensions/ConfirmEdit/i18n/shy-latn.json new file mode 100644 index 00000000..5a0c7234 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/shy-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Vikoula5" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/sq.json b/extensions/ConfirmEdit/i18n/sq.json index 56dc6b37..d5f49d16 100644 --- a/extensions/ConfirmEdit/i18n/sq.json +++ b/extensions/ConfirmEdit/i18n/sq.json @@ -4,11 +4,13 @@ "BrokenArrow", "Dori", "Mikullovci11", - "Olsi" + "Olsi", + "Liridon" ] }, "captcha-edit": "Për të redaktuar këtë faqe ju lutem zgjidhni shumën e mëposhtme dhe vendosni përgjigjen në kuti ([[Special:Captcha/help|më shumë informacion]]):", "captcha-desc": "Siguron teknika CAPTCHA për të mbrojtur kundër spam", + "captcha-label": "CAPTCHA", "captcha-addurl": "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:
    ([[Special:Captcha|Çfarë është kjo?]])", "captcha-badlogin": "Për tu mbrojtur nga metoda automatike të gjetjes së fjalëkalimeve ju kërkojmë të gjeni zgjidhni shumën e mëposhtme dhe të vendosni përgjigjen në kuti ([[Special:Captcha/help|më shumë informacion]]):", "captcha-createaccount": "Për mbrojtje kundër regjistrimeve automatike duhet të zgjidhni ekuacionin e mëposhtëm para se të hapni llogarinë:
    ([[Special:Captcha|Çfarë është kjo?]])", diff --git a/extensions/ConfirmEdit/i18n/sr-ec.json b/extensions/ConfirmEdit/i18n/sr-ec.json index 4bfc5594..4254a803 100644 --- a/extensions/ConfirmEdit/i18n/sr-ec.json +++ b/extensions/ConfirmEdit/i18n/sr-ec.json @@ -3,11 +3,13 @@ "authors": [ "Milicevic01", "Millosh", - "Rancher" + "Rancher", + "Srdjan m" ] }, "captcha-edit": "За измену ове Ñтране, реши једноÑтаван збри иÑпод и унеÑи одговор у кутију ([[Special:Captcha/help|детаљније]]):", "captcha-desc": "Пружа заштиту против непожељних порука у виду потврдног кода", + "captcha-label": "КÐПЧÐ", "captcha-addurl": "Ваша измена Ñадржи нове Ñпољашње везе.\nУ циљу заштите од непожељних порука, решите проÑту рачуницу иÑпод и унеÑите одговор у поље ([[Special:Captcha/help|више информација]]):", "captcha-badlogin": "У циљу заштите од пробијања лозинки, решите проÑту рачуницу иÑпод и унеÑите одговор у поље ([[Special:Captcha/help|више информација]]):", "captcha-createaccount": "У циљу заштите од аутоматизованог вандализма, решите проÑту рачуницу иÑпод и унеÑите одговор у поље ([[Special:Captcha/help|више информација]]):", diff --git a/extensions/ConfirmEdit/i18n/sr-el.json b/extensions/ConfirmEdit/i18n/sr-el.json index 742516fa..cec41669 100644 --- a/extensions/ConfirmEdit/i18n/sr-el.json +++ b/extensions/ConfirmEdit/i18n/sr-el.json @@ -2,11 +2,13 @@ "@metadata": { "authors": [ "Michaello", - "Milicevic01" + "Milicevic01", + "Srdjan m" ] }, "captcha-edit": "Za izmenu ove strane, reÅ¡i jednostavan zbri ispod i unesi odgovor u kutiju ([[Special:Captcha/help|detaljnije]]):", "captcha-desc": "Pruža zaÅ¡titu protiv nepoželjnih poruka u vidu potvrdnog koda", + "captcha-label": "KAPÄŒA", "captcha-addurl": "Tvoja izmena ukljuÄuje nove spoljaÅ¡nje veze. U cilju zaÅ¡tite protiv automatskog spama, reÅ¡i jednostavan zbir ispod i upiÅ¡i odgovor u kutiju ([[Special:Captcha/help|detaljnije]]):", "captcha-badlogin": "U cilju zaÅ¡tite od automatske provale u lozinku, reÅ¡i jednostavan zbir ispod i unesi odgovor u kutiju ([[Special:Captcha/help|detaljnije]]):", "captcha-createaccount": "U cilju zaÅ¡tite od automatizovanog vandalizma, reÅ¡ite prostu raÄunicu ispod i unesite odgovor u polje ([[Special:Captcha/help|viÅ¡e informacija]]):", diff --git a/extensions/ConfirmEdit/i18n/su.json b/extensions/ConfirmEdit/i18n/su.json index 08ebe767..c15904ef 100644 --- a/extensions/ConfirmEdit/i18n/su.json +++ b/extensions/ConfirmEdit/i18n/su.json @@ -7,6 +7,7 @@ }, "captcha-edit": "Pikeun ngédit artikel ieu, mangga eusian itungan di handap ([[Special:Captcha/help|émbaran lengkep]]):", "captcha-desc": "Implementasi basajan captcha", + "captcha-label": "CAPTCHA", "captcha-addurl": "Éditan anjeun ngawengku tumbu kaluar anyar.\nPikeun nyegah spam, mangga eusian itungan di handap ieu\n([[Special:Captcha/help|émbaran lengkep]]):", "captcha-createaccount": "Pikeun nyegah dijieunna rekening sacara otomatis, mangga eusian itungan di handap ieu ([[Special:Captcha/help|émbaran lengkep]]):", "captcha-createaccount-fail": "Sandi konfirmasina salah atawa can dieusian.", diff --git a/extensions/ConfirmEdit/i18n/tr.json b/extensions/ConfirmEdit/i18n/tr.json index 2b1c6f29..8f4747cc 100644 --- a/extensions/ConfirmEdit/i18n/tr.json +++ b/extensions/ConfirmEdit/i18n/tr.json @@ -3,12 +3,13 @@ "authors": [ "Emperyan", "Joseph", - "Runningfridgesrule" + "Runningfridgesrule", + "Stultiwikia" ] }, "captcha-edit": "Bu sayfayı deÄŸiÅŸtirebilmek için lütfen aÅŸağıdaki basit soruyu yanıtlayın ve yanıtı kutunun içine yazın ([[Special:Captcha/help|ayrıntılı bilgi]]):", "captcha-desc": "Spam ve parola tahminine karşı korunmak için \"Güvenlik Kodu\" (CAPTCHA) tekniÄŸi saÄŸlar.", - "captcha-label": "Güvenlik Kodu", + "captcha-label": "CAPTCHA", "captcha-addurl": "DeÄŸiÅŸikliÄŸiniz yeni dış baÄŸlantılar içeriyor.\nVikiyi otomatik spamdan korumak ve deÄŸiÅŸikliÄŸinizi kaydetmek için, aÅŸağıdaki basit toplamı çözmenizi ve yanıtı kutunun içine yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", "captcha-badlogin": "Vikiyi otomatik parola çözülmesine karşı korumak için, aÅŸağıdaki basit toplamı çözmenizi ve yanıtı kutunun içine yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", "captcha-createaccount": "Vikiyi otomatik hesap oluÅŸturmaya karşı korumak için, aÅŸağıdaki basit toplamı çözmenizi ve yanıtı kutunun içine yazmanızı rica ediyoruz ([[Special:Captcha/help|ayrıntılı bilgi]]):", diff --git a/extensions/ConfirmEdit/i18n/tt-cyrl.json b/extensions/ConfirmEdit/i18n/tt-cyrl.json new file mode 100644 index 00000000..373f7494 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/tt-cyrl.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Ильнар" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/war.json b/extensions/ConfirmEdit/i18n/war.json new file mode 100644 index 00000000..49f92508 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/war.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "JinJian" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/wo.json b/extensions/ConfirmEdit/i18n/wo.json new file mode 100644 index 00000000..f15cd4e2 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/wo.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Ibou" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/wuu.json b/extensions/ConfirmEdit/i18n/wuu.json new file mode 100644 index 00000000..53decf6b --- /dev/null +++ b/extensions/ConfirmEdit/i18n/wuu.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Poiuyt" + ] + }, + "captcha-label": "验è¯ç " +} diff --git a/extensions/ConfirmEdit/i18n/xmf.json b/extensions/ConfirmEdit/i18n/xmf.json new file mode 100644 index 00000000..5dfe1981 --- /dev/null +++ b/extensions/ConfirmEdit/i18n/xmf.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Silovan" + ] + }, + "captcha-label": "CAPTCHA" +} diff --git a/extensions/ConfirmEdit/i18n/yue.json b/extensions/ConfirmEdit/i18n/yue.json index 79c10820..eeb5b435 100644 --- a/extensions/ConfirmEdit/i18n/yue.json +++ b/extensions/ConfirmEdit/i18n/yue.json @@ -1,7 +1,9 @@ { "@metadata": { "authors": [ - "Yueman" + "Yueman", + "CRCHF", + "Wong128hk" ] }, "captcha-edit": "è¦ç·¨è¼¯å‘¢ä¸€ç¯‡æ–‡ï¼Œè«‹ç­”出一個簡單嘅加數和,跟ä½éŸ¿å€‹ç›’度打入 ([[Special:Captcha/help|更多資料]]):", @@ -10,11 +12,14 @@ "captcha-addurl": "你編輯嘅內容è£é¢æœ‰æ–°å˜…URL連çµï¼›ç‚ºå’—é¿å…å—到自動垃圾程å¼çš„侵擾,請答出一個簡單嘅加數和,跟ä½éŸ¿å€‹ç›’度打入 ([[Special:Captcha/help|更多資料]]):", "captcha-badlogin": "為咗防止程å¼è‡ªå‹•ç ´è§£å¯†ç¢¼ï¼Œè«‹ç­”出一個簡單嘅加數和,跟ä½éŸ¿å€‹ç›’度打入 ([[Special:Captcha/help|更多資料]]):", "captcha-createaccount": "為咗防止程å¼è‡ªå‹•è¨»å†Šï¼Œè«‹ç­”出一個簡單嘅加數和,跟ä½éŸ¿å€‹ç›’度打入 ([[Special:Captcha/help|更多資料]]):", - "captcha-createaccount-fail": "驗證碼錯誤或者唔見咗。", + "captcha-createaccount-fail": "驗證碼錯咗或者唔見咗。", "captcha-create": "è¦é–‹å‘¢ä¸€ç‰ˆï¼Œè«‹ç­”出一個簡單嘅加數和,跟ä½éŸ¿å€‹ç›’度打入 ([[Special:Captcha/help|更多資料]]):", + "captcha-sendemail": "為咗防止機械å¼æ¿«è²¼ï¼Œè«‹å–ºå€‹ç›’é“答以下爾æ¢ç°¡å–®å˜…加數([[Special:Captcha/help|更多資料]])︰", + "captcha-sendemail-fail": "驗證碼錯咗或者唔見咗。", + "captcha-disabledinapi": "呢個動作需è¦é©—證碼,所以唔å¯ä»¥ç”¨ API åšã€‚", "captchahelp-title": "Captcha 幫助", "captchahelp-cookies-needed": "你需è¦é–‹å’—響ç€è¦½å™¨åº¦å˜…cookies先至å¯ä»¥ç”¨å‘¢æ¨£å˜¢ã€‚", - "captchahelp-text": "就好似呢個wikiå’,å°å…¬çœ¾é–‹æ”¾ç·¨è¼¯å˜…網站係會經常å—到垃圾連çµé¨·æ“¾ã€‚嗰啲人利用自動化垃圾程åºå°‡ä½¢å“‹å˜…連çµå¼µè²¼åˆ°å¥½å¤šç¶²ç«™ã€‚雖然呢啲連çµå¯ä»¥è¢«æ¸…除,但係呢啲嘢確實令人å分之討厭。\n\n有時,特別係當響一é æ·»åŠ æ–°å˜…網é é€£çµå—°é™£ï¼Œå‘¢å€‹ç¶²ç«™æœƒç•€ä½ ç‡ä¸€å¹…有é¡è‰²çš„或者有變形文字嘅圖åƒï¼Œè·Ÿä½è¦ä½ è¼¸å…¥æ‰€é¡¯ç¤ºå˜…文字。因為å’係難以自動完æˆå˜…一項任務,它將å…許人ä¿å­˜ä½¢å“‹å˜…編輯,åŒæ™‚亦阻止大多數發é€åžƒåœ¾éƒµä»¶è€…åŒå…¶å®ƒæ©Ÿæ¢°äººå˜…攻擊。\n\n令人éºæ†¾å˜…係,å’會令到視力唔好嘅人,或者利用基於文本或者基於è²éŸ³å˜…ç€è¦½å™¨ç”¨æˆ¶æ„Ÿåˆ°ä¸ä¾¿ã€‚而目å‰æˆ‘哋仲未能夠æ供音頻嘅é¸æ“‡ã€‚如果å’樣å’啱阻止到你進行正常嘅編輯,請åŒç®¡ç†å“¡è¯ç¹«ä»¥ç²å¾—幫助。\n\n撳一下響ç€è¦½å™¨åº¦å˜…「後退ã€æŽ£è¿”去你之å‰æ‰€ç·¨è¼¯ç·Šå˜…é é¢ã€‚", + "captchahelp-text": "就好似呢個wiki噉,å°å…¬çœ¾é–‹æ”¾ç·¨è¼¯å˜…網站係會經常å—到垃圾連çµé¨·æ“¾ã€‚嗰啲人利用自動化垃圾程åºå°‡ä½¢å“‹å˜…連çµå¼µè²¼åˆ°å¥½å¤šç¶²ç«™ã€‚雖然呢啲連çµå¯ä»¥è¢«æ¸…除,但呢啲嘢確實好乞人憎。\n\n有時,特別係響一é åŠ æ–°å˜…網é é€£çµå—°é™£ï¼Œå‘¢å€‹ç¶²ç«™æœƒç•€ä½ ç‡ä¸€å¹…有色或者有變形文字嘅圖,跟ä½è¦ä½ è¼¸å…¥æ‰€é¡¯ç¤ºå˜…字。因為噉係好難自動æžæŽ‚嘅任務,佢將å…許人ä¿å­˜ä½¢å“‹å˜…編輯,åŒæ™‚亦阻止大多數發é€åžƒåœ¾éƒµä»¶è€…åŒå…¶å®ƒæ©Ÿæ¢°äººå˜…攻擊。\n\n唔好彩嘅係,å°è¦–力唔好嘅人或用基於文本或è²å˜…ç€è¦½å™¨ç”¨æˆ¶å¯èƒ½å””方便。而目å‰æˆ‘å“‹é‡æœªå¯ä»¥æ€åˆ°éŸ³é »ã€‚如果å’啱阻到你æžå˜…æ­£å¸¸ç·¨è¼¯è¡Œç‚ºï¼Œè«‹åŒ [[Special:ListAdmins|管ç†å“¡]]è¯ç¹«ä»¥ç²å¾—幫助。\n\n撳一下響ç€è¦½å™¨å˜…「後退ã€æŽ£è¿”到你之å‰æ‰€ç·¨è¼¯ç·Šå˜…é é¢ã€‚", "captcha-addurl-whitelist": " #
    \n# 語法好似下é¢å™‰:\n#   * 所有由 \"#\" 字元之後嘅嘢到行尾係註解\n#   * 所有éžç©ºç™½è¡Œä¿‚一個regex部份,åªä¿‚會åŒè£é¢å˜…URL主機相符\n #
    ", "right-skipcaptcha": "執行captcha引發嘅動作時唔需è¦ç¶“éŽcaptcha" } diff --git a/extensions/ConfirmEdit/i18n/zh-hans.json b/extensions/ConfirmEdit/i18n/zh-hans.json index 0ee20dd8..2dfbfafa 100644 --- a/extensions/ConfirmEdit/i18n/zh-hans.json +++ b/extensions/ConfirmEdit/i18n/zh-hans.json @@ -26,6 +26,6 @@ "captchahelp-title": "验è¯ç å¸®åŠ©", "captchahelp-cookies-needed": "你需è¦å¯ç”¨ä½ çš„æµè§ˆå™¨çš„cookie使该程åºå·¥ä½œã€‚", "captchahelp-text": "接å—公众贡献的网站,比如本wiki,ç»å¸¸å—到使用自动工具添加垃圾网站链接的垃圾制造者的破å。尽管这些垃圾链接å¯ä»¥è¢«åˆ é™¤ï¼Œå®ƒä»¬ä»ç„¶æžå…¶éº»çƒ¦ã€‚\n\n有时,特别是给页é¢æ·»åŠ æ–°çš„网络链接时,本wikiå¯èƒ½ä¼šå‘你展示一张有多ç§é¢œè‰²æˆ–扭曲的文字的图åƒï¼Œå¹¶è¦æ±‚你输入展示的文字。由于这是一项难以用自动工具完æˆçš„任务,它å¯ä»¥å…许在大多数真人åšå‡ºè´¡çŒ®çš„åŒæ—¶ï¼Œé˜»æ­¢å¤§å¤šæ•°åžƒåœ¾åˆ¶é€ è€…和其他自动攻击者。\n\né—憾地是,这å¯èƒ½ä¼šå¯¹è§†åŠ›å—é™æˆ–是使用纯文本或阅读æµè§ˆå™¨çš„用户造æˆä¸ä¾¿ã€‚ç›®å‰æˆ‘们还没替代的声音选择。如果这项措施æ„外地阻止你进行正常的贡献,请与[[Special:ListAdmins|网站管ç†å‘˜]]è”系获å–帮助。\n\n点击æµè§ˆå™¨çš„“åŽé€€â€æŒ‰é’®è¿”回页é¢ç¼–辑器。", - "captcha-addurl-whitelist": " #
    \n# å¥æ³•å¦‚下:\n#   * 所有以“#â€å­—符开头的行都是注释\n#   * 所有éžç©ºç™½è¡Œæ˜¯æ­£åˆ™è¡¨è¾¾å¼ç‰‡æ®µï¼Œåªä¼šå¯¹URL中的内容进行匹é…\n #
    ", + "captcha-addurl-whitelist": " #
    \n# 语法如下:\n#   * 所有以“#â€å­—符开头的行都是注释\n#   * 所有éžç©ºç™½è¡Œæ˜¯æ­£åˆ™è¡¨è¾¾å¼ç‰‡æ®µï¼Œåªä¼šå¯¹URL中的内容进行匹é…\n #
    ", "right-skipcaptcha": "执行触å‘验è¯ç çš„æ“作时无需验è¯" } diff --git a/extensions/ConfirmEdit/includes/CaptchaStore.php b/extensions/ConfirmEdit/includes/CaptchaStore.php index b0854df1..75800710 100644 --- a/extensions/ConfirmEdit/includes/CaptchaStore.php +++ b/extensions/ConfirmEdit/includes/CaptchaStore.php @@ -58,7 +58,6 @@ abstract class CaptchaStore { } class CaptchaSessionStore extends CaptchaStore { - protected function __construct() { // Make sure the session is started if ( session_id() === '' ) { @@ -88,16 +87,18 @@ class CaptchaSessionStore extends CaptchaStore { } class CaptchaCacheStore extends CaptchaStore { - function store( $index, $info ) { - global $wgMemc, $wgCaptchaSessionExpiration; - $wgMemc->set( wfMemcKey( 'captcha', $index ), $info, - $wgCaptchaSessionExpiration ); + global $wgCaptchaSessionExpiration; + + ObjectCache::getMainStashInstance()->set( + wfMemcKey( 'captcha', $index ), + $info, + $wgCaptchaSessionExpiration + ); } function retrieve( $index ) { - global $wgMemc; - $info = $wgMemc->get( wfMemcKey( 'captcha', $index ) ); + $info = ObjectCache::getMainStashInstance()->get( wfMemcKey( 'captcha', $index ) ); if ( $info ) { return $info; } else { @@ -106,8 +107,7 @@ class CaptchaCacheStore extends CaptchaStore { } function clear( $index ) { - global $wgMemc; - $wgMemc->delete( wfMemcKey( 'captcha', $index ) ); + ObjectCache::getMainStashInstance()->delete( wfMemcKey( 'captcha', $index ) ); } function cookiesNeeded() { diff --git a/extensions/Gadgets/GadgetHooks.php b/extensions/Gadgets/GadgetHooks.php index 64c7a3f4..8c39394c 100644 --- a/extensions/Gadgets/GadgetHooks.php +++ b/extensions/Gadgets/GadgetHooks.php @@ -20,6 +20,7 @@ * * @file */ +use WrappedString\WrappedString; class GadgetHooks { /** @@ -33,8 +34,11 @@ class GadgetHooks { public static function articleSaveComplete( $article, $user, $text ) { // update cache if MediaWiki:Gadgets-definition was edited $title = $article->getTitle(); - if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getText() == 'Gadgets-definition' ) { - Gadget::loadStructuredList( $text ); + $repo = GadgetRepo::singleton(); + if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getText() == 'Gadgets-definition' + && $repo instanceof MediaWikiGadgetsDefinitionRepo + ) { + $repo->purgeDefinitionCache(); } return true; } @@ -45,7 +49,7 @@ class GadgetHooks { * @return bool */ public static function userGetDefaultOptions( &$defaultOptions ) { - $gadgets = Gadget::loadStructuredList(); + $gadgets = GadgetRepo::singleton()->getStructuredList(); if ( !$gadgets ) { return true; } @@ -71,7 +75,7 @@ class GadgetHooks { * @return bool */ public static function getPreferences( $user, &$preferences ) { - $gadgets = Gadget::loadStructuredList(); + $gadgets = GadgetRepo::singleton()->getStructuredList(); if ( !$gadgets ) { return true; } @@ -85,7 +89,7 @@ class GadgetHooks { * @var $gadget Gadget */ foreach ( $thisSection as $gadget ) { - if ( $gadget->isAllowed( $user ) ) { + if ( !$gadget->isHidden() && $gadget->isAllowed( $user ) ) { $gname = $gadget->getName(); # bug 30182: dir="auto" because it's often not translated $desc = '' . $gadget->getDescription() . ''; @@ -138,22 +142,21 @@ class GadgetHooks { * @return bool */ public static function registerModules( &$resourceLoader ) { - $gadgets = Gadget::loadList(); - if ( !$gadgets ) { + $repo = GadgetRepo::singleton(); + $ids = $repo->getGadgetIds(); + if ( !$ids ) { return true; } - /** - * @var $g Gadget - */ - foreach ( $gadgets as $g ) { + foreach ( $ids as $id ) { + $g = $repo->getGadget( $id ); $module = $g->getModule(); if ( $module ) { $resourceLoader->register( $g->getModuleName(), $module ); } } - return true; + return true; } /** @@ -162,77 +165,52 @@ class GadgetHooks { * @return bool */ public static function beforePageDisplay( $out ) { - $gadgets = Gadget::loadList(); - if ( !$gadgets ) { + $repo = GadgetRepo::singleton(); + $ids = $repo->getGadgetIds(); + if ( !$ids ) { return true; } $lb = new LinkBatch(); $lb->setCaller( __METHOD__ ); - $pages = array(); + $enabledLegacyGadgets = array(); /** * @var $gadget Gadget */ $user = $out->getUser(); - foreach ( $gadgets as $gadget ) { + foreach ( $ids as $id ) { + $gadget = $repo->getGadget( $id ); if ( $gadget->isEnabled( $user ) && $gadget->isAllowed( $user ) ) { if ( $gadget->hasModule() ) { $out->addModuleStyles( $gadget->getModuleName() ); $out->addModules( $gadget->getModuleName() ); } - foreach ( $gadget->getLegacyScripts() as $page ) { - $lb->add( NS_MEDIAWIKI, $page ); - $pages[] = $page; + if ( $gadget->getLegacyScripts() ) { + $enabledLegacyGadgets[] = $id; } } } - - // Allow other extensions, e.g. MobileFrontend, to disallow legacy gadgets - if ( wfRunHooks( 'Gadgets::allowLegacy', array( $out->getContext() ) ) ) { - $lb->execute( __METHOD__ ); - - $done = array(); - - foreach ( $pages as $page ) { - if ( isset( $done[$page] ) ) { - continue; - } - - $done[$page] = true; - self::applyScript( $page, $out ); - } + $strings = array(); + foreach ( $enabledLegacyGadgets as $id ) { + $strings[] = self::makeLegacyWarning( $id ); } + $out->addHTML( WrappedString::join( "\n", $strings ) ); return true; } - /** - * Adds one legacy script to output. - * - * @param string $page Unprefixed page title - * @param OutputPage $out - */ - private static function applyScript( $page, $out ) { - global $wgJsMimeType; - - # bug 22929: disable gadgets on sensitive pages. Scripts loaded through the - # ResourceLoader handle this in OutputPage::getModules() - # TODO: make this extension load everything via RL, then we don't need to worry - # about any of this. - if ( $out->getAllowedModules( ResourceLoaderModule::TYPE_SCRIPTS ) < ResourceLoaderModule::ORIGIN_USER_SITEWIDE ) { - return; - } - - $t = Title::makeTitleSafe( NS_MEDIAWIKI, $page ); - if ( !$t ) { - return; - } + private static function makeLegacyWarning( $id ) { + $special = SpecialPage::getTitleFor( 'Gadgets' ); - $u = $t->getLocalURL( 'action=raw&ctype=' . $wgJsMimeType ); - $out->addScriptFile( $u, $t->getLatestRevID() ); + return ResourceLoader::makeInlineScript( + Xml::encodeJsCall( 'mw.log.warn', array( + "Gadget \"$id\" was not loaded. Please migrate it to use ResourceLoader. " . + ' See <' . $special->getCanonicalURL() . '>.' + ) ) + ); } /** diff --git a/extensions/Gadgets/Gadgets.alias.php b/extensions/Gadgets/Gadgets.alias.php index 46c7852b..e8f32cfb 100644 --- a/extensions/Gadgets/Gadgets.alias.php +++ b/extensions/Gadgets/Gadgets.alias.php @@ -24,7 +24,7 @@ $specialPageAliases['ar'] = array( 'Gadgets' => array( 'إضاÙات' ), ); -/** Egyptian Spoken Arabic (مصرى) */ +/** Egyptian Arabic (مصرى) */ $specialPageAliases['arz'] = array( 'Gadgets' => array( 'ادوات' ), ); @@ -69,7 +69,7 @@ $specialPageAliases['ce'] = array( 'Gadgets' => array( 'Гаджеташ' ), ); -/** Sorani Kurdish (کوردی) */ +/** Central Kurdish (کوردیی ناوەندی) */ $specialPageAliases['ckb'] = array( 'Gadgets' => array( 'ئامرازەکان' ), ); @@ -129,7 +129,7 @@ $specialPageAliases['fi'] = array( 'Gadgets' => array( 'Pienoisohjelmat' ), ); -/** Franco-Provençal (arpetan) */ +/** Arpitan (arpetan) */ $specialPageAliases['frp'] = array( 'Gadgets' => array( 'Outils' ), ); @@ -214,9 +214,9 @@ $specialPageAliases['lb'] = array( 'Gadgets' => array( 'Gadgeten' ), ); -/** لوری (لوری) */ +/** Northern Luri (لۊری شومالی) */ $specialPageAliases['lrc'] = array( - 'Gadgets' => array( 'گجتیا' ), + 'Gadgets' => array( 'گأجئتیا' ), ); /** Minangkabau (Baso Minangkabau) */ diff --git a/extensions/Gadgets/Gadgets.namespaces.php b/extensions/Gadgets/Gadgets.namespaces.php new file mode 100644 index 00000000..4e355488 --- /dev/null +++ b/extensions/Gadgets/Gadgets.namespaces.php @@ -0,0 +1,122 @@ + 'إضاÙØ©', + NS_GADGET_TALK => 'نقاش_الإضاÙØ©', + NS_GADGET_DEFINITION => 'تعريÙ_الإضاÙØ©', + NS_GADGET_DEFINITION_TALK => 'نقاش_تعريÙ_الإضاÙØ©', +); + +$namespaceNames['azb'] = array( + NS_GADGET => 'آلت', + NS_GADGET_TALK => 'آلت_دانیشیغی', + NS_GADGET_DEFINITION => 'آلت_آچیقلاماسی', + NS_GADGET_DEFINITION_TALK => 'آلت_آچیقلاماسی_دانیشیغی', +); + +$namespaceNames['bgn'] = array( + NS_GADGET => 'وسیله_ئان', + NS_GADGET_TALK => 'وسیله_ئان_ئی_Ú¯Ù¾', + NS_GADGET_DEFINITION => 'وسیله_ئانی_شرح', + NS_GADGET_DEFINITION_TALK => 'وسیله_ئانی_شرح_ئی_Ú¯Ù¾', +); + +$namespaceNames['ckb'] = array( + NS_GADGET => 'ئامراز', + NS_GADGET_TALK => 'وتووێژی_ئامراز', + NS_GADGET_DEFINITION => 'پێناسه‌ی_ئامراز', + NS_GADGET_DEFINITION_TALK => 'وتووێژی_پێناسه‌ی_ئامراز', +); + +$namespaceNames['de'] = array( + NS_GADGET => 'Gadget', + NS_GADGET_TALK => 'Gadget_Diskussion', + NS_GADGET_DEFINITION => 'Gadget-Definition', + NS_GADGET_DEFINITION_TALK => 'Gadget-Definition_Diskussion', +); + +$namespaceNames['en'] = array( + NS_GADGET => 'Gadget', + NS_GADGET_TALK => 'Gadget_talk', + NS_GADGET_DEFINITION => 'Gadget_definition', + NS_GADGET_DEFINITION_TALK => 'Gadget_definition_talk', +); + +$namespaceNames['fa'] = array( + NS_GADGET => 'ابزار', + NS_GADGET_TALK => 'بحث_ابزار', + NS_GADGET_DEFINITION => 'توضیحات_ابزار', + NS_GADGET_DEFINITION_TALK => 'بحث_توضیحات_ابزار', +); + +$namespaceNames['he'] = array( + NS_GADGET => '×’×דג\'ט', + NS_GADGET_TALK => 'שיחת_×’×דג\'ט', + NS_GADGET_DEFINITION => 'הגדרת_×’×דג\'ט', + NS_GADGET_DEFINITION_TALK => 'שיחת_הגדרת_×’×דג\'ט', +); + +$namespaceNames['it'] = array( + NS_GADGET => 'Accessorio', + NS_GADGET_TALK => 'Discussioni_accessorio', + NS_GADGET_DEFINITION => 'Definizione_accessorio', + NS_GADGET_DEFINITION_TALK => 'Discussioni_definizione_accessorio', +); + +$namespaceNames['ko'] = array( + NS_GADGET => '소ë„구', + NS_GADGET_TALK => '소ë„구토론', + NS_GADGET_DEFINITION => '소ë„구정ì˜', + NS_GADGET_DEFINITION_TALK => '소ë„구정ì˜í† ë¡ ', +); + +$namespaceNames['lrc'] = array( + NS_GADGET => 'گأجئت', + NS_GADGET_TALK => 'چأک_چئنە_گأجئت', + NS_GADGET_DEFINITION => 'توضییا_گأجئت', + NS_GADGET_DEFINITION_TALK => 'چأک_چئنە_توضییا_گأجئت', +); + +$namespaceNames['mzn'] = array( + NS_GADGET => 'گجت', + NS_GADGET_TALK => 'گجت_Ú¯Ù¾', + NS_GADGET_DEFINITION => 'گجت_توضیحات', + NS_GADGET_DEFINITION_TALK => 'گجت_توضیحات_Ú¯Ù¾', +); + +$namespaceNames['or'] = array( + NS_GADGET => 'ଗà­à­Ÿà¬¾à¬œà­‡à¬Ÿ', + NS_GADGET_TALK => 'ଗà­à­Ÿà¬¾à¬œà­‡à¬Ÿ_ଆଲୋଚନା', + NS_GADGET_DEFINITION => 'ଗà­à­Ÿà¬¾à¬œà­‡à¬Ÿ_ସଂଜà­à¬žà¬¾', + NS_GADGET_DEFINITION_TALK => 'ଗà­à­Ÿà¬¾à¬œà­‡à¬Ÿ_ସଂଜà­à¬žà¬¾_ଆଲୋଚନା', +); + +$namespaceNames['pl'] = array( + NS_GADGET => 'Gadżet', + NS_GADGET_TALK => 'Dyskusja_gadżetu', + NS_GADGET_DEFINITION => 'Definicja_gadżetu', + NS_GADGET_DEFINITION_TALK => 'Dyskusja_definicji_gadżetu', +); + +$namespaceNames['ur'] = array( + NS_GADGET => 'آلÛ', + NS_GADGET_TALK => 'تبادلۂ_خیال_آلÛ', + NS_GADGET_DEFINITION => 'تعریÙ_آلÛ', + NS_GADGET_DEFINITION_TALK => 'تبادلۂ_خیال_تعریÙ_آلÛ', +); + +$namespaceNames['vi'] = array( + NS_GADGET => 'Tiện_ích', + NS_GADGET_TALK => 'Thảo_luận_Tiện_ích', + NS_GADGET_DEFINITION => 'Äịnh_nghÄ©a_tiện_ích', + NS_GADGET_DEFINITION_TALK => 'Thảo_luận_Äịnh_nghÄ©a_tiện_ích', +); diff --git a/extensions/Gadgets/Gadgets.php b/extensions/Gadgets/Gadgets.php index 2b172307..723ce293 100644 --- a/extensions/Gadgets/Gadgets.php +++ b/extensions/Gadgets/Gadgets.php @@ -5,6 +5,7 @@ if ( function_exists( 'wfLoadExtension' ) ) { // Keep i18n globals so mergeMessageFileList.php doesn't break $wgMessagesDirs['Gadgets'] = __DIR__ . '/i18n'; $wgExtensionMessagesFiles['GadgetsAlias'] = __DIR__ . '/Gadgets.alias.php'; + $wgExtensionMessagesFiles['GadgetsNamespaces'] = __DIR__ . '/Gadgets.namespaces.php'; /* wfWarn( 'Deprecated PHP entry point used for Gadgets extension. Please use wfLoadExtension instead, ' . 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' diff --git a/extensions/Gadgets/Gadgets_body.php b/extensions/Gadgets/Gadgets_body.php index d07a0859..d3483e26 100644 --- a/extensions/Gadgets/Gadgets_body.php +++ b/extensions/Gadgets/Gadgets_body.php @@ -19,11 +19,14 @@ class Gadget { /** * Increment this when changing class structure */ - const GADGET_CLASS_VERSION = 7; + const GADGET_CLASS_VERSION = 9; + + const CACHE_TTL = 86400; private $scripts = array(), $styles = array(), $dependencies = array(), + $messages = array(), $name, $definition, $resourceLoaded = false, @@ -31,80 +34,49 @@ class Gadget { $requiredSkins = array(), $targets = array( 'desktop' ), $onByDefault = false, + $hidden = false, $position = 'bottom', $category; - /** - * Creates an instance of this class from definition in MediaWiki:Gadgets-definition - * @param $definition String: Gadget definition - * @return Gadget|bool Instance of Gadget class or false if $definition is invalid - */ - public static function newFromDefinition( $definition ) { - $m = array(); - if ( !preg_match( '/^\*+ *([a-zA-Z](?:[-_:.\w\d ]*[a-zA-Z0-9])?)(\s*\[.*?\])?\s*((\|[^|]*)+)\s*$/', $definition, $m ) ) { - return false; - } - // NOTE: the gadget name is used as part of the name of a form field, - // and must follow the rules defined in http://www.w3.org/TR/html4/types.html#type-cdata - // Also, title-normalization applies. - $gadget = new Gadget(); - $gadget->name = trim( str_replace( ' ', '_', $m[1] ) ); - // If the name is too long, then RL will throw an MWException when - // we try to register the module - if ( !ResourceLoader::isValidModuleName( $gadget->getModuleName() ) ) { - return false; - } - $gadget->definition = $definition; - $options = trim( $m[2], ' []' ); - - foreach ( preg_split( '/\s*\|\s*/', $options, -1, PREG_SPLIT_NO_EMPTY ) as $option ) { - $arr = preg_split( '/\s*=\s*/', $option, 2 ); - $option = $arr[0]; - if ( isset( $arr[1] ) ) { - $params = explode( ',', $arr[1] ); - $params = array_map( 'trim', $params ); - } else { - $params = array(); - } + /** @var array|bool Result of loadStructuredList() */ + private static $definitionCache; - switch ( $option ) { - case 'ResourceLoader': - $gadget->resourceLoaded = true; - break; + public function __construct( array $options ) { + foreach ( $options as $member => $option ) { + switch ( $member ) { + case 'scripts': + case 'styles': case 'dependencies': - $gadget->dependencies = $params; - break; - case 'rights': - $gadget->requiredRights = $params; - break; - case 'skins': - $gadget->requiredSkins = $params; - break; - case 'default': - $gadget->onByDefault = true; - break; + case 'messages': + case 'name': + case 'definition': + case 'resourceLoaded': + case 'requiredRights': + case 'requiredSkins': case 'targets': - $gadget->targets = $params; - break; - case 'top': - $gadget->position = 'top'; + case 'onByDefault': + case 'position': + case 'hidden': + case 'category': + $this->{$member} = $option; break; + default: + throw new InvalidArgumentException( "Unrecognized '$member' parameter" ); } } + } - foreach ( preg_split( '/\s*\|\s*/', $m[3], -1, PREG_SPLIT_NO_EMPTY ) as $page ) { - $page = "Gadget-$page"; - - if ( preg_match( '/\.js/', $page ) ) { - $gadget->scripts[] = $page; - } elseif ( preg_match( '/\.css/', $page ) ) { - $gadget->styles[] = $page; - } - } - - return $gadget; + /** + * Whether the provided gadget id is valid + * + * @param string $id + * @return bool + */ + public static function isValidGadgetID( $id ) { + return strlen( $id ) > 0 && ResourceLoader::isValidModuleName( "ext.gadget.$id" ); } + /** * @return String: Gadget name */ @@ -168,6 +140,13 @@ class Gadget { return $this->onByDefault; } + /** + * @return bool + */ + public function isHidden() { + return $this->hidden; + } + /** * @return Boolean: Whether all of this gadget's JS components support ResourceLoader */ @@ -234,7 +213,13 @@ class Gadget { return null; } - return new GadgetResourceLoaderModule( $pages, $this->dependencies, $this->targets, $this->position ); + return new GadgetResourceLoaderModule( + $pages, + $this->dependencies, + $this->targets, + $this->position, + $this->messages + ); } /** @@ -256,6 +241,13 @@ class Gadget { return $this->dependencies; } + /** + * @return array + */ + public function getMessages() { + return $this->messages; + } + /** * Returns array of permissions required by this gadget * @return Array @@ -279,190 +271,5 @@ class Gadget { public function getPosition() { return $this->position; } - - /** - * Loads and returns a list of all gadgets - * @return Mixed: Array of gadgets or false - */ - public static function loadList() { - static $gadgets = null; - - if ( $gadgets !== null ) { - return $gadgets; - } - - $struct = self::loadStructuredList(); - - if ( !$struct ) { - $gadgets = $struct; - return $gadgets; - } - - $gadgets = array(); - foreach ( $struct as $entries ) { - $gadgets = array_merge( $gadgets, $entries ); - } - - return $gadgets; - } - - /** - * Checks whether gadget list from cache can be used. - * @param $gadgets array - * @return Boolean - */ - private static function isValidList( $gadgets ) { - if ( !is_array( $gadgets ) ) { - return false; - } - // Check if we have an array of gadgets - // One check is enough - /** - * @var $g Gadget - */ - foreach ( $gadgets as $list ) { - foreach ( $list as $g ) { - return $g instanceof Gadget; - } - } - - return true; // empty array - } - - /** - * Loads list of gadgets and returns it as associative array of sections with gadgets - * e.g. array( 'sectionnname1' => array( $gadget1, $gadget2 ), - * 'sectionnname2' => array( $gadget3 ) ); - * @param $forceNewText String: New text of MediaWiki:gadgets-definition. If specified, will - * force a purge of cache and recreation of the gadget list. - * @return Mixed: Array or false - */ - public static function loadStructuredList( $forceNewText = null ) { - global $wgMemc, $wgGadgetsCaching; - - static $gadgets = null; - if ( $gadgets !== null && $forceNewText === null ) { - return $gadgets; - } - - $key = wfMemcKey( 'gadgets-definition', self::GADGET_CLASS_VERSION ); - - if ( $forceNewText === null ) { - if ( $wgGadgetsCaching ) { - // cached? - $gadgets = $wgMemc->get( $key ); - if ( self::isValidList( $gadgets ) ) { - return $gadgets; - } - } - - $g = wfMessage( "gadgets-definition" )->inContentLanguage(); - if ( !$g->exists() ) { - $gadgets = false; - return $gadgets; - } - $g = $g->plain(); - } else { - $g = $forceNewText; - } - - $gadgets = self::listFromDefinition( $g ); - - if ( !count( $gadgets ) ) { - // Don't cache in case we couldn't find any gadgets. Bug 37228 - $gadgets = false; - return $gadgets; - } - - if ( !$wgGadgetsCaching ) { - return $gadgets; - } - - // cache for a while. gets purged automatically when MediaWiki:Gadgets-definition is edited - $wgMemc->set( $key, $gadgets, 60 * 60 * 24 ); - $source = $forceNewText !== null ? 'input text' : 'MediaWiki:Gadgets-definition'; - wfDebug( __METHOD__ . ": $source parsed, cache entry $key updated\n" ); - - return $gadgets; - } - - /** - * Generates a structured list of Gadget objects from a definition - * - * @param $definition - * @return array Array( category => Array( name => Gadget ) ) - */ - private static function listFromDefinition( $definition ) { - $definition = preg_replace( '//s', '', $definition ); - $lines = preg_split( '/(\r\n|\r|\n)+/', $definition ); - - $gadgets = array(); - $section = ''; - - foreach ( $lines as $line ) { - $m = array(); - if ( preg_match( '/^==+ *([^*:\s|]+?)\s*==+\s*$/', $line, $m ) ) { - $section = $m[1]; - } else { - $gadget = self::newFromDefinition( $line ); - if ( $gadget ) { - $gadgets[$section][$gadget->getName()] = $gadget; - $gadget->category = $section; - } - } - } - return $gadgets; - } } -/** - * Class representing a list of resources for one gadget - */ -class GadgetResourceLoaderModule extends ResourceLoaderWikiModule { - private $pages, $dependencies; - - /** - * Creates an instance of this class - * - * @param $pages Array: Associative array of pages in ResourceLoaderWikiModule-compatible - * format, for example: - * array( - * 'MediaWiki:Gadget-foo.js' => array( 'type' => 'script' ), - * 'MediaWiki:Gadget-foo.css' => array( 'type' => 'style' ), - * ) - * @param $dependencies Array: Names of resources this module depends on - * @param $targets Array: List of targets this module support - * @param $position String: 'bottom' or 'top' - */ - public function __construct( $pages, $dependencies, $targets, $position ) { - $this->pages = $pages; - $this->dependencies = $dependencies; - $this->targets = $targets; - $this->position = $position; - } - - /** - * Overrides the abstract function from ResourceLoaderWikiModule class - * @param $context ResourceLoaderContext - * @return Array: $pages passed to __construct() - */ - protected function getPages( ResourceLoaderContext $context ) { - return $this->pages; - } - - /** - * Overrides ResourceLoaderModule::getDependencies() - * @return Array: Names of resources this module depends on - */ - public function getDependencies() { - return $this->dependencies; - } - - /** - * Overrides ResourceLoaderModule::getPosition() - * @return String: 'bottom' or 'top' - */ - public function getPosition() { - return $this->position; - } -} diff --git a/extensions/Gadgets/Gruntfile.js b/extensions/Gadgets/Gruntfile.js new file mode 100644 index 00000000..5a87e7b6 --- /dev/null +++ b/extensions/Gadgets/Gruntfile.js @@ -0,0 +1,19 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/Gadgets/SpecialGadgets.php b/extensions/Gadgets/SpecialGadgets.php index 3cbce480..a53160f6 100644 --- a/extensions/Gadgets/SpecialGadgets.php +++ b/extensions/Gadgets/SpecialGadgets.php @@ -10,10 +10,7 @@ */ class SpecialGadgets extends SpecialPage { - /** - * Constructor - */ - function __construct() { + public function __construct() { parent::__construct( 'Gadgets', '', true ); } @@ -21,7 +18,7 @@ class SpecialGadgets extends SpecialPage { * Main execution function * @param $par array Parameters passed to the page */ - function execute( $par ) { + public function execute( $par ) { $parts = explode( '/', $par ); if ( count( $parts ) == 2 && $parts[0] == 'export' ) { @@ -42,7 +39,7 @@ class SpecialGadgets extends SpecialPage { $output->setPagetitle( $this->msg( 'gadgets-title' ) ); $output->addWikiMsg( 'gadgets-pagetext' ); - $gadgets = Gadget::loadStructuredList(); + $gadgets = GadgetRepo::singleton()->getStructuredList(); if ( !$gadgets ) { return; } @@ -125,6 +122,13 @@ class SpecialGadgets extends SpecialPage { $lnk[] = Linker::link( $t, htmlspecialchars( $t->getText() ) ); } $output->addHTML( $lang->commaList( $lnk ) ); + if ( $gadget->getLegacyScripts() ) { + $output->addHTML( '
    ' . Html::rawElement( + 'span', + array( 'class' => 'mw-gadget-legacy errorbox' ), + $this->msg( 'gadgets-legacy' )->parse() + ) ); + } $rights = array(); foreach ( $gadget->getRequiredRights() as $right ) { @@ -174,16 +178,13 @@ class SpecialGadgets extends SpecialPage { global $wgScript; $output = $this->getOutput(); - $gadgets = Gadget::loadList(); - if ( !isset( $gadgets[$gadget] ) ) { + try { + $g = GadgetRepo::singleton()->getGadget( $gadget ); + } catch ( InvalidArgumentException $e ) { $output->showErrorPage( 'error', 'gadgets-not-found', array( $gadget ) ); return; } - /** - * @var $g Gadget - */ - $g = $gadgets[$gadget]; $this->setHeaders(); $output->setPagetitle( $this->msg( 'gadgets-export-title' ) ); $output->addWikiMsg( 'gadgets-export-text', $gadget, $g->getDefinition() ); diff --git a/extensions/Gadgets/api/ApiQueryGadgetCategories.php b/extensions/Gadgets/api/ApiQueryGadgetCategories.php index 23257f12..82c7bff8 100644 --- a/extensions/Gadgets/api/ApiQueryGadgetCategories.php +++ b/extensions/Gadgets/api/ApiQueryGadgetCategories.php @@ -20,11 +20,18 @@ */ class ApiQueryGadgetCategories extends ApiQueryBase { - private $props, - $neededNames; + /** + * @var array + */ + private $props; + + /** + * @var array|bool + */ + private $neededNames; - public function __construct( $query, $moduleName ) { - parent::__construct( $query, $moduleName, 'gc' ); + public function __construct( ApiQuery $queryModule, $moduleName ) { + parent::__construct( $queryModule, $moduleName, 'gc' ); } public function execute() { @@ -42,7 +49,7 @@ class ApiQueryGadgetCategories extends ApiQueryBase { private function getList() { $data = array(); $result = $this->getResult(); - $gadgets = Gadget::loadStructuredList(); + $gadgets = GadgetRepo::singleton()->getStructuredList(); if ( $gadgets ) { foreach ( $gadgets as $category => $list ) { @@ -88,43 +95,6 @@ class ApiQueryGadgetCategories extends ApiQueryBase { ); } - /** - * @deprecated since MediaWiki core 1.25 - */ - public function getDescription() { - return 'Returns a list of gadget categories'; - } - - /** - * @deprecated since MediaWiki core 1.25 - */ - public function getParamDescription() { - return array( - 'prop' => array( - 'What gadget category information to get:', - ' name - Internal category name', - ' title - Category title', - ' members - Number of gadgets in category', - ), - 'names' => 'Name(s) of categories to retrieve', - ); - } - - /** - * @deprecated since MediaWiki core 1.25 - */ - public function getExamples() { - $params = $this->getAllowedParams(); - $allProps = implode( '|', $params['prop'][ApiBase::PARAM_TYPE] ); - - return array( - 'Get a list of existing gadget categories:', - ' api.php?action=query&list=gadgetcategories', - 'Get all information about categories named "foo" and "bar":', - " api.php?action=query&list=gadgetcategories&gcnames=foo|bar&gcprop=$allProps", - ); - } - /** * @see ApiBase::getExamplesMessages() */ diff --git a/extensions/Gadgets/api/ApiQueryGadgets.php b/extensions/Gadgets/api/ApiQueryGadgets.php index 46535964..383faf09 100644 --- a/extensions/Gadgets/api/ApiQueryGadgets.php +++ b/extensions/Gadgets/api/ApiQueryGadgets.php @@ -20,14 +20,33 @@ */ class ApiQueryGadgets extends ApiQueryBase { - private $props, - $categories, - $neededIds, - $listAllowed, - $listEnabled; - - public function __construct( $query, $moduleName ) { - parent::__construct( $query, $moduleName, 'ga' ); + /** + * @var array + */ + private $props; + + /** + * @var array|bool + */ + private $categories; + + /** + * @var array|bool + */ + private $neededIds; + + /** + * @var bool + */ + private $listAllowed; + + /** + * @var bool + */ + private $listEnabled; + + public function __construct( ApiQuery $queryModule, $moduleName ) { + parent::__construct( $queryModule, $moduleName, 'ga' ); } public function execute() { @@ -52,7 +71,7 @@ class ApiQueryGadgets extends ApiQueryBase { * @return array */ private function getList() { - $gadgets = Gadget::loadStructuredList(); + $gadgets = GadgetRepo::singleton()->getStructuredList(); if ( $gadgets === false ) { return array(); @@ -128,15 +147,16 @@ class ApiQueryGadgets extends ApiQueryBase { 'rights' => $g->getRequiredRights(), 'skins' => $g->getRequiredSkins(), 'default' => $g->isOnByDefault(), - 'hidden' => false, // Only exists in RL2 branch - 'shared' => false, // Only exists in RL2 branch + 'hidden' => $g->isHidden(), + 'shared' => false, 'category' => $g->getCategory(), + 'legacyscripts' => (bool)$g->getLegacyScripts(), ), 'module' => array( 'scripts' => $g->getScripts(), 'styles' => $g->getStyles(), 'dependencies' => $g->getDependencies(), - 'messages' => array(), // Only exists in RL2 branch + 'messages' => $g->getMessages(), ) ); } @@ -186,51 +206,6 @@ class ApiQueryGadgets extends ApiQueryBase { ); } - /** - * @deprecated since MediaWiki core 1.25 - */ - public function getDescription() { - return 'Returns a list of gadgets used on this wiki'; - } - - /** - * @deprecated since MediaWiki core 1.25 - */ - public function getParamDescription() { - return array( - 'prop' => array( - 'What gadget information to get:', - ' id - Internal gadget ID', - ' metadata - The gadget metadata', - ' desc - Gadget description transformed into HTML (can be slow, use only if really needed)', - ), - 'categories' => 'Gadgets from what categories to retrieve', - 'ids' => 'ID(s) of gadgets to retrieve', - 'allowedonly' => 'List only gadgets allowed to current user', - 'enabledonly' => 'List only gadgets enabled by current user', - ); - } - - /** - * @deprecated since MediaWiki core 1.25 - */ - public function getExamples() { - $params = $this->getAllowedParams(); - $allProps = implode( '|', $params['prop'][ApiBase::PARAM_TYPE] ); - return array( - 'Get a list of gadgets along with their descriptions:', - ' api.php?action=query&list=gadgets&gaprop=id|desc', - 'Get a list of gadgets with all possible properties:', - " api.php?action=query&list=gadgets&gaprop=$allProps", - 'Get a list of gadgets belonging to category "foo":', - ' api.php?action=query&list=gadgets&gacategories=foo', - 'Get information about gadgets "foo" and "bar":', - ' api.php?action=query&list=gadgets&gaids=foo|bar&gaprop=id|desc|metadata', - 'Get a list of gadgets enabled by current user:', - ' api.php?action=query&list=gadgets&gaenabledonly', - ); - } - /** * @see ApiBase::getExamplesMessages() */ diff --git a/extensions/Gadgets/composer.json b/extensions/Gadgets/composer.json new file mode 100644 index 00000000..fbffbafc --- /dev/null +++ b/extensions/Gadgets/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/Gadgets/extension.json b/extensions/Gadgets/extension.json index f8377ec2..423861d0 100644 --- a/extensions/Gadgets/extension.json +++ b/extensions/Gadgets/extension.json @@ -8,6 +8,35 @@ "descriptionmsg": "gadgets-desc", "license-name": "GPL-2.0+", "type": "other", + "namespaces": [ + { + "id": 2300, + "constant": "NS_GADGET", + "name": "Gadget", + "protection": "gadgets-edit" + }, + { + "id": 2301, + "constant": "NS_GADGET_TALK", + "name": "Gadget_talk" + }, + { + "id": 2302, + "constant": "NS_GADGET_DEFINITION", + "name": "Gadget_definition", + "protection": "gadgets-definition-edit", + "capitallinkoverride": false + }, + { + "id": 2303, + "constant": "NS_GADGET_DEFINITION_TALK", + "name": "Gadget_definition_talk" + } + ], + "AvailableRights": [ + "gadgets-edit", + "gadgets-definition-edit" + ], "SpecialPages": { "Gadgets": "SpecialGadgets" }, @@ -21,15 +50,18 @@ ] }, "ExtensionMessagesFiles": { - "GadgetsAlias": "Gadgets.alias.php" + "GadgetsAlias": "Gadgets.alias.php", + "GadgetsNamespaces": "Gadgets.namespaces.php" }, "AutoloadClasses": { "ApiQueryGadgetCategories": "api/ApiQueryGadgetCategories.php", "ApiQueryGadgets": "api/ApiQueryGadgets.php", "Gadget": "Gadgets_body.php", "GadgetHooks": "GadgetHooks.php", - "GadgetResourceLoaderModule": "Gadgets_body.php", - "SpecialGadgets": "SpecialGadgets.php" + "GadgetResourceLoaderModule": "includes/GadgetResourceLoaderModule.php", + "SpecialGadgets": "SpecialGadgets.php", + "GadgetRepo": "includes/GadgetRepo.php", + "MediaWikiGadgetsDefinitionRepo": "includes/MediaWikiGadgetsDefinitionRepo.php" }, "Hooks": { "ArticleSaveComplete": [ @@ -51,7 +83,5 @@ "GadgetHooks::onUnitTestsList" ] }, - "config": { - "GadgetsCaching": true - } + "manifest_version": 1 } diff --git a/extensions/Gadgets/i18n/ast.json b/extensions/Gadgets/i18n/ast.json index 41543110..c289b01a 100644 --- a/extensions/Gadgets/i18n/ast.json +++ b/extensions/Gadgets/i18n/ast.json @@ -15,9 +15,30 @@ "gadgets-required-rights": "Requier {{PLURAL:$2|el siguiente permisu|los siguientes permisos}}:\n\n$1", "gadgets-required-skins": "Disponible {{PLURAL:$2|nel aspeutu $1|nos siguientes aspeutos: $1}}.", "gadgets-default": "Activáu para toos de mou predetermináu.", + "gadgets-legacy": "El gadget nun ta cargáu. Migra a ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Saber más])", "gadgets-export": "Esportar", "gadgets-export-title": "Esportación d'accesorios", "gadgets-not-found": "Nun s'alcontró l'accesoriu \"$1\".", "gadgets-export-text": "Pa esportar l'accesoriu $1, calca nel botón \"{{int:gadgets-export-download}}\", guarda'l ficheru descargáu,\nvete a Special:Import na wiki de destín y xúbilu. Darréu amiesta lo siguiente na páxina MediaWiki:Gadgets-definition:\n
    $2
    \nHas de tener los permisos afayadizos na wiki de destín (incluyendo permisu pa editar los mensaxes del sistema) y tien de tar activada la importación dende los ficheros xubíos.", - "gadgets-export-download": "Descargar" + "gadgets-export-download": "Descargar", + "apihelp-query+gadgetcategories-description": "Devuelve una llista de categoríes de gadgets.", + "apihelp-query+gadgetcategories-param-prop": "Qué información de categoría de gadget obtener:\n;name:Nome internu de la categoría.\n;title:Títulu de la categoría.\n;members:Númberu de gadgets na categoría.", + "apihelp-query+gadgetcategories-param-names": "Nomes de les categoríes a recuperar.", + "apihelp-query+gadgetcategories-example-1": "Obtener la llista de categoríes de gadgets esistentes", + "apihelp-query+gadgetcategories-example-2": "Obtener tola información sobro les categoríes llamaes «foo» y «bar»", + "apihelp-query+gadgets-description": "Devuelve la llista de gadgets que s'usen nesta wiki.", + "apihelp-query+gadgets-param-prop": "Qué información de gadget obtener:\n;id:Identificador internu del gadget.\n;metadata:Metadatos del gadget.\n;desc:Descripción del gadget tresformada en HTML (pue ser lento, usar sólo si realmente ye necesario).", + "apihelp-query+gadgets-param-categories": "De que categoríes recuperar los gadgets.", + "apihelp-query+gadgets-param-ids": "Identificadores de los gadgets a recuperar.", + "apihelp-query+gadgets-param-allowedonly": "Ver la llista sólo de los gadgets que se permiten al usuariu actual.", + "apihelp-query+gadgets-param-enabledonly": "Ver la llista sólo de los gadgets activaos pol usuariu actual.", + "apihelp-query+gadgets-example-1": "Amosar la llista de gadgets xunto coles sos descripciones", + "apihelp-query+gadgets-example-2": "Amosar la llista de gadgets con toles propiedaes posibles", + "apihelp-query+gadgets-example-3": "Amosar la llista de gadgets que pertenezan a la categoría «foo»", + "apihelp-query+gadgets-example-4": "Amosar información sobro los gadgets «foo» y «bar»", + "apihelp-query+gadgets-example-5": "Ver la llista de los gadgets activaos pol usuariu actual.", + "right-gadgets-edit": "Editar gadget en JavaScript y páxines CSS", + "action-gadgets-edit": "editar esti gadget en JavaScript o páxina CSS", + "right-gadgets-definition-edit": "Editar definiciones de gadget", + "action-gadgets-definition-edit": "editar esta definición de gadget" } diff --git a/extensions/Gadgets/i18n/be-tarask.json b/extensions/Gadgets/i18n/be-tarask.json index 91eff0c1..7baba701 100644 --- a/extensions/Gadgets/i18n/be-tarask.json +++ b/extensions/Gadgets/i18n/be-tarask.json @@ -23,5 +23,7 @@ "gadgets-export-title": "ЭкÑпарт гаджÑта", "gadgets-not-found": "ГаджÑÑ‚ «$1» Ð½Ñ Ð·Ð½Ð¾Ð¹Ð´Ð·ÐµÐ½Ñ‹.", "gadgets-export-text": "Каб ÑкÑпартаваць гаджÑÑ‚ $1, націÑьніце кнопку «{{int:gadgets-export-download}}», захавайце загружаны файл, зайдзіце на Special:Import у мÑтавай вікі Ñ– загрузіце файл туды. Затым дадайце наÑтупны зьмеÑÑ‚ на Ñтаронку MediaWiki:Gadgets-definition:\n
    $2
    \nÐ’Ñ‹ павінны мець Ð°Ð´Ð¿Ð°Ð²ÐµÐ´Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ð²Ñ‹ Ñž мÑтавай вікі (у тым ліку Ñ– правы на Ñ€Ñдагаваньне ÑÑ‹ÑÑ‚Ñмных паведамленьнÑÑž), а Ñž вікі муÑіць быць ÑƒÐºÐ»ÑŽÑ‡Ð°Ð½Ð°Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñьць імпарту з файлаў.", - "gadgets-export-download": "Загрузіць" + "gadgets-export-download": "Загрузіць", + "right-gadgets-edit": "Ñ€Ñдагаваньне JavaScript Ñ– CSS-Ñтаронак гаджÑту", + "right-gadgets-definition-edit": "Ñ€Ñдагаваньне вызначÑньнÑÑž гаджÑтаў" } diff --git a/extensions/Gadgets/i18n/bho.json b/extensions/Gadgets/i18n/bho.json new file mode 100644 index 00000000..e390ca5d --- /dev/null +++ b/extensions/Gadgets/i18n/bho.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "SatyamMishra" + ] + }, + "gadgets-title": "औजार (गैजेटà¥à¤¸)" +} diff --git a/extensions/Gadgets/i18n/bn.json b/extensions/Gadgets/i18n/bn.json index 74f92b76..08a2cd79 100644 --- a/extensions/Gadgets/i18n/bn.json +++ b/extensions/Gadgets/i18n/bn.json @@ -4,7 +4,8 @@ "Bellayet", "Nasir8891", "Wikitanvir", - "Zaheen" + "Zaheen", + "Aftabuzzaman" ] }, "gadgets-desc": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦¦à§‡à¦° তাদের [[Special:Preferences#mw-prefsection-gadgets|পছনà§à¦¦à§‡]] সà§à¦¬à¦¨à¦¿à¦°à§à¦¬à¦¾à¦šà¦¿à¦¤ [[Special:Gadgets|সিà¦à¦¸à¦à¦¸ à¦à¦¬à¦‚ জাভাসà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ গà§à¦¯à¦¾à¦œà§‡à¦Ÿ]] নিরà§à¦¬à¦¾à¦šà¦¨à§‡à¦° সà§à¦¯à§‹à¦— দাও", @@ -20,5 +21,9 @@ "gadgets-export": "রপà§à¦¤à¦¾à¦¨à¦¿", "gadgets-export-title": "গà§à¦¯à¦¾à¦œà§‡à¦Ÿ রফতানী", "gadgets-not-found": "গà§à¦¯à¦¾à¦œà§‡à¦Ÿ \"$1\" খà§à¦œà§‡ পাওয়া যায়নি।", - "gadgets-export-download": "ডাউনলোড" + "gadgets-export-download": "ডাউনলোড", + "right-gadgets-edit": "গà§à¦¯à¦¾à¦œà§‡à¦Ÿ জাভাসà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ à¦à¦¬à¦‚ সিà¦à¦¸à¦à¦¸ পাতায় সমà§à¦ªà¦¾à¦¦à¦¨à¦¾", + "action-gadgets-edit": "à¦à¦‡ গà§à¦¯à¦¾à¦œà§‡à¦Ÿ জাভাসà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ বা সিà¦à¦¸à¦à¦¸ পাতা সমà§à¦ªà¦¾à¦¦à¦¨à¦¾", + "right-gadgets-definition-edit": "গà§à¦¯à¦¾à¦œà§‡à¦Ÿ সংজà§à¦žà¦¾ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾", + "action-gadgets-definition-edit": "à¦à¦‡ গà§à¦¯à¦¾à¦œà§‡à¦Ÿ সংজà§à¦žà¦¾ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾" } diff --git a/extensions/Gadgets/i18n/bs.json b/extensions/Gadgets/i18n/bs.json index 65a7455c..9b06f31c 100644 --- a/extensions/Gadgets/i18n/bs.json +++ b/extensions/Gadgets/i18n/bs.json @@ -1,12 +1,13 @@ { "@metadata": { "authors": [ - "CERminator" + "CERminator", + "Srdjan m" ] }, "gadgets-desc": "Omogućava korisnicima da odaberu vlastite [[Special:Gadgets|CSS i JavaScript dodatke]] (gadgets) u svojim [[Special:Preferences#mw-prefsection-gadgets|postavkama]]", "prefs-gadgets": "Dodaci", - "gadgets-prefstext": "Ovo je spisak specijalih gadgets (''dodataka'') koje možete omogućiti za VaÅ¡ korisniÄki raÄun. Ovi dodaci su najÄešće bazirani na JavaScript, tako da se postavke JavaScript moraju omogućiti u VaÅ¡em web pregledniku da bi mogli raditi.\nZapamtite da ovi gadgets ne uzrokuju nikakve efekte na ovoj stranici za postavke.\n\nTakoÄ‘er morate obratiti pažnju da ovi specijalni dodaci nisu dio MediaWiki software-a, a obiÄno ih prave i razvijaju korisnici na lokalnim wikijima.\nAdministratori mogu mijenjati dostupne gadgetse koristeći [[MediaWiki:Gadgets-definition|definicije]] i [[Special:Gadgets|opise]].", + "gadgets-prefstext": "Ovo je spisak posebnih dodataka koje možete ukljuÄiti za svoj korisniÄki raÄun.\nOvi dodaci se najÄešće zasnivaju na JavaScriptu, tako da ga morate ukljuÄiti u svom web pregledniku da bi mogli raditi.\nZapamtite da ovi dodaci nemaju utjecaj na ovu stranicu s postavkama.\n\nZapamtite da ovi posebni dodaci nisu dio MediaWiki softvera, te ih obiÄno prave i razvijaju korisnici na lokalnim wikijima.\nAdministratori mogu mijenjati dostupne dodatke koristeći [[MediaWiki:Gadgets-definition|definicije]] i [[Special:Gadgets|opise]].", "gadgets": "Dodaci (gadgets)", "gadgets-title": "Dodaci", "gadgets-pagetext": "Ispod je spisak posebnih dodataka koje korisnici mogu omogućiti na svojim [[Special:Preferences#mw-prefsection-gadgets|postavkama]], kako je to definisano u [[MediaWiki:Gadgets-definition|definicijama dodataka]].\nOvaj pregled daje jednostavan pristup sistemu stranica poruka koje definiÅ¡u svaki dodatak i njihov opis i kod.", diff --git a/extensions/Gadgets/i18n/ca.json b/extensions/Gadgets/i18n/ca.json index f96a6c9d..30ebaff4 100644 --- a/extensions/Gadgets/i18n/ca.json +++ b/extensions/Gadgets/i18n/ca.json @@ -7,7 +7,8 @@ "SMP", "Toniher", "Vriullop", - "Alvaro Vidal-Abarca" + "Alvaro Vidal-Abarca", + "Eduardo Martinez" ] }, "gadgets-desc": "Permet als usuaris personalitzar [[Special:Gadgets|ginys CSS i JavaScript]] a les seves [[Special:Preferences#mw-prefsection-gadgets|preferències]]", @@ -25,5 +26,6 @@ "gadgets-not-found": "No s'ha trobat el giny «$1».", "gadgets-export-text": "Per a exportar el giny $1, feu clic al botó «{{int:gadgets-export-download}}», deseu el fitxer baixat,\naneu a Special:Import al wiki de destinació i pugeu-lo. Llavors afegiu el següent a la pàgina MediaWiki:Gadgets-definition:\n
    $2
    \nHeu de tenir els permisos adequats en el wiki de destinació (incloent-hi els permisos per editar missatges del sistema) i s'ha d'habilitar la importació de la pujada de fitxers.", "gadgets-export-download": "Baixa", - "apihelp-query+gadgets-example-2": "Obtenir una llista dels ginys amb totes les propietats possibles" + "apihelp-query+gadgets-example-2": "Obtenir una llista dels ginys amb totes les propietats possibles", + "right-gadgets-edit": "Edita el gadget JavaScript i les pàgines CSS" } diff --git a/extensions/Gadgets/i18n/ce.json b/extensions/Gadgets/i18n/ce.json index 7c1f42a6..3bae2733 100644 --- a/extensions/Gadgets/i18n/ce.json +++ b/extensions/Gadgets/i18n/ce.json @@ -7,7 +7,7 @@ }, "gadgets-desc": "Ðьтто бо декъашхошна харжам ба [[Special:Preferences#mw-prefsection-gadgets|гIÐ¸Ñ€Ñ Ð½Ð¸Ñбарца]] CSS- а JavaScript-Ñ…Iоттончаш, лато лууш йерш", "prefs-gadgets": "Гаджеташ", - "gadgets-prefstext": "Лаххьа балийна леррина гаджеташ могӀам, шуьга шайга латалур йолуш хьай долахь долучу дакъан.\nХӀара гаджеташ дуккхачу хьолехь болх беш ÑŽ оцу JavaScript тӀехь, цундела аша латоеза JavaScript шай браузер чохь, цаьрга болх байта.\nДиц маделаш, хӀара гаджеташ болх бÑш Ñц хӀо Ð³Ó€Ð¸Ñ€Ñ Ð½Ð¸Ñбо агӀон чохь.\n\nИшта диц маде, хӀара гаджеташ юкъа йогуш Ñц кху MediaWiki гӀирÑашна, мадарра аьльча шу Ñанна декъашхоша шаьш йеш ÑŽ.\nКуьйгалхошка шайг хийцало и гаджетийн могӀам, хӀокх могӀам гӀонца [[MediaWiki:Gadgets-definition|къаÑтам бало]] а [[Special:Gadgets|церах лаьцна]].", + "gadgets-prefstext": "Лаххьа балийна леррина гаджеташ могӀам, шуьга шайга латалур йолуш хьай долахь долучу дакъан.\nХӀара гаджеташ дуккхачу хьолехь болх беш ÑŽ оцу JavaScript тӀехь, цундела аша латоеза JavaScript шай браузер чохь, цаьрга болх байта.\nДиц маделаш, хӀара гаджеташ болх бÑш Ñц хӀо Ð³Ó€Ð¸Ñ€Ñ Ð½Ð¸Ñбо агӀон чохь.\n\nИшта диц маде, хӀара гаджеташ юкъа йогуш Ñц кху MediaWiki гӀирÑашна, мадарра аьльча шу Ñанна декъашхоша шаьш йеш ÑŽ.\nКуьйгалхошка шайг хийцало и гаджетийн могӀам, хӀокху могӀам гӀоьнца [[MediaWiki:Gadgets-definition|къаÑтам бало]] а [[Special:Gadgets|церах лаьцна]].", "gadgets": "Гаджеташ", "gadgets-title": "Гаджеташ", "gadgets-pagetext": "ГӀирÑа хааман могlамаш, къаÑтош йолу гаджетийн цӀераш, хуьлаш йолу хӀокху [[MediaWiki:Gadgets-definition|къаÑтамца]].\nХӀокху могIамо атто бо гIирÑан хаамаш атта тӀе кхочуш барца, цуьнах лаьцна хӀоттош а йолуш йолучу гаджетийн кодаца.", diff --git a/extensions/Gadgets/i18n/cs.json b/extensions/Gadgets/i18n/cs.json index 2d2d1a89..3f982adb 100644 --- a/extensions/Gadgets/i18n/cs.json +++ b/extensions/Gadgets/i18n/cs.json @@ -16,9 +16,14 @@ "gadgets-required-rights": "Vyžaduje následující {{PLURAL:$2|oprávnÄ›ní}}:\n\n$1", "gadgets-required-skins": "Dostupné {{PLURAL:$2|pro vzhled $1|pro následující vzhledy: $1}}.", "gadgets-default": "ImplicitnÄ› zapnuto vÅ¡em.", + "gadgets-legacy": "UdÄ›látko se nenaÄítá. PÅ™eveÄte ho prosím na ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Více informací])", "gadgets-export": "Exportovat", "gadgets-export-title": "Export udÄ›látka", "gadgets-not-found": "UdÄ›látko „$1“ nebylo nalezeno.", "gadgets-export-text": "Chcete-li exportovat udÄ›látko $1, kliknÄ›te na tlaÄítko „{{int:gadgets-export-download}}“, uložte stažený soubor, na cílové wiki pÅ™ejdÄ›te na stránku Special:Import a soubor naÄtÄ›te. Poté na tamní stránku MediaWiki:Gadgets-definition pÅ™idejte následující:\n
    $2
    \nNa cílové wiki musíte mít přísluÅ¡ná oprávnÄ›ní (vÄetnÄ› práva editovat systémová hlášení) a musí tam být povolen import naÄtením souboru.", - "gadgets-export-download": "Stáhnout" + "gadgets-export-download": "Stáhnout", + "right-gadgets-edit": "Editace stránek s JavaScriptem a CSS udÄ›látek", + "action-gadgets-edit": "editovat stránku s JavaScriptem nebo CSS tohoto udÄ›látka", + "right-gadgets-definition-edit": "Editace definic udÄ›látek", + "action-gadgets-definition-edit": "editovat definici tohoto udÄ›látka" } diff --git a/extensions/Gadgets/i18n/cv.json b/extensions/Gadgets/i18n/cv.json new file mode 100644 index 00000000..d82c4b36 --- /dev/null +++ b/extensions/Gadgets/i18n/cv.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Chuvash2014" + ] + }, + "gadgets": "ГаджетÑем" +} diff --git a/extensions/Gadgets/i18n/de.json b/extensions/Gadgets/i18n/de.json index 290caabc..36aa55b4 100644 --- a/extensions/Gadgets/i18n/de.json +++ b/extensions/Gadgets/i18n/de.json @@ -8,7 +8,8 @@ "Raimond Spekking", "The Evil IP address", "Umherirrender", - "✓" + "✓", + "Tiin" ] }, "gadgets-desc": "Ermöglicht es Benutzern, in ihren [[Special:Preferences#mw-prefsection-gadgets|persönlichen Einstellungen]] vordefinierte [[Special:Gadgets|CSS- und JavaScript-Helferlein]] zu aktivieren", @@ -21,15 +22,19 @@ "gadgets-required-rights": "Erfordert die {{PLURAL:$2|folgende Berechtigung|folgenden Berechtigungen}}:\n\n$1", "gadgets-required-skins": "Verfügbar bei {{PLURAL:$2|der folgenden Benutzeroberfläche|den folgenden Benutzeroberflächen}}: $1.", "gadgets-default": "Für alle standardmäßig aktiviert.", - "gadgets-export": "Export", + "gadgets-legacy": "Das Helferlein ist nicht geladen. Bitte stelle auf den ResourceLoader um. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Weitere Informationen])", + "gadgets-export": "Exportieren", "gadgets-export-title": "Export der Helferlein", "gadgets-not-found": "Helferlein „$1“ wurde nicht gefunden.", "gadgets-export-text": "Um das Helferlein $1 zu exportieren, klicke auf die Schaltfläche „{{int:gadgets-export-download}}“ und speichere die heruntergeladene Datei. Gehe sodann zur Spezialseite Spezial:Import auf dem für den Import vorgesehenen Wiki und lade die Datei hoch. Füge danach den folgenden Text zur Seite MediaWiki:Gadgets-definition hinzu:\n
    $2
    \nDu musst über die notwendigen Berechtigungen auf dem für den Import vorgesehenen Wiki verfügen (einschließlich der Berechtigung, MediaWiki-Systemnachrichten zu bearbeiten). Zudem muss der Import von Datei-Uploads aktiviert sein.", "gadgets-export-download": "Herunterladen", - "apihelp-query+gadgetcategories-description": "Gibt eine Liste mit Gadget-Kategorien zurück.", + "apihelp-query+gadgetcategories-description": "Gibt eine Liste mit Helferleinkategorien zurück.", + "apihelp-query+gadgetcategories-param-prop": "Welche Information der Helferleinkategorie abgerufen werden soll:\n;name:Interner Name der Kategorie.\n;title:Titel der Kategorie.\n;members:Anzahl der Helferlein in der Kategorie.", "apihelp-query+gadgetcategories-param-names": "Namen der abzurufenden Kategorien.", "apihelp-query+gadgetcategories-example-1": "Ruft eine Liste vorhandener Helferleinkategorien ab", + "apihelp-query+gadgetcategories-example-2": "Ruft alle Informationen über Kategorien mit den Namen „foo“ und „bar“ ab", "apihelp-query+gadgets-description": "Gibt eine Liste der Helferlein zurück, die auf diesem Wiki verwendet werden.", + "apihelp-query+gadgets-param-prop": "Welche Information des Helferleins abgerufen werden soll:\n;id:Interne Kennung des Helferleins.\n;metadata:Die Metadaten des Helferleins.\n;desc:Die in HTML umgewandelte Beschreibung des Helferleins (kann langsam sein, nur verwenden, wenn wirklich benötigt).", "apihelp-query+gadgets-param-categories": "Von welchen Kategorien die Helferlein abgerufen werden sollen.", "apihelp-query+gadgets-param-ids": "Kennungen der abzurufenden Helferlein.", "apihelp-query+gadgets-param-allowedonly": "Nur Helferlein auflisten, die für den aktuellen Benutzer erlaubt sind.", @@ -38,5 +43,9 @@ "apihelp-query+gadgets-example-2": "Ruft eine Liste der Helferlein mit allen möglichen Eigenschaften ab", "apihelp-query+gadgets-example-3": "Ruft eine Liste der Helferlein ab, die zur Kategorie „foo“ gehören", "apihelp-query+gadgets-example-4": "Informationen über die Helferlein „foo“ und „bar“ abrufen", - "apihelp-query+gadgets-example-5": "Ruft eine Liste der Helferlein ab, die vom aktuellen Benutzer aktiviert wurden" + "apihelp-query+gadgets-example-5": "Ruft eine Liste der Helferlein ab, die vom aktuellen Benutzer aktiviert wurden", + "right-gadgets-edit": "JavaScript- und CSS-Seiten von Helferlein bearbeiten", + "action-gadgets-edit": "diese JavaScript- oder CSS-Seite des Helferleins zu bearbeiten", + "right-gadgets-definition-edit": "Definitionen von Helferlein bearbeiten", + "action-gadgets-definition-edit": "diese Definition des Helferleins zu bearbeiten" } diff --git a/extensions/Gadgets/i18n/dty.json b/extensions/Gadgets/i18n/dty.json new file mode 100644 index 00000000..7cd3cb7b --- /dev/null +++ b/extensions/Gadgets/i18n/dty.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "राम पà¥à¤°à¤¸à¤¾à¤¦ जोशी" + ] + }, + "gadgets-prefstext": "विशेष उपकरणहरूको सूची तल दियाकोछ तमी आफà¥à¤¨à¥‹ खातामी सकà¥à¤°à¤¿à¤¯ पाडà¥à¤¡ सकà¥à¤¦à¥à¤¯à¤¾ हौ ।\nपà¥à¤°à¤¾à¤¯ सबै उपकरणहरू जाभासà¥à¤•à¥à¤°à¥€à¤ªà¥à¤Ÿà¤®à¥€ आधारित छनà¥, यस कारण बà¥à¤°à¤¾à¤‰à¤œà¤°à¤®à¥€ काम गराउनका निउती जाभासà¥à¤•à¥à¤°à¥€à¤ªà¥à¤Ÿà¤²à¤¾à¤ˆ सकà¥à¤°à¤¿à¤¯ गदà¥à¤¦à¥ पडनà¥à¤› ।\nयाद राखà¥à¤¯à¤¾ ती उपकरणहरूले रोजाई पानामी असर गदà¥à¤¦à¤¾à¤‡à¤¨à¤¨à¥ ।\nयो पनि याद राखà¥à¤¯à¤¾ यी विशेष उपकरणहरू मीडिया विकि सफà¥à¤Ÿà¤µà¥‡à¤¯à¤° भितà¥à¤° पडà¥à¤¡à¤¾à¤‡à¤¨à¤¨à¥ र पà¥à¤°à¤¾à¤¯ सà¥à¤¥à¤¾à¤¨à¥€à¤¯ विकि पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¹à¤°à¥‚ले यैको विकास र सञà¥à¤šà¤¾à¤²à¤¨ गदà¥à¤¦à¤¾à¤¨à¥à¥¤ \nसà¥à¤¥à¤¾à¤¨à¥€à¤¯ पà¥à¤°à¤¬à¤¨à¥à¤§à¤•à¤¹à¤°à¥‚ले उपलबà¥à¤§ उपकरणहरूका [[MediaWiki:Gadgets-definition|परिभाषाहरू]] र [[Special:Gadgets|विवरणहरू]] समà¥à¤ªà¤¾à¤¦à¤¨ गदà¥à¤¦à¤¾à¤¨à¥à¥¤", + "gadgets-pagetext": "विशेष उपकरणहरूको सूची तल दियाकोछ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¨à¤²à¥‡ [[MediaWiki:Gadgets-definition|परिभाषाहरू]]मी जनाठअनà¥à¤¸à¤¾à¤° आफà¥à¤¨à¥‹ [[Special:Preferences#mw-prefsection-gadgets|रोजाई पानामी]], सकà¥à¤°à¤¿à¤¯ पारà¥à¤¨ सकà¥à¤¦à¥à¤¯à¤¾à¤›à¤¨à¥ ।\nयै सिंहावलोकनले पà¥à¤°à¤£à¤¾à¤²à¥€ सनà¥à¤¦à¥‡à¤¶ पाना सजिलै पà¥à¤°à¤¾à¤ªà¥à¤¤ गदà¥à¤¦ सकिनà¥à¤¯à¤¾à¤› जसले पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• उपकरणको विवरण र कोडलाई परिभाषित गरà¥à¤¯à¤¾à¤•à¥‹ छ।" +} diff --git a/extensions/Gadgets/i18n/el.json b/extensions/Gadgets/i18n/el.json index b8cd38ac..3391508c 100644 --- a/extensions/Gadgets/i18n/el.json +++ b/extensions/Gadgets/i18n/el.json @@ -8,21 +8,44 @@ "Glavkos", "Lou", "ZaDiak", - "Geraki" + "Geraki", + "Protnet" ] }, - "gadgets-desc": "ΕπιτÏέπει στους χÏήστες να διαλέξουν [[Special:Gadgets|CSS και JavaScript Ï€Ïόσθετα]] στις [[Special:Preferences#mw-prefsection-gadgets|Ï€Ïοτιμήσεις]] τους", - "prefs-gadgets": "Ειδικές επιλογές", - "gadgets-prefstext": "Ακολουθεί μια λίστα με ειδικές επιλογές που μποÏείτε να ενεÏγοποιήσειτε για το λογαÏιασμό σας.\nΑυτές οι επιλογές είναι βασισμένες κυÏίως σε JavaScript, οπότε αυτή θα Ï€Ïέπει να ενεÏγοποιηθεί στον φυλλομετÏητή σας για να δουλέψουν.\nΣημειώστε ότι οι επιλογές αυτές δεν θα έχουν καμία επίδÏαση σε αυτή τη σελίδα Ï€Ïοτιμήσεων.\n\nΕπίσης σημειώστε ότι αυτές οι ειδικές επιλογές δεν είναι μέÏος του Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï MediaWiki, και συνήθως αναπτÏσσονται και συντηÏοÏνται από χÏήστες στο τοπικό σας wiki.\nΟι τοπικοί διαχειÏιστές μποÏοÏν να επεξεÏγαστοÏν τις διαθέσιμες επιλογές χÏησιμοποιώντας τις σελίδες [[MediaWiki:Gadgets-definition]] και [[Special:Gadgets]].", - "gadgets": "ΠÏόσθετα", - "gadgets-title": "ΠÏόσθετα", - "gadgets-pagetext": "ΠαÏακάτω βÏίσκεται ένας κατάλογος με τις ειδικές λειτουÏγίες τις οποίες οι χÏήστες μποÏοÏν να ενεÏγοποιήσουν στη [[Special:Preferences#mw-prefsection-gadgets|σελίδα Ï€Ïοτιμήσεών]] τους, όπως οÏίζεται από τη σελίδα [[MediaWiki:Gadgets-definition|οÏισμών]].
    \nΑυτή η επισκόπηση παÏέχει εÏκολη Ï€Ïόσβαση στις σελίδες μηνυμάτων του συστήματος που οÏίζουν την πεÏιγÏαφή και τον κώδικα κάθε λειτουÏγίας.", + "gadgets-desc": "ΕπιτÏέπει στους χÏήστες να επιλέξουν Ï€ÏοσαÏμοσμένες [[Special:Gadgets|μικÏοεφαÏμογές CSS και JavaScript]] στις [[Special:Preferences#mw-prefsection-gadgets|Ï€Ïοτιμήσεις]] τους", + "prefs-gadgets": "ΜικÏοεφαÏμογές", + "gadgets-prefstext": "Ακολουθεί μια λίστα με ειδικές μικÏοεφαÏμογές που μποÏείτε να ενεÏγοποιήσετε για το λογαÏιασμό σας.\nΑυτές οι μικÏοεφαÏμογές είναι βασισμένες κυÏίως σε JavaScript, οπότε το JavaScript θα Ï€Ïέπει να είναι ενεÏγοποιημένο στο Ï€ÏόγÏαμμα πεÏιήγησής σας για να δουλέψουν.\nÎα σημειωθεί ότι οι μικÏοεφαÏμογές αυτές δεν θα έχουν καμία επίδÏαση σε αυτήν τη σελίδα Ï€Ïοτιμήσεων.\n\nΕπίσης να σημειωθεί ότι αυτές οι ειδικές μικÏοεφαÏμογές δεν είναι μέÏος του Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï MediaWiki και συνήθως αναπτÏσσονται και συντηÏοÏνται από χÏήστες στο τοπικό σας wiki.\nΟι τοπικοί διαχειÏιστές μποÏοÏν να επεξεÏγαστοÏν τους [[MediaWiki:Gadgets-definition|οÏισμοÏÏ‚]] και τις [[Special:Gadgets|descriptions|πεÏιγÏαφές]] των διαθέσιμων μικÏοεφαÏμογών.", + "gadgets": "ΜικÏοεφαÏμογές", + "gadgets-title": "ΜικÏοεφαÏμογές", + "gadgets-pagetext": "ΠαÏακάτω βÏίσκεται ένας κατάλογος με τις ειδικές μικÏοεφαÏμογές τις οποίες οι χÏήστες μποÏοÏν να ενεÏγοποιήσουν στη [[Special:Preferences#mw-prefsection-gadgets|σελίδα Ï€Ïοτιμήσεών]] τους, όπως έχουν οÏιστεί από τους [[MediaWiki:Gadgets-definition|οÏισμοÏÏ‚]].\nΑυτή η επισκόπηση παÏέχει εÏκολη Ï€Ïόσβαση στις σελίδες των μηνυμάτων συστήματος που οÏίζουν την πεÏιγÏαφή και τον κώδικα κάθε μικÏοεφαÏμογής.", "gadgets-uses": "ΧÏήσεις", - "gadgets-required-rights": "Απαιτεί {{PLURAL:$2|το εξής δικαίωμα|τα εξής δικαιώματα}}:\n\n$1", - "gadgets-default": "ΕνεÏγοποιήθηκε για τον καθένα από Ï€Ïοεπιλογή.", + "gadgets-required-rights": "Απαιτεί {{PLURAL:$2|το ακόλουθο δικαίωμα|τα ακόλουθα δικαιώματα}}:\n\n$1", + "gadgets-required-skins": "Διαθέσιμο {{PLURAL:$2|στο θέμα εμφάνισης $1|στα ακόλουθα θέματα εμφάνισης: $1}}.", + "gadgets-default": "ΕνεÏγοποιημένο για όλους από Ï€Ïοεπιλογή.", + "gadgets-legacy": "Η μικÏοεφαÏμογή δεν φοÏτώθηκε. ΠαÏακαλοÏμε αναβαθμίσετε σε πεÏιβάλλον ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Μάθετε πεÏισσότεÏα])", "gadgets-export": "Εξαγωγή", - "gadgets-export-title": "ΜικÏοεφαÏμογή εξαγωγής", - "gadgets-not-found": "ΜικÏοεφαÏμογή \"$1\" δεν βÏέθηκε.", - "gadgets-export-text": "Για την εξαγωγή της μικÏοεφαÏμογής (gadget) $1, κάντε κλικ στο κουμπί \"{{int:gadgets-export-download}}\", αποθηκεÏστε το αÏχείο που λάβατε, πάτε στο Special:Import του wiki Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï ÎºÎ±Î¹ ανεβάστε το. Μετά Ï€Ïοσθέστε τα παÏακάτω στη σελίδα οÏÎ¹ÏƒÎ¼Î¿Ï Ï„Ï‰Î½ MediaWiki:Gadgets:\n
    $2
    \nΠÏέπει να έχετε τα κατάλληλα δικαιώματα στο wiki Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï (συμπεÏιλαμβανομένου και του δικαιώματος επεξεÏγασίας μηνυμάτων συστήματος) και να είναι ενεÏγοποιημένη η εισαγωγή αÏχείων Ï€Ïος ανέβασμα.", - "gadgets-export-download": "Λήψη" + "gadgets-export-title": "Εξαγωγή μικÏοεφαÏμογής", + "gadgets-not-found": "Η μικÏοεφαÏμογή «$1» δεν βÏέθηκε.", + "gadgets-export-text": "Για την εξαγωγή της μικÏοεφαÏμογής $1, κάντε κλικ στο κουμπί «{{int:gadgets-export-download}}», αποθηκεÏστε το κατεβασμένο αÏχείο, \nπηγαίνετε στο Special:Import του wiki Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï ÎºÎ±Î¹ ανεβάστε το. Μετά Ï€Ïοσθέστε τα παÏακάτω στη σελίδα MediaWiki:Gadgets-definition:\n
    $2
    \nΠÏέπει να έχετε τα κατάλληλα δικαιώματα στο wiki Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï (συμπεÏιλαμβανομένου και του δικαιώματος επεξεÏγασίας μηνυμάτων συστήματος) και να είναι ενεÏγοποιημένη η εισαγωγή μέσω ανεβάσματος αÏχείων.", + "gadgets-export-download": "Κατέβασμα", + "apihelp-query+gadgetcategories-description": "ΕπιστÏέφει λίστα με τις κατηγοÏίες μικÏοεφαÏμογών.", + "apihelp-query+gadgetcategories-param-prop": "Τι πληÏοφοÏίες για την κατηγοÏία της μικÏοεφαÏμογής να ληφθοÏν:\n;name:Όνομα εσωτεÏικής κατηγοÏίας.\n;title:Τίτλος κατηγοÏίας.\n;members:ΑÏιθμός μικÏοεφαÏμογών σε αυτήν την κατηγοÏία.", + "apihelp-query+gadgetcategories-param-names": "Τα ονόματα των κατηγοÏιών Ï€Ïος ανάκτηση.", + "apihelp-query+gadgetcategories-example-1": "Λήψη λίστας με τις υπάÏχουσες κατηγοÏίες μικÏοεφαÏμογών", + "apihelp-query+gadgetcategories-example-2": "Λήψη όλων των πληÏοφοÏιών σχετικά με τις κατηγοÏίες με ονόματα «τάδε» και «δείνα»", + "apihelp-query+gadgets-description": "ΕπιστÏέφει λίστα με τις μικÏοεφαÏμογές που χÏησιμοποιοÏνται σε αυτό το wiki.", + "apihelp-query+gadgets-param-prop": "Τι πληÏοφοÏίες της μικÏοεφαÏμογής να ληφθοÏν:\n;id:ΕσωτεÏικό αναγνωÏιστικό της μικÏοεφαÏμογής.\n;metadata:Τα μεταδεδομένα της μικÏοεφαÏμογής.\n;desc:ΠεÏιγÏαφή της μικÏοεφαÏμογής μετασχηματισμένη σε HTML (μποÏεί να είναι αÏγό, χÏησιμοποιήστε μόνο αν Ï€Ïαγματικά χÏειάζεται).", + "apihelp-query+gadgets-param-categories": "Ποιων κατηγοÏιών μικÏοεφαÏμογές να ανακτηθοÏν.", + "apihelp-query+gadgets-param-ids": "Τα αναγνωÏιστικά των μικÏοεφαÏμογών Ï€Ïος ανάκτηση.", + "apihelp-query+gadgets-param-allowedonly": "Îα απαÏιθμηθοÏν μόνο οι επιτÏεπτές στον Ï„Ïέχοντα χÏήστη μικÏοεφαÏμογές.", + "apihelp-query+gadgets-param-enabledonly": "Îα απαÏιθμηθοÏν μόνο οι ενεÏγοποιημένες από τον Ï„Ïέχοντα χÏήστη μικÏοεφαÏμογές.", + "apihelp-query+gadgets-example-1": "Λήψη λίστας μικÏοεφαÏμογών μαζί με τις πεÏιγÏαφές τους", + "apihelp-query+gadgets-example-2": "Λήψη λίστας μικÏοεφαÏμογών με όλες τις πιθανές ιδιότητες", + "apihelp-query+gadgets-example-3": "Λήψη λίστας μικÏοεφαÏμογών που ανήκουν στην κατηγοÏία «τάδε»", + "apihelp-query+gadgets-example-4": "Λήψη πληÏοφοÏιών σχετικά με τις μικÏοεφαÏμογές «τάδε» και «δείνα»", + "apihelp-query+gadgets-example-5": "Λήψη λίστας μικÏοεφαÏμογών ενεÏγοποιημένων από τον Ï„Ïέχοντα χÏήστη", + "right-gadgets-edit": "ΕπεξεÏγασία σελίδων JavaScript ή CSS της μικÏοεφαÏμογής", + "action-gadgets-edit": "επεξεÏγαστείτε τις σελίδες JavaScript ή CSS αυτής της μικÏοεφαÏμογής", + "right-gadgets-definition-edit": "ΕπεξεÏγασία οÏισμών μικÏοεφαÏμογών", + "action-gadgets-definition-edit": "επεξεÏγαστείτε τον οÏισμό αυτής μικÏοεφαÏμογής" } diff --git a/extensions/Gadgets/i18n/en.json b/extensions/Gadgets/i18n/en.json index 7f14d624..7b8170bc 100644 --- a/extensions/Gadgets/i18n/en.json +++ b/extensions/Gadgets/i18n/en.json @@ -15,6 +15,7 @@ "gadgets-required-rights": "Requires the following {{PLURAL:$2|right|rights}}:\n\n$1", "gadgets-required-skins": "Available on the {{PLURAL:$2|$1 skin|following skins: $1}}.", "gadgets-default": "Enabled for everyone by default.", + "gadgets-legacy": "Gadget is not loaded. Please migrate to ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Learn more])", "gadgets-export": "Export", "gadgets-export-title": "Gadget export", "gadgets-not-found": "Gadget \"$1\" not found.", @@ -35,5 +36,9 @@ "apihelp-query+gadgets-example-2": "Get a list of gadgets with all possible properties", "apihelp-query+gadgets-example-3": "Get a list of gadgets belonging to category \"foo\"", "apihelp-query+gadgets-example-4": "Get information about gadgets \"foo\" and \"bar\"", - "apihelp-query+gadgets-example-5": "Get a list of gadgets enabled by current user" + "apihelp-query+gadgets-example-5": "Get a list of gadgets enabled by current user", + "right-gadgets-edit": "Edit gadget JavaScript and CSS pages", + "action-gadgets-edit": "edit this gadget JavaScript or CSS page", + "right-gadgets-definition-edit": "Edit gadget definitions", + "action-gadgets-definition-edit": "edit this gadget definition" } diff --git a/extensions/Gadgets/i18n/es.json b/extensions/Gadgets/i18n/es.json index e18e5151..cf499d58 100644 --- a/extensions/Gadgets/i18n/es.json +++ b/extensions/Gadgets/i18n/es.json @@ -7,7 +7,9 @@ "Remember the dot", "Sanbec", "Vivaelcelta", - "Themasterriot" + "Themasterriot", + "Ryo567", + "Macofe" ] }, "gadgets-desc": "Permite a los usuarios seleccionar [[Special:Gadgets|accesorios de CSS y JavaScript personailzados]]\nen sus [[Special:Preferences#mw-prefsection-gadgets|preferencias]].", @@ -18,11 +20,15 @@ "gadgets-pagetext": "Debajo hay una lista de accesorios especiales que los usuarios pueden activar en sus [[Special:Preferences#mw-prefsection-gadgets|preferencias]], según la [[MediaWiki:Gadgets-definition|lista de definición de accesorios]]. Esta vista provee un acceso fácil a las páginas de mensajes del sistema que definen la descripción y el código de cada accesorio.", "gadgets-uses": "Usos", "gadgets-required-rights": "Requiere {{PLURAL:$2|el siguiente permiso|los siguientes permisos}}:\n\n$1", - "gadgets-required-skins": "Disponible {{PLURAL:$2|en la apariencia $1|en las siguientes apariencias: $1}}.", + "gadgets-required-skins": "Disponible en {{PLURAL:$2|la apariencia $1|las siguientes apariencias: $1}}.", "gadgets-default": "Activado para todos de manera predeterminada.", + "gadgets-legacy": "Gadget no está cargado. Migra a ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Aprender más])", "gadgets-export": "Exportar", "gadgets-export-title": "Exportación de gadget", "gadgets-not-found": "Gadget \"$1\" no encontrado.", "gadgets-export-text": "Para exportar el gadget $1, haz click en el botón \"{{int:gadgets-export-download}}\", graba el archivo descargado,\nve a Special:Importar un wiki de destino y subirlo. Luego agrega lo siguiente a MediaWiki:Gadgets-definition page:\n
    $2
    \nDebes tener permisos apropiados en el wiki de destino (incluyendo el derecho a editar mensajes de sistema) e importación desde archivos subidos debe estar habilitado.", - "gadgets-export-download": "Descargar" + "gadgets-export-download": "Descargar", + "apihelp-query+gadgetcategories-description": "Devuelve una lista de categorías de gadgets.", + "apihelp-query+gadgetcategories-param-names": "Nombres de las categorías que se obtendrán.", + "apihelp-query+gadgetcategories-example-2": "Obtener toda la información acerca de las categorías llamadas \"foo\" y \"bar\"." } diff --git a/extensions/Gadgets/i18n/et.json b/extensions/Gadgets/i18n/et.json index 9504b69f..8c13dc60 100644 --- a/extensions/Gadgets/i18n/et.json +++ b/extensions/Gadgets/i18n/et.json @@ -15,9 +15,30 @@ "gadgets-required-rights": "Tarvis on {{PLURAL:$2|järgmist õigust|järgmisi õigusi}}:\n\n$1", "gadgets-required-skins": "Saadaval {{PLURAL:$2|järgmise kujundusega|järgmiste kujundustega}}: $1.", "gadgets-default": "Vaikimisi kõigile lubatud.", + "gadgets-legacy": "Tööriist on laadimata. Palun kohanda ResourceLoaderiga. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Lisateave])", "gadgets-export": "Ekspordi", "gadgets-export-title": "Tööriista eksportimine", "gadgets-not-found": "Tööriista \"$1\" ei leidu.", "gadgets-export-text": "Klõpsa nuppu \"{{int:gadgets-export-download}}\", et eksportida tööriist $1; salvesta allalaaditav fail;\nmine sihtvikis leheküljele Special:Import ja laadi see üles. Seejärel lisa järgnev leheküljele MediaWiki:Gadgets-definition:\n
    $2
    \nSul peavad olema sihtvikis vajalikud õigused (kaasa arvatud õigus redigeerida süsteemi sõnumeid) ja üleslaaditavate failide kaudu importimine peab olema lubatud.", - "gadgets-export-download": "Laadi alla" + "gadgets-export-download": "Laadi alla", + "apihelp-query+gadgetcategories-description": "Tagastab tööriistakategooriate loetelu.", + "apihelp-query+gadgetcategories-param-prop": "Millist teavet tööriistakategooriate kohta hankida:\n;name: Sisemine kategoorianimi.\n;title: Kategooria pealkiri.\n;members: Tööriistade arv kategoorias.", + "apihelp-query+gadgetcategories-param-names": "Välja võetavate kategooriate nimed.", + "apihelp-query+gadgetcategories-example-1": "Hangi olemasolevate tööriistakategooriate loetelu", + "apihelp-query+gadgetcategories-example-2": "Hangi kogu teave kategooriate \"foo\" ja \"bar\" kohta", + "apihelp-query+gadgets-description": "Tagastab selles vikis kasutusel olevate tööriistade loetelu.", + "apihelp-query+gadgets-param-prop": "Millist teavet tööriistade kohta hankida:\n;id:Tööriista sisemine identifikaator.\n;metadata:Tööriista metaandmed.\n;desc: Tööriista kirjeldus teisendatuna HTML-iks (võib olla aeglane, kasuta ainult vajadusel).", + "apihelp-query+gadgets-param-categories": "Milliste kategooriate tööriistad loetleda.", + "apihelp-query+gadgets-param-ids": "Välja võetavate tööriistade identifikaatorid.", + "apihelp-query+gadgets-param-allowedonly": "Loetle ainult tööriistad, mille antud kasutaja on lubanud.", + "apihelp-query+gadgets-param-enabledonly": "Loetle ainult tööriistad, mille antud kasutaja on lubanud.", + "apihelp-query+gadgets-example-1": "Hangi tööriistade loetelu kirjeldustega", + "apihelp-query+gadgets-example-2": "Hangi tööriistade loetelu kõigi võimalike atribuutidega", + "apihelp-query+gadgets-example-3": "Hangi loetelu tööriistadest, mis kuuluvad kategooriasse \"foo\"", + "apihelp-query+gadgets-example-4": "Hangi teave tööriistade \"foo\" ja \"bar\" kohta", + "apihelp-query+gadgets-example-5": "Hangi loetelu tööriistadest, mille antud kasutaja on lubanud", + "right-gadgets-edit": "Muuta tööriistade JavaScripti ja CSS-lehekülgi", + "action-gadgets-edit": "muuta tööriistade JavaScripti ega CSS-lehekülgi", + "right-gadgets-definition-edit": "Muuta tööriistade määratlusi", + "action-gadgets-definition-edit": "muuta tööriistade määratlusi" } diff --git a/extensions/Gadgets/i18n/eu.json b/extensions/Gadgets/i18n/eu.json index bf37cb3b..b8f57864 100644 --- a/extensions/Gadgets/i18n/eu.json +++ b/extensions/Gadgets/i18n/eu.json @@ -5,7 +5,8 @@ "Inorbez", "Joxemai", "Unai Fdz. de Betoño", - "පසිඳු කà·à·€à·’න්ද" + "පසිඳු කà·à·€à·’න්ද", + "Sator" ] }, "gadgets-desc": "Lankideek [[Special:Gadgets|CSS eta JavaScript gadgetak]] aukeratu ditzazkete beraien [[Special:Preferences#mw-prefsection-gadgets|hobespenetan]]", @@ -17,5 +18,8 @@ "gadgets-uses": "Erabilerak", "gadgets-export": "Esportatu", "gadgets-export-title": "Gadgeten esportazioa", - "gadgets-export-download": "Jaitsi" + "gadgets-not-found": "Ez da \"$1\" gadgeta aurkitu.", + "gadgets-export-download": "Jaitsi", + "right-gadgets-definition-edit": "Gadgetaren definizioak aldatu", + "action-gadgets-definition-edit": "Gadget honen definizioa aldatu" } diff --git a/extensions/Gadgets/i18n/fa.json b/extensions/Gadgets/i18n/fa.json index 98d53cb7..67bc0027 100644 --- a/extensions/Gadgets/i18n/fa.json +++ b/extensions/Gadgets/i18n/fa.json @@ -7,7 +7,8 @@ "Ladsgroup", "Reza1615", "Wayiran", - "ZxxZxxZ" + "ZxxZxxZ", + "Mjbmr" ] }, "gadgets-desc": "به کاربرها امکان انتخاب [[Special:Gadgets|ابزارهای شخصی سی‌اس‌اس Ùˆ جاوااسکریپت]] را از طریق صÙحهٔ [[Special:Preferences#mw-prefsection-gadgets|ترجیحات]] می‌دهد", @@ -20,6 +21,7 @@ "gadgets-required-rights": "به {{PLURAL:$2|دسترسی|دسترسی‌های}} روبرو نیاز است:\n\n$1", "gadgets-required-skins": "قابل دسترس در {{PLURAL:$2|پوستهٔ $1|پوسته‌های $1}}.", "gadgets-default": "به‌طور پیش‌Ùرض برای همه Ùعال است.", + "gadgets-legacy": "ابزار بارگیری نشده است. لطÙاً به ResourceLoader مهاجرت کنید. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) اطلاعات بیشتر])", "gadgets-export": "برون‌بری", "gadgets-export-title": "برون‌بری ابزار", "gadgets-not-found": "ابزار «$1» یاÙت نشد.", diff --git a/extensions/Gadgets/i18n/fo.json b/extensions/Gadgets/i18n/fo.json index 14b30798..579e3aba 100644 --- a/extensions/Gadgets/i18n/fo.json +++ b/extensions/Gadgets/i18n/fo.json @@ -4,9 +4,20 @@ "EileenSanda" ] }, + "gadgets-desc": "Letur brúkarar velja persónligar [[Special:Gadgets|CSS og JavaScript gadgets]] í teirra [[Special:Preferences#mw-prefsection-gadgets|innstillingum]]", + "prefs-gadgets": "Gadgets", + "gadgets": "Gadgets", + "gadgets-title": "Gadgets", + "gadgets-pagetext": "Niðanfyri er ein listi yvir serstakar gadgets (ískotisfunktiónir), ið brúkarar kunnu aktivera á teirra [[Special:Preferences#mw-prefsection-gadgets|innstillar síðu]], sum víst á [[MediaWiki:Gadgets-definition|definitions]].\nHetta yvirlitið gevur lætta atgongd til kervisboð síðurnar, ið hevur frágreiðingar og kotur um hvørja gadget.", "gadgets-uses": "Brúkar", "gadgets-required-rights": "Krevur fylgjandi {{PLURAL:$2|rættindi|rættindi}}:\n\n$1", "gadgets-required-skins": "Tøk á {{PLURAL:$2|$1 útsjónd|fylgjandi útsjóndum: $1}}.", "gadgets-default": "Gjørt virkið fyri øllum sum standard", - "gadgets-export": "Útflyt" + "gadgets-export": "Útflyt", + "gadgets-export-title": "Útflyt gadget", + "gadgets-not-found": "Gadget \"$1\" ikki funnin.", + "gadgets-export-download": "Tak niður", + "apihelp-query+gadgetcategories-param-names": "Nøvn á bólkum ið skulu heintast.", + "apihelp-query+gadgetcategories-example-1": "Fá eitt yvirlit yvir gadget bólkar", + "apihelp-query+gadgetcategories-example-2": "Fá kunning um allir bólkar nevndir \"foo\" og \"bar\"" } diff --git a/extensions/Gadgets/i18n/fr.json b/extensions/Gadgets/i18n/fr.json index 1c65f613..35478ead 100644 --- a/extensions/Gadgets/i18n/fr.json +++ b/extensions/Gadgets/i18n/fr.json @@ -11,7 +11,12 @@ "Sherbrooke", "Urhixidur", "Zcqsc06", - "Zetud" + "Zetud", + "Djiboun", + "Windes", + "Lucky", + "Gomoko", + "SRXcraft" ] }, "gadgets-desc": "Permet aux utilisateurs de choisir des [[Special:Gadgets|gadgets CSS et Javascripts]] personnalisés dans leurs [[Special:Preferences#mw-prefsection-gadgets|préférences]]", @@ -24,9 +29,30 @@ "gadgets-required-rights": "Requiert {{PLURAL:$2|le droit suivant|les droits suivants}} : \n\n$1.", "gadgets-required-skins": "Disponible sur {{PLURAL:$2|l’habillage suivant|les habillages suivants}} : $1.", "gadgets-default": "Activé pour tout le monde par défaut.", + "gadgets-legacy": "Le gadget n’est pas chargé. Veuillez migrer vers ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) En savoir plus])", "gadgets-export": "Exporter", "gadgets-export-title": "Export de gadget", "gadgets-not-found": "Gadget « $1 » non trouvé.", "gadgets-export-text": "Pour exporter le gadget $1, cliquez sur le bouton « {{int:gadgets-export-download}} », enregistrez le fichier téléchargé puis allez sur la page Special:Import du wiki de destination et importez-la. Ajoutez ensuite le texte suivant dans la page MediaWiki:Gadgets-definition :\n
    $2
    \nIl est nécessaire de disposer des droits correspondants sur le wiki de destination (y compris celui de modifier les messages système) et l’import depuis des fichiers doit être activé.", - "gadgets-export-download": "Télécharger" + "gadgets-export-download": "Télécharger", + "apihelp-query+gadgetcategories-description": "Renvoie une liste de catégories de gadget.", + "apihelp-query+gadgetcategories-param-prop": "Quelle information de catégorie de gadget obtenir :\n;name:Nom de catégorie interne.\n;title:Titre de la catégorie.\n;members:Nombre de gadgets dans la catégorie.", + "apihelp-query+gadgetcategories-param-names": "Noms des catégories à récupérer.", + "apihelp-query+gadgetcategories-example-1": "Fournit une liste des catégories de gadget existantes", + "apihelp-query+gadgetcategories-example-2": "Fournit toutes les informations sur les catégories \"foo\" et \"bar\"", + "apihelp-query+gadgets-description": "Renvoie une liste des gadgets utilisés sur ce wiki.", + "apihelp-query+gadgets-param-prop": "Quelle information de gadget obtenir :\n;id:ID interne du gadget.\n;metadata:Les métadonnées du gadget.\n;desc:Description du gadget transformée en HTML (peut être lent, à n’utiliser que si c’est vraiment nécessaire).", + "apihelp-query+gadgets-param-categories": "Gadgets depuis lesquels récupérer les catégories.", + "apihelp-query+gadgets-param-ids": "IDs des gadgets à récupérer.", + "apihelp-query+gadgets-param-allowedonly": "Lister seulement les gadgets autorisés pour l'utilisateur actuel", + "apihelp-query+gadgets-param-enabledonly": "Lister uniquement les gadgets activés par l’utilisateur actuel.", + "apihelp-query+gadgets-example-1": "Obtenir une liste de gadgets ainsi que leurs descriptions", + "apihelp-query+gadgets-example-2": "Obtenir une liste de gadgets avec toutes les propriétés possibles", + "apihelp-query+gadgets-example-3": "Obtenir une liste des gadgets appartenant à la catégorie « foo »", + "apihelp-query+gadgets-example-4": "Obtenir l’information sur les gadgets « foo » et « bar »", + "apihelp-query+gadgets-example-5": "Obtenir une liste des gadgets activés par l’utilisateur actuel", + "right-gadgets-edit": "Modifier les pages JavaScript et CSS de gadget", + "action-gadgets-edit": "modifier la page JavaScript ou CSS de ce gadget", + "right-gadgets-definition-edit": "Modifier les définitions des gadget", + "action-gadgets-definition-edit": "modifier la définition de ce gadget" } diff --git a/extensions/Gadgets/i18n/gl.json b/extensions/Gadgets/i18n/gl.json index 4d9f4588..f37ec648 100644 --- a/extensions/Gadgets/i18n/gl.json +++ b/extensions/Gadgets/i18n/gl.json @@ -3,7 +3,8 @@ "authors": [ "Alma", "Toliño", - "Banjo" + "Banjo", + "Elisardojm" ] }, "gadgets-desc": "Deixa que os usuarios seleccionen [[Special:Gadgets|trebellos CSS e JavaScript]] nas súas [[Special:Preferences#mw-prefsection-gadgets|preferencias]]", @@ -16,17 +17,30 @@ "gadgets-required-rights": "{{PLURAL:$2|Cómpre o seguinte dereito|Cómpren os seguintes dereitos}}:\n\n$1", "gadgets-required-skins": "Dispoñible {{PLURAL:$2|na aparencia $1|nas seguintes aparencias: $1}}.", "gadgets-default": "Activado para todos por defecto.", + "gadgets-legacy": "O trebello non está cargado. Por favor, migre a ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Máis información])", "gadgets-export": "Exportar", "gadgets-export-title": "Exportación de trebellos", "gadgets-not-found": "Non se atopou o trebello \"$1\".", "gadgets-export-text": "Para exportar o trebello $1, prema sobre o botón \"{{int:gadgets-export-download}}\", garde o ficheiro descargado,\nvaia á páxina especial Special:Import do wiki de destino e cárgueo. A continuación, engada o seguinte texto na páxina MediaWiki:Gadgets-definition:\n
    $2
    \nDebe ter os permisos axeitados no wiki de destino (incluído o dereito de modificar as mensaxes do sistema) e a importación desde a carga de ficheiros debe estar activada.", "gadgets-export-download": "Descargar", + "apihelp-query+gadgetcategories-description": "Retorna unha lista de categorías de trebellos.", + "apihelp-query+gadgetcategories-param-prop": "Que información de categoría obter:\n;name:Nome interno da categoría.\n;title:Título da categoría.\n;members:Número de trebellos na categoría.", + "apihelp-query+gadgetcategories-param-names": "Nomes de categorías a consultar.", + "apihelp-query+gadgetcategories-example-1": "Obter unha lista de categorías de trebellos existentes", + "apihelp-query+gadgetcategories-example-2": "Obter toda a información sobre categorías nomeadas \"foo\" e \"bar\"", "apihelp-query+gadgets-description": "Retornar unha lista dos trebellos usados nesta wiki.", + "apihelp-query+gadgets-param-prop": "Que información obter do trebello:\n;id:Identificador interno de trebello.\n;metadata:Metadatos do trebello.\n;desc:Descrición do trebello transformada en HTML (pode ser lento, usar só se é necesario realmente).", + "apihelp-query+gadgets-param-categories": "De que categorías consultar os trebellos.", + "apihelp-query+gadgets-param-ids": "Identificadores dos trebellos a consultar.", "apihelp-query+gadgets-param-allowedonly": "Listar só os trebellos permitidos para o usuario actual.", "apihelp-query+gadgets-param-enabledonly": "Listar só os trebellos habilitados polo usuario actual.", "apihelp-query+gadgets-example-1": "Amosar unha lista de trebellos xunto coas súas descricións", "apihelp-query+gadgets-example-2": "Amosar unha lista de trebellos con tódalas propiedades posibles", "apihelp-query+gadgets-example-3": "Amosar unha lista de trebellos que pertenzan á categoría \"foo\"", "apihelp-query+gadgets-example-4": "Amosar información sobre os trebellos \"foo\" e \"bar\"", - "apihelp-query+gadgets-example-5": "Amosar unha lista dos trebellos habilitados para o usuario actual" + "apihelp-query+gadgets-example-5": "Amosar unha lista dos trebellos habilitados para o usuario actual", + "right-gadgets-edit": "Editar as páxinas de JavaScript e CSS dos trebellos", + "action-gadgets-edit": "editar a páxina de JavaScript ou CSS deste trebello", + "right-gadgets-definition-edit": "Editar as definicións dos trebellos", + "action-gadgets-definition-edit": "editar a definición deste trebello" } diff --git a/extensions/Gadgets/i18n/he.json b/extensions/Gadgets/i18n/he.json index 519470b4..7443ae78 100644 --- a/extensions/Gadgets/i18n/he.json +++ b/extensions/Gadgets/i18n/he.json @@ -18,9 +18,30 @@ "gadgets-required-rights": "{{PLURAL:$2|נדרשת ההרש××” הב××”|נדרשות ההרש×ות הב×ות}}:\n\n$1", "gadgets-required-skins": "זמין {{PLURAL:$2|בערכות העיצוב הב×ות: $1|בערכת העיצוב $1}}", "gadgets-default": "מופעל ×œ×›×•×œ× ×›×‘×¨×™×¨×ª מחדל.", + "gadgets-legacy": "×”×’×דג'ט ×œ× × ×˜×¢×Ÿ. × × ×œ×¢×“×›×Ÿ לשימוש ב־ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) מידע נוסף])", "gadgets-export": "יצו×", "gadgets-export-title": "×™×¦×•× ×’×דג'טי×", "gadgets-not-found": "×”×’×דג׳ט \"$1\" ×œ× × ×ž×¦×.", "gadgets-export-text": "כדי ×œ×™×™×¦× ×ת ×”×’×דג׳ט $1, יש ללחוץ על הלחצן \"{{int:gadgets-export-download}}\", לשמור ×ת הקובץ שהתקבל,\nלגשת ×ל Special:Import ב×תר הוויקי המיועד ולהעלות ×ותו. ו××– להוסיף ×ת ×”×“×‘×¨×™× ×”×‘××™× ×œ×“×£ MediaWiki:Gadgets-definition:\n
    $2
    \nעליך להיות ×¢× ×”×¨×©×ות מת×ימות ב×תר הוויקי המיועד (לרבות הרש×ות לעריכת הודעות מערכת) וה×פשרות ×œ×™×™×‘×•× ×ž×§×•×‘×¥ חייבת להיות מופעלת.", - "gadgets-export-download": "הורדה" + "gadgets-export-download": "הורדה", + "apihelp-query+gadgetcategories-description": "החזרת רשימת קטגוריות של גדג'טי×.", + "apihelp-query+gadgetcategories-param-prop": "××™×–×” מידע על ×’×דג'×˜×™× ×œ×§×‘×œ:\n;name:×©× ×§×˜×’×•×¨×™×” פנימי.\n;title:×©× ×”×§×˜×’×•×¨×™×”.\n;members:מספר ×”×’×דג'×˜×™× ×‘×§×˜×’×•×¨×™×”.", + "apihelp-query+gadgetcategories-param-names": "שמות הקטגוריות ל×חזור.", + "apihelp-query+gadgetcategories-example-1": "קבלת רשימת קטגוריות ×’×דג'×˜×™× ×§×™×™×ž×•×ª", + "apihelp-query+gadgetcategories-example-2": "קבלת כל המידע על קטגוריות ×‘×©× \"foo\" ו־\"bar\"", + "apihelp-query+gadgets-description": "קבלת רשימת ×’×דג'×˜×™× ×©×ž×©×ž×©×™× ×‘×•×•×™×§×™ ×”×–×”.", + "apihelp-query+gadgets-param-prop": "××™×–×” מידע על ×’×דג'×˜×™× ×œ×§×‘×œ:\n;id:מזהה ×’×דג'ט פנימי.\n;metadata:המט×Ö¾× ×ª×•× ×™× ×©×œ ×”×’×דג'ט.\n;desc:תי×ור ×”×’×דג'ט ב־HTML (×–×” יכול להיות ×טי, יש להשתמש בזה רק ×× ×–×” נחוץ).", + "apihelp-query+gadgets-param-categories": "מ×יזו קטגוריה ל×חזר ×ת ×”×’×דג'טי×.", + "apihelp-query+gadgets-param-ids": "×ž×–×”×™× ×©×œ ×’×דג'×˜×™× ×œ×חזור.", + "apihelp-query+gadgets-param-allowedonly": "×œ×¨×©×•× ×¨×§ ×’×דג'×˜×™× ×©×ž×•×ª×¨×™× ×œ×ž×©×ª×ž×© הנוכחי.", + "apihelp-query+gadgets-param-enabledonly": "×œ×¨×©×•× ×¨×§ ×’×דג'×˜×™× ×©×”×ž×©×ª×ž×© הנוכחי הפעיל.", + "apihelp-query+gadgets-example-1": "קבלת רשימת ×’×דג'×˜×™× ×¢× ×”×ª×™××•×¨×™× ×©×œ×”×", + "apihelp-query+gadgets-example-2": "קבלת רשימת ×’×דג'×˜×™× ×¢× ×›×œ המ××¤×™×™× ×™× ×©×œ×”×", + "apihelp-query+gadgets-example-3": "קבלת רשימת ×’×דג'×˜×™× ×‘×§×˜×’×•×¨×™×” \"foo\"", + "apihelp-query+gadgets-example-4": "קבלת מידע על ×”×’×דג'×˜×™× \"foo\" ו־\"bar\"", + "apihelp-query+gadgets-example-5": "קבלת רשימת ×’×דג'×˜×™× ×©×ž×•×¤×¢×œ×™× ×œ×ž×©×ª×ž×© הנוכחי", + "right-gadgets-edit": "עריכת דפי JavaScript ו־CSS של ×’×דג'טי×", + "action-gadgets-edit": "לערוף ×ת דף ×”Ö¾JavaScript ×ו דף ×”Ö¾CSS של ×”×’×דג'ט ×”×–×”", + "right-gadgets-definition-edit": "עריכת הגדרות ×’×דג'טי×", + "action-gadgets-definition-edit": "לערוך ×ת הגדרת ×”×’×דג'ט ×”×–×”" } diff --git a/extensions/Gadgets/i18n/hi.json b/extensions/Gadgets/i18n/hi.json index 9b63e9b6..e7d5e200 100644 --- a/extensions/Gadgets/i18n/hi.json +++ b/extensions/Gadgets/i18n/hi.json @@ -5,7 +5,8 @@ "Kaustubh", "Mayur", "Shyam", - "Siddhartha Ghai" + "Siddhartha Ghai", + "Hindustanilanguage" ] }, "gadgets-desc": "सदसà¥à¤¯à¥‹à¤‚ को उनकी [[Special:Preferences#mw-prefsection-gadgets|वरीयताओं]] में से चà¥à¤¨à¤¿à¤‚दा [[Special:Gadgets|CSS और जावालिपि जà¥à¤—त]] चà¥à¤¨à¤¨à¥‡ दो।", @@ -22,5 +23,13 @@ "gadgets-export-title": "गैजेट निरà¥à¤¯à¤¾à¤¤", "gadgets-not-found": "गैजेट \"$1\" मिला नहीं ।", "gadgets-export-text": "$1 उपकरण निरà¥à¤¯à¤¾à¤¤ करने के लिये \"{{int:gadgets-export-download}}\" बटन पर कà¥à¤²à¤¿à¤• करें, डाउनलोड की गई फ़ाइल सहेजें, लकà¥à¤·à¥à¤¯ विकि पर Special:Import पर जाà¤à¤ और फ़ाइल अपलोड करें। ततà¥à¤ªà¤¶à¥à¤šà¤¾à¤¤ MediaWiki:Gadgets-definition में निमà¥à¤¨ पाठ जोड़ें:\n
    $2
    \nआपके पास लकà¥à¤·à¥à¤¯ विकि पर उपयà¥à¤•à¥à¤¤ अधिकार होने चाहिये (जिसमें अंतरफल संदेशों को समà¥à¤ªà¤¾à¤¦à¤¿à¤¤ करने का अधिकार शामिल है) और विकि पर फ़ाइल दà¥à¤µà¤¾à¤°à¤¾ आयात सकà¥à¤·à¤® होना चाहिये।", - "gadgets-export-download": "डाउनलोड" + "gadgets-export-download": "डाउनलोड", + "apihelp-query+gadgetcategories-description": "गैजेट शà¥à¤°à¥‡à¤£à¤¿à¤¯à¥‹à¤‚ की सूची परिणाम-सà¥à¤µà¤°à¥‚प लाती है", + "apihelp-query+gadgetcategories-param-names": "शà¥à¤°à¥‡à¤£à¤¿à¤¯à¥‹à¤‚ के नाम जिनà¥à¤¹à¥‡à¤‚ निकालना है।", + "apihelp-query+gadgetcategories-example-1": "मौजूदा गैजेट शà¥à¤°à¥‡à¤£à¤¿à¤¯à¥‹à¤‚ की सूची पà¥à¤°à¤¾à¤ªà¥à¤¤ करें", + "apihelp-query+gadgetcategories-example-2": "\"foo\" और \"bar\" शà¥à¤°à¥‡à¤£à¤¿à¤¯à¥‹à¤‚ के बारे में पूरी जानकारी पà¥à¤°à¤¾à¤ªà¥à¤¤ करें", + "apihelp-query+gadgets-description": "परिणाम-सà¥à¤µà¤°à¥‚प इस विकि पर पà¥à¤°à¤¯à¥‹à¤— किठजाने वाले सभी गैजेटों की सूची पà¥à¤°à¤¾à¤ªà¥à¤¤ करें।", + "apihelp-query+gadgets-param-categories": "किन शà¥à¤°à¥‡à¤£à¤¿à¤¯à¥‹à¤‚ के गैजेट पà¥à¤°à¤¾à¤ªà¥à¤¤ करें", + "apihelp-query+gadgets-param-ids": "पà¥à¤°à¤¾à¤ªà¥à¤¤ करने के गैजेटों के आई०डी०।", + "apihelp-query+gadgets-param-allowedonly": "वरà¥à¤¤à¤®à¤¾à¤¨ सदसà¥à¤¯ को अनà¥à¤®à¤¤à¤¿-पà¥à¤°à¤¾à¤ªà¥à¤¤ गैजेटों को सूचीबदà¥à¤§ करें।" } diff --git a/extensions/Gadgets/i18n/hu.json b/extensions/Gadgets/i18n/hu.json index 65b28f2e..7a535a84 100644 --- a/extensions/Gadgets/i18n/hu.json +++ b/extensions/Gadgets/i18n/hu.json @@ -19,6 +19,7 @@ "gadgets-required-rights": "A következÅ‘ {{PLURAL:$2|jogosultságra|jogosultságokra}} van szükség:\n\n$1", "gadgets-required-skins": "{{PLURAL:$2|$1 felületen érhetÅ‘ el|Az alábbi felületeken érhetÅ‘ el: $1}}.", "gadgets-default": "Mindenki számára engedélyezett alapértelmezettként.", + "gadgets-legacy": "A segédeszköz nincs betöltve. Ãllítsd át ResourceLoaderre. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) További információk])", "gadgets-export": "Exportálás", "gadgets-export-title": "Segédeszköz exportálása", "gadgets-not-found": "A(z) „$1“ segédeszköz nem található.", diff --git a/extensions/Gadgets/i18n/id.json b/extensions/Gadgets/i18n/id.json index 3441d25d..a6f9d5dd 100644 --- a/extensions/Gadgets/i18n/id.json +++ b/extensions/Gadgets/i18n/id.json @@ -10,7 +10,7 @@ "gadgets-desc": "Memungkinkan pengguna memilih [[Special:Gadgets|perkakas CSS dan JavaScript]] melalui [[Special:Preferences#mw-prefsection-gadgets|preferensi]] mereka", "prefs-gadgets": "Perkakas", "gadgets-prefstext": "Berikut adalah daftar perkakas istimewa yang dapat Anda aktifkan untuk akun Anda. Semua perkakas tersebut sebagian besar berbasis JavaScript sehingga Anda harus mengaktifkan JavaScript pada penjelajah Anda untuk dapat menjalankannya. Perhatikan bahwa berbagai perkakas tersebut tidak memiliki pengaruh terhadap halaman preferensi ini.\n\nJuga perhatikan bahwa perkakas istimewa ini bukanlah bagian dari perangkat lunak MediaWiki dan biasanya dikembangkan dan dipelihara oleh para pengguna di wiki lokal Anda. Pengurus lokal dapat menyunting perkakas yang tersedia melalui [[MediaWiki:Gadgets-definition]] dan [[Special:Gadgets]].", - "gadgets": "Perkakas", + "gadgets": "Alat (Perkakas)", "gadgets-title": "Perkakas", "gadgets-pagetext": "Berikut adalah daftar perkakas istimewa yang dapat diaktifkan pengguna melalui [[Special:Preferences#mw-prefsection-gadgets|halaman preferensi]] mereka sebagaimana didefinisikan oleh [[MediaWiki:Gadgets-definition]]. Tinjauan berikut memberikan kemudahan akses ke dalam halaman pesan sistem yang mendefinisikan deskripsi dan kode masing-masing perkakas.", "gadgets-uses": "Penggunaan", diff --git a/extensions/Gadgets/i18n/ilo.json b/extensions/Gadgets/i18n/ilo.json index 8708397e..fa73bc33 100644 --- a/extensions/Gadgets/i18n/ilo.json +++ b/extensions/Gadgets/i18n/ilo.json @@ -6,14 +6,15 @@ }, "gadgets-desc": "Agipalubos kadagiti agar-aramat nga agpili kadagiti naiduma a [[Special:Gadgets|CSS ken JavaScript a gadget]] iti [[Special:Preferences#mw-prefsection-gadgets|kakaykayatanda]]", "prefs-gadgets": "Dagiti gadget", - "gadgets-prefstext": "Dita baba ket listaan kadagiti naipangruna a gadget a mabalinmo a pakabaelan iti pakabilangam.\nDagitoy a gadget ket naibatay iti JavaScript, isu a masapul a pakabaelan ti JavaScript idiay \"pagbasabasam\" tapno agbalin dagitoy.\nLaglagipen a dagitoy a gadget ket awan ti pagbanaganna iti daytoy panid ti kakaykayatan.\n\nLaglagipen pay a dagitoy a naipangruna a gadget ket saan a paset ti sopwer ti MediaWiki, ken kadawyan a pinarang-ay ken tinartaripato babaen dagiti agar-aramat iti lokal a wiki.\nDagiti lokal nga administrador ket mabalinda nga urnosen dagiti [[MediaWiki:Gadgets-definition|panangipalplawag]] ken dagiti [[Special:Gadgets|deskripsion]] dagiti magun-od a gadget.", + "gadgets-prefstext": "Dita baba ket listaan kadagiti naipangruna a gadget a mabalinmo a pakabaelan para iti pakabilangam.\nDagitoy a gadget ket naibatay iti JavaScript, isu a masapul a pakabaelan ti JavaScript iti \"pagbasabasam\" tapno agbalin dagitoy.\nLaglagipen a dagitoy a gadget ket awan ti pagbanaganna iti daytoy panid ti kakaykayatan.\n\nLaglagipen pay a dagitoy a naipangruna a gadget ket saan a paset ti sopwer ti MediaWiki, ken kadawyan a pinarang-ay ken tinartaripato babaen dagiti agar-aramat iti lokal a wiki.\nDagiti lokal nga administrador ket mabalinda nga urnosen dagiti [[MediaWiki:Gadgets-definition|depinision]] ken dagiti [[Special:Gadgets|deskripsion]] dagiti magun-od a gadget.", "gadgets": "Dagiti gadget", "gadgets-title": "Dagiti gadget", - "gadgets-pagetext": "Dita baba ket listaan dagiti naipangruna a gadget a mabalin a pakabaelan dagiti agar-aramat iti bukodda a [[Special:Preferences#mw-prefsection-gadgets|panid ti kakaykayatan]], a kas naipalawag babaen dagiti [[MediaWiki:Gadgets-definition|pannakaipalawag]].\nDaytoy a pakabuklan ket mangited iti nalaka a panagserrek kadagiti panid ti mensahe ti sistema a mangipalawag ti tungngal maysa a deskripsion ken kodigo ti gadget.", - "gadgets-uses": "Us-usar", - "gadgets-required-rights": "Masapul ti sumaganad a {{PLURAL:$2|karbengan|karkarbengan}}:\n\n$1", - "gadgets-required-skins": "Mabalin a magun-od {{PLURAL:$2|iti $1 a kudil|kadagiti sumaganad a kudil: $1}}.", + "gadgets-pagetext": "Dita baba ket listaan dagiti naipangruna a gadget a mabalin a pakabaelan dagiti agar-aramat iti bukodda a [[Special:Preferences#mw-prefsection-gadgets|panid ti kakaykayatan]], a kas naipalawag babaen dagiti [[MediaWiki:Gadgets-definition|depinision]].\nDaytoy a pakabuklan ket mangited iti nalaka a panagserrek kadagiti panid ti mensahe ti sistema a mangipalawag ti tungngal maysa a deskripsion ken kodigo ti gadget.", + "gadgets-uses": "Agus-usar ti", + "gadgets-required-rights": "Masapul {{PLURAL:$2|ti sumaganad a karbengan|dagiti sumaganad a karbengan}}:\n\n$1", + "gadgets-required-skins": "Magun-od {{PLURAL:$2|iti $1 a kudil|kadagiti sumaganad a kudil: $1}}.", "gadgets-default": "Napakabaelan para iti amin babaen ti kasisigud.", + "gadgets-legacy": "Saan a naikarga ti gadget. Pangngaasi nga iyakar iti ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Agadal pay ti adu])", "gadgets-export": "Eksport", "gadgets-export-title": "Eksport ti gadget", "gadgets-not-found": "Saan a nabirukan ti gadget ti \"$1\".", @@ -33,6 +34,10 @@ "apihelp-query+gadgets-example-1": "Mangala kadagiti gadget a kakuyog dagiti deskripsion", "apihelp-query+gadgets-example-2": "Mangala kadagiti gadget nga addaan kadagiti amin a mabalin a tagtagikua", "apihelp-query+gadgets-example-3": "Mangala ti listaan dagiti gadget a tagikua ti kategoria \"foo\"", - "apihelp-query+gadgets-example-4": "Mangala kadagiti pakaammo a manipanggep kadagiti gadegt ti \"foo\" ken \"bar\"", - "apihelp-query+gadgets-example-5": "Mangala ti listaan dagiti gadget a pinakabaelan iti agdama nga agar-aramat." + "apihelp-query+gadgets-example-4": "Mangala kadagiti pakaammo a manipanggep kadagiti gadget ti \"foo\" ken \"bar\"", + "apihelp-query+gadgets-example-5": "Mangala ti listaan dagiti gadget a pinakabaelan iti agdama nga agar-aramat.", + "right-gadgets-edit": "Urnosen dagiti panid ti JavaScript ken CSS ti gadget", + "action-gadgets-edit": "urnosen daytoy a panid ti JavaScript wenno CSS ti gadget", + "right-gadgets-definition-edit": "Urnosen dagiti depinision ti gadget", + "action-gadgets-definition-edit": "urnosen daytoy a depinision ti gadget" } diff --git a/extensions/Gadgets/i18n/it.json b/extensions/Gadgets/i18n/it.json index 603d860e..2ef9d479 100644 --- a/extensions/Gadgets/i18n/it.json +++ b/extensions/Gadgets/i18n/it.json @@ -5,7 +5,8 @@ "BrokenArrow", "Darth Kule", "Melos", - "Nemo bis" + "Nemo bis", + "Statix64" ] }, "gadgets-desc": "Consente agli utenti di selezionare [[Special:Gadgets|accessori CSS e JavaScript]] nelle proprie [[Special:Preferences#mw-prefsection-gadgets|preferenze]]", @@ -22,5 +23,9 @@ "gadgets-export-title": "Esporta accessorio", "gadgets-not-found": "Accessorio \"$1\" non trovato.", "gadgets-export-text": "Per esportare l'accessorio $1, fai clic sul pulsante \"{{int:gadgets-export-download}}\", salva il file scaricato,\nvai alla pagina Special:Import nella wiki di destinazione e carica il file. Poi aggiungi quanto segue alla pagina MediaWiki:Gadgets-definition:\n
    $2
    \nDevi disporre dei permessi appropriati nella wiki di destinazione (incluso il diritto di modificare i messaggi di sistema) e l'importazione da file deve essere abilitata.", - "gadgets-export-download": "Scarica" + "gadgets-export-download": "Scarica", + "right-gadgets-edit": "Modifica i gadget JavaScript e le pagine CSS", + "action-gadgets-edit": "modificare questo gadget Javascript o pagina CSS", + "right-gadgets-definition-edit": "Modifica le definizioni dei gadget", + "action-gadgets-definition-edit": "modificare la definizione di questo gadget" } diff --git a/extensions/Gadgets/i18n/jut.json b/extensions/Gadgets/i18n/jut.json index 2e90e565..842e5720 100644 --- a/extensions/Gadgets/i18n/jut.json +++ b/extensions/Gadgets/i18n/jut.json @@ -1,13 +1,14 @@ { "@metadata": { "authors": [ - "HuslÃ¥ke" + "HuslÃ¥ke", + "Jyllanj" ] }, - "prefs-gadgets": "Gøreter", + "prefs-gadgets": "Gadgets", "gadgets-prefstext": "NedenstÃ¥ende er en liste over de gadgets som du kan aktivere for din brugerkonto. Da disse gadgets hovedsageligt er baseret pÃ¥ JavaScript skal du slÃ¥ JavaScript til i din browser for at fÃ¥ dem til at virke. Bemærk at disse gadgets ikke vil have nogen effekt pÃ¥ denne side (indstillinger).\n\nBemærk ogsÃ¥ at disse specielle gadgets ikke er en del af MediaWiki-softwaren og at de typisk bliver vedligeholdt af brugere pÃ¥ din lokale wiki. Lokale administratorer kan redigere tilgængelige gadgets med [[MediaWiki:Gadgets-definition]] og [[Special:Gadgets]].", - "gadgets": "Gøreter", - "gadgets-title": "Gøreter", + "gadgets": "Gadgets", + "gadgets-title": "Gadgets", "gadgets-pagetext": "NedenstÃ¥ende er en liste med de specielle gadgets som brugere kan aktivere i deres indstillinger som defineret i [[MediaWiki:Gadgets-definition]]. Denne oversigtsside giver simpel adgang til de systembeskeder som definerer hver gadgets beskrivelse og kode.", - "gadgets-uses": "Brugere" + "gadgets-uses": "Bruge" } diff --git a/extensions/Gadgets/i18n/kk-cyrl.json b/extensions/Gadgets/i18n/kk-cyrl.json index 03e31ee9..c6fc4daa 100644 --- a/extensions/Gadgets/i18n/kk-cyrl.json +++ b/extensions/Gadgets/i18n/kk-cyrl.json @@ -14,6 +14,6 @@ "gadgets-default": "Әркімге автоматты түрде қоÑылады.", "gadgets-export": "ЭкÑпорттау", "gadgets-export-title": "Гаджетті ÑкÑпорттау", - "gadgets-not-found": "\"$1\" гаджеті табылмады.", + "gadgets-not-found": "«$1» гаджеті табылмады.", "gadgets-export-download": "ТүÑіру" } diff --git a/extensions/Gadgets/i18n/ko.json b/extensions/Gadgets/i18n/ko.json index e1e38074..c7d34621 100644 --- a/extensions/Gadgets/i18n/ko.json +++ b/extensions/Gadgets/i18n/ko.json @@ -5,7 +5,9 @@ "IRTC1015", "Klutzy", "Kwj2772", - "ì•„ë¼" + "ì•„ë¼", + "SeoJeongHo", + "Kurousagi" ] }, "gadgets-desc": "ê° ì‚¬ìš©ìžê°€ [[Special:Gadgets|CSS와 ìžë°”스í¬ë¦½íŠ¸ 소ë„구]]를 [[Special:Preferences#mw-prefsection-gadgets|ì‚¬ìš©ìž í™˜ê²½ 설정]]ì„ í†µí•´ 사용할 수 있습니다", @@ -22,5 +24,9 @@ "gadgets-export-title": "소ë„구 내보내기", "gadgets-not-found": "\"$1\" 소ë„구를 ì°¾ì„ ìˆ˜ 없습니다.", "gadgets-export-text": "$1 소ë„구를 내보내려면 \"{{int:gadgets-export-download}}\" ë²„íŠ¼ì„ í´ë¦­í•˜ì—¬ ë‹¤ìš´ë¡œë“œëœ íŒŒì¼ì„ 저장한 후,\n내보내려는 위키ì—ì„œ Special:Importë¡œ 가서 올리십시오. ê·¸ ë‹¤ìŒ MediaWiki:Gadgets-definition ë¬¸ì„œì— ë‹¤ìŒì„ 추가하세요:\n
    $2
    \n해당 위키ì—ì„œ 시스템 메시지 편집 등 특정 ê¶Œí•œì„ ê°–ê³  있어야 합니다. ë˜í•œ íŒŒì¼ ì˜¬ë¦¬ê¸°ë¥¼ 통한 가져오기 ê¸°ëŠ¥ì´ í™œì„±í™”ë˜ì–´ 있어야 합니다.", - "gadgets-export-download": "다운로드" + "gadgets-export-download": "다운로드", + "right-gadgets-edit": "ìžë°” 스í¬ë¦½íŠ¸ì™€ CSS 페ì´ì§€ 가젯 편집", + "action-gadgets-edit": "ì´ ìžë°” 스í¬ë¦½íŠ¸ë‚˜ CSS 페ì´ì§€ 편집", + "right-gadgets-definition-edit": "소ë„구 ì •ì˜ íŽ¸ì§‘", + "action-gadgets-definition-edit": "ì´ ê°€ì ¯ì˜ ì •ì˜ íŽ¸ì§‘" } diff --git a/extensions/Gadgets/i18n/ksh.json b/extensions/Gadgets/i18n/ksh.json index 8696091e..b3e2237c 100644 --- a/extensions/Gadgets/i18n/ksh.json +++ b/extensions/Gadgets/i18n/ksh.json @@ -5,12 +5,12 @@ "Purodha" ] }, - "gadgets-desc": "En iere [[Special:Preferences#mw-prefsection-gadgets|Enstellunge]] künne Metmaacher [[Special:Gadgets|CSS- un JavaScrip-Gadgets]] en- un ußschallde.", + "gadgets-desc": "En iere [[Special:Preferences#mw-prefsection-gadgets|Enschtällong]] künne Metmaacher [[Special:Gadgets|CSS- un JavaScrip-Gadgets]] en- un ußschallde.", "prefs-gadgets": "Gadgets", - "gadgets-prefstext": "Heh is en Leß met beschtemmpte Gadgets,\ndi för jehde Metmaacher enjeschalldt wähde könne.\nDi boue miehts op JavaSkrepte op, drom moß mer dat em Brauser\nenschallde, domet dat klapp.\n\nGadgets werke nimmohls op dä Sigg\nmet de päsöhnlesche Enschtällonge.\n\nOpjepaß! Gadgets, sin kei Schtöck vum MedijaWikki,\nsöndern sin extra em Wikki enschtalleht, un sin vun de Wikki-Bedrihver\nudder de Metmaacher ußjedaach un enjeerescht.\nWä et Rääsch doför hät, kann se övver de Sigge\n[[MediaWiki:Gadgets-definition|Gadgets fäßlääje]]\nun [[Special:Gadgets|Gadgets beschriewe]]\nenreeschte, un verändere.", + "gadgets-prefstext": "Heh is en Leß met beschtemmpte Gadgets,\ndi för jehde Metmaacher enjeschalldt wähde könne.\nDi boue miehts op JavaSkrepte op, drom moß mer dat em Brauser\nenschallde, domet dat klapp.\n\nGadgets werke nimmohls op dä Sigg\nmet de päsöhnlesche Enschtällonge.\n\nOpjepaß! Gadgets, sin kei Schtök vum MedijaWikki,\nsöndern sin extra em Wikki enschtalleht, un sin vun de Wikki-Bedrihver\nudder de Metmaacher ußjedaach un enjeerescht.\nWä et Rääsch doför hät, kann se övver de Sigge\n[[MediaWiki:Gadgets-definition|Gadgets fäßlääje]]\nun [[Special:Gadgets|Gadgets beschriewe]]\nenreeschte, un verändere.", "gadgets": "Gadgets", "gadgets-title": "Gadgets", - "gadgets-pagetext": "He kütt en Liss met spezielle Gadgets,\ndi jede Metmaacher övver sing\n[[Special:Preferences#mw-prefsection-gadgets|päsönlije Enstellunge]] enschallte kann.\nSe wääde övver [[MediaWiki:Gadgets-definition]] enjerecht.\nDie Övverseech hee jit enne direkte Zohjang op di Texte em Wiki,\nwo de Projramme, un de Erklierunge för de Gadgets dren enthallde\nsin.", + "gadgets-pagetext": "He kütt en Liss met spezielle Gadgets,\ndi jede Metmaacher övver sing\n[[Special:Preferences#mw-prefsection-gadgets|päsönlije Enstellunge]] enschallte kann.\nSe wääde övver [[MediaWiki:Gadgets-definition]] enjerecht.\nDi Övverseesch hee jit enne direkte Zohjang op di Täxte em Wikki,\nwo de Projramme, un de Erklierunge för de Gadgets dren enthallde\nsin.", "gadgets-uses": "Bruch", "gadgets-required-rights": "Bruch {{PLURAL:$2|dat Rääsch:|de Rääschde:|kein besönder Rääschde.}}\n\n$1", "gadgets-required-skins": "Kann jebruch wääde met {{PLURAL:$2|dä Bedeenbovverfläsch:|dä Bedeenbovverfläsche:|keine vun dä Bedeenbovverfläsche.}} $1", @@ -18,9 +18,9 @@ "gadgets-export": "Äxpottehre", "gadgets-export-title": "Gadgets expotteere", "gadgets-not-found": "Gadget „$1“ nit jefonge.", - "gadgets-export-text": "Öm dat Gadget „$1“ ze expotteere, donn op dä Knopp „{{int:gadgets-export-download}}“ klecke, un donn dann de eronger jelaade Dattei faßhallde. Dann jangk en dat Wiki, woh De dat empotteere wells, un doh op die Extrasigg Spezial:Import, un donn se huh laade. Dann deihs De en däm Wiki op dä Sigg MediaWiki:Gadgets-definition dat heh dobei:\n
    $2
    \nDo moß en däm Wiki de nüüdijje Rääschde han, och dat Rääsch, aan Täxte un Nohreeschte vum Systeem ze ändere, un et Empoteere vun huhjelaade Dateije moß zohjelohße sin.", - "gadgets-export-download": "Eronger laade", + "gadgets-export-text": "Öm dat Gadget „$1“ ze expotteere, donn op dä Knopp „{{int:gadgets-export-download}}“ klecke, un donn dann de eronger jelaade Dattei faßhallde. Dann jangk en dat Wiki, woh De dat empotteere wells, un doh op di {{int:specialpage}} Spezial:Import, un donn se huh laade. Dann deihs De en däm Wiki op dä Sigg MediaWiki:Gadgets-definition dat heh dobei:\n
    $2
    \nDo moß en däm Wiki de nüüdijje Rääschde han, och dat Rääsch, aan Täxte un Nohreeschte vum Systeem ze ändere, un et Empoteere vun huhjelaade Dateije moß zohjelohße sin.", + "gadgets-export-download": "Eronger lahde", "apihelp-query+gadgetcategories-param-names": "Nahme vun dä Saachjroppe zom Holle.", "apihelp-query+gadgetcategories-example-2": "Holl alle Aanjahbe övver de Saachjroppe met dä Nahme „foo“ un „bar“.", - "apihelp-query+gadgets-param-prop": "What gadget information to get:\n;id:Internal gadget ID.\n;metadata:The gadget metadata.\n;desc:Gadget description transformed into HTML (can be slow, use only if really needed).\n" + "apihelp-query+gadgets-param-prop": "What gadget information ze holle:\n;id:Internal gadget Kännong.\n;metadata:De gadget Mettadahte.\n;desc:Gadget description ömjewandelld en HTML. Weil et lahm es un lang bruch, donn dat blohß, wann nühdesch.\n" } diff --git a/extensions/Gadgets/i18n/lb.json b/extensions/Gadgets/i18n/lb.json index 65310c13..fdd5bac6 100644 --- a/extensions/Gadgets/i18n/lb.json +++ b/extensions/Gadgets/i18n/lb.json @@ -22,5 +22,9 @@ "gadgets-export-text": "Fir de Gadget $1 z'exportéieren klickt w.e.g. op de(n) \"{{int:gadgets-export-download}}\"-Knäppchen, späichert den erofgelueden Fichier, gitt op Spezial:Import op der Zil-Wiki a luet en do erop. Duerno setzt der op d'MediaWiki:Gadgets-Definitiouns Säit dëst derbäi:
    $2
    \nDir musst déi erfuerdert Rechter(inklusiv d'Recht fir Systemmessagen z'änneren) op der Zil-Wiki hunn an den Import vun eropgelueden Fichiere muss ageschalt sinn.", "gadgets-export-download": "Eroflueden", "apihelp-query+gadgets-param-allowedonly": "Nëmme Gadgeten opzielen déi fir den aktuelle Benotzer erlaabt sinn.", - "apihelp-query+gadgets-example-5": "D'Lëscht vun de Gadgete kréien déi den aktuelle Benotzer aktivéiert huet" + "apihelp-query+gadgets-example-5": "D'Lëscht vun de Gadgete kréien déi den aktuelle Benotzer aktivéiert huet", + "right-gadgets-edit": "JavaScript- an CSS-Säite vu Gadgeten änneren", + "action-gadgets-edit": "dëse JavaScript oder dës CSS-Säit vum Gadget änneren", + "right-gadgets-definition-edit": "Definitioune vu Gadgeten änneren", + "action-gadgets-definition-edit": "dës Definitioun vum Gadget änneren" } diff --git a/extensions/Gadgets/i18n/lt.json b/extensions/Gadgets/i18n/lt.json index 2eb8a066..68786537 100644 --- a/extensions/Gadgets/i18n/lt.json +++ b/extensions/Gadgets/i18n/lt.json @@ -3,7 +3,8 @@ "authors": [ "Eitvys200", "Homo", - "Vpovilaitis" + "Vpovilaitis", + "Albertas" ] }, "gadgets-desc": "Leidžia naudotojams pasirinkti savo [[Special:Gadgets|CSS ir JavaScript priemones]] jų [[Special:Preferences#mw-prefsection-gadgets|nustatymuose]]", @@ -13,8 +14,33 @@ "gadgets-title": "Priemonės", "gadgets-pagetext": "Žemiau yra sąrašas specialių priemonių, kurias naudotojai gali įjungti savo [[Special:Preferences#mw-prefsection-gadgets|nustatymų puslapyje]]. Jos apibūdintos [[MediaWiki:Gadgets-definition|priemonių aprašyme]]. Ši apžvalga suteikia lengvą priėjimą prie sisteminių pranešimų puslapių, kuriuose pateiktas kiekvienos priemonės trumpas aprašas ir kodas.", "gadgets-uses": "Panaudojimai", + "gadgets-required-rights": "{{PLURAL:$2|Reikalinga ši teisė|Reikalingos šios teisės}}:\n\n$1", + "gadgets-required-skins": "Prieinama {{PLURAL:$2|$1 stiliuje|šiuose stiliuose: $1}}.", + "gadgets-default": "Įgalinti visiems pagal nutylėjimą.", + "gadgets-legacy": "Priemonės nėra įkeltos. Prašome migruoti prie ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Sužinoti daugiau])", "gadgets-export": "Eksportas", - "gadgets-export-title": "Įtaiso eksportas", + "gadgets-export-title": "Priemonių eksportas", "gadgets-not-found": "Įtaisas \" $1 \" nerastas.", - "gadgets-export-download": "Parsisiųsti" + "gadgets-export-text": "Norėdami eksportuoti $1 įrankį, paspauskite \"{{int:gadgets-export-download}}\" mygtuką, išsisaugokite atisiųstą failą,\nnueikite į Special:Import tikslo vikyje ir įkelkite jį. Tada pridėkite MediaWiki:Gadgets-definition puslapį:\n
    $2
    \nTurite turÄ—ti atitinkamas teises tikslo vikyje (įskaitant teisÄ™ redaguoti sistemines žinutes) ir importavimas iÅ¡ įkeltų failų turi bÅ«ti aktyvuotas.", + "gadgets-export-download": "Parsisiųsti", + "apihelp-query+gadgetcategories-description": "Grąžina įrankių kategorijų sÄ…raÅ¡Ä….", + "apihelp-query+gadgetcategories-param-prop": "Kurių įrankių kategorijų informacijÄ… gauti:\n;name:Vidinis kategorijos vardas.\n;title:Kategorijos pavadinimas.\n;members:Ä®rankių skaiÄius kategorijoje.", + "apihelp-query+gadgetcategories-param-names": "Vardai kategorijų, kurias gauti.", + "apihelp-query+gadgetcategories-example-1": "Gauti sÄ…raÅ¡Ä… egzistuojanÄių įrankių kategorijų", + "apihelp-query+gadgetcategories-example-2": "Gauti visÄ… informacijÄ… apie kategorijas pavadintas \"foo\" ir \"bar\"", + "apihelp-query+gadgets-description": "Grąžina sÄ…raÅ¡Ä… įrankių, naudojamų Å¡iame vikyje.", + "apihelp-query+gadgets-param-prop": "KuriÄ… įrankių informacijÄ… gauti:\n;id:Vidinis įrankio ID.\n;metadata:Ä®rankio metaduomenys.\n;desc:Ä®rankio apraÅ¡ymas transformuotas į HTML (gali veikti lÄ—tai, naudoti tik jeigu iÅ¡ tiesų reikia).", + "apihelp-query+gadgets-param-categories": "IÅ¡ kurių kategorijų gauti įrankius.", + "apihelp-query+gadgets-param-ids": "ID įrankių, kuriuos gauti.", + "apihelp-query+gadgets-param-allowedonly": "SÄ…raÅ¡as įrankių, kuriuos leisti dabartiniam naudotojui.", + "apihelp-query+gadgets-param-enabledonly": "Rodyti tik įrankius aktyvuotus dabartinio naudotojo.", + "apihelp-query+gadgets-example-1": "Gauti įrankių su jų apraÅ¡ymais sÄ…raÅ¡Ä…", + "apihelp-query+gadgets-example-2": "Gauti įrankių su visomis galimomis parinktimis sÄ…raÅ¡Ä…", + "apihelp-query+gadgets-example-3": "Gauti įrankių, priklausanÄių kategorijai \"foo\", sÄ…raÅ¡Ä…", + "apihelp-query+gadgets-example-4": "Gauti informacijÄ… apie įrankius \"foo\" ir \"bar\"", + "apihelp-query+gadgets-example-5": "Gauti įrankių, aktyvuotų dabartinio naudotojo, sÄ…raÅ¡Ä…", + "right-gadgets-edit": "Redaguoti įrankio JavaScript ir CSS puslapius", + "action-gadgets-edit": "redaguoti Å¡io įrankio JavaScript arba CSS puslapį", + "right-gadgets-definition-edit": "Redaguoti įrankių apibrėžimus", + "action-gadgets-definition-edit": "redaguoti Å¡io įrankio apibrėžimÄ…" } diff --git a/extensions/Gadgets/i18n/mk.json b/extensions/Gadgets/i18n/mk.json index 6c86a47d..4e938038 100644 --- a/extensions/Gadgets/i18n/mk.json +++ b/extensions/Gadgets/i18n/mk.json @@ -15,6 +15,7 @@ "gadgets-required-rights": "{{PLURAL:$2|Го бара Ñледново право|Ги бара Ñледниве права}}:\n\n$1", "gadgets-required-skins": "ДоÑтапно во {{PLURAL:$2|рувото $1|Ñледниве рува: $1}}.", "gadgets-default": "ДоÑтапно за Ñите по оÑновно", + "gadgets-legacy": "Ðлатката не е вчитана. ПреÑелете Ñе на „Вчитувач на реÑурÑи“ (ResourceLoader). ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Дознајте повеќе])", "gadgets-export": "Извези", "gadgets-export-title": "Извоз на алатка", "gadgets-not-found": "Ðлатката „$1“ не е пронајдена.", @@ -35,5 +36,9 @@ "apihelp-query+gadgets-example-2": "Дај ÑпиÑок на алатки Ñо Ñите можни ÑвојÑтва", "apihelp-query+gadgets-example-3": "Дај ÑпиÑок на алатки што è припаѓаат на категоријата „foo“", "apihelp-query+gadgets-example-4": "Дај информации за алатките „foo“ и „bar“", - "apihelp-query+gadgets-example-5": "Дај ÑпиÑок на алатки што ги има вклучено тековниот кориÑник." + "apihelp-query+gadgets-example-5": "Дај ÑпиÑок на алатки што ги има вклучено тековниот кориÑник.", + "right-gadgets-edit": "Менување на JavaScript- и CSS-Ñтраниците на алатка", + "action-gadgets-edit": "менување на JavaScript- и CSS-Ñтраниците на алатка", + "right-gadgets-definition-edit": "Менување на определбите на алатка", + "action-gadgets-definition-edit": "менување на определбата на оваа алатка" } diff --git a/extensions/Gadgets/i18n/nap.json b/extensions/Gadgets/i18n/nap.json new file mode 100644 index 00000000..c616ba4a --- /dev/null +++ b/extensions/Gadgets/i18n/nap.json @@ -0,0 +1,44 @@ +{ + "@metadata": { + "authors": [ + "C.R.", + "Сербијана" + ] + }, + "gadgets-desc": "Lassa scegliere a l'utente 'e [[Special:Gadgets|gadget CSS e JavaScript]] personalizzate int' 'e [[Special:Preferences#mw-prefsection-gadgets|preferenze]] 'e lloro", + "prefs-gadgets": "Gadget", + "gadgets-prefstext": "Ccà sotto sta n'elenco 'e gadget speciale ca putite appiccià p' 'o cunto vuosto. Sti gadget songo 'a cchiù parte basate 'n JavaScript, allora 'o JavaScript avess'a essere appicciato dint' 'o browser vuosto pe' pute faticà cu cheste.\nVedite buono ca sti gadget nun farranno affette int'a sta paggena 'e preferenze.\n\nVedite pure ca sti gadget speciale nun songo parte d' 'o software MediaWiki, e songo normalmente sviluppate e accunciate 'a ll'utente d' 'a wiki lucale d' 'a vosta. Ll'editore lucale putesser'edità [[MediaWiki:Gadgets-definition|definiziune]] e [[Special:Gadgets|descrizziune]] d' 'e gadget a disposiziona.", + "gadgets": "Gadget", + "gadgets-title": "Gadget", + "gadgets-pagetext": "Ccà abbascio nce sta n'elenco d' 'e gadget speciale pe' putè n'utente appiccià int' 'a [[Special:Preferences#mw-prefsection-gadgets|paggena 'e mpustaziune d' 'a soja]], comme è definito p' 'e [[MediaWiki:Gadgets-definition|definiziune]].\nStu riepilego ve dasse n'accesso semprice dint' 'o sistema 'e paggene 'e mmasciata ca definissero descrizione e codece pe' ogne gadget.", + "gadgets-uses": "Ause", + "gadgets-required-rights": "Addimanna {{PLURAL:$2|deritto|deritte}}:\n\n$1", + "gadgets-required-skins": "Disponibbele ncopp' 'a {{PLURAL:$2|$1 'o skin|'e skin ccà: $1}}.", + "gadgets-default": "Appicciato pe' tuttuquante predefinito.", + "gadgets-legacy": "'O gadget nun è carrecato. Pe' piacere migrate a ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Liggite 'e cchiù])", + "gadgets-export": "Aspurtà", + "gadgets-export-title": "Esporta 'u gadget", + "gadgets-not-found": "Gadget \"$1\" nun truvato.", + "gadgets-export-text": "Pe esportà 'o $1 gadget, cliccate ncopp' 'u buttone \"{{int:gadgets-export-download}}\", riggistrate 'u file scarrecato, ghiate 'a pàggene Special:Import ncopp' 'a Wiki 'e destinaziona e carrecatevello. Pò azzeccate 'a paggena ccà MediaWiki:Gadgets-definition:\n
    $2
    \nAvita tenè permesse ghiuste ncopp' 'a wiki 'e destinaziona (ncludenno 'e deritte 'e cagnà mmasciate d' 'o sistema) e 'a mpurtaziona 'e file carrecate adda essere appicciata.", + "gadgets-export-download": "Scarreca", + "apihelp-query+gadgetcategories-description": "Torna arreto n'elenco 'e categurìe 'e gadget.", + "apihelp-query+gadgetcategories-param-prop": "Quala nfurmaziona 'e categurìa 'e gadget piglià:\n;name:Nomme nterno 'e categurìa.\n;title:Titulo 'e categuria.\n;members:Nummero 'e gadget int'a sta categurìa.", + "apihelp-query+gadgetcategories-param-names": "Nomme r' 'e categurìe a turnà.", + "apihelp-query+gadgetcategories-example-1": "Piglia n'elenco 'e categurìe esistente 'e gadget", + "apihelp-query+gadgetcategories-example-2": "Piglia tutt' 'a nfurmazione ncopp' 'e categurìa chiammate \"foo\" e \"bar\"", + "apihelp-query+gadgets-description": "Tòrna arreto n'elenco 'e gadget ausate dint'a sta wiki.", + "apihelp-query+gadgets-param-prop": "Quala nfurmaziona d' 'o gadget se piglià:\n;id:ID interno d' 'o gadget.\n;metadata:Metadata d' 'o gadget.\n;desc:Descriziona d' 'o gadget scagnata a HTML (putesse essere lento, s'adda ausà surtanto si nce servesse).", + "apihelp-query+gadgets-param-categories": "Gadget 'e quale categurìa a turnà.", + "apihelp-query+gadgets-param-ids": "ID o gadget a turnà.", + "apihelp-query+gadgets-param-allowedonly": "Elenca surtanto gadget premmesse a ll'utente 'e mmò.", + "apihelp-query+gadgets-param-enabledonly": "Elenca surtanto 'e gadget appicciate 'a ll'utente 'e mò.", + "apihelp-query+gadgets-example-1": "Piglia n'elenco 'e gadget nzieme ch' 'e chiacchiere r' 'e soje", + "apihelp-query+gadgets-example-2": "Piglia n'elenco 'e gadget cu tutt' 'e possibilità pussibbele.", + "apihelp-query+gadgets-example-3": "Piglia n'elenco 'e gadged c'apparteneno alla categurìa \"foo\"", + "apihelp-query+gadgets-example-4": "Piglia nfurmaziune ncopp' 'e gadget \"foo\" e \"bar\"", + "apihelp-query+gadgets-example-5": "Piglia n'elenco 'e gadget appicciate 'a ll'utente 'e mò", + "right-gadgets-edit": "Cagna 'o gadget JavaScript e li paggene CSS", + "action-gadgets-edit": "cagna stu gadget JavaScript o paggena CSS", + "right-gadgets-definition-edit": "Cagna 'e definiziune 'e gadget", + "action-gadgets-definition-edit": "cagna 'e stu gadget 'a definiziona" +} diff --git a/extensions/Gadgets/i18n/ne.json b/extensions/Gadgets/i18n/ne.json index 57c00c08..42ff3a95 100644 --- a/extensions/Gadgets/i18n/ne.json +++ b/extensions/Gadgets/i18n/ne.json @@ -2,15 +2,16 @@ "@metadata": { "authors": [ "Bhawani Gautam", - "Nirmal Dulal" + "Nirmal Dulal", + "राम पà¥à¤°à¤¸à¤¾à¤¦ जोशी" ] }, "gadgets-desc": "पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ [[Special:Preferences#mw-prefsection-gadgets|अभिरà¥à¤šà¤¿ अनà¥à¤¸à¤¾à¤°]] [[Special:Gadgets|CSS र जाभासà¥à¤•à¥à¤°à¥€à¤ªà¥à¤Ÿ उपकरणहरू]] छानà¥à¤¨ दिनà¥à¤¹à¥‹à¤¸", "prefs-gadgets": "उपकरणहरू", - "gadgets-prefstext": "विशेष उपकरणहरूको सूची तल दिइà¤à¤•à¥‹à¤› तपाईंले आफà¥à¤¨à¥‹ खातामा सकà¥à¤°à¤¿à¤¯ पारà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤\nपà¥à¤°à¤¾à¤¯ सबै उपकरणहरू जाभासà¥à¤•à¥à¤°à¥€à¤ªà¥à¤Ÿà¤®à¤¾ आधारित छनà¥, यस कारण बà¥à¤°à¤¾à¤‰à¤œà¤°à¤®à¤¾ काम गराउनको लागि जाभासà¥à¤•à¥à¤°à¥€à¤ªà¥à¤Ÿà¤²à¤¾à¤ˆ सकà¥à¤°à¤¿à¤¯ गरà¥à¤¨à¥ परà¥à¤›à¥¤\nयाद राखà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ती उपकरणहरूले अभिरà¥à¤šà¤¿ पृषà¥à¤ à¤®à¤¾ असर गरà¥à¤¦à¥ˆà¤¨à¤¨à¥à¥¤\nयो पनि याद राखà¥à¤¹à¥‹à¤¸à¥ यी विशेष उपकरणहरू मीडिया विकि सफà¥à¤Ÿà¤µà¥‡à¤¯à¤°à¤­à¤¿à¤¤à¥à¤° परà¥à¤¦à¥ˆà¤¨à¤¨à¥ र पà¥à¤°à¤¾à¤¯ सà¥à¤¥à¤¾à¤¨à¥€à¤¯ विकि पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¹à¤°à¥à¤²à¥‡ विकास यसको विकास र सञà¥à¤šà¤¾à¤²à¤¨ गरà¥à¤¦à¤›à¤¨à¥à¥¤ सà¥à¤¥à¤¾à¤¨à¥€à¤¯ पà¥à¤°à¤¬à¤¨à¥à¤§à¤•à¤¹à¤°à¥‚ले उपलबà¥à¤§ उपकरणहरूका [[MediaWiki:Gadgets-definition|परिभाषाहरू]] र [[Special:Gadgets|विवरणहरू]] समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¦à¤›à¤¨à¥à¥¤", + "gadgets-prefstext": "विशेष उपकरणहरूको सूची तल दिइà¤à¤•à¥‹à¤› तपाईंले आफà¥à¤¨à¥‹ खातामा सकà¥à¤°à¤¿à¤¯ पारà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤\nपà¥à¤°à¤¾à¤¯ सबै उपकरणहरू जाभासà¥à¤•à¥à¤°à¥€à¤ªà¥à¤Ÿà¤®à¤¾ आधारित छनà¥, यस कारण बà¥à¤°à¤¾à¤‰à¤œà¤°à¤®à¤¾ काम गराउनको लागि जाभासà¥à¤•à¥à¤°à¥€à¤ªà¥à¤Ÿà¤²à¤¾à¤ˆ सकà¥à¤°à¤¿à¤¯ गरà¥à¤¨à¥ परà¥à¤›à¥¤\nयाद राखà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ती उपकरणहरूले अभिरà¥à¤šà¤¿ पृषà¥à¤ à¤®à¤¾ असर गरà¥à¤¦à¥ˆà¤¨à¤¨à¥à¥¤\nयो पनि याद राखà¥à¤¹à¥‹à¤¸à¥ यी विशेष उपकरणहरू मीडिया विकि सफà¥à¤Ÿà¤µà¥‡à¤¯à¤°à¤­à¤¿à¤¤à¥à¤° परà¥à¤¦à¥ˆà¤¨à¤¨à¥ र पà¥à¤°à¤¾à¤¯ सà¥à¤¥à¤¾à¤¨à¥€à¤¯ विकि पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¹à¤°à¥‚ले यसको विकास र सञà¥à¤šà¤¾à¤²à¤¨ गरà¥à¤¦à¤›à¤¨à¥à¥¤ \nसà¥à¤¥à¤¾à¤¨à¥€à¤¯ पà¥à¤°à¤¬à¤¨à¥à¤§à¤•à¤¹à¤°à¥‚ले उपलबà¥à¤§ उपकरणहरूका [[MediaWiki:Gadgets-definition|परिभाषाहरू]] र [[Special:Gadgets|विवरणहरू]] समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¦à¤›à¤¨à¥à¥¤", "gadgets": "उपकरणहरू", "gadgets-title": "उपकरणहरू", - "gadgets-pagetext": "विशेष उपकरणहरà¥à¤•à¥‹ सूची तल दिइà¤à¤•à¥‹à¤› पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¹à¤°à¥à¤²à¥‡ [[MediaWiki:Gadgets-definition|परिभाषाहरà¥]]मा जनाठअनà¥à¤¸à¤¾à¤° आफà¥à¤¨à¥‹ [[Special:Preferences#mw-prefsection-gadgets|अभिरà¥à¤šà¤¿ पृषà¥à¤ à¤®à¤¾]], सकà¥à¤°à¤¿à¤¯ पारà¥à¤¨ सकà¥à¤¨à¥‡à¤›à¤¨à¥à¥¤à¥¤\nयस सिंहावलोकनले पà¥à¤°à¤£à¤¾à¤²à¥€ सनà¥à¤¦à¥‡à¤¶ पृषà¥à¤  सजिलै पà¥à¤°à¤¾à¤ªà¥à¤¤ गरà¥à¤¨ सकिनेछ जसले पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• उपकरणको विवरण र कोडलाई परिभाषित गरेको छ।", + "gadgets-pagetext": "विशेष उपकरणहरूको सूची तल दिइà¤à¤•à¥‹à¤› पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¹à¤°à¥‚ले [[MediaWiki:Gadgets-definition|परिभाषाहरू]]मा जनाठअनà¥à¤¸à¤¾à¤° आफà¥à¤¨à¥‹ [[Special:Preferences#mw-prefsection-gadgets|अभिरà¥à¤šà¤¿ पृषà¥à¤ à¤®à¤¾]], सकà¥à¤°à¤¿à¤¯ पारà¥à¤¨ सकà¥à¤¨à¥‡à¤›à¤¨à¥à¥¤à¥¤\nयस सिंहावलोकनले पà¥à¤°à¤£à¤¾à¤²à¥€ सनà¥à¤¦à¥‡à¤¶ पृषà¥à¤  सजिलै पà¥à¤°à¤¾à¤ªà¥à¤¤ गरà¥à¤¨ सकिनेछ जसले पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• उपकरणको विवरण र कोडलाई परिभाषित गरेको छ।", "gadgets-uses": "पà¥à¤°à¤¯à¥‹à¤—हरà¥", "gadgets-required-rights": "आवशà¥à¤¯à¤•à¤¤à¤¾ छ {{PLURAL:$2|$1 अधिकारको|निमà¥à¤¨ अधिकारहरà¥à¤•à¥‹: $1}}.", "gadgets-default": "सबैको निमà¥à¤¤à¤¿ सà¥à¤°à¥à¤¦à¥‡à¤–ि नैं सकà¥à¤°à¤¿à¤¯ छ।", diff --git a/extensions/Gadgets/i18n/nl.json b/extensions/Gadgets/i18n/nl.json index a5981fb7..27a869a9 100644 --- a/extensions/Gadgets/i18n/nl.json +++ b/extensions/Gadgets/i18n/nl.json @@ -3,7 +3,8 @@ "authors": [ "Annabel", "SPQRobin", - "Siebrand" + "Siebrand", + "Esketti" ] }, "gadgets-desc": "Laat gebruikers [[Special:Gadgets|CSS en JavaScripts]] activeren in hun [[Special:Preferences#mw-prefsection-gadgets|voorkeuren]]", @@ -20,5 +21,21 @@ "gadgets-export-title": "Uitbreiding exporteren", "gadgets-not-found": "Uitbreiding \"$1\" niet gevonden.", "gadgets-export-text": "Klik op de knop \"{{int:gadgets-export-download}}\" om de uitbreiding \"$1\" te exporteren.\nSla daarna het gedownloade bestand op.\nGa naar \"Special:Import\" in de doelwiki en upload het geëxporteerde bestand.\nVoeg daarna het volgende toe aan de pagina \"MediaWiki:Gadgets-definition\":\n
    $2
    \nU moet de juiste rechten hebben op de doelwiki, inclusief het recht om bewerkingen te maken aan de systeemberichten, en importeren uit bestanden moet ingeschakeld zijn.", - "gadgets-export-download": "Downloaden" + "gadgets-export-download": "Downloaden", + "apihelp-query+gadgetcategories-description": "Het resultaat is een lijst van gadget categorieën.", + "apihelp-query+gadgetcategories-param-prop": "Wat gadget categorie informatie te krijgen:\n;naam:Interne naam van de categorie.\n;titel:Categorie titel.\n;leden:Aantal gadgets in de categorie.", + "apihelp-query+gadgetcategories-param-names": "Namen van categorieën op te halen.", + "apihelp-query+gadgetcategories-example-1": "Een lijst van bestaande gadget categorieën", + "apihelp-query+gadgetcategories-example-2": "Alle informatie opvragen over categorieën met de naam \"foo\" en \"bar\"", + "apihelp-query+gadgets-description": "Het resultaat is een lijst van gadgets gebruikt op deze wiki.", + "apihelp-query+gadgets-param-prop": "Wat gadget informatie te krijgen:\n;id:Interne gadget ID.\n;metadata:De gadget metadata.\n;desc:Gadget beschrijving omgezet in HTML (kan traag zijn, alleen gebruiken als het echt nodig is).", + "apihelp-query+gadgets-param-categories": "Gadgets uit welke categorieën op te halen.", + "apihelp-query+gadgets-param-ids": "Id ' s van de gadgets te halen.", + "apihelp-query+gadgets-param-allowedonly": "Lijst alleen gadgets toegestaan om de huidige gebruiker.", + "apihelp-query+gadgets-param-enabledonly": "Lijst van gadgets die zijn ingeschakeld door de huidige gebruiker.", + "apihelp-query+gadgets-example-1": "Voor een lijst van gadgets, samen met hun beschrijvingen", + "apihelp-query+gadgets-example-2": "Voor een lijst van gadgets met alle mogelijke eigenschappen", + "apihelp-query+gadgets-example-3": "Voor een lijst van gadgets die behoren tot de categorie \"foo\"", + "apihelp-query+gadgets-example-4": "Informatie krijgen over gadgets \"foo\" en \"bar\"", + "apihelp-query+gadgets-example-5": "Voor een lijst van gadgets die zijn ingeschakeld door de huidige gebruiker" } diff --git a/extensions/Gadgets/i18n/olo.json b/extensions/Gadgets/i18n/olo.json new file mode 100644 index 00000000..dcd23fbc --- /dev/null +++ b/extensions/Gadgets/i18n/olo.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "prefs-gadgets": "Programmazet", + "gadgets": "Programmazet", + "gadgets-title": "Programmazet", + "gadgets-uses": "Käyttäy", + "gadgets-export": "Vie", + "gadgets-export-title": "Programmazen viendy", + "gadgets-not-found": "Programmastu \"$1\" ei löydynyh." +} diff --git a/extensions/Gadgets/i18n/pl.json b/extensions/Gadgets/i18n/pl.json index 32ff8f77..a10a9cba 100644 --- a/extensions/Gadgets/i18n/pl.json +++ b/extensions/Gadgets/i18n/pl.json @@ -6,7 +6,8 @@ "Marcin Åukasz Kiejzik", "Matma Rex", "Sovq", - "Sp5uhe" + "Sp5uhe", + "Peter Bowman" ] }, "gadgets-desc": "Pozwala użytkownikom wybrać [[Special:Gadgets|gadżety CSS i JavaScript]] na [[Special:Preferences#mw-prefsection-gadgets|stronie preferencji]]", @@ -23,5 +24,9 @@ "gadgets-export-title": "Eksportowanie gadżetów", "gadgets-not-found": "Nie odnaleziono gadżetu „$1â€.", "gadgets-export-text": "JeÅ›li chcesz wyeksportować gadżet „$1†kliknij na przycisk „{{int:gadgets-export-download}}â€, zapisz pobrany plik, wejdź na stronÄ™ „Special:Import†w docelowej wiki i przeÅ›lij go. NastÄ™pnie dodaj poniższy kod do strony MediaWiki:Gadgets-definition:\n
    $2
    \nMusisz mieć wÅ‚aÅ›ciwe uprawnienia na wiki docelowej (w tym do edycji komunikatów systemowych) oraz musi być wÅ‚Ä…czony import na serwer poprzez przesÅ‚anie pliku.", - "gadgets-export-download": "Pobierz" + "gadgets-export-download": "Pobierz", + "right-gadgets-edit": "Edycja gadżetów JavaScript oraz stron CSS", + "action-gadgets-edit": "edytowania tego gadżetu JavaScript lub strony CSS", + "right-gadgets-definition-edit": "Edycja definicji gadżetów", + "action-gadgets-definition-edit": "edytowania tej definicji gadżetu" } diff --git a/extensions/Gadgets/i18n/pt-br.json b/extensions/Gadgets/i18n/pt-br.json index 8027d29a..c764d472 100644 --- a/extensions/Gadgets/i18n/pt-br.json +++ b/extensions/Gadgets/i18n/pt-br.json @@ -7,12 +7,13 @@ "Helder.wiki", "Rafael Vargas", "555", - "He7d3r" + "He7d3r", + "Teles" ] }, "gadgets-desc": "Permite que os usuários selecionem [[Special:Gadgets|\"gadgets\" JavaScript e CSS]] personalizados nas suas [[Special:Preferences#mw-prefsection-gadgets|preferências]]", "prefs-gadgets": "Gadgets", - "gadgets-prefstext": "Segue-se uma lista de \"gadgets\" que podem ser ativados em sua conta.\nTais gadgets normalmente são baseados em JavaScript, o que faz com que seja necessário que o suporte a JavaScript esteja ativado em seu navegador para que os mesmos funcionem.\nNote que os gadgets não possuem efeito nesta página (a página de preferências).\n\nRepare também que tais gadgets não são parte do software MediaWiki, geralmente sendo desenvolvidos e mantidos por usuários de seu wiki local.\nAdministradores locais podem editar os gadgets disponíveis através de [[MediaWiki:Gadgets-definition|definições]] e [[Special:Gadgets|descrições]].", + "gadgets-prefstext": "Segue-se uma lista de \"gadgets\" que podem ser ativados em sua conta.\nTais gadgets normalmente são baseados em JavaScript, o que faz com que seja necessário que o suporte a JavaScript esteja ativado em seu navegador para que eles funcionem.\nNote que os gadgets não possuem efeito nesta página (a página de preferências).\n\nRepare também que tais gadgets não são parte do software MediaWiki, geralmente sendo desenvolvidos e mantidos por usuários de seu wiki local.\nAdministradores locais podem editar os gadgets disponíveis através de [[MediaWiki:Gadgets-definition|definições]] e [[Special:Gadgets|descrições]].", "gadgets": "Gadgets", "gadgets-title": "Gadgets", "gadgets-pagetext": "Segue-se uma lista de \"gadgets\" que podem ser ativados pelos usuários através de [[Special:Preferences#mw-prefsection-gadgets|suas páginas de preferências]], definidos em [[MediaWiki:Gadgets-definition|suas definições]].\nEsta lista possibilita um acesso fácil para as mensagens de sistema que definem as descrições e códigos de cada um dos gadgets.", diff --git a/extensions/Gadgets/i18n/qqq.json b/extensions/Gadgets/i18n/qqq.json index 9fe59aea..011bba6d 100644 --- a/extensions/Gadgets/i18n/qqq.json +++ b/extensions/Gadgets/i18n/qqq.json @@ -26,6 +26,7 @@ "gadgets-required-rights": "Parameters:\n* $1 - a list in wikitext.\n* $2 - the number of items in list $1 for PLURAL use.", "gadgets-required-skins": "Parameters:\n* $1 - a comma separated list.\n* $2 - the number of items in list $1 for PLURAL use.", "gadgets-default": "Used in [[Special:Gadgets]], if the extension is enabled for everyone by the Wiki's default settings.", + "gadgets-legacy": "Used on [[Special:Gadgets]], if the extension contains legacy scripts and doesn't use ResourceLoader yet.", "gadgets-export": "Used on [[Special:Gadgets]]. This is a verb, not noun.\n{{Identical|Export}}", "gadgets-export-title": "Used as page title. Example: [[Special:Gadgets/export/editbuttons]]", "gadgets-not-found": "Used as error message. Parameters:\n* $1 - gadget name", @@ -46,5 +47,9 @@ "apihelp-query+gadgets-example-2": "{{doc-apihelp-example|query+gadgets}}", "apihelp-query+gadgets-example-3": "{{doc-apihelp-example|query+gadgets}}", "apihelp-query+gadgets-example-4": "{{doc-apihelp-example|query+gadgets}}", - "apihelp-query+gadgets-example-5": "{{doc-apihelp-example|query+gadgets}}" + "apihelp-query+gadgets-example-5": "{{doc-apihelp-example|query+gadgets}}", + "right-gadgets-edit": "{{doc-right|gadgets-edit}}", + "action-gadgets-edit": "{{doc-action|gadgets-edit}}", + "right-gadgets-definition-edit": "{{doc-right|gadgets-definition-edit}}", + "action-gadgets-definition-edit": "{{doc-action|gadgets-definition-edit}}" } diff --git a/extensions/Gadgets/i18n/ru.json b/extensions/Gadgets/i18n/ru.json index cf4d06ab..19e60465 100644 --- a/extensions/Gadgets/i18n/ru.json +++ b/extensions/Gadgets/i18n/ru.json @@ -9,7 +9,8 @@ "MaxSem", "VasilievVV", "ÐлекÑандр Сигачёв", - "Okras" + "Okras", + "NBS" ] }, "gadgets-desc": "ПозволÑет учаÑтникам выбирать в Ñвоих [[Special:Preferences#mw-prefsection-gadgets|наÑтройках]] те или иные [[Special:Gadgets|CSS- и JavaScript-гаджеты]]", @@ -28,8 +29,14 @@ "gadgets-export-text": "Ð”Ð»Ñ ÑкÑпорта гаджета $1, нажмите кнопку «{{int:gadgets-export-download}}», Ñохраните загруженный файл,\nперейдите на Ñтраницу Special:Import целевой вики и загрузите файл. Затем добавьте Ñледующие Ñтроки на Ñтраницу MediaWiki:Gadgets-definition:\n
    $2
    \nÐ’Ñ‹ должны иметь ÑоответÑтвующие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð² целевой вики (в том чиÑле право на редактирование ÑиÑтемных Ñообщений), также на Ñервере должна быть включена наÑтройка импорта из файлов.", "gadgets-export-download": "Скачать", "apihelp-query+gadgetcategories-description": "Возвращает ÑпиÑок категорий гаджетов.", + "apihelp-query+gadgetcategories-param-names": "ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÐ¼Ñ‹Ñ… категорий.", "apihelp-query+gadgetcategories-example-1": "Получить ÑпиÑок ÑущеÑтвующих категорий гаджетов", + "apihelp-query+gadgetcategories-example-2": "Получить вÑÑŽ информацию о категориÑÑ… Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми «Foo» и «Bar»", "apihelp-query+gadgets-description": "Возвращает ÑпиÑок гаджетов, иÑпользуемых в Ñтой вики.", "apihelp-query+gadgets-param-ids": "Идентификаторы гаджетов Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ.", - "apihelp-query+gadgets-example-5": "Получить ÑпиÑок гаджетов, включённых у данного учаÑтника" + "apihelp-query+gadgets-example-3": "Получить ÑпиÑок гаджетов в категории «foo»", + "apihelp-query+gadgets-example-4": "Получить информацию о гаджетах «foo» и «bar»", + "apihelp-query+gadgets-example-5": "Получить ÑпиÑок гаджетов, включённых у данного учаÑтника", + "right-gadgets-edit": "правка JavaScript- и CSS-Ñтраниц гаджетов", + "right-gadgets-definition-edit": "правка обÑуждений гаджетов" } diff --git a/extensions/Gadgets/i18n/sa.json b/extensions/Gadgets/i18n/sa.json index cd41edd5..411bfffc 100644 --- a/extensions/Gadgets/i18n/sa.json +++ b/extensions/Gadgets/i18n/sa.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Shubha" + "Shubha", + "NehalDaveND" ] }, "gadgets-desc": "योजकाः सà¥à¤µà¤¸à¥à¤¯ [[Special:Preferences#mw-prefsection-gadgets|इषà¥à¤Ÿà¤¤à¤®à¤¾à¤¨à¤¿]] इतà¥à¤¯à¤¤à¥à¤° [[Special:Gadgets|CSS जावालिपि-उपकरणं च]] चीयतामॠ।", @@ -13,10 +14,10 @@ "gadgets-uses": "उपयोगः", "gadgets-required-rights": "अधोनिरà¥à¤¦à¤¿à¤·à¥à¤Ÿà¤®à¥ अपेकà¥à¤·à¤¤à¥‡ {{PLURAL:$2|अधिकारः|अधिकारः}}:\n\n$1", "gadgets-required-skins": "उपलभà¥à¤¯à¤¤à¥‡ {{PLURAL:$2|$1 विनà¥à¤¯à¤¾à¤¸à¤ƒ|अधोनिरà¥à¤¦à¤¿à¤·à¥à¤Ÿà¤ƒ विनà¥à¤¯à¤¾à¤¸à¤ƒ: $1}}.", - "gadgets-default": "पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤¦à¤¿à¤·à¥à¤Ÿà¤°à¥‚पेण सरà¥à¤µà¥‡à¤·à¤¾à¤‚ कृते सकà¥à¤°à¤¿à¤¯à¤‚ विदà¥à¤¯à¤¤à¥‡à¥¤", + "gadgets-default": "यदभावे सरà¥à¤µà¥‡à¤·à¤¾à¤‚ कृते सकà¥à¤°à¤¿à¤¯à¤‚ विदà¥à¤¯à¤¤à¥‡ ।", "gadgets-export": "निरà¥à¤¯à¤¾à¤¤à¤ƒ", "gadgets-export-title": "उपकरणनिरà¥à¤¯à¤¾à¤¤à¤ƒ", "gadgets-not-found": "\"$1\" उपकरणं न पà¥à¤°à¤¾à¤ªà¥à¤¤à¤®à¥ ।", "gadgets-export-text": "$1 उपकरणसà¥à¤¯ निरà¥à¤¯à¤¾à¤¤à¤¾à¤¯ \"{{int:gadgets-export-download}}\" पिञà¥à¤œà¤ƒ नोदनीयः, अवारोपिता सञà¥à¤šà¤¿à¤•à¤¾ रकà¥à¤·à¥à¤¯à¤¤à¤¾à¤®à¥, लकà¥à¤·à¥à¤¯à¤µà¤¿à¤•à¥à¤¯à¤¾à¤‚ Special:Import पà¥à¤°à¤¤à¤¿ गमà¥à¤¯à¤¤à¤¾à¤®à¥ उपारोपà¥à¤¯à¤¤à¤¾à¤žà¥à¤š । ततà¥à¤ªà¤¶à¥à¤šà¤¾à¤¤à¥ MediaWiki:Gadgets-definition इतà¥à¤¯à¤¸à¥à¤®à¤¿à¤¨à¥ अधोनिरà¥à¤¦à¤¿à¤·à¥à¤Ÿà¤‚ योजà¥à¤¯à¤¤à¤¾à¤®à¥ :
    $2
    \nलकà¥à¤·à¥à¤¯à¤µà¤¿à¤•à¥à¤¯à¤¾à¤‚ भवतः उपà¥à¤¯à¥à¤•à¥à¤¤à¤¾à¤§à¤¿à¤•à¤¾à¤°à¤ƒ सà¥à¤¯à¤¾à¤¤à¥ (तनà¥à¤¤à¥à¤°à¤¸à¤¨à¥à¤¦à¥‡à¤¶à¤¸à¤®à¥à¤ªà¤¾à¤¦à¤¨à¤¸à¥à¤¯ अधिकारः अनà¥à¤¤à¤°à¥à¤­à¥‚तः) सञà¥à¤šà¤¿à¤•à¥‹à¤ªà¤°à¥‹à¤ªà¤£à¤¾à¤¤à¥ आयातः सकà¥à¤·à¤®à¤ƒ करणीयः", - "gadgets-export-download": "अवतारà¥à¤¯à¤¤à¤¾à¤®à¥" + "gadgets-export-download": "अवारोपà¥à¤¯à¤¤à¤¾à¤®à¥" } diff --git a/extensions/Gadgets/i18n/sah.json b/extensions/Gadgets/i18n/sah.json index 67ad9e2a..bef2aa75 100644 --- a/extensions/Gadgets/i18n/sah.json +++ b/extensions/Gadgets/i18n/sah.json @@ -5,11 +5,11 @@ ] }, "gadgets-desc": "БÑйÑлÑрин [[Special:Preferences#mw-prefsection-gadgets|туруорууларыгар]] кыттааччылар [[Special:Gadgets|CSS уонна JavaScript гаджеттары]] холбонуохтарын Ñөп.", - "prefs-gadgets": "Гаджеттар", - "gadgets-prefstext": "Ðллара аналлаах гаджеттар иÑпииһÑктÑÑ€Ñ ÐºÓ©Ñтөллөр. Балары бÑйÑÒ¥ бÑлиÑÑ‚Ñммит ааккынан киирÑн туһаныаххын Ñөп.\nБу үнүÑтүрүмүөннÑÑ€ үкÑүлÑÑ€Ñ JavaScript көмөтүнÑн үлÑлииллÑÑ€, онон туһаныаххын баҕарар буоллаххына JavaScript холбоо.\nБу гаджеттар туроуорууларгын уларытар ÑирÑйгÑÑ€ үлÑлÑÑбÑÑ‚Ñ‚Ñрин умнума.\n\nÓ¨ÑÑÓ© маны умнума: бу гаджеттар MediaWiki Ñорҕото буолбатахтар, кинилÑри кыттааччылар бÑйÑлÑÑ€Ñ Ð°Ð¹Ð°Ð»Ð»Ð°Ñ€ уонна көрөллөр-иÑÑ‚ÑллÑÑ€. Дьаһабыллар гаджеттар иÑпииһÑктÑрин [[MediaWiki:Gadgets-definition|быһаарыы ÑирÑйдÑÑ€]] уонна [[Special:Gadgets|ойуулуур ÑирÑйдÑÑ€]] көмөлөрүнÑн уларытыахтарын Ñөп.", - "gadgets": "Гаджеттар", - "gadgets-title": "Гаджеттар", - "gadgets-pagetext": "Манна [[MediaWiki:Gadgets-definition|быһаарыы ÑирÑйигÑÑ€]] Ñуруллубутун курдук [[Special:Preferences#mw-prefsection-gadgets|туруоруу ÑирÑйин]] көмөтүнÑн холбонуон Ñөптөөх гаджеттар тиһиктÑÑ€Ñ ÐºÓ©Ñ€Ð´Ó©Ñ€Ò¯Ð»Ò¯Ð½Ð½Ñ.\nЭтот ÑпиÑок позволÑет легко получить доÑтуп к Ñтраницам ÑиÑтемных Ñообщений, определÑющих опиÑÐ°Ð½Ð¸Ñ Ð¸ иÑходные коды гаджетов.", + "prefs-gadgets": "Ҕааддьыттар", + "gadgets-prefstext": "Ðллара аналлаах ҕаадьыттар иÑпииһÑктÑÑ€Ñ ÐºÓ©ÑÑ‚Ó©Ñ€. Балары бÑйÑÒ¥ бÑлиÑÑ‚Ñммит ааккынан киирÑн туһаныаххын Ñөп.\nБу Ñ‚ÑриллÑÑ€ үкÑүлÑÑ€Ñ JavaScript көмөтүнÑн үлÑлииллÑÑ€, онон туһаныаххын баҕарар буоллаххына JavaScript холбоо.\nБу ҕааддьыттар туроуорууларгын уларытар ÑирÑйгÑÑ€ үлÑлÑÑбÑÑ‚Ñ‚Ñрин умнума.\n\nÓ¨ÑÑÓ© маны умнума: бу ҕааддьыттар MediaWiki Ñорҕото буолбатахтар, кинилÑри кыттааччылар бÑйÑлÑÑ€Ñ Ð°Ð¹Ð°Ð»Ð»Ð°Ñ€ уонна көрөллөр-иÑÑ‚ÑллÑÑ€. Дьаһабыллар ҕааддьыттар иÑпииһÑктÑрин [[MediaWiki:Gadgets-definition|быһаарыы ÑирÑйдÑÑ€]] уонна [[Special:Gadgets|ойуулуур ÑирÑйдÑÑ€]] көмөлөрүнÑн уларытыахтарын Ñөп.", + "gadgets": "Ҕааддьыттар", + "gadgets-title": "Ҕааддьыттар", + "gadgets-pagetext": "Манна [[MediaWiki:Gadgets-definition|быһаарыы ÑирÑйигÑÑ€]] Ñуруллубутун курдук [[Special:Preferences#mw-prefsection-gadgets|туруоруу ÑирÑйин]] көмөтүнÑн холбонуон Ñөптөөх ҕааддьыттар тиһиликтÑÑ€Ñ ÐºÓ©Ñ€Ð´Ó©Ñ€Ò¯Ð»Ò¯Ð½Ð½Ñ.\nБу тиһилик ҕааддьыттар ойуулааһыннарын уонна иÑходниктарын быһаарар тиһик (ÑиÑтиÑмÑ) биллÑриилÑрин ÑирÑйдÑригÑÑ€ Ñудургутук киирÑри хааччыйар.", "gadgets-uses": "Туһанар", "gadgets-required-rights": "$2 бÑйÑбил (быраап) ирдÑнÑÑ€: «$1»", "gadgets-default": "Барыларыгар холбоно Ñылдьар.", diff --git a/extensions/Gadgets/i18n/shn.json b/extensions/Gadgets/i18n/shn.json new file mode 100644 index 00000000..0965d5d3 --- /dev/null +++ b/extensions/Gadgets/i18n/shn.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Saosukham" + ] + }, + "right-gadgets-edit": "ထá€á€ºá€¸ á¶á€­á€°á€„်ႈယွႆႈ JavaScript ဢိáµá€ºá‚‡ á¼á‚ƒá‚ˆá€œá€­áµá€ºá‚ˆ CSS", + "action-gadgets-edit": "ထá€á€ºá€¸ á¶á€­á€°á€„်ႈယွႆႈ JavaScript ဢမ်ႇá¼á¼á€º á¼á‚ƒá‚ˆá€œá€­áµá€ºá‚ˆ CSS", + "right-gadgets-definition-edit": "ထá€á€ºá€¸á¶á€±á‚ƒá‚ˆá€•á€­á€¯á€á€ºá‚‡á€šá€½á‚†á‚ˆ", + "action-gadgets-definition-edit": "ထá€á€ºá€¸á¶á€±á‚ƒá‚ˆá€•á€­á€¯á€á€ºá‚‡á€šá€½á‚†á‚ˆá¼á‚†á‚‰" +} diff --git a/extensions/Gadgets/i18n/sq.json b/extensions/Gadgets/i18n/sq.json index 94fb85d0..e9d38a17 100644 --- a/extensions/Gadgets/i18n/sq.json +++ b/extensions/Gadgets/i18n/sq.json @@ -3,14 +3,15 @@ "authors": [ "Mikullovci11", "Olsi", - "Vinie007" + "Vinie007", + "Ammartivari" ] }, "gadgets-desc": "Lejin përdoruesit të zgjedhin [[Special:Gadgets|CSS dhe JavaScript gadgets]] në [[Special:Preferences#mw-prefsection-gadgets|preferencat]] e tyre", - "prefs-gadgets": "Gadgets", + "prefs-gadgets": "Veglat", "gadgets-prefstext": "Më poshtë është një listë e mjeteve shtesë speciale që mund të aktivizohen për llogarinë tuaj.\nKëto mjete shtesë janë të bazuara kryesisht në JavaScript, pra JavaScript-i duhet aktivizuar në shfletuesin tuaj që ato të punojnë.\nVini re se këto mjete shtesë nuk do të kenë efekt në këtë faqe preferencash.\n\nGjithashtu vini re se këto mjete shtesë speciale nuk janë pjesë e softuerit MediaWiki, dhe zakonisht janë zhvilluar dhe mirëmbajtur nga përdoruesit në wiki-n tuaj lokal.\nAdministratorët lokalë mund t'i ndryshojnë [[MediaWiki:Gadgets-definition|përkufizimet]] dhe [[Special:Gadgets|përshkrimet]] e mjeteve shtesë të mundshme.", "gadgets": "Gadgets", - "gadgets-title": "Gadgets", + "gadgets-title": "Veglat", "gadgets-pagetext": "Më poshtë është një listë e mjeteve shtesë speciale që mund të aktivizohen në [[Special:Preferences#mw-prefsection-gadgets|faqen e preferencave]] të tyre, siç është përcaktuar nga [[MediaWiki:Gadgets-definition|përkufizimet]].\nKjo pasqyrë siguron qasje të lehtë në faqet e mesazheve të sistemit që përkufizon përshkrimin e çdo mjeti shtesë dhe kodin.", "gadgets-uses": "Përdorues", "gadgets-required-rights": "Kërkon {{PLURAL:$2|të drejtën|të drejtat}} e mëposhtme:\n\n$1", diff --git a/extensions/Gadgets/i18n/sr-ec.json b/extensions/Gadgets/i18n/sr-ec.json index d461600e..08f7e321 100644 --- a/extensions/Gadgets/i18n/sr-ec.json +++ b/extensions/Gadgets/i18n/sr-ec.json @@ -18,9 +18,14 @@ "gadgets-required-rights": "Захтева {{PLURAL:$2|Ñледеће право|Ñледећа права}}:\n\n$1", "gadgets-required-skins": "ДоÑтупно у {{PLURAL:$2|теми $1|Ñледећим темама: $1}}.", "gadgets-default": "Подразумевано укључен за Ñваког.", + "gadgets-legacy": "Геџет није учитан. Молимо Ð²Ð°Ñ Ð¿Ñ€ÐµÐ±Ð°Ñ†Ð¸Ñ‚Ðµ га на ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Сазнајте више])", "gadgets-export": "Извези", "gadgets-export-title": "Извоз гаџета", "gadgets-not-found": "Гаџет „$1“ није пронађен.", "gadgets-export-text": "Да биÑте извезли $1 гаџет, кликните на дугме „{{int:gadgets-export-download}}“, Ñачувајте преузету датотеку,\nпређите на ''Special:Import'' на жељеној викији и пошаљите гаџет. Ðакон тога, додајте Ñледеће на ''MediaWiki:Gadgets-definition'' Ñтраницу:\n
    $2
    \nМорате имати одређене дозволе на наведеној викији (укључујући и право за уређивање ÑиÑтемÑких порука), док увоз преко датотека мора бити омогућен.", - "gadgets-export-download": "Преузми" + "gadgets-export-download": "Преузми", + "right-gadgets-edit": "уређивање JavaScript и CSS Ñтраница геџета", + "action-gadgets-edit": "уређивање JavaScript и CSS Ñтраница геџета", + "right-gadgets-definition-edit": "уређивање дефиниција геџета", + "action-gadgets-definition-edit": "уређивање дефиниција геџета" } diff --git a/extensions/Gadgets/i18n/tr.json b/extensions/Gadgets/i18n/tr.json index 3cad9005..ecde408b 100644 --- a/extensions/Gadgets/i18n/tr.json +++ b/extensions/Gadgets/i18n/tr.json @@ -6,7 +6,8 @@ "Incelemeelemani", "Joseph", "Karduelis", - "Koc61" + "Koc61", + "Arystanbek" ] }, "gadgets-desc": "Kullanıcıların [[Special:Preferences#mw-prefsection-gadgets|tercihlerinde]] özel [[Special:Gadgets|CSS ve JavaScript gadgetlerini]] seçmelerine izin verir", @@ -23,5 +24,21 @@ "gadgets-export-title": "Gadget dışa aktarımı", "gadgets-not-found": "Gadget \"$1\" bulunamadı.", "gadgets-export-text": "$1 gadgetini dışa aktarmak için \"{{int:gadgets-export-download}}\" düğmesine tıklayın, yüklenen dosyayı kaydedin, hedef vikide Special:Import sayfasına gidin ve yükleyin. Sonra aÅŸağıdakini MediaWiki:Gadgets-definition sayfasına ekleyin:\n
    $2
    \nHedef vikide uygun izinlerinizin olması (sistem mesajlarını deÄŸiÅŸtirmek yetkisi dahil) ve dosyadan içe aktarmanın etkinleÅŸtirilmiÅŸ olması gerekir.", - "gadgets-export-download": "Ä°ndir" + "gadgets-export-download": "Ä°ndir", + "apihelp-query+gadgetcategories-description": "Döner gadget kategori listesi.", + "apihelp-query+gadgetcategories-param-prop": "Kategori bilgi almak için ne gadget:\n;adı:İç kategori adı.\n;konu baÅŸlığı:Kategori BaÅŸlığı.\n;üyeler:kategorideki araçların Sayısı.", + "apihelp-query+gadgetcategories-param-names": "Almak için kategorilerin adlarını.", + "apihelp-query+gadgetcategories-example-1": "Mevcut gadget kategori listesi", + "apihelp-query+gadgetcategories-example-2": "Kategoriler \"foo\" ve \"bar\"adlı hakkında tüm bilgi almak", + "apihelp-query+gadgets-description": "Döner araçlar bu wiki üzerinde bulundurmalıdır.", + "apihelp-query+gadgets-param-prop": "Bilgi almak için ne gadget:\n;ıd:İç gadget ID.\n;meta:gadget metadata.\n;tanım:Gadget açıklama HTML (EÄŸer gerçekten gerekirse yavaÅŸ, sadece kullanmak olabilir) dönüştü.", + "apihelp-query+gadgets-param-categories": "Almak için ne gelen araçlar.", + "apihelp-query+gadgets-param-ids": "Araçların kimliÄŸi almak için.", + "apihelp-query+gadgets-param-allowedonly": "Liste sadece araçlar geçerli kullanıcı için izin verdi.", + "apihelp-query+gadgets-param-enabledonly": "Liste sadece araçlar geçerli kullanıcı tarafından etkinleÅŸtirilebilir.", + "apihelp-query+gadgets-example-1": "Kendi açıklamaları ile birlikte araçların listesi", + "apihelp-query+gadgets-example-2": "Mümkün olan tüm özelliklere sahip araçların bir listesini almak", + "apihelp-query+gadgets-example-3": "Araçlar kategoriye ait bir liste olsun \"foo\"", + "apihelp-query+gadgets-example-4": "Araçlar hakkında bilgi \"\" ve \"bar\"foo al", + "apihelp-query+gadgets-example-5": "Araçlar geçerli kullanıcı tarafından etkin bir listesini almak" } diff --git a/extensions/Gadgets/i18n/uk.json b/extensions/Gadgets/i18n/uk.json index 2d3cce29..e403e8ae 100644 --- a/extensions/Gadgets/i18n/uk.json +++ b/extensions/Gadgets/i18n/uk.json @@ -10,7 +10,9 @@ "RLuts", "Riwnodennyk", "Sodmy", - "ТеÑÑ‚" + "ТеÑÑ‚", + "Ðта", + "Base" ] }, "gadgets-desc": "ДозволÑÑ” кориÑтувачам обирати [[Special:Gadgets|CSS- та JavaScript-додатки]] у Ñвоїх [[Special:Preferences#mw-prefsection-gadgets|налаштуваннÑÑ…]]", @@ -23,9 +25,30 @@ "gadgets-required-rights": "{{PLURAL:$2|1=Потрібне право|Потрібні такі права}}:\n\n$1", "gadgets-required-skins": "ДоÑтупний на {{PLURAL:$2|1=$1 skin|наÑтупних темах оформленнÑ: $1}}.", "gadgets-default": "Увімкнено Ð´Ð»Ñ Ð²ÑÑ–Ñ… за замовчуваннÑм.", + "gadgets-legacy": "Додаток не завантажено. Будь лаÑка, здійÑніть міграцію на ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ])", "gadgets-export": "ЕкÑпортувати", "gadgets-export-title": "ЕкÑпорт додатка", "gadgets-not-found": "Додаток \"$1\" не знайдено.", "gadgets-export-text": "Ðби екÑпортувати додаток $1, натиÑніть «{{int:gadgets-export-download}}», збережіть завантажений файл,\nперейдіть до Special:Import на потібній віці Ñ– відвантажте його там. Тоді додайте наÑтупний текÑÑ‚ на Ñторінку MediaWiki:Gadgets-definition:\n
    $2
    \nВи повинні мати відповідні права на цільовій віці (зокрема на Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтемних повідомлень), окрім того має бути ввімкнена можливіÑÑ‚ÑŒ імпорту з файлу.", - "gadgets-export-download": "Завантажити" + "gadgets-export-download": "Завантажити", + "apihelp-query+gadgetcategories-description": "Видає ÑпиÑок категорій ґаджетів.", + "apihelp-query+gadgetcategories-param-prop": "Яку категорію ґаджетів отримати:\n;name:Внутрішнє ім'Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ—.\n;title:Ðазва категорії.\n;members:КількіÑÑ‚ÑŒ ґаджетів у категорії.", + "apihelp-query+gadgetcategories-param-names": "Імена категорій Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ.", + "apihelp-query+gadgetcategories-example-1": "Отримати ÑпиÑок наÑвних категорій ґаджетів", + "apihelp-query+gadgetcategories-example-2": "Отримати вÑÑŽ інформацію про категорії з іменами «foo» Ñ– «bar»", + "apihelp-query+gadgets-description": "Видає ÑпиÑок ґаджетів, викориÑтовуваних у цій вікі.", + "apihelp-query+gadgets-param-prop": "Яку інформацію про ґаджет отримати:\n;id:Внутрішній ID ґаджета.\n;metadata:Метадані ґаджета.\n;desc:ÐžÐ¿Ð¸Ñ Ò‘Ð°Ð´Ð¶ÐµÑ‚Ð°, перетворений у HTML (може бути повільно, викориÑтовуйте за Ñправжньої потреби).", + "apihelp-query+gadgets-param-categories": "Òаджети з Ñких категорій отримувати.", + "apihelp-query+gadgets-param-ids": "ID ґаджетів Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ.", + "apihelp-query+gadgets-param-allowedonly": "СпиÑок лише дозволених даному кориÑтувачеві ґаджетів.", + "apihelp-query+gadgets-param-enabledonly": "СпиÑок лише увімкнених даним кориÑтувачем ґаджетів.", + "apihelp-query+gadgets-example-1": "Отримати ÑпиÑок ґаджетів разом з Ñ—Ñ… опиÑами", + "apihelp-query+gadgets-example-2": "Отримати ÑпиÑок ґаджетів з уÑіма можливими влаÑтивоÑÑ‚Ñми", + "apihelp-query+gadgets-example-3": "Отримати ÑпиÑок ґаджетів, Ñкі належать до категорії «foo»", + "apihelp-query+gadgets-example-4": "Отримати інформацію про ґаджети «foo» Ñ– «bar»", + "apihelp-query+gadgets-example-5": "Отримати ÑпиÑок ґаджетів, увімкнених даним кориÑтувачем", + "right-gadgets-edit": "Редагувати Ñторінки JavaScript та CSS додатку", + "action-gadgets-edit": "редагувати JavaScript- чи CSS-Ñторінку цього додатку", + "right-gadgets-definition-edit": "Редагувати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑƒ", + "action-gadgets-definition-edit": "редагувати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ додатку" } diff --git a/extensions/Gadgets/i18n/vi.json b/extensions/Gadgets/i18n/vi.json index bfceff82..9abc945f 100644 --- a/extensions/Gadgets/i18n/vi.json +++ b/extensions/Gadgets/i18n/vi.json @@ -17,6 +17,7 @@ "gadgets-required-rights": "Cần {{PLURAL:$2|quyá»n|các quyá»n}} sau:\n\n$1", "gadgets-required-skins": "Có sẵn trên {{PLURAL:$2|giao diện $1|các giao diện: $1}}.", "gadgets-default": "Äược kích hoạt cho tất cả má»i ngÆ°á»i theo mặc định.", + "gadgets-legacy": "Tiện ích không được tải. Xin vui lòng chuyển đổi tiện ích qua hệ thống ResourceLoader. ([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) Tìm hiểu thêm])", "gadgets-export": "Xuất", "gadgets-export-title": "Xuất tiện ích", "gadgets-not-found": "Không tìm thấy tiện ích “$1â€.", @@ -32,5 +33,9 @@ "apihelp-query+gadgets-param-enabledonly": "Chỉ liệt kê các tiện ích được kích hoạt bởi ngÆ°á»i dùng hiện tại.", "apihelp-query+gadgets-example-3": "Lấy danh sách các tiện ích thuá»™c thể loại “fooâ€", "apihelp-query+gadgets-example-4": "Lấy thông tin vá» các tiện ích “foo†và “barâ€", - "apihelp-query+gadgets-example-5": "Lấy danh sách các tiện ích được kích hoạt bởi ngÆ°á»i dùng hiện tại" + "apihelp-query+gadgets-example-5": "Lấy danh sách các tiện ích được kích hoạt bởi ngÆ°á»i dùng hiện tại", + "right-gadgets-edit": "Sá»­a đổi trang tiện ích JavaScript và CSS", + "action-gadgets-edit": "sá»­a đổi trang tiện ích JavaScript hoặc CSS này", + "right-gadgets-definition-edit": "Sá»­a đổi các định nghÄ©a tiện ích", + "action-gadgets-definition-edit": "sá»­a đổi định nghÄ©a của tiện ích này" } diff --git a/extensions/Gadgets/i18n/xmf.json b/extensions/Gadgets/i18n/xmf.json new file mode 100644 index 00000000..b5a21f8a --- /dev/null +++ b/extensions/Gadgets/i18n/xmf.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Silovan" + ] + }, + "right-gadgets-edit": "გáƒáƒ¯áƒ”ტიშ JavaScript დრCSS ხáƒáƒ¡áƒ·áƒšáƒ”ფიშ რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒáƒ¤áƒ", + "action-gadgets-edit": "თე გáƒáƒ¯áƒ”ტიშ JavaScript ვáƒáƒ áƒ“რCSS ხáƒáƒ¡áƒ·áƒšáƒáƒ¨ რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒáƒ¤áƒ", + "right-gadgets-definition-edit": "გáƒáƒ¯áƒ”ტიშ გáƒáƒ—áƒáƒœáƒ¯áƒ£áƒáƒ¨ რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒáƒ¤áƒ", + "action-gadgets-definition-edit": "თე გáƒáƒ¯áƒ”ტიშ გáƒáƒ—áƒáƒœáƒ¯áƒ£áƒáƒ¨ რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒáƒ¤áƒ" +} diff --git a/extensions/Gadgets/i18n/zh-hans.json b/extensions/Gadgets/i18n/zh-hans.json index 7e93d020..2251e6c5 100644 --- a/extensions/Gadgets/i18n/zh-hans.json +++ b/extensions/Gadgets/i18n/zh-hans.json @@ -27,6 +27,7 @@ "gadgets-required-rights": "需è¦ä»¥ä¸‹{{PLURAL:$2|æƒé™}}:\n\n$1", "gadgets-required-skins": "å¯ç”¨åœ¨{{PLURAL:$2|$1外观|以下外观:$1}}。", "gadgets-default": "默认所有人å¯ç”¨ã€‚", + "gadgets-legacy": "未加载å°å·¥å…·ã€‚请è¿ç§»è‡³ResourceLoader。\n([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) 了解更多])", "gadgets-export": "导出", "gadgets-export-title": "导出å°å·¥å…·", "gadgets-not-found": "找ä¸åˆ°â€œ$1â€å°å·¥å…·ã€‚", @@ -47,5 +48,9 @@ "apihelp-query+gadgets-example-2": "获å–å«å…¨éƒ¨å¯èƒ½å±žæ€§çš„å°å·¥å…·åˆ—表", "apihelp-query+gadgets-example-3": "获å–属于分类“fooâ€çš„å°å·¥å…·åˆ—表", "apihelp-query+gadgets-example-4": "获å–有关å°å·¥å…·â€œfooâ€å’Œâ€œbarâ€çš„ä¿¡æ¯", - "apihelp-query+gadgets-example-5": "获å–当å‰ç”¨æˆ·å¯ç”¨çš„å°å·¥å…·åˆ—表" + "apihelp-query+gadgets-example-5": "获å–当å‰ç”¨æˆ·å¯ç”¨çš„å°å·¥å…·åˆ—表", + "right-gadgets-edit": "编辑å°å·¥å…·çš„JavaScriptå’ŒCSS页é¢", + "action-gadgets-edit": "编辑此å°å·¥å…·çš„JavaScript或CSS页é¢", + "right-gadgets-definition-edit": "编辑å°å·¥å…·å®šä¹‰", + "action-gadgets-definition-edit": "编辑此å°å·¥å…·çš„定义" } diff --git a/extensions/Gadgets/i18n/zh-hant.json b/extensions/Gadgets/i18n/zh-hant.json index af73a87d..d73d42a8 100644 --- a/extensions/Gadgets/i18n/zh-hant.json +++ b/extensions/Gadgets/i18n/zh-hant.json @@ -24,9 +24,30 @@ "gadgets-required-rights": "需è¦ä»¥ä¸‹{{PLURAL:$2|權é™|權é™}}:\n\n$1", "gadgets-required-skins": "å¯ç”¨æ–¼{{PLURAL:$2|$1 外觀|下列外觀:$1}}。", "gadgets-default": "所有人é è¨­é–‹å•Ÿã€‚", + "gadgets-legacy": "未載入å°å·¥å…·ï¼Œè«‹æ”¹ä½¿ç”¨ ResourceLoader。\n([https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_(users) 了解更多])", "gadgets-export": "匯出", "gadgets-export-title": "匯出å°å·¥å…·", "gadgets-not-found": "查無å°å·¥å…· \"$1\"。", - "gadgets-export-text": "è¦åŒ¯å‡º $1 å°å·¥å…·ï¼Œè«‹é»žé¸ã€Œ{{int:gadgets-export-download}}ã€æŒ‰éˆ•ï¼Œä¸¦å„²å­˜ä¸‹è¼‰çš„檔案,å‰å¾€ç›®æ¨™ Wiki çš„ Special:Import 並將其上傳。然後將下列文字新增到 MediaWiki:Gadgets-definition é é¢ï¼š\n
    $2
    \n您必須æ“有目標 Wiki çš„é©ç•¶æ¬Šé™ï¼ˆåŒ…括編輯系統訊æ¯çš„權é™ï¼‰ï¼Œä¸”須開啟é€éŽæª”案上傳匯入的功能。", - "gadgets-export-download": "下載" + "gadgets-export-text": "è¦åŒ¯å‡º $1 å°å·¥å…·ï¼Œè«‹é»žé¸ \"{{int:gadgets-export-download}}\" 按鈕,並儲存下載的檔案,å‰å¾€ç›®æ¨™ Wiki çš„ Special:Import 並將其上傳。然後將下列文字新增到 MediaWiki:Gadgets-definition é é¢ï¼š\n
    $2
    \n您必須æ“有目標 Wiki çš„é©ç•¶æ¬Šé™ (包括編輯系統訊æ¯çš„權é™) ,且須開啟é€éŽæª”案上傳匯入的功能。", + "gadgets-export-download": "下載", + "apihelp-query+gadgetcategories-description": "回傳å°å·¥å…·åˆ†é¡žæ¸…單。", + "apihelp-query+gadgetcategories-param-prop": "è¦å–得什麼å°å·¥å…·åˆ†é¡žè³‡è¨Šï¼š\n;name:內部份類å稱。\n;title:分類標題。\n;members:分類中的å°å·¥å…·æ•¸é‡ã€‚", + "apihelp-query+gadgetcategories-param-names": "è¦å–得分類å稱。", + "apihelp-query+gadgetcategories-example-1": "å–得已存在的å°å·¥å…·åˆ†é¡žæ¸…å–®", + "apihelp-query+gadgetcategories-example-2": "å–得所有有關分類å稱為 \"foo\" 與 \"bar\" 的資訊", + "apihelp-query+gadgets-description": "回傳在此 wiki 使用éŽçš„å°å·¥å…·æ¸…單。", + "apihelp-query+gadgets-param-prop": "è¦å–得什麼å°å·¥å…·è³‡è¨Šï¼š\n;id:內部å°å·¥å…· ID。\n;metadata:å°å·¥å…· metadata。\n;desc:å°å·¥å…·æ述轉æ›è‡³ HTML æ ¼å¼ (å¯èƒ½è¼ƒæ…¢ï¼Œåªåœ¨éœ€è¦æ™‚使用)。", + "apihelp-query+gadgets-param-categories": "自那個分類å–å¾—å°å·¥å…·ã€‚", + "apihelp-query+gadgets-param-ids": "è¦å–å¾—å°å·¥å…·çš„ ID。", + "apihelp-query+gadgets-param-allowedonly": "åªåˆ—出目å‰ä½¿ç”¨è€…å¯ä½¿ç”¨çš„å°å·¥å…·ã€‚", + "apihelp-query+gadgets-param-enabledonly": "åªåˆ—出由目å‰ä½¿ç”¨è€…é–‹å•Ÿçš„å°å·¥å…·ã€‚", + "apihelp-query+gadgets-example-1": "å–å¾—å°å·¥å…·åŠå…¶æ述清單", + "apihelp-query+gadgets-example-2": "å–å¾—å°å·¥å…·åŠå…¶æ‰€æœ‰å±¬æ€§æ¸…å–®", + "apihelp-query+gadgets-example-3": "å–得屬於分類 \"foo\" çš„å°å·¥å…·æ¸…å–®", + "apihelp-query+gadgets-example-4": "å–得有關å°å·¥å…· \"foo\" 與 \"bar\" 的資訊", + "apihelp-query+gadgets-example-5": "å–得由目å‰ä½¿ç”¨è€…開竹呚的å°å·¥å…·æ¸…å–®", + "right-gadgets-edit": "編輯å°å·¥å…·çš„ JavaScript 與 CSS é é¢", + "action-gadgets-edit": "編輯這個å°å·¥å…·çš„ JavaScript 或 CSS é é¢", + "right-gadgets-definition-edit": "編輯å°å·¥å…·å®šç¾©", + "action-gadgets-definition-edit": "編輯此å°å·¥å…·çš„定義" } diff --git a/extensions/Gadgets/includes/GadgetRepo.php b/extensions/Gadgets/includes/GadgetRepo.php new file mode 100644 index 00000000..18bf5b51 --- /dev/null +++ b/extensions/Gadgets/includes/GadgetRepo.php @@ -0,0 +1,63 @@ + array( 'name' => $gadget ) ) + */ + public function getStructuredList() { + $list = array(); + foreach ( $this->getGadgetIds() as $id ) { + $gadget = $this->getGadget( $id ); + $list[$gadget->getCategory()][$gadget->getName()] = $gadget; + } + + return $list; + } + + /** + * Get the configured default GadgetRepo. Currently + * this hardcodes MediaWikiGadgetsDefinitionRepo since + * that is the only implementation + * + * @return GadgetRepo + */ + public static function singleton() { + if ( self::$instance === null ) { + self::$instance = new MediaWikiGadgetsDefinitionRepo(); + } + return self::$instance; + } + + /** + * Should only be used by unit tests + * + * @param GadgetRepo|null $repo + */ + public static function setSingleton( $repo = null ) { + self::$instance = $repo; + } +} diff --git a/extensions/Gadgets/includes/GadgetResourceLoaderModule.php b/extensions/Gadgets/includes/GadgetResourceLoaderModule.php new file mode 100644 index 00000000..7f00e4cc --- /dev/null +++ b/extensions/Gadgets/includes/GadgetResourceLoaderModule.php @@ -0,0 +1,61 @@ + array( 'type' => 'script' ), + * 'MediaWiki:Gadget-foo.css' => array( 'type' => 'style' ), + * ) + * @param $dependencies Array: Names of resources this module depends on + * @param $targets Array: List of targets this module support + * @param $position String: 'bottom' or 'top' + * @param $messages Array + */ + public function __construct( $pages, $dependencies, $targets, $position, $messages ) { + $this->pages = $pages; + $this->dependencies = $dependencies; + $this->targets = $targets; + $this->position = $position; + $this->isPositionDefined = true; + $this->messages = $messages; + } + + /** + * Overrides the abstract function from ResourceLoaderWikiModule class + * @param $context ResourceLoaderContext + * @return Array: $pages passed to __construct() + */ + protected function getPages( ResourceLoaderContext $context ) { + return $this->pages; + } + + /** + * Overrides ResourceLoaderModule::getDependencies() + * @param $context ResourceLoaderContext + * @return Array: Names of resources this module depends on + */ + public function getDependencies( ResourceLoaderContext $context = null ) { + return $this->dependencies; + } + + /** + * Overrides ResourceLoaderModule::getPosition() + * @return String: 'bottom' or 'top' + */ + public function getPosition() { + return $this->position; + } + + public function getMessages() { + return $this->messages; + } +} diff --git a/extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php b/extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php new file mode 100644 index 00000000..eb141a91 --- /dev/null +++ b/extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php @@ -0,0 +1,233 @@ +loadGadgets(); + if ( !isset( $gadgets[$id] ) ) { + throw new InvalidArgumentException( "No gadget registered for '$id'" ); + } + + return $gadgets[$id]; + } + + public function getGadgetIds() { + $gadgets = $this->loadGadgets(); + if ( $gadgets ) { + return array_keys( $gadgets ); + } else { + return array(); + } + } + + /** + * Purge the definitions cache, for example if MediaWiki:Gadgets-definition + * was edited. + */ + public function purgeDefinitionCache() { + ObjectCache::getMainWANInstance()->touchCheckKey( $this->getCheckKey() ); + } + + private function getCheckKey() { + return wfMemcKey( 'gadgets-definition', Gadget::GADGET_CLASS_VERSION, self::CACHE_VERSION ); + } + + /** + * Loads list of gadgets and returns it as associative array of sections with gadgets + * e.g. array( 'sectionnname1' => array( $gadget1, $gadget2 ), + * 'sectionnname2' => array( $gadget3 ) ); + * @return array|bool Gadget array or false on failure + */ + protected function loadGadgets() { + if ( $this->definitionCache !== null ) { + return $this->definitionCache; // process cache hit + } + + // Ideally $t1Cache is APC, and $wanCache is memcached + $t1Cache = ObjectCache::newAccelerator( array(), 'hash' ); + $wanCache = ObjectCache::getMainWANInstance(); + + $key = $this->getCheckKey(); + + // (a) Check the tier 1 cache + $value = $t1Cache->get( $key ); + // Check if it passes a blind TTL check (avoids I/O) + if ( $value && ( microtime( true ) - $value['time'] ) < 10 ) { + $this->definitionCache = $value['gadgets']; // process cache + return $this->definitionCache; + } + // Cache generated after the "check" time should be up-to-date + $ckTime = $wanCache->getCheckKeyTime( $key ) + WANObjectCache::HOLDOFF_TTL; + if ( $value && $value['time'] > $ckTime ) { + $this->definitionCache = $value['gadgets']; // process cache + return $this->definitionCache; + } + + // (b) Fetch value from WAN cache or regenerate if needed. + // This is hit occasionally and more so when the list changes. + $us = $this; + $value = $wanCache->getWithSetCallback( + $key, + function( $old, &$ttl ) use ( $us ) { + $now = microtime( true ); + $gadgets = $us->fetchStructuredList(); + if ( $gadgets === false ) { + $ttl = WANObjectCache::TTL_UNCACHEABLE; + } + + return array( 'gadgets' => $gadgets, 'time' => $now ); + }, + Gadget::CACHE_TTL, + array( $key ), + array( 'lockTSE' => 300 ) + ); + + // Update the tier 1 cache as needed + if ( $value['gadgets'] !== false && $value['time'] > $ckTime ) { + // Set a modest TTL to keep the WAN key in cache + $t1Cache->set( $key, $value, mt_rand( 300, 600 ) ); + } + + $this->definitionCache = $value['gadgets']; + + return $this->definitionCache; + } + + /** + * Fetch list of gadgets and returns it as associative array of sections with gadgets + * e.g. array( $name => $gadget1, etc. ) + * @param $forceNewText String: Injected text of MediaWiki:gadgets-definition [optional] + * @return array|bool + */ + public function fetchStructuredList( $forceNewText = null ) { + if ( $forceNewText === null ) { + $g = wfMessage( "gadgets-definition" )->inContentLanguage(); + if ( !$g->exists() ) { + return false; // don't cache + } + + $g = $g->plain(); + } else { + $g = $forceNewText; + } + + $gadgets = $this->listFromDefinition( $g ); + if ( !count( $gadgets ) ) { + return false; // don't cache; Bug 37228 + } + + $source = $forceNewText !== null ? 'input text' : 'MediaWiki:Gadgets-definition'; + wfDebug( __METHOD__ . ": $source parsed, cache entry should be updated\n" ); + + return $gadgets; + } + + /** + * Generates a structured list of Gadget objects from a definition + * + * @param $definition + * @return array Array( name => Gadget ) + */ + private function listFromDefinition( $definition ) { + $definition = preg_replace( '//s', '', $definition ); + $lines = preg_split( '/(\r\n|\r|\n)+/', $definition ); + + $gadgets = array(); + $section = ''; + + foreach ( $lines as $line ) { + $m = array(); + if ( preg_match( '/^==+ *([^*:\s|]+?)\s*==+\s*$/', $line, $m ) ) { + $section = $m[1]; + } else { + $gadget = $this->newFromDefinition( $line, $section ); + if ( $gadget ) { + $gadgets[$gadget->getName()] = $gadget; + } + } + } + + return $gadgets; + } + + /** + * Creates an instance of this class from definition in MediaWiki:Gadgets-definition + * @param string $definition Gadget definition + * @param string $category + * @return Gadget|bool Instance of Gadget class or false if $definition is invalid + */ + public function newFromDefinition( $definition, $category ) { + $m = array(); + if ( !preg_match( '/^\*+ *([a-zA-Z](?:[-_:.\w\d ]*[a-zA-Z0-9])?)(\s*\[.*?\])?\s*((\|[^|]*)+)\s*$/', $definition, $m ) ) { + return false; + } + // NOTE: the gadget name is used as part of the name of a form field, + // and must follow the rules defined in http://www.w3.org/TR/html4/types.html#type-cdata + // Also, title-normalization applies. + $info = array( 'category' => $category ); + $info['name'] = trim( str_replace( ' ', '_', $m[1] ) ); + // If the name is too long, then RL will throw an MWException when + // we try to register the module + if ( !Gadget::isValidGadgetID( $info['name'] ) ) { + return false; + } + $info['definition'] = $definition; + $options = trim( $m[2], ' []' ); + + foreach ( preg_split( '/\s*\|\s*/', $options, -1, PREG_SPLIT_NO_EMPTY ) as $option ) { + $arr = preg_split( '/\s*=\s*/', $option, 2 ); + $option = $arr[0]; + if ( isset( $arr[1] ) ) { + $params = explode( ',', $arr[1] ); + $params = array_map( 'trim', $params ); + } else { + $params = array(); + } + + switch ( $option ) { + case 'ResourceLoader': + $info['resourceLoaded'] = true; + break; + case 'dependencies': + $info['dependencies'] = $params; + break; + case 'rights': + $info['requiredRights'] = $params; + break; + case 'skins': + $info['requiredSkins'] = $params; + break; + case 'default': + $info['onByDefault'] = true; + break; + case 'targets': + $info['targets'] = $params; + break; + case 'top': + $info['position'] = 'top'; + break; + } + } + + foreach ( preg_split( '/\s*\|\s*/', $m[3], -1, PREG_SPLIT_NO_EMPTY ) as $page ) { + $page = "Gadget-$page"; + + if ( preg_match( '/\.js/', $page ) ) { + $info['scripts'][] = $page; + } elseif ( preg_match( '/\.css/', $page ) ) { + $info['styles'][] = $page; + } + } + + return new Gadget( $info ); + } + + +} diff --git a/extensions/Gadgets/tests/GadgetTest.php b/extensions/Gadgets/tests/GadgetTest.php index 8fd09295..26d77e5f 100644 --- a/extensions/Gadgets/tests/GadgetTest.php +++ b/extensions/Gadgets/tests/GadgetTest.php @@ -4,19 +4,25 @@ */ class GadgetsTest extends MediaWikiTestCase { + /** + * @param string $line + * @return Gadget + */ private function create( $line ) { - $g = Gadget::newFromDefinition( $line ); + $repo = new MediaWikiGadgetsDefinitionRepo(); + $g = $repo->newFromDefinition( $line, 'misc' ); $this->assertInstanceOf( 'Gadget', $g ); return $g; } - function testInvalidLines() { - $this->assertFalse( Gadget::newFromDefinition( '' ) ); - $this->assertFalse( Gadget::newFromDefinition( '' ) ); + public function testInvalidLines() { + $repo = new MediaWikiGadgetsDefinitionRepo(); + $this->assertFalse( $repo->newFromDefinition( '', 'misc' ) ); + $this->assertFalse( $repo->newFromDefinition( '', 'misc' ) ); } - function testSimpleCases() { + public function testSimpleCases() { $g = $this->create( '* foo bar| foo.css|foo.js|foo.bar' ); $this->assertEquals( 'foo_bar', $g->getName() ); $this->assertEquals( 'ext.gadget.foo_bar', $g->getModuleName() ); @@ -29,30 +35,36 @@ class GadgetsTest extends MediaWikiTestCase { $this->assertTrue( $g->hasModule() ); } - function testRLtag() { + public function testRLtag() { $g = $this->create( '*foo [ResourceLoader]|foo.js|foo.css' ); $this->assertEquals( 'foo', $g->getName() ); $this->assertTrue( $g->supportsResourceLoader() ); $this->assertEquals( 0, count( $g->getLegacyScripts() ) ); } - function testDependencies() { + public function testDependencies() { $g = $this->create( '* foo[ResourceLoader|dependencies=jquery.ui]|bar.js' ); $this->assertEquals( array( 'Gadget-bar.js' ), $g->getScripts() ); $this->assertTrue( $g->supportsResourceLoader() ); $this->assertEquals( array( 'jquery.ui' ), $g->getDependencies() ); } - function testPreferences() { + public function testPreferences() { $prefs = array(); + $repo = TestingAccessWrapper::newFromObject( new MediaWikiGadgetsDefinitionRepo() ); + // Force usage of a MediaWikiGadgetsDefinitionRepo + GadgetRepo::setSingleton( $repo ); - Gadget::loadStructuredList( '* foo | foo.js + $gadgets = $repo->fetchStructuredList( '* foo | foo.js ==keep-section1== * bar| bar.js ==remove-section== * baz [rights=embezzle] |baz.js ==keep-section2== * quux [rights=read] | quux.js' ); + $this->assertGreaterThanOrEqual( 2, count( $gadgets ), "Gadget list parsed" ); + + $repo->definitionCache = $gadgets; $this->assertTrue( GadgetHooks::getPreferences( new User, $prefs ), 'GetPrefences hook should return true' ); $options = $prefs['gadgets']['options']; @@ -60,4 +72,9 @@ class GadgetsTest extends MediaWikiTestCase { $this->assertTrue( isset( $options['<gadget-section-keep-section1>'] ) ); $this->assertTrue( isset( $options['<gadget-section-keep-section2>'] ) ); } + + public function tearDown() { + GadgetRepo::setSingleton(); + parent::tearDown(); + } } diff --git a/extensions/ImageMap/Gruntfile.js b/extensions/ImageMap/Gruntfile.js new file mode 100644 index 00000000..5a87e7b6 --- /dev/null +++ b/extensions/ImageMap/Gruntfile.js @@ -0,0 +1,19 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/ImageMap/extension.json b/extensions/ImageMap/extension.json index df8b3169..c0adfb54 100644 --- a/extensions/ImageMap/extension.json +++ b/extensions/ImageMap/extension.json @@ -19,5 +19,6 @@ }, "ParserTestFiles": [ "imageMapParserTests.txt" - ] + ], + "manifest_version": 1 } diff --git a/extensions/ImageMap/i18n/ce.json b/extensions/ImageMap/i18n/ce.json index 5e1d1571..1158f71c 100644 --- a/extensions/ImageMap/i18n/ce.json +++ b/extensions/ImageMap/i18n/ce.json @@ -6,7 +6,7 @@ ] }, "imagemap_desc": "Таро хуьлуьйту картан Ñуьрта таӀийча латораш билгалдан <imagemap> теган гӀуьнца", - "imagemap_invalid_image": "ГӀалат: нийÑа дац Ñ Ð¸ÑˆÑ‚Ð° Ñурт дац кху чохь", + "imagemap_invalid_image": "ГӀалат: нийÑа доцу Ñ Ð´Ð¾Ñ†ÑƒÑˆ долу Ñурт", "imagemap_no_link": "ГӀалат: $1 могӀанан чаккхехь нийÑа йоцу хьажорг ÑŽ", "imagemap_invalid_title": "ГӀалат: могӀана $1 хьажориган корта нийÑа Ñц", "imagemap_description": "Суьртах лаьцна" diff --git a/extensions/ImageMap/i18n/es.json b/extensions/ImageMap/i18n/es.json index 958ad375..9cfd9bca 100644 --- a/extensions/ImageMap/i18n/es.json +++ b/extensions/ImageMap/i18n/es.json @@ -4,15 +4,16 @@ "Crazymadlover", "Drini", "Remember the dot", - "Sanbec" + "Sanbec", + "Macofe" ] }, "imagemap_desc": "Permite ''image-maps'' dinámicos usando la etiqueta <imagemap>", - "imagemap_no_image": "Error: hay que especificar un imagen en la línea primera", - "imagemap_invalid_image": "Error: la imagen no es válida o no existe", + "imagemap_no_image": "Error: hay que especificar un imagen en la línea primera.", + "imagemap_invalid_image": "Error: la imagen no es válida o no existe.", "imagemap_bad_image": "Error: la imagen esta en la lista negra en esta página", - "imagemap_no_link": "Error: no se encontró ningún enlace válido al final de la línea $1", - "imagemap_invalid_title": "Error: título no válido en un enlace de la linea $1", + "imagemap_no_link": "Error: no se encontró ningún enlace válido al final de la línea $1.", + "imagemap_invalid_title": "Error: título no válido en un enlace de la línea $1.", "imagemap_missing_coord": "Error: no hay bastante coordinates para la figura a la linea $1", "imagemap_unrecognised_shape": "Error: figura no reconocida a la linea $1, cada linea debe comenzar con uno de default, rect, circle o poly", "imagemap_invalid_coord": "Error: hay una coordenada no válida en la línea $1, debe ser un número", diff --git a/extensions/ImageMap/i18n/lt.json b/extensions/ImageMap/i18n/lt.json index be068810..23fa4962 100644 --- a/extensions/ImageMap/i18n/lt.json +++ b/extensions/ImageMap/i18n/lt.json @@ -2,16 +2,20 @@ "@metadata": { "authors": [ "Garas", - "Matasg" + "Matasg", + "Albertas" ] }, + "imagemap_desc": "Leidžia susieti klientinÄ—s pusÄ—s paspaudžiamÄ… paveikslÄ—lį naudojant <imagemap> žymÄ™", "imagemap_no_image": "Error: privalote nurodyti paveikslÄ—lį pirmoje linijoje", "imagemap_invalid_image": "Error: blogas arba neegzistuojantis paveikslÄ—lis", + "imagemap_bad_image": "Klaida: PaveikslÄ—lis Å¡iame puslapyje yra įtraukas į juodÄ…jį sÄ…raÅ¡Ä….", "imagemap_no_link": "Error: nerasta tinkama nuoroda eilutÄ—s $1 pabaigoje", "imagemap_invalid_title": "Error: blogas pavadinimas nuorodoje $1 eilutÄ—je", "imagemap_missing_coord": "Error: nÄ—ra pakankamai koordinaÄių figÅ«rai $1 eilutÄ—je", "imagemap_unrecognised_shape": "Error: neatpažįstama figÅ«ra $1 eilutÄ—je, kiekviena eilutÄ— privalo prasidÄ—ti su vienu iÅ¡ Å¡ių žodžių: default, rect, circle arba poly", "imagemap_invalid_coord": "Error: netinkama koordinatÄ— $1 eilutÄ—je, privalo bÅ«ti skaiÄius", "imagemap_invalid_desc": "Error: bloga apraÅ¡ymo specifikacija, privalo bÅ«ti viena iÅ¡: $1", - "imagemap_description": "Apie šį paveikslÄ—lį" + "imagemap_description": "Apie šį paveikslÄ—lį", + "imagemap_poly_odd": "Klaida: Rastas daugiakampis su nelyginiu koordinaÄių skaiÄiumi eilutÄ—je $1" } diff --git a/extensions/ImageMap/i18n/nap.json b/extensions/ImageMap/i18n/nap.json new file mode 100644 index 00000000..c63b3763 --- /dev/null +++ b/extensions/ImageMap/i18n/nap.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "C.R." + ] + }, + "imagemap_desc": "Premmettesse 'e mappe 'immaggene cliccabbele a lato cliente ausanno 'o tag <imagemap>", + "imagemap_no_image": "Errore: s'avess'a specificà n'immaggene int' 'a primma riga", + "imagemap_invalid_image": "Errore: l'immaggene è invalida o nun esiste.", + "imagemap_bad_image": "Errore: l'immaggene ncoppa è dint' 'a lista nira int'a sta paggena.", + "imagemap_no_link": "Errore: Nisciuno link buono s'è truvato a 'o fine d' 'a linea $1.", + "imagemap_invalid_title": "Errore: titole invalide int' 'o cullegamento a 'a linea $1", + "imagemap_missing_coord": "Errore: Nun ce stanno abbastanza coordinate p' 'a forma specificata int'a linea $1.", + "imagemap_unrecognised_shape": "Errore: fiùra nun ricanusciuta â linea $1, ogne linea adda accummincià cu uno 'e chiste: default, rect, circle o poly", + "imagemap_invalid_coord": "Errore: coordinate invalide a 'a linea $1, adda essere nu nummero", + "imagemap_invalid_desc": "Errore: Specificazione desc invalida, adda essere una 'e chiste: $1.", + "imagemap_description": "Ncopp'a st'immaggene", + "imagemap_poly_odd": "Errore: Truvato nu poligono cu nu cierto nummero dispare 'e coordinate dint' 'a riga $1" +} diff --git a/extensions/ImageMap/i18n/olo.json b/extensions/ImageMap/i18n/olo.json new file mode 100644 index 00000000..9c058e6c --- /dev/null +++ b/extensions/ImageMap/i18n/olo.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "imagemap_desc": "Andau mahton luadie painaldettavii kuvakartoi käyttäjen <imagemap>-tägii.", + "imagemap_no_image": "Haireh: Kuva pidäy miäritellä ezmäzel riävyl.", + "imagemap_invalid_image": "Haireh: Kuva ei päi libo sidä ei ole olemas.", + "imagemap_bad_image": "Haireh: Kuva on saitan estolistal.", + "imagemap_no_link": "Haireh: Riävyn $1 lopus ei löydynyh pädijiä linkua.", + "imagemap_invalid_title": "Haireh: Pädemätöi rubriekku linkas riävyl $1.", + "imagemap_missing_coord": "Haireh: Riävyle $1 ei ole tävvyndälleh kourdinuatoi.", + "imagemap_unrecognised_shape": "Haireh: Riävyn $1 muodo on tundematoi. Jogahizen riävyn pidäy algu miltahto nämmis: default, rect, circle libo poly.", + "imagemap_invalid_coord": "Haireh: Pädemätöi kourdinuattu riävyl $1. Kourdinuatan pidäy olla noumer.", + "imagemap_invalid_desc": "Haireh: Pädemätöi kohtehmiärittely, desc-parametru, pidäy olla yksi nämmis: $1.", + "imagemap_description": "Täh kuvah näh", + "imagemap_poly_odd": "Haireh: Löydyi poligonu, kudamas puaratoi lugu kourdinuatoi riävyl $1" +} diff --git a/extensions/ImageMap/i18n/sa.json b/extensions/ImageMap/i18n/sa.json index 58c77b5c..f720374f 100644 --- a/extensions/ImageMap/i18n/sa.json +++ b/extensions/ImageMap/i18n/sa.json @@ -1,14 +1,15 @@ { "@metadata": { "authors": [ - "Shubha" + "Shubha", + "NehalDaveND" ] }, "imagemap_desc": " <imagemap> इदमॠउपयà¥à¤œà¥à¤¯ कà¥à¤²à¥ˆà¤£à¥à¤Ÿà¥-सैडà¥-नोदनयोगà¥à¤¯à¤šà¤¿à¤¤à¥à¤°à¤ªà¤Ÿà¤‚ करà¥à¤¤à¥à¤‚ शकà¥à¤¯à¤¤à¥‡ ।", "imagemap_no_image": "दॊषः: पà¥à¤°à¤¥à¤®à¤ªà¤™à¥à¤•à¥à¤¤à¥Œ चितà¥à¤°à¤‚ निरà¥à¤¦à¥‡à¤·à¥à¤Ÿà¤µà¥à¤¯à¤®à¥", "imagemap_invalid_image": "दॊषः: इदं चितà¥à¤°à¤®à¥ अमानà¥à¤¯à¤®à¥ अथवा अविदà¥à¤¯à¤®à¤¾à¤¨à¤®à¥", "imagemap_bad_image": "दोषः: चितà¥à¤°à¤®à¥ असà¥à¤®à¤¿à¤¨à¥ पृषà¥à¤ à¥‡ अमानितमसà¥à¤¤à¤¿", - "imagemap_no_link": "दोषः: $1 पङà¥à¤•à¥à¤¤à¥‡à¤ƒ अनà¥à¤¤à¥‡ मानà¥à¤¯à¤ƒ अनà¥à¤¬à¤¨à¥à¤§à¤ƒ कोपि न दृषà¥à¤Ÿà¤ƒ ।", + "imagemap_no_link": "दोषः: $1 पङà¥à¤•à¥à¤¤à¥‡à¤ƒ अनà¥à¤¤à¥‡ मानà¥à¤¯à¤ƒ परिसनà¥à¤§à¤¿à¤ƒ कोपि न दृषà¥à¤Ÿà¤ƒ ।", "imagemap_invalid_title": "दोषः: $1 पङà¥à¤•à¥à¤¤à¥Œ अनà¥à¤¬à¤¨à¥à¤§à¤¸à¥à¤¯ अमानà¥à¤¯à¤‚ शिरोनाम विदà¥à¤¯à¤¤à¥‡", "imagemap_missing_coord": "दोषः : $1 पङà¥à¤•à¥à¤¤à¥Œ आकाराय आवशà¥à¤¯à¤•à¤¾à¤ƒ बिनà¥à¤¦à¤µà¤ƒ न विदà¥à¤¯à¤¨à¥à¤¤à¥‡", "imagemap_unrecognised_shape": "Error: $1 पङà¥à¤•à¥à¤¤à¥à¤¯à¤¾à¤ƒ आकारे कशà¥à¤šà¤¨ दोषः जातः, पà¥à¤°à¤¤à¤¿à¤ªà¤™à¥à¤•à¥à¤¤à¤¿à¤ƒ: default, rect, circle अथवा poly इतà¥à¤¯à¥‡à¤¤à¥‡à¤¨ आरबà¥à¤§à¤¾ सà¥à¤¯à¤¾à¤¤à¥", diff --git a/extensions/ImageMap/i18n/sr-ec.json b/extensions/ImageMap/i18n/sr-ec.json index 6ee44081..ea03c8e8 100644 --- a/extensions/ImageMap/i18n/sr-ec.json +++ b/extensions/ImageMap/i18n/sr-ec.json @@ -10,7 +10,7 @@ }, "imagemap_desc": "Омогућава клијентÑкој Ñтрани кликабилну мапу коришћњењм ознаке <imagemap>.", "imagemap_no_image": "Грешка: неопходно је одредити Ñлику у првој линији.", - "imagemap_invalid_image": "Грешка: Ñлика је лоша или непоÑтоји.", + "imagemap_invalid_image": "Грешка: Ñлика је лоша или не поÑтоји.", "imagemap_bad_image": "Грешка: Ñлика Ñе налази на црном ÑпиÑку за ову Ñтрану", "imagemap_no_link": "Грешка: није пронађена ниједна ваљана веза на крају линије $1.", "imagemap_invalid_title": "Грешка: лош наÑлов у вези у линији $1.", diff --git a/extensions/ImageMap/i18n/sr-el.json b/extensions/ImageMap/i18n/sr-el.json index 6b712923..81b5b748 100644 --- a/extensions/ImageMap/i18n/sr-el.json +++ b/extensions/ImageMap/i18n/sr-el.json @@ -7,7 +7,7 @@ }, "imagemap_desc": "Omogućava klijentskoj strani klikabilnu mapu korišćnjenjm oznake <imagemap>.", "imagemap_no_image": "GreÅ¡ka: neophodno je odrediti sliku u prvoj liniji.", - "imagemap_invalid_image": "GreÅ¡ka: slika je loÅ¡a ili nepostoji.", + "imagemap_invalid_image": "GreÅ¡ka: slika je loÅ¡a ili ne postoji.", "imagemap_bad_image": "GreÅ¡ka: slika se nalazi na crnom spisku za ovu stranu", "imagemap_no_link": "GreÅ¡ka: nije pronaÄ‘ena nijedna valjana veza na kraju linije $1.", "imagemap_invalid_title": "GreÅ¡ka: loÅ¡ naslov u vezi u liniji $1.", diff --git a/extensions/InputBox/Gruntfile.js b/extensions/InputBox/Gruntfile.js new file mode 100644 index 00000000..7dee546b --- /dev/null +++ b/extensions/InputBox/Gruntfile.js @@ -0,0 +1,20 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + 'use strict'; + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/InputBox/InputBox.classes.php b/extensions/InputBox/InputBox.classes.php index 4cdcbe9c..b03ccd4a 100644 --- a/extensions/InputBox/InputBox.classes.php +++ b/extensions/InputBox/InputBox.classes.php @@ -17,6 +17,7 @@ class InputBox { private $mPreload = ''; private $mPreloadparams = array(); private $mEditIntro = ''; + private $mUseVE = ''; private $mSummary = ''; private $mNosummary = ''; private $mMinor = ''; @@ -83,6 +84,39 @@ class InputBox { } } + /* + * Returns the action name and value to use in inputboxes which redirects to edit pages. + * Decides, if the link should redirect to VE edit page (veaction=edit) or to wikitext editor + * (action=edit). + * + * @return Array Array with name and value data + */ + private function getEditActionArgs() { + // default is wikitext editor + $args = array( + 'name' => 'action', + 'value' => 'edit', + ); + // check, if VE is installed and VE editor is requested + if ( ExtensionRegistry::getInstance()->isLoaded( 'VisualEditor' ) && $this->mUseVE ) { + $args = array( + 'name' => 'veaction', + 'value' => 'edit', + ); + } + return $args; + } + + /** + * Get common classes, that could be added and depend on, if + * a line break between a button and an input field is added or not. + * + * @return String + */ + private function getLinebreakClasses() { + return strtolower( $this->mBR ) === '
    ' ? 'mw-inputbox-input ' : ''; + } + /** * Generate search form * @param $type @@ -123,7 +157,7 @@ class InputBox { ); $htmlOut .= Xml::element( 'input', array( - 'class' => 'searchboxInput mw-ui-input mw-ui-input-inline', + 'class' => $this->getLinebreakClasses() . 'searchboxInput mw-ui-input mw-ui-input-inline', 'name' => 'search', 'type' => $this->mHidden ? 'hidden' : 'text', 'value' => $this->mDefaultText, @@ -134,13 +168,7 @@ class InputBox { ); if ( $this->mPrefix != '' ) { - $htmlOut .= Xml::element( 'input', - array( - 'name' => 'prefix', - 'type' => 'hidden', - 'value' => $this->mPrefix, - ) - ); + $htmlOut .= Html::hidden( 'prefix', $this->mPrefix ); } $htmlOut .= $this->mBR; @@ -360,78 +388,26 @@ class InputBox { $createBoxParams['id'] = Sanitizer::escapeId( $this->mID ); } $htmlOut .= Xml::openElement( 'form', $createBoxParams ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'action', - 'value' => 'edit', - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'preload', - 'value' => $this->mPreload, - ) - ); + $editArgs = $this->getEditActionArgs(); + $htmlOut .= Html::hidden( $editArgs['name'], $editArgs['value'] ); + $htmlOut .= Html::hidden( 'preload', $this->mPreload ); foreach ( $this->mPreloadparams as $preloadparams ) { - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'preloadparams[]', - 'value' => $preloadparams, - ) - ); + $htmlOut .= Html::hidden( 'preloadparams[]', $preloadparams ); } - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'editintro', - 'value' => $this->mEditIntro, - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'summary', - 'value' => $this->mSummary, - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'nosummary', - 'value' => $this->mNosummary, - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'prefix', - 'value' => $this->mPrefix, - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'minor', - 'value' => $this->mMinor, - ) - ); + $htmlOut .= Html::hidden( 'editintro', $this->mEditIntro ); + $htmlOut .= Html::hidden( 'summary', $this->mSummary ); + $htmlOut .= Html::hidden( 'nosummary', $this->mNosummary ); + $htmlOut .= Html::hidden( 'prefix', $this->mPrefix ); + $htmlOut .= Html::hidden( 'minor', $this->mMinor ); if ( $this->mType == 'comment' ) { - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'section', - 'value' => 'new', - ) - ); + $htmlOut .= Html::hidden( 'section', 'new' ); } $htmlOut .= Xml::openElement( 'input', array( 'type' => $this->mHidden ? 'hidden' : 'text', 'name' => 'title', - 'class' => 'mw-ui-input mw-ui-input-inline createboxInput', + 'class' => $this->getLinebreakClasses() . + 'mw-ui-input mw-ui-input-inline createboxInput', 'value' => $this->mDefaultText, 'placeholder' => $this->mPlaceholderText, 'size' => $this->mWidth, @@ -480,32 +456,14 @@ class InputBox { $moveBoxParams['id'] = Sanitizer::escapeId( $this->mID ); } $htmlOut .= Xml::openElement( 'form', $moveBoxParams ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'title', - 'value' => SpecialPage::getTitleFor( 'Movepage', $this->mPage )->getPrefixedText(), - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'wpReason', - 'value' => $this->mSummary, - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'prefix', - 'value' => $this->mPrefix, - ) - ); + $htmlOut .= Html::hidden( 'title', SpecialPage::getTitleFor( 'Movepage', $this->mPage )->getPrefixedText() ); + $htmlOut .= Html::hidden( 'wpReason', $this->mSummary ); + $htmlOut .= Html::hidden( 'prefix', $this->mPrefix ); $htmlOut .= Xml::openElement( 'input', array( 'type' => $this->mHidden ? 'hidden' : 'text', 'name' => 'wpNewTitle', - 'class' => 'mw-moveboxInput mw-ui-input mw-ui-input-inline', + 'class' => $this->getLinebreakClasses() . 'mw-moveboxInput mw-ui-input mw-ui-input-inline', 'value' => $this->mDefaultText, 'placeholder' => $this->mPlaceholderText, 'size' => $this->mWidth, @@ -553,61 +511,26 @@ class InputBox { $commentFormParams['id'] = Sanitizer::escapeId( $this->mID ); } $htmlOut .= Xml::openElement( 'form', $commentFormParams ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'action', - 'value' => 'edit', - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'preload', - 'value' => $this->mPreload, - ) - ); + $editArgs = $this->getEditActionArgs(); + $htmlOut .= Html::hidden( $editArgs['name'], $editArgs['value'] ); + $htmlOut .= Html::hidden( 'preload', $this->mPreload ); foreach ( $this->mPreloadparams as $preloadparams ) { - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'preloadparams[]', - 'value' => $preloadparams, - ) - ); + $htmlOut .= Html::hidden( 'preloadparams[]', $preloadparams ); } - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'editintro', - 'value' => $this->mEditIntro, - ) - ); + $htmlOut .= Html::hidden( 'editintro', $this->mEditIntro ); $htmlOut .= Xml::openElement( 'input', array( 'type' => $this->mHidden ? 'hidden' : 'text', 'name' => 'preloadtitle', - 'class' => 'commentboxInput mw-ui-input mw-ui-input-inline', + 'class' => $this->getLinebreakClasses() . 'commentboxInput mw-ui-input mw-ui-input-inline', 'value' => $this->mDefaultText, 'placeholder' => $this->mPlaceholderText, 'size' => $this->mWidth, 'dir' => $this->mDir, ) ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'section', - 'value' => 'new', - ) - ); - $htmlOut .= Xml::openElement( 'input', - array( - 'type' => 'hidden', - 'name' => 'title', - 'value' => $this->mPage - ) - ); + $htmlOut .= Html::hidden( 'section', 'new' ); + $htmlOut .= Html::hidden( 'title', $this->mPage ); $htmlOut .= $this->mBR; $htmlOut .= Xml::openElement( 'input', array( @@ -658,6 +581,7 @@ class InputBox { 'preload' => 'mPreload', 'page' => 'mPage', 'editintro' => 'mEditIntro', + 'useve' => 'mUseVE', 'summary' => 'mSummary', 'nosummary' => 'mNosummary', 'minor' => 'mMinor', diff --git a/extensions/InputBox/composer.json b/extensions/InputBox/composer.json new file mode 100644 index 00000000..3d5c89c2 --- /dev/null +++ b/extensions/InputBox/composer.json @@ -0,0 +1,11 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } + +} diff --git a/extensions/InputBox/extension.json b/extensions/InputBox/extension.json index 6d786754..626c2962 100644 --- a/extensions/InputBox/extension.json +++ b/extensions/InputBox/extension.json @@ -11,6 +11,7 @@ "url": "https://www.mediawiki.org/wiki/Extension:InputBox", "description": "Allow inclusion of predefined HTML forms.", "descriptionmsg": "inputbox-desc", + "license-name": "MIT", "type": "parserhook", "MessagesDirs": { "InputBox": [ @@ -23,12 +24,21 @@ }, "ResourceModules": { "ext.inputBox.styles": { - "styles": "ext.inputBox.styles.css" + "styles": "ext.inputBox.styles.css", + "position": "top", + "targets": [ + "mobile", + "desktop" + ] }, "ext.inputBox": { "scripts": "ext.inputBox.js", "dependencies": [ "jquery.throttle-debounce" + ], + "targets": [ + "mobile", + "desktop" ] } }, @@ -46,5 +56,6 @@ "SpecialPageBeforeExecute": [ "InputBoxHooks::onSpecialPageBeforeExecute" ] - } + }, + "manifest_version": 1 } diff --git a/extensions/InputBox/i18n/ady-cyrl.json b/extensions/InputBox/i18n/ady-cyrl.json new file mode 100644 index 00000000..9e3ea17d --- /dev/null +++ b/extensions/InputBox/i18n/ady-cyrl.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "GR44 Luc" + ] + }, + "inputbox-tryexact": "ТефÑпÑнÑу лыхъу" +} diff --git a/extensions/InputBox/i18n/anp.json b/extensions/InputBox/i18n/anp.json new file mode 100644 index 00000000..35fe6c38 --- /dev/null +++ b/extensions/InputBox/i18n/anp.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Angpradesh" + ] + }, + "inputbox-tryexact": "सटीक मिलान केरऽ कोशिश करऽ" +} diff --git a/extensions/InputBox/i18n/ast.json b/extensions/InputBox/i18n/ast.json index 9d2a89df..c2d507c6 100644 --- a/extensions/InputBox/i18n/ast.json +++ b/extensions/InputBox/i18n/ast.json @@ -8,7 +8,7 @@ "inputbox-desc": "Permite la inclusión de formularios HTML predefiníos", "inputbox-error-no-type": "Nun especificasti la triba de caxellu d'entrada pa crear.", "inputbox-error-bad-type": "Triba de caxa d'entrada $1 non reconocida.\nPor favor conseña la opción ''create'', ''comment'', ''search'', ''search2'' o \"fulltext\".", - "inputbox-tryexact": "Intentar concueyar exautamente", + "inputbox-tryexact": "Intentar concuayar exautamente", "inputbox-searchfulltext": "Buscar testu completu", "inputbox-createarticle": "Crear páxina", "inputbox-movearticle": "Treslladar la páxina", diff --git a/extensions/InputBox/i18n/awa.json b/extensions/InputBox/i18n/awa.json new file mode 100644 index 00000000..7a203888 --- /dev/null +++ b/extensions/InputBox/i18n/awa.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "1AnuraagPandey" + ] + }, + "inputbox-tryexact": "दिहा शबà¥à¤¦ ही खोजा जाय", + "inputbox-searchfulltext": "पूरा पाठ खोजा जाà¤", + "inputbox-createarticle": "लेख बनावा जाय", + "inputbox-movearticle": "पनà¥à¤¨à¤¾ घà¥à¤¸à¤•à¤¾à¤µà¤¾ जाय", + "inputbox-postcomment": "नवाठशà¥à¤°à¥‡à¤£à¥€", + "inputbox-postcommenttitle": "नवाठशà¥à¤°à¥‡à¤£à¥€", + "inputbox-ns-main": "मà¥à¤–à¥à¤¯" +} diff --git a/extensions/InputBox/i18n/az.json b/extensions/InputBox/i18n/az.json index 8d14a4ea..cf16445a 100644 --- a/extensions/InputBox/i18n/az.json +++ b/extensions/InputBox/i18n/az.json @@ -2,9 +2,11 @@ "@metadata": { "authors": [ "Cekli829", - "Vugar 1981" + "Vugar 1981", + "Wertuose" ] }, + "inputbox-tryexact": "DÉ™qiq uyÄŸunluq", "inputbox-searchfulltext": "Yaxşı mÉ™tni axtar", "inputbox-createarticle": "MÉ™qalÉ™ yarat", "inputbox-ns-main": "Æsas" diff --git a/extensions/InputBox/i18n/azb.json b/extensions/InputBox/i18n/azb.json index 386cb18c..62ad5f88 100644 --- a/extensions/InputBox/i18n/azb.json +++ b/extensions/InputBox/i18n/azb.json @@ -1,10 +1,12 @@ { "@metadata": { "authors": [ - "Amir a57" + "Amir a57", + "KoroÄŸlu" ] }, + "inputbox-tryexact": "اویدورمانی سیناقلا", "inputbox-searchfulltext": "یاخشی متنی آختار", - "inputbox-createarticle": "صحیÙÙ‡ یارات", + "inputbox-createarticle": "صÙحه یارات", "inputbox-ns-main": "آنا" } diff --git a/extensions/InputBox/i18n/be.json b/extensions/InputBox/i18n/be.json index cc14b3ea..114e44c9 100644 --- a/extensions/InputBox/i18n/be.json +++ b/extensions/InputBox/i18n/be.json @@ -1,4 +1,9 @@ { - "@metadata": [], + "@metadata": { + "authors": [ + "Чаховіч УладзіÑлаў" + ] + }, + "inputbox-tryexact": "Строгі пошук", "inputbox-createarticle": "Пачаць артыкул" } diff --git a/extensions/InputBox/i18n/bho.json b/extensions/InputBox/i18n/bho.json new file mode 100644 index 00000000..07b92080 --- /dev/null +++ b/extensions/InputBox/i18n/bho.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "SatyamMishra" + ] + }, + "inputbox-tryexact": "à¤à¤•à¤¦à¤® सटीकमैच करावे के कोसिस करीं" +} diff --git a/extensions/InputBox/i18n/bs.json b/extensions/InputBox/i18n/bs.json index d60e6951..6eb67315 100644 --- a/extensions/InputBox/i18n/bs.json +++ b/extensions/InputBox/i18n/bs.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "CERminator", - "DzWiki" + "DzWiki", + "Srdjan m" ] }, "inputbox-desc": "Omogućuje ukljuÄivanje prethodno napravljenih HTML obrazaca", @@ -11,5 +12,6 @@ "inputbox-tryexact": "Isprobaj naći taÄan upit", "inputbox-searchfulltext": "Pretraži cijeli tekst", "inputbox-createarticle": "Napravi stranicu", + "inputbox-movearticle": "Premjesti stranicu", "inputbox-ns-main": "Glavno" } diff --git a/extensions/InputBox/i18n/cu.json b/extensions/InputBox/i18n/cu.json index 52177f18..8b37c116 100644 --- a/extensions/InputBox/i18n/cu.json +++ b/extensions/InputBox/i18n/cu.json @@ -4,5 +4,5 @@ "ОйЛ" ] }, - "inputbox-createarticle": "cÑŠê™Ð¸Ð¶Ð´Ð¸ члѣнъ" + "inputbox-createarticle": "ÑÑŠê™Ð¸Ð¶Ð´Ð¸ Ñтраницѧ" } diff --git a/extensions/InputBox/i18n/din.json b/extensions/InputBox/i18n/din.json new file mode 100644 index 00000000..7d92cd16 --- /dev/null +++ b/extensions/InputBox/i18n/din.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Dinkawiki" + ] + }, + "inputbox-tryexact": "Them kot käthöŋ" +} diff --git a/extensions/InputBox/i18n/dty.json b/extensions/InputBox/i18n/dty.json new file mode 100644 index 00000000..01a0c893 --- /dev/null +++ b/extensions/InputBox/i18n/dty.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "जनक राज भटà¥à¤Ÿ" + ] + }, + "inputbox-tryexact": "दà¥à¤°à¥à¤¸à¥à¤¤ मिलौनà¥à¤¯à¤¾ पà¥à¤°à¤¯à¤¾à¤¶ गरया |" +} diff --git a/extensions/InputBox/i18n/ee.json b/extensions/InputBox/i18n/ee.json index 87422b3b..9021433c 100644 --- a/extensions/InputBox/i18n/ee.json +++ b/extensions/InputBox/i18n/ee.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ - "Natsubee" + "Natsubee", + "Aguve" ] }, + "inputbox-tryexact": "ÅŠlÉ” nya pÉ›pÉ›pÉ›", "inputbox-searchfulltext": "Di nuŋɔŋlÉ” bliboa me", "inputbox-createarticle": "Dze nuŋɔŋlÉ” yeye gÉ”me" } diff --git a/extensions/InputBox/i18n/es.json b/extensions/InputBox/i18n/es.json index 1fa91f97..596eb94a 100644 --- a/extensions/InputBox/i18n/es.json +++ b/extensions/InputBox/i18n/es.json @@ -6,16 +6,17 @@ "MetalBrasil", "Muro de Aguas", "Sanbec", - "Fitoschido" + "Fitoschido", + "Macofe" ] }, - "inputbox-desc": "Permite la inclusión de formularios en HTML predefinidos.", - "inputbox-error-no-type": "No has especificado el tipo de formulario que vas a crear.", - "inputbox-error-bad-type": "No se reconoce el tipo de caja de entrada «$1».\nPor favor, especifica «create», «comment», «search» «search2» o \"fulltext\".", + "inputbox-desc": "Permite la inclusión de formularios HTML predefinidos", + "inputbox-error-no-type": "No has especificado el tipo de casilla de entrada que se creará.", + "inputbox-error-bad-type": "No se reconoce el tipo de casilla de entrada «$1».\nElige entre «create», «comment», «search», «search2» o «fulltext».", "inputbox-tryexact": "Buscar título exacto", "inputbox-searchfulltext": "Buscar por texto completo", - "inputbox-createarticle": "Crear artículo", - "inputbox-movearticle": "Mover página", + "inputbox-createarticle": "Crear página", + "inputbox-movearticle": "Trasladar página", "inputbox-postcomment": "Sección nueva", "inputbox-postcommenttitle": "Sección nueva", "inputbox-ns-main": "Principal" diff --git a/extensions/InputBox/i18n/eu.json b/extensions/InputBox/i18n/eu.json index 9679e146..e4bb730e 100644 --- a/extensions/InputBox/i18n/eu.json +++ b/extensions/InputBox/i18n/eu.json @@ -1,11 +1,13 @@ { "@metadata": { "authors": [ - "පසිඳු කà·à·€à·’න්ද" + "පසිඳු කà·à·€à·’න්ද", + "Sator" ] }, "inputbox-tryexact": "Izenburu zehatza bilatu", "inputbox-searchfulltext": "Testu osoa bilatu", "inputbox-createarticle": "Artikulua sortu", + "inputbox-movearticle": "Mugitu orria", "inputbox-ns-main": "Nagusia" } diff --git a/extensions/InputBox/i18n/gom-latn.json b/extensions/InputBox/i18n/gom-latn.json new file mode 100644 index 00000000..eabe7617 --- /dev/null +++ b/extensions/InputBox/i18n/gom-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "The Discoverer" + ] + }, + "inputbox-tryexact": "Dil'lech utram sod" +} diff --git a/extensions/InputBox/i18n/gu.json b/extensions/InputBox/i18n/gu.json index 596306ed..73fc7e4e 100644 --- a/extensions/InputBox/i18n/gu.json +++ b/extensions/InputBox/i18n/gu.json @@ -3,7 +3,8 @@ "authors": [ "Dsvyas", "KartikMistry", - "Sushant savla" + "Sushant savla", + "NehalDaveND" ] }, "inputbox-desc": "પૂરà«àªµàªµà«àª¯àª¾àª–à«àª¯àª¾àª¯àª¿àª¤ HTML પતà«àª°àª•à«‹àª¨à«‹ સમાવેશ માનà«àª¯", @@ -12,6 +13,8 @@ "inputbox-tryexact": "આબેહૂબ સરખામણી ધારી પà«àª°àª¯àª¤à«àª¨ કરો", "inputbox-searchfulltext": "સંપૂરà«àª£ લખાણ શોધો", "inputbox-createarticle": "નવો લેખ શરૂ કરો", + "inputbox-movearticle": "નામ બદલો", + "inputbox-postcomment": "નવો વિભાગ", "inputbox-postcommenttitle": "નવો વિભાગ", "inputbox-ns-main": "મà«àª–à«àª¯" } diff --git a/extensions/InputBox/i18n/hi.json b/extensions/InputBox/i18n/hi.json index c3af06f4..609318a5 100644 --- a/extensions/InputBox/i18n/hi.json +++ b/extensions/InputBox/i18n/hi.json @@ -3,7 +3,8 @@ "authors": [ "Ansumang", "Kaustubh", - "Siddhartha Ghai" + "Siddhartha Ghai", + "NehalDaveND" ] }, "inputbox-desc": "पहले से लिखे गये à¤à¤šà¥°à¤Ÿà¥€à¥°à¤à¤®à¥°à¤à¤² फ़ॉरà¥à¤® पà¥à¤°à¤¯à¥‹à¤— करने की सà¥à¤µà¤¿à¤§à¤¾ दें", @@ -12,5 +13,8 @@ "inputbox-tryexact": "दिये हà¥à¤ शबà¥à¤¦ ही खोजें", "inputbox-searchfulltext": "पूरा पाठ खोजें", "inputbox-createarticle": "पृषà¥à¤  बनाà¤à¤", + "inputbox-movearticle": "नाम बदलें", + "inputbox-postcomment": "नवीनः विभागः", + "inputbox-postcommenttitle": "नवीनः विभागः", "inputbox-ns-main": "मà¥à¤–à¥à¤¯" } diff --git a/extensions/InputBox/i18n/hy.json b/extensions/InputBox/i18n/hy.json index 758c6732..c3da76ea 100644 --- a/extensions/InputBox/i18n/hy.json +++ b/extensions/InputBox/i18n/hy.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Xelgen" + "Xelgen", + "Vahe Gharakhanyan" ] }, + "inputbox-tryexact": "Õ“Õ¶Õ¿Ö€Õ¥Õ¬ Õ¬Õ«Õ¸Õ¾Õ«Õ¶ Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´", "inputbox-createarticle": "ÕÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ§Õ»" } diff --git a/extensions/InputBox/i18n/ja.json b/extensions/InputBox/i18n/ja.json index 1e583003..6fcd354a 100644 --- a/extensions/InputBox/i18n/ja.json +++ b/extensions/InputBox/i18n/ja.json @@ -4,7 +4,8 @@ "Fryed-peach", "JtFuruhata", "Schu", - "Shirayuki" + "Shirayuki", + "Otokoume" ] }, "inputbox-desc": "ã‚らã‹ã˜ã‚定義ã•ã‚ŒãŸHTMLフォーム埋ã‚è¾¼ã¿æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹", @@ -14,5 +15,7 @@ "inputbox-searchfulltext": "全文検索", "inputbox-createarticle": "項目を作æˆ", "inputbox-movearticle": "ページを移動", + "inputbox-postcomment": "æ–°ã—ã„節", + "inputbox-postcommenttitle": "æ–°ã—ã„節", "inputbox-ns-main": "(標準)" } diff --git a/extensions/InputBox/i18n/jut.json b/extensions/InputBox/i18n/jut.json index bb27b94d..0d708e30 100644 --- a/extensions/InputBox/i18n/jut.json +++ b/extensions/InputBox/i18n/jut.json @@ -1,13 +1,14 @@ { "@metadata": { "authors": [ - "HuslÃ¥ke" + "HuslÃ¥ke", + "Jyllanj" ] }, - "inputbox-desc": "TilstÃ¥n der inklusje der prædæfiiniærn HTML fÃ¥rmer", - "inputbox-error-no-type": "Du harst ekke spæsifiærn æ type der input boks til skep.", + "inputbox-desc": "Mulidjör inkludiireng Ã¥ forhÃ¥njsdefiniirtje HTML-formulare", + "inputbox-error-no-type": "Du hÃ¥r ett Ã¥ndjøwen typ i inputboksi som skal laws.", "inputbox-error-bad-type": "Input boks type \"$1\" ekke herkonnen. Spæsifiær \"skep\", \"bimærkenge\", \"søÄ\" æller \"søÄ2\".", - "inputbox-tryexact": "FørsÃ¸Ä eksakt søÄnenge:", - "inputbox-searchfulltext": "GennemsøÄe'n hæle tekster", - "inputbox-createarticle": "Ã…prette side" + "inputbox-tryexact": "Forsyeg go te siden", + "inputbox-searchfulltext": "Syeg ette hielteksten", + "inputbox-createarticle": "Oprett siid" } diff --git a/extensions/InputBox/i18n/khw.json b/extensions/InputBox/i18n/khw.json new file mode 100644 index 00000000..673d24e0 --- /dev/null +++ b/extensions/InputBox/i18n/khw.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Rachitrali" + ] + }, + "inputbox-tryexact": "خود بخود ٹیکسٹو ملاو کوریکو کوشش کورے" +} diff --git a/extensions/InputBox/i18n/krc.json b/extensions/InputBox/i18n/krc.json new file mode 100644 index 00000000..f5e6cad9 --- /dev/null +++ b/extensions/InputBox/i18n/krc.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Iltever", + "Ernác" + ] + }, + "inputbox-tryexact": "Тюп-тюз излеу" +} diff --git a/extensions/InputBox/i18n/ksh.json b/extensions/InputBox/i18n/ksh.json index 969c38a2..0d583d9e 100644 --- a/extensions/InputBox/i18n/ksh.json +++ b/extensions/InputBox/i18n/ksh.json @@ -6,7 +6,7 @@ }, "inputbox-desc": "Bestemmpte HTML-Formulare könne hee met enjebonge wääde.", "inputbox-error-no-type": "Wat för en Zoot Kaste wells De dann han?", - "inputbox-error-bad-type": "De Zoot „$1“ för et Feld för jet enzejevve kenne mer nit, De moss schunn „create“, „comment“, „search“, „search2“, udder „fulltext“ doför aanjevve.", + "inputbox-error-bad-type": "De Zoot „$1“ för et Feld för jet enzejävve kenne mer nit, De moss schunn „create“, „comment“, „search“, „search2“, udder „fulltext“ doför aanjävve.", "inputbox-tryexact": "Versök en akkurate Ãœvvereinstimmung:", "inputbox-searchfulltext": "Sök durch dä janze Tex", "inputbox-createarticle": "Sigg aanlääje", diff --git a/extensions/InputBox/i18n/lt.json b/extensions/InputBox/i18n/lt.json index 491ef051..5673c17f 100644 --- a/extensions/InputBox/i18n/lt.json +++ b/extensions/InputBox/i18n/lt.json @@ -1,11 +1,18 @@ { "@metadata": { "authors": [ - "Vogone" + "Vogone", + "Albertas" ] }, + "inputbox-desc": "Leisti iÅ¡ anksto apibrėžtų HTML formų įterpimÄ…", + "inputbox-error-no-type": "JÅ«s nenurodÄ—te įvesties dėžutÄ—s tipo.", + "inputbox-error-bad-type": "Neatpažintas įvesties dėžutÄ—s tipas \"$1\".\nPraÅ¡ome nurodyti \"create\", \"comment\", \"search\", \"search2\" arba \"fulltext\".", "inputbox-tryexact": "MÄ—ginti tikslų atitikimÄ…", "inputbox-searchfulltext": "IeÅ¡koti pilno teksto", "inputbox-createarticle": "Kurti straipsnį", + "inputbox-movearticle": "Perkelti puslapį", + "inputbox-postcomment": "Naujas skyrius", + "inputbox-postcommenttitle": "Naujas skyrius", "inputbox-ns-main": "Pagrindinis" } diff --git a/extensions/InputBox/i18n/luz.json b/extensions/InputBox/i18n/luz.json new file mode 100644 index 00000000..392e3a3d --- /dev/null +++ b/extensions/InputBox/i18n/luz.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "علی ساکی لرستانی" + ] + }, + "inputbox-tryexact": "تطبیق مۉرد Û‰Ú¾ مۉرد رنه آزمایش Ú©Û‰" +} diff --git a/extensions/InputBox/i18n/mg.json b/extensions/InputBox/i18n/mg.json new file mode 100644 index 00000000..9f7f93f7 --- /dev/null +++ b/extensions/InputBox/i18n/mg.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Jagwar" + ] + }, + "inputbox-tryexact": "Hanandrana io soratra io" +} diff --git a/extensions/InputBox/i18n/mr.json b/extensions/InputBox/i18n/mr.json index 2020d4e7..de58d000 100644 --- a/extensions/InputBox/i18n/mr.json +++ b/extensions/InputBox/i18n/mr.json @@ -10,7 +10,7 @@ "inputbox-desc": "पूरà¥à¤µà¥€ लिहिलेले HTML अरà¥à¤œ वापरणà¥à¤¯à¤¾à¤šà¥€ परवानगी दà¥à¤¯à¤¾", "inputbox-error-no-type": "कà¥à¤ à¤²à¥à¤¯à¤¾ पà¥à¤°à¤•à¤¾à¤°à¤šà¥€ पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€ तयार करायची ते तà¥à¤®à¥à¤¹à¥€ सà¥à¤ªà¤·à¥à¤Ÿ केलेले नाही.", "inputbox-error-bad-type": "तà¥à¤®à¥à¤¹à¥€ दिलेला पृषà¥à¤ à¤ªà¥‡à¤Ÿà¥€à¤šà¤¾ \"$1\" हा पà¥à¤°à¤•à¤¾à¤° ओळखीचा नाही. \nकृपया \"create\", \"comment\", \"search\" किंवा \"search2\" किंवा \"fulltext\".यातील à¤à¤• निवडा.", - "inputbox-tryexact": "दिलेलेच शबà¥à¤¦ शोधा", + "inputbox-tryexact": "नेमके अनà¥à¤°à¥à¤ª शबà¥à¤¦ शोधा", "inputbox-searchfulltext": "पूरà¥à¤£ मजकूर शोधा", "inputbox-createarticle": "लेख बनवा", "inputbox-ns-main": "मà¥à¤–à¥à¤¯" diff --git a/extensions/InputBox/i18n/mzn.json b/extensions/InputBox/i18n/mzn.json index 55fbc05f..5a0cca8b 100644 --- a/extensions/InputBox/i18n/mzn.json +++ b/extensions/InputBox/i18n/mzn.json @@ -6,5 +6,6 @@ "محک" ] }, + "inputbox-tryexact": "کلمه-کلمه مطابقت ره Ú†Ú© هاکن", "inputbox-createarticle": "صÙحه بساتن" } diff --git a/extensions/InputBox/i18n/nap.json b/extensions/InputBox/i18n/nap.json index 7c99645a..f1701912 100644 --- a/extensions/InputBox/i18n/nap.json +++ b/extensions/InputBox/i18n/nap.json @@ -6,7 +6,14 @@ "C.R." ] }, + "inputbox-desc": "Premmettesse appennere module predefinite HTML", + "inputbox-error-no-type": "Nun avite specificato 'o tipo 'e casciulella d'input a crià.", + "inputbox-error-bad-type": "Casciulella d'input \"$1\" scanusciuta.\nPe' piacere specificate \"create\", \"comment\", \"search\", \"search2\" o \"fulltext\".", "inputbox-tryexact": "Pròva cu nu cunfronto eguale-eguale", "inputbox-searchfulltext": "Ascià dint''o testo", - "inputbox-createarticle": "Cria paggena" + "inputbox-createarticle": "Cria paggena", + "inputbox-movearticle": "Mòve paggena", + "inputbox-postcomment": "Seziona nova", + "inputbox-postcommenttitle": "Seziona nova", + "inputbox-ns-main": "Prencepale" } diff --git a/extensions/InputBox/i18n/ne.json b/extensions/InputBox/i18n/ne.json index 5f05eddd..10e1dd9e 100644 --- a/extensions/InputBox/i18n/ne.json +++ b/extensions/InputBox/i18n/ne.json @@ -1,4 +1,9 @@ { - "@metadata": [], - "inputbox-createarticle": "लेख थालà¥à¤¨à¥à¤¹à¥‹à¤¸à¥" + "@metadata": { + "authors": [ + "NehalDaveND" + ] + }, + "inputbox-createarticle": "लेख थालà¥à¤¨à¥à¤¹à¥‹à¤¸à¥", + "inputbox-ns-main": "मà¥à¤–à¥à¤¯" } diff --git a/extensions/InputBox/i18n/nl.json b/extensions/InputBox/i18n/nl.json index 919090d7..d6afa5bc 100644 --- a/extensions/InputBox/i18n/nl.json +++ b/extensions/InputBox/i18n/nl.json @@ -8,7 +8,7 @@ "inputbox-desc": "Maakt het toevoegen van voorgedefinieerde HTML-formulieren mogelijk", "inputbox-error-no-type": "U hebt het type invoerveld niet opgegeven.", "inputbox-error-bad-type": "Type invoerveld \"$1\" niet herkend.\nGebruik \"create\", \"comment\", \"search\", \"search2\" of \"fulltext\".", - "inputbox-tryexact": "Zoeken op exacte overeenkomst", + "inputbox-tryexact": "Op exacte overeenkomst zoeken", "inputbox-searchfulltext": "Volledige tekst doorzoeken", "inputbox-createarticle": "Pagina aanmaken", "inputbox-movearticle": "Pagina hernoemen", diff --git a/extensions/InputBox/i18n/olo.json b/extensions/InputBox/i18n/olo.json new file mode 100644 index 00000000..a476f1ae --- /dev/null +++ b/extensions/InputBox/i18n/olo.json @@ -0,0 +1,15 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7", + "Ilja.mos" + ] + }, + "inputbox-tryexact": "Opi tarkah yhtehpädijiä", + "inputbox-searchfulltext": "EÄi kogo tekstal", + "inputbox-createarticle": "Luaji sivu", + "inputbox-movearticle": "Siirrä sivu", + "inputbox-postcomment": "Uuzi sektsii", + "inputbox-postcommenttitle": "Uuzi sektsii", + "inputbox-ns-main": "Piänimitila" +} diff --git a/extensions/InputBox/i18n/pa.json b/extensions/InputBox/i18n/pa.json new file mode 100644 index 00000000..1ad44de7 --- /dev/null +++ b/extensions/InputBox/i18n/pa.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Satdeep gill" + ] + }, + "inputbox-tryexact": "ਹੂਬਹੂ ਲਿਖਤ ਨਾਲ ਕਰੋ" +} diff --git a/extensions/InputBox/i18n/ps.json b/extensions/InputBox/i18n/ps.json index a48ab23c..e9403a1d 100644 --- a/extensions/InputBox/i18n/ps.json +++ b/extensions/InputBox/i18n/ps.json @@ -8,5 +8,8 @@ "inputbox-tryexact": "Ú©Ù¼ مټ انډول ÙŠÛ ÙˆØ¢Ø²Ù…ÙˆÙŠÙ‡", "inputbox-searchfulltext": "بشپړ متن پلټل", "inputbox-createarticle": "Ù†ÙˆÛ Ù„ÙŠÚ©Ù†Ù‡ پيلول", + "inputbox-movearticle": "مخ Ù„Ûږدول", + "inputbox-postcomment": "Ù†ÙˆÛ Ø¨Ø±Ø®Ù‡", + "inputbox-postcommenttitle": "Ù†ÙˆÛ Ø¨Ø±Ø®Ù‡", "inputbox-ns-main": "آرنی" } diff --git a/extensions/InputBox/i18n/ro.json b/extensions/InputBox/i18n/ro.json index 3bf6163d..bc3eff5b 100644 --- a/extensions/InputBox/i18n/ro.json +++ b/extensions/InputBox/i18n/ro.json @@ -7,7 +7,8 @@ "KlaudiuMihaila", "Mihai", "Minisarm", - "Danutz" + "Danutz", + "ImGelu" ] }, "inputbox-desc": "Permite includerea formelor HTML predefinite", diff --git a/extensions/InputBox/i18n/sa.json b/extensions/InputBox/i18n/sa.json index 20634e87..9f0b87ab 100644 --- a/extensions/InputBox/i18n/sa.json +++ b/extensions/InputBox/i18n/sa.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Ansumang", - "Shubha" + "Shubha", + "NehalDaveND" ] }, "inputbox-desc": "पूरà¥à¤µà¤¨à¤¿à¤°à¥‚पितसà¥à¤¯ HTML पà¥à¤°à¤ªà¤¤à¥à¤°à¤¯à¥‹à¤œà¤¨à¤®à¥ अनà¥à¤®à¤¨à¥à¤¯à¤¤à¤¾à¤®à¥", @@ -11,5 +12,8 @@ "inputbox-tryexact": "दतà¥à¤¤à¤ƒ शबà¥à¤¦à¤ƒ à¤à¤µ लिखà¥à¤¯à¤¤à¤¾à¤®à¥", "inputbox-searchfulltext": "समà¥à¤ªà¥‚रà¥à¤£à¤ƒ पाठà¥à¤¯à¤¾à¤‚शः अनà¥à¤µà¤¿à¤·à¥à¤¯à¤¤à¤¾à¤®à¥", "inputbox-createarticle": "पृषà¥à¤ à¤‚ सृजà¥à¤¯à¤¤à¤¾à¤®à¥", - "inputbox-ns-main": "मà¥à¤–à¥à¤¯" + "inputbox-movearticle": "शीरà¥à¤·à¤•à¤‚ परिवरà¥à¤¤à¥à¤¯à¤¤à¤¾à¤®à¥", + "inputbox-postcomment": "नवीनः विभागः", + "inputbox-postcommenttitle": "नवीनः विभागः", + "inputbox-ns-main": "मà¥à¤–à¥à¤¯à¤®à¥" } diff --git a/extensions/InputBox/i18n/scn.json b/extensions/InputBox/i18n/scn.json index 7f251e4c..d6712d0e 100644 --- a/extensions/InputBox/i18n/scn.json +++ b/extensions/InputBox/i18n/scn.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Aushulz", - "Santu" + "Santu", + "Sarvaturi" ] }, "inputbox-desc": "Pirmetti nzirimenti di mòduli HTML predifiniti", @@ -10,6 +11,6 @@ "inputbox-error-bad-type": "\"$1\" nun è nu tipu di inputbox canusciutu. S'hà scègghiri lu tipu ntra \"create\", \"comment\", \"search\" e \"search2\".", "inputbox-tryexact": "Cerca currispunnenza giusta", "inputbox-searchfulltext": "Circata ntô testu", - "inputbox-createarticle": "Cria vuci", + "inputbox-createarticle": "Crea vuci", "inputbox-ns-main": "Principali" } diff --git a/extensions/InputBox/i18n/sco.json b/extensions/InputBox/i18n/sco.json new file mode 100644 index 00000000..678c1263 --- /dev/null +++ b/extensions/InputBox/i18n/sco.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "AmaryllisGardener" + ] + }, + "inputbox-tryexact": "Try exact match" +} diff --git a/extensions/InputBox/i18n/sd.json b/extensions/InputBox/i18n/sd.json index 6b3f87e3..2aacf655 100644 --- a/extensions/InputBox/i18n/sd.json +++ b/extensions/InputBox/i18n/sd.json @@ -1,4 +1,8 @@ { - "@metadata": [], - "inputbox-createarticle": "نئون مضمون Ù„Ú©Ùˆ" + "@metadata": { + "authors": [ + "Mehtab ahmed" + ] + }, + "inputbox-createarticle": "نئون مضمون تخليق ڪريو" } diff --git a/extensions/InputBox/i18n/sgs.json b/extensions/InputBox/i18n/sgs.json index a03e3070..57073e8d 100644 --- a/extensions/InputBox/i18n/sgs.json +++ b/extensions/InputBox/i18n/sgs.json @@ -4,5 +4,6 @@ "Hugo.arg" ] }, + "inputbox-tryexact": "MiegÄ«kat tÄ—kslÄ— paÄ—iÅ¡ka", "inputbox-searchfulltext": "Ä–iÅ¡kuotÄ— pÄ—lna teksta" } diff --git a/extensions/InputBox/i18n/sh.json b/extensions/InputBox/i18n/sh.json index 2c0f9576..5bd764a3 100644 --- a/extensions/InputBox/i18n/sh.json +++ b/extensions/InputBox/i18n/sh.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Kolega2357" + "Kolega2357", + "OC Ripper" ] }, + "inputbox-tryexact": "Isprobaj naći taÄan upit", "inputbox-searchfulltext": "Pretraži cijeli tekst - Претражи цео текÑÑ‚" } diff --git a/extensions/InputBox/i18n/tcy.json b/extensions/InputBox/i18n/tcy.json new file mode 100644 index 00000000..432d98f9 --- /dev/null +++ b/extensions/InputBox/i18n/tcy.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Bharathesha Alasandemajalu", + "Vishwanatha Badikana" + ] + }, + "inputbox-tryexact": "ಸರಿಯಾಯಿನ ಹೊಂದಾಣಿಕೆಗೠಪà³à²°à²¯à²¤à³à²¨à³Š ಮಲà³à²ªà³à²²à³†" +} diff --git a/extensions/InputBox/i18n/te.json b/extensions/InputBox/i18n/te.json index 74217b66..0a679de0 100644 --- a/extensions/InputBox/i18n/te.json +++ b/extensions/InputBox/i18n/te.json @@ -12,5 +12,7 @@ "inputbox-tryexact": "à°–à°šà±à°šà°¿à°¤à°®à±ˆà°¨ పోలిక కొరకౠపà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±", "inputbox-searchfulltext": "పూరà±à°¤à°¿ పాఠà±à°¯à°‚లో వెతà±à°•à±", "inputbox-createarticle": "à°µà±à°¯à°¾à°¸à°¾à°¨à±à°¨à°¿ సృషà±à°Ÿà°¿à°‚à°šà±", + "inputbox-postcomment": "కొతà±à°¤ విభాగం", + "inputbox-postcommenttitle": "కొతà±à°¤ విభాగం", "inputbox-ns-main": "à°ªà±à°°à°§à°¾à°¨" } diff --git a/extensions/InputBox/i18n/tr.json b/extensions/InputBox/i18n/tr.json index 045e0e52..37465729 100644 --- a/extensions/InputBox/i18n/tr.json +++ b/extensions/InputBox/i18n/tr.json @@ -4,7 +4,8 @@ "Emperyan", "Erkan Yilmaz", "Joseph", - "Srhat" + "Srhat", + "Arystanbek" ] }, "inputbox-desc": "Öntanımlı HTML formlarının dahil edilmesine olanak verir", @@ -13,5 +14,8 @@ "inputbox-tryexact": "Tam eÅŸleÅŸme dene", "inputbox-searchfulltext": "Tüm metni ara", "inputbox-createarticle": "Sayfayı oluÅŸtur", + "inputbox-movearticle": "Sayfayı taşı", + "inputbox-postcomment": "Yeni bölüm", + "inputbox-postcommenttitle": "Yeni bölüm", "inputbox-ns-main": "Ana" } diff --git a/extensions/InputBox/i18n/war.json b/extensions/InputBox/i18n/war.json new file mode 100644 index 00000000..d75bf1aa --- /dev/null +++ b/extensions/InputBox/i18n/war.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "JinJian" + ] + }, + "inputbox-tryexact": "Pagbiling hin kapareho" +} diff --git a/extensions/InputBox/i18n/wuu.json b/extensions/InputBox/i18n/wuu.json index 4569ea94..eb87a668 100644 --- a/extensions/InputBox/i18n/wuu.json +++ b/extensions/InputBox/i18n/wuu.json @@ -1,5 +1,10 @@ { - "@metadata": [], + "@metadata": { + "authors": [ + "Poiuyt" + ] + }, + "inputbox-tryexact": "试试精准é…对", "inputbox-searchfulltext": "全文æœå¯»", "inputbox-createarticle": "建立新文章" } diff --git a/extensions/InputBox/i18n/xmf.json b/extensions/InputBox/i18n/xmf.json new file mode 100644 index 00000000..4f404aa5 --- /dev/null +++ b/extensions/InputBox/i18n/xmf.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Silovan" + ] + }, + "inputbox-tryexact": "ქáƒáƒªáƒáƒ“ი ზუსტი áƒáƒ™áƒáƒ®áƒ•áƒáƒšáƒáƒ›áƒ" +} diff --git a/extensions/InputBox/resources/ext.inputBox.js b/extensions/InputBox/resources/ext.inputBox.js index 2469fd13..7df4eeab 100644 --- a/extensions/InputBox/resources/ext.inputBox.js +++ b/extensions/InputBox/resources/ext.inputBox.js @@ -2,7 +2,7 @@ * Disable InputBox submit button when the corresponding text input field is empty. * * @author Tony Thomas - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + * @license http://opensource.org/licenses/MIT MIT License */ ( function ( $, mw ) { 'use strict'; diff --git a/extensions/InputBox/resources/ext.inputBox.styles.css b/extensions/InputBox/resources/ext.inputBox.styles.css index 9a996a4a..d2d1e13b 100644 --- a/extensions/InputBox/resources/ext.inputBox.styles.css +++ b/extensions/InputBox/resources/ext.inputBox.styles.css @@ -13,3 +13,7 @@ display: inline-table !important; white-space: nowrap; } + +.mw-inputbox-input { + margin-bottom: 0.5em; +} \ No newline at end of file diff --git a/extensions/Interwiki/Gruntfile.js b/extensions/Interwiki/Gruntfile.js new file mode 100644 index 00000000..dab0b263 --- /dev/null +++ b/extensions/Interwiki/Gruntfile.js @@ -0,0 +1,33 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.loadNpmTasks( 'grunt-contrib-jshint' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jscs' ); + + grunt.initConfig( { + jshint: { + options: { + jshintrc: true + }, + all: [ + '*.js' + ] + }, + jscs: { + src: '<%= jshint.all %>' + }, + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '*.json', + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/Interwiki/Interwiki.alias.php b/extensions/Interwiki/Interwiki.alias.php index db18c5fe..321ce9fc 100644 --- a/extensions/Interwiki/Interwiki.alias.php +++ b/extensions/Interwiki/Interwiki.alias.php @@ -19,7 +19,7 @@ $specialPageAliases['ar'] = array( 'Interwiki' => array( 'إنترويكي' ), ); -/** Egyptian Spoken Arabic (مصرى) */ +/** Egyptian Arabic (مصرى) */ $specialPageAliases['arz'] = array( 'Interwiki' => array( 'إنترويكى' ), ); @@ -61,10 +61,10 @@ $specialPageAliases['cdo'] = array( /** Chechen (нохчийн) */ $specialPageAliases['ce'] = array( - 'Interwiki' => array( 'Юкъарвики' ), + 'Interwiki' => array( 'Юкъарвикаш' ), ); -/** Sorani Kurdish (کوردی) */ +/** Central Kurdish (کوردیی ناوەندی) */ $specialPageAliases['ckb'] = array( 'Interwiki' => array( 'نێوانویکی' ), ); @@ -99,7 +99,7 @@ $specialPageAliases['fa'] = array( 'Interwiki' => array( 'میان‌ویکی' ), ); -/** Franco-Provençal (arpetan) */ +/** Arpitan (arpetan) */ $specialPageAliases['frp'] = array( 'Interwiki' => array( 'Entèrvouiqui' ), ); @@ -179,9 +179,9 @@ $specialPageAliases['lad'] = array( 'Interwiki' => array( 'Interviki' ), ); -/** لوری (لوری) */ +/** Northern Luri (لۊری شومالی) */ $specialPageAliases['lrc'] = array( - 'Interwiki' => array( 'مینجا_ویکی' ), + 'Interwiki' => array( 'مینجا_ڤیکی' ), ); /** Macedonian (македонÑки) */ diff --git a/extensions/Interwiki/Interwiki_body.php b/extensions/Interwiki/Interwiki_body.php index 5d6d530e..c52907b2 100644 --- a/extensions/Interwiki/Interwiki_body.php +++ b/extensions/Interwiki/Interwiki_body.php @@ -212,7 +212,7 @@ class SpecialInterwiki extends SpecialPage { } function doSubmit() { - global $wgMemc, $wgContLang; + global $wgContLang; $request = $this->getRequest(); $prefix = $request->getVal( 'wpInterwikiPrefix' ); @@ -242,7 +242,7 @@ class SpecialInterwiki extends SpecialPage { $this->getOutput()->addWikiMsg( 'interwiki_deleted', $prefix ); $log = new LogPage( 'interwiki' ); $log->addEntry( 'iw_delete', $selfTitle, $reason, array( $prefix ) ); - $wgMemc->delete( wfMemcKey( 'interwiki', $prefix ) ); + Interwiki::invalidateCache( $prefix ); } break; case 'add': @@ -288,14 +288,14 @@ class SpecialInterwiki extends SpecialPage { $this->getOutput()->addWikiMsg( "interwiki_{$do}ed", $prefix ); $log = new LogPage( 'interwiki' ); $log->addEntry( 'iw_' . $do, $selfTitle, $reason, array( $prefix, $theurl, $trans, $local ) ); - $wgMemc->delete( wfMemcKey( 'interwiki', $prefix ) ); + Interwiki::invalidateCache( $prefix ); } break; } } function showList() { - global $wgInterwikiCentralDB; + global $wgInterwikiCentralDB, $wgInterwikiViewOnly; $canModify = $this->canModify(); // Build lists @@ -333,11 +333,15 @@ class SpecialInterwiki extends SpecialPage { // Page intro content $this->getOutput()->addWikiMsg( 'interwiki_intro' ); - $logLink = Linker::link( - SpecialPage::getTitleFor( 'Log', 'interwiki' ), - $this->msg( 'interwiki-logtext' )->escaped() - ); - $this->getOutput()->addHTML( '

    ' . $logLink . '

    ' ); + + // Add 'view log' link when possible + if ( $wgInterwikiViewOnly === false ) { + $logLink = Linker::link( + SpecialPage::getTitleFor( 'Log', 'interwiki' ), + $this->msg( 'interwiki-logtext' )->escaped() + ); + $this->getOutput()->addHTML( '

    ' . $logLink . '

    ' ); + } // Add 'add' link if ( $canModify ) { @@ -353,7 +357,7 @@ class SpecialInterwiki extends SpecialPage { $this->getOutput()->addWikiMsg( 'interwiki-legend' ); if ( !is_array( $iwPrefixes ) || count( $iwPrefixes ) === 0 ) { - if ( !is_array( $iwGlobalPrefixes ) || count( $iwGlobalPrefixes ) === 0 ) { + if ( !is_array( $iwGlobalPrefixes ) || count( $iwGlobalPrefixes ) === 0 ) { // If the interwiki table(s) are empty, display an error message $this->error( 'interwiki_error' ); return; diff --git a/extensions/Interwiki/composer.json b/extensions/Interwiki/composer.json new file mode 100644 index 00000000..99741dd4 --- /dev/null +++ b/extensions/Interwiki/composer.json @@ -0,0 +1,12 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9", + "mediawiki/mediawiki-codesniffer": "0.5.0" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude vendor", + "phpcs -p -s" + ] + } +} diff --git a/extensions/Interwiki/extension.json b/extensions/Interwiki/extension.json index 49bd511c..3ce3ea3c 100644 --- a/extensions/Interwiki/extension.json +++ b/extensions/Interwiki/extension.json @@ -15,7 +15,11 @@ ], "url": "https://www.mediawiki.org/wiki/Extension:Interwiki", "descriptionmsg": "interwiki-desc", + "license-name": "GPL-2.0+", "type": "specialpage", + "requires": { + "MediaWiki": ">= 1.26.0" + }, "ExtensionMessagesFiles": { "InterwikiAlias": "Interwiki.alias.php" }, @@ -55,5 +59,6 @@ "InterwikiHooks": "Interwiki_hooks.php", "SpecialInterwiki": "Interwiki_body.php", "InterwikiLogFormatter": "Interwiki_body.php" - } + }, + "manifest_version": 1 } diff --git a/extensions/Interwiki/i18n/ast.json b/extensions/Interwiki/i18n/ast.json index 84077de3..224147da 100644 --- a/extensions/Interwiki/i18n/ast.json +++ b/extensions/Interwiki/i18n/ast.json @@ -7,7 +7,8 @@ "interwiki": "Ver y editar los datos d'interwiki", "interwiki-title-norights": "Ver los datos d'interwiki", "interwiki-desc": "Amiesta una [[Special:Interwiki|páxina especial]] pa ver y editar la tabla d'interwiki", - "interwiki_intro": "Esta ye una vista xeneral de la tabla d'interwikis.", + "interwiki_intro": "Esti ye un resume de la tabla d'interwikis, que define los prefixos d'atayu usaos pa enllazar rápidamente diferentes wikis y otros sitios esternos. Pa recomendaciones d'usu ver [//www.mediawiki.org/wiki/Extension:Interwiki el manual en MediaWiki.org].", + "interwiki-legend-label": "Lleenda", "interwiki_prefix": "Prefixu", "interwiki-prefix-label": "Prefixu:", "interwiki_prefix_intro": "Prefixu d'interwiki a usar cola sintaxis de testu wiki [[prefixu:nome de la páxina]].", @@ -30,7 +31,9 @@ "interwiki_deleting": "Tas desaniciando'l prefixu «$1».", "interwiki_deleted": "El prefixu «$1» se desanició correutamente de la tabla d'interwiki.", "interwiki_delfailed": "El prefixu «$1» nun se pudo desaniciar de la tabla d'interwiki.", - "interwiki_addtext": "Amestar un prefixu d'interwiki", + "interwiki-logtext": "Ver el rexistru", + "interwiki_addtext": "Amestar un prefixu interwiki o de llingua", + "interwiki-addtext-local": "Amestar un prefixu interwiki o de llingua llocal", "interwiki_addintro": "Tas amestando un nuevu prefixu interwiki.\nRecuerda que nun pue contener espacios ( ), dos puntos (:), nin los signos (&) nin (=).", "interwiki_addbutton": "Amestar", "interwiki_added": "El prefixu «$1» s'amestó correutamente a la tabla d'interwiki.", @@ -39,7 +42,7 @@ "interwiki_editintro": "Tas editando un prefixu d'interwiki.\nRecuerda qu'esto pue francer enllaces esistentes.", "interwiki_edited": "El prefixu «$1» se camudó correutamente na tabla d'interwiki.", "interwiki_editerror": "El prefixu «$1» nun se pudo camudar na tabla d'interwiki.\nSeique nun esista.", - "interwiki-badprefix": "El prefixu d'interwiki conseñáu «$1» contién caráuteres non válidos", + "interwiki-badprefix": "El prefixu d'interwiki conseñáu «$1» contien caráuteres inválidos", "interwiki-submit-empty": "El prefixu y la URL nun puen tar baleros.", "interwiki-submit-invalidurl": "El protocolu de la URL nun ye válidu.", "log-name-interwiki": "Rexistru de la tabla d'interwiki", @@ -48,5 +51,12 @@ "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|desanició}}'l prefixu \"$4\" de la tabla d'interwiki", "log-description-interwiki": "Esti ye un rexistru de los cambios fechos na [[Special:Interwiki|tabla d'interwiki]].", "right-interwiki": "Editar los datos d'interwiki", - "action-interwiki": "camudar esta entrada d'interwiki" + "action-interwiki": "camudar esta entrada d'interwiki", + "interwiki-global-links": "Prefixos interwiki globales", + "interwiki-global-description": "Estes prefixos heredense d'una configuración global y pueden editase namái na wiki d'orixe.", + "interwiki-local-links": "Prefixos interwiki llocales", + "interwiki-local-description": "Estes prefixos esisten de mou llocal. Cualquier duplicáu de la configuración global sobrescribirá la definición global.", + "interwiki-links": "Prefixos interwiki", + "interwiki-language-links": "Prefixos interllingüísticos", + "interwiki-language-description": "Estes prefixos concuayen colos códigos de lingua definíos, y usaránse pa crear la llista «{{int:otherlanguages}}» al amestase a una páxina." } diff --git a/extensions/Interwiki/i18n/bn.json b/extensions/Interwiki/i18n/bn.json index 68716c15..16b06cb8 100644 --- a/extensions/Interwiki/i18n/bn.json +++ b/extensions/Interwiki/i18n/bn.json @@ -3,7 +3,8 @@ "authors": [ "Aftab1995", "Wikitanvir", - "Tauhid16" + "Tauhid16", + "Aftabuzzaman" ] }, "interwiki": "আনà§à¦¤à¦ƒà¦‰à¦‡à¦•à¦¿ তথà§à¦¯ দেখà§à¦¨ ও সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨", diff --git a/extensions/Interwiki/i18n/ce.json b/extensions/Interwiki/i18n/ce.json index 63bffe21..ab9117bf 100644 --- a/extensions/Interwiki/i18n/ce.json +++ b/extensions/Interwiki/i18n/ce.json @@ -25,7 +25,7 @@ "interwiki_1": "ÑŽ", "interwiki_0": "Ñц", "interwiki_edit": "ÐиÑъе", - "interwiki_reasonfield": "Бахьна:", + "interwiki_reasonfield": "Бахьана:", "interwiki_delquestion": "«$1» дӀаÑккхар", "interwiki-logtext": "Тептаршка хьажар", "interwiki_addbutton": "ТӀетоха", diff --git a/extensions/Interwiki/i18n/de.json b/extensions/Interwiki/i18n/de.json index 8a566248..f3c336d3 100644 --- a/extensions/Interwiki/i18n/de.json +++ b/extensions/Interwiki/i18n/de.json @@ -14,7 +14,7 @@ }, "interwiki": "Interwikidaten ansehen und bearbeiten", "interwiki-title-norights": "Interwikidaten ansehen", - "interwiki-desc": "Ergänzt eine [[Special:Interwiki|Spezialseite]] zur Pflege der Interwikitabelle", + "interwiki-desc": "Eine [[Special:Interwiki|Spezialseite]] zur Pflege der Interwikitabelle", "interwiki_intro": "Diese Seite bietet einen Ãœberblick des Inhalts der Interwikitabelle dieses Wikis, die die verwendeten Präfixkürzel zur schnellen Verlinkung auf unterschiedliche Wikis und andere externe Websites definiert. Zur empfohlenen Verwendung, siehe bitte [//www.mediawiki.org/wiki/Extension:Interwiki das Handbuch auf MediaWiki.org].", "interwiki-legend-label": "Legende", "interwiki_prefix": "Präfix", diff --git a/extensions/Interwiki/i18n/el.json b/extensions/Interwiki/i18n/el.json index 04d3eede..c90ed8c2 100644 --- a/extensions/Interwiki/i18n/el.json +++ b/extensions/Interwiki/i18n/el.json @@ -8,7 +8,8 @@ "Omnipaedista", "Protnet", "ZaDiak", - "Geraki" + "Geraki", + "Badseed" ] }, "interwiki": "Εμφάνιση και επεξεÏγασία δεδομένων interwiki", @@ -40,7 +41,7 @@ "interwiki_delfailed": "Το Ï€Ïόθεμα «$1» δεν μποÏεί να καταÏγηθεί από τον πίνακα interwiki.", "interwiki-logtext": "ΠÏοβολή αÏχείου καταγÏαφής", "interwiki_addtext": "ΠÏοσθήκη ενός Ï€Ïοθέματος interwiki", - "interwiki_addintro": "Πάτε να Ï€Ïοσθέσετε ένα νέο Ï€Ïόθεμα interwiki.\nÎα θυμάστε ότι δεν μποÏεί να πεÏιέχει κενό διάστημα ( ), άνω και κάτω τελεία (:), σÏμβολο «και» (&) ή «ίσον» (=).", + "interwiki_addintro": "ΠÏόκειται να Ï€Ïοσθέσετε ένα νέο Ï€Ïόθεμα interwiki.\nÎα θυμάστε ότι δεν μποÏεί να πεÏιέχει κενό διάστημα ( ), άνω και κάτω τελεία (:), συμπλεκτικό σÏμβολο (&) ή «ίσον» (=).", "interwiki_addbutton": "ΠÏοσθήκη", "interwiki_added": "Το Ï€Ïόθεμα «$1» Ï€Ïοστέθηκε με επιτυχία στον πίνακα interwiki.", "interwiki_addfailed": "Το Ï€Ïόθεμα «$1» δεν ήταν δυνατόν να Ï€Ïοστεθεί στον πίνακα interwiki.\nΠιθανώς υπάÏχει ήδη στον πίνακα interwiki.", diff --git a/extensions/Interwiki/i18n/en.json b/extensions/Interwiki/i18n/en.json index c9347214..3ba6e058 100644 --- a/extensions/Interwiki/i18n/en.json +++ b/extensions/Interwiki/i18n/en.json @@ -1,71 +1,71 @@ { - "@metadata": { - "authors": [ - "Stephanie Amanda Stevens", - "SPQRobin", - "Purodha", - "Isarra" - ] - }, - "interwiki": "View and edit interwiki data", - "interwiki-title-norights": "View interwiki data", - "interwiki-desc": "Adds a [[Special:Interwiki|special page]] to view and edit the interwiki table", - "interwiki_intro": "This is an overview of the interwiki table, which defines the prefix shortcuts used to quickly link to different wikis and other external sites. For recommended use, please see [//www.mediawiki.org/wiki/Extension:Interwiki the manual on MediaWiki.org].", - "interwiki-legend-label": "Legend", - "interwiki-legend": "{| class=\"wikitable intro mw-interwikitable mw-interwiki-legend mw-collapsible mw-collapsed\"\n!colspan=3|{{int:interwiki-legend-label}}\n|-\n!{{int:interwiki_prefix}}\n|colspan=2|{{int:interwiki_prefix_intro}}\n|-\n!{{int:interwiki_url}}\n|colspan=2|{{int:interwiki_url_intro}}\n|-\n!rowspan=2|{{int:interwiki_local}}\n!{{int:interwiki_1}}\n|{{int:interwiki_local_1_intro}}\n|-\n!{{int:interwiki_0}}\n|{{int:interwiki_local_0_intro}}\n|-\n!rowspan=2|{{int:interwiki_trans}}\n!{{int:interwiki_1}}\n|{{int:interwiki_trans_1_intro}}\n|-\n!{{int:interwiki_0}}\n|{{int:interwiki_trans_0_intro}}\n|-\n|}", - "interwiki_prefix": "Prefix", - "interwiki-prefix-label": "Prefix:", - "interwiki_prefix_intro": "Interwiki prefix to be used in [[prefix:pagename]] wikitext syntax.", - "interwiki_url": "URL", - "interwiki-url-label": "URL:", - "interwiki_url_intro": "Template for URLs. The placeholder $1 will be replaced by the pagename in [[prefix:pagename]].", - "interwiki_local": "Forward", - "interwiki-local-label": "Forward:", - "interwiki_local_0_intro": "External HTTP requests to the local wiki using this interwiki prefix in the URL will result in a \"{{int:badtitle}}\" error page.", - "interwiki_local_1_intro": "External HTTP requests to the local wiki using this interwiki prefix will be redirected to the target URL of the interwiki (i.e. treated like links to local pages).", - "interwiki_trans": "Transclude", - "interwiki-trans-label": "Transclude:", - "interwiki_trans_1_intro": "If wikitext syntax {{prefix:pagename}} is used, allow template/page transclusion from the foreign wiki if interwiki transclusions are enabled in general ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion]).", - "interwiki_trans_0_intro": "Do not allow {{prefix:pagename}} to transclude foreign templates/pages, rather look for a local page in the template namespace.", - "interwiki_1": "yes", - "interwiki_0": "no", - "interwiki_error": "Error: The interwiki table is empty, or something else went wrong.", - "interwiki-cached": "The interwiki data is cached. Modifying the cache is not possible.", - "interwiki_edit": "Edit", - "interwiki_reasonfield": "Reason:", - "interwiki_delquestion": "Deleting \"$1\"", - "interwiki_deleting": "You are deleting prefix \"$1\".", - "interwiki_deleted": "Prefix \"$1\" was successfully removed from the interwiki table.", - "interwiki_delfailed": "Prefix \"$1\" could not be removed from the interwiki table.", - "interwiki-logtext": "View log", - "interwiki_addtext": "Add an interwiki or language prefix", - "interwiki-addtext-local": "Add a local interwiki or language prefix", - "interwiki_addintro": "You are adding a new interwiki prefix.\nRemember that it cannot contain spaces ( ), colons (:), ampersands (&), or equal signs (=).", - "interwiki_addbutton": "Add", - "interwiki_added": "Prefix \"$1\" was successfully added to the interwiki table.", - "interwiki_addfailed": "Prefix \"$1\" could not be added to the interwiki table.\nPossibly it already exists in the interwiki table.", - "interwiki-defaulturl": "http://www.example.com/$1", - "interwiki_edittext": "Editing an interwiki prefix", - "interwiki_editintro": "You are editing an interwiki prefix.\nRemember that this can break existing links.", - "interwiki_edited": "Prefix \"$1\" was successfully modified in the interwiki table.", - "interwiki_editerror": "Prefix \"$1\" could not be modified in the interwiki table.\nPossibly it does not exist.", - "interwiki-badprefix": "Specified interwiki prefix \"$1\" contains invalid characters", - "interwiki-submit-empty": "The prefix and URL cannot be empty.", - "interwiki-submit-invalidurl": "The protocol of the URL is invalid.", - "log-name-interwiki": "Interwiki table log", - "logentry-interwiki-iw_add": "$1 {{GENDER:$2|added}} prefix \"$4\" ($5) (trans: $6; local: $7) to the interwiki table", - "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|modified}} prefix \"$4\" ($5) (trans: $6; local: $7) in the interwiki table", - "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|removed}} prefix \"$4\" from the interwiki table", - "log-description-interwiki": "This is a log of changes to the [[Special:Interwiki|interwiki table]].", - "logentry-interwiki-interwiki": "", - "right-interwiki": "Edit interwiki data", - "action-interwiki": "change this interwiki entry", - "interwiki-global-links": "Global interwiki prefixes", - "interwiki-global-description": "These prefixes are inherited from a global configuration, and can only be edited on the source wiki.", - "interwiki-local-links": "Local interwiki prefixes", - "interwiki-local-description": "These prefixes exist locally. Any duplicates with the global configuration will override the global definition.", - "interwiki-links": "Interwiki prefixes", - "interwiki-description": "", - "interwiki-language-links": "Interlanguage prefixes", - "interwiki-language-description": "These prefixes match defined language codes, and will be used to create the \"{{int:otherlanguages}}\" listing when added to a page." + "@metadata": { + "authors": [ + "Stephanie Amanda Stevens", + "SPQRobin", + "Purodha", + "Isarra" + ] + }, + "interwiki": "View and edit interwiki data", + "interwiki-title-norights": "View interwiki data", + "interwiki-desc": "Adds a [[Special:Interwiki|special page]] to view and edit the interwiki table", + "interwiki_intro": "This is an overview of the interwiki table, which defines the prefix shortcuts used to quickly link to different wikis and other external sites. For recommended use, please see [//www.mediawiki.org/wiki/Extension:Interwiki the manual on MediaWiki.org].", + "interwiki-legend-label": "Legend", + "interwiki-legend": "{| class=\"wikitable intro mw-interwikitable mw-interwiki-legend mw-collapsible mw-collapsed\"\n!colspan=3|{{int:interwiki-legend-label}}\n|-\n!{{int:interwiki_prefix}}\n|colspan=2|{{int:interwiki_prefix_intro}}\n|-\n!{{int:interwiki_url}}\n|colspan=2|{{int:interwiki_url_intro}}\n|-\n!rowspan=2|{{int:interwiki_local}}\n!{{int:interwiki_1}}\n|{{int:interwiki_local_1_intro}}\n|-\n!{{int:interwiki_0}}\n|{{int:interwiki_local_0_intro}}\n|-\n!rowspan=2|{{int:interwiki_trans}}\n!{{int:interwiki_1}}\n|{{int:interwiki_trans_1_intro}}\n|-\n!{{int:interwiki_0}}\n|{{int:interwiki_trans_0_intro}}\n|-\n|}", + "interwiki_prefix": "Prefix", + "interwiki-prefix-label": "Prefix:", + "interwiki_prefix_intro": "Interwiki prefix to be used in [[prefix:pagename]] wikitext syntax.", + "interwiki_url": "URL", + "interwiki-url-label": "URL:", + "interwiki_url_intro": "Template for URLs. The placeholder $1 will be replaced by the pagename in [[prefix:pagename]].", + "interwiki_local": "Forward", + "interwiki-local-label": "Forward:", + "interwiki_local_0_intro": "External HTTP requests to the local wiki using this interwiki prefix in the URL will result in a \"{{int:badtitle}}\" error page.", + "interwiki_local_1_intro": "External HTTP requests to the local wiki using this interwiki prefix will be redirected to the target URL of the interwiki (i.e. treated like links to local pages).", + "interwiki_trans": "Transclude", + "interwiki-trans-label": "Transclude:", + "interwiki_trans_1_intro": "If wikitext syntax {{prefix:pagename}} is used, allow template/page transclusion from the foreign wiki if interwiki transclusions are enabled in general ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion]).", + "interwiki_trans_0_intro": "Do not allow {{prefix:pagename}} to transclude foreign templates/pages, rather look for a local page in the template namespace.", + "interwiki_1": "yes", + "interwiki_0": "no", + "interwiki_error": "Error: The interwiki table is empty, or something else went wrong.", + "interwiki-cached": "The interwiki data is cached. Modifying the cache is not possible.", + "interwiki_edit": "Edit", + "interwiki_reasonfield": "Reason:", + "interwiki_delquestion": "Deleting \"$1\"", + "interwiki_deleting": "You are deleting prefix \"$1\".", + "interwiki_deleted": "Prefix \"$1\" was successfully removed from the interwiki table.", + "interwiki_delfailed": "Prefix \"$1\" could not be removed from the interwiki table.", + "interwiki-logtext": "View log", + "interwiki_addtext": "Add an interwiki or language prefix", + "interwiki-addtext-local": "Add a local interwiki or language prefix", + "interwiki_addintro": "You are adding a new interwiki prefix.\nRemember that it cannot contain spaces ( ), colons (:), ampersands (&), or equal signs (=).", + "interwiki_addbutton": "Add", + "interwiki_added": "Prefix \"$1\" was successfully added to the interwiki table.", + "interwiki_addfailed": "Prefix \"$1\" could not be added to the interwiki table.\nPossibly it already exists in the interwiki table.", + "interwiki-defaulturl": "http://www.example.com/$1", + "interwiki_edittext": "Editing an interwiki prefix", + "interwiki_editintro": "You are editing an interwiki prefix.\nRemember that this can break existing links.", + "interwiki_edited": "Prefix \"$1\" was successfully modified in the interwiki table.", + "interwiki_editerror": "Prefix \"$1\" could not be modified in the interwiki table.\nPossibly it does not exist.", + "interwiki-badprefix": "Specified interwiki prefix \"$1\" contains invalid characters", + "interwiki-submit-empty": "The prefix and URL cannot be empty.", + "interwiki-submit-invalidurl": "The protocol of the URL is invalid.", + "log-name-interwiki": "Interwiki table log", + "logentry-interwiki-iw_add": "$1 {{GENDER:$2|added}} prefix \"$4\" ($5) (trans: $6; local: $7) to the interwiki table", + "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|modified}} prefix \"$4\" ($5) (trans: $6; local: $7) in the interwiki table", + "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|removed}} prefix \"$4\" from the interwiki table", + "log-description-interwiki": "This is a log of changes to the [[Special:Interwiki|interwiki table]].", + "logentry-interwiki-interwiki": "", + "right-interwiki": "Edit interwiki data", + "action-interwiki": "change this interwiki entry", + "interwiki-global-links": "Global interwiki prefixes", + "interwiki-global-description": "These prefixes are inherited from a global configuration, and can only be edited on the source wiki.", + "interwiki-local-links": "Local interwiki prefixes", + "interwiki-local-description": "These prefixes exist locally. Any duplicates with the global configuration will override the global definition.", + "interwiki-links": "Interwiki prefixes", + "interwiki-description": "", + "interwiki-language-links": "Interlanguage prefixes", + "interwiki-language-description": "These prefixes match defined language codes, and will be used to create the \"{{int:otherlanguages}}\" listing when added to a page." } diff --git a/extensions/Interwiki/i18n/es.json b/extensions/Interwiki/i18n/es.json index f2793ce5..5541a59a 100644 --- a/extensions/Interwiki/i18n/es.json +++ b/extensions/Interwiki/i18n/es.json @@ -14,13 +14,15 @@ "Vivaelcelta", "Macofe", "Fitoschido", - "Gustronico" + "Gustronico", + "Ryo567" ] }, "interwiki": "Ver y editar la tabla de interwikis", "interwiki-title-norights": "Ver datos de interwikis", "interwiki-desc": "Añade una [[Special:Interwiki|página especial]] para ver y editar la tabla de interwikis", "interwiki_intro": "Este es un resumen de la tabla de interwikis, que define los atajos mediante prefijos usados para enlazar rápidamente diferentes wikis y otros sitios externos. Para recomendaciones de uso véase [//www.mediawiki.org/wiki/Extension:Interwiki el manual en MediaWiki.org].", + "interwiki-legend-label": "Leyenda", "interwiki_prefix": "Prefijo", "interwiki-prefix-label": "Prefijo:", "interwiki_prefix_intro": "Prefijo interwiki que se utilizará en sintaxis wikitexto [[prefijo:nombre de página]].", @@ -45,6 +47,7 @@ "interwiki_delfailed": "El prefijo «$1» no puede ser borrado de la tabla de interwikis.", "interwiki-logtext": "Ver registro", "interwiki_addtext": "Añadir un prefijo interwiki o de idioma", + "interwiki-addtext-local": "Añadir un prefijo local interwiki o de idioma", "interwiki_addintro": "Estás añadiendo un nuevo prefijo interwiki.\nRecuerda que no puede contener espacios ( ), dos puntos (:), ni los signos ''et'' (&), o ''igual'' (=).", "interwiki_addbutton": "Agregar", "interwiki_added": "El prefijo «$1» ha sido añadido correctamente a la tabla de interwikis.", @@ -56,7 +59,7 @@ "interwiki-badprefix": "El prefijo interwiki especificado «$1» contiene caracteres no válidos", "interwiki-submit-empty": "El prefijo y la dirección URL no pueden estar vacías.", "interwiki-submit-invalidurl": "El protocolo de la dirección URL no es válido.", - "log-name-interwiki": "Tabla de registro de interwiki", + "log-name-interwiki": "Registro de la tabla interwiki", "logentry-interwiki-iw_add": "$1 {{GENDER:$2|añadió}} el prefijo \"$4\" ($5) (trans: $6; local: $7) a la tabla interwiki", "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|modificó}} el prefijo \" $4 \" ( $5 ) (trans: $6 ; local: $7 ) en la tabla interwiki", "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|eliminó}} el prefijo \"$4\" de la tabla interwiki", @@ -64,6 +67,7 @@ "right-interwiki": "Editar datos de interwiki", "action-interwiki": "cambiar esta entrada interwiki", "interwiki-global-links": "Prefijos de interwikis globales", + "interwiki-local-links": "Prefijos de interwikis locales", "interwiki-links": "Prefijos de interwikis", "interwiki-language-links": "Prefijos interlingüísticos" } diff --git a/extensions/Interwiki/i18n/fa.json b/extensions/Interwiki/i18n/fa.json index e7d3a8e4..59be8c3a 100644 --- a/extensions/Interwiki/i18n/fa.json +++ b/extensions/Interwiki/i18n/fa.json @@ -16,6 +16,7 @@ "interwiki-title-norights": "مشاهدهٔ اطلاعات میان‌ویکی", "interwiki-desc": "یک [[Special:Interwiki|صÙحهٔ ویژه]] برای مشاهده Ùˆ ویرایش جدول میان‌ویکی می‌اÙزاید.", "interwiki_intro": "این یک نمای Ú©Ù„ÛŒ از جدول interwiki است.", + "interwiki-legend-label": "شرح علائم", "interwiki_prefix": "پیشوند", "interwiki-prefix-label": "پیشوند:", "interwiki_prefix_intro": "پیشوند ویکی داخلی در [[prefix:pagename]] نحو متن ویکی استÙاده شده‌است.", diff --git a/extensions/Interwiki/i18n/fi.json b/extensions/Interwiki/i18n/fi.json index 6e67560a..febf028f 100644 --- a/extensions/Interwiki/i18n/fi.json +++ b/extensions/Interwiki/i18n/fi.json @@ -14,13 +14,16 @@ "interwiki": "Wikienväliset linkit", "interwiki-title-norights": "Katso interwiki-tietoja", "interwiki-desc": "Lisää [[Special:Interwiki|toimintosivun]], jonka avulla voi katsoa ja muokata interwiki-taulua.", - "interwiki_intro": "Tämä on yleiskatsaus interwikien taulukosta.", + "interwiki_intro": "Tämä on yleiskatsaus interwiki-taulusta, joka määrittää etuliitteet, joiden avulla voi nopeasti linkittää muihin wikeihin ja ulkoisiin sivustoihin. [//www.mediawiki.org/wiki/Extension:Interwiki MediaWiki.org:issa sijaitsevassa oppaassa] on lisätietoa suositellusta käytöstä.", + "interwiki-legend-label": "Selite", "interwiki_prefix": "Etuliite", "interwiki-prefix-label": "Etuliite:", + "interwiki_prefix_intro": "Etuliite, jota käytetään wikitekstissä muodossa [[etuliite:sivunnimi]].", "interwiki_local": "Välitä", "interwiki-local-label": "Välitä:", "interwiki_trans": "Sisällytä", "interwiki-trans-label": "Sisällytä:", + "interwiki_trans_0_intro": "Älä salli mallineiden/sivujen sisällyttämistä ulkoisesta wikistä {{etuliite:sivunnimi}}-syntaksilla; etsi sen sijaan paikallista sivua malline-nimiavaruudesta.", "interwiki_1": "kyllä", "interwiki_0": "ei", "interwiki_error": "Virhe: Interwiki-taulu on tyhjä tai jokin muu meni pieleen.", @@ -31,7 +34,9 @@ "interwiki_deleting": "Olet poistamassa etuliitettä â€$1â€.", "interwiki_deleted": "Etuliite â€$1†poistettiin onnistuneesti interwiki-taulusta.", "interwiki_delfailed": "Etuliitteen â€$1†poistaminen interwiki-taulusta epäonnistui.", - "interwiki_addtext": "Lisää wikienvälinen etuliite", + "interwiki-logtext": "Tarkastele lokia", + "interwiki_addtext": "Lisää wikien- tai kieltenvälinen etuliite", + "interwiki-addtext-local": "Lisää paikallinen wikienvälinen tai kieltenvälinen etuliite", "interwiki_addintro": "Olet lisäämässä uutta wikienvälistä etuliitettä. Se ei voi sisältää välilyöntejä ( ), kaksoispisteitä (:), et-merkkejä (&), tai yhtäsuuruusmerkkejä (=).", "interwiki_addbutton": "Lisää", "interwiki_added": "Etuliite â€$1†lisättiin onnistuneesti interwiki-tauluun.", @@ -42,8 +47,17 @@ "interwiki_editerror": "Etuliitettä â€$1†ei voi muokata interwiki-taulukossa. Sitä ei mahdollisesti ole olemassa.", "interwiki-badprefix": "Annettu interwiki-etuliite $1 sisältää virheellisiä merkkejä", "interwiki-submit-empty": "Etuliite ja verkko-osoite eivät voi olla tyhjiä.", + "interwiki-submit-invalidurl": "Osoitteen protokolla ei kelpaa.", "log-name-interwiki": "Interwikitaululoki", + "logentry-interwiki-iw_add": "$1 {{GENDER:$2|lisäsi}} etuliitteen \"$4\" ($5) (sisällytä: $6; välitä: $7) interwiki-tauluun", + "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|muokkasi}} etuliitettä \"$4\" ($5) (sisällytä: $6; välitä: $7) interwiki-taulussa", + "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|poisti}} etuliitteen \"$4\" interwiki-taulusta", "log-description-interwiki": "Tämä on loki muutoksista [[Special:Interwiki|interwiki-tauluun]].", "right-interwiki": "Muokata interwiki-dataa", - "action-interwiki": "muokata tätä interwiki-merkintää" + "action-interwiki": "muokata tätä interwiki-merkintää", + "interwiki-global-links": "Wikienlaajuiset wikienväliset etuliitteet", + "interwiki-global-description": "Nämä etuliitteet on peritty wikienlaajuisesta määrityksestä ja niitä voi muokata vain lähdewikistä käsin.", + "interwiki-local-links": "Paikalliset wikienväliset etuliitteet", + "interwiki-links": "Wikienväliset etuliitteet", + "interwiki-language-links": "Kieltenväliset etuliitteet" } diff --git a/extensions/Interwiki/i18n/fy.json b/extensions/Interwiki/i18n/fy.json index 575613bb..1aab0e90 100644 --- a/extensions/Interwiki/i18n/fy.json +++ b/extensions/Interwiki/i18n/fy.json @@ -6,8 +6,11 @@ ] }, "interwiki-legend-label": "Leginda", + "interwiki_url": "URL", + "interwiki-url-label": "URL", "interwiki_1": "ja", "interwiki_0": "nee", "interwiki_edit": "Bewurkje", + "interwiki_reasonfield": "Reden:", "interwiki_addbutton": "Tafoegje" } diff --git a/extensions/Interwiki/i18n/it.json b/extensions/Interwiki/i18n/it.json index 0a4c9866..6e39dfb9 100644 --- a/extensions/Interwiki/i18n/it.json +++ b/extensions/Interwiki/i18n/it.json @@ -53,7 +53,7 @@ "interwiki-badprefix": "Il prefisso interwiki \"$1\" specificato contiene caratteri non validi", "interwiki-submit-empty": "Il prefisso e l'URL non possono essere vuoti.", "interwiki-submit-invalidurl": "Il protocollo dell'URL non è valido.", - "log-name-interwiki": "Registro tabella interwiki", + "log-name-interwiki": "Tabella interwiki", "logentry-interwiki-iw_add": "$1 {{GENDER:$2|ha aggiunto}} il prefisso \"$4\" ($5) (incl: $6; locale: $7) alla tabella degli interwiki", "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|ha modificato}} il prefisso \"$4\" ($5) (incl: $6; locale: $7) nella tabella degli interwiki", "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|ha rimosso}} il prefisso \"$4\" dalla tabella degli interwiki", diff --git a/extensions/Interwiki/i18n/ja.json b/extensions/Interwiki/i18n/ja.json index cb3c549f..c8635d4b 100644 --- a/extensions/Interwiki/i18n/ja.json +++ b/extensions/Interwiki/i18n/ja.json @@ -8,13 +8,15 @@ "Schu", "Shirayuki", "é’å­å®ˆæ­Œ", - "2nd-player" + "2nd-player", + "Sujiniku", + "Azeha" ] }, "interwiki": "インターウィキデータã®é–²è¦§ã¨ç·¨é›†", "interwiki-title-norights": "インターウィキデータã®é–²è¦§", "interwiki-desc": "インターウィキテーブルã®è¡¨ç¤ºã¨ç·¨é›†ã‚’è¡Œã†[[Special:Interwiki|特別ページ]]を追加ã™ã‚‹", - "interwiki_intro": "以下ã¯ã‚¤ãƒ³ã‚¿ãƒ¼ã‚¦ã‚£ã‚­ã®ä¸€è¦§è¡¨ã§ã™ã€‚", + "interwiki_intro": "以下ã¯ã‚¤ãƒ³ã‚¿ãƒ¼ã‚¦ã‚£ã‚­ã®æ¦‚è¦ã§ã™ã€‚ã“ã‚Œã¯ã€ã™ãã«åˆ¥ã®ã‚¦ã‚£ã‚­ã‚„ä»–ã®å¤–部サイトã¸ã®ãƒªãƒ³ã‚¯ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ—レフィックスã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’定義ã—ã¾ã™ã€‚推奨ã•ã‚Œã‚‹ä½¿ç”¨ã®ãŸã‚ã«ã€æ¬¡ã‚’ã”覧ãã ã•ã„。[//www.mediawiki.org/wiki/Extension:Interwiki the manual on MediaWiki.org]", "interwiki-legend-label": "凡例", "interwiki_prefix": "接頭辞", "interwiki-prefix-label": "接頭辞:", @@ -22,12 +24,12 @@ "interwiki_url_intro": "URLã®é››åž‹ã§ã™ã€‚$1 ã¨ã„ã†ãƒ—レースホルダーã¯ã€[[接頭辞:ページå]]ã«ãŠã‘る「ページåã€ã«ç½®æ›ã•ã‚Œã¾ã™ã€‚", "interwiki_local": "転é€", "interwiki-local-label": "転é€:", - "interwiki_local_0_intro": "無効ã§ã™ã€‚代ã‚ã‚Šã«ã€Œ{{int:badtitle}}ã€ã®ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚", - "interwiki_local_1_intro": "インターウィキリンクã®å®šç¾©ã§æŒ‡å®šã•ã‚ŒãŸå¯¾è±¡URLã«è»¢é€ã•ã‚Œã¾ã™ã€‚言ã„æ›ãˆã‚‹ã¨ã€åŒä¸€ã‚¦ã‚£ã‚­å†…ã®ãƒšãƒ¼ã‚¸ã¸ã®ãƒªãƒ³ã‚¯ã®ã‚ˆã†ã«æ‰±ã„ã¾ã™ã€‚", + "interwiki_local_0_intro": "ãã®URLã§ã‚¤ãƒ³ã‚¿ãƒ¼ã‚¦ã‚£ã‚­ プリフィックスを使用ã—ã¦ã„るローカルウィキã¸ã®ã€å¤–部HTTPè¦æ±‚ã®çµæžœã¯ã€Œ{{int:badtitle}}ã€ã®ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ã§ã™ã€‚", + "interwiki_local_1_intro": "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ã‚¦ã‚£ã‚­ プリフィックスを使用ã—ã¦ã„るローカルウィキã¸ã®å¤–部HTTPè¦æ±‚ãŒã€è»¢é€ã‚’ã—ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ã‚¦ã‚£ã‚­ã®å¯¾è±¡URLã«è»¢é€ã•ã‚Œã¾ã™ã€‚(言ã„æ›ãˆã‚‹ã¨ã€åŒä¸€ã‚¦ã‚£ã‚­å†…ã®ãƒšãƒ¼ã‚¸ã¸ã®ãƒªãƒ³ã‚¯ã®ã‚ˆã†ã«æ‰±ã„ã¾ã™ã€‚)", "interwiki_trans": "トランスクルージョン", "interwiki-trans-label": "トランスクルージョン:", - "interwiki_trans_1_intro": "ウィキ間トランスクルージョンãŒã“ã®ã‚¦ã‚£ã‚­ã§ (一般的ã«) 許å¯ã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®å¤–部ウィキã‹ã‚‰ã®ãƒˆãƒ©ãƒ³ã‚¹ã‚¯ãƒ«ãƒ¼ã‚¸ãƒ§ãƒ³ã‚’許å¯ã—ã¾ã™ã€‚", - "interwiki_trans_0_intro": "許å¯ã›ãšã€ãƒ†ãƒ³ãƒ—レートåå‰ç©ºé–“ã§ãƒšãƒ¼ã‚¸ã‚’探ã—ã¾ã™ã€‚", + "interwiki_trans_1_intro": "{{接頭辞:ページå}} ã¨ã„ã†Wiki構文ãŒä½¿ã‚ã‚ŒãŸå ´åˆã€ã‚¦ã‚£ã‚­é–“トランスクルージョンãŒã“ã®ã‚¦ã‚£ã‚­ã§ä¸€èˆ¬çš„ã« ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion]) 許å¯ã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®å¤–部ウィキã‹ã‚‰ã®ãƒ†ãƒ³ãƒ—レートã¾ãŸã¯ãƒšãƒ¼ã‚¸ã®ãƒˆãƒ©ãƒ³ã‚¹ã‚¯ãƒ«ãƒ¼ã‚¸ãƒ§ãƒ³ã‚’許å¯ã—ã¾ã™ã€‚", + "interwiki_trans_0_intro": "foreign templates/pages をトランスクルードã™ã‚‹ãŸã‚ã® {{prefix:pagename}} を許å¯ã—ãªã„ã€ã‚€ã—ã‚テンプレートåå‰ç©ºé–“ã§ãƒšãƒ¼ã‚¸ã‚’探ã—ã¾ã™ã€‚", "interwiki_1": "ã¯ã„", "interwiki_0": "ã„ã„ãˆ", "interwiki_error": "エラー: インターウィキテーブルãŒç©ºã‹ã€ä»–ã®ç†ç”±ã§ã†ã¾ãã„ãã¾ã›ã‚“ã§ã—ãŸã€‚", diff --git a/extensions/Interwiki/i18n/ka.json b/extensions/Interwiki/i18n/ka.json index 6f9777b3..50a1ad8b 100644 --- a/extensions/Interwiki/i18n/ka.json +++ b/extensions/Interwiki/i18n/ka.json @@ -23,7 +23,7 @@ "interwiki_deleting": "თქვენ შლით სინტáƒáƒ¥áƒ¡áƒ¡ „$1“.", "interwiki_deleted": "პრეფიქსი „$1“ წáƒáƒ áƒ›áƒáƒ¢áƒ”ბით წáƒáƒ˜áƒ¨áƒáƒšáƒ ინტერვიკების ცხრილიდáƒáƒœ.", "interwiki_delfailed": "პრეფიქსის „$1“ წáƒáƒ¨áƒšáƒ ინტერვიკების ცხრილიდáƒáƒœ შეუძლებელიáƒ.", - "interwiki_addtext": "ინტერვიკის პრეფიქსის დáƒáƒ›áƒáƒ¢áƒ”ბáƒ", + "interwiki_addtext": "ინტერვიკის áƒáƒœ ენის პრეფიქსის დáƒáƒ›áƒáƒ¢áƒ”ბáƒ", "interwiki_addbutton": "დáƒáƒ›áƒáƒ¢áƒ”ბáƒ", "interwiki_edittext": "ინტერვიკის პრეფიქსის რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ", "interwiki-submit-empty": "პრეფიქსი დრURL áƒáƒ  შეიძლებრცáƒáƒ áƒ˜áƒ”ლი იყáƒáƒ¡.", diff --git a/extensions/Interwiki/i18n/km.json b/extensions/Interwiki/i18n/km.json index 6ec428f5..927854b1 100644 --- a/extensions/Interwiki/i18n/km.json +++ b/extensions/Interwiki/i18n/km.json @@ -11,7 +11,8 @@ "interwiki": "មើលនិងកែប្រែទិន្ននáŸáž™áž¢áž“្ážážšážœáž·áž‚ី", "interwiki-title-norights": "មើលទិន្ននáŸáž™áž¢áž“្ážážšážœáž·áž‚ី", "interwiki-desc": "បន្ážáŸ‚ម[[Special:Interwiki|ទំពáŸážšáž–ិសáŸážŸ]]ដើម្បីមើលនិងកែប្រែážáž¶ážšáž¶áž„អន្ážážšážœáž·áž‚ី", - "interwiki_intro": "áž“áŸáŸ‡â€‹áž‚ឺជា​ទិដ្ឋភាពទូទៅ​នៃ​ážáž¶ážšáž¶áž„​អន្ážážšážœáž·áž‚ី​។", + "interwiki_intro": "áž“áŸáŸ‡â€‹áž‚ឺជា​ទិដ្ឋភាពទូទៅ​នៃ​ážáž¶ážšáž¶áž„​អន្ážážšážœáž·áž‚ី​ ដែលផ្ដល់និយមនáŸáž™ážŠáž›áŸ‹áž”ុព្វបទážáŸ’លីៗ ដែលប្រើសម្រាប់ភ្ជាប់យ៉ាងរហáŸážŸáž‘ៅកាន់វិគីដទៃនិងវិបសាយážáž¶áž„ក្រៅ។ សូមអានពីរបៀបប្រើប្រាស់នៅ [//www.mediawiki.org/wiki/Extension:Interwiki the manual on MediaWiki.org]។", + "interwiki-legend-label": "កំណážáŸ‹ážŸáž˜áŸ’គាល់", "interwiki_prefix": "បុព្វបទ", "interwiki-prefix-label": "បុព្វបទ៖", "interwiki_1": "បាទ/ចាស៎", @@ -23,7 +24,8 @@ "interwiki_deleting": "លោកអ្នកកំពុងលុបបុព្វបទ \"$1\"។", "interwiki_deleted": "បុព្វបទ\"$1\"បានដកចáŸáž‰áž–ីážáž¶ážšáž¶áž„អន្ážážšážœáž·áž‚ីដោយជោគជáŸáž™áž áž¾áž™áŸ”", "interwiki_delfailed": "បុព្វបទ\"$1\"មិនអាចដកចáŸáž‰áž–ីážáž¶ážšáž¶áž„អន្ážážšážœáž·áž‚ីបានទáŸáŸ”", - "interwiki_addtext": "បន្ážáŸ‚មបុព្វបទអន្ážážšážœáž·áž‚ី", + "interwiki-logtext": "មើលកំណážáŸ‹áž áŸážáž»", + "interwiki_addtext": "បន្ážáŸ‚មបុព្វបទអន្ážážšážœáž·áž‚ីឬភាសា", "interwiki_addintro": "អ្នកកំពុងបន្ážáŸ‚មបុព្វបទអន្ážážšážœáž·áž‚ីážáŸ’មីមួយ។\n\nសូមចងចាំážáž¶ážœáž¶áž˜áž·áž“អាចមាន ដកឃ្លា( ) ចុច២(:) សញ្ញានិង(&) ឬសញ្ញាស្មើ(=)បានទáŸáŸ”", "interwiki_addbutton": "បន្ážáŸ‚ម", "interwiki_added": "បុព្វបទ \"$1\" ážáŸ’រូវបានបន្ážáŸ‚មទៅក្នុងážáž¶ážšáž¶áž„អន្ážážšážœáž·áž‚ីដោយជោគជáŸáž™áŸ”", diff --git a/extensions/Interwiki/i18n/ko.json b/extensions/Interwiki/i18n/ko.json index 0183f942..fd9709df 100644 --- a/extensions/Interwiki/i18n/ko.json +++ b/extensions/Interwiki/i18n/ko.json @@ -10,49 +10,59 @@ "Revi" ] }, - "interwiki": "ì¸í„°ìœ„키 ëª©ë¡ ë³´ê¸° ë° ê³ ì¹˜ê¸°", - "interwiki-title-norights": "ì¸í„°ìœ„키 ëª©ë¡ ë³´ê¸°", + "interwiki": "ì¸í„°ìœ„키 ë°ì´í„° 보기 ë° íŽ¸ì§‘", + "interwiki-title-norights": "ì¸í„°ìœ„키 ë°ì´í„° 보기", "interwiki-desc": "ì¸í„°ìœ„키 í…Œì´ë¸”ì„ ë³´ê±°ë‚˜ ê³ ì¹  수 있는 [[Special:Interwiki|특수 문서]]를 추가합니다", - "interwiki_intro": "ì´ ë¬¸ì„œëŠ” ì¸í„°ìœ„키 í…Œì´ë¸”ì— ëŒ€í•œ 둘러보기입니다.", + "interwiki_intro": "ì´ ë¬¸ì„œëŠ” 다른 위키나 외부 사ì´íŠ¸ë¡œ 빠르게 ë§í¬í•˜ëŠ” ë° ì“°ì´ëŠ” 단축 ì ‘ë‘어를 ì •ì˜í•˜ëŠ” ì¸í„°ìœ„키 í…Œì´ë¸”ì— ëŒ€í•œ 둘러보기입니다. 권장ë˜ëŠ” ì‚¬ìš©ë²•ì— ëŒ€í•´ì„œëŠ” [//www.mediawiki.org/wiki/Extension:Interwiki MediaWiki.orgì— ìžˆëŠ” 설명서]를 ì½ì–´ì£¼ì‹­ì‹œì˜¤.", + "interwiki-legend-label": "범례", "interwiki_prefix": "ì ‘ë‘ì–´", "interwiki-prefix-label": "ì ‘ë‘ì–´:", "interwiki_prefix_intro": "[[ì ‘ë‘ì–´:문서 ì´ë¦„]] 위키 ë§í¬ì— ì“°ì¼ ì¸í„°ìœ„키 ì ‘ë‘ì–´", - "interwiki_url_intro": "URL ì„œì‹. $1 ìžë¦¬ì—는 ìœ„ì— ìœ„í‚¤ë¬¸ë²•ì´ ì“°ì¸ ê²ƒì—ì„œì˜ ë¬¸ì„œ ì´ë¦„으로 바뀔 것입니다.", + "interwiki_url_intro": "URL ì„œì‹. $1 ìžë¦¬ì—는 [[ì ‘ë‘ì–´:문서 ì´ë¦„]]ì—ì„œì˜ ë¬¸ì„œ ì´ë¦„으로 바뀔 것입니다.", "interwiki_local": "전달", "interwiki-local-label": "전달:", "interwiki_local_0_intro": "무시함, 보통 \"{{int:badtitle}}\"ì„ ëŒ€ì‹  출력합니다.", "interwiki_local_1_intro": "ì¸í„°ìœ„키 ë§í¬ ì •ì˜ì— ìž…ë ¥ëœ URLë¡œ ì´ë™í•©ë‹ˆë‹¤. (즉, 로컬 ë¬¸ì„œì˜ ë§í¬ë¡œ 취급ë©ë‹ˆë‹¤)", - "interwiki_trans": "ì¸í„°ìœ„키 í¬í•¨", - "interwiki-trans-label": "ì¸í„°ìœ„키 í¬í•¨:", - "interwiki_trans_1_intro": "ì´ ìœ„í‚¤ì—ì„œ ì¼ë°˜ì ìœ¼ë¡œ ì¸í„°ìœ„키 í‹€ í¬í•¨ì´ 허용ëœë‹¤ë©´, 타 위키ì—ì„œì˜ í‹€ í¬í•¨ì„ 허용합니다,", - "interwiki_trans_0_intro": "허용하지 ì•Šê³  í‹€ ì´ë¦„ê³µê°„ì˜ ë¬¸ì„œë¥¼ 찾아봅니다.", + "interwiki_trans": "ë¼ì›Œë„£ê¸°", + "interwiki-trans-label": "ë¼ì›Œë„£ê¸°:", + "interwiki_trans_1_intro": "위키문법 {{ì ‘ë‘ì–´:문서 ì´ë¦„}}ì´ ì“°ì˜€ë‹¤ë©´, ì¼ë°˜ì ìœ¼ë¡œ ì¸í„°ìœ„키 í‹€ í¬í•¨(([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion])ì´ í™œì„±í™”ë˜ì—ˆì„ ë•Œ 다른 위키ì—ì„œ í‹€/문서 í¬í•¨ì„ 허용합니다.", + "interwiki_trans_0_intro": "다른 ìœ„í‚¤ì˜ í‹€/문서를 í¬í•¨í•˜ê¸° 위한 {{ì ‘ë‘ì–´:문서 ì´ë¦„}} 코드를 허용하지 ì•Šê³ , í‹€ ì´ë¦„ê³µê°„ì˜ ë¬¸ì„œë¥¼ 찾아봅니다.", "interwiki_1": "예", "interwiki_0": "아니오", "interwiki_error": "오류: ì¸í„°ìœ„키 í…Œì´ë¸”ì´ ë¹„ì–´ 있거나 다른 무엇ì¸ê°€ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤.", - "interwiki-cached": "ì¸í„°ìœ„키 ë°ì´í„°ëŠ” ìºì‹œë©ë‹ˆë‹¤. ìºì‹œë¥¼ 수정하는 ê±´ 불가능합니다.", + "interwiki-cached": "ì¸í„°ìœ„키 ë°ì´í„°ëŠ” ìºì‹œë©ë‹ˆë‹¤. ìºì‹œë¥¼ 수정하는 ê²ƒì€ ë¶ˆê°€ëŠ¥í•©ë‹ˆë‹¤.", "interwiki_edit": "편집", "interwiki_reasonfield": "ì´ìœ :", "interwiki_delquestion": "\"$1\" 지우기", "interwiki_deleting": "\"$1\" ì ‘ë‘어를 지ì›ë‹ˆë‹¤.", - "interwiki_deleted": "\"$1\" ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì—ì„œ 지웠습니다.", + "interwiki_deleted": "\"$1\" ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì—ì„œ 성공ì ìœ¼ë¡œ 제거했습니다.", "interwiki_delfailed": "\"$1\" ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì—ì„œ 제거할 수 없습니다.", - "interwiki_addtext": "ì¸í„°ìœ„키 ì ‘ë‘ì–´ 추가", + "interwiki-logtext": "ê¸°ë¡ ë³´ê¸°", + "interwiki_addtext": "ì¸í„°ìœ„키나 언어 ì ‘ë‘ì–´ 추가", + "interwiki-addtext-local": "로컬 ì¸í„°ìœ„키나 언어 ì ‘ë‘어를 추가하기", "interwiki_addintro": "새 ì¸í„°ìœ„키 ì ‘ë‘어를 만듭니다. 공백( ), ìŒì (:), &기호(&), 등호(=)는 í¬í•¨í•  수 없습니다.", "interwiki_addbutton": "추가", - "interwiki_added": "\"$1\" ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì— ì¶”ê°€í–ˆìŠµë‹ˆë‹¤.", + "interwiki_added": "\"$1\" ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì— ì„±ê³µì ìœ¼ë¡œ 추가했습니다.", "interwiki_addfailed": "\"$1\" ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì— ì¶”ê°€í•  수 없습니다.\nì´ë¯¸ í‘œì— ìžˆì„ ìˆ˜ 있습니다.", - "interwiki_edittext": "ì¸í„°ìœ„키 ì ‘ë‘ì–´ 고치기", + "interwiki_edittext": "ì¸í„°ìœ„키 ì ‘ë‘ì–´ 편집 중", "interwiki_editintro": "ì¸í„°ìœ„키 ì ‘ë‘어를 고칩니다.\nì´ë¯¸ 만들어진 ì¸í„°ìœ„키를 ë§ê°€ëœ¨ë¦´ 수 있으니 주ì˜í•´ 주세요.", "interwiki_edited": "\"$1\" ì ‘ë‘어를 고쳤습니다.", "interwiki_editerror": "\"$1\" ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì— ê³ ì¹  수 없습니다.\n목ë¡ì— 없는 ì ‘ë‘ì–´ì¼ ìˆ˜ 있습니다.", "interwiki-badprefix": "지정한 ì¸í„°ìœ„키 \"$1\" ì ‘ë‘어는 ìž˜ëª»ëœ ë¬¸ìžë¥¼ í¬í•¨í•˜ê³  있습니다.", "interwiki-submit-empty": "ì ‘ë‘어와 URL ì¹¸ì€ ë¹„ì›Œë‘˜ 수 없습니다.", "interwiki-submit-invalidurl": "URLì˜ í”„ë¡œí† ì½œì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤.", - "log-name-interwiki": "ì¸í„°ìœ„키 수정 기ë¡", + "log-name-interwiki": "ì¸í„°ìœ„키 í…Œì´ë¸” 기ë¡", "logentry-interwiki-iw_add": "$1 사용ìžê°€ \"$4\" ($5) (í‹€ í¬í•¨: $6, 로컬: $7) ì ‘ë‘어를 ì¸í„°ìœ„키 í…Œì´ë¸”ì— {{GENDER:$2|추가}}했습니다.", "logentry-interwiki-iw_edit": "$1 사용ìžê°€ ì¸í„°ìœ„키 í…Œì´ë¸”ì˜ \"$4\" ($5) (í‹€ í¬í•¨: $6, 로컬: $7) ì ‘ë‘어를 {{GENDER:$2|수정}}했습니다.", "logentry-interwiki-iw_delete": "$1 사용ìžê°€ ì¸í„°ìœ„키 í…Œì´ë¸”ì˜ \"$4\" ì ‘ë‘어를 {{GENDER:$2|ì‚­ì œ}}했습니다.", "log-description-interwiki": "[[Special:Interwiki|ì¸í„°ìœ„키 í…Œì´ë¸”]]ì´ ë°”ë€ ê¸°ë¡ìž…니다.", - "right-interwiki": "ì¸í„°ìœ„키 ëª©ë¡ ê³ ì¹˜ê¸°", - "action-interwiki": "ì´ ì¸í„°ìœ„키 ì ‘ë‘ì–´ 바꾸기" + "right-interwiki": "ì¸í„°ìœ„키 ë°ì´í„° 편집", + "action-interwiki": "ì´ ì¸í„°ìœ„키 ì ‘ë‘ì–´ 바꾸기", + "interwiki-global-links": "ì „ì—­ ì¸í„°ìœ„키 ì ‘ë‘ì–´", + "interwiki-global-description": "ì´ ì ‘ë‘ì–´ë“¤ì€ ì „ì—­ 설정ì—ì„œ ìƒì†ë˜ì—ˆìœ¼ë©°, ì›ë³¸ 위키ì—서만 편집할 수 있습니다.", + "interwiki-local-links": "로컬 ì¸í„°ìœ„키 ì ‘ë‘ì–´", + "interwiki-local-description": "ì´ ì ‘ë‘ì–´ë“¤ì€ ë¡œì»¬ìƒì— 있습니다. ì „ì—­ 설정과 중복ë˜ëŠ” ê²ƒì€ ì „ì—­ ì„¤ì •ì— ìš°ì„ í•˜ì—¬ ì ìš©ë©ë‹ˆë‹¤.", + "interwiki-links": "ì¸í„°ìœ„키 ì ‘ë‘ì–´", + "interwiki-language-links": "언어 ì ‘ë‘ì–´", + "interwiki-language-description": "ì´ ì ‘ë‘ì–´ë“¤ì€ ì–¸ì–´ 코드와 ì¼ì¹˜í•˜ë©° , ë¬¸ì„œì— ì¶”ê°€ë˜ì—ˆì„ ë•Œ \"{{int:otherlanguages}}\" 목ë¡ì„ ìƒì„±í•˜ëŠ” ë° ì“°ìž…ë‹ˆë‹¤." } diff --git a/extensions/Interwiki/i18n/ksh.json b/extensions/Interwiki/i18n/ksh.json index 51ef2646..3a366d45 100644 --- a/extensions/Interwiki/i18n/ksh.json +++ b/extensions/Interwiki/i18n/ksh.json @@ -21,7 +21,7 @@ "interwiki_trans": "Ennfööje?", "interwiki-trans-label": "Ennfööje?:", "interwiki_trans_1_intro": "lohß et zoh — wann dat en hee dämm Wiki övverhoup zohjelohße es — dat en Sigg uß däm andere Wiki hee enjeföösh weed,", - "interwiki_trans_0_intro": "dunn dat nit, un sök hee em Wiki noh ene {{ns:template}} met dämm komplätte Name.", + "interwiki_trans_0_intro": "donn dat nit, un sök heh em Wikki noh ene {{ns:template}} met dämm kumplätte Nahme.", "interwiki_1": "Jo", "interwiki_0": "Nä", "interwiki_error": "'''Fähler:''' de Tabäll met de Engerwiki Date is leddisch.", @@ -38,17 +38,17 @@ "interwiki_added": "Dä Försaz „$1“ es jäz bei de Engerwiki Date dobei jekomme.", "interwiki_addfailed": "Dä Försaz „$1“ konnt nit bei de Engerwiki Date dobeijedonn wäde.\nMaach sin, dat dä en de Engerwiki Tabäll ald dren wor un es.", "interwiki_edittext": "Enne Engerwiki Fürsaz Ändere", - "interwiki_editintro": "Do bes an ennem Engerwiki Fösaz am ändere.\nDenk draan, domet könnts De Links em Wiki kapott maache, die velleich do drop opboue.", + "interwiki_editintro": "Do bes an ennem Engerwiki Försaz aam änndere.\nDänkg drahn, domet künnts De Lengks em Wikki kapott maache, di velleijsch doh drop opboue.", "interwiki_edited": "Föz dä Försaz „$1“ sen de Engerwiki Date jäz jetuusch.", "interwiki_editerror": "Dä Försaz „$1“ konnt en de Engerwiki Date nit beärrbeidt wäde.\nMaach sin, dat et inn nit jitt.", "interwiki-badprefix": "Dä aanjejovve Engerwiki-Försatz „$1“ änthäld onjöltijje Zeiche", "interwiki-submit-empty": "Der Engerwiki-Försatz un der URL künne nit läddesch jelohße wääde.", "interwiki-submit-invalidurl": "Dä Protokoll-Vörsaz för dä URL es nit jöltesch.", - "log-name-interwiki": "Logboch fun de Engerwiki Tabäll", + "log-name-interwiki": "Logbohch fun de Engerwiki_Tabäll", "logentry-interwiki-iw_add": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dä Vörsaz „$4“ met däm {{int:interwiki-url-label}} „$5“ un {{int:interwiki-local-label}}$6 un {{int:interwiki-trans-label}}$7 bei de Engerwiki-Date dobei jedonn.", "logentry-interwiki-iw_edit": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dä Vörsaz „$4“ met däm {{int:interwiki-url-label}} „$5“ un {{int:interwiki-local-label}}$6 un {{int:interwiki-trans-label}}$7 vun de Engerwiki-Date verändert.", "logentry-interwiki-iw_delete": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dä Vörsaz „$4“ uß dä Engerwiki-Date fott jenumme.", - "log-description-interwiki": "Hee is dat Logboch met de Änderonge aan de [[Special:Interwiki|Engerwiki Date]].", + "log-description-interwiki": "Heh is dat Logbohch met de Änderonge aan de [[Special:Interwiki|Engerwiki Dahte]].", "right-interwiki": "Engerwiki Date ändere", - "action-interwiki": "Donn hee dä Engerwiki Enndraach ändere" + "action-interwiki": "Donn heh dä Engerwiki Enndraach ändere" } diff --git a/extensions/Interwiki/i18n/lt.json b/extensions/Interwiki/i18n/lt.json index 4fc6bd3e..ae64315c 100644 --- a/extensions/Interwiki/i18n/lt.json +++ b/extensions/Interwiki/i18n/lt.json @@ -7,7 +7,7 @@ ] }, "interwiki": "ŽiÅ«rÄ—ti ir redaguoti interwiki duomenis", - "interwiki-title-norights": "ŽiÅ«rÄ—ti interwiki duomenis", + "interwiki-title-norights": "ŽiÅ«rÄ—ti tarpkalbinių nuorodų duomenis", "interwiki-desc": "Prideda [[Special:Interwiki|specialųjį puslapį]] interwiki lentelei peržiÅ«rÄ—ti ir redaguoti", "interwiki_local": "Persiųsti", "interwiki-local-label": "Persiųsti:", diff --git a/extensions/Interwiki/i18n/mg.json b/extensions/Interwiki/i18n/mg.json index d1b49fba..f9d4f018 100644 --- a/extensions/Interwiki/i18n/mg.json +++ b/extensions/Interwiki/i18n/mg.json @@ -18,5 +18,6 @@ "interwiki-local-label": "Hanohy", "interwiki_1": "eny", "interwiki_0": "tsia", + "interwiki_edit": "Hanova", "right-interwiki": "Manova ny data interwiki" } diff --git a/extensions/Interwiki/i18n/mk.json b/extensions/Interwiki/i18n/mk.json index b46662d1..a98d89c9 100644 --- a/extensions/Interwiki/i18n/mk.json +++ b/extensions/Interwiki/i18n/mk.json @@ -22,7 +22,7 @@ "interwiki_trans": "Превметнување", "interwiki-trans-label": "Превметнување:", "interwiki_trans_1_intro": "Ðко Ñе кориÑти виктекÑÑ‚-ÑинтакÑата {{претÑтавка:назив на Ñтраница}}, допуштај превметнувања од Ñтраното вики ако Ñе начелно овозможени превметнувања од меѓувики ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding превемтнување Scary]).", - "interwiki_trans_0_intro": "Ðе дозволувај {{претÑтавка:назив на Ñтраница}} да превметнува Ñтрани шаблони/Ñтраници, туку барај локална Ñтраница во шаблонÑкиот именÑки проÑтор.", + "interwiki_trans_0_intro": "Ðе дозволувај {{претÑтавка:назив на Ñтраница}} да превметнува Ñтрани шаблони/Ñтраници, туку барај меÑна Ñтраница во шаблонÑкиот именÑки проÑтор.", "interwiki_1": "да", "interwiki_0": "не", "interwiki_error": "Грешка: Mеѓувики-табелата е празна, или нешто друго не е во ред.", diff --git a/extensions/Interwiki/i18n/ml.json b/extensions/Interwiki/i18n/ml.json index 6e59cbd8..0a7309ac 100644 --- a/extensions/Interwiki/i18n/ml.json +++ b/extensions/Interwiki/i18n/ml.json @@ -9,6 +9,7 @@ "interwiki-title-norights": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ വിവരങàµà´™àµ¾ കാണàµà´•", "interwiki-desc": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പടàµà´Ÿà´¿à´• കാണാനàµà´‚ തിരàµà´¤àµà´¤à´¾à´¨àµà´®àµà´³àµà´³ [[Special:Interwiki|à´ªàµà´°à´¤àµà´¯àµ‡à´• താൾ]] കൂടàµà´Ÿà´¿à´šàµà´šàµ‡àµ¼à´•àµà´•àµà´¨àµà´¨àµ", "interwiki_intro": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പടàµà´Ÿà´¿à´•à´¯àµà´Ÿàµ† അവലോകനം ഇവിടെ കാണാം.", + "interwiki-legend-label": "സൂചന", "interwiki_prefix": "പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾", "interwiki-prefix-label": "പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾:", "interwiki_prefix_intro": "വികàµà´•à´¿à´Žà´´àµà´¤àµà´¤àµ രീതിയിൽ ഉപയോഗികàµà´•àµà´¨àµà´¨ [[പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾:താളിനàµà´±àµ†_പേരàµ]] à´Žà´¨àµà´¨à´¤à´¿à´²àµ† à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾.", @@ -31,7 +32,9 @@ "interwiki_deleting": "താങàµà´•àµ¾ \"$1\" à´Žà´¨àµà´¨ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•à´¯à´¾à´£àµ.", "interwiki_deleted": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പടàµà´Ÿà´¿à´•à´¯à´¿àµ½ നിനàµà´¨àµ \"$1\" à´Žà´¨àµà´¨ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾ വിജയകരമായി നീകàµà´•à´‚ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ.", "interwiki_delfailed": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പടàµà´Ÿà´¿à´•à´¯à´¿àµ½ നിനàµà´¨àµ \"$1\" à´Žà´¨àµà´¨ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾ നീകàµà´•à´‚ ചെയàµà´¯à´¾àµ» കഴിയിലàµà´².", - "interwiki_addtext": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പൂർവàµà´µà´¾à´•àµà´·à´°à´‚ ചേർകàµà´•àµà´•", + "interwiki-logtext": "രേഖ കാണàµà´•", + "interwiki_addtext": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿àµ½ ഭാഷാ പൂർവàµà´µà´¾à´•àµà´·à´°à´‚ ചേർകàµà´•àµà´•", + "interwiki-addtext-local": "à´ªàµà´°à´¾à´¦àµ‡à´¶à´¿à´•à´µà´¿à´•àµà´•à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿àµ½ ഭാഷാ പൂർവàµà´µà´¾à´•àµà´·à´°à´‚ ചേർകàµà´•àµà´•", "interwiki_addintro": "താങàµà´•àµ¾ à´ªàµà´¤à´¿à´¯ à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പൂർവàµà´µà´¾à´•àµà´·à´°à´‚ ചേർകàµà´•àµà´•à´¯à´¾à´£àµ.\nഅതിൽ ഇട ( ), അപൂർണàµà´£à´µà´¿à´°à´¾à´®à´‚ (:), ആമàµà´ªàµ¼à´¸à´¾àµ»à´¡àµà´¸àµ (&), à´…à´²àµà´²àµ†à´™àµà´•à´¿àµ½ സമചിഹàµà´¨à´‚ (=) à´Žà´¨àµà´¨à´¿à´µ പാടിലàµà´²àµ†à´¨àµà´¨àµ ഓർമàµà´®à´¿à´•àµà´•àµà´•.", "interwiki_addbutton": "ചേർകàµà´•àµà´•", "interwiki_added": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പടàµà´Ÿà´¿à´•à´¯à´¿àµ½ \"$1\" à´Žà´¨àµà´¨ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾ വിജയകരമായി ചേർതàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ.", @@ -49,5 +52,12 @@ "logentry-interwiki-iw_delete": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പടàµà´Ÿà´¿à´•à´¯à´¿àµ½ നിനàµà´¨àµà´‚ \"$4\" à´Žà´¨àµà´¨ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾ $1 {{GENDER:$2|നീകàµà´•à´‚ ചെയàµà´¤àµ}}", "log-description-interwiki": "ഇതൠ[[Special:Interwiki|à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പടàµà´Ÿà´¿à´•à´¯à´¿à´²àµ†]] മാറàµà´±à´™àµà´™à´³àµà´Ÿàµ† രേഖയാണàµ.", "right-interwiki": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ വിവരങàµà´™àµ¾ തിരàµà´¤àµà´¤àµà´•", - "action-interwiki": "à´ˆ à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ ഉൾപàµà´ªàµ†à´Ÿàµà´¤àµà´¤à´²à´¿àµ½ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´•" + "action-interwiki": "à´ˆ à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ ഉൾപàµà´ªàµ†à´Ÿàµà´¤àµà´¤à´²à´¿àµ½ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´•", + "interwiki-global-links": "ആഗോള à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾", + "interwiki-global-description": "à´ˆ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾ ആഗോള à´•àµà´°à´®àµ€à´•à´°à´£à´¤àµà´¤à´¿àµ½ നിനàµà´¨àµà´‚ à´Žà´Ÿàµà´¤àµà´¤à´¿à´Ÿàµà´Ÿàµà´³àµà´³à´¤à´¾à´£àµ, അതൠസàµà´°àµ‹à´¤à´¸àµà´¸àµ വികàµà´•à´¿à´¯à´¿àµ½ മാതàµà´°à´®àµ‡ തിരàµà´¤àµà´¤à´¾à´¨à´¾à´µàµà´•à´¯àµà´³àµà´³àµ.", + "interwiki-local-links": "à´ªàµà´°à´¾à´¦àµ‡à´¶à´¿à´• à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾", + "interwiki-local-description": "à´ˆ പൂർവàµà´µà´•àµà´·à´°à´™àµà´™àµ¾ à´ªàµà´°à´¾à´¦àµ‡à´¶à´¿à´•à´®à´¾à´¯à´¿ ഉളàµà´³à´µà´¯à´¾à´£àµ. ആഗോള à´•àµà´°à´®àµ€à´•à´°à´£à´¤àµà´¤à´¿à´²àµ† à´à´¤à´¿à´¨àµ†à´™àµà´•à´¿à´²àµà´‚ സമാനമായàµà´³àµà´³à´µà´¯àµà´£àµà´Ÿàµ†à´™àµà´•à´¿àµ½ അതൠആഗോള നിർവàµà´µà´šà´¨à´¤àµà´¤àµ† അതിലംഘികàµà´•àµà´¨àµà´¨à´¤à´¾à´£àµ.", + "interwiki-links": "à´…à´¨àµà´¤àµ¼à´µà´¿à´•àµà´•à´¿ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾", + "interwiki-language-links": "à´…à´¨àµà´¤àµ¼à´­à´¾à´·à´¾ പൂർവàµà´µà´•àµà´·à´°à´™àµà´™àµ¾", + "interwiki-language-description": "നിർവàµà´µà´šà´¿à´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿ ഭാഷാകോഡàµà´•à´³àµà´®à´¾à´¯à´¿ ചേർനàµà´¨àµà´ªàµ‹à´•àµà´¨àµà´¨à´µà´¯à´¾à´£àµ à´ˆ പൂർവàµà´µà´¾à´•àµà´·à´°à´™àµà´™àµ¾, താളàµà´•à´³à´¿à´²àµ‡à´•àµà´•àµ ചേർകàµà´•àµà´®àµà´ªàµ‹àµ¾ ഇവ \"{{int:otherlanguages}}\" പടàµà´Ÿà´¿à´• നിർമàµà´®à´¿à´•àµà´•à´¾àµ» ഉപയോഗികàµà´•àµà´¨àµà´¨à´¤à´¾à´£àµ." } diff --git a/extensions/Interwiki/i18n/mr.json b/extensions/Interwiki/i18n/mr.json index 49742eb7..bb83f509 100644 --- a/extensions/Interwiki/i18n/mr.json +++ b/extensions/Interwiki/i18n/mr.json @@ -6,11 +6,21 @@ ] }, "interwiki": "आंतरविकि डाटा पहा व संपादा", - "interwiki-title-norights": "अंतरविकि डाटा पहा", + "interwiki-title-norights": "आंतरविकि डाटा पहा", "interwiki-desc": "आंतरविकि सारणी पाहणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ व संपादणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ à¤à¤• [[Special:Interwiki|विशेष पान]] वाढविते", - "interwiki_intro": "आंतरविकि सारणी बदà¥à¤¦à¤² अधिक माहीतीसाठी [http://www.mediawiki.org/wiki/Interwiki_table MediaWiki.org] पहा.", + "interwiki_intro": "हा आंतरविकि सारणीबदà¥à¤¦à¤²à¤šà¤¾ सामानà¥à¤¯ सारांश आहे.तो विविध विकिंना व बाहà¥à¤¯ संकेतसà¥à¤¥à¤³à¤¾à¤‚ना ततà¥à¤ªà¤°à¤¤à¥‡à¤¨à¥‡ दà¥à¤µà¤¾ देणà¥à¤¯à¤¾à¤¸ आवशà¥à¤¯à¤• तà¥à¤¯à¤¾ उपपदाचà¥à¤¯à¤¾ लघà¥à¤ªà¤¥à¤¾à¤šà¥€ वà¥à¤¯à¤¾à¤–à¥à¤¯à¤¾ देतो. अधिक माहितीसाठी [http://www.mediawiki.org/wiki/Interwiki_table MediaWiki.org] पहा.याचà¥à¤¯à¤¾ वापरासाठी ते शिफारस केलà¥à¤¯à¤¾ गेले आहे", + "interwiki-legend-label": "विवरण", "interwiki_prefix": "उपपद (पूरà¥à¤µà¤ªà¥à¤°à¤¤à¥à¤¯à¤¯)", "interwiki-prefix-label": "उपपद (पूरà¥à¤µà¤ªà¥à¤°à¤¤à¥à¤¯à¤¯):", + "interwiki_prefix_intro": "[[उपपद:पाननाव]]मधà¥à¤¯à¥‡ विकिमजकूर वाकà¥à¤¯à¤°à¤šà¤¨à¤¾ मà¥à¤¹à¤£à¥‚न वापरलà¥à¤¯à¤¾ जाणारे आंतरविकि उपपद.", + "interwiki_url_intro": "यूआरà¤à¤²à¥à¤¸ साठी साचा. यातील सà¥à¤¥à¤¾à¤¨à¤§à¤¾à¤°à¤•(पà¥à¤²à¥‡à¤¸à¤¹à¥‹à¤²à¥à¤¡à¤°), [[उपपद:पाननाव]]यामधà¥à¤¯à¥‡, $1 चà¥à¤¯à¤¾ à¤à¤µà¤œà¥€ पाननाव असे बदललà¥à¤¯à¤¾ जाईल.", + "interwiki_local": "अगà¥à¤°à¥‡à¤·à¤¿à¤¤ करा", + "interwiki_local_0_intro": "यूआरà¤à¤²à¤®à¤§à¥à¤¯à¥‡(URL) हे आंतरविकि उपपद वापरà¥à¤¨, सà¥à¤¥à¤¾à¤¨à¤¿à¤• विकिवर बाहà¥à¤¯ à¤à¤šà¤Ÿà¥€à¤Ÿà¥€à¤ªà¥€(HTTP)साठी केलेलà¥à¤¯à¤¾ विनंतà¥à¤¯à¤¾ हà¥à¤¯à¤¾ \"{{int:badtitle}}\" असलेली तà¥à¤°à¥à¤Ÿà¥€, असा निकाल देतील.", + "interwiki_local_1_intro": "हे आंतरविकि उपपद वापरà¥à¤¨, सà¥à¤¥à¤¾à¤¨à¤¿à¤• विकिवर बाहà¥à¤¯ à¤à¤šà¤Ÿà¥€à¤Ÿà¥€à¤ªà¥€(HTTP)साठी केलेलà¥à¤¯à¤¾ विनंतà¥à¤¯à¤¾ हà¥à¤¯à¤¾ (जसे, सà¥à¤¥à¤¾à¤¨à¤¿à¤• पानांनाच दà¥à¤µà¥‡ दिलà¥à¤¯à¤¾ गेले आहेत असे समजून),लकà¥à¤·à¥à¤¯ यूआरà¤à¤²(URL)ला पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤¦à¥‡à¤¶à¤¿à¤¤ होतील.", + "interwiki_trans": "आंतरविनà¥à¤¯à¤¾à¤¸à¤¿à¤¤ करा", + "interwiki-trans-label": "आंतरविनà¥à¤¯à¤¾à¤¸à¤¿à¤¤ करा:", + "interwiki_trans_1_intro": "जर,{{उपपद:पाननाव}}ही विकिमजकूर वाकà¥à¤¯à¤°à¤šà¤¨à¤¾ वापरली तर,व सामानà¥à¤¯à¤°à¤¿à¤¤à¥à¤¯à¤¾ आंतरविकि आंतरविनà¥à¤¯à¤¾à¤¸ सकà¥à¤·à¤® केला असेल तर,परकà¥à¤¯à¤¾ विकिवरचे साचा/पानाचा आंतरविनà¥à¤¯à¤¾à¤¸ करणà¥à¤¯à¤¾à¤¸ परवानगी देते.([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion]).", + "interwiki_trans_0_intro": "{{उपपद:पाननाव}} ला परकà¥à¤¯à¤¾ विकिवरचे साचे/पाने आंतरविनà¥à¤¯à¤¾à¤¸à¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ परवानगी देऊ नका.अंमळ, साचा नामविशà¥à¤µà¤¾à¤¤ सà¥à¤¥à¤¾à¤¨à¤¿à¤• पान पहा.", "interwiki_error": "तà¥à¤°à¥à¤Ÿà¥€: आंतरविकि सारणी रिकामी आहे, किंवा इतर काहीतरी चà¥à¤•à¤²à¥‡à¤²à¥‡ आहे.", "interwiki_reasonfield": "कारण:", "interwiki_delquestion": "\"$1\" वगळत आहे", @@ -28,5 +38,7 @@ "interwiki_editerror": "आंतरविकि सारणीमधà¥à¤¯à¥‡ \"$1\" उपपद बदलू शकत नाही.\nकदाचित ते असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ नसेल.", "log-name-interwiki": "आंतरविकि सारणी नोंद", "log-description-interwiki": "[[Special:Interwiki|आंतरविकि सारणीत]] à¤à¤¾à¤²à¥‡à¤²à¥à¤¯à¤¾ बदलांची ही सूची आहे.", - "right-interwiki": "आंतरविकि डाटा बदला" + "right-interwiki": "आंतरविकि डाटा बदला", + "interwiki-links": "आंतरविकि उपसरà¥à¤—", + "interwiki-language-description": "ही उपपदे वà¥à¤¯à¤¾à¤–à¥à¤¯à¤¿à¤•à¥ƒà¤¤ भाषा संकेतास अनà¥à¤°à¥à¤ªà¤¤à¤¾à¤¤ व पानास जोडली तर तà¥à¤¯à¤¾à¤‚चा वापर, \"{{int:otherlanguages}}\"ची यादी करणà¥à¤¯à¤¾à¤¤ होतो." } diff --git a/extensions/Interwiki/i18n/nap.json b/extensions/Interwiki/i18n/nap.json index 6d823462..090e05de 100644 --- a/extensions/Interwiki/i18n/nap.json +++ b/extensions/Interwiki/i18n/nap.json @@ -4,6 +4,9 @@ "C.R." ] }, + "interwiki": "Vide e cagna 'e date interwiki", + "interwiki-title-norights": "Vide 'e date interwiki", + "interwiki-desc": "Azzecca na [[Special:Interwiki|paggena speciale]] pe' putè vedè e cagnà na tabbella interwiki", "interwiki_local_0_intro": "'E richieste HTTP sterne a 'o wiki lucale ch' 'ausano stu prefisso interwiki dint'a l'URL fernerranno comm'a n'errore \"{{int:badtitle}}\".", "interwiki_addtext": "Azzecca interwiki o prefisso 'e lengua", "interwiki-addtext-local": "Azzecca interwiki lucale o prefisso 'e lengua", diff --git a/extensions/Interwiki/i18n/nl.json b/extensions/Interwiki/i18n/nl.json index 1fb3a4ff..9b77f6cb 100644 --- a/extensions/Interwiki/i18n/nl.json +++ b/extensions/Interwiki/i18n/nl.json @@ -5,26 +5,27 @@ "Siebrand", "Tvdm", "Mar(c)", - "Sjoerddebruin" + "Sjoerddebruin", + "Esketti" ] }, "interwiki": "Interwikigegevens bekijken en wijzigen", "interwiki-title-norights": "Interwikigegevens bekijken", "interwiki-desc": "Voegt een [[Special:Interwiki|speciale pagina]] toe om de interwikitabel te bekijken en bewerken", - "interwiki_intro": "Dit is een overzicht van de interwikitabel.", + "interwiki_intro": "Dit is een overzicht van de interwiki tabel, waarin het voorvoegsel sneltoetsen gebruikt om snel een koppeling naar andere wiki ' s en andere externe sites. Voor de aanbevolen gebruiken, raadpleegt u [//www.mediawiki.org/wiki/Extension:Interwiki de handleiding op MediaWiki.org].", "interwiki-legend-label": "Legenda", "interwiki_prefix": "Voorvoegsel", "interwiki-prefix-label": "Voorvoegsel:", "interwiki_prefix_intro": "Interwikivoorvoegsel dat gebruikt moet worden in de wikitekstsyntaxis [[voorvoegsel:paginanaam]].", - "interwiki_url_intro": "Sjabloon voor URL's. De plaatshouder $1 wordt vervangen door de paginanaam van de wikitekst als de bovenvermelde wikitekstsyntaxis gebruikt wordt.", + "interwiki_url_intro": "Sjabloon voor Url ' s. De tijdelijke aanduiding $1 zal worden vervangen door de paginanaam in [[prefix:paginanaam]].", "interwiki_local": "Doorverwijzen", "interwiki-local-label": "Doorverwijzen:", - "interwiki_local_0_intro": "niet verwerkt, in plaats daarvan wordt een foutpagina \"{{int:badtitle}}\" weergegeven.", - "interwiki_local_1_intro": "doorverwezen naar de doel-URL die opgegeven is in de interwikikoppelingdefinities (m.a.w. behandeld als koppelingen naar lokale pagina's).", + "interwiki_local_0_intro": "Externe HTTP-aanvragen op de lokale wiki met behulp van deze interwiki prefix in de URL zal resulteren in een \"{{int:badtitle}}\" fout pagina.", + "interwiki_local_1_intro": "Externe HTTP-aanvragen op de lokale wiki met behulp van deze interwiki prefix zal omgeleid worden naar de URL van de interwiki (d.w.z. behandeld als links naar lokale pagina ' s).", "interwiki_trans": "Transcluderen", "interwiki-trans-label": "Transcluderen:", - "interwiki_trans_1_intro": "transclusie toestaan van de andere wiki, indien interwikitransclusies over het algemeen toegestaan zijn in deze wiki.", - "interwiki_trans_0_intro": "transclusie niet toestaan, zoek in plaats daarvan naar een pagina in de sjabloonnaamruimte.", + "interwiki_trans_1_intro": "Als wikitekst syntaxis {{prefix:paginanaam}} wordt gebruikt, laat sjabloon/pagina transclusion van de buitenlandse wiki als interwiki transclusions zijn ingeschakeld in het algemeen ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding eng transclusion]).", + "interwiki_trans_0_intro": "Niet toestaan {{prefix:paginanaam}} te transclude buitenlandse templates/pagina ' s, in plaats van te kijken voor een lokale pagina in de sjabloon-naamruimte.", "interwiki_1": "ja", "interwiki_0": "nee", "interwiki_error": "Fout: De interwikitabel is leeg, of iets anders is misgegaan.", @@ -35,7 +36,9 @@ "interwiki_deleting": "U bent voorvoegsel \"$1\" aan het verwijderen.", "interwiki_deleted": "Voorvoegsel \"$1\" is verwijderd uit de interwikitabel.", "interwiki_delfailed": "Voorvoegsel \"$1\" kon niet worden verwijderd uit de interwikitabel.", - "interwiki_addtext": "Interwikivoorvoegsel toevoegen", + "interwiki-logtext": "Logboeken bekijken", + "interwiki_addtext": "Voeg een interwiki of taal voorvoegsel", + "interwiki-addtext-local": "Voeg een lokale interwiki of taal voorvoegsel", "interwiki_addintro": "U bent een nieuw interwikivoorvoegsel aan het toevoegen.\nLet op dat dit geen spaties ( ), dubbele punt (:), ampersands (&), of gelijktekens (=) mag bevatten.", "interwiki_addbutton": "Toevoegen", "interwiki_added": "Voorvoegsel \"$1\" is toegevoegd aan de interwikitabel.", @@ -53,5 +56,12 @@ "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|heeft}} het voorvoegsel \"$4\" verwijderd uit de interwikitabel", "log-description-interwiki": "Dit is een logboek van wijzigingen aan de [[Special:Interwiki|interwikitabel]].", "right-interwiki": "Interwikigegevens bewerken", - "action-interwiki": "deze interwikikoppeling te wijzigen" + "action-interwiki": "deze interwikikoppeling te wijzigen", + "interwiki-global-links": "Global interwiki voorvoegsels", + "interwiki-global-description": "Deze voorvoegsels zijn overgenomen van een globale configuratie, en kunnen alleen worden bewerkt op de bron wiki.", + "interwiki-local-links": "Lokale interwiki voorvoegsels", + "interwiki-local-description": "Deze voorvoegsels ter plaatse bestaan. Eventuele duplicaten met de globale configuratie overschrijft de globale definitie.", + "interwiki-links": "Interwiki voorvoegsels", + "interwiki-language-links": "Interlanguage voorvoegsels", + "interwiki-language-description": "Deze voorvoegsels wedstrijd gedefinieerd taal codes, en zal worden gebruikt voor het maken van de \"{{int:otherlanguages}}\" lijst wanneer het wordt toegevoegd aan een pagina." } diff --git a/extensions/Interwiki/i18n/pl.json b/extensions/Interwiki/i18n/pl.json index 38c5132c..78aff879 100644 --- a/extensions/Interwiki/i18n/pl.json +++ b/extensions/Interwiki/i18n/pl.json @@ -37,7 +37,7 @@ "interwiki_deleting": "Usuwasz prefiks „$1â€.", "interwiki_deleted": "Prefiks „$1†zostaÅ‚ z powodzeniem usuniÄ™ty z tabeli interwiki.", "interwiki_delfailed": "Prefiks „$1†nie może zostać usuniÄ™ty z tabeli interwiki.", - "interwiki_addtext": "Dodaj przedrostek interwiki", + "interwiki_addtext": "Dodaj interwiki lub przedrostek jÄ™zyka", "interwiki_addintro": "Edytujesz przedrostek interwiki.\nPamiÄ™taj, że nie może on zawierać znaku odstÄ™pu ( ), dwukropka (:), ampersandu (&) oraz znaku równoÅ›ci (=).", "interwiki_addbutton": "Dodaj", "interwiki_added": "Prefiks „$1†zostaÅ‚ z powodzeniem dodany do tabeli interwiki.", @@ -55,5 +55,8 @@ "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|usunÄ…Å‚|usunęła}} przedrostek \"$4\" z tabeli interwiki", "log-description-interwiki": "Poniżej znajduje siÄ™ rejestr zmian wykonanych w [[Special:Interwiki|tablicy interwiki]].", "right-interwiki": "Edycja danych interwiki", - "action-interwiki": "zmieÅ„ ten wpis interwiki" + "action-interwiki": "zmieÅ„ ten wpis interwiki", + "interwiki-local-links": "Lokalne przedrostki interwiki", + "interwiki-links": "Przedrostki interwiki", + "interwiki-language-links": "Przedrostki miÄ™dzyjÄ™zykowe" } diff --git a/extensions/Interwiki/i18n/ps.json b/extensions/Interwiki/i18n/ps.json index e69dd47a..11c5e8b7 100644 --- a/extensions/Interwiki/i18n/ps.json +++ b/extensions/Interwiki/i18n/ps.json @@ -4,6 +4,7 @@ "Ahmed-Najib-Biabani-Ibrahimkhel" ] }, + "interwiki-title-norights": "ويکيخپلمنÚÙŠ اومتوک کتل", "interwiki_prefix": "مختاړی", "interwiki-prefix-label": "مختاړی:", "interwiki_1": "هو", @@ -12,5 +13,6 @@ "interwiki_reasonfield": "سبب:", "interwiki_delquestion": "\"$1\" د ړنگولو په حال Ú©Û Ø¯ÛŒ...", "interwiki_deleting": "ØªØ§Ø³Û Ø¯ \"$1\" مختاړی Ú“Ù†Ú«ÙˆÛŒ.", - "interwiki_addbutton": "ورگډول" + "interwiki_addbutton": "ورگډول", + "interwiki-links": "ويکيخپلمنÚÙŠ مختاړي" } diff --git a/extensions/Interwiki/i18n/pt.json b/extensions/Interwiki/i18n/pt.json index 73683eb2..2924180a 100644 --- a/extensions/Interwiki/i18n/pt.json +++ b/extensions/Interwiki/i18n/pt.json @@ -8,7 +8,8 @@ "Malafaya", "Waldir", "555", - "Vitorvicentevalente" + "Vitorvicentevalente", + "Fúlvio" ] }, "interwiki": "Ver e manipular dados de interwikis", @@ -19,11 +20,11 @@ "interwiki_prefix": "Prefixo", "interwiki-prefix-label": "Prefixo:", "interwiki_prefix_intro": "Sintaxe dos prefixos dos links interwikis, na notação wiki [[prefixo:nome da página]].", - "interwiki_url_intro": "Modelo para URLs. O espaço reservado por $1 será substituído pelo nome da página da notação wiki, quando for usada a sintaxe mencionada acima.", + "interwiki_url_intro": "Predefinição para URLs. O espaço reservado por $1 será substituído pelo nome da página in [[prefix:nome da página]].", "interwiki_local": "Encaminhar", "interwiki-local-label": "Encaminhar:", "interwiki_local_0_intro": "Solicitações HTTP externas à wiki local utilizado este prefixo de interlíngua na URL irão resultar numa página de erro \"{{int:badtitle}}\".", - "interwiki_local_1_intro": "redirecionado para a URL de destino especificada nas definições das ligações interwikis (isto é, tratada como referências para páginas locais).", + "interwiki_local_1_intro": "As solicitações HTTP externas para a wiki local utilizando este prefixo interwiki serão redirecionadas à URL de destino do interwiki (ou seja, serão tratadas como ligações à páginas locais).", "interwiki_trans": "Transcluir", "interwiki-trans-label": "Transcluir:", "interwiki_trans_1_intro": "permite transclusão da wiki externa, se transclusões interwikis forem permitidas de forma geral nesta wiki,", diff --git a/extensions/Interwiki/i18n/ru.json b/extensions/Interwiki/i18n/ru.json index 0857b89b..40b9914a 100644 --- a/extensions/Interwiki/i18n/ru.json +++ b/extensions/Interwiki/i18n/ru.json @@ -54,7 +54,7 @@ "interwiki_editerror": "ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Â«$1» не может быть изменён в таблице интервики. Возможно, его там не ÑущеÑтвует.", "interwiki-badprefix": "Указанный Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð¸ÐºÐ¸ «$1» Ñодержит недопуÑтимые Ñимволы", "interwiki-submit-empty": "ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð¸ URL не могут быть пуÑтыми.", - "interwiki-submit-invalidurl": "Протокол URL-адреÑа ÑвлÑетÑÑ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимым.", + "interwiki-submit-invalidurl": "Ðекорректный протокол URL-адреÑа.", "log-name-interwiki": "Журнал изменений таблицы интервики", "logentry-interwiki-iw_add": "$1 {{GENDER:$2|добавил|добавила}} Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Â«$4» ($5) (trans: $6; local: $7) в интервики-таблицу", "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|изменил|изменила}} Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Â«$4» ($5) (trans: $6; local: $7) в интервики-таблице", diff --git a/extensions/Interwiki/i18n/scn.json b/extensions/Interwiki/i18n/scn.json index bf58d6cd..42a612d6 100644 --- a/extensions/Interwiki/i18n/scn.json +++ b/extensions/Interwiki/i18n/scn.json @@ -1,28 +1,30 @@ { "@metadata": { "authors": [ - "Santu" + "Santu", + "Pippinu", + "Sarvaturi" ] }, "interwiki": "Talìa e mudìfica li dati interwiki", "interwiki-title-norights": "Talìa li dati interwiki", "interwiki-desc": "Junci na [[Special:Interwiki|pàggina spiciali]] pi taliari e mudificari la tabedda di li interwiki", - "interwiki_intro": "Talìa [http://www.mediawiki.org/wiki/Interwiki_table MediaWiki.org] pi chiossai nfurmazzioni supr'a tabedda di li interwiki.", + "interwiki_intro": "Chista è na panuràmica dâ tabbella interwiki, chi difinisci li prifissi scurzaturi chi si ponnu adupirari pi fari culligamenti viloci versu àutri wiki o àutri siti esterni. Pi struzzioni supra a comu s'adòpira, talìa [//www.mediawiki.org/wiki/Extension:Interwiki lu manuali supra a MediaWiki.org].", "interwiki_prefix": "Prifissu", "interwiki-prefix-label": "Prifissu:", "interwiki_url": "URL", "interwiki-url-label": "URL:", - "interwiki_local": "Qualificari chistu comu a nu wiki lucali", - "interwiki-local-label": "Qualificari chistu comu a nu wiki lucali:", - "interwiki_trans": "Cunzenti interwiki transclusions", - "interwiki-trans-label": "Cunzenti interwiki transclusions:", + "interwiki_local": "Rimanna", + "interwiki-local-label": "Rimanna:", + "interwiki_trans": "Ncludi", + "interwiki-trans-label": "Ncludi:", "interwiki_error": "SBÀGGHIU: La tabedda di li interwiki è vacanti, o c'è qualchi àutru sbàgghiu.", "interwiki_reasonfield": "Mutivu:", "interwiki_delquestion": "Scancellu \"$1\"", "interwiki_deleting": "Stai pi scancillari lu prufissu \"$1\"", "interwiki_deleted": "Lu prifissu \"$1\" vinni scancillatu cu successu dâ tabedda di li interwiki.", "interwiki_delfailed": "Rimuzzioni dû prifissi \"$1\" dâ tabedda di li interwiki non arinisciuta.", - "interwiki_addtext": "Jùncicci nu prifissu interwiki", + "interwiki_addtext": "Agghiunci nu prifissu interwiki o di lingua", "interwiki_addintro": "Ora veni iunciutu nu novu prifissu interwiki.\nNon sunnu ammittuti li caràttiri: spàzziu ( ), dui punti (:), e cummirciali (&), sìmmulu di uguali (=).", "interwiki_addbutton": "Iunci", "interwiki_added": "Lu prifissi \"$1\" vinni iunciutu a la tabedda di li interwiki.", diff --git a/extensions/Interwiki/i18n/sr-el.json b/extensions/Interwiki/i18n/sr-el.json index 6bab5d1f..0304ca0c 100644 --- a/extensions/Interwiki/i18n/sr-el.json +++ b/extensions/Interwiki/i18n/sr-el.json @@ -7,7 +7,7 @@ ] }, "interwiki": "Pregledaj i izmeni podatke o meÄ‘uvikiju", - "interwiki-title-norights": "Pregledaj podatke o meÄ‘uvikiju", + "interwiki-title-norights": "MeÄ‘uviki", "interwiki-desc": "Dodaje [[Special:Interwiki|specijalnu stranu]] za pregled i izmenu tabele meÄ‘uvikija", "interwiki_intro": "Ovo je pregled tabele meÄ‘uvikija.", "interwiki-legend-label": "Legenda", diff --git a/extensions/Interwiki/i18n/sw.json b/extensions/Interwiki/i18n/sw.json index b899430f..e06f06af 100644 --- a/extensions/Interwiki/i18n/sw.json +++ b/extensions/Interwiki/i18n/sw.json @@ -1,8 +1,10 @@ { "@metadata": { "authors": [ - "Ikiwaner" + "Ikiwaner", + "Kwisha" ] }, + "interwiki-legend-label": "Simulizi", "interwiki_1": "ndiyo" } diff --git a/extensions/Interwiki/i18n/uk.json b/extensions/Interwiki/i18n/uk.json index 5c3958a7..6237790b 100644 --- a/extensions/Interwiki/i18n/uk.json +++ b/extensions/Interwiki/i18n/uk.json @@ -30,7 +30,7 @@ "interwiki_trans": "ВключеннÑ", "interwiki-trans-label": "ВключеннÑ:", "interwiki_trans_1_intro": "Якщо викориÑтано ÑинтакÑÐ¸Ñ Ð²Ñ–ÐºÑ–Ñ‚ÐµÐºÑту {{prefix:назва Ñторінки}}, дозволити Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð²/Ñторінок з інших вікі, Ñкщо інтервікі-Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð²Ð·Ð°Ð³Ð°Ð»Ñ– дозволено в налаштуванні [//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding жахливі включеннÑ].", - "interwiki_trans_0_intro": "Ðе дозволÑти конÑтрукції {{prefix:назва Ñторінки}} Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñторонніх шаблонів/Ñторінок, натоміÑÑ‚ÑŒ шукаєтьÑÑ Ñторінка у проÑторі імен шаблону.", + "interwiki_trans_0_intro": "Ðе дозволÑти конÑтрукції {{prefix:назва Ñторінки}} Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñторонніх шаблонів/Ñторінок, натоміÑÑ‚ÑŒ шукаєтьÑÑ Ñторінка у проÑторі назв шаблонів.", "interwiki_1": "так", "interwiki_0": "ні", "interwiki_error": "Помилка: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ–Ð½Ñ‚ÐµÑ€Ð²Ñ–ÐºÑ– Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ð°Ð±Ð¾ щоÑÑŒ іще пішло не так.", diff --git a/extensions/Interwiki/i18n/vi.json b/extensions/Interwiki/i18n/vi.json index b009e5b2..9ee008ca 100644 --- a/extensions/Interwiki/i18n/vi.json +++ b/extensions/Interwiki/i18n/vi.json @@ -46,7 +46,7 @@ "log-name-interwiki": "Nhật trình bảng liên wiki", "logentry-interwiki-iw_add": "{{GENDER:$2}}$1 đã thêm tiá»n tố “$4†($5) (trans: $6; local: $7) vào bảng liên wiki", "logentry-interwiki-iw_edit": "{{GENDER:$2}}$1 đã sá»­a đổi tiá»n tố “$4†($5) (trans: $6; local: $7) trong bảng liên wiki", - "logentry-interwiki-iw_delete": "{{GENDER:$2|}}$1 đã xóa tiá»n tố “$4†khá»i bảng liên wiki", + "logentry-interwiki-iw_delete": "$1 {{GENDER:$2}}đã xóa tiá»n tố “$4†khá»i bảng liên wiki", "log-description-interwiki": "Äây là nhật trình các thay đổi trong [[Special:Interwiki|bảng liên wiki]].", "right-interwiki": "Sá»­a dữ liệu liên wiki", "action-interwiki": "thay đổi khoản mục liên wiki này" diff --git a/extensions/Interwiki/i18n/zh-hans.json b/extensions/Interwiki/i18n/zh-hans.json index 02da9a66..d8a0543b 100644 --- a/extensions/Interwiki/i18n/zh-hans.json +++ b/extensions/Interwiki/i18n/zh-hans.json @@ -28,15 +28,15 @@ "interwiki_url_intro": "URL模æ¿ã€‚å ä½ç¬¦$1将被[[prefix:pagename]]中的pagename替æ¢ã€‚", "interwiki_local": "转å‘", "interwiki-local-label": "转å‘:", - "interwiki_local_0_intro": "本地wikiçš„URL中使用此跨wikiå‰ç¼€çš„外部HTTP请求将导致“{{int:badtitle}}â€é”™è¯¯é¡µé¢ã€‚", + "interwiki_local_0_intro": "使用此跨wikiå‰ç¼€åˆ°æœ¬åœ°wiki的外部HTTP请求将导致“{{int:badtitle}}â€é”™è¯¯é¡µé¢ã€‚", "interwiki_local_1_intro": "使用此跨wikiå‰ç¼€åˆ°æœ¬åœ°wiki的外部HTTP请求将é‡å®šå‘到跨wiki链接的目标URL(å³å¯¹å¾…本地页é¢çš„链接)。", "interwiki_trans": "嵌入", "interwiki-trans-label": "嵌入:", - "interwiki_trans_1_intro": "如果(一般情况下å‡ï¼‰å¯ç”¨äº†è·¨wiki 转å‘,在使用了wiki 语法{{prefix:pagename}}的情况下,就å…许嵌入自外部wiki 的模æ¿/页é¢ï¼ˆ[//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion])。", - "interwiki_trans_0_intro": "ä¸è¦å…许{{prefix:pagename}}以嵌入无关模æ¿/页é¢ï¼Œåº”看作是模æ¿å字空间的本地页é¢ã€‚", + "interwiki_trans_1_intro": "如果使用了wiki语法{{prefix:pagename}}且跨wiki转å‘在一般情况下([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion])被å¯ç”¨ï¼Œå°†ä¼šåµŒå…¥å¤–部wiki的模æ¿æˆ–页é¢ã€‚", + "interwiki_trans_0_intro": "ç¦æ­¢{{prefix:pagename}}嵌入外部页é¢ï¼Œå°†åœ¨æœ¬åœ°æ¨¡æ¿å字空间查找对应页é¢ã€‚", "interwiki_1": "是", "interwiki_0": "å¦", - "interwiki_error": "错误: è·¨wiki表为空,或是å‘生其它错误。", + "interwiki_error": "错误:跨wiki表为空,或å‘生了其它错误。", "interwiki-cached": "跨维基数æ®æ˜¯ç¼“存的。缓存ä¸èƒ½è¢«ä¿®æ”¹ã€‚", "interwiki_edit": "编辑", "interwiki_reasonfield": "原因:", diff --git a/extensions/Interwiki/phpcs.xml b/extensions/Interwiki/phpcs.xml new file mode 100644 index 00000000..d81a2927 --- /dev/null +++ b/extensions/Interwiki/phpcs.xml @@ -0,0 +1,8 @@ + + + + . + + + vendor + diff --git a/extensions/LocalisationUpdate/Autoload.php b/extensions/LocalisationUpdate/Autoload.php index 0b3f14dc..8be7124a 100644 --- a/extensions/LocalisationUpdate/Autoload.php +++ b/extensions/LocalisationUpdate/Autoload.php @@ -5,27 +5,24 @@ * @license GPL-2.0+ */ -global $wgAutoloadClasses; $dir = __DIR__; -$wgAutoloadClasses += array( - 'LocalisationUpdate' => "$dir/LocalisationUpdate.class.php", - 'LU_Updater' => "$dir/Updater.php", - 'QuickArrayReader' => "$dir/QuickArrayReader.php", +$GLOBALS['wgAutoloadClasses']['LocalisationUpdate'] = "$dir/LocalisationUpdate.class.php"; +$GLOBALS['wgAutoloadClasses']['LU_Updater'] = "$dir/Updater.php"; +$GLOBALS['wgAutoloadClasses']['QuickArrayReader'] = "$dir/QuickArrayReader.php"; - # fetcher - 'LU_Fetcher' => "$dir/fetcher/Fetcher.php", - 'LU_FetcherFactory' => "$dir/fetcher/FetcherFactory.php", - 'LU_FileSystemFetcher' => "$dir/fetcher/FileSystemFetcher.php", - 'LU_GitHubFetcher' => "$dir/fetcher/GitHubFetcher.php", - 'LU_HttpFetcher' => "$dir/fetcher/HttpFetcher.php", +# fetcher +$GLOBALS['wgAutoloadClasses']['LU_Fetcher'] = "$dir/fetcher/Fetcher.php"; +$GLOBALS['wgAutoloadClasses']['LU_FetcherFactory'] = "$dir/fetcher/FetcherFactory.php"; +$GLOBALS['wgAutoloadClasses']['LU_FileSystemFetcher'] = "$dir/fetcher/FileSystemFetcher.php"; +$GLOBALS['wgAutoloadClasses']['LU_GitHubFetcher'] = "$dir/fetcher/GitHubFetcher.php"; +$GLOBALS['wgAutoloadClasses']['LU_HttpFetcher'] = "$dir/fetcher/HttpFetcher.php"; - # finder - 'LU_Finder' => "$dir/finder/Finder.php", +# finder +$GLOBALS['wgAutoloadClasses']['LU_Finder'] = "$dir/finder/Finder.php"; - # reader - 'LU_JSONReader' => "$dir/reader/JSONReader.php", - 'LU_PHPReader' => "$dir/reader/PHPReader.php", - 'LU_Reader' => "$dir/reader/Reader.php", - 'LU_ReaderFactory' => "$dir/reader/ReaderFactory.php", -); +# reader +$GLOBALS['wgAutoloadClasses']['LU_JSONReader'] = "$dir/reader/JSONReader.php"; +$GLOBALS['wgAutoloadClasses']['LU_PHPReader'] = "$dir/reader/PHPReader.php"; +$GLOBALS['wgAutoloadClasses']['LU_Reader'] = "$dir/reader/Reader.php"; +$GLOBALS['wgAutoloadClasses']['LU_ReaderFactory'] = "$dir/reader/ReaderFactory.php"; diff --git a/extensions/LocalisationUpdate/Gruntfile.js b/extensions/LocalisationUpdate/Gruntfile.js new file mode 100644 index 00000000..5a87e7b6 --- /dev/null +++ b/extensions/LocalisationUpdate/Gruntfile.js @@ -0,0 +1,19 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/LocalisationUpdate/LocalisationUpdate.php b/extensions/LocalisationUpdate/LocalisationUpdate.php index 6548a3c6..63161c17 100644 --- a/extensions/LocalisationUpdate/LocalisationUpdate.php +++ b/extensions/LocalisationUpdate/LocalisationUpdate.php @@ -3,7 +3,7 @@ if ( function_exists( 'wfLoadExtension' ) ) { wfLoadExtension( 'LocalisationUpdate' ); // Keep i18n globals so mergeMessageFileList.php doesn't break - $wgMessagesDirs['LocalisationUpdate'] = __DIR__ . '/i18n'; + $GLOBALS['wgMessagesDirs']['LocalisationUpdate'] = __DIR__ . '/i18n'; /* wfWarn( 'Deprecated PHP entry point used for LocalisationUpdate extension. Please use wfLoadExtension instead, ' . 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' @@ -22,20 +22,20 @@ if ( function_exists( 'wfLoadExtension' ) ) { * NOTE: If this variable and $wgCacheDirectory are both false, this extension * WILL NOT WORK. */ -$wgLocalisationUpdateDirectory = false; +$GLOBALS['wgLocalisationUpdateDirectory'] = false; /** * Default repository source to use. * @since 2014-03 */ -$wgLocalisationUpdateRepository = 'github'; +$GLOBALS['wgLocalisationUpdateRepository'] = 'github'; /** * Available repository sources. * @since 2014-03 */ -$wgLocalisationUpdateRepositories = array(); -$wgLocalisationUpdateRepositories['github'] = array( +$GLOBALS['wgLocalisationUpdateRepositories'] = array(); +$GLOBALS['wgLocalisationUpdateRepositories']['github'] = array( 'mediawiki' => 'https://raw.github.com/wikimedia/mediawiki/master/%PATH%', 'extension' => @@ -54,21 +54,22 @@ $wgLocalisationUpdateRepositories['github'] = array( # 'file:///resources/projects/mediawiki-skins/skins/%NAME%/%PATH%', #); -$wgExtensionCredits['other'][] = array( +$GLOBALS['wgExtensionCredits']['other'][] = array( 'path' => __FILE__, 'name' => 'LocalisationUpdate', 'author' => array( 'Tom Maaswinkel', 'Niklas Laxström', 'Roan Kattouw' ), 'version' => '1.3.0', 'url' => 'https://www.mediawiki.org/wiki/Extension:LocalisationUpdate', 'descriptionmsg' => 'localisationupdate-desc', + 'license-name' => 'GPL-2.0+', ); -$wgHooks['LocalisationCacheRecache'][] = 'LocalisationUpdate::onRecache'; -$wgHooks['LocalisationCacheRecacheFallback'][] = 'LocalisationUpdate::onRecacheFallback'; $GLOBALS['wgHooks']['UnitTestsList'][] = 'LocalisationUpdate::setupUnitTests'; +$GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'LocalisationUpdate::onRecache'; +$GLOBALS['wgHooks']['LocalisationCacheRecacheFallback'][] = 'LocalisationUpdate::onRecacheFallback'; $dir = __DIR__; -$wgMessagesDirs['LocalisationUpdate'] = __DIR__ . '/i18n'; -$wgExtensionMessagesFiles['LocalisationUpdate'] = "$dir/LocalisationUpdate.i18n.php"; +$GLOBALS['wgMessagesDirs']['LocalisationUpdate'] = __DIR__ . '/i18n'; +$GLOBALS['wgExtensionMessagesFiles']['LocalisationUpdate'] = "$dir/LocalisationUpdate.i18n.php"; require "$dir/Autoload.php"; diff --git a/extensions/LocalisationUpdate/composer.json b/extensions/LocalisationUpdate/composer.json new file mode 100644 index 00000000..6a626250 --- /dev/null +++ b/extensions/LocalisationUpdate/composer.json @@ -0,0 +1,47 @@ +{ + "name": "mediawiki/localisation-update", + "type": "mediawiki-extension", + "description": "MediaWiki extension to keep the localised messages as up to date as possible.", + "keywords": [ + "MediaWiki", + "l10n", + "localization" + ], + "homepage": "https://www.mediawiki.org/wiki/Extension:LocalisationUpdate", + "license": "GPL-2.0+", + "authors": [ + { + "name": "Roan Kattouw", + "email": "roan.kattouw@gmail.com", + "role": "Developer" + }, + { + "name": "Niklas Laxström", + "email": "niklas.laxstrom@gmail.com", + "role": "Developer" + }, + { + "name": "Tom Maaswinkel", + "role": "Original author" + } + ], + "support": { + "issues": "https://phabricator.wikimedia.org/", + "irc": "irc://irc.freenode.net/mediawiki", + "forum": "https://www.mediawiki.org/wiki/Extension_talk:LocalisationUpdate", + "wiki": "https://www.mediawiki.org/wiki/Extension:LocalisationUpdate" + }, + "autoload": { + "files": [ + "LocalisationUpdate.php" + ] + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/LocalisationUpdate/extension.json b/extensions/LocalisationUpdate/extension.json index 43262f09..0ab5d060 100644 --- a/extensions/LocalisationUpdate/extension.json +++ b/extensions/LocalisationUpdate/extension.json @@ -9,6 +9,7 @@ ], "url": "https://www.mediawiki.org/wiki/Extension:LocalisationUpdate", "descriptionmsg": "localisationupdate-desc", + "license-name": "GPL-2.0+", "type": "other", "MessagesDirs": { "LocalisationUpdate": [ @@ -51,5 +52,6 @@ "skin": "https://raw.github.com/wikimedia/mediawiki-skins-%NAME%/master/%PATH%" } } - } + }, + "manifest_version": 1 } diff --git a/extensions/Nuke/Gruntfile.js b/extensions/Nuke/Gruntfile.js new file mode 100644 index 00000000..acb20a8a --- /dev/null +++ b/extensions/Nuke/Gruntfile.js @@ -0,0 +1,28 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-contrib-jshint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + jshint: { + options: { + jshintrc: true + }, + all: [ + '*.js' + ] + }, + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jshint', 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/Nuke/Nuke.alias.php b/extensions/Nuke/Nuke.alias.php index 1291decb..81d77b5e 100644 --- a/extensions/Nuke/Nuke.alias.php +++ b/extensions/Nuke/Nuke.alias.php @@ -19,7 +19,7 @@ $specialPageAliases['ar'] = array( 'Nuke' => array( 'حذÙ_كمي' ), ); -/** Egyptian Spoken Arabic (مصرى) */ +/** Egyptian Arabic (مصرى) */ $specialPageAliases['arz'] = array( 'Nuke' => array( 'مسح_كامل' ), ); @@ -39,6 +39,11 @@ $specialPageAliases['be-tarask'] = array( 'Nuke' => array( 'МаÑавае_выдаленьне' ), ); +/** Western Balochi (بلوچی رخشانی) */ +$specialPageAliases['bgn'] = array( + 'Nuke' => array( 'دسته_جمین_پاک_کورتین' ), +); + /** Banjar (Bahasa Banjar) */ $specialPageAliases['bjn'] = array( 'Nuke' => array( 'Nuklir' ), @@ -46,7 +51,7 @@ $specialPageAliases['bjn'] = array( /** Chechen (нохчийн) */ $specialPageAliases['ce'] = array( - 'Nuke' => array( 'Дуккха_дӀаÑккхар' ), + 'Nuke' => array( 'Дуккха_дӀаÑхар' ), ); /** German (Deutsch) */ @@ -169,9 +174,9 @@ $specialPageAliases['lb'] = array( 'Nuke' => array( 'Masseläschung' ), ); -/** لوری (لوری) */ +/** Northern Luri (لۊری شومالی) */ $specialPageAliases['lrc'] = array( - 'Nuke' => array( 'اتمی' ), + 'Nuke' => array( 'أتومی' ), ); /** Literary Chinese (文言) */ diff --git a/extensions/Nuke/Nuke.hooks.php b/extensions/Nuke/Nuke.hooks.php index fddcf51a..40a1a436 100644 --- a/extensions/Nuke/Nuke.hooks.php +++ b/extensions/Nuke/Nuke.hooks.php @@ -22,6 +22,7 @@ class NukeHooks { array( 'target' => $userPageTitle->getText() ) ); } + return true; } } diff --git a/extensions/Nuke/Nuke.php b/extensions/Nuke/Nuke.php index ec37f1c5..56a9f3bf 100644 --- a/extensions/Nuke/Nuke.php +++ b/extensions/Nuke/Nuke.php @@ -5,10 +5,12 @@ if ( function_exists( 'wfLoadExtension' ) ) { // Keep i18n globals so mergeMessageFileList.php doesn't break $wgMessagesDirs['Nuke'] = __DIR__ . '/i18n'; $wgExtensionMessagesFiles['NukeAlias'] = __DIR__ . '/Nuke.alias.php'; + /* wfWarn( 'Deprecated PHP entry point used for Nuke extension. Please use wfLoadExtension instead, ' . 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' ); */ + return true; } else { die( 'This version of the Nuke extension requires MediaWiki 1.25+' ); diff --git a/extensions/Nuke/Nuke_body.php b/extensions/Nuke/Nuke_body.php index b662b7fa..8458db55 100644 --- a/extensions/Nuke/Nuke_body.php +++ b/extensions/Nuke/Nuke_body.php @@ -38,7 +38,7 @@ class SpecialNuke extends SpecialPage { $msg = $target === '' ? $this->msg( 'nuke-multiplepeople' )->inContentLanguage()->text() : $this->msg( 'nuke-defaultreason', $target )-> - inContentLanguage()->text(); + inContentLanguage()->text(); $reason = $req->getText( 'wpReason', $msg ); $limit = $req->getInt( 'limit', 500 ); @@ -46,16 +46,18 @@ class SpecialNuke extends SpecialPage { $namespace = ctype_digit( $namespace ) ? (int)$namespace : null; if ( $req->wasPosted() - && $this->getUser()->matchEditToken( $req->getVal( 'wpEditToken' ) ) ) { + && $this->getUser()->matchEditToken( $req->getVal( 'wpEditToken' ) ) + ) { - if ( $req->getVal( 'action' ) == 'delete' ) { + if ( $req->getVal( 'action' ) === 'delete' ) { $pages = $req->getArray( 'pages' ); if ( $pages ) { $this->doDelete( $pages, $reason ); + return; } - } elseif ( $req->getVal( 'action' ) == 'submit' ) { + } elseif ( $req->getVal( 'action' ) === 'submit' ) { $this->listForm( $target, $reason, $limit, $namespace ); } else { $this->promptForm(); @@ -82,25 +84,37 @@ class SpecialNuke extends SpecialPage { Xml::openElement( 'form', array( - 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), + 'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ), 'method' => 'post' ) ) . '' - . '' - . '' + . '' + . '' . '' - . '' - . '' - . '' - . '' - . '' + . '' + . '' . '' - . '' - . '' + . '' + . '' . '' - . '' - . '' + . '' + . '' + . '' + . '' + . '' . '
    ' . Xml::label( $this->msg( 'nuke-userorip' )->text(), 'nuke-target' ) . '' . Xml::input( 'target', 40, $userName, array( 'id' => 'nuke-target', 'class' => 'mw-autocomplete-user', 'autofocus' => true ) ) . '' . Xml::label( $this->msg( 'nuke-userorip' )->text(), 'nuke-target' ) . '' . Xml::input( + 'target', + 40, + $userName, + array( + 'id' => 'nuke-target', + 'class' => 'mw-autocomplete-user', + 'autofocus' => true + ) + ) . '
    ' . Xml::label( $this->msg( 'nuke-pattern' )->text(), 'nuke-pattern' ) . '' . Xml::input( 'pattern', 40, '', array( 'id' => 'nuke-pattern' ) ) . '
    ' . Xml::label( $this->msg( 'nuke-namespace' )->text(), 'nuke-namespace' ) . '' . Html::namespaceSelector( array( 'all' => 'all' ), array( 'name' => 'namespace' ) ) . '' . Xml::label( $this->msg( 'nuke-pattern' )->text(), 'nuke-pattern' ) . '' . Xml::input( 'pattern', 40, '', array( 'id' => 'nuke-pattern' ) ) . '
    ' . Xml::label( $this->msg( 'nuke-maxpages' )->text(), 'nuke-limit' ) . '' . Xml::input( 'limit', 7, '500', array( 'id' => 'nuke-limit' ) ) . '' . Xml::label( $this->msg( 'nuke-namespace' )->text(), 'nuke-namespace' ) . '' . Html::namespaceSelector( + array( 'all' => 'all' ), + array( 'name' => 'namespace' ) + ) . '
    ' . Xml::submitButton( $this->msg( 'nuke-submit-user' )->text() ) . '' . Xml::label( $this->msg( 'nuke-maxpages' )->text(), 'nuke-limit' ) . '' . Xml::input( 'limit', 7, '500', array( 'id' => 'nuke-limit' ) ) . '
    ' . Xml::submitButton( $this->msg( 'nuke-submit-user' )->text() ) . '
    ' . Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() ) . Xml::closeElement( 'form' ) @@ -120,7 +134,7 @@ class SpecialNuke extends SpecialPage { $pages = $this->getNewPages( $username, $limit, $namespace ); - if ( count( $pages ) == 0 ) { + if ( count( $pages ) === 0 ) { if ( $username === '' ) { $out->addWikiMsg( 'nuke-nopages-global' ); } else { @@ -128,6 +142,7 @@ class SpecialNuke extends SpecialPage { } $this->promptForm( $username ); + return; } @@ -137,15 +152,15 @@ class SpecialNuke extends SpecialPage { $out->addWikiMsg( 'nuke-list', $username ); } - $nuke = $this->getTitle(); + $nuke = $this->getPageTitle(); $out->addModules( 'ext.nuke' ); $out->addHTML( Xml::openElement( 'form', array( - 'action' => $nuke->getLocalURL( 'action=delete' ), - 'method' => 'post', - 'name' => 'nukelist' ) + 'action' => $nuke->getLocalURL( 'action=delete' ), + 'method' => 'post', + 'name' => 'nukelist' ) ) . Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() ) . Xml::tags( 'p', @@ -188,10 +203,14 @@ class SpecialNuke extends SpecialPage { */ list( $title, $userName ) = $info; - $image = $title->getNamespace() == NS_IMAGE ? wfLocalFile( $title ) : false; - $thumb = $image && $image->exists() ? $image->transform( array( 'width' => 120, 'height' => 120 ), 0 ) : false; + $image = $title->getNamespace() === NS_IMAGE ? wfLocalFile( $title ) : false; + $thumb = $image && $image->exists() ? + $image->transform( array( 'width' => 120, 'height' => 120 ), 0 ) : + false; - $userNameText = $userName ? $this->msg( 'nuke-editby', $userName )->parse() . $commaSeparator : ''; + $userNameText = $userName ? + $this->msg( 'nuke-editby', $userName )->parse() . $commaSeparator : + ''; $changesLink = Linker::linkKnown( $title, $this->msg( 'nuke-viewchanges' )->escaped(), @@ -202,7 +221,7 @@ class SpecialNuke extends SpecialPage { Xml::check( 'pages[]', true, - array( 'value' => $title->getPrefixedDbKey() ) + array( 'value' => $title->getPrefixedDBKey() ) ) . ' ' . ( $thumb ? $thumb->toHtml( array( 'desc-link' => true ) ) : '' ) . Linker::linkKnown( $title ) . $wordSeparator . @@ -288,7 +307,7 @@ class SpecialNuke extends SpecialPage { foreach ( $pages as $page ) { $title = Title::newFromURL( $page ); - $file = $title->getNamespace() == NS_FILE ? wfLocalFile( $title ) : false; + $file = $title->getNamespace() === NS_FILE ? wfLocalFile( $title ) : false; $permission_errors = $title->getUserPermissionsErrors( 'delete', $this->getUser() ); diff --git a/extensions/Nuke/SpecialNuke.php b/extensions/Nuke/SpecialNuke.php index 3a8408a1..a618a33a 100644 --- a/extensions/Nuke/SpecialNuke.php +++ b/extensions/Nuke/SpecialNuke.php @@ -1,2 +1,2 @@ IP-Addräß udder nix:", - "nuke-maxpages": "Nit mieh Sigge, wi:", + "nuke-userorip": "Metmaacher_Nahme, IP-Addräß udder nix:", + "nuke-maxpages": "Nit mih Sigge, wi:", "nuke-editby": "Aanjelaat {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} [[Special:Contributions/$1|$1]]", "nuke-deleted": "Di Sigg '''„$1“''' es fottjeschmeße.", "nuke-not-deleted": "Di Sigg „[[:$1]]“ '''kunnt nit''' fottjeschmeße wääde.", - "nuke-delete-more": "[[Special:Nuke|Noch mieh Sigge fottschmiiße]]", - "nuke-pattern": "Et Moster för dä Sigge iere Naame:", + "nuke-delete-more": "[[Special:Nuke|Noch mih Sigge fottschmiiße]]", + "nuke-pattern": "Et Moster för dä Sigge iere Nahme:", "nuke-nopages-global": "Mer han kein neue Sigge en de [[Special:RecentChanges|neuste Änderonge]].", "nuke-viewchanges": "de Ungerscheide zeije", "nuke-namespace": "Beschränke op dat Appachtemang:", diff --git a/extensions/Nuke/i18n/ml.json b/extensions/Nuke/i18n/ml.json index 25b042aa..ab0a51c6 100644 --- a/extensions/Nuke/i18n/ml.json +++ b/extensions/Nuke/i18n/ml.json @@ -15,6 +15,7 @@ "nuke-multiplepeople": "സമീപകാലതàµà´¤àµ ചേർതàµà´¤ താളàµà´•à´³àµà´Ÿàµ† കൂടàµà´Ÿ മായàµà´•àµà´•àµ½", "nuke-tools": "à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ ഒരൠഉപയോകàµà´¤à´¾à´µàµ à´…à´²àµà´²àµ†à´™àµà´•à´¿àµ½ à´.പി. സമീപകാലതàµà´¤àµ സൃഷàµà´Ÿà´¿à´šàµà´š താളàµà´•àµ¾ കൂടàµà´Ÿà´®à´¾à´¯à´¿ മായàµà´•àµà´•à´¾à´¨àµà´³àµà´³ സൗകരàµà´¯à´‚ à´ˆ സം‌വിധാനം നൽകàµà´¨àµà´¨àµ. ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ à´…à´²àµà´²àµ†à´™àµà´•à´¿àµ½ à´.പി. ഇവിടെ നൽകിയാൽ മായàµà´•àµà´•àµ‡à´£àµà´Ÿ താളàµà´•à´³àµà´Ÿàµ† പടàµà´Ÿà´¿à´• ലഭàµà´¯à´®à´¾à´•àµà´¨àµà´¨à´¤à´¾à´£àµ, à´Žà´²àµà´²à´¾ ഉപയോകàµà´¤à´¾à´•àµà´•à´³àµà´‚ സൃഷàµà´Ÿà´¿à´šàµà´šà´¿à´Ÿàµà´Ÿàµà´³àµà´³ താൾ മായàµà´•àµà´•à´¾àµ» ശൂനàµà´¯à´®à´¾à´¯à´¿à´Ÿàµà´•.", "nuke-submit-user": "പോകൂ", + "nuke-toggleinvert": "നേർവിപരീതം", "nuke-submit-delete": "തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤à´µ മായàµà´•àµà´•àµà´•", "right-nuke": "താളàµà´•àµ¾ കൂടàµà´Ÿà´¤àµà´¤àµ‹à´Ÿàµ† മായàµà´•àµà´•àµà´•", "nuke-select": "തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•: $1", diff --git a/extensions/Nuke/i18n/nb.json b/extensions/Nuke/i18n/nb.json index 71ac08d2..f10e04a0 100644 --- a/extensions/Nuke/i18n/nb.json +++ b/extensions/Nuke/i18n/nb.json @@ -3,7 +3,8 @@ "authors": [ "Event", "Nghtwlkr", - "Danmichaelo" + "Danmichaelo", + "Kingu" ] }, "nuke": "Massesletting", @@ -16,6 +17,7 @@ "nuke-multiplepeople": "Massesletting av nylig opprettede sider", "nuke-tools": "Dette verktøyet muliggjør massesletting av sider som nylig er opprettet av gitt bruker eller IP-adresse.\nSkriv et brukernavn eller en IP-adresse for Ã¥ fÃ¥ en liste over sider som kan slettes, eller angi tomt for alle brukere.", "nuke-submit-user": "Vis", + "nuke-toggleinvert": "Inverter", "nuke-submit-delete": "Slett valgte", "right-nuke": "Slette sider en masse", "nuke-select": "Velg: $1", diff --git a/extensions/Nuke/i18n/nl.json b/extensions/Nuke/i18n/nl.json index 3127483b..e5706fb7 100644 --- a/extensions/Nuke/i18n/nl.json +++ b/extensions/Nuke/i18n/nl.json @@ -18,7 +18,7 @@ "nuke-multiplepeople": "Massaal verwijderen van recent toegevoegde pagina's", "nuke-tools": "Dit hulpmiddel maakt het mogelijk pagina's die recentelijk zijn aangemaakt door een gebruiker of IP-adres massaal te verwijderen.\nVoer de gebruikersnaam of het IP-adres in voor een lijst van te verwijderen pagina's of laat leeg voor alle gebruikers.", "nuke-submit-user": "OK", - "nuke-toggleinvert": "Keer om", + "nuke-toggleinvert": "Omkeren", "nuke-submit-delete": "Geselecteerde pagina's verwijderen", "right-nuke": "Massaal pagina's verwijderen", "nuke-select": "Selectie: $1", diff --git a/extensions/Nuke/i18n/pt-br.json b/extensions/Nuke/i18n/pt-br.json index 46e82eca..85d23253 100644 --- a/extensions/Nuke/i18n/pt-br.json +++ b/extensions/Nuke/i18n/pt-br.json @@ -6,7 +6,8 @@ "Eduardo.mps", "Giro720", "MetalBrasil", - "555" + "555", + "Araceletorres" ] }, "nuke": "Eliminar de forma massiva", @@ -19,6 +20,7 @@ "nuke-multiplepeople": "Eliminação em massa de páginas criadas recentemente", "nuke-tools": "Esta ferramenta permite que páginas criadas recentemente por um usuário ou IP específico sejam eliminadas de forma massiva.\nInsira um nome de usuário ou IP para listar páginas a eliminar; deixe em branco se deseja listar de todos os usuários.", "nuke-submit-user": "Ir", + "nuke-toggleinvert": "Inverter", "nuke-submit-delete": "Eliminar selecionadas", "right-nuke": "Eliminar páginas em massa", "nuke-select": "Selecionar: $1", @@ -31,5 +33,7 @@ "nuke-pattern": "Padrão em nomes de páginas:", "nuke-nopages-global": "Não há novas páginas nas [[Special:RecentChanges|mudanças recentes]].", "nuke-viewchanges": "ver alterações", - "nuke-namespace": "Limitar ao espaço nominal:" + "nuke-namespace": "Limitar ao espaço nominal:", + "nuke-linkoncontribs": "excluir em massa", + "nuke-linkoncontribs-text": "Excluir em massa páginas em que este usuário é o único autor" } diff --git a/extensions/Nuke/i18n/ru.json b/extensions/Nuke/i18n/ru.json index c27a67d9..ac57b38b 100644 --- a/extensions/Nuke/i18n/ru.json +++ b/extensions/Nuke/i18n/ru.json @@ -37,5 +37,5 @@ "nuke-viewchanges": "иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¾Ðº", "nuke-namespace": "Ограничить проÑтранÑтвом имён:", "nuke-linkoncontribs": "множеÑтвенное удаление", - "nuke-linkoncontribs-text": "МаÑÑово удалить Ñтраницы, где Ñтот учаÑтник ÑвлÑетÑÑ ÐµÐ´Ð¸Ð½Ñтвенным автором" + "nuke-linkoncontribs-text": "МаÑÑово удалить Ñтраницы, где Ñтот учаÑтник выÑтупает в качеÑтве единÑтвенного автора" } diff --git a/extensions/Nuke/i18n/sa.json b/extensions/Nuke/i18n/sa.json new file mode 100644 index 00000000..999e0a17 --- /dev/null +++ b/extensions/Nuke/i18n/sa.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "NehalDaveND" + ] + }, + "nuke-submit-user": "गमà¥à¤¯à¤¤à¤¾à¤®à¥", + "nuke-select": "$1 चिनोतà¥", + "nuke-viewchanges": "परिवरà¥à¤¤à¤¨à¤¾à¤¨à¤¿ दृशà¥à¤¯à¤¨à¥à¤¤à¤¾à¤®à¥" +} diff --git a/extensions/Nuke/i18n/scn.json b/extensions/Nuke/i18n/scn.json index 7c5c202d..f3f5e86d 100644 --- a/extensions/Nuke/i18n/scn.json +++ b/extensions/Nuke/i18n/scn.json @@ -1,15 +1,17 @@ { "@metadata": { "authors": [ - "Santu" + "Santu", + "Pippinu", + "Sarvaturi" ] }, "nuke": "Scancella la massa", "nuke-desc": "Pirmetti a l'amministraturi la [[Special:Nuke|scancillazzioni 'n massa]] dê pàggini", - "nuke-nopages": "Nun s'attruvaru pàggini novi criati di [[Special:Contributions/$1|$1]] ntra li mudìfichi fatti di picca tempu.", - "nuke-list": "Li pàggini ccà di sècutu havi picca ca foru criati di [[Special:Contributions/$1|$1]]; nzirisci nu cummentu e cunferma la scancillazzioni.", - "nuke-defaultreason": "Scanciallazzioni di massa dê pàggini criati di $1", - "nuke-tools": "Stu strumentu pirmetti di scancillari 'n massa pàggini criati di picca tempu di N'utenti o IP. Nzirisci lu nomu utenti o lu IP pi la lista dê pàggini di scancillari.", + "nuke-nopages": "Nun s'attruvaru pàggini novi criati di [[Special:Contributions/$1|{{GENDER:$1|$1}}]] ntra li canciamenti fatti di picca tempu.", + "nuke-list": "Li pàggini ccassutta foru criati di picca tempu di [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; scrivi nu cummentu e carca lu buttuni pi cancillàrili.", + "nuke-defaultreason": "Cancillazzioni di massa dê pàggini criati di [[Special:Contributions/$1|{{GENDER:$1|$1}}]]", + "nuke-tools": "Stu strummentu pirmetti di cancillari 'n bloccu li pàggini criati di picca tempu di n'utenti o di nu nnirizzu IP.\nMetti lu nomu utenti o lu nnirizzu IP p'aviri na lista dî pàggini di cancillari, o puru lassa jancu pi ntènniri tutti l'utenti.", "nuke-submit-user": "Và", "nuke-submit-delete": "Scancella la silizzioni", "right-nuke": "Scancella pàggini 'n massa" diff --git a/extensions/Nuke/i18n/sr-ec.json b/extensions/Nuke/i18n/sr-ec.json index 812be549..1924275a 100644 --- a/extensions/Nuke/i18n/sr-ec.json +++ b/extensions/Nuke/i18n/sr-ec.json @@ -10,24 +10,26 @@ "nuke": "МаÑовно бриÑање", "action-nuke": "маÑовно бриÑање Ñтраница", "nuke-desc": "Даје админиÑтратору могућноÑÑ‚ да [[Special:Nuke|маÑовно брише]] Ñтранице.", - "nuke-nopages": "Ðема нових Ñтраница од Ñтране кориÑника [[Special:Contributions/$1|$1]] у Ñкорашњим изменама.", + "nuke-nopages": "Ðема нових Ñтраница од Ñтране {{GENDER:$1|кориÑника|кориÑнице}} [[Special:Contributions/$1|$1]] у Ñкорашњим изменама.", "nuke-list": "Следеће Ñтранице је Ñкоро направио кориÑник [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; оÑтавите коментар и притиÑните дугме за њихово бриÑање.", "nuke-defaultreason": "МаÑовно бриÑање Ñтраница које је направио/ла [[Special:Contributions/$1|{{GENDER:$1|$1}}]]", "nuke-multiplepeople": "МаÑовно бриÑање недавно додатих Ñтраница", "nuke-tools": "Ова алатка омогућава збирно бриÑање Ñтраница које је недавно додао одређени кориÑник (Ñа налогом или без њега).\nУнеÑите кориÑничко име или ИП адреÑу да биÑте добили ÑпиÑак Ñтраница за бриÑање, или оÑтавите празно ако желите да Ñе наведу Ñви кориÑници.", "nuke-submit-user": "Иди", + "nuke-toggleinvert": "обрни", "nuke-submit-delete": "Обриши изабрано", "right-nuke": "маÑовно бриÑање Ñтраница", "nuke-select": "Изабери: $1", "nuke-userorip": "КориÑничко име, ИП адреÑа или празно:", "nuke-maxpages": "Ðајвећи број Ñтраница:", - "nuke-editby": "Ðаправио [[Special:Contributions/$1|{{GENDER:$1|$1}}]]", + "nuke-editby": "{{GENDER:$1|Ðаправио|Ðаправила}} [[Special:Contributions/$1|$1]]", "nuke-deleted": "Страница '''$1''' је обриÑана.", "nuke-not-deleted": "'''Ðе могу''' да обришем Ñтраницу [[:$1]].", "nuke-delete-more": "[[Special:Nuke|Обриши још Ñтраница]]", "nuke-pattern": "Образац за назив Ñтранице:", "nuke-nopages-global": "Ðема нових Ñтраница у [[Special:RecentChanges|Ñкорашњим изменама]].", "nuke-viewchanges": "прикажи измене", + "nuke-namespace": "ИменÑки проÑтор:", "nuke-linkoncontribs": "маÑовно бриÑање", "nuke-linkoncontribs-text": "Скупно бриÑање Ñтраница чије једини аутор овај кориÑник" } diff --git a/extensions/Nuke/i18n/sr-el.json b/extensions/Nuke/i18n/sr-el.json index 3213960e..8cc0c723 100644 --- a/extensions/Nuke/i18n/sr-el.json +++ b/extensions/Nuke/i18n/sr-el.json @@ -9,7 +9,7 @@ "nuke": "Masovno brisanje", "action-nuke": "masovno brisanje stranica", "nuke-desc": "Daje administratoru mogućnost da [[Special:Nuke|masovno briÅ¡e]] stranice.", - "nuke-nopages": "Nema novih stranica od strane korisnika [[Special:Contributions/$1|$1]] u skoraÅ¡njim izmenama.", + "nuke-nopages": "Nema novih stranica od strane {{GENDER:$1|korisnika|korisnice}} [[Special:Contributions/$1|$1]] u skoraÅ¡njim izmenama.", "nuke-list": "Sledeće stranice je skoro napravio korisnik [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; ostavite komentar i pritisnite dugme za njihovo brisanje.", "nuke-defaultreason": "Masovno brisanje stranica koje je napravio/la [[Special:Contributions/$1|{{GENDER:$1|$1}}]]", "nuke-multiplepeople": "Masovno brisanje nedavno dodatih stranica", @@ -20,7 +20,7 @@ "nuke-select": "Izaberi: $1", "nuke-userorip": "KorisniÄko ime, IP adresa ili prazno:", "nuke-maxpages": "Najveći broj stranica:", - "nuke-editby": "Napravio [[Special:Contributions/$1|{{GENDER:$1|$1}}]]", + "nuke-editby": "{{GENDER:$1|Napravio|Napravila}} [[Special:Contributions/$1|$1]]", "nuke-deleted": "Stranica '''$1''' je obrisana.", "nuke-not-deleted": "'''Ne mogu''' da obriÅ¡em stranicu [[:$1]].", "nuke-delete-more": "[[Special:Nuke|ObriÅ¡i joÅ¡ stranica]]", diff --git a/extensions/Nuke/i18n/uk.json b/extensions/Nuke/i18n/uk.json index b630f8ae..b6b9cb77 100644 --- a/extensions/Nuke/i18n/uk.json +++ b/extensions/Nuke/i18n/uk.json @@ -8,7 +8,9 @@ "Base", "Dim Grits", "Microcell", - "ТеÑÑ‚" + "ТеÑÑ‚", + "Piramidion", + "Ðта" ] }, "nuke": "МаÑове вилученнÑ", @@ -21,8 +23,9 @@ "nuke-multiplepeople": "МаÑове Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ доданих Ñторінок", "nuke-tools": "Цей інÑтрумент дозволÑÑ” маÑово вилучати Ñторінки, Ñтворені певним кориÑтувачем або з певної IP-адреÑи.\nУведіть ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача або IP-адреÑу Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб отримати ÑпиÑок Ñторінок Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ, або залиште поле порожнім Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ уÑÑ–Ñ… кориÑтувачів.", "nuke-submit-user": "Виконати", + "nuke-toggleinvert": "Інвертувати", "nuke-submit-delete": "Вилучити обрані", - "right-nuke": "МаÑове Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñторінок", + "right-nuke": "маÑове Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñторінок", "nuke-select": "Вибір: $1", "nuke-userorip": "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, IP-адреÑа (необов'Ñзковий параметр):", "nuke-maxpages": "МакÑимальна кількіÑÑ‚ÑŒ Ñторінок:", diff --git a/extensions/Nuke/i18n/uz.json b/extensions/Nuke/i18n/uz.json new file mode 100644 index 00000000..29fb2be5 --- /dev/null +++ b/extensions/Nuke/i18n/uz.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Sociologist" + ] + }, + "nuke": "Birdaniga oÊ»chirish", + "nuke-deleted": "'''$1''' sahifasi oÊ»chirildi.", + "nuke-linkoncontribs": "birdaniga oÊ»chirish" +} diff --git a/extensions/Nuke/i18n/vi.json b/extensions/Nuke/i18n/vi.json index 24653484..d5de3e40 100644 --- a/extensions/Nuke/i18n/vi.json +++ b/extensions/Nuke/i18n/vi.json @@ -15,6 +15,7 @@ "nuke-multiplepeople": "Xóa hàng loạt các trang được tạo gần đây", "nuke-tools": "Công cụ này cho phép xóa hàng loạt các trang do má»™t thành viên hoặc ngÆ°á»i dùng địa chỉ IP nào đó tạo ra gần đây.\nHãy nhập tên thành viên hoặc địa chỉ IP để lấy danh sách các trang sẽ xóa, hoặc để trống để xem các trang của má»i ngÆ°á»i dùng.", "nuke-submit-user": "Tìm kiếm", + "nuke-toggleinvert": "Äảo ngược", "nuke-submit-delete": "Xóa các trang đã chá»n", "right-nuke": "Xóa trang hàng loạt", "nuke-select": "Chá»n: $1", diff --git a/extensions/Nuke/i18n/zh-hant.json b/extensions/Nuke/i18n/zh-hant.json index a1c0b0a9..314db142 100644 --- a/extensions/Nuke/i18n/zh-hant.json +++ b/extensions/Nuke/i18n/zh-hant.json @@ -8,7 +8,8 @@ "Liuxinyu970226", "Mark85296341", "Shinjiman", - "LNDDYL" + "LNDDYL", + "EagerLin" ] }, "nuke": "大é‡åˆªé™¤", @@ -31,7 +32,7 @@ "nuke-not-deleted": "'''無法'''刪除é é¢ [[:$1]]。", "nuke-delete-more": "[[Special:Nuke|刪除更多é é¢]]", "nuke-pattern": "é é¢å稱模å¼ï¼š", - "nuke-nopages-global": "[[Special:RecentChanges|近期變更]] 中沒有新的é é¢ã€‚", + "nuke-nopages-global": "[[Special:RecentChanges|最近更改]] 中沒有新的é é¢ã€‚", "nuke-viewchanges": "檢視變更", "nuke-namespace": "é™åˆ¶å‘½å空間為:", "nuke-linkoncontribs": "大é‡åˆªé™¤", diff --git a/extensions/Nuke/phpcs.xml b/extensions/Nuke/phpcs.xml new file mode 100644 index 00000000..d81a2927 --- /dev/null +++ b/extensions/Nuke/phpcs.xml @@ -0,0 +1,8 @@ + + + + . + + + vendor + diff --git a/extensions/ParserFunctions/Gruntfile.js b/extensions/ParserFunctions/Gruntfile.js new file mode 100644 index 00000000..ec072a46 --- /dev/null +++ b/extensions/ParserFunctions/Gruntfile.js @@ -0,0 +1,25 @@ +/*! + * Grunt file + * + * @package ParserFunctions + */ + +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/ParserFunctions/ParserFunctions.i18n.magic.php b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php index 363f8781..96ccca46 100644 --- a/extensions/ParserFunctions/ParserFunctions.i18n.magic.php +++ b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php @@ -56,7 +56,7 @@ $magicWords['ar'] = array( 'urldecode' => array( 0, 'ÙÙƒ_مسار' ), ); -/** Egyptian Spoken Arabic (مصرى) */ +/** Egyptian Arabic (مصرى) */ $magicWords['arz'] = array( 'expr' => array( 0, 'تعبير' ), 'if' => array( 0, 'لو' ), @@ -80,7 +80,7 @@ $magicWords['arz'] = array( 'urldecode' => array( 0, 'ÙÙƒ_مسار' ), ); -/** South Azerbaijani (تورکجه) */ +/** South Azerbaijani (تۆرکجه) */ $magicWords['azb'] = array( 'ifeq' => array( 0, 'ایربیر' ), 'ifexpr' => array( 0, 'ایرحساب' ), @@ -112,6 +112,30 @@ $magicWords['cs'] = array( 'replace' => array( 0, 'nahradit' ), ); +/** Chuvash (Чӑвашла) */ +$magicWords['cv'] = array( + 'expr' => array( 0, 'expr' ), + 'if' => array( 0, 'if' ), + 'ifeq' => array( 0, 'ifeq' ), + 'ifexpr' => array( 0, 'ifexpr' ), + 'iferror' => array( 0, 'iferror' ), + 'switch' => array( 0, 'switch' ), + 'default' => array( 0, '#default' ), + 'ifexist' => array( 0, 'ifexist' ), + 'time' => array( 0, 'time' ), + 'timel' => array( 0, 'timel' ), + 'rel2abs' => array( 0, 'rel2abs' ), + 'titleparts' => array( 0, 'titleparts' ), + 'len' => array( 0, 'len' ), + 'pos' => array( 0, 'pos' ), + 'rpos' => array( 0, 'rpos' ), + 'sub' => array( 0, 'sub' ), + 'count' => array( 0, 'count' ), + 'replace' => array( 0, 'replace' ), + 'explode' => array( 0, 'explode' ), + 'urldecode' => array( 0, 'urldecode' ), +); + /** German (Deutsch) */ $magicWords['de'] = array( 'switch' => array( 0, 'wechsle' ), @@ -338,6 +362,11 @@ $magicWords['ja'] = array( 'urldecode' => array( 0, 'URLデコード', 'URLデコード' ), ); +/** Georgian (ქáƒáƒ áƒ—ული) */ +$magicWords['ka'] = array( + 'time' => array( 0, 'დრáƒ' ), +); + /** Korean (한국어) */ $magicWords['ko'] = array( 'expr' => array( 0, '수ì‹' ), diff --git a/extensions/ParserFunctions/composer.json b/extensions/ParserFunctions/composer.json new file mode 100644 index 00000000..fd380fb7 --- /dev/null +++ b/extensions/ParserFunctions/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/ParserFunctions/extension.json b/extensions/ParserFunctions/extension.json index 0198398a..44b0be82 100644 --- a/extensions/ParserFunctions/extension.json +++ b/extensions/ParserFunctions/extension.json @@ -9,6 +9,7 @@ ], "url": "https://www.mediawiki.org/wiki/Extension:ParserFunctions", "descriptionmsg": "pfunc_desc", + "license-name": "GPL-2.0", "type": "parserhook", "config": { "PFEnableStringFunctions": false, @@ -44,5 +45,6 @@ "ParserTestFiles": [ "funcsParserTests.txt", "stringFunctionTests.txt" - ] + ], + "manifest_version": 1 } diff --git a/extensions/ParserFunctions/i18n/ady-cyrl.json b/extensions/ParserFunctions/i18n/ady-cyrl.json new file mode 100644 index 00000000..86861d5f --- /dev/null +++ b/extensions/ParserFunctions/i18n/ady-cyrl.json @@ -0,0 +1,13 @@ +{ + "@metadata": { + "authors": [ + "Highlander45temp", + "TheRossatron", + "Inyzh" + ] + }, + "pfunc_expr_unrecognised_word": "IуакIÑÑ€ къуанчÑ: ГущаIÑу \"$1\"-Ñ€ зÑÑ…ÑшIыкIыгъÑп.", + "pfunc_expr_unexpected_operator": "IуакIÑÑ€ къуанчÑ: ОшIÑдÑмышIÑ $1 оператор.", + "pfunc_expr_missing_operand": "КъÑIокIÑ Ñ‚ÑÑ€ÑзÑп: $1-м пае операнд икъурÑп.", + "pfunc_expr_unrecognised_punctuation": "IуакIÑÑ€ къуанчÑ: ПыутхÑÐ±Ð·Ñ ÑимволÑу \"$1\" зÑÑ…ÑшIыкIыгъÑп." +} diff --git a/extensions/ParserFunctions/i18n/af.json b/extensions/ParserFunctions/i18n/af.json index 059dcd67..119bc9ff 100644 --- a/extensions/ParserFunctions/i18n/af.json +++ b/extensions/ParserFunctions/i18n/af.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Naudefj" + "Naudefj", + "Arnobarnard" ] }, "pfunc_desc": "Verryk die ontleder met logiese funksies", @@ -12,7 +13,7 @@ "pfunc_expr_unexpected_number": "Fout in uitdrukking: onverwagte getal", "pfunc_expr_preg_match_failure": "Fout in uitdrukking: onverwagte faling van preg_match", "pfunc_expr_unrecognised_word": "Fout in uitdrukking: woord \"$1\" nie herken", - "pfunc_expr_unexpected_operator": "Fout in uitdrukking: onverwagte operateur $1", + "pfunc_expr_unexpected_operator": "Fout in uitdrukking: onverwagte operator $1.", "pfunc_expr_missing_operand": "Fout in uitdrukking: geen operand vir $1", "pfunc_expr_unexpected_closing_bracket": "Fout in uitdrukking: hakkie onverwags gesluit", "pfunc_expr_unrecognised_punctuation": "Fout in uitdrukking: onbekende leesteken \"$1\"", diff --git a/extensions/ParserFunctions/i18n/ast.json b/extensions/ParserFunctions/i18n/ast.json index e52b0a30..9e2d5bb9 100644 --- a/extensions/ParserFunctions/i18n/ast.json +++ b/extensions/ParserFunctions/i18n/ast.json @@ -16,7 +16,7 @@ "pfunc_expr_preg_match_failure": "Error d'espresión: Fallu inesperáu de preg_match", "pfunc_expr_unrecognised_word": "Error d'espresión: Pallabra \"$1\" non reconocida.", "pfunc_expr_unexpected_operator": "Error d'espresión: Operador $1 inesperáu", - "pfunc_expr_missing_operand": "Error d'espresión: Falta operador en $1", + "pfunc_expr_missing_operand": "Error na espresión: Falta l'operando pa $1.", "pfunc_expr_unexpected_closing_bracket": "Error d'espresión: Paréntesis final inesperáu", "pfunc_expr_unrecognised_punctuation": "Error d'espresión: Caráuter de puntuación \"$1\" non reconocíu.", "pfunc_expr_unclosed_bracket": "Error d'espresión: Paréntesis non zarráu", diff --git a/extensions/ParserFunctions/i18n/av.json b/extensions/ParserFunctions/i18n/av.json new file mode 100644 index 00000000..4d6e161b --- /dev/null +++ b/extensions/ParserFunctions/i18n/av.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Gazimagomedov" + ] + }, + "pfunc_expr_unexpected_operator": "Хъвай-хъвагӀиÑлъул гъалатӀ: данде кколареб оператор $1" +} diff --git a/extensions/ParserFunctions/i18n/awa.json b/extensions/ParserFunctions/i18n/awa.json new file mode 100644 index 00000000..272c3ada --- /dev/null +++ b/extensions/ParserFunctions/i18n/awa.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "1AnuraagPandey" + ] + }, + "pfunc_expr_unrecognised_word": "à¤à¤•à¥à¤¸à¥à¤ªà¥à¤°à¥‡à¤¶à¤¨ तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ शबà¥à¤¦ \"$1\"।", + "pfunc_expr_unexpected_operator": "à¤à¤•à¥à¤¸à¥à¤ªà¥à¤°à¥‡à¤¶à¤¨ तà¥à¤°à¥à¤Ÿà¤¿: अनपेकà¥à¤·à¤¿à¤¤ $1 ऑपरेटर।", + "pfunc_expr_missing_operand": "à¤à¤•à¥à¤¸à¥à¤ªà¥à¤°à¥‡à¤¶à¤¨ तà¥à¤°à¥à¤Ÿà¤¿: $1 का घटक नहीं मिला", + "pfunc_expr_unrecognised_punctuation": "à¤à¤•à¥à¤¸à¥à¤ªà¥à¤°à¥‡à¤¶à¤¨ तà¥à¤°à¥à¤Ÿà¤¿: अनपेकà¥à¤·à¤¿à¤¤ उदà¥à¤—ार चिनà¥à¤¹ \"$1\"।" +} diff --git a/extensions/ParserFunctions/i18n/be.json b/extensions/ParserFunctions/i18n/be.json new file mode 100644 index 00000000..7ea0c8fa --- /dev/null +++ b/extensions/ParserFunctions/i18n/be.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Чаховіч УладзіÑлаў" + ] + }, + "pfunc_expr_unrecognised_word": "Памылка выраза: неапазнанае Ñлова «$1»", + "pfunc_expr_unexpected_operator": "Памылка выраза: нечаканы аператар $1", + "pfunc_expr_missing_operand": "Памылка выраза: нÑма аперанда $1", + "pfunc_expr_unrecognised_punctuation": "Памылка выраза: неапазнаны Ñімвал пунктуацыі «$1»" +} diff --git a/extensions/ParserFunctions/i18n/bho.json b/extensions/ParserFunctions/i18n/bho.json new file mode 100644 index 00000000..3e95f7ed --- /dev/null +++ b/extensions/ParserFunctions/i18n/bho.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "SatyamMishra" + ] + }, + "pfunc_expr_unrecognised_word": "à¤à¤•à¥à¤¸à¤ªà¥à¤°à¥‡à¤¶à¤¨ खराबी: नामालूम शबà¥à¤¦ \"$1\"।", + "pfunc_expr_unexpected_operator": "à¤à¤•à¥à¤¸à¤ªà¥à¤°à¥‡à¤¶à¤¨ खराबी: Unexpected $1 operator.", + "pfunc_expr_missing_operand": "à¤à¤•à¥à¤¸à¤ªà¥à¤°à¥‡à¤¶à¤¨ खराबी: $1 खातिर गायब कà¥à¤°à¤¿à¤¯à¤¾-चीनà¥à¤¹à¤¾ (Operand)!", + "pfunc_expr_unrecognised_punctuation": "à¤à¤•à¥à¤¸à¤ªà¥à¤°à¥‡à¤¶à¤¨ खराबी: नामालूम चीनà¥à¤¹à¤¾ \"$1\"।" +} diff --git a/extensions/ParserFunctions/i18n/ckb.json b/extensions/ParserFunctions/i18n/ckb.json new file mode 100644 index 00000000..519399c3 --- /dev/null +++ b/extensions/ParserFunctions/i18n/ckb.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Asoxor" + ] + }, + "pfunc_expr_unrecognised_word": "Ú¾Û•ÚµÛ•ÛŒ Expression: وشەی نەناسراو \"$1\"." +} diff --git a/extensions/ParserFunctions/i18n/da.json b/extensions/ParserFunctions/i18n/da.json index c8da6e5c..fb55e1b8 100644 --- a/extensions/ParserFunctions/i18n/da.json +++ b/extensions/ParserFunctions/i18n/da.json @@ -4,7 +4,8 @@ "Byrial", "HenrikKbh", "Morten LJ", - "Peter Alberti" + "Peter Alberti", + "Christian List" ] }, "pfunc_desc": "Udvider parser med logiske funktioner", @@ -16,7 +17,7 @@ "pfunc_expr_stack_exhausted": "Udtryksfejl: Stak tømt", "pfunc_expr_unexpected_number": "Fejl: Uventet tal", "pfunc_expr_preg_match_failure": "Udtryksfejl: Uventet fejl i preg_match", - "pfunc_expr_unrecognised_word": "Udtryksfejl: Uventet ord \"$1\"", + "pfunc_expr_unrecognised_word": "Udtryksfejl: Ukendt ord \"$1\".", "pfunc_expr_unexpected_operator": "Udtryksfejl: Uventet \"$1\"-operator", "pfunc_expr_missing_operand": "Udtryksfejl: Manglende operand til $1", "pfunc_expr_unexpected_closing_bracket": "Udtryksfejl: Uventet lukkende parentes", diff --git a/extensions/ParserFunctions/i18n/dty.json b/extensions/ParserFunctions/i18n/dty.json new file mode 100644 index 00000000..60e17777 --- /dev/null +++ b/extensions/ParserFunctions/i18n/dty.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "रमेश सिंह बोहरा", + "जनक राज भटà¥à¤Ÿ" + ] + }, + "pfunc_expr_unrecognised_word": "अभिवà¥à¤¯à¤•à¥à¤¤à¤¿ तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ शबà¥à¤¦ \"$1\"।", + "pfunc_expr_unexpected_operator": "अभिवà¥à¤¯à¤•à¥à¤¤à¤¿ तà¥à¤°à¥à¤Ÿà¤¿ र आकसà¥à¤®à¤¿à¤• संचालन $1", + "pfunc_expr_missing_operand": "अभिवà¥à¤¯à¤•à¥à¤¤à¤¿ तà¥à¤°à¥à¤Ÿà¤¿:संचालन भà¥à¤²à¤•à¤¾ लागि $1", + "pfunc_expr_unrecognised_punctuation": "अभिवà¥à¤¯à¤•à¥à¤¤à¤¿ तà¥à¤°à¥à¤Ÿà¤¿: नपछडà¥à¤¯à¤¾à¤•à¥‹ विराम चिनà¥à¤¹ चरितà¥à¤° \"$1\"।" +} diff --git a/extensions/ParserFunctions/i18n/ee.json b/extensions/ParserFunctions/i18n/ee.json new file mode 100644 index 00000000..3765f37e --- /dev/null +++ b/extensions/ParserFunctions/i18n/ee.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Aguve" + ] + }, + "pfunc_expr_unrecognised_word": "NuŋɔŋlÉ” Æ’e kuxi: Medze si nya \"$1\" o." +} diff --git a/extensions/ParserFunctions/i18n/el.json b/extensions/ParserFunctions/i18n/el.json index 8f42e2bc..c98eae4c 100644 --- a/extensions/ParserFunctions/i18n/el.json +++ b/extensions/ParserFunctions/i18n/el.json @@ -28,5 +28,5 @@ "pfunc_expr_invalid_argument_ln": "ΆκυÏη παÏάμετÏος για το ln: <= 0", "pfunc_expr_unknown_error": "Σφάλμα έκφÏασης: Άγνωστο σφάλμα ($1)", "pfunc_expr_not_a_number": "Στο $1: το αποτέλεσμα δεν είναι αÏιθμός", - "pfunc_string_too_long": "Σφάλμα: ο οÏμαθός υπεÏβαίνει $1 το ÏŒÏιο χαÏακτήÏων" + "pfunc_string_too_long": "Σφάλμα: Η συμβολοσειÏά υπεÏβαίνει το ÏŒÏιο {{PLURAL:$1|του 1 χαÏακτήÏα|των $1 χαÏακτήÏων}}." } diff --git a/extensions/ParserFunctions/i18n/es.json b/extensions/ParserFunctions/i18n/es.json index b1b6bca4..68650967 100644 --- a/extensions/ParserFunctions/i18n/es.json +++ b/extensions/ParserFunctions/i18n/es.json @@ -7,27 +7,29 @@ "Muro de Aguas", "Remember the dot", "Sanbec", - "Macofe" + "Macofe", + "Ryo567" ] }, - "pfunc_desc": "Mejora el analizador lógico con funciones.", - "pfunc_time_error": "Error con la expresión: Tiempo no válido", - "pfunc_time_too_long": "Error con la expresión: se están utilizando demasiados \"#time\"", + "pfunc_desc": "Mejora el analizador con funciones lógicas.", + "pfunc_time_error": "Error: fecha y hora no válidos.", + "pfunc_time_too_long": "Error: demasiados \"#time\".", "pfunc_time_too_big": "Error: #time solo admite años hasta 9999.", - "pfunc_rel2abs_invalid_depth": "Error: Profundidad no válida en la ruta: «$1» (trataste de acceder a un nodo por encima de la raíz)", - "pfunc_expr_stack_exhausted": "Error de expresión: Pila agotada", - "pfunc_expr_unexpected_number": "Error con la expresión: Número no esperado", - "pfunc_expr_preg_match_failure": "Error de expresión: Fracaso preg_match no esperado", + "pfunc_time_too_small": "Error: #time solo admite años desde 0.", + "pfunc_rel2abs_invalid_depth": "Error: profundidad no válida en la ruta «$1» (trataste de acceder a un nodo por encima de la raíz).", + "pfunc_expr_stack_exhausted": "Error en la expresión: pila agotada.", + "pfunc_expr_unexpected_number": "Error en la expresión: número no esperado.", + "pfunc_expr_preg_match_failure": "Error en la expresión: fallo no esperado de \"preg_match\".", "pfunc_expr_unrecognised_word": "Error en la expresión: no se reconoce la palabra «$1».", "pfunc_expr_unexpected_operator": "Error en la expresión: operador $1 no esperado.", "pfunc_expr_missing_operand": "Error en la expresión: falta un operando para $1.", - "pfunc_expr_unexpected_closing_bracket": "Error con la expresión: Paréntesis de cierre no esperado", + "pfunc_expr_unexpected_closing_bracket": "Error en la expresión: paréntesis de cierre no esperado.", "pfunc_expr_unrecognised_punctuation": "Error en la expresión: no se reconoce el carácter de puntuación «$1».", - "pfunc_expr_unclosed_bracket": "Error con la expresión: Paréntesis sin cerrar", - "pfunc_expr_division_by_zero": "División entre cero", + "pfunc_expr_unclosed_bracket": "Error en la expresión: paréntesis sin cerrar.", + "pfunc_expr_division_by_zero": "División por cero.", "pfunc_expr_invalid_argument": "Argumento no válido para $1: < -1 o > 1.", - "pfunc_expr_invalid_argument_ln": "Argumento incorrecto para ln: <= 0", - "pfunc_expr_unknown_error": "Error con la expresión: Error desconocido ($1)", - "pfunc_expr_not_a_number": "En $1: el resultado no es un número", - "pfunc_string_too_long": "Error: la cadena excede el límite de $1 caracteres" + "pfunc_expr_invalid_argument_ln": "Argumento incorrecto para ln: <= 0.", + "pfunc_expr_unknown_error": "Error en la expresión: error desconocido ($1).", + "pfunc_expr_not_a_number": "En $1: el resultado no es un número.", + "pfunc_string_too_long": "Error: la cadena excede el límite de $1 caracteres." } diff --git a/extensions/ParserFunctions/i18n/fo.json b/extensions/ParserFunctions/i18n/fo.json new file mode 100644 index 00000000..7a15c860 --- /dev/null +++ b/extensions/ParserFunctions/i18n/fo.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "EileenSanda" + ] + }, + "pfunc_expr_unrecognised_word": "Feilur í frágreiðing: Ókent orð \"$1\".", + "pfunc_expr_unexpected_operator": "Feilur í málbering: Óvæntaður $1 operatorur.", + "pfunc_expr_missing_operand": "Feilur í málburði: Manglandi operandur fyri $1.", + "pfunc_expr_unrecognised_punctuation": "Feilur í frágreiðing: Ókend teknseting \"$1\"." +} diff --git a/extensions/ParserFunctions/i18n/gd.json b/extensions/ParserFunctions/i18n/gd.json new file mode 100644 index 00000000..946563b2 --- /dev/null +++ b/extensions/ParserFunctions/i18n/gd.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "GunChleoc" + ] + }, + "pfunc_expr_unrecognised_word": "Marachd eas-preisein: Chan aithne dhuinn am facal \"$1\".", + "pfunc_expr_missing_operand": "Mearachd eas-preisein: Tha oparand a dhìth airson $1.", + "pfunc_expr_unrecognised_punctuation": "Mearachd eas-preisein: Chan aithne dhuinn an caractar puingeachaidh \"$1\"." +} diff --git a/extensions/ParserFunctions/i18n/gom-latn.json b/extensions/ParserFunctions/i18n/gom-latn.json new file mode 100644 index 00000000..0810281a --- /dev/null +++ b/extensions/ParserFunctions/i18n/gom-latn.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "The Discoverer" + ] + }, + "pfunc_expr_unrecognised_word": "Abhivyaktint chuk: Onolkhi utor: $1", + "pfunc_expr_unexpected_operator": "Abhivyaktint chuk: Onolkhi karyavahak: $1", + "pfunc_expr_missing_operand": "Abhivyaktint chuk: $1 cho ghotok mellunk na.", + "pfunc_expr_unrecognised_punctuation": "Abhivyaktint chuk: Onolkhi udgar chinh \"$1\"." +} diff --git a/extensions/ParserFunctions/i18n/gu.json b/extensions/ParserFunctions/i18n/gu.json new file mode 100644 index 00000000..54ea20af --- /dev/null +++ b/extensions/ParserFunctions/i18n/gu.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Arbhatt", + "KartikMistry" + ] + }, + "pfunc_expr_unrecognised_word": "સમીકરણ કà«àª·àª¤àª¿: અજà«àªžàª¾àª¤ શબà«àª¦ \"$1\".", + "pfunc_expr_unexpected_operator": "સમીકરણ કà«àª·àª¤àª¿ : અણધારી સમીકરણ નિશાની $1", + "pfunc_expr_missing_operand": "સમિકરણ કà«àª·àª¤àª¿: $1 ની માટે સમીકરણ-નિશાની ખà«àªŸà«‡ છે", + "pfunc_expr_unrecognised_punctuation": "સમીકરણ કà«àª·àª¤àª¿: અજà«àªžàª¾àª¤ વિરામચિહà«àª¨ \"$1\" નો ઉપયોગ." +} diff --git a/extensions/ParserFunctions/i18n/he.json b/extensions/ParserFunctions/i18n/he.json index 98aca849..98c1e26f 100644 --- a/extensions/ParserFunctions/i18n/he.json +++ b/extensions/ParserFunctions/i18n/he.json @@ -6,9 +6,9 @@ }, "pfunc_desc": "הוספת פונקציות לוגיות למפענח", "pfunc_time_error": "שגי××”: זמן שגוי", - "pfunc_time_too_long": "שגי××”: שימוש ב\"#זמן\" ×¤×¢×ž×™× ×¨×‘×•×ª מדי", + "pfunc_time_too_long": "שגי××”: יותר מדי קרי×ות ל#זמן.", "pfunc_time_too_big": "שגי××”: #זמן תומכת רק ×‘×©× ×™× ×¢×“ 9999", - "pfunc_time_too_small": "שגי××”: הפונקציה #time תומכת ר ×‘×©× ×™× ×žÖ¾0", + "pfunc_time_too_small": "שגי××”: הפונקציה #time תומכת רק ×‘×©× ×™× ×žÖ¾0.", "pfunc_rel2abs_invalid_depth": "שגי××”: עומק שגוי בנתיב: \"$1\" (ניסיון כניסה לצומת מעל צומת השורש)", "pfunc_expr_stack_exhausted": "שגי××” בביטוי: המחסנית מל××”", "pfunc_expr_unexpected_number": "שגי××” בביטוי: מספר בלתי צפוי", diff --git a/extensions/ParserFunctions/i18n/ht.json b/extensions/ParserFunctions/i18n/ht.json new file mode 100644 index 00000000..c536c8e9 --- /dev/null +++ b/extensions/ParserFunctions/i18n/ht.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Tisave" + ] + }, + "pfunc_expr_unrecognised_punctuation": "Pwoblèm ekspresyon: ponktiyasyon \"$1\" a pa valid." +} diff --git a/extensions/ParserFunctions/i18n/hy.json b/extensions/ParserFunctions/i18n/hy.json new file mode 100644 index 00000000..8b95ed60 --- /dev/null +++ b/extensions/ParserFunctions/i18n/hy.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Ô´Õ¡Õ¾Õ«Õ© ÕÕ¡Ö€Õ¸ÕµÕ¡Õ¶" + ] + }, + "pfunc_expr_unrecognised_word": "Ô±Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ սխալ․ Õ¹Õ³Õ¡Õ¶Õ¡Õ¹Õ¾Õ¡Õ® Õ¢Õ¡Õ¼Õ Â«$1»։", + "pfunc_expr_unexpected_operator": "Ô±Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ սխալ․ $1 Õ¡Õ¶Õ½ÕºÕ¡Õ½Õ¥Õ¬Õ« Ö…ÕºÕ¥Ö€Õ¡Õ¿Õ¸Ö€Ö‰", + "pfunc_expr_missing_operand": "Ô±Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ սխալ․ $1-Õ¨ Õ¹Õ¸Ö‚Õ¶Õ« Ö…ÕºÕ¥Ö€Õ¡Õ¶Õ¤Ö‰", + "pfunc_expr_unrecognised_punctuation": "Ô±Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ սխալ․ Õ¹Õ³Õ¡Õ¶Õ¡Õ¹Õ¾Õ¡Õ® Õ¯Õ¥Õ¿Õ¡Õ¤Ö€Õ¡Õ¯Õ¡Õ¶ Õ¶Õ·Õ¡Õ¶Õ Â«$1»։" +} diff --git a/extensions/ParserFunctions/i18n/khw.json b/extensions/ParserFunctions/i18n/khw.json new file mode 100644 index 00000000..60c01da6 --- /dev/null +++ b/extensions/ParserFunctions/i18n/khw.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Rachitrali" + ] + }, + "pfunc_expr_unrecognised_word": "ظاÛریت خطاْْْْ: نامعلوم Ù„Ùظ \"$1\"", + "pfunc_expr_unexpected_operator": "Expression error: Unexpected $1 operator.", + "pfunc_expr_missing_operand": "ایکسپریس ایرر: Missing operand for $1.", + "pfunc_expr_unrecognised_punctuation": "خطائے تعبیری: نامعلوم تلÙظ برائے \"$1\"" +} diff --git a/extensions/ParserFunctions/i18n/kk-cyrl.json b/extensions/ParserFunctions/i18n/kk-cyrl.json index 7793522f..3afdf3a3 100644 --- a/extensions/ParserFunctions/i18n/kk-cyrl.json +++ b/extensions/ParserFunctions/i18n/kk-cyrl.json @@ -1,7 +1,13 @@ { - "@metadata": [], + "@metadata": { + "authors": [ + "Arystanbek" + ] + }, "pfunc_time_error": "Қате: жарамÑыз уақыт", "pfunc_time_too_long": "Қате: #time шақыруы тым көп", + "pfunc_time_too_big": "Қате: #time 9999 дейінгі жылды қолдайды.", + "pfunc_time_too_small": "Қате: #time 0 кейінгі жылды қолдайды.", "pfunc_rel2abs_invalid_depth": "Қате: Мына жолдың жарамÑыз терендігі «$1» (тамыр түйіннің Ò¯Ñтіндегі түйінге қатынау талабы)", "pfunc_expr_stack_exhausted": "Ðйтылым қатеÑÑ–: Стек Ñарқылды", "pfunc_expr_unexpected_number": "Ðйтылым қатеÑÑ–: Күтілмеген Ñан", @@ -13,6 +19,8 @@ "pfunc_expr_unrecognised_punctuation": "Ðйтылым қатеÑÑ–: Танылмаған Ñ‚Ñ‹Ð½Ñ‹Ñ Ð±ÐµÐ»Ð³Ñ–ÑÑ– «$1»", "pfunc_expr_unclosed_bracket": "Ðйтылым қатеÑÑ–: Жабылмаған жақша", "pfunc_expr_division_by_zero": "Ðөлге бөлінуі", + "pfunc_expr_invalid_argument": "$1 үшін жарамÑыз аргумент: < -1 немеÑе > 1.", + "pfunc_expr_invalid_argument_ln": "ln үшін жарамÑыз аргумент: <= 0.", "pfunc_expr_unknown_error": "Ðйтылым қатеÑÑ–: БелгіÑіз қате ($1)", "pfunc_expr_not_a_number": "$1 дегенде: нәтиже Ñан емеÑ" } diff --git a/extensions/ParserFunctions/i18n/krc.json b/extensions/ParserFunctions/i18n/krc.json new file mode 100644 index 00000000..5a1d559f --- /dev/null +++ b/extensions/ParserFunctions/i18n/krc.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Iltever" + ] + }, + "pfunc_expr_unrecognised_word": "Ðнгылатыуну халаты: танылмагъан «$1» Ñёз", + "pfunc_expr_unexpected_operator": "Ðнгылатыуну халаты: Ñакъланмагъан $1 оператор.", + "pfunc_expr_missing_operand": "Ðнгылатыуну халаты: $1 ючюн операнд джетмейди.", + "pfunc_expr_unrecognised_punctuation": "Ðнгылатыуну халаты: пунктуациÑны танылмагъан «$1» Ñимволы" +} diff --git a/extensions/ParserFunctions/i18n/lt.json b/extensions/ParserFunctions/i18n/lt.json index ff569ecd..72e15566 100644 --- a/extensions/ParserFunctions/i18n/lt.json +++ b/extensions/ParserFunctions/i18n/lt.json @@ -1,12 +1,29 @@ { "@metadata": { "authors": [ - "Hugo.arg" + "Hugo.arg", + "Albertas" ] }, + "pfunc_desc": "Papildyti analizatorių loginÄ—mis funkcijomis", "pfunc_time_error": "Klaida: neteisingas laikas", + "pfunc_time_too_long": "Klaida: Per daug #time kreipimųsi.", + "pfunc_time_too_big": "Klaida: #time palaiko metus tik iki 9999.", + "pfunc_time_too_small": "Klaida: #time palaiko metus tik nuo 0.", + "pfunc_rel2abs_invalid_depth": "Klaida: Netinkamas kelio gylis: \"$1\" (bandoma pasiekti mazgÄ…, esantį virÅ¡ Å¡akninio mazgo).", + "pfunc_expr_stack_exhausted": "IÅ¡raiÅ¡kos klaida: IÅ¡naudotas atminties dÄ—klas.", + "pfunc_expr_unexpected_number": "IÅ¡raiÅ¡kos klaida: NetikÄ—tas skaiÄius.", + "pfunc_expr_preg_match_failure": "IÅ¡raiÅ¡kos klaida: NetikÄ—ta preg_match klaida.", "pfunc_expr_unrecognised_word": "IÅ¡raiÅ¡kos klaida: nežinomas žodis „$1“.", "pfunc_expr_unexpected_operator": "IÅ¡raiÅ¡kos klaida: netikÄ—tas operatorius „$1“.", "pfunc_expr_missing_operand": "IÅ¡raiÅ¡kos klaida: trÅ«ksta operando „$1“.", - "pfunc_expr_unrecognised_punctuation": "IÅ¡raiÅ¡kos klaida: neatpažintas punktuacijos ženklas „$1“." + "pfunc_expr_unexpected_closing_bracket": "IÅ¡raiÅ¡kos klaida: NetikÄ—tas uždaromasis skliaustelis.", + "pfunc_expr_unrecognised_punctuation": "IÅ¡raiÅ¡kos klaida: neatpažintas punktuacijos ženklas „$1“.", + "pfunc_expr_unclosed_bracket": "IÅ¡raiÅ¡kos klaida: Neuždarytas skliaustelis.", + "pfunc_expr_division_by_zero": "Dalyba iÅ¡ nulio.", + "pfunc_expr_invalid_argument": "Netinkamas $1 argumentas: < -1 arba > 1.", + "pfunc_expr_invalid_argument_ln": "Netinkamas ln argumentas: <= 0.", + "pfunc_expr_unknown_error": "IÅ¡raiÅ¡kos klaida: Nežinoma klaida ($1).", + "pfunc_expr_not_a_number": "$1: Rezultatas nÄ—ra skaiÄius.", + "pfunc_string_too_long": "Klaida: EilutÄ— virÅ¡ija $1 simbolių limitÄ…." } diff --git a/extensions/ParserFunctions/i18n/luz.json b/extensions/ParserFunctions/i18n/luz.json new file mode 100644 index 00000000..dd70599a --- /dev/null +++ b/extensions/ParserFunctions/i18n/luz.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "علی ساکی لرستانی" + ] + }, + "pfunc_expr_unrecognised_word": "خطای عبارت:کألمە نوٙم دیارنی Ú¾ \"$1\"", + "pfunc_expr_unexpected_operator": "خأطا عیبارأت:ئۉپیراتۉر$1 غیر مۉنتأظیرھ.", + "pfunc_expr_missing_operand": "خأطای عیبارت: عأمألڤأند أز دأس رأتە سی $1.", + "pfunc_expr_unrecognised_punctuation": "خطای عبارت: نیڤیسه نۉقطە گذاری \"$1\" نوٙم دیار نیسس." +} diff --git a/extensions/ParserFunctions/i18n/mg.json b/extensions/ParserFunctions/i18n/mg.json new file mode 100644 index 00000000..ab760ea1 --- /dev/null +++ b/extensions/ParserFunctions/i18n/mg.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Jagwar" + ] + }, + "pfunc_expr_unrecognised_word": "Hadisoam-pilazana: Teny \"$1\" tsy fantatra", + "pfunc_expr_unexpected_operator": "Hadisoam-panehoan-kevitra: mpamaritra \"$1\" tsy fantatra.", + "pfunc_expr_missing_operand": "Hadisoam-pitenenana: ôperandy tsy ampy ho an'i $1.", + "pfunc_expr_unrecognised_punctuation": "Hadisoam-pilazana: Soratra mari-piatoana \"$1\" tsy fantatra" +} diff --git a/extensions/ParserFunctions/i18n/mt.json b/extensions/ParserFunctions/i18n/mt.json new file mode 100644 index 00000000..f2d57172 --- /dev/null +++ b/extensions/ParserFunctions/i18n/mt.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Leli Forte" + ] + }, + "pfunc_expr_unrecognised_word": "Å»ball fl-espressjoni: Il-kelma \"$1\" mhux magħrufa.", + "pfunc_expr_unexpected_operator": "Å»ball fl-espressjoni: Operatur $1 mhux mistenni.", + "pfunc_expr_missing_operand": "Å»ball fl-espressjoni: Operand nieqes għal $1.", + "pfunc_expr_unrecognised_punctuation": "Å»ball fl-espressjoni: Il-karattru tal-punteÄ¡Ä¡jatura \"$1\" mhux magħruf." +} diff --git a/extensions/ParserFunctions/i18n/mzn.json b/extensions/ParserFunctions/i18n/mzn.json new file mode 100644 index 00000000..5eec52ff --- /dev/null +++ b/extensions/ParserFunctions/i18n/mzn.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "محک" + ] + }, + "pfunc_expr_unrecognised_word": "عبارتی خطا: این کلمه ره نشناسمبی «$1»", + "pfunc_expr_unexpected_operator": "عبارتون خطا: $1 Ùعملگر اَمه وسّه آشنا نی‌یه", + "pfunc_expr_missing_operand": "عبارتی خطا: گوم‌بیی عملگر $1 وسّه", + "pfunc_expr_unrecognised_punctuation": "عبارتی خطا: اینتی نقطه‌گذاری ره نشناسمبی «$1»" +} diff --git a/extensions/ParserFunctions/i18n/nan.json b/extensions/ParserFunctions/i18n/nan.json new file mode 100644 index 00000000..3b7ab2b5 --- /dev/null +++ b/extensions/ParserFunctions/i18n/nan.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Ianbu" + ] + }, + "pfunc_expr_unrecognised_word": "表é”錯誤:èªç„¡\"$1\"這个字。", + "pfunc_expr_unrecognised_punctuation": "表é”錯誤:èªç„¡æ¨™é»žç¬¦è™Ÿ \"$1\"。" +} diff --git a/extensions/ParserFunctions/i18n/nap.json b/extensions/ParserFunctions/i18n/nap.json index c0a0e6bc..d658151d 100644 --- a/extensions/ParserFunctions/i18n/nap.json +++ b/extensions/ParserFunctions/i18n/nap.json @@ -4,8 +4,25 @@ "C.R." ] }, + "pfunc_desc": "Migliora 'o parser ch' 'e funziune logiche", + "pfunc_time_error": "Errore: Orario invalido.", + "pfunc_time_too_long": "Errore: Tropp'assaje chiammate a #time .", + "pfunc_time_too_big": "Errore: 'o #time suppuorta anne sulamente nfin'a 9999.", + "pfunc_time_too_small": "Errore: 'o #time suppuorta anne sulamente nfin'a 0.", + "pfunc_rel2abs_invalid_depth": "Errore: Profondità infalida int'a lu percorso: \"$1\" (pruvaje 'e trasì dint'a nu nodo superiore d' 'a rareca).", + "pfunc_expr_stack_exhausted": "Espressione 'n errore: Stack muscio e fernuto.", + "pfunc_expr_unexpected_number": "Espressione 'n errore Nummero inaspettato.", + "pfunc_expr_preg_match_failure": "Espressione in errore: preg_match inaspettato e fallito", "pfunc_expr_unrecognised_word": "Espressione 'n errore: Parola scanusciuta \"$1\"", "pfunc_expr_unexpected_operator": "Espressione 'n errore: Operatore $1 inaspettato", "pfunc_expr_missing_operand": "Espressione 'n errore: Operatore zumpato pe' $1.", - "pfunc_expr_unrecognised_punctuation": "Espressione 'n errore: Carattere 'e punteggiatura \"$1\" scanusciuto" + "pfunc_expr_unexpected_closing_bracket": "Espressione in errore: parentesi nchiusa inaspettata", + "pfunc_expr_unrecognised_punctuation": "Espressione 'n errore: Carattere 'e punteggiatura \"$1\" scanusciuto", + "pfunc_expr_unclosed_bracket": "Espressione in errore: Parentesi nun chiusa.", + "pfunc_expr_division_by_zero": "Divisione pe zero", + "pfunc_expr_invalid_argument": "Argomento invalido pe $1: < -1 o > 1", + "pfunc_expr_invalid_argument_ln": "Argomento invalido pe' ln: <= 0", + "pfunc_expr_unknown_error": "Espressione in errore: Errore scanusciuto ($1)", + "pfunc_expr_not_a_number": "Int'a $1: 'O risultato nun è nu nummero.", + "pfunc_string_too_long": "Errore: 'A stringa appassa 'o lemmeto $1 'e carattere" } diff --git a/extensions/ParserFunctions/i18n/nds-nl.json b/extensions/ParserFunctions/i18n/nds-nl.json new file mode 100644 index 00000000..f5be8f84 --- /dev/null +++ b/extensions/ParserFunctions/i18n/nds-nl.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Servien" + ] + }, + "pfunc_expr_unrecognised_word": "Fout in uutdrokkige: woord \"$1\" niet herkend.", + "pfunc_expr_unexpected_operator": "Fout in uutdrokkige: niet verwachten operator $1.", + "pfunc_expr_missing_operand": "Fout in uutdrokkige: operand veur $1 ontbrik.", + "pfunc_expr_unrecognised_punctuation": "Fout in uutdrokkige: niet herkend leesteken \"$1\"." +} diff --git a/extensions/ParserFunctions/i18n/olo.json b/extensions/ParserFunctions/i18n/olo.json new file mode 100644 index 00000000..525ee866 --- /dev/null +++ b/extensions/ParserFunctions/i18n/olo.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Ilja.mos", + "Mashoi7" + ] + }, + "pfunc_expr_unrecognised_word": "Haireh: tundematoi sana \"$1\"", + "pfunc_expr_unexpected_operator": "Ilmaisuhaireh: Vuottamatoi $1 operuattoru.", + "pfunc_expr_missing_operand": "Kuvavushaireh: Ei ole operandua operatorale $1.", + "pfunc_expr_unrecognised_punctuation": "Haireh: tundematoi välimerki \"$1\"." +} diff --git a/extensions/ParserFunctions/i18n/pa.json b/extensions/ParserFunctions/i18n/pa.json new file mode 100644 index 00000000..7fffd08b --- /dev/null +++ b/extensions/ParserFunctions/i18n/pa.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Satdeep gill" + ] + }, + "pfunc_expr_unrecognised_word": "ਗ਼ਲਤੀ:ਅਣਪਛਾਤਾ ਸ਼ਬਦ \"$1\"।", + "pfunc_expr_unexpected_operator": "ਗ਼ਲਤੀ: ਅਕਲਪਿਤ $1 ਚਾਲਕ।", + "pfunc_expr_missing_operand": "ਗ਼ਲਤੀ: $1 ਲਈ ਕਾਰਜ ਸੰਖਿਆ ਮੌਜੂਦ ਨਹੀਂ।", + "pfunc_expr_unrecognised_punctuation": "ਗ਼ਲਤੀ:ਅਣਪਛਾਤਾ ਚਿੰਨà©à¨¹ \"$1\"।" +} diff --git a/extensions/ParserFunctions/i18n/pnb.json b/extensions/ParserFunctions/i18n/pnb.json index 2fdcc8c8..67a8418e 100644 --- a/extensions/ParserFunctions/i18n/pnb.json +++ b/extensions/ParserFunctions/i18n/pnb.json @@ -5,5 +5,9 @@ ] }, "pfunc_time_error": "غلطی: ÙˆÛŒÙ„Û Ù¹Ú¾ÛŒÚ© نئیں۔", - "pfunc_time_too_long": "غلطی: بعوت ساریاں # کالاں" + "pfunc_time_too_long": "غلطی: بعوت ساریاں # کالاں", + "pfunc_expr_unrecognised_word": "Ù„Ú©Ú¾Ù† غلطی: \"$1\" شبد پچھانیا Ù†Ûیں جاریا", + "pfunc_expr_unexpected_operator": "لکھت غلطی:اچانک $1 اوپریٹر", + "pfunc_expr_missing_operand": "Ù„Ú©Ú¾Ù† غلطی: $1 لئی مسنگ اوپرینڈ.", + "pfunc_expr_unrecognised_punctuation": "Ù„Ú©Ú¾Ù† غلطی: \"$1\" نشان پچھانیا Ù†Ûیں جاریا" } diff --git a/extensions/ParserFunctions/i18n/ro.json b/extensions/ParserFunctions/i18n/ro.json index 81837cef..8ee0271d 100644 --- a/extensions/ParserFunctions/i18n/ro.json +++ b/extensions/ParserFunctions/i18n/ro.json @@ -3,7 +3,8 @@ "authors": [ "KlaudiuMihaila", "Minisarm", - "Stelistcristi" + "Stelistcristi", + "ImGelu" ] }, "pfunc_desc": "ÃŽmbunătățeÈ™te parserul cu funcÈ›ii logice", @@ -14,7 +15,7 @@ "pfunc_expr_stack_exhausted": "Eroare de expresie: stivă epuizată", "pfunc_expr_unexpected_number": "Eroare de expresie: număr neaÈ™teptat", "pfunc_expr_preg_match_failure": "Eroare de expresie: eÈ™uare preg_match neaÈ™teptată", - "pfunc_expr_unrecognised_word": "Eroare de expresie: „$1†este un cuvânt nerecunoscut", + "pfunc_expr_unrecognised_word": "Eroare de expresie: „$1†este un cuvânt nerecunoscut.", "pfunc_expr_unexpected_operator": "Eroare de expresie: operator $1 neaÈ™teptat", "pfunc_expr_missing_operand": "Eroare de expresie: operand lipsă pentru $1", "pfunc_expr_unexpected_closing_bracket": "Eroare de expresie: paranteză închisă neaÈ™teptată", diff --git a/extensions/ParserFunctions/i18n/sco.json b/extensions/ParserFunctions/i18n/sco.json new file mode 100644 index 00000000..f619b55b --- /dev/null +++ b/extensions/ParserFunctions/i18n/sco.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "AmaryllisGardener" + ] + }, + "pfunc_expr_unrecognised_word": "Expression error: Unrecognised wird \"$1\".", + "pfunc_expr_unexpected_operator": "Expression error: Unexpectit $1 operator.", + "pfunc_expr_missing_operand": "Expression error: Missin operand for $1.", + "pfunc_expr_unrecognised_punctuation": "Expression error: Unrecognised punctuation character \"$1\"." +} diff --git a/extensions/ParserFunctions/i18n/si.json b/extensions/ParserFunctions/i18n/si.json index b666cf06..6643e66e 100644 --- a/extensions/ParserFunctions/i18n/si.json +++ b/extensions/ParserFunctions/i18n/si.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Budhajeewa", - "නන්දිමිතුරු" + "නන්දිමිතුරු", + "Singhalawap" ] }, "pfunc_desc": "තà·à¶»à·Šà¶šà·“ක à·à·Šâ€à¶»à·’තයන් උපයà·à¶œà·“ කරගනිමින් ව්â€à¶ºà·à¶šà¶»à¶« විග්â€à¶»à·„කය වර්ධනය කරන්න", @@ -16,7 +17,7 @@ "pfunc_expr_unexpected_operator": "ප්â€à¶»à¶šà·à·à¶± දà·à·‚ය: අනපේක්â€à·‚ිත $1 මෙහෙයුම්කà·à¶»à¶šà¶º", "pfunc_expr_missing_operand": "ප්â€à¶»à¶šà·à·à¶± දà·à·‚ය: $1 සඳහ෠අස්ථà·à¶±à¶œà¶­ ප්â€à¶»à·€à¶»à·Šà¶­à·Šâ€à¶ºà¶º", "pfunc_expr_unexpected_closing_bracket": "ප්â€à¶»à¶šà·à·à¶± දà·à·‚ය: අනපේක්â€à·‚ිත à·€à·à·ƒà·“ම් වරහන", - "pfunc_expr_unrecognised_punctuation": "ප්â€à¶»à¶šà·à·à¶± දà·à·‚ය: හඳුනà·à¶±à·œà¶œà¶­à·Š විරà·à¶¸ අක්ෂරය \"$1\"", + "pfunc_expr_unrecognised_punctuation": "ප්â€à¶»à¶šà·à·à¶± දà·à·‚ය: හඳුනà·à¶±à·œà¶œà¶­à·Š විරà·à¶¸ සංකේතය \"$1\"", "pfunc_expr_unclosed_bracket": "ප්â€à¶»à¶šà·à·à¶± දà·à·‚ය: නොවà·à·ƒà·– වරහන", "pfunc_expr_division_by_zero": "à·à·”න්â€à¶ºà¶ºà·™à¶±à·Š බෙදීම", "pfunc_expr_invalid_argument": "$1: < -1 à·„à· > 1 සඳහ෠අනීතික විස්තà·à¶»à¶šà¶º", diff --git a/extensions/ParserFunctions/i18n/szl.json b/extensions/ParserFunctions/i18n/szl.json index 84ab4e99..038f8afc 100644 --- a/extensions/ParserFunctions/i18n/szl.json +++ b/extensions/ParserFunctions/i18n/szl.json @@ -5,6 +5,7 @@ ] }, "pfunc_expr_unrecognised_word": "BÅ‚Ä…d we wyrażyÅ„u – felerne sÅ‚owo „$1â€", + "pfunc_expr_unexpected_operator": "Feler we wyrażyÅ„u: Felerny uoperator.", "pfunc_expr_missing_operand": "Feler we wyrażyÅ„u – brak argumyntu funkcyji $1", "pfunc_expr_unrecognised_punctuation": "Feler we wyrażyÅ„u – felerny znok „$1â€" } diff --git a/extensions/ParserFunctions/i18n/th.json b/extensions/ParserFunctions/i18n/th.json index 44a7ccbe..54862fb1 100644 --- a/extensions/ParserFunctions/i18n/th.json +++ b/extensions/ParserFunctions/i18n/th.json @@ -11,11 +11,11 @@ "pfunc_expr_stack_exhausted": "สูตรเà¸à¸´à¸”ข้อผิดพลาด: มี stack ไม่พอในà¸à¸²à¸£à¸„ำนวณสูตร", "pfunc_expr_unexpected_number": "สูตรไม่ถูà¸à¸•à¹‰à¸­à¸‡: ค่าตัวเลขอยู่ผิดที่", "pfunc_expr_preg_match_failure": "สูตรเà¸à¸´à¸”ข้อผิดพลาด: เà¸à¸´à¸”ความล้มเหลวในà¸à¸²à¸£à¸ªà¸±à¹ˆà¸‡ preg_match โดยไม่ทราบสาเหตุ", - "pfunc_expr_unrecognised_word": "สูตรไม่ถูà¸à¸•à¹‰à¸­à¸‡: \"$1\" เป็นคำที่ไม่รู้จัà¸", + "pfunc_expr_unrecognised_word": "ข้อผิดพลาดนิพจน์: \"$1\" เป็นคำที่ไม่รู้จัà¸", "pfunc_expr_unexpected_operator": "สูตรไม่ถูà¸à¸•à¹‰à¸­à¸‡: $1 อยู่ผิดที่", - "pfunc_expr_missing_operand": "สูตรไม่ถูà¸à¸•à¹‰à¸­à¸‡: ขาดตัวถูà¸à¸”ำเนินà¸à¸²à¸£à¸ªà¸³à¸«à¸£à¸±à¸š $1", + "pfunc_expr_missing_operand": "ข้อผิดพลาดนิพจน์: ขาดตัวถูà¸à¸”ำเนินà¸à¸²à¸£à¸ªà¸³à¸«à¸£à¸±à¸š $1", "pfunc_expr_unexpected_closing_bracket": "สูตรไม่ถูà¸à¸•à¹‰à¸­à¸‡: ปิดวงเล็บเà¸à¸´à¸™ หรือ ปิดวงเล็บผิดที่", - "pfunc_expr_unrecognised_punctuation": "สูตรไม่ถูà¸à¸•à¹‰à¸­à¸‡: \"$1\" เป็นเครื่องหมายหรือตัวอัà¸à¸©à¸£à¸—ี่ไม่รู้จัà¸", + "pfunc_expr_unrecognised_punctuation": "ข้อผิดพลาดนิพจน์: \"$1\" เป็นอัà¸à¸‚ระที่ไม่รู้จัà¸", "pfunc_expr_unclosed_bracket": "สูตรไม่ถูà¸à¸•à¹‰à¸­à¸‡: ไม่ได้ปิดวงเล็บ", "pfunc_expr_division_by_zero": "ตัวหารเป็นศูนย์", "pfunc_expr_invalid_argument": "ค่าตัวà¹à¸›à¸£à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡: $1 ไม่สามารถรับค่าที่น้อยà¸à¸§à¹ˆà¸² -1 หรือ มาà¸à¸à¸§à¹ˆà¸² 1", diff --git a/extensions/ParserFunctions/i18n/tt-cyrl.json b/extensions/ParserFunctions/i18n/tt-cyrl.json new file mode 100644 index 00000000..34609e8b --- /dev/null +++ b/extensions/ParserFunctions/i18n/tt-cyrl.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Ильнар" + ] + }, + "pfunc_expr_unrecognised_word": "Төзмә хата: билгеÑез Ñүз «$1»", + "pfunc_expr_unexpected_operator": "Төзмә хата: күзәтелмәгән оператор $1", + "pfunc_expr_missing_operand": "Төзмә хата: $1 операнда җитми", + "pfunc_expr_unrecognised_punctuation": "Төзмә хата: билгеÑез Ñимвол «$1»" +} diff --git a/extensions/ParserFunctions/i18n/vro.json b/extensions/ParserFunctions/i18n/vro.json new file mode 100644 index 00000000..a3a0d07b --- /dev/null +++ b/extensions/ParserFunctions/i18n/vro.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Võrok" + ] + }, + "pfunc_expr_unrecognised_word": "Avaldusõ viga: tundmalda sõna \"$1\"", + "pfunc_expr_unexpected_operator": "Avaldusviga: uutmalda $1 märk", + "pfunc_expr_missing_operand": "Avaldusõ viga: Puudus om $1 operand", + "pfunc_expr_unrecognised_punctuation": "Avaldusõ viga: tundmalda kirävaihõmärk \"$1\"" +} diff --git a/extensions/ParserFunctions/i18n/war.json b/extensions/ParserFunctions/i18n/war.json new file mode 100644 index 00000000..e20f11a0 --- /dev/null +++ b/extensions/ParserFunctions/i18n/war.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "JinJian" + ] + }, + "pfunc_expr_missing_operand": "Expression error: Nawawara nga operand para han $1." +} diff --git a/extensions/ParserFunctions/i18n/wo.json b/extensions/ParserFunctions/i18n/wo.json new file mode 100644 index 00000000..850385d3 --- /dev/null +++ b/extensions/ParserFunctions/i18n/wo.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Ibou" + ] + }, + "pfunc_expr_unrecognised_word": "Njuumteg mbindiin: baat \"$1\" kenn xamu ko.", + "pfunc_expr_unrecognised_punctuation": "Njuumteg mbindiin: màndarga \"$1\" ken xamu ko." +} diff --git a/extensions/ParserFunctions/i18n/wuu.json b/extensions/ParserFunctions/i18n/wuu.json new file mode 100644 index 00000000..f15196e0 --- /dev/null +++ b/extensions/ParserFunctions/i18n/wuu.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Poiuyt" + ] + }, + "pfunc_expr_unrecognised_word": "表达å¼å‡ºé”™ï¼šå¼—能识别个è¯â€œ$1â€", + "pfunc_expr_unexpected_operator": "表达å¼å‡ºé”™ï¼šæœ†é¢„æ–™ç€ä¸ª$1æ“作符", + "pfunc_expr_missing_operand": "表达å¼å‡ºé”™ï¼šç¼ºå°‘$1个æ“作数", + "pfunc_expr_unrecognised_punctuation": "表达å¼å‡ºé”™ï¼šå¼—能识别个标点“$1â€" +} diff --git a/extensions/ParserFunctions/i18n/xmf.json b/extensions/ParserFunctions/i18n/xmf.json new file mode 100644 index 00000000..bd5a42eb --- /dev/null +++ b/extensions/ParserFunctions/i18n/xmf.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Silovan" + ] + }, + "pfunc_expr_unrecognised_word": "ექსპრესიáƒáƒ¨ ჩილáƒáƒ—áƒ: უჩინებუ ზიტყვრ„$1“.", + "pfunc_expr_unexpected_operator": "ექსპრესიáƒáƒ¨ ჩილáƒáƒ—áƒ: უგჷნáƒáƒšáƒ˜ $1 áƒáƒžáƒ”რáƒáƒ¢áƒáƒ áƒ˜.", + "pfunc_expr_missing_operand": "ექსპრესიáƒáƒ¨ ჩილáƒáƒ—áƒ: მედინჷ áƒáƒžáƒ”რáƒáƒœáƒ“ი $1-შáƒ.", + "pfunc_expr_unrecognised_punctuation": "ექსპრესიáƒáƒ¨ ჩილáƒáƒ—áƒ: უჩინებუ პუნქტუáƒáƒªáƒ˜áƒáƒ¨ შáƒáƒœáƒ˜ $1" +} diff --git a/extensions/ParserFunctions/i18n/yo.json b/extensions/ParserFunctions/i18n/yo.json index 91aa05e4..8a6c4ab9 100644 --- a/extensions/ParserFunctions/i18n/yo.json +++ b/extensions/ParserFunctions/i18n/yo.json @@ -6,6 +6,9 @@ }, "pfunc_time_error": "Àsìṣe: àsìkò àìtá»Ì", "pfunc_expr_unexpected_number": "Àsìṣe ìgbékalẹ̀á»Ì€rá»Ì€: Ná»Ìmbà àìretí", + "pfunc_expr_unrecognised_word": "Àsìṣe ìgbéá»Ì€rá»Ì€sílẹ̀: Àìdámá»Ì€ á»Ì€rá»Ì€ \"$1\".", + "pfunc_expr_missing_operand": "Àsìṣe ìgbéá»Ì€rá»Ì€sílẹ̀: Kò sí àmì-ìsirò fún $1.", + "pfunc_expr_unrecognised_punctuation": "Àsìṣe ìgbéá»Ì€rá»Ì€sílẹ̀: Àìdámá»Ì€ àmì ìdádúró-á»Ì€rá»Ì€ sókí \"$1\".", "pfunc_expr_division_by_zero": "Pínpín pẹ̀lú òdo", "pfunc_expr_not_a_number": "Nínú $1: èsì kìí á¹£e ná»Ìmbà" } diff --git a/extensions/PdfHandler/Gruntfile.js b/extensions/PdfHandler/Gruntfile.js new file mode 100644 index 00000000..5a87e7b6 --- /dev/null +++ b/extensions/PdfHandler/Gruntfile.js @@ -0,0 +1,19 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/PdfHandler/PdfHandler.image.php b/extensions/PdfHandler/PdfHandler.image.php index 49da7f4e..ea016e34 100644 --- a/extensions/PdfHandler/PdfHandler.image.php +++ b/extensions/PdfHandler/PdfHandler.image.php @@ -19,6 +19,8 @@ * http://www.gnu.org/copyleft/gpl.html */ +use MediaWiki\Logger\LoggerFactory; + /** * inspired by djvuimage from Brion Vibber * modified and written by xarax @@ -295,7 +297,7 @@ class PdfImage { // is present (Almost always is present) // @todo: This only handles generic xmp properties. Would be improved // by handling pdf xmp properties (pdf and pdfx) via XMPInfo hook. - $xmp = new XMPReader(); + $xmp = new XMPReader( LoggerFactory::getInstance( 'XMP' ) ); $xmp->parse( $data['xmp'] ); $xmpRes = $xmp->getResults(); foreach ( $xmpRes as $type => $xmpSection ) { diff --git a/extensions/PdfHandler/PdfHandler_body.php b/extensions/PdfHandler/PdfHandler_body.php index 0b192bbb..7cb9a51d 100644 --- a/extensions/PdfHandler/PdfHandler_body.php +++ b/extensions/PdfHandler/PdfHandler_body.php @@ -271,11 +271,14 @@ class PdfHandler extends ImageHandler { return false; } - wfProfileIn( __METHOD__ ); - wfSuppressWarnings(); - $image->pdfMetaArray = unserialize( $metadata ); - wfRestoreWarnings(); - wfProfileOut( __METHOD__ ); + $work = new PoolCounterWorkViaCallback( 'PdfHandler-unserialize-metadata', $image->getName(), array( + 'doWork' => function() use ( $image, $metadata ) { + wfSuppressWarnings(); + $image->pdfMetaArray = unserialize( $metadata ); + wfRestoreWarnings(); + }, + ) ); + $work->execute(); return $image->pdfMetaArray; } diff --git a/extensions/PdfHandler/Rakefile b/extensions/PdfHandler/Rakefile new file mode 100644 index 00000000..4835bcda --- /dev/null +++ b/extensions/PdfHandler/Rakefile @@ -0,0 +1,14 @@ +require "bundler/setup" + +require "rubocop/rake_task" +RuboCop::RakeTask.new(:rubocop) do |task| + # If you use mediawiki-vagrant, rubocop will by default use it's .rubocop.yml + # The next line makes it explicit that you want .rubocop.yml from the + # directory where `bundle exec rake` is executed: + task.options = ["-c", ".rubocop.yml"] +end + +task default: [:test] + +desc "Run all build/tests commands (CI entry point)" +task test: [:rubocop] diff --git a/extensions/PdfHandler/composer.json b/extensions/PdfHandler/composer.json new file mode 100644 index 00000000..fd380fb7 --- /dev/null +++ b/extensions/PdfHandler/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/PdfHandler/extension.json b/extensions/PdfHandler/extension.json index 0736ee8e..0c5acebd 100644 --- a/extensions/PdfHandler/extension.json +++ b/extensions/PdfHandler/extension.json @@ -41,5 +41,6 @@ "PdfImage": "PdfHandler.image.php", "PdfHandler": "PdfHandler_body.php", "CreatePdfThumbnailsJob": "CreatePdfThumbnailsJob.class.php" - } + }, + "manifest_version": 1 } diff --git a/extensions/PdfHandler/i18n/ast.json b/extensions/PdfHandler/i18n/ast.json index b2ad9d48..c2c275dc 100644 --- a/extensions/PdfHandler/i18n/ast.json +++ b/extensions/PdfHandler/i18n/ast.json @@ -5,6 +5,10 @@ ] }, "pdf-desc": "Xestor pa ver los ficheros PDF en mou d'imaxe", + "pdf-file-page-warning": "PDF ye un formatu complexu que pue esponer dalguna información privada en dellos casos. Asegúrate de configurar el to llector de PDF de manera segura.", + "pdf-file-page-warning-header": "Consideraciones d'intimidá", + "pdf-file-page-warning-footer": "Esti problema nun ye específicu d'esti ficheru concretu, sinón que ye un problema xeneral col formatu PDF.", + "pdf-file-page-warning-info": "Más información sobro esti problema.", "pdf_no_metadata": "Nun se pudieron sacar los metadatos del PDF", "pdf_page_error": "El númberu de la páxina nun ta nel rangu", "exif-pdf-producer": "Programa de conversión", diff --git a/extensions/PdfHandler/i18n/cs.json b/extensions/PdfHandler/i18n/cs.json index 204a5374..eab1ccc0 100644 --- a/extensions/PdfHandler/i18n/cs.json +++ b/extensions/PdfHandler/i18n/cs.json @@ -6,6 +6,10 @@ ] }, "pdf-desc": "OvladaÄ pro prohlížení PDF souborů jako obrázků", + "pdf-file-page-warning": "PDF je komplexní formát, který může v jistých případech prozradit nÄ›které vaÅ¡e soukromé údaje. UjistÄ›te se, že máte svůj PDF prohlížeÄ nakonfigurován bezpeÄným způsobem.", + "pdf-file-page-warning-header": "Poznámka k ochranÄ› soukromí", + "pdf-file-page-warning-footer": "Tento problém se netýká přímo tohoto konkrétního souboru, jde o obecný problém formátu PDF.", + "pdf-file-page-warning-info": "Více informací k tomuto tématu.", "pdf_no_metadata": "Z PDF se nepodaÅ™ilo získat metadata", "pdf_page_error": "Číslo stránky mimo rozsah", "exif-pdf-producer": "Konverzní program", diff --git a/extensions/PdfHandler/i18n/es.json b/extensions/PdfHandler/i18n/es.json index bda980d6..1f030d85 100644 --- a/extensions/PdfHandler/i18n/es.json +++ b/extensions/PdfHandler/i18n/es.json @@ -6,12 +6,12 @@ "Macofe" ] }, - "pdf-desc": "Manejador para ver archivos PDF en modo imagen", + "pdf-desc": "Manejador para ver archivos PDF en modo imagen.", "pdf-file-page-warning": "PDF es un formato complejo que puede exponer alguna información privada en algunos casos. Asegúrate de configurar tu lector de PDF de una manera segura.", "pdf-file-page-warning-header": "Consideraciones de privacidad", "pdf-file-page-warning-footer": "Este problema no es específico de este archivo en particular, sino un problema general con el formato PDF.", "pdf-file-page-warning-info": "Más información sobre este problema.", - "pdf_no_metadata": "No se obtuvieron metadatos del PDF", + "pdf_no_metadata": "No se pudieron obtener metadatos del PDF.", "pdf_page_error": "Número de página fuera de rango", "exif-pdf-producer": "Programa de conversión", "exif-pdf-version": "Versión del formato PDF", diff --git a/extensions/PdfHandler/i18n/fr.json b/extensions/PdfHandler/i18n/fr.json index 9970cb21..094ffcfd 100644 --- a/extensions/PdfHandler/i18n/fr.json +++ b/extensions/PdfHandler/i18n/fr.json @@ -4,10 +4,15 @@ "Crochet.david", "Gomoko", "Grondin", - "Verdy p" + "Verdy p", + "Yodaspirine" ] }, "pdf-desc": "Gestionnaire permettant de visualiser les fichiers PDF en mode image", + "pdf-file-page-warning": "Le PDF est format complexe qui peut exposer certaines de vos informations privées dans certains cas. Assurez-vous d'avoir configuré de façon sûre votre lecteur de PDF.", + "pdf-file-page-warning-header": "Considérations sur la vie privée", + "pdf-file-page-warning-footer": "Ce problème n'est pas spécifique à ce fichier en particuler, mais est un problème avec le format PDF en général.", + "pdf-file-page-warning-info": "En savoir plus sur ce problème.", "pdf_no_metadata": "Impossible d’obtenir les métadonnées du fichier PDF", "pdf_page_error": "Le numéro de page est hors de l’étendue.", "exif-pdf-producer": "Programme de conversion", diff --git a/extensions/PdfHandler/i18n/gl.json b/extensions/PdfHandler/i18n/gl.json index 06c708a4..58683e18 100644 --- a/extensions/PdfHandler/i18n/gl.json +++ b/extensions/PdfHandler/i18n/gl.json @@ -2,10 +2,16 @@ "@metadata": { "authors": [ "Alma", - "Toliño" + "Toliño", + "Banjo", + "Elisardojm" ] }, "pdf-desc": "Manipulador para ver ficheiros PDF no modo de imaxe", + "pdf-file-page-warning": "PDF é un formato complexo que pode expoñer algunha información privada nalgúns casos. Asegúrese de configurar o seu lector de PDF dunha maneira segura.", + "pdf-file-page-warning-header": "Consideracións de privacidade", + "pdf-file-page-warning-footer": "Este problema non é específico deste ficheiro en particular, senón un problema xeral co formato PDF.", + "pdf-file-page-warning-info": "Máis informacións sobre este problema.", "pdf_no_metadata": "Non se puideron obter os metadatos do PDF.", "pdf_page_error": "O número da páxina non está no rango.", "exif-pdf-producer": "Programa de conversión", diff --git a/extensions/PdfHandler/i18n/gu.json b/extensions/PdfHandler/i18n/gu.json index 1605e38a..697b8487 100644 --- a/extensions/PdfHandler/i18n/gu.json +++ b/extensions/PdfHandler/i18n/gu.json @@ -2,10 +2,12 @@ "@metadata": { "authors": [ "KartikMistry", - "Sushant savla" + "Sushant savla", + "NehalDaveND" ] }, "pdf-desc": "PDF ફાઈલોને ચિતà«àª° સà«àªµàª°à«‚પે જોવાનà«àª‚ સાધન", "pdf_no_metadata": "PDFમાંથી મેટા ડાટા ન મેળવી શકાયો", - "pdf_page_error": "પાનાં કà«àª°àª®àª¾àª‚ક અવધિમાં નથી" + "pdf_page_error": "પાનાં કà«àª°àª®àª¾àª‚ક અવધિમાં નથી", + "exif-pdf-pagesize": "પાનાંનો આકાર" } diff --git a/extensions/PdfHandler/i18n/hi.json b/extensions/PdfHandler/i18n/hi.json index e904654e..674f4f71 100644 --- a/extensions/PdfHandler/i18n/hi.json +++ b/extensions/PdfHandler/i18n/hi.json @@ -1,10 +1,12 @@ { "@metadata": { "authors": [ - "Kaustubh" + "Kaustubh", + "NehalDaveND" ] }, "pdf-desc": "चितà¥à¤° मोड में पीडीà¤à¤« फ़ाईल देखनेके लिये आवशà¥à¤¯à¤• पà¥à¤°à¤£à¤¾à¤²à¥€", "pdf_no_metadata": "पीडीà¤à¤« से मेटाडाटा ले नहीं पायें", - "pdf_page_error": "पनà¥à¤¨à¥‡ का कà¥à¤°à¤®à¤¾à¤‚क सीमामें नहीं हैं" + "pdf_page_error": "पनà¥à¤¨à¥‡ का कà¥à¤°à¤®à¤¾à¤‚क सीमामें नहीं हैं", + "exif-pdf-pagesize": "पृषà¥à¤  का आकार" } diff --git a/extensions/PdfHandler/i18n/hu.json b/extensions/PdfHandler/i18n/hu.json index 425a4474..66fb2621 100644 --- a/extensions/PdfHandler/i18n/hu.json +++ b/extensions/PdfHandler/i18n/hu.json @@ -2,10 +2,15 @@ "@metadata": { "authors": [ "Dani", - "Dj" + "Dj", + "Tacsipacsi" ] }, "pdf-desc": "PDF fájlok megjelenítse képként", + "pdf-file-page-warning": "A PDF egy komplex formátum, ami bizonyos esetekben veszélyeztetheti a személyes információidat. Figyelj a PDF-megjelenítÅ‘d biztonságos beállítására.", + "pdf-file-page-warning-header": "Biztonsági problémák", + "pdf-file-page-warning-footer": "Ez nem a konkrét fájl problémája, hanem a általánosan a PDF formátumé.", + "pdf-file-page-warning-info": "További információk a problémáról", "pdf_no_metadata": "nem sikerült lekérni a PDF metaadatait", "pdf_page_error": "Az oldalszám a tartományon kívül esik", "exif-pdf-producer": "Konvertáló program", diff --git a/extensions/PdfHandler/i18n/it.json b/extensions/PdfHandler/i18n/it.json index 5d4ae85a..18aecfa1 100644 --- a/extensions/PdfHandler/i18n/it.json +++ b/extensions/PdfHandler/i18n/it.json @@ -2,10 +2,12 @@ "@metadata": { "authors": [ "Beta16", - "Darth Kule" + "Darth Kule", + "F. Cosoleto" ] }, "pdf-desc": "Gestore per la visualizzazione di file PDF in modalità immagine", + "pdf-file-page-warning-info": "Ulteriori informazioni su questo problema.", "pdf_no_metadata": "Impossibile ottenere i metadati da PDF", "pdf_page_error": "Numero di pagina non compreso nell'intervallo", "exif-pdf-producer": "Programma di conversione", diff --git a/extensions/PdfHandler/i18n/kk-cyrl.json b/extensions/PdfHandler/i18n/kk-cyrl.json new file mode 100644 index 00000000..78d753b2 --- /dev/null +++ b/extensions/PdfHandler/i18n/kk-cyrl.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Arystanbek" + ] + }, + "pdf-file-page-warning-info": "Қате туралы толығырақ білу.", + "exif-pdf-producer": "Түрлендіру програмаÑÑ‹", + "exif-pdf-version": "PDF форматының нұÑқаÑÑ‹", + "exif-pdf-pagesize": "Бет өлшемі" +} diff --git a/extensions/PdfHandler/i18n/ksh.json b/extensions/PdfHandler/i18n/ksh.json index 8901e25c..f98ff67a 100644 --- a/extensions/PdfHandler/i18n/ksh.json +++ b/extensions/PdfHandler/i18n/ksh.json @@ -9,10 +9,10 @@ "pdf-file-page-warning-header": "Zom Schoz vun päsöhnlesche Dahte", "pdf-file-page-warning-footer": "Dat hädd och nix met heh dä beschtemmpte Dattei ze donn, ed es esu för jehde Dattei em PDF-Fommaht.", "pdf-file-page-warning-info": "Donn mih övver dat Jannze lässe.", - "pdf_no_metadata": "Kann de Metta-Date nit fun dä PDF-Datei holle.", + "pdf_no_metadata": "Kann de Metta_Dahte nit fun dä PDF-Dattei holle.", "pdf_page_error": "En Sigge-Nommer es ußerhallef", "exif-pdf-producer": "Ömwandelongsprojramm", - "exif-pdf-version": "PDF-Fommaat-Version", + "exif-pdf-version": "PDF-Fommaat-Väsjohn", "exif-pdf-encrypted": "Verschlößelt", "exif-pdf-pagesize": "Dä Sigg(e) ier Jrüüße <--\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Exif-pdf-pagesize/ksh\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Exif-pdf-pagesize\n-->" } diff --git a/extensions/PdfHandler/i18n/lt.json b/extensions/PdfHandler/i18n/lt.json index 6d1315c6..caab360b 100644 --- a/extensions/PdfHandler/i18n/lt.json +++ b/extensions/PdfHandler/i18n/lt.json @@ -1,10 +1,19 @@ { "@metadata": { "authors": [ - "Matasg" + "Matasg", + "Albertas" ] }, "pdf-desc": "Ä®rankis PDF failų peržiÅ«rai vaizdo režime", + "pdf-file-page-warning": "PDF yra sudÄ—tingas formatas, kuris kartais gali atskleisti dalį JÅ«sų privaÄios informacijos. Ä®sitikinkite, kad JÅ«sų PDF peržiÅ«ros įrankis yra saugiai sukonfigÅ«ruotas.", + "pdf-file-page-warning-header": "Privatumo sumetimai", + "pdf-file-page-warning-footer": "Å i problema nÄ—ra specifinÄ— konkreÄiam failui, bet apskritai PDF formato problema.", + "pdf-file-page-warning-info": "IÅ¡mokite daugiau apie Å¡iÄ… problemÄ….", "pdf_no_metadata": "Nepavyko gauti metaduomenų iÅ¡ PDF", - "pdf_page_error": "Puslapis numeris nÄ—ra diapazone" + "pdf_page_error": "Puslapis numeris nÄ—ra diapazone", + "exif-pdf-producer": "Konvertavimo programa", + "exif-pdf-version": "PDF formato versija", + "exif-pdf-encrypted": "Užšifruotas", + "exif-pdf-pagesize": "Puslapio dydis" } diff --git a/extensions/PdfHandler/i18n/ml.json b/extensions/PdfHandler/i18n/ml.json index 7c75a12b..71f483bb 100644 --- a/extensions/PdfHandler/i18n/ml.json +++ b/extensions/PdfHandler/i18n/ml.json @@ -6,6 +6,10 @@ ] }, "pdf-desc": "പി.à´¡à´¿.à´Žà´«àµ. à´ªàµà´°à´®à´¾à´£à´™àµà´™àµ¾ à´šà´¿à´¤àµà´°à´°àµ‚പതàµà´¤à´¿àµ½ കാണàµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ കൈകാരàµà´¯àµ‹à´ªà´•à´°à´£à´‚", + "pdf-file-page-warning": "പി.à´¡à´¿.à´Žà´«àµ. വളരെ സങàµà´•àµ€àµ¼à´£àµà´£à´®à´¾à´£àµ, ചിലപàµà´ªàµ‹à´³à´¤àµ താങàµà´•à´³àµà´Ÿàµ† à´¸àµà´µà´•à´¾à´°àµà´¯à´µà´¿à´µà´°à´™àµà´™àµ¾ വെളിപàµà´ªàµ†à´Ÿàµà´¤àµà´¤à´¿à´¯àµ‡à´•àµà´•à´¾à´‚. താങàµà´•à´³àµà´Ÿàµ† പി.à´¡à´¿.à´Žà´«àµ. ദർശനോപാധി à´¸àµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯ വിധതàµà´¤à´¿àµ½ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•à´¾àµ» à´¶àµà´°à´¦àµà´§à´¿à´•àµà´•àµà´•.", + "pdf-file-page-warning-header": "à´¸àµà´µà´•à´¾à´°àµà´¯à´¤à´¾ പരിഗണനകൾ", + "pdf-file-page-warning-footer": "à´ˆ à´ªàµà´°à´¶àµà´¨à´‚ à´ˆ à´ªàµà´°à´¤àµà´¯àµ‡à´• à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµ മാതàµà´°à´®àµà´³àµà´³à´¤à´²àµà´², മറിചàµà´šàµ പി.à´¡à´¿.à´Žà´«àµ. രീതിയàµà´Ÿàµ† പൊതൠപàµà´°à´¶àµà´¨à´®à´¾à´£àµ.", + "pdf-file-page-warning-info": "à´ˆ à´ªàµà´°à´¶àµà´¨à´¤àµà´¤àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµ കൂടàµà´¤àµ½ അറിയàµà´•.", "pdf_no_metadata": "PDF-ൽ നിനàµà´¨àµ മെറàµà´±à´¾à´¡à´¾à´±àµà´± ലഭിചàµà´šà´¿à´²àµà´²", "pdf_page_error": "താളിനàµà´±àµ† à´•àµà´°à´®à´¸à´‚à´–àµà´¯ പരിധിയിലധികമാണàµ", "exif-pdf-producer": "പരിവർതàµà´¤à´¨ à´ªàµà´°àµ‹à´—àµà´°à´¾à´‚", diff --git a/extensions/PdfHandler/i18n/nap.json b/extensions/PdfHandler/i18n/nap.json new file mode 100644 index 00000000..f4d53731 --- /dev/null +++ b/extensions/PdfHandler/i18n/nap.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "C.R." + ] + }, + "pdf-desc": "Gestore pe vedè 'e file PDF 'n modo immaggine", + "pdf-file-page-warning": "'O PDF è nu formato cumplesso ca putesse fà veré cocche nfurmazione privata vuosta int'a cierti situaziune. Faciteve sicuro/a ca cunfigurate 'o visualizzatore PDF int'a nu modo sicuro.", + "pdf-file-page-warning-header": "Cunzideraziune d' 'a privacy", + "pdf-file-page-warning-footer": "Stu probblema nun è specifico 'e stu file particolare, ma nu probblema generale cu 'o furmato PDF.", + "pdf-file-page-warning-info": "Mpara 'e cchiù ncopp'a sti probbleme.", + "pdf_no_metadata": "Nun se ponno piglià 'e metadate d' 'o PDF.", + "pdf_page_error": "'O nummero d' 'a paggena nun è int'a ll'intervallo.", + "exif-pdf-producer": "Prugramma 'e cunverziona", + "exif-pdf-version": "Verzione d' 'o furmato 'e PDF", + "exif-pdf-encrypted": "Criptate", + "exif-pdf-pagesize": "Diminziona d' 'a paggena" +} diff --git a/extensions/PdfHandler/i18n/nb.json b/extensions/PdfHandler/i18n/nb.json index 8f18d2da..1dcd13ac 100644 --- a/extensions/PdfHandler/i18n/nb.json +++ b/extensions/PdfHandler/i18n/nb.json @@ -1,10 +1,15 @@ { "@metadata": { "authors": [ - "Jsoby" + "Jsoby", + "Danmichaelo" ] }, "pdf-desc": "HÃ¥ndtering av PDF-visning i bildemodus", + "pdf-file-page-warning": "PDF er et komplekst format som kan eksponere din private informasjon. Forsikre deg om at du har sikre innstillinger i PDF-visningsprogrammet ditt.", + "pdf-file-page-warning-header": "Personvernhensyn", + "pdf-file-page-warning-footer": "Dette er ikke et problem med denne bestemte filen, men et generelt problem med PDF-formatet.", + "pdf-file-page-warning-info": "Lær mer.", "pdf_no_metadata": "kan ikke hente metadata fra PDF", "pdf_page_error": "Sidenummer overstiger antall sider i dokumentet", "exif-pdf-producer": "Koverteringsprogram", diff --git a/extensions/PdfHandler/i18n/ne.json b/extensions/PdfHandler/i18n/ne.json new file mode 100644 index 00000000..20730cff --- /dev/null +++ b/extensions/PdfHandler/i18n/ne.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "NehalDaveND" + ] + }, + "exif-pdf-pagesize": "पृषà¥à¤ à¤•à¥‹ आकार" +} diff --git a/extensions/PdfHandler/i18n/nl.json b/extensions/PdfHandler/i18n/nl.json index f019d3e9..674c185e 100644 --- a/extensions/PdfHandler/i18n/nl.json +++ b/extensions/PdfHandler/i18n/nl.json @@ -2,10 +2,12 @@ "@metadata": { "authors": [ "Siebrand", - "Wiki13" + "Wiki13", + "Robin0van0der0vliet" ] }, "pdf-desc": "Handelt pdfbestanden af en maakt het mogelijk ze als afbeeldingen te bekijken", + "pdf-file-page-warning-header": "Privacyoverwegingen", "pdf_no_metadata": "De metadata van het pdfbestand kan niet uitgelezen worden", "pdf_page_error": "Het paginanummer ligt niet binnen het bereik", "exif-pdf-producer": "Conversieprogramma", diff --git a/extensions/PdfHandler/i18n/olo.json b/extensions/PdfHandler/i18n/olo.json new file mode 100644 index 00000000..ada2c6f9 --- /dev/null +++ b/extensions/PdfHandler/i18n/olo.json @@ -0,0 +1,9 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "exif-pdf-version": "PDF-formuatan versii", + "exif-pdf-pagesize": "Sivun kogo" +} diff --git a/extensions/PdfHandler/i18n/qqq.json b/extensions/PdfHandler/i18n/qqq.json index 39af89f8..ca8bb394 100644 --- a/extensions/PdfHandler/i18n/qqq.json +++ b/extensions/PdfHandler/i18n/qqq.json @@ -8,6 +8,10 @@ ] }, "pdf-desc": "{{desc|name=Pdf Handler|url=https://www.mediawiki.org/wiki/Extension:PdfHandler}}", + "pdf-file-page-warning": "Warning about potential issues with the PDF format, shown to users on the file page in a popup.", + "pdf-file-page-warning-header": "Header for a popup warning on the file page concerning potential privacy issues with the PDF format.", + "pdf-file-page-warning-footer": "Footer for a popup warning on the file page concerning potential privacy issues with the PDF format. Qualifies the warning by noting that any PDF may be unsafe, but we don't actually know if this particular PDF file is.", + "pdf-file-page-warning-info": "Link text for learning more about potential issues with the PDF format. Links to //www.mediawiki.org/wiki/Special:MyLanguage/Help:Security/PDF_files in the interface.", "pdf_no_metadata": "Error message given when metadata cannot be retrieved from a PDF file", "pdf_page_error": "Error message given when a PDF does not have the requested page number", "exif-pdf-producer": "The label used in the metadata table at the bottom of the file description page for the program used to convert this PDF file into a PDF.\n\nThis is separate from the program used to create the original file (Which is labeled by {{msg-mw|Exif-software}}).", diff --git a/extensions/PdfHandler/i18n/roa-tara.json b/extensions/PdfHandler/i18n/roa-tara.json index e7a5d949..2a8ddba2 100644 --- a/extensions/PdfHandler/i18n/roa-tara.json +++ b/extensions/PdfHandler/i18n/roa-tara.json @@ -5,6 +5,10 @@ ] }, "pdf-desc": "Gestore pe vedè le file PDF in mode immaggine", + "pdf-file-page-warning": "PDF jè 'nu formate comblesse ca pò fà vedè quacche 'mbormazione privata toje jndr'à certe case. A essere secure de configurà 'u visualizzatore de PDF jndr'à 'nu mode secure.", + "pdf-file-page-warning-header": "Conzideraziune d'a provacy", + "pdf-file-page-warning-footer": "Stu probbleme non g'è specifiche de stu file particolare, ma 'nu probbleme generale cu 'u formate PDF.", + "pdf-file-page-warning-info": "'Mbare de cchiù sus a stu probbleme.", "pdf_no_metadata": "Non ge pozze pigghià le metadata da 'u PDF", "pdf_page_error": "Numere de pàgene fore da l'indervalle", "exif-pdf-producer": "Programme de conversione", diff --git a/extensions/PdfHandler/i18n/ru.json b/extensions/PdfHandler/i18n/ru.json index e97ec2ad..36e862e9 100644 --- a/extensions/PdfHandler/i18n/ru.json +++ b/extensions/PdfHandler/i18n/ru.json @@ -2,10 +2,14 @@ "@metadata": { "authors": [ "DCamer", - "ÐлекÑандр Сигачёв" + "ÐлекÑандр Сигачёв", + "Okras" ] }, "pdf-desc": "Обработчик Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра PDF-файлов в виде изображений", + "pdf-file-page-warning": "PDF — комплекÑный формат, который в некоторых ÑлучаÑÑ… может раÑкрыть определённую вашу личную информацию. УбедитеÑÑŒ в том, что наÑтройки вашего PDF-проÑмотрщика безопаÑны.", + "pdf-file-page-warning-header": "Ð¡Ð¾Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð¾Ñти", + "pdf-file-page-warning-info": "Подробнее об Ñтой проблеме.", "pdf_no_metadata": "невозможно получить метаданные из PDF", "pdf_page_error": "Ðомер Ñтраницы вне диапазона", "exif-pdf-producer": "Программа преобразованиÑ", diff --git a/extensions/PdfHandler/i18n/sa.json b/extensions/PdfHandler/i18n/sa.json index 50a61c1e..860a1353 100644 --- a/extensions/PdfHandler/i18n/sa.json +++ b/extensions/PdfHandler/i18n/sa.json @@ -1,10 +1,12 @@ { "@metadata": { "authors": [ - "Shubha" + "Shubha", + "NehalDaveND" ] }, "pdf-desc": "सà¥à¤²à¥‡à¤–(PDF)सञà¥à¤šà¤¿à¤•à¤¾à¤ƒ चितà¥à¤°à¤¦à¤¶à¤¾à¤¯à¤¾à¤‚ दरà¥à¤¶à¤¨à¤¾à¤¯ अपेकà¥à¤·à¤¿à¤¤à¤¾ पà¥à¤°à¤£à¤¾à¤²à¥€", "pdf_no_metadata": "सà¥à¤²à¥‡à¤–ातॠमेटादतà¥à¤¤à¤¾à¤‚शः पà¥à¤°à¤¾à¤ªà¥à¤¤à¥à¤®à¥ अशकà¥à¤¯à¤ƒ", - "pdf_page_error": "पृषà¥à¤ à¤•à¥à¤°à¤®à¤¾à¤™à¥à¤•à¤ƒ सीमायां न विदà¥à¤¯à¤¤à¥‡" + "pdf_page_error": "पृषà¥à¤ à¤•à¥à¤°à¤®à¤¾à¤™à¥à¤•à¤ƒ सीमायां न विदà¥à¤¯à¤¤à¥‡", + "exif-pdf-pagesize": "पृषà¥à¤ à¤¾à¤•à¤¾à¤°à¤ƒ" } diff --git a/extensions/PdfHandler/i18n/tr.json b/extensions/PdfHandler/i18n/tr.json index 75a6e1a2..08884d15 100644 --- a/extensions/PdfHandler/i18n/tr.json +++ b/extensions/PdfHandler/i18n/tr.json @@ -1,10 +1,16 @@ { "@metadata": { "authors": [ - "Joseph" + "Joseph", + "Arystanbek" ] }, "pdf-desc": "PDF dosyalarını görüntü modunda görüntülemek için iÅŸleyici", + "pdf-file-page-warning-info": "Bu sorun hakkında daha fazla bilgi edinin.", "pdf_no_metadata": "PDF'den metadata alınamıyor", - "pdf_page_error": "Sayfa numarası aralıkta deÄŸil" + "pdf_page_error": "Sayfa numarası aralıkta deÄŸil", + "exif-pdf-producer": "Dönüştürme programı", + "exif-pdf-version": "PDF formatı sürüm", + "exif-pdf-encrypted": "Åžifreli", + "exif-pdf-pagesize": "Sayfa boyutu" } diff --git a/extensions/PdfHandler/i18n/uk.json b/extensions/PdfHandler/i18n/uk.json index d5af168c..400933eb 100644 --- a/extensions/PdfHandler/i18n/uk.json +++ b/extensions/PdfHandler/i18n/uk.json @@ -2,10 +2,15 @@ "@metadata": { "authors": [ "Base", - "Prima klasy4na" + "Prima klasy4na", + "Ðта" ] }, "pdf-desc": "Оброблювач Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду PDF-файлів в режимі зображень", + "pdf-file-page-warning": "PDF — це Ñкладний формат, Ñкий може викрити деÑку Вашу приватну в деÑких випадках. ПереконайтеÑÑ, що налаштували Ñвій переглÑдач PDF безпечним ÑпоÑобом.", + "pdf-file-page-warning-header": "ÐœÑ–Ñ€ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð´ÐµÐ½Ñ†Ñ–Ð¹Ð½Ð¾ÑÑ‚Ñ–", + "pdf-file-page-warning-footer": "Ð¦Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° Ñ” не Ñпецифічною Ð´Ð»Ñ Ð´Ð°Ð½Ð¾Ð³Ð¾ конкретного файлу, а загальною проблемою формату PDF.", + "pdf-file-page-warning-info": "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про цю проблему.", "pdf_no_metadata": "Ðе виходить отримати метадані з PDF", "pdf_page_error": "Ðомер Ñторінки не в діапазоні", "exif-pdf-producer": "програма конвертації", diff --git a/extensions/PdfHandler/i18n/vi.json b/extensions/PdfHandler/i18n/vi.json index e4e50ac6..7e16a86a 100644 --- a/extensions/PdfHandler/i18n/vi.json +++ b/extensions/PdfHandler/i18n/vi.json @@ -6,6 +6,10 @@ ] }, "pdf-desc": "Bá»™ xá»­ lý để xem tập tin PDF ở dạng hình ảnh", + "pdf-file-page-warning": "PDF là má»™t định dạng phức tạp có thể lá»™ rõ thông tin cá nhân của bạn trong má»™t số trÆ°á»ng hợp. Hãy chắc chắn thiết lập trình xem PDF của bạn má»™t cách an toàn.", + "pdf-file-page-warning-header": "Thông tin vá» quyá»n riêng tÆ°", + "pdf-file-page-warning-footer": "Äây là vấn Ä‘á» của định dạng PDF nói chung, chứ không phải tập tin này nói riêng.", + "pdf-file-page-warning-info": "Tìm hiểu thêm vá» vấn Ä‘á» này.", "pdf_no_metadata": "Không thấy truy xuất siêu dữ liệu từ PDF", "pdf_page_error": "Số trang không nằm trong giá»›i hạn", "exif-pdf-producer": "ChÆ°Æ¡ng trình chuyển đổi", diff --git a/extensions/PdfHandler/i18n/zh-hans.json b/extensions/PdfHandler/i18n/zh-hans.json index df3681b1..e8ec8014 100644 --- a/extensions/PdfHandler/i18n/zh-hans.json +++ b/extensions/PdfHandler/i18n/zh-hans.json @@ -9,7 +9,7 @@ "pdf-desc": "在图åƒæ¨¡å¼ä¸­æŸ¥çœ‹PDF文件的处ç†å™¨ã€‚", "pdf-file-page-warning": "PDF是一个å¤æ‚æ ¼å¼ï¼Œå®ƒåœ¨æŸäº›æƒ…况下会暴露您的ç§äººä¿¡æ¯ã€‚ç¡®ä¿æ‚¨çš„PDF阅读器é…置安全。", "pdf-file-page-warning-header": "éšç§è€ƒè™‘", - "pdf-file-page-warning-footer": "此问题ä¸åªå‘生在此问题上,还是PDFæ ¼å¼çš„æ™®é问题。", + "pdf-file-page-warning-footer": "此问题ä¸åªå‘生在此文件上,还是PDFæ ¼å¼çš„æ™®é问题。", "pdf-file-page-warning-info": "了解关于此问题的更多信æ¯ã€‚", "pdf_no_metadata": "无法在PDF中获å–元数æ®ã€‚", "pdf_page_error": "页数ä¸åœ¨èŒƒå›´å†…。", diff --git a/extensions/PdfHandler/i18n/zh-hant.json b/extensions/PdfHandler/i18n/zh-hant.json index d18de97c..c875032d 100644 --- a/extensions/PdfHandler/i18n/zh-hant.json +++ b/extensions/PdfHandler/i18n/zh-hant.json @@ -8,6 +8,10 @@ ] }, "pdf-desc": "使用圖片模å¼æª¢è¦– PDF 檔案的處ç†ç¨‹å¼ã€‚", + "pdf-file-page-warning": "PDF 是一個複雜的格å¼ï¼Œåœ¨æŸäº›æƒ…æ³å¯èƒ½æœƒæš´éœ²æ‚¨éƒ¨ä»½çš„éš±ç§è³‡è¨Šã€‚ 請確定您的 PDF 檢視器已使用安全的方å¼è¨­å®šã€‚", + "pdf-file-page-warning-header": "éš±ç§è€ƒé‡", + "pdf-file-page-warning-footer": "æ­¤å•é¡Œæœªé‡å°ç‰¹å®šæª”檔案,是 PDF æ ¼å¼çš„一般å•é¡Œã€‚", + "pdf-file-page-warning-info": "了解更多有關此å•é¡Œã€‚", "pdf_no_metadata": "無法在 PDF 中å–得資料定義。", "pdf_page_error": "é æ•¸è¶…出範åœã€‚", "exif-pdf-producer": "轉æ›ç¨‹å¼", diff --git a/extensions/Poem/Gruntfile.js b/extensions/Poem/Gruntfile.js new file mode 100644 index 00000000..5a87e7b6 --- /dev/null +++ b/extensions/Poem/Gruntfile.js @@ -0,0 +1,19 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/Poem/LICENSE b/extensions/Poem/LICENSE new file mode 100644 index 00000000..0e259d42 --- /dev/null +++ b/extensions/Poem/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/extensions/Poem/composer.json b/extensions/Poem/composer.json new file mode 100644 index 00000000..fd380fb7 --- /dev/null +++ b/extensions/Poem/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/Poem/extension.json b/extensions/Poem/extension.json index 1b8672ee..3f175974 100644 --- a/extensions/Poem/extension.json +++ b/extensions/Poem/extension.json @@ -5,6 +5,7 @@ "Brion Vibber", "Steve Sanbeg" ], + "license-name": "CC0-1.0", "url": "https://www.mediawiki.org/wiki/Extension:Poem", "descriptionmsg": "poem-desc", "type": "parserhook", @@ -23,5 +24,6 @@ }, "ParserTestFiles": [ "poemParserTests.txt" - ] + ], + "manifest_version": 1 } diff --git a/extensions/Renameuser/Gruntfile.js b/extensions/Renameuser/Gruntfile.js new file mode 100644 index 00000000..116f5823 --- /dev/null +++ b/extensions/Renameuser/Gruntfile.js @@ -0,0 +1,25 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-contrib-jshint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + jshint: { + all: [ + '*.js' + ] + }, + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jshint', 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/Renameuser/RenameUserJob.php b/extensions/Renameuser/RenameUserJob.php index d2dc14c4..2edfc44d 100644 --- a/extensions/Renameuser/RenameUserJob.php +++ b/extensions/Renameuser/RenameUserJob.php @@ -1,4 +1,5 @@ params['oldname']; $userID = isset( $this->params['userID'] ) ? $this->params['userID'] : null; $uidColumn = isset( $this->params['uidColumn'] ) ? $this->params['uidColumn'] : null; - $timestampColumn = isset( $this->params['timestampColumn'] ) ? $this->params['timestampColumn'] : null; + $timestampColumn = isset( $this->params['timestampColumn'] ) ? + $this->params['timestampColumn'] : + null; $minTimestamp = $this->params['minTimestamp']; $maxTimestamp = $this->params['maxTimestamp']; $uniqueKey = isset( $this->params['uniqueKey'] ) ? $this->params['uniqueKey'] : null; @@ -45,7 +48,7 @@ class RenameUserJob extends Job { if ( isset( $timestampColumn ) ) { $conds[] = "$timestampColumn >= '$minTimestamp'"; $conds[] = "$timestampColumn <= '$maxTimestamp'"; - # Otherwise, bound by key (B/C) + # Otherwise, bound by key (B/C) } elseif ( isset( $uniqueKey ) ) { $conds[$uniqueKey] = $keyId; } else { @@ -59,7 +62,7 @@ class RenameUserJob extends Job { __METHOD__ ); # Special case: revisions may be deleted while renaming... - if ( $table == 'revision' && isset( $timestampColumn ) ) { + if ( $table === 'revision' && isset( $timestampColumn ) ) { $actual = $dbw->affectedRows(); # If some revisions were not renamed, they may have been deleted. # Do a pass on the archive table to get these straglers... @@ -77,7 +80,7 @@ class RenameUserJob extends Job { } } # Special case: revisions may be restored while renaming... - if ( $table == 'archive' && isset( $timestampColumn ) ) { + if ( $table === 'archive' && isset( $timestampColumn ) ) { $actual = $dbw->affectedRows(); # If some revisions were not renamed, they may have been restored. # Do a pass on the revision table to get these straglers... @@ -94,6 +97,7 @@ class RenameUserJob extends Job { ); } } + return true; } } diff --git a/extensions/Renameuser/Renameuser.alias.php b/extensions/Renameuser/Renameuser.alias.php index 07790bbc..805c55d1 100644 --- a/extensions/Renameuser/Renameuser.alias.php +++ b/extensions/Renameuser/Renameuser.alias.php @@ -19,7 +19,7 @@ $specialPageAliases['ar'] = array( 'Renameuser' => array( 'إعادة_تسمية_مستخدم' ), ); -/** Egyptian Spoken Arabic (مصرى) */ +/** Egyptian Arabic (مصرى) */ $specialPageAliases['arz'] = array( 'Renameuser' => array( 'سمّى_تانى_يوزر' ), ); @@ -44,6 +44,11 @@ $specialPageAliases['bg'] = array( 'Renameuser' => array( 'Преименуване' ), ); +/** Western Balochi (بلوچی رخشانی) */ +$specialPageAliases['bgn'] = array( + 'Renameuser' => array( 'کارمرزوکی_نامی_ٹگلینتین' ), +); + /** Banjar (Bahasa Banjar) */ $specialPageAliases['bjn'] = array( 'Renameuser' => array( 'Ganti_ngaran_pamakai' ), @@ -129,7 +134,7 @@ $specialPageAliases['fr'] = array( 'Renameuser' => array( 'Renommer_utilisateur', 'RenommerUtilisateur' ), ); -/** Franco-Provençal (arpetan) */ +/** Arpitan (arpetan) */ $specialPageAliases['frp'] = array( 'Renameuser' => array( 'Renomar_l\'usanciér', 'RenomarLUsanciér' ), ); diff --git a/extensions/Renameuser/Renameuser.hooks.php b/extensions/Renameuser/Renameuser.hooks.php index 846f9131..b344d99d 100644 --- a/extensions/Renameuser/Renameuser.hooks.php +++ b/extensions/Renameuser/Renameuser.hooks.php @@ -11,9 +11,12 @@ class RenameuserHooks { public static function onShowMissingArticle( $article ) { $title = $article->getTitle(); $oldUser = User::newFromName( $title->getBaseText() ); - if ( ($title->getNamespace() == NS_USER || $title->getNamespace() == NS_USER_TALK ) && ($oldUser && $oldUser->isAnon() )) { + if ( ( $title->getNamespace() === NS_USER || $title->getNamespace() === NS_USER_TALK ) && + ( $oldUser && $oldUser->isAnon() ) + ) { // Get the title for the base userpage - $page = Title::makeTitle( NS_USER, str_replace( ' ', '_', $title->getBaseText() ) )->getPrefixedDBkey(); + $page = Title::makeTitle( NS_USER, str_replace( ' ', '_', $title->getBaseText() ) ) + ->getPrefixedDBkey(); $out = $article->getContext()->getOutput(); LogEventsList::showLogExtract( $out, @@ -51,6 +54,7 @@ class RenameuserHooks { array( 'oldusername' => $nt->getText() ) ); } + return true; } @@ -61,6 +65,7 @@ class RenameuserHooks { */ public static function onGetLogTypesOnUser( array &$types ) { $types[] = 'renameuser'; + return true; } } diff --git a/extensions/Renameuser/Renameuser.php b/extensions/Renameuser/Renameuser.php index 441b5712..738ca0db 100644 --- a/extensions/Renameuser/Renameuser.php +++ b/extensions/Renameuser/Renameuser.php @@ -5,10 +5,12 @@ if ( function_exists( 'wfLoadExtension' ) ) { // Keep i18n globals so mergeMessageFileList.php doesn't break $wgMessagesDirs['Renameuser'] = __DIR__ . '/i18n'; $wgExtensionMessagesFiles['RenameuserAliases'] = __DIR__ . '/Renameuser.alias.php'; + /* wfWarn( 'Deprecated PHP entry point used for Renameuser extension. Please use wfLoadExtension instead, ' . 'see https://www.mediawiki.org/wiki/Extension_registration for more details.' ); */ + return true; } else { die( 'This version of the Renameuser extension requires MediaWiki 1.25+' ); diff --git a/extensions/Renameuser/RenameuserLogFormatter.php b/extensions/Renameuser/RenameuserLogFormatter.php index 37078842..27289028 100644 --- a/extensions/Renameuser/RenameuserLogFormatter.php +++ b/extensions/Renameuser/RenameuserLogFormatter.php @@ -1,8 +1,8 @@ getPrefixedText() . ']]'; } } + return $link; } diff --git a/extensions/Renameuser/RenameuserSQL.php b/extensions/Renameuser/RenameuserSQL.php index dfdb403d..56d9d493 100644 --- a/extensions/Renameuser/RenameuserSQL.php +++ b/extensions/Renameuser/RenameuserSQL.php @@ -1,48 +1,48 @@ fields to be updated - * - * @var array - * @access private - */ + * The the tables => fields to be updated + * + * @var array + * @access private + */ public $tables; /** - * Flag that can be set to false, in case another process has already started - * the updates and the old username may have already been renamed in the user table. - * - * @var bool - * @access private - */ + * Flag that can be set to false, in case another process has already started + * the updates and the old username may have already been renamed in the user table. + * + * @var bool + * @access private + */ public $checkIfUserExists; /** @@ -80,9 +80,9 @@ class RenameuserSQL { * @param $uid * @param User $renamer * @param $options Array of options - * 'checkIfUserExists' - bool, whether to update the user table + * 'checkIfUserExists' - bool, whether to update the user table */ - function __construct( $old, $new, $uid, User $renamer, $options = array() ) { + public function __construct( $old, $new, $uid, User $renamer, $options = array() ) { $this->old = $old; $this->new = $new; $this->uid = $uid; @@ -104,7 +104,7 @@ class RenameuserSQL { $this->tables = array(); // Immediate updates $this->tables['image'] = array( 'img_user_text', 'img_user' ); $this->tables['oldimage'] = array( 'oi_user_text', 'oi_user' ); - $this->tables['filearchive'] = array('fa_user_text','fa_user'); + $this->tables['filearchive'] = array( 'fa_user_text', 'fa_user' ); $this->tablesJob = array(); // Slow updates // If this user has a large number of edits, use the jobqueue if ( User::newFromId( $uid )->getEditCount() > self::CONTRIB_JOB ) { @@ -136,11 +136,11 @@ class RenameuserSQL { /** * Do the rename operation */ - function rename() { - global $wgMemc, $wgAuth, $wgUpdateRowsPerJob; + public function rename() { + global $wgAuth, $wgUpdateRowsPerJob; // Grab the user's edit count first, used in log entry - $contribs = User::newfromId( $this->uid )->getEditCount(); + $contribs = User::newFromId( $this->uid )->getEditCount(); $dbw = wfGetDB( DB_MASTER ); $dbw->begin(); @@ -159,6 +159,7 @@ class RenameuserSQL { if ( !$dbw->affectedRows() && $this->checkIfUserExists ) { $dbw->rollback(); $this->debug( "User {$this->old} does not exist, bailing out" ); + return false; } @@ -169,7 +170,7 @@ class RenameuserSQL { $authUser->resetAuthToken(); // Delete from memcached. - $wgMemc->delete( wfMemcKey( 'user', 'id', $this->uid ) ); + $user->invalidateCache(); // Update ipblock list if this user has a block in there. $dbw->update( 'ipblocks', @@ -255,7 +256,7 @@ class RenameuserSQL { break; } # Since the ORDER BY is ASC, set the min timestamp with first row - if ( $jobParams['count'] == 0 ) { + if ( $jobParams['count'] === 0 ) { $jobParams['minTimestamp'] = $row->$timestampC; } # Keep updating the last timestamp, so it should be correct @@ -284,7 +285,7 @@ class RenameuserSQL { $dbw->commit(); // Delete from memcached again to make sure - $wgMemc->delete( wfMemcKey( 'user', 'id', $this->uid ) ); + $user->invalidateCache(); // Clear caches and inform authentication plugins $user = User::newFromId( $this->uid ); @@ -304,7 +305,6 @@ class RenameuserSQL { $logid = $logEntry->insert(); $logEntry->publish( $logid ); - $this->debug( "Finished rename for {$this->old} to {$this->new}" ); return true; diff --git a/extensions/Renameuser/SpecialRenameuser.php b/extensions/Renameuser/SpecialRenameuser.php deleted file mode 100644 index c8a0cb70..00000000 --- a/extensions/Renameuser/SpecialRenameuser.php +++ /dev/null @@ -1,9 +0,0 @@ -mDescription = "Update the archive table where users were previously renamed, but their archive contributions were not"; + $this->mDescription = 'Update the archive table where users were ' . + 'previously renamed, but their archive contributions were not'; } public function execute() { @@ -30,7 +31,7 @@ class CleanupArchiveUserText extends Maintenance { array( 'LIMIT' => 50 ) ); $results = 0; - foreach( $res as $row ) { + foreach ( $res as $row ) { $results++; $this->output( "User:{$row->ar_user_text} => User:{$row->user_name} " ); $dbw->update( @@ -55,5 +56,5 @@ class CleanupArchiveUserText extends Maintenance { } } -$maintClass = "CleanupArchiveUserText"; -require_once( RUN_MAINTENANCE_IF_MAIN ); +$maintClass = 'CleanupArchiveUserText'; +require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/extensions/Renameuser/composer.json b/extensions/Renameuser/composer.json new file mode 100644 index 00000000..4365e8a8 --- /dev/null +++ b/extensions/Renameuser/composer.json @@ -0,0 +1,12 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9", + "mediawiki/mediawiki-codesniffer": "0.4.0" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude vendor", + "phpcs -p -s" + ] + } +} diff --git a/extensions/Renameuser/extension.json b/extensions/Renameuser/extension.json index b01a6de8..226cca39 100644 --- a/extensions/Renameuser/extension.json +++ b/extensions/Renameuser/extension.json @@ -8,6 +8,9 @@ "descriptionmsg": "renameuser-desc", "license-name": "GPL-2.0+", "type": "specialpage", + "requires": { + "MediaWiki": ">= 1.25.0" + }, "ExtensionMessagesFiles": { "RenameuserAliases": "Renameuser.alias.php" }, @@ -53,5 +56,6 @@ "RenameuserLogFormatter": "RenameuserLogFormatter.php", "RenameuserSQL": "RenameuserSQL.php", "SpecialRenameuser": "specials/SpecialRenameuser.php" - } + }, + "manifest_version": 1 } diff --git a/extensions/Renameuser/i18n/azb.json b/extensions/Renameuser/i18n/azb.json index 62029e49..e9d6a698 100644 --- a/extensions/Renameuser/i18n/azb.json +++ b/extensions/Renameuser/i18n/azb.json @@ -1,13 +1,14 @@ { "@metadata": { "authors": [ - "Amir a57" + "Amir a57", + "KoroÄŸlu" ] }, - "renameuser": "ایستیÙاده‌چی آدینی دییش", + "renameuser": "ایشلدن آدینی دییش", "renameuser-linkoncontribs": "ایستیÙاده‌چی آدینی دییش", "renameuser-linkoncontribs-text": "بو ایستیÙاده‌چی‌نین آدینی دییش", - "renameusernew": "یئنی ایستیÙاده‌چی آدی:", + "renameusernew": "یئنی ایشلدن آدی:", "renameuserreason": "ندن:", "renameuserwarnings": "خبردارلیق‌لار:", "renameuserconfirm": "بلی، ایستیÙاده‌چی‌نین آدینی دییش", diff --git a/extensions/Renameuser/i18n/bn.json b/extensions/Renameuser/i18n/bn.json index 2e17c3cb..89868c94 100644 --- a/extensions/Renameuser/i18n/bn.json +++ b/extensions/Renameuser/i18n/bn.json @@ -9,12 +9,12 @@ "renameuser": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নামানà§à¦¤à¦° করো", "renameuser-linkoncontribs": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নামানà§à¦¤à¦°", "renameuser-linkoncontribs-text": "à¦à¦‡ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নামানà§à¦¤à¦° করো", - "renameuser-desc": "à¦à¦•à¦œà¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦•à§‡ নামানà§à¦¤à¦° করà§à¦¨ (''বà§à¦¯à¦¬à¦¹à¦¾à¦•à¦¾à¦°à§€ নামানà§à¦¤à¦°'' অধিকার পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨)", + "renameuser-desc": "à¦à¦•à¦œà¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦•à§‡ নামানà§à¦¤à¦° করতে [[Special:RenameUser|বিশেষ পাতা]] যà§à¦•à§à¦¤ করে (''বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নামানà§à¦¤à¦°'' অধিকার পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨)", "renameuserold": "বরà§à¦¤à¦®à¦¾à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নাম:", "renameusernew": "নতà§à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নাম:", "renameuserreason": "কারণ:", "renameusermove": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ à¦à¦¬à¦‚ আলাপের পাতা (à¦à¦¬à¦‚ তার উপপাতাসমূহ) নতà§à¦¨ নামে সরিয়ে নাও", - "renameusersuppress": "নতà§à¦¨ নামে রিডাইরেকà§à¦Ÿ করবেন না", + "renameusersuppress": "নতà§à¦¨ নামে পà§à¦¨à¦°à§à¦¨à¦¿à¦°à§à¦¦à§‡à¦¶ তৈরি করবেন না", "renameuserreserve": "ভবিষà§à¦¯à¦¤à§‡ উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ পà§à¦°à¦¾à¦¤à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নাম বà§à¦²à¦• করা হল", "renameuserwarnings": "সতরà§à¦•à§€à¦•à¦°à¦£:", "renameuserconfirm": "হà§à¦¯à¦¾à¦, বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° নাম পরিবরà§à¦¤à¦¨ করো", diff --git a/extensions/Renameuser/i18n/bs.json b/extensions/Renameuser/i18n/bs.json index c316b932..3e084b8d 100644 --- a/extensions/Renameuser/i18n/bs.json +++ b/extensions/Renameuser/i18n/bs.json @@ -1,17 +1,19 @@ { "@metadata": { "authors": [ - "CERminator" + "CERminator", + "Srdjan m", + "Semso98" ] }, "renameuser": "Preimenuj korisnika", "renameuser-linkoncontribs": "preimenuj korisnika", "renameuser-linkoncontribs-text": "Preimenuj ovog korisnika", "renameuser-desc": "Dodaje [[Special:RenameUser|posebnu stranicu]] u svrhu promjene imena korisnika (zahtjeva pravo ''preimenovanja korisnika'')", - "renameuserold": "Trenutno ime korisnika:", + "renameuserold": "Trenutno korisniÄko ime:", "renameusernew": "Novo korisniÄko ime:", "renameuserreason": "Razlog promjene imena:", - "renameusermove": "PremjeÅ¡tanje korisnika i njegove stranice za razgovor (zajedno sa podstranicama) na novo ime", + "renameusermove": "Premjesti korisnika i njegove stranice za razgovor (zajedno sa podstranicama) na novo ime", "renameusersuppress": "Ne pravi preusmjerenja na novo ime", "renameuserreserve": "Blokiraj staro korisniÄko ime od kasnijeg koriÅ¡tenja", "renameuserwarnings": "Upozorenja:", @@ -23,11 +25,14 @@ "renameuser-error-request": "Nastao je problem pri prijemu zahtjeva.\nMolimo Vas da se vratite nazad i pokuÅ¡ate ponovo.", "renameuser-error-same-user": "Ne može se promijeniti ime korisnika u isto kao i ranije.", "renameusersuccess": "Ime korisnika \"$1\" je promijenjeno u \"$2\".", - "renameuser-page-exists": "Stranica $1 već postoji i ne može biti automatski prepisana.", + "renameuser-page-exists": "Stranica $1 već postoji i ne može se automatski presnimiti.", "renameuser-page-moved": "Stranica $1 je premjeÅ¡tena na $2.", "renameuser-page-unmoved": "Stranica $1 nije mogla biti premjeÅ¡tena na $2.", "log-name-renameuser": "Zapisnik preimenovanja korisnika", - "renameuser-move-log": "Automatski premjeÅ¡tena stranica pri promjeni korisniÄkog imena \"[[User:$1|$1]]\" u \"[[User:$2|$2]]\"", + "log-description-renameuser": "Ovo je zapisnik preimenovanja korisniÄkih raÄuna.", + "logentry-renameuser-renameuser": "$1 {{GENDER:$2|preimenovao|preimenovala}} je korisnika $4 (sa {{PLURAL:$6|$6 izmjene|$6 izmjena}}) u $5", + "logentry-renameuser-renameuser-legacier": "$1 preimenovao je korisnika $4 u $5", + "renameuser-move-log": "Automatski premjeÅ¡tena stranica zbog preimenovanja korisnika \"[[User:$1|$1]]\" u \"[[User:$2|$2]]\"", "right-renameuser": "Preimenovanje korisnika", "renameuser-renamed-notice": "Ovaj korisnik je promijenio ime.\nZapisnik preimenovanje je prikazan ispod kao referenca." } diff --git a/extensions/Renameuser/i18n/ce.json b/extensions/Renameuser/i18n/ce.json index 95a6992d..e6b96906 100644 --- a/extensions/Renameuser/i18n/ce.json +++ b/extensions/Renameuser/i18n/ce.json @@ -8,11 +8,11 @@ "renameuser": "Декъашхочун цӀе хийца", "renameuser-linkoncontribs": "декъашхочун цӀе хийца", "renameuser-linkoncontribs-text": "ЦӀе хийца хӀокху декъашхочун", - "renameuser-desc": "ТӀетуху декъашхойн цӀераш хийца [[Special:RenameUser|аьтту]] (оьшу бакъо renameuser)", + "renameuser-desc": "ТӀетуху декъашхойн цӀерш хийца [[Special:RenameUser|аьтту]] (оьшу бакъо renameuser)", "renameuserold": "Карара цӀе:", "renameusernew": "Керла декъашхочун цӀе", - "renameuserreason": "Бахьна:", - "renameusermove": "Иштта хийца декъашхочун агӀона а долара дийцаре а цера бухара агӀонийн а цӀераш", + "renameuserreason": "Бахьана:", + "renameusermove": "Иштта хийца декъашхочун агӀона а, долара дийцаре а цера бухара агӀонийн а цӀерш", "renameusersuppress": "Керла цӀеран тӀе дӀаÑахьажораг ма кхолла", "renameuserreserve": "ТӀейогӀу хана лелаÑн кеч йе шира цӀе", "renameuserwarnings": "ДӀахьедар:", @@ -28,12 +28,12 @@ "renameuser-page-exists": "ÐгÓо $1 йолуш ÑŽ цундела и ша юху дÓаÑзъÑн йиш Ñц.", "renameuser-page-moved": "ÐгӀона $1 цӀе хийцина → $2.", "renameuser-page-unmoved": "ÐгӀона $1 цӀе → $2 хуьйцийла Ñц.", - "log-name-renameuser": "Декъашхойн цӀераш хийцар долу тептар", - "log-description-renameuser": "ХӀокху тептар чохь гойту дӀабазбелла декъашхойн цӀераш хийцар.", + "log-name-renameuser": "Декъашхойн цӀерш хийцар долу тептар", + "log-description-renameuser": "ХӀокху тептар чохь гойту дӀабазбелла декъашхойн цӀерш хийцар.", "logentry-renameuser-renameuser": "$1 {{GENDER:$2|цӀе хийцина}} декъашхочун $4 ({{PLURAL:$6|$6 ниÑдар}}) → $5", "logentry-renameuser-renameuser-legacier": "$1 $4 декъашхочун цӀе хийцина → $5", "renameuser-move-log": "ÐвтоматичеÑки декъашхочун цӀе хийцина дела «[[User:$1|$1]]» → «[[User:$2|$2]]»", - "action-renameuser": "декъашхойн цӀераш хийцар", - "right-renameuser": "декъашхойн цӀераш хийцар", - "renameuser-renamed-notice": "ХӀокху декъашхочун цӀе хийцина хилла.\nЛахахьа гӀоьналлин гойтуш ду цӀераш хийцаран тептар." + "action-renameuser": "декъашхойн цӀерш хийцар", + "right-renameuser": "декъашхойн цӀерш хийцар", + "renameuser-renamed-notice": "ХӀокху декъашхочун цӀе хийцина хилла.\nЛахахьа гӀоьналлин гойтуш ду цӀерш хийцаран тептар." } diff --git a/extensions/Renameuser/i18n/cv.json b/extensions/Renameuser/i18n/cv.json index 9c386c89..4bbd63d4 100644 --- a/extensions/Renameuser/i18n/cv.json +++ b/extensions/Renameuser/i18n/cv.json @@ -1,9 +1,11 @@ { "@metadata": { "authors": [ - "FLAGELLVM DEI" + "FLAGELLVM DEI", + "Chuvash2014" ] }, "renameuserconfirm": "Çапла, хутшăнакан Ñтне улăштармалла", - "renameuser-page-moved": "$1 Ñтраницăн Ñтне $2 çине улăштарнă." + "renameuser-page-moved": "$1 Ñтраницăн Ñтне $2 çине улăштарнă.", + "log-name-renameuser": "ХутшăнаканÑен Ñтне улăштарнин логĕ" } diff --git a/extensions/Renameuser/i18n/de.json b/extensions/Renameuser/i18n/de.json index 313f3963..6744cdc1 100644 --- a/extensions/Renameuser/i18n/de.json +++ b/extensions/Renameuser/i18n/de.json @@ -7,7 +7,8 @@ "Raimond Spekking", "Spacebirdy", "The Evil IP address", - "Umherirrender" + "Umherirrender", + "J. 'mach' wust" ] }, "renameuser": "Benutzer umbenennen", @@ -40,5 +41,5 @@ "renameuser-move-log": "Seite während der Benutzerkontoumbenennung von „[[User:$1|$1]]“ in „[[User:$2|$2]]“ automatisch verschoben", "action-renameuser": "Benutzer umzubenennen", "right-renameuser": "Benutzer umbenennen", - "renameuser-renamed-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} wurde umbenannt.\nZur Information folgt das Benutzernamenänderungs-Logbuch." + "renameuser-renamed-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} wurde umbenannt.\nZur Information folgt das Benutzernamenänderungs-Logbuch." } diff --git a/extensions/Renameuser/i18n/en.json b/extensions/Renameuser/i18n/en.json index 40c7a111..fb330733 100644 --- a/extensions/Renameuser/i18n/en.json +++ b/extensions/Renameuser/i18n/en.json @@ -1,38 +1,38 @@ { - "@metadata": { - "authors": [] - }, - "renameuser": "Rename user", - "renameuser-linkoncontribs": "rename user", - "renameuser-linkoncontribs-text": "Rename this user", - "renameuser-desc": "Adds a [[Special:RenameUser|special page]] to rename a user (need ''renameuser'' right)", - "renameuser-summary": "", - "renameuserold": "Current username:", - "renameusernew": "New username:", - "renameuserreason": "Reason:", - "renameusermove": "Move user and talk pages (and their subpages) to new name", - "renameusersuppress": "Do not create redirects to the new name", - "renameuserreserve": "Block the old username from future use", - "renameuserwarnings": "Warnings:", - "renameuserconfirm": "Yes, rename the user", - "renameusersubmit": "Submit", - "renameuser-submit-blocklog": "Show block log for user", - "renameusererrordoesnotexist": "The user \"$1\" does not exist.", - "renameusererrorexists": "The user \"$1\" already exists.", - "renameusererrorinvalid": "The username \"$1\" is invalid.", - "renameuser-error-request": "There was a problem with receiving the request.\nPlease go back and try again.", - "renameuser-error-same-user": "You cannot rename a user to the same thing as before.", - "renameusersuccess": "The user \"$1\" has been renamed to \"$2\".", - "renameuser-page-exists": "The page $1 already exists and cannot be automatically overwritten.", - "renameuser-page-moved": "The page $1 has been moved to $2.", - "renameuser-page-unmoved": "The page $1 could not be moved to $2.", - "log-name-renameuser": "User rename log", - "log-description-renameuser": "This is a log of changes to user names.", - "logentry-renameuser-renameuser": "$1 {{GENDER:$2|renamed}} user $4 ({{PLURAL:$6|$6 edit|$6 edits}}) to $5", - "logentry-renameuser-renameuser-legacier": "$1 renamed user $4 to $5", - "logentry-renameuser-renameuser-legaciest": "$1", - "renameuser-move-log": "Automatically moved page while renaming the user \"[[User:$1|$1]]\" to \"[[User:$2|$2]]\"", - "action-renameuser": "rename users", - "right-renameuser": "Rename users", - "renameuser-renamed-notice": "This user has been renamed.\nThe rename log is provided below for reference." + "@metadata": { + "authors": [] + }, + "renameuser": "Rename user", + "renameuser-linkoncontribs": "rename user", + "renameuser-linkoncontribs-text": "Rename this user", + "renameuser-desc": "Adds a [[Special:RenameUser|special page]] to rename a user (need ''renameuser'' right)", + "renameuser-summary": "", + "renameuserold": "Current username:", + "renameusernew": "New username:", + "renameuserreason": "Reason:", + "renameusermove": "Move user and talk pages (and their subpages) to new name", + "renameusersuppress": "Do not create redirects to the new name", + "renameuserreserve": "Block the old username from future use", + "renameuserwarnings": "Warnings:", + "renameuserconfirm": "Yes, rename the user", + "renameusersubmit": "Submit", + "renameuser-submit-blocklog": "Show block log for user", + "renameusererrordoesnotexist": "The user \"$1\" does not exist.", + "renameusererrorexists": "The user \"$1\" already exists.", + "renameusererrorinvalid": "The username \"$1\" is invalid.", + "renameuser-error-request": "There was a problem with receiving the request.\nPlease go back and try again.", + "renameuser-error-same-user": "You cannot rename a user to the same thing as before.", + "renameusersuccess": "The user \"$1\" has been renamed to \"$2\".", + "renameuser-page-exists": "The page $1 already exists and cannot be automatically overwritten.", + "renameuser-page-moved": "The page $1 has been moved to $2.", + "renameuser-page-unmoved": "The page $1 could not be moved to $2.", + "log-name-renameuser": "User rename log", + "log-description-renameuser": "This is a log of changes to user names.", + "logentry-renameuser-renameuser": "$1 {{GENDER:$2|renamed}} user $4 ({{PLURAL:$6|$6 edit|$6 edits}}) to $5", + "logentry-renameuser-renameuser-legacier": "$1 renamed user $4 to $5", + "logentry-renameuser-renameuser-legaciest": "$1", + "renameuser-move-log": "Automatically moved page while renaming the user \"[[User:$1|$1]]\" to \"[[User:$2|$2]]\"", + "action-renameuser": "rename users", + "right-renameuser": "Rename users", + "renameuser-renamed-notice": "This user has been renamed.\nThe rename log is provided below for reference." } diff --git a/extensions/Renameuser/i18n/eo.json b/extensions/Renameuser/i18n/eo.json index a0cbabf9..6ad80ddd 100644 --- a/extensions/Renameuser/i18n/eo.json +++ b/extensions/Renameuser/i18n/eo.json @@ -7,9 +7,9 @@ "KuboF" ] }, - "renameuser": "Alinomigi uzanton", - "renameuser-linkoncontribs": "renomigi uzanton", - "renameuser-linkoncontribs-text": "Renomigi ĉi tiun uzanton", + "renameuser": "Alinomi uzanton", + "renameuser-linkoncontribs": "alinomi uzanton", + "renameuser-linkoncontribs-text": "Alinomi ĉi tiun uzanton", "renameuser-desc": "Aldonas [[Special:RenameUser|specialan paÄon]] por alinomigi uzanton (bezonas rajton ''renameuser'')", "renameuserold": "Aktuala salutnomo:", "renameusernew": "Nova salutnomo:", @@ -18,21 +18,21 @@ "renameusersuppress": "Ne krei alidirektilojn al la nova nomo", "renameuserreserve": "Teni la malnovan salutnomon de plua uzo", "renameuserwarnings": "Avertoj:", - "renameuserconfirm": "Jes, renomigu la uzanton", + "renameuserconfirm": "Jes, alinomu la uzanton", "renameusersubmit": "Ek", "renameuser-submit-blocklog": "Montru forbarprotokolon de la uzulo", "renameusererrordoesnotexist": "La uzanto \"$1\" ne ekzistas", "renameusererrorexists": "La uzanto \"$1\" jam ekzistas", "renameusererrorinvalid": "La salutnomo \"$1\" estas malvalida", "renameuser-error-request": "Estis problemo recivante la peton.\nBonvolu retroigi kaj reprovi.", - "renameuser-error-same-user": "Vi ne povas alinomigi uzanton al la sama nomo.", + "renameuser-error-same-user": "Vi ne povas alinomi uzanton al la sama nomo.", "renameusersuccess": "La uzanto \"$1\" estas alinomita al \"$2\"", "renameuser-page-exists": "La paÄo $1 jam ekzistas kaj ne povas esti aÅ­tomate anstataÅ­ata.", "renameuser-page-moved": "La paÄo $1 estis movita al $2.", "renameuser-page-unmoved": "La paÄo $1 ne povis esti movita al $2.", "log-name-renameuser": "Protokolo pri alinomigoj de uzantoj", "log-description-renameuser": "Jen protokolo pri ÅanÄoj de salutnomoj.", - "logentry-renameuser-renameuser": "$1 {{GENDER:$2|alinomiÄis}} uzanton $4 ({{PLURAL:$6|$6 redakto|$6 redaktoj}}) al $5", + "logentry-renameuser-renameuser": "$1 {{GENDER:$2|alinomis}} uzanton $4 ({{PLURAL:$6|$6 redakto|$6 redaktoj}}) al $5", "logentry-renameuser-renameuser-legacier": "$1 alinomis uzanton $4 al $5", "renameuser-move-log": "AÅ­tomate movis paÄon dum alinomigo de la uzanto \"[[User:$1|$1]]\" al \"[[User:$2|$2]]\"", "action-renameuser": "Alinomigi uzantojn", diff --git a/extensions/Renameuser/i18n/es.json b/extensions/Renameuser/i18n/es.json index 045ee003..525ef0ea 100644 --- a/extensions/Renameuser/i18n/es.json +++ b/extensions/Renameuser/i18n/es.json @@ -15,27 +15,28 @@ "Sanbec", "Spacebirdy", "Translationista", - "Vivaelcelta" + "Vivaelcelta", + "Macofe" ] }, - "renameuser": "Cambiar el nombre de usuario", - "renameuser-linkoncontribs": "cambiar el nombre de este usuario", - "renameuser-linkoncontribs-text": "Cambiar el nombre de este usuario", - "renameuser-desc": "Añade una [[Special:RenameUser|página especial]] para cambiar de nombre a un usuario (necesita el derecho ''renameuser'')", - "renameuserold": "Nombre actual:", - "renameusernew": "Nuevo nombre de usuario:", + "renameuser": "Renombrar usuario", + "renameuser-linkoncontribs": "renombrar usuario", + "renameuser-linkoncontribs-text": "Renombrar a este usuario", + "renameuser-desc": "Añade una [[Special:RenameUser|página especial]] para renombrar a un usuario (necesita el permiso ''renameuser'')", + "renameuserold": "Nombre de usuario actual:", + "renameusernew": "Nombre de usuario nuevo:", "renameuserreason": "Motivo:", "renameusermove": "Trasladar las páginas de usuario y de discusión (y sus subpáginas) al nuevo nombre", "renameusersuppress": "No crear redirecciones al nuevo nombre", "renameuserreserve": "Bloquear el antiguo nombre de usuario para evitar que sea usado en el futuro", "renameuserwarnings": "Avisos:", - "renameuserconfirm": "Sí, cambiar el nombre del usuario", + "renameuserconfirm": "Sí, renombrar al usuario", "renameusersubmit": "Enviar", "renameuser-submit-blocklog": "Mostrar el registro de bloqueo para el usuario", - "renameusererrordoesnotexist": "El usuario «$1» no existe", - "renameusererrorexists": "El usuario «$1» ya existe", - "renameusererrorinvalid": "El nombre de usuario «$1» no es válido", - "renameuser-error-request": "Hubo un problema al recibir la solicitud.\nPor favor, vuelve atrás e inténtalo de nuevo.", + "renameusererrordoesnotexist": "El usuario «$1» no existe.", + "renameusererrorexists": "El usuario «$1» ya existe.", + "renameusererrorinvalid": "El nombre de usuario «$1» no es válido.", + "renameuser-error-request": "Hubo un problema al recibir la solicitud.\nRegresa e inténtalo de nuevo.", "renameuser-error-same-user": "No puedes renombrar a un usuario con el nombre que ya tenía.", "renameusersuccess": "El nombre de usuario «$1» ha sido modificado a «$2»", "renameuser-page-exists": "La página $1 ya existe y no puede ser reemplazada automáticamente.", @@ -46,7 +47,7 @@ "logentry-renameuser-renameuser": "$1 {{GENDER:$2|modificó el nombre}} del usuario $4 ({{PLURAL:$6|$6 edición|$6 ediciones}}) a $5", "logentry-renameuser-renameuser-legacier": "$1 ha cambiado el nombre del usuario $4 a $5", "renameuser-move-log": "Página trasladada automáticamente al cambiar el nombre de usuario de «[[User:$1|$1]]» a «[[User:$2|$2]]»", - "action-renameuser": "Cambiar el nombre de los usuarios", - "right-renameuser": "Cambiar el nombre de los usuarios", - "renameuser-renamed-notice": "El nombre de este usuario ha sido modificado.\nEl registro de cambios de nombre de usuario se provee debajo para mayor referencia." + "action-renameuser": "renombrar usuarios", + "right-renameuser": "Renombrar usuarios", + "renameuser-renamed-notice": "{{GENDER:$1|Este usuario|Esta usuaria}} se ha renombrado.\nEl registro de cambios de nombre de usuario se provee debajo para mayor referencia." } diff --git a/extensions/Renameuser/i18n/fa.json b/extensions/Renameuser/i18n/fa.json index 7960bd9f..4f87db34 100644 --- a/extensions/Renameuser/i18n/fa.json +++ b/extensions/Renameuser/i18n/fa.json @@ -39,5 +39,5 @@ "renameuser-move-log": "صÙحه در ضمن تغییر نام کاربر «[[User:$1|$1]]» به «[[User:$2|$2]]» به طور خودکار منتقل شد", "action-renameuser": "تغییر نام کاربران", "right-renameuser": "تغییر نام کاربران", - "renameuser-renamed-notice": "این کاربر تغییر نام داده‌است.\nسیاهه تغییر نام در ادامه آمده است." + "renameuser-renamed-notice": "این کاربر تغییر نام داده است.\nسیاهه تغییر نام در ادامه آمده است." } diff --git a/extensions/Renameuser/i18n/fy.json b/extensions/Renameuser/i18n/fy.json index 50a0d214..01f2f9b5 100644 --- a/extensions/Renameuser/i18n/fy.json +++ b/extensions/Renameuser/i18n/fy.json @@ -11,11 +11,11 @@ "renameuserold": "Alde namme:", "renameusernew": "Nije namme:", "renameuserreason": "Reden:", - "renameusermove": "Werneam meidogger en oerlis siden (mei ûnderlizzende siden) nei de nije namme", + "renameusermove": "Meidoggersside en oerlissiden omneame (mei ûnderlizzende siden) nei de nije namme", "renameuserreserve": "Takomst brûken fan de âlde meidoggersnamme foarkomme", "renameuserwarnings": "Warskôgings:", "renameuserconfirm": "Ja, feroarje de namme fan de meidogger", - "renameusersubmit": "Feroarje", + "renameusersubmit": "Ferstjoere", "renameusererrordoesnotexist": "Der is gjin meidogger mei de namme \"$1\"", "renameusererrorexists": "De meidochnamme \"$1\" wurdt al brûkt.", "renameusererrorinvalid": "De meidochnamme \"$1\" mei net.", diff --git a/extensions/Renameuser/i18n/he.json b/extensions/Renameuser/i18n/he.json index f5345946..72daa008 100644 --- a/extensions/Renameuser/i18n/he.json +++ b/extensions/Renameuser/i18n/he.json @@ -35,7 +35,7 @@ "renameuser-page-unmoved": "×œ× × ×™×ª×Ÿ ×”×™×” להעביר ×ת הדף $1 ל$2.", "log-name-renameuser": "יומן שינויי שמות משתמש", "log-description-renameuser": "זהו יומן ×”×©×™× ×•×™×™× ×‘×©×ž×•×ª המשתמשי×.", - "logentry-renameuser-renameuser": "$1 {{GENDER:$2|שינה|שינתה}} ×ת ×©× ×”×ž×©×ª×ž×© $4 ‏({{PLURAL:$6|עריכה ×חת|$6 עריכות}}) ×ל $5", + "logentry-renameuser-renameuser": "$1 {{GENDER:$2|שינה|שינתה}} ×ת ×©× ×”×ž×©×ª×ž×© $4 ‏({{PLURAL:$6|עריכה ×חת|$6 עריכות}}) ×ל $5‏", "logentry-renameuser-renameuser-legacier": "$1 {{GENDER:$2|שינה|שינתה}} ×ת ×©× ×”×ž×©×ª×ž×© $4 ל{{GRAMMAR:תחילית|$5}}‏", "renameuser-move-log": "העברה ×וטומטית בעקבות שינוי ×©× ×”×ž×©×ª×ž×© \"[[User:$1|$1]]\" ל־\"[[User:$2|$2]]\"", "action-renameuser": "לשנות שמות משתמש", diff --git a/extensions/Renameuser/i18n/id.json b/extensions/Renameuser/i18n/id.json index 1ffdea17..0a447bb5 100644 --- a/extensions/Renameuser/i18n/id.json +++ b/extensions/Renameuser/i18n/id.json @@ -21,7 +21,7 @@ "renameuserwarnings": "Peringatan:", "renameuserconfirm": "Ya, ganti nama pengguna tersebut", "renameusersubmit": "Kirim", - "renameuser-submit-blocklog": "Tampilkan log pemblokiran pengguna", + "renameuser-submit-blocklog": "Tampilkan catatan pemblokiran pengguna", "renameusererrordoesnotexist": "Pengguna \"$1\" tidak ada", "renameusererrorexists": "Pengguna \"$1\" telah ada", "renameusererrorinvalid": "Nama pengguna \"$1\" tidak sah", @@ -31,7 +31,7 @@ "renameuser-page-exists": "Halaman $1 telah ada dan tidak dapat ditimpa secara otomatis.", "renameuser-page-moved": "Halaman $1 telah dipindah ke $2.", "renameuser-page-unmoved": "Halaman $1 tidak dapat dipindah ke $2.", - "log-name-renameuser": "Log penggantian nama pengguna", + "log-name-renameuser": "Catatan penggantian nama pengguna", "log-description-renameuser": "Di bawah ini adalah log penggantian nama pengguna", "renameuser-move-log": "Secara otomatis memindahkan halaman sewaktu mengganti nama pengguna \"[[User:$1|$1]]\" menjadi \"[[User:$2|$2]]\"", "action-renameuser": "ganti nama pengguna", diff --git a/extensions/Renameuser/i18n/ilo.json b/extensions/Renameuser/i18n/ilo.json index f60cb464..f6c56577 100644 --- a/extensions/Renameuser/i18n/ilo.json +++ b/extensions/Renameuser/i18n/ilo.json @@ -27,10 +27,10 @@ "renameuser-page-exists": "Ti panid a $1 ket addaan ken saan a mautomatiko a suratan manen.", "renameuser-page-moved": "Ti panid $1 ket naiyalisen idiay $2.", "renameuser-page-unmoved": "Ti panid $1 ket saan a maiyalis idiay $2.", - "log-name-renameuser": "Listaan ti panaginaganan manen ti agar-aramat", + "log-name-renameuser": "Listaan ti pananginagan manen ti agar-aramat", "log-description-renameuser": "Daytoy ket listaan kadagiti panagbalbaliw kadagiti nagan ti agar-aramat.", - "logentry-renameuser-renameuser": "Ni $1 ket {{GENDER:$2|ninagananna}} ti agar-aramat a ni $4 ({{PLURAL:$6|$6 nga inurnos|$6 kadagiti inurnos}}) iti $5", - "logentry-renameuser-renameuser-legacier": "Ni $1 ket ninagananna ti agar-aramat a ni $4 iti $5", + "logentry-renameuser-renameuser": "{{GENDER:$2|Ninaganan manen}} ni $1 ni agar-aramat $4 ({{PLURAL:$6|$6 nga inurnos|$6 nga inur-urnos}}) iti $5", + "logentry-renameuser-renameuser-legacier": "Ninaganan manen ni $1 ni agar-aramat $4 iti $5", "renameuser-move-log": "Automatiko nga iyalis ti panid bayat a nagnaganan manen ti agar-aramat \"[[User:$1|$1]]\" iti \"[[User:$2|$2]]\"", "action-renameuser": "inaganan manen dagiti agar-aramat", "right-renameuser": "Inaganan manen dagiti agar-aramat", diff --git a/extensions/Renameuser/i18n/jut.json b/extensions/Renameuser/i18n/jut.json index e9e7419e..ae4945e4 100644 --- a/extensions/Renameuser/i18n/jut.json +++ b/extensions/Renameuser/i18n/jut.json @@ -2,25 +2,26 @@ "@metadata": { "authors": [ "HuslÃ¥ke", - "ÆlsÃ¥n" + "ÆlsÃ¥n", + "Jyllanj" ] }, - "renameuser": "Gæf æ bruger en ny navn", - "renameuser-desc": "Gæf en bruger en ny navn (''renameuser'' regt er nøteg)", - "renameuserold": "Nuværende brugernavn:", - "renameusernew": "Ny brugernavn:", + "renameuser": "Omdøb bruge", + "renameuser-desc": "Lawe en [[Special:RenameUser|specialsiid]] te Ã¥ omdøb i bruge (kräwe rettiheden ''renameuser'')", + "renameuserold": "Nuwærenje brugenaun:", + "renameusernew": "Ny brugenaun:", "renameuserreason": "Før hvat dett'er dun:", - "renameusermove": "Flyt bruger og diskusje sider (og deres substrøk) til ny navn", - "renameusersubmit": "GÃ¥ til", - "renameusererrordoesnotexist": "Æ bruger \"$1\" bestä ekke.", - "renameusererrorexists": "Æ bruger \"$1\" er Ã¥l.", - "renameusererrorinvalid": "Æ brugernavn \"$1\" er ogyldegt.", - "renameuser-error-request": "Her har en prÃ¥blæm ve enkriige der anfrÃ¥ge. GÃ¥ hen og prÃ¥bær nurmÃ¥l.", - "renameuser-error-same-user": "Du kenst ekke hernÃ¥m æ bruger til æselbste nÃ¥m als dafør.", - "renameusersuccess": "Æ bruger \"$1\" er hernÃ¥mt til \"$2\".", - "renameuser-page-exists": "Æ pæge $1 er Ã¥l og ken ekke Ã¥tÃ¥matisk Ã¥verflyttet være.", - "renameuser-page-moved": "Æ pæge $1 er flyttet til $2.", - "renameuser-page-unmoved": "Æ pæge $1 kon ekke flyttet være til $2.", - "log-name-renameuser": "Bruger hernÃ¥m log", - "renameuser-move-log": "Ã…tÃ¥matisk flyttet pæge hviil hernÃ¥m der bruger \"[[User:$1|$1]]\" til \"[[User:$2|$2]]\"" + "renameusermove": "Flytt bruge- Ã¥ diskusjonsside (Ã¥ dæes unjeside) te ny naun", + "renameusersubmit": "Omdøb", + "renameusererrordoesnotexist": "Brugari \"$1\" finjs ett.", + "renameusererrorexists": "Brugari \"$1\" finjs Ã¥llried.", + "renameusererrorinvalid": "Brugenaune \"$1\" ä udjylji.", + "renameuser-error-request": "Dä war e problem mä Ã¥ modta forspöyrgsle.\nGo wenlist tebag Ã¥ forsyeg idjen.", + "renameuser-error-same-user": "Du kan ett omdøb i bruge te sam naune som förr.", + "renameusersuccess": "Brugari \"$1\" ä bløwen omdøbtj te \"$2\".", + "renameuser-page-exists": "Siden $1 eksistiire Ã¥llried Ã¥ kan ett automatisk öweskriiws.", + "renameuser-page-moved": "Siden $1 ä flytten te $2.", + "renameuser-page-unmoved": "Siden $1 ku ett flytts te $2.", + "log-name-renameuser": "Brugeomdøbnengslogg", + "renameuser-move-log": "Siid automatisk flytten we omdøbneng Ã¥ bruge \"[[User:$1|$1]]\" te \"[[User:$2|$2]]\"" } diff --git a/extensions/Renameuser/i18n/kk-cyrl.json b/extensions/Renameuser/i18n/kk-cyrl.json index 57cfd6fb..34c2ae83 100644 --- a/extensions/Renameuser/i18n/kk-cyrl.json +++ b/extensions/Renameuser/i18n/kk-cyrl.json @@ -30,8 +30,8 @@ "renameuser-page-unmoved": "$1 деген бет $2 деген бетке жылжытылмады.", "log-name-renameuser": "ҚатыÑушыны еÑімін өзгеру журналы", "log-description-renameuser": "Бұл қатыÑушы еÑімдерін өзгерту журналы.", - "logentry-renameuser-renameuser": "$1 қатыÑушы еÑімін $4 дегеннен ({{PLURAL:$6|$6 өңдеме жаÑаған|$6 өңдеме жаÑаған}}) $5 дегенге {{GENDER:$2|өзгерті}}", - "logentry-renameuser-renameuser-legacier": "$1 қатыÑушы еÑімін $4 дегеннен $5 дегенге өзгерті", + "logentry-renameuser-renameuser": "$1 қатыÑушы еÑімін $4 дегеннен ({{PLURAL:$6|$6 өңдеме жаÑаған|$6 өңдеме жаÑаған}}) $5 дегенге {{GENDER:$2|өзгертті}}", + "logentry-renameuser-renameuser-legacier": "$1 қатыÑушы еÑімін $4 дегеннен $5 дегенге өзгертті", "renameuser-move-log": "«[[User:$1|$1]]» деген қатыÑушы атын «[[User:$2|$2]]» дегенге өзгерткенде бет өздігінен жылжытылды", "action-renameuser": "қатыÑушылардың еÑімін өзгерту", "right-renameuser": "ҚатыÑушылардың еÑімін өзгерту", diff --git a/extensions/Renameuser/i18n/ko.json b/extensions/Renameuser/i18n/ko.json index 5d9de7c0..9cac4299 100644 --- a/extensions/Renameuser/i18n/ko.json +++ b/extensions/Renameuser/i18n/ko.json @@ -39,5 +39,5 @@ "renameuser-move-log": "\"[[User:$1|$1]]\" 사용ìžë¥¼ \"[[User:$2|$2]]\" 사용ìžë¡œ 바꾸면서 문서를 ìžë™ìœ¼ë¡œ 옮겼습니다", "action-renameuser": "ì‚¬ìš©ìž ì´ë¦„ì„ ë°”ê¿€", "right-renameuser": "ì‚¬ìš©ìž ì´ë¦„ 바꾸기", - "renameuser-renamed-notice": "ì´ ì‚¬ìš©ìžì˜ ì´ë¦„ì„ ë°”ê¾¸ì—ˆìŠµë‹ˆë‹¤.\nì•„ëž˜ì˜ ì´ë¦„ 바꾸기 기ë¡ì„ 참고하십시오." + "renameuser-renamed-notice": "ì´ ì‚¬ìš©ìžì˜ ì´ë¦„ì„ ë°”ê¾¸ì—ˆìŠµë‹ˆë‹¤.\nì•„ëž˜ì˜ ì´ë¦„ 바꾸기 기ë¡ì„ 참조하십시오." } diff --git a/extensions/Renameuser/i18n/krc.json b/extensions/Renameuser/i18n/krc.json index e016a6cd..b7e54c49 100644 --- a/extensions/Renameuser/i18n/krc.json +++ b/extensions/Renameuser/i18n/krc.json @@ -4,6 +4,35 @@ "Iltever" ] }, + "renameuser": "Къошулуучуну атын ауушдур", "renameuser-linkoncontribs": "къошулуучуну атын ауушдур", - "log-name-renameuser": "Къошулуучуланы атларын ауушдуруу журнал" + "renameuser-linkoncontribs-text": "Бу къошулуучуну атын ауушдур", + "renameuser-desc": "Къошулуучуну атын ауушдуруу [[Special:RenameUser|мадарны]] къошады (renameuser Ñркинлик керек боллукъду)", + "renameuserold": "БуÑагъатдагъы къошулуучу аты:", + "renameusernew": "Дангы къошулуучу аты:", + "renameuserreason": "Чурум:", + "renameusermove": "Дагъыда къошулуучу бетини, Ñнчи Ñюзюуюню Ñм аланы тюббетлерини атларын ауушдур", + "renameusersuppress": "Джангы атха редиректле къурама", + "renameuserreserve": "ЭÑки къошулуучу атны артда да хайырландырыр ючюн Ñ€ÐµÐ·ÐµÑ€Ð²Ð°Ñ†Ð¸Ñ ÑÑ‚", + "renameuserwarnings": "Ð­Ñ Ð±Ñ‘Ð»ÑŽÐ³ÑŽÐ·:", + "renameuserconfirm": "Хо, къошулуучуну атын ауушдур", + "renameusersubmit": "Тындыр", + "renameuser-submit-blocklog": "Къошулуучуну блок Ñтилиу журналын кёргюз", + "renameusererrordoesnotexist": "«$1» ат бла къошулуучу региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñтилмегенди.", + "renameusererrorexists": "«$1» ат бла къошулуучу алгъадан региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñтилиб турады.", + "renameusererrorinvalid": "«$1» деген ат джарамагъан атды.", + "renameuser-error-request": "Сапаришни алыу бла тыйгъычла чыкъдыла.\nÐртха къайтыгъыз да, джангыдан кёрюгюз.", + "renameuser-error-same-user": "Ðлгъадан болгъан атынгы джангыдан берирге болмайды.", + "renameusersuccess": "«$1» къошулуучуна аты «$2» деб ауушдурулду.", + "renameuser-page-exists": "$1 бет алгъадан да барды Ñм автомат халда джангыдан джазылмайды.", + "renameuser-page-moved": "$1 бетни аты $2 деб ауушдурулду.", + "renameuser-page-unmoved": "$1 бетни атын $2 деб ауушдурургъа болмайды.", + "log-name-renameuser": "Къошулуучуланы атларын ауушдуруу журнал", + "log-description-renameuser": "Бу, региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñтилген къошулуучуланы атларыны ауушдурулгъанларыны журналыды.", + "logentry-renameuser-renameuser": "$1, $4 ({{PLURAL:$6|$6 тюрлендириую}}) къошулуучуну атын $5 деб {{GENDER:$2|ауушдурду}}", + "logentry-renameuser-renameuser-legacier": "$1, $4 къошулуучуна атын $5 деб ауушдурду", + "renameuser-move-log": "«[[User:$1|$1]]» тергеу джазыу «[[User:$2|$2]]» деб ауушдурулгъаны Ñебебли автомат халда", + "action-renameuser": "къошулуучуланы атларын ауушдуруу", + "right-renameuser": "Къошулуучуланы атларын ауушдуруу", + "renameuser-renamed-notice": "Бу къошулуучуну аты ауушдурулду.\nТюбюрекде ат ауушдуруу журнал бериледи." } diff --git a/extensions/Renameuser/i18n/ksh.json b/extensions/Renameuser/i18n/ksh.json index f42ce440..2bae086e 100644 --- a/extensions/Renameuser/i18n/ksh.json +++ b/extensions/Renameuser/i18n/ksh.json @@ -7,9 +7,9 @@ "renameuser": "Metmaacher ömdäufe", "renameuser-linkoncontribs": "Metmaacher ömnänne", "renameuser-linkoncontribs-text": "Heh dä Metmaacher ömnänne", - "renameuser-desc": "[[Special:RenameUser|Metmaacher ömdäufe]] — ävver do bruch mer et Rääsch „renameuser“ för.", - "renameuserold": "Dä ahle Metmaacher-Name", - "renameusernew": "Dä neue Metmaacher-Name", + "renameuser-desc": "[[Special:RenameUser|Metmaacher ömdäufe]] — ävver doh bruch mer et Rääsch „renameuser“ för.", + "renameuserold": "Dä ahle Metmaacher_Nahme", + "renameusernew": "Dä neuje Metmaacher_Nahme", "renameuserreason": "Dä Jrond för et Ömdäufe:", "renameusermove": "De Metmaachersigg met Klaaf- un Ungersigge op dä neue Metmaacher-Name ömstelle", "renameusersuppress": "Donn kein Ömleidong op dä neue Name aanlääje", @@ -22,17 +22,17 @@ "renameusererrorexists": "Ene Metmaacher met däm Name „$1“ jit et ald.", "renameusererrorinvalid": "Ene Metmaacher-Name eß „$1“ ävver nit, dä wöhr nit richtich.", "renameuser-error-request": "Mer hatte e Problem met Dingem Opdrach.\nBes esu joot un versöök et noch ens.", - "renameuser-error-same-user": "Do Tuppes! Der ahle un der neue Name es dersellve. Do bengk et Ömdäufe jaanix.", + "renameuser-error-same-user": "Do Tuppes! Der ahle un der neue Nahme es dersellve. Do brängk et Ömdäufe jaanix.", "renameusersuccess": "Dä Metmaacher „$1“ es jetz op „$2“ ömjedäuf.", "renameuser-page-exists": "De Sigg $1 es ald doh, un mer könne se nit automatesch övverschrieve", "renameuser-page-moved": "De Sigg wood vun „$1“ op „$2“ ömjenannt.", "renameuser-page-unmoved": "Di Sigg „$1“ kunnt nit op „$2“ ömjenannt wääde.", - "log-name-renameuser": "Logboch vum Metmaacher-Ömdäufe", - "log-description-renameuser": "Dat es et Logboch vun de ömjedäufte Metmaachere", + "log-name-renameuser": "Logbohch vum Metmaacher-Ömdäufe", + "log-description-renameuser": "Dat es et Logbohch vun de ömjedäufte Metmaachere", "logentry-renameuser-renameuser": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 Hät dä Metmaacher „$4“, dä {{PLURAL:$6|ein Änderong|$6 Änderonge|kein Änderonge}} aam Wikki jemaat hät, op „$5“ ömjedäuf.", "logentry-renameuser-renameuser-legacier": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 Hät dä Metmaacher „$4“ op „$5“ ömjedäuf.", "renameuser-move-log": "Di Sigg weet automatesch ömjenannt weil mer dä Metmaacher „[[User:$1|$1]]“ op „[[User:$2|$2]]“ öm am däufe sin.", - "action-renameuser": "Metmaacher ömdäufe", + "action-renameuser": "Metmaacher ömzedäufe", "right-renameuser": "Metmaacher ömdäufe", - "renameuser-renamed-notice": "Dä Metmaacher es ömjenannt woode.\nDat kanns De unge en däm Ußzoch uss_em Logbooch vum Metmacher Ömnänne fenge." + "renameuser-renamed-notice": "Dä Metmaacher es ömjenannt woode.\nDat kanns De unge en däm Ußzoch uss_em Logbohch vum Metmaacher_Ömnänne fenge." } diff --git a/extensions/Renameuser/i18n/ku-latn.json b/extensions/Renameuser/i18n/ku-latn.json index 6653c24e..42d2835b 100644 --- a/extensions/Renameuser/i18n/ku-latn.json +++ b/extensions/Renameuser/i18n/ku-latn.json @@ -3,7 +3,8 @@ "authors": [ "George Animal", "Ghybu", - "Gomada" + "Gomada", + "Bikarhêner" ] }, "renameuser": "Navê bikarhêner biguherîne", @@ -11,7 +12,7 @@ "renameuser-linkoncontribs-text": "Navê vî bikarhênerî biguherîne", "renameuserold": "Navê niha:", "renameusernew": "Navê nû:", - "renameuserreason": "Sedema navguherandinê:", + "renameuserreason": "Sedem:", "renameusermove": "Rûpelên bikarhêner û gotûbêjê xwe (û binrûpelên xwe) bigerîne berve navê nû", "renameuserwarnings": "HiÅŸyarî:", "renameuserconfirm": "Erê, navê vî bikarhênerî biguherîne", diff --git a/extensions/Renameuser/i18n/ne.json b/extensions/Renameuser/i18n/ne.json index 9ba5aa09..917797b1 100644 --- a/extensions/Renameuser/i18n/ne.json +++ b/extensions/Renameuser/i18n/ne.json @@ -1,7 +1,13 @@ { - "@metadata": [], + "@metadata": { + "authors": [ + "NehalDaveND" + ] + }, "renameuserold": "अहिलेको पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ नाम:", "renameusernew": "नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ नाम:", + "renameuserreason": "कारण:", + "renameuserwarnings": "चेतावनीहरू:", "renameusersubmit": "बà¥à¤à¤¾à¤‰à¤¨à¥‡", "renameuser-page-exists": "$1 पृषà¥à¤  पहिले देखि नै रहेको छ र सà¥à¤µà¤¤: अधिलेखन गरà¥à¤¨ सकिà¤à¤¨ ।", "renameuser-page-moved": " $1 पृषà¥à¤ à¤²à¤¾à¤ˆ $2 मा सारियो ।", diff --git a/extensions/Renameuser/i18n/nn.json b/extensions/Renameuser/i18n/nn.json index 5664917c..f08b78d6 100644 --- a/extensions/Renameuser/i18n/nn.json +++ b/extensions/Renameuser/i18n/nn.json @@ -10,16 +10,18 @@ }, "renameuser": "Døyp om brukar", "renameuser-linkoncontribs": "døyp om brukar", - "renameuser-desc": "Legg til ei [[Special:RenameUser|spesialsida]] for Ã¥ døypa om ein brukar (krev ''renameuser''-rettar)", + "renameuser-linkoncontribs-text": "Byt namn pÃ¥ brukaren", + "renameuser-desc": "Legg til ei [[Special:RenameUser|spesialside]] for Ã¥ døypa om ein brukar (krev ''renameuser''-rettar)", "renameuserold": "Brukarnamn no:", "renameusernew": "Nytt brukarnamn:", - "renameuserreason": "Ã…rsak for omdøyping:", + "renameuserreason": "Ã…rsak:", "renameusermove": "Flytt brukar- og brukardiskusjonssider (og undersidene deira) til nytt namn", "renameusersuppress": "Ikkje opprett omdirigeringar til det nye namnet", "renameuserreserve": "Blokker det gamle brukarnamnet for framtidig bruk", "renameuserwarnings": "Ã…tvaringar:", "renameuserconfirm": "Ja, endra namn pÃ¥ brukaren", "renameusersubmit": "Utfør", + "renameuser-submit-blocklog": "SjÃ¥ blokkeringslogg for brukaren", "renameusererrordoesnotexist": "Brukaren «$1» finst ikkje.", "renameusererrorexists": "Brukaren «$1» finst allereie.", "renameusererrorinvalid": "Brukarnamnet «$1» er ikkje gyldig.", @@ -30,7 +32,11 @@ "renameuser-page-moved": "Sida $1 har vorte flytta til $2.", "renameuser-page-unmoved": "Sida $1 kunne ikkje verta flytta til $2.", "log-name-renameuser": "Logg over brukarnamnendringar", + "log-description-renameuser": "Dette er ein logg over brukarnamnendringar.", + "logentry-renameuser-renameuser": "$1 {{GENDER:$2|omnemna}} brukaren $4 ({{PLURAL:$6|éi endring|$6 endringar}}) til $5", + "logentry-renameuser-renameuser-legacier": "$1 omnemna brukaren $4 til $5", "renameuser-move-log": "Flytta sida automatisk under omdøyping av brukaren «[[User:$1|$1]]» til «[[User:$2|$2]]»", + "action-renameuser": "omnemna brukarar", "right-renameuser": "Døypa om brukarar", - "renameuser-renamed-notice": "Denne brukaren har fÃ¥tt nytt namn.\nTil informasjon er omdøpingsloggen synt nedanfor." + "renameuser-renamed-notice": "Denne brukaren har fÃ¥tt nytt namn.\nTil informasjon er omdøypingsloggen synt nedanfor." } diff --git a/extensions/Renameuser/i18n/ro.json b/extensions/Renameuser/i18n/ro.json index fe31292e..ff5004ce 100644 --- a/extensions/Renameuser/i18n/ro.json +++ b/extensions/Renameuser/i18n/ro.json @@ -36,6 +36,7 @@ "log-name-renameuser": "Jurnal redenumiri utilizatori", "log-description-renameuser": "Acesta este un jurnal al modificărilor de nume de utilizator", "logentry-renameuser-renameuser": "$1 {{GENDER:$2|a redenumit}} utilizatorul $4 ({{PLURAL:$6|o contribuÈ›ie|$6 contribuÈ›ii|$6 de contribuÈ›ii}}) în $5", + "logentry-renameuser-renameuser-legacier": "$1 a redenumit utilizatorul $4 în $5", "renameuser-move-log": "Pagină mutată automat la redenumirea utilizatorului de la „[[User:$1|$1]]†la „[[User:$2|$2]]â€", "action-renameuser": "redenumeÈ™te utilizatori", "right-renameuser": "RedenumeÈ™te utilizatori", diff --git a/extensions/Renameuser/i18n/sa.json b/extensions/Renameuser/i18n/sa.json index d0a79f8d..6d37f30f 100644 --- a/extensions/Renameuser/i18n/sa.json +++ b/extensions/Renameuser/i18n/sa.json @@ -2,20 +2,21 @@ "@metadata": { "authors": [ "Ansumang", - "Shubha" + "Shubha", + "NehalDaveND" ] }, "renameuser": "यॊजकसà¥à¤¯ पà¥à¤¨à¤°à¥à¤¨à¤¾à¤®à¤•à¤°à¤£à¤‚ कà¥à¤°à¤¿à¤¯à¤¤à¤¾à¤®à¥", "renameuser-linkoncontribs": "यॊजकनाम परिवरà¥à¤¤à¥à¤¯à¤¤à¤¾à¤®à¥", "renameuser-linkoncontribs-text": "असà¥à¤¯ योजकसà¥à¤¯ नाम परिवरà¥à¤¤à¥à¤¯à¤¤à¤¾à¤®à¥", - "renameuser-desc": "योजकसà¥à¤¯ पà¥à¤¨à¤°à¥à¤¨à¤¾à¤®à¤•à¤°à¤£à¤‚ करà¥à¤¤à¥à¤‚ (''योजकपà¥à¤¨à¤°à¥à¤¨à¤¾à¤®''अधिकारः अपेकà¥à¤·à¤¿à¤¤à¤ƒ) [[Special:RenameUser|विशेषपृषà¥à¤ à¤®à¥]] योजयति", + "renameuser-desc": "योजकसà¥à¤¯ पà¥à¤¨à¤°à¥à¤¨à¤¾à¤®à¤•à¤°à¤£à¤‚ करà¥à¤¤à¥à¤‚ (''योजकपà¥à¤¨à¤°à¥à¤¨à¤¾à¤®''अधिकारः अपेकà¥à¤·à¤¿à¤¤à¤ƒ) [[Special:RenameUser|विशिषà¥à¤Ÿà¤ªà¥ƒà¤·à¥à¤ à¤®à¥]] योजयति", "renameuserold": "पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¯à¥‹à¤œà¤•à¤¨à¤¾à¤® :", "renameusernew": "नूतनयोजकनाम :", "renameuserreason": "नामपरिवरà¥à¤¤à¤¨à¤¸à¥à¤¯ कारणमॠ:", "renameusermove": "योजकः समà¥à¤­à¤¾à¤·à¤£à¤ªà¥ƒà¤·à¥à¤ à¤‚ (तेषामॠउपपृषà¥à¤ à¤¾à¤¨à¤¿) च नूतननाम पà¥à¤°à¤¤à¤¿ चालà¥à¤¯à¤¤à¤¾à¤®à¥", "renameusersuppress": "नूतननामà¥à¤¨à¤ƒ पà¥à¤¨à¤°à¥à¤¨à¤¿à¤¦à¥‡à¤¶à¤¨à¤‚ न सृजà¥à¤¯à¤¤à¤¾à¤®à¥", "renameuserreserve": "भविषà¥à¤¯à¥‡ उपयोगाय पà¥à¤°à¤¾à¤¤à¤¨à¤‚ योजकनाम अवरà¥à¤¦à¥à¤§à¥à¤¯à¤¤à¤¾à¤®à¥", - "renameuserwarnings": "चेतावनी:", + "renameuserwarnings": "पूरà¥à¤µà¤¸à¥‚चना :", "renameuserconfirm": "आमà¥, योजकसà¥à¤¯ पà¥à¤¨à¤°à¥à¤¨à¤¾à¤® दीयतामà¥", "renameusersubmit": "उपसà¥à¤¥à¤¾à¤ªà¥à¤¯à¤¤à¤¾à¤®à¥", "renameuser-submit-blocklog": "योजकसà¥à¤¯ अवरोधवृतà¥à¤¤à¤‚ दरà¥à¤¶à¥à¤¯à¤¤à¤¾à¤®à¥", @@ -25,7 +26,7 @@ "renameuser-error-request": "निवेदनसà¥à¤¯ पà¥à¤°à¤¾à¤ªà¥à¤¤à¥Œ कशà¥à¤šà¤¨ कà¥à¤²à¥‡à¤¶à¤ƒ आसीतॠ।\nकृपया पà¥à¤°à¤¤à¤¿à¤—तà¥à¤¯ पà¥à¤°à¤¯à¤¤à¤¤à¤¾à¤®à¥ ।", "renameuser-error-same-user": "योजकसà¥à¤¯ पूरà¥à¤µà¤¨à¤¾à¤® दतà¥à¤¤à¥à¤µà¤¾ पà¥à¤¨à¤ƒ नामकरणं न शकà¥à¤¯à¤¤à¥‡ ।", "renameusersuccess": "\"$1\" इतà¥à¤¯à¤¸à¥à¤¯ योजकनाम \"$2\" कृतमसà¥à¤¤à¤¿ ।", - "renameuser-page-exists": "$1 इतà¥à¤¯à¥‡à¤¤à¤¤à¥ पà¥à¤Ÿà¤‚ पूरà¥à¤µà¤®à¥‡à¤µ विदà¥à¤¯à¤¤à¥‡ । तदà¥à¤ªà¤°à¤¿ लेखनमॠअशकà¥à¤¯à¤®à¥ ।", + "renameuser-page-exists": "$1 इतà¥à¤¯à¥‡à¤¤à¤¤à¥ पृषà¥à¤ à¤‚ पूरà¥à¤µà¤®à¥‡à¤µ विदà¥à¤¯à¤¤à¥‡ । तदà¥à¤ªà¤°à¤¿ लेखनमॠअशकà¥à¤¯à¤®à¥ ।", "renameuser-page-moved": "$1 पृषà¥à¤ à¤‚ $2 पà¥à¤°à¤¤à¤¿ चालितमॠअसà¥à¤¤à¤¿ ।", "renameuser-page-unmoved": "$1 पृषà¥à¤ à¤‚ $2 पà¥à¤°à¤¤à¤¿ चालनमॠअशकà¥à¤¯à¤®à¥ ।", "log-name-renameuser": "परिवरà¥à¤¤à¤¿à¤¤à¤¯à¥‹à¤œà¤•à¤¨à¤¾à¤®à¥à¤¨à¤¾à¤‚ वृतà¥à¤¤à¤®à¥", diff --git a/extensions/Renameuser/i18n/scn.json b/extensions/Renameuser/i18n/scn.json index ef0a4039..200d63ec 100644 --- a/extensions/Renameuser/i18n/scn.json +++ b/extensions/Renameuser/i18n/scn.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Gmelfi", - "Santu" + "Santu", + "Pippinu" ] }, "renameuser": "Rinòmina utenti", @@ -10,7 +11,7 @@ "renameuser-desc": "Funzioni pi rinuminari n'utenti (addumanna li diritti di ''renameuser'')", "renameuserold": "Nomu utenti dô prisenti:", "renameusernew": "Novu nomu utenti:", - "renameuserreason": "Mutivu dû caciu di nomu", + "renameuserreason": "Mutivu:", "renameusermove": "Rinòmina macari la pàggina utenti, la pàggina di discussioni e li suttapàggini", "renameuserreserve": "Sarva lu vecchiu utenti pi futuri usi", "renameuserwarnings": "Avvisi:", diff --git a/extensions/Renameuser/i18n/sq.json b/extensions/Renameuser/i18n/sq.json index 57822583..0a81a002 100644 --- a/extensions/Renameuser/i18n/sq.json +++ b/extensions/Renameuser/i18n/sq.json @@ -4,7 +4,8 @@ "Dori", "FatosMorina", "Mikullovci11", - "Olsi" + "Olsi", + "Ammartivari" ] }, "renameuser": "Riemëroje përdoruesin", @@ -13,7 +14,7 @@ "renameuser-desc": "Shton një [[Special:RenameUser|faqe speciale]] për të riemëruar një përdorues (duhet e drejta ''renameuser'')", "renameuserold": "Emri i tanishëm", "renameusernew": "Emri i ri", - "renameuserreason": "Arsyeja për riemërim:", + "renameuserreason": "Arsyeja:", "renameusermove": "Zhvendos faqet e përdoruesit dhe të diskutimit (dhe nën-faqet e tyre) tek emri i ri", "renameusersuppress": "Mos krijoni përcjellime tek emri i ri", "renameuserreserve": "Bllokoni emrin e vjetër të përdoruesit të përdorim në të ardhmen", @@ -30,7 +31,8 @@ "renameuser-page-exists": "Faqja $1 ekziston dhe nuk mund të mbivendoset automatikisht.", "renameuser-page-moved": "Faqja $1 është zhvendosur tek $2.", "renameuser-page-unmoved": "Faqja $1 s'mund të zhvendosej tek $2.", - "log-name-renameuser": "Regjistri i emër-ndryshimeve", + "log-name-renameuser": "Regjistri i riemërtimeve", + "logentry-renameuser-renameuser-legacier": "$1 riemëroi përdoruesin $4 në $5", "renameuser-move-log": "Lëvizi faqen automatikisht kur riemëroi përdoruesin \"[[User:$1|$1]]\" në \"[[User:$2|$2]]\"", "action-renameuser": "riemëro përdoruesit", "right-renameuser": "Riemëroni përdorueset", diff --git a/extensions/Renameuser/i18n/yi.json b/extensions/Renameuser/i18n/yi.json index d26d51d8..e2080772 100644 --- a/extensions/Renameuser/i18n/yi.json +++ b/extensions/Renameuser/i18n/yi.json @@ -28,6 +28,9 @@ "renameuser-page-moved": "דער בל×ַט $1 ××™×– געוו×רן ב×ַוועגט צו $2.", "renameuser-page-unmoved": "מען קען נישט ב×ַוועגן ×“×¢× ×‘×œ×ַט $1 צו $2.", "log-name-renameuser": "ב×ַניצער × ×ָמען-טויש ל×ָג-בוך", + "log-description-renameuser": "ד×ָס ××™×– ×Ö· ל××’ פֿון ענדערונגען צו ב×ַניצער נעמען.", + "logentry-renameuser-renameuser": "$1 {{GENDER:$2|×”×ט געענדערט ×“×¢× × ×מען}} פון ב×ניצער $4 ({{PLURAL:$6|$6 רעד×קטירונג|$6 רעד×קטירונגען}}) צו $5", + "logentry-renameuser-renameuser-legacier": "$1 ×”×ט געענדערט ב×ניצער × ×מען $4 צו $5", "renameuser-move-log": "×ויט×מ×ַטיש ב×ַוועגט בל×ַט דורך ענדערן ב×ַניצער־נ×ָמען פֿון \"[[User:$1|$1]]\" צו \"[[User:$2|$2]]\"", "action-renameuser": "בײַטן ב×ַניצער נעמען", "right-renameuser": "בײַטן ב×ַניצער נעמען", diff --git a/extensions/Renameuser/phpcs.xml b/extensions/Renameuser/phpcs.xml new file mode 100644 index 00000000..d81a2927 --- /dev/null +++ b/extensions/Renameuser/phpcs.xml @@ -0,0 +1,8 @@ + + + + . + + + vendor + diff --git a/extensions/Renameuser/renameUserCleanup.php b/extensions/Renameuser/renameUserCleanup.php index 25c4a1fd..180add11 100644 --- a/extensions/Renameuser/renameUserCleanup.php +++ b/extensions/Renameuser/renameUserCleanup.php @@ -27,12 +27,13 @@ $IP = getenv( 'MW_INSTALL_PATH' ); if ( $IP === false ) { $IP = __DIR__ . '/../..'; } -require_once( "$IP/maintenance/Maintenance.php" ); +require_once "$IP/maintenance/Maintenance.php"; class RenameUserCleanup extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Maintenance script to finish incomplete rename user, in particular to reassign edits that were missed"; + $this->mDescription = 'Maintenance script to finish incomplete rename user, ' . + 'in particular to reassign edits that were missed'; $this->addOption( 'olduser', 'Old user name', true, true ); $this->addOption( 'newuser', 'New user name', true, true ); $this->addOption( 'olduid', 'Old user id in revision records (DANGEROUS)', false, true ); @@ -53,9 +54,9 @@ class RenameUserCleanup extends Maintenance { } $this->doUpdates( $olduser, $newuser, $newuser->getId() ); $this->doUpdates( $olduser, $newuser, 0 ); - + print "Done!\n"; - exit(0); + exit( 0 ); } /** @@ -64,19 +65,19 @@ class RenameUserCleanup extends Maintenance { */ public function checkUserExistence( $olduser, $newuser ) { if ( !$newuser->getId() ) { - $this->error( "No such user: " . $this->getOption( 'newuser' ), true ); - exit(1); + $this->error( 'No such user: ' . $this->getOption( 'newuser' ), true ); + exit( 1 ); } - if ($olduser->getId() ) { - print "WARNING!!: Old user still exists: " . $this->getOption( 'olduser' ) . "\n"; + if ( $olduser->getId() ) { + print 'WARNING!!: Old user still exists: ' . $this->getOption( 'olduser' ) . "\n"; print "proceed anyways? We'll only re-attribute edits that have the new user uid (or 0)"; - print " or the uid specified by the caller, and the old user name. [N/y] "; - $stdin = fopen ("php://stdin","rt"); - $line = fgets($stdin); - fclose($stdin); - if ( $line[0] != "Y" && $line[0] != "y" ) { + print ' or the uid specified by the caller, and the old user name. [N/y] '; + $stdin = fopen( 'php://stdin', 'rt' ); + $line = fgets( $stdin ); + fclose( $stdin ); + if ( $line[0] !== 'Y' && $line[0] !== 'y' ) { print "Exiting at user's request\n"; - exit(0); + exit( 0 ); } } } @@ -92,50 +93,55 @@ class RenameUserCleanup extends Maintenance { $result = $dbr->select( 'logging', '*', array( 'log_type' => 'renameuser', - 'log_action' => 'renameuser', + 'log_action' => 'renameuser', 'log_namespace' => NS_USER, - 'log_title' => $oldTitle->getDBkey(), - 'log_params' => $newuser->getName() - ), + 'log_title' => $oldTitle->getDBkey(), + 'log_params' => $newuser->getName() + ), __METHOD__ ); - if (! $result || ! $result->numRows() ) { + if ( !$result || !$result->numRows() ) { // try the old format $result = $dbr->select( 'logging', '*', - array( 'log_type' => 'renameuser', - 'log_action' => 'renameuser', - 'log_namespace' => NS_USER, - 'log_title' => $olduser->getName(), - ), + array( 'log_type' => 'renameuser', + 'log_action' => 'renameuser', + 'log_namespace' => NS_USER, + 'log_title' => $olduser->getName(), + ), __METHOD__ ); - if (! $result || ! $result->numRows() ) { - print "No log entry found for a rename of ".$olduser->getName()." to ".$newuser->getName().", proceed anyways??? [N/y] "; - $stdin = fopen ("php://stdin","rt"); - $line = fgets($stdin); - fclose($stdin); - if ( $line[0] != "Y" && $line[0] != "y" ) { + if ( !$result || !$result->numRows() ) { + print 'No log entry found for a rename of ' . $olduser->getName() . + ' to ' . $newuser->getName() . ', proceed anyways??? [N/y] '; + $stdin = fopen( 'php://stdin', 'rt' ); + $line = fgets( $stdin ); + fclose( $stdin ); + if ( $line[0] !== 'Y' && $line[0] !== 'y' ) { print "Exiting at user's request\n"; - exit(1); + exit( 1 ); } } else { foreach ( $result as $row ) { - print "Found possible log entry of the rename, please check: ".$row->log_title." with comment ".$row->log_comment." on $row->log_timestamp\n"; + print 'Found possible log entry of the rename, please check: ' . + $row->log_title . ' with comment ' . $row->log_comment . + " on $row->log_timestamp\n"; } } } else { foreach ( $result as $row ) { - print "Found log entry of the rename: ".$olduser->getName()." to ".$newuser->getName()." on $row->log_timestamp\n"; + print 'Found log entry of the rename: ' . $olduser->getName() . + ' to ' . $newuser->getName() . " on $row->log_timestamp\n"; } } - if ($result && $result->numRows() > 1) { - print "More than one rename entry found in the log, not sure what to do. Continue anyways? [N/y] "; - $stdin = fopen ("php://stdin","rt"); - $line = fgets($stdin); - fclose($stdin); - if ( $line[0] != "Y" && $line[0] != "y" ) { + if ( $result && $result->numRows() > 1 ) { + print 'More than one rename entry found in the log, not sure ' . + 'what to do. Continue anyways? [N/y] '; + $stdin = fopen( 'php://stdin', 'rt' ); + $line = fgets( $stdin ); + fclose( $stdin ); + if ( $line[0] !== 'Y' && $line[0] !== 'y' ) { print "Exiting at user's request\n"; - exit(1); + exit( 1 ); } } } @@ -146,12 +152,18 @@ class RenameUserCleanup extends Maintenance { * @param $uid */ public function doUpdates( $olduser, $newuser, $uid ) { - $this->updateTable( 'revision', 'rev_user_text', 'rev_user', 'rev_timestamp', $olduser, $newuser, $uid ); - $this->updateTable( 'archive', 'ar_user_text', 'ar_user', 'ar_timestamp', $olduser, $newuser, $uid ); - $this->updateTable( 'logging', 'log_user_text', 'log_user', 'log_timestamp', $olduser, $newuser, $uid ); - $this->updateTable( 'image', 'img_user_text', 'img_user', 'img_timestamp', $olduser, $newuser, $uid ); - $this->updateTable( 'oldimage', 'oi_user_text', 'oi_user', 'oi_timestamp', $olduser, $newuser, $uid ); - $this->updateTable( 'filearchive', 'fa_user_text','fa_user', 'fa_timestamp', $olduser, $newuser, $uid ); + $this->updateTable( 'revision', 'rev_user_text', 'rev_user', 'rev_timestamp', + $olduser, $newuser, $uid ); + $this->updateTable( 'archive', 'ar_user_text', 'ar_user', 'ar_timestamp', + $olduser, $newuser, $uid ); + $this->updateTable( 'logging', 'log_user_text', 'log_user', 'log_timestamp', + $olduser, $newuser, $uid ); + $this->updateTable( 'image', 'img_user_text', 'img_user', 'img_timestamp', + $olduser, $newuser, $uid ); + $this->updateTable( 'oldimage', 'oi_user_text', 'oi_user', 'oi_timestamp', + $olduser, $newuser, $uid ); + $this->updateTable( 'filearchive', 'fa_user_text', 'fa_user', 'fa_timestamp', + $olduser, $newuser, $uid ); } /** @@ -164,56 +176,63 @@ class RenameUserCleanup extends Maintenance { * @param $uid * @return int */ - public function updateTable( $table, $usernamefield, $useridfield, $timestampfield, $olduser, $newuser, $uid ) { + public function updateTable( $table, $usernamefield, $useridfield, + $timestampfield, $olduser, $newuser, $uid + ) { $dbw = wfGetDB( DB_MASTER ); $contribs = $dbw->selectField( $table, 'count(*)', array( $usernamefield => $olduser->getName(), $useridfield => $uid ), __METHOD__ ); - if ( $contribs == 0 ) { - print "No edits to be re-attributed from table $table for uid $uid\n" ; - return(0); + if ( $contribs === 0 ) { + print "No edits to be re-attributed from table $table for uid $uid\n"; + + return ( 0 ); } print "Found $contribs edits to be re-attributed from table $table for uid $uid\n"; - if ( $uid != $newuser->getId() ) { - print "If you proceed, the uid field will be set to that of the new user name (i.e. ".$newuser->getId().") in these rows.\n"; + if ( $uid !== $newuser->getId() ) { + print 'If you proceed, the uid field will be set to that ' . + 'of the new user name (i.e. ' . $newuser->getId() . ") in these rows.\n"; } - print "Proceed? [N/y] "; - $stdin = fopen ("php://stdin","rt"); - $line = fgets($stdin); - fclose($stdin); - if ( $line[0] != "Y" && $line[0] != "y" ) { + print 'Proceed? [N/y] '; + $stdin = fopen( 'php://stdin', 'rt' ); + $line = fgets( $stdin ); + fclose( $stdin ); + if ( $line[0] !== 'Y' && $line[0] !== 'y' ) { print "Skipping at user's request\n"; - return(0); + + return ( 0 ); } $selectConds = array( $usernamefield => $olduser->getName(), $useridfield => $uid ); $updateFields = array( $usernamefield => $newuser->getName(), $useridfield => $newuser->getId() ); while ( $contribs > 0 ) { - print "Doing batch of up to approximately ".$this->mBatchSize."\n"; - print "Do this batch? [N/y] "; - $stdin = fopen ("php://stdin","rt"); - $line = fgets($stdin); - fclose($stdin); - if ( $line[0] != "Y" && $line[0] != "y" ) { + print 'Doing batch of up to approximately ' . $this->mBatchSize . "\n"; + print 'Do this batch? [N/y] '; + $stdin = fopen( 'php://stdin', 'rt' ); + $line = fgets( $stdin ); + fclose( $stdin ); + if ( $line[0] !== 'Y' && $line[0] !== 'y' ) { print "Skipping at user's request\n"; - return(0); + + return ( 0 ); } $dbw->begin(); - $result = $dbw->select( $table, $timestampfield, $selectConds , __METHOD__, - array( 'ORDER BY' => $timestampfield.' DESC', 'LIMIT' => $this->mBatchSize ) ); - if (! $result) { + $result = $dbw->select( $table, $timestampfield, $selectConds, __METHOD__, + array( 'ORDER BY' => $timestampfield . ' DESC', 'LIMIT' => $this->mBatchSize ) ); + if ( !$result ) { print "There were rows for updating but now they are gone. Skipping.\n"; $dbw->rollback(); - return(0); + + return ( 0 ); } - $result->seek($result->numRows() -1 ); + $result->seek( $result->numRows() - 1 ); $row = $result->fetchObject(); $timestamp = $row->$timestampfield; - $updateCondsWithTime = array_merge( $selectConds, array ("$timestampfield >= $timestamp") ); + $updateCondsWithTime = array_merge( $selectConds, array( "$timestampfield >= $timestamp" ) ); $success = $dbw->update( $table, $updateFields, $updateCondsWithTime, __METHOD__ ); if ( $success ) { $rowsDone = $dbw->affectedRows(); @@ -221,16 +240,17 @@ class RenameUserCleanup extends Maintenance { } else { print "Problem with the update, rolling back and exiting\n"; $dbw->rollback(); - exit(1); + exit( 1 ); } - //$contribs = User::edits( $olduser->getId() ); + + // $contribs = User::edits( $olduser->getId() ); $contribs = $dbw->selectField( $table, 'count(*)', $selectConds, __METHOD__ ); print "Updated $rowsDone edits; $contribs edits remaining to be re-attributed\n"; } - return(0); - } + return ( 0 ); + } } -$maintClass = "RenameUserCleanup"; -require_once( RUN_MAINTENANCE_IF_MAIN ); +$maintClass = 'RenameUserCleanup'; +require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/extensions/Renameuser/specials/SpecialRenameuser.php b/extensions/Renameuser/specials/SpecialRenameuser.php index c8b2a538..f33c391a 100644 --- a/extensions/Renameuser/specials/SpecialRenameuser.php +++ b/extensions/Renameuser/specials/SpecialRenameuser.php @@ -13,8 +13,9 @@ class SpecialRenameuser extends SpecialPage { * Show the special page * * @param mixed $par Parameter passed to the page - * @throws UserBlockedError|PermissionsError - * @return void + * @throws PermissionsError + * @throws ReadOnlyError + * @throws UserBlockedError */ public function execute( $par ) { global $wgContLang, $wgCapitalLinks; @@ -30,62 +31,74 @@ class SpecialRenameuser extends SpecialPage { } if ( wfReadOnly() ) { - $out->readOnlyPage(); - return; + throw new ReadOnlyError; } - if( $user->isBlocked() ){ + if ( $user->isBlocked() ) { throw new UserBlockedError( $this->getUser()->mBlock ); } $request = $this->getRequest(); $showBlockLog = $request->getBool( 'submit-showBlockLog' ); - $oldnamePar = trim( str_replace( '_', ' ', $request->getText( 'oldusername', $par ) ) ); + $usernames = explode( '/', $par, 2 ); // this works as "/" is not valid in usernames + $oldnamePar = trim( str_replace( '_', ' ', $request->getText( 'oldusername', $usernames[0] ) ) ); $oldusername = Title::makeTitle( NS_USER, $oldnamePar ); - // Force uppercase of newusername, otherwise wikis with wgCapitalLinks=false can create lc usernames - $newusername = Title::makeTitleSafe( NS_USER, $wgContLang->ucfirst( $request->getText( 'newusername' ) ) ); + $newnamePar = isset( $usernames[1] ) ? $usernames[1] : null; + $newnamePar = trim( str_replace( '_', ' ', $request->getText( 'newusername', $newnamePar ) ) ); + // Force uppercase of newusername, otherwise wikis + // with wgCapitalLinks=false can create lc usernames + $newusername = Title::makeTitleSafe( NS_USER, $wgContLang->ucfirst( $newnamePar ) ); $oun = is_object( $oldusername ) ? $oldusername->getText() : ''; $nun = is_object( $newusername ) ? $newusername->getText() : ''; $token = $user->getEditToken(); $reason = $request->getText( 'reason' ); - $move_checked = $request->getBool( 'movepages', !$request->wasPosted()); + $move_checked = $request->getBool( 'movepages', !$request->wasPosted() ); $suppress_checked = $request->getCheck( 'suppressredirect' ); $warnings = array(); - if ( $oun && $nun && !$request->getCheck( 'confirmaction' ) ) { + if ( $oun && $nun && !$request->getCheck( 'confirmaction' ) ) { Hooks::run( 'RenameUserWarning', array( $oun, $nun, &$warnings ) ); } $out->addHTML( - Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getPageTitle()->getLocalUrl(), 'id' => 'renameuser' ) ) . + Xml::openElement( 'form', array( + 'method' => 'post', + 'action' => $this->getPageTitle()->getLocalURL(), + 'id' => 'renameuser' + ) ) . Xml::openElement( 'fieldset' ) . Xml::element( 'legend', null, $this->msg( 'renameuser' )->text() ) . Xml::openElement( 'table', array( 'id' => 'mw-renameuser-table' ) ) . " " . - Xml::label( $this->msg( 'renameuserold' )->text(), 'oldusername' ) . - " + Xml::label( $this->msg( 'renameuserold' )->text(), 'oldusername' ) . + " " . - Xml::input( 'oldusername', 20, $oun, array( 'type' => 'text', 'tabindex' => '1' ) ) . ' ' . - " + Xml::input( 'oldusername', 20, $oun, array( 'type' => 'text', 'tabindex' => '1' ) ) . ' ' . + " " . - Xml::label( $this->msg( 'renameusernew' )->text(), 'newusername' ) . - " + Xml::label( $this->msg( 'renameusernew' )->text(), 'newusername' ) . + " " . - Xml::input( 'newusername', 20, $nun, array( 'type' => 'text', 'tabindex' => '2' ) ) . - " + Xml::input( 'newusername', 20, $nun, array( 'type' => 'text', 'tabindex' => '2' ) ) . + " " . - Xml::label( $this->msg( 'renameuserreason' )->text(), 'reason' ) . - " + Xml::label( $this->msg( 'renameuserreason' )->text(), 'reason' ) . + " " . - Xml::input( 'reason', 40, $reason, array( 'type' => 'text', 'tabindex' => '3', 'maxlength' => 255 ) ) . - " - " + Xml::input( + 'reason', + 40, + $reason, + array( 'type' => 'text', 'tabindex' => '3', 'maxlength' => 255 ) + ) . + ' + ' ); if ( $user->isAllowed( 'move' ) ) { $out->addHTML( " @@ -93,10 +106,10 @@ class SpecialRenameuser extends SpecialPage {   " . - Xml::checkLabel( $this->msg( 'renameusermove' )->text(), 'movepages', 'movepages', - $move_checked, array( 'tabindex' => '4' ) ) . - " - " + Xml::checkLabel( $this->msg( 'renameusermove' )->text(), 'movepages', 'movepages', + $move_checked, array( 'tabindex' => '4' ) ) . + ' + ' ); if ( $user->isAllowed( 'suppressredirect' ) ) { @@ -105,15 +118,15 @@ class SpecialRenameuser extends SpecialPage {   " . - Xml::checkLabel( - $this->msg( 'renameusersuppress' )->text(), - 'suppressredirect', - 'suppressredirect', - $suppress_checked, - array( 'tabindex' => '5' ) - ) . - " - " + Xml::checkLabel( + $this->msg( 'renameusersuppress' )->text(), + 'suppressredirect', + 'suppressredirect', + $suppress_checked, + array( 'tabindex' => '5' ) + ) . + ' + ' ); } } @@ -130,25 +143,25 @@ class SpecialRenameuser extends SpecialPage { " . $this->msg( 'renameuserwarnings' )->escaped() . " " . - '
    • ' . - implode( '
    • ', $warningsHtml ) . '
    ' . - " - " + '
    • ' . + implode( '
    • ', $warningsHtml ) . '
    ' . + ' + ' ); $out->addHTML( "   " . - Xml::checkLabel( - $this->msg( 'renameuserconfirm' )->text(), - 'confirmaction', - 'confirmaction', - false, - array( 'tabindex' => '6' ) - ) . - " - " + Xml::checkLabel( + $this->msg( 'renameuserconfirm' )->text(), + 'confirmaction', + 'confirmaction', + false, + array( 'tabindex' => '6' ) + ) . + ' + ' ); } $out->addHTML( " @@ -156,25 +169,25 @@ class SpecialRenameuser extends SpecialPage {   " . - Xml::submitButton( - $this->msg( 'renameusersubmit' )->text(), - array( - 'name' => 'submit', - 'tabindex' => '7', - 'id' => 'submit' - ) - ) . - ' ' . - Xml::submitButton( - $this->msg( 'renameuser-submit-blocklog' )->text(), - array ( - 'name' => 'submit-showBlockLog', - 'id' => 'submit-showBlockLog', - 'tabindex' => '8' - ) - ) . - " - " . + Xml::submitButton( + $this->msg( 'renameusersubmit' )->text(), + array( + 'name' => 'submit', + 'tabindex' => '7', + 'id' => 'submit' + ) + ) . + ' ' . + Xml::submitButton( + $this->msg( 'renameuser-submit-blocklog' )->text(), + array( + 'name' => 'submit-showBlockLog', + 'id' => 'submit-showBlockLog', + 'tabindex' => '8' + ) + ) . + ' + ' . Xml::closeElement( 'table' ) . Xml::closeElement( 'fieldset' ) . Html::hidden( 'token', $token ) . @@ -183,7 +196,8 @@ class SpecialRenameuser extends SpecialPage { // Show block log if requested if ( $showBlockLog && is_object( $oldusername ) ) { - $this->showLogExtract( $oldusername, 'block', $out ) ; + $this->showLogExtract( $oldusername, 'block', $out ); + return; } @@ -195,17 +209,21 @@ class SpecialRenameuser extends SpecialPage { return; } elseif ( !$request->wasPosted() || !$user->matchEditToken( $request->getVal( 'token' ) ) ) { $out->wrapWikiMsg( "
    $1
    ", 'renameuser-error-request' ); + return; } elseif ( !is_object( $oldusername ) ) { $out->wrapWikiMsg( "
    $1
    ", array( 'renameusererrorinvalid', $request->getText( 'oldusername' ) ) ); + return; } elseif ( !is_object( $newusername ) ) { $out->wrapWikiMsg( "
    $1
    ", array( 'renameusererrorinvalid', $request->getText( 'newusername' ) ) ); + return; - } elseif ( $oldusername->getText() == $newusername->getText() ) { + } elseif ( $oldusername->getText() === $newusername->getText() ) { $out->wrapWikiMsg( "
    $1
    ", 'renameuser-error-same-user' ); + return; } @@ -217,11 +235,13 @@ class SpecialRenameuser extends SpecialPage { if ( !is_object( $olduser ) ) { $out->wrapWikiMsg( "
    $1
    ", array( 'renameusererrorinvalid', $oldusername->getText() ) ); + return; } if ( !is_object( $newuser ) || !User::isCreatableName( $newuser->getName() ) ) { $out->wrapWikiMsg( "
    $1
    ", array( 'renameusererrorinvalid', $newusername->getText() ) ); + return; } @@ -247,20 +267,25 @@ class SpecialRenameuser extends SpecialPage { $uid = $olduser->idForName(); } - if ( $uid == 0 ) { + if ( $uid === 0 ) { $out->wrapWikiMsg( "
    $1
    ", array( 'renameusererrordoesnotexist', $oldusername->getText() ) ); + return; } - if ( $newuser->idForName() != 0 ) { + if ( $newuser->idForName() !== 0 ) { $out->wrapWikiMsg( "
    $1
    ", array( 'renameusererrorexists', $newusername->getText() ) ); + return; } // Give other affected extensions a chance to validate or abort - if ( !Hooks::run( 'RenameUserAbort', array( $uid, $oldusername->getText(), $newusername->getText() ) ) ) { + if ( !Hooks::run( + 'RenameUserAbort', + array( $uid, $oldusername->getText(), $newusername->getText() ) + ) ) { return; } @@ -278,7 +303,7 @@ class SpecialRenameuser extends SpecialPage { // If this user is renaming his/herself, make sure that Title::moveTo() // doesn't make a bunch of null move edits under the old name! - if ( $user->getId() == $uid ) { + if ( $user->getId() === $uid ) { $user->setName( $newusername->getText() ); } @@ -292,7 +317,7 @@ class SpecialRenameuser extends SpecialPage { array( 'page_namespace IN (' . NS_USER . ',' . NS_USER_TALK . ')', '(page_title ' . $dbr->buildLike( $oldusername->getDBkey() . '/', $dbr->anyString() ) . - ' OR page_title = ' . $dbr->addQuotes( $oldusername->getDBkey() ) . ')' + ' OR page_title = ' . $dbr->addQuotes( $oldusername->getDBkey() ) . ')' ), __METHOD__ ); @@ -312,20 +337,20 @@ class SpecialRenameuser extends SpecialPage { if ( $newPage->exists() && !$oldPage->isValidMoveTarget( $newPage ) ) { $link = Linker::linkKnown( $newPage ); $output .= Html::rawElement( - 'li', - array( 'class' => 'mw-renameuser-pe' ), - wfMessage( 'renameuser-page-exists' )->rawParams( $link )->escaped() - ); + 'li', + array( 'class' => 'mw-renameuser-pe' ), + $this->msg( 'renameuser-page-exists' )->rawParams( $link )->escaped() + ); } else { $success = $oldPage->moveTo( - $newPage, - false, - wfMessage( - 'renameuser-move-log', - $oldusername->getText(), - $newusername->getText() )->inContentLanguage()->text(), - !$suppressRedirect - ); + $newPage, + false, + $this->msg( + 'renameuser-move-log', + $oldusername->getText(), + $newusername->getText() )->inContentLanguage()->text(), + !$suppressRedirect + ); if ( $success === true ) { # oldPage is not known in case of redirect suppression $oldLink = Linker::link( $oldPage, null, array(), array( 'redirect' => 'no' ) ); @@ -334,17 +359,17 @@ class SpecialRenameuser extends SpecialPage { $newLink = Linker::linkKnown( $newPage ); $output .= Html::rawElement( - 'li', - array( 'class' => 'mw-renameuser-pm' ), - wfMessage( 'renameuser-page-moved' )->rawParams( $oldLink, $newLink )->escaped() - ); + 'li', + array( 'class' => 'mw-renameuser-pm' ), + $this->msg( 'renameuser-page-moved' )->rawParams( $oldLink, $newLink )->escaped() + ); } else { $oldLink = Linker::linkKnown( $oldPage ); $newLink = Linker::link( $newPage ); $output .= Html::rawElement( - 'li', array( 'class' => 'mw-renameuser-pu' ), - wfMessage( 'renameuser-page-unmoved' )->rawParams( $oldLink, $newLink )->escaped() - ); + 'li', array( 'class' => 'mw-renameuser-pu' ), + $this->msg( 'renameuser-page-unmoved' )->rawParams( $oldLink, $newLink )->escaped() + ); } } } @@ -363,7 +388,7 @@ class SpecialRenameuser extends SpecialPage { * @param $type * @param $out OutputPage */ - function showLogExtract( $username, $type, &$out ) { + protected function showLogExtract( $username, $type, &$out ) { # Show relevant lines from the logs: $logPage = new LogPage( $type ); $out->addHTML( Xml::element( 'h2', null, $logPage->getName()->text() ) . "\n" ); diff --git a/extensions/SpamBlacklist/BaseBlacklist.php b/extensions/SpamBlacklist/BaseBlacklist.php index b1958c35..868b973e 100644 --- a/extensions/SpamBlacklist/BaseBlacklist.php +++ b/extensions/SpamBlacklist/BaseBlacklist.php @@ -63,6 +63,14 @@ abstract class BaseBlacklist { } } + /** + * @param array $links + * @param Title $title + * @param bool $preventLog + * @return mixed + */ + abstract public function filter( array $links, Title $title, $preventLog = false ); + /** * Adds a blacklist class to the registry * @@ -204,7 +212,16 @@ abstract class BaseBlacklist { * @return array Regular expressions */ public function getLocalBlacklists() { - return SpamRegexBatch::regexesFromMessage( "{$this->getBlacklistType()}-blacklist", $this ); + $that = $this; + $type = $this->getBlacklistType(); + + return ObjectCache::getMainWANInstance()->getWithSetCallback( + wfMemcKey( 'spamblacklist', $type, 'blacklist-regex' ), + function () use ( $that, $type ) { + return SpamRegexBatch::regexesFromMessage( "{$type}-blacklist", $that ); + }, + $this->expiryTime + ); } /** @@ -213,7 +230,16 @@ abstract class BaseBlacklist { * @return array Regular expressions */ public function getWhitelists() { - return SpamRegexBatch::regexesFromMessage( "{$this->getBlacklistType()}-whitelist", $this ); + $that = $this; + $type = $this->getBlacklistType(); + + return ObjectCache::getMainWANInstance()->getWithSetCallback( + wfMemcKey( 'spamblacklist', $type, 'whitelist-regex' ), + function () use ( $that, $type ) { + return SpamRegexBatch::regexesFromMessage( "{$type}-whitelist", $that ); + }, + $this->expiryTime + ); } /** @@ -221,7 +247,6 @@ abstract class BaseBlacklist { * @return array */ function getSharedBlacklists() { - global $wgMemc, $wgDBname; $listType = $this->getBlacklistType(); wfDebugLog( 'SpamBlacklist', "Loading $listType regex..." ); @@ -232,25 +257,40 @@ abstract class BaseBlacklist { return array(); } - // This used to be cached per-site, but that could be bad on a shared - // server where not all wikis have the same configuration. - $cachedRegexes = $wgMemc->get( "$wgDBname:{$listType}_blacklist_regexes" ); - if( is_array( $cachedRegexes ) ) { + $miss = false; + + $that = $this; + $regexes = ObjectCache::getMainWANInstance()->getWithSetCallback( + // This used to be cached per-site, but that could be bad on a shared + // server where not all wikis have the same configuration. + wfMemcKey( 'spamblacklist', $listType, 'shared-blacklist-regex' ), + function () use ( $that, &$miss ) { + $miss = true; + return $that->buildSharedBlacklists(); + }, + $this->expiryTime + ); + + if ( !$miss ) { wfDebugLog( 'SpamBlacklist', "Got shared spam regexes from cache\n" ); - return $cachedRegexes; } - $regexes = $this->buildSharedBlacklists(); - $wgMemc->set( "$wgDBname:{$listType}_blacklist_regexes", $regexes, $this->expiryTime ); - return $regexes; } + /** + * Clear all primary blacklist cache keys + * + * @note: this method is unused atm + */ function clearCache() { - global $wgMemc, $wgDBname; $listType = $this->getBlacklistType(); - $wgMemc->delete( "$wgDBname:{$listType}_blacklist_regexes" ); + $cache = ObjectCache::getMainWANInstance(); + $cache->delete( wfMemcKey( 'spamblacklist', $listType, 'shared-blacklist-regex' ) ); + $cache->delete( wfMemcKey( 'spamblacklist', $listType, 'blacklist-regex' ) ); + $cache->delete( wfMemcKey( 'spamblacklist', $listType, 'whitelist-regex' ) ); + wfDebugLog( 'SpamBlacklist', "$listType blacklist local cache cleared.\n" ); } @@ -263,7 +303,7 @@ abstract class BaseBlacklist { $matches = array(); if ( preg_match( '/^DB: ([\w-]*) (.*)$/', $fileName, $matches ) ) { $text = $this->getArticleText( $matches[1], $matches[2] ); - } elseif ( preg_match( '/^http:\/\//', $fileName ) ) { + } elseif ( preg_match( '/^(https?:)?\/\//', $fileName ) ) { $text = $this->getHttpText( $fileName ); } else { $text = file_get_contents( $fileName ); @@ -317,33 +357,35 @@ abstract class BaseBlacklist { * Fetch an article from this or another local MediaWiki database. * This is probably *very* fragile, and shouldn't be used perhaps. * - * @param string $db + * @param string $wiki * @param string $article * @return string */ - function getArticleText( $db, $article ) { - wfDebugLog( 'SpamBlacklist', "Fetching {$this->getBlacklistType()} spam blacklist from '$article' on '$db'...\n" ); - global $wgDBname; - $dbr = wfGetDB( DB_READ ); - $dbr->selectDB( $db ); - $text = false; - if ( $dbr->tableExists( 'page' ) ) { - // 1.5 schema - $dbw = wfGetDB( DB_READ ); - $dbw->selectDB( $db ); - $revision = Revision::newFromTitle( Title::newFromText( $article ) ); - if ( $revision ) { - $text = $revision->getText(); - } - $dbw->selectDB( $wgDBname ); - } else { - // 1.4 schema - $title = Title::newFromText( $article ); - $text = $dbr->selectField( 'cur', 'cur_text', array( 'cur_namespace' => $title->getNamespace(), - 'cur_title' => $title->getDBkey() ), __METHOD__ ); - } - $dbr->selectDB( $wgDBname ); - return strval( $text ); + function getArticleText( $wiki, $article ) { + wfDebugLog( 'SpamBlacklist', + "Fetching {$this->getBlacklistType()} blacklist from '$article' on '$wiki'...\n" ); + + $title = Title::newFromText( $article ); + // Load all the relevant tables from the correct DB. + // This assumes that old_text is the actual text or + // that the external store system is at least unified. + $row = wfGetDB( DB_SLAVE, array(), $wiki )->selectRow( + array( 'page', 'revision', 'text' ), + array_merge( + Revision::selectFields(), + Revision::selectPageFields(), + Revision::selectTextFields() + ), + array( + 'page_namespace' => $title->getNamespace(), // assume NS IDs match + 'page_title' => $title->getDBkey(), // assume same case rules + 'rev_id=page_latest', + 'old_id=rev_text_id' + ), + __METHOD__ + ); + + return $row ? Revision::newFromRow( $row )->getText() : false; } /** diff --git a/extensions/SpamBlacklist/EmailBlacklist.php b/extensions/SpamBlacklist/EmailBlacklist.php index 9266b2e4..bc2717f3 100644 --- a/extensions/SpamBlacklist/EmailBlacklist.php +++ b/extensions/SpamBlacklist/EmailBlacklist.php @@ -4,6 +4,15 @@ * Email Blacklisting */ class EmailBlacklist extends BaseBlacklist { + /** + * @param array $links + * @param Title $title + * @param bool $preventLog + * @return mixed + */ + public function filter( array $links, Title $title, $preventLog = false ) { + throw new LogicException( __CLASS__ . ' cannot be used to filter links.' ); + } /** * Returns the code for the blacklist implementation diff --git a/extensions/SpamBlacklist/Gruntfile.js b/extensions/SpamBlacklist/Gruntfile.js new file mode 100644 index 00000000..fdc272bd --- /dev/null +++ b/extensions/SpamBlacklist/Gruntfile.js @@ -0,0 +1,25 @@ +/*! + * Grunt file + * + * @package SpamBlacklist + */ + +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/SpamBlacklist/SpamBlacklistHooks.php b/extensions/SpamBlacklist/SpamBlacklistHooks.php index c8a322b6..172d55fa 100644 --- a/extensions/SpamBlacklist/SpamBlacklistHooks.php +++ b/extensions/SpamBlacklist/SpamBlacklistHooks.php @@ -233,15 +233,16 @@ class SpamBlacklistHooks { Status $status, $baseRevId ) { - if( !BaseBlacklist::isLocalSource( $wikiPage->getTitle() ) ) { + if ( !BaseBlacklist::isLocalSource( $wikiPage->getTitle() ) ) { return true; } - global $wgMemc, $wgDBname; // This sucks because every Blacklist needs to be cleared foreach ( BaseBlacklist::getBlacklistTypes() as $type => $class ) { - $wgMemc->delete( "$wgDBname:{$type}_blacklist_regexes" ); + $blacklist = BaseBlacklist::getInstance( $type ); + $blacklist->clearCache(); } + return true; } } diff --git a/extensions/SpamBlacklist/composer.json b/extensions/SpamBlacklist/composer.json new file mode 100644 index 00000000..fd380fb7 --- /dev/null +++ b/extensions/SpamBlacklist/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/SpamBlacklist/extension.json b/extensions/SpamBlacklist/extension.json index 7aec2bca..7298673d 100644 --- a/extensions/SpamBlacklist/extension.json +++ b/extensions/SpamBlacklist/extension.json @@ -65,5 +65,6 @@ "config": { "@doc": "BlacklistSettings are set in SpamBlacklistHooks.php", "LogSpamBlacklistHits": false - } + }, + "manifest_version": 1 } diff --git a/extensions/SpamBlacklist/i18n/ast.json b/extensions/SpamBlacklist/i18n/ast.json index d3cdc37b..051b8ff1 100644 --- a/extensions/SpamBlacklist/i18n/ast.json +++ b/extensions/SpamBlacklist/i18n/ast.json @@ -18,5 +18,8 @@ "log-description-spamblacklist": "Estos socesos rexistren les coincidencies cola llista prieta de spam.", "logentry-spamblacklist-hit": "$1 provocó una activación de la llista prieta de spam en $3 al intentar amestar $4.", "right-spamblacklistlog": "Ver el rexistru de la llista prieta de spam", - "action-spamblacklistlog": "ver el rexistru de la llista prieta de spam" + "action-spamblacklistlog": "ver el rexistru de la llista prieta de spam", + "apihelp-spamblacklist-description": "Validar una o más URLs escontra SpamBlacklist.", + "apihelp-spamblacklist-param-url": "URLs a validar escontra la llista prieta.", + "apihelp-spamblacklist-example-1": "Comprobar dos URLs escontra la llista prieta" } diff --git a/extensions/SpamBlacklist/i18n/be-tarask.json b/extensions/SpamBlacklist/i18n/be-tarask.json index f0f7da22..98d350e3 100644 --- a/extensions/SpamBlacklist/i18n/be-tarask.json +++ b/extensions/SpamBlacklist/i18n/be-tarask.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "EugeneZelenko", - "Jim-by" + "Jim-by", + "Red Winged Duck" ] }, "spam-blacklist": " # Ð’Ð¾Ð½ÐºÐ°Ð²Ñ‹Ñ ÑпаÑылкі, ÑÐºÑ–Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ адпавÑдаць гÑтаму ÑьпіÑу, будуць блÑкавацца пры \n # Ñпробе Ð´Ð°Ð´Ð°Ð½ÑŒÐ½Ñ Ð½Ð° Ñтаронку.\n # ГÑÑ‚Ñ‹ ÑÑŒÐ¿Ñ–Ñ Ð±ÑƒÐ´Ð·Ðµ дзейнічаць толькі Ñž гÑтай вікі; Ñ–Ñнуе такÑама Ñ– глÑбальны чорны ÑьпіÑ.\n # ДакумÑнтацыю гÑтай функцыі глÑдзіце на https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #
    \n#\n# СынтакÑÑ–Ñ Ð½Ð°Ñтупны:\n#  * УÑÑ‘, што пачынаецца з «#» Ñ– да канца радку, зьÑўлÑецца камÑнтарам\n#  * УÑе непуÑÑ‚Ñ‹Ñ Ñ€Ð°Ð´ÐºÑ– зьÑўлÑюцца чаÑткамі Ñ€ÑгулÑрнага выразу, Ñкі будзе выкарыÑтоўвацца толькі\n# Ñž дачыненьні да назваў ÑÑрвÑраў у вонкавых ÑпаÑылках\n\n #
    ", @@ -13,5 +14,6 @@ "spam-blacklisted-email-text": "З Вашага адраÑу Ñлектроннай пошты Ñž цÑперашні момант забаронена даÑылаць ÑÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ñ‹Ñ Ð»Ñ–ÑÑ‚Ñ‹ іншым удзельнікам.", "spam-blacklisted-email-signup": "Пададзены Вамі Ð°Ð´Ñ€Ð°Ñ Ñлектроннай пошты Ñž цÑперашні момант знаходзіцца Ñž чорным ÑьпіÑе.", "spam-invalid-lines": "{{PLURAL:$1|1=ÐаÑтупны радок чорнага ÑьпіÑу ўтрымлівае нÑÑлушны Ñ€ÑгулÑрны выраз|ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ñ€Ð°Ð´ÐºÑ– чорнага ÑьпіÑу ўтрымліваюць нÑÑÐ»ÑƒÑˆÐ½Ñ‹Ñ Ñ€ÑгулÑÑ€Ð½Ñ‹Ñ Ð²Ñ‹Ñ€Ð°Ð·Ñ‹}} Ñ– {{PLURAL:$1|1=павінен быць|Ð¿Ð°Ð²Ñ–Ð½Ð½Ñ‹Ñ Ð±Ñ‹Ñ†ÑŒ}} выпраўлены перад захаваньнем Ñтаронкі:", - "spam-blacklist-desc": "ÐнтыÑпамавы інÑтрумÑнт, Ñкі базуецца на Ñ€ÑгулÑрных выразах: [[MediaWiki:Spam-blacklist]] Ñ– [[MediaWiki:Spam-whitelist]]" + "spam-blacklist-desc": "ÐнтыÑпамавы інÑтрумÑнт, Ñкі базуецца на Ñ€ÑгулÑрных выразах, дазвалÑе дадаваць у чорны ÑÑŒÐ¿Ñ–Ñ URL-адраÑÑ‹ на Ñтаронках Ñ– адраÑÑ‹ Ñлектроннай пошты Ð´Ð»Ñ Ð·Ð°Ñ€ÑгіÑтраваных удзельнікаў", + "right-spamblacklistlog": "праглÑд журнала Ñпам-ÑьпіÑу" } diff --git a/extensions/SpamBlacklist/i18n/bs.json b/extensions/SpamBlacklist/i18n/bs.json index 693040e9..1ab18502 100644 --- a/extensions/SpamBlacklist/i18n/bs.json +++ b/extensions/SpamBlacklist/i18n/bs.json @@ -1,11 +1,12 @@ { "@metadata": { "authors": [ - "CERminator" + "CERminator", + "KWiki" ] }, "spam-blacklist": "# Vanjski URLovi koji odgovaraju ovom spisku će biti blokirani ako se dodaju na stranicu.\n # Ovaj spisak će biti aktivan samo na ovoj wiki; a poziva se i na globalni zabranjeni spisak.\n # Za objaÅ¡enjenja i dokumentaciju pogledajte https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #
    \n#\n# Sintaksa je slijedeća:\n#  * Sve od znaka \"#\" do kraja reda je komentar\n#  * Svi neprazni redovi su fragmenti regexa koji će odgovarati samo domaćinima unutar URLova\n\n #
    ", "spam-whitelist": "#
    \n# Vanjski URLovi koji odgovaraju nekoj od stavki na ovom spisku *neće* biti blokirani Äak iako\n# budu blokirani preko spisak nepoželjnih stavki.\n#\n# Sintaksa je slijedeća:\n#  * Sve od znaka \"#\" do kraja reda je komentar\n#  * Svaki neprazni red je fragment regexa koji će odgovarati samo domaćinima unutar URLa\n\n #
    ", - "spam-invalid-lines": "Slijedeći {{PLURAL:$1|red|redovi}} u spisku spam nepoželjnih stavki {{PLURAL:$1|je nevalidan izraz|su nevalidni izrazi}} i {{PLURAL:$1|treba|trebaju}} se ispraviti prije spremanja stranice:", + "spam-invalid-lines": "Sljedeći {{PLURAL:$1|red|redovi}} u spisku nepoželjnih spam-stavki {{PLURAL:$1|je nevalidan izraz|su nevalidni izrazi}} i {{PLURAL:$1|treba|trebaju}} se ispraviti prije spaÅ¡avanja stranice:", "spam-blacklist-desc": "Alati protiv spama zasnovani na regexu: [[MediaWiki:Spam-blacklist]] i [[MediaWiki:Spam-whitelist]]" } diff --git a/extensions/SpamBlacklist/i18n/ce.json b/extensions/SpamBlacklist/i18n/ce.json index 4afd98c0..9840fe56 100644 --- a/extensions/SpamBlacklist/i18n/ce.json +++ b/extensions/SpamBlacklist/i18n/ce.json @@ -4,7 +4,7 @@ "Умар" ] }, - "spam-blacklist-desc": "Ðнти-Ñпам Ð³Ó€Ð¸Ñ€Ñ URL дӀакъовла таро хуьлуьйту агӀонашкахь а Ñлектронан почтехь а дӀабазбелачу декъашхошна", + "spam-blacklist-desc": "Ðнти-Ñпам Ð³Ó€Ð¸Ñ€Ñ URL дӀакъовла таро хуьлуьйту агӀонашкахь а, Ñлектронан почтехь а дӀабазбелачу декъашхошна", "log-name-spamblacklist": "Спам-кехатан тептар", "log-description-spamblacklist": "Спам-кехато зулам долоре хьожу тептар." } diff --git a/extensions/SpamBlacklist/i18n/de.json b/extensions/SpamBlacklist/i18n/de.json index 64e31b45..f54c244f 100644 --- a/extensions/SpamBlacklist/i18n/de.json +++ b/extensions/SpamBlacklist/i18n/de.json @@ -23,5 +23,8 @@ "log-description-spamblacklist": "Es folgt ein Logbuch von Spam-Blacklist-Treffern.", "logentry-spamblacklist-hit": "{{GENDER:$2|$1}} verursachte einen Spam-Blacklist-Treffer auf „$3“ durch das versuchte Hinzufügen von $4.", "right-spamblacklistlog": "Spam-Blacklist-Logbuch ansehen", - "action-spamblacklistlog": "dieses Logbuch einzusehen" + "action-spamblacklistlog": "dieses Logbuch einzusehen", + "apihelp-spamblacklist-description": "Ãœberprüft eine oder mehrere URLs gegen die Spam-Blacklist.", + "apihelp-spamblacklist-param-url": "Gegen die Blacklist zu überprüfende URLs.", + "apihelp-spamblacklist-example-1": "Ãœberprüft zwei URLs gegen die Blacklist" } diff --git a/extensions/SpamBlacklist/i18n/et.json b/extensions/SpamBlacklist/i18n/et.json index 9b4c4002..dd00fedc 100644 --- a/extensions/SpamBlacklist/i18n/et.json +++ b/extensions/SpamBlacklist/i18n/et.json @@ -17,5 +17,8 @@ "log-description-spamblacklist": "Siin on loetletud rämpspostituse musta nimekirja tabamused.", "logentry-spamblacklist-hit": "$1 püüdis lisada leheküljele $3 rämpspostituse mustas nimekirjas olevat linki $4.", "right-spamblacklistlog": "Vaadata rämpsu musta nimekirja", - "action-spamblacklistlog": "vaadata rämpsu musta nimekirja" + "action-spamblacklistlog": "vaadata rämpsu musta nimekirja", + "apihelp-spamblacklist-description": "Ãœhe või enama internetiaadressi valideerimine rämpsposti musta nimekirja vastu.", + "apihelp-spamblacklist-param-url": "Internetiaadressid, mida musta nimekirja vastu valideerida.", + "apihelp-spamblacklist-example-1": "Kontrolli kaht internetiaadressi musta nimekirja vastu" } diff --git a/extensions/SpamBlacklist/i18n/fr.json b/extensions/SpamBlacklist/i18n/fr.json index 82dd7090..42b07813 100644 --- a/extensions/SpamBlacklist/i18n/fr.json +++ b/extensions/SpamBlacklist/i18n/fr.json @@ -20,5 +20,8 @@ "log-description-spamblacklist": "Ces événements tracent les correspondances avec la liste noire des pourriels.", "logentry-spamblacklist-hit": "{{GENDER:$2|$1}} a provoqué une correspondance avec la liste noire des pourriels sur $3 en essayant d’ajouter $4.", "right-spamblacklistlog": "Afficher le journal de la liste noire des pourriels", - "action-spamblacklistlog": "afficher le journal de la liste noir des pourriels" + "action-spamblacklistlog": "afficher le journal de la liste noir des pourriels", + "apihelp-spamblacklist-description": "Valider une ou plus URLs d’après SpamBlacklist.", + "apihelp-spamblacklist-param-url": "URLs à valider d’après la liste noire.", + "apihelp-spamblacklist-example-1": "Vérifier deux URLs d’après la liste noire" } diff --git a/extensions/SpamBlacklist/i18n/gl.json b/extensions/SpamBlacklist/i18n/gl.json index 58c3cc7c..a1383499 100644 --- a/extensions/SpamBlacklist/i18n/gl.json +++ b/extensions/SpamBlacklist/i18n/gl.json @@ -3,7 +3,8 @@ "authors": [ "Alma", "Toliño", - "Xosé" + "Xosé", + "Elisardojm" ] }, "spam-blacklist": " #
    \n# As ligazóns externas que coincidan na súa totalidade ou en parte con algún rexistro desta lista serán bloqueadas cando se intenten engadir a unha páxina.\n# Esta lista afecta unicamente a este wiki; tamén existe unha lista global.\n# Para obter máis documentación vaia a https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# A sintaxe é a seguinte:\n#   * Todo o que vaia despois dun carácter \"#\" ata o final da liña é un comentario\n#   * Toda liña que non estea en branco é un fragmento de expresión regular que só coincide con dominios dentro de enderezos URL\n\n #
    ", @@ -19,5 +20,8 @@ "log-description-spamblacklist": "Este rexistro fai un seguimento das coincidencias coa lista negra de spam.", "logentry-spamblacklist-hit": "$1 provocou a activación da lista negra de spam en \"$3\" ao intentar engadir $4.", "right-spamblacklistlog": "Ver o rexistro da lista negra de spam", - "action-spamblacklistlog": "ver o rexistro da lista negra de spam" + "action-spamblacklistlog": "ver o rexistro da lista negra de spam", + "apihelp-spamblacklist-description": "Validar unha o máis URLs contra a lista negra de spam.", + "apihelp-spamblacklist-param-url": "URLs a validar contra a lista negra.", + "apihelp-spamblacklist-example-1": "Comprobar dúas URLs contra a lista negra." } diff --git a/extensions/SpamBlacklist/i18n/kk-cyrl.json b/extensions/SpamBlacklist/i18n/kk-cyrl.json index 31642b9a..ca50b7b1 100644 --- a/extensions/SpamBlacklist/i18n/kk-cyrl.json +++ b/extensions/SpamBlacklist/i18n/kk-cyrl.json @@ -7,6 +7,11 @@ }, "spam-blacklist": " # ОÑÑ‹ тізімге ÑÓ™Ð¹ÐºÐµÑ Ñыртқы URL жайлар бетке Ò¯Ñтеуден бұғатталады.\n # Бұл тізім тек мындағы уикиге Ó™Ñер етеді; тағы да ғаламдық қара тізімді қарап шығыңыз.\n # Құжаттама үшін https://www.mediawiki.org/wiki/Extension:SpamBlacklist бетін қараңыз\n #
    \n#\n# СинтакÑиÑÑ– келеÑідей:\n#  * «#» нышанынан баÑтап жол аÑғына дейінгілерінің бүкілі мәндеме деп Ñаналады\n#  * Ð‘Ð¾Ñ ÐµÐ¼ÐµÑ Ó™Ñ€ жол тек URL жайлардың ішіндегі хоÑттарға ÑÓ™Ð¹ÐºÐµÑ Ð¶Ò¯Ð¹ÐµÐ»Ñ– айтылымдың (regex) бөлігі деп Ñаналады\n\n #
    ", "spam-whitelist": " #
    \n# ОÑÑ‹ тізімге ÑÓ™Ð¹ÐºÐµÑ Ñыртқы URL жайлар *бұғатталмайды*,\n# (қара тізімдегі жазбамен бұғатталған болÑа да).\n#\n# СинтакÑиÑÑ– келеÑідей:\n#  * «#» нышанынан баÑтап жол аÑғына дейінгілерінің бүкілі мәндеме деп Ñаналады\n#  * Ð‘Ð¾Ñ ÐµÐ¼ÐµÑ Ó™Ñ€ жол тек URL жайлардың ішіндегі хоÑттарға ÑÓ™Ð¹ÐºÐµÑ Ð¶Ò¯Ð¹ÐµÐ»Ñ– айтылымдың (regex) бөлігі деп Ñаналады\n\n #
    ", + "spam-blacklisted-email": "Қара тізімге енген е-почта мекенжай", + "spam-blacklisted-email-text": "Сіздің Ñлектронды почта мекенжайыңыз қазіргі уақытта баÑқа қатыÑушыларға Ñлектронды хат жіберуі қара тізімге енген.", + "spam-blacklisted-email-signup": "Берілген Ñлектронды почта мекенжай қазіргі уақытта қолданылуы қара тізімге енген.", "spam-invalid-lines": "Спам қара тізіміндегі келеÑÑ– {{PLURAL:$1|жолда|жолдарда}} жарамÑыз жүйелі {{PLURAL:$1|айтылым|айтылымдар}} бар, және бетті Ñақтаудың {{PLURAL:$1|бұны|бұларды}} дұрыÑтау керек.", - "log-name-spamblacklist": "Спамдардың қаратізімі журналы" + "log-name-spamblacklist": "Спамдардың қаратізімі журналы", + "right-spamblacklistlog": "Спам қара тізімі журналын қарау", + "action-spamblacklistlog": "Ñпам қара тізімі журналын қарау" } diff --git a/extensions/SpamBlacklist/i18n/ksh.json b/extensions/SpamBlacklist/i18n/ksh.json index 63f03fef..459d4d89 100644 --- a/extensions/SpamBlacklist/i18n/ksh.json +++ b/extensions/SpamBlacklist/i18n/ksh.json @@ -10,7 +10,7 @@ "email-whitelist": " #
    \n# e-mail-Addräße uß dä Leß wäde  zojelohße beim Aanmälde un beim e-mail-Verschecke,\n# och wann se op en „schwazze Leß“ schtonn.\n#\n #
    \n# Dä Opbou es:\n# * Alles fun enem #-Zeiche bes an et Engk fun ene Reih es ene Kommentaa för de Minsche\n# * Jede Reih met jet dren es ene rejolähre Ußdrok, wohmet dä Name vum Rääschner en de e-mail-Addräße jeprööf wääde kann.", "spam-blacklisted-email": "Di e-mail-Addräß es op der „schwazze Lėß“", "spam-blacklisted-email-text": "Ding e-mail-Addräß es em Momang op dä „schwazze Lėß“ un De kanns dermet kein e-mail aan ander Metmaacher verschecke.", - "spam-blacklisted-email-signup": "Di aanjejovve Addräß för de e-mail es em Momang op dä „schwazze Lėß“ un kann nit jebruch wääde.", + "spam-blacklisted-email-signup": "Di aanjejovve Adräß för de e-mail es em Momang op dä „schwazze Lėß“ un kann nit jebruch wähde.", "spam-invalid-lines": "Mer han Fähler en rejolähre Ußdröck jefonge.\n{{PLURAL:$1|De Reih onge schtemmp nit un moß|Di $1 Reije onge schtemme nit un möße|Dat sull}}\nför em Afschpeischere eets en Oodenong jebraat wääde:", "spam-blacklist-desc": "Met rejolähre Ußdröck jääje der SPAM — övver en [[MediaWiki:Spam-blacklist|„schwazze Leß“]] med URLs en Sigg un e-mail-Adräße för aanjemälldte Metmaacher.", "log-name-spamblacklist": "Et Logbohch vun de „schwazze Leß“ för der SPAM", diff --git a/extensions/SpamBlacklist/i18n/lt.json b/extensions/SpamBlacklist/i18n/lt.json new file mode 100644 index 00000000..08d614ba --- /dev/null +++ b/extensions/SpamBlacklist/i18n/lt.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "Albertas" + ] + }, + "spam-blacklist": " #
    \n# IÅ¡orinÄ—s URL nuorodos patenkanÄios į šį sÄ…raÅ¡Ä… bus blokuojamos, įterpus jas į puslapį.\n# Å is sÄ…raÅ¡as paveiks tik šį vikį; taip pat galite remtis globaliu juoduoju nuorodų sÄ…raÅ¡u.\n# Dokumentacijai žiÅ«rÄ—kite https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# SintaksÄ— tokia:\n#   * Viskas nuo \"#\" simbolio iki eilutÄ—s galo yra komentaras\n#   * Kiekviena ne tuÅ¡Äia eilutÄ— yra reguliariosios iÅ¡raiÅ¡kos fragmentas, kuris atitinka tik URL nuorodose esanÄius serverių pavadinimus\n\n #
    ", + "spam-whitelist": " #
    \n# IÅ¡orinÄ—s URL nuorodos, patenkanÄios į šį sÄ…raÅ¡Ä…, *nebus* užklokuojamos, net jeigu bÅ«tų užblokuotos juodojo sÄ…raÅ¡o įraÅ¡ais.\n#\n# SintaksÄ— tokia:\n#   * Viskas po \"#\" simbolio iki eilutÄ—s pabaigos yra komentaras\n#   * Kiekvienas netuÅ¡Äia eilutÄ— yra reguliariosios iÅ¡raiÅ¡kos fragmentas, kuris atitinka URL nuorodose esanÄius serverių vardus\n\n #
    ", + "email-blacklist": " #
    \n# El. paÅ¡to adresai patenkantys į šį sÄ…raÅ¡Ä… bus užblokuoti, kad su jais nebÅ«tų galima susikurti paskyros ir siųsti el. laiÅ¡kų.\n# Å is sÄ…raÅ¡as paveiks tik šį vikį; taip pat galite remtis ir globaliu juoduoju sÄ…raÅ¡u.\n# DokumentacijÄ… galite rasti Äia https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# SintaksÄ— tokia:\n#   * Viskas nuo \"#\" simbolio iki eilutÄ—s pabaigos yra komentaras\n#   * Kiekviena netuÅ¡Äia eilutÄ— yra reguliariosios iÅ¡raiÅ¡kos fragmentas, kuris žymį el. paÅ¡to serverio pavadinimÄ…\n\n #
    ", + "email-whitelist": " #
    \n# El. paÅ¡to adresai, patenkantys į šį sÄ…raÅ¡Ä…, *nebus* blokuojami, net jeigu bÅ«tų blokuojami juodojo sÄ…raÅ¡o įraÅ¡ais.\n#\n# SintaksÄ— tokia:\n#   * Viskas nuo \"#\" simbolio iki eilutÄ—s pabaigos yra komentaras\n#   * Kiekviena netuÅ¡Äia eilutÄ— yra reguliariosios iÅ¡raiÅ¡kos fragmentas, kuris žymi tik el. paÅ¡to serverio vardÄ…\n\n #
    ", + "spam-blacklisted-email": "El. paÅ¡to adresai, įtraukti į juodÄ…jį sÄ…raÅ¡Ä…", + "spam-blacklisted-email-text": "JÅ«sų el. paÅ¡to adresas dabar yra įtrauktas į juodÄ…jį sÄ…raÅ¡Ä…, kad negalÄ—tumÄ—te siųsti el. laiÅ¡kų kitiems naudotojams.", + "spam-blacklisted-email-signup": "Nurodytasis el. paÅ¡to adresas dabar yra įtrauktas į juodÄ…jį sÄ…raÅ¡Ä…, kad juo nebÅ«tų galima naudotis.", + "spam-invalid-lines": "{{PLURAL:$1|Å i brukalo juodojo sÄ…raÅ¡o eilutÄ— yra|Å ios brukalo juodojo sÄ…raÅ¡o eilutÄ—s yra}} {{PLURAL:$1|netinkama reguliarioji iÅ¡raiÅ¡ka|netinkamos reguliariosios iÅ¡raiÅ¡kos}} ir {{PLURAL:$1|jÄ… reikia|jas reikia}} pataisyti prieÅ¡ iÅ¡saugant puslapį:", + "spam-blacklist-desc": "Reguliariomis iÅ¡raiÅ¡komis grįstas anti brukalinis įrankis, leidžiantis puslapiuose esanÄias URL nuorodas ir prisiregistravusių naudotojų el. paÅ¡to adresus įtraukti į juodÄ…jį sÄ…raÅ¡Ä…", + "log-name-spamblacklist": "Brukalo juodojo sÄ…raÅ¡o žurnalas", + "log-description-spamblacklist": "Å ie įvykiai seka brukalo juodojo sÄ…raÅ¡o sužadinimus.", + "logentry-spamblacklist-hit": "{{GENDER:$2|$1}} sukÄ—lÄ— brukalo juodojo sÄ…raÅ¡o sužadinimÄ… $3 puslapyje, bandydamas pridÄ—ti $4.", + "right-spamblacklistlog": "PeržiÅ«rÄ—ti brukalo juodojo sÄ…raÅ¡o žurnalÄ…", + "action-spamblacklistlog": "peržiÅ«rÄ—ti brukalo juodojo sÄ…raÅ¡o žurnalÄ…", + "apihelp-spamblacklist-description": "Patikrinti vienÄ… arba daugiau URL nuorodų ar jos nÄ—ra SpamBlacklist.", + "apihelp-spamblacklist-param-url": "URL nuorodos, kurias patikrinti, ar nÄ—ra juodajame sÄ…raÅ¡e.", + "apihelp-spamblacklist-example-1": "Patikrinti dvi URL nuorodas, ar nÄ—ra juodajame sÄ…raÅ¡e" +} diff --git a/extensions/SpamBlacklist/i18n/ml.json b/extensions/SpamBlacklist/i18n/ml.json index 13dd37a9..abc0b5cb 100644 --- a/extensions/SpamBlacklist/i18n/ml.json +++ b/extensions/SpamBlacklist/i18n/ml.json @@ -17,5 +17,8 @@ "log-description-spamblacklist": "പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµ† ഉണർതàµà´¤à´¿à´¯ à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•à´³àµà´Ÿàµ† രേഖ.", "logentry-spamblacklist-hit": "$3 à´Žà´¨àµà´¨ താളിൽ $4 à´Žà´¨àµà´¨à´¤àµ ചേർകàµà´•à´¾àµ» $1 നടതàµà´¤à´¿à´¯ à´¶àµà´°à´®à´‚ പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ à´•àµà´Ÿàµà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ.", "right-spamblacklistlog": "പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´• രേഖ കാണàµà´•", - "action-spamblacklistlog": "പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´• രേഖ കാണàµà´•" + "action-spamblacklistlog": "പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´• രേഖ കാണàµà´•", + "apihelp-spamblacklist-description": "പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ à´’à´¨àµà´¨àµ‹ അതിലധികമോ à´¯àµ.ആർ.à´Žà´²àµà´²àµà´•àµ¾ പരിശോധികàµà´•àµà´•.", + "apihelp-spamblacklist-param-url": "à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ പരിശോധികàµà´•àµ‡à´£àµà´Ÿ à´¯àµ.ആർ.à´Žà´²àµà´²àµà´•àµ¾", + "apihelp-spamblacklist-example-1": "à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ à´°à´£àµà´Ÿàµ à´¯àµ.ആർ.à´Žà´²àµà´²àµà´•àµ¾ പരിശോധികàµà´•àµà´•" } diff --git a/extensions/SpamBlacklist/i18n/nap.json b/extensions/SpamBlacklist/i18n/nap.json new file mode 100644 index 00000000..2670e31a --- /dev/null +++ b/extensions/SpamBlacklist/i18n/nap.json @@ -0,0 +1,24 @@ +{ + "@metadata": { + "authors": [ + "C.R." + ] + }, + "spam-blacklist": " #
    \n# Ll'url esterne ca s'azzeccano dint'a st'elenco sarranno bluccate quanno s'azzecarranno a na paggena.\n# St'elenco s'apprecase surtanto a sta wiki; si vulite vedite l'elenco niro globbale.\n# Pe' documentazione vedite https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 'A sintassi sta ccà abbascio:\n#   * Tuttuquante 'e nu carattere \"#\" a 'o fine d' 'a linea è nu commento\n#   * Tuttuquante linee 'n bianco songo nu fragmento regex ca mmustarrà surtanto 'e host dint'a n'URL\n\n #
    ", + "spam-whitelist": " #
    \n# L' URLs 'e fore ca s'azzeccassero a st'elenco *nun* sarranno bloccate pure quanno se songo mise dint'a\n# l'elenco 'e site bluccate p' 'a lista nera.\n#\n# 'A sintasse è chesta ccà, oj cann:\n#   * Ognecose ca tène 'o carattere \"#\" mponta 'a fine d' 'a linea è nu commento\n#   * Ogne linea ca nun è abbacante è nu frammento 'e regex ca ve facesse 'o cunfronto cu ll'host dint'a ll'URL\n\n #
    ", + "email-blacklist": " #
    \n# Indirizze e-mail, quanno fossero azzeccate a st'elenco sarranno bluccate 'e se ffà 'o riggistro o mannà mail.\n# St'elenco s'apprecase surtanto a sta wiki; si vulite vedite l'elenco niro globbale.\n# Pe' documentazione vedite https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 'A sintassi 'a vedite ccà abbascio, oj cann:\n#   * Tuttuquante 'e nu carattere \"#\" a 'o fine d' 'a linea è nu commento\n#   * Tuttuquante linee 'n bianco songo nu fragmento regex ca mmustarrà surtanto 'e host dint'a n'URL\n\n #
    ", + "email-whitelist": " #
    \n# E-mail ca s'azzeccassero a st'elenco *nun* sarranno bloccate pure quanno se songo mise dint'a\n# l'elenco 'e site bluccate p' 'a lista nera.\n#\n# 'A sintasse è chesta ccà, oj cann:\n#   * Ognecose ca tène 'o carattere \"#\" mponta 'a fine d' 'a linea è nu commento\n#   * Ogne linea ca nun è abbacante è nu frammento 'e regex ca ve facesse 'o cunfronto cu ll'host dint'a ll'URL\n\n #
    ", + "spam-blacklisted-email": "Elenco 'email a gnurà", + "spam-blacklisted-email-text": "'O ndirizzo mail d' 'o vuosto è mo' mo' dint'a na lista nira pe' nun putè mannà mmasciate a ll'ati utente", + "spam-blacklisted-email-signup": "'O indirizzo e-mail dato è dint'a lista nira pe' nun 'o puté ausà.", + "spam-invalid-lines": "Dint'a l'elenco nero 'e spam {{PLURAL:$1|'a linea ccà|'e linee ccà}} {{PLURAL:$1|è n'espressione|songo espressiune}} regolare e {{PLURAL:$1|ce buò|ce vonno}} l'arricette primm' 'e sarvà 'a paggena:", + "spam-blacklist-desc": "'O tool anti-spam basato ncopp' 'o Regex-based premmettesse 'e ce miettere dint' 'a lista nira tutte l'URLs dint' 'e paggene e indirizze email pe utente riggistrate", + "log-name-spamblacklist": "Riggistro d' 'a lista nira p' 'o spam", + "log-description-spamblacklist": "Sti evente se pigliassero e cuntrullasero 'e click dint'a l'elenco niro d' 'o spam.", + "logentry-spamblacklist-hit": "{{GENDER:$2|$1}} causaje na trasuta dint'a l'elenco niro dint'a $3 pe' pruvà 'e s'azzeccà $4.", + "right-spamblacklistlog": "Vide 'o riggistro d' 'a lista nira", + "action-spamblacklistlog": "vide 'o riggistro d' 'a lista nira", + "apihelp-spamblacklist-description": "Valida uno o cchiù URL annanz' 'o SpamBlackList.", + "apihelp-spamblacklist-param-url": "URL pe' validà annanz' 'a lista nira.", + "apihelp-spamblacklist-example-1": "Cuntrolla ddoje URL nfacci' 'a lista nira" +} diff --git a/extensions/SpamBlacklist/i18n/or.json b/extensions/SpamBlacklist/i18n/or.json index ee30b145..3572818b 100644 --- a/extensions/SpamBlacklist/i18n/or.json +++ b/extensions/SpamBlacklist/i18n/or.json @@ -10,7 +10,7 @@ "email-blacklist": " #
    \n# à¬à¬¹à¬¿ ତାଲିକାରେ ଥିବା ଇ-ମେଲ ଠିକଣାଗà­à¬¡à¬¿à¬•à­ ପଞà­à¬œà­€à¬•à¬°à¬£ କିମà­à¬¬à¬¾ ଇ-ମେଲ ପଠେଇବାରୠଅଟକ ରଖାଯିବ\n# à¬à¬¹à¬¿ ତାଲିକାଟି କେବଳ à¬à¬¹à¬¿ ଉଇକିରେ କାରà­à¬¯à­à­Ÿà¬•à¬¾à¬°à­€ ହେବ ; ଜାଗତିକ ଅଟକ ତାଲିକାକୠମଧà­à­Ÿ ଦେଖନà­à¬¤à­ ।\n# ନଥିପତà­à¬° ପାଇଠhttps://www.mediawiki.org/wiki/Extension:SpamBlacklist ଦେଖନà­à¬¤à­\n#\n# ସିନà­à¬Ÿà¬¾à¬•à­à¬¸à¬Ÿà¬¿ ହେଉଛି:\n#   * \"#\"ଠାରୠଆରମà­à¬­ କରି ଧାଡିର ଶେଷ ପରà­à¬¯à­à­Ÿà¬¨à­à¬¤ ସମସà­à¬¤ ଲେଖାଟି ହେଉଛି ଗୋଟେ ମନà­à¬¤à¬¬à­à­Ÿ\n#   * ସମସà­à¬¤ ଖାଲିନଥିବା ଧାଡି ହେଉଛି à¬à¬• ରେଜେକà­à¬¸ ଫà­à¬°à¬¾à¬—ମେଣà­à¬Ÿ ଯାହାକି ଇ-ମେଲ ଠିକଣାଗà­à¬¡à¬¿à¬• ଭିତରେ ଥିବା ହୋଷà­à¬Ÿà¬—à­à¬¡à¬¿à¬• ସହ ମିଳେଇବ ।\n\n #
    ", "email-whitelist": " #
    \n# à¬à¬¹à¬¿ ତାଲିକାରେ ଥିବା ଇ-ମେଲ ଠିକଣାଗà­à¬¡à¬¿à¬•à­  ଅଟକ ରଖାଯିବ *ନାହିà¬*\n# ଯଦିଓ ସେଗà­à¬¡à¬¿à¬• ବାସନà­à¬¦ ତାଲିକାରେ ଅଟକ ରଖାଯାଇଥିବ ।\n#\n# ସିନà­à¬Ÿà¬¾à¬•à­à¬¸à¬Ÿà¬¿ ହେଉଛି:\n#  * \"#\"ଠାରୠଆରମà­à¬­ କରି ଧାଡିର ଶେଷ ପରà­à¬¯à­à­Ÿà¬¨à­à¬¤ ସମସà­à¬¤ ଲେଖାଟି ହେଉଛି ଗୋଟେ ମନà­à¬¤à¬¬à­à­Ÿ\n#  * ସମସà­à¬¤ ଖାଲିନଥିବା ଧାଡି ହେଉଛି à¬à¬• ରେଜେକà­à¬¸ ଫà­à¬°à¬¾à¬—ମେଣà­à¬Ÿ ଯାହାକି ଇ-ମେଲ ଠିକଣାଗà­à¬¡à¬¿à¬• ଭିତରେ ଥିବା ହୋଷà­à¬Ÿà¬—à­à¬¡à¬¿à¬• ସହ ମିଳେଇବ ।\n\n #
    ", "spam-blacklisted-email": "ବନà­à¬¦ କରାଯାଇଥିବା ଇ-ମେଲ ଠିକଣା", - "spam-blacklisted-email-text": "ଆପଣଙà­à¬• ଇ-ମେଲ ଠିକଣାଟି ଅନà­à­Ÿà¬®à¬¾à¬¨à¬™à­à¬•à­ ଇ-ମେଲ ପଠାଇବାରୠବାସନà­à¬¦ କରାଯାଇଛି ।", + "spam-blacklisted-email-text": "ଆପଣଙà­à¬• ଇମେଲଟି ବାସନà­à¬¦ କରାଯାଇଥିବାରୠବାକିମାନଙà­à¬•à­ ଇମେଲ ପଠାଇପାରିବେ ନାହିଠ।", "spam-blacklisted-email-signup": "ଦିଆଯାଇଥିବା ଇ-ମେଲ ଠିକଣାଟି ବà­à­Ÿà¬¬à¬¹à¬¾à¬°à¬•à¬°à¬¿à¬¬à¬¾à¬°à­ ବାସନà­à¬¦ କରାଯାଇଛି ।", "spam-invalid-lines": "à¬à¬¹à¬¿ ସà­à¬ªà¬¾à¬® ଅଟକତାଲିକା {{PLURAL:$1|ଧାଡ଼ିଟି|ଧାଡ଼ିସବà­}} ଅଚଳ ସାଧାରଣ {{PLURAL:$1|ପରିପà­à¬°à¬•à¬¾à¬¶|ପରିପà­à¬°à¬•à¬¾à¬¶}} ଓ ସାଇତିବା ଆଗରୠ{{PLURAL:$1|ତାହାକୠସà­à¬§à¬¾à¬°à¬¿à¬¬à¬¾ ଲୋଡ଼ା|ସେହିସବà­à¬•à­ ସà­à¬§à¬¾à¬°à¬¿à¬¬à¬¾ ଲୋଡ଼ା}}:", "spam-blacklist-desc": "Regex-ଭିତà­à¬¤à¬¿à¬• ସà­à¬ªà¬¾à¬®-ବିରୋଧୀ ଉପକରଣ: [[MediaWiki:Spam-blacklist]] ଓ [[MediaWiki:Spam-whitelist]]" diff --git a/extensions/SpamBlacklist/i18n/pt.json b/extensions/SpamBlacklist/i18n/pt.json index 1d5940fc..30ac3f6b 100644 --- a/extensions/SpamBlacklist/i18n/pt.json +++ b/extensions/SpamBlacklist/i18n/pt.json @@ -6,7 +6,8 @@ "Helder.wiki", "Malafaya", "555", - "He7d3r" + "He7d3r", + "Fúlvio" ] }, "spam-blacklist": " # URLs externas que coincidam com esta lista serão bloqueadas quando forem\n # adicionadas a uma página.\n # Esta lista aplica-se apenas a esta wiki. Consulte também a lista-negra global.\n # Veja a documentação em https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #
    \n#\n# A sintaxe é a seguinte:\n#  * Tudo o que estiver após um \"#\" até o final de uma linha é um comentário\n#  * Todas as linhas que não estiverem em branco são um fragmento de expressão regular\n#    (regex) de busca, que só poderão coincidir com hosts na URL\n\n  #
    ", @@ -15,7 +16,7 @@ "spam-blacklisted-email-text": "Atualmente o seu endereço de e-mail está na lista negra que impede o envio de e-mails a outros utilizadores.", "spam-blacklisted-email-signup": "O endereço de e-mail fornecido não pode ser utilizado pois está na lista negra.", "spam-invalid-lines": "{{PLURAL:$1|A entrada|As entradas}} abaixo {{PLURAL:$1|é uma expressão regular|são expressões regulares}} ''(regex)'' {{PLURAL:$1|inválida e precisa|inválidas e precisam}} de ser {{PLURAL:$1|corrigida|corrigidas}} antes de gravar a página:", - "spam-blacklist-desc": "Ferramenta anti-\"spam\" baseada em Regex: [[MediaWiki:Spam-blacklist]] e [[MediaWiki:Spam-whitelist]]", + "spam-blacklist-desc": "Ferramenta anti-spam baseada em Regex que permite a filtragem de URLs em páginas e endereços de e-mail para utilizadores registrados", "log-name-spamblacklist": "Registros da lista negra de spam", "log-description-spamblacklist": "Estes eventos acompanham as ocorrências da lista negra de spam.", "logentry-spamblacklist-hit": "$1 ativou a lista negra de spam em $3 ao tentar inserir $4.", diff --git a/extensions/SpamBlacklist/i18n/ru.json b/extensions/SpamBlacklist/i18n/ru.json index 005da121..0213621f 100644 --- a/extensions/SpamBlacklist/i18n/ru.json +++ b/extensions/SpamBlacklist/i18n/ru.json @@ -25,5 +25,7 @@ "logentry-spamblacklist-hit": "$1 вызвал Ñрабатывание Ñпам-лиÑта на Ñтранице $3 из-за попытки добавить $4.", "right-spamblacklistlog": "проÑмотр журнала Ñпам-лиÑта", "action-spamblacklistlog": "проÑмотр журнала Ñпам-лиÑта", - "apihelp-spamblacklist-param-url": "URL-адреÑа Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ в чёрном ÑпиÑке." + "apihelp-spamblacklist-description": "Проверить один или неÑколько URL-адреÑов Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SpamBlacklist.", + "apihelp-spamblacklist-param-url": "URL-адреÑа Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ в чёрном ÑпиÑке.", + "apihelp-spamblacklist-example-1": "Проверить два URL-адреÑа по чёрному ÑпиÑку" } diff --git a/extensions/SpamBlacklist/i18n/sa.json b/extensions/SpamBlacklist/i18n/sa.json index 03093f35..73d58491 100644 --- a/extensions/SpamBlacklist/i18n/sa.json +++ b/extensions/SpamBlacklist/i18n/sa.json @@ -1,16 +1,17 @@ { "@metadata": { "authors": [ - "Shubha" + "Shubha", + "NehalDaveND" ] }, "spam-blacklist": " #सूचà¥à¤¯à¤¾à¤‚ विदà¥à¤¯à¤®à¤¾à¤¨à¤¾à¤¨à¤¾à¤‚ सदृशानि बाहà¥à¤¯ URLs अवरà¥à¤¦à¥à¤§à¤¾à¤¨à¤¿ भवनà¥à¤¤à¤¿ यदा पृषà¥à¤ à¤‚ योजà¥à¤¯à¤¤à¥‡ ।\n #à¤à¤·à¤¾ सूची असà¥à¤¯à¤¾à¤‚ वीकà¥à¤¯à¤¾à¤‚ पà¥à¤°à¤­à¤¾à¤µà¤•à¤¾à¤°à¤¿à¤£à¥€ असà¥à¤¤à¤¿; वैशà¥à¤µà¤¿à¤•à¤¦à¥à¤°à¥à¤ªà¤¯à¥à¤•à¥à¤¤à¤¾à¤µà¤²à¥à¤¯à¤¾à¤ƒ कृते अपि आनà¥à¤µà¤¿à¤¤à¤‚ भवति ।\n #पà¥à¤°à¤²à¥‡à¤–नाय दृशà¥à¤¯à¤¤à¤¾à¤®à¥ https://www.mediawiki.org/wiki/Extension:SpamBlacklist \n #
    \n#\n#विनà¥à¤¯à¤¾à¤¸à¤ƒ à¤à¤µà¤‚ विदà¥à¤¯à¤¤à¥‡ :\n#  * \"#\" तः आरभà¥à¤¯à¤®à¤¾à¤£à¤¾à¤ƒ पङà¥à¤•à¥à¤¤à¥‡à¤ƒ अनà¥à¤¤à¥à¤¯à¤ªà¤°à¥à¤¯à¤¨à¥à¤¤à¤‚ विदà¥à¤¯à¤®à¤¾à¤¨à¤ƒ अभिपà¥à¤°à¤¾à¤¯à¤ƒ भवति ।\n#  * पà¥à¤°à¤¤à¥à¤¯à¥‡à¤•à¤‚ रिकà¥à¤¤à¤°à¤¹à¤¿à¤¤à¤¾ पंकà¥à¤¤à¤¿à¤ƒ regex fragment भवति यतॠURLs  अनà¥à¤¤à¤°à¥à¤—तैः आयोजकैः तà¥à¤²à¥à¤¯à¤¤à¥‡\n #
    ", "spam-whitelist": " #
    \n#असà¥à¤¯à¤¾à¤‚ सूचà¥à¤¯à¤¾à¤‚ विदà¥à¤¯à¤®à¤¾à¤¨à¤¾à¤¨à¤¾à¤‚ सदृशानि URLs  *न* अवरà¥à¤¦à¥à¤§à¥à¤¯à¤¨à¥à¤¤à¥‡ यदà¥à¤¯à¤ªà¤¿ शकà¥à¤¯à¤®à¥\n# दà¥à¤°à¥à¤ªà¤¯à¥à¤•à¥à¤¤à¤ªà¥à¤°à¤µà¥‡à¤¶à¥ˆà¤ƒ अवरà¥à¤¦à¥à¤§à¤®à¤¸à¥à¤¤à¤¿ ।\n#\n #
    ", "email-blacklist": " #सूचà¥à¤¯à¤¾à¤‚ विदà¥à¤¯à¤®à¤¾à¤¨à¤¾à¤¨à¤¾à¤‚ सदृशाः बाहà¥à¤¯ ईपतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤¾à¤ƒ पञà¥à¤œà¥€à¤•à¤°à¤£à¤¾à¤¤à¥ ईपतà¥à¤°à¤ªà¥à¤°à¥‡à¤·à¤£à¤¾à¤¤à¥ च अवरà¥à¤¦à¥à¤§à¤¾à¤ƒ भवनà¥à¤¤à¤¿ \n #à¤à¤·à¤¾ सूची असà¥à¤¯à¤¾à¤‚ वीकà¥à¤¯à¤¾à¤‚ पà¥à¤°à¤­à¤¾à¤µà¤•à¤¾à¤°à¤¿à¤£à¥€ असà¥à¤¤à¤¿; वैशà¥à¤µà¤¿à¤•à¤¦à¥à¤°à¥à¤ªà¤¯à¥à¤•à¥à¤¤à¤¾à¤µà¤²à¥à¤¯à¤¾à¤ƒ कृते अपि आनà¥à¤µà¤¿à¤¤à¤‚ भवति ।\n #पà¥à¤°à¤²à¥‡à¤–नाय दृशà¥à¤¯à¤¤à¤¾à¤®à¥ https://www.mediawiki.org/wiki/Extension:SpamBlacklist \n #
    \n#\n#विनà¥à¤¯à¤¾à¤¸à¤ƒ à¤à¤µà¤‚ विदà¥à¤¯à¤¤à¥‡ :\n#  * \"#\" तः आरभà¥à¤¯à¤®à¤¾à¤£à¤¾à¤ƒ पङà¥à¤•à¥à¤¤à¥‡à¤ƒ अनà¥à¤¤à¥à¤¯à¤ªà¤°à¥à¤¯à¤¨à¥à¤¤à¤‚ विदà¥à¤¯à¤®à¤¾à¤¨à¤ƒ अभिपà¥à¤°à¤¾à¤¯à¤ƒ भवति ।\n#  * पà¥à¤°à¤¤à¥à¤¯à¥‡à¤•à¤‚ रिकà¥à¤¤à¤°à¤¹à¤¿à¤¤à¤¾ पंकà¥à¤¤à¤¿à¤ƒ regex fragment भवति यतॠURLs  अनà¥à¤¤à¤°à¥à¤—तैः आयोजकैः तà¥à¤²à¥à¤¯à¤¤à¥‡\n #
    ", "email-whitelist": " #
    \n#असà¥à¤¯à¤¾à¤‚ सूचà¥à¤¯à¤¾à¤‚ विदà¥à¤¯à¤®à¤¾à¤¨à¤¾à¤¨à¤¾à¤‚ सदृशाः ईपतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤¾à¤ƒ *न* अवरà¥à¤¦à¥à¤§à¥à¤¯à¤¨à¥à¤¤à¥‡ यदà¥à¤¯à¤ªà¤¿ शकà¥à¤¯à¤®à¥\n# दà¥à¤°à¥à¤ªà¤¯à¥à¤•à¥à¤¤à¤ªà¥à¤°à¤µà¥‡à¤¶à¥ˆà¤ƒ अवरà¥à¤¦à¥à¤§à¤®à¤¸à¥à¤¤à¤¿ ।\n#\n #
    \n# विनà¥à¤¯à¤¾à¤¸à¤ƒ à¤à¤µà¤‚ भवेतà¥:\n# * \"#\" तः आरभà¥à¤¯à¤®à¤¾à¤£à¤‚ वाकà¥à¤¯à¤¾à¤¨à¥à¤¤à¤ªà¤°à¥à¤¯à¤¨à¥à¤¤à¤‚ विदà¥à¤¯à¤®à¤¾à¤¨à¤®à¥ अभिपà¥à¤°à¤¾à¤¯à¤ƒ मनà¥à¤¯à¤¤à¥‡ \n# * सरà¥à¤µà¤¾à¤ƒ रिकà¥à¤¤à¤°à¤¹à¤¿à¤¤à¤¾à¤ƒ पङà¥à¤•à¥à¤¤à¤¯à¤ƒ regex fragment भवति ये ईपतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤¾à¤¨à¥à¤¤à¤°à¥à¤—तेन अंशेन तà¥à¤²à¥à¤¯à¤¨à¥à¤¤à¥‡", - "spam-blacklisted-email": "निनà¥à¤¦à¥à¤¯à¤ƒ ईपतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤ƒ", - "spam-blacklisted-email-text": "भवतः ईपतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤ƒ समà¥à¤ªà¥à¤°à¤¤à¤¿ निनà¥à¤¦à¥à¤¯à¤¸à¤™à¥à¤•à¥‡à¤¤à¤¾à¤¨à¤¾à¤®à¥ आवलà¥à¤¯à¤¾à¤‚ पà¥à¤°à¤µà¥‡à¤¶à¤¿à¤¤à¤ƒ । अतः अनà¥à¤¯à¥‡à¤­à¥à¤¯à¤ƒ योजकेभà¥à¤¯à¤ƒ ईपतà¥à¤°à¤ªà¥à¤°à¥‡à¤·à¤£à¤‚ नानà¥à¤®à¤¨à¥à¤¯à¤¤à¥‡ ।", - "spam-blacklisted-email-signup": "पà¥à¤°à¤¦à¤¤à¥à¤¤à¤ƒ निनà¥à¤¦à¥à¤¯à¤ƒ ईपतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤ƒ समà¥à¤ªà¥à¤°à¤¤à¤¿ उपयोगे नासà¥à¤¤à¤¿ ।", + "spam-blacklisted-email": "निनà¥à¤¦à¥à¤¯à¤ƒ वि-पतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤ƒ", + "spam-blacklisted-email-text": "भवतः वि-पतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤ƒ समà¥à¤ªà¥à¤°à¤¤à¤¿ निनà¥à¤¦à¥à¤¯à¤¸à¤™à¥à¤•à¥‡à¤¤à¤¾à¤¨à¤¾à¤®à¥ आवलà¥à¤¯à¤¾à¤‚ पà¥à¤°à¤µà¥‡à¤¶à¤¿à¤¤à¤ƒ । अतः अनà¥à¤¯à¥‡à¤­à¥à¤¯à¤ƒ योजकेभà¥à¤¯à¤ƒ वि-पतà¥à¤°à¤ªà¥à¤°à¥‡à¤·à¤£à¤‚ नानà¥à¤®à¤¨à¥à¤¯à¤¤à¥‡ ।", + "spam-blacklisted-email-signup": "पà¥à¤°à¤¦à¤¤à¥à¤¤à¤ƒ निनà¥à¤¦à¥à¤¯à¤ƒ वि-पतà¥à¤°à¤¸à¤™à¥à¤•à¥‡à¤¤à¤ƒ समà¥à¤ªà¥à¤°à¤¤à¤¿ उपयोगे नासà¥à¤¤à¤¿ ।", "spam-invalid-lines": "अधोनिरà¥à¤¦à¤¿à¤·à¥à¤Ÿà¤¾à¤ƒ अनिषà¥à¤Ÿà¤¸à¤¨à¥à¤¦à¥‡à¤¶à¤¦à¥à¤°à¥à¤µà¥ƒà¤¤à¥à¤¤à¤¯à¤ƒ {{PLURAL:$1|पंकà¥à¤¤à¤¿à¤ƒ|पंकà¥à¤¤à¤¿à¤¯à¤ƒ}} अमानà¥à¤¯à¤¾à¤ƒ नियताः {{PLURAL:$1|अभिवà¥à¤¯à¤•à¥à¤¤à¤¿à¤ƒ असà¥à¤¤à¤¿|अभिवà¥à¤¯à¤•à¥à¤¤à¤¯à¤ƒ सनà¥à¤¤à¤¿}} अतः पृषà¥à¤ à¤°à¤•à¥à¤·à¤£à¤¾à¤¤à¥ पूरà¥à¤µà¤‚ तेषां परिषà¥à¤•à¤¾à¤°à¤ƒ अवशà¥à¤¯à¤‚ करà¥à¤¤à¤µà¥à¤¯à¤¾à¤ƒ :", "spam-blacklist-desc": "रेजेकà¥à¤¸à¥-आधारितमॠअनिषà¥à¤Ÿà¤¸à¤¨à¥à¤¦à¥‡à¤¶à¤µà¤¿à¤°à¥‹à¤§à¤¿ उपकरणमà¥: [[MediaWiki:Spam-blacklist]] [[MediaWiki:Spam-whitelist]] च" } diff --git a/extensions/SpamBlacklist/i18n/scn.json b/extensions/SpamBlacklist/i18n/scn.json index 6b734c47..44947ed2 100644 --- a/extensions/SpamBlacklist/i18n/scn.json +++ b/extensions/SpamBlacklist/i18n/scn.json @@ -1,11 +1,13 @@ { "@metadata": { "authors": [ - "Santu" + "Santu", + "Pippinu", + "Sarvaturi" ] }, "spam-blacklist": " # Li URL fora dû sito ca currispùnnunu a la lista di sècutu vènunu bluccati.\n # La lista vali sulu pi stu situ; fari rifirimentu macari a la blacklist glubbali.\n # Pâ ducumentazzioni talìa https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #
    \n# La sintassi è  chista:\n#  * Tuttu chiddu ca veni doppu nu caràttiri \"#\" è nu cummentu, nzinu ca finisci la riga\n#  * Tutti li righi non vacanti sunnu frammenti di sprissioni riulari ca s'àpplicanu sulu ô nomu di l'host nti li URL\n #
    ", "spam-whitelist": " #
    \n# Li URL fora ô situ ca currispùnninu a la lista ccà di sècutu *non* vèninu\n# bluccati, macari ntô casu avìssiru a currispùnniri a arcuni vuci di la blacklist\n#\n# La sintassi è chista:\n#  * Tuttu chiddu ca veni doppu un caràttiri \"#\" è nu cummentu, nzinu a la fini dâ riga\n#  * Tutti li righi non vacanti sunnu frammenti di sprissioni riulari ca s'applìcanu sulu  ô nomu di l'host ntê URL\n\n #
    ", "spam-invalid-lines": "{{PLURAL:$1|La riga di sècutu|Li righi di sècutu}} di la blacklist dô spam {{PLURAL:$1|nun è na sprissioni riulari boni|nun sunnu sprissioni riulari boni}}; currèggiri {{PLURAL:$1|lu sbagghiu|li sbagghi}} prima di sarvari la pàggina.", - "spam-blacklist-desc": "Strumentu antispam basatu supra li sprissioni riulari [[MediaWiki:Spam-blacklist]] e [[MediaWiki:Spam-whitelist]]" + "spam-blacklist-desc": "Strummentu anti-spam basatu supra ê sprissioni riulari chi cunzenti di mèttiri ntâ lista nìura l'URL nta pàggini e nnirizzi di posta elittrònica di l'utenti riggistrati" } diff --git a/extensions/SpamBlacklist/i18n/tr.json b/extensions/SpamBlacklist/i18n/tr.json index 0533d95a..20bcc4c0 100644 --- a/extensions/SpamBlacklist/i18n/tr.json +++ b/extensions/SpamBlacklist/i18n/tr.json @@ -1,11 +1,24 @@ { "@metadata": { "authors": [ - "Joseph" + "Joseph", + "Arystanbek", + "Incelemeelemani" ] }, "spam-blacklist": " # Bu listeyle eşleşen dış bağlantılar, bir sayfaya eklendiğinde engellenecektir. \n # Bu liste sadece bu vikiyi etkiler; ayrıca küresel karalisteye de bakın.\n # Dokümantasyon için https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #
    \n#\n# Sözdizimi aşağıdaki gibidir:\n#  * \"#\" karakterinden satır sonuna kadar her şey bir yorumdur\n#  * Her boş olmayan satır, sadece URLlerin içindeki sunucularla eşleşen regex parçasıdır\n\n #
    ", "spam-whitelist": " #
    \n# Bu listeyle eşlenen dış bağlantılar *engellenmeyecektir*,\n# karaliste girdileriyle engellenmiş olsalar bile.\n#\n# Sözdizimi aşağıdaki gibidir:\n#  * \"#\" karakterinden satır sonuna kadar her şey bir yorumdur\n#  * Her boş olmayan satır, sadece URLlerin içindeki sunucularla eşleşen regex parçasıdır\n\n #
    ", + "spam-blacklisted-email": "Kara listeye e-posta adresi", + "spam-blacklisted-email-text": "E-posta adresinizi ÅŸu anda diÄŸer kullanıcılara e-posta gönderme ve gelen kara listeye alındı.", + "spam-blacklisted-email-signup": "Verilen e-posta adresi ÅŸu anda gelen kara listeye alındı.", "spam-invalid-lines": "Åžu spam karaliste {{PLURAL:$1|satırı|satırları}} geçersiz düzenli {{PLURAL:$1|tanımdır|tanımlardır}} ve sayfayı kaydetmeden düzeltilmesi gerekmektedir:", - "spam-blacklist-desc": "Regex-tabanlı anti-spam aracı: [[MediaWiki:Spam-blacklist]] ve [[MediaWiki:Spam-whitelist]]" + "spam-blacklist-desc": "Düzenli ifade tabanlı anti-spam kayıtlı kullanıcılar için sayfaları ve e-posta adresleri kara listeye URL için izin aracı", + "log-name-spamblacklist": "Spam kara günlük", + "log-description-spamblacklist": "Bu olaylar, spam kara liste, hit parça.", + "logentry-spamblacklist-hit": "{{CÄ°NSÄ°YET:$2|$1}} neden bir spam kara liste, vurmak $3 tarafından eklemeye $4.", + "right-spamblacklistlog": "Görünüm kara günlük spam", + "action-spamblacklistlog": "görünüm kara günlük spam", + "apihelp-spamblacklist-description": "Bu SpamBlacklist karşı bir veya daha fazla URL doÄŸrulamak.", + "apihelp-spamblacklist-param-url": "Kara liste URL lerine yönelik doÄŸrulama", + "apihelp-spamblacklist-example-1": "Kara liste URL lerini iki defa kontrol ediniz" } diff --git a/extensions/SpamBlacklist/i18n/uk.json b/extensions/SpamBlacklist/i18n/uk.json index 4c49246c..b6cbabe6 100644 --- a/extensions/SpamBlacklist/i18n/uk.json +++ b/extensions/SpamBlacklist/i18n/uk.json @@ -6,7 +6,8 @@ "Andriykopanytsia", "AtUkr", "Base", - "Ðта" + "Ðта", + "Piramidion" ] }, "spam-blacklist": "# Зовнішні поÑиланнÑ, що відповідають цьому ÑпиÑку, будуть заборонені Ð´Ð»Ñ Ð²Ð½ÐµÑÐµÐ½Ð½Ñ Ð½Ð° Ñтоірнки.\n # Цей ÑпиÑок діє лише Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— вікі, Ñ–Ñнує також загальний чорний ÑпиÑок.\n # Докладніше на Ñторінці https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #
    \n#\n# СинтакÑиÑ:\n#  * Ð’Ñе, починаючи із Ñимволу \"#\" Ñ– до ÐºÑ–Ð½Ñ†Ñ Ñ€Ñдка, вважаєтьÑÑ ÐºÐ¾Ð¼ÐµÐ½Ñ‚Ð°Ñ€ÐµÐ¼\n#  * Кожен непорожній Ñ€Ñдок Ñ” фрагментом регулÑрного виразу, Ñкий заÑтоÑовуєтьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ до вузла в URL\n\n #
    ", @@ -21,6 +22,9 @@ "log-name-spamblacklist": "Журнал чорного ÑпиÑку Ñпамерів", "log-description-spamblacklist": "Ці події відÑтежують потраплÑÐ½Ð½Ñ Ñƒ чорний ÑпиÑок Ñпамерів.", "logentry-spamblacklist-hit": "$1 Ñпричинив потраплÑÐ½Ð½Ñ Ñƒ чорний ÑпиÑок Ñпамерів на $3, намагаючиÑÑŒ додати $4.", - "right-spamblacklistlog": "ПереглÑд журналу чорного ÑпиÑку Ñпамерів", - "action-spamblacklistlog": "переглÑд журналу \"чорний ÑпиÑок\" Ñпамерів" + "right-spamblacklistlog": "переглÑд журналу чорного ÑпиÑку Ñпамерів", + "action-spamblacklistlog": "переглÑд журналу \"чорний ÑпиÑок\" Ñпамерів", + "apihelp-spamblacklist-description": "Перевірити одну або кілька URL-Ð°Ð´Ñ€ÐµÑ Ñ‡ÐµÑ€ÐµÐ· SpamBlacklist.", + "apihelp-spamblacklist-param-url": "URL-адреÑа Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ у чорному ÑпиÑку.", + "apihelp-spamblacklist-example-1": "Перевірка двох URL-Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾ чорному ÑпиÑку" } diff --git a/extensions/SpamBlacklist/i18n/zh-hans.json b/extensions/SpamBlacklist/i18n/zh-hans.json index 9ef6bf8a..f6d0ad98 100644 --- a/extensions/SpamBlacklist/i18n/zh-hans.json +++ b/extensions/SpamBlacklist/i18n/zh-hans.json @@ -12,7 +12,7 @@ "Yfdyh000" ] }, - "spam-blacklist": " #
    \n# 当加入的外部URL匹é…该表时则会被ç¦æ­¢ã€‚\n# 该表åªä¼šå½±å“本wiki项目;请åŒæ—¶å‚阅全域黑åå•ã€‚\n# æ³¨è§£è¯·è§ https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 语法如下:\n#   * 由“#â€å¼€å¤´çš„æ¯è¡Œå‡ä¸ºæ³¨é‡Š\n#   * éžç©ºç™½è¡Œä¸ºæ­£åˆ™è¡¨è¾¾å¼ç‰‡æ®µï¼Œå…¶åªä¸Žå†…å«è¯¥ç‰‡æ®µçš„URL匹é…\n\n #
    ", + "spam-blacklist": " #
    \n# 当加入的外部URL匹é…该表时则会被ç¦æ­¢ã€‚\n# 该表åªä¼šå½±å“本wiki项目;请åŒæ—¶å‚阅全域黑åå•ã€‚\n# 文档å‚è§https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 语法如下:\n#  * 由“#â€å¼€å¤´çš„æ¯è¡Œå‡ä¸ºæ³¨é‡Š\n#  * éžç©ºç™½è¡Œä¸ºæ­£åˆ™è¡¨è¾¾å¼ç‰‡æ®µï¼Œå…¶åªä¸Žå†…å«è¯¥ç‰‡æ®µçš„URL匹é…\n\n #
    ", "spam-whitelist": " #
    \n# 与该表匹é…çš„URL,å³ä½¿å·²è¢«é»‘åå•çš„规则ç¦æ­¢ä¹Ÿ*ä¸ä¼š*被å°ç¦ã€‚\n#\n# 语法如下:\n#   * 由“#â€å¼€å¤´çš„æ¯è¡Œå‡ä¸ºæ³¨é‡Š\n#   * éžç©ºç™½è¡Œä¸ºæ­£åˆ™è¡¨è¾¾å¼ç‰‡æ®µï¼Œå…¶åªä¸Žå†…å«è¯¥ç‰‡æ®µçš„URL匹é…\n\n #
    ", "email-blacklist": " #
    \n# 与该表匹é…的电å­é‚®ä»¶åœ°å€å°†è¢«ç¦æ­¢æ³¨å†ŒåŠå‘é€é‚®ä»¶\n# 该表åªä¼šå½±å“本wiki项目;请åŒæ—¶å‚阅全域黑åå•ã€‚\n# æ³¨è§£è¯·è§ https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 语法如下:\n#   * 由“#â€å¼€å¤´çš„æ¯è¡Œå‡ä¸ºæ³¨é‡Š\n#   * éžç©ºç™½è¡Œä¸ºæ­£åˆ™è¡¨è¾¾å¼ç‰‡æ®µï¼Œå…¶åªä¸Žå†…å«è¯¥ç‰‡æ®µçš„电å­é‚®ä»¶åœ°å€åŒ¹é…\n\n #
    ", "email-whitelist": " #
    \n# 与该表匹é…的电å­é‚®ä»¶åœ°å€ï¼Œå³ä½¿å·²è¢«é»‘åå•çš„规则ç¦æ­¢ä¹Ÿ*ä¸ä¼š*被å°ç¦ã€‚\n#\n# æ ¼å¼å¦‚下:\n#   * 由“#â€å¼€å¤´çš„æ¯è¡Œå‡ä¸ºæ³¨é‡Š\n#   * éžç©ºç™½è¡Œä¸ºæ­£åˆ™è¡¨è¾¾å¼ç‰‡æ®µï¼Œå…¶åªä¸Žå†…å«è¯¥ç‰‡æ®µçš„电å­é‚®ä»¶åœ°å€åŒ¹é…\n\n #
    ", diff --git a/extensions/SyntaxHighlight_GeSHi/.csslintrc b/extensions/SyntaxHighlight_GeSHi/.csslintrc new file mode 100644 index 00000000..68d60d22 --- /dev/null +++ b/extensions/SyntaxHighlight_GeSHi/.csslintrc @@ -0,0 +1,13 @@ +{ + "adjoining-classes": false, + "box-model": false, + "box-sizing": false, + "fallback-colors": false, + "important": false, + "outline-none": false, + "qualified-headings": false, + "unique-headings": false, + "universal-selector": false, + "unqualified-attributes": false, + "gradients": false +} diff --git a/extensions/SyntaxHighlight_GeSHi/Gruntfile.js b/extensions/SyntaxHighlight_GeSHi/Gruntfile.js new file mode 100644 index 00000000..b52dfe44 --- /dev/null +++ b/extensions/SyntaxHighlight_GeSHi/Gruntfile.js @@ -0,0 +1,60 @@ +/*! + * Grunt file + * + * @package SyntaxHighlight_GeSHi + */ + +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-contrib-csslint' ); + grunt.loadNpmTasks( 'grunt-contrib-jshint' ); + grunt.loadNpmTasks( 'grunt-contrib-watch' ); + grunt.loadNpmTasks( 'grunt-jscs' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + grunt.initConfig( { + jshint: { + options: { + jshintrc: true + }, + all: [ + '*.js', + 'modules/**/*.js' + ] + }, + jsonlint: { + all: [ + '*.json', + 'i18n/*.json', + 'modules/**/*.json' + ] + }, + jscs: { + src: '<%= jshint.all %>' + }, + csslint: { + options: { + csslintrc: '.csslintrc' + }, + all: 'modules/**/*.css' + }, + banana: { + options: { + disallowDuplicateTranslations: false + }, + all: 'i18n/' + }, + watch: { + files: [ + '.{csslintrc,jscsrc,jshintignore,jshintrc}', + '<%= jshint.all %>', + '<%= csslint.all %>' + ], + tasks: 'test' + } + } ); + + grunt.registerTask( 'test', [ 'jshint', 'jsonlint', 'jscs', 'csslint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/SyntaxHighlight_GeSHi/README b/extensions/SyntaxHighlight_GeSHi/README index b6af55cf..61e774d1 100644 --- a/extensions/SyntaxHighlight_GeSHi/README +++ b/extensions/SyntaxHighlight_GeSHi/README @@ -2,23 +2,28 @@ This extension allows source code to be syntax highlighted on the wiki pages. This README file might be out of date, have a look at the extension page for updated informations: - http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi + https://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi == Requirements == -This version of the extension has been tested with GeSHi 1.0.8.11 and MediaWiki 1.24 -as of 2014-05-10. It may or may not work with earlier versions of the aforementioned -software. To get releases of this extension compatible with earlier versions of -MediaWiki, visit: - - http://www.mediawiki.org/wiki/Special:ExtensionDistributor/SyntaxHighlight_GeSHi +This version of the extension has been tested with Pygments 1.6, 2.0.2 and +MediaWiki 1.25 as of 2015-06-19. To get releases of this extension compatible +with earlier versions of MediaWiki, visit: + https://www.mediawiki.org/wiki/Special:ExtensionDistributor/SyntaxHighlight_GeSHi == Installation == -Add this line to your LocalSettings.php: +First, you will need to ensure that this extension's Composer-managed +dependencies are available. In the extension directory, run 'composer update'. + +Next, Add this line to your LocalSettings.php: + + wfLoadExtension( 'SyntaxHighlight_GeSHi' ); - require_once("extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php"); +By default, this extension will use a bundled copy of Pygments 2.0.2. If you +would like to use a different copy of the library, you can set +$wgPygmentizePath to point to the path to the 'pygmentize' binary. == Usage == @@ -36,23 +41,18 @@ html text == Parameters == -Please see the documentation of GeSHi on http://qbnz.com/highlighter/geshi-doc.html -for detailed information to use some of the parameters. +For details information of these parameters, see the documentation of Pygments' +HtmlFormatter at . -* lang; Defines the language -* line; Corresponds to enable_line_numbers method on GeSHi -* start; Corresponds to start_line_numbers_at method on GeSHi -* strict; Corresponds to enable_strict_mode method on GeSHi +* lang; Defines the language. +* line; Corresponds to linenos="inline" option. +* start; Corresponds to linenostart opion. +* enclose; If set to "none", corresponds to the nowrap=1 option. +* inline; Corresponds to the nowrap=1 option. +* highlight; Corresponds to hl_lines option (comma separated). == Note == -GeSHi is generous about creating HTML elements: highlighting large blocks of -code can easily generate enough of them to crash a browser. As a guard, symbol -highlighting is turned off for code fragments larger than 100 kB. For fragments -larger than 200 kB, string highlighting is turned off as well. - -== Note to maintainers == - -Whenever updating the version of GeSHi embedded in the extension, run -maintenance/updateLanguageList.php to re-generate the list of supported -languages. +Pygments is generous about creating HTML elements: highlighting large blocks of +code can easily generate enough of them to crash a browser. As a guard, syntax +highlighting is turned off for code fragments larger than 100 kB. diff --git a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php deleted file mode 100644 index 7ce87b53..00000000 --- a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php +++ /dev/null @@ -1,37 +0,0 @@ - array( 'type' => 'style' ), - ); - } else { - return array(); - } - } -} diff --git a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php deleted file mode 100644 index 98c1c1eb..00000000 --- a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php +++ /dev/null @@ -1,79 +0,0 @@ -lang = $info['lang']; - } - - /** - * @param ResourceLoaderContext $context - * @return array - */ - public function getStyles( ResourceLoaderContext $context ) { - $geshi = SyntaxHighlight_GeSHi::prepare( '', $this->lang ); - if ( !$geshi->error ) { - $css = SyntaxHighlight_GeSHi::getCSS( $geshi ); - } else { - $css = ResourceLoader::makeComment( $geshi->error() ); - } - - return array( 'all' => $css ); - } - - /** - * @param ResourceLoaderContext $context - * @return int - */ - public function getModifiedTime( ResourceLoaderContext $context ) { - static $selfmtime = null; - if ( $selfmtime === null ) { - // Cache this since there are 100s of instances of this module - // See also T93025, T85794. - $selfmtime = self::safeFilemtime( __FILE__ ); - } - - return max( array( - $this->getDefinitionMtime( $context ), - $selfmtime, - self::safeFilemtime( GESHI_LANG_ROOT . "/{$this->lang}.php" ), - ) ); - } - - /** - * @param $context ResourceLoaderContext - * @return array - */ - public function getDefinitionSummary( ResourceLoaderContext $context ) { - return array( - 'class' => get_class( $this ), - 'lang' => $this->lang, - 'geshi' => GESHI_VERSION, - ); - } -} diff --git a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiVisualEditorModule.php b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiVisualEditorModule.php new file mode 100644 index 00000000..123fcd13 --- /dev/null +++ b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiVisualEditorModule.php @@ -0,0 +1,58 @@ +getLanguages() + ), + ResourceLoader::inDebugMode() + ); + } + + /** + * Don't break debug mode by only showing file URLs + */ + public function getScriptURLsForDebug( ResourceLoaderContext $context ) { + return ResourceLoaderModule::getScriptURLsForDebug( $context ); + } + + /** + * Get a full list of available langauges + * @return array + */ + private function getLanguages() { + $lexers = require __DIR__ . '/SyntaxHighlight_GeSHi.lexers.php'; + return array_merge( $lexers, array_keys( GeSHi::$compatibleLexers ) ); + } + + public function enableModuleContentVersion() { + return true; + } +} diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php index 732f2195..535e37af 100644 --- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php +++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php @@ -1,5 +1,4 @@ 'javascript', + 'application/json' => 'javascript', + 'text/xml' => 'xml', + ); + + public static function onSetup() { + global $wgPygmentizePath; + + // If $wgPygmentizePath is unset, use the bundled copy. + if ( $wgPygmentizePath === false ) { + $wgPygmentizePath = __DIR__ . '/pygments/pygmentize'; + } + if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) { + require_once __DIR__ . '/vendor/autoload.php'; + } + } /** - * Executed after processing extension.json + * Get the Pygments lexer name for a particular language. + * + * @param string $lang Language name. + * @return string|null Lexer name, or null if no matching lexer. */ - public static function registerExtension() { - global $wgVersion; - if ( version_compare( $wgVersion, '1.25', '<' ) ) { - die( 'This version of SyntaxHighlight GeSHi requires MediaWiki 1.25' ); + private static function getLexer( $lang ) { + static $lexers = null; + + if ( $lang === null ) { + return null; } - global $wgGeSHiSupportedLanguages; - if ( !$wgGeSHiSupportedLanguages ) { - // If not set already, load it (@see ExtensionRegistry::exportExtractedData) - require_once __DIR__ . '/SyntaxHighlight_GeSHi.langs.php'; + if ( !$lexers ) { + $lexers = require __DIR__ . '/SyntaxHighlight_GeSHi.lexers.php'; } - // @fixme we shouldn't be loading this on ever request - require_once __DIR__ . '/geshi/geshi.php'; + + $lexer = strtolower( $lang ); + + if ( in_array( $lexer, $lexers ) ) { + return $lexer; + } + + // Check if this is a GeSHi lexer name for which there exists + // a compatible Pygments lexer with a different name. + if ( isset( GeSHi::$compatibleLexers[$lexer] ) ) { + $lexer = GeSHi::$compatibleLexers[$lexer]; + if ( in_array( $lexer, $lexers ) ) { + return $lexer; + } + } + + return null; } /** @@ -53,10 +94,10 @@ class SyntaxHighlight_GeSHi { * @param $parser Parser * @return bool */ - public static function configureParser( &$parser ) { - $parser->setHook( 'source', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) ); - $parser->setHook( 'syntaxhighlight', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) ); - return true; + public static function onParserFirstCallInit( Parser &$parser ) { + foreach ( array( 'source', 'syntaxhighlight' ) as $tag ) { + $parser->setHook( $tag, array( 'SyntaxHighlight_GeSHi', 'parserHook' ) ); + } } /** @@ -68,114 +109,213 @@ class SyntaxHighlight_GeSHi { * @return string */ public static function parserHook( $text, $args = array(), $parser ) { - global $wgSyntaxHighlightDefaultLang, $wgUseTidy; - self::initialise(); - $text = rtrim( $text ); + global $wgUseTidy; + // Don't trim leading spaces away, just the linefeeds - $text = preg_replace( '/^\n+/', '', $text ); + $out = preg_replace( '/^\n+/', '', rtrim( $text ) ); + + // Convert deprecated attributes + if ( isset( $args['enclose'] ) ) { + if ( $args['enclose'] === 'none' ) { + $args['inline'] = true; + } + unset( $args['enclose'] ); + } + + $lexer = isset( $args['lang'] ) ? $args['lang'] : ''; + + $result = self::highlight( $out, $lexer, $args ); + if ( !$result->isGood() ) { + $parser->addTrackingCategory( 'syntaxhighlight-error-category' ); + } + $out = $result->getValue(); + + // HTML Tidy will convert tabs to spaces incorrectly (bug 30930). + // But the conversion from tab to space occurs while reading the input, + // before the conversion from to tab, so we can armor it that way. + if ( $wgUseTidy ) { + $out = str_replace( "\t", ' ', $out ); + } + + // Allow certain HTML attributes + $htmlAttribs = Sanitizer::validateAttributes( $args, array( 'style', 'class', 'id', 'dir' ) ); + if ( !isset( $htmlAttribs['class'] ) ) { + $htmlAttribs['class'] = self::HIGHLIGHT_CSS_CLASS; + } else { + $htmlAttribs['class'] .= ' ' . self::HIGHLIGHT_CSS_CLASS; + } + if ( !( isset( $htmlAttribs['dir'] ) && $htmlAttribs['dir'] === 'rtl' ) ) { + $htmlAttribs['dir'] = 'ltr'; + } + + if ( isset( $args['inline'] ) ) { + // Enforce inlineness. Stray newlines may result in unexpected list and paragraph processing + // (also known as doBlockLevels()). + $out = str_replace( "\n", ' ', $out ); + $out = Html::rawElement( 'code', $htmlAttribs, $out ); - // Validate language - if ( isset( $args['lang'] ) && $args['lang'] ) { - $lang = $args['lang']; } else { - // language is not specified. Check if default exists, if yes, use it. - if ( !is_null( $wgSyntaxHighlightDefaultLang ) ) { - $lang = $wgSyntaxHighlightDefaultLang; + // Not entirely sure what benefit this provides, but it was here already + $htmlAttribs['class'] .= ' ' . 'mw-content-' . $htmlAttribs['dir']; + + // Unwrap Pygments output to provide our own wrapper. We can't just always use the 'nowrap' + // option (pass 'inline'), since it disables other useful things like line highlighting. + // Tolerate absence of quotes for Html::element() and wgWellFormedXml=false. + $m = array(); + if ( preg_match( '/^
    (.*)<\/div>$/s', trim( $out ), $m ) ) { + $out = trim( $m[1] ); } else { - $error = self::formatLanguageError( $text ); - return $error; + throw new MWException( 'Unexpected output from Pygments encountered' ); } + + // Use 'nowiki' strip marker to prevent list processing (also known as doBlockLevels()). + // However, leave the wrapping
    outside to prevent

    -wrapping. + $marker = $parser->mUniqPrefix . '-syntaxhighlightinner-' . + sprintf( '%08X', $parser->mMarkerIndex++ ) . $parser::MARKER_SUFFIX; + $parser->mStripState->addNoWiki( $marker, $out ); + + $out = Html::openElement( 'div', $htmlAttribs ) . + $marker . + Html::closeElement( 'div' ); } - $lang = strtolower( $lang ); - if ( !preg_match( '/^[a-z_0-9-]*$/', $lang ) ) { - $error = self::formatLanguageError( $text ); - return $error; + + // Register CSS + $parser->getOutput()->addModuleStyles( 'ext.pygments' ); + + return $out; + } + + /** + * Highlight a code-block using a particular lexer. + * + * @param string $code Code to highlight. + * @param string|null $lang Language name, or null to use plain markup. + * @param array $args Associative array of additional arguments. + * If it contains a 'line' key, the output will include line numbers. + * If it includes a 'highlight' key, the value will be parsed as a + * comma-separated list of lines and line-ranges to highlight. + * If it contains a 'start' key, the value will be used as the line at which to + * start highlighting. + * If it contains a 'inline' key, the output will not be wrapped in `

    `. + * @return Status Status object, with HTML representing the highlighted + * code as its value. + */ + protected static function highlight( $code, $lang = null, $args = array() ) { + global $wgPygmentizePath; + + $status = new Status; + + $lexer = self::getLexer( $lang ); + if ( $lexer === null && $lang !== null ) { + $status->warning( 'syntaxhighlight-error-unknown-language', $lang ); + } + + $length = strlen( $code ); + if ( strlen( $code ) > self::HIGHLIGHT_MAX_BYTES ) { + $status->warning( 'syntaxhighlight-error-exceeds-size-limit', + $length, self::HIGHLIGHT_MAX_BYTES ); + $lexer = null; } - $geshi = self::prepare( $text, $lang ); - if ( !$geshi instanceof GeSHi ) { - $error = self::formatLanguageError( $text ); - return $error; + + if ( wfShellExecDisabled() !== false ) { + $status->warning( 'syntaxhighlight-error-pygments-invocation-failure' ); + wfWarn( + 'MediaWiki determined that it cannot invoke Pygments. ' . + 'As a result, SyntaxHighlight_GeSHi will not perform any syntax highlighting. ' . + 'See the debug log for details: ' . + 'https://www.mediawiki.org/wiki/Manual:$wgDebugLogFile' + ); + $lexer = null; } - $enclose = self::getEncloseType( $args ); + $inline = isset( $args['inline'] ); + + if ( $lexer === null ) { + if ( $inline ) { + $status->value = htmlspecialchars( trim( $code ), ENT_NOQUOTES ); + } else { + $pre = Html::element( 'pre', array(), $code ); + $status->value = Html::rawElement( 'div', array( 'class' => self::HIGHLIGHT_CSS_CLASS ), $pre ); + } + return $status; + } + + $options = array( + 'cssclass' => self::HIGHLIGHT_CSS_CLASS, + 'encoding' => 'utf-8', + ); // Line numbers if ( isset( $args['line'] ) ) { - $geshi->enable_line_numbers( GESHI_FANCY_LINE_NUMBERS ); + $options['linenos'] = 'inline'; } - // Highlighting specific lines + + if ( $lexer === 'php' && strpos( $code, 'highlight_lines_extra( $lines ); + $options['hl_lines'] = implode( ' ', $lines ); } } + // Starting line number if ( isset( $args['start'] ) ) { - $geshi->start_line_numbers_at( $args['start'] ); - } - $geshi->set_header_type( $enclose ); - // Strict mode - if ( isset( $args['strict'] ) ) { - $geshi->enable_strict_mode(); - } - // Format - $out = $geshi->parse_code(); - if ( $geshi->error == GESHI_ERROR_NO_SUCH_LANG ) { - // Common error :D - $error = self::formatLanguageError( $text ); - return $error; - } - $err = $geshi->error(); - if ( $err ) { - // Other unknown error! - $error = self::formatError( $err ); - return $error; - } - // Armour for Parser::doBlockLevels() - if ( $enclose === GESHI_HEADER_DIV ) { - $out = str_replace( "\n", '', $out ); - } - // HTML Tidy will convert tabs to spaces incorrectly (bug 30930). - // But the conversion from tab to space occurs while reading the input, - // before the conversion from to tab, so we can armor it that way. - if ( $wgUseTidy ) { - $out = str_replace( "\t", ' ', $out ); + $options['linenostart'] = $args['start']; } - // Register CSS - $parser->getOutput()->addModuleStyles( array( "ext.geshi.language.$lang", 'ext.geshi.local' ) ); - $encloseTag = $enclose === GESHI_HEADER_NONE ? 'span' : 'div'; - $attribs = Sanitizer::validateTagAttributes( $args, $encloseTag ); + if ( $inline ) { + $options['nowrap'] = 1; + } - //lang is valid in HTML context, but also used on GeSHi - unset( $attribs['lang'] ); + $cache = wfGetMainCache(); + $cacheKey = self::makeCacheKey( $code, $lexer, $options ); + $output = $cache->get( $cacheKey ); + + if ( $output === false ) { + try { + $pygments = new Pygments( $wgPygmentizePath ); + $output = $pygments->highlight( $code, $lexer, 'html', $options ); + } catch ( RuntimeException $e ) { + $status->warning( 'syntaxhighlight-error-pygments-invocation-failure' ); + wfWarn( + 'Failed to invoke Pygments. Please check that Pygments is installed ' . + 'and that $wgPygmentizePath is accurate.' + ); + $status->value = self::highlight( $code, null, $args )->getValue(); + return $status; + } + $cache->set( $cacheKey, $output ); + } - if ( $enclose === GESHI_HEADER_NONE ) { - $attribs = self::addAttribute( $attribs, 'class', 'mw-geshi ' . $lang . ' source-' . $lang ); - } else { - // Default dir="ltr" (but allow dir="rtl", although unsure if needed) - $attribs['dir'] = isset( $attribs['dir'] ) && $attribs['dir'] === 'rtl' ? 'rtl' : 'ltr'; - $attribs = self::addAttribute( $attribs, 'class', 'mw-geshi mw-code mw-content-' . $attribs['dir'] ); + if ( $inline ) { + $output = trim( $output ); } - $out = Html::rawElement( $encloseTag, $attribs, $out ); - return $out; + $status->value = $output; + return $status; + } /** - * @param $attribs array - * @param $name string - * @param $value string - * @return array + * Construct a cache key for the results of a Pygments invocation. + * + * @param string $code Code to be highlighted. + * @param string $lexer Lexer name. + * @param array $options Options array. + * @return string Cache key. */ - private static function addAttribute( $attribs, $name, $value ) { - if ( isset( $attribs[$name] ) ) { - $attribs[$name] = $value . ' ' . $attribs[$name]; + private static function makeCacheKey( $code, $lexer, $options ) { + $optionString = FormatJson::encode( $options, false, FormatJson::ALL_OK ); + $hash = md5( "{$code}|{$lexer}|{$optionString}|" . self::CACHE_VERSION ); + if ( function_exists( 'wfGlobalCacheKey' ) ) { + return wfGlobalCacheKey( 'highlight', $hash ); } else { - $attribs[$name] = $value; + return 'highlight:' . $hash; } - return $attribs; } /** @@ -184,26 +324,26 @@ class SyntaxHighlight_GeSHi { * * Input is comma-separated list of lines or line ranges. * - * @param $arg string - * @return array of ints + * @param string $lineSpec + * @return int[] Line numbers. */ - protected static function parseHighlightLines( $arg ) { + protected static function parseHighlightLines( $lineSpec ) { $lines = array(); - $values = array_map( 'trim', explode( ',', $arg ) ); + $values = array_map( 'trim', explode( ',', $lineSpec ) ); foreach ( $values as $value ) { - if ( ctype_digit($value) ) { - $lines[] = (int) $value; + if ( ctype_digit( $value ) ) { + $lines[] = (int)$value; } elseif ( strpos( $value, '-' ) !== false ) { list( $start, $end ) = array_map( 'trim', explode( '-', $value ) ); if ( self::validHighlightRange( $start, $end ) ) { - for ($i = intval( $start ); $i <= $end; $i++ ) { + for ( $i = intval( $start ); $i <= $end; $i++ ) { $lines[] = $i; } - } else { - wfDebugLog( 'geshi', "Invalid range: $value\n" ); } - } else { - wfDebugLog( 'geshi', "Invalid line: $value\n" ); + } + if ( count( $lines ) > self::HIGHLIGHT_MAX_LINES ) { + $lines = array_slice( $lines, 0, self::HIGHLIGHT_MAX_LINES ); + break; } } return $lines; @@ -221,31 +361,12 @@ class SyntaxHighlight_GeSHi { // to DoS the system by asking for a huge range. // Impose an arbitrary limit on the number of lines in a // given range to reduce the impact. - $arbitrarilyLargeConstant = 10000; return - ctype_digit($start) && - ctype_digit($end) && + ctype_digit( $start ) && + ctype_digit( $end ) && $start > 0 && $start < $end && - $end - $start < $arbitrarilyLargeConstant; - } - - /** - * @param $args array - * @return int - */ - static function getEncloseType( $args ) { - // "Enclose" parameter - $enclose = GESHI_HEADER_PRE_VALID; - if ( isset( $args['enclose'] ) ) { - if ( $args['enclose'] === 'div' ) { - $enclose = GESHI_HEADER_DIV; - } elseif ( $args['enclose'] === 'none' ) { - $enclose = GESHI_HEADER_NONE; - } - } - - return $enclose; + $end - $start < self::HIGHLIGHT_MAX_LINES; } /** @@ -255,31 +376,29 @@ class SyntaxHighlight_GeSHi { * @return bool * @since MW 1.21 */ - public static function renderHook( Content $content, Title $title, - $revId, ParserOptions $options, $generateHtml, ParserOutput &$output - ) { + public static function onContentGetParserOutput( Content $content, Title $title, + $revId, ParserOptions $options, $generateHtml, ParserOutput &$output ) { - global $wgSyntaxHighlightModels, $wgUseSiteCss, - $wgParser, $wgTextModelsToParse; + global $wgParser, $wgTextModelsToParse; - $highlightModels = ExtensionRegistry::getInstance()->getAttribute( 'SyntaxHighlightModels' ); + if ( !$generateHtml ) { + // Nothing special for us to do, let MediaWiki handle this. + return true; + } // Determine the language + $extension = ExtensionRegistry::getInstance(); + $models = $extension->getAttribute( 'SyntaxHighlightModels' ); $model = $content->getModel(); - if ( !isset( $highlightModels[$model] ) && !isset( $wgSyntaxHighlightModels[$model] ) ) { + if ( !isset( $models[$model] ) ) { // We don't care about this model, carry on. return true; } - - if ( !$generateHtml ) { - // Nothing special for us to do, let MediaWiki handle this. - return true; - } + $lexer = $models[$model]; // Hope that $wgSyntaxHighlightModels does not contain silly types. $text = ContentHandler::getContentText( $content ); - - if ( $text === null || $text === false ) { + if ( !$text ) { // Oops! Non-text content? Let MediaWiki handle this. return true; } @@ -290,35 +409,17 @@ class SyntaxHighlight_GeSHi { $output = $wgParser->parse( $text, $title, $options, true, true, $revId ); } - if ( isset( $highlightModels[$model] ) ) { - $lang = $highlightModels[$model]; - } else { - // TODO: Add deprecation warning after a while? - $lang = $wgSyntaxHighlightModels[$model]; + $status = self::highlight( $text, $lexer ); + if ( !$status->isOK() ) { + return true; } + $out = $status->getValue(); + $output->addModuleStyles( 'ext.pygments' ); + $output->setText( '
    ' . $out . '
    ' ); - // Attempt to format - $geshi = self::prepare( $text, $lang ); - if ( $geshi instanceof GeSHi ) { - - $out = $geshi->parse_code(); - if ( !$geshi->error() ) { - // Done - $output->addModuleStyles( "ext.geshi.language.$lang" ); - $output->setText( "
    {$out}
    " ); - - if ( $wgUseSiteCss ) { - $output->addModuleStyles( 'ext.geshi.local' ); - } - - // Inform MediaWiki that we have parsed this page and it shouldn't mess with it. - return false; - } - } - - // Bottle out - return true; + // Inform MediaWiki that we have parsed this page and it shouldn't mess with it. + return false; } /** @@ -330,232 +431,63 @@ class SyntaxHighlight_GeSHi { * @param string $format * @since MW 1.24 */ - public static function apiFormatHighlight( IContextSource $context, $text, $mime, $format ) { - switch ( $mime ) { - case 'text/javascript': - case 'application/json': - $lang = 'javascript'; - break; - - case 'text/xml': - $lang = 'xml'; - break; - - default: - // Don't know how to handle this - return true; + public static function onApiFormatHighlight( IContextSource $context, $text, $mime, $format ) { + if ( !isset( self::$mimeLexers[$mime] ) ) { + return true; } - $geshi = self::prepare( $text, $lang ); - if ( $geshi instanceof GeSHi ) { - $out = $geshi->parse_code(); - if ( !$geshi->error() ) { - if ( preg_match( '/^]*)>/i', $out, $m ) ) { - $attrs = Sanitizer::decodeTagAttributes( $m[1] ); - $attrs['class'] .= ' api-pretty-content'; - $out = '' . - substr( $out, strlen( $m[0] ) ); - } - $output = $context->getOutput(); - $output->addModuleStyles( array( "ext.geshi.language.$lang", 'ext.geshi.local' ) ); - $output->addHTML( "
    {$out}
    " ); - - // Inform MediaWiki that we have parsed this page and it shouldn't mess with it. - return false; - } + $lexer = self::$mimeLexers[$mime]; + $status = self::highlight( $text, $lexer ); + if ( !$status->isOK() ) { + return true; } - // Bottle out - return true; - } - - /** - * Initialise a GeSHi object to format some code, performing - * common setup for all our uses of it - * - * @param string $text - * @param string $lang - * @return GeSHi - */ - public static function prepare( $text, $lang ) { - - global $wgSyntaxHighlightKeywordLinks; - - self::initialise(); - $geshi = new GeSHi( $text, $lang ); - if ( $geshi->error() == GESHI_ERROR_NO_SUCH_LANG ) { - return null; - } - $geshi->set_encoding( 'UTF-8' ); - $geshi->enable_classes(); - $geshi->set_overall_class( "source-$lang" ); - $geshi->enable_keyword_links( $wgSyntaxHighlightKeywordLinks ); - - // If the source code is over 100 kB, disable higlighting of symbols. - // If over 200 kB, disable highlighting of strings too. - $bytes = strlen( $text ); - if ( $bytes > 102400 ) { - $geshi->set_symbols_highlighting( false ); - if ( $bytes > 204800 ) { - $geshi->set_strings_highlighting( false ); - } + $out = $status->getValue(); + if ( preg_match( '/^]*)>/i', $out, $m ) ) { + $attrs = Sanitizer::decodeTagAttributes( $m[1] ); + $attrs['class'] .= ' api-pretty-content'; + $encodedAttrs = Sanitizer::safeEncodeTagAttributes( $attrs ); + $out = '' . substr( $out, strlen( $m[0] ) ); } + $output = $context->getOutput(); + $output->addModuleStyles( 'ext.pygments' ); + $output->addHTML( '
    ' . $out . '
    ' ); - /** - * GeSHi comes by default with a font-family set to monospace, which - * causes the font-size to be smaller than one would expect. - * We append a CSS hack to the default GeSHi styles: specifying 'monospace' - * twice "resets" the browser font-size specified for monospace. - * - * The hack is documented in MediaWiki core under - * docs/uidesign/monospace.html and in bug 33496. - */ - // Preserve default since we don't want to override the other style - // properties set by geshi (padding, font-size, vertical-align etc.) - $geshi->set_code_style( - 'font-family: monospace, monospace;', - /* preserve defaults = */ true - ); - - // No need to preserve default (which is just "font-family: monospace;") - // outputting both is unnecessary - $geshi->set_overall_style( - 'font-family: monospace, monospace;', - /* preserve defaults = */ false - ); - - return $geshi; + // Inform MediaWiki that we have parsed this page and it shouldn't mess with it. + return false; } /** - * Prepare a CSS snippet suitable for use as a ParserOutput/OutputPage - * head item. - * - * Not used anymore, kept for backwards-compatibility with other extensions. + * Reject parser cache values that are for GeSHi since those + * ResourceLoader modules no longer exist * - * @deprecated - * @param GeSHi $geshi - * @return string - */ - public static function buildHeadItem( $geshi ) { - wfDeprecated( __METHOD__ ); - $css = array(); - $css[] = ''; - return implode( "\n", $css ); - } - - /** - * Get the complete CSS code necessary to display styles for given GeSHi instance. - * - * @param GeSHi $geshi - * @return string - */ - public static function getCSS( $geshi ) { - $lang = $geshi->language; - $css = array(); - $css[] = ".source-$lang {line-height: normal;}"; - $css[] = ".source-$lang li, .source-$lang pre {"; - $css[] = "\tline-height: normal; border: 0px none white;"; - $css[] = "}"; - $css[] = $geshi->get_stylesheet( /*$economy_mode*/ false ); - return implode( "\n", $css ); - } - - /** - * Format an 'unknown language' error message and append formatted - * plain text to it. - * - * @param string $text - * @return string HTML fragment - */ - private static function formatLanguageError( $text ) { - $msg = wfMessage( 'syntaxhighlight-err-language' )->inContentLanguage()->escaped(); - $error = self::formatError( $msg, $text ); - return $error . '
    ' . htmlspecialchars( $text ) . '
    '; - } - - /** - * Format an error message - * - * @param string $error - * @return string - */ - private static function formatError( $error = '' ) { - $html = ''; - if ( $error ) { - $html .= "

    {$error}

    "; - } - $html .= '

    ' . wfMessage( 'syntaxhighlight-specify')->inContentLanguage()->escaped() - . ' <source lang="html4strict">...</source>

    ' - . '

    ' . wfMessage( 'syntaxhighlight-supported' )->inContentLanguage()->escaped() - . '

    ' . self::formatLanguages(); - return "
    {$html}
    "; - } - - /** - * Format the list of supported languages - * - * @return string - */ - private static function formatLanguages() { - $langs = self::getSupportedLanguages(); - $list = array(); - if ( count( $langs ) > 0 ) { - foreach ( $langs as $lang ) { - $list[] = '' . htmlspecialchars( $lang ) . ''; - } - return '

    ' . implode( ', ', $list ) . '


    '; - } else { - return '

    ' . wfMessage( 'syntaxhighlight-err-loading' )->inContentLanguage()->escaped() . '

    '; - } - } - - /** - * Get the list of supported languages - * - * @return array - */ - private static function getSupportedLanguages() { - global $wgGeSHiSupportedLanguages; - self::initialise(); - return $wgGeSHiSupportedLanguages; - } - - /** - * Initialise messages and ensure the GeSHi class is loaded + * @param ParserOutput $parserOutput + * @param WikiPage|Article $page + * @param ParserOptions $popts * @return bool */ - private static function initialise() { - if ( !self::$initialised ) { - if ( !class_exists( 'GeSHi' ) ) { - require ( dirname( __FILE__ ) . '/geshi/geshi.php' ); + public static function onRejectParserCacheValue( + ParserOutput $parserOutput, $page, ParserOptions $popts + ) { + foreach ( $parserOutput->getModuleStyles() as $module ) { + if ( strpos( $module, 'ext.geshi.' ) === 0 ) { + $page->getTitle()->purgeSquid(); + return false; } - self::$initialised = true; } return true; } - /** - * Register a ResourceLoader module providing styles for each supported language. - * - * @param ResourceLoader $resourceLoader - * @return bool true - */ - public static function resourceLoaderRegisterModules( &$resourceLoader ) { - $modules = array(); - - foreach ( self::getSupportedLanguages() as $lang ) { - $modules["ext.geshi.language.$lang" ] = array( - 'class' => 'ResourceLoaderGeSHiModule', - 'lang' => $lang, - ); - } - - $resourceLoader->register( $modules ); + /** Backward-compatibility shim for extensions. */ + public static function prepare( $text, $lang ) { + wfDeprecated( __METHOD__ ); + return new GeSHi( self::highlight( $text, $lang )->getValue() ); + } - return true; + /** Backward-compatibility shim for extensions. */ + public static function buildHeadItem( $geshi ) { + wfDeprecated( __METHOD__ ); + $geshi->parse_code(); + return ''; } } diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.compat.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.compat.php new file mode 100644 index 00000000..98a1498b --- /dev/null +++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.compat.php @@ -0,0 +1,135 @@ + 'asm', + '6502acme' => 'asm', + '6502tasm' => 'asm', + '6502kickass'=> 'asm', + '68000devpac'=> 'asm', + 'dcpu16' => 'asm', + 'm68k' => 'asm', + 'mmix' => 'nasm', + 'mpasm' => 'asm', + 'pic16' => 'asm', + 'z80' => 'asm', + + // BASIC + 'xbasic' => 'basic', + 'thinbasic' => 'basic', + 'sdlbasic' => 'basic', + 'purebasic' => 'basic', + 'mapbasic' => 'basic', + 'locobasic' => 'basic', + 'gwbasic' => 'basic', + 'freebasic' => 'basic', + 'basic4gl' => 'basic', + 'zxbasic' => 'basic', + 'gambas' => 'basic', + 'oobas' => 'basic', + 'bascomavr' => 'basic', + + // C / C++ + 'c_loadrunner' => 'c', + 'c_mac' => 'c', + 'c_winapi' => 'c', + 'upc' => 'c', + 'cpp-qt' => 'cpp', + 'cpp-winapi' => 'cpp', + 'urbi' => 'cpp', + + // HTML + 'html4strict' => 'html', + 'html5' => 'html', + + // JavaScript + 'jquery' => 'javascript', + 'ecmascript' => 'javascript', + + // Microsoft + 'vb' => 'vbnet', + 'asp' => 'aspx-vb', + 'visualfoxpro' => 'foxpro', + 'dos' => 'bat', + 'visualprolog' => 'prolog', + 'reg' => 'registry', + + // Miscellaneous + 'cadlisp' => 'lisp', + 'j' => 'objj', + 'java5' => 'java', + 'php-brief' => 'php', + 'povray' => 'pov', + 'pys60' => 'python', + 'rails' => 'ruby', + 'rpmspec' => 'spec', + 'rsplus' => 'splus', + 'bnf' => 'ebnf', + 'gettext' => 'pot', + + // ML + 'ocaml-brief' => 'ocaml', + 'standardml' => 'sml', + + // Modula 2 + 'modula3' => 'modula2', + 'oberon2' => 'modula2', + + // SQL + 'dcl' => 'sql', + 'tsql' => 'sql', + 'plsql' => 'sql', + 'oracle11' => 'sql', + 'oracle8' => 'sql', + + // REXX + 'oorexx' => 'rexx', + 'netrexx' => 'rexx', + + // xpp is basically Java + 'xpp' => 'java', + + // bibtex is basically LaTeX + 'bibtex' => 'latex', + ); + + public function __construct( $html ) { + $this->html = $html; + } + + public function error() { + } + + public function set_language( $language ) { + } + + public function parse_code() { + global $wgOut; + $wgOut->addModuleStyles( 'ext.pygments' ); + return $this->html; + } +} diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php deleted file mode 100644 index deff2980..00000000 --- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php +++ /dev/null @@ -1,236 +0,0 @@ - part. In fact, - context sensitiveness is quite poor... -- Using the extra line number highlighting feature without actually using line numbers - will result in malformed XHTML (not sure about this one though...) -- Slow!!! Especially for source with lots of strings in it. GeSHi will work acceptably - for sourcecode under 5K (for simple language files like SQL, a 100K file can be - highlighted in just 6 seconds), but above about 25K things get a little slow... If - you're using this as part of some larger software, you may want to think about - making some sort of "cache" effect to speed things up and reduce server load. -- The result is built by string replacement instead of by building another string based - on the source, that would be much safer. The focus of releases beyond 1.0.7 will be on - changing this behaviour, which may well fix some of the other bugs mentioned above. -- As of 1.0.7.1, dots (.) are allowed before keywords. This may change highlighting of some - things slightly, if you notice anything odd about the highlighting then please report - it to me. -- Perl/Javascript /.../ regex syntax is only supported basically and there's no - guarantee it is working all the time. -- The
     header output is not XHTML compliant. Please use the 
    header instead. - -Send any bug reports to BenBE@omorphia.de, or submit them via the bug tracker at -sourceforge (http://sourceforge.net/tracker/?group_id=114997&atid=670231) diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES b/extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES deleted file mode 100644 index 942d09b2..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES +++ /dev/null @@ -1,976 +0,0 @@ - - CHANGES - Changelog for GeSHi (geshi.php only) - -Changes to the code are listed under the version they occurred in, with who suggested -it by each one (if there's nobody listed as suggesting it I dreamed it up :)). Users -who suggested an idea often also provided the code that was used as a basis for the -changes - thanks to all who suggested these ideas and gave me the code to show me how! - -Language files listed under each version were made by the author beside them, and then -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.8.12 - - Added language files - * AIMMS (Guido Diepen) - * C with WinAPI (BenBE) - * C++ with WinAPI (BenBE) - * Chapel (Richard Molitor) - * Dart (Edward Hart) - * EZT (Ramesh Vishveshwar) - * ISPF Panel (Ramesh Vishveshwar) - * Job Control Language (Ramesh Vishveshwar) - * nginx (Cliff Wells, Deoren Moor, Thomas Joiner) - * Nimrod (Dennis Felsing) - * PostScript (BenBE) - * QML (J-P Nurmi) - * Racket (Tim Brown) - * RBScript (Deng Wen Gang) - * Rust (Dave Hodder) - * SCL (Leonhard Hösch) - * StandardML (eldesh) - * VBScript (Rory Prendergast) - - Allow for global setup of all keyword and comments style at once using '*' (BenBE) - - Non-persistent XSS in example contrib script (BenBE, present in intermediate dev versions) - - Fix short tag usage to allow for configurations where short tags are disabled (BenBE) - - Updated COPYING to use updated version of GPL 2.0 (BenBE) - - Improvements to language files (BenBE) - * Updated Documentation Link for LaTeX (Johannes Ähling) - * Fix some highlighting problems with Octave (Carnë Draug, Juan Pablo Carbajal) - * Fix a minor issue with comments in Visual Basic (Plançon, BenBE) - * Some LangCheck issues with Visual Basic (BenBE) - * Fix a minor issue with keywords in SQL (Gerrit, BenBE) - * Force comments in INI files to be their own line (BenBE) - * Fix problem with T-SQL keyword highlighting (James Horsley, BenBE) - * Some more keywords for Bash (BenBE) - * Updated LSL2 language file (BenBE, Sei Lisa) - * Fixed langcheck errors in Lua langfile (BenBE) - * Fixed double quotes in Tcl (BenBE, stecue) - * Updated PARI/GP language file (Charles R Greathouse IV, BenBE) - * Updated Cobol language file (Edward Hart, BenBE) - * Updated Verilog language file (Tony Carrillo, BenBE) - * Updated Lisp language file (Edward Hart, BenBE) - * Updated list of Debian and Ubuntu releases (BenBE) - * Implemented C++11 string literal support (BenBE) - * Updated list of commands on Bash language file (BenBE) - * Updated PHP language file (Levi Morrisson) - * Updated Haskell language file (duplode) - * Updated NSIS language file (Jan T. Scott, BenBE) - * Add raw string support for Rust (mbrown1413) - * Fix LangCheck issues with LOLcode language file (mudhailess, BenBE) - * Updated LSL2 language file (Sei Lisa, BenBE) - * Updated Oxygene language file (Carlo Kok, BenBE) - * Fixed TCL comment processing (Sei Lisa) - * Fixed C++ (Qt) documentation links (Sei Lisa) - * Updated CSS language file to include CSS3 keywords (Zéfling, BenBE)) -Version 1.0.8.11 - - Added language files - * ARM (Marat Dukhan) - * Asymptote (Manuel Yguel) - * DCL (Petr Hendl) - * DCPU-16 (Benny Baumann) - * FreeSWITCH (James Rose) - * Haxe (Andy Li, John Liao) - * LDIF (Bruno Harbulot) - * Nagios (Albéric de Pertat) - * Octave (Carnë Draug, Juan Pablo Carbajal) - * ParaSail (sttaft) - * PARI/GP (Charles R Greathouse IV) - * Python for S60 (Sohan Basak) - * Rexx (Jon Wolfers) - * SPARK (Phil Thornley) - * SPARQL (Karima Rafes) - * StoneScript (Archimmersion) - * UPC (Viraj Sinha) - * Urbi (Alexandre Morgand) - * Vedit (Pauli Lindgren) - - Updated aliasd.php contrib script (SF#3073275, count) - - Fallback to "text" when extension is unknown (SF#3514714, murkymark, BenBE) - - detect extensions case-insensitive (SF#3514714, murkymark, BenBE) - - Fixed two bugs within contrib scripts included with each release (BenBE) - - Improvements to language files (BenBE) - * Symbol and char literal handling for Scala (Paul Butcher, BenBE) - * Multiline comments of F# weren't actually multiline (BenBE) - * Support for IPv6 addresses in RFC822 messages (BenBE) - * Properly handle retrieving names from language files (MikeSee, BenBE) - * Changes for improved highlighting of signle line comments and end-of-code indicators - * Missing keywords and improved highlighting of comments - * Problem with DOS/Batch highlighting breaking out at variables (BenBE) - * Addition of MMX/SSE/x86-64 registers and MMX/SSE instructions for - ASM language file(up to 4.2) (Dennis Yurichev) - * Further improvements to ASM language file to introduce all latest - already documented x86 architecture instructions (Marat Dukhan) - * Fixed links for R/S+ language file (Fernando H.F.P. da Rosa) - * Fix a problem with Delphi/Pascal regarding hex numbers/chars (BenBE) - * Fixed a typo and missing keywords for HTML4 and HTML5 (SF#3365452, BenBE) - * Fixed a typo in Modula-3 language file (SF#3358216, BenBE) - * Added missing keywords for MySQL (SF#3290998, ct-bob, BenBE) - * Added missing keywords for Pascal (SF#3176749, BenBE) - * Properly detect the keyword that is to be linked (BenBE) - * Updated VHDL language file (Kevin Thibedeau) - * Added missing keyword for Verilog (SF#3557903, BenBE) - * Fixed typo in Haskell causing a keyword to be missing (SF#3529439, BenBE) - * Fixed Long String handling for Lua (SF#3541510, Tim Starling) - * Updated JavaDoc links for Java language files (SF#3538552, jeneag, BenBE) - * CSS keywords incorrectly highlighted as part of identifiers (SF#3554101, BenBE) - * CSS3 keywords missing from highlighting (SF#3525084, vlaKoff, BenBE) - * Make variable handling compatible to PHP (SF#3489142, BenBE) - * Fixed obsolete MySQL documentation links (SF#3441642, BenBE) - * Add mising keywords for T-SQL (SF#3435026, BenBE) - * Fix discarded text when highlighting TypoScript (SF#3160238, BenBE) -Version 1.0.8.10 - - Added language files - * BASCOM AVR (Michal Goralczyk) - * C: Loadrunner dialect (Stuart Moncrieff) - * CoffeeScript (Trevor Burnham) - * EPC (Thorsten Muehlfelder) - * Euphoria (Nicholas Koceja) - * Falcon (billykater) - * HTML5 (Robert Lidberg) - * LLVM (Azriel Fasten) - * PL/I (Robert Prins) - * ProFTPd (Benny Baumann) - * PyCon (Benny Baumann) - * UnrealScript (pospi) - * YAML (Josh Ventura) - - Small bugfix in LangCheck when looking for language files - - Added '-' to list of RX chars that require explicit escaping (SF#3056454, BenBE) - - Minor changes to boundary checks (SF#3077256, BenBE) - - Improvements to language files (BenBE) - * Major rework of the ALGOL68 language file (Neville Dempsey) - * LangCheck warnings from GO language file (BenBE) - * Some additions to the Objeck language file (Randy Hollines) - * Properly highlight infinity as numbers for J (Ric Sherlock) - * Improved GDB Backtrace language file (Milian Wolff) - * Updated Liberty BASIC language file (Chris Iverson) - * Fixed a small issue with detection of division vs. regular expressions - for ActionScript 3 and JavaScript (Kevin Day) - * Fixed Escape handling for CSS (SF#3080513, yecril71pl, BenBE) - * Additional comment styles for SAS (SF#3024708, ahnolds, BenBE) - * Updated keyword list for TeraTerm (Boris Maisuradze) - * Incorrect handling of /**/ comments in Javascript (BenBE) - * Support for mod_upload_progress in Apache Config files (BenBE) - * Prefix operator handling in F# was broken (BenBE) - * CDATA handling for html4strict (BenBE) - * Common subcommands for Apache, APT, CVS, Git, SVN and YUM for Bash (BenBE) - * Limited support for prompt detection in single line Bash snippets (BenBE) - * Added functions of the C standard library (BenBE) - * Rework of Lua to use GeSHi's features better (BenBE) - * Language file improvements for Python (Zbyszek Szmek) - * Fixed documentation links for Groovy (SF#3152356, lifeisfoo) - * Fixed incorrect highlighting of certain keywords in Erlang (SF#3138853, BenBE) - * Escape chars in C++/C++Qt handled incorrectly (SF#3122706, C. Pötsch) - * Empty parameters of LaTeX commands tipped the highlighting off (SF#3098329, James Oldfield, BenBE) - * Additional Keywords and minor tweaks to Logtalk (Paulo Moura) -Version 1.0.8.9 - - Added language files - * Algol68 (Neville Dempsey) - * E (Kevin Reid) - * FormulaOne (Juro Bystricky) - * Go (Markus Jarderot) - * Liberty BASIC (Chris Iverson) - * MOS 6502/6510 Assemblers (Warren Willmey) - * Motorola 68k assembler (Warren Willmey) - * Objeck Programming Language (Randy Hollines) - * ZXBasic (Jose Rodriguez) - - Added support for $-prefixed hex numbers and @-prefixed octal numbers - - Added Parser Control for languages to tell when numbers are present - inside of non-string parts - - Introduced querying supported/known languages directly - - Introduced querying full language names without loading the language file - - Improvements to language files (BenBE) - * Added loads of keywords for generic SQL highlighting (Jürgen Thomas) -Version 1.0.8.8 - - Added language files - * ChaiScript (Jason Turner & Jonathan Turner) - * Genie (Nicolas Joseph) - * GwBasic (José Gabriel Moya Yangüela) - * HicEst (Georg Petrich) - * Icon (Matt Oates) - * MagikSF (Sjoerd van Leent) - * Modula 2 (Benjamin Kowarsch) - * Oz (Wolfgang Meyer) - * PCRE (BenBE) - * PostgreSQL (Christophe Chauvet) - * q/kdb+ (Ian Roddis) - * RPM Specification Files (Paul Grinberg) - * Unicon (Matt Oates) - * Vala (Nicolas Joseph) - * XBasic (José Gabriel Moya Yangüela) - - Improvements to language files (BenBE) - * Major reworks and improvements to OCaml language file (BenBE) - * Removed duplicate entries from keyword groups of VIM language file (Segaja) - * Properly protect Regexps against GeSHi Black Magic in Matlab (BenBE) - * Added support for Block Comments in PowerShell (BenBE) - * Added some keywords for VB; split into multiple groups (leejkennedy, BenBE) - * Basic Heredoc Support for Ruby (BenBE) -Version 1.0.8.7 - - Added language files - * Autoconf (Mihai Vasilian) - * ECMAScript (Michel Mariani) - * J (Ric Sherlock) - * OpenBSD Packet Filter (David Berard) - * Oxygene / Delphi Prism (Carlo Kok) - - Minor change in INT_BASIC number regexp to support '..' range operator - as to be found in most Pascal-like languages (BenBE) - - Fixed an issue with Hardquotes for empty strings (like '' in Delphi) (BenBE) - - Introduced a fix for improved performance when matching numbers (BenBE) - - Improvements to language files (BenBE) - * Fixed broken links in Prolog language file (BenBE) - * Fixed keywords in generics expressions in Java5 (BenBE) - * Added support for import static in Java5 (BenBE) - * Added Standard Integer Types for C and c++ (BenBE) - * Fixed some regexp issues in Erlang (BenBE) - * Added some missing keywords for Clojure (BenBE) - * Added some missing keywords for Lisp (BenBE) - * Fixed a problem with variable names in Prolog (BenBE) - * Some color changes for AutoIt (BenBE) - * Added support for basic include directive processing for AutoIt (BenBE) - * Added support for ::-style labels as comments (SF#2947393, BenBE) - * Removed backslash as Escape Char in T-SQL (SF#2939199, Bruno Braga) - * Added Nested Comments Support for Haskell (SF#2922317, BenBE) - * Fixed Comments for VIM, added some keywords, proposed porting of - Regular Expression markup from Perl (SF#2818047, psycojoker, BenBE) - * Fixed warnings for Language Check of Tcl (BenBE) -Version 1.0.8.6 - - Added language files - * Clojure (Jess Johnson) - * Cuesheet (Benny Baumann) - * F# (Julien Ortin) - * GAMBAS (Jesus Guardon) - * Logtalk (Paulo Moura) - * MapBasic (Tomasz Berus) - * NewLisp (cormullion) - * Perl 6 (Kodi Arfer) - * Pike (Rick E.) - * SystemVerilog (Sean O'Boyle) - - Reworked parts of the number support (BenBE) - - Improvements to language files (BenBE) - * Fixed broken links in R/S+ language file (BenBE) - * Fixed an issue with if= argument for dd command (BenBE) - * T-SQL should use GESHI_CAPS_NO_CHANGE for keywords (BenBE) - * Fixed missed shorthand arg references in Bash (BenBE) - * Fixed first line not getting highlighted in diff language (BenBE) - * Added some keywords for csharp (RC) -Version 1.0.8.5 - - Added language files - * AutoHotkey (Naveen Garg) - * Awk (George Pollard) - * GADV 4CS (Jason Curl) - * jQuery (Rob Loach) - * PowerBuilder (Doug Porter) - * PureBasic (Gustavo Julio Fiorenza) - * R / S+ (Ron Fredericks, Benilton Carvalho) - - Fixed legitimate numbers sometimes missing from highlighting (BenBE) - - Fixed a problem with URLs allowing to break highlighting (BenBE) - - Allowed for String and Number Styles to be set by the API (BenBE) - - Produce valid CSS when languages start with underscore (BenBE) - - Duplicate newlines with PRE_TABLE-Header but w/o linenumbers (SF#2838958, BenBE) - - Improvements to language files (BenBE) - * Fixed case-insensitively duplicate keywords (BenBE) - * DCS language file contained HARDQUOTE section but no hardquotes (BenBE) - * Some additional headers for Email\mbox highlighting (BenBE) - * Added some more Keywords for robots.txt highlighting (BenBE) - * Added Git commands for bash, ifup/ifdown (BenBE) - * Added support for C# and VB.net delegates (SF#2832253, BenBE) - * Added support for line numbers, file handles and hex\octal numbers for QBasic (BenBE) -Version 1.0.8.4 - - Added language files - * BibTeX (Quinn Taylor) - * CMake (Daniel Nelson) - * Erlang (Benny Baumann, Dan Forest-Barbier, Uwe Dauernheim) - * FO (abas-ERP) (Tan-Vinh Nguyen) - * Property Files (Edy Hinzen) - * Whois (RPSL format) entries (Benny Baumann) - - Changed INT_BASIC number format to allow numbers followed . at EOL (BenBE) - - Higher prority for keywords over regexps (BenBE) - - Added missing set_script_style API function (BenBE) - - Fixed missing check for comment_regexp preference in HardQuotes (BenBE) - - Fixed a problem with Strict Block Detection if the Strict Block Regexp - requires matching groups for itself (BenBE) - - Improvements to language files (BenBE) - * Added PCRE regexp support for Action script (SF#2655644, BenBE) - * Removed some superfluous keywords from ABAP (BenBE) - * Removed duplicate keywords for Progress (BenBE) - * Removed duplicate keywords for T-SQL (BenBE) - * Linking for PowerShell special variables revised (BenBE) - * Fixed linking in ColdFusion (BenBE) - * Fixed linking in LaTeX (BenBE) - * Fixed linking in mIRC Scripting language (BenBE) - * Fixed escape char regexp for C-style languages (BenBE) - * Fixed @""-string handling for C# (SF#2789371, BenBE) - * Fixed Strict Block Detection for PHP blocks (BenBE) - * Changed allowed chars around Powershell operators (SF#2688863, BenBE) - * Minor reordering inside of PHP language file (BenBE) - * Added missing keywords for ActionScript3 language file (SF#2795005, BenBE) - * Added .xrc file extension for XML highlighting (BenBE) -Version 1.0.8.3 - - Added language files - * DCS (Stelio Passaris) - * Locomotive Basic (Nacho Cabanes) - * LSL2 (Linden Scripting Language) (William Fry) - * Modula-3 (Martin Bishop) - * Oberon-2 (Mike Mol) - * Rebol (Lecanu Guillaume) - - Fixed a problem where HardEscapes weren't working when no escape char was given (BenBE) - - Added a PARSER_CONTROL setting to treat whitespace inside of keywords in - the language file as "any whitespace" in the source (i.e. "CREATE TABLE" - in SQL will match "CREATE\s+TABLE" instead of literally matching) (BenBE) - - Added a possibility to allow setting the style for escape characters (BenBE) - - Improvements to language files (BenBE) - * Added some missing Perl keywords and obscure default variables (BenBE) - * Allow for escaped colons to appear in CSS names (BenBE, simon) - * Added multiline continuation suppoert of preprocessor defines for - C, C for Mac, C++ and CC++ with Qt support (BenBE) - * keywords for C-based languages are case-sensitive (BenBE) - * Broken AutoIt highlighting (BenBE) - * Problem with escaped backslash in PHP and D (BenBE) - * Added some more functions for PHP (BenBE) - * Some changes for AppleScript (Stefan Klieme) - * Forbid highlighting keywords followed by / in bash (BenBE) - * Updated the LaTeX file to link some keywords (BenBE) - * Additional text rendered when matching special variables for PowerShell (BenBE) - * Added some more keywords for ABAP (BenBE, Sandra Rossi, Jacob Laursen) -Version 1.0.8.2 - - Added language files - * Brainfuck \ Brainfork (Benny Baumann) - * HQ9+ (Benny Baumann) - * INTERCAL (Benny Baumann) - * LOLcode (Benny Baumann) - * LScript (Beau McGuigan) - * Pixel Bender (Richard Olsson) - * ProvideX (Jeff Wilder) - * VIM Script (Swaroop C H) - * Visual Prolog (Thomas Linder Puls) - * Whitespace (Benny Baumann) - - Changed priority for COMMENT_REGEXP compared to String highlighting (BenBE) - - Fixed correct escaping of spaces inside of URLs (BenBE) - - Updated the list of common file extensions (BenBE) - - Updated the language file check script in contrib/ (BenBE) - - Fixed a problem with link targets resulting in unclickable links (SF#2379120, BenBE) - - Fixed an undefined variable issue in langcheck.php (BenBE) - - Improvements to language files (BenBE) - * eMail Header highlighting now uses the correct delimiters for keywords (BenBE) - * eMail (RFC822\mbox) highlighting now highlights IPs, MIME types and - subfield assignments correctly (BenBE) - * Minor style changes in COBOL to improve loading performance (BenBE) - * Added some missing keywords for D (BenBE) - * Removed duplicate keywords from Progres, SAS and TSQL (BenBE) - * Fixed Heredoc Syntax for Bash (SF#2185319, BenBE) - * Moved symbol-lookalike sequences from keyword groups to separate symbol group - for languages asp, klonec, klonecpp, php, php-brief (BenBE) - * Fixed a lot of duplicate keyword warnings (BenBE) - * Added missing keywords to the Python language file, - introducing support for Python 3.0. (SF#2441839, milian) - * Updated documentation links for TypoScript (SF#2014276, BenBE) - * Fixed a problem with tag and attribute names in XML highlighting (SF#2276119, BenBE) - * Improved MySQL language file (BenBE, JavaWoman) - * Some commentss accidentially mistaken for DocComments (SF#2454897, BenBE) - * Added improved Escape Char handling for c, c_mac, cpp and cpp_qt (SF#2458743, BenBE) -Version 1.0.8.1 - - Added language files - * AviSynth (Ryan Jones) - * eMail \ mbox (Benny Baumann) - * GNU Make (Neil Bird) - * Oracle 11i support (Simon Redhead) - * Prolog (Benny Baumann) - * SciLab (Christophe David) - * TeraTerm macro language (Boris Maisuradze) - - Added support for Escape Regular Expressions (BenBE) - * Implemented C-style Escapes in PHP (BenBE) - * Introduced support for \xAB and \007 style Char Escapes in PHP (BenBE) - * Implemented Variable Highlighting in PHP (BenBE) - * Implemented Variable Highlighting in Bash (milian) - - Fixed a problem with PCRE patterns for Keyword matching sometimes producing - very large strings, that could not be handled by some versions of PCRE lib, - causing broken highlighting an Regexp Compile errors (BenBE, milian) - - Fixed broken highlighting of bash commands like `dbus-send --dest=org.....`, - i.e. the dest was highlighted as variable declaration (milian) - - Fixed broken highlighting of some symbols in their escaped form (BenBE) - ( and were accidentially filtered even though they are valid) - - Fixed a "memory leak" in the *_regexp_caches (milian) - - Fixed broken Escape chars if classes were disabled - - start_line_numbers_at() was ignored when GESHI_HEADER_PRE_TABLE was set (revulo) - - Fixed a problem allowing Remote Code Inclusion under certain circumstances (BenBE) - - Changes to default CSS in order to make the GESHI_HEADER_PRE_TABLE align properly, - even on Windows / Mac systems with strange fonts (milian, revulo, ^RT) - - Minor style changes to the following languages: - * cpp-qt (milian) - * MySQL (BenBE) - * PHP (BenBE) - - Improvements to language files (BenBE, milian) - * Added MinSpareThread\MaxSpareThreads to Apache highlighter (BenBE) - * Added new Keyword group for APT sources.list highlighter (BenBE) - * Fixed highlighting in LaTeX for \begin{} and \end{}, i.e. the stuff inside - the curly braces. (milian, thanks for the report go to Matthias Pospiech) - * Improved String support for D (BenBE) - * MySQL was seriously broken (BenBE) - * Reworked Keyword groups for MySQL to allow for more configuration (BenBE) - * Improved Mirc script language file (milian) - * Improved C++ Qt language file (milian) - * Minor bug with Transpose Operator in Matlab (BenBE, Daniele de Rigo) - * Highlighting of Batch Files for Windows (BenBE) - * Updated AutoIt to include latest changes for AutoIt v3.2.12.1 (BenBE, Thierry) - * Fixed duplicate keyword warnings for Perl, Tcl and Typoscript (BenBE) - * Fixed Doc-URL getting reparsed by highlighted keywords of other groups (BenBE, Jordi Boggiano) -Version 1.0.8 - - Added language files - * APT sources.list (milian) - * Boo (Marcus Griep) - * CIL (Common Intermediate Language, .NET Assembly) (Marcus Griep) - * COBOL (Benny Baumann) - * Gnuplot (milian) - * KLoneC (Mickael Auger) - * KLoneC++ (Mickael Auger) - * PIC16xxx assembler (Phil Mattison) - * POV-Ray (Carl Fürstenberg) - * PowerShell (Frode Aarebrot) - * Progress (Marco Aurelio de Pasqual) - * TypoScript (Jan-Philipp Halle) - * Xorg configuration (milian) - - Make GeSHi's constructor arguments optional, so something like `$foo = new GeSHi;` is possible. (milian) - - Added an optimizer for lists to regular expressions. Using these cached lists results in a speedup of approx. 50%. - The slightly increased memory consumption (~150KB for PHP language file) is more than worth it! (milian) - - Some more memory & speed optimizations all over GeSHi (milian) - * Reduced memory overhead when highlighting keywords (BenBE) - * Keyword Linking now uses considerably less strtolower calls (milian) - * Cache Symbol Search Regexp and make Symbol Highlighting faster (milian) - * Use more native functions like substr_replace and strcasecmp to speed things up (milian) - * Use considerably less strlen() calls on various points by caching the results (milian) - * Properly set comments to be case insensitive where appropriate to increase performance (milian) - * Improve the performance of the strict mode tokenizer, making highlighting of languages like - HTML, ColdFusion or XML faster (milian) - * Setup caches for parsing on demand to make stylesheet generators fast (milian) - - Various improvements to Strict Block Handling (BenBE, milian) - * Added support for RegExp-based Strict Blocks (BenBE) - * Fixed highlighting incorrectly stopping at ?> in PHP (SF#1330968, BenBE) - * Languages with STRICT_MODE_APPLIES = GESHI_MAYBE default to strict mode now. When no highlightable - code is found in this mode, we fallback to the same setting as if GESHI_NEVER was set. That way it - should not be needed to call enable_strictmode() manually. (milian) - - Added new GESHI_HEADER_PRE_VALID type which uses the following markup: (milian) - * With line numbers:
    header
    1. ...
    2. ...
    - * Without line numbers:
    header...CODE...
    - => valid HTML and no need for   indentation - - Added new GESHI_HEADER_PRE_TABLE type which can be used to prevent linenumber-selection in Firefox - on copy'n'paste. (milian) - - set_language will not reset any language settings by default anymore. - * Added $force_reset param for to force full reload of a language. (milian) - * Make sure strict_mode is set properly when doing repeated set_language calls (milian) - - Fixed some problems with old PHP versions (SF#1975625, milian, BenBE) - - Fixed broken use with Suhosin Patch when /e modifier was disabled (SF#2021800, BenBE) - - Added support for external style information files to override language defaults without modifying language files (BenBE) - - The overall_class is now up to the user, and the language-code is _always_ added as a class (milian) - - Fixed Economy Mode for GeSHi::get_stylesheet() - now it just makes so much more sense! (milian) - - Fixed Economy Mode when COMMENT_REGEXP are used (BenBE) - - Changed the default encoding to use UTF-8, due to SF#2037598, BenBE) - - Improved overall string support: - * Added support for multichar string delimiters (SF#1932083, BenBE) - * Fixed problems of unfinished strings and comments producing invalid XHTML (SF#1996353, BenBE) - * Multichar Quotemarks sometimes had inconsistent behaviour (BenBE) - * Support for multiple styles of strings depending on the starter (BenBE) - * Properly handle escapes in strings, i.e. '\\' was not working properly before (milian) - * Fixed escape char support when an escape char is followed by multi-byte chars (SF#2037598, BenBE) - - Improved flexibility in language files (BenBE, milian) - * Added PARSER_CONTROL for OOLANG method highlighting (SF#1923060, BenBE) - * Added possibility to define strict blocks using an Regexp (BenBE) - * Removed explicit escaping of / in Regular Expressions (BenBE) - * Ignoring empty keyword groups when highlighting (milian) - * Make language_permissions configurable in language files via ['PARSER_CONTROL']['ENABLE_FLAGS'] - this makes is_a calls unneeded and thus prevents PHP notices in PHP 5.x (milian) - * Extended support for number formats now covering the most common formats (SF#1923058, BenBE) - * Lifted a limitation that keywords had to have at least 2 subsequent letters (BenBE) - * Changed behaviour of PARSER_CONTROL now allowing to provide the full Lookahead and Lookbehind - expressions used as delimiters inside keywords instead of a simple char group (BenBE) - * Fixed improper handling of newlines in REGEXPS so this does not produce invalid html anylonger (milian) - - Some typos and mistakes in the documentation (BenBE) - - Added a script to contrib/ to verify language files are correct (BenBE) - - Fixed loads of compliancy warnings detected with that automated compliance testing script (BenBE) - - Many other improvements to various language files (BenBE, milian) - * Reduce strict errors & notices for language files (milian) - * Fixed symbol highlighting with C++ sometimes missing keywords after ; and comments (BenBE) - * Improved comment handling with TCL (Lars Hellström, BenBE) - * Fixed broken handling with XML comments (BenBE, SF#1849233) - * Fixed HTML comments spawning multiple lines producing invalid XHTML output (SF#1738173, BenBE) - * Added support for parameters beginning with dash in BASH language (BenBE) - * Support Apache's configuration sections, see http://httpd.apache.org/docs/2.2/sections.html (milian) - * Minor issue with PHP Heredoc and Nowdoc syntax sometimes not getting highlighted (BenBE) - * Updated Objective-C language file (SF#2013961, Quinn Taylor, BenBE) - * Added some keywords for VHDL (beshig, BenBE) - * Fixed severly broken ColdFusion language file (milian) - * Fixed some incorrectly highlighted things with the CSS language file (milian, BenBE) - * Improved Smarty language file (milian) - * Improved CSS language file (milian) - * Improved Pascal language file (milian) - * Improved LaTeX language file (Ðндрей Парамонов, BenBE) - * Fixed a regular expression in mIRC language file that caused a warning message to be issued (BenBE) - * Removed <, > and / from HTML names, now only containing the real tag names (BenBE) - * Use spaces instead of tabs for indendation in language files to have a consistent - coding standard accross geshi files (milian) - * Added some comment styles, keywords and added index highlighting (Chusslove Illich, ЧаÑлав Илић) - - Removed some private methods which were only called at exactly one place (milian) - * format_header_content - * format_footer_content - * get_attributes - - Second part of default style changes. Affected in this release: - * C++ - * C++ (Qt) - * CSS - * VHDL -Version 1.0.7.22 - - Added language files - * glSlang (BenBE) - * KiXtart (Riley McArdle) - * Lotus Notes @Formulas (Richard Civil) - * LotusScript (Richard Civil) - * MXML (David Spurr) - * Scala (Franco Lombardo) - * ActionScript 3 (Jordi Boggiano) - * GNU Gettext .po/.pot (Milian Wolff) - * Verilog (Günter Dannoritzer) - - Fixed a problem not yet addressed in 1.0.7.21 regarding highlighting of - symbols that caused some extra characters to be added in the output or - broke highlighting and standard compliance due to missing escaping of - internally used characters (SF#192320 and SF#1926259, BenBE) - - Fixed missing style information for ocaml language file (The_PHP_Jedi) - - Fixed a bug causing masses of warnings in rendered output if language file - miss style information (The_PHP_Jedi, BenBE) - - Missing tab width information could lead to warnings (BenBE) - - Missing symbol information for ASP (SF#1952038, nfsupport, BenBE) - - Empty delimiter message with OOoBasic (BenBE, Ccornell) - - Escaping of comments in LaTeX ignored (SF#1749806, BenBE) - - Modified Math environment $$ in LaTeX to be non-greedy (BenBE) - - Added possibility to match a regexp as comment (SF#1914640, SF#1945301, SF#1934832, BenBE) - - Introduced C-Style multiline continuation comments (SF#1914640, SF#1945301, BenBE) - - Introduced Fortran Comments (SF#1914640, SF#1934832, BenBE) - - Implemented Heredoc and Nowdoc Syntax for PHP and Perl (SF#1914640, BenBE) - - Implemented Compiler Directives for Delphi (SF#1914640, BenBE) - - Implemented minimalistic support for JavaScript \ Perl Regular Expressions (SF#1786665, SF#1754333, SF#1956631, BenBE) - - Fixed Strings in Matlab to be handled as comments instead of regexps, to prevent keywords being linked (BenBE) - - Applied PARSER_CONTROL fix of C++ for C++-Qt-Derivative (BenBE) - - Fixed incorrect treatment of unequally long multiline comment separators (related to SF #1891630, BenBE) - - Added PARSER_CONTROL settings for keywords in ASM language file (SF#1835148, BenBE) - - Fixed missing CASSE_SENSITIVE entry for DOS language file (SF#1956314, BenBE) - - Fixed accidential highlighting of keywords in argument names (SF#1956456, Milian Wolff, BenBE) - - Fixed yet again some #-related bash problem (SF#1956459, Milian Wolff, BenBE) - - Added backticks as symbols (Milian Wolff) - - Example script remembers selections and source submitted (Milian Wolff) - - Example script allows remembered source and preselected language to be cleared (Milian Wolff) - - Example script now properly includes geshi and doesn't suppress error messages anylonger. (Milian Wolff) - - Code cleanup by using direct string indexing instead of substr with length 1 (Milian Wolff) - - Optimized generation of code parts in strict mode (Milian Wolff) - - Optimized COMMENT_REGEXP by using an incremental regexp cache (Milian Wolff, BenBE) - - Fixed a problem that rarely skipped highlighting of escaped chars which usually should have gotten highlighted (BenBE) - - Optimized generation of highlighted strings to use fast skip forward while highlighting them (Milian Wolff, BenBE) - - Optimization using basic rework of indent function improving tab expansion performance (BenBE) - - Lots of other minor optimizations based on coding style improvements (Milian Wolff) - - Implemented setting to force spans to be closed before newlines, see SF#1727398 (Milian Wolff) - - Added missing credits for D language file to THANKS file (SF#1720899, BenBE) - - Optimization to prevent loading the current language file twice (Milian Wolff) - - Optimization: Use file_get_contents() to load sourcecode from files. - Even if GeSHi worked with PHP 4.1 before, it doesn't now. (Milian Wolff) - - Added description of extra language features (SF#1970248, BenBE) - - Added support for highlighting the C# using and namespace directives (SF #1395677, BenBE) - - Added support for highlighting the Java import and package directives (SF #1395677, BenBE) - - Fixed minor problem in Haskell cuasing accidential start of comment (SF#1987221, BenBE) - - Fixed minor issue causing loads of warnings if a language files defines no symbols (BenBE) - - Updated some aspects of the documentation and included further hints (BenBE) - - First of series of color scheme changes. Affected languages (sofar): - * Assembler (x86) - * Bash - * C - * C# - * Delphi - * Fortran77 - * glSlang - * Java & Java 5 - * JavaScript - * OCaml - * OpenOffice.org Basic - * Pascal - * Perl - * PHP and PHP-Brief -Version 1.0.7.21 - - Added language files - * Basic4GL (Matthew Webb) - - Fixed problem with mIRC language highlighting spaces only (BenBE) - - Language files can now specify a function to be called to decide the - colour of a regular expression match - - Added single quote to Lua (Darrin Roenfanz) - - Compare comments case insensitively (fixes AutoIT comments somewhat) - (Daniel Gordon) - - Fixed symbols not being highlighted at all (SF #1767953, BenBE) - - Fixed brackets not correctly managed (SF #1767954, BenBE) - - Changed default languages for some extensions - - Included color and character information for symbol highlighting in some languages (BenBE) - - Fixed a problem with extension detection if default was used (BenBE) - - Fixed a highlighting problem with the LaTeX language (SF #1776182, BenBE) - - Added a new parameter for enable_highlighting to reduce source duplication (SF #1786104, BenBE) - - Updated doxygen documentation to include since tags and some missing parameters - - Disabled symbol highlighting by default (doesn't affect brackets, cf. documentation) (BenBE) - - Added a check for set_case_keywords for the given param to be supported (BenBE) - - Minor rework of the HTML documentation layout \ W3C compliance (BenBE) - - Fixed highlighting error in bash language avoiding keywords in comments (SF #1786314, SF #1564839, BenBE) - - Fixed template params for C++ and C# not being highlighted (SF #1772919, BenBE) - - Fixed more reported problems about mirc highlighting - - Added some missing keywords for VB.NET - - Fixed some warnings in DOS language file (Florian Angehrn) - - Add possibility to handle more than one extra line style (SF #1698255, German Rumm, BenBE) - - Fixed handling of URLs when output case differs from URL case (SF #1815504, Tom Samstag, BenBE) - - Fixed POD (Plain Old Documentation) format problems breaking highlighting of Perl (SF #1891630, Shannon Wynter, BenBE) - - Fixed a problem with mIRC when & was used for identifiers (SF #1875552, BenBE) -Version 1.0.7.20 - - Added language files - * Genero (logic) and Per (forms) (FOURJ's Genero 4GL) (Lars Gersmann) - * Haskell (Dagit) - * ABAP (Andres Picazo) - * Motorola 68k Assembler (for MC68HC908GP32 Microcontroller) (BenBE) - * Dot (Adrien Friggeri) - - Fixed java documentation search for keywords to actually go to the - documentation (spaze) - - Applied fix for bug 1688864 (bad regexes) (Tim Starling) - - Fixed comment CSS rule in visualfoxpro - - ThinBASIC language update (Eros Olmi) - - mIRC language update (BenBE) - - Fixed outdated documentation URL of Perl language file (RuralMoon by BenBE) - - Fixed tab replacement code not generating the correct number of spaces in - some cases (Guillermo Calvo) - - Fixed two typos in Z80 language file - - Applied fix for bug 1730168 (Daniel Naber) - - Applied fix for bug 1705482 (Jason Frame) - * Configurable line endings (Replace \n by custom string) - * per-language tab-widths (Adjustable for width>=1) - * Included defaults for ASM (x86, m68k, z80), C, C (Mac), C++, C++ (Qt), C#, - Delphi, CSS,, HTML, PHP, PHP (Brief), QBasic, Ruby, XML - - Added a possibility to force generation of a surrounding tag around - the highlighted source - - Applied fix for additional keywords for the bash language - (cf. http://bash.thefreebizhost.com/bash_geshi.php, BenBE / Jan G) - - Fix bad colour definition in GML language (Andreas Gohr) - - Fixed phpdoc comments not being indented one space if they should be (Andy - Hassall) -Version 1.0.7.19 - - Added language files - * X++ (Simon Butcher) - * Rails (Moises Deniz) - - Fixed invalid HTML being generated and doctypes not being highlighted over - multiple lines properly when line numbers are on (Validome) - - Improved the ruby syntax highlighting by basing it off the Rails file - - Changed some regular expressions to possibly help with badly performing - regex support in PHP (Tim Starling) - - Allow {TIME}, {LANGUAGE} and {VERSION} to be used in the header as well as - the normal
    - \ No newline at end of file diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/index.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/index.html deleted file mode 100644 index f499a8f9..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - GeSHi 1.0.8 - - - - - - - - - - - <H2>Frame Alert</H2> - <P>This document is designed to be viewed using the frames feature. - If you see this message, you are using a non-frame-capable web client.</P> - - - \ No newline at end of file diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/li_geshi.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/li_geshi.html deleted file mode 100644 index f074e378..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/li_geshi.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - -
    geshi
    -
    - -
    - -
    Description
    -
    - Class trees
    - Index of elements
    - Todo List
    -
    - - - - - - - -
    Sub-packagecore
    -
    -
    -
     Classes
    -
    ClassGeSHi
    -
     Functions
    -
    Functiongeshi_highlight
    -
     Files
    -
    Filegeshi.php
    -
    -
    - - -
    -
    -

    phpDocumentor v 1.4.2

    - - \ No newline at end of file diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/banner.css b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/banner.css deleted file mode 100644 index 032b037f..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/banner.css +++ /dev/null @@ -1,33 +0,0 @@ -body -{ - background-color: #EEEEEE; - margin: 0px; - padding: 0px; -} - -/* Banner (top bar) classes */ - -.banner { } - -.banner-menu -{ - text-align: right; - clear: both; - padding: .5em; - border-top: 2px solid #AAAAAA; -} - -.banner-title -{ - text-align: right; - font-size: 20pt; - font-weight: bold; - margin: .2em; -} - -.package-selector -{ - background-color: #DDDDDD; - border: 1px solid #AAAAAA; - color: #000090; -} diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass.png deleted file mode 100644 index b1f60760..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass_logo.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass_logo.png deleted file mode 100644 index ab21d652..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractClass_logo.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractMethod.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractMethod.png deleted file mode 100644 index 635fa08b..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractMethod.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass.png deleted file mode 100644 index eb2938e8..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass_logo.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass_logo.png deleted file mode 100644 index 93c1da85..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateClass_logo.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateMethod.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateMethod.png deleted file mode 100644 index 203ce61d..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/AbstractPrivateMethod.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class.png deleted file mode 100644 index 9ac7daa9..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class_logo.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class_logo.png deleted file mode 100644 index 2c97193a..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Class_logo.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constant.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constant.png deleted file mode 100644 index c3610cb9..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constant.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constructor.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constructor.png deleted file mode 100644 index cb78dcd2..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Constructor.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Destructor.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Destructor.png deleted file mode 100644 index d60215d6..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Destructor.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Function.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Function.png deleted file mode 100644 index 5f05eb2f..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Function.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Global.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Global.png deleted file mode 100644 index f00968b7..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Global.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/I.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/I.png deleted file mode 100644 index 874f1ba5..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/I.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Index.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Index.png deleted file mode 100644 index 09cead5f..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Index.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface.png deleted file mode 100644 index 4ab1592e..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface_logo.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface_logo.png deleted file mode 100644 index 2c97193a..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Interface_logo.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/L.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/L.png deleted file mode 100644 index dc49c4ee..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/L.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lminus.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lminus.png deleted file mode 100644 index a7346d22..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lminus.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lplus.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lplus.png deleted file mode 100644 index 673ab01b..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Lplus.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Method.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Method.png deleted file mode 100644 index e5b154b5..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Method.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page.png deleted file mode 100644 index 4d3a3771..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page_logo.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page_logo.png deleted file mode 100644 index 91437deb..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Page_logo.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass.png deleted file mode 100644 index 88431d4f..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass_logo.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass_logo.png deleted file mode 100644 index c9d3a58a..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateClass_logo.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateMethod.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateMethod.png deleted file mode 100644 index 9b9f7335..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateMethod.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateVariable.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateVariable.png deleted file mode 100644 index fef0a273..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/PrivateVariable.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticMethod.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticMethod.png deleted file mode 100644 index e5b154b5..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticMethod.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticVariable.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticVariable.png deleted file mode 100644 index 2a372b48..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/StaticVariable.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/T.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/T.png deleted file mode 100644 index e6f55bd8..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/T.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tminus.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tminus.png deleted file mode 100644 index 226ba0c0..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tminus.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tplus.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tplus.png deleted file mode 100644 index e9a3c4ee..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Tplus.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Variable.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Variable.png deleted file mode 100644 index 2a372b48..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/Variable.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/blank.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/blank.png deleted file mode 100644 index 9c1bda19..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/blank.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/class_folder.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/class_folder.png deleted file mode 100644 index be0face2..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/class_folder.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/empty.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/empty.png deleted file mode 100644 index d5683865..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/empty.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/file.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/file.png deleted file mode 100644 index 8ff962fd..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/file.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/folder.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/folder.png deleted file mode 100644 index b793328d..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/folder.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/function_folder.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/function_folder.png deleted file mode 100644 index 6d8861c7..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/function_folder.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button.png deleted file mode 100644 index 521f29a8..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button_disabled.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button_disabled.png deleted file mode 100644 index def00128..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/next_button_disabled.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package.png deleted file mode 100644 index 6fe427a5..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package_folder.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package_folder.png deleted file mode 100644 index f504b70d..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/package_folder.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button.png deleted file mode 100644 index 9f0c62d4..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button_disabled.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button_disabled.png deleted file mode 100644 index 850edcfd..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/previous_button_disabled.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/private_class_logo.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/private_class_logo.png deleted file mode 100644 index c9d3a58a..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/private_class_logo.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial.png deleted file mode 100644 index 14443d8c..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial_folder.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial_folder.png deleted file mode 100644 index 6e28f012..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/tutorial_folder.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/up_button.png b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/up_button.png deleted file mode 100644 index bd9ff8cd..00000000 Binary files a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/images/up_button.png and /dev/null differ diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/stylesheet.css b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/stylesheet.css deleted file mode 100644 index 96729b65..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/media/stylesheet.css +++ /dev/null @@ -1,146 +0,0 @@ -a { color: #000090; text-decoration: none; } -a:hover, a:active, a:focus { color: highlighttext; background-color: highlight; text-decoration: none; } - -body { background: #FFFFFF; } -body, table { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; } - -a img { border: 0px; } - -/* Page layout/boxes */ - -.info-box { } -.info-box-title { margin: 1em 0em 0em 0em; font-weight: normal; font-size: 14pt; color: #999999; border-bottom: 2px solid #999999; } -.info-box-body { border: 1px solid #999999; padding: .5em; } -.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; } - -.oddrow { background-color: #F8F8F8; border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} -.evenrow { border: 1px solid #AAAAAA; padding: .5em; margin-bottom: 1em} - -.page-body { max-width: 800px; margin: auto; } -.tree { white-space: nowrap; font: icon } -.tree dd { margin-left: 19px } -.tree dl { margin: 0px } -.tree-icon { vertical-align: middle; border: 0px; margin-right: 3px } - -/* Index formatting classes */ - -.index-item-body { margin-top: .5em; margin-bottom: .5em} -.index-item-description { margin-top: .25em } -.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt } -.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em} -.index-letter-title { font-size: 12pt; font-weight: bold } -.index-letter-menu { text-align: center; margin: 1em } -.index-letter { font-size: 12pt } - -/* Docbook classes */ - -.description {} -.short-description { font-weight: bold; color: #666666; } -.tags { padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; } -.parameters { padding-left: 0em; margin-left: 3em; color: #014fbe; list-style-type: square; } -.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; } -.package { font-weight: bold; } -.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black } -.package-details { font-size: 85%; } -.sub-package { font-weight: bold; } -.tutorial { border-width: thin; border-color: #0066ff; } -.tutorial-nav-box { width: 100%; border: 1px solid #999999; background-color: #F8F8F8; } -.folder-title { font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif } - -/* Generic formatting */ - -.field { font-weight: bold; } -.detail { font-size: 8pt; } -.notes { font-style: italic; font-size: 8pt; } -.separator { background-color: #999999; height: 2px; } -.warning { color: #FF6600; } -.disabled { font-style: italic; color: #999999; } - -/* Code elements */ - -.line-number { } - -.class-table { width: 100%; } -.class-table-header { border-bottom: 1px dotted #666666; text-align: left} -.class-name { color: #0000AA; font-weight: bold; } - -.method-summary { color: #009000; padding-left: 1em; font-size: 8pt; } -.method-header { } -.method-definition { margin-bottom: .2em } -.method-title { color: #009000; font-weight: bold; } -.method-name { font-weight: bold; } -.method-signature { font-size: 85%; color: #666666; margin: .5em 0em } -.method-result { font-style: italic; } - -.var-summary { padding-left: 1em; font-size: 8pt; } -.var-header { } -.var-title { color: #014fbe; margin-bottom: .3em } -.var-type { font-style: italic; } -.var-name { font-weight: bold; } -.var-default {} -.var-description { font-weight: normal; color: #000000; } - -.include-title { color: #014fbe;} -.include-type { font-style: italic; } -.include-name { font-weight: bold; } - -.const-title { color: #FF6600; } -.const-name { font-weight: bold; } - -/* Syntax highlighting */ - -.src-code { font-family: 'Courier New', Courier, monospace; font-weight: normal; } -.src-line { font-family: 'Courier New', Courier, monospace; font-weight: normal; } - -.src-code a:link { padding: 1px; text-decoration: underline; color: #0000DD; } -.src-code a:visited { text-decoration: underline; color: #0000DD; } -.src-code a:active { background-color: #FFFF66; color: #008000; } -.src-code a:hover { background-color: #FFFF66; text-decoration: overline underline; color: #008000; } - -.src-comm { color: #666666; } -.src-id { color: #FF6600; font-style: italic; } -.src-inc { color: #0000AA; font-weight: bold; } -.src-key { color: #0000AA; font-weight: bold; } -.src-num { color: #CC0000; } -.src-str { color: #CC0000; } -.src-sym { } -.src-var { } - -.src-php { font-weight: bold; } - -.src-doc { color: #666666; } -.src-doc-close-template { color: #666666 } -.src-doc-coretag { color: #008000; } -.src-doc-inlinetag {} -.src-doc-internal {} -.src-doc-tag { color: #0080CC; } -.src-doc-template { color: #666666 } -.src-doc-type { font-style: italic; color: #444444 } -.src-doc-var { color: #444444 } - -.tute-tag { color: #009999 } -.tute-attribute-name { color: #0000FF } -.tute-attribute-value { color: #0099FF } -.tute-entity { font-weight: bold; } -.tute-comment { font-style: italic } -.tute-inline-tag { color: #636311; font-weight: bold } - -/* tutorial */ - -.authors { } -.author { font-style: italic; font-weight: bold } -.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal } -.example { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; } -*[class="example"] { line-height : 1.0em; } -.listing { border: 1px dashed #999999; background-color: #EEEEEE; padding: .5em; white-space: nowrap; } -*[class="listing"] { line-height : 1.0em; } -.release-info { font-size: 85%; font-style: italic; margin: 1em 0em } -.ref-title-box { } -.ref-title { } -.ref-purpose { font-style: italic; color: #666666 } -.ref-synopsis { } -.title { font-weight: bold; border-bottom: 1px solid #999999; color: #999999; } -.cmd-synopsis { margin: 1em 0em } -.cmd-title { font-weight: bold } -.toc { margin-left: 2em; padding-left: 0em } - diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/packages.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/packages.html deleted file mode 100644 index d8c4c04a..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/packages.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/todolist.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/todolist.html deleted file mode 100644 index 95177c15..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/todolist.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - Todo List - - - - -

    Todo List

    -

    geshi

    -

    GeSHi::disable_highlighting()

    -
      -
    • Rewrite with array traversal
    • -
    -

    GeSHi::enable_highlighting()

    -
      -
    • Rewrite with array traversal
    • -
    -

    GeSHi::enable_important_blocks()

    -
      -
    • REMOVE THIS SHIZ FROM GESHI!
    • -
    -

    GeSHi::get_language_name_from_extension()

    -
      -
    • Re-think about how this method works (maybe make it private and/or make it a extension->lang lookup?)
    • -
    • static?
    • -
    -

    GeSHi::highlight_lines_extra()

    -
      -
    • Some data replication here that could be cut down on
    • -
    -

    GeSHi::load_from_file()

    -
      -
    • Complete rethink of this and above method
    • -
    -

    - Documentation generated on Thu, 25 Dec 2008 14:34:53 +0100 by phpDocumentor 1.4.2 -

    - - \ No newline at end of file diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html deleted file mode 100644 index 693617b7..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html +++ /dev/null @@ -1,4077 +0,0 @@ - - - - GeSHi Documentation 1.0.8.12 - - - - - - - - -

    GeSHi Documentation

    - -
    - -

    Version 1.0.8.12

    - -

    The GeSHi Logo

    - -
    -
    Authors:
    -
    © 2004 - 2007 Nigel McNie
    - -
    © 2007 - 2012 Benny Baumann
    - -
    © 2008 - 2009 Milian Wolff
    - -
    GeSHi Website:
    -
    http://qbnz.com/highlighter
    -
    - -
    - -

    This is the documentation for GeSHi - Generic Syntax Highlighter.

    - -

    The most modern version of this document is available on the web - -go to http://qbnz.com/highlighter/documentation.php to view it.

    - -

    Any comments, questions, confusing points? Please get in contact with the developers! We -need all the information we can get to make the use of GeSHi and everything related to it (including this documentation) -a breeze.

    - -

    Contents

    - -
    -
    - -

    1 Introduction

    - -

    GeSHi is exactly what the acronym stands for: a Generic Syntax Highlighter. As long -as you have a language file for almost any computer language - whether it be a -scripting language, object orientated, markup or anything in between - GeSHi can -highlight it! GeSHi is extremely customisable - the same source can be highlighted -multiple times in multiple ways - the same source even with a different language. -GeSHi outputs XHTML strict compliant code1, and can -make use of CSS to save on the amount of output. And what is the cost for all of this? You need -PHP. That’s all!

    - -

    1.1 Features

    - -

    Here are some of the standout features of GeSHi:

    - -
    -
    Programmed in PHP:
    -
    GeSHi is coded entirely in PHP. This means that where ever you have PHP, you -can have GeSHi! Almost any free webhost supports PHP, and GeSHi works fine with PHP > 4.3.02.
    - -
    Support for many languages:
    -
    GeSHi comes with more than 100 languages, including PHP, HTML, CSS, Java, C, Lisp, XML, Perl, Python, -ASM and many more!
    - -
    XHTML compliant output:
    -
    GeSHi produces XHTML compliant output, using stylesheets, so you need not worry about -GeSHi ruining your claims to perfection in the standards department ;)
    - -
    Highly customisable:
    -
    GeSHi allows you to change the style of the output on the fly, use CSS classes or not, use an external -stylesheet or not, use line numbering, change the case of output keywords… the list goes on and on!
    - -
    Flexible:
    -
    Unfortunately, GeSHi is quite load/time intensive for large blocks of code. However, you want speed? -Turn off any features you don’t like, pre-make a stylesheet and use CSS classes to reduce the amount of output and more - -it’s easy to strike a balance that suits you.
    -
    - -

    This is just a taste of what you get with GeSHi - the best syntax highlighter for the web in the world!

    - -

    1.2 About GeSHi

    - -

    GeSHi started as a mod for the phpBB forum system, to enable highlighting of more -languages than the available (which can be roughly estimated to exactly 0 ;)). However, it quickly spawned into an -entire project on its own. But now it has been released, work continues on a mod -for phpBB3 - and hopefully for many forum systems, blogs and other web-based systems.

    - -

    Several systems are using GeSHi now, including:

    - -
      -
    • Dokuwiki - An advanced wiki engine
    • -
    • gtk.php.net - Their manual uses GeSHi for syntax highlighting
    • -
    • WordPress - A powerful blogging system4
    • -
    • PHP-Fusion - A constantly evolving CMS
    • -
    • SQL Manager - A Postgres DBAL
    • -
    • Mambo - A popular open source CMS
    • -
    • MediaWiki - A leader in Wikis[^plugin-only]
    • -
    • TikiWiki - A megapowerful Wiki/CMS
    • -
    • TikiPro - Another powerful Wiki based on TikiWiki
    • -
    • WikkaWiki - A flexible and lightweight Wiki engine
    • -
    • RWeb - A site-building tool
    • -
    - -

    GeSHi is the original work of Nigel McNie. The project was later handed over to Benny Baumann. -Others have helped with aspects of GeSHi also, they’re mentioned in the THANKS file.

    - -

    1.3 Credits

    - -

    Many people have helped out with GeSHi, whether by creating language files, submitting bug -reports, suggesting new ideas or simply pointing out a new idea or something I’d missed. All -of these people have helped to build a better GeSHi, you can see them in the THANKS -file.

    - -

    Do you want your name on this list? Why not make a language file, or submit a valid bug? Or perhaps help me with an -added feature I can’t get my head around, or suggest a new feature, or even port -GeSHi to anothe language? There’s lots you can do to help out, and I need it all :)

    - -

    1.4 Feedback

    - -

    I need your feedback! ANYthing you have to say is fine, whether it be a query, -congratulations, a bug report or complaint, I don’t care! I want to make this software -the best it can be, and I need your help! You can contact me in the following ways:

    - - - -

    Remember, any help I am grateful for :)

    - -

    2 The Basics

    - -

    In this section, you’ll learn a bit about GeSHi, how it works and what it uses, how to install it and how to use -it to perform basic highlighting.

    - -

    2.1 Getting GeSHi work

    - -

    If you’re reading this and don’t have GeSHi, that’s a problem ;). So, how do you get your hands on it?

    - -

    2.1.1 Requirements

    - -

    GeSHi requires the following to be installable:

    - -
      -
    • PHP. It’s untested with anything other below 4.4.X. I hope to extend this range soon. I see no reason why -it won’t work with any version of PHP above 4.3.0.
    • -
    • Approximately 2 megabytes of space. The actual script is small - around 150K - but most of the size comes -from the large number of language files (over 100!). If you’re pushed for space, make sure you don’t upload to -your server the docs/ or contrib/ directory, and you may want to leave out any language files that don’t -take your fancy either.
    • -
    - -

    As you can see, the requirements are very small. If GeSHi does NOT work for you in a particular version of PHP, let -me know why and I’ll fix it.

    - -

    2.1.2 Downloading GeSHi

    - -

    There are several ways to get a copy of GeSHi. The first and easiest way of all is -visiting http://qbnz.com/highlighter/downloads.php to obtain the latest version. -This is suitable especially when you plan on using GeSHi on an production website -or otherwise need a stable copy for flawless operation.

    - -

    If you are somewhat more sophisticated or need a feature just recently implemented -you might consider getting GeSHi by downloading via SVN. There are multiple ways -for doing so and each one has its own advantages and disadvantages. Let’s cover -the various locations in the SVN you might download from:

    - -
      -
    • https://geshi.svn.sourceforge.net/svnroot/geshi/tags/:
      -This directory holds all previous releases of GeSHi each as a subdirectory. By downloading from here you can test your code with various old versions -in case something has been broken recently.
    • -
    • https://geshi.svn.sourceforge.net/svnroot/geshi/branches/RELEASE_1_0_X_STABLE/geshi-1.0.X/src/:
      -This directory is the right place for you if you want to have reasonably current versions of GeSHi but need something that is stable. This directory -is updated once in a while between updates whenever there’s something new but which is already reasonably stable. This branch is used to form the -actual release once the work is done.
    • -
    • https://geshi.svn.sourceforge.net/svnroot/geshi/trunk/geshi-1.0.X/src/:
      -This directory is the working directory where every new feature, patch or improvement is committed to. This directory is updated regularly, but is not -guaranteed to be tested and stable at all times. With this version you’ll always get the latest version of GeSHi out there, but beware of bugs! There -will be loads of them here! So this is absolutely not recommended for productive use!
    • -
    - -

    If you have choosen the right SVN directory for you do a quick -svn co $SVNPATH geshi where $SVNPATH is one of the above paths and your desired version of GeSHi will be -downloaded into an subdirectory called “geshi”. If you got a version of GeSHi -you can go on installing as shown below.

    - -

    2.1.3 Extracting GeSHi

    - -

    Packages come in .zip, .tar.gz and .tar.bz2 format, so there’s no complaining about whether it’s available for -you. *nix users probably want .tar.gz or .tar.bz2 and windows users probably want .zip. -And those lucky to download it directly from SVN don’t even need to bother extracting GeSHi.

    - -

    To extract GeSHi in Linux (.tar.gz):

    - -
      -
    1. Open a shell
    2. -
    3. cd to the directory where the archive lies
    4. -
    5. Type tar -xzvf [filename] where [filename] is the name of the archive (typically GeSHi-1.X.X.tar.gz)
    6. -
    7. GeSHi will be extracted to its own directory
    8. -
    - -

    To extract GeSHi in Windows (.zip):

    - -
      -
    1. Open Explorer
    2. -
    3. Navigate to the directory where the archive lies
    4. -
    5. Extract the archive. The method you use will depend on your configuration. Some people can right-click upon -the archive and select “Extract” from there, others may have to drag the archive and drop it upon an extraction program.
    6. -
    - -

    To extract from .zip you’ll need an unzipping program - unzip in Linux, or 7-Zip, WinZip, WinRAR or similar for Windows.

    - -

    2.1.4 Installing GeSHi

    - -

    Installing GeSHi is a snap, even for those most new to PHP. There’s no tricks involved. Honest!

    - -

    GeSHi is nothing more than a PHP class with related language support files. Those of you familiar with PHP can then -guess how easy the installation will be: simply copy it into your include path somewhere. You can put it wherever you -like in this include path. I recommend that you put the language files in a subdirectory of your include path too - -perhaps the same subdirectory that geshi.php is in. Remember this path for later.

    - -

    If you don’t know what an include path is, don’t worry. Simply copy GeSHi to your webserver. So for example, say your -site is at http://mysite.com/myfolder, you can copy GeSHi to your site so the directory structure is like this:

    - -
    http://mysite.com/myfolder/geshi/[language files]
    -http://mysite.com/myfolder/geshi.php
    -
    - -

    Or you can put it in any subdirectory you like:

    - -
    http://mysite.com/myfolder/includes/geshi/[language files]
    -http://mysite.com/myfolder/includes/geshi.php
    -
    - -
    - -
    Caution:
    - -

    When using GeSHi on a live site, the only directory required is the geshi/ subdirectory. Both contrib/ and docs/ are -worthless, and furthermore, as some people discovered, one of the files in contrib had a security hole (fixed as of 1.0.7.3). -I suggest you delete these directories from any live site they are on.

    - -
    - -

    2.2 Basic Usage

    - -

    Use of GeSHi is very easy. Here’s a simple example:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -2223
    -2425
    -2627
    -28
    //
    -// Include the GeSHi library//
    -include_once 'geshi.php'; 
    -//// Define some source to highlight, a language to use
    -// and the path to the language files//
    - $source = '$foo = 45;
    -for ( $i = 1; $i < $foo; $i++ ){
    -  echo "$foo\n";  --$foo;
    -}';$language = 'php';
    - //
    -// Create a GeSHi object//
    - $geshi = new GeSHi($source, $language);
    - //
    -// And echo the result!//
    -echo $geshi->parse_code();
    - -

    As you can see, there’s only three really important lines:

    - -

    include_once('geshi.php')

    - -

    This line includes the GeSHi class for use

    - -

    $geshi = new GeSHi($source, $language);

    - -

    This line creates a new GeSHi object, holding the source and the language you want to use for highlighting.

    - -

    echo $geshi->parse_code();

    - -

    This line spits out the result :)

    - -

    So as you can see, simple usage of GeSHi is really easy. Just create a new GeSHi object and get the code!

    - -

    Since version 1.0.2, there is a function included with GeSHi called geshi_highlight. This behaves exactly as the php -function highlight_string() behaves - all you do is pass it the language you want to use to highlight and the -path to the language files as well as the source. Here are some examples:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -
    // Simply echo the highlighted code
    -geshi_highlight($source, 'php', $path); 
    -// Get the code back, for use later$code = geshi_highlight($source, 'java', $path, true);
    - // Check if there is an error with parsing this code
    - ob_start();
    -$result = geshi_highlight($source, 'perl', $path);$code = ob_get_contents();
    - ob_end_clean();
    -if ( !$result ){
    -    // There was an error with highlighting...}
    -else{
    -    // All OK :)}
    - -

    However, these are really simple examples and doesn’t even begin to cover all the advanced features of GeSHi. -If you want to learn more, continue on to section 3: Advanced Features.

    - -

    3 Advanced Features

    - -

    This section documents the advanced features of GeSHi - strict mode, using CSS classes, changing styles on the fly, -disabling highlighting of some things and more.

    - -

    In this section there are many code snippets. For all of these, you should assume that the GeSHi library has been -included, and a GeSHi object has been created and is referenced by the variable $geshi. Normally, the -source, language and path used are arbitary.

    - -

    3.1 The Code Container

    - -

    The Code Container has a fundamental effect on the layout of your code before you even begin to style. What is the -Code Container? It’s the bit of markup that goes around your code to contain it. By default your code is surrounded -by a <pre>, but you can also specify a <div>.

    - -

    The <pre> header is the default. If you’re familiar with HTML you’ll know that whitespace is rendered -“as is” by a <pre> element. The advantage for you is that if you use <pre> the whitespace -you use will appear pretty much exactly how it is in the source, and what’s more GeSHi won’t have to add a whole -lot of <br />’s and non-breaking spaces (&nbsp;) to your code to indent it. This saves -you source code (and your valuable visitors waiting time and your bandwidth).

    - -

    But if you don’t like <pre> or it looks stupid in your browser no matter what styles you try to -apply to it or something similar, you might want to use a <div> instead. A <div> will -result in more source - GeSHi will have to insert whitespace markup - but in return you can wrap long lines of code -that would otherwise have your browser’s horizontal scrollbar appear. Of course with <div> you can -not wrap lines if you please. The highlighter demo at the GeSHi home page uses the <div> -approach for this reason.

    - -

    At this stage there isn’t an option to wrap the code in <code> tags (unless you use the function -geshi_highlight), partly because of the inconsistent and unexpected ways stuff in <code> tags is -highlighted. Besides, <code> is an inline element. But this may become an option in future versions.

    - -

    As of GeSHi 1.0.7.2 there is a new header type, that specifies that the code should not be wrapped in anything at all.

    - -

    Another requested addition has been made in GeSHi 1.0.7.20 to force GeSHi to create a block around the highlighted -source even if this wasn’t necessary, thus styles that are applied to the output of GeSHi can directly influence -the code only even if headers and footers are present.

    - -

    To change/set the header to use, you call the set_header_type() method. It has one required argument which -defines the container type. Available are:

    - -
    -
    $geshi->set_header_type(GESHI_HEADER_DIV);
    -
    -

    Puts a <div> around both, code and linenumbers. Whitespace is converted to &nbsp; -sequences (i.e. one whitespace and the html entity of a non-breaking whitespace) to keep your indendation level -in tact. Tabs are converted as well and you can manually define the tab-width. Lines are automatically wrapped. -Linenumbers are created using an ordered list.

    -
    - -
    $geshi->set_header_type(GESHI_HEADER_PRE);
    -
    -

    Wraps code and linenumbers in a <pre> container. This way whitespace is kept as-is and thus -this header produces less overhead then the GESHI_HEADER_DIV header type. Since linenumbers are still -created using an ordered list this header type produces invalid HTML.

    -
    - -
    $geshi->set_header_type(GESHI_HEADER_PRE_VALID);
    -
    Available since 1.0.8
    - -
    -

    When linenumbers are disabled, this behaves just like GESHI_HEADER_PRE. In the other case though, a -<div> is used to wrap the code and linenumbers and the <pre> is put inside the list -items (<li>). This means slightly larger HTML output compared to GESHI_HEADER_PRE, but the -output is valid HTML.

    -
    - -
    $geshi->set_header_type(GESHI_HEADER_PRE_TABLE);
    -
    Available since 1.0.8
    - -
    -

    Once again a <div> tag wraps the output. This time though no ordered list is used to create an ordered list, -but instead we use a table with two cells in a single row. The left cell contains a <pre> tag which holds all -linenumbers. The second cell holds the highlighted code, also wrapped in a <pre> tag, just like with -GESHI_HEADER_PRE.

    -
    - -
    -

    This produces valid HTML and works around the nasty selection behaviour of Firefox and other Gecko based -browsers, see SF#1651996 for more information.

    -
    - -
    $geshi->set_header_type(GESHI_HEADER_NONE);
    -
    Available since 1.0.7.2
    - -
    -

    No wrapper is added.

    -
    -
    - -

    Those are the only arguments you should pass to set_header_type. Passing anything else may cause inconsistencies -in what is used as the Code Container (although it should simply use a <pre>). Better not to risk it.

    - -
    - -
    Note:
    - -

    GESHI_HEADER_DIV, GESHI_HEADER_PRE, etc. are constants, so don’t put them in strings!

    - -
    - -
    - -
    Caution:
    - -

    The default styles for the <pre> and <div> will be different, especially if you use - line numbers!

    - -

    I have found that a <pre> results in code that is smaller than for that of a <div>, you - should rectify this difference by using set_overall_style() if you need to. But be aware of this - difference for if you are changing the header type!

    - -
    - -

    3.2 Line Numbers

    - -

    GeSHi has the ability to add line numbers to your code (see the demo available at http://qbnz.com/highlighter/demo.php -to see what can be achieved). Line numbers are a great way to make your code look professional, especially if you use the -fancy line numbers feature.

    - -

    There are multiple methods for highlighting line numbers, but none of them is perfect. Of the various ways to highlight -line numbers GeSHi itself implements 2 different approaches, but allows you -by the way it generates the code to do the line numbers yourself if necessary - but more on this case later.

    - -

    The easiest approach is using the <ol>-tag for generating the line numbers, but -even though this is the easiest one there’s a big drawback with this one when -using Gecko-engine based browsers like Firefox or Konqueror. In these browsers -this approach will select the line numbers along with the code or will include extra markup in the selection.

    - -

    The other approach has been implemented in the 1.0.8 release of GeSHi with the GESHI_HEADER_PRE_TABLE header type. -When using this header type the line numbers are rendered apart from the source -in a table cell while the actual source is formatted as if the GESHI_HEADER_PRE header had been used. -This approach works with Firefox and other Gecko-based browsers so far although extreme care -has to be taken when applying styles to your source as Windows has some fonts -where bold font is of different height than normal or italic text of the same fontface.

    - -

    3.2.1 Enabling Line Numbers

    - -

    To highlight a source with line numbers, you call the enable_line_numbers() method:

    - -

    $geshi->enable_line_numbers($flag); -Where $flag is one of the following:

    - -
      -
    • GESHI_NORMAL_LINE_NUMBERS - Use normal line numbering
    • -
    • GESHI_FANCY_LINE_NUMBERS - Use fancy line numbering
    • -
    • GESHI_NO_LINE_NUMBERS - Disable line numbers (default)
    • -
    - -

    Normal line numbers means you specify a style for them, and that style gets applied to all of them. Fancy line numbers -means that you can specify a different style for each nth line number. You change the value of n (default 5):

    - -

    $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 37);

    - -

    The second parameter is not used in any other mode. Setting it to 0 is the same as simply using normal line numbers. -Setting it to 1 applies the fancy style to every line number.

    - -
    - -
    Note:
    - -

    The values above are CONSTANTS - so don’t put them in strings!

    - -
    - -

    3.2.2 Styling Line Numbers

    - -

    As of GeSHi 1.0.2, line numbers are added by the use of ordered lists. This solves the old issues of line number -styles inheriting from styles meant for the code. Also, this solves an important issue about selecting code. For -example, line numbers look nice, but when you go to select the code in your browser to copy it? You got the line -numbers too! Not such a good thing, but thankfully this issue is now solved. What is the price? Unfortunately the -whole way that styles are inherited/used has changed for those of you who were familiar with 1.0.1, and there is -quite a bit more HTML involved. So think carefully about these things before you enable line numbers.

    - -

    Now, onto how to style line numbers:

    - -

    Styles are set for line numbers using the set_line_style() method:

    - -

    $geshi->set_line_style('background: #fcfcfc;');

    - -

    If you’re using Fancy Line Numbers mode, you pass a second string for the style of the nth line number:

    - -

    $geshi->set_line_style('background: #fcfcfc;', 'background: #f0f0f0;');

    - -

    The second style will have no effect if you’re not using Fancy Line Numbers mode.

    - -

    By default, the styles you pass overwrite the current styles. Add a boolean “true” after the styles you specify to combine them with the current styles:

    - -
    PHP code
    1
    -23
    -4
    $geshi->set_line_style('background: red;', true);
    - // or, for fancy line numbers
    -$geshi->set_line_style('background: red;', 'background: blue;', true);
    - -
    - -
    Note:
    - -

    Due to a bug with Firefox the issue that should have been fixed with 1.0.2 has reappeared in another form as Firefox - includes extra text\markup into plaintext versions of webpage copies. This can sometimes be useful (actually it’s - used to get the plaintext version of this documentation), but more often is quite annoying. Best practice so far is - to either not use line numbers, or offer the visitor of your page a plaintext version of your source. To learn more - have a look at the SF.net BugTracker Issue #1651996. This will hopefully be fixed in GeSHi version 1.2 - or as soon as Firefox provides webdevelopers with adequate ways to control this feature - whichever comes first!

    - -
    - -
    - -
    Caution:
    - -

    When you set line number styles, the code will inherit those styles! This is the main issue to come out of the 1.0.2 - release. If you want your code to be styled in a predictable manner, you’ll have to call the set_code_style() - method to rectify this problem.

    - -

    Note also that you cannot apply background colours to line numbers unless you use set_overall_style(). - Here’s how you’d style:

    - -
      -
    1. Use set_overall_style() to style the overall code block. For example, you can set the border -style/colour, any margins and padding etc. using this method. In addition: set the background colour for -all the line numbers using this method.

    2. -
    3. Use set_line_style() to style the foreground of the line numbers. For example, you can set the colour, -weight, font, padding etc. of the line numbers using this method.

    4. -
    5. Use set_code_style() to explicitly override the styles you set for line numbers using -set_line_style. For example, if you’d set the line numbers to be bold (or even if you’d only set -the fancy line number style to be bold), and you didn’t actually want your code to be bold, you’d make sure -that font-weight: normal; was in the stylesheet rule you passed to set_code_style().

      - -

      This is the one major change from GeSHi 1.0.1 - make sure you become familiar with this, and make sure that you check -any code you have already styled with 1.0.1 when you upgrade to make sure nothing bad happens to it.

    6. -
    - -
    - -

    3.2.3 Choosing a Start Number

    - -

    As of GeSHi 1.0.2, you can now make the line numbers start at any number, rather than just 1. This feature is useful -if you’re highlighting code from a file from around a certain line number in that file, as an additional guide to -those who will view the code. You set the line numbers by calling the start_line_numbers_at() method:

    - -

    $geshi->start_line_numbers_at($number);

    - -

    $number must be a positive integer (or zero). If it is not, GeSHi will convert it anyway.

    - -

    If you have not enabled line numbers, this will have no effect.

    - -
    - -
    Caution:
    - -

    Although I’d like GeSHi to have XHTML strict compliance, this feature will break compliancy (however transitional - compliancy remains). This is because the only widely supported way to change the start value for line numbers is - by using the start=”number” attribute of the <ol> tag. Although CSS does provide a mechanism for - doing this, it is only supported in Opera versions 7.5 and above (not even Firefox supports this).

    - -
    - -

    3.3 Using CSS Classes

    - -

    Using CSS to highlight your code instead of in-lining the styles is a definate bonus. Not only is it more compliant -(the w3c is deprecating the style attribute in XHTML 2.0) but it results in far less outputted code - up to a whopping -90% saving - which makes a *huge* difference to those unlucky of us on modems!

    - -

    3.3.1 Enabling CSS Classes

    - -

    By default, GeSHi doesn’t use the classes, so it’s easy just to whack out some highlighted code if you need without -worrying about stylesheets. However, if you’re a bit more organised about it, you should use the classes ;). To turn -the use of classes on, you call the enable_classes() method:

    - -

    $geshi->enable_classes();

    - -

    If you want to turn classes OFF for some reason later:

    - -

    $geshi->enable_classes(false);

    - -

    If classes are enabled when parse_code() is called, then the resultant source will use CSS classes in the -output, otherwise it will in-line the styles. The advantages of using classes are great - the reduction in source will -be very noticeable, and what’s more you can use one stylesheet for several different highlights on the same page. In -fact, you can even use an external stylesheet and link to that, saving even more time and source (because stylesheets -are cached by browsers).

    - -
    - -
    Note:
    - -

    There have been problems with inline styles and the Symbol Highlighting added in 1.0.7.21. If you can you should - therefore turn CSS classes ON to avoid those issues. Although latest reworks in 1.0.8 should fix most of those issues.

    - -
    - -
    - -
    Caution:
    - -

    This should be the very first method you call after creating a new GeSHi object! That way, various other methods - can act upon your choice to use classes correctly. In theory, you could call this method just before parsing the - code, but this may result in unexpected behaviour.

    - -
    - -

    3.3.2 Setting the CSS class and ID

    - -

    You can set an overall CSS class and id for the code. This is a good feature that allows you to use the same -stylesheet for many different snippets of code. You call set_overall_class() and set_overall_id -to accomplish this:

    - -
    PHP code
    1
    -2
    $geshi->set_overall_class('mycode');
    -$geshi->set_overall_id('dk48ck');
    - -

    The default classname is the name of the language being used. This means you can use just the one stylesheet for all -sources that use the same language, and incidentally means that you probably won’t have to call these methods too often.

    - -

    CSS IDs are supposed to be unique, and you should use them as such. Basically, you can specify an ID for your code -and then use that ID to highlight that code in a unique way. You’d do this for a block of code that you expressly -wanted to be highlighted in a different way (see the section below on gettting the stylesheet for your code for an example).

    - -
    - -
    Note:
    - -

    As of GeSHi 1.0.8 the class name will always include the language name used for highlighting.

    - -
    - -

    3.3.3 Getting the stylesheet for your code

    - -

    The other half of using CSS classes is getting the stylesheet for use with the classes. GeSHi makes it very easy to -get a stylesheet for your code, with one easy method call:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -
    $geshi->enable_classes();
    - // Here we have code that will spit out a header for
    -// a stylesheet. For example: 
    -echo '<html><head><title>Code</title>
    -<style type="text/css"><!--';
    -// Echo out the stylesheet for this code blockecho $geshi->get_stylesheet();
    - // And continue echoing the page
    - echo '-->
    -</style></head><body>';
    - -

    The get_stylesheet() method gets the stylesheet for your code in one easy call. All you need to do -is output it in the correct place. As you can also see, you don’t even have to enable class usage to get the -stylesheet nessecary either - however not enabling classes but using the stylesheet may result in problems later.

    - -

    By default, get_stylesheet() tries to echo the least amount of code possible. Although currently it doesn’t -check to see if a certain lexic is even in the source, you can expect this feature in the future. At least for the -present however, if you explicitly disable the highlighting of a certain lexic, or disable line numbers, the related -CSS will not be outputted. This may be a bad thing for you perhaps you’re going to use the stylesheet for many blocks -of code, some with line numbers, others with some lexic enabled where this source has it disabled. Or perhaps you’re -building an external stylesheet and want all lexics included. So to get around this problem, you do this:

    - -

    $geshi->get_stylesheet(false);

    - -

    This turns economy mode off, and all of the stylesheet will be outputted regardless.

    - -

    Now lets say you have several snippets of code, using the same language. In most of them you don’t mind if they’re -highlighted the same way (in fact, that’s exactly what you want) but in one of them you’d like the source to be -highlighted differently. Here’s how you can do that:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -2223
    -2425
    -2627
    -2829
    -3031
    -3233
    -3435
    -3637
    -3839
    -4041
    -4243
    -4445
    -4647
    -48
    // assume path is the default "geshi/" relative to the current directory
    - $geshi1 = new GeSHi($source1, $lang);
    -$geshi2 = new GeSHi($source2, $lang); 
    -$geshi3 = new GeSHi($source3, $lang); 
    -// Turn classes on for all sources$geshi1->enable_classes();
    - $geshi2->enable_classes();
    -$geshi3->enable_classes(); 
    -// Make $geshi3 unique$geshi3->set_overall_id('different');
    -  
    -//// Methods are called on $geshi3 to change styles...
    -// 
    -echo '<html><head><title>Code</title>
    - <style type="text/css">
    -<!--';
    - // Get the nessecary stylesheets
    -echo $geshi1->get_stylesheet(); 
    -echo $geshi3->get_stylesheet(); 
    -echo '--></style></head>
    -<body>'; 
    - echo 'Code snippet 1:';
    -echo $geshi1->parse_code();echo 'Code snippet 2 (same highlighting as 1):';
    - echo $geshi2->parse_code();
    -echo 'Code snippet 3 (DIFFERENT highlighting):';echo $geshi3->parse_code();
    -  
    -echo '</body></html>';
    - -

    Before version 1.0.2, you needed to set the class of the code you wanted to be unique to the empty string. This -limitation has been removed in version 1.0.2 - if you set the ID of a block of code, all styling will be done based -on that ID alone.

    - -

    3.3.4 Using an External Stylesheet

    - -

    An external stylesheet can reduce even more the amount of code needed to highlight some source. However there are some -drawbacks with this. To use an external stylesheet, it’s up to you to link it in to your document, normally with -the following HTML:

    - -
    HTML code
    1
    -23
    -
    <html>
    -<head><link rel="stylesheet" type="text/css" href="url_to_stylesheet.css" />
    - -

    In your external stylesheet you put CSS declarations for your code. Then just make sure you’re using the correct class (use -set_overall_class() to ensure this) and this should work fine.

    - -

    This method is great if you don’t mind the source always being highlighted the same (in particular, if you’re making a -plugin for a forum/wiki/other system, using an external stylesheet is a good idea!). It saves a small amount of code and -your bandwidth, and it’s relatively easy to just change the stylesheet should you need to. However, using this will render -the methods that change the styles of the code useless, because of course the stylesheet is no longer being dynamically -generated. You can still disable highlighting of certain lexics dynamically, however.

    - -
    - -
    Note:
    - -

    As of version 1.0.2, GeSHi comes with a contrib/ directory, which in it contains a “wizard” script for creating - a stylesheet. Although this script is by no means a complete solution, it will create the necessary rules for the - basic lexics - comments, strings for example. Things not included in the wizard include regular expressions for any - language that uses them (PHP and XML are two languages that use them), and keyword-link styles. However, this script - should take some of the tedium out of the job of making an external stylesheet. Expect a much better version of this - script in version 1.2!

    - -
    - -

    3.4 Changing Styles

    - -

    One of the more powerful features of GeSHi is the ability to change the style of the output dynamically. Why be chained -to the boring styles the language authors make up? You can change almost every single aspect of highlighted code - and -can even say whether something is to be highlighted at all.

    - -

    If you’re confused about “styles”, you probably want to have a quick tutorial in them so you know what you can do with -them. Checkout the homepage of CSS at http://www.w3.org/Style/CSS.

    - -

    3.4.1 The Overall Styles

    - -

    The code outputted by GeSHi is either in a <div> or a <pre> (see the section entitled “The -Code Container”), and this can be styled.

    - -

    $geshi->set_overall_style('... styles ...'); -Where styles is a string containing valid CSS declarations. By default, these styles overwrite the current styles, but you can change this by adding a second parameter:

    - -

    $geshi->set_overall_style('color: blue;', true); -The default styles “shine through” wherever anything isn’t highlighted. Also, you can apply more advanced styles, like position: (fixed|relative) etc, because a <div>/<pre> is a block level element.

    - -
    - -
    Note:
    - -

    Remember that a <div> will by default have a larger font size than a <pre>, as discussed in the section “The Code Container”.

    - -
    - -

    3.4.2 Line Number Styles

    - -

    You may wish to refer to the section [Styling Line Numbers][1] before reading this section.

    - -

    As of version 1.0.2, the way line numbers are generated is different, so therefore the way that they are styled is -different. In particular, now you cannot set the background style of the fancy line numbers to be different from that -of the normal line numbers.

    - -

    Line number styles are set by using the method set_line_style:

    - -

    $geshi->set_line_style($style1, $style2);

    - -

    $style1 is the style of the line numbers by default, and $style2 is the style of the fancy line numbers.

    - -
    - -
    Caution:
    - -

    Things have changed since 1.0.1! This note is very important - please make sure you check this twice before - complaining about line numbers!

    - -

    Because of the way that ordered lists are done in HTML, there really isn’t normally a way to style the actual - numbers in the list. I’ve cheated somewhat with GeSHi - I’ve made it possible to use CSS to style the foreground of - the line numbers. So therefore, you can change the color, font size and type, and padding on them. If you want to - have a pretty background, you must use set_overall_style() to do this, and use set_code_style() - to style the actual code! This is explained in the section above: Styling Line Numbers.

    - -

    In addition, the styles for fancy line numbers is now the difference between the normal styles and the styles you want - to achieve. For example, in GeSHi prior to 1.0.2 you may have done this to style line numbers:

    - -

    $geshi->set_line_style('color: red; font-weight: bold;', 'color: green; font-weight: bold');

    - -

    Now you instead can do this:

    - -

    $geshi->set_line_style('color: red; font-weight: bold;', 'color: green;');

    - -

    The font-weight: bold; will automatically carry through to the fancy styles. This is actually a small - saving in code - but the difference may be confusing for anyone using 1.0.1 at first.

    - -
    - -

    3.4.3 Setting Keyword Styles

    - -

    Perhaps the most regular change you will make will be to the styles of a keyword set. In order to change the styles for -a particular set, you’ll have to know what the set is called first. Sets are numbered from 1 up. Typically, set 1 -contains keywords like if, while, do, for, switch etc, set 2 contains null, false, true etc, set 3 -contains function inbuilt into the language (echo, htmlspecialchars etc. in PHP) and set 4 contains data types and -similar variable modifiers: int, double, real, static etc. However these things are not fixed, and you should -check the language file to see what key you want. Having a familiarity with a language file is definately a plus for -using it.

    - -

    To change the styles for a keyword set, call the set_keyword_group_style() method:

    - -

    $geshi->set_keyword_group_style($group, $styles);

    - -

    Where $group is the group to change the styles for and $styles is a string containing the styles -to apply to that group.

    - -

    By default, the styles you pass overwrite the current styles. Add a boolean true after the styles you specify to -combine them with the current styles:

    - -

    $geshi->set_keyword_group_style(3, 'color: white;', true);

    - -

    3.4.4 Setting Comment Styles

    - -

    To change the styles for a comment group, call the set_comments_style() method:

    - -

    $geshi->set_comments_style($group, $styles);

    - -

    Where $group is either a number corresponding to a single-line comment, or the string 'MULTI' to -specify multiline comments:

    - -
    PHP code
    1
    -2
    $geshi->set_comments_style(1, 'font-style: italic;');
    -$geshi->set_comments_style('MULTI', 'display: hidden;');
    - -

    By default, the styles you pass overwrite the current styles. Add a boolean true after the styles you specify to -combine them with the current styles:

    - -

    $geshi->set_comments_style(1, 'font-weight: 100;', true);

    - -
    - -
    Note:
    - -

    In 1.0.7.22 a new kind of Comments called “COMMENT_REGEXP” has been added. Those are handled by setting single - line comment styles.

    - -
    - -

    3.4.5 Setting Other Styles

    - -

    GeSHi can highlight many other aspects of your source other than just keywords and comments. Strings, Numbers, Methods -and Brackets among other things can all also be highlighted. Here are the related methods:

    - -
    PHP code
    1
    -23
    -45
    -67
    -
    $geshi->set_escape_characters_style($styles[, $preserve_defaults]);
    -$geshi->set_symbols_style($styles[, $preserve_defaults]); 
    -$geshi->set_strings_style($styles[, $preserve_defaults]);$geshi->set_numbers_style($styles[, $preserve_defaults]);
    -$geshi->set_methods_style($key, $styles[, $preserve_defaults]);$geshi->set_regexps_style($key, $styles[, $preserve_defaults]);
    - -

    $styles is a string containing valid stylesheet declarations, while $preserve_defaults should be set -to true if you want your styles to be merged with the previous styles. In the case of set_methods_style(), -you should select a group to set the styles of, check the language files for the number used for each “object splitter”.

    - -

    Like this was possible for set_method_style a new parameter has been introduced for -set_symbols_style too which allows you to select the group of symbols for which you’d like to change your -style. $geshi->set_symbols_style($styles[, $preserve_defaults[, $group]]); If the third parameter is not -given, group 0 is assumed. Furthermore you should note that any changes to group 0 are also reflected in the bracket -style, i.e. a pass-through call to set_bracket_style is made.

    - -
    - -
    Note:
    - -

    Since GeSHi 1.0.8 multiple styles for strings and numbers are supported, though the API doesn’t provide full access yet.

    - -
    - -

    3.5 Case Sensitivity and Auto Casing

    - -

    Controlling the case of the outputted source is an easy job with GeSHi. You can control which keywords are converted in -case, and also control whether keywords are checked in a case sensitive manner.

    - -

    3.5.1 Auto-Caps/NoCaps

    - -

    Auto-Caps/NoCaps is a nifty little feature that capitalises or lowercases automatically certain lexics when they are -styled. I dabble in QuickBASIC, a dialect of BASIC which is well known for it’s capatalisation, and SQL is another -language well known for using caps for readability.

    - -

    To change what case lexics are rendered in, you call the set_case_keywords() method:

    - -

    $geshi->set_case_keywords($caps_modifier);

    - -

    The valid values to pass to this method are:

    - -
      -
    • GESHI_CAPS_NO_CHANGE - Don’t change the case of any lexics, leave as they are found
    • -
    • GESHI_CAPS_UPPER - Uppercase all lexics found
    • -
    • GESHI_CAPS_LOWER - Lowercase all lexics found
    • -
    - -
    - -
    Caution:
    - -

    When I say “lexic”, I mean “keywords”. Any keyword in any keyword array will be modified using this option! - This is one small area of inflexibility I hope to fix in 1.2.X.

    - -
    - -

    I suspect this will only be used to specify GESHI_CAPS_NO_CHANGE to turn off autocaps for languages like SQL -and BASIC variants, like so:

    - -
    PHP code
    1
    -2
    $geshi = new GeSHi($source, 'sql');
    -$geshi->set_case_keywords(GESHI_CAPS_NO_CHANGE); // don't want keywords capatalised
    - -

    All the same, it can be used for some interesting effects:

    - -
    PHP code
    1
    -23
    -4
    $geshi = new GeSHi($source, 'java');
    -// Anyone who's used java knows how picky it is about CapitalLetters...$geshi->set_case_keywords(GESHI_CAPS_LOWER);
    -// No *way* the source will look right now ;)
    - -

    3.5.2 Setting Case Sensitivity

    - -

    Some languages, like PHP, don’t mind what case function names and keywords are in, while others, like Java, depend on -such pickiness to maintain their bad reputations ;). In any event, you can use the set_case_sensitivity() -to change the case sensitiveness of a particular keyword group from the default:

    - -

    $geshi->set_case_sensitivity($key, $sensitivity);

    - -

    Where $key is the key of the group for which you wish to change case sensitivness for (see the language file -for that language), and $sensitivity is a boolean value - true if the keyword is case sensitive, and -false if not.

    - -

    3.6 Changing the Source, Language, Config Options

    - -

    What happens if you want to change the source to be highlighted on the fly, or the language. Or if you want to specify -any of those basic fields after you’ve created a GeSHi object? Well, that’s where these methods come in.

    - -

    3.6.1 Changing the Source Code

    - -

    To change the source code, you call the set_source() method:

    - -

    $geshi->set_source($newsource);

    - -

    Example:

    - -
    PHP code
    1
    -23
    -45
    -67
    -8
    $geshi = new GeSHi($source1, 'php');
    - // Method calls to specify various options...
    - $code1 = $geshi->parse_code();
    - $geshi->set_source($source2);
    -$code2 = $geshi->parse_code();
    - -

    3.6.2 Changing the Language

    - -

    What happens if you want to change the language used for highlighting? Just call set_language():

    - -

    $geshi->set_language('newlanguage');

    - -

    Example:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -10
    $geshi = new GeSHi($source, 'php');
    - $code = $geshi->parse_code();
    - // Highlight GeSHi's output
    -$geshi->set_source($code); 
    -$geshi->set_language('html4strict');$geshi->enable_classes(false);
    -echo $geshi->parse_code();
    - -

    As of GeSHi 1.0.5, you can use the method load_from_file() to load the source code and language from a file. -Simply pass this method a file name and it will attempt to load the source and set the language.

    - -

    $geshi->load_from_file($file_name, $lookup);

    - -

    $file_name is the file name to use, and $lookup is an optional parameter that contains a lookup -array to use for deciding which language to choose. You can use this to override GeSHi’s default lookup array, which -may not contain the extension of the file you’re after, or perhaps does have your extension but under a different -language. The lookup array is of the form:

    - -
    PHP code
    1
    -23
    -4
    array(
    -   'lang_name' => array('extension', 'extension', ...),   'lang_name' ...
    -);
    - -

    Also, you can use the method get_language_name_from_extension() if you need to convert a file extension -to a valid language name. This method will return the empty string if it could not find a match in the lookup, and -like load_from_file it accepts an optional second parameter that contains a lookup array.

    - -
    - -
    Note:
    - -

    Names are case-insensitive - they will be converted to lower case to match a language file however. So if you’re - making a language file, remember it should have a name in lower case.

    - -
    - -
    - -
    Note:
    - -

    What you pass to this method is the name of a language file, minus the .php extension. If you’re writing a plugin - for a particular application, it’s up to you to somehow convert user input into a valid language name.

    - -
    - -
    - -
    Note:
    - -

    Since GeSHi 1.0.8 this function does not reset language settings for an already loaded language. If you want - to highlight code in the same language with different settings add the optional - $force_reset parameter:

    - -

    $geshi->set_language('language', true);

    - -
    - -
    - -
    Caution:
    - -

    GeSHi include()s the language file, so be careful to make sure that users can’t pass some wierd - language name to include any old script! GeSHi tries to strip non-valid characters out of a language name, but - you should always do this your self anyway. In particular, language files are always lower-case, with either - alphanumeric characters, dashes or underscores in their name.

    - -

    At the very least, strip “/” characters out of a language name.

    - -
    - -

    3.6.3 Changing the Language Path

    - -

    What happens if all of a sudden you want to use language files from a different directory from the current -language file location? You call the set_language_path() method:

    - -

    $geshi->set_language_path($newpath);

    - -

    It doesn’t matter whether the path has a trailing slash after it or not - only that it points to a valid folder. -If it doesn’t, that’s your tough luck ;)

    - -

    3.6.4 Changing the Character Set

    - -
    - -
    Note:
    - -

    Although GeSHi itself does not require to know the exact charset of your source you - will need to set this option when processing sources where multi-byte characters can occur. - As of GeSHi 1.0.7.18 internally a rewrite of htmlspecialchars is used - due to a security flaw in that function that is unpatched in even the most recent PHP4 versions and in PHP5 < 5.2. - Although this does no longer explicitely require the charset it is required again - as of GeSHi 1.0.8 to properly handle multi-byte characters (e.g. after an escape char).

    - -
    - -
    - -
    Note:
    - -

    As of GeSHi 1.0.8 the default charset has been changed to UTF-8.

    - -
    - -

    As of version 1.0.3, you can use the method set_encoding() to specify the character set that your source -is in. Valid names are those names that are valid for the PHP mbstring library:

    - -

    $geshi->set_encoding($encoding);

    - -

    There is a table of valid strings for $encoding at the php.net manual linked to above. If you do not -specify an encoding, or specify an invalid encoding, the character set used is ISO-8859-1.

    - -

    3.7 Error Handling

    - -

    What happens if you try to highlight using a language that doesn’t exist? Or if GeSHi can’t read a required file? -The results you get may be confusing. You may check your code over and over, and never find anything wrong. GeSHi -provides ways of finding out if GeSHi itself found anything wrong with what you tried to do. After highlighting, -you can call the error() method:

    - -

    $geshi = new GeSHi('hi', 'thisLangIsNotSupported');

    - -

    echo $geshi->error(); // echoes error message

    - -

    The error message you will get will look like this:

    - -
    -

    GeSHi Error: GeSHi could not find the language thisLangIsNotSupported (using path geshi/) (code 2)

    -
    - -

    The error outputted will be the last error GeSHi came across, just like how mysql_error() works.

    - -

    3.8 Disabling styling of some Lexics

    - -

    One disadvantage of GeSHi is that for large source files using complex languages, it can be quite slow with -every option turned on. Although future releases will concentrate on the speed/resource side of highlighting, -you can gain speed by disabling some of the highlighting options. This is done by using a -series of set_*_highlighting methods:

    - -
    -
    set_keyword_group_highlighting($group, $flag):
    -
    Sets whether a particular $group of keywords is to be highlighted or not. Consult the necessary -language file(s) to see what $group should be for each group (typically a positive integer). -$flag is false if you want to disable highlighting of this group, and true if you want -to re-enable higlighting of this group. If you disable a keyword group then even if the keyword group has a -related URL one will not be generated for that keyword.
    - -
    set_comments_highlighting($group, $flag):
    -
    Sets whether a particular $group of comments is to be highlighted or not. Consult the necessary -language file(s) to see what $group should be for each group (typically a positive integer, or th -string 'MULTI' for multiline comments. $flag is false if you want to disable -highlighting of this group, and true if you want to re-enable highlighting of this group.
    - -
    set_regexps_highlighting($regexp, $flag):
    -
    Sets whether a particular $regexp is to be highlighted or not. Consult the necessary language file(s) -to see what $regexp should be for each regexp (typically a positive integer, or the string 'MULTI' -for multiline comments. $flag is false if you want to disable highlighting of this group, -and true if you want to re-enable highlighting of this group.
    -
    - -

    The following methods:

    - -
      -
    • set_escape_characters_highlighting($flag)
    • -
    • set_symbols_highlighting($flag)
    • -
    • set_strings_highlighting($flag)
    • -
    • set_numbers_highlighting($flag)
    • -
    • set_methods_highlighting($flag)
    • -
    - -

    Work on their respective lexics (e.g. set_methods_highlighting() will disable/enable highlighting of methods). -For each method, if $flag is false then the related lexics will not be highlighted at all (this -means no HTML will surround the lexic like usual, saving on time and bandwidth.

    - -

    In case all highlighting should be disabled or reenabled GeSHi provides two methods called disable_highlighting() -and enable_highlighting($flag). The optional paramter $flag has been added in 1.0.7.21 and specifies -the desired state, i.e. true (default) to turn all highlighting on, or false to turn all -highlighting off. Since 1.0.7.21 the method disnable_highlighting() has become deprecated.

    - -

    3.9 Setting the Tab Width

    - -

    If you’re using the <pre> header, tabs are handled automatically by your browser, and in general you can -count on good results. However, if you’re using the <div> header, you may want to specify a tab -width explicitly.

    - -

    Note that tabs created in this fashion won’t be like normal tabs - there won’t be “tab-stops” as such, instead -tabs will be replaced with the specified number of spaces - just like most editors do.

    - -

    To change the tab width, you call the set_tab_width() method:

    - -

    $geshi->set_tab_width($width);

    - -

    Where $width is the width in spaces that you’d like tabs to be.

    - -

    3.10 Using Strict Mode

    - -

    Some languages like to get tricky, and jump in and out of the file that they’re in. For example, the vast -majority of you reading this will have used a PHP file. And you know that PHP code is only executed if it’s -within delimiters like <?php and ?> (there are others of course…). So what happens if you do the -following in a php file?

    - -

    <img src="<?php echo rand(1, 100) ?>" />

    - -

    When using GeSHi without strict mode, or using a bad highlighter, you’ll end up with scrambled crap, -especially if you’re being slack about where you’re putting your quotes, you could end up with the rest -of your file as bright blue. Fortunately, you can tell GeSHi to be “strict” about just when it highlights -and when it does not, using the enable_strict_mode() method:

    - -

    $geshi->enable_strict_mode($mode);

    - -

    Where $mode is true or not specified to enable strict mode, or false to disable -strict mode if you’ve already turned it and don’t want it now.

    - -
    - -
    Note:
    - -

    As of GeSHi 1.0.8 there is a new way to tell GeSHi when to use Strict Mode - which is somewhat more intelligent than in previous releases. GeSHi now also - allows GESHI_MAYBE, GESHI_NEVER and GESHI_ALWAYS instead of true and false. - Basically GESHI_ALWAYS (true) always enables strict mode, - whereas GESHI_NEVER (false) completely disables strict mode. The new thing is - GESHI_MAYBE which enables strict mode if it finds any sequences of code - that look like strict block delimiters.

    - -

    By the way: That’s why this section had to be changed, as the new documentation - tool we now use, applies this feature and thus auto-detects when strict mode has to be used…

    - -
    - -

    3.11 Adding/Removing Keywords

    - -

    Lets say that you’re working on a large project, with many files, many classes and many functions. Perhaps also you -have the source code on the web and highlighted by GeSHi, perhaps as a front end to CVS, as a learning tool, something -to refer to, whatever. Well, why not highlight the names of the functions and classes your project uses, as well -as the standard functions and classes? Or perhaps you’re not interested in highlighting certain functions, and would -like to remove them? Or maybe you don’t mind if an entire function group goes west in the interest of speed? GeSHi -can handle all of this!

    - -

    3.11.1 Adding a Keyword

    - -

    If you want to add a keyword to an existing keyword group, you use the add_keyword method:

    - -

    $geshi->add_keyword($key, $word);

    - -

    Where $key is the index of the group of keywords you want to add this keyword to, and $word is -the word to add.

    - -

    This implies knowledge of the language file to know the correct index.

    - -

    3.11.2 Removing a Keyword

    - -

    Perhaps you want to remove a keyword from an existing group. Maybe you don’t use it and want to save yourself some time. Whatever the reason, you can remove it using the remove_keyword method:

    - -

    $geshi->remove_keyword($key, $word);

    - -

    Where $key is the index of the group of keywords that you want to remove this keyword from, and -$word is the word to remove.

    - -

    This implies knowledge of the language file to know the correct index - most of the time the keywords you’ll -want to remove will be in group 3, but this is not guaranteed and you should check the language file first.

    - -

    This function is silent - if the keyword is not in the group you specified, nothing awful will happen ;)

    - -

    3.11.3 Adding a Keyword Group

    - -

    Lets say for your big project you have several main functions and classes that you’d like highlighted. Why not -add them as their own group instead of having them highlighted the same way as other keywords? Then you can make -them stand out, and people can instantly see which functions and classes are user defined or inbuilt. Furthermore, -you could set the URL for this group to point at the API documentation of your project.

    - -

    You add a keyword group by using the add_keyword_group method:

    - -

    $geshi->add_keyword_group($key, $styles, $case_sensitive, $words);

    - -

    Where $key is the key that you want to use to refer to this group, $styles is the styles that -you want to use to style this group, $case_sensitive is true or false depending on whether you want -this group of keywords to be case sensitive or not and $words is an array of words (or a string) of which -words to add to this group. For example:

    - -

    $geshi->add_keyword_group(10, 'color: #600000;', false, array('myfunc_1', 'myfunc_2', 'myfunc_3'));

    - -

    Adds a keyword group referenced by index 10, of which all keywords in the group will be dark red, each keyword -can be in any case and which contains the keywords “myfunc_1”, “myfunc_2” and “myfunc_3”.

    - -

    After creating such a keyword group, you may call other GeSHi methods on it, just as you would for any other keyword group.

    - -
    - -
    Caution:
    - -

    If you specify a $key for which there is already a keyword group, the old keyword group will be - overwritten! Most language files don’t use numbers larger than 5, so I recommend you play it safe and use a number - like 10 or 42.

    - -
    - -

    3.11.4 Removing a Keyword Group

    - -

    Perhaps you really need speed? Why not just remove an entire keyword group? GeSHi won’t have to loop through -each keyword checking for its existance, saving much time. You remove a keyword group by using the -remove_keyword_group method:

    - -

    $geshi->remove_keyword_group($key);

    - -

    Where $key is the key of the group you wish to remove. This implies knowleged of the language file.

    - -

    3.12 Headers and Footers for Your Code

    - -

    So you want to add some special information to the highlighted source? GeSHi can do that too! You can specify headers -and footers for your code, style them, and insert information from the highlighted source into your header or footer.

    - -

    3.12.1 Keyword Substitution

    - -

    In your header and footer, you can put special keywords that will be replaced with actual configuration values for -this GeSHi object. The keywords you can use are:

    - -
      -
    • <TIME> or {TIME}: Is replaced by the time it took for the parse_code() method - i.e., -how long it took for your code to be highlighted. The time is returned to three decimal places.
    • -
    • <LANGUAGE> or {LANGUAGE}: Is replaced by a nice, friendly version of the language name used to -highlight this code.
    • -
    • <SPEED> or {SPEED}: Is replaced by the speed at which your source has been processed.
    • -
    • <VERSION> or {VERSION}: The GeSHi version used to highlight the code.
    • -
    - -

    3.12.2 Setting Header Content

    - -

    The header for your code is a <div>, which is inside the containing block. Therefore, it is affected by -the method set_overall_style, and should contain the sort of HTML that belongs in a <div>. -You may use any HTML you like, and format it as an HTML document. You should use valid HTML - convert to entities -any quotemarks or angle brackets you want displayed. You set the header content using the method -set_header_content():

    - -

    $geshi->set_header_content($content);

    - -

    Where $content is the HTML you want to use for the header.

    - - - -

    The footer for your code is a <div>, which is inside the containing block. Therefore, it is affected by -the method set_overall_style, and should contain the sort of HTML that belongs in a <div>. -You may use any HTML you like, and format it as an HTML document. You should use valid HTML - convert to entities -any quotemarks or angle brackets you want displayed. You set the footer content using the method -set_footer_content():

    - -

    $geshi->set_footer_content($content);

    - -

    Where $content is the HTML you want to use for the footer.

    - -

    3.12.4 Styling Header Content

    - -

    You can apply styles to the header content you have set with the set_header_content_style:

    - -

    $geshi->set_header_content_style($styles);

    - -

    Where $styles is the stylesheet declarations you want to use to style the header content.

    - - - -

    You can apply styles to the footer content you have set with the set_footer_content_style:

    - -

    $geshi->set_footer_content_style($styles);

    - -

    Where $styles is the stylesheet declarations you want to use to style the footer content.

    - -

    3.13 Keyword URLs

    - -

    As of version 1.0.2, GeSHi allows you to specify a URL for keyword groups. This URL is used by GeSHi to convert -the keywords in that group into URLs to appropriate documentation. And using add_keyword_group you -can add functions and classes from your own projects and use the URL functionality to provide a link to your -own API documentation.

    - -

    3.13.1 Setting a URL for a Keyword Group

    - -

    To set the URL to be used for a keyword group, you use the set_url_for_keyword_group() method:

    - -

    $geshi->set_url_for_keyword_group($group, $url);

    - -

    Where $group is the keyword group you want to assign the URL for, and $url is the URL for -this group of keywords.

    - -

    You may be wondering how to make each keyword in the group point to the correct URL. You do this by putting -{FNAME} in the URL at the correct place. For example, PHP makes it easy by linking www.php.net/function-name -to the documentation for that function, so the URL used is http://www.php.net/{FNAME}.

    - -

    Of course, when you get to a language like Java, that puts its class documentation in related folders, it gets a -little trickier to work out an appropriate URL (see the Java language file!). I hope to provide some kind of -redirection service at the GeSHi website in the future.

    - -
    - -
    Note:
    - -

    As of Version 1.0.7.21 there have been added two more symbols you can use to link to functions. {FNAMEL} - will generate the lowercase version of the keyword, {FNAMEU} will generate the uppercase version. {FNAME} - will provide the keyword as specified in the language file. Use one of these more specific placeholders - if possible, as they result in less overhead while linking for case insensitive languages.

    - -
    - -

    3.13.2 Disabling a URL for a Keyword Group

    - -

    It’s easy to disable a URL for a keyword group: Simply use the method set_url_for_keyword_group() to pass -an empty string as the URL:

    - -

    $geshi->set_url_for_keyword_group($group, '');

    - -

    3.13.3 Disabling all URLs for Keywords

    - -

    As of GeSHi 1.0.7.18, you can disable all URL linking for keywords:

    - -

    $geshi->enable_keyword_links(false);

    - - - -

    You can also style the function links. You can style their default status, hovered, active and visited status. -All of this is controlled by one method, set_link_styles():

    - -

    $geshi->set_link_styles($mode, $styles);

    - -

    Where $mode is one of four values:

    - -
      -
    • GESHI_LINK: The default style of the links.
    • -
    • GESHI_HOVER: The style of the links when they have focus (the mouse is hovering over them).
    • -
    • GESHI_ACTIVE: The style of the links when they are being clicked.
    • -
    • GESHI_VISITED: The style of links that the user has already visited.
    • -
    - -

    And $styles is the stylesheet declarations to apply to the links.

    - -
    - -
    Note:
    - -

    The names GESHI_LINK, GESHI_HOVER … are constants. Don’t put them in quotes!

    - -
    - -

    3.13.5 Setting the Link Target

    - -

    Perhaps you want to set the target of link attributes, so the manual pages open in a new window? Use the -set_link_target() method:

    - -

    $geshi->set_link_target($target, $styles);

    - -

    Where $target is any valid (X)HTML target value - _blank or _top for example.

    - -

    3.14 Using Contextual Importance

    - -
    - -
    Caution:
    - -

    This functionality is not only buggy, but is proving very hard to implement in 1.1.X. Therefore, this - functionality may well be removed in 1.2.0. You are hereby warned!

    - -
    - -

    This feature allows you to mark a part of your source as important. But as the -implementation its use is deprecated and you should consider using -the “Highlight Lines Extra” feature described below.

    - -

    3.15 Highlighting Special Lines “Extra”

    - -

    An alternative (and more stable) method of highlighting code that is important -is to use extra highlighting by line. Although you may not know what line numbers -contain the important lines, if you do this method is a much more flexible way of -making important lines stand out.

    - -

    3.15.1 Specifying the Lines to Highlight Extra

    - -

    To specify which lines to highlight extra, you pass an array containing the line numbers to highlight_lines_extra():

    - -

    $geshi->highlight_lines_extra($array);

    - -

    The array could be in the form array(2, 3, 4, 7, 12, 344, 4242), made from a DB query, generated -from looking through the source for certain important things and working out what line those things are… -However you get the line numbers, the array should simply be an array of integers.

    - -

    Here’s an example, using the same source as before:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -
    //
    -// Here we go again! This time we'll simply highlight the 8th line//
    -$source = 'public int[][] product ( n, m ){
    -  int [][] ans = new int[n][m];  for ( int i = 0; i < n; i++ )
    -  {    for ( int j = 0; i < m; j++ )
    -    {      ans[i][j] = i * j;
    -    }  }
    -  return ans;}';
    - $geshi = new GeSHi($source, 'java');
    - $geshi->highlight_lines_extra(array(8));
    - echo $geshi->parse_code();
    - -

    Which produces:

    - -
    Java code
    1
    -23
    -45
    -67
    -89
    -1011
    -12
    public int[][] product ( n, m )
    -{  int [][] ans = new int[n][m];
    -  for ( int i = 0; i < n; i++ )  {
    -    for ( int j = 0; i < m; j++ )    {
    -      ans[i][j] = i * j;    }
    -  }  return ans;
    -}
    - -

    What’s more, as you can see the code on a highlighted line is still actually highlighted itself.

    - -

    3.15.2 Styles for the Highlighted Lines

    - -

    Again as with contextual importance, you’re not chained to the yellow theme that is the default. You can -use the set_highlight_lines_extra_style method:

    - -

    $geshi->set_highlight_lines_extra_style($styles);

    - -

    Where $styles is the stylesheet declarations that you want to apply to highlighted lines.

    - -

    3.16 Adding IDs to Each Line

    - -

    Perhaps you’re a javascript junkie? GeSHi provides a way to give each line an ID so you can access that line with -javascript, or perhaps just by plain CSS (though if you want to access lines by CSS you should use the method -in the previous section). To enable IDs you call the enable_ids() method:

    - -

    $geshi->enable_ids($flag);

    - -

    Where $flag is true or not present to enable IDs, and false to disable them again if you need.

    - -

    The ID generated is in the form {overall-css-id}-{line-number}. So for example, if you set the overall CSS id to -be “mycode”, then the IDs for each line would by “mycode-1”, “mycode-2” etc. If there is no CSS ID set, then one is -made up in the form geshi-[4 random characters], but this is not so useful for if you want to do javascript manipulation.

    - -

    3.17 Getting the Time of Styling

    - -

    Once you’ve called parse_code(), you can get the time it took to run the highlighting by calling the -get_time() method:

    - -
    PHP code
    1
    -23
    -45
    -67
    -
    $geshi = new GeSHi($source, $language, $path);
    - $code = mysql_real_escape_string($geshi->parse_code());
    -$time = $geshi->get_time(); 
    -// do something with itmysql_query("INSERT INTO code VALUES ('$code', '$time')");
    - -

    4 Language Files

    - -

    So now you know what features GeSHi offers, and perhaps you’ve even meddled with the source. Or perhaps -you’d like a language file for language X but it doesn’t seem to be supported? Rubbish! GeSHi will highlight -anything, what do you think I coded this for? ^_^ You’ll just have to learn how to make a language file -yourself. And I promise it’s not too hard - and if you’re here you’re in the right place!

    - -

    4.1 An Example Language File

    - -

    Let’s begin by looking at an example language file - the language file for the first language ever supported, -PHP:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -2223
    -2425
    -2627
    -2829
    -3031
    -3233
    -3435
    -3637
    -3839
    -4041
    -4243
    -4445
    -4647
    -4849
    -5051
    -5253
    -5455
    -5657
    -5859
    -6061
    -6263
    -6465
    -6667
    -6869
    -7071
    -7273
    -7475
    -7677
    -7879
    -8081
    -8283
    -8485
    -8687
    -8889
    -9091
    -9293
    -9495
    -9697
    -9899
    -100101
    -102103
    -104105
    -106107
    -108109
    -110111
    -112113
    -114115
    -116117
    -118119
    -120121
    -122123
    -124125
    -126127
    -128129
    -130131
    -132133
    -134135
    -136137
    -138139
    -140141
    -142143
    -144145
    -146147
    -148149
    -150151
    -152153
    -154155
    -156157
    -158159
    -160161
    -162163
    -164165
    -166167
    -168169
    -170171
    -172173
    -174175
    -176177
    -178179
    -180181
    -182183
    -184185
    -186187
    -188189
    -190191
    -192193
    -194195
    -196197
    -198199
    -200201
    -202203
    -204205
    -206207
    -208209
    -210211
    -212213
    -214215
    -216217
    -218219
    -220221
    -222223
    -224225
    -226227
    -228229
    -230231
    -232233
    -234235
    -236237
    -238239
    -240241
    -242243
    -244245
    -246247
    -248249
    -250251
    -252253
    -254255
    -256257
    -258259
    -260261
    -262263
    -264265
    -266267
    -268269
    -270271
    -272273
    -274275
    -276277
    -278279
    -280281
    -282283
    -284285
    -286287
    -288289
    -290291
    -292293
    -294295
    -296297
    -298299
    -300301
    -302303
    -304305
    -306307
    -308309
    -310311
    -312313
    -314315
    -316317
    -318319
    -320321
    -322323
    -324325
    -326327
    -328329
    -330331
    -332333
    -334335
    -336337
    -338339
    -340341
    -342343
    -344345
    -346347
    -348349
    -350351
    -352353
    -354355
    -356357
    -358359
    -360361
    -362363
    -364365
    -366367
    -368369
    -370371
    -372373
    -374375
    -376377
    -378379
    -380381
    -382383
    -384385
    -386387
    -388389
    -390391
    -392393
    -394395
    -396397
    -398399
    -400401
    -402403
    -404405
    -406407
    -408409
    -410411
    -412413
    -414415
    -416417
    -418419
    -420421
    -422423
    -424425
    -426427
    -428429
    -430431
    -432433
    -434435
    -436437
    -438439
    -440441
    -442443
    -444445
    -446447
    -448449
    -450451
    -452453
    -454455
    -456457
    -458459
    -460461
    -462463
    -464465
    -466467
    -468469
    -470471
    -472473
    -474475
    -476477
    -478479
    -480481
    -482483
    -484485
    -486487
    -488489
    -490491
    -492493
    -494495
    -496497
    -498499
    -500501
    -502503
    -504505
    -506507
    -508509
    -510511
    -512513
    -514515
    -516517
    -518519
    -520521
    -522523
    -524525
    -526527
    -528529
    -530531
    -532533
    -534535
    -536537
    -538539
    -540541
    -542543
    -544545
    -546547
    -548549
    -550551
    -552553
    -554555
    -556557
    -558559
    -560561
    -562563
    -564565
    -566567
    -568569
    -570571
    -572573
    -574575
    -576577
    -578579
    -580581
    -582583
    -584585
    -586587
    -588589
    -590591
    -592593
    -594595
    -596597
    -598599
    -600601
    -602603
    -604605
    -606607
    -608609
    -610611
    -612613
    -614615
    -616617
    -618619
    -620621
    -622623
    -624625
    -626627
    -628629
    -630631
    -632633
    -634635
    -636637
    -638639
    -640641
    -642643
    -644645
    -646647
    -648649
    -650651
    -652653
    -654655
    -656657
    -658659
    -660661
    -662663
    -664665
    -666667
    -668669
    -670671
    -672673
    -674675
    -676677
    -678679
    -680681
    -682683
    -684685
    -686687
    -688689
    -690691
    -692693
    -694695
    -696697
    -698699
    -700701
    -702703
    -704705
    -706707
    -708709
    -710711
    -712713
    -714715
    -716717
    -718719
    -720721
    -722723
    -724725
    -726727
    -728729
    -730731
    -732733
    -734735
    -736737
    -738739
    -740741
    -742743
    -744745
    -746747
    -748749
    -750751
    -752753
    -754755
    -756757
    -758759
    -760761
    -762763
    -764765
    -766767
    -768769
    -770771
    -772773
    -774775
    -776777
    -778779
    -780781
    -782783
    -784785
    -786787
    -788789
    -790791
    -792793
    -794795
    -796797
    -798799
    -800801
    -802803
    -804805
    -806807
    -808809
    -810811
    -812813
    -814815
    -816817
    -818819
    -820821
    -822823
    -824825
    -826827
    -828829
    -830831
    -832833
    -834835
    -836837
    -838839
    -840841
    -842843
    -844845
    -846847
    -848849
    -850851
    -852853
    -854855
    -856857
    -858859
    -860861
    -862863
    -864865
    -866867
    -868869
    -870871
    -872873
    -874875
    -876877
    -878879
    -880881
    -882883
    -884885
    -886887
    -888889
    -890891
    -892893
    -894895
    -896897
    -898899
    -900901
    -902903
    -904905
    -906907
    -908909
    -910911
    -912913
    -914915
    -916917
    -918919
    -920921
    -922923
    -924925
    -926927
    -928929
    -930931
    -932933
    -934935
    -936937
    -938939
    -940941
    -942943
    -944945
    -946947
    -948949
    -950951
    -952953
    -954955
    -956957
    -958959
    -960961
    -962963
    -964965
    -966967
    -968969
    -970971
    -972973
    -974975
    -976977
    -978979
    -980981
    -982983
    -984985
    -986987
    -988989
    -990991
    -992993
    -994995
    -996997
    -998999
    -10001001
    -10021003
    -10041005
    -10061007
    -10081009
    -10101011
    -10121013
    -10141015
    -10161017
    -10181019
    -10201021
    -10221023
    -10241025
    -10261027
    -10281029
    -10301031
    -10321033
    -10341035
    -10361037
    -10381039
    -10401041
    -10421043
    -10441045
    -10461047
    -10481049
    -10501051
    -10521053
    -10541055
    -10561057
    -10581059
    -10601061
    -10621063
    -10641065
    -10661067
    -10681069
    -10701071
    -10721073
    -10741075
    -10761077
    -10781079
    -10801081
    -10821083
    -10841085
    -10861087
    -10881089
    -10901091
    -10921093
    -10941095
    -10961097
    -10981099
    -11001101
    -11021103
    -11041105
    -11061107
    -11081109
    -11101111
    -11121113
    -11141115
    -11161117
    -
    <?php
    -/************************************************************************************* * php.php
    - * -------- * Author: Nigel McNie (nigel@geshi.org)
    - * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/) * Release Version: 1.0.8.12
    - * Date Started: 2004/06/20 *
    - * PHP language file for GeSHi. *
    - * CHANGES * -------
    - * 2008/05/23 (1.0.7.22) *  -  Added description of extra language features (SF#1970248)
    - * 2004/11/25 (1.0.3) *  -  Added support for multiple object splitters
    - *  -  Fixed &new problem * 2004/10/27 (1.0.2)
    - *  -  Added URL support *  -  Added extra constants
    - * 2004/08/05 (1.0.1) *  -  Added support for symbols
    - * 2004/07/14 (1.0.0) *  -  First Release
    - * * TODO (updated 2004/07/14)
    - * ------------------------- * * Make sure the last few function I may have missed
    - *   (like eval()) are included for highlighting * * Split to several files - php4, php5 etc
    - * *************************************************************************************
    - * *     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' => 'PHP',    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
    -    'COMMENT_MULTI' => array('/*' => '*/'),    'COMMENT_REGEXP' => array(
    -        //Heredoc and Nowdoc syntax        3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+?)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
    -        // phpdoc comments        4 => '#/\*\*(?![\*\/]).*\*/#sU',
    -        // Advanced # handling        2 => "/#.*?(?:(?=\?\>)|^)/smi"
    -        ),    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
    -    'QUOTEMARKS' => array('"'),    'ESCAPE_CHAR' => '',
    -    'ESCAPE_REGEXP' => array(        //Simple Single Char Escapes
    -        1 => "#\\\\[nfrtv\$\"\n\\\\]#i",        //Hexadecimal Char Specs
    -        2 => "#\\\\x[\da-fA-F]{1,2}#i",        //Octal Char Specs
    -        3 => "#\\\\[0-7]{1,3}#",        //String Parsing of Variable Names
    -        4 => "#\\$[a-z0-9_]+(?:\\[[a-z0-9_]+\\]|->[a-z0-9_]+)?|(?:\\{\\$|\\$\\{)[a-z0-9_]+(?:\\[('?)[a-z0-9_]*\\1\\]|->[a-z0-9_]+)*\\}#i",        //Experimental extension supporting cascaded {${$var}} syntax
    -        5 => "#\$[a-z0-9_]+(?:\[[a-z0-9_]+\]|->[a-z0-9_]+)?|(?:\{\$|\$\{)[a-z0-9_]+(?:\[('?)[a-z0-9_]*\\1\]|->[a-z0-9_]+)*\}|\{\$(?R)\}#i",        //Format String support in ""-Strings
    -        6 => "#%(?:%|(?:\d+\\\\\\\$)?\\+?(?:\x20|0|'.)?-?(?:\d+|\\*)?(?:\.\d+)?[bcdefFosuxX])#"        ),
    -    'HARDQUOTE' => array("'", "'"),    'HARDESCAPE' => array("'", "\\"),
    -    'HARDCHAR' => "\\",    'NUMBERS' =>
    -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |        GESHI_NUMBER_FLT_SCI_ZERO,
    -    'KEYWORDS' => array(        1 => array(
    -            'as','break','case','continue','default','do','else','elseif',            'endfor','endforeach','endif','endswitch','endwhile','for',
    -            'foreach','if','include','include_once','require','require_once',            'return','switch','throw','while',
    -             'echo','print'
    -            ),        2 => array(
    -            '&amp;new','&lt;/script&gt;','&lt;?php','&lt;script language',            'abstract','class','const','declare','extends','function','global',
    -            'interface','namespace','new','private','protected','public','self',            'use','var'
    -            ),        3 => array(
    -            'abs','acos','acosh','addcslashes','addslashes','aggregate',            'aggregate_methods','aggregate_methods_by_list',
    -            'aggregate_methods_by_regexp','aggregate_properties',            'aggregate_properties_by_list','aggregate_properties_by_regexp',
    -            'aggregation_info','apache_child_terminate','apache_get_modules',            'apache_get_version','apache_getenv','apache_lookup_uri',
    -            'apache_note','apache_request_headers','apache_response_headers',            'apache_setenv','array','array_change_key_case','array_chunk',
    -            'array_combine','array_count_values','array_diff',            'array_diff_assoc','array_diff_key','array_diff_uassoc',
    -            'array_diff_ukey','array_fill','array_fill_keys','array_filter',            'array_flip','array_intersect','array_intersect_assoc',
    -            'array_intersect_key','array_intersect_uassoc',            'array_intersect_ukey','array_key_exists','array_keys','array_map',
    -            'array_merge','array_merge_recursive','array_multisort','array_pad',            'array_pop','array_product','array_push','array_rand',
    -            'array_reduce','array_reverse','array_search','array_shift',            'array_slice','array_splice','array_sum','array_udiff',
    -            'array_udiff_assoc','array_udiff_uassoc','array_uintersect',            'array_uintersect_assoc','array_uintersect_uassoc','array_unique',
    -            'array_unshift','array_values','array_walk','array_walk_recursive',            'arsort','asin','asinh','asort','assert','assert_options','atan',
    -            'atan2','atanh','base_convert','base64_decode','base64_encode',            'basename','bcadd','bccomp','bcdiv','bcmod','bcmul',
    -            'bcompiler_load','bcompiler_load_exe','bcompiler_parse_class',            'bcompiler_read','bcompiler_write_class','bcompiler_write_constant',
    -            'bcompiler_write_exe_footer','bcompiler_write_file',            'bcompiler_write_footer','bcompiler_write_function',
    -            'bcompiler_write_functions_from_file','bcompiler_write_header',            'bcompiler_write_included_filename','bcpow','bcpowmod','bcscale',
    -            'bcsqrt','bcsub','bin2hex','bindec','bindtextdomain',            'bind_textdomain_codeset','bitset_empty','bitset_equal',
    -            'bitset_excl','bitset_fill','bitset_from_array','bitset_from_hash',            'bitset_from_string','bitset_in','bitset_incl',
    -            'bitset_intersection','bitset_invert','bitset_is_empty',            'bitset_subset','bitset_to_array','bitset_to_hash',
    -            'bitset_to_string','bitset_union','blenc_encrypt','bzclose',            'bzcompress','bzdecompress','bzerrno','bzerror','bzerrstr',
    -            'bzflush','bzopen','bzread','bzwrite','cal_days_in_month',            'cal_from_jd','cal_info','cal_to_jd','call_user_func',
    -            'call_user_func_array','call_user_method','call_user_method_array',            'ceil','chdir','checkdate','checkdnsrr','chgrp','chmod','chop',
    -            'chown','chr','chunk_split','class_exists','class_implements',            'class_parents','classkit_aggregate_methods',
    -            'classkit_doc_comments','classkit_import','classkit_method_add',            'classkit_method_copy','classkit_method_redefine',
    -            'classkit_method_remove','classkit_method_rename','clearstatcache',            'closedir','closelog','com_create_guid','com_event_sink',
    -            'com_get_active_object','com_load_typelib','com_message_pump',            'com_print_typeinfo','compact','confirm_phpdoc_compiled',
    -            'connection_aborted','connection_status','constant',            'convert_cyr_string','convert_uudecode','convert_uuencode','copy',
    -            'cos','cosh','count','count_chars','cpdf_add_annotation',            'cpdf_add_outline','cpdf_arc','cpdf_begin_text','cpdf_circle',
    -            'cpdf_clip','cpdf_close','cpdf_closepath',            'cpdf_closepath_fill_stroke','cpdf_closepath_stroke',
    -            'cpdf_continue_text','cpdf_curveto','cpdf_end_text','cpdf_fill',            'cpdf_fill_stroke','cpdf_finalize','cpdf_finalize_page',
    -            'cpdf_global_set_document_limits','cpdf_import_jpeg','cpdf_lineto',            'cpdf_moveto','cpdf_newpath','cpdf_open','cpdf_output_buffer',
    -            'cpdf_page_init','cpdf_rect','cpdf_restore','cpdf_rlineto',            'cpdf_rmoveto','cpdf_rotate','cpdf_rotate_text','cpdf_save',
    -            'cpdf_save_to_file','cpdf_scale','cpdf_set_action_url',            'cpdf_set_char_spacing','cpdf_set_creator','cpdf_set_current_page',
    -            'cpdf_set_font','cpdf_set_font_directories',            'cpdf_set_font_map_file','cpdf_set_horiz_scaling',
    -            'cpdf_set_keywords','cpdf_set_leading','cpdf_set_page_animation',            'cpdf_set_subject','cpdf_set_text_matrix','cpdf_set_text_pos',
    -            'cpdf_set_text_rendering','cpdf_set_text_rise','cpdf_set_title',            'cpdf_set_viewer_preferences','cpdf_set_word_spacing',
    -            'cpdf_setdash','cpdf_setflat','cpdf_setgray','cpdf_setgray_fill',            'cpdf_setgray_stroke','cpdf_setlinecap','cpdf_setlinejoin',
    -            'cpdf_setlinewidth','cpdf_setmiterlimit','cpdf_setrgbcolor',            'cpdf_setrgbcolor_fill','cpdf_setrgbcolor_stroke','cpdf_show',
    -            'cpdf_show_xy','cpdf_stringwidth','cpdf_stroke','cpdf_text',            'cpdf_translate','crack_check','crack_closedict',
    -            'crack_getlastmessage','crack_opendict','crc32','create_function',            'crypt','ctype_alnum','ctype_alpha','ctype_cntrl','ctype_digit',
    -            'ctype_graph','ctype_lower','ctype_print','ctype_punct',            'ctype_space','ctype_upper','ctype_xdigit','curl_close',
    -            'curl_copy_handle','curl_errno','curl_error','curl_exec',            'curl_getinfo','curl_init','curl_multi_add_handle',
    -            'curl_multi_close','curl_multi_exec','curl_multi_getcontent',            'curl_multi_info_read','curl_multi_init','curl_multi_remove_handle',
    -            'curl_multi_select','curl_setopt','curl_setopt_array',            'curl_version','current','cvsclient_connect','cvsclient_log',
    -            'cvsclient_login','cvsclient_retrieve','date','date_create',            'date_date_set','date_default_timezone_get',
    -            'date_default_timezone_set','date_format','date_isodate_set',            'date_modify','date_offset_get','date_parse','date_sun_info',
    -            'date_sunrise','date_sunset','date_time_set','date_timezone_get',            'date_timezone_set','db_id_list','dba_close','dba_delete',
    -            'dba_exists','dba_fetch','dba_firstkey','dba_handlers','dba_insert',            'dba_key_split','dba_list','dba_nextkey','dba_open','dba_optimize',
    -            'dba_popen','dba_replace','dba_sync','dbase_add_record',            'dbase_close','dbase_create','dbase_delete_record',
    -            'dbase_get_header_info','dbase_get_record',            'dbase_get_record_with_names','dbase_numfields','dbase_numrecords',
    -            'dbase_open','dbase_pack','dbase_replace_record',            'dbg_get_all_contexts','dbg_get_all_module_names',
    -            'dbg_get_all_source_lines','dbg_get_context_name',            'dbg_get_module_name','dbg_get_profiler_results',
    -            'dbg_get_source_context','dblist','dbmclose','dbmdelete',            'dbmexists','dbmfetch','dbmfirstkey','dbminsert','dbmnextkey',
    -            'dbmopen','dbmreplace','dbx_close','dbx_compare','dbx_connect',            'dbx_error','dbx_escape_string','dbx_fetch_row','dbx_query',
    -            'dbx_sort','dcgettext','dcngettext','deaggregate','debug_backtrace',            'debug_zval_dump','debugbreak','decbin','dechex','decoct','define',
    -            'defined','define_syslog_variables','deg2rad','dgettext','die',            'dio_close','dio_open','dio_read','dio_seek','dio_stat','dio_write',
    -            'dir','dirname','disk_free_space','disk_total_space',            'diskfreespace','dl','dngettext','docblock_token_name',
    -            'docblock_tokenize','dom_import_simplexml','domxml_add_root',            'domxml_attributes','domxml_children','domxml_doc_add_root',
    -            'domxml_doc_document_element','domxml_doc_get_element_by_id',            'domxml_doc_get_elements_by_tagname','domxml_doc_get_root',
    -            'domxml_doc_set_root','domxml_doc_validate','domxml_doc_xinclude',            'domxml_dump_mem','domxml_dump_mem_file','domxml_dump_node',
    -            'domxml_dumpmem','domxml_elem_get_attribute',            'domxml_elem_set_attribute','domxml_get_attribute','domxml_getattr',
    -            'domxml_html_dump_mem','domxml_new_child','domxml_new_doc',            'domxml_new_xmldoc','domxml_node','domxml_node_add_namespace',
    -            'domxml_node_attributes','domxml_node_children',            'domxml_node_get_content','domxml_node_has_attributes',
    -            'domxml_node_new_child','domxml_node_set_content',            'domxml_node_set_namespace','domxml_node_unlink_node',
    -            'domxml_open_file','domxml_open_mem','domxml_parser',            'domxml_parser_add_chunk','domxml_parser_cdata_section',
    -            'domxml_parser_characters','domxml_parser_comment',            'domxml_parser_end','domxml_parser_end_document',
    -            'domxml_parser_end_element','domxml_parser_entity_reference',            'domxml_parser_get_document','domxml_parser_namespace_decl',
    -            'domxml_parser_processing_instruction',            'domxml_parser_start_document','domxml_parser_start_element',
    -            'domxml_root','domxml_set_attribute','domxml_setattr',            'domxml_substitute_entities_default','domxml_unlink_node',
    -            'domxml_version','domxml_xmltree','doubleval','each','easter_date',            'easter_days','empty','end','ereg','ereg_replace','eregi',
    -            'eregi_replace','error_get_last','error_log','error_reporting',            'escapeshellarg','escapeshellcmd','eval','event_deschedule',
    -            'event_dispatch','event_free','event_handle_signal',            'event_have_events','event_init','event_new','event_pending',
    -            'event_priority_set','event_schedule','event_set','event_timeout',            'exec','exif_imagetype','exif_read_data','exif_tagname',
    -            'exif_thumbnail','exit','exp','explode','expm1','extension_loaded',            'extract','ezmlm_hash','fbird_add_user','fbird_affected_rows',
    -            'fbird_backup','fbird_blob_add','fbird_blob_cancel',            'fbird_blob_close','fbird_blob_create','fbird_blob_echo',
    -            'fbird_blob_get','fbird_blob_import','fbird_blob_info',            'fbird_blob_open','fbird_close','fbird_commit','fbird_commit_ret',
    -            'fbird_connect','fbird_db_info','fbird_delete_user','fbird_drop_db',            'fbird_errcode','fbird_errmsg','fbird_execute','fbird_fetch_assoc',
    -            'fbird_fetch_object','fbird_fetch_row','fbird_field_info',            'fbird_free_event_handler','fbird_free_query','fbird_free_result',
    -            'fbird_gen_id','fbird_maintain_db','fbird_modify_user',            'fbird_name_result','fbird_num_fields','fbird_num_params',
    -            'fbird_param_info','fbird_pconnect','fbird_prepare','fbird_query',            'fbird_restore','fbird_rollback','fbird_rollback_ret',
    -            'fbird_server_info','fbird_service_attach','fbird_service_detach',            'fbird_set_event_handler','fbird_trans','fbird_wait_event','fclose',
    -            'fdf_add_doc_javascript','fdf_add_template','fdf_close',            'fdf_create','fdf_enum_values','fdf_errno','fdf_error','fdf_get_ap',
    -            'fdf_get_attachment','fdf_get_encoding','fdf_get_file',            'fdf_get_flags','fdf_get_opt','fdf_get_status','fdf_get_value',
    -            'fdf_get_version','fdf_header','fdf_next_field_name','fdf_open',            'fdf_open_string','fdf_remove_item','fdf_save','fdf_save_string',
    -            'fdf_set_ap','fdf_set_encoding','fdf_set_file','fdf_set_flags',            'fdf_set_javascript_action','fdf_set_on_import_javascript',
    -            'fdf_set_opt','fdf_set_status','fdf_set_submit_form_action',            'fdf_set_target_frame','fdf_set_value','fdf_set_version','feof',
    -            'fflush','fgetc','fgetcsv','fgets','fgetss','file','file_exists',            'file_get_contents','file_put_contents','fileatime','filectime',
    -            'filegroup','fileinode','filemtime','fileowner','fileperms',            'filepro','filepro_fieldcount','filepro_fieldname',
    -            'filepro_fieldtype','filepro_fieldwidth','filepro_retrieve',            'filepro_rowcount','filesize','filetype','filter_has_var',
    -            'filter_id','filter_input','filter_input_array','filter_list',            'filter_var','filter_var_array','finfo_buffer','finfo_close',
    -            'finfo_file','finfo_open','finfo_set_flags','floatval','flock',            'floor','flush','fmod','fnmatch','fopen','fpassthru','fprintf',
    -            'fputcsv','fputs','fread','frenchtojd','fribidi_charset_info',            'fribidi_get_charsets','fribidi_log2vis','fscanf','fseek',
    -            'fsockopen','fstat','ftell','ftok','ftp_alloc','ftp_cdup',            'ftp_chdir','ftp_chmod','ftp_close','ftp_connect','ftp_delete',
    -            'ftp_exec','ftp_fget','ftp_fput','ftp_get','ftp_get_option',            'ftp_login','ftp_mdtm','ftp_mkdir','ftp_nb_continue','ftp_nb_fget',
    -            'ftp_nb_fput','ftp_nb_get','ftp_nb_put','ftp_nlist','ftp_pasv',            'ftp_put','ftp_pwd','ftp_quit','ftp_raw','ftp_rawlist','ftp_rename',
    -            'ftp_rmdir','ftp_set_option','ftp_site','ftp_size',            'ftp_ssl_connect','ftp_systype','ftruncate','function_exists',
    -            'func_get_arg','func_get_args','func_num_args','fwrite','gd_info',            'getallheaders','getcwd','getdate','getenv','gethostbyaddr',
    -            'gethostbyname','gethostbynamel','getimagesize','getlastmod',            'getmxrr','getmygid','getmyinode','getmypid','getmyuid','getopt',
    -            'getprotobyname','getprotobynumber','getrandmax','getrusage',            'getservbyname','getservbyport','gettext','gettimeofday','gettype',
    -            'get_browser','get_cfg_var','get_class','get_class_methods',            'get_class_vars','get_current_user','get_declared_classes',
    -            'get_defined_constants','get_defined_functions','get_defined_vars',            'get_extension_funcs','get_headers','get_html_translation_table',
    -            'get_included_files','get_include_path','get_loaded_extensions',            'get_magic_quotes_gpc','get_magic_quotes_runtime','get_meta_tags',
    -            'get_object_vars','get_parent_class','get_required_files',            'get_resource_type','glob','gmdate','gmmktime','gmp_abs','gmp_add',
    -            'gmp_and','gmp_clrbit','gmp_cmp','gmp_com','gmp_div','gmp_div_q',            'gmp_div_qr','gmp_div_r','gmp_divexact','gmp_fact','gmp_gcd',
    -            'gmp_gcdext','gmp_hamdist','gmp_init','gmp_intval','gmp_invert',            'gmp_jacobi','gmp_legendre','gmp_mod','gmp_mul','gmp_neg',
    -            'gmp_nextprime','gmp_or','gmp_perfect_square','gmp_popcount',            'gmp_pow','gmp_powm','gmp_prob_prime','gmp_random','gmp_scan0',
    -            'gmp_scan1','gmp_setbit','gmp_sign','gmp_sqrt','gmp_sqrtrem',            'gmp_strval','gmp_sub','gmp_xor','gmstrftime','gopher_parsedir',
    -            'gregoriantojd','gzclose','gzcompress','gzdeflate','gzencode',            'gzeof','gzfile','gzgetc','gzgets','gzgetss','gzinflate','gzopen',
    -            'gzpassthru','gzputs','gzread','gzrewind','gzseek','gztell',            'gzuncompress','gzwrite','hash','hash_algos','hash_file',
    -            'hash_final','hash_hmac','hash_hmac_file','hash_init','hash_update',            'hash_update_file','hash_update_stream','header','headers_list',
    -            'headers_sent','hebrev','hebrevc','hexdec','highlight_file',            'highlight_string','html_doc','html_doc_file','html_entity_decode',
    -            'htmlentities','htmlspecialchars','htmlspecialchars_decode',            'http_build_cookie','http_build_query','http_build_str',
    -            'http_build_url','http_cache_etag','http_cache_last_modified',            'http_chunked_decode','http_date','http_deflate','http_get',
    -            'http_get_request_body','http_get_request_body_stream',            'http_get_request_headers','http_head','http_inflate',
    -            'http_match_etag','http_match_modified','http_match_request_header',            'http_negotiate_charset','http_negotiate_content_type',
    -            'http_negotiate_language','http_parse_cookie','http_parse_headers',            'http_parse_message','http_parse_params',
    -            'http_persistent_handles_clean','http_persistent_handles_count',            'http_persistent_handles_ident','http_post_data','http_post_fields',
    -            'http_put_data','http_put_file','http_put_stream','http_redirect',            'http_request','http_request_body_encode',
    -            'http_request_method_exists','http_request_method_name',            'http_request_method_register','http_request_method_unregister',
    -            'http_send_content_disposition','http_send_content_type',            'http_send_data','http_send_file','http_send_last_modified',
    -            'http_send_status','http_send_stream','http_support',            'http_throttle','hypot','i18n_convert','i18n_discover_encoding',
    -            'i18n_http_input','i18n_http_output','i18n_internal_encoding',            'i18n_ja_jp_hantozen','i18n_mime_header_decode',
    -            'i18n_mime_header_encode','ibase_add_user','ibase_affected_rows',            'ibase_backup','ibase_blob_add','ibase_blob_cancel',
    -            'ibase_blob_close','ibase_blob_create','ibase_blob_echo',            'ibase_blob_get','ibase_blob_import','ibase_blob_info',
    -            'ibase_blob_open','ibase_close','ibase_commit','ibase_commit_ret',            'ibase_connect','ibase_db_info','ibase_delete_user','ibase_drop_db',
    -            'ibase_errcode','ibase_errmsg','ibase_execute','ibase_fetch_assoc',            'ibase_fetch_object','ibase_fetch_row','ibase_field_info',
    -            'ibase_free_event_handler','ibase_free_query','ibase_free_result',            'ibase_gen_id','ibase_maintain_db','ibase_modify_user',
    -            'ibase_name_result','ibase_num_fields','ibase_num_params',            'ibase_param_info','ibase_pconnect','ibase_prepare','ibase_query',
    -            'ibase_restore','ibase_rollback','ibase_rollback_ret',            'ibase_server_info','ibase_service_attach','ibase_service_detach',
    -            'ibase_set_event_handler','ibase_trans','ibase_wait_event','iconv',            'iconv_get_encoding','iconv_mime_decode',
    -            'iconv_mime_decode_headers','iconv_mime_encode',            'iconv_set_encoding','iconv_strlen','iconv_strpos','iconv_strrpos',
    -            'iconv_substr','id3_get_frame_long_name','id3_get_frame_short_name',            'id3_get_genre_id','id3_get_genre_list','id3_get_genre_name',
    -            'id3_get_tag','id3_get_version','id3_remove_tag','id3_set_tag',            'idate','ignore_user_abort','image_type_to_extension',
    -            'image_type_to_mime_type','image2wbmp','imagealphablending',            'imageantialias','imagearc','imagechar','imagecharup',
    -            'imagecolorallocate','imagecolorallocatealpha','imagecolorat',            'imagecolorclosest','imagecolorclosestalpha','imagecolordeallocate',
    -            'imagecolorexact','imagecolorexactalpha','imagecolormatch',            'imagecolorresolve','imagecolorresolvealpha','imagecolorset',
    -            'imagecolorsforindex','imagecolorstotal','imagecolortransparent',            'imageconvolution','imagecopy','imagecopymerge',
    -            'imagecopymergegray','imagecopyresampled','imagecopyresized',            'imagecreate','imagecreatefromgd','imagecreatefromgd2',
    -            'imagecreatefromgd2part','imagecreatefromgif','imagecreatefromjpeg',            'imagecreatefrompng','imagecreatefromstring','imagecreatefromwbmp',
    -            'imagecreatefromxbm','imagecreatetruecolor','imagedashedline',            'imagedestroy','imageellipse','imagefill','imagefilledarc',
    -            'imagefilledellipse','imagefilledpolygon','imagefilledrectangle',            'imagefilltoborder','imagefilter','imagefontheight',
    -            'imagefontwidth','imageftbbox','imagefttext','imagegammacorrect',            'imagegd','imagegd2','imagegif','imagegrabscreen','imagegrabwindow',
    -            'imageinterlace','imageistruecolor','imagejpeg','imagelayereffect',            'imageline','imageloadfont','imagepalettecopy','imagepng',
    -            'imagepolygon','imagepsbbox','imagepsencodefont',            'imagepsextendfont','imagepsfreefont','imagepsloadfont',
    -            'imagepsslantfont','imagepstext','imagerectangle','imagerotate',            'imagesavealpha','imagesetbrush','imagesetpixel','imagesetstyle',
    -            'imagesetthickness','imagesettile','imagestring','imagestringup',            'imagesx','imagesy','imagetruecolortopalette','imagettfbbox',
    -            'imagettftext','imagetypes','imagewbmp','imagexbm','imap_8bit',            'imap_alerts','imap_append','imap_base64','imap_binary','imap_body',
    -            'imap_bodystruct','imap_check','imap_clearflag_full','imap_close',            'imap_create','imap_createmailbox','imap_delete',
    -            'imap_deletemailbox','imap_errors','imap_expunge',            'imap_fetch_overview','imap_fetchbody','imap_fetchheader',
    -            'imap_fetchstructure','imap_fetchtext','imap_get_quota',            'imap_get_quotaroot','imap_getacl','imap_getmailboxes',
    -            'imap_getsubscribed','imap_header','imap_headerinfo','imap_headers',            'imap_last_error','imap_list','imap_listmailbox',
    -            'imap_listsubscribed','imap_lsub','imap_mail','imap_mail_compose',            'imap_mail_copy','imap_mail_move','imap_mailboxmsginfo',
    -            'imap_mime_header_decode','imap_msgno','imap_num_msg',            'imap_num_recent','imap_open','imap_ping','imap_qprint',
    -            'imap_rename','imap_renamemailbox','imap_reopen',            'imap_rfc822_parse_adrlist','imap_rfc822_parse_headers',
    -            'imap_rfc822_write_address','imap_savebody','imap_scan',            'imap_scanmailbox','imap_search','imap_set_quota','imap_setacl',
    -            'imap_setflag_full','imap_sort','imap_status','imap_subscribe',            'imap_thread','imap_timeout','imap_uid','imap_undelete',
    -            'imap_unsubscribe','imap_utf7_decode','imap_utf7_encode',            'imap_utf8','implode','import_request_variables','in_array',
    -            'ini_alter','ini_get','ini_get_all','ini_restore','ini_set',            'intval','ip2long','iptcembed','iptcparse','isset','is_a',
    -            'is_array','is_bool','is_callable','is_dir','is_double',            'is_executable','is_file','is_finite','is_float','is_infinite',
    -            'is_int','is_integer','is_link','is_long','is_nan','is_null',            'is_numeric','is_object','is_readable','is_real','is_resource',
    -            'is_scalar','is_soap_fault','is_string','is_subclass_of',            'is_uploaded_file','is_writable','is_writeable','iterator_apply',
    -            'iterator_count','iterator_to_array','java_last_exception_clear',            'java_last_exception_get','jddayofweek','jdmonthname','jdtofrench',
    -            'jdtogregorian','jdtojewish','jdtojulian','jdtounix','jewishtojd',            'join','jpeg2wbmp','json_decode','json_encode','juliantojd','key',
    -            'key_exists','krsort','ksort','lcg_value','ldap_add','ldap_bind',            'ldap_close','ldap_compare','ldap_connect','ldap_count_entries',
    -            'ldap_delete','ldap_dn2ufn','ldap_err2str','ldap_errno',            'ldap_error','ldap_explode_dn','ldap_first_attribute',
    -            'ldap_first_entry','ldap_first_reference','ldap_free_result',            'ldap_get_attributes','ldap_get_dn','ldap_get_entries',
    -            'ldap_get_option','ldap_get_values','ldap_get_values_len',            'ldap_list','ldap_mod_add','ldap_mod_del','ldap_mod_replace',
    -            'ldap_modify','ldap_next_attribute','ldap_next_entry',            'ldap_next_reference','ldap_parse_reference','ldap_parse_result',
    -            'ldap_read','ldap_rename','ldap_search','ldap_set_option',            'ldap_sort','ldap_start_tls','ldap_unbind','levenshtein',
    -            'libxml_clear_errors','libxml_get_errors','libxml_get_last_error',            'libxml_set_streams_context','libxml_use_internal_errors','link',
    -            'linkinfo','list','localeconv','localtime','log','log1p','log10',            'long2ip','lstat','ltrim','lzf_compress','lzf_decompress',
    -            'lzf_optimized_for','magic_quotes_runtime','mail','max','mbereg',            'mberegi','mberegi_replace','mbereg_match','mbereg_replace',
    -            'mbereg_search','mbereg_search_getpos','mbereg_search_getregs',            'mbereg_search_init','mbereg_search_pos','mbereg_search_regs',
    -            'mbereg_search_setpos','mbregex_encoding','mbsplit','mbstrcut',            'mbstrlen','mbstrpos','mbstrrpos','mbsubstr','mb_check_encoding',
    -            'mb_convert_case','mb_convert_encoding','mb_convert_kana',            'mb_convert_variables','mb_decode_mimeheader',
    -            'mb_decode_numericentity','mb_detect_encoding','mb_detect_order',            'mb_encode_mimeheader','mb_encode_numericentity','mb_ereg',
    -            'mb_eregi','mb_eregi_replace','mb_ereg_match','mb_ereg_replace',            'mb_ereg_search','mb_ereg_search_getpos','mb_ereg_search_getregs',
    -            'mb_ereg_search_init','mb_ereg_search_pos','mb_ereg_search_regs',            'mb_ereg_search_setpos','mb_get_info','mb_http_input',
    -            'mb_http_output','mb_internal_encoding','mb_language',            'mb_list_encodings','mb_output_handler','mb_parse_str',
    -            'mb_preferred_mime_name','mb_regex_encoding','mb_regex_set_options',            'mb_send_mail','mb_split','mb_strcut','mb_strimwidth','mb_stripos',
    -            'mb_stristr','mb_strlen','mb_strpos','mb_strrchr','mb_strrichr',            'mb_strripos','mb_strrpos','mb_strstr','mb_strtolower',
    -            'mb_strtoupper','mb_strwidth','mb_substitute_character','mb_substr',            'mb_substr_count','mcrypt_cbc','mcrypt_cfb','mcrypt_create_iv',
    -            'mcrypt_decrypt','mcrypt_ecb','mcrypt_enc_get_algorithms_name',            'mcrypt_enc_get_block_size','mcrypt_enc_get_iv_size',
    -            'mcrypt_enc_get_key_size','mcrypt_enc_get_modes_name',            'mcrypt_enc_get_supported_key_sizes',
    -            'mcrypt_enc_is_block_algorithm',            'mcrypt_enc_is_block_algorithm_mode','mcrypt_enc_is_block_mode',
    -            'mcrypt_enc_self_test','mcrypt_encrypt','mcrypt_generic',            'mcrypt_generic_deinit','mcrypt_generic_end','mcrypt_generic_init',
    -            'mcrypt_get_block_size','mcrypt_get_cipher_name',            'mcrypt_get_iv_size','mcrypt_get_key_size','mcrypt_list_algorithms',
    -            'mcrypt_list_modes','mcrypt_module_close',            'mcrypt_module_get_algo_block_size',
    -            'mcrypt_module_get_algo_key_size',            'mcrypt_module_get_supported_key_sizes',
    -            'mcrypt_module_is_block_algorithm',            'mcrypt_module_is_block_algorithm_mode',
    -            'mcrypt_module_is_block_mode','mcrypt_module_open',            'mcrypt_module_self_test','mcrypt_ofb','md5','md5_file',
    -            'mdecrypt_generic','memcache_add','memcache_add_server',            'memcache_close','memcache_connect','memcache_debug',
    -            'memcache_decrement','memcache_delete','memcache_flush',            'memcache_get','memcache_get_extended_stats',
    -            'memcache_get_server_status','memcache_get_stats',            'memcache_get_version','memcache_increment','memcache_pconnect',
    -            'memcache_replace','memcache_set','memcache_set_compress_threshold',            'memcache_set_server_params','memory_get_peak_usage',
    -            'memory_get_usage','metaphone','mhash','mhash_count',            'mhash_get_block_size','mhash_get_hash_name','mhash_keygen_s2k',
    -            'method_exists','microtime','mime_content_type','min',            'ming_keypress','ming_setcubicthreshold','ming_setscale',
    -            'ming_useconstants','ming_useswfversion','mkdir','mktime',            'money_format','move_uploaded_file','msql','msql_affected_rows',
    -            'msql_close','msql_connect','msql_create_db','msql_createdb',            'msql_data_seek','msql_db_query','msql_dbname','msql_drop_db',
    -            'msql_dropdb','msql_error','msql_fetch_array','msql_fetch_field',            'msql_fetch_object','msql_fetch_row','msql_field_flags',
    -            'msql_field_len','msql_field_name','msql_field_seek',            'msql_field_table','msql_field_type','msql_fieldflags',
    -            'msql_fieldlen','msql_fieldname','msql_fieldtable','msql_fieldtype',            'msql_free_result','msql_freeresult','msql_list_dbs',
    -            'msql_list_fields','msql_list_tables','msql_listdbs',            'msql_listfields','msql_listtables','msql_num_fields',
    -            'msql_num_rows','msql_numfields','msql_numrows','msql_pconnect',            'msql_query','msql_regcase','msql_result','msql_select_db',
    -            'msql_selectdb','msql_tablename','mssql_bind','mssql_close',            'mssql_connect','mssql_data_seek','mssql_execute',
    -            'mssql_fetch_array','mssql_fetch_assoc','mssql_fetch_batch',            'mssql_fetch_field','mssql_fetch_object','mssql_fetch_row',
    -            'mssql_field_length','mssql_field_name','mssql_field_seek',            'mssql_field_type','mssql_free_result','mssql_free_statement',
    -            'mssql_get_last_message','mssql_guid_string','mssql_init',            'mssql_min_error_severity','mssql_min_message_severity',
    -            'mssql_next_result','mssql_num_fields','mssql_num_rows',            'mssql_pconnect','mssql_query','mssql_result','mssql_rows_affected',
    -            'mssql_select_db','mt_getrandmax','mt_rand','mt_srand','mysql',            'mysql_affected_rows','mysql_client_encoding','mysql_close',
    -            'mysql_connect','mysql_createdb','mysql_create_db',            'mysql_data_seek','mysql_dbname','mysql_db_name','mysql_db_query',
    -            'mysql_dropdb','mysql_drop_db','mysql_errno','mysql_error',            'mysql_escape_string','mysql_fetch_array','mysql_fetch_assoc',
    -            'mysql_fetch_field','mysql_fetch_lengths','mysql_fetch_object',            'mysql_fetch_row','mysql_fieldflags','mysql_fieldlen',
    -            'mysql_fieldname','mysql_fieldtable','mysql_fieldtype',            'mysql_field_flags','mysql_field_len','mysql_field_name',
    -            'mysql_field_seek','mysql_field_table','mysql_field_type',            'mysql_freeresult','mysql_free_result','mysql_get_client_info',
    -            'mysql_get_host_info','mysql_get_proto_info',            'mysql_get_server_info','mysql_info','mysql_insert_id',
    -            'mysql_listdbs','mysql_listfields','mysql_listtables',            'mysql_list_dbs','mysql_list_fields','mysql_list_processes',
    -            'mysql_list_tables','mysql_numfields','mysql_numrows',            'mysql_num_fields','mysql_num_rows','mysql_pconnect','mysql_ping',
    -            'mysql_query','mysql_real_escape_string','mysql_result',            'mysql_selectdb','mysql_select_db','mysql_set_charset','mysql_stat',
    -            'mysql_tablename','mysql_table_name','mysql_thread_id',            'mysql_unbuffered_query','mysqli_affected_rows','mysqli_autocommit',
    -            'mysqli_bind_param','mysqli_bind_result','mysqli_change_user',            'mysqli_character_set_name','mysqli_client_encoding','mysqli_close',
    -            'mysqli_commit','mysqli_connect','mysqli_connect_errno',            'mysqli_connect_error','mysqli_data_seek','mysqli_debug',
    -            'mysqli_disable_reads_from_master','mysqli_disable_rpl_parse',            'mysqli_dump_debug_info','mysqli_embedded_server_end',
    -            'mysqli_embedded_server_start','mysqli_enable_reads_from_master',            'mysqli_enable_rpl_parse','mysqli_errno','mysqli_error',
    -            'mysqli_escape_string','mysqli_execute','mysqli_fetch',            'mysqli_fetch_array','mysqli_fetch_assoc','mysqli_fetch_field',
    -            'mysqli_fetch_field_direct','mysqli_fetch_fields',            'mysqli_fetch_lengths','mysqli_fetch_object','mysqli_fetch_row',
    -            'mysqli_field_count','mysqli_field_seek','mysqli_field_tell',            'mysqli_free_result','mysqli_get_charset','mysqli_get_client_info',
    -            'mysqli_get_client_version','mysqli_get_host_info',            'mysqli_get_metadata','mysqli_get_proto_info',
    -            'mysqli_get_server_info','mysqli_get_server_version',            'mysqli_get_warnings','mysqli_info','mysqli_init',
    -            'mysqli_insert_id','mysqli_kill','mysqli_master_query',            'mysqli_more_results','mysqli_multi_query','mysqli_next_result',
    -            'mysqli_num_fields','mysqli_num_rows','mysqli_options',            'mysqli_param_count','mysqli_ping','mysqli_prepare','mysqli_query',
    -            'mysqli_real_connect','mysqli_real_escape_string',            'mysqli_real_query','mysqli_report','mysqli_rollback',
    -            'mysqli_rpl_parse_enabled','mysqli_rpl_probe',            'mysqli_rpl_query_type','mysqli_select_db','mysqli_send_long_data',
    -            'mysqli_send_query','mysqli_set_charset',            'mysqli_set_local_infile_default','mysqli_set_local_infile_handler',
    -            'mysqli_set_opt','mysqli_slave_query','mysqli_sqlstate',            'mysqli_ssl_set','mysqli_stat','mysqli_stmt_affected_rows',
    -            'mysqli_stmt_attr_get','mysqli_stmt_attr_set',            'mysqli_stmt_bind_param','mysqli_stmt_bind_result',
    -            'mysqli_stmt_close','mysqli_stmt_data_seek','mysqli_stmt_errno',            'mysqli_stmt_error','mysqli_stmt_execute','mysqli_stmt_fetch',
    -            'mysqli_stmt_field_count','mysqli_stmt_free_result',            'mysqli_stmt_get_warnings','mysqli_stmt_init',
    -            'mysqli_stmt_insert_id','mysqli_stmt_num_rows',            'mysqli_stmt_param_count','mysqli_stmt_prepare','mysqli_stmt_reset',
    -            'mysqli_stmt_result_metadata','mysqli_stmt_send_long_data',            'mysqli_stmt_sqlstate','mysqli_stmt_store_result',
    -            'mysqli_store_result','mysqli_thread_id','mysqli_thread_safe',            'mysqli_use_result','mysqli_warning_count','natcasesort','natsort',
    -            'new_xmldoc','next','ngettext','nl2br','nl_langinfo',            'ntuser_getdomaincontroller','ntuser_getusergroups',
    -            'ntuser_getuserinfo','ntuser_getuserlist','number_format',            'ob_clean','ob_deflatehandler','ob_end_clean','ob_end_flush',
    -            'ob_etaghandler','ob_flush','ob_get_clean','ob_get_contents',            'ob_get_flush','ob_get_length','ob_get_level','ob_get_status',
    -            'ob_gzhandler','ob_iconv_handler','ob_implicit_flush',            'ob_inflatehandler','ob_list_handlers','ob_start','ob_tidyhandler',
    -            'octdec','odbc_autocommit','odbc_binmode','odbc_close',            'odbc_close_all','odbc_columnprivileges','odbc_columns',
    -            'odbc_commit','odbc_connect','odbc_cursor','odbc_data_source',            'odbc_do','odbc_error','odbc_errormsg','odbc_exec','odbc_execute',
    -            'odbc_fetch_array','odbc_fetch_into','odbc_fetch_object',            'odbc_fetch_row','odbc_field_len','odbc_field_name',
    -            'odbc_field_num','odbc_field_precision','odbc_field_scale',            'odbc_field_type','odbc_foreignkeys','odbc_free_result',
    -            'odbc_gettypeinfo','odbc_longreadlen','odbc_next_result',            'odbc_num_fields','odbc_num_rows','odbc_pconnect','odbc_prepare',
    -            'odbc_primarykeys','odbc_procedurecolumns','odbc_procedures',            'odbc_result','odbc_result_all','odbc_rollback','odbc_setoption',
    -            'odbc_specialcolumns','odbc_statistics','odbc_tableprivileges',            'odbc_tables','opendir','openlog','openssl_csr_export',
    -            'openssl_csr_export_to_file','openssl_csr_get_public_key',            'openssl_csr_get_subject','openssl_csr_new','openssl_csr_sign',
    -            'openssl_error_string','openssl_free_key','openssl_get_privatekey',            'openssl_get_publickey','openssl_open','openssl_pkcs12_export',
    -            'openssl_pkcs12_export_to_file','openssl_pkcs12_read',            'openssl_pkcs7_decrypt','openssl_pkcs7_encrypt',
    -            'openssl_pkcs7_sign','openssl_pkcs7_verify','openssl_pkey_export',            'openssl_pkey_export_to_file','openssl_pkey_free',
    -            'openssl_pkey_get_details','openssl_pkey_get_private',            'openssl_pkey_get_public','openssl_pkey_new',
    -            'openssl_private_decrypt','openssl_private_encrypt',            'openssl_public_decrypt','openssl_public_encrypt','openssl_seal',
    -            'openssl_sign','openssl_verify','openssl_x509_checkpurpose',            'openssl_x509_check_private_key','openssl_x509_export',
    -            'openssl_x509_export_to_file','openssl_x509_free',            'openssl_x509_parse','openssl_x509_read','ord',
    -            'output_add_rewrite_var','output_reset_rewrite_vars','overload',            'outputdebugstring','pack','parse_ini_file','parse_str','parse_url',
    -            'parsekit_compile_file','parsekit_compile_string',            'parsekit_func_arginfo','parsekit_opcode_flags',
    -            'parsekit_opcode_name','passthru','pathinfo','pclose',            'pdf_add_bookmark','pdf_add_launchlink','pdf_add_locallink',
    -            'pdf_add_nameddest','pdf_add_note','pdf_add_pdflink',            'pdf_add_thumbnail','pdf_add_weblink','pdf_arc','pdf_arcn',
    -            'pdf_attach_file','pdf_begin_font','pdf_begin_glyph',            'pdf_begin_page','pdf_begin_pattern','pdf_begin_template',
    -            'pdf_circle','pdf_clip','pdf_close','pdf_close_image',            'pdf_close_pdi','pdf_close_pdi_page','pdf_closepath',
    -            'pdf_closepath_fill_stroke','pdf_closepath_stroke','pdf_concat',            'pdf_continue_text','pdf_create_gstate','pdf_create_pvf',
    -            'pdf_curveto','pdf_delete','pdf_delete_pvf','pdf_encoding_set_char',            'pdf_end_font','pdf_end_glyph','pdf_end_page','pdf_end_pattern',
    -            'pdf_end_template','pdf_endpath','pdf_fill','pdf_fill_imageblock',            'pdf_fill_pdfblock','pdf_fill_stroke','pdf_fill_textblock',
    -            'pdf_findfont','pdf_fit_image','pdf_fit_pdi_page',            'pdf_fit_textline','pdf_get_apiname','pdf_get_buffer',
    -            'pdf_get_errmsg','pdf_get_errnum','pdf_get_parameter',            'pdf_get_pdi_parameter','pdf_get_pdi_value','pdf_get_value',
    -            'pdf_initgraphics','pdf_lineto','pdf_load_font',            'pdf_load_iccprofile','pdf_load_image','pdf_makespotcolor',
    -            'pdf_moveto','pdf_new','pdf_open_ccitt','pdf_open_file',            'pdf_open_image','pdf_open_image_file','pdf_open_pdi',
    -            'pdf_open_pdi_page','pdf_place_image','pdf_place_pdi_page',            'pdf_process_pdi','pdf_rect','pdf_restore','pdf_rotate','pdf_save',
    -            'pdf_scale','pdf_set_border_color','pdf_set_border_dash',            'pdf_set_border_style','pdf_set_gstate','pdf_set_info',
    -            'pdf_set_parameter','pdf_set_text_pos','pdf_set_value',            'pdf_setcolor','pdf_setdash','pdf_setdashpattern','pdf_setflat',
    -            'pdf_setfont','pdf_setlinecap','pdf_setlinejoin','pdf_setlinewidth',            'pdf_setmatrix','pdf_setmiterlimit','pdf_setpolydash','pdf_shading',
    -            'pdf_shading_pattern','pdf_shfill','pdf_show','pdf_show_boxed',            'pdf_show_xy','pdf_skew','pdf_stringwidth','pdf_stroke',
    -            'pdf_translate','pdo_drivers','pfsockopen','pg_affected_rows',            'pg_cancel_query','pg_clientencoding','pg_client_encoding',
    -            'pg_close','pg_cmdtuples','pg_connect','pg_connection_busy',            'pg_connection_reset','pg_connection_status','pg_convert',
    -            'pg_copy_from','pg_copy_to','pg_dbname','pg_delete','pg_end_copy',            'pg_errormessage','pg_escape_bytea','pg_escape_string','pg_exec',
    -            'pg_execute','pg_fetch_all','pg_fetch_all_columns','pg_fetch_array',            'pg_fetch_assoc','pg_fetch_object','pg_fetch_result','pg_fetch_row',
    -            'pg_fieldisnull','pg_fieldname','pg_fieldnum','pg_fieldprtlen',            'pg_fieldsize','pg_fieldtype','pg_field_is_null','pg_field_name',
    -            'pg_field_num','pg_field_prtlen','pg_field_size','pg_field_table',            'pg_field_type','pg_field_type_oid','pg_free_result',
    -            'pg_freeresult','pg_get_notify','pg_get_pid','pg_get_result',            'pg_getlastoid','pg_host','pg_insert','pg_last_error',
    -            'pg_last_notice','pg_last_oid','pg_loclose','pg_locreate',            'pg_loexport','pg_loimport','pg_loopen','pg_loread','pg_loreadall',
    -            'pg_lounlink','pg_lowrite','pg_lo_close','pg_lo_create',            'pg_lo_export','pg_lo_import','pg_lo_open','pg_lo_read',
    -            'pg_lo_read_all','pg_lo_seek','pg_lo_tell','pg_lo_unlink',            'pg_lo_write','pg_meta_data','pg_numfields','pg_numrows',
    -            'pg_num_fields','pg_num_rows','pg_options','pg_parameter_status',            'pg_pconnect','pg_ping','pg_port','pg_prepare','pg_put_line',
    -            'pg_query','pg_query_params','pg_result','pg_result_error',            'pg_result_error_field','pg_result_seek','pg_result_status',
    -            'pg_select','pg_send_execute','pg_send_prepare','pg_send_query',            'pg_send_query_params','pg_set_client_encoding',
    -            'pg_set_error_verbosity','pg_setclientencoding','pg_trace',            'pg_transaction_status','pg_tty','pg_unescape_bytea','pg_untrace',
    -            'pg_update','pg_version','php_egg_logo_guid','php_ini_loaded_file',            'php_ini_scanned_files','php_logo_guid','php_real_logo_guid',
    -            'php_sapi_name','php_strip_whitespace','php_uname','phpcredits',            'phpdoc_xml_from_string','phpinfo','phpversion','pi','png2wbmp',
    -            'pop3_close','pop3_delete_message','pop3_get_account_size',            'pop3_get_message','pop3_get_message_count',
    -            'pop3_get_message_header','pop3_get_message_ids',            'pop3_get_message_size','pop3_get_message_sizes','pop3_open',
    -            'pop3_undelete','popen','pos','posix_ctermid','posix_errno',            'posix_getcwd','posix_getegid','posix_geteuid','posix_getgid',
    -            'posix_getgrgid','posix_getgrnam','posix_getgroups',            'posix_getlogin','posix_getpgid','posix_getpgrp','posix_getpid',
    -            'posix_getppid','posix_getpwnam','posix_getpwuid','posix_getrlimit',            'posix_getsid','posix_getuid','posix_get_last_error','posix_isatty',
    -            'posix_kill','posix_mkfifo','posix_setegid','posix_seteuid',            'posix_setgid','posix_setpgid','posix_setsid','posix_setuid',
    -            'posix_strerror','posix_times','posix_ttyname','posix_uname','pow',            'preg_grep','preg_last_error','preg_match','preg_match_all',
    -            'preg_quote','preg_replace','preg_replace_callback','preg_split',            'prev','print_r','printf','proc_close','proc_get_status',
    -            'proc_open','proc_terminate','putenv','quoted_printable_decode',            'quotemeta','rad2deg','radius_acct_open','radius_add_server',
    -            'radius_auth_open','radius_close','radius_config',            'radius_create_request','radius_cvt_addr','radius_cvt_int',
    -            'radius_cvt_string','radius_demangle','radius_demangle_mppe_key',            'radius_get_attr','radius_get_vendor_attr','radius_put_addr',
    -            'radius_put_attr','radius_put_int','radius_put_string',            'radius_put_vendor_addr','radius_put_vendor_attr',
    -            'radius_put_vendor_int','radius_put_vendor_string',            'radius_request_authenticator','radius_send_request',
    -            'radius_server_secret','radius_strerror','rand','range',            'rawurldecode','rawurlencode','read_exif_data','readdir','readfile',
    -            'readgzfile','readlink','realpath','reg_close_key','reg_create_key',            'reg_enum_key','reg_enum_value','reg_get_value','reg_open_key',
    -            'reg_set_value','register_shutdown_function',            'register_tick_function','rename','res_close','res_get','res_list',
    -            'res_list_type','res_open','res_set','reset',            'restore_error_handler','restore_include_path','rewind','rewinddir',
    -            'rmdir','round','rsort','rtrim','runkit_class_adopt',            'runkit_class_emancipate','runkit_constant_add',
    -            'runkit_constant_redefine','runkit_constant_remove',            'runkit_default_property_add','runkit_function_add',
    -            'runkit_function_copy','runkit_function_redefine',            'runkit_function_remove','runkit_function_rename','runkit_import',
    -            'runkit_lint','runkit_lint_file','runkit_method_add',            'runkit_method_copy','runkit_method_redefine',
    -            'runkit_method_remove','runkit_method_rename','runkit_object_id',            'runkit_return_value_used','runkit_sandbox_output_handler',
    -            'runkit_superglobals','runkit_zval_inspect','scandir','sem_acquire',            'sem_get','sem_release','sem_remove','serialize',
    -            'session_cache_expire','session_cache_limiter','session_commit',            'session_decode','session_destroy','session_encode',
    -            'session_get_cookie_params','session_id','session_is_registered',            'session_module_name','session_name','session_regenerate_id',
    -            'session_register','session_save_path','session_set_cookie_params',            'session_set_save_handler','session_start','session_unregister',
    -            'session_unset','session_write_close','set_content',            'set_error_handler','set_file_buffer','set_include_path',
    -            'set_magic_quotes_runtime','set_socket_blocking','set_time_limit',            'setcookie','setlocale','setrawcookie','settype','sha1','sha1_file',
    -            'shell_exec','shmop_close','shmop_delete','shmop_open','shmop_read',            'shmop_size','shmop_write','shm_attach','shm_detach','shm_get_var',
    -            'shm_put_var','shm_remove','shm_remove_var','show_source','shuffle',            'similar_text','simplexml_import_dom','simplexml_load_file',
    -            'simplexml_load_string','sin','sinh','sizeof','sleep','smtp_close',            'smtp_cmd_data','smtp_cmd_mail','smtp_cmd_rcpt','smtp_connect',
    -            'snmp_get_quick_print','snmp_get_valueretrieval','snmp_read_mib',            'snmp_set_quick_print','snmp_set_valueretrieval','snmp2_get',
    -            'snmp2_getnext','snmp2_real_walk','snmp2_set','snmp2_walk',            'snmp3_get','snmp3_getnext','snmp3_real_walk','snmp3_set',
    -            'snmp3_walk','snmpget','snmpgetnext','snmprealwalk','snmpset',            'snmpwalk','snmpwalkoid','socket_accept','socket_bind',
    -            'socket_clear_error','socket_close','socket_connect',            'socket_create','socket_create_listen','socket_create_pair',
    -            'socket_getopt','socket_getpeername','socket_getsockname',            'socket_get_option','socket_get_status','socket_iovec_add',
    -            'socket_iovec_alloc','socket_iovec_delete','socket_iovec_fetch',            'socket_iovec_free','socket_iovec_set','socket_last_error',
    -            'socket_listen','socket_read','socket_readv','socket_recv',            'socket_recvfrom','socket_recvmsg','socket_select','socket_send',
    -            'socket_sendmsg','socket_sendto','socket_setopt','socket_set_block',            'socket_set_blocking','socket_set_nonblock','socket_set_option',
    -            'socket_set_timeout','socket_shutdown','socket_strerror',            'socket_write','socket_writev','sort','soundex','spl_autoload',
    -            'spl_autoload_call','spl_autoload_extensions',            'spl_autoload_functions','spl_autoload_register',
    -            'spl_autoload_unregister','spl_classes','spl_object_hash','split',            'spliti','sprintf','sql_regcase','sqlite_array_query',
    -            'sqlite_busy_timeout','sqlite_changes','sqlite_close',            'sqlite_column','sqlite_create_aggregate','sqlite_create_function',
    -            'sqlite_current','sqlite_error_string','sqlite_escape_string',            'sqlite_exec','sqlite_factory','sqlite_fetch_all',
    -            'sqlite_fetch_array','sqlite_fetch_column_types',            'sqlite_fetch_object','sqlite_fetch_single','sqlite_fetch_string',
    -            'sqlite_field_name','sqlite_has_more','sqlite_has_prev',            'sqlite_last_error','sqlite_last_insert_rowid','sqlite_libencoding',
    -            'sqlite_libversion','sqlite_next','sqlite_num_fields',            'sqlite_num_rows','sqlite_open','sqlite_popen','sqlite_prev',
    -            'sqlite_query','sqlite_rewind','sqlite_seek','sqlite_single_query',            'sqlite_udf_decode_binary','sqlite_udf_encode_binary',
    -            'sqlite_unbuffered_query','sqlite_valid','sqrt','srand','sscanf',            'ssh2_auth_hostbased_file','ssh2_auth_none','ssh2_auth_password',
    -            'ssh2_auth_pubkey_file','ssh2_connect','ssh2_exec',            'ssh2_fetch_stream','ssh2_fingerprint','ssh2_forward_accept',
    -            'ssh2_forward_listen','ssh2_methods_negotiated','ssh2_poll',            'ssh2_publickey_add','ssh2_publickey_init','ssh2_publickey_list',
    -            'ssh2_publickey_remove','ssh2_scp_recv','ssh2_scp_send','ssh2_sftp',            'ssh2_sftp_lstat','ssh2_sftp_mkdir','ssh2_sftp_readlink',
    -            'ssh2_sftp_realpath','ssh2_sftp_rename','ssh2_sftp_rmdir',            'ssh2_sftp_stat','ssh2_sftp_symlink','ssh2_sftp_unlink',
    -            'ssh2_shell','ssh2_tunnel','stat','stats_absolute_deviation',            'stats_cdf_beta','stats_cdf_binomial','stats_cdf_cauchy',
    -            'stats_cdf_chisquare','stats_cdf_exponential','stats_cdf_f',            'stats_cdf_gamma','stats_cdf_laplace','stats_cdf_logistic',
    -            'stats_cdf_negative_binomial','stats_cdf_noncentral_chisquare',            'stats_cdf_noncentral_f','stats_cdf_noncentral_t',
    -            'stats_cdf_normal','stats_cdf_poisson','stats_cdf_t',            'stats_cdf_uniform','stats_cdf_weibull','stats_covariance',
    -            'stats_dens_beta','stats_dens_cauchy','stats_dens_chisquare',            'stats_dens_exponential','stats_dens_f','stats_dens_gamma',
    -            'stats_dens_laplace','stats_dens_logistic','stats_dens_normal',            'stats_dens_pmf_binomial','stats_dens_pmf_hypergeometric',
    -            'stats_dens_pmf_negative_binomial','stats_dens_pmf_poisson',            'stats_dens_t','stats_dens_uniform','stats_dens_weibull',
    -            'stats_harmonic_mean','stats_kurtosis','stats_rand_gen_beta',            'stats_rand_gen_chisquare','stats_rand_gen_exponential',
    -            'stats_rand_gen_f','stats_rand_gen_funiform','stats_rand_gen_gamma',            'stats_rand_gen_ipoisson','stats_rand_gen_iuniform',
    -            'stats_rand_gen_noncenral_f','stats_rand_gen_noncentral_chisquare',            'stats_rand_gen_noncentral_t','stats_rand_gen_normal',
    -            'stats_rand_gen_t','stats_rand_getsd','stats_rand_ibinomial',            'stats_rand_ibinomial_negative','stats_rand_ignlgi',
    -            'stats_rand_phrase_to_seeds','stats_rand_ranf','stats_rand_setall',            'stats_skew','stats_standard_deviation','stats_stat_binomial_coef',
    -            'stats_stat_correlation','stats_stat_factorial',            'stats_stat_independent_t','stats_stat_innerproduct',
    -            'stats_stat_paired_t','stats_stat_percentile','stats_stat_powersum',            'stats_variance','strcasecmp','strchr','strcmp','strcoll','strcspn',
    -            'stream_bucket_append','stream_bucket_make_writeable',            'stream_bucket_new','stream_bucket_prepend','stream_context_create',
    -            'stream_context_get_default','stream_context_get_options',            'stream_context_set_default','stream_context_set_option',
    -            'stream_context_set_params','stream_copy_to_stream',            'stream_encoding','stream_filter_append','stream_filter_prepend',
    -            'stream_filter_register','stream_filter_remove',            'stream_get_contents','stream_get_filters','stream_get_line',
    -            'stream_get_meta_data','stream_get_transports',            'stream_get_wrappers','stream_is_local',
    -            'stream_notification_callback','stream_register_wrapper',            'stream_resolve_include_path','stream_select','stream_set_blocking',
    -            'stream_set_timeout','stream_set_write_buffer',            'stream_socket_accept','stream_socket_client',
    -            'stream_socket_enable_crypto','stream_socket_get_name',            'stream_socket_pair','stream_socket_recvfrom',
    -            'stream_socket_sendto','stream_socket_server',            'stream_socket_shutdown','stream_supports_lock',
    -            'stream_wrapper_register','stream_wrapper_restore',            'stream_wrapper_unregister','strftime','stripcslashes','stripos',
    -            'stripslashes','strip_tags','stristr','strlen','strnatcasecmp',            'strnatcmp','strpbrk','strncasecmp','strncmp','strpos','strrchr',
    -            'strrev','strripos','strrpos','strspn','strstr','strtok',            'strtolower','strtotime','strtoupper','strtr','strval',
    -            'str_ireplace','str_pad','str_repeat','str_replace','str_rot13',            'str_split','str_shuffle','str_word_count','substr',
    -            'substr_compare','substr_count','substr_replace','svn_add',            'svn_auth_get_parameter','svn_auth_set_parameter','svn_cat',
    -            'svn_checkout','svn_cleanup','svn_client_version','svn_commit',            'svn_diff','svn_export','svn_fs_abort_txn','svn_fs_apply_text',
    -            'svn_fs_begin_txn2','svn_fs_change_node_prop','svn_fs_check_path',            'svn_fs_contents_changed','svn_fs_copy','svn_fs_delete',
    -            'svn_fs_dir_entries','svn_fs_file_contents','svn_fs_file_length',            'svn_fs_is_dir','svn_fs_is_file','svn_fs_make_dir',
    -            'svn_fs_make_file','svn_fs_node_created_rev','svn_fs_node_prop',            'svn_fs_props_changed','svn_fs_revision_prop',
    -            'svn_fs_revision_root','svn_fs_txn_root','svn_fs_youngest_rev',            'svn_import','svn_info','svn_log','svn_ls','svn_repos_create',
    -            'svn_repos_fs','svn_repos_fs_begin_txn_for_commit',            'svn_repos_fs_commit_txn','svn_repos_hotcopy','svn_repos_open',
    -            'svn_repos_recover','svn_status','svn_update','symlink',            'sys_get_temp_dir','syslog','system','tan','tanh','tempnam',
    -            'textdomain','thread_get','thread_include','thread_lock',            'thread_lock_try','thread_mutex_destroy','thread_mutex_init',
    -            'thread_set','thread_start','thread_unlock','tidy_access_count',            'tidy_clean_repair','tidy_config_count','tidy_diagnose',
    -            'tidy_error_count','tidy_get_body','tidy_get_config',            'tidy_get_error_buffer','tidy_get_head','tidy_get_html',
    -            'tidy_get_html_ver','tidy_get_output','tidy_get_release',            'tidy_get_root','tidy_get_status','tidy_getopt','tidy_is_xhtml',
    -            'tidy_is_xml','tidy_parse_file','tidy_parse_string',            'tidy_repair_file','tidy_repair_string','tidy_warning_count','time',
    -            'timezone_abbreviations_list','timezone_identifiers_list',            'timezone_name_from_abbr','timezone_name_get','timezone_offset_get',
    -            'timezone_open','timezone_transitions_get','tmpfile',            'token_get_all','token_name','touch','trigger_error',
    -            'transliterate','transliterate_filters_get','trim','uasort',            'ucfirst','ucwords','uksort','umask','uniqid','unixtojd','unlink',
    -            'unpack','unregister_tick_function','unserialize','unset',            'urldecode','urlencode','user_error','use_soap_error_handler',
    -            'usleep','usort','utf8_decode','utf8_encode','var_dump',            'var_export','variant_abs','variant_add','variant_and',
    -            'variant_cast','variant_cat','variant_cmp',            'variant_date_from_timestamp','variant_date_to_timestamp',
    -            'variant_div','variant_eqv','variant_fix','variant_get_type',            'variant_idiv','variant_imp','variant_int','variant_mod',
    -            'variant_mul','variant_neg','variant_not','variant_or',            'variant_pow','variant_round','variant_set','variant_set_type',
    -            'variant_sub','variant_xor','version_compare','virtual','vfprintf',            'vprintf','vsprintf','wddx_add_vars','wddx_deserialize',
    -            'wddx_packet_end','wddx_packet_start','wddx_serialize_value',            'wddx_serialize_vars','win_beep','win_browse_file',
    -            'win_browse_folder','win_create_link','win_message_box',            'win_play_wav','win_shell_execute','win32_create_service',
    -            'win32_delete_service','win32_get_last_control_message',            'win32_ps_list_procs','win32_ps_stat_mem','win32_ps_stat_proc',
    -            'win32_query_service_status','win32_scheduler_delete_task',            'win32_scheduler_enum_tasks','win32_scheduler_get_task_info',
    -            'win32_scheduler_run','win32_scheduler_set_task_info',            'win32_set_service_status','win32_start_service',
    -            'win32_start_service_ctrl_dispatcher','win32_stop_service',            'wordwrap','xml_error_string','xml_get_current_byte_index',
    -            'xml_get_current_column_number','xml_get_current_line_number',            'xml_get_error_code','xml_parse','xml_parser_create',
    -            'xml_parser_create_ns','xml_parser_free','xml_parser_get_option',            'xml_parser_set_option','xml_parse_into_struct',
    -            'xml_set_character_data_handler','xml_set_default_handler',            'xml_set_element_handler','xml_set_end_namespace_decl_handler',
    -            'xml_set_external_entity_ref_handler',            'xml_set_notation_decl_handler','xml_set_object',
    -            'xml_set_processing_instruction_handler',            'xml_set_start_namespace_decl_handler',
    -            'xml_set_unparsed_entity_decl_handler','xmldoc','xmldocfile',            'xmlrpc_decode','xmlrpc_decode_request','xmlrpc_encode',
    -            'xmlrpc_encode_request','xmlrpc_get_type','xmlrpc_is_fault',            'xmlrpc_parse_method_descriptions',
    -            'xmlrpc_server_add_introspection_data','xmlrpc_server_call_method',            'xmlrpc_server_create','xmlrpc_server_destroy',
    -            'xmlrpc_server_register_introspection_callback',            'xmlrpc_server_register_method','xmlrpc_set_type','xmltree',
    -            'xmlwriter_end_attribute','xmlwriter_end_cdata',            'xmlwriter_end_comment','xmlwriter_end_document',
    -            'xmlwriter_end_dtd','xmlwriter_end_dtd_attlist',            'xmlwriter_end_dtd_element','xmlwriter_end_dtd_entity',
    -            'xmlwriter_end_element','xmlwriter_end_pi','xmlwriter_flush',            'xmlwriter_full_end_element','xmlwriter_open_memory',
    -            'xmlwriter_open_uri','xmlwriter_output_memory',            'xmlwriter_set_indent','xmlwriter_set_indent_string',
    -            'xmlwriter_start_attribute','xmlwriter_start_attribute_ns',            'xmlwriter_start_cdata','xmlwriter_start_comment',
    -            'xmlwriter_start_document','xmlwriter_start_dtd',            'xmlwriter_start_dtd_attlist','xmlwriter_start_dtd_element',
    -            'xmlwriter_start_dtd_entity','xmlwriter_start_element',            'xmlwriter_start_element_ns','xmlwriter_start_pi','xmlwriter_text',
    -            'xmlwriter_write_attribute','xmlwriter_write_attribute_ns',            'xmlwriter_write_cdata','xmlwriter_write_comment',
    -            'xmlwriter_write_dtd','xmlwriter_write_dtd_attlist',            'xmlwriter_write_dtd_element','xmlwriter_write_dtd_entity',
    -            'xmlwriter_write_element','xmlwriter_write_element_ns',            'xmlwriter_write_pi','xmlwriter_write_raw','xpath_eval',
    -            'xpath_eval_expression','xpath_new_context','xpath_register_ns',            'xpath_register_ns_auto','xptr_eval','xptr_new_context','yp_all',
    -            'yp_cat','yp_errno','yp_err_string','yp_first',            'yp_get_default_domain','yp_master','yp_match','yp_next','yp_order',
    -            'zend_current_obfuscation_level','zend_get_cfg_var','zend_get_id',            'zend_loader_current_file','zend_loader_enabled',
    -            'zend_loader_file_encoded','zend_loader_file_licensed',            'zend_loader_install_license','zend_loader_version',
    -            'zend_logo_guid','zend_match_hostmasks','zend_obfuscate_class_name',            'zend_obfuscate_function_name','zend_optimizer_version',
    -            'zend_runtime_obfuscate','zend_version','zip_close',            'zip_entry_close','zip_entry_compressedsize',
    -            'zip_entry_compressionmethod','zip_entry_filesize','zip_entry_name',            'zip_entry_open','zip_entry_read','zip_open','zip_read',
    -            'zlib_get_coding_type'            ),
    -        4 => array(            'DEFAULT_INCLUDE_PATH', 'DIRECTORY_SEPARATOR', 'E_ALL',
    -            'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_CORE_ERROR',            'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', 'E_STRICT',
    -            'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', 'E_WARNING',            'ENT_COMPAT','ENT_QUOTES','ENT_NOQUOTES',
    -            'false', 'null', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR',            'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR',
    -            'PHP_EXTENSION_DIR', 'PHP_LIBDIR',            'PHP_LOCALSTATEDIR', 'PHP_OS',
    -            'PHP_OUTPUT_HANDLER_CONT', 'PHP_OUTPUT_HANDLER_END',            'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR',
    -            'PHP_VERSION', 'true', '__CLASS__', '__FILE__', '__FUNCTION__',            '__LINE__', '__METHOD__'
    -            )        ),
    -    'SYMBOLS' => array(        1 => array(
    -            '<'.'%', '<'.'%=', '%'.'>', '<'.'?', '<'.'?=', '?'.'>'            ),
    -        0 => array(            '(', ')', '[', ']', '{', '}',
    -            '!', '@', '%', '&', '|', '/',            '<', '>',
    -            '=', '-', '+', '*',            '.', ':', ',', ';'
    -            )        ),
    -    'CASE_SENSITIVE' => array(        GESHI_COMMENTS => false,
    -        1 => false,        2 => false,
    -        3 => false,        4 => false
    -        ),    'STYLES' => array(
    -        'KEYWORDS' => array(            1 => 'color: #b1b100;',
    -            2 => 'color: #000000; font-weight: bold;',            3 => 'color: #990000;',
    -            4 => 'color: #009900; font-weight: bold;'            ),
    -        'COMMENTS' => array(            1 => 'color: #666666; font-style: italic;',
    -            2 => 'color: #666666; font-style: italic;',            3 => 'color: #0000cc; font-style: italic;',
    -            4 => 'color: #009933; font-style: italic;',            'MULTI' => 'color: #666666; font-style: italic;'
    -            ),        'ESCAPE_CHAR' => array(
    -            0 => 'color: #000099; font-weight: bold;',            1 => 'color: #000099; font-weight: bold;',
    -            2 => 'color: #660099; font-weight: bold;',            3 => 'color: #660099; font-weight: bold;',
    -            4 => 'color: #006699; font-weight: bold;',            5 => 'color: #006699; font-weight: bold; font-style: italic;',
    -            6 => 'color: #009933; font-weight: bold;',            'HARD' => 'color: #000099; font-weight: bold;'
    -            ),        'BRACKETS' => array(
    -            0 => 'color: #009900;'            ),
    -        'STRINGS' => array(            0 => 'color: #0000ff;',
    -            'HARD' => 'color: #0000ff;'            ),
    -        'NUMBERS' => array(            0 => 'color: #cc66cc;',
    -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
    -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',            ),
    -        'METHODS' => array(            1 => 'color: #004000;',
    -            2 => 'color: #004000;'            ),
    -        'SYMBOLS' => array(            0 => 'color: #339933;',
    -            1 => 'color: #000000; font-weight: bold;'            ),
    -        'REGEXPS' => array(            0 => 'color: #000088;'
    -            ),        'SCRIPT' => array(
    -            0 => '',            1 => '',
    -            2 => '',            3 => '',
    -            4 => '',            5 => ''
    -            )        ),
    -    'URLS' => array(        1 => '',
    -        2 => '',        3 => 'http://www.php.net/{FNAMEL}',
    -        4 => ''        ),
    -    'OOLANG' => true,    'OBJECT_SPLITTERS' => array(
    -        1 => '-&gt;',        2 => '::'
    -        ),    'REGEXPS' => array(
    -        //Variables        0 => "[\\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"
    -        ),    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
    -    'SCRIPT_DELIMITERS' => array(        0 => array(
    -            '<'.'?php' => '?'.'>'            ),
    -        1 => array(            '<'.'?' => '?'.'>'
    -            ),        2 => array(
    -            '<'.'%' => '%'.'>'            ),
    -        3 => array(            '<script language="php">' => '</script>'
    -            ),        4 => "/(?P<start><\\?(?>php\b)?)(?:".
    -            "(?>[^\"'?\\/<]+)|".            "\\?(?!>)|".
    -            "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".            "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
    -            "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".            "\\/\\/(?>.*?(?:\\?>|$))|".
    -            "#(?>.*?(?:\\?>|$))|".            "\\/(?=[^*\\/])|".
    -            "<(?!<<)|".            "<<<(?P<phpdoc>\w+)\s.*?\s\k<phpdoc>".
    -            ")*?(?P<end>\\?>|\Z)/sm",        5 => "/(?P<start><%)(?:".
    -            "(?>[^\"'%\\/<]+)|".            "%(?!>)|".
    -            "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".            "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
    -            "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".            "\\/\\/(?>.*?(?:%>|$))|".
    -            "#(?>.*?(?:%>|$))|".            "\\/(?=[^*\\/])|".
    -            "<(?!<<)|".            "<<<(?P<phpdoc>\w+)\s.*?\s\k<phpdoc>".
    -            ")*?(?P<end>%>|\Z)/sm",        ),
    -    'HIGHLIGHT_STRICT_BLOCK' => array(        0 => true,
    -        1 => true,        2 => true,
    -        3 => true,        4 => true,
    -        5 => true        ),
    -    'TAB_WIDTH' => 4);
    - ?>
    - -

    If you’re remotely familiar with PHP (or even if you’re not), you can see that all that a language file consists of is -a glorified variable assignment. Easy! All a language file does is assign a variable $language_data. Though -still, there’s a lot of indices to that array… but this section is here to break each index down and explain it to you.

    - -

    4.2 Language File Conventions

    - -

    There are several conventions that are used in language files. For ease of use and readability, your language -files should obey the following rules:

    - -
      -
    • Indentation is 4 spaces, not tabs: Use spaces! as editors continiously screw up tabs there should be -no tabs in your documents since it would look differently on every computer otherwise.
    • -
    • Strings are in single quotes: Every string in a language file should be in single quotes (‘), unless you are -specifying a single quote as a quotemark or escape character, in which case they can be in double quotes for -readability; or if you are specifying a REGEXP (see below). This ensures that the language file can be loaded -as fast as possible by PHP as unnecessary parsing can be avoided.
    • -
    • Large arrays are multi-lined: An array with more than three or four values should be broken into multiple -lines. In any case, lines should not be wider than a full-screen window (about 100 chars per line max). -Don’t break the keywords arrays after every keyword.
    • -
    • Ending brackets for multi-lined arrays on a new line: Also with a comma after them, unless the array is -the last one in a parent array. See the PHP language file for examples of where to use commas.
    • -
    • Use GeSHi’s constants: For capatalisation, regular expressions etc. use the GeSHi constants, not -their actual values.
    • -
    • Verbatim header format: Copy the file header verbatim from other language files and modify the values -afterwards. Don’t try to invent own header formats, as your languages else will fail validation!
    • -
    - -

    There are more notes on each convention where it may appear in the language file sections below.

    - -

    4.3 Language File Sections

    - -

    This section will look at all the sections of a language file, and how they relate to the final highlighting result.

    - -

    4.3.1 The Header

    - -

    The header of a language file is the first lines with the big comment and the start of the variable -$language_data:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -2223
    -2425
    -2627
    -2829
    -3031
    -3233
    -3435
    -3637
    -3839
    -4041
    -4243
    -
    <?php
    -/************************************************************************************* * <name-of-language-file.php>
    - * --------------------------------- * Author: <name> (<e-mail address>)
    - * Copyright: (c) 2008 <name> (<website URL>) * Release Version: <GeSHi release>
    - * Date Started: <date started> *
    - * <name-of-language> language file for GeSHi. *
    - * <any-comments...> *
    - * CHANGES * -------
    - * <date-of-release> (<GeSHi release>) *  -  First Release
    - * * TODO (updated <date-of-release>)
    - * ------------------------- * <things-to-do>
    - * *************************************************************************************
    - * *     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 (
    - -

    The parts in angle brackets are the parts that you change for your language file. Everything else must remain the same!

    - -

    Here are the parts you should change:

    - -
      -
    • <name-of-language-file.php> - This should become the name of your language file. Language file names are in -lower case and contain only alphanumeric characters, dashes and underscores. Language files end with .php (which -you should put with the name of your language file, eg language.php)
    • -
    • <name> - Your name, or alias.
    • -
    • <e-mail address> - Your e-mail address. If you want your language file included with GeSHi you must -include an e-mail address that refers to an inbox controlled by you.
    • -
    • <website> - A URL of a website of yours (perhaps to a page that deals with your contribution to GeSHi, or -your home page/blog)
    • -
    • <date-started> - The date you started working on the language file. If you can’t remember, guestimate.
    • -
    • <name-of-language> - The name of the language you made this language file for (probably similar to -the language file name).
    • -
    • <any-comments> - Any comments you have to make about this language file, perhaps on where you got the keywords for, -what dialect of the language this language file is for etc etc. If you don’t have any comments, remove the space for them.
    • -
    • <date-of-release - The date you released the language file to the public. If you simply send it to me for inclusion -in a new GeSHi and don’t release it, leave this blank, and I’ll replace it with the date of the GeSHi release that -it is first added to.
    • -
    • <GeSHi release> - This is the version of the release that will contain the changes you made. -So if you have version 1.0.8 of GeSHi running this will be the next version to be released, e.g. 1.0.8.1.
    • -
    - -

    Everything should remain the same.

    - -

    Also: I’m not sure about the copyright on a new language file. I’m not a lawyer, could someone contact me about -whether the copyright for a new language file should be exclusivly the authors, or joint with me (if included in a -GeSHi release)?

    - -

    4.3.2 The First Indices

    - -

    Here is an example from the php language file of the first indices:

    - -
    PHP code
    1
    -23
    -45
    -6
    'LANG_NAME' => 'PHP',
    -'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),'COMMENT_MULTI' => array('/*' => '*/'),
    -'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,'QUOTEMARKS' => array("'", '"'),
    -'ESCAPE_CHAR' => '\\',
    - -

    The first indices are the first few lines of a language file before the KEYWORDS index. These indices specify:

    - -
      -
    • ‘LANG_NAME’: The name of the language. This name should be a human-readable version of the name -(e.g. HTML 4 (transitional) instead of html4trans)
    • -
    • ‘COMMENT_SINGLE’: An array of single-line comments in your language, indexed by integers starting -from 1. A single line comment is a comment that starts at the marker and goes until the end of the line. These -comments may be any length > 0, and since they can be styled individually, can be used for other things than comments -(for example the Java language file defines “import” as a single line comment). If you are making a language that -uses a ’ (apostrophe) as a comment (or in the comment marker somewhere), use double quotes. e.g.: “’”
    • -
    • ‘COMMENT_MULTI’: Used to specify multiline comments, an array in the form ‘OPEN’ => ‘CLOSE’. Unfortunately, -all of these comments you add here will be styled the same way (an area of improvement for GeSHi 1.2.X). -These comment markers may be any length > 0.
    • -
    • ‘CASE_KEYWORDS’: Used to set whether the case of keywords should be changed automatically as they are found. -For example, in an SQL or BASIC dialect you may want all keywords to be upper case. The accepted values for this are:
    • -
    • GESHI_CAPS_UPPER: Convert the case of all keywords to upper case.
    • -
    • GESHI_CAPS_LOWER: Convert the case of all keywords to lower case.
    • -
    • GESHI_CAPS_NO_CHANGE: Don’t change the case of any keyword.
    • -
    • ‘QUOTEMARKS’: Specifies the characters that mark the beginning and end of a string. This is another example -where if your language includes the ’ string delimiter you should use double quotes around it.
    • -
    • ‘ESCAPE_CHAR’: Specifies the escape character used in all strings. If your language does not have an escape -character then make this the empty string (''). This is not an array! If found, any character after an -escape character and the escape character itself will be highlighted differently, and the character after the -escape character cannot end a string.
    • -
    - -

    In some language files you might see here other indices too, but those are dealt with later on.

    - -

    4.3.3 Keywords

    - -

    Keywords will make up the bulk of a language file. In this part you add keywords for your language, including -inbuilt functions, data types, predefined constants etc etc.

    - -

    Here’s a (shortened) example from the php language file:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -2223
    -2425
    -2627
    -2829
    -3031
    -3233
    -3435
    -3637
    -3839
    -40
    'KEYWORDS' => array(
    -    1 => array(        'as', 'break', 'case', 'do', 'else', 'elseif', 'endif',
    -        'endswitch', 'endwhile', 'for', 'foreach', 'if', 'include',        'include_once', 'require', 'require_once', 'return',
    -        'switch', 'while'        ),
    -    2 => array(        '&lt;/script>', '&lt;?', '&lt;?php', '&lt;script language=',
    -        '?>', 'class', 'default', 'DEFAULT_INCLUDE_PATH', 'E_ALL',        'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_CORE_ERROR',
    -        'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE',        'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING',
    -        'E_WARNING', 'false', 'function', 'new', 'null',        'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR', 'PHP_BINDIR',
    -        'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR', 'PHP_EXTENSION_DIR',        'PHP_LIBDIR', 'PHP_LOCALSTATEDIR', 'PHP_OS',
    -        'PHP_OUTPUT_HANDLER_CONT', 'PHP_OUTPUT_HANDLER_END',        'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR', 'PHP_VERSION',
    -        'true', 'var', '__CLASS__', '__FILE__', '__FUNCTION__',        '__LINE__', '__METHOD__'
    -        ),    3 => array(
    -        'xml_parser_create', 'xml_parser_create_ns',        'xml_parser_free', 'xml_parser_get_option',
    -        'xml_parser_set_option', 'xml_parse_into_struct',        'xml_set_character_data_handler', 'xml_set_default_handler',
    -        'xml_set_element_handler',        'xml_set_end_namespace_decl_handler',
    -        'xml_set_external_entity_ref_handler',        'xml_set_notation_decl_handler', 'xml_set_object',
    -        'xml_set_processing_instruction_handler',        'xml_set_start_namespace_decl_handler',
    -        'xml_set_unparsed_entity_decl_handler', 'yp_all', 'yp_cat',        'yp_errno', 'yp_err_string', 'yp_first',
    -        'yp_get_default_domain', 'yp_master', 'yp_match', 'yp_next',        'yp_order', 'zend_logo_guid', 'zend_version',
    -        'zlib_get_coding_type'        )
    -    ),
    - -

    You can see that the index ‘KEYWORDS’ refers to an array of arrays, indexed by positive integers. In each array, -there are some keywords (in the actual php language file there is in fact many more keywords in the array indexed by 3). -Here are some points to note about these keywords:

    - -
      -
    • Indexed by positive integers: Use nothing else! I may change this in 1.2.X, but for the 1.0.X series, -use positive integers only. Using strings here results in unnecessary overhead degrading performance when -highlighting code with your language file!
    • -
    • Keywords sorted ascending: Keywords should be sorted in ascending order. This is mainly for -readability. An issue with versions before 1.0.8 has been solved, so the reverse sorting order -is no longer required and should thus be avoided. GeSHi itself sorts the keywords internally when -building some of its caches, so the order doesn’t matter, but makes things easier to read and maintain.
    • -
    • Keywords are case sensitive (sometimes): If your language is case-sensitive, the correct casing of the -keywords is defined as the case of the keywords in these keyword arrays. If you check the java language file you -will see that everything is in exact casing. So if any of these keyword arrays are case sensitive, put the -keywords in as their correct case! (note that which groups are case sensitive and which are not is configurable, -see later on). If a keyword group is case insensitive, put the lowercase version of the keyword here -OR in case documentation links require a special casing (other than all lowercase or all uppercase) -the casing required for them use their casing.
    • -
    • Keywords must be in htmlentities() form: All keywords should be written as if they had been -run through the php function htmlentities(). E.g, the keyword is &lt;foo&gt;, not -<foo>
    • -
    • Don’t use keywords to highlight symbols: Just don’t!!! It doesn’t work, and there is seperate support -for symbols since GeSHi 1.0.7.21.
    • -
    • Markup Languages are special cases: Check the html4strict language file for an example: You need to tweak -the Parser control here to tell the surroundings of tagnames. In case of doubt, feel free to ask.
    • -
    - -

    4.3.4 Symbols and Case Sensitivity

    - -

    So you’ve put all the keywords for your language in? Now for a breather before we style them :). Symbols define -what symbols your language uses. These are things like colons, brackets/braces, and other such general punctuation. -No alphanumeric stuff belongs here, just the same as no symbols belong into the keywords section.

    - -

    As of GeSHi version 1.0.7.21 the symbols section can be used in two ways:

    - -
    -
    Flat usage:
    -
    This mode is the suggested way for existing language files and languages that only need few symbols where no -further differentiation is needed or desired. You simply put all the characters in an array under symbols as shown -in the first example below. All symbols in flat usage belong to symbol style group 0.
    - -
    Group usage:
    -
    This is a slightly more enhanced way to provide GeSHi symbol information. To use group you create several subarrays -each containing only a subset of the symbols to highlight. Every array will need to have an unique index thus -you can assign the appropriate styles later.
    -
    - -

    Here’s an example for flat symbol usage

    - -
    PHP code
    1
    -23
    -
    'SYMBOLS' => array(
    -  '(', ')', '[', ']', '{', '}', '!', '@', '|', '&', '+', '-', '*', '/', '%', '=', '<', '>'),
    - -

    which is not too different from the newly introduced group usage shown below:

    - -
    PHP code
    1
    -23
    -45
    -6
    'SYMBOLS' => array(
    -  0 => array('(', ')', '[', ']', '{', '}'),  1 => array('!', '@', '|', '&'),
    -  2 => array('+', '-', '*', '/', '%'),  3 => array('=', '&lt;', '>')
    -),
    - -
    - -
    Note:
    - -

    Please note that versions before 1.0.7.21 will silently ignore this setting.

    - -

    Also note that GeSHi 1.0.7.21 itself had some bugs in Symbol highlighting that could cause - heavily scrambled code output.

    - -
    - -

    The following case sensitivity group alludes to the keywords section: here you can set which keyword groups are case sensitive.

    - -

    In the ‘CASE_SENSITIVE’ group there’s a special key GESHI_COMMENTS which is used to set whether comments are -case sensitive or not (for example, BASIC has the REM statement which while not being case sensitive is still alphanumeric, and -as in the example given before about the Java language file using “import” as a single line comment, this can be -useful sometimes. true if comments are case sensitive, false otherwise. All of the other indices -correspond to indices in the 'KEYWORDS' section (see above).

    - -

    4.3.5 Styles for your Language File

    - -

    This is the fun part! Here you get to choose the colours, fonts, backgrounds and anything else you’d like for your -language file.

    - -

    Here’s an example:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -2223
    -2425
    -2627
    -2829
    -3031
    -3233
    -3435
    -3637
    -3839
    -
    'STYLES' => array(
    -    'KEYWORDS' => array(        1 => 'color: #b1b100;',
    -        2 => 'color: #000000; font-weight: bold;',        3 => 'color: #000066;'
    -        ),    'COMMENTS' => array(
    -        1 => 'color: #808080; font-style: italic;',        2 => 'color: #808080; font-style: italic;',
    -        'MULTI' => 'color: #808080; font-style: italic;'        ),
    -    'ESCAPE_CHAR' => array(        0 => 'color: #000099; font-weight: bold;'
    -        ),    'BRACKETS' => array(
    -        0 => 'color: #66cc66;'        ),
    -    'STRINGS' => array(        0 => 'color: #ff0000;'
    -        ),    'NUMBERS' => array(
    -        0 => 'color: #cc66cc;'        ),
    -    'METHODS' => array(        0 => 'color: #006600;'
    -        ),    'SYMBOLS' => array(
    -        0 => 'color: #66cc66;'        ),
    -    'REGEXPS' => array(        0 => 'color: #0000ff;'
    -        ),    'SCRIPT' => array(
    -        0 => '',        1 => '',
    -        2 => '',        3 => ''
    -        )    ),
    - -

    Note that all style rules should end with a semi-colon! This is important: GeSHi may add extra rules to the rules you -specify (and will do so if a user tries to change your styles on the fly), so the last semi-colon in any stylesheet -rule is important!

    - -

    All strings here should contain valid stylesheet declarations (it’s also fine to have the empty string).

    - -
      -
    • ‘KEYWORDS’: This is an array, from keyword index to style. The index you use is the index you used in -the keywords section to specify the keywords belonging to that group.
    • -
    • ‘COMMENTS’: This is an array, from single-line comment index to style for that index. The index ‘MULTI’ is -used for multiline comments (and cannot be an array). COMMENT_REGEXP use the style given for their key as -if they were single-line comments.
    • -
    • ‘ESCAPE_CHAR’, ‘BRACKETS’ and ‘METHODS’: These are arrays with only one index: 0. You cannot add other indices to -these arrays.
    • -
    • ‘STRINGS’: This defines the various styles for the Quotemarks you defined earlier. If you don’t use -multiple styles for strings there’s only one index: 0. Please also add this index in case no strings are present.
    • -
    • ‘NUMBERS’: This sets the styles used to highlight numbers. The format used here depends on the format used to -set the formats of numbers to highlight. If you just used an integer (bitmask) for numbers, you have to either -specify one key with the respective constant, and\or include a key 0 as a default style. If you used an -array for the number markup, copy the keys used there and assign the styles accordingly.
    • -
    • ‘SYMBOLS’: This provides one key for each symbol group you defined above. If you used the flat usage -make sure you include a key for symbols group 0.
    • -
    • ‘REGEXPS’: This is an array with a style for each matching regex. Also, since 1.0.7.21, you can specify the -name of a function to be called, that will be given the text matched by the regex, each time a match is found. -Note that my testing found that create_function would not work with this due to a PHP bug, so you have to -put the function definition at the top of the language file. Be sure to prefix the function name -with geshi_[languagename]_ as to not conflict with other functions!
    • -
    • ‘SCRIPT’: For languages that use script delimiters, this is where you can style each block of script. For -example, HTML and XML have blocks that begin with < and end with > (i.e. tags) and blocks that begin with & and -end with ; (i.e. character entities), and you can set a style to apply to each whole block. You specify the -delimiters for the blocks below. Note that many languages will not need this feature.
    • -
    - -

    4.3.6 URLs for Functions

    - -

    This section lets you specify a url to visit for each keyword group. Useful for pointing functions at their online -manual entries.

    - -

    Here is an example:

    - -
    PHP code
    1
    -23
    -45
    -6
    'URLS' => array(
    -    1 => '',    2 => '',
    -    3 => 'http://www.php.net/{FNAME}',    4 => ''
    -    ),
    - -

    The indices of this array correspond to the keyword groups you specified in the keywords section. The string {FNAME} -marks where the name of the function is substituted in. So for the example above, if the keyword being highlighted is -“echo”, then the keyword will be a URL pointing to http://www.php.net/echo. Because some languages (Java!) don’t -keep a uniform URL for functions/classes, you may have trouble in creating a URL for that language (though look in the -java language file for a novel solution to it’s problem)

    - -

    4.3.7 Number Highlighting Support

    - -

    If your language supports different formats of numbers (e.g. integers and float representations) and you want -GeSHi to handle them differently you can select from a set of predefined formats.

    - -
    PHP code
    1
    -23
    -4
        'NUMBERS' =>
    -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
    -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
    - -

    All the formats you want GeSHi to recognize are selected via a bitmask that is built by bitwise OR-ing the format constants. -When styling you use these constants to assign the proper styles. A style not assigned will automatically fallback to style group 0.

    - -
    - -
    Note:
    - -

    For a complete list of formats supported by GeSHi have a look into the sources of geshi.php.

    - -
    - -

    If you want to define your own formats for numbers or when you want to group the style for two or more formats you can use the array syntax.

    - -
    PHP code
    1
    -23
    -45
    -67
    -
        'NUMBERS' => array(
    -        1 => GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE,        2 => GESHI_NUMBER_BIN_PREFIX_0B,
    -        3 => GESHI_NUMBER_OCT_PREFIX,        4 => GESHI_NUMBER_HEX_PREFIX,
    -        5 => GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO        ),
    - -

    This creates 5 style groups 1..5 that will highlight each of the formats specified for each group. -Styling of these groups doesn’t use the constants but uses the indices you just defined.

    - -

    Instead of using those predefined constants you also can assign a PCRE that matches a number when using this advanced format.

    - -
    - -
    Note:
    - -

    The extended format hasn’t been exhaustively been tested. So beware of bugs there.

    - -
    - -

    4.3.8 Object Orientation Support

    - -

    Now we’re reaching the most little-used section of a language file, which includes such goodies as object orientation -support and context support. GeSHi can highlight methods and data fields of objects easily, all you need to do is to -tell it to do so and what the “splitter” is between object/method etc.

    - -

    Here’s an example:

    - -
    PHP code
    1
    -2
    'OOLANG' => true,
    -'OBJECT_SPLITTER' => '-&gt;',
    - -

    If your language has object orientation, the value of 'OOLANG' is true, otherwise it is false. If it is object -orientated, in the 'OBJECT_SPLITTER' value you put the htmlentities() version of the “splitter” between -objects and methods/fields. If it is not, then make this the empty string.

    - -

    4.3.9 Using Regular Expressions

    - -

    Regular expressions are a good way to catch any other lexic that fits certain rules but can’t be listed as a keyword. -A good example is variables in PHP: variables always start with either one or two “$” signs, then alphanumeric -characters (a simplification). This is easy to catch with regular expressions.

    - -

    And new to version 1.0.2, there is an advanced way of using regular expressions to catch certain things but highlight -only part of those things. This is particularly useful for languages like XML.

    - -
    - -
    Caution:
    - -

    Regular expressions use the PCRE syntax (perl-style), not the ereg() style!

    - -
    - -

    Here is an example (this time the PHP file merged with the XML file):

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -
    0 => array(
    -    GESHI_SEARCH => '(((xml:)?[a-z\-]+))(=)',    GESHI_REPLACE => '\\1',
    -    GESHI_MODIFIERS => '',    GESHI_BEFORE => '',
    -    GESHI_AFTER => '\\4'    ),
    -1 => array(    GESHI_SEARCH => '(>/?[a-z0-9]*(>)?)',
    -    GESHI_REPLACE => '\\1',    GESHI_MODIFIERS => '',
    -    GESHI_BEFORE => '',    GESHI_AFTER => ''
    -    ),2 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
    - -

    As you can see there are two formats. One is the “simple” format used in GeSHi < 1.0.2, and the other is a more -advanced syntax. Firstly, the simple syntax:

    - -
      -
    • May be in double quotes: To make it easier for those who always place their regular expressions in double quotes, -you may place any regular expression here in double quotes if you wish.
    • -
    • Don’t use curly brackets where possible: If you want to use curly brackets (()) then by all means give it a try, -but I’m not sure whether under some circumstances GeSHi may throw a wobbly. You have been warned! If you want to -use brackets, it would be better to use the advanced syntax.
    • -
    • Don’t use the “everything” regex: (That’s the .*? regex). Use advanced syntax instead.
    • -
    - -

    And now for advanced syntax, which gives you much more control over exactly what is highlighted:

    - -
      -
    • GESHI_SEARCH: This element specifies the regular expression to search for. If you plan to capture the output, -use brackets (()). See how in the first example above, most of the regular expression is in one set of brackets -(with the equals sign in other brackets). You should make sure that the part of the regular expression that is -supposed to match what is highlighted is in brackets.
    • -
    • GESHI_REPLACE: This is what the stuff matched by the regular expression will be replaced with. If you’ve -grouped the stuff you want highlighted into brackets in the GESHI_SEARCH element, then you can use \\number -to match that group, where number is a number corresponding to how many open brackets are between the open -bracket of the group you want highlighted and the start of the GESHI_SEARCH string + 1. This may sound confusing, -and it probably is, but if you’re familiar with how PHP’s regular expressions work you should understand. In the -example above, the opening bracket for the stuff we want highlighted is the very first bracket in the string, so -the number of brackets before that bracket and the start of the string is 0. So we add 1 and get our replacement -string of \\1 (whew!).
    • -
    - -

    If you didn’t understand a word of that, make sure that there are brackets around the string in GESHI_SEARCH -and use \\1 for GESHI_REPLACE ;)

    - -
      -
    • GESHI_MODIFIERS: Specify modifiers for your regular expression. If your regular expression includes the -everything matcher (.*?), then your modifiers should include “s” and “i” (e.g. use ‘si’ for this).
    • -
    • GESHI_BEFORE:Specifies a bracket group that should appear before the highlighted match (this bracketed group will -not be highlighted). Use this if you had to match what you wanted by matching part of your regexp string to something -before what you wanted to highlight, and you don’t want that part to disappear in the highlighted result.
    • -
    • GESHI_AFTER:Specifies a bracket group that should appear after the highlighted match (this bracketed group will -not be highlighted). Use this if you had to match what you wanted by matching part of your regexp string to something -after what you wanted to highlight, and you don’t want that part to disappear in the highlighted result.
    • -
    - -

    Is that totally confusing? Here’s the test for if you’re an android or not: If you found that perfectly understandable -then you’re an android ;). Here’s a better example:

    - -

    Let’s say that I’m making a language, and variables in this language always start with a dollar sign ($), are always -written in lowercase letters and always end with an ampersand (&). eg:

    - -

    $foo& = 'bar'

    - -

    I want to highlight only the text between the $ and the &. How do I do that? With simple regular expressions I can’t, -but with advanced, it’s relatively easy:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -14
    1 => array(
    -    // search for a dollar sign, then one or more of the characters a-z, then an ampersand    GESHI_SEARCH => '(\$)([a-z]+)(&)',
    -    // we wanna highlight the characters, which are in the second bracketed group    GESHI_REPLACE => '\\2',
    -    // no modifiers, since we're not matching the "anything" regex    GESHI_MODIFIERS => '',
    -    // before the highlighted characters should be the first    // bracketed group (always a dollar sign in this example)
    -    GESHI_BEFORE => '\\1',    // after the highlighted characters should be the third
    -    // bracketed group (always an ampersand in this example)    GESHI_AFTER => '\\3'
    -    ),
    - -

    So if someone tried to highlight using my language, all cases of $foo& would turn into:

    - -

    $<span style="color: blue;">foo</span><span style="color: green;">&amp;</span>

    - -

    (which would of course be viewed in a browser to get something like $foo&)

    - -

    4.3.10 Contextual Highlighting and Strict Mode

    - -

    For languages like HTML, it’s good if we can highlight a tag (like <a> for example). But how do we stop -every single “a” in the source getting highlighted? What about for attributes? If I’ve got the word “colspan” in my -text I don’t want that highlighted! So how do you tell GeSHi not to highlight in that case? You do it with “Strict Blocks”.

    - -

    Here is an example:

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -1213
    -1415
    -1617
    -1819
    -2021
    -2223
    -2425
    -2627
    -
    <? /* ... */
    -'STRICT_MODE_APPLIES' => GESHI_MAYBE,'SCRIPT_DELIMITERS' => array(
    -    0 => array(        '<?php' => '?>'
    -        ),    1 => array(
    -        '<?' => '?>'        ),
    -    2 => array(        '<%' => '%>'
    -        ),    3 => array(
    -        '<script language="php">' => '</script>'        )
    -    4 => "/(<\?(?:php)?)(?:'(?:[^'\\\\]|\\\\.)*?'|\"(?:[^\"\\\\]|\\\\.)*?\"|\/\*(?!\*\/).*?\*\/|.)*?(\?>|\Z)/sm",    5 => "/(<%)(?:'(?:[^'\\\\]|\\\\.)*?'|\"(?:[^\"\\\\]|\\\\.)*?\"|\/\*(?!\*\/).*?\*\/|.)*?(%>|\Z)/sm"
    -    ),'HIGHLIGHT_STRICT_BLOCK' => array(
    -    0 => true,    1 => true,
    -    2 => true,    3 => true,
    -    4 => true,    5 => true
    -    )/* ... */ ?>
    - -

    What is strict mode? Strict mode says that highlighting only occurs inside the blocks you specify. You can see from -the example above that highlighting will only occur if the source is inside <?php ... ?> (though note the -GESHI_MAYBE!). Here are some points about strict highlighting:

    - -
      -
    • ‘STRICT_MODE_APPLIES’: This takes three values (all constants): - -
        -
      • GESHI_ALWAYS: Strict mode always applies for all of the blocks you specify. Users of your language -file cannot turn strict mode off. This should be used for markup languages.
      • -
      • GESHI_NEVER: Strict mode is never used. Users of your language file cannot turn strict mode on. Use this -value if there is no such thing as a block of code that would not be highlighted in your language -(most languages, like C, Java etc. use this because anything in a C file should be highlighted).
      • -
      • GESHI_MAYBE: Strict mode *sometimes* applies. It defaults to “off”. Users can turn strict mode on if -they please. If strict mode is off then everything in the source will be highlighted, even things outside -the strict block markers. If strict mode is on then nothing outside strict block markers will be highlighted.
      • -
    • -
    • ‘SCRIPT_DELIMITERS’: This is an array of script delimiters, in the format of the above. The indices are use in the -‘SCRIPT’ part of the styles section for highlighting everything in a strict block in a certain way. -For example, you could set up your language file to make the background yellow of any code inside a strict -block this way. The delimiters are in the form 'OPEN' => 'CLOSE'. Delimiters can be of any -length > 0. Delimiters are not formatted as if they were run through htmlentities()!
    • -
    • ‘HIGHLIGHT_STRICT_BLOCK’: specifies whether any highlighting should go on inside each block. Most of -the time this should be true, but for example, in the XML language file highlighting is turned off for -blocks beginning with <!DOCTYPE and ending with >. However, you can still -style the overall block using the method described above, and the XML language file does just that.
    • -
    - -
    - -
    Note:
    - -

    The delimiters should be in reverse alphabetical order. Note that in the above example, <?php - comes before <?.

    - -
    - -

    Since GeSHi 1.0.8 instead of specifying an array with starter and ender you may also provide a regular expression -that matches the full block you wish to highlight. If the regular expression match starts at the same position -as a previous array declaration the Regexp match is taken. This is to allow for a fall-back when a preg_match -doesn’t quite work as expected so you still get reasonably well results.

    - -

    If you didn’t get this, you might want to look into the PHP or HTML language files as this feature is used there -to fix some issues that have been there for about 3 years.

    - -
    - -
    Caution:
    - -

    For PHP versions <4.3.3 Strict Block Regexps are completely ignored due to problems in those version - that would cause loads of warning messages otherwise.

    - -
    - -

    4.3.11 Special Parser Settings (Experimental)

    - -

    Sometimes it is necessary for a language to render correctly to tweak some of the assumptions GeSHi usually makes to match the behaviour your language expects. -To achieve this there is an experimental section called 'PARSER_CONTROL' which is optional and should be used only if necessary. -With the help of this section some internal parameters of GeSHi can be set which are not overrideable by the API and thus their use should be limited as much as possible.

    - -

    The syntax of the PARSER_CONTROL basically resembles an array structure simular to the one found in the rest of the language file. All subsections of the PARSER_CONTROL are optional. -If a given setting isn’t present the usual default values of GeSHi are used. -No validation of settings is performed for these settings. Also note that unknown settings are silently ignored.

    - -
    - -
    Caution:
    - -

    All PARSER_CONTROL settings are experimental and subject to change. - So if you need a special setting in a public language file you should consider requesting it upstream. - This is also the reason why documentation on these settings will only cover broad usage information as the underlying implementation might change without further notice.

    - -
    - -

    One of the most common reasons why you might want to use the PARSER_CONTROL settings is to tweak what characters are allowed to surround a keyword. -Usually GeSHi checks for a fixed set of characters like brackets and common symbols that denote the word boundary for a keyword. -If this set conflicts with your language (e.g. - is allowed inside a keyword) or you want to limit the usage of a keyword to certain areas (e.g. for HTML tag names only match after <) you can change those conditions here.

    - -

    Keyword boundary rules can either be set globally (directly within the PARSER_CONTROL’s KEYWORDS section or on a per-group basis. -E.g. the following sample from the HTML language file sets different settings for keyword matching only for Keyword Group 2 and leaves the other groups alone.

    - -
    PHP code
    1
    -23
    -45
    -67
    -8
        'PARSER_CONTROL' => array(
    -        'KEYWORDS' => array(            2 => array(
    -                'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',                'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
    -            )        )
    -    )
    - -
    - -
    Note:
    - -

    The name 'DISALLOWED_BEFORE' and 'DISALLOWED_AFTER' might sound confusing at first, since they don’t define what to prevent, but what to match in order to find a keyword. - The reason for this strange naming is based in the original implementation of this feature when Nigel implemented this in the old parser statically. - When this implementation was brought out via the PARSER_CONTROL settings the original naming wasn’t altered since at that time this really was a blacklist of characters. - Later on this implementation was changed from a blacklist of characters to a part of a PCRE regexp, but leaving the name. - The naming might be subject to change though.

    - -
    - -

    Another option you can change since GeSHi 1.0.8.3 is whether to treat spaces within keywords as literals (only a single space as given) or if the space should match any whitespace at that location. -The following code will enable this behaviour for the whole keyword set. As said above you can choose to enable this for single keyword groups only though.

    - -
    PHP code
    1
    -23
    -45
    -
        'PARSER_CONTROL' => array(
    -        'KEYWORDS' => array(            'SPACE_AS_WHITESPACE' => true
    -        )    ),
    - -

    Another option of interest might be disabling certain features for a given language. -This might come in handy if the language file you are working on doesn’t support a given function or highlighting certain aspects won’t work properly or would interfere with custom implementations using regular expressions.

    - -
    PHP code
    1
    -23
    -45
    -67
    -89
    -1011
    -12
        'PARSER_CONTROL' => array(
    -        'ENABLE_FLAGS' => array(            'ALL' => GESHI_NEVER,
    -            'NUMBERS' => GESHI_NEVER,            'METHODS' => GESHI_NEVER,
    -            'SCRIPT' => GESHI_NEVER,            'SYMBOLS' => GESHI_NEVER,
    -            'ESCAPE_CHAR' => GESHI_NEVER,            'BRACKETS' => GESHI_NEVER,
    -            'STRINGS' => GESHI_NEVER,        )
    -    )
    - -

    Inside the 'ENABLE_FLAGS' section follows an array of 'name'=>value pairs. -Valid names are the sections below the 'STYLES' section (well, not exactly, but you can look there for what the features are called inside GeSHi). -Valid values are the GeSHi constants GESHI_NEVER (don’t process this feature), GESHI_ALWAYS (always process this feature, ignore the user) and GESHI_MAYBE (listen to the user if he want’s this highlighted). -The value GESHI_MAYBE is the default one and thus needs not to be set explicitely.

    - -

    Another setting available through the PARSER_CONTROL settings is the possibility to limit the allowed characters before an single line comment.

    - -
    PHP code
    1
    -23
    -45
    -
        'PARSER_CONTROL' => array(
    -        'COMMENTS' => array(            'DISALLOWED_BEFORE' => '$'
    -        )    )
    - -

    With the current implementation the DISALLOWED_BEFORE COMMENT-specific setting is a list of characters. But this is subject to change.

    - -
    - -
    Note:
    - -

    There is no 'DISALLOWED_AFTER' setting with the 'COMMENTS'-PARSER_CONTROL.

    - -
    - -

    Another PARSER_CONTROL setting for the environment around certain syntactic constructs refers to the handling of object-oriented languages.

    - -
    PHP code
    1
    -23
    -45
    -67
    -
        'PARSER_CONTROL' => array(
    -        'OOLANG' => array(            'MATCH_BEFORE' => '',
    -            'MATCH_AFTER' => '[a-zA-Z_][a-zA-Z0-9_]*',            'MATCH_SPACES' => '[\s]*'
    -        )    )
    - -
    - -
    Caution:
    - -

    Please note that the settings discussed in this section are experimental and might be changed, removed or altered in their meaning at any time.

    - -
    - -

    4.3.12 Tidying Up

    - -

    All language files should end with:

    - -
    PHP code
    1
    -23
    -
    );
    - ?>
    - -

    That is the string content "\n);\n?>\n".

    - -
    - -
    Caution:
    - -

    Make sure that there is EXACTLY one linebreak character at the end. If you accidentially include more - you might end up with messages like “Headers already sent”.

    - -
    - -

    4.4 Validating your language file

    - -

    Since GeSHi 1.0.8 there is a new script langcheck.php in the contrib directory that scans all -language files it finds in the geshi/ subdirectory of the GeSHi installation for mistakes.

    - -

    Please make sure that your language does not contain any mistakes that this script shows you when sending in -your language file for inclusion into the official release as this saves work for us when including your file. -Also you can be sure your language file will work as expected once your language file validates correctly.

    - -

    Please note that not all of the language files shipped with GeSHi are fully valid yet, but we’re working on it -and are happy about every patch we get!

    - -

    5 Method/Constant Reference

    - -

    I’m afraid I have been lying for a little while about this now! Since 1.0.7 I have been including a phpdoc API for -the sourcecode in the api directory, but have forgot to update the documentation! However, it is available, -and may assist you in coding, especially for plugin coders.

    - -
    - -

    That’s all, folks!

    - -

    I’ve improved the documentation greatly from version 1.0.1, but there may still be problems with it, or it may still -be confusing for you. Or perhaps I was just plain wrong about one point! If so, contact me and I’ll do my best to sort it out.

    - -

    In case you were wondering, I’ve finished development of the 1.0.X thread of GeSHi. The only releases I’ll make in this -thread will be of the bug-fix/add language files type. In particular, version 1.0.2 was a “concept” release - testing -how far I could take the highlighting idea (as well as ideas from others).

    - -

    I’m planning a code rewrite for 1.2.X, which will be based on a new engine - a “psuedo-tokenizer” engine. Hopefully -it will massively reduce the server load and time taken (by almost eliminating regexps), while providing -superior highlighting. But fear not! The interface and method names should all remain the same ^_^ (though I can’t -say the same for language files!)

    - -

    And finally, a couple of people have been asking me: how did you generate that documentation? The amazing answer is: my -brain. And yes, it took a long time, and I don’t recommend doing it this way. And yes, you can borrow the styles if -you like, though flick me an e-mail if you do.

    - -

    Anyway, enough blather from me. Get GeSHi working for you already! :D

    - -
    - -
    -
    Authors:
    -
    © 2004 - 2007 Nigel McNie
    - -
    © 2007 - 2012 Benny Baumann
    - -
    © 2008 - 2009 Milian Wolff
    - -
    GeSHi Website:
    -
    http://qbnz.com/highlighter
    -
    - -
    - -
    -
    -
      - -
    1. -

      The PRE header (see The Code Container) is not valid HTML, you might want -to use one of the other header types instead. 

      -
    2. - -
    3. -

      Support is granted for PHP 4.3.0 and above, but especially 4.3.x cannot be guaranteed to -work due to a lack of test systems. If you are forced to use such old PHP versions complain at your hoster or -contact us if you find compatibility issues so we can try to resolve them. It’s only PHP 4.4.X and above that -is verified to work. 

      -
    4. - -
    5. -

      I am no longer working on this MOD, however if someone else wants to they can contact me for more -information. 

      -
    6. - -
    7. -

      Available as plugin only. In addition, some of the other entries mentioned -here may only have GeSHi available as a plugin. 

      -
    8. - -
    -
    - - \ No newline at end of file diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt b/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt deleted file mode 100644 index a40c7552..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt +++ /dev/null @@ -1,1741 +0,0 @@ -[NOTE: This documentation has simply been copy-pasted from the HTML form and is NOT up to date, I recommend you -read that instead] - -GeSHi Documentation -Version 1.0.7.22 - -Author: Nigel McNie, Benny Baumann -Copyright: © 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann -Email: nigel@geshi.org, BenBE@omorphia.de -GeSHi Website: http://qbnz.com/highlighter - -This is the documentation for GeSHi - Generic Syntax Highlighter. The most modern version of this document is available on the web - go to http://qbnz.com/highlighter/documentation.php to view it. - -Any comments, questions, confusing points? Please contact me! I need all the information I can get to make the use of GeSHi and everything related to it (including this documentation) a breeze. -Contents - - * 1. Introduction - o 1.1 Features - o 1.2 About GeSHi - o 1.3 Credits - o 1.4 Feedback - * 2. The Basics - o 2.1 Getting GeSHi - o 2.2 Installing GeSHi - + 2.2.1 Requirements - + 2.2.2 Extracting GeSHi - + 2.2.3 Installation - o 2.3 Basic Usage - * 3. Advanced Features - o 3.1 The Code Container - o 3.2 Line Numbers - + 3.2.1 Enabling Line Numbers - + 3.2.2 Styling Line Numbers - + 3.2.3 Choosing a Start Number - o 3.3 Using CSS Classes - + 3.3.1 Enabling CSS Classes - + 3.3.2 Setting the CSS Class/ID - + 3.3.3 Getting the Stylesheet - + 3.3.4 Using an External Stylesheet - o 3.4 Changing Styles - + 3.4.1 The Overall Styles - + 3.4.2 Line Number Styles - + 3.4.3 Setting Keyword Styles - + 3.4.4 Setting Comment Styles - + 3.4.5 Setting Other Styles - o 3.5 Case Sensitivity and Auto Casing - + 3.5.1 Auto Caps/Nocaps - + 3.5.2 Setting Case Sensitivity - o 3.6 Changing the Source/Language/Path/Charset - + 3.6.1 Changing the Source Code - + 3.6.2 Changing the Language - + 3.6.3 Changing the Path - + 3.6.4 Changing the Character Set - + 3.6.5 Using load_from_file to change the language and source code - o 3.7 Error Handling - o 3.8 Disabling Styling of Some Lexics - o 3.9 Setting the Tab Width - o 3.10 Using Strict Mode - o 3.11 Adding/Removing Keywords - + 3.11.1 Adding a Keyword - + 3.11.2 Removing a Keyword - + 3.11.3 Adding a Keyword Group - + 3.11.4 Removing a Keyword Group - o 3.12 Headers and Footers for your code - + 3.12.1 Keyword Substitution - + 3.12.2 Setting Header Content - + 3.12.3 Setting Footer Content - + 3.12.4 Styling Header Content - + 3.12.5 Styling Footer Content - o 3.13 Keyword URLs - + 3.13.1 Setting a URL for a Keyword Group - + 3.13.2 Disabling URLs for a Keyword Group - + 3.13.3 Disabling all URLs for Keywords - + 3.13.4 Styling Links - + 3.13.5 Setting the Link Target - o 3.14 Using Contextual Importance - o 3.15 Highlighting Special Lines "Extra" - + Specifying the Lines to Highlight Extra - + Styles for the Highlighted Lines - o 3.16 Adding IDs to Each Line - o 3.17 Getting the Time of Styling - * 4 Language Files - o 4.1 An Example Language File - o 4.2 Language File Conventions - o 4.3 Language File Sections - + 4.3.1 The Header - + 4.3.2 The First Indices - + 4.3.3 Keywords - + 4.3.4 Symbols and Case Sensitivity - + 4.3.5 Styles for your Language Files - + 4.3.6 URLs for Functions - + 4.3.7 Object Orientation Support - + 4.3.8 Using Regular Expressions - + 4.3.9 Contextual Highlighting and Strict Mode - + 4.3.10 Tidying Up - * 5 Method/Constant Reference - -1: Introduction -Top | Contents | Next | Previous - -GeSHi is exactly what the acronym stands for: a Generic Syntax Highlighter. As long as you have a language file for almost any computer language - whether it be a scripting language, object orientated, markup or anything in between - GeSHi can highlight it! GeSHi is extremely customisable - the same source can be highlighted multiple times in multiple ways - the same source even with a different language. GeSHi outputs XHTML strict compliant code*, and can make use of CSS to save on the amount of output. And what is the cost for all of this? You need PHP. That's all! - -*Most of the time. Some languages do not output XHTML strict code, and using line numbers with the PRE header is not legal either. These problems will be fixed in 1.2. -1.1: Features -Top | Contents | Next | Previous - -Here are some of the standout features of GeSHi: - - * Programmed in PHP: GeSHi is coded entirely in PHP. This means that where ever you have PHP, you can have GeSHi! Almost any free webhost supports PHP, and GeSHi works fine with PHP > 4.3.0*. - * Support for many languages: GeSHi comes with about 100 languages, including PHP, HTML, CSS, Java, C, Lisp, XML, Perl, Python, ASM and many more! - * XHTML compliant output: GeSHi produces XHTML compliant output, using stylesheets, so you need not worry about GeSHi ruining your claims to perfection in the standards department ;) - * Highly customisable: GeSHi allows you to change the style of the output on the fly, use CSS classes or not, use an external stylesheet or not, use line numbering, change the case of output keywords... the list goes on and on! - * Flexible: Unfortunately, GeSHi is quite load/time intensive for large blocks of code. However, you want speed? Turn off any features you don't like, pre-make a stylesheet and use CSS classes to reduce the amount of output and more - it's easy to strike a balance that suits you. - -This is just a taste of what you get with GeSHi - the best syntax highlighter for the web in the world! - -*Support is granted for PHP 4.3.0 and above, but especially 4.3.x cannot be guaranteed to work due to a lack of test systems. If you are forced to use such old PHP versions complain at your hoster or contact us if you find compatibility issues so we can try to resolve them. It's only PHP 4.4.X and above that is verified to work. -1.2: About GeSHi -Top | Contents | Next | Previous - -GeSHi started as a mod for the phpBB forum system, to enable highlighting of more languages than the available (which can be roughly estimated to exactly 0 ;)). However, it quickly spawned into an entire project on its own. But now it has been released, work continues on a mod for phpBB* - and hopefully for many forum systems, blogs and other web-based systems. - -*I am no longer working on this MOD, however if someone else wants to they can contact me for more information. - -Several systems are using GeSHi now, including: - - * Dokuwiki - An advanced wiki engine - * gtk.php.net - Their manual uses GeSHi for syntax highlighting - * WordPress - A powerful blogging system* - * PHP-Fusion - A constantly evovling CMS - * SQL Manager - A Postgres DBAL - * Mambo - A popular open source CMS - * MediaWiki - A leader in Wikis* - * TikiWiki - A megapowerful Wiki/CMS - * TikiPro - Another powerful Wiki based on Tikiwiki - * RWeb - A site-building tool - -* Available as plugin only. In addition, some of the other entries mentioned here may only have GeSHi available as a plugin. - -GeSHi is the original work of Nigel McNie. The project was later handed over to Benny Baumann. Others have helped with aspects of GeSHi also, they're mentioned in the THANKS file. -1.3: Credits -Top | Contents | Next | Previous - -Many people have helped out with GeSHi, whether by creating language files, submitting bug reports, suggesting new ideas or simply pointing out a new idea or something I'd missed. All of these people have helped to build a better GeSHi, you can see them in the THANKS file. - -Do you want your name on this list? Why not make a language file, or submit a valid bug? Or perhaps help me with an added feature I can't get my head around, or suggest a new feature, or even port GeSHi to anothe language? There's lots you can do to help out, and I need it all :) -1.4: Feedback -Top | Contents | Next | Previous - -I need your feedback! ANYthing you have to say is fine, whether it be a query, congratulations, a bug report or complaint, I don't care! I want to make this software the best it can be, and I need your help! You can contact me in the following ways: - - * E-mail: nigel@geshi.org - * Forums: Sourceforge.net Forums or GeSHi home forums - -Remember, any help I am grateful for :) -2: The Basics -Top | Contents | Next | Previous - -In this section, you'll learn a bit about GeSHi, how it works and what it uses, how to install it and how to use it to perform basic highlighting. -2.1: Getting GeSHi -Top | Contents | Next | Previous - -If you're reading this and don't have GeSHi, that's a problem ;). So, how do you get your hands on it? Visit http://qbnz.com/highlighter/downloads.php to obtain the latest version. -2.2: Installing GeSHi -Top | Contents | Next | Previous - -Installing GeSHi is a snap, even for those most new to PHP. There's no tricks involved. Honest! -2.2.1: Requirements -Top | Contents | Next | Previous - -GeSHi requires the following to be installable: - - * PHP. It's untested with anything other below 4.4.X. I hope to extend this range soon. I see no reason why it won't work with any version of PHP above 4.3.0. - * Approximately 2 megabytes of space. The actual script is small - around 150K - but most of the size comes from the large number of language files (over 100!). If you're pushed for space, make sure you don't upload to your server the docs/ or contrib/ directory, and you may want to leave out any language files that don't take your fancy either. - -As you can see, the requirements are very small. If GeSHi does NOT work for you in a particular version of PHP, let me know why and I'll fix it. - -Packages come in .zip, .tar.gz and .tar.bz2 format, so there's no complaining about whether it's available for you. *nix users probably want .tar.gz or .tar.bz2 and windows users probably want .zip. -2.2.2: Extracting GeSHi -Top | Contents | Next | Previous - -To extract GeSHi in Linux (.tar.gz): - - 1. Open a shell - 2. cd to the directory where the archive lies - 3. Type tar -xzvf [filename] where [filename] is the name of the archive (typically GeSHi-1.X.X.tar.gz) - 4. GeSHi will be extracted to its own directory - -To extract GeSHi in Windows (.zip): - - 1. Open Explorer - 2. Navigate to the directory where the archive lies - 3. Extract the archive. The method you use will depend on your configuration. Some people can right-click upon the archive and select "Extract" from there, others may have to drag the archive and drop it upon an extraction program. - -To extract from .zip you'll need an unzipping program - unzip in Linux, or Winzip, Winrar or similar for Windows. -2.2.3: Installation -Top | Contents | Next | Previous - -GeSHi is nothing more than a PHP class with related language support files. Those of you familiar with PHP can then guess how easy the installation will be: simply copy it into your include path somewhere. You can put it wherever you like in this include path. I recommend that you put the language files in a subdirectory of your include path too - perhaps the same subdirectory that geshi.php is in. Remember this path for later. - -If you don't know what an include path is, don't worry. Simply copy GeSHi to your webserver. So for example, say your site is at http://mysite.com/myfolder, you can copy GeSHi to your site so the directory structure is like this: - -http://mysite.com/myfolder/geshi/[language files] -http://mysite.com/myfolder/geshi.php - -Or you can put it in any subdirectory you like: - -http://mysite.com/myfolder/includes/geshi/[language files] -http://mysite.com/myfolder/includes/geshi.php - -Caution: - -When using GeSHi on a live site, the only directory required is the geshi/ subdirectory. Both contrib/ and docs/ are worthless, and furthermore, as some people discovered, one of the files in contrib had a security hole (fixed as of 1.0.7.3). I suggest you delete these directories from any live site they are on. -2.3: Basic Usage -Top | Contents | Next | Previous - -Use of GeSHi is very easy. Here's a simple example: -// -// Include the GeSHi library -// -include_once('geshi.php'); - -// -// Define some source to highlight, a language to use -// and the path to the language files -// -$source = '$foo = 45; -for ( $i = 1; $i < $foo; $i++ ) -{ - echo "$foo
    \n"; - --$foo; -}'; -$language = 'php'; -// -// Create a GeSHi object -// -$geshi =& new GeSHi($source, $language); - -// -// And echo the result! -// -echo $geshi->parse_code(); - -As you can see, there's only three really important lines: -include_once('geshi.php'); - -This line includes the GeSHi class for use -$geshi = new GeSHi($source, $language); - -This line creates a new GeSHi object, holding the source and the language you want to use for highlighting. -echo $geshi->parse_code(); - -This line spits out the result :) - -So as you can see, simple usage of GeSHi is really easy. Just create a new GeSHi object and get the code! - -Since version 1.0.2, there is a function included with GeSHi called geshi_highlight. This behaves exactly as the php function highlight_string behaves - all you do is pass it the language you want to use to highlight and the path to the language files as well as the source. Here are some examples: -// Simply echo the highlighted code -geshi_highlight($source, 'php', $path); - -// Get the code back, for use later -$code = geshi_highlight($source, 'java', $path, true) - -// Check if there is an error with parsing this code -ob_start(); -$result = geshi_highlight($source, 'perl', $path); -$code = ob_get_contents(); -ob_end_clean(); -if ( !$result ) -{ - // There was an error with highlighting... -} -else -{ - // All OK :) -} - -However, these are really simple examples and doesn't even begin to cover all the advanced features of GeSHi. If you want to learn more, continue on to section 3: Advanced Features. -3: Advanced Features -Top | Contents | Next | Previous - -This section documents the advanced features of GeSHi - strict mode, using CSS classes, changing styles on the fly, disabling highlighting of some things and more. - -In this section there are many code snippets. For all of these, you should assume that the GeSHi library has been included, and a GeSHi object has been created and is referenced by the variable $geshi. Normally, the source, language and path used are arbitary. -3.1 The Code Container -Top | Contents | Next | Previous - -The Code Container has a fundamental effect on the layout of your code before you even begin to style. What is the Code Container? It's the bit of markup that goes around your code to contain it. By default your code is surrounded by a
    , but you can also specify a 
    . - -The
     header is the default. If you're familiar with HTML you'll know that whitespace is rendered "as is" by a 
     element. The advantage for you is that if you use 
     the whitespace you use will appear pretty much exactly how it is in the source, and what's more GeSHi won't have to add a whole lot of 
    's and non-breaking spaces ( ) to your code to indent it. This saves you source code (and your valuable visitors waiting time and your bandwidth). - -But if you don't like
     or it looks stupid in your browser no matter what styles you try to apply to it or something similar, you might want to use a 
    instead. A
    will result in more source - GeSHi will have to insert whitespace markup - but in return you can wrap long lines of code that would otherwise have your browser's horizontal scrollbar appear. Of course with
    you can *not* wrap lines if you please. The highlighter demo at the GeSHi home page uses the
    approach for this reason. - -At this stage there isn't an option to wrap the code in tags (unless you use the function geshi_highlight), partly because of the inconsistent and unexpected ways stuff in tags is highlighted. Besides, is an inline element. But this may become an option in future versions. - -As of GeSHi 1.0.7.2 there is a new header type, that specifies that the code should not be wrapped in anything at all. - -Another requested addition has been made in GeSHi 1.0.7.20 to force GeSHi to create a block around the highlighted source even if this wasn't necessary, thus styles that are applied to the output of GeSHi can directly influence the code only even if headers and footers are present. - -To change/set the header to use, you call the set_header_type() method: -$geshi->set_header_type(GESHI_HEADER_DIV); -// or... -$geshi->set_header_type(GESHI_HEADER_PRE); // or... -$geshi->set_header_type(GESHI_HEADER_NONE); - -Those are the only three arguments you should pass to set_header_type. Passing anything else may cause inconsistencies in what is used as the Code Container (although it *should* simply use a
    ). Better not to risk it.
    -Note:
    -
    -GESHI_HEADER_DIV, GESHI_HEADER_PRE and GESHI_HEADER_NONE are constants, so don't put them in strings!
    -Caution:
    -
    -The default styles for the 
     and 
    will be different, especially if you use line numbers!. I have found that a
     results in code that is smaller than for that of a 
    , you should rectify this difference by using set_overall_style() if you need to. But be aware of this difference for if you are changing the header type! -3.2: Line Numbers -Top | Contents | Next | Previous - -GeSHi has the ability to add line numbers to your code (see the demo available at http://qbnz.com/highlighter/demo.php to see what can be achieved). Line numbers are a great way to make your code look professional, especially if you use the fancy line numbers feature. -3.2.1: Enabling Line Numbers -Top | Contents | Next | Previous - -To highlight a source with line numbers, you call the enable_line_numbers() method: -$geshi->enable_line_numbers($flag); - -Where $flag is one of the following: - - * GESHI_NORMAL_LINE_NUMBERS - Use normal line numbering - * GESHI_FANCY_LINE_NUMBERS - Use fancy line numbering - * GESHI_NO_LINE_NUMBERS - Disable line numbers (default) - -Normal line numbers means you specify a style for them, and that style gets applied to all of them. Fancy line numbers means that you can specify a different style for each nth line number. You change the value of n (default 5): -$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 37); - -The second parameter is not used in any other mode. Setting it to 0 is the same as simply using normal line numbers. Setting it to 1 applies the fancy style to every line number. -Note: - -The values above are CONSTANTS - so don't put them in strings! -3.2.2 Styling Line Numbers -Top | Contents | Next | Previous - -As of GeSHi 1.0.2, line numbers are added by the use of ordered lists. This solves the old issues of line number styles inheriting from styles meant for the code. Also, this solves an important issue about selecting code. For example, line numbers look nice, but when you go to select the code in your browser to copy it? You got the line numbers too! Not such a good thing, but thankfully this issue is now solved. What is the price? Unfortunately the whole way that styles are inherited/used has changed for those of you who were familiar with 1.0.1, and there is quite a bit more HTML involved. So think carefully about these things before you enable line numbers. - -Now, onto how to style line numbers: - -Styles are set for line numbers using the set_line_style() method: -$geshi->set_line_style('background: #fcfcfc;'); - -If you're using Fancy Line Numbers mode, you pass a second string for the style of the nth line number: -$geshi->set_line_style('background: #fcfcfc;', 'background: #f0f0f0;'); - -The second style will have no effect if you're not using Fancy Line Numbers mode. - -By default, the styles you pass overwrite the current styles. Add a boolean "true" after the styles you specify to combine them with the current styles: -$geshi->set_line_style('background: red;', true); -// or, for fancy line numbers -$geshi->set_line_style('background: red;', 'background: blue;', true); -Note: - -Due to a bug with Firefox the issue that should have been fixed with 1.0.2 has reappeared in another form as Firefox includes extra text\markup into plaintext versions of webpage copies. This can sometimes be useful (actually it's used to get the plaintext version of this documentation), but more often is quite annoying. Best practice so far is to either not use line numbers, or offer the visitor of your page a plaintext version of your source. To learn more have a look at the SF.net BugTracker Issue #1651996. This will hopefully be fixed in GeSHi version 1.2 or as soon as Firefox provides webdevelopers with adequate ways to control this feature - whichever comes first! -Caution: - -When you set line number styles, the code will inherit those styles! This is the main issue to come out of the 1.0.2 release. If you want your code to be styled in a predictable manner, you'll have to call the set_code_style() method to rectify this problem. - -Note also that you cannot apply background colours to line numbers unless you use set_overall_style(). Here's how you'd style: - - 1. Use set_overall_style() to style the overall code block. For example, you can set the border style/colour, any margins and padding etc. using this method. In addition: set the background colour for all the line numbers using this method. - 2. Use set_line_style() to style the foreground of the line numbers. For example, you can set the colour, weight, font, padding etc. of the line numbers using this method. - 3. Use set_code_style() to explicitly override the styles you set for line numbers using set_line_style. For example, if you'd set the line numbers to be bold (or even if you'd only set the fancy line number style to be bold), and you didn't actually want your code to be bold, you'd make sure that font-weight: normal; was in the stylesheet rule you passed to set_code_style - -This is the one major change from GeSHi 1.0.1 - make sure you become familiar with this, and make sure that you check any code you have already styled with 1.0.1 when you upgrade to make sure nothing bad happens to it. -3.2.3: Choosing a Start Number -Top | Contents | Next | Previous - -As of GeSHi 1.0.2, you can now make the line numbers start at any number, rather than just 1. This feature is useful if you're highlighting code from a file from around a certain line number in that file, as an additional guide to those who will view the code. You set the line numbers by calling the start_line_numbers_at() method: -$geshi->start_line_numbers_at($number); - -$number must be a positive integer (or zero). If it is not, GeSHi will convert it anyway. - -If you have not enabled line numbers, this will have no effect. -Caution: - -Although I'd like GeSHi to have XHTML strict compliance, this feature will break compliancy (however transitional compliancy remains). This is because the only widely supported way to change the start value for line numbers is by using the start="number" attribute of the
      tag. Although CSS does provide a mechanism for doing this, it is only supported in Opera versions 7.5 and above (not even Firefox supports this). -3.3: Using CSS Classes -Top | Contents | Next | Previous - -Using CSS to highlight your code instead of in-lining the styles is a definate bonus. Not only is it more compliant (the w3c is deprecating the style attribute in XHTML 2.0) but it results in far less outputted code - up to a whopping 90% saving - which makes a *huge* difference to those unlucky of us on modems! -3.3.1: Enabling CSS Classes -Top | Contents | Next | Previous - -By default, GeSHi doesn't use the classes, so it's easy just to whack out some highlighted code if you need without worrying about stylesheets. However, if you're a bit more organised about it, you should use the classes ;). To turn the use of classes on, you call the enable_classes() method: -$geshi->enable_classes(); - -If you want to turn classes OFF for some reason later: -$geshi->enable_classes(false); - -If classes are enabled when parse_code() is called, then the resultant source will use CSS classes in the output, otherwise it will in-line the styles. The advantages of using classes are great - the reduction in source will be very noticeable, and what's more you can use one stylesheet for several different highlights on the same page. In fact, you can even use an external stylesheet and link to that, saving even more time and source (because stylesheets are cached by browsers). -Note: - -There have been problems with inline styles and the Symbol Highlighting added in 1.0.7.21. If you can you should therefore turn CSS classes ON to avoid those issues. -Caution: - -This should be the very first method you call after creating a new GeSHi object! That way, various other methods can act upon your choice to use classes correctly. In theory, you could call this method just before parsing the code, but this may result in unexpected behaviour. -3.3.2: Setting the CSS class and ID -Top | Contents | Next | Previous - -You can set an overall CSS class and id for the code. This is a good feature that allows you to use the same stylesheet for many different snippets of code. You call set_overall_class() and set_overall_id to accomplish this: -$geshi->set_overall_class('mycode'); -$geshi->set_overall_id('dk48ck'); - -The default classname is the name of the language being used. This means you can use just the one stylesheet for all sources that use the same language, and incidentally means that you probably won't have to call these methods too often. - -CSS IDs are supposed to be unique, and you should use them as such. Basically, you can specify an ID for your code and then use that ID to highlight that code in a unique way. You'd do this for a block of code that you expressly wanted to be highlighted in a different way (see the section below on gettting the stylesheet for your code for an example). -3.3.3: Getting the stylesheet for your code -Top | Contents | Next | Previous - -The other half of using CSS classes is getting the stylesheet for use with the classes. GeSHi makes it very easy to get a stylesheet for your code, with one easy method call: -$geshi->enable_classes(); - -// Here we have code that will spit out a header for -// a stylesheet. For example: - -echo ' -Code - -'; - -The get_stylesheet() method gets the stylesheet for your code in one easy call. All you need to do is output it in the correct place. As you can also see, you don't even have to enable class usage to get the stylesheet nessecary either - however not enabling classes but using the stylesheet may result in problems later. - -By default, get_stylesheet() tries to echo the least amount of code possible. Although currently it doesn't check to see if a certain lexic is even in the source, you can expect this feature in the future. At least for the present however, if you explicitly disable the highlighting of a certain lexic, or disable line numbers, the related CSS will not be outputted. This may be a bad thing for you perhaps you're going to use the stylesheet for many blocks of code, some with line numbers, others with some lexic enabled where this source has it disabled. Or perhaps you're building an external stylesheet and want all lexics included. So to get around this problem, you do this: -$geshi->get_stylesheet(false); - -This turns economy mode off, and all of the stylesheet will be outputted regardless. - -Now lets say you have several snippets of code, using the same language. In most of them you don't mind if they're highlighted the same way (in fact, that's exactly what you want) but in one of them you'd like the source to be highlighted differently. Here's how you can do that: -// assume path is the default "geshi/" relative to the current directory -$geshi1 = new GeSHi($source1, $lang); -$geshi2 = new GeSHi($source2, $lang); -$geshi3 = new GeSHi($source3, $lang); - -// Turn classes on for all sources -$geshi1->enable_classes(); -$geshi2->enable_classes(); -$geshi3->enable_classes(); - -// Make $geshi3 unique -$geshi3->set_overall_id('different'); - -// -// Methods are called on $geshi3 to change styles... -// - -echo ' -Code - -'; - - -echo 'Code snippet 1:'; -echo $geshi1->parse_code(); -echo 'Code snippet 2 (same highlighting as 1):'; -echo $geshi2->parse_code(); -echo 'Code snippet 3 (DIFFERENT highlighting):'; -echo $geshi3->parse_code(); - -echo ''; - -Before version 1.0.2, you needed to set the class of the code you wanted to be unique to the empty string. This limitation has been removed in version 1.0.2 - if you set the ID of a block of code, all styling will be done based on that ID alone. -3.3.4: Using an External Stylesheet -Top | Contents | Next | Previous - -An external stylesheet can reduce even more the amount of code needed to highlight some source. However there are some drawbacks with this. To use an external stylesheet, it's up to you to link it in to your document, normally with the following HTML: - - - - -In your external stylesheet you put CSS declarations for your code. Then just make sure you're using the correct class (use set_overall_class() to ensure this) and this should work fine. - -This method is great if you don't mind the source always being highlighted the same (in particular, if you're making a plugin for a forum/wiki/other system, using an external stylesheet is a good idea!). It saves a small amount of code and your bandwidth, and it's relatively easy to just change the stylesheet should you need to. However, using this will render the methods that change the styles of the code useless, because of course the stylesheet is no longer being dynamically generated. You can still disable highlighting of certain lexics dynamically, however. -Note: - -As of version 1.0.2, GeSHi comes with a contrib/ directory, which in it contains a "wizard" script for creating a stylesheet. Although this script is by no means a complete solution, it will create the necessary rules for the basic lexics - comments, strings for example. Things not included in the wizard include regular expressions for any language that uses them (PHP and XML are two languages that use them), and keyword-link styles. However, this script should take some of the tedium out of the job of making an external stylesheet. Expect a much better version of this script in version 1.2! -3.4: Changing Styles -Top | Contents | Next | Previous - -One of the more powerful features of GeSHi is the ability to change the style of the output dynamically. Why be chained to the boring styles the language authors make up? You can change almost every single aspect of highlighted code - and can even say whether something is to be highlighted at all. - -If you're confused about "styles", you probably want to have a quick tutorial in them so you know what you can do with them. Checkout the homepage of CSS at http://www.w3.org/Style/CSS. -3.4.1: The Overall Styles -Top | Contents | Next | Previous - -The code outputted by GeSHi is either in a
      or a
       (see the section entitled "The Code Container"), and this can be styled.
      -$geshi->set_overall_style('... styles ...');
      -
      -Where styles is a string containing valid CSS declarations. By default, these styles overwrite the current styles, but you can change this by adding a second parameter:
      -$geshi->set_overall_style('color: blue;', true);
      -
      -The default styles "shine through" wherever anything isn't highlighted. Also, you can apply more advanced styles, like position: (fixed|relative) etc, because a 
      /
       is a block level element.
      -Note:
      -
      -Remember that a 
      will by default have a larger font size than a
      , as discussed in the section "The Code Container".
      -3.4.2: Line Number Styles
      -Top | Contents | Next | Previous
      -
      -You may wish to refer to the section Styling Line Numbers before reading this section.
      -
      -As of version 1.0.2, the way line numbers are generated is different, so therefore the way that they are styled is different. In particular, now you cannot set the background style of the fancy line numbers to be different from that of the normal line numbers.
      -
      -Line number styles are set by using the method set_line_style:
      -$geshi->set_line_style($style1, $style2);
      -
      -$style1 is the style of the line numbers by default, and $style2 is the style of the fancy line numbers.
      -Caution:
      -
      -Things have changed since 1.0.1! This note is very important - please make sure you check this twice before complaining about line numbers!
      -
      -Because of the way that ordered lists are done in HTML, there really isn't normally a way to style the actual numbers in the list. I've cheated somewhat with GeSHi - I've made it possible to use CSS to style the foreground of the line numbers. So therefore, you can change the color, font size and type, and padding on them. If you want to have a pretty background, you must use set_overall_style() to do this, and use set_code_style() to style the actual code! This is explained in the section above: Styling Line Numbers.
      -
      -In addition, the styles for fancy line numbers is now the difference between the normal styles and the styles you want to achieve. For example, in GeSHi prior to 1.0.2 you may have done this to style line numbers:
      -$geshi->set_line_style('color: red; font-weight: bold;', 'color: green; font-weight: bold');
      -
      -Now you instead can do this:
      -$geshi->set_line_style('color: red; font-weight: bold;', 'color: green;');
      -
      -The font-weight: bold; will automatically carry through to the fancy styles. This is actually a small saving in code - but the difference may be confusing for anyone using 1.0.1 at first.
      -3.4.3: Setting Keyword Styles
      -Top | Contents | Next | Previous
      -
      -Perhaps the most regular change you will make will be to the styles of a keyword set. In order to change the styles for a particular set, you'll have to know what the set is called first. Sets are numbered from 1 up. Typically, set 1 contains keywords like if, while, do, for, switch etc, set 2 contains null, false, true etc, set 3 contains function inbuilt into the language (echo, htmlspecialchars etc. in PHP) and set 4 contains data types and similar variable modifiers: int, double, real, static etc. However these things are not fixed, and you should check the language file to see what key you want. Having a familiarity with a language file is definately a plus for using it.
      -
      -To change the styles for a keyword set, call the set_keyword_group_style() method:
      -$geshi->set_keyword_group_style($group, $styles);
      -
      -Where $group is the group to change the styles for and $styles is a string containing the styles to apply to that group.
      -
      -By default, the styles you pass overwrite the current styles. Add a boolean true after the styles you specify to combine them with the current styles:
      -$geshi->set_keyword_group_style(3, 'color: white;', true);
      -3.4.4: Setting Comment Styles
      -Top | Contents | Next | Previous
      -
      -To change the styles for a comment group, call the set_comments_style() method:
      -$geshi->set_comments_style($group, $styles);
      -
      -Where $group is either a number corresponding to a single-line comment, or the string 'MULTI' to specify multiline comments:
      -$geshi->set_comments_style(1, 'font-style: italic;');
      -$geshi->set_comments_style('MULTI', 'display: hidden;');
      -
      -By default, the styles you pass overwrite the current styles. Add a boolean true after the styles you specify to combine them with the current styles:
      -$geshi->set_comments_style(1, 'font-weight: 100;', true);
      -Note:
      -
      -In 1.0.7.22 a new kind of Comments called "COMMENT_REGEXP" has been added. Those are handled by setting single line comment styles.
      -3.4.5: Setting Other Styles
      -Top | Contents | Next | Previous
      -
      -GeSHi can highlight many other aspects of your source other than just keywords and comments. Strings, Numbers, Methods and Brackets among other things can all also be highlighted. Here are the related methods:
      -$geshi->set_escape_characters_style($styles[, $preserve_defaults]);
      -$geshi->set_symbols_style($styles[, $preserve_defaults]);
      -$geshi->set_strings_style($styles[, $preserve_defaults]);
      -$geshi->set_numbers_style($styles[, $preserve_defaults]);
      -$geshi->set_methods_style($key, $styles[, $preserve_defaults]);
      -$geshi->set_regexps_style($key, $styles[, $preserve_defaults]);
      -
      -$styles is a string containing valid stylesheet declarations, while $preserve_defaults should be set to true if you want your styles to be merged with the previous styles. In the case of set_methods_style, you should select a group to set the styles of, check the language files for the number used for each "object splitter".
      -
      -Like this was possible for set_method_style a new parameter has been introduced for set_symbols_style too which allows you to select the group of symbols for which you'd like to change your style. $geshi->set_symbols_style($styles[, $preserve_defaults[, $group]]);
      -If the third parameter is not given, group 0 is assumed. Furthermore you should note that any changes to group 0 are also reflected in the bracket style, i.e. a pass-through call to set_bracket_style is made.
      -3.5: Case Sensitivity and Auto Casing
      -Top | Contents | Next | Previous
      -
      -Controlling the case of the outputted source is an easy job with GeSHi. You can control which keywords are converted in case, and also control whether keywords are checked in a case sensitive manner.
      -3.5.1: Auto-Caps/Nocaps
      -Top | Contents | Next | Previous
      -
      -Auto-Caps/Nocaps is a nifty little feature that capitalises or lowercases automatically certain lexics when they are styled. I dabble in QuickBASIC, a dialect of BASIC which is well known for it's capatalisation, and SQL is another language well known for using caps for readability.
      -
      -To change what case lexics are rendered in, you call the set_case_keywords() method:
      -$geshi->set_case_keywords($caps_modifier);
      -
      -The valid values to pass to this method are:
      -
      -    * GESHI_CAPS_NO_CHANGE - Don't change the case of any lexics, leave as they are found
      -    * GESHI_CAPS_UPPER - Uppercase all lexics found
      -    * GESHI_CAPS_LOWER - Lowercase all lexics found
      -
      -Caution:
      -
      -When I say "lexic", I mean "keywords". Any keyword in any keyword array will be modified using this option! This is one small area of inflexibility I hope to fix in 1.2.X.
      -
      -I suspect this will only be used to specify GESHI_CAPS_NO_CHANGE to turn off autocaps for languages like SQL and BASIC variants, like so:
      -$geshi = new GeSHi($source, 'sql');
      -$geshi->set_case_keywords(GESHI_CAPS_NO_CHANGE); // don't want keywords capatalised
      -
      -All the same, it can be used for some interesting effects:
      -$geshi = new GeSHi($source, 'java');
      -// Anyone who's used java knows how picky it is about CapitalLetters...
      -$geshi->set_case_keywords(GESHI_CAPS_LOWER);
      -// No *way* the source will look right now ;)
      -3.5.2: Setting Case Sensitivity
      -Top | Contents | Next | Previous
      -
      -Some languages, like PHP, don't mind what case function names and keywords are in, while others, like Java, depend on such pickiness to maintain their bad reputations ;). In any event, you can use the set_case_sensitivity to change the case sensitiveness of a particular keyword group from the default:
      -$geshi->set_case_sensitivity($key, $sensitivity);
      -
      -Where $key is the key of the group for which you wish to change case sensitivness for (see the language file for that language), and $sensitivity is a boolean value - true if the keyword is case sensitive, and false if not.
      -3.6: Changing the Source, Language, Config Options
      -Top | Contents | Next | Previous
      -
      -What happens if you want to change the source to be highlighted on the fly, or the language. Or if you want to specify any of those basic fields after you've created a GeSHi object? Well, that's where these methods come in.
      -3.6.1: Changing the Source Code
      -Top | Contents | Next | Previous
      -
      -To change the source code, you call the set_source() method:
      -$geshi->set_source($newsource);
      -
      -Example:
      -$geshi = new GeSHi($source1, 'php');
      -
      -// Method calls to specify various options...
      -
      -$code1 = $geshi->parse_code();
      -
      -$geshi->set_source($source2);
      -$code2 = $geshi->parse_code();
      -3.6.2: Changing the Language
      -Top | Contents | Next | Previous
      -
      -What happens if you want to change the language used for highlighting? Just call set_language():
      -$geshi->set_language('newlanguage');
      -
      -Example:
      -$geshi = new GeSHi($source, 'php');
      -
      -$code = $geshi->parse_code();
      -
      -// Highlight GeSHi's output
      -$geshi->set_source($code);
      -$geshi->set_language('html4strict');
      -$geshi->enable_classes(false);
      -echo $geshi->parse_code();
      -Note:
      -
      -Names are case-insensitive - they will be converted to lower case to match a language file however. So if you're making a language file, remember it should have a name in lower case.
      -Note:
      -
      -What you pass to this method is the name of a language file, minus the .php extension. If you're writing a plugin for a particular application, it's up to you to somehow convert user input into a valid language name.
      -Caution:
      -
      -GeSHi include()s the language file, so be careful to make sure that users can't pass some wierd language name to include any old script! GeSHi tries to strip non-valid characters out of a language name, but you should always do this your self anyway. In particular, language files are always lower-case, with either alphanumeric characters, dashes or underscores in their name.
      -
      -At the very least, strip "/" characters out of a language name.
      -3.6.3: Changing the Language Path
      -Top | Contents | Next | Previous
      -
      -What happens if all of a sudden you want to use language files from a different directory from the current language file location? You call the set_language_path() method:
      -$geshi->set_language_path($newpath);
      -
      -It doesn't matter whether the path has a trailing slash after it or not - only that it points to a valid folder. If it doesn't, that's your tough luck ;)
      -3.6.4: Changing the Character Set
      -Top | Contents | Next | Previous
      -Note:
      -
      -As of GeSHi 1.0.7.18, you don't need to use this, as htmlspecialchars is not being used due to a security flaw in it (that is unpatched in even the most recent PHP4 versions, and in PHP5 < 5.2). As long as you set the encoding properly with a php header() call, your foreign characters will be displayed correctly.
      -
      -As of version 1.0.3, you can use the method set_encoding to specify the character set that your source is in. Valid names are those names that are valid for the PHP function htmlentities():
      -$geshi->set_encoding($encoding);
      -
      -There is a table of valid strings for $encoding at the php.net manual linked to above. If you do not specify an encoding, or specify an invalid encoding, the character set used is ISO-8859-1.
      -Using load_from_file to Change the Language and Source Code
      -Top | Contents | Next | Previous
      -
      -As of GeSHi 1.0.5, you can use the method load_from_file to load the source code and language from a file. Simply pass this method a file name and it will attempt to load the source and set the language.
      -$geshi->load_from_file($file_name, $lookup);
      -
      -$file_name is the file name to use, and $lookup is an optional parameter that contains a lookup array to use for deciding which language to choose. You can use this to override GeSHi's default lookup array, which may not contain the extension of the file you're after, or perhaps does have your extension but under a different language. The lookup array is of the form:
      -
      -array(
      -	 *   'lang_name' => array('extension', 'extension', ...),
      -	 *   'lang_name' ...
      -	 * );
      -
      -Also, you can use the method get_language_name_from_extension if you need to convert a file extension to a valid language name. This method will return the empty string if it could not find a match in the lookup, and like load_from_file it accepts an optional second parameter that contains a lookup array.
      -3.7: Error Handling
      -Top | Contents | Next | Previous
      -
      -What happens if you try to highlight using a language that doesn't exist? Or if GeSHi can't read a required file? The results you get may be confusing. You may check your code over and over, and never find anything wrong. GeSHi provides ways of finding out if GeSHi itself found anything wrong with what you tried to do. After highlighting, you can call the error() method:
      -$geshi = new GeSHi('hi', 'thisLangIsNotSupported');
      -
      -echo $geshi->error();  // echoes error message
      -
      -The error message you will get will look like this:
      -
      -    GeSHi Error: GeSHi could not find the language thisLangIsNotSupported (using path geshi/) (code 2)
      -
      -The error outputted will be the last error GeSHi came across, just like how mysql_error() works.
      -3.8: Disabling styling of some Lexics
      -Top | Contents | Next | Previous
      -
      -One disadvantage of GeSHi is that for large source files using complex languages, it can be quite slow with every option turned on. Although future releases will concentrate on the speed/resource side of highlighting, for now you can gain speed increases by disabling some of the highlighting options. This is done by using a series of set_*_highlighting methods:
      -
      -    * set_keyword_group_highlighting($group, $flag): Sets whether a particular $group of keywords is to be highlighted or not. Consult the necessary language file(s) to see what $group should be for each group (typically a positive integer). $flag is false if you want to disable highlighting of this group, and true if you want to re-enable higlighting of this group. If you disable a keyword group then even if the keyword group has a related URL one will not be generated for that keyword.
      -    * set_comments_highlighting($group, $flag): Sets whether a particular $group of comments is to be highlighted or not. Consult the necessary language file(s) to see what $group should be for each group (typically a positive integer, or the string 'MULTI' for multiline comments. $flag is false if you want to disable highlighting of this group, and true if you want to re-enable highlighting of this group.
      -    * set_regexps_highlighting($regexp, $flag): Sets whether a particular $regexp is to be highlighted or not. Consult the necessary language file(s) to see what $regexp should be for each regexp (typically a positive integer, or the string 'MULTI' for multiline comments. $flag is false if you want to disable highlighting of this group, and true if you want to re-enable highlighting of this group.
      -    * The following methods:
      -          o set_escape_characters_highlighting($flag)
      -          o set_symbols_highlighting($flag)
      -          o set_strings_highlighting($flag)
      -          o set_numbers_highlighting($flag)
      -          o set_methods_highlighting($flag)
      -      Work on their respective lexics (e.g. set_methods_highlighting will disable/enable highlighting of methods). For each method, if $flag is false then the related lexics will not be highlighted at all (this means no HTML will surround the lexic like usual, saving on time and bandwidth.
      -
      -In case all highlighting should be disabled or reenabled GeSHi provides two methods called disable_highlighting() and enable_highlighting($flag). The optional paramter $flag has been added in 1.0.7.21 and specifies the desired state, i.e. true (default) to turn all highlighting on, or false to turn all highlighting off. Since 1.0.7.21 the method disnable_highlighting() has become deprecated.
      -3.9: Setting the Tab Width
      -Top | Contents | Next | Previous
      -
      -If you're using the 
       header, tabs are handled automatically by your browser, and in general you can count on good results. However, if you're using the 
      header, you may want to specify a tab width explicitly. - -Note that tabs created in this fashion won't be like normal tabs - there won't be "tab-stops" as such, instead tabs will be replaced with the specified number of spaces. - -To change the tab width, you call the set_tab_width() method: -$geshi->set_tab_width($width); - -Where $width is the width in spaces that you'd like tabs to be. -3.10: Using Strict Mode -Top | Contents | Next | Previous - -Some languages like to get tricky, and jump in and out of the file that they're in. For example, the vast majority of you reading this will have used a PHP file. And you know that PHP code is only executed if it's within delimiters like (there are others of course...). So what happens if you do the following in a php file? - - -Well normally using GeSHi with PHP, or using a bad highlighter, you'll end up with this: - - -What a mess! Especially if you're being slack about where you're putting your quotes, you could end up with the rest of your file as bright red. Fortunately, you can tell GeSHi to be "strict" about just when it highlights and when it does not, using the enable_strict_mode method: -$geshi->enable_strict_mode($mode); - -Where $mode is true or not specified to enable strict mode, or false to disable strict mode if you've already turned it and don't want it now. - -Here's the result: much better! - -3.11: Adding/Removing Keywords -Top | Contents | Next | Previous - -Lets say that you're working on a large project, with many files, many classes and many functions. Perhaps also you have the source code on the web and highlighted by GeSHi, perhaps as a front end to CVS, as a learning tool, something to refer to, whatever. Well, why not highlight the names of the functions and classes *your* project uses, as well as the standard functions and classes? Or perhaps you're not interested in highlighting certain functions, and would like to remove them? Or maybe you don't mind if an entire function group goes west in the interest of speed? GeSHi can handle all of this! -3.11.1: Adding a Keyword -Top | Contents | Next | Previous - -If you want to add a keyword to an existing keyword group, you use the add_keyword method: -$geshi->add_keyword($key, $word); - -Where $key is the index of the group of keywords you want to add this keyword to, and $word is the word to add. - -This implies knowledge of the language file to know the correct index. -Note: - -Keywords should contain at least two alphabetical characters (lower or upper case letters only). This is to enable GeSHi to work much faster by not bothering to try to detect keywords in parts of your source where there is no alphabetical characters. -3.11.2: Removing a Keyword -Top | Contents | Next | Previous - -Perhaps you want to remove a keyword from an existing group. Maybe you don't use it and want to save yourself some time. Whatever the reason, you can remove it using the remove_keyword method: -$geshi->remove_keyword($key, $word); - -Where $key is the index of the gropu of keywords that you want to remove this keyword from, and $word is the word to remove. - -This implies knowledge of the language file to know the correct index - most of the time the keywords you'll want to remove will be in group 3, but this is not guaranteed and you should check the language file first. - -This function is silent - if the keyword is not in the group you specified, nothing awful will happen ;) -3.11.3: Adding a Keyword Group -Top | Contents | Next | Previous - -Lets say for your big project you have several main functions and classes that you'd like highlighted. Why not add them as their own group instead of having them highlighted the same way as other keywords? Then you can make them stand out, and people can instantly see which functions and classes are user defined or inbuilt. Furthermore, you could set the URL for this group to point at the API documentation of your project. - -You add a keyword group by using the add_keyword_group method: -$geshi->add_keyword_group($key, $styles, $case_sensitive, $words); - -Where $key is the key that you want to use to refer to this group, $styles is the styles that you want to use to style this group, $case_sensitive is true or false depending on whether you want this group of keywords to be case sensitive or not and $words is an array of words (or a string) of which words to add to this group. For example: -$geshi->add_keyword_group(10, 'color: #600000;', false, array('myfunc_1', 'myfunc_2', 'myfunc_3')); - -Adds a keyword group referenced by index 10, of which all keywords in the group will be dark red, each keyword can be in any case and which contains the keywords "myfunc_1", "myfunc_2" and "myfunc_3". - -After creating such a keyword group, you may call other GeSHi methods on it, just as you would for any other keyword group. -Caution: - -If you specify a $key for which there is already a keyword group, the old keyword group will be overwritten! Most language files don't use numbers larger than 5, so I recommend you play it safe and use a number like 10 or 42. -3.11.4: Removing a Keyword Group -Top | Contents | Next | Previous - -Perhaps you *really* need speed? Why not just remove an entire keyword group? GeSHi won't have to loop through each keyword checking for its existance, saving much time. You remove a keyword group by using the remove_keyword_group method: -$geshi->remove_keyword_group($key); - -Where $key is the key of the group you wish to remove. This implies knowleged of the language file. -3.12: Headers and Footers for Your Code -Top | Contents | Next | Previous - -So you want to add some special information to the highlighted source? GeSHi can do that too! You can specify headers and footers for your code, style them, and insert information from the highlighted source into your header or footer. -3.12.1: Keyword Substitution -Top | Contents | Next | Previous - -In your header and footer, you can put special keywords that will be replaced with actual configuration values for this GeSHi object. The keywords you can use are: - - *
      '; - } - $parsed_code .= ''; - } - // No line numbers, but still need to handle highlighting lines extra. - // Have to use divs so the full width of the code is highlighted - $close = 0; - for ($i = 0; $i < $n; ++$i) { - // Make lines have at least one space in them if they're empty - // BenBE: Checking emptiness using trim instead of relying on blanks - if ('' == trim($code[$i])) { - $code[$i] = ' '; - } - // fancy lines - if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS && - $i % $this->line_nth_row == ($this->line_nth_row - 1)) { - // Set the attributes to style the line - if ($this->use_classes) { - $parsed_code .= ''; - } else { - // This style "covers up" the special styles set for special lines - // so that styles applied to special lines don't apply to the actual - // code on that line - $parsed_code .= '' - .''; - } - $close += 2; - } - //Is this some line with extra styles??? - if (in_array($i + 1, $this->highlight_extra_lines)) { - if ($this->use_classes) { - if (isset($this->highlight_extra_lines_styles[$i])) { - $parsed_code .= ""; - } else { - $parsed_code .= ""; - } - } else { - $parsed_code .= "get_line_style($i) . "\">"; - } - ++$close; - } - - $parsed_code .= $code[$i]; - - if ($close) { - $parsed_code .= str_repeat('', $close); - $close = 0; - } - elseif ($i + 1 < $n) { - $parsed_code .= "\n"; - } - unset($code[$i]); - } - - if ($this->header_type == GESHI_HEADER_PRE_VALID || $this->header_type == GESHI_HEADER_PRE_TABLE) { - $parsed_code .= '
      '; - } - if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) { - $parsed_code .= ''; - } - } - - $parsed_code .= $this->footer(); - } - - /** - * Creates the header for the code block (with correct attributes) - * - * @return string The header for the code block - * @since 1.0.0 - * @access private - */ - function header() { - // Get attributes needed - /** - * @todo Document behaviour change - class is outputted regardless of whether - * we're using classes or not. Same with style - */ - $attributes = ' class="' . $this->_genCSSName($this->language); - if ($this->overall_class != '') { - $attributes .= " ".$this->_genCSSName($this->overall_class); - } - $attributes .= '"'; - - if ($this->overall_id != '') { - $attributes .= " id=\"{$this->overall_id}\""; - } - if ($this->overall_style != '' && !$this->use_classes) { - $attributes .= ' style="' . $this->overall_style . '"'; - } - - $ol_attributes = ''; - - if ($this->line_numbers_start != 1) { - $ol_attributes .= ' start="' . $this->line_numbers_start . '"'; - } - - // Get the header HTML - $header = $this->header_content; - if ($header) { - if ($this->header_type == GESHI_HEADER_PRE || $this->header_type == GESHI_HEADER_PRE_VALID) { - $header = str_replace("\n", '', $header); - } - $header = $this->replace_keywords($header); - - if ($this->use_classes) { - $attr = ' class="head"'; - } else { - $attr = " style=\"{$this->header_content_style}\""; - } - if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) { - $header = "$header"; - } else { - $header = "$header
      "; - } - } - - if (GESHI_HEADER_NONE == $this->header_type) { - if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { - return "$header"; - } - return $header . ($this->force_code_block ? '
      ' : ''); - } - - // Work out what to return and do it - if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { - if ($this->header_type == GESHI_HEADER_PRE) { - return "$header"; - } elseif ($this->header_type == GESHI_HEADER_DIV || - $this->header_type == GESHI_HEADER_PRE_VALID) { - return "$header"; - } elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) { - return "$header"; - } - } else { - if ($this->header_type == GESHI_HEADER_PRE) { - return "$header" . - ($this->force_code_block ? '
      ' : ''); - } else { - return "$header" . - ($this->force_code_block ? '
      ' : ''); - } - } - } - - /** - * Returns the footer for the code block. - * - * @return string The footer for the code block - * @since 1.0.0 - * @access private - */ - function footer() { - $footer = $this->footer_content; - if ($footer) { - if ($this->header_type == GESHI_HEADER_PRE) { - $footer = str_replace("\n", '', $footer);; - } - $footer = $this->replace_keywords($footer); - - if ($this->use_classes) { - $attr = ' class="foot"'; - } else { - $attr = " style=\"{$this->footer_content_style}\""; - } - if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) { - $footer = "$footer"; - } else { - $footer = "$footer
      "; - } - } - - if (GESHI_HEADER_NONE == $this->header_type) { - return ($this->line_numbers != GESHI_NO_LINE_NUMBERS) ? '
    ' . $footer : $footer; - } - - if ($this->header_type == GESHI_HEADER_DIV || $this->header_type == GESHI_HEADER_PRE_VALID) { - if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { - return "$footer
    "; - } - return ($this->force_code_block ? '
    ' : '') . - "$footer
    "; - } - elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) { - if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { - return "$footer"; - } - return ($this->force_code_block ? '
    ' : '') . - "$footer
    "; - } - else { - if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { - return "$footer
    "; - } - return ($this->force_code_block ? '
    ' : '') . - "$footer
    "; - } - } - - /** - * Replaces certain keywords in the header and footer with - * certain configuration values - * - * @param string The header or footer content to do replacement on - * @return string The header or footer with replaced keywords - * @since 1.0.2 - * @access private - */ - function replace_keywords($instr) { - $keywords = $replacements = array(); - - $keywords[] = '
      to have no effect at all if there are line numbers - // (
        s have margins that should be destroyed so all layout is - // controlled by the set_overall_style method, which works on the - //
         or 
        container). Additionally, set default styles for lines - if (!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) { - //$stylesheet .= "$selector, {$selector}ol, {$selector}ol li {margin: 0;}\n"; - $stylesheet .= "$selector.de1, $selector.de2 {{$this->code_style}}\n"; - } - - // Add overall styles - // note: neglect economy_mode, empty styles are meaningless - if ($this->overall_style != '') { - $stylesheet .= "$selector {{$this->overall_style}}\n"; - } - - // Add styles for links - // note: economy mode does not make _any_ sense here - // either the style is empty and thus no selector is needed - // or the appropriate key is given. - foreach ($this->link_styles as $key => $style) { - if ($style != '') { - switch ($key) { - case GESHI_LINK: - $stylesheet .= "{$selector}a:link {{$style}}\n"; - break; - case GESHI_HOVER: - $stylesheet .= "{$selector}a:hover {{$style}}\n"; - break; - case GESHI_ACTIVE: - $stylesheet .= "{$selector}a:active {{$style}}\n"; - break; - case GESHI_VISITED: - $stylesheet .= "{$selector}a:visited {{$style}}\n"; - break; - } - } - } - - // Header and footer - // note: neglect economy_mode, empty styles are meaningless - if ($this->header_content_style != '') { - $stylesheet .= "$selector.head {{$this->header_content_style}}\n"; - } - if ($this->footer_content_style != '') { - $stylesheet .= "$selector.foot {{$this->footer_content_style}}\n"; - } - - // Styles for important stuff - // note: neglect economy_mode, empty styles are meaningless - if ($this->important_styles != '') { - $stylesheet .= "$selector.imp {{$this->important_styles}}\n"; - } - - // Simple line number styles - if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->line_style1 != '') { - $stylesheet .= "{$selector}li, {$selector}.li1 {{$this->line_style1}}\n"; - } - if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->table_linenumber_style != '') { - $stylesheet .= "{$selector}.ln {{$this->table_linenumber_style}}\n"; - } - // If there is a style set for fancy line numbers, echo it out - if ((!$economy_mode || $this->line_numbers == GESHI_FANCY_LINE_NUMBERS) && $this->line_style2 != '') { - $stylesheet .= "{$selector}.li2 {{$this->line_style2}}\n"; - } - - // note: empty styles are meaningless - foreach ($this->language_data['STYLES']['KEYWORDS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || - (isset($this->lexic_permissions['KEYWORDS'][$group]) && - $this->lexic_permissions['KEYWORDS'][$group]))) { - $stylesheet .= "$selector.kw$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['COMMENTS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || - (isset($this->lexic_permissions['COMMENTS'][$group]) && - $this->lexic_permissions['COMMENTS'][$group]) || - (!empty($this->language_data['COMMENT_REGEXP']) && - !empty($this->language_data['COMMENT_REGEXP'][$group])))) { - $stylesheet .= "$selector.co$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['ESCAPE_CHAR'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || $this->lexic_permissions['ESCAPE_CHAR'])) { - // NEW: since 1.0.8 we have to handle hardescapes - if ($group === 'HARD') { - $group = '_h'; - } - $stylesheet .= "$selector.es$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['BRACKETS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || $this->lexic_permissions['BRACKETS'])) { - $stylesheet .= "$selector.br$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['SYMBOLS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || $this->lexic_permissions['SYMBOLS'])) { - $stylesheet .= "$selector.sy$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['STRINGS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || $this->lexic_permissions['STRINGS'])) { - // NEW: since 1.0.8 we have to handle hardquotes - if ($group === 'HARD') { - $group = '_h'; - } - $stylesheet .= "$selector.st$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['NUMBERS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || $this->lexic_permissions['NUMBERS'])) { - $stylesheet .= "$selector.nu$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['METHODS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || $this->lexic_permissions['METHODS'])) { - $stylesheet .= "$selector.me$group {{$styles}}\n"; - } - } - // note: neglect economy_mode, empty styles are meaningless - foreach ($this->language_data['STYLES']['SCRIPT'] as $group => $styles) { - if ($styles != '') { - $stylesheet .= "$selector.sc$group {{$styles}}\n"; - } - } - foreach ($this->language_data['STYLES']['REGEXPS'] as $group => $styles) { - if ($styles != '' && (!$economy_mode || - (isset($this->lexic_permissions['REGEXPS'][$group]) && - $this->lexic_permissions['REGEXPS'][$group]))) { - if (is_array($this->language_data['REGEXPS'][$group]) && - array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$group])) { - $stylesheet .= "$selector."; - $stylesheet .= $this->language_data['REGEXPS'][$group][GESHI_CLASS]; - $stylesheet .= " {{$styles}}\n"; - } else { - $stylesheet .= "$selector.re$group {{$styles}}\n"; - } - } - } - // Styles for lines being highlighted extra - if (!$economy_mode || (count($this->highlight_extra_lines)!=count($this->highlight_extra_lines_styles))) { - $stylesheet .= "{$selector}.ln-xtra, {$selector}li.ln-xtra, {$selector}div.ln-xtra {{$this->highlight_extra_lines_style}}\n"; - } - $stylesheet .= "{$selector}span.xtra { display:block; }\n"; - foreach ($this->highlight_extra_lines_styles as $lineid => $linestyle) { - $stylesheet .= "{$selector}.lx$lineid, {$selector}li.lx$lineid, {$selector}div.lx$lineid {{$linestyle}}\n"; - } - - return $stylesheet; - } - - /** - * Get's the style that is used for the specified line - * - * @param int The line number information is requested for - * @access private - * @since 1.0.7.21 - */ - function get_line_style($line) { - //$style = null; - $style = null; - if (isset($this->highlight_extra_lines_styles[$line])) { - $style = $this->highlight_extra_lines_styles[$line]; - } else { // if no "extra" style assigned - $style = $this->highlight_extra_lines_style; - } - - return $style; - } - - /** - * this functions creates an optimized regular expression list - * of an array of strings. - * - * Example: - * $list = array('faa', 'foo', 'foobar'); - * => string 'f(aa|oo(bar)?)' - * - * @param $list array of (unquoted) strings - * @param $regexp_delimiter your regular expression delimiter, @see preg_quote() - * @return string for regular expression - * @author Milian Wolff - * @since 1.0.8 - * @access private - */ - function optimize_regexp_list($list, $regexp_delimiter = '/') { - $regex_chars = array('.', '\\', '+', '-', '*', '?', '[', '^', ']', '$', - '(', ')', '{', '}', '=', '!', '<', '>', '|', ':', $regexp_delimiter); - sort($list); - $regexp_list = array(''); - $num_subpatterns = 0; - $list_key = 0; - - // the tokens which we will use to generate the regexp list - $tokens = array(); - $prev_keys = array(); - // go through all entries of the list and generate the token list - $cur_len = 0; - for ($i = 0, $i_max = count($list); $i < $i_max; ++$i) { - if ($cur_len > GESHI_MAX_PCRE_LENGTH) { - // seems like the length of this pcre is growing exorbitantly - $regexp_list[++$list_key] = $this->_optimize_regexp_list_tokens_to_string($tokens); - $num_subpatterns = substr_count($regexp_list[$list_key], '(?:'); - $tokens = array(); - $cur_len = 0; - } - $level = 0; - $entry = preg_quote((string) $list[$i], $regexp_delimiter); - $pointer = &$tokens; - // properly assign the new entry to the correct position in the token array - // possibly generate smaller common denominator keys - while (true) { - // get the common denominator - if (isset($prev_keys[$level])) { - if ($prev_keys[$level] == $entry) { - // this is a duplicate entry, skip it - continue 2; - } - $char = 0; - while (isset($entry[$char]) && isset($prev_keys[$level][$char]) - && $entry[$char] == $prev_keys[$level][$char]) { - ++$char; - } - if ($char > 0) { - // this entry has at least some chars in common with the current key - if ($char == strlen($prev_keys[$level])) { - // current key is totally matched, i.e. this entry has just some bits appended - $pointer = &$pointer[$prev_keys[$level]]; - } else { - // only part of the keys match - $new_key_part1 = substr($prev_keys[$level], 0, $char); - $new_key_part2 = substr($prev_keys[$level], $char); - - if (in_array($new_key_part1[0], $regex_chars) - || in_array($new_key_part2[0], $regex_chars)) { - // this is bad, a regex char as first character - $pointer[$entry] = array('' => true); - array_splice($prev_keys, $level, count($prev_keys), $entry); - $cur_len += strlen($entry); - continue; - } else { - // relocate previous tokens - $pointer[$new_key_part1] = array($new_key_part2 => $pointer[$prev_keys[$level]]); - unset($pointer[$prev_keys[$level]]); - $pointer = &$pointer[$new_key_part1]; - // recreate key index - array_splice($prev_keys, $level, count($prev_keys), array($new_key_part1, $new_key_part2)); - $cur_len += strlen($new_key_part2); - } - } - ++$level; - $entry = substr($entry, $char); - continue; - } - // else: fall trough, i.e. no common denominator was found - } - if ($level == 0 && !empty($tokens)) { - // we can dump current tokens into the string and throw them away afterwards - $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens); - $new_subpatterns = substr_count($new_entry, '(?:'); - if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + $new_subpatterns > GESHI_MAX_PCRE_SUBPATTERNS) { - $regexp_list[++$list_key] = $new_entry; - $num_subpatterns = $new_subpatterns; - } else { - if (!empty($regexp_list[$list_key])) { - $new_entry = '|' . $new_entry; - } - $regexp_list[$list_key] .= $new_entry; - $num_subpatterns += $new_subpatterns; - } - $tokens = array(); - $cur_len = 0; - } - // no further common denominator found - $pointer[$entry] = array('' => true); - array_splice($prev_keys, $level, count($prev_keys), $entry); - - $cur_len += strlen($entry); - break; - } - unset($list[$i]); - } - // make sure the last tokens get converted as well - $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens); - if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + substr_count($new_entry, '(?:') > GESHI_MAX_PCRE_SUBPATTERNS) { - if ( !empty($regexp_list[$list_key]) ) { - ++$list_key; - } - $regexp_list[$list_key] = $new_entry; - } else { - if (!empty($regexp_list[$list_key])) { - $new_entry = '|' . $new_entry; - } - $regexp_list[$list_key] .= $new_entry; - } - return $regexp_list; - } - /** - * this function creates the appropriate regexp string of an token array - * you should not call this function directly, @see $this->optimize_regexp_list(). - * - * @param &$tokens array of tokens - * @param $recursed bool to know wether we recursed or not - * @return string - * @author Milian Wolff - * @since 1.0.8 - * @access private - */ - function _optimize_regexp_list_tokens_to_string(&$tokens, $recursed = false) { - $list = ''; - foreach ($tokens as $token => $sub_tokens) { - $list .= $token; - $close_entry = isset($sub_tokens['']); - unset($sub_tokens['']); - if (!empty($sub_tokens)) { - $list .= '(?:' . $this->_optimize_regexp_list_tokens_to_string($sub_tokens, true) . ')'; - if ($close_entry) { - // make sub_tokens optional - $list .= '?'; - } - } - $list .= '|'; - } - if (!$recursed) { - // do some optimizations - // common trailing strings - // BUGGY! - //$list = preg_replace_callback('#(?<=^|\:|\|)\w+?(\w+)(?:\|.+\1)+(?=\|)#', create_function( - // '$matches', 'return "(?:" . preg_replace("#" . preg_quote($matches[1], "#") . "(?=\||$)#", "", $matches[0]) . ")" . $matches[1];'), $list); - // (?:p)? => p? - $list = preg_replace('#\(\?\:(.)\)\?#', '\1?', $list); - // (?:a|b|c|d|...)? => [abcd...]? - // TODO: a|bb|c => [ac]|bb - static $callback_2; - if (!isset($callback_2)) { - $callback_2 = create_function('$matches', 'return "[" . str_replace("|", "", $matches[1]) . "]";'); - } - $list = preg_replace_callback('#\(\?\:((?:.\|)+.)\)#', $callback_2, $list); - } - // return $list without trailing pipe - return substr($list, 0, -1); - } -} // End Class GeSHi - - -if (!function_exists('geshi_highlight')) { - /** - * Easy way to highlight stuff. Behaves just like highlight_string - * - * @param string The code to highlight - * @param string The language to highlight the code in - * @param string The path to the language files. You can leave this blank if you need - * as from version 1.0.7 the path should be automatically detected - * @param boolean Whether to return the result or to echo - * @return string The code highlighted (if $return is true) - * @since 1.0.2 - */ - function geshi_highlight($string, $language, $path = null, $return = false) { - $geshi = new GeSHi($string, $language, $path); - $geshi->set_header_type(GESHI_HEADER_NONE); - - if ($return) { - return '' . $geshi->parse_code() . ''; - } - - echo '' . $geshi->parse_code() . ''; - - if ($geshi->error()) { - return false; - } - return true; - } -} diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php deleted file mode 100644 index 8fdf9317..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php +++ /dev/null @@ -1,137 +0,0 @@ - 'GADV 4CS', - 'COMMENT_SINGLE' => array(1 => "//"), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - 'All', 'AllMatches', 'And', 'And_Filters', 'As', 'Asc', 'BasedOn', - 'BestMatch', 'Block', 'Buffer', 'ByRef', 'ByVal', 'Call', 'Channel', - 'Chr', 'Clear', 'Close', 'Confirm', 'Const', 'Continue', 'Cos', - 'Critical', 'Declare', 'Default', 'DefaultChannel', 'DefaultDelayTime', - 'DefaultReceiveMode', 'DefaultResponseTime', '#Define', 'DelayTime', - 'Delete', 'Div', 'Else', '#Else', 'ElseIf', '#ElseIf', 'End', 'EndCritical', - 'EndInlineC', 'EndFunction', 'EndIf', '#EndIf', 'EndInputList', - 'EndLocalChannel', 'EndScenario', 'EndSub', 'EndWhile', 'Error', - 'ErrorLevelOff', 'ErrorLevelOn', 'ErrorLevelSet', 'ErrorLevelSetRaw', - 'Event', 'EventMode', 'EventOff', 'EventOn', 'EventSet', 'EventSetRaw', - 'Execute', 'Exit', 'Exp', 'FileClose', 'FilterClear', 'FileEOF', 'FileOpen', - 'FileRead', 'FileSize', 'FileWrite', 'FilterAdd', 'FilterMode', - 'FilterOff', 'FilterOn', 'For', 'Format', 'Function', 'GoOnline', 'GoTo', - 'Handle', 'Hide', 'If', '#If', '#IfDef', '#IfNDef', 'Ignore', '#Include', - 'InlineC', 'Input', 'InputItem', 'InputList', 'Kill', 'LBound', 'LocalChannel', - 'Local', 'Log', 'Log10', 'LogOff', 'LogOn', 'Loop', 'Message', 'Mod', - 'MonitorChannel', 'MostFormat', 'MostMessage', 'Named', 'Never', 'Next', - 'NoOrder', 'Not', 'Nothing', 'NoWait', 'Numeric', 'OnError', 'OnEvent', - 'Or', 'Or_Filters', 'Order', 'Pass', 'Pow', 'Prototype', 'Quit', 'Raise', - 'Random', 'Receive', 'ReceiveMode', 'ReceiveRaw', 'Redim', 'Remote', 'Repeat', - 'Repeated', 'ResponseTime', 'Resume', 'ResumeCritical', 'RT_Common', - 'RT_Dll_Call', 'RT_FILEIO', 'RT_General', 'RT_HardwareAccess', - 'RT_MessageVariableAccess', 'RT_Scenario', 'RT_VariableAccess', 'Runtime', - 'Scenario', 'ScenarioEnd', 'ScenarioStart', 'ScenarioStatus', 'ScenarioTerminate', - 'Send', 'SendRaw', 'Set', 'SetError', 'Sin', 'Single', 'Show', 'Start', - 'StartCritical', 'Starts', 'Static', 'Step', 'Stop', 'String', 'Sub', - 'System_Error', 'TerminateAllChilds', 'Terminates', 'Then', 'Throw', 'TimeOut', - 'To', 'TooLate', 'Trunc', 'UBound', 'Unexpected', 'Until', 'User_Error', - 'View', 'Wait', 'Warning', 'While', 'XOr' - ), - 2 => array( - 'alias', 'winapi', 'long', 'char', 'double', 'float', 'int', 'short', 'lib' - ) - ), - 'SYMBOLS' => array( - '=', ':=', '<', '>', '<>' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #0000C0; font-weight: bold;', - 2 => 'color: #808080;' - ), - 'COMMENTS' => array( - 1 => 'color: #008000;' - ), - 'BRACKETS' => array( - 0 => 'color: #000080;' - ), - 'STRINGS' => array( - 0 => 'color: #800080;' - ), - 'NUMBERS' => array( - 0 => 'color: #cc66cc;' - ), - 'METHODS' => array( - 1 => 'color: #66cc66;' - ), - 'SYMBOLS' => array( - 0 => 'color: #000080;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099;' - ), - 'SCRIPT' => array( - ), - 'REGEXPS' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php deleted file mode 100644 index 6b37a279..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php +++ /dev/null @@ -1,228 +0,0 @@ - 'MOS 6502 (6510) ACME Cross Assembler format', - 'COMMENT_SINGLE' => array(1 => ';'), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - /* 6502/6510 Opcodes. */ - 1 => array( - 'adc', 'and', 'asl', 'bcc', 'bcs', 'beq', 'bit', 'bmi', - 'bne', 'bpl', 'brk', 'bvc', 'bvs', 'clc', 'cld', 'cli', - 'clv', 'cmp', 'cpx', 'cpy', 'dec', 'dex', 'dey', 'eor', - 'inc', 'inx', 'iny', 'jmp', 'jsr', 'lda', 'ldx', 'ldy', - 'lsr', 'nop', 'ora', 'pha', 'php', 'pla', 'plp', 'rol', - 'ror', 'rti', 'rts', 'sbc', 'sec', 'sed', 'sei', 'sta', - 'stx', 'sty', 'tax', 'tay', 'tsx', 'txa', 'txs', 'tya', - ), - /* Index Registers, yes the 6502 has other registers by they are only - * accessable by specific opcodes. The 65816 also has access to the stack pointer S. */ - 2 => array( - 'x', 'y', 's' - ), - /* Directives or "pseudo opcodes" as defined by ACME 0.93 file AllPOs.txt. */ - 3 => array( - '!8', '!08', '!by', '!byte', - '!16', '!wo', '!word', - '!24', '!32', - '!fi', '!fill', - '!align', - '!ct', '!convtab', - '!tx', '!text', - '!pet', - '!raw', - '!scrxor', - '!to', - '!source', - '!bin', '!binary', - '!zn', '!zone', - '!sl', - '!svl', - '!sal', - '!if', '!ifdef', - '!for', - '!set', - '!do', 'while', 'until', - '!eof', '!endoffile', - '!warn', '!error', '!serious', - '!macro', -// , '*=' // Not a valid keyword (uses both * and = signs) moved to symbols instead. - '!initmem', - '!pseudopc', - '!cpu', - '!al', '!as', '!rl', '!rs', - ), - - /* 6502/6510 undocumented opcodes (often referred to as illegal instructions). - * These are present in the 6502/6510 but NOT in the newer CMOS revisions of the 65C02 or 65816. - * As they are undocumented instructions there are no "official" names for them, there are also - * several more that mainly perform various forms of crash and are not supported by ACME 0.93. - */ - 4 => array( - 'anc', 'arr', 'asr', 'dcp', 'dop', 'isc', 'jam', 'lax', - 'rla', 'rra', 'sax', 'sbx', 'slo', 'sre', 'top', - ), - /* 65c02 instructions, MOS added a few (much needed) instructions in the CMOS version of the 6502, but stupidly removed the undocumented/illegal opcodes. - * ACME 0.93 does not support the rmb0-7 and smb0-7 instructions (they are currently rem'ed out). */ - 5 => array( - 'bra', 'phx', 'phy', 'plx', 'ply', 'stz', 'trb', 'tsb' - ), - /* 65816 instructions. */ - 6 => array( - 'brl', 'cop', 'jml', 'jsl', 'mvn', 'mvp', 'pea', 'pei', - 'per', 'phb', 'phd', 'phk', 'plb', 'pld', 'rep', 'rtl', - 'sep', 'tcd', 'tcs', 'tdc', 'tsc', 'txy', 'tyx', 'wdm', - 'xba', 'xce', - ), - /* Deprecated directives or "pseudo opcodes" as defined by ACME 0.93 file AllPOs.txt. */ - 7 => array( - '!cbm', - '!sz', '!subzone', - '!realpc', - ), - /* Math functions, some are aliases for the symbols. */ - 8 => array( - 'not', 'div', 'mod', 'xor', 'or', 'sin', 'cos', 'tan', - 'arcsin', 'arccos', 'arctan', 'int', 'float', - - ), - - ), - 'SYMBOLS' => array( -// '[', ']', '(', ')', '{', '}', // These are already defined by GeSHi as BRACKETS. - '*=', '#', '!', '^', '-', '*', '/', - '%', '+', '-', '<<', '>>', '>>>', - '<', '>', '^', '<=', '<', '>=', '>', '!=', - '=', '&', '|', '<>', - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false, - 7 => false, - 8 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00f; font-weight:bold;', - 2 => 'color: #00f; font-weight:bold;', - 3 => 'color: #080; font-weight:bold;', - 4 => 'color: #f00; font-weight:bold;', - 5 => 'color: #80f; font-weight:bold;', - 6 => 'color: #f08; font-weight:bold;', - 7 => 'color: #a04; font-weight:bold; font-style: italic;', - 8 => 'color: #000;', - ), - 'COMMENTS' => array( - 1 => 'color: #999; font-style: italic;', - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #009; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #000;' - ), - 'STRINGS' => array( - 0 => 'color: #080;' - ), - 'NUMBERS' => array( - GESHI_NUMBER_INT_BASIC => 'color: #f00;', - GESHI_NUMBER_HEX_PREFIX_DOLLAR => 'color: #f00;', - GESHI_NUMBER_HEX_PREFIX => 'color: #f00;', - GESHI_NUMBER_BIN_PREFIX_PERCENT => 'color: #f00;', - GESHI_NUMBER_FLT_NONSCI => 'color: #f00;', - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #080;' - ), - 'REGEXPS' => array( - 0 => 'color: #f00;' - , 1 => 'color: #933;' - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - 8 => '', - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'NUMBERS' => - GESHI_NUMBER_INT_BASIC | - GESHI_NUMBER_FLT_NONSCI | - GESHI_NUMBER_HEX_PREFIX_DOLLAR | - GESHI_NUMBER_HEX_PREFIX | - GESHI_NUMBER_BIN_PREFIX_PERCENT, - // AMCE Octal format not support and gets picked up as Decimal unfortunately. - 'REGEXPS' => array( - //ACME .# Binary number format. e.g. %..##..##..## - 0 => '\%[\.\#]{1,64}', - //ACME Local Labels - 1 => '\.[_a-zA-Z][_a-zA-Z0-9]*', - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 8, - 'PARSER_CONTROL' => array( - 'NUMBERS' => array( - 'PRECHECK_RX' => '/[\da-fA-F\.\$\%]/' - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php deleted file mode 100644 index 205cdd1d..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php +++ /dev/null @@ -1,239 +0,0 @@ - 'MOS 6502 (6510) Kick Assembler format', - 'COMMENT_SINGLE' => array(1 => '//'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - /* 6502/6510 Opcodes including undocumented opcodes as Kick Assembler 3.13 does not make a distinction - they are ALL valid. */ - 1 => array( - 'adc', 'ahx', 'alr', 'anc', 'anc2', 'and', 'arr', 'asl', - 'axs', 'bcc', 'bcs', 'beq', 'bit', 'bmi', 'bne', 'bpl', - 'brk', 'bvc', 'bvs', 'clc', 'cld', 'cli', 'clv', 'cmp', - 'cpx', 'cpy', 'dcp', 'dec', 'dex', 'dey', 'eor', 'inc', - 'inx', 'iny', 'isc', 'jmp', 'jsr', 'las', 'lax', 'lda', - 'ldx', 'ldy', 'lsr', 'nop', 'ora', 'pha', 'php', 'pla', - 'plp', 'rla', 'rol', 'ror', 'rra', 'rti', 'rts', 'sax', - 'sbc', 'sbc2', 'sec', 'sed', 'sei', 'shx', 'shy', 'slo', - 'sre', 'sta', 'stx', 'sty', 'tas', 'tax', 'tay', 'tsx', - 'txa', 'txs', 'tya', 'xaa', - ), - /* DTV additional Opcodes. */ - 2 => array( - 'bra', 'sac', 'sir' - ), - /* Index Registers, yes the 6502 has other registers by they are only - * accessable by specific opcodes. */ - 3 => array( - 'x', 'y' - ), - /* Directives. */ - 4 => array( - '.pc', '.pseudopc', 'virtual', '.align', '.byte', '.word', '.text', '.fill', - '.import source', '.import binary', '.import c64', '.import text', '.import', '.print', '.printnow', - '.error', '.var', '.eval', '.const', '.eval const', '.enum', '.label', '.define', '.struct', - 'if', '.for', '.macro', '.function', '.return', '.pseudocommand', '.namespace', '.filenamespace', - '.assert', '.asserterror', - ), - /* Kick Assembler 3.13 Functions/Operators. */ - 5 => array( - 'size', 'charAt', 'substring', 'asNumber', 'asBoolean', 'toIntString', 'toBinaryString', 'toOctalString', - 'toHexString', 'lock', // String functions/operators. - 'get', 'set', 'add', 'remove', 'shuffle', // List functions. - 'put', 'keys', // Hashtable functions. - 'getType', 'getValue', 'CmdArgument', // Pseudo Commands functions. - 'asmCommandSize', // Opcode Constants functions. - 'LoadBinary', 'getSize', - 'LoadSid', 'getData', - 'LoadPicture', 'width', 'height', 'getPixel', 'getSinglecolorByte', 'getMulticolorByte', - 'createFile', 'writeln', - 'cmdLineVars', - 'getX', 'getY', 'getZ', // Vector functions. - 'RotationMatrix', 'ScaleMatrix', 'MoveMatrix', 'PerspectiveMatrix', // Matrix functions. - - ), - - /* Kick Assembler 3.13 Math Functions. */ - 6 => array( - 'abs', 'acos', 'asin', 'atan', 'atan2', 'cbrt', 'ceil', 'cos', 'cosh', - 'exp', 'expm1', 'floor', 'hypot', 'IEEEremainder', 'log', 'log10', - 'log1p', 'max', 'min', 'pow', 'mod', 'random', 'round', 'signum', - 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'toDegrees', 'toRadians', - ), - - /* Kick Assembler 3.13 Objects/Data Types. */ - 7 => array( - 'List', // List() Object. - 'Hashtable', // Hashtable() Object. - 'Vector', // Vector() Object. - 'Matrix', // Matrix() Object. - ), - - /* Kick Assembler 3.13 Constants. */ - 8 => array( - 'PI', 'E', // Math Constants. - 'AT_ABSOLUTE' , 'AT_ABSOLUTEX' , 'AT_ABSOLUTEY' , 'AT_IMMEDIATE', // Pseudo Commands Constants. - 'AT_INDIRECT' , 'AT_IZEROPAGEX' , 'AT_IZEROPAGEY' , 'AT_NONE', - 'BLACK', 'WHITE', 'RED', 'CYAN', 'PURPLE', 'GREEN', 'BLUE', // Colour Constants. - 'YELLOW', 'ORANGE', 'BROWN', 'LIGHT_RED', 'DARK_GRAY', 'GRAY', - 'LIGHT_GREEN', 'LIGHT_BLUE', 'LIGHT_GRAY', - 'C64FILE', // Template Tag names. - 'BF_C64FILE', 'BF_BITMAP_SINGLECOLOR', 'BF_KOALA' , 'BF_FLI', // Binary format constant - ), - - ), - 'SYMBOLS' => array( -// '[', ']', '(', ')', '{', '}', // These are already defined by GeSHi as BRACKETS. - '-', '+', '-', '*', '/', '>', '<', '<<', '>>', '&', '|', '^', '=', '==', - '!=', '>=', '<=', '!', '&&', '||', '#', - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => true, - 5 => true, - 6 => true, - 7 => true, - 8 => true, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00f; font-weight:bold;', - 2 => 'color: #00f; font-weight:bold;', - 3 => 'color: #00f; font-weight:bold;', - 4 => 'color: #080; font-weight:bold;', - 5 => 'color: #80f; font-weight:bold;', - 6 => 'color: #f08; font-weight:bold;', - 7 => 'color: #a04; font-weight:bold; font-style: italic;', - 8 => 'color: #f08; font-weight:bold;', - ), - 'COMMENTS' => array( - 1 => 'color: #999; font-style: italic;', - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #009; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #000;' - ), - 'STRINGS' => array( - 0 => 'color: #080;' - ), - 'NUMBERS' => array( - GESHI_NUMBER_INT_BASIC => 'color: #f00;', - GESHI_NUMBER_HEX_PREFIX_DOLLAR => 'color: #f00;', - GESHI_NUMBER_BIN_PREFIX_PERCENT => 'color: #f00;', - GESHI_NUMBER_FLT_NONSCI => 'color: #f00;', - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #080;' - ), - 'REGEXPS' => array( - 0 => 'color: #933;', - 1 => 'color: #933;', - 2 => 'color: #933;', - 3 => 'color: #00f; font-weight:bold;', - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - 8 => '', - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'NUMBERS' => - GESHI_NUMBER_INT_BASIC | - GESHI_NUMBER_FLT_NONSCI | - GESHI_NUMBER_HEX_PREFIX_DOLLAR | - GESHI_NUMBER_BIN_PREFIX_PERCENT, - // AMCE Octal format not support and gets picked up as Decimal unfortunately. - 'REGEXPS' => array( - //Labels end with a collon. - 0 => '[!]{0,1}[_a-zA-Z][_a-zA-Z0-9]*\:', - //Multi Labels (local labels) references start with ! and end with + or - for forward/backward reference. - 1 => '![_a-zA-Z][_a-zA-Z0-9]*[+-]', - //Macros start with a colon :Macro. - 2 => ':[_a-zA-Z][_a-zA-Z0-9]*', - // Opcode Constants, such as LDA_IMM, STA_IZPY are basically all 6502 opcodes - // in UPPER case followed by _underscore_ and the ADDRESS MODE. - // As you might imagine that is rather a lot ( 78 supported Opcodes * 12 Addressing modes = 936 variations) - // So I thought it better and easier to maintain as a regular expression. - // NOTE: The order of the Address Modes must be maintained or it wont work properly (eg. place ZP first and find out!) - 3 => '[A-Z]{3}[2]?_(?:IMM|IND|IZPX|IZPY|ZPX|ZPY|ABSX|ABSY|REL|ABS|ZP)', - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 8, - 'PARSER_CONTROL' => array( - 'NUMBERS' => array( - 'PRECHECK_RX' => '/[\da-fA-F\.\$\%]/' - ), - 'KEYWORDS' => array( - 5 => array ( - 'DISALLOWED_BEFORE' => "(?|^&'\"])" - ), - 6 => array ( - 'DISALLOWED_BEFORE' => "(?|^&'\"])" - ), - 8 => array ( - 'DISALLOWED_BEFORE' => "(?|^&'\"])" - ) - ) - ), -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php deleted file mode 100644 index 4efe25e3..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php +++ /dev/null @@ -1,187 +0,0 @@ - 'MOS 6502 (6510) TASM/64TASS 1.46 Assembler format', - 'COMMENT_SINGLE' => array(1 => ';'), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - /* 6502/6510 Opcodes. */ - 1 => array( - 'adc', 'and', 'asl', 'bcc', 'bcs', 'beq', 'bit', 'bmi', - 'bne', 'bpl', 'brk', 'bvc', 'bvs', 'clc', 'cld', 'cli', - 'clv', 'cmp', 'cpx', 'cpy', 'dec', 'dex', 'dey', 'eor', - 'inc', 'inx', 'iny', 'jmp', 'jsr', 'lda', 'ldx', 'ldy', - 'lsr', 'nop', 'ora', 'pha', 'php', 'pla', 'plp', 'rol', - 'ror', 'rti', 'rts', 'sbc', 'sec', 'sed', 'sei', 'sta', - 'stx', 'sty', 'tax', 'tay', 'tsx', 'txa', 'txs', 'tya', - ), - /* Index Registers, yes the 6502 has other registers by they are only - * accessable by specific opcodes. The 65816 also has access to the stack pointer S. */ - 2 => array( - 'x', 'y', 's' - ), - /* Directives. */ - 3 => array( - '.al', '.align', '.as', '.assert', '.binary', '.byte', '.cerror', '.char', - '.comment', '.cpu', '.cwarn', '.databank', '.dpage', '.else', '.elsif', - '.enc', '.endc', '.endif', '.endm', '.endp', '.error', '.fi', '.fill', - '.for', '.here', '.if', '.ifeq', '.ifmi', '.ifne', '.ifpl', - '.include', '.int', '.logical', '.long', '.macro', '.next', '.null', '.offs', - '.page', '.pend', '.proc', '.rept', '.rta', '.shift', '.text', '.warn', '.word', - '.xl', '.xs', -// , '*=' // Not a valid keyword (uses both * and = signs) moved to symbols instead. - ), - - /* 6502/6510 undocumented opcodes (often referred to as illegal instructions). - * These are present in the 6502/6510 but NOT in the newer CMOS revisions of the 65C02 or 65816. - * As they are undocumented instructions there are no "official" names for them, these are the names - * used by 64TASS V1.46. - */ - 4 => array( - 'ahx', 'alr', 'anc', 'ane', 'arr', 'asr', 'axs', 'dcm', - 'dcp', 'ins', 'isb', 'isc', 'jam', 'lae', 'las', 'lax', - 'lds', 'lxa', 'rla', 'rra', 'sax', 'sbx', 'sha', 'shs', - 'shx', 'shy', 'slo', 'sre', 'tas', 'xaa', - ), - /* 65c02 instructions, MOS added a few (much needed) instructions in the - * CMOS version of the 6502, but stupidly removed the undocumented/illegal opcodes. */ - 5 => array( - 'bra', 'dea', 'gra', 'ina', 'phx', 'phy', 'plx', 'ply', - 'stz', 'trb', 'tsb', - ), - /* 65816 instructions. */ - 6 => array( - 'brl', 'cop', 'jml', 'jsl', 'mvn', 'mvp', 'pea', 'pei', - 'per', 'phb', 'phd', 'phk', 'plb', 'pld', 'rep', 'rtl', - 'sep', 'stp', 'swa', 'tad', 'tcd', 'tcs', 'tda', - 'tdc', 'tsa', 'tsc', 'txy', 'tyx', 'wai', 'xba', 'xce', - ), - /* Deprecated directives (or yet to be implemented). */ - 7 => array( - '.global', '.check' - ), - ), - 'SYMBOLS' => array( -// '[', ']', '(', ')', '{', '}', // These are already defined by GeSHi as BRACKETS. - '*=', '#', '<', '>', '`', '=', '<', '>', - '!=', '>=', '<=', '+', '-', '*', '/', '//', '|', - '^', '&', '<<', '>>', '-', '~', '!', - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false, - 7 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00f; font-weight:bold;', - 2 => 'color: #00f; font-weight:bold;', - 3 => 'color: #080; font-weight:bold;', - 4 => 'color: #f00; font-weight:bold;', - 5 => 'color: #80f; font-weight:bold;', - 6 => 'color: #f08; font-weight:bold;', - 7 => 'color: #a04; font-weight:bold; font-style: italic;', - ), - 'COMMENTS' => array( - 1 => 'color: #999; font-style: italic;', - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #009; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #000;' - ), - 'STRINGS' => array( - 0 => 'color: #080;' - ), - 'NUMBERS' => array( - GESHI_NUMBER_INT_BASIC => 'color: #f00;', - GESHI_NUMBER_HEX_PREFIX_DOLLAR => 'color: #f00;', - GESHI_NUMBER_BIN_PREFIX_PERCENT => 'color: #f00;', - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #080;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'NUMBERS' => - GESHI_NUMBER_INT_BASIC | - GESHI_NUMBER_HEX_PREFIX_DOLLAR | - GESHI_NUMBER_BIN_PREFIX_PERCENT, - // AMCE Octal format not support and gets picked up as Decimal unfortunately. - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 8, - 'PARSER_CONTROL' => array( - 'NUMBERS' => array( - 'PRECHECK_RX' => '/[\da-fA-F\.\$\%]/' - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php deleted file mode 100644 index 90aea4c6..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php +++ /dev/null @@ -1,166 +0,0 @@ - 'Motorola 68000 - HiSoft Devpac ST 2 Assembler format', - 'COMMENT_SINGLE' => array(1 => ';'), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - /* Directives. */ - 1 => array( - 'end', 'include', 'incbin', 'opt', 'even', 'cnop', 'dc.b', 'dc.w', - 'dc.l', 'ds.b', 'ds.w', 'ds.l', 'dcb.b', 'dcb.w', 'dcb.l', - 'fail', 'output', '__g2', 'rept', 'endr', 'list', 'nolist', 'plen', - 'llen', 'ttl', 'subttl', 'spc', 'page', 'listchar', 'format', - 'equ', 'equr', 'set', 'reg', 'rs.b', 'rs.w', 'rs.l', 'rsreset', - 'rsset', '__rs', 'ifeq', 'ifne', 'ifgt', 'ifge', 'iflt', 'ifle', 'endc', - 'ifd', 'ifnd', 'ifc', 'ifnc', 'elseif', 'iif', 'macro', 'endm', 'mexit', - 'narg', '\@', 'section', 'text', 'data', 'bss', 'xdef', 'xref', 'org', - 'offset', '__lk', 'comment', - ), - /* 68000 Opcodes. */ - 2 => array( - 'abcd', 'add', 'adda', 'addi', 'addq', 'addx', 'and', 'andi', - 'asl', 'asr', 'bcc', 'bchg', 'bclr', 'bcs', 'beq', 'bge', - 'bgt', 'bhi', 'ble', 'bls', 'blt', 'bmi', 'bne', 'bpl', - 'bra', 'bset', 'bsr', 'btst', 'bvc', 'bvs', 'chk', 'clr', - 'cmp', 'cmpa', 'cmpi', 'cmpm', 'dbcc', 'dbcs', 'dbeq', 'dbf', - 'dbge', 'dbgt', 'dbhi', 'dble', 'dbls', 'dblt', 'dbmi', 'dbne', - 'dbpl', 'dbra', 'dbt', 'dbvc', 'dbvs', 'divs', 'divu', 'eor', - 'eori', 'exg', 'ext','illegal','jmp', 'jsr', 'lea', 'link', - 'lsl', 'lsr', 'move','movea','movem','movep','moveq', 'muls', - 'mulu', 'nbcd', 'neg', 'negx', 'nop', 'not', 'or', 'ori', - 'pea', 'reset', 'rol', 'ror', 'roxl', 'roxr', 'rte', 'rtr', - 'rts', 'sbcd', 'scc', 'scs', 'seq', 'sf', 'sge', 'sgt', - 'shi', 'sle', 'sls', 'slt', 'smi', 'sne', 'spl', 'st', - 'stop', 'sub', 'suba', 'subi', 'subq', 'subx', 'svc', 'svs', - 'swap', 'tas', 'trap','trapv', 'tst', 'unlk', - ), - /* oprand sizes. */ - 3 => array( - 'b', 'w', 'l' , 's' - ), - /* 68000 Registers. */ - 4 => array( - 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', - 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'sp', 'usp', 'ssp', - 'pc', 'ccr', 'sr', - ), - ), - 'SYMBOLS' => array( -// '[', ']', '(', ')', '{', '}', // These are already defined by GeSHi as BRACKETS. - '+', '-', '~', '<<', '>>', '&', - '!', '^', '*', '/', '=', '<', '>', - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #f08; font-weight:bold;', - 2 => 'color: #00f; font-weight:bold;', - 3 => 'color: #00f; font-weight:bold;', - 4 => 'color: #080; font-weight:bold;', - ), - 'COMMENTS' => array( - 1 => 'color: #999; font-style: italic;', - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #009; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #000;' - ), - 'STRINGS' => array( - 0 => 'color: #080;' - ), - 'NUMBERS' => array( - GESHI_NUMBER_INT_BASIC => 'color: #f00;', - GESHI_NUMBER_HEX_PREFIX_DOLLAR => 'color: #f00;', - GESHI_NUMBER_BIN_PREFIX_PERCENT => 'color: #f00;', - GESHI_NUMBER_OCT_PREFIX_AT => 'color: #f00;', - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #080;' - ), - 'REGEXPS' => array( - 0 => 'color: #933;' - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'NUMBERS' => - GESHI_NUMBER_INT_BASIC | - GESHI_NUMBER_HEX_PREFIX_DOLLAR | - GESHI_NUMBER_OCT_PREFIX_AT | - GESHI_NUMBER_BIN_PREFIX_PERCENT, - 'REGEXPS' => array( - //Labels may end in a colon. - 0 => '(?<=\A\x20|\r|\n|^)[\._a-zA-Z][\._a-zA-Z0-9]*[\:]?[\s]' - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 8, - 'PARSER_CONTROL' => array( - 'NUMBERS' => array( - 'PRECHECK_RX' => '/[\da-fA-F\.\$\%\@]/' - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php deleted file mode 100644 index faa5efc1..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php +++ /dev/null @@ -1,1407 +0,0 @@ -.htm - * - * CHANGES - * ------- - * 2009/02/25 (1.0.8.3) - * - Some more rework of the language file - * 2009/01/04 (1.0.8.2) - * - Major Release, more than 1000 statements and keywords added = whole abap 7.1 (Sandra Rossi) - * 2007/06/27 (1.0.0) - * - First Release - * - * TODO - * ---- - * - in DATA data TYPE type, 2nd "data" and 2nd "type" are highlighted with data - * style, but should be ignored. Same problem for all words!!! This is quite impossible to - * solve it as we should define syntaxes of all statements (huge effort!) and use a lex - * or something like that instead of regexp I guess. - * - Some words are considered as being statement names (report, tables, etc.) though they - * are used as keyword in some statements. For example: FORM xxxx TABLES itab. It was - * arbitrary decided to define them as statement instead of keyword, because it may be - * useful to have the URL to SAP help for some of them. - * - if a comment is between 2 words of a keyword (for example SEPARATED "comment \n BY), - * it is not considered as a keyword, but it should! - * - for statements like "READ DATASET", GeSHi does not allow to set URLs because these - * statements are determined by REGEXPS. For "READ DATASET", the URL should be - * ABAPREAD_DATASET.htm. If a technical solution is found, be careful : URLs - * are sometimes not valid because the URL does not exist. For example, for "AT NEW" - * statement, the URL should be ABAPAT_ITAB.htm (not ABAPAT_NEW.htm). - * There are many other exceptions. - * Note: for adding this functionality within your php program, you can execute this code: - * function add_urls_to_multi_tokens( $matches ) { - * $url = preg_replace( "/[ \n]+/" , "_" , $matches[3] ); - * if( $url == $matches[3] ) return $matches[0] ; - * else return $matches[1]."".$matches[3]."".$matches[4]; - * } - * $html = $geshi->parse_code(); - * $html = preg_replace_callback( "£(zzz:(control|statement|data);\">)(.+?)()£s", "add_urls_to_multi_tokens", $html ); - * echo $html; - * - Numbers followed by a dot terminating the statement are not properly recognized - * - ************************************************************************************* - * - * 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' => 'ABAP', - 'COMMENT_SINGLE' => array( - 1 => '"' - ), - 'COMMENT_MULTI' => array(), - 'COMMENT_REGEXP' => array( - // lines beginning with star at 1st position are comments - // (star anywhere else is not a comment, especially be careful with - // "assign dref->* to " statement) - 2 => '/^\*.*?$/m' - ), - 'CASE_KEYWORDS' => 0, - 'QUOTEMARKS' => array( - 1 => "'", - 2 => "`" - ), - 'ESCAPE_CHAR' => '', - - 'KEYWORDS' => array( - //*********************************************** - // Section 2 : process sequences of several tokens - //*********************************************** - - 7 => array( - 'at new', - 'at end of', - 'at first', - 'at last', - 'loop at', - 'loop at screen', - ), - - 8 => array( - 'private section', - 'protected section', - 'public section', - 'at line-selection', - 'at selection-screen', - 'at user-command', - 'assign component', - 'assign table field', - 'call badi', - 'call customer-function', - 'call customer subscreen', - 'call dialog', - 'call function', - 'call method', - 'call screen', - 'call selection-screen', - 'call transaction', - 'call transformation', - 'close cursor', - 'close dataset', - 'commit work', - 'convert date', - 'convert text', - 'convert time stamp', - 'create data', - 'create object', - 'delete dataset', - 'delete from', - 'describe distance', - 'describe field', - 'describe list', - 'describe table', - 'exec sql', - 'exit from sql', - 'exit from step-loop', - 'export dynpro', - 'export nametab', - 'free memory', - 'generate subroutine-pool', - 'get badi', - 'get bit', - 'get cursor', - 'get dataset', - 'get locale', - 'get parameter', - 'get pf-status', - 'get property', - 'get reference', - 'get run time', - 'get time', - 'get time stamp', - 'import directory', - 'insert report', - 'insert text-pool', - 'leave list-processing', - 'leave program', - 'leave screen', - 'leave to list-processing', - 'leave to transaction', - 'modify line', - 'modify screen', - 'move percentage', - 'open cursor', - 'open dataset', - 'raise event', - 'raise exception', - 'read dataset', - 'read line', - 'read report', - 'read table', - 'read textpool', - 'receive results from function', - 'refresh control', - 'rollback work', - 'set bit', - 'set blank lines', - 'set country', - 'set cursor', - 'set dataset', - 'set extended check', - 'set handler', - 'set hold data', - 'set language', - 'set left scroll-boundary', - 'set locale', - 'set margin', - 'set parameter', - 'set pf-status', - 'set property', - 'set run time analyzer', - 'set run time clock', - 'set screen', - 'set titlebar', - 'set update task', - 'set user-command', - 'suppress dialog', - 'truncate dataset', - 'wait until', - 'wait up to', - ), - - 9 => array( - 'accepting duplicate keys', - 'accepting padding', - 'accepting truncation', - 'according to', - 'actual length', - 'adjacent duplicates', - 'after input', - 'all blob columns', - 'all clob columns', - 'all fields', - 'all methods', - 'all other columns', - 'and mark', - 'and return to screen', - 'and return', - 'and skip first screen', - 'and wait', - 'any table', - 'appendage type', - 'archive mode', - 'archiving parameters', - 'area handle', - 'as checkbox', - 'as icon', - 'as line', - 'as listbox', - 'as person table', - 'as search patterns', - 'as separate unit', - 'as subscreen', - 'as symbol', - 'as text', - 'as window', - 'at cursor-selection', - 'at exit-command', - 'at next application statement', - 'at position', - - 'backup into', - 'before output', - 'before unwind', - 'begin of block', - 'begin of common part', - 'begin of line', - 'begin of screen', - 'begin of tabbed block', - 'begin of version', - 'begin of', - 'big endian', - 'binary mode', - 'binary search', - 'by kernel module', - 'bypassing buffer', - - 'client specified', - 'code page', - 'code page hint', - 'code page into', - 'color black', - 'color blue', - 'color green', - 'color pink', - 'color red', - 'color yellow', - 'compression off', - 'compression on', - 'connect to', - 'corresponding fields of table', - 'corresponding fields of', - 'cover page', - 'cover text', - 'create package', - 'create private', - 'create protected', - 'create public', - 'current position', - - 'data buffer', - 'data values', - 'dataset expiration', - 'daylight saving time', - 'default key', - 'default program', - 'default screen', - 'defining database', - 'deleting leading', - 'deleting trailing', - 'directory entry', - 'display like', - 'display offset', - 'during line-selection', - 'dynamic selections', - - 'edit mask', - 'end of block', - 'end of common part', - 'end of file', - 'end of line', - 'end of screen', - 'end of tabbed block', - 'end of version', - 'end of', - 'endian into', - 'ending at', - 'enhancement options into', - 'enhancement into', - 'environment time format', - 'execute procedure', - 'exporting list to memory', - 'extension type', - - 'field format', - 'field selection', - 'field value into', - 'final methods', - 'first occurrence of', - 'fixed-point arithmetic', - 'for all entries', - 'for all instances', - 'for appending', - 'for columns', - 'for event of', - 'for field', - 'for high', - 'for input', - 'for lines', - 'for low', - 'for node', - 'for output', - 'for select', - 'for table', - 'for testing', - 'for update', - 'for user', - 'frame entry', - 'frame program from', - 'from code page', - 'from context', - 'from database', - 'from logfile id', - 'from number format', - 'from screen', - 'from table', - 'function key', - - 'get connection', - 'global friends', - 'group by', - - 'hashed table of', - 'hashed table', - - 'if found', - 'ignoring case', - 'ignoring conversion errors', - 'ignoring structure boundaries', - 'implementations from', - 'in background', - 'in background task', - 'in background unit', - 'in binary mode', - 'in byte mode', - 'in char-to-hex mode', - 'in character mode', - 'in group', - 'in legacy binary mode', - 'in legacy text mode', - 'in program', - 'in remote task', - 'in text mode', - 'in table', - 'in update task', - 'include bound', - 'include into', - 'include program from', - 'include structure', - 'include type', - 'including gaps', - 'index table', - 'inheriting from', - 'init destination', - 'initial line of', - 'initial line', - 'initial size', - 'internal table', - 'into sortable code', - - 'keep in spool', - 'keeping directory entry', - 'keeping logical unit of work', - 'keeping task', - 'keywords from', - - 'left margin', - 'left outer', - 'levels into', - 'line format', - 'line into', - 'line of', - 'line page', - 'line value from', - 'line value into', - 'lines of', - 'list authority', - 'list dataset', - 'list name', - 'little endian', - 'lob handle for', - 'local friends', - 'locator for', - 'lower case', - - 'main table field', - 'match count', - 'match length', - 'match line', - 'match offset', - 'matchcode object', - 'maximum length', - 'maximum width into', - 'memory id', - 'message into', - 'messages into', - 'modif id', - - 'nesting level', - 'new list identification', - 'next cursor', - 'no database selection', - 'no dialog', - 'no end of line', - 'no fields', - 'no flush', - 'no intervals', - 'no intervals off', - 'no standard page heading', - 'no-extension off', - 'non-unique key', - 'non-unique sorted key', - 'not at end of mode', - 'number of lines', - 'number of pages', - - 'object key', - 'obligatory off', - 'of current page', - 'of page', - 'of program', - 'offset into', - 'on block', - 'on commit', - 'on end of task', - 'on end of', - 'on exit-command', - 'on help-request for', - 'on radiobutton group', - 'on rollback', - 'on value-request for', - 'open for package', - 'option class-coding', - 'option class', - 'option coding', - 'option expand', - 'option syncpoints', - 'options from', - 'order by', - 'overflow into', - - 'package section', - 'package size', - 'preferred parameter', - 'preserving identifier escaping', - 'primary key', - 'print off', - 'print on', - 'program from', - 'program type', - - 'radiobutton groups', - 'radiobutton group', - 'range of', - 'reader for', - 'receive buffer', - 'reduced functionality', - 'ref to data', - 'ref to object', - 'ref to', - - 'reference into', - 'renaming with suffix', - 'replacement character', - 'replacement count', - 'replacement length', - 'replacement line', - 'replacement offset', - 'respecting blanks', - 'respecting case', - 'result into', - 'risk level', - - 'sap cover page', - 'search fkeq', - 'search fkge', - 'search gkeq', - 'search gkge', - 'section of', - 'send buffer', - 'separated by', - 'shared buffer', - 'shared memory', - 'shared memory enabled', - 'skipping byte-order mark', - 'sorted by', - 'sorted table of', - 'sorted table', - 'spool parameters', - 'standard table of', - 'standard table', - 'starting at', - 'starting new task', - 'statements into', - 'structure default', - 'structures into', - - 'table field', - 'table of', - 'text mode', - 'time stamp', - 'time zone', - 'to code page', - 'to column', - 'to context', - 'to first page', - 'to last page', - 'to last line', - 'to line', - 'to lower case', - 'to number format', - 'to page', - 'to sap spool', - 'to upper case', - 'tokens into', - 'transporting no fields', - 'type tableview', - 'type tabstrip', - - 'unicode enabling', - 'up to', - 'upper case', - 'using edit mask', - 'using key', - 'using no edit mask', - 'using screen', - 'using selection-screen', - 'using selection-set', - 'using selection-sets of program', - - 'valid between', - 'valid from', - 'value check', - 'via job', - 'via selection-screen', - 'visible length', - - 'whenever found', - 'with analysis', - 'with byte-order mark', - 'with comments', - 'with current switchstates', - 'with explicit enhancements', - 'with frame', - 'with free selections', - 'with further secondary keys', - 'with header line', - 'with hold', - 'with implicit enhancements', - 'with inactive enhancements', - 'with includes', - 'with key', - 'with linefeed', - 'with list tokenization', - 'with native linefeed', - 'with non-unique key', - 'with null', - 'with pragmas', - 'with precompiled headers', - 'with selection-table', - 'with smart linefeed', - 'with table key', - 'with test code', - 'with type-pools', - 'with unique key', - 'with unix linefeed', - 'with windows linefeed', - 'without further secondary keys', - 'without selection-screen', - 'without spool dynpro', - 'without trmac', - 'word into', - 'writer for' - ), - - //********************************************************** - // Other abap statements - //********************************************************** - 3 => array( - 'add', - 'add-corresponding', - 'aliases', - 'append', - 'assign', - 'at', - 'authority-check', - - 'break-point', - - 'clear', - 'collect', - 'compute', - 'concatenate', - 'condense', - 'class', - 'class-events', - 'class-methods', - 'class-pool', - - 'define', - 'delete', - 'demand', - 'detail', - 'divide', - 'divide-corresponding', - - 'editor-call', - 'end-of-file', - 'end-enhancement-section', - 'end-of-definition', - 'end-of-page', - 'end-of-selection', - 'endclass', - 'endenhancement', - 'endexec', - 'endform', - 'endfunction', - 'endinterface', - 'endmethod', - 'endmodule', - 'endon', - 'endprovide', - 'endselect', - 'enhancement', - 'enhancement-point', - 'enhancement-section', - 'export', - 'extract', - 'events', - - 'fetch', - 'field-groups', - 'find', - 'format', - 'form', - 'free', - 'function-pool', - 'function', - - 'get', - - 'hide', - - 'import', - 'infotypes', - 'input', - 'insert', - 'include', - 'initialization', - 'interface', - 'interface-pool', - 'interfaces', - - 'leave', - 'load-of-program', - 'log-point', - - 'maximum', - 'message', - 'methods', - 'method', - 'minimum', - 'modify', - 'move', - 'move-corresponding', - 'multiply', - 'multiply-corresponding', - - 'new-line', - 'new-page', - 'new-section', - - 'overlay', - - 'pack', - 'perform', - 'position', - 'print-control', - 'program', - 'provide', - 'put', - - 'raise', - 'refresh', - 'reject', - 'replace', - 'report', - 'reserve', - - 'scroll', - 'search', - 'select', - 'selection-screen', - 'shift', - 'skip', - 'sort', - 'split', - 'start-of-selection', - 'submit', - 'subtract', - 'subtract-corresponding', - 'sum', - 'summary', - 'summing', - 'supply', - 'syntax-check', - - 'top-of-page', - 'transfer', - 'translate', - 'type-pool', - - 'uline', - 'unpack', - 'update', - - 'window', - 'write' - - ), - - //********************************************************** - // keywords - //********************************************************** - - 4 => array( - 'abbreviated', - 'abstract', - 'accept', - 'acos', - 'activation', - 'alias', - 'align', - 'all', - 'allocate', - 'and', - 'assigned', - 'any', - 'appending', - 'area', - 'as', - 'ascending', - 'asin', - 'assigning', - 'atan', - 'attributes', - 'avg', - - 'backward', - 'between', - 'bit-and', - 'bit-not', - 'bit-or', - 'bit-set', - 'bit-xor', - 'boolc', - 'boolx', - 'bound', - 'bt', - 'blocks', - 'bounds', - 'boxed', - 'by', - 'byte-ca', - 'byte-cn', - 'byte-co', - 'byte-cs', - 'byte-na', - 'byte-ns', - - 'ca', - 'calling', - 'casting', - 'ceil', - 'center', - 'centered', - 'changing', - 'char_off', - 'charlen', - 'circular', - 'class_constructor', - 'client', - 'clike', - 'close', - 'cmax', - 'cmin', - 'cn', - 'cnt', - 'co', - 'col_background', - 'col_group', - 'col_heading', - 'col_key', - 'col_negative', - 'col_normal', - 'col_positive', - 'col_total', - 'color', - 'column', - 'comment', - 'comparing', - 'components', - 'condition', - 'context', - 'copies', - 'count', - 'country', - 'cpi', - 'creating', - 'critical', - 'concat_lines_of', - 'cos', - 'cosh', - 'count_any_not_of', - 'count_any_of', - 'cp', - 'cs', - 'csequence', - 'currency', - 'current', - 'cx_static_check', - 'cx_root', - 'cx_dynamic_check', - - 'dangerous', - 'database', - 'datainfo', - 'date', - 'dbmaxlen', - 'dd/mm/yy', - 'dd/mm/yyyy', - 'ddmmyy', - 'deallocate', - 'decfloat', - 'decfloat16', - 'decfloat34', - 'decimals', - 'default', - 'deferred', - 'definition', - 'department', - 'descending', - 'destination', - 'disconnect', - 'display-mode', - 'distance', - 'distinct', - 'div', - 'dummy', - - 'encoding', - 'end-lines', - 'engineering', - 'environment', - 'eq', - 'equiv', - 'error_message', - 'errormessage', - 'escape', - 'exact', - 'exception-table', - 'exceptions', - 'exclude', - 'excluding', - 'exists', - 'exp', - 'exponent', - 'exporting', - 'extended_monetary', - - 'field', - 'filter-table', - 'filters', - 'filter', - 'final', - 'find_any_not_of', - 'find_any_of', - 'find_end', - 'floor', - 'first-line', - 'font', - 'forward', - 'for', - 'frac', - 'from_mixed', - 'friends', - 'from', - - 'giving', - 'ge', - 'gt', - - 'handle', - 'harmless', - 'having', - 'head-lines', - 'help-id', - 'help-request', - 'high', - 'hold', - 'hotspot', - - 'id', - 'ids', - 'immediately', - 'implementation', - 'importing', - 'in', - 'initial', - 'incl', - 'including', - 'increment', - 'index', - 'index-line', - 'inner', - 'inout', - 'intensified', - 'into', - 'inverse', - 'is', - 'iso', - - 'join', - - 'key', - 'kind', - - 'log10', - 'language', - 'late', - 'layout', - 'le', - 'lt', - 'left-justified', - 'leftplus', - 'leftspace', - 'left', - 'length', - 'level', - 'like', - 'line-count', - 'line-size', - 'lines', - 'line', - 'load', - 'long', - 'lower', - 'low', - 'lpi', - - 'matches', - 'match', - 'mail', - 'major-id', - 'max', - 'medium', - 'memory', - 'message-id', - 'module', - 'minor-id', - 'min', - 'mm/dd/yyyy', - 'mm/dd/yy', - 'mmddyy', - 'mode', - 'modifier', - 'mod', - 'monetary', - - 'name', - 'nb', - 'ne', - 'next', - 'no-display', - 'no-extension', - 'no-gap', - 'no-gaps', - 'no-grouping', - 'no-heading', - 'no-scrolling', - 'no-sign', - 'no-title', - 'no-topofpage', - 'no-zero', - 'nodes', - 'non-unicode', - 'no', - 'number', - 'nmax', - 'nmin', - 'not', - 'null', - 'numeric', - 'numofchar', - - 'o', - 'objects', - 'obligatory', - 'occurs', - 'offset', - 'off', - 'of', - 'only', - 'open', - 'option', - 'optional', - 'options', - 'output-length', - 'output', - 'out', - 'on change of', - 'or', - 'others', - - 'pad', - 'page', - 'pages', - 'parameter-table', - 'part', - 'performing', - 'pos_high', - 'pos_low', - 'priority', - 'public', - 'pushbutton', - - 'queue-only', - 'quickinfo', - - 'raising', - 'range', - 'read-only', - 'received', - 'receiver', - 'receiving', - 'redefinition', - 'reference', - 'regex', - 'replacing', - 'reset', - 'responsible', - 'result', - 'results', - 'resumable', - 'returncode', - 'returning', - 'right', - 'right-specified', - 'rightplus', - 'rightspace', - 'round', - 'rows', - 'repeat', - 'requested', - 'rescale', - 'reverse', - - 'scale_preserving', - 'scale_preserving_scientific', - 'scientific', - 'scientific_with_leading_zero', - 'screen', - 'scrolling', - 'seconds', - 'segment', - 'shift_left', - 'shift_right', - 'sign', - 'simple', - 'sin', - 'sinh', - 'short', - 'shortdump-id', - 'sign_as_postfix', - 'single', - 'size', - 'some', - 'source', - 'space', - 'spots', - 'stable', - 'state', - 'static', - 'statusinfo', - 'sqrt', - 'string', - 'strlen', - 'structure', - 'style', - 'subkey', - 'submatches', - 'substring', - 'substring_after', - 'substring_before', - 'substring_from', - 'substring_to', - 'super', - 'supplied', - 'switch', - - 'tan', - 'tanh', - 'table_line', - 'table', - 'tab', - 'then', - 'timestamp', - 'times', - 'time', - 'timezone', - 'title-lines', - 'title', - 'top-lines', - 'to', - 'to_lower', - 'to_mixed', - 'to_upper', - 'trace-file', - 'trace-table', - 'transporting', - 'trunc', - 'type', - - 'under', - 'unique', - 'unit', - 'user-command', - 'using', - 'utf-8', - - 'valid', - 'value', - 'value-request', - 'values', - 'vary', - 'varying', - 'version', - - 'warning', - 'where', - 'width', - 'with', - 'word', - 'with-heading', - 'with-title', - - 'xsequence', - 'xstring', - 'xstrlen', - - 'yes', - 'yymmdd', - - 'z', - 'zero' - - ), - - //********************************************************** - // screen statements - //********************************************************** - - 5 => array( - 'call subscreen', - 'chain', - 'endchain', - 'on chain-input', - 'on chain-request', - 'on help-request', - 'on input', - 'on request', - 'on value-request', - 'process' - ), - - //********************************************************** - // internal statements - //********************************************************** - - 6 => array( - 'generate dynpro', - 'generate report', - 'import dynpro', - 'import nametab', - 'include methods', - 'load report', - 'scan abap-source', - 'scan and check abap-source', - 'syntax-check for dynpro', - 'syntax-check for program', - 'syntax-trace', - 'system-call', - 'system-exit', - 'verification-message' - ), - - //********************************************************** - // Control statements - //********************************************************** - - 1 => array( - 'assert', - 'case', - 'catch', - 'check', - 'cleanup', - 'continue', - 'do', - 'else', - 'elseif', - 'endat', - 'endcase', - 'endcatch', - 'endif', - 'enddo', - 'endloop', - 'endtry', - 'endwhile', - 'exit', - 'if', - 'loop', - 'resume', - 'retry', - 'return', - 'stop', - 'try', - 'when', - 'while' - - ), - - //********************************************************** - // variable declaration statements - //********************************************************** - - 2 => array( - 'class-data', - 'controls', - 'constants', - 'data', - 'field-symbols', - 'fields', - 'local', - 'parameters', - 'ranges', - 'select-options', - 'statics', - 'tables', - 'type-pools', - 'types' - ) - ), - 'SYMBOLS' => array( - 0 => array( - '->*', '->', '=>', - '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '!', '%', '^', '&', ':', ',', '.' - ), - 1 => array( - '>=', '<=', '<', '>', '=' - ), - 2 => array( - '?=' - ) - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false, - 7 => false, - 8 => false, - 9 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;', //control statements - 2 => 'color: #cc4050; text-transform: uppercase; font-weight: bold; zzz:data;', //data statements - 3 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;', //first token of other statements - 4 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;', // next tokens of other statements ("keywords") - 5 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;', - 6 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;', - 7 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;', - 8 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;', - 9 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;' - ), - 'COMMENTS' => array( - 1 => 'color: #808080; font-style: italic;', - 2 => 'color: #339933;', - 'MULTI' => 'color: #808080; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #808080;' - ), - 'STRINGS' => array( - 0 => 'color: #4da619;' - ), - 'NUMBERS' => array( - 0 => 'color: #3399ff;' - ), - 'METHODS' => array( - 1 => 'color: #202020;', - 2 => 'color: #202020;' - ), - 'SYMBOLS' => array( - 0 => 'color: #808080;', - 1 => 'color: #800080;', - 2 => 'color: #0000ff;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm', - 2 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm', - 3 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - 8 => '', - 9 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '->', - 2 => '=>' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'PARSER_CONTROL' => array( - 'KEYWORDS' => array( - 7 => array( - 'SPACE_AS_WHITESPACE' => true - ), - 8 => array( - 'SPACE_AS_WHITESPACE' => true - ), - 9 => array( - 'SPACE_AS_WHITESPACE' => true - ) - ) - ), - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php deleted file mode 100644 index e8521f24..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php +++ /dev/null @@ -1,195 +0,0 @@ - 'ActionScript', - 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array( - 1 => array( - '#include', 'for', 'foreach', 'each', 'if', 'elseif', 'else', 'while', 'do', 'dowhile', - 'endwhile', 'endif', 'switch', 'case', 'endswitch', 'return', 'break', 'continue', 'in' - ), - 2 => array( - 'null', 'false', 'true', 'var', - 'default', 'function', 'class', - 'new', '_global' - ), - 3 => array( - '#endinitclip', '#initclip', '__proto__', '_accProps', '_alpha', '_currentframe', - '_droptarget', '_focusrect', '_framesloaded', '_height', '_highquality', '_lockroot', - '_name', '_parent', '_quality', '_root', '_rotation', '_soundbuftime', '_target', '_totalframes', - '_url', '_visible', '_width', '_x', '_xmouse', '_xscale', '_y', '_ymouse', '_yscale', 'abs', - 'Accessibility', 'acos', 'activityLevel', 'add', 'addListener', 'addPage', 'addProperty', - 'addRequestHeader', 'align', 'allowDomain', 'allowInsecureDomain', 'and', 'appendChild', - 'apply', 'Arguments', 'Array', 'asfunction', 'asin', 'atan', 'atan2', 'attachAudio', 'attachMovie', - 'attachSound', 'attachVideo', 'attributes', 'autosize', 'avHardwareDisable', 'background', - 'backgroundColor', 'BACKSPACE', 'bandwidth', 'beginFill', 'beginGradientFill', 'blockIndent', - 'bold', 'Boolean', 'border', 'borderColor', 'bottomScroll', 'bufferLength', 'bufferTime', - 'builtInItems', 'bullet', 'Button', 'bytesLoaded', 'bytesTotal', 'call', 'callee', 'caller', - 'Camera', 'capabilities', 'CAPSLOCK', 'caption', 'catch', 'ceil', 'charAt', 'charCodeAt', - 'childNodes', 'chr', 'clear', 'clearInterval', 'cloneNode', 'close', 'Color', 'concat', - 'connect', 'condenseWhite', 'constructor', 'contentType', 'ContextMenu', 'ContextMenuItem', - 'CONTROL', 'copy', 'cos', 'createElement', 'createEmptyMovieClip', 'createTextField', - 'createTextNode', 'currentFps', 'curveTo', 'CustomActions', 'customItems', 'data', 'Date', - 'deblocking', 'delete', 'DELETEKEY', 'docTypeDecl', 'domain', 'DOWN', - 'duplicateMovieClip', 'duration', 'dynamic', 'E', 'embedFonts', 'enabled', - 'END', 'endFill', 'ENTER', 'eq', 'Error', 'ESCAPE(Konstante)', 'escape(Funktion)', 'eval', - 'exactSettings', 'exp', 'extends', 'finally', 'findText', 'firstChild', 'floor', - 'flush', 'focusEnabled', 'font', 'fps', 'fromCharCode', 'fscommand', - 'gain', 'ge', 'get', 'getAscii', 'getBeginIndex', 'getBounds', 'getBytesLoaded', 'getBytesTotal', - 'getCaretIndex', 'getCode', 'getCount', 'getDate', 'getDay', 'getDepth', 'getEndIndex', 'getFocus', - 'getFontList', 'getFullYear', 'getHours', 'getInstanceAtDepth', 'getLocal', 'getMilliseconds', - 'getMinutes', 'getMonth', 'getNewTextFormat', 'getNextHighestDepth', 'getPan', 'getProgress', - 'getProperty', 'getRGB', 'getSeconds', 'getSelected', 'getSelectedText', 'getSize', 'getStyle', - 'getStyleNames', 'getSWFVersion', 'getText', 'getTextExtent', 'getTextFormat', 'getTextSnapshot', - 'getTime', 'getTimer', 'getTimezoneOffset', 'getTransform', 'getURL', 'getUTCDate', 'getUTCDay', - 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds', - 'getVersion', 'getVolume', 'getYear', 'globalToLocal', 'goto', 'gotoAndPlay', 'gotoAndStop', - 'hasAccessibility', 'hasAudio', 'hasAudioEncoder', 'hasChildNodes', 'hasEmbeddedVideo', 'hasMP3', - 'hasPrinting', 'hasScreenBroadcast', 'hasScreenPlayback', 'hasStreamingAudio', 'hasStreamingVideo', - 'hasVideoEncoder', 'height', 'hide', 'hideBuiltInItems', 'hitArea', 'hitTest', 'hitTestTextNearPos', - 'HOME', 'hscroll', 'html', 'htmlText', 'ID3', 'ifFrameLoaded', 'ignoreWhite', 'implements', - 'import', 'indent', 'index', 'indexOf', 'Infinity', '-Infinity', 'INSERT', 'insertBefore', 'install', - 'instanceof', 'int', 'interface', 'isActive', 'isDebugger', 'isDown', 'isFinite', 'isNaN', 'isToggled', - 'italic', 'join', 'Key', 'language', 'lastChild', 'lastIndexOf', 'le', 'leading', 'LEFT', 'leftMargin', - 'length', 'level', 'lineStyle', 'lineTo', 'list', 'LN10', 'LN2', 'load', 'loadClip', 'loaded', 'loadMovie', - 'loadMovieNum', 'loadSound', 'loadVariables', 'loadVariablesNum', 'LoadVars', 'LocalConnection', - 'localFileReadDisable', 'localToGlobal', 'log', 'LOG10E', 'LOG2E', 'manufacturer', 'Math', 'max', - 'MAX_VALUE', 'maxChars', 'maxhscroll', 'maxscroll', 'mbchr', 'mblength', 'mbord', 'mbsubstring', 'menu', - 'message', 'Microphone', 'min', 'MIN_VALUE', 'MMExecute', 'motionLevel', 'motionTimeOut', 'Mouse', - 'mouseWheelEnabled', 'moveTo', 'Movieclip', 'MovieClipLoader', 'multiline', 'muted', 'name', 'names', 'NaN', - 'ne', 'NEGATIVE_INFINITY', 'NetConnection', 'NetStream', 'newline', 'nextFrame', - 'nextScene', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'not', 'Number', 'Object', - 'on', 'onActivity', 'onChanged', 'onClipEvent', 'onClose', 'onConnect', 'onData', 'onDragOut', - 'onDragOver', 'onEnterFrame', 'onID3', 'onKeyDown', 'onKeyUp', 'onKillFocus', 'onLoad', 'onLoadComplete', - 'onLoadError', 'onLoadInit', 'onLoadProgress', 'onLoadStart', 'onMouseDown', 'onMouseMove', 'onMouseUp', - 'onMouseWheel', 'onPress', 'onRelease', 'onReleaseOutside', 'onResize', 'onRollOut', 'onRollOver', - 'onScroller', 'onSelect', 'onSetFocus', 'onSoundComplete', 'onStatus', 'onUnload', 'onUpdate', 'onXML', - 'or(logischesOR)', 'ord', 'os', 'parentNode', 'parseCSS', 'parseFloat', 'parseInt', 'parseXML', 'password', - 'pause', 'PGDN', 'PGUP', 'PI', 'pixelAspectRatio', 'play', 'playerType', 'pop', 'position', - 'POSITIVE_INFINITY', 'pow', 'prevFrame', 'previousSibling', 'prevScene', 'print', 'printAsBitmap', - 'printAsBitmapNum', 'PrintJob', 'printNum', 'private', 'prototype', 'public', 'push', 'quality', - 'random', 'rate', 'registerClass', 'removeListener', 'removeMovieClip', 'removeNode', 'removeTextField', - 'replaceSel', 'replaceText', 'resolutionX', 'resolutionY', 'restrict', 'reverse', 'RIGHT', - 'rightMargin', 'round', 'scaleMode', 'screenColor', 'screenDPI', 'screenResolutionX', 'screenResolutionY', - 'scroll', 'seek', 'selectable', 'Selection', 'send', 'sendAndLoad', 'separatorBefore', 'serverString', - 'set', 'setvariable', 'setBufferTime', 'setClipboard', 'setDate', 'setFocus', 'setFullYear', 'setGain', - 'setHours', 'setInterval', 'setMask', 'setMilliseconds', 'setMinutes', 'setMode', 'setMonth', - 'setMotionLevel', 'setNewTextFormat', 'setPan', 'setProperty', 'setQuality', 'setRate', 'setRGB', - 'setSeconds', 'setSelectColor', 'setSelected', 'setSelection', 'setSilenceLevel', 'setStyle', - 'setTextFormat', 'setTime', 'setTransform', 'setUseEchoSuppression', 'setUTCDate', 'setUTCFullYear', - 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setVolume', - 'setYear', 'SharedObject', 'SHIFT(Konstante)', 'shift(Methode)', 'show', 'showMenu', 'showSettings', - 'silenceLevel', 'silenceTimeout', 'sin', 'size', 'slice', 'smoothing', 'sort', 'sortOn', 'Sound', 'SPACE', - 'splice', 'split', 'sqrt', 'SQRT1_2', 'SQRT2', 'Stage', 'start', 'startDrag', 'static', 'status', 'stop', - 'stopAllSounds', 'stopDrag', 'String', 'StyleSheet(Klasse)', 'styleSheet(Eigenschaft)', 'substr', - 'substring', 'super', 'swapDepths', 'System', 'TAB', 'tabChildren', 'tabEnabled', 'tabIndex', - 'tabStops', 'tan', 'target', 'targetPath', 'tellTarget', 'text', 'textColor', 'TextField', 'TextFormat', - 'textHeight', 'TextSnapshot', 'textWidth', 'this', 'throw', 'time', 'toggleHighQuality', 'toLowerCase', - 'toString', 'toUpperCase', 'trace', 'trackAsMenu', 'try', 'type', 'typeof', 'undefined', - 'underline', 'unescape', 'uninstall', 'unloadClip', 'unloadMovie', 'unLoadMovieNum', 'unshift', 'unwatch', - 'UP', 'updateAfterEvent', 'updateProperties', 'url', 'useCodePage', 'useEchoSuppression', 'useHandCursor', - 'UTC', 'valueOf', 'variable', 'version', 'Video', 'visible', 'void', 'watch', 'width', - 'with', 'wordwrap', 'XML', 'xmlDecl', 'XMLNode', 'XMLSocket' - ) - ), - 'SYMBOLS' => array( - '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #b1b100;', - 2 => 'color: #000000; font-weight: bold;', - 3 => 'color: #0066CC;' - ), - 'COMMENTS' => array( - 1 => 'color: #808080; font-style: italic;', - 2 => 'color: #808080; font-style: italic;', - 'MULTI' => 'color: #808080; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #66cc66;' - ), - 'STRINGS' => array( - 0 => 'color: #ff0000;' - ), - 'NUMBERS' => array( - 0 => 'color: #cc66cc;' - ), - 'METHODS' => array( - 1 => 'color: #006600;' - ), - 'SYMBOLS' => array( - 0 => 'color: #66cc66;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array(), - 'HIGHLIGHT_STRICT_BLOCK' => array() -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php deleted file mode 100644 index f8425f1f..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php +++ /dev/null @@ -1,471 +0,0 @@ - 'ActionScript 3', - 'COMMENT_SINGLE' => array(1 => '//'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'COMMENT_REGEXP' => array( - //Regular expressions - 2 => "/(?<=[\\s^])(s|tr|y)\\/(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])+(? GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array( - 1 => array( - 'with', 'while', 'void', 'undefined', 'typeof', 'try', 'true', - 'throw', 'this', 'switch', 'super', 'set', 'return', 'public', 'protected', - 'private', 'null', 'new', 'is', 'internal', 'instanceof', 'in', - 'import', 'if', 'get', 'for', 'false', 'else', 'each', 'do', - 'delete', 'default', 'continue', 'catch', 'case', 'break', 'as', - 'extends', 'override' - ), - 2 => array( - 'var' - ), - 3 => array( - 'function' - ), - 4 => array( - 'class', 'package' - ), - 6 => array( - 'flash.xml', 'flash.utils', 'flash.ui', 'flash.text', - 'flash.system', 'flash.profiler', 'flash.printing', 'flash.net', - 'flash.media', 'flash.geom', 'flash.filters', 'flash.external', - 'flash.events', 'flash.errors', 'flash.display', - 'flash.accessibility' - ), - 7 => array( - 'zoom', 'year', 'y', 'xmlDecl', 'x', 'writeUnsignedInt', - 'writeUTFBytes', 'writeUTF', 'writeShort', 'writeObject', - 'writeMultiByte', 'writeInt', 'writeFloat', 'writeExternal', - 'writeDynamicProperty', 'writeDynamicProperties', 'writeDouble', - 'writeBytes', 'writeByte', 'writeBoolean', 'wordWrap', - 'willTrigger', 'width', 'volume', 'visible', 'videoWidth', - 'videoHeight', 'version', 'valueOf', 'value', 'usingTLS', - 'useRichTextClipboard', 'useHandCursor', 'useEchoSuppression', - 'useCodePage', 'url', 'uri', 'uploadCompleteData', 'upload', - 'updateProperties', 'updateAfterEvent', 'upState', 'unshift', - 'unlock', 'unload', 'union', 'unescapeMultiByte', 'unescape', - 'underline', 'uncompress', 'type', 'ty', 'tx', 'transparent', - 'translate', 'transformPoint', 'transform', 'trackAsMenu', 'track', - 'trace', 'totalMemory', 'totalFrames', 'topLeft', 'top', - 'togglePause', 'toXMLString', 'toUpperCase', 'toUTCString', - 'toTimeString', 'toString', 'toPrecision', 'toLowerCase', - 'toLocaleUpperCase', 'toLocaleTimeString', 'toLocaleString', - 'toLocaleLowerCase', 'toLocaleDateString', 'toFixed', - 'toExponential', 'toDateString', 'timezoneOffset', 'timerComplete', - 'timer', 'time', 'threshold', 'thickness', 'textWidth', - 'textSnapshot', 'textInput', 'textHeight', 'textColor', 'text', - 'test', 'target', 'tan', 'tabStops', 'tabIndexChange', 'tabIndex', - 'tabEnabledChange', 'tabEnabled', 'tabChildrenChange', - 'tabChildren', 'sync', 'swfVersion', 'swapChildrenAt', - 'swapChildren', 'subtract', 'substring', 'substr', 'styleSheet', - 'styleNames', 'strength', 'stopPropagation', - 'stopImmediatePropagation', 'stopDrag', 'stopAll', 'stop', 'status', - 'startDrag', 'start', 'stageY', 'stageX', 'stageWidth', - 'stageHeight', 'stageFocusRect', 'stage', 'sqrt', 'split', 'splice', - 'source', 'soundTransform', 'soundComplete', 'sortOn', 'sort', - 'songName', 'some', 'socketData', 'smoothing', 'slice', 'size', - 'sin', 'silent', 'silenceTimeout', 'silenceLevel', 'showSettings', - 'showRedrawRegions', 'showDefaultContextMenu', 'show', 'shortcut', - 'shiftKey', 'shift', 'sharpness', 'sharedEvents', 'shadowColor', - 'shadowAlpha', 'settings', 'setUseEchoSuppression', 'setUTCSeconds', - 'setUTCMonth', 'setUTCMinutes', 'setUTCMilliseconds', 'setUTCHours', - 'setUTCFullYear', 'setUTCDate', 'setTimeout', 'setTime', - 'setTextFormat', 'setStyle', 'setSilenceLevel', 'setSettings', - 'setSelection', 'setSelected', 'setSelectColor', 'setSeconds', - 'setQuality', 'setPropertyIsEnumerable', 'setProperty', 'setPixels', - 'setPixel32', 'setPixel', 'setNamespace', 'setName', - 'setMotionLevel', 'setMonth', 'setMode', 'setMinutes', - 'setMilliseconds', 'setLoopback', 'setLoopBack', 'setLocalName', - 'setKeyFrameInterval', 'setInterval', 'setHours', 'setFullYear', - 'setEmpty', 'setDirty', 'setDate', 'setCompositionString', - 'setClipboard', 'setChildren', 'setChildIndex', - 'setAdvancedAntiAliasingTable', 'serverString', 'separatorBefore', - 'sendToURL', 'send', 'selectionEndIndex', 'selectionBeginIndex', - 'selectable', 'select', 'seek', 'securityError', 'securityDomain', - 'secondsUTC', 'seconds', 'search', 'scrollV', 'scrollRect', - 'scrollH', 'scroll', 'screenResolutionY', 'screenResolutionX', - 'screenDPI', 'screenColor', 'scenes', 'scaleY', 'scaleX', - 'scaleMode', 'scale9Grid', 'scale', 'save', 'sandboxType', - 'sameDomain', 'running', 'round', 'rotation', 'rotate', 'root', - 'rollOver', 'rollOut', 'rightToRight', 'rightToLeft', 'rightPeak', - 'rightMargin', 'right', 'rewind', 'reverse', 'resume', 'restrict', - 'resize', 'reset', 'requestHeaders', 'replaceText', - 'replaceSelectedText', 'replace', 'repeatCount', 'render', - 'removedFromStage', 'removed', 'removeNode', 'removeNamespace', - 'removeEventListener', 'removeChildAt', 'removeChild', - 'relatedObject', 'registerFont', 'registerClassAlias', 'redOffset', - 'redMultiplier', 'rect', 'receiveVideo', 'receiveAudio', - 'readUnsignedShort', 'readUnsignedInt', 'readUnsignedByte', - 'readUTFBytes', 'readUTF', 'readShort', 'readObject', - 'readMultiByte', 'readInt', 'readFloat', 'readExternal', - 'readDouble', 'readBytes', 'readByte', 'readBoolean', 'ratios', - 'rate', 'random', 'quality', 'push', 'publish', 'proxyType', - 'prototype', 'propertyIsEnumerable', 'progress', - 'processingInstructions', 'printAsBitmap', 'print', - 'previousSibling', 'preventDefault', 'prevScene', 'prevFrame', - 'prettyPrinting', 'prettyIndent', 'preserveAlpha', 'prependChild', - 'prefix', 'pow', 'position', 'pop', 'polar', 'playerType', 'play', - 'pixelSnapping', 'pixelDissolve', 'pixelBounds', 'pixelAspectRatio', - 'perlinNoise', 'pause', 'parseXML', 'parseInt', 'parseFloat', - 'parseCSS', 'parse', 'parentNode', 'parentDomain', - 'parentAllowsChild', 'parent', 'parameters', 'paperWidth', - 'paperHeight', 'pan', 'paletteMap', 'pageWidth', 'pageHeight', - 'overState', 'outsideCutoff', 'os', 'orientation', 'open', - 'opaqueBackground', 'onPlayStatus', 'onMetaData', 'onCuePoint', - 'offsetPoint', 'offset', 'objectID', 'objectEncoding', 'numLock', - 'numLines', 'numFrames', 'numChildren', 'normalize', 'noise', - 'nodeValue', 'nodeType', 'nodeName', 'nodeKind', 'noAutoLabeling', - 'nextValue', 'nextSibling', 'nextScene', 'nextNameIndex', - 'nextName', 'nextFrame', 'netStatus', 'navigateToURL', - 'namespaceURI', 'namespaceDeclarations', 'namespace', 'names', - 'name', 'muted', 'multiline', 'moveTo', 'mouseY', 'mouseX', - 'mouseWheelEnabled', 'mouseWheel', 'mouseUp', 'mouseTarget', - 'mouseOver', 'mouseOut', 'mouseMove', 'mouseLeave', - 'mouseFocusChange', 'mouseEnabled', 'mouseDown', 'mouseChildren', - 'motionTimeout', 'motionLevel', 'monthUTC', 'month', - 'modificationDate', 'mode', 'minutesUTC', 'minutes', 'min', - 'millisecondsUTC', 'milliseconds', 'method', 'message', 'merge', - 'menuSelect', 'menuItemSelect', 'maxScrollV', 'maxScrollH', - 'maxLevel', 'maxChars', 'max', 'matrixY', 'matrixX', 'matrix', - 'match', 'mask', 'mapPoint', 'mapBitmap', 'map', 'manufacturer', - 'macType', 'loopback', 'loop', 'log', 'lock', 'localeCompare', - 'localY', 'localX', 'localToGlobal', 'localName', - 'localFileReadDisable', 'loaderURL', 'loaderInfo', 'loader', - 'loadPolicyFile', 'loadBytes', 'load', 'liveDelay', 'link', - 'lineTo', 'lineStyle', 'lineGradientStyle', 'level', - 'letterSpacing', 'length', 'leftToRight', 'leftToLeft', 'leftPeak', - 'leftMargin', 'left', 'leading', 'lastIndexOf', 'lastIndex', - 'lastChild', 'language', 'labels', 'knockout', 'keyUp', - 'keyLocation', 'keyFrameInterval', 'keyFocusChange', 'keyDown', - 'keyCode', 'kerning', 'join', 'italic', 'isXMLName', - 'isPrototypeOf', 'isNaN', 'isFocusInaccessible', 'isFinite', - 'isEmpty', 'isDefaultPrevented', 'isDebugger', 'isBuffering', - 'isAttribute', 'isAccessible', 'ioError', 'invert', 'invalidate', - 'intersects', 'intersection', 'interpolate', 'insideCutoff', - 'insertChildBefore', 'insertChildAfter', 'insertBefore', 'inner', - 'init', 'info', 'inflatePoint', 'inflate', 'indexOf', 'index', - 'indent', 'inScopeNamespaces', 'imeComposition', 'ime', - 'ignoreWhitespace', 'ignoreWhite', 'ignoreProcessingInstructions', - 'ignoreComments', 'ignoreCase', 'identity', 'idMap', 'id3', - 'httpStatus', 'htmlText', 'hoursUTC', 'hours', 'hitTestTextNearPos', - 'hitTestState', 'hitTestPoint', 'hitTestObject', 'hitTest', - 'hitArea', 'highlightColor', 'highlightAlpha', 'hideObject', - 'hideBuiltInItems', 'hide', 'height', 'hasVideoEncoder', 'hasTLS', - 'hasStreamingVideo', 'hasStreamingAudio', 'hasSimpleContent', - 'hasScreenPlayback', 'hasScreenBroadcast', 'hasProperty', - 'hasPrinting', 'hasOwnProperty', 'hasMP3', 'hasIME', 'hasGlyphs', - 'hasEventListener', 'hasEmbeddedVideo', 'hasDefinition', - 'hasComplexContent', 'hasChildNodes', 'hasAudioEncoder', 'hasAudio', - 'hasAccessibility', 'gridFitType', 'greenOffset', 'greenMultiplier', - 'graphics', 'gotoAndStop', 'gotoAndPlay', 'globalToLocal', 'global', - 'getUTCSeconds', 'getUTCMonth', 'getUTCMinutes', - 'getUTCMilliseconds', 'getUTCHours', 'getUTCFullYear', 'getUTCDay', - 'getUTCDate', 'getTimezoneOffset', 'getTimer', 'getTime', - 'getTextRunInfo', 'getTextFormat', 'getText', 'getStyle', - 'getStackTrace', 'getSelectedText', 'getSelected', 'getSeconds', - 'getRemote', 'getRect', 'getQualifiedSuperclassName', - 'getQualifiedClassName', 'getProperty', 'getPrefixForNamespace', - 'getPixels', 'getPixel32', 'getPixel', 'getParagraphLength', - 'getObjectsUnderPoint', 'getNamespaceForPrefix', 'getMonth', - 'getMinutes', 'getMilliseconds', 'getMicrophone', 'getLocal', - 'getLineText', 'getLineOffset', 'getLineMetrics', 'getLineLength', - 'getLineIndexOfChar', 'getLineIndexAtPoint', 'getImageReference', - 'getHours', 'getFullYear', 'getFirstCharInParagraph', - 'getDescendants', 'getDefinitionByName', 'getDefinition', 'getDay', - 'getDate', 'getColorBoundsRect', 'getClassByAlias', 'getChildIndex', - 'getChildByName', 'getChildAt', 'getCharIndexAtPoint', - 'getCharBoundaries', 'getCamera', 'getBounds', 'genre', - 'generateFilterRect', 'gain', 'fullYearUTC', 'fullYear', - 'fullScreen', 'fscommand', 'fromCharCode', 'framesLoaded', - 'frameRate', 'frame', 'fps', 'forwardAndBack', 'formatToString', - 'forceSimple', 'forEach', 'fontType', 'fontStyle', 'fontSize', - 'fontName', 'font', 'focusRect', 'focusOut', 'focusIn', 'focus', - 'flush', 'floor', 'floodFill', 'firstChild', 'findText', 'filters', - 'filter', 'fillRect', 'fileList', 'extension', 'extended', 'exp', - 'exec', 'exactSettings', 'every', 'eventPhase', 'escapeMultiByte', - 'escape', 'errorID', 'error', 'equals', 'enumerateFonts', - 'enterFrame', 'endian', 'endFill', 'encodeURIComponent', - 'encodeURI', 'enabled', 'embedFonts', 'elements', - 'dynamicPropertyWriter', 'dropTarget', 'drawRoundRect', 'drawRect', - 'drawEllipse', 'drawCircle', 'draw', 'download', 'downState', - 'doubleClickEnabled', 'doubleClick', 'dotall', 'domain', - 'docTypeDecl', 'doConversion', 'divisor', 'distance', 'dispose', - 'displayState', 'displayMode', 'displayAsPassword', 'dispatchEvent', - 'description', 'describeType', 'descent', 'descendants', - 'deltaTransformPoint', 'delta', 'deleteProperty', 'delay', - 'defaultTextFormat', 'defaultSettings', 'defaultObjectEncoding', - 'decodeURIComponent', 'decodeURI', 'decode', 'deblocking', - 'deactivate', 'dayUTC', 'day', 'dateUTC', 'date', 'dataFormat', - 'data', 'd', 'customItems', 'curveTo', 'currentTarget', - 'currentScene', 'currentLabels', 'currentLabel', 'currentFrame', - 'currentFPS', 'currentDomain', 'currentCount', 'ctrlKey', 'creator', - 'creationDate', 'createTextNode', 'createGradientBox', - 'createElement', 'createBox', 'cos', 'copyPixels', 'copyChannel', - 'copy', 'conversionMode', 'contextMenuOwner', 'contextMenu', - 'contentType', 'contentLoaderInfo', 'content', 'containsRect', - 'containsPoint', 'contains', 'constructor', 'connectedProxyType', - 'connected', 'connect', 'condenseWhite', 'concatenatedMatrix', - 'concatenatedColorTransform', 'concat', 'computeSpectrum', - 'compress', 'componentY', 'componentX', 'complete', 'compare', - 'comments', 'comment', 'colors', 'colorTransform', 'color', 'code', - 'close', 'cloneNode', 'clone', 'client', 'click', 'clearTimeout', - 'clearInterval', 'clear', 'clamp', 'children', 'childNodes', - 'childIndex', 'childAllowsParent', 'child', 'checkPolicyFile', - 'charCount', 'charCodeAt', 'charCode', 'charAt', 'changeList', - 'change', 'ceil', 'caretIndex', 'caption', 'capsLock', 'cancelable', - 'cancel', 'callee', 'callProperty', 'call', 'cacheAsBitmap', 'c', - 'bytesTotal', 'bytesLoaded', 'bytesAvailable', 'buttonMode', - 'buttonDown', 'bullet', 'builtInItems', 'bufferTime', - 'bufferLength', 'bubbles', 'browse', 'bottomScrollV', 'bottomRight', - 'bottom', 'borderColor', 'border', 'bold', 'blurY', 'blurX', - 'blueOffset', 'blueMultiplier', 'blockIndent', 'blendMode', - 'bitmapData', 'bias', 'beginGradientFill', 'beginFill', - 'beginBitmapFill', 'bandwidth', 'backgroundColor', 'background', - 'b', 'available', 'avHardwareDisable', 'autoSize', 'attributes', - 'attribute', 'attachNetStream', 'attachCamera', 'attachAudio', - 'atan2', 'atan', 'asyncError', 'asin', 'ascent', 'artist', - 'areSoundsInaccessible', 'areInaccessibleObjectsUnderPoint', - 'applyFilter', 'apply', 'applicationDomain', 'appendText', - 'appendChild', 'antiAliasType', 'angle', 'alwaysShowSelection', - 'altKey', 'alphas', 'alphaOffset', 'alphaMultiplier', 'alpha', - 'allowInsecureDomain', 'allowDomain', 'align', 'album', - 'addedToStage', 'added', 'addPage', 'addNamespace', 'addHeader', - 'addEventListener', 'addChildAt', 'addChild', 'addCallback', 'add', - 'activityLevel', 'activity', 'active', 'activating', 'activate', - 'actionScriptVersion', 'acos', 'accessibilityProperties', 'abs' - ), - 8 => array( - 'WRAP', 'VERTICAL', 'VARIABLES', - 'UTC', 'UPLOAD_COMPLETE_DATA', 'UP', 'UNLOAD', 'UNKNOWN', - 'UNIQUESORT', 'TOP_RIGHT', 'TOP_LEFT', 'TOP', 'TIMER_COMPLETE', - 'TIMER', 'TEXT_NODE', 'TEXT_INPUT', 'TEXT', 'TAB_INDEX_CHANGE', - 'TAB_ENABLED_CHANGE', 'TAB_CHILDREN_CHANGE', 'TAB', 'SYNC', - 'SUBTRACT', 'SUBPIXEL', 'STATUS', 'STANDARD', 'SQUARE', 'SQRT2', - 'SQRT1_2', 'SPACE', 'SOUND_COMPLETE', 'SOCKET_DATA', 'SHOW_ALL', - 'SHIFT', 'SETTINGS_MANAGER', 'SELECT', 'SECURITY_ERROR', 'SCROLL', - 'SCREEN', 'ROUND', 'ROLL_OVER', 'ROLL_OUT', 'RIGHT', 'RGB', - 'RETURNINDEXEDARRAY', 'RESIZE', 'REPEAT', 'RENDER', - 'REMOVED_FROM_STAGE', 'REMOVED', 'REMOTE', 'REGULAR', 'REFLECT', - 'RED', 'RADIAL', 'PROGRESS', 'PRIVACY', 'POST', 'POSITIVE_INFINITY', - 'PORTRAIT', 'PIXEL', 'PI', 'PENDING', 'PAGE_UP', 'PAGE_DOWN', 'PAD', - 'OVERLAY', 'OUTER', 'OPEN', 'NaN', 'NUM_PAD', 'NUMPAD_SUBTRACT', - 'NUMPAD_MULTIPLY', 'NUMPAD_ENTER', 'NUMPAD_DIVIDE', - 'NUMPAD_DECIMAL', 'NUMPAD_ADD', 'NUMPAD_9', 'NUMPAD_8', 'NUMPAD_7', - 'NUMPAD_6', 'NUMPAD_5', 'NUMPAD_4', 'NUMPAD_3', 'NUMPAD_2', - 'NUMPAD_1', 'NUMPAD_0', 'NUMERIC', 'NO_SCALE', 'NO_BORDER', - 'NORMAL', 'NONE', 'NEVER', 'NET_STATUS', 'NEGATIVE_INFINITY', - 'MULTIPLY', 'MOUSE_WHEEL', 'MOUSE_UP', 'MOUSE_OVER', 'MOUSE_OUT', - 'MOUSE_MOVE', 'MOUSE_LEAVE', 'MOUSE_FOCUS_CHANGE', 'MOUSE_DOWN', - 'MITER', 'MIN_VALUE', 'MICROPHONE', 'MENU_SELECT', - 'MENU_ITEM_SELECT', 'MEDIUM', 'MAX_VALUE', 'LOW', 'LOG2E', 'LOG10E', - 'LOCAL_WITH_NETWORK', 'LOCAL_WITH_FILE', 'LOCAL_TRUSTED', - 'LOCAL_STORAGE', 'LN2', 'LN10', 'LITTLE_ENDIAN', 'LINK', - 'LINEAR_RGB', 'LINEAR', 'LIGHT_COLOR', 'LIGHTEN', 'LEFT', 'LCD', - 'LAYER', 'LANDSCAPE', 'KOREAN', 'KEY_UP', 'KEY_FOCUS_CHANGE', - 'KEY_DOWN', 'JUSTIFY', 'JAPANESE_KATAKANA_HALF', - 'JAPANESE_KATAKANA_FULL', 'JAPANESE_HIRAGANA', 'Infinity', 'ITALIC', - 'IO_ERROR', 'INVERT', 'INSERT', 'INPUT', 'INNER', 'INIT', - 'IME_COMPOSITION', 'IGNORE', 'ID3', 'HTTP_STATUS', 'HORIZONTAL', - 'HOME', 'HIGH', 'HARDLIGHT', 'GREEN', 'GET', 'FULLSCREEN', 'FULL', - 'FOCUS_OUT', 'FOCUS_IN', 'FLUSHED', 'FLASH9', 'FLASH8', 'FLASH7', - 'FLASH6', 'FLASH5', 'FLASH4', 'FLASH3', 'FLASH2', 'FLASH1', 'F9', - 'F8', 'F7', 'F6', 'F5', 'F4', 'F3', 'F2', 'F15', 'F14', 'F13', - 'F12', 'F11', 'F10', 'F1', 'EXACT_FIT', 'ESCAPE', 'ERROR', 'ERASE', - 'ENTER_FRAME', 'ENTER', 'END', 'EMBEDDED', 'ELEMENT_NODE', 'E', - 'DYNAMIC', 'DOWN', 'DOUBLE_CLICK', 'DIFFERENCE', 'DEVICE', - 'DESCENDING', 'DELETE', 'DEFAULT', 'DEACTIVATE', 'DATA', - 'DARK_COLOR', 'DARKEN', 'CRT', 'CONTROL', 'CONNECT', 'COMPLETE', - 'COLOR', 'CLOSE', 'CLICK', 'CLAMP', 'CHINESE', 'CHANGE', 'CENTER', - 'CASEINSENSITIVE', 'CAPTURING_PHASE', 'CAPS_LOCK', 'CANCEL', - 'CAMERA', 'BUBBLING_PHASE', 'BOTTOM_RIGHT', 'BOTTOM_LEFT', 'BOTTOM', - 'BOLD_ITALIC', 'BOLD', 'BLUE', 'BINARY', 'BIG_ENDIAN', 'BEVEL', - 'BEST', 'BACKSPACE', 'AUTO', 'AT_TARGET', 'ASYNC_ERROR', 'AMF3', - 'AMF0', 'ALWAYS', 'ALPHANUMERIC_HALF', 'ALPHANUMERIC_FULL', 'ALPHA', - 'ADVANCED', 'ADDED_TO_STAGE', 'ADDED', 'ADD', 'ACTIVITY', - 'ACTIONSCRIPT3', 'ACTIONSCRIPT2' - ), - //FIX: Must be last in order to avoid conflicts with keywords present - //in other keyword groups, that might get highlighted as part of the URL. - //I know this is not a proper work-around, but should do just fine. - 5 => array( - 'uint', 'int', 'arguments', 'XMLSocket', 'XMLNodeType', 'XMLNode', - 'XMLList', 'XMLDocument', 'XML', 'Video', 'VerifyError', - 'URLVariables', 'URLStream', 'URLRequestMethod', 'URLRequestHeader', - 'URLRequest', 'URLLoaderDataFormat', 'URLLoader', 'URIError', - 'TypeError', 'Transform', 'TimerEvent', 'Timer', 'TextSnapshot', - 'TextRenderer', 'TextLineMetrics', 'TextFormatAlign', 'TextFormat', - 'TextFieldType', 'TextFieldAutoSize', 'TextField', 'TextEvent', - 'TextDisplayMode', 'TextColorType', 'System', 'SyntaxError', - 'SyncEvent', 'StyleSheet', 'String', 'StatusEvent', 'StaticText', - 'StageScaleMode', 'StageQuality', 'StageAlign', 'Stage', - 'StackOverflowError', 'Sprite', 'SpreadMethod', 'SoundTransform', - 'SoundMixer', 'SoundLoaderContext', 'SoundChannel', 'Sound', - 'Socket', 'SimpleButton', 'SharedObjectFlushStatus', 'SharedObject', - 'Shape', 'SecurityPanel', 'SecurityErrorEvent', 'SecurityError', - 'SecurityDomain', 'Security', 'ScriptTimeoutError', 'Scene', - 'SWFVersion', 'Responder', 'RegExp', 'ReferenceError', 'Rectangle', - 'RangeError', 'QName', 'Proxy', 'ProgressEvent', - 'PrintJobOrientation', 'PrintJobOptions', 'PrintJob', 'Point', - 'PixelSnapping', 'ObjectEncoding', 'Object', 'Number', 'NetStream', - 'NetStatusEvent', 'NetConnection', 'Namespace', 'MovieClip', - 'MouseEvent', 'Mouse', 'MorphShape', 'Microphone', 'MemoryError', - 'Matrix', 'Math', 'LocalConnection', 'LoaderInfo', 'LoaderContext', - 'Loader', 'LineScaleMode', 'KeyboardEvent', 'Keyboard', - 'KeyLocation', 'JointStyle', 'InvalidSWFError', - 'InterpolationMethod', 'InteractiveObject', 'IllegalOperationError', - 'IOErrorEvent', 'IOError', 'IMEEvent', 'IMEConversionMode', 'IME', - 'IExternalizable', 'IEventDispatcher', 'IDynamicPropertyWriter', - 'IDynamicPropertyOutput', 'IDataOutput', 'IDataInput', 'ID3Info', - 'IBitmapDrawable', 'HTTPStatusEvent', 'GridFitType', 'Graphics', - 'GradientType', 'GradientGlowFilter', 'GradientBevelFilter', - 'GlowFilter', 'Function', 'FrameLabel', 'FontType', 'FontStyle', - 'Font', 'FocusEvent', 'FileReferenceList', 'FileReference', - 'FileFilter', 'ExternalInterface', 'EventPhase', 'EventDispatcher', - 'Event', 'EvalError', 'ErrorEvent', 'Error', 'Endian', 'EOFError', - 'DropShadowFilter', 'DisplayObjectContainer', 'DisplayObject', - 'DisplacementMapFilterMode', 'DisplacementMapFilter', 'Dictionary', - 'DefinitionError', 'Date', 'DataEvent', 'ConvolutionFilter', - 'ContextMenuItem', 'ContextMenuEvent', 'ContextMenuBuiltInItems', - 'ContextMenu', 'ColorTransform', 'ColorMatrixFilter', 'Class', - 'CapsStyle', 'Capabilities', 'Camera', 'CSMSettings', 'ByteArray', - 'Boolean', 'BlurFilter', 'BlendMode', 'BitmapFilterType', - 'BitmapFilterQuality', 'BitmapFilter', 'BitmapDataChannel', - 'BitmapData', 'Bitmap', 'BevelFilter', 'AsyncErrorEvent', 'Array', - 'ArgumentError', 'ApplicationDomain', 'AntiAliasType', - 'ActivityEvent', 'ActionScriptVersion', 'AccessibilityProperties', - 'Accessibility', 'AVM1Movie' - ) - ), - 'SYMBOLS' => array( - '(', ')', '[', ']', '{', '}', '!', '%', '&', '*', '|', '/', '<', '>', '^', '-', '+', '~', '?', ':', ';', '.', ',' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, - 2 => true, - 3 => true, - 4 => true, - 5 => true, - 6 => true, - 7 => true, - 8 => true - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #0033ff; font-weight: bold;', - 2 => 'color: #6699cc; font-weight: bold;', - 3 => 'color: #339966; font-weight: bold;', - 4 => 'color: #9900cc; font-weight: bold;', - 5 => 'color: #004993;', - 6 => 'color: #004993;', - 7 => 'color: #004993;', - 8 => 'color: #004993;' - ), - 'COMMENTS' => array( - 1 => 'color: #009900; font-style: italic;', - 2 => 'color: #009966; font-style: italic;', - 'MULTI' => 'color: #3f5fbf;' - ), - 'ESCAPE_CHAR' => array( - 0 => '' - ), - 'BRACKETS' => array( - 0 => 'color: #000000;' - ), - 'STRINGS' => array( - 0 => 'color: #990000;' - ), - 'NUMBERS' => array( - 0 => 'color: #000000; font-weight:bold;' - ), - 'METHODS' => array( - 0 => 'color: #000000;', - ), - 'SYMBOLS' => array( - 0 => 'color: #000066; font-weight: bold;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => 'http://www.google.com/search?q={FNAMEL}%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:{FNAMEL}.html', - 6 => '', - 7 => '', - 8 => '' - ), - 'OOLANG' => false,//Save some time as OO identifiers aren't used - 'OBJECT_SPLITTERS' => array( - // commented out because it's not very relevant for AS, as all properties, methods and constants are dot-accessed. - // I believe it's preferable to have package highlighting for example, which is not possible with this enabled. - // 0 => '.' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array(), - 'HIGHLIGHT_STRICT_BLOCK' => array() -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php deleted file mode 100644 index 3e48fd13..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php +++ /dev/null @@ -1,130 +0,0 @@ - 'Ada', - 'COMMENT_SINGLE' => array(1 => '--'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array( - 1 => array( - 'begin', 'declare', 'do', 'else', 'elsif', 'exception', 'for', 'if', - 'is', 'loop', 'while', 'then', 'end', 'select', 'case', 'until', - 'goto', 'return' - ), - 2 => array( - 'abs', 'and', 'at', 'mod', 'not', 'or', 'rem', 'xor' - ), - 3 => array( - 'abort', 'abstract', 'accept', 'access', 'aliased', 'all', 'array', - 'body', 'constant', 'delay', 'delta', 'digits', 'entry', 'exit', - 'function', 'generic', 'in', 'interface', 'limited', 'new', 'null', - 'of', 'others', 'out', 'overriding', 'package', 'pragma', 'private', - 'procedure', 'protected', 'raise', 'range', 'record', 'renames', - 'requeue', 'reverse', 'separate', 'subtype', 'synchronized', - 'tagged', 'task', 'terminate', 'type', 'use', 'when', 'with' - ) - ), - 'SYMBOLS' => array( - '(', ')' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00007f;', - 2 => 'color: #0000ff;', - 3 => 'color: #46aa03; font-weight:bold;', - ), - 'BRACKETS' => array( - 0 => 'color: #66cc66;' - ), - 'COMMENTS' => array( - 1 => 'color: #adadad; font-style: italic;', - 'MULTI' => 'color: #808080; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'STRINGS' => array( - 0 => 'color: #7f007f;' - ), - 'NUMBERS' => array( - 0 => 'color: #ff0000;' - ), - 'METHODS' => array( - 1 => 'color: #202020;' - ), - 'SYMBOLS' => array( - 0 => 'color: #66cc66;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php deleted file mode 100644 index f46bdd0b..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php +++ /dev/null @@ -1,316 +0,0 @@ - 'AIMMS3', - 'COMMENT_SINGLE' => array(1 => '!'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'HARDQUOTE' => array("'", "'"), - 'HARDESCAPE' => array("'", "\\"), - 'HARDCHAR' => "\\", - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'OBJECT_SPLITTERS' => array(), - 'REGEXPS' => array(), - 'STRICT_MODE_APPLIES' => GESHI_MAYBE, - 'SCRIPT_DELIMITERS' => array(), - 'HIGHLIGHT_STRICT_BLOCK' => array(), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - 'if', 'then', 'else', 'endif', 'elseif', 'for', 'do', 'while' , 'endfor' , 'endwhile', 'break', 'switch', 'endswitch', - 'display', 'return', 'in', 'apply' - - ), - 2 => array( - 'main model' , 'declaration section', 'procedure', 'endprocedure', 'endmodel', 'endsection' , 'set', 'parameter', - 'string parameter', 'element parameter', 'quantity' - ), - 3 => array( - 'identifier', 'index', 'index domain', 'body' - ), - 4 => array( - 'ActiveCard','Card','ConvertUnit','DistributionCumulative','DistributionDensity','DistributionDeviation', - 'DistributionInverseCumulative','DistributionInverseDensity','DistributionKurtosis','DistributionMean', - 'DistributionSkewness','DistributionVariance','Element','EvaluateUnit','First','FormatString','Last', - 'Ord','Unit','Val','Aggregate','AttributeToString','CaseCompareIdentifier','CaseCreateDifferenceFile', - 'CloseDataSource','CreateTimeTable','ConstraintVariables','ConvertReferenceDate','CloneElement', - 'FindNthString','FindReplaceNthString','FindReplaceStrings','FindString','StringOccurrences', - 'CurrentToMoment','CurrentToString','CurrentToTimeSlot','DaylightsavingEndDate','DaylightsavingStartDate', - 'DeclaredSubset','DomainIndex','IndexRange','IsRunningAsViewer','ListingFileCopy','ListingFileDelete', - 'DirectoryGetFiles','DirectoryGetSubdirectories','DirectSQL','Disaggregate','ElementCast','ElementRange', - 'EnvironmentGetString','EnvironmentSetString','errh::Adapt','errh::Attribute','errh::Category', - 'errh::Code','errh::Column','errh::CreationTime','errh::Filename','errh::InsideCategory', - 'errh::IsMarkedAsHandled','errh::Line','errh::MarkAsHandled','errh::Message','errh::Multiplicity', - 'errh::Node','errh::NumberOfLocations','errh::Severity','ExcelAddNewSheet','ExcelAssignParameter', - 'ExcelAssignSet','ExcelAssignTable','ExcelAssignValue','ExcelClearRange','ExcelCloseWorkbook', - 'ExcelColumnName','ExcelColumnNumber','ExcelCopyRange','ExcelCreateWorkbook','ExcelDeleteSheet', - 'ExcelPrint','ExcelRetrieveParameter','ExcelRetrieveSet','ExcelRetrieveTable','ExcelRetrieveValue', - 'ExcelRunMacro','ExcelSaveWorkbook','ExcelSetActiveSheet','ExcelSetUpdateLinksBehavior', - 'ExcelSetVisibility','FindUsedElements','GenerateCUT','GMP::Coefficient::Get', - 'GMP::Coefficient::GetQuadratic','GMP::Coefficient::Set','GMP::Coefficient::SetQuadratic', - 'GMP::Column::Add','GMP::Column::Delete','GMP::Column::Freeze','GMP::Column::GetLowerbound', - 'GMP::Column::GetScale','GMP::Column::GetStatus','GMP::Column::GetType','GMP::Column::GetUpperbound', - 'GMP::Column::SetAsObjective','GMP::Column::SetLowerbound','GMP::Column::SetType', - 'GMP::Column::SetUpperbound','GMP::Column::Unfreeze','GMP::Instance::AddIntegerEliminationRows', - 'GMP::Instance::CalculateSubGradient','GMP::Instance::Copy','GMP::Instance::CreateDual', - 'GMP::Instance::CreateMasterMip','GMP::Instance::CreatePresolved', - 'GMP::SolverSession::CreateProgressCategory','GMP::Instance::CreateProgressCategory', - 'GMP::Instance::CreateSolverSession','GMP::Stochastic::CreateBendersRootproblem', - 'GMP::Instance::Delete','GMP::Instance::DeleteIntegerEliminationRows', - 'GMP::Instance::DeleteSolverSession','GMP::Instance::FindApproximatelyFeasibleSolution', - 'GMP::Instance::FixColumns','GMP::Instance::Generate','GMP::Instance::GenerateRobustCounterpart', - 'GMP::Instance::GenerateStochasticProgram','GMP::SolverSession::GetCallbackInterruptStatus', - 'GMP::SolverSession::WaitForCompletion','GMP::SolverSession::WaitForSingleCompletion', - 'GMP::SolverSession::ExecutionStatus','GMP::Instance::GetDirection','GMP::Instance::GetLinearObjective', - 'GMP::Instance::GetMathematicalProgrammingType','GMP::Instance::GetMemoryUsed', - 'GMP::Instance::GetNumberOfColumns','GMP::Instance::GetNumberOfIndicatorRows', - 'GMP::Instance::GetNumberOfIntegerColumns','GMP::Instance::GetNumberOfNonlinearColumns', - 'GMP::Instance::GetNumberOfNonlinearNonzeros','GMP::Instance::GetNumberOfNonlinearRows', - 'GMP::Instance::GetNumberOfNonzeros','GMP::Instance::GetNumberOfRows', - 'GMP::Instance::GetNumberOfSOS1Rows','GMP::Instance::GetNumberOfSOS2Rows', - 'GMP::Instance::GetObjective','GMP::Instance::GetOptionValue','GMP::Instance::GetSolver', - 'GMP::Instance::GetSymbolicMathematicalProgram','GMP::Instance::MemoryStatistics', - 'GMP::Instance::Rename','GMP::Instance::SetCallbackAddCut','GMP::Instance::SetCallbackBranch', - 'GMP::Instance::SetCallbackHeuristic','GMP::Instance::SetCallbackIncumbent', - 'GMP::Instance::SetCallbackIterations','GMP::Instance::SetCallbackNewIncumbent', - 'GMP::Instance::SetCallbackStatusChange','GMP::Instance::SetCutoff','GMP::Instance::SetDirection', - 'GMP::Instance::SetMathematicalProgrammingType','GMP::Instance::SetSolver','GMP::Instance::Solve', - 'GMP::Stochastic::GetObjectiveBound','GMP::Stochastic::GetRelativeWeight', - 'GMP::Stochastic::GetRepresentativeScenario','GMP::Stochastic::UpdateBendersSubproblem', - 'GMP::Linearization::Add','GMP::Linearization::AddSingle','GMP::Linearization::Delete', - 'GMP::Linearization::GetDeviation','GMP::Linearization::GetDeviationBound', - 'GMP::Linearization::GetLagrangeMultiplier','GMP::Linearization::GetType', - 'GMP::Linearization::GetWeight','GMP::Linearization::RemoveDeviation', - 'GMP::Linearization::SetDeviationBound','GMP::Linearization::SetType', - 'GMP::Linearization::SetWeight','GMP::ProgressWindow::DeleteCategory', - 'GMP::ProgressWindow::DisplayLine','GMP::ProgressWindow::DisplayProgramStatus', - 'GMP::ProgressWindow::DisplaySolver','GMP::ProgressWindow::DisplaySolverStatus', - 'GMP::ProgressWindow::FreezeLine','GMP::ProgressWindow::UnfreezeLine', - 'GMP::QuadraticCoefficient::Get','GMP::QuadraticCoefficient::Set','GMP::Row::Activate', - 'GMP::Stochastic::AddBendersFeasibilityCut','GMP::Stochastic::AddBendersOptimalityCut', - 'GMP::Stochastic::BendersFindFeasibilityReference','GMP::Stochastic::MergeSolution', - 'GMP::Row::Add','GMP::Row::Deactivate','GMP::Row::Delete','GMP::Row::DeleteIndicatorCondition', - 'GMP::Row::Generate','GMP::Row::GetConvex','GMP::Row::GetIndicatorColumn', - 'GMP::Row::GetIndicatorCondition','GMP::Row::GetLeftHandSide','GMP::Row::GetRelaxationOnly', - 'GMP::Row::GetRightHandSide','GMP::Row::GetScale','GMP::Row::GetStatus','GMP::Row::GetType', - 'GMP::Row::SetConvex','GMP::Row::SetIndicatorCondition','GMP::Row::SetLeftHandSide', - 'GMP::Row::SetRelaxationOnly','GMP::Row::SetRightHandSide','GMP::Row::SetType', - 'GMP::Solution::Check','GMP::Solution::Copy','GMP::Solution::Count','GMP::Solution::Delete', - 'GMP::Solution::DeleteAll','GMP::Solution::GetColumnValue','GMP::Solution::GetCPUSecondsUsed', - 'GMP::Solution::GetDistance','GMP::Solution::GetFirstOrderDerivative', - 'GMP::Solution::GetIterationsUsed','GMP::Solution::GetNodesUsed','GMP::Solution::GetLinearObjective', - 'GMP::Solution::GetMemoryUsed','GMP::Solution::GetObjective','GMP::Solution::GetPenalizedObjective', - 'GMP::Solution::GetProgramStatus','GMP::Solution::GetRowValue','GMP::Solution::GetSolutionsSet', - 'GMP::Solution::GetSolverStatus','GMP::Solution::IsDualDegenerated','GMP::Solution::IsInteger', - 'GMP::Solution::IsPrimalDegenerated','GMP::Solution::SetMIPStartFlag','GMP::Solution::Move', - 'GMP::Solution::RandomlyGenerate','GMP::Solution::RetrieveFromModel', - 'GMP::Solution::RetrieveFromSolverSession','GMP::Solution::SendToModel', - 'GMP::Solution::SendToModelSelection','GMP::Solution::SendToSolverSession', - 'GMP::Solution::SetIterationCount','GMP::Solution::SetProgramStatus','GMP::Solution::SetSolverStatus', - 'GMP::Solution::UpdatePenaltyWeights','GMP::Solution::ConstructMean', - 'GMP::SolverSession::AsynchronousExecute','GMP::SolverSession::Execute', - 'GMP::SolverSession::Interrupt','GMP::SolverSession::AddLinearization', - 'GMP::SolverSession::GenerateBranchLowerBound','GMP::SolverSession::GenerateBranchUpperBound', - 'GMP::SolverSession::GenerateBranchRow','GMP::SolverSession::GenerateCut', - 'GMP::SolverSession::GenerateBinaryEliminationRow','GMP::SolverSession::GetCPUSecondsUsed', - 'GMP::SolverSession::GetHost','GMP::SolverSession::GetInstance', - 'GMP::SolverSession::GetIterationsUsed','GMP::SolverSession::GetNodesLeft', - 'GMP::SolverSession::GetNodesUsed','GMP::SolverSession::GetNodeNumber', - 'GMP::SolverSession::GetNodeObjective','GMP::SolverSession::GetNumberOfBranchNodes', - 'GMP::SolverSession::GetLinearObjective','GMP::SolverSession::GetMemoryUsed', - 'GMP::SolverSession::GetObjective','GMP::SolverSession::GetOptionValue', - 'GMP::SolverSession::GetProgramStatus','GMP::SolverSession::GetSolver', - 'GMP::SolverSession::GetSolverStatus','GMP::SolverSession::RejectIncumbent', - 'GMP::Event::Create','GMP::Event::Delete','GMP::Event::Reset','GMP::Event::Set', - 'GMP::SolverSession::SetObjective','GMP::SolverSession::SetOptionValue', - 'GMP::Instance::SetCPUSecondsLimit','GMP::Instance::SetIterationLimit', - 'GMP::Instance::SetMemoryLimit','GMP::Instance::SetOptionValue','GMP::Tuning::SolveSingleMPS', - 'GMP::Tuning::TuneMultipleMPS','GMP::Tuning::TuneSingleGMP', - 'GMP::Solver::GetAsynchronousSessionsLimit','GMP::Robust::EvaluateAdjustableVariables', - 'GenerateXML','GetDatasourceProperty','ReadGeneratedXML','ReadXML','ReferencedIdentifiers', - 'WriteXML','IdentifierAttributes','IdentifierDimension','IsRuntimeIdentifier','IdentifierMemory', - 'IdentifierMemoryStatistics','IdentifierText','IdentifierType','IdentifierUnit','ScalarValue', - 'SectionIdentifiers','SubRange','MemoryInUse','CommitTransaction','RollbackTransaction', - 'MemoryStatistics','me::AllowedAttribute','me::ChangeType','me::ChangeTypeAllowed','me::Children', - 'me::ChildTypeAllowed','me::Compile','me::Create','me::CreateLibrary','me::Delete','me::ExportNode', - 'me::GetAttribute','me::ImportLibrary','me::ImportNode','me::IsRunnable','me::Move','me::Parent', - 'me::Rename','me::SetAttribute','MomentToString','MomentToTimeSlot','OptionGetValue', - 'OptionGetKeywords','OptionGetString','OptionSetString','OptionSetValue','PeriodToString', - 'ProfilerContinue','ProfilerPause','ProfilerRestart','RestoreInactiveElements', - 'RetrieveCurrentVariableValues','SetAddRecursive','SetElementAdd','SetElementRename', - 'SQLColumnData','SQLCreateConnectionString','SQLDriverName','SQLNumberOfColumns', - 'SQLNumberOfDrivers','SQLNumberOfTables','SQLNumberOfViews','SQLTableName','SQLViewName', - 'StartTransaction','StringToElement','StringToMoment','StringToTimeSlot','TestDatabaseColumn', - 'TestDatabaseTable','TestDataSource','TestDate','TimeslotCharacteristic','TimeslotToMoment', - 'TimeslotToString','TimeZoneOffset','VariableConstraints','PageOpen','PageOpenSingle','PageClose', - 'PageGetActive','PageSetFocus','PageGetFocus','PageSetCursor','PageRefreshAll','PageGetChild', - 'PageGetParent','PageGetNext','PageGetPrevious','PageGetNextInTreeWalk','PageGetUsedIdentifiers', - 'PageGetTitle','PageGetAll','PageCopyTableToClipboard','PageCopyTableToExcel','PrintPage', - 'PrintPageCount','PrintStartReport','PrintEndReport','PivotTableReloadState','PivotTableSaveState', - 'PivotTableDeleteState','FileSelect','FileSelectNew','FileDelete','FileExists','FileCopy', - 'FileMove','FileView','FileEdit','FilePrint','FileTime','FileTouch','FileAppend','FileGetSize', - 'DirectorySelect','DirectoryCreate','DirectoryDelete','DirectoryExists','DirectoryCopy', - 'DirectoryMove','DirectoryGetCurrent','DialogProgress','DialogMessage','DialogError', - 'StatusMessage','DialogAsk','DialogGetString','DialogGetDate','DialogGetNumber','DialogGetElement', - 'DialogGetElementByText','DialogGetElementByData','DialogGetPassword','DialogGetColor','CaseNew', - 'CaseFind','CaseCreate','CaseLoadCurrent','CaseMerge','CaseLoadIntoCurrent','CaseSelect', - 'CaseSelectNew','CaseSetCurrent','CaseSave','CaseSaveAll','CaseSaveAs','CaseSelectMultiple', - 'CaseGetChangedStatus','CaseSetChangedStatus','CaseDelete','CaseGetType','CaseGetDatasetReference', - 'CaseWriteToSingleFile','CaseReadFromSingleFile','DatasetNew','DatasetFind','DatasetCreate', - 'DatasetLoadCurrent','DatasetMerge','DatasetLoadIntoCurrent','DatasetSelect','DatasetSelectNew', - 'DatasetSetCurrent','DatasetSave','DatasetSaveAll','DatasetSaveAs','DatasetGetChangedStatus', - 'DatasetSetChangedStatus','DatasetDelete','DatasetGetCategory','DataFileGetName', - 'DataFileGetAcronym','DataFileSetAcronym','DataFileGetComment','DataFileSetComment', - 'DataFileGetPath','DataFileGetTime','DataFileGetOwner','DataFileGetGroup','DataFileReadPermitted', - 'DataFileWritePermitted','DataFileExists','DataFileCopy','DataCategoryContents','CaseTypeContents', - 'CaseTypeCategories','Execute','OpenDocument','TestInternetConnection','GeoFindCoordinates', - 'ShowHelpTopic','Delay','ScheduleAt','ExitAimms','SessionArgument','SessionHasVisibleGUI', - 'ProjectDeveloperMode','DebuggerBreakpoint','ShowProgressWindow','ShowMessageWindow', - 'SolverGetControl','SolverReleaseControl','ProfilerStart','DataManagerImport','DataManagerExport', - 'DataManagerFileNew','DataManagerFileOpen','DataManagerFileGetCurrent','DataImport220', - 'SecurityGetUsers','SecurityGetGroups','UserColorAdd','UserColorDelete','UserColorGetRGB', - 'UserColorModify','LicenseNumber','LicenseType','LicenseStartDate','LicenseExpirationDate', - 'LicenseMaintenanceExpirationDate','VARLicenseExpirationDate','AimmsRevisionString', - 'VARLicenseCreate','HistogramCreate','HistogramDelete','HistogramSetDomain', - 'HistogramAddObservation','HistogramGetFrequencies','HistogramGetBounds', - 'HistogramGetObservationCount','HistogramGetAverage','HistogramGetDeviation', - 'HistogramGetSkewness','HistogramGetKurtosis','DateDifferenceDays','DateDifferenceYearFraction', - 'PriceFractional','PriceDecimal','RateEffective','RateNominal','DepreciationLinearLife', - 'DepreciationLinearRate','DepreciationNonLinearSumOfYear','DepreciationNonLinearLife', - 'DepreciationNonLinearFactor','DepreciationNonLinearRate','DepreciationSum', - 'InvestmentConstantPresentValue','InvestmentConstantFutureValue', - 'InvestmentConstantPeriodicPayment','InvestmentConstantInterestPayment', - 'InvestmentConstantPrincipalPayment','InvestmentConstantCumulativePrincipalPayment', - 'InvestmentConstantCumulativeInterestPayment','InvestmentConstantNumberPeriods', - 'InvestmentConstantRateAll','InvestmentConstantRate','InvestmentVariablePresentValue', - 'InvestmentVariablePresentValueInperiodic','InvestmentSingleFutureValue', - 'InvestmentVariableInternalRateReturnAll','InvestmentVariableInternalRateReturn', - 'InvestmentVariableInternalRateReturnInperiodicAll','InvestmentVariableInternalRateReturnInperiodic', - 'InvestmentVariableInternalRateReturnModified','SecurityDiscountedPrice', - 'SecurityDiscountedRedemption','SecurityDiscountedYield','SecurityDiscountedRate', - 'TreasuryBillPrice','TreasuryBillYield','TreasuryBillBondEquivalent','SecurityMaturityPrice', - 'SecurityMaturityCouponRate','SecurityMaturityYield','SecurityMaturityAccruedInterest', - 'SecurityCouponNumber','SecurityCouponPreviousDate','SecurityCouponNextDate','SecurityCouponDays', - 'SecurityCouponDaysPreSettlement','SecurityCouponDaysPostSettlement','SecurityPeriodicPrice', - 'SecurityPeriodicRedemption','SecurityPeriodicCouponRate','SecurityPeriodicYieldAll', - 'SecurityPeriodicYield','SecurityPeriodicAccruedInterest','SecurityPeriodicDuration', - 'SecurityPeriodicDurationModified','Abs','AtomicUnit','Ceil','Character','CharacterNumber','Cube', - 'Degrees','Div','Exp','FileRead','Floor','Log','Log10','Mapval','Max','Min','Mod','Power', - 'Radians','Round','Sign','Sqr','Sqrt','StringCapitalize','StringLength','StringToLower', - 'StringToUnit','StringToUpper','SubString','Trunc','Binomial','NegativeBinomial','Poisson', - 'Geometric','HyperGeometric','Uniform','Normal','LogNormal','Triangular','Exponential','Weibull', - 'Beta','Gamma','Logistic','Pareto','ExtremeValue','Precision','Factorial','Combination', - 'Permutation','Errorf','Cos','Sin','Tan','ArcCos','ArcSin','ArcTan','Cosh','Sinh','Tanh', - 'ArcCosh','ArcSinh','ArcTanh' - ) - ), - 'SYMBOLS' => array( - 0 => array( - '(', ')', '[', ']', '{', '}', - '%', '&', '|', '/', - '<', '>', '>=' , '<=', ':=', - '=', '-', '+', '*', - '.', ',' - ) - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #0000FF;', - 2 => 'color: #000000; font-weight: bold;', - 3 => 'color: #404040;', - 4 => 'color: #990000; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #009900;' - ), - 'STRINGS' => array( - 0 => 'color: #808080; font-style: italic ', - 'HARD' => 'color: #808080; font-style: italic' - ), - 'NUMBERS' => array( - 0 => 'color: #cc66cc;', - GESHI_NUMBER_OCT_PREFIX => 'color: #208080;', - GESHI_NUMBER_HEX_PREFIX => 'color: #208080;', - GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;', - ), - 'COMMENTS' => array( - 1 => 'color: #008000; font-style: italic;', - 'MULTI' => 'color: #008000; font-style: italic;' - ), - - 'METHODS' => array( - 1 => 'color: #004000;', - 2 => 'color: #004000;' - ), - 'SYMBOLS' => array( - 0 => 'color: #339933;', - 1 => 'color: #000000; font-weight: bold;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - 0 => '', - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '' - ), - 'ESCAPE_CHAR' => array() - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '' - ), - 'OOLANG' => false, - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php deleted file mode 100644 index 2aadb0ce..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php +++ /dev/null @@ -1,328 +0,0 @@ - $prebits.$LONGS."(?:".$bl.")".$postbits, - "INT" => $preint.$LONGS."(?:".$il.")".$postint, - "REAL" => $prereal.$LONGS."(?:".$rl.")".$postreal, - - "BOLD" => 'color: #b1b100; font-weight: bold;', - "ITALIC" => 'color: #b1b100;', # procedures traditionally italic # - "NONSTD" => 'color: #FF0000; font-weight: bold;', # RED # - "COMMENT" => 'color: #666666; font-style: italic;' - ); - } -} -$a68=geshi_langfile_algol68_vars(); - -$language_data = array( - 'LANG_NAME' => 'ALGOL 68', - 'COMMENT_SINGLE' => array(), - 'COMMENT_MULTI' => array( - '¢' => '¢', - '£' => '£', - '#' => '#', - ), - 'COMMENT_REGEXP' => array( - 1 => '/\bCO((?:MMENT)?)\b.*?\bCO\\1\b/i', - 2 => '/\bPR((?:AGMAT)?)\b.*?\bPR\\1\b/i', - 3 => '/\bQUOTE\b.*?\bQUOTE\b/i' - ), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '"', - 'NUMBERS' => GESHI_NUMBER_HEX_SUFFIX, # Warning: Feature!! # -# GESHI_NUMBER_HEX_SUFFIX, # Attempt ignore default # - 'KEYWORDS' => array( -# Extensions - 1 => array('KEEP', 'FINISH', 'USE', 'SYSPROCS', 'IOSTATE', 'USING', 'ENVIRON', 'PROGRAM', 'CONTEXT'), -# 2 => array('CASE', 'IN', 'OUSE', 'IN', 'OUT', 'ESAC', '(', '|', '|:', ')', 'FOR', 'FROM', 'TO', 'BY', 'WHILE', 'DO', 'OD', 'IF', 'THEN', 'ELIF', 'THEN', 'ELSE', 'FI', 'PAR', 'BEGIN', 'EXIT', 'END', 'GO', 'GOTO', 'FORALL', 'UPTO', 'DOWNTO', 'FOREACH', 'ASSERT'), # - 2 => array('CASE', 'IN', 'OUSE', /* 'IN',*/ 'OUT', 'ESAC', 'PAR', 'BEGIN', 'EXIT', 'END', 'GO TO', 'GOTO', 'FOR', 'FROM', 'TO', 'BY', 'WHILE', 'DO', 'OD', 'IF', 'THEN', 'ELIF', /* 'THEN',*/ 'ELSE', 'FI' ), - 3 => array('BITS', 'BOOL', 'BYTES', 'CHAR', 'COMPL', 'INT', 'REAL', 'SEMA', 'STRING', 'VOID'), - 4 => array('MODE', 'OP', 'PRIO', 'PROC', 'FLEX', 'HEAP', 'LOC', 'REF', 'LONG', 'SHORT', 'EITHER'), -# Extensions or deprecated keywords -# 'PIPE': keyword somehow interferes with the internal operation of GeSHi - 5 => array('FORALL', 'UPTO', 'DOWNTO', 'FOREACH', 'ASSERT', 'CTB', 'CT', 'CTAB', 'COMPLEX', 'VECTOR', 'SOUND' /*, 'PIPE'*/), - 6 => array('CHANNEL', 'FILE', 'FORMAT', 'STRUCT', 'UNION', 'OF'), -# '(', '|', '|:', ')', # -# 7 => array('OF', 'AT', '@', 'IS', ':=:', 'ISNT', ':/=:', ':≠:', 'CTB', 'CT', '::', 'CTAB', '::=', 'TRUE', 'FALSE', 'EMPTY', 'NIL', 'â—‹', 'SKIP', '~'), - 7 => array('AT', 'IS', 'ISNT', 'TRUE', 'FALSE', 'EMPTY', 'NIL', 'SKIP'), - 8 => array('NOT', 'UP', 'DOWN', 'LWB', 'UPB', /* '-',*/ 'ABS', 'ARG', 'BIN', 'ENTIER', 'LENG', 'LEVEL', 'ODD', 'REPR', 'ROUND', 'SHORTEN', 'CONJ', 'SIGN'), -# OPERATORS ordered roughtly by PRIORITY # -# 9 => array('¬', '↑', '↓', '⌊', '⌈', '~', '⎩', '⎧'), -# 10 => array('+*', 'I', '+×', '⊥', '!', 'â¨'), - 10 => array('I'), -# 11 => array('SHL', 'SHR', '**', 'UP', 'DOWN', 'LWB', 'UPB', '↑', '↓', '⌊', '⌈', '⎩', '⎧'), - 11 => array('SHL', 'SHR', /*'UP', 'DOWN', 'LWB', 'UPB'*/), -# 12 => array('*', '/', '%', 'OVER', '%*', 'MOD', 'ELEM', '×', '÷', '÷×', '÷*', '%×', 'â–¡', '÷:'), - 12 => array('OVER', 'MOD', 'ELEM'), -# 13 => array('-', '+'), -# 14 => array('<', 'LT', '<=', 'LE', '>=', 'GE', '>', 'GT', '≤', '≥'), - 14 => array('LT', 'LE', 'GE', 'GT'), -# 15 => array('=', 'EQ', '/=', 'NE', '≠', '~='), - 15 => array('EQ', 'NE'), -# 16 => array('&', 'AND', '∧', 'OR', '∨', '/\\', '\\/'), - 16 => array('AND', 'OR'), - 17 => array('MINUSAB', 'PLUSAB', 'TIMESAB', 'DIVAB', 'OVERAB', 'MODAB', 'PLUSTO'), -# 18 => array('-:=', '+:=', '*:=', '/:=', '%:=', '%*:=', '+=:', '×:=', '÷:=', '÷×:=', '÷*:=', '%×:=', '÷::=', 'MINUS', 'PLUS', 'DIV', 'MOD', 'PRUS'), -# Extensions or deprecated keywords - 18 => array('MINUS', 'PLUS', 'DIV', /* 'MOD',*/ 'PRUS', 'IS NOT'), -# Extensions or deprecated keywords - 19 => array('THEF', 'ANDF', 'ORF', 'ANDTH', 'OREL', 'ANDTHEN', 'ORELSE'), -# Built in procedures - from standard prelude # - 20 => array('int lengths', 'intlengths', 'int shorths', 'intshorths', 'max int', 'maxint', 'real lengths', 'reallengths', 'real shorths', 'realshorths', 'bits lengths', 'bitslengths', 'bits shorths', 'bitsshorths', 'bytes lengths', 'byteslengths', 'bytes shorths', 'bytesshorths', 'max abs char', 'maxabschar', 'int width', 'intwidth', 'long int width', 'longintwidth', 'long long int width', 'longlongintwidth', 'real width', 'realwidth', 'long real width', 'longrealwidth', 'long long real width', 'longlongrealwidth', 'exp width', 'expwidth', 'long exp width', 'longexpwidth', 'long long exp width', 'longlongexpwidth', 'bits width', 'bitswidth', 'long bits width', 'longbitswidth', 'long long bits width', 'longlongbitswidth', 'bytes width', 'byteswidth', 'long bytes width', 'longbyteswidth', 'max real', 'maxreal', 'small real', 'smallreal', 'long max int', 'longmaxint', 'long long max int', 'longlongmaxint', 'long max real', 'longmaxreal', 'long small real', 'longsmallreal', 'long long max real', 'longlongmaxreal', 'long long small real', 'longlongsmallreal', 'long max bits', 'longmaxbits', 'long long max bits', 'longlongmaxbits', 'null character', 'nullcharacter', 'blank', 'flip', 'flop', 'error char', 'errorchar', 'exp char', 'expchar', 'newline char', 'newlinechar', 'formfeed char', 'formfeedchar', 'tab char', 'tabchar'), - 21 => array('stand in channel', 'standinchannel', 'stand out channel', 'standoutchannel', 'stand back channel', 'standbackchannel', 'stand draw channel', 'standdrawchannel', 'stand error channel', 'standerrorchannel'), - 22 => array('put possible', 'putpossible', 'get possible', 'getpossible', 'bin possible', 'binpossible', 'set possible', 'setpossible', 'reset possible', 'resetpossible', 'reidf possible', 'reidfpossible', 'draw possible', 'drawpossible', 'compressible', 'on logical file end', 'onlogicalfileend', 'on physical file end', 'onphysicalfileend', 'on line end', 'onlineend', 'on page end', 'onpageend', 'on format end', 'onformatend', 'on value error', 'onvalueerror', 'on open error', 'onopenerror', 'on transput error', 'ontransputerror', 'on format error', 'onformaterror', 'open', 'establish', 'create', 'associate', 'close', 'lock', 'scratch', 'space', 'new line', 'newline', 'print', 'write f', 'writef', 'print f', 'printf', 'write bin', 'writebin', 'print bin', 'printbin', 'read f', 'readf', 'read bin', 'readbin', 'put f', 'putf', 'get f', 'getf', 'make term', 'maketerm', 'make device', 'makedevice', 'idf', 'term', 'read int', 'readint', 'read long int', 'readlongint', 'read long long int', 'readlonglongint', 'read real', 'readreal', 'read long real', 'readlongreal', 'read long long real', 'readlonglongreal', 'read complex', 'readcomplex', 'read long complex', 'readlongcomplex', 'read long long complex', 'readlonglongcomplex', 'read bool', 'readbool', 'read bits', 'readbits', 'read long bits', 'readlongbits', 'read long long bits', 'readlonglongbits', 'read char', 'readchar', 'read string', 'readstring', 'print int', 'printint', 'print long int', 'printlongint', 'print long long int', 'printlonglongint', 'print real', 'printreal', 'print long real', 'printlongreal', 'print long long real', 'printlonglongreal', 'print complex', 'printcomplex', 'print long complex', 'printlongcomplex', 'print long long complex', 'printlonglongcomplex', 'print bool', 'printbool', 'print bits', 'printbits', 'print long bits', 'printlongbits', 'print long long bits', 'printlonglongbits', 'print char', 'printchar', 'print string', 'printstring', 'whole', 'fixed', 'float'), - 23 => array('pi', 'long pi', 'longpi', 'long long pi', 'longlongpi'), - 24 => array('sqrt', 'curt', 'cbrt', 'exp', 'ln', 'log', 'sin', 'arc sin', 'arcsin', 'cos', 'arc cos', 'arccos', 'tan', 'arc tan', 'arctan', 'long sqrt', 'longsqrt', 'long curt', 'longcurt', 'long cbrt', 'longcbrt', 'long exp', 'longexp', 'long ln', 'longln', 'long log', 'longlog', 'long sin', 'longsin', 'long arc sin', 'longarcsin', 'long cos', 'longcos', 'long arc cos', 'longarccos', 'long tan', 'longtan', 'long arc tan', 'longarctan', 'long long sqrt', 'longlongsqrt', 'long long curt', 'longlongcurt', 'long long cbrt', 'longlongcbrt', 'long long exp', 'longlongexp', 'long long ln', 'longlongln', 'long long log', 'longlonglog', 'long long sin', 'longlongsin', 'long long arc sin', 'longlongarcsin', 'long long cos', 'longlongcos', 'long long arc cos', 'longlongarccos', 'long long tan', 'longlongtan', 'long long arc tan', 'longlongarctan'), - 25 => array('first random', 'firstrandom', 'next random', 'nextrandom', 'long next random', 'longnextrandom', 'long long next random', 'longlongnextrandom'), - 26 => array('real', 'bits pack', 'bitspack', 'long bits pack', 'longbitspack', 'long long bits pack', 'longlongbitspack', 'bytes pack', 'bytespack', 'long bytes pack', 'longbytespack', 'char in string', 'charinstring', 'last char in string', 'lastcharinstring', 'string in string', 'stringinstring'), - 27 => array('utc time', 'utctime', 'local time', 'localtime', 'argc', 'argv', 'get env', 'getenv', 'reset errno', 'reseterrno', 'errno', 'strerror'), - 28 => array('sinh', 'long sinh', 'longsinh', 'long long sinh', 'longlongsinh', 'arc sinh', 'arcsinh', 'long arc sinh', 'longarcsinh', 'long long arc sinh', 'longlongarcsinh', 'cosh', 'long cosh', 'longcosh', 'long long cosh', 'longlongcosh', 'arc cosh', 'arccosh', 'long arc cosh', 'longarccosh', 'long long arc cosh', 'longlongarccosh', 'tanh', 'long tanh', 'longtanh', 'long long tanh', 'longlongtanh', 'arc tanh', 'arctanh', 'long arc tanh', 'longarctanh', 'long long arc tanh', 'longlongarctanh', 'arc tan2', 'arctan2', 'long arc tan2', 'longarctan2', 'long long arc tan2', 'longlongarctan2'), - 29 => array('complex sqrt', 'complexsqrt', 'long complex sqrt', 'longcomplexsqrt', 'long long complex sqrt', 'longlongcomplexsqrt', 'complex exp', 'complexexp', 'long complex exp', 'longcomplexexp', 'long long complex exp', 'longlongcomplexexp', 'complex ln', 'complexln', 'long complex ln', 'longcomplexln', 'long long complex ln', 'longlongcomplexln', 'complex sin', 'complexsin', 'long complex sin', 'longcomplexsin', 'long long complex sin', 'longlongcomplexsin', 'complex arc sin', 'complexarcsin', 'long complex arc sin', 'longcomplexarcsin', 'long long complex arc sin', 'longlongcomplexarcsin', 'complex cos', 'complexcos', 'long complex cos', 'longcomplexcos', 'long long complex cos', 'longlongcomplexcos', 'complex arc cos', 'complexarccos', 'long complex arc cos', 'longcomplexarccos', 'long long complex arc cos', 'longlongcomplexarccos', 'complex tan', 'complextan', 'long complex tan', 'longcomplextan', 'long long complex tan', 'longlongcomplextan', 'complex arc tan', 'complexarctan', 'long complex arc tan', 'longcomplexarctan', 'long long complex arc tan', 'longlongcomplexarctan', 'complex sinh', 'complexsinh', 'complex arc sinh', 'complexarcsinh', 'complex cosh', 'complexcosh', 'complex arc cosh', 'complexarccosh', 'complex tanh', 'complextanh', 'complex arc tanh', 'complexarctanh') - ), - 'SYMBOLS' => array( - 1 => array( /* reverse length sorted... */ '÷×:=', '%×:=', ':≠:', '÷*:=', '÷::=', '%*:=', ':/=:', '×:=', '÷:=', '÷×', '%:=', '%×', '*:=', '+:=', '+=:', '+×', '-:=', '/:=', '::=', ':=:', '÷*', '÷:', '↑', '↓', '∧', '∨', '≠', '≤', '≥', '⊥', '⌈', '⌊', '⎧', '⎩', /* 'â¨', */ 'â–¡', 'â—‹', '%*', '**', '+*', '/=', '::', '/\\', '\\/', '<=', '>=', '|:', '~=', '¬', '×', '÷', '!', '%', '&', '(', ')', '*', '+', ',', '-', '/', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^', '{', '|', '}', '~') - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, - 2 => true, - 3 => true, - 4 => true, - 5 => true, - 6 => true, - 7 => true, - 8 => true, -# 9 => true, - 10 => true, - 11 => true, - 12 => true, -# 13 => true, - 14 => true, - 15 => true, - 16 => true, - 17 => true, - 18 => true, - 19 => true, - 20 => true, - 21 => true, - 22 => true, - 23 => true, - 24 => true, - 25 => true, - 26 => true, - 27 => true, - 28 => true, - 29 => true - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => $a68['NONSTD'], 2 => $a68['BOLD'], 3 => $a68['BOLD'], 4 => $a68['BOLD'], - 5 => $a68['NONSTD'], 6 => $a68['BOLD'], 7 => $a68['BOLD'], 8 => $a68['BOLD'], - /* 9 => $a68['BOLD'],*/ 10 => $a68['BOLD'], 11 => $a68['BOLD'], 12 => $a68['BOLD'], - /* 13 => $a68['BOLD'],*/ 14 => $a68['BOLD'], 15 => $a68['BOLD'], 16 => $a68['BOLD'], 17 => $a68['BOLD'], - 18 => $a68['NONSTD'], 19 => $a68['NONSTD'], - 20 => $a68['ITALIC'], 21 => $a68['ITALIC'], 22 => $a68['ITALIC'], 23 => $a68['ITALIC'], - 24 => $a68['ITALIC'], 25 => $a68['ITALIC'], 26 => $a68['ITALIC'], 27 => $a68['ITALIC'], - 28 => $a68['ITALIC'], 29 => $a68['ITALIC'] - ), - 'COMMENTS' => array( - 1 => $a68['COMMENT'], 2 => $a68['COMMENT'], 3 => $a68['COMMENT'], /* 4 => $a68['COMMENT'], - 5 => $a68['COMMENT'],*/ 'MULTI' => $a68['COMMENT'] - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #009900;' - ), - 'STRINGS' => array( - 0 => 'color: #0000ff;' - ), - 'NUMBERS' => array( - 0 => 'color: #cc66cc;', - ), - 'METHODS' => array( - 0 => 'color: #004000;', - 1 => 'color: #004000;' - ), - 'SYMBOLS' => array( - 0 => 'color: #339933;', - 1 => 'color: #339933;' - ), - 'REGEXPS' => array( - 0 => 'color: #cc66cc;', # BITS # - 1 => 'color: #cc66cc;', # REAL # - /* 2 => 'color: #cc66cc;', # INT # */ - ), - 'SCRIPT' => array() - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - 8 => '', -# 9 => '', - 10 => '', - 11 => '', - 12 => '', -# 13 => '', - 14 => '', - 15 => '', - 16 => '', - 17 => '', - 18 => '', - 19 => '', - 20 => '', - 21 => '', - 22 => '', - 23 => '', - 24 => '', - 25 => '', - 26 => '', - 27 => '', - 28 => '', - 29 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 0 => '→', - 1 => 'OF' - ), - 'REGEXPS' => array( - 0 => $a68['BITS'], - 1 => $a68['REAL'] - # 2 => $a68['INT'], # Breaks formatting for some reason # - # 2 => $GESHI_NUMBER_INT_BASIC # Also breaks formatting # - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array(), - 'HIGHLIGHT_STRICT_BLOCK' => array() -); - -unset($a68); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php deleted file mode 100644 index 799f2501..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php +++ /dev/null @@ -1,481 +0,0 @@ - 'Apache configuration', - 'COMMENT_SINGLE' => array(1 => '#'), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array( - /*keywords*/ - 1 => array( - //core.c - 'AcceptFilter','AcceptPathInfo','AccessConfig','AccessFileName', - 'AddDefaultCharset','AddOutputFilterByType','AllowEncodedSlashes', - 'AllowOverride','AuthName','AuthType','ContentDigest', - 'CoreDumpDirectory','DefaultType','DocumentRoot','EnableMMAP', - 'EnableSendfile','ErrorDocument','ErrorLog','FileETag','ForceType', - 'HostnameLookups','Include','LimitInternalRecursion', - 'LimitRequestBody','LimitRequestFields','LimitRequestFieldsize', - 'LimitRequestLine','LimitXMLRequestBody','LogLevel','MaxMemFree', - 'MaxRequestsPerChild','NameVirtualHost','Options','PidFile','Port', - 'Protocol','Require','RLimitCPU','RLimitMEM','RLimitNPROC', - 'Satisfy','ScoreBoardFile','ServerAdmin','ServerAlias','ServerName', - 'ServerPath','ServerRoot','ServerSignature','ServerTokens', - 'SetHandler','SetInputFilter','SetOutputFilter','ThreadStackSize', - 'Timeout','TraceEnable','UseCanonicalName', - 'UseCanonicalPhysicalPort', - - //http_core.c - 'KeepAlive','KeepAliveTimeout','MaxKeepAliveRequests', - - //mod_actions.c - 'Action','Script', - - //mod_alias.c - 'Alias','AliasMatch','Redirect','RedirectMatch','RedirectPermanent', - 'RedirectTemp','ScriptAlias','ScriptAliasMatch', - - //mod_asis.c - - //mod_auth_basic.c - 'AuthBasicAuthoritative','AuthBasicProvider', - - //mod_auth_digest.c - 'AuthDigestAlgorithm','AuthDigestDomain','AuthDigestNcCheck', - 'AuthDigestNonceFormat','AuthDigestNonceLifetime', - 'AuthDigestProvider','AuthDigestQop','AuthDigestShmemSize', - - //mod_authn_alias.c - - //mod_authn_anon.c - 'Anonymous','Anonymous_LogEmail','Anonymous_MustGiveEmail', - 'Anonymous_NoUserId','Anonymous_VerifyEmail', - - //mod_authn_dbd.c - 'AuthDBDUserPWQuery','AuthDBDUserRealmQuery', - - //mod_authn_dbm.c - 'AuthDBMType','AuthDBMUserFile', - - //mod_authn_default.c - 'AuthDefaultAuthoritative', - - //mod_authn_file.c - 'AuthUserFile', - - //mod_authnz_ldap.c - 'AuthLDAPBindDN','AuthLDAPBindPassword','AuthLDAPCharsetConfig', - 'AuthLDAPCompareDNOnServer','AuthLDAPDereferenceAliases', - 'AuthLDAPGroupAttribute','AuthLDAPGroupAttributeIsDN', - 'AuthLDAPRemoteUserAttribute','AuthLDAPRemoteUserIsDN', - 'AuthLDAPURL','AuthzLDAPAuthoritative', - - //mod_authz_dbm.c - 'AuthDBMGroupFile','AuthzDBMAuthoritative','AuthzDBMType', - - //mod_authz_default.c - 'AuthzDefaultAuthoritative', - - //mod_authz_groupfile.c - 'AuthGroupFile','AuthzGroupFileAuthoritative', - - //mod_authz_host.c - 'Allow','Deny','Order', - - //mod_authz_owner.c - 'AuthzOwnerAuthoritative', - - //mod_authz_svn.c - 'AuthzForceUsernameCase','AuthzSVNAccessFile','AuthzSVNAnonymous', - 'AuthzSVNAuthoritative','AuthzSVNNoAuthWhenAnonymousAllowed', - - //mod_authz_user.c - 'AuthzUserAuthoritative', - - //mod_autoindex.c - 'AddAlt','AddAltByEncoding','AddAltByType','AddDescription', - 'AddIcon','AddIconByEncoding','AddIconByType','DefaultIcon', - 'FancyIndexing','HeaderName','IndexHeadInsert','IndexIgnore', - 'IndexOptions','IndexOrderDefault','IndexStyleSheet','ReadmeName', - - //mod_bt.c - 'Tracker','TrackerDetailURL','TrackerFlags','TrackerHashMaxAge', - 'TrackerHashMinAge','TrackerHashWatermark','TrackerHome', - 'TrackerReturnInterval','TrackerReturnMax', - 'TrackerReturnPeerFactor','TrackerReturnPeers','TrackerRootInclude', - 'TrackerStyleSheet', - - //mod_bw.c - 'BandWidth','BandWidthError','BandWidthModule','BandWidthPacket', - 'ForceBandWidthModule','LargeFileLimit','MaxConnection', - 'MinBandWidth', - - //mod_cache.c - 'CacheDefaultExpire','CacheDisable','CacheEnable', - 'CacheIgnoreCacheControl','CacheIgnoreHeaders', - 'CacheIgnoreNoLastMod','CacheIgnoreQueryString', - 'CacheLastModifiedFactor','CacheMaxExpire','CacheStoreNoStore', - 'CacheStorePrivate', - - //mod_cern_meta.c - 'MetaDir','MetaFiles','MetaSuffix', - - //mod_cgi.c - 'ScriptLog','ScriptLogBuffer','ScriptLogLength', - - //mod_charset_lite.c - 'CharsetDefault','CharsetOptions','CharsetSourceEnc', - - //mod_dav.c - 'DAV','DAVDepthInfinity','DAVMinTimeout', - - //mod_dav_fs.c - 'DAVLockDB', - - //mod_dav_lock.c - 'DAVGenericLockDB', - - //mod_dav_svn.c - 'SVNActivitiesDB','SVNAllowBulkUpdates','SVNAutoversioning', - 'SVNIndexXSLT','SVNListParentPath','SVNMasterURI','SVNParentPath', - 'SVNPath','SVNPathAuthz','SVNReposName','SVNSpecialURI', - - //mod_dbd.c - 'DBDExptime','DBDKeep','DBDMax','DBDMin','DBDParams','DBDPersist', - 'DBDPrepareSQL','DBDriver', - - //mod_deflate.c - 'DeflateBufferSize','DeflateCompressionLevel','DeflateFilterNote', - 'DeflateMemLevel','DeflateWindowSize', - - //mod_dir.c - 'DirectoryIndex','DirectorySlash', - - //mod_disk_cache.c - 'CacheDirLength','CacheDirLevels','CacheMaxFileSize', - 'CacheMinFileSize','CacheRoot', - - //mod_dumpio.c - 'DumpIOInput','DumpIOLogLevel','DumpIOOutput', - - //mod_env.c - 'PassEnv','SetEnv','UnsetEnv', - - //mod_expires.c - 'ExpiresActive','ExpiresByType','ExpiresDefault', - - //mod_ext_filter.c - 'ExtFilterDefine','ExtFilterOptions', - - //mod_file_cache.c - 'cachefile','mmapfile', - - //mod_filter.c - 'FilterChain','FilterDeclare','FilterProtocol','FilterProvider', - 'FilterTrace', - - //mod_gnutls.c - 'GnuTLSCache','GnuTLSCacheTimeout','GnuTLSCertificateFile', - 'GnuTLSKeyFile','GnuTLSPGPCertificateFile','GnuTLSPGPKeyFile', - 'GnuTLSClientVerify','GnuTLSClientCAFile','GnuTLSPGPKeyringFile', - 'GnuTLSEnable','GnuTLSDHFile','GnuTLSRSAFile','GnuTLSSRPPasswdFile', - 'GnuTLSSRPPasswdConfFile','GnuTLSPriorities', - 'GnuTLSExportCertificates', - - //mod_headers.c - 'Header','RequestHeader', - - //mod_imagemap.c - 'ImapBase','ImapDefault','ImapMenu', - - //mod_include.c - 'SSIAccessEnable','SSIEndTag','SSIErrorMsg','SSIStartTag', - 'SSITimeFormat','SSIUndefinedEcho','XBitHack', - - //mod_ident.c - 'IdentityCheck','IdentityCheckTimeout', - - //mod_info.c - 'AddModuleInfo', - - //mod_isapi.c - 'ISAPIAppendLogToErrors','ISAPIAppendLogToQuery','ISAPICacheFile', - 'ISAPIFakeAsync','ISAPILogNotSupported','ISAPIReadAheadBuffer', - - //mod_log_config.c - 'BufferedLogs','CookieLog','CustomLog','LogFormat','TransferLog', - - //mod_log_forensic.c - 'ForensicLog', - - //mod_log_rotate.c - 'RotateInterval','RotateLogs','RotateLogsLocalTime', - - //mod_logio.c - - //mod_mem_cache.c - 'MCacheMaxObjectCount','MCacheMaxObjectSize', - 'MCacheMaxStreamingBuffer','MCacheMinObjectSize', - 'MCacheRemovalAlgorithm','MCacheSize', - - //mod_mime.c - 'AddCharset','AddEncoding','AddHandler','AddInputFilter', - 'AddLanguage','AddOutputFilter','AddType','DefaultLanguage', - 'ModMimeUsePathInfo','MultiviewsMatch','RemoveCharset', - 'RemoveEncoding','RemoveHandler','RemoveInputFilter', - 'RemoveLanguage','RemoveOutputFilter','RemoveType','TypesConfig', - - //mod_mime_magic.c - 'MimeMagicFile', - - //mod_negotiation.c - 'CacheNegotiatedDocs','ForceLanguagePriority','LanguagePriority', - - //mod_php5.c - 'php_admin_flag','php_admin_value','php_flag','php_value', - 'PHPINIDir', - - //mod_proxy.c - 'AllowCONNECT','BalancerMember','NoProxy','ProxyBadHeader', - 'ProxyBlock','ProxyDomain','ProxyErrorOverride', - 'ProxyFtpDirCharset','ProxyIOBufferSize','ProxyMaxForwards', - 'ProxyPass','ProxyPassInterpolateEnv','ProxyPassMatch', - 'ProxyPassReverse','ProxyPassReverseCookieDomain', - 'ProxyPassReverseCookiePath','ProxyPreserveHost', - 'ProxyReceiveBufferSize','ProxyRemote','ProxyRemoteMatch', - 'ProxyRequests','ProxySet','ProxyStatus','ProxyTimeout','ProxyVia', - - //mod_proxy_ajp.c - - //mod_proxy_balancer.c - - //mod_proxy_connect.c - - //mod_proxy_ftp.c - - //mod_proxy_http.c - - //mod_rewrite.c - 'RewriteBase','RewriteCond','RewriteEngine','RewriteLock', - 'RewriteLog','RewriteLogLevel','RewriteMap','RewriteOptions', - 'RewriteRule', - - //mod_setenvif.c - 'BrowserMatch','BrowserMatchNoCase','SetEnvIf','SetEnvIfNoCase', - - //mod_so.c - 'LoadFile','LoadModule', - - //mod_speling.c - 'CheckCaseOnly','CheckSpelling', - - //mod_ssl.c - 'SSLCACertificateFile','SSLCACertificatePath','SSLCADNRequestFile', - 'SSLCADNRequestPath','SSLCARevocationFile','SSLCARevocationPath', - 'SSLCertificateChainFile','SSLCertificateFile', - 'SSLCertificateKeyFile','SSLCipherSuite','SSLCryptoDevice', - 'SSLEngine','SSLHonorCipherOrder','SSLMutex','SSLOptions', - 'SSLPassPhraseDialog','SSLProtocol','SSLProxyCACertificateFile', - 'SSLProxyCACertificatePath','SSLProxyCARevocationFile', - 'SSLProxyCARevocationPath','SSLProxyCipherSuite','SSLProxyEngine', - 'SSLProxyMachineCertificateFile','SSLProxyMachineCertificatePath', - 'SSLProxyProtocol','SSLProxyVerify','SSLProxyVerifyDepth', - 'SSLRandomSeed','SSLRenegBufferSize','SSLRequire','SSLRequireSSL', - 'SSLSessionCache','SSLSessionCacheTimeout','SSLUserName', - 'SSLVerifyClient','SSLVerifyDepth', - - //mod_status.c - 'ExtendedStatus','SeeRequestTail', - - //mod_substitute.c - 'Substitute', - - //mod_suexec.c - 'SuexecUserGroup', - - //mod_unique_id.c - - //mod_upload_progress - 'ReportUploads', 'TrackUploads', 'UploadProgressSharedMemorySize', - - //mod_userdir.c - 'UserDir', - - //mod_usertrack.c - 'CookieDomain','CookieExpires','CookieName','CookieStyle', - 'CookieTracking', - - //mod_version.c - - //mod_vhost_alias.c - 'VirtualDocumentRoot','VirtualDocumentRootIP', - 'VirtualScriptAlias','VirtualScriptAliasIP', - - //mod_view.c - 'ViewEnable', - - //mod_win32.c - 'ScriptInterpreterSource', - - //mpm_winnt.c - 'Listen','ListenBacklog','ReceiveBufferSize','SendBufferSize', - 'ThreadLimit','ThreadsPerChild','Win32DisableAcceptEx', - - //mpm_common.c - 'AcceptMutex','AddModule','ClearModuleList','EnableExceptionHook', - 'Group','LockFile','MaxClients','MaxSpareServers','MaxSpareThreads', - 'MinSpareServers','MinSpareThreads','ServerLimit','StartServers', - 'StartThreads','User', - - //util_ldap.c - 'LDAPCacheEntries','LDAPCacheTTL','LDAPConnectionTimeout', - 'LDAPOpCacheEntries','LDAPOpCacheTTL','LDAPSharedCacheFile', - 'LDAPSharedCacheSize','LDAPTrustedClientCert', - 'LDAPTrustedGlobalCert','LDAPTrustedMode','LDAPVerifyServerCert', - - //Unknown Mods ... - 'AgentLog','BindAddress','bs2000account','CacheForceCompletion', - 'CacheGCInterval','CacheSize','NoCache','qsc','RefererIgnore', - 'RefererLog','Resourceconfig','ServerType','SingleListen' - ), - /*keywords 2*/ - 2 => array( - 'all','on','off','standalone','inetd','indexes', - 'force-response-1.0','downgrade-1.0','nokeepalive', - 'includes','followsymlinks','none', - 'x-compress','x-gzip' - ), - /*keywords 3*/ - 3 => array( - //core.c - 'Directory','DirectoryMatch','Files','FilesMatch','IfDefine', - 'IfModule','Limit','LimitExcept','Location','LocationMatch', - 'VirtualHost', - - //mod_authn_alias.c - 'AuthnProviderAlias', - - //mod_proxy.c - 'Proxy','ProxyMatch', - - //mod_version.c - 'IfVersion' - ) - ), - 'SYMBOLS' => array( - '+', '-' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00007f;', - 2 => 'color: #0000ff;', - 3 => 'color: #000000; font-weight:bold;', - ), - 'COMMENTS' => array( - 1 => 'color: #adadad; font-style: italic;', - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #339933;' - ), - 'STRINGS' => array( - 0 => 'color: #7f007f;' - ), - 'NUMBERS' => array( - 0 => 'color: #ff0000;' - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #008000;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'PARSER_CONTROL' => array( - 'ENABLE_FLAGS' => array( - 'BRACKETS' => GESHI_NEVER, - 'SYMBOLS' => GESHI_NEVER - ), - 'KEYWORDS' => array( - 3 => array( - 'DISALLOWED_BEFORE' => '(?<=<|<\/)', - 'DISALLOWED_AFTER' => '(?=\s|\/|>)', - ) - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php deleted file mode 100644 index fae9bb80..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php +++ /dev/null @@ -1,155 +0,0 @@ - 'AppleScript', - 'COMMENT_SINGLE' => array(1 => '--'), - 'COMMENT_MULTI' => array( '(*' => '*)'), - 'COMMENT_REGEXP' => array( - 2 => '/(?<=[a-z])\'/i', - 3 => '/(? GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array( - 1 => array( - 'application','close','count','delete','duplicate','exists','launch','make','move','open', - 'print','quit','reopen','run','save','saving', 'idle', 'path to', 'number', 'alias', 'list', 'text', 'string', - 'integer', 'it','me','version','pi','result','space','tab','anything','case','diacriticals','expansion', - 'hyphens','punctuation','bold','condensed','expanded','hidden','italic','outline','plain', - 'shadow','strikethrough','subscript','superscript','underline','ask','no','yes','false', 'id', - 'true','weekday','monday','mon','tuesday','tue','wednesday','wed','thursday','thu','friday', - 'fri','saturday','sat','sunday','sun','month','january','jan','february','feb','march', - 'mar','april','apr','may','june','jun','july','jul','august','aug','september', 'quote', 'do JavaScript', - 'sep','october','oct','november','nov','december','dec','minutes','hours', 'name', 'default answer', - 'days','weeks', 'folder', 'folders', 'file', 'files', 'window', 'eject', 'disk', 'reveal', 'sleep', - 'shut down', 'restart', 'display dialog', 'buttons', 'invisibles', 'item', 'items', 'delimiters', 'offset of', - 'AppleScript\'s', 'choose file', 'choose folder', 'choose from list', 'beep', 'contents', 'do shell script', - 'paragraph', 'paragraphs', 'missing value', 'quoted form', 'desktop', 'POSIX path', 'POSIX file', - 'activate', 'document', 'adding', 'receiving', 'content', 'new', 'properties', 'info for', 'bounds', - 'selection', 'extension', 'into', 'onto', 'by', 'between', 'against', 'set the clipboard to', 'the clipboard' - ), - 2 => array( - 'each','some','every','whose','where','index','first','second','third','fourth', - 'fifth','sixth','seventh','eighth','ninth','tenth','last','front','back','st','nd', - 'rd','th','middle','named','through','thru','before','after','beginning','the', 'as', - 'div','mod','and','not','or','contains','equal','equals','isnt', 'less', 'greater' - ), - 3 => array( - 'script','property','prop','end','to','set','global','local','on','of', - 'in','given','with','without','return','continue','tell','if','then','else','repeat', - 'times','while','until','from','exit','try','error','considering','ignoring','timeout', - 'transaction','my','get','put','is', 'copy' - ) - ), - 'SYMBOLS' => array( - ')','+','-','^','*','/','&','<','>=','<','<=','=','�' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #0066ff;', - 2 => 'color: #ff0033;', - 3 => 'color: #ff0033; font-weight: bold;' - ), - 'COMMENTS' => array( - 1 => 'color: #808080; font-style: italic;', - 2 => '', - 3 => 'color: #ff0000;', - 'MULTI' => 'color: #808080; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000000; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #000000;' - ), - 'STRINGS' => array( - 0 => 'color: #009900;' - ), - 'NUMBERS' => array( - 0 => 'color: #000000;' - ), - 'METHODS' => array( - 1 => 'color: #006600;', - 2 => 'color: #006600;' - ), - 'SYMBOLS' => array( - 0 => 'color: #000000;' - ), - 'REGEXPS' => array( - 0 => 'color: #339933;', - 4 => 'color: #0066ff;', - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => ',+-=<>/?^&*' - ), - 'REGEXPS' => array( - //Variables - 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*', - //File descriptors - 4 => '<[a-zA-Z_][a-zA-Z0-9_]*>', - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'PARSER_CONTROL' => array( - 'KEYWORDS' => array( - 'SPACE_AS_WHITESPACE' => true - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php deleted file mode 100644 index f270ea3d..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php +++ /dev/null @@ -1,153 +0,0 @@ - 'Apt sources', - 'COMMENT_SINGLE' => array(1 => '#'), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array(), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array( - /*keywords*/ - 1 => array( - 'deb-src', 'deb' - ), - 2 => array( - //Generic - 'stable', 'old-stable', 'testing', 'testing-proposed-updates', - 'unstable', 'unstable-proposed-updates', 'experimental', - 'non-US', 'security', 'volatile', 'volatile-sloppy', - 'apt-build', - 'stable/updates', - //Debian - 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato', 'woody', 'sarge', - 'etch', 'lenny', 'wheezy', 'jessie', 'sid', - //Ubuntu - 'warty', 'warty-updates', 'warty-security', 'warty-proposed', 'warty-backports', - 'hoary', 'hoary-updates', 'hoary-security', 'hoary-proposed', 'hoary-backports', - 'breezy', 'breezy-updates', 'breezy-security', 'breezy-proposed', 'breezy-backports', - 'dapper', 'dapper-updates', 'dapper-security', 'dapper-proposed', 'dapper-backports', - 'edgy', 'edgy-updates', 'edgy-security', 'edgy-proposed', 'edgy-backports', - 'feisty', 'feisty-updates', 'feisty-security', 'feisty-proposed', 'feisty-backports', - 'gutsy', 'gutsy-updates', 'gutsy-security', 'gutsy-proposed', 'gutsy-backports', - 'hardy', 'hardy-updates', 'hardy-security', 'hardy-proposed', 'hardy-backports', - 'intrepid', 'intrepid-updates', 'intrepid-security', 'intrepid-proposed', 'intrepid-backports', - 'jaunty', 'jaunty-updates', 'jaunty-security', 'jaunty-proposed', 'jaunty-backports', - 'karmic', 'karmic-updates', 'karmic-security', 'karmic-proposed', 'karmic-backports', - 'lucid', 'lucid-updates', 'lucid-security', 'lucid-proposed', 'lucid-backports', - 'maverick', 'maverick-updates', 'maverick-security', 'maverick-proposed', 'maverick-backports', - 'natty', 'natty-updates', 'natty-security', 'natty-proposed', 'natty-backports', - 'oneiric', 'oneiric-updates', 'oneiric-security', 'oneiric-proposed', 'oneiric-backports', - 'precise', 'precise-updates', 'precise-security', 'precise-proposed', 'precise-backports', - 'quantal', 'quantal-updates', 'quantal-security', 'quantal-proposed', 'quantal-backports', - 'raring', 'raring-updates', 'raring-security', 'raring-proposed', 'raring-backports', - 'saucy', 'saucy-updates', 'saucy-security', 'saucy-proposed', 'saucy-backports', - 'trusty', 'trusty-updates', 'trusty-security', 'trusty-proposed', 'trusty-backports' - ), - 3 => array( - 'main', 'restricted', 'preview', 'contrib', 'non-free', - 'commercial', 'universe', 'multiverse' - ) - ), - 'REGEXPS' => array( - 0 => "(((http|ftp):\/\/|file:\/)[^\s]+)|(cdrom:\[[^\]]*\][^\s]*)", - ), - 'SYMBOLS' => array( - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => true, - 3 => true - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00007f;', - 2 => 'color: #b1b100;', - 3 => 'color: #b16000;' - ), - 'COMMENTS' => array( - 1 => 'color: #adadad; font-style: italic;', - ), - 'ESCAPE_CHAR' => array( - ), - 'BRACKETS' => array( - ), - 'STRINGS' => array( - ), - 'NUMBERS' => array( - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - ), - 'REGEXPS' => array( - 0 => 'color: #009900;', - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'PARSER_CONTROL' => array( - 'ENABLE_FLAGS' => array( - 'NUMBERS' => GESHI_NEVER, - 'METHODS' => GESHI_NEVER, - 'SCRIPT' => GESHI_NEVER, - 'SYMBOLS' => GESHI_NEVER, - 'ESCAPE_CHAR' => GESHI_NEVER, - 'BRACKETS' => GESHI_NEVER, - 'STRINGS' => GESHI_NEVER, - ), - 'KEYWORDS' => array( - 'DISALLOWED_BEFORE' => '(?|^\/])', - 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\.])' - ) - ), - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php deleted file mode 100644 index dd2870cd..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php +++ /dev/null @@ -1,3316 +0,0 @@ - 'ARM ASSEMBLER', - 'COMMENT_SINGLE' => array( - 1 => ';' - ), - 'COMMENT_MULTI' => array(), - //Line address prefix suppression - 'COMMENT_REGEXP' => array( - 2 => "/^(?:[0-9a-f]{0,4}:)?[0-9a-f]{4}(?:[0-9a-f]{4})?/mi" - ), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - /* Unconditional Data Processing Instructions */ - 1 => array( - /* Data Processing: Unconditional Addition & Subtraction */ - 'adc.w','adcal.w', - 'adc','adcal', - 'add.w','addal.w', - 'add','addal', - 'addw','addwal', - 'rsb.w','rsbal.w', - 'rsb','rsbal', - 'rsc','rscal', - 'sbc.w','sbcal.w', - 'sbc','sbcal', - 'sub.w','subal.w', - 'sub','subal', - 'neg.w','negal.w', - 'neg','negal', - 'adr.w','adral.w', - 'adr','adral', - /* Data Processing: Unconditional Logical */ - 'and.w','andal.w', - 'and','andal', - 'bic.w','bical.w', - 'bic','bical', - 'orr.w','orral.w', - 'orr','orral', - 'orn.w','ornal.w', - 'orn','ornal', - 'eor.w','eoral.w', - 'eor','eoral', - 'mov.w','moval.w', - 'mov','moval', - 'movw','movwal', - 'movt','movtal', - 'cpy','cpyal', - 'mvn.w','mvnal.w', - 'mvn','mvnal', - /* Data Processing: Unconditional Shifts and Rotates */ - 'asr.w','asral.w', - 'asr','asral', - 'lsl.w','lslal.w', - 'lsl','lslal', - 'lsr.w','lsral.w', - 'lsr','lsral', - 'ror.w','roral.w', - 'ror','roral', - 'rrx','rrxal', - /* Data Processing: Unconditional Word Multiply and Multiply-Add */ - 'mul','mulal', - 'mla','mlaal', - 'mls','mlsal', - 'smull','smullal', - 'muls','mulsal', - 'umull','umullal', - 'smlal','smlalal', - 'umlal','umlalal', - /* Data Processing: Unconditional Halfword Multiply and Multiply-Add (ARMv5TE) */ - 'smulbb','smulbbal', - 'smulbt','smulbtal', - 'smultb','smultbal', - 'smultt','smulttal', - 'smulwb','smulwbal', - 'smulwt','smulwtal', - 'smlalbb','smlalbbal', - 'smlalbt','smlalbtal', - 'smlaltb','smlaltbal', - 'smlaltt','smlalttal', - 'smlabb','smlabbal', - 'smlabt','smlabtal', - 'smlatb','smlatbal', - 'smlatt','smlattal', - 'smlawb','smlawbal', - 'smlawt','smlawtal', - /* Data Processing: Unconditional Bit Operations */ - 'ubfx','ubfxal', - 'sbfx','sbfxal', - 'bfc','bfcal', - 'bfi','bfial', - 'clz','clzal', - /* Data Processing: Unconditional Divide (ARMv7-R) */ - 'sdiv','sdival', - 'udiv','udival' - ), - /* Conditional Data Processing Instructions */ - 2 => array( - /* Data Processing: Conditional Addition & Subtraction */ - 'adceq.w','adcne.w','adccs.w','adchs.w','adccc.w','adclo.w','adcmi.w','adcpl.w','adcvs.w','adcvc.w','adchi.w','adcls.w','adcge.w','adclt.w','adcgt.w','adcle.w', - 'adceq','adcne','adccs','adchs','adccc','adclo','adcmi','adcpl','adcvs','adcvc','adchi','adcls','adcge','adclt','adcgt','adcle', - 'addeq.w','addne.w','addcs.w','addhs.w','addcc.w','addlo.w','addmi.w','addpl.w','addvs.w','addvc.w','addhi.w','addls.w','addge.w','addlt.w','addgt.w','addle.w', - 'addeq','addne','addcs','addhs','addcc','addlo','addmi','addpl','addvs','addvc','addhi','addls','addge','addlt','addgt','addle', - 'addweq','addwne','addwcs','addwhs','addwcc','addwlo','addwmi','addwpl','addwvs','addwvc','addwhi','addwls','addwge','addwlt','addwgt','addwle', - 'rsbeq.w','rsbne.w','rsbcs.w','rsbhs.w','rsbcc.w','rsblo.w','rsbmi.w','rsbpl.w','rsbvs.w','rsbvc.w','rsbhi.w','rsbls.w','rsbge.w','rsblt.w','rsbgt.w','rsble.w', - 'rsbeq','rsbne','rsbcs','rsbhs','rsbcc','rsblo','rsbmi','rsbpl','rsbvs','rsbvc','rsbhi','rsbls','rsbge','rsblt','rsbgt','rsble', - 'rsceq','rscne','rsccs','rschs','rsccc','rsclo','rscmi','rscpl','rscvs','rscvc','rschi','rscls','rscge','rsclt','rscgt','rscle', - 'sbceq.w','sbcne.w','sbccs.w','sbchs.w','sbccc.w','sbclo.w','sbcmi.w','sbcpl.w','sbcvs.w','sbcvc.w','sbchi.w','sbcls.w','sbcge.w','sbclt.w','sbcgt.w','sbcle.w', - 'sbceq','sbcne','sbccs','sbchs','sbccc','sbclo','sbcmi','sbcpl','sbcvs','sbcvc','sbchi','sbcls','sbcge','sbclt','sbcgt','sbcle', - 'subeq.w','subne.w','subcs.w','subhs.w','subcc.w','sublo.w','submi.w','subpl.w','subvs.w','subvc.w','subhi.w','subls.w','subge.w','sublt.w','subgt.w','suble.w', - 'subeq','subne','subcs','subhs','subcc','sublo','submi','subpl','subvs','subvc','subhi','subls','subge','sublt','subgt','suble', - 'negeq.w','negne.w','negcs.w','neghs.w','negcc.w','neglo.w','negmi.w','negpl.w','negvs.w','negvc.w','neghi.w','negls.w','negge.w','neglt.w','neggt.w','negle.w', - 'negeq','negne','negcs','neghs','negcc','neglo','negmi','negpl','negvs','negvc','neghi','negls','negge','neglt','neggt','negle', - 'adreq.w','adrne.w','adrcs.w','adrhs.w','adrcc.w','adrlo.w','adrmi.w','adrpl.w','adrvs.w','adrvc.w','adrhi.w','adrls.w','adrge.w','adrlt.w','adrgt.w','adrle.w', - 'adreq','adrne','adrcs','adrhs','adrcc','adrlo','adrmi','adrpl','adrvs','adrvc','adrhi','adrls','adrge','adrlt','adrgt','adrle', - /* Data Processing: Conditional Logical */ - 'andeq.w','andne.w','andcs.w','andhs.w','andcc.w','andlo.w','andmi.w','andpl.w','andvs.w','andvc.w','andhi.w','andls.w','andge.w','andlt.w','andgt.w','andle.w', - 'andeq','andne','andcs','andhs','andcc','andlo','andmi','andpl','andvs','andvc','andhi','andls','andge','andlt','andgt','andle', - 'biceq.w','bicne.w','biccs.w','bichs.w','biccc.w','biclo.w','bicmi.w','bicpl.w','bicvs.w','bicvc.w','bichi.w','bicls.w','bicge.w','biclt.w','bicgt.w','bicle.w', - 'biceq','bicne','biccs','bichs','biccc','biclo','bicmi','bicpl','bicvs','bicvc','bichi','bicls','bicge','biclt','bicgt','bicle', - 'orreq.w','orrne.w','orrcs.w','orrhs.w','orrcc.w','orrlo.w','orrmi.w','orrpl.w','orrvs.w','orrvc.w','orrhi.w','orrls.w','orrge.w','orrlt.w','orrgt.w','orrle.w', - 'orreq','orrne','orrcs','orrhs','orrcc','orrlo','orrmi','orrpl','orrvs','orrvc','orrhi','orrls','orrge','orrlt','orrgt','orrle', - 'orneq.w','ornne.w','orncs.w','ornhs.w','orncc.w','ornlo.w','ornmi.w','ornpl.w','ornvs.w','ornvc.w','ornhi.w','ornls.w','ornge.w','ornlt.w','orngt.w','ornle.w', - 'orneq','ornne','orncs','ornhs','orncc','ornlo','ornmi','ornpl','ornvs','ornvc','ornhi','ornls','ornge','ornlt','orngt','ornle', - 'eoreq.w','eorne.w','eorcs.w','eorhs.w','eorcc.w','eorlo.w','eormi.w','eorpl.w','eorvs.w','eorvc.w','eorhi.w','eorls.w','eorge.w','eorlt.w','eorgt.w','eorle.w', - 'eoreq','eorne','eorcs','eorhs','eorcc','eorlo','eormi','eorpl','eorvs','eorvc','eorhi','eorls','eorge','eorlt','eorgt','eorle', - 'moveq.w','movne.w','movcs.w','movhs.w','movcc.w','movlo.w','movmi.w','movpl.w','movvs.w','movvc.w','movhi.w','movls.w','movge.w','movlt.w','movgt.w','movle.w', - 'moveq','movne','movcs','movhs','movcc','movlo','movmi','movpl','movvs','movvc','movhi','movls','movge','movlt','movgt','movle', - 'movweq','movwne','movwcs','movwhs','movwcc','movwlo','movwmi','movwpl','movwvs','movwvc','movwhi','movwls','movwge','movwlt','movwgt','movwle', - 'movteq','movtne','movtcs','movths','movtcc','movtlo','movtmi','movtpl','movtvs','movtvc','movthi','movtls','movtge','movtlt','movtgt','movtle', - 'cpyeq','cpyne','cpycs','cpyhs','cpycc','cpylo','cpymi','cpypl','cpyvs','cpyvc','cpyhi','cpyls','cpyge','cpylt','cpygt','cpyle', - 'mvneq.w','mvnne.w','mvncs.w','mvnhs.w','mvncc.w','mvnlo.w','mvnmi.w','mvnpl.w','mvnvs.w','mvnvc.w','mvnhi.w','mvnls.w','mvnge.w','mvnlt.w','mvngt.w','mvnle.w', - 'mvneq','mvnne','mvncs','mvnhs','mvncc','mvnlo','mvnmi','mvnpl','mvnvs','mvnvc','mvnhi','mvnls','mvnge','mvnlt','mvngt','mvnle', - /* Data Processing: Conditional Shifts and Rotates */ - 'asreq.w','asrne.w','asrcs.w','asrhs.w','asrcc.w','asrlo.w','asrmi.w','asrpl.w','asrvs.w','asrvc.w','asrhi.w','asrls.w','asrge.w','asrlt.w','asrgt.w','asrle.w', - 'asreq','asrne','asrcs','asrhs','asrcc','asrlo','asrmi','asrpl','asrvs','asrvc','asrhi','asrls','asrge','asrlt','asrgt','asrle', - 'lsleq.w','lslne.w','lslcs.w','lslhs.w','lslcc.w','lsllo.w','lslmi.w','lslpl.w','lslvs.w','lslvc.w','lslhi.w','lslls.w','lslge.w','lsllt.w','lslgt.w','lslle.w', - 'lsleq','lslne','lslcs','lslhs','lslcc','lsllo','lslmi','lslpl','lslvs','lslvc','lslhi','lslls','lslge','lsllt','lslgt','lslle', - 'lsreq.w','lsrne.w','lsrcs.w','lsrhs.w','lsrcc.w','lsrlo.w','lsrmi.w','lsrpl.w','lsrvs.w','lsrvc.w','lsrhi.w','lsrls.w','lsrge.w','lsrlt.w','lsrgt.w','lsrle.w', - 'lsreq','lsrne','lsrcs','lsrhs','lsrcc','lsrlo','lsrmi','lsrpl','lsrvs','lsrvc','lsrhi','lsrls','lsrge','lsrlt','lsrgt','lsrle', - 'roreq.w','rorne.w','rorcs.w','rorhs.w','rorcc.w','rorlo.w','rormi.w','rorpl.w','rorvs.w','rorvc.w','rorhi.w','rorls.w','rorge.w','rorlt.w','rorgt.w','rorle.w', - 'roreq','rorne','rorcs','rorhs','rorcc','rorlo','rormi','rorpl','rorvs','rorvc','rorhi','rorls','rorge','rorlt','rorgt','rorle', - 'rrxeq','rrxne','rrxcs','rrxhs','rrxcc','rrxlo','rrxmi','rrxpl','rrxvs','rrxvc','rrxhi','rrxls','rrxge','rrxlt','rrxgt','rrxle', - /* Data Processing: Conditional Word Multiply and Multiply-Add */ - 'muleq','mulne','mulcs','mulhs','mulcc','mullo','mulmi','mulpl','mulvs','mulvc','mulhi','mulls','mulge','mullt','mulgt','mulle', - 'mlaeq','mlane','mlacs','mlahs','mlacc','mlalo','mlami','mlapl','mlavs','mlavc','mlahi','mlals','mlage','mlalt','mlagt','mlale', - 'mlseq','mlsne','mlscs','mlshs','mlscc','mlslo','mlsmi','mlspl','mlsvs','mlsvc','mlshi','mlsls','mlsge','mlslt','mlsgt','mlsle', - 'smulleq','smullne','smullcs','smullhs','smullcc','smulllo','smullmi','smullpl','smullvs','smullvc','smullhi','smullls','smullge','smulllt','smullgt','smullle', - 'mulseq','mulsne','mulscs','mulshs','mulscc','mulslo','mulsmi','mulspl','mulsvs','mulsvc','mulshi','mulsls','mulsge','mulslt','mulsgt','mulsle', - 'umulleq','umullne','umullcs','umullhs','umullcc','umulllo','umullmi','umullpl','umullvs','umullvc','umullhi','umullls','umullge','umulllt','umullgt','umullle', - 'smlaleq','smlalne','smlalcs','smlalhs','smlalcc','smlallo','smlalmi','smlalpl','smlalvs','smlalvc','smlalhi','smlalls','smlalge','smlallt','smlalgt','smlalle', - 'umlaleq','umlalne','umlalcs','umlalhs','umlalcc','umlallo','umlalmi','umlalpl','umlalvs','umlalvc','umlalhi','umlalls','umlalge','umlallt','umlalgt','umlalle', - /* Data Processing: Conditional Halfword Multiply and Multiply-Add (ARMv5TE) */ - 'smulbbeq','smulbbne','smulbbcs','smulbbhs','smulbbcc','smulbblo','smulbbmi','smulbbpl','smulbbvs','smulbbvc','smulbbhi','smulbbls','smulbbge','smulbblt','smulbbgt','smulbble', - 'smulbteq','smulbtne','smulbtcs','smulbths','smulbtcc','smulbtlo','smulbtmi','smulbtpl','smulbtvs','smulbtvc','smulbthi','smulbtls','smulbtge','smulbtlt','smulbtgt','smulbtle', - 'smultbeq','smultbne','smultbcs','smultbhs','smultbcc','smultblo','smultbmi','smultbpl','smultbvs','smultbvc','smultbhi','smultbls','smultbge','smultblt','smultbgt','smultble', - 'smultteq','smulttne','smulttcs','smultths','smulttcc','smulttlo','smulttmi','smulttpl','smulttvs','smulttvc','smultthi','smulttls','smulttge','smulttlt','smulttgt','smulttle', - 'smulwbeq','smulwbne','smulwbcs','smulwbhs','smulwbcc','smulwblo','smulwbmi','smulwbpl','smulwbvs','smulwbvc','smulwbhi','smulwbls','smulwbge','smulwblt','smulwbgt','smulwble', - 'smulwteq','smulwtne','smulwtcs','smulwths','smulwtcc','smulwtlo','smulwtmi','smulwtpl','smulwtvs','smulwtvc','smulwthi','smulwtls','smulwtge','smulwtlt','smulwtgt','smulwtle', - 'smlalbbeq','smlalbbne','smlalbbcs','smlalbbhs','smlalbbcc','smlalbblo','smlalbbmi','smlalbbpl','smlalbbvs','smlalbbvc','smlalbbhi','smlalbbls','smlalbbge','smlalbblt','smlalbbgt','smlalbble', - 'smlalbteq','smlalbtne','smlalbtcs','smlalbths','smlalbtcc','smlalbtlo','smlalbtmi','smlalbtpl','smlalbtvs','smlalbtvc','smlalbthi','smlalbtls','smlalbtge','smlalbtlt','smlalbtgt','smlalbtle', - 'smlaltbeq','smlaltbne','smlaltbcs','smlaltbhs','smlaltbcc','smlaltblo','smlaltbmi','smlaltbpl','smlaltbvs','smlaltbvc','smlaltbhi','smlaltbls','smlaltbge','smlaltblt','smlaltbgt','smlaltble', - 'smlaltteq','smlalttne','smlalttcs','smlaltths','smlalttcc','smlalttlo','smlalttmi','smlalttpl','smlalttvs','smlalttvc','smlaltthi','smlalttls','smlalttge','smlalttlt','smlalttgt','smlalttle', - 'smlabbeq','smlabbne','smlabbcs','smlabbhs','smlabbcc','smlabblo','smlabbmi','smlabbpl','smlabbvs','smlabbvc','smlabbhi','smlabbls','smlabbge','smlabblt','smlabbgt','smlabble', - 'smlabteq','smlabtne','smlabtcs','smlabths','smlabtcc','smlabtlo','smlabtmi','smlabtpl','smlabtvs','smlabtvc','smlabthi','smlabtls','smlabtge','smlabtlt','smlabtgt','smlabtle', - 'smlatbeq','smlatbne','smlatbcs','smlatbhs','smlatbcc','smlatblo','smlatbmi','smlatbpl','smlatbvs','smlatbvc','smlatbhi','smlatbls','smlatbge','smlatblt','smlatbgt','smlatble', - 'smlatteq','smlattne','smlattcs','smlatths','smlattcc','smlattlo','smlattmi','smlattpl','smlattvs','smlattvc','smlatthi','smlattls','smlattge','smlattlt','smlattgt','smlattle', - 'smlawbeq','smlawbne','smlawbcs','smlawbhs','smlawbcc','smlawblo','smlawbmi','smlawbpl','smlawbvs','smlawbvc','smlawbhi','smlawbls','smlawbge','smlawblt','smlawbgt','smlawble', - 'smlawteq','smlawtne','smlawtcs','smlawths','smlawtcc','smlawtlo','smlawtmi','smlawtpl','smlawtvs','smlawtvc','smlawthi','smlawtls','smlawtge','smlawtlt','smlawtgt','smlawtle', - /* Data Processing: Conditional Bit Operations */ - 'ubfxeq','ubfxne','ubfxcs','ubfxhs','ubfxcc','ubfxlo','ubfxmi','ubfxpl','ubfxvs','ubfxvc','ubfxhi','ubfxls','ubfxge','ubfxlt','ubfxgt','ubfxle', - 'sbfxeq','sbfxne','sbfxcs','sbfxhs','sbfxcc','sbfxlo','sbfxmi','sbfxpl','sbfxvs','sbfxvc','sbfxhi','sbfxls','sbfxge','sbfxlt','sbfxgt','sbfxle', - 'bfceq','bfcne','bfccs','bfchs','bfccc','bfclo','bfcmi','bfcpl','bfcvs','bfcvc','bfchi','bfcls','bfcge','bfclt','bfcgt','bfcle', - 'bfieq','bfine','bfics','bfihs','bficc','bfilo','bfimi','bfipl','bfivs','bfivc','bfihi','bfils','bfige','bfilt','bfigt','bfile', - 'clzeq','clzne','clzcs','clzhs','clzcc','clzlo','clzmi','clzpl','clzvs','clzvc','clzhi','clzls','clzge','clzlt','clzgt','clzle', - /* ARMv7-R: Conditional Divide */ - 'sdiveq','sdivne','sdivcs','sdivhs','sdivcc','sdivlo','sdivmi','sdivpl','sdivvs','sdivvc','sdivhi','sdivls','sdivge','sdivlt','sdivgt','sdivle', - 'udiveq','udivne','udivcs','udivhs','udivcc','udivlo','udivmi','udivpl','udivvs','udivvc','udivhi','udivls','udivge','udivlt','udivgt','udivle' - ), - /* Unconditional Memory Access */ - 3 => array( - /* Memory Access: Unconditional Memory Loads and Prefetches */ - 'ldm.w','ldmal.w', - 'ldm','ldmal', - 'ldmda','ldmdaal', - 'ldmdb','ldmdbal', - 'ldmib','ldmibal', - 'ldmia','ldmiaal', - 'ldmea','ldmeaal', - 'ldmed','ldmedal', - 'ldmfa','ldmfaal', - 'ldmfd','ldmfdal', - 'ldrd','ldrdal', - 'ldr.w','ldral.w', - 'ldr','ldral', - 'ldrh.w','ldrhal.w', - 'ldrh','ldrhal', - 'ldrb.w','ldrbal.w', - 'ldrb','ldrbal', - 'ldrsh.w','ldrshal.w', - 'ldrsh','ldrshal', - 'ldrsb.w','ldrsbal.w', - 'ldrsb','ldrsbal', - 'ldrt','ldrtal', - 'ldrht','ldrhtal', - 'ldrbt','ldrbtal', - 'ldrsht','ldrshtal', - 'ldrsbt','ldrsbtal', - 'pop.w','popal.w', - 'pop','popal', - 'pld','pldal', - 'pldw','pldwal', - 'pli','plial', - /* Memory Access: Unconditional Memory Stores */ - 'stm.w','stmal.w', - 'stm','stmal', - 'stmda','stmdaal', - 'stmdb','stmdbal', - 'stmib','stmibal', - 'stmia','stmiaal', - 'stmea','stmeaal', - 'stmed','stmedal', - 'stdfa','stdfaal', - 'stdfd','stdfdal', - 'strd','strdal', - 'str.w','stral.w', - 'str','stral', - 'strh.w','strhal.w', - 'strh','strhal', - 'strb.w','strbal.w', - 'strb','strbal', - 'strt','strtal', - 'strht','strhtal', - 'strbt','strbtal', - 'push.w','pushal.w', - 'push','pushal' - ), - /* Conditional Memory Access */ - 4 => array( - /* Memory Access: Conditional Memory Loads and Prefetches */ - 'ldmeq.w','ldmne.w','ldmcs.w','ldmhs.w','ldmcc.w','ldmlo.w','ldmmi.w','ldmpl.w','ldmvs.w','ldmvc.w','ldmhi.w','ldmls.w','ldmge.w','ldmlt.w','ldmgt.w','ldmle.w', - 'ldmeq','ldmne','ldmcs','ldmhs','ldmcc','ldmlo','ldmmi','ldmpl','ldmvs','ldmvc','ldmhi','ldmls','ldmge','ldmlt','ldmgt','ldmle', - 'ldmdaeq','ldmdane','ldmdacs','ldmdahs','ldmdacc','ldmdalo','ldmdami','ldmdapl','ldmdavs','ldmdavc','ldmdahi','ldmdals','ldmdage','ldmdalt','ldmdagt','ldmdale', - 'ldmdbeq','ldmdbne','ldmdbcs','ldmdbhs','ldmdbcc','ldmdblo','ldmdbmi','ldmdbpl','ldmdbvs','ldmdbvc','ldmdbhi','ldmdbls','ldmdbge','ldmdblt','ldmdbgt','ldmdble', - 'ldmibeq','ldmibne','ldmibcs','ldmibhs','ldmibcc','ldmiblo','ldmibmi','ldmibpl','ldmibvs','ldmibvc','ldmibhi','ldmibls','ldmibge','ldmiblt','ldmibgt','ldmible', - 'ldmiaeq','ldmiane','ldmiacs','ldmiahs','ldmiacc','ldmialo','ldmiami','ldmiapl','ldmiavs','ldmiavc','ldmiahi','ldmials','ldmiage','ldmialt','ldmiagt','ldmiale', - 'ldmeaeq','ldmeane','ldmeacs','ldmeahs','ldmeacc','ldmealo','ldmeami','ldmeapl','ldmeavs','ldmeavc','ldmeahi','ldmeals','ldmeage','ldmealt','ldmeagt','ldmeale', - 'ldmedeq','ldmedne','ldmedcs','ldmedhs','ldmedcc','ldmedlo','ldmedmi','ldmedpl','ldmedvs','ldmedvc','ldmedhi','ldmedls','ldmedge','ldmedlt','ldmedgt','ldmedle', - 'ldmfaeq','ldmfane','ldmfacs','ldmfahs','ldmfacc','ldmfalo','ldmfami','ldmfapl','ldmfavs','ldmfavc','ldmfahi','ldmfals','ldmfage','ldmfalt','ldmfagt','ldmfale', - 'ldmfdeq','ldmfdne','ldmfdcs','ldmfdhs','ldmfdcc','ldmfdlo','ldmfdmi','ldmfdpl','ldmfdvs','ldmfdvc','ldmfdhi','ldmfdls','ldmfdge','ldmfdlt','ldmfdgt','ldmfdle', - 'ldrdeq','ldrdne','ldrdcs','ldrdhs','ldrdcc','ldrdlo','ldrdmi','ldrdpl','ldrdvs','ldrdvc','ldrdhi','ldrdls','ldrdge','ldrdlt','ldrdgt','ldrdle', - 'ldreq.w','ldrne.w','ldrcs.w','ldrhs.w','ldrcc.w','ldrlo.w','ldrmi.w','ldrpl.w','ldrvs.w','ldrvc.w','ldrhi.w','ldrls.w','ldrge.w','ldrlt.w','ldrgt.w','ldrle.w', - 'ldreq','ldrne','ldrcs','ldrhs','ldrcc','ldrlo','ldrmi','ldrpl','ldrvs','ldrvc','ldrhi','ldrls','ldrge','ldrlt','ldrgt','ldrle', - 'ldrheq.w','ldrhne.w','ldrhcs.w','ldrhhs.w','ldrhcc.w','ldrhlo.w','ldrhmi.w','ldrhpl.w','ldrhvs.w','ldrhvc.w','ldrhhi.w','ldrhls.w','ldrhge.w','ldrhlt.w','ldrhgt.w','ldrhle.w', - 'ldrheq','ldrhne','ldrhcs','ldrhhs','ldrhcc','ldrhlo','ldrhmi','ldrhpl','ldrhvs','ldrhvc','ldrhhi','ldrhls','ldrhge','ldrhlt','ldrhgt','ldrhle', - 'ldrbeq.w','ldrbne.w','ldrbcs.w','ldrbhs.w','ldrbcc.w','ldrblo.w','ldrbmi.w','ldrbpl.w','ldrbvs.w','ldrbvc.w','ldrbhi.w','ldrbls.w','ldrbge.w','ldrblt.w','ldrbgt.w','ldrble.w', - 'ldrbeq','ldrbne','ldrbcs','ldrbhs','ldrbcc','ldrblo','ldrbmi','ldrbpl','ldrbvs','ldrbvc','ldrbhi','ldrbls','ldrbge','ldrblt','ldrbgt','ldrble', - 'ldrsheq.w','ldrshne.w','ldrshcs.w','ldrshhs.w','ldrshcc.w','ldrshlo.w','ldrshmi.w','ldrshpl.w','ldrshvs.w','ldrshvc.w','ldrshhi.w','ldrshls.w','ldrshge.w','ldrshlt.w','ldrshgt.w','ldrshle.w', - 'ldrsheq','ldrshne','ldrshcs','ldrshhs','ldrshcc','ldrshlo','ldrshmi','ldrshpl','ldrshvs','ldrshvc','ldrshhi','ldrshls','ldrshge','ldrshlt','ldrshgt','ldrshle', - 'ldrsbeq.w','ldrsbne.w','ldrsbcs.w','ldrsbhs.w','ldrsbcc.w','ldrsblo.w','ldrsbmi.w','ldrsbpl.w','ldrsbvs.w','ldrsbvc.w','ldrsbhi.w','ldrsbls.w','ldrsbge.w','ldrsblt.w','ldrsbgt.w','ldrsble.w', - 'ldrsbeq','ldrsbne','ldrsbcs','ldrsbhs','ldrsbcc','ldrsblo','ldrsbmi','ldrsbpl','ldrsbvs','ldrsbvc','ldrsbhi','ldrsbls','ldrsbge','ldrsblt','ldrsbgt','ldrsble', - 'ldrteq','ldrtne','ldrtcs','ldrths','ldrtcc','ldrtlo','ldrtmi','ldrtpl','ldrtvs','ldrtvc','ldrthi','ldrtls','ldrtge','ldrtlt','ldrtgt','ldrtle', - 'ldrhteq','ldrhtne','ldrhtcs','ldrhths','ldrhtcc','ldrhtlo','ldrhtmi','ldrhtpl','ldrhtvs','ldrhtvc','ldrhthi','ldrhtls','ldrhtge','ldrhtlt','ldrhtgt','ldrhtle', - 'ldrbteq','ldrbtne','ldrbtcs','ldrbths','ldrbtcc','ldrbtlo','ldrbtmi','ldrbtpl','ldrbtvs','ldrbtvc','ldrbthi','ldrbtls','ldrbtge','ldrbtlt','ldrbtgt','ldrbtle', - 'ldrshteq','ldrshtne','ldrshtcs','ldrshths','ldrshtcc','ldrshtlo','ldrshtmi','ldrshtpl','ldrshtvs','ldrshtvc','ldrshthi','ldrshtls','ldrshtge','ldrshtlt','ldrshtgt','ldrshtle', - 'ldrsbteq','ldrsbtne','ldrsbtcs','ldrsbths','ldrsbtcc','ldrsbtlo','ldrsbtmi','ldrsbtpl','ldrsbtvs','ldrsbtvc','ldrsbthi','ldrsbtls','ldrsbtge','ldrsbtlt','ldrsbtgt','ldrsbtle', - 'popeq.w','popne.w','popcs.w','pophs.w','popcc.w','poplo.w','popmi.w','poppl.w','popvs.w','popvc.w','pophi.w','popls.w','popge.w','poplt.w','popgt.w','pople.w', - 'popeq','popne','popcs','pophs','popcc','poplo','popmi','poppl','popvs','popvc','pophi','popls','popge','poplt','popgt','pople', - 'pldeq','pldne','pldcs','pldhs','pldcc','pldlo','pldmi','pldpl','pldvs','pldvc','pldhi','pldls','pldge','pldlt','pldgt','pldle', - 'pldweq','pldwne','pldwcs','pldwhs','pldwcc','pldwlo','pldwmi','pldwpl','pldwvs','pldwvc','pldwhi','pldwls','pldwge','pldwlt','pldwgt','pldwle', - 'plieq','pline','plics','plihs','plicc','plilo','plimi','plipl','plivs','plivc','plihi','plils','plige','plilt','pligt','plile', - /* Memory Access: Conditional Memory Stores */ - 'stmeq.w','stmne.w','stmcs.w','stmhs.w','stmcc.w','stmlo.w','stmmi.w','stmpl.w','stmvs.w','stmvc.w','stmhi.w','stmls.w','stmge.w','stmlt.w','stmgt.w','stmle.w', - 'stmeq','stmne','stmcs','stmhs','stmcc','stmlo','stmmi','stmpl','stmvs','stmvc','stmhi','stmls','stmge','stmlt','stmgt','stmle', - 'stmdaeq','stmdane','stmdacs','stmdahs','stmdacc','stmdalo','stmdami','stmdapl','stmdavs','stmdavc','stmdahi','stmdals','stmdage','stmdalt','stmdagt','stmdale', - 'stmdbeq','stmdbne','stmdbcs','stmdbhs','stmdbcc','stmdblo','stmdbmi','stmdbpl','stmdbvs','stmdbvc','stmdbhi','stmdbls','stmdbge','stmdblt','stmdbgt','stmdble', - 'stmibeq','stmibne','stmibcs','stmibhs','stmibcc','stmiblo','stmibmi','stmibpl','stmibvs','stmibvc','stmibhi','stmibls','stmibge','stmiblt','stmibgt','stmible', - 'stmiaeq','stmiane','stmiacs','stmiahs','stmiacc','stmialo','stmiami','stmiapl','stmiavs','stmiavc','stmiahi','stmials','stmiage','stmialt','stmiagt','stmiale', - 'stmeaeq','stmeane','stmeacs','stmeahs','stmeacc','stmealo','stmeami','stmeapl','stmeavs','stmeavc','stmeahi','stmeals','stmeage','stmealt','stmeagt','stmeale', - 'stmedeq','stmedne','stmedcs','stmedhs','stmedcc','stmedlo','stmedmi','stmedpl','stmedvs','stmedvc','stmedhi','stmedls','stmedge','stmedlt','stmedgt','stmedle', - 'stdfaeq','stdfane','stdfacs','stdfahs','stdfacc','stdfalo','stdfami','stdfapl','stdfavs','stdfavc','stdfahi','stdfals','stdfage','stdfalt','stdfagt','stdfale', - 'stdfdeq','stdfdne','stdfdcs','stdfdhs','stdfdcc','stdfdlo','stdfdmi','stdfdpl','stdfdvs','stdfdvc','stdfdhi','stdfdls','stdfdge','stdfdlt','stdfdgt','stdfdle', - 'strdeq','strdne','strdcs','strdhs','strdcc','strdlo','strdmi','strdpl','strdvs','strdvc','strdhi','strdls','strdge','strdlt','strdgt','strdle', - 'streq.w','strne.w','strcs.w','strhs.w','strcc.w','strlo.w','strmi.w','strpl.w','strvs.w','strvc.w','strhi.w','strls.w','strge.w','strlt.w','strgt.w','strle.w', - 'streq','strne','strcs','strhs','strcc','strlo','strmi','strpl','strvs','strvc','strhi','strls','strge','strlt','strgt','strle', - 'strheq.w','strhne.w','strhcs.w','strhhs.w','strhcc.w','strhlo.w','strhmi.w','strhpl.w','strhvs.w','strhvc.w','strhhi.w','strhls.w','strhge.w','strhlt.w','strhgt.w','strhle.w', - 'strheq','strhne','strhcs','strhhs','strhcc','strhlo','strhmi','strhpl','strhvs','strhvc','strhhi','strhls','strhge','strhlt','strhgt','strhle', - 'strbeq.w','strbne.w','strbcs.w','strbhs.w','strbcc.w','strblo.w','strbmi.w','strbpl.w','strbvs.w','strbvc.w','strbhi.w','strbls.w','strbge.w','strblt.w','strbgt.w','strble.w', - 'strbeq','strbne','strbcs','strbhs','strbcc','strblo','strbmi','strbpl','strbvs','strbvc','strbhi','strbls','strbge','strblt','strbgt','strble', - 'strteq','strtne','strtcs','strths','strtcc','strtlo','strtmi','strtpl','strtvs','strtvc','strthi','strtls','strtge','strtlt','strtgt','strtle', - 'strhteq','strhtne','strhtcs','strhths','strhtcc','strhtlo','strhtmi','strhtpl','strhtvs','strhtvc','strhthi','strhtls','strhtge','strhtlt','strhtgt','strhtle', - 'strbteq','strbtne','strbtcs','strbths','strbtcc','strbtlo','strbtmi','strbtpl','strbtvs','strbtvc','strbthi','strbtls','strbtge','strbtlt','strbtgt','strbtle', - 'pusheq.w','pushne.w','pushcs.w','pushhs.w','pushcc.w','pushlo.w','pushmi.w','pushpl.w','pushvs.w','pushvc.w','pushhi.w','pushls.w','pushge.w','pushlt.w','pushgt.w','pushle.w', - 'pusheq','pushne','pushcs','pushhs','pushcc','pushlo','pushmi','pushpl','pushvs','pushvc','pushhi','pushls','pushge','pushlt','pushgt','pushle' - ), - /* Unconditional Flags-Affecting Instructions */ - 5 => array( - /* Set Flags: Unconditional Addition and Subtraction */ - 'adds.w','addsal.w', - 'adds','addsal', - 'subs.w','subsal.w', - 'subs','subsal', - 'rsbs.w','rsbsal.w', - 'rsbs','rsbsal', - 'negs.w','negsal.w', - 'negs','negsal', - 'adcs.w','adcsal.w', - 'adcs','adcsal', - 'sbcs.w','sbcsal.w', - 'sbcs','sbcsal', - 'rscs','rscsal', - 'cmp.w','cmpal.w', - 'cmp','cmpal', - 'cmn.w','cmnal.w', - 'cmn','cmnal', - /* Set Flags: Unconditional Logical */ - 'ands.w','andsal.w', - 'ands','andsal', - 'bics.w','bicsal.w', - 'bics','bicsal', - 'orrs.w','orrsal.w', - 'orrs','orrsal', - 'orns.w','ornsal.w', - 'orns','ornsal', - 'eors.w','eorsal.w', - 'eors','eorsal', - 'mvns.w','mvnsal.w', - 'mvns','mvnsal', - 'movs.w','movsal.w', - 'movs','movsal', - 'teq','teqal', - 'tst.w','tstal.w', - 'tst','tstal', - 'mrs','mrsal', - 'msr','msral', - /* Set Flags: Unconditional Shifts and Rotates */ - 'asrs.w','asrsal.w', - 'asrs','asrsal', - 'lsls.w','lslsal.w', - 'lsls','lslsal', - 'lsrs.w','lsrsal.w', - 'lsrs','lsrsal', - 'rors.w','rorsal.w', - 'rors','rorsal', - 'rrxs','rrxsal', - /* Set Flags: Unconditional Multiply and Multiply-Add */ - 'mlas','mlasal', - 'smulls','smullsal', - 'umulls','umullsal', - 'smlals','smlalsal', - 'umlals','umlalsal' - ), - /* Conditional Flags-Affecting Instructions */ - 6 => array( - /* Set Flags: Conditional Addition and Subtraction */ - 'addseq.w','addsne.w','addscs.w','addshs.w','addscc.w','addslo.w','addsmi.w','addspl.w','addsvs.w','addsvc.w','addshi.w','addsls.w','addsge.w','addslt.w','addsgt.w','addsle.w', - 'addseq','addsne','addscs','addshs','addscc','addslo','addsmi','addspl','addsvs','addsvc','addshi','addsls','addsge','addslt','addsgt','addsle', - 'subseq.w','subsne.w','subscs.w','subshs.w','subscc.w','subslo.w','subsmi.w','subspl.w','subsvs.w','subsvc.w','subshi.w','subsls.w','subsge.w','subslt.w','subsgt.w','subsle.w', - 'subseq','subsne','subscs','subshs','subscc','subslo','subsmi','subspl','subsvs','subsvc','subshi','subsls','subsge','subslt','subsgt','subsle', - 'rsbseq.w','rsbsne.w','rsbscs.w','rsbshs.w','rsbscc.w','rsbslo.w','rsbsmi.w','rsbspl.w','rsbsvs.w','rsbsvc.w','rsbshi.w','rsbsls.w','rsbsge.w','rsbslt.w','rsbsgt.w','rsbsle.w', - 'rsbseq','rsbsne','rsbscs','rsbshs','rsbscc','rsbslo','rsbsmi','rsbspl','rsbsvs','rsbsvc','rsbshi','rsbsls','rsbsge','rsbslt','rsbsgt','rsbsle', - 'negseq.w','negsne.w','negscs.w','negshs.w','negscc.w','negslo.w','negsmi.w','negspl.w','negsvs.w','negsvc.w','negshi.w','negsls.w','negsge.w','negslt.w','negsgt.w','negsle.w', - 'negseq','negsne','negscs','negshs','negscc','negslo','negsmi','negspl','negsvs','negsvc','negshi','negsls','negsge','negslt','negsgt','negsle', - 'adcseq.w','adcsne.w','adcscs.w','adcshs.w','adcscc.w','adcslo.w','adcsmi.w','adcspl.w','adcsvs.w','adcsvc.w','adcshi.w','adcsls.w','adcsge.w','adcslt.w','adcsgt.w','adcsle.w', - 'adcseq','adcsne','adcscs','adcshs','adcscc','adcslo','adcsmi','adcspl','adcsvs','adcsvc','adcshi','adcsls','adcsge','adcslt','adcsgt','adcsle', - 'sbcseq.w','sbcsne.w','sbcscs.w','sbcshs.w','sbcscc.w','sbcslo.w','sbcsmi.w','sbcspl.w','sbcsvs.w','sbcsvc.w','sbcshi.w','sbcsls.w','sbcsge.w','sbcslt.w','sbcsgt.w','sbcsle.w', - 'sbcseq','sbcsne','sbcscs','sbcshs','sbcscc','sbcslo','sbcsmi','sbcspl','sbcsvs','sbcsvc','sbcshi','sbcsls','sbcsge','sbcslt','sbcsgt','sbcsle', - 'rscseq','rscsne','rscscs','rscshs','rscscc','rscslo','rscsmi','rscspl','rscsvs','rscsvc','rscshi','rscsls','rscsge','rscslt','rscsgt','rscsle', - 'cmpeq.w','cmpne.w','cmpcs.w','cmphs.w','cmpcc.w','cmplo.w','cmpmi.w','cmppl.w','cmpvs.w','cmpvc.w','cmphi.w','cmpls.w','cmpge.w','cmplt.w','cmpgt.w','cmple.w', - 'cmpeq','cmpne','cmpcs','cmphs','cmpcc','cmplo','cmpmi','cmppl','cmpvs','cmpvc','cmphi','cmpls','cmpge','cmplt','cmpgt','cmple', - 'cmneq.w','cmnne.w','cmncs.w','cmnhs.w','cmncc.w','cmnlo.w','cmnmi.w','cmnpl.w','cmnvs.w','cmnvc.w','cmnhi.w','cmnls.w','cmnge.w','cmnlt.w','cmngt.w','cmnle.w', - 'cmneq','cmnne','cmncs','cmnhs','cmncc','cmnlo','cmnmi','cmnpl','cmnvs','cmnvc','cmnhi','cmnls','cmnge','cmnlt','cmngt','cmnle', - /* Set Flags: Conditional Logical */ - 'andseq.w','andsne.w','andscs.w','andshs.w','andscc.w','andslo.w','andsmi.w','andspl.w','andsvs.w','andsvc.w','andshi.w','andsls.w','andsge.w','andslt.w','andsgt.w','andsle.w', - 'andseq','andsne','andscs','andshs','andscc','andslo','andsmi','andspl','andsvs','andsvc','andshi','andsls','andsge','andslt','andsgt','andsle', - 'bicseq.w','bicsne.w','bicscs.w','bicshs.w','bicscc.w','bicslo.w','bicsmi.w','bicspl.w','bicsvs.w','bicsvc.w','bicshi.w','bicsls.w','bicsge.w','bicslt.w','bicsgt.w','bicsle.w', - 'bicseq','bicsne','bicscs','bicshs','bicscc','bicslo','bicsmi','bicspl','bicsvs','bicsvc','bicshi','bicsls','bicsge','bicslt','bicsgt','bicsle', - 'orrseq.w','orrsne.w','orrscs.w','orrshs.w','orrscc.w','orrslo.w','orrsmi.w','orrspl.w','orrsvs.w','orrsvc.w','orrshi.w','orrsls.w','orrsge.w','orrslt.w','orrsgt.w','orrsle.w', - 'orrseq','orrsne','orrscs','orrshs','orrscc','orrslo','orrsmi','orrspl','orrsvs','orrsvc','orrshi','orrsls','orrsge','orrslt','orrsgt','orrsle', - 'ornseq.w','ornsne.w','ornscs.w','ornshs.w','ornscc.w','ornslo.w','ornsmi.w','ornspl.w','ornsvs.w','ornsvc.w','ornshi.w','ornsls.w','ornsge.w','ornslt.w','ornsgt.w','ornsle.w', - 'ornseq','ornsne','ornscs','ornshs','ornscc','ornslo','ornsmi','ornspl','ornsvs','ornsvc','ornshi','ornsls','ornsge','ornslt','ornsgt','ornsle', - 'eorseq.w','eorsne.w','eorscs.w','eorshs.w','eorscc.w','eorslo.w','eorsmi.w','eorspl.w','eorsvs.w','eorsvc.w','eorshi.w','eorsls.w','eorsge.w','eorslt.w','eorsgt.w','eorsle.w', - 'eorseq','eorsne','eorscs','eorshs','eorscc','eorslo','eorsmi','eorspl','eorsvs','eorsvc','eorshi','eorsls','eorsge','eorslt','eorsgt','eorsle', - 'mvnseq.w','mvnsne.w','mvnscs.w','mvnshs.w','mvnscc.w','mvnslo.w','mvnsmi.w','mvnspl.w','mvnsvs.w','mvnsvc.w','mvnshi.w','mvnsls.w','mvnsge.w','mvnslt.w','mvnsgt.w','mvnsle.w', - 'mvnseq','mvnsne','mvnscs','mvnshs','mvnscc','mvnslo','mvnsmi','mvnspl','mvnsvs','mvnsvc','mvnshi','mvnsls','mvnsge','mvnslt','mvnsgt','mvnsle', - 'movseq.w','movsne.w','movscs.w','movshs.w','movscc.w','movslo.w','movsmi.w','movspl.w','movsvs.w','movsvc.w','movshi.w','movsls.w','movsge.w','movslt.w','movsgt.w','movsle.w', - 'movseq','movsne','movscs','movshs','movscc','movslo','movsmi','movspl','movsvs','movsvc','movshi','movsls','movsge','movslt','movsgt','movsle', - 'teqeq','teqne','teqcs','teqhs','teqcc','teqlo','teqmi','teqpl','teqvs','teqvc','teqhi','teqls','teqge','teqlt','teqgt','teqle', - 'tsteq.w','tstne.w','tstcs.w','tsths.w','tstcc.w','tstlo.w','tstmi.w','tstpl.w','tstvs.w','tstvc.w','tsthi.w','tstls.w','tstge.w','tstlt.w','tstgt.w','tstle.w', - 'tsteq','tstne','tstcs','tsths','tstcc','tstlo','tstmi','tstpl','tstvs','tstvc','tsthi','tstls','tstge','tstlt','tstgt','tstle', - 'mrseq','mrsne','mrscs','mrshs','mrscc','mrslo','mrsmi','mrspl','mrsvs','mrsvc','mrshi','mrsls','mrsge','mrslt','mrsgt','mrsle', - 'msreq','msrne','msrcs','msrhs','msrcc','msrlo','msrmi','msrpl','msrvs','msrvc','msrhi','msrls','msrge','msrlt','msrgt','msrle', - /* Set Flags: Conditional Shifts and Rotates */ - 'asrseq.w','asrsne.w','asrscs.w','asrshs.w','asrscc.w','asrslo.w','asrsmi.w','asrspl.w','asrsvs.w','asrsvc.w','asrshi.w','asrsls.w','asrsge.w','asrslt.w','asrsgt.w','asrsle.w', - 'asrseq','asrsne','asrscs','asrshs','asrscc','asrslo','asrsmi','asrspl','asrsvs','asrsvc','asrshi','asrsls','asrsge','asrslt','asrsgt','asrsle', - 'lslseq.w','lslsne.w','lslscs.w','lslshs.w','lslscc.w','lslslo.w','lslsmi.w','lslspl.w','lslsvs.w','lslsvc.w','lslshi.w','lslsls.w','lslsge.w','lslslt.w','lslsgt.w','lslsle.w', - 'lslseq','lslsne','lslscs','lslshs','lslscc','lslslo','lslsmi','lslspl','lslsvs','lslsvc','lslshi','lslsls','lslsge','lslslt','lslsgt','lslsle', - 'lsrseq.w','lsrsne.w','lsrscs.w','lsrshs.w','lsrscc.w','lsrslo.w','lsrsmi.w','lsrspl.w','lsrsvs.w','lsrsvc.w','lsrshi.w','lsrsls.w','lsrsge.w','lsrslt.w','lsrsgt.w','lsrsle.w', - 'lsrseq','lsrsne','lsrscs','lsrshs','lsrscc','lsrslo','lsrsmi','lsrspl','lsrsvs','lsrsvc','lsrshi','lsrsls','lsrsge','lsrslt','lsrsgt','lsrsle', - 'rorseq.w','rorsne.w','rorscs.w','rorshs.w','rorscc.w','rorslo.w','rorsmi.w','rorspl.w','rorsvs.w','rorsvc.w','rorshi.w','rorsls.w','rorsge.w','rorslt.w','rorsgt.w','rorsle.w', - 'rorseq','rorsne','rorscs','rorshs','rorscc','rorslo','rorsmi','rorspl','rorsvs','rorsvc','rorshi','rorsls','rorsge','rorslt','rorsgt','rorsle', - 'rrxseq','rrxsne','rrxscs','rrxshs','rrxscc','rrxslo','rrxsmi','rrxspl','rrxsvs','rrxsvc','rrxshi','rrxsls','rrxsge','rrxslt','rrxsgt','rrxsle', - /* Set Flags: Conditional Multiply and Multiply-Add */ - 'mlaseq','mlasne','mlascs','mlashs','mlascc','mlaslo','mlasmi','mlaspl','mlasvs','mlasvc','mlashi','mlasls','mlasge','mlaslt','mlasgt','mlasle', - 'smullseq','smullsne','smullscs','smullshs','smullscc','smullslo','smullsmi','smullspl','smullsvs','smullsvc','smullshi','smullsls','smullsge','smullslt','smullsgt','smullsle', - 'umullseq','umullsne','umullscs','umullshs','umullscc','umullslo','umullsmi','umullspl','umullsvs','umullsvc','umullshi','umullsls','umullsge','umullslt','umullsgt','umullsle', - 'smlalseq','smlalsne','smlalscs','smlalshs','smlalscc','smlalslo','smlalsmi','smlalspl','smlalsvs','smlalsvc','smlalshi','smlalsls','smlalsge','smlalslt','smlalsgt','smlalsle', - 'umlalseq','umlalsne','umlalscs','umlalshs','umlalscc','umlalslo','umlalsmi','umlalspl','umlalsvs','umlalsvc','umlalshi','umlalsls','umlalsge','umlalslt','umlalsgt','umlalsle' - ), - /* Unconditional Flow Control Instructions */ - 7 => array( - /* Flow Control: Unconditional Branch and If-Then-Else */ - 'b.w','bal.w', - 'b','bal', - 'bl','blal', - 'bx','bxal', - 'blx','blxal', - 'bxj','bxjal', - 'cbnz', - 'cbz', - 'tbb','tbbal', - 'tbh','tbhal', - 'it', - 'itt', - 'ite', - 'ittt', - 'itet', - 'itte', - 'itee', - 'itttt', - 'itett', - 'ittet', - 'iteet', - 'ittte', - 'itete', - 'ittee', - 'iteee' - ), - /* Conditional Flow Control Instructions */ - 8 => array( - /* Flow Control: Conditional Branch and If-Then-Else */ - 'beq.w','bne.w','bcs.w','bhs.w','bcc.w','blo.w','bmi.w','bpl.w','bvs.w','bvc.w','bhi.w','bls.w','bge.w','blt.w','bgt.w','ble.w', - 'beq','bne','bcs','bhs','bcc','blo','bmi','bpl','bvs','bvc','bhi','bls','bge','blt','bgt','ble', - 'bleq','blne','blcs','blhs','blcc','bllo','blmi','blpl','blvs','blvc','blhi','blls','blge','bllt','blgt','blle', - 'bxeq','bxne','bxcs','bxhs','bxcc','bxlo','bxmi','bxpl','bxvs','bxvc','bxhi','bxls','bxge','bxlt','bxgt','bxle', - 'blxeq','blxne','blxcs','blxhs','blxcc','blxlo','blxmi','blxpl','blxvs','blxvc','blxhi','blxls','blxge','blxlt','blxgt','blxle', - 'bxjeq','bxjne','bxjcs','bxjhs','bxjcc','bxjlo','bxjmi','bxjpl','bxjvs','bxjvc','bxjhi','bxjls','bxjge','bxjlt','bxjgt','bxjle', - 'tbbeq','tbbne','tbbcs','tbbhs','tbbcc','tbblo','tbbmi','tbbpl','tbbvs','tbbvc','tbbhi','tbbls','tbbge','tbblt','tbbgt','tbble', - 'tbheq','tbhne','tbhcs','tbhhs','tbhcc','tbhlo','tbhmi','tbhpl','tbhvs','tbhvc','tbhhi','tbhls','tbhge','tbhlt','tbhgt','tbhle' - ), - /* Unconditional Syncronization Instructions */ - 9 => array( - /* Synchronization: Unconditional Loads, Stores and Barriers */ - 'ldrexd','ldrexdal', - 'ldrex','ldrexal', - 'ldrexh','ldrexhal', - 'ldrexb','ldrexbal', - 'strexd','strexdal', - 'strex','strexal', - 'strexh','strexhal', - 'strexb','strexbal', - 'clrex','clrexal', - 'swp','swpal', - 'swpb','swpbal', - 'dbc','dbcal', - 'dsb','dsbal', - 'isb','isbal', - 'yield.w','yieldal.w', - 'yield','yieldal', - 'nop.w','nopal.w', - 'nop','nopal' - ), - /* Conditional Syncronization Instructions */ - 10 => array( - /* Synchronization: Conditional Loads, Stores and Barriers */ - 'ldrexdeq','ldrexdne','ldrexdcs','ldrexdhs','ldrexdcc','ldrexdlo','ldrexdmi','ldrexdpl','ldrexdvs','ldrexdvc','ldrexdhi','ldrexdls','ldrexdge','ldrexdlt','ldrexdgt','ldrexdle', - 'ldrexeq','ldrexne','ldrexcs','ldrexhs','ldrexcc','ldrexlo','ldrexmi','ldrexpl','ldrexvs','ldrexvc','ldrexhi','ldrexls','ldrexge','ldrexlt','ldrexgt','ldrexle', - 'ldrexheq','ldrexhne','ldrexhcs','ldrexhhs','ldrexhcc','ldrexhlo','ldrexhmi','ldrexhpl','ldrexhvs','ldrexhvc','ldrexhhi','ldrexhls','ldrexhge','ldrexhlt','ldrexhgt','ldrexhle', - 'ldrexbeq','ldrexbne','ldrexbcs','ldrexbhs','ldrexbcc','ldrexblo','ldrexbmi','ldrexbpl','ldrexbvs','ldrexbvc','ldrexbhi','ldrexbls','ldrexbge','ldrexblt','ldrexbgt','ldrexble', - 'strexdeq','strexdne','strexdcs','strexdhs','strexdcc','strexdlo','strexdmi','strexdpl','strexdvs','strexdvc','strexdhi','strexdls','strexdge','strexdlt','strexdgt','strexdle', - 'strexeq','strexne','strexcs','strexhs','strexcc','strexlo','strexmi','strexpl','strexvs','strexvc','strexhi','strexls','strexge','strexlt','strexgt','strexle', - 'strexheq','strexhne','strexhcs','strexhhs','strexhcc','strexhlo','strexhmi','strexhpl','strexhvs','strexhvc','strexhhi','strexhls','strexhge','strexhlt','strexhgt','strexhle', - 'strexbeq','strexbne','strexbcs','strexbhs','strexbcc','strexblo','strexbmi','strexbpl','strexbvs','strexbvc','strexbhi','strexbls','strexbge','strexblt','strexbgt','strexble', - 'clrexeq','clrexne','clrexcs','clrexhs','clrexcc','clrexlo','clrexmi','clrexpl','clrexvs','clrexvc','clrexhi','clrexls','clrexge','clrexlt','clrexgt','clrexle', - 'swpeq','swpne','swpcs','swphs','swpcc','swplo','swpmi','swppl','swpvs','swpvc','swphi','swpls','swpge','swplt','swpgt','swple', - 'swpbeq','swpbne','swpbcs','swpbhs','swpbcc','swpblo','swpbmi','swpbpl','swpbvs','swpbvc','swpbhi','swpbls','swpbge','swpblt','swpbgt','swpble', - 'dbceq','dbcne','dbccs','dbchs','dbccc','dbclo','dbcmi','dbcpl','dbcvs','dbcvc','dbchi','dbcls','dbcge','dbclt','dbcgt','dbcle', - 'dsbeq','dsbne','dsbcs','dsbhs','dsbcc','dsblo','dsbmi','dsbpl','dsbvs','dsbvc','dsbhi','dsbls','dsbge','dsblt','dsbgt','dsble', - 'isbeq','isbne','isbcs','isbhs','isbcc','isblo','isbmi','isbpl','isbvs','isbvc','isbhi','isbls','isbge','isblt','isbgt','isble', - 'yieldeq.w','yieldne.w','yieldcs.w','yieldhs.w','yieldcc.w','yieldlo.w','yieldmi.w','yieldpl.w','yieldvs.w','yieldvc.w','yieldhi.w','yieldls.w','yieldge.w','yieldlt.w','yieldgt.w','yieldle.w', - 'yieldeq','yieldne','yieldcs','yieldhs','yieldcc','yieldlo','yieldmi','yieldpl','yieldvs','yieldvc','yieldhi','yieldls','yieldge','yieldlt','yieldgt','yieldle', - 'nopeq.w','nopne.w','nopcs.w','nophs.w','nopcc.w','noplo.w','nopmi.w','noppl.w','nopvs.w','nopvc.w','nophi.w','nopls.w','nopge.w','noplt.w','nopgt.w','nople.w', - 'nopeq','nopne','nopcs','nophs','nopcc','noplo','nopmi','noppl','nopvs','nopvc','nophi','nopls','nopge','noplt','nopgt','nople' - ), - /* Unconditional ARMv6 SIMD */ - 11 => array( - /* ARMv6 SIMD: Unconditional Addition, Subtraction & Saturation */ - 'sadd16','sadd16al', - 'sadd8','sadd8al', - 'uadd16','uadd16al', - 'uadd8','uadd8al', - 'ssub16','ssub16al', - 'ssub8','ssub8al', - 'usub16','usub16al', - 'usub8','usub8al', - 'sasx','sasxal', - 'ssax','ssaxal', - 'uasx','uasxal', - 'usax','usaxal', - 'usad8','usad8al', - 'usada8','usada8al', - /* ARMv6 SIMD: Unconditional Halving Addition & Subtraction */ - 'shadd16','shadd16al', - 'shadd8','shadd8al', - 'uhadd16','uhadd16al', - 'uhadd8','uhadd8al', - 'shsub16','shsub16al', - 'shsub8','shsub8al', - 'uhsub16','uhsub16al', - 'uhsub8','uhsub8al', - 'shasx','shasxal', - 'shsax','shsaxal', - 'uhasx','uhasxal', - 'uhsax','uhsaxal', - /* ARMv6 SIMD: Unconditional Saturating Operations */ - 'qadd','qaddal', - 'qadd16','qadd16al', - 'qadd8','qadd8al', - 'uqadd16','uqadd16al', - 'uqadd8','uqadd8al', - 'qsub','qsubal', - 'qsub16','qsub16al', - 'qsub8','qsub8al', - 'uqsub16','uqsub16al', - 'uqsub8','uqsub8al', - 'qasx','qasxal', - 'qsax','qsaxal', - 'uqasx','uqasxal', - 'uqsax','uqsaxal', - 'qdadd','qdaddal', - 'qdsub','qdsubal', - 'ssat','ssatal', - 'ssat16','ssat16al', - 'usat','usatal', - 'usat16','usat16al', - /* ARMv6 SIMD: Unconditional Permutation and Combine Operations */ - 'sxtah','sxtahal', - 'sxtab','sxtabal', - 'sxtab16','sxtab16al', - 'uxtah','uxtahal', - 'uxtab','uxtabal', - 'uxtab16','uxtab16al', - 'sxth.w','sxthal.w', - 'sxth','sxthal', - 'sxtb.w','sxtbal.w', - 'sxtb','sxtbal', - 'sxtb16','sxtb16al', - 'uxth.w','uxthal.w', - 'uxth','uxthal', - 'uxtb.w','uxtbal.w', - 'uxtb','uxtbal', - 'uxtb16','uxtb16al', - 'pkhbt','pkhbtal', - 'pkhtb','pkhtbal', - 'rbit','rbital', - 'rev.w','reval.w', - 'rev','reval', - 'rev16.w','rev16al.w', - 'rev16','rev16al', - 'revsh.w','revshal.w', - 'revsh','revshal', - 'sel','selal', - /* ARMv6 SIMD: Unconditional Multiply and Multiply-Add */ - 'smlad','smladal', - 'smladx','smladxal', - 'smlsd','smlsdal', - 'smlsdx','smlsdxal', - 'smlald','smlaldal', - 'smlaldx','smlaldxal', - 'smlsld','smlsldal', - 'smlsldx','smlsldxal', - 'smmul','smmulal', - 'smmulr','smmulral', - 'smmla','smmlaal', - 'smmlar','smmlaral', - 'smmls','smmlsal', - 'smmlsr','smmlsral', - 'smuad','smuadal', - 'smuadx','smuadxal', - 'smusd','smusdal', - 'smusdx','smusdxal', - 'umaal','umaalal' - ), - /* Conditional ARMv6 SIMD */ - 12 => array( - /* ARMv6 SIMD: Conditional Addition, Subtraction & Saturation */ - 'sadd16eq','sadd16ne','sadd16cs','sadd16hs','sadd16cc','sadd16lo','sadd16mi','sadd16pl','sadd16vs','sadd16vc','sadd16hi','sadd16ls','sadd16ge','sadd16lt','sadd16gt','sadd16le', - 'sadd8eq','sadd8ne','sadd8cs','sadd8hs','sadd8cc','sadd8lo','sadd8mi','sadd8pl','sadd8vs','sadd8vc','sadd8hi','sadd8ls','sadd8ge','sadd8lt','sadd8gt','sadd8le', - 'uadd16eq','uadd16ne','uadd16cs','uadd16hs','uadd16cc','uadd16lo','uadd16mi','uadd16pl','uadd16vs','uadd16vc','uadd16hi','uadd16ls','uadd16ge','uadd16lt','uadd16gt','uadd16le', - 'uadd8eq','uadd8ne','uadd8cs','uadd8hs','uadd8cc','uadd8lo','uadd8mi','uadd8pl','uadd8vs','uadd8vc','uadd8hi','uadd8ls','uadd8ge','uadd8lt','uadd8gt','uadd8le', - 'ssub16eq','ssub16ne','ssub16cs','ssub16hs','ssub16cc','ssub16lo','ssub16mi','ssub16pl','ssub16vs','ssub16vc','ssub16hi','ssub16ls','ssub16ge','ssub16lt','ssub16gt','ssub16le', - 'ssub8eq','ssub8ne','ssub8cs','ssub8hs','ssub8cc','ssub8lo','ssub8mi','ssub8pl','ssub8vs','ssub8vc','ssub8hi','ssub8ls','ssub8ge','ssub8lt','ssub8gt','ssub8le', - 'usub16eq','usub16ne','usub16cs','usub16hs','usub16cc','usub16lo','usub16mi','usub16pl','usub16vs','usub16vc','usub16hi','usub16ls','usub16ge','usub16lt','usub16gt','usub16le', - 'usub8eq','usub8ne','usub8cs','usub8hs','usub8cc','usub8lo','usub8mi','usub8pl','usub8vs','usub8vc','usub8hi','usub8ls','usub8ge','usub8lt','usub8gt','usub8le', - 'sasxeq','sasxne','sasxcs','sasxhs','sasxcc','sasxlo','sasxmi','sasxpl','sasxvs','sasxvc','sasxhi','sasxls','sasxge','sasxlt','sasxgt','sasxle', - 'ssaxeq','ssaxne','ssaxcs','ssaxhs','ssaxcc','ssaxlo','ssaxmi','ssaxpl','ssaxvs','ssaxvc','ssaxhi','ssaxls','ssaxge','ssaxlt','ssaxgt','ssaxle', - 'uasxeq','uasxne','uasxcs','uasxhs','uasxcc','uasxlo','uasxmi','uasxpl','uasxvs','uasxvc','uasxhi','uasxls','uasxge','uasxlt','uasxgt','uasxle', - 'usaxeq','usaxne','usaxcs','usaxhs','usaxcc','usaxlo','usaxmi','usaxpl','usaxvs','usaxvc','usaxhi','usaxls','usaxge','usaxlt','usaxgt','usaxle', - 'usad8eq','usad8ne','usad8cs','usad8hs','usad8cc','usad8lo','usad8mi','usad8pl','usad8vs','usad8vc','usad8hi','usad8ls','usad8ge','usad8lt','usad8gt','usad8le', - 'usada8eq','usada8ne','usada8cs','usada8hs','usada8cc','usada8lo','usada8mi','usada8pl','usada8vs','usada8vc','usada8hi','usada8ls','usada8ge','usada8lt','usada8gt','usada8le', - /* ARMv6 SIMD: Conditional Halving Addition & Subtraction */ - 'shadd16eq','shadd16ne','shadd16cs','shadd16hs','shadd16cc','shadd16lo','shadd16mi','shadd16pl','shadd16vs','shadd16vc','shadd16hi','shadd16ls','shadd16ge','shadd16lt','shadd16gt','shadd16le', - 'shadd8eq','shadd8ne','shadd8cs','shadd8hs','shadd8cc','shadd8lo','shadd8mi','shadd8pl','shadd8vs','shadd8vc','shadd8hi','shadd8ls','shadd8ge','shadd8lt','shadd8gt','shadd8le', - 'uhadd16eq','uhadd16ne','uhadd16cs','uhadd16hs','uhadd16cc','uhadd16lo','uhadd16mi','uhadd16pl','uhadd16vs','uhadd16vc','uhadd16hi','uhadd16ls','uhadd16ge','uhadd16lt','uhadd16gt','uhadd16le', - 'uhadd8eq','uhadd8ne','uhadd8cs','uhadd8hs','uhadd8cc','uhadd8lo','uhadd8mi','uhadd8pl','uhadd8vs','uhadd8vc','uhadd8hi','uhadd8ls','uhadd8ge','uhadd8lt','uhadd8gt','uhadd8le', - 'shsub16eq','shsub16ne','shsub16cs','shsub16hs','shsub16cc','shsub16lo','shsub16mi','shsub16pl','shsub16vs','shsub16vc','shsub16hi','shsub16ls','shsub16ge','shsub16lt','shsub16gt','shsub16le', - 'shsub8eq','shsub8ne','shsub8cs','shsub8hs','shsub8cc','shsub8lo','shsub8mi','shsub8pl','shsub8vs','shsub8vc','shsub8hi','shsub8ls','shsub8ge','shsub8lt','shsub8gt','shsub8le', - 'uhsub16eq','uhsub16ne','uhsub16cs','uhsub16hs','uhsub16cc','uhsub16lo','uhsub16mi','uhsub16pl','uhsub16vs','uhsub16vc','uhsub16hi','uhsub16ls','uhsub16ge','uhsub16lt','uhsub16gt','uhsub16le', - 'uhsub8eq','uhsub8ne','uhsub8cs','uhsub8hs','uhsub8cc','uhsub8lo','uhsub8mi','uhsub8pl','uhsub8vs','uhsub8vc','uhsub8hi','uhsub8ls','uhsub8ge','uhsub8lt','uhsub8gt','uhsub8le', - 'shasxeq','shasxne','shasxcs','shasxhs','shasxcc','shasxlo','shasxmi','shasxpl','shasxvs','shasxvc','shasxhi','shasxls','shasxge','shasxlt','shasxgt','shasxle', - 'shsaxeq','shsaxne','shsaxcs','shsaxhs','shsaxcc','shsaxlo','shsaxmi','shsaxpl','shsaxvs','shsaxvc','shsaxhi','shsaxls','shsaxge','shsaxlt','shsaxgt','shsaxle', - 'uhasxeq','uhasxne','uhasxcs','uhasxhs','uhasxcc','uhasxlo','uhasxmi','uhasxpl','uhasxvs','uhasxvc','uhasxhi','uhasxls','uhasxge','uhasxlt','uhasxgt','uhasxle', - 'uhsaxeq','uhsaxne','uhsaxcs','uhsaxhs','uhsaxcc','uhsaxlo','uhsaxmi','uhsaxpl','uhsaxvs','uhsaxvc','uhsaxhi','uhsaxls','uhsaxge','uhsaxlt','uhsaxgt','uhsaxle', - /* ARMv6 SIMD: Conditional Saturating Operations */ - 'qaddeq','qaddne','qaddcs','qaddhs','qaddcc','qaddlo','qaddmi','qaddpl','qaddvs','qaddvc','qaddhi','qaddls','qaddge','qaddlt','qaddgt','qaddle', - 'qadd16eq','qadd16ne','qadd16cs','qadd16hs','qadd16cc','qadd16lo','qadd16mi','qadd16pl','qadd16vs','qadd16vc','qadd16hi','qadd16ls','qadd16ge','qadd16lt','qadd16gt','qadd16le', - 'qadd8eq','qadd8ne','qadd8cs','qadd8hs','qadd8cc','qadd8lo','qadd8mi','qadd8pl','qadd8vs','qadd8vc','qadd8hi','qadd8ls','qadd8ge','qadd8lt','qadd8gt','qadd8le', - 'uqadd16eq','uqadd16ne','uqadd16cs','uqadd16hs','uqadd16cc','uqadd16lo','uqadd16mi','uqadd16pl','uqadd16vs','uqadd16vc','uqadd16hi','uqadd16ls','uqadd16ge','uqadd16lt','uqadd16gt','uqadd16le', - 'uqadd8eq','uqadd8ne','uqadd8cs','uqadd8hs','uqadd8cc','uqadd8lo','uqadd8mi','uqadd8pl','uqadd8vs','uqadd8vc','uqadd8hi','uqadd8ls','uqadd8ge','uqadd8lt','uqadd8gt','uqadd8le', - 'qsubeq','qsubne','qsubcs','qsubhs','qsubcc','qsublo','qsubmi','qsubpl','qsubvs','qsubvc','qsubhi','qsubls','qsubge','qsublt','qsubgt','qsuble', - 'qsub16eq','qsub16ne','qsub16cs','qsub16hs','qsub16cc','qsub16lo','qsub16mi','qsub16pl','qsub16vs','qsub16vc','qsub16hi','qsub16ls','qsub16ge','qsub16lt','qsub16gt','qsub16le', - 'qsub8eq','qsub8ne','qsub8cs','qsub8hs','qsub8cc','qsub8lo','qsub8mi','qsub8pl','qsub8vs','qsub8vc','qsub8hi','qsub8ls','qsub8ge','qsub8lt','qsub8gt','qsub8le', - 'uqsub16eq','uqsub16ne','uqsub16cs','uqsub16hs','uqsub16cc','uqsub16lo','uqsub16mi','uqsub16pl','uqsub16vs','uqsub16vc','uqsub16hi','uqsub16ls','uqsub16ge','uqsub16lt','uqsub16gt','uqsub16le', - 'uqsub8eq','uqsub8ne','uqsub8cs','uqsub8hs','uqsub8cc','uqsub8lo','uqsub8mi','uqsub8pl','uqsub8vs','uqsub8vc','uqsub8hi','uqsub8ls','uqsub8ge','uqsub8lt','uqsub8gt','uqsub8le', - 'qasxeq','qasxne','qasxcs','qasxhs','qasxcc','qasxlo','qasxmi','qasxpl','qasxvs','qasxvc','qasxhi','qasxls','qasxge','qasxlt','qasxgt','qasxle', - 'qsaxeq','qsaxne','qsaxcs','qsaxhs','qsaxcc','qsaxlo','qsaxmi','qsaxpl','qsaxvs','qsaxvc','qsaxhi','qsaxls','qsaxge','qsaxlt','qsaxgt','qsaxle', - 'uqasxeq','uqasxne','uqasxcs','uqasxhs','uqasxcc','uqasxlo','uqasxmi','uqasxpl','uqasxvs','uqasxvc','uqasxhi','uqasxls','uqasxge','uqasxlt','uqasxgt','uqasxle', - 'uqsaxeq','uqsaxne','uqsaxcs','uqsaxhs','uqsaxcc','uqsaxlo','uqsaxmi','uqsaxpl','uqsaxvs','uqsaxvc','uqsaxhi','uqsaxls','uqsaxge','uqsaxlt','uqsaxgt','uqsaxle', - 'qdaddeq','qdaddne','qdaddcs','qdaddhs','qdaddcc','qdaddlo','qdaddmi','qdaddpl','qdaddvs','qdaddvc','qdaddhi','qdaddls','qdaddge','qdaddlt','qdaddgt','qdaddle', - 'qdsubeq','qdsubne','qdsubcs','qdsubhs','qdsubcc','qdsublo','qdsubmi','qdsubpl','qdsubvs','qdsubvc','qdsubhi','qdsubls','qdsubge','qdsublt','qdsubgt','qdsuble', - 'ssateq','ssatne','ssatcs','ssaths','ssatcc','ssatlo','ssatmi','ssatpl','ssatvs','ssatvc','ssathi','ssatls','ssatge','ssatlt','ssatgt','ssatle', - 'ssat16eq','ssat16ne','ssat16cs','ssat16hs','ssat16cc','ssat16lo','ssat16mi','ssat16pl','ssat16vs','ssat16vc','ssat16hi','ssat16ls','ssat16ge','ssat16lt','ssat16gt','ssat16le', - 'usateq','usatne','usatcs','usaths','usatcc','usatlo','usatmi','usatpl','usatvs','usatvc','usathi','usatls','usatge','usatlt','usatgt','usatle', - 'usat16eq','usat16ne','usat16cs','usat16hs','usat16cc','usat16lo','usat16mi','usat16pl','usat16vs','usat16vc','usat16hi','usat16ls','usat16ge','usat16lt','usat16gt','usat16le', - /* ARMv6 SIMD: Conditional Permutation and Combine Operations */ - 'sxtaheq','sxtahne','sxtahcs','sxtahhs','sxtahcc','sxtahlo','sxtahmi','sxtahpl','sxtahvs','sxtahvc','sxtahhi','sxtahls','sxtahge','sxtahlt','sxtahgt','sxtahle', - 'sxtabeq','sxtabne','sxtabcs','sxtabhs','sxtabcc','sxtablo','sxtabmi','sxtabpl','sxtabvs','sxtabvc','sxtabhi','sxtabls','sxtabge','sxtablt','sxtabgt','sxtable', - 'sxtab16eq','sxtab16ne','sxtab16cs','sxtab16hs','sxtab16cc','sxtab16lo','sxtab16mi','sxtab16pl','sxtab16vs','sxtab16vc','sxtab16hi','sxtab16ls','sxtab16ge','sxtab16lt','sxtab16gt','sxtab16le', - 'uxtaheq','uxtahne','uxtahcs','uxtahhs','uxtahcc','uxtahlo','uxtahmi','uxtahpl','uxtahvs','uxtahvc','uxtahhi','uxtahls','uxtahge','uxtahlt','uxtahgt','uxtahle', - 'uxtabeq','uxtabne','uxtabcs','uxtabhs','uxtabcc','uxtablo','uxtabmi','uxtabpl','uxtabvs','uxtabvc','uxtabhi','uxtabls','uxtabge','uxtablt','uxtabgt','uxtable', - 'uxtab16eq','uxtab16ne','uxtab16cs','uxtab16hs','uxtab16cc','uxtab16lo','uxtab16mi','uxtab16pl','uxtab16vs','uxtab16vc','uxtab16hi','uxtab16ls','uxtab16ge','uxtab16lt','uxtab16gt','uxtab16le', - 'sxtheq.w','sxthne.w','sxthcs.w','sxthhs.w','sxthcc.w','sxthlo.w','sxthmi.w','sxthpl.w','sxthvs.w','sxthvc.w','sxthhi.w','sxthls.w','sxthge.w','sxthlt.w','sxthgt.w','sxthle.w', - 'sxtheq','sxthne','sxthcs','sxthhs','sxthcc','sxthlo','sxthmi','sxthpl','sxthvs','sxthvc','sxthhi','sxthls','sxthge','sxthlt','sxthgt','sxthle', - 'sxtbeq.w','sxtbne.w','sxtbcs.w','sxtbhs.w','sxtbcc.w','sxtblo.w','sxtbmi.w','sxtbpl.w','sxtbvs.w','sxtbvc.w','sxtbhi.w','sxtbls.w','sxtbge.w','sxtblt.w','sxtbgt.w','sxtble.w', - 'sxtbeq','sxtbne','sxtbcs','sxtbhs','sxtbcc','sxtblo','sxtbmi','sxtbpl','sxtbvs','sxtbvc','sxtbhi','sxtbls','sxtbge','sxtblt','sxtbgt','sxtble', - 'sxtb16eq','sxtb16ne','sxtb16cs','sxtb16hs','sxtb16cc','sxtb16lo','sxtb16mi','sxtb16pl','sxtb16vs','sxtb16vc','sxtb16hi','sxtb16ls','sxtb16ge','sxtb16lt','sxtb16gt','sxtb16le', - 'uxtheq.w','uxthne.w','uxthcs.w','uxthhs.w','uxthcc.w','uxthlo.w','uxthmi.w','uxthpl.w','uxthvs.w','uxthvc.w','uxthhi.w','uxthls.w','uxthge.w','uxthlt.w','uxthgt.w','uxthle.w', - 'uxtheq','uxthne','uxthcs','uxthhs','uxthcc','uxthlo','uxthmi','uxthpl','uxthvs','uxthvc','uxthhi','uxthls','uxthge','uxthlt','uxthgt','uxthle', - 'uxtbeq.w','uxtbne.w','uxtbcs.w','uxtbhs.w','uxtbcc.w','uxtblo.w','uxtbmi.w','uxtbpl.w','uxtbvs.w','uxtbvc.w','uxtbhi.w','uxtbls.w','uxtbge.w','uxtblt.w','uxtbgt.w','uxtble.w', - 'uxtbeq','uxtbne','uxtbcs','uxtbhs','uxtbcc','uxtblo','uxtbmi','uxtbpl','uxtbvs','uxtbvc','uxtbhi','uxtbls','uxtbge','uxtblt','uxtbgt','uxtble', - 'uxtb16eq','uxtb16ne','uxtb16cs','uxtb16hs','uxtb16cc','uxtb16lo','uxtb16mi','uxtb16pl','uxtb16vs','uxtb16vc','uxtb16hi','uxtb16ls','uxtb16ge','uxtb16lt','uxtb16gt','uxtb16le', - 'pkhbteq','pkhbtne','pkhbtcs','pkhbths','pkhbtcc','pkhbtlo','pkhbtmi','pkhbtpl','pkhbtvs','pkhbtvc','pkhbthi','pkhbtls','pkhbtge','pkhbtlt','pkhbtgt','pkhbtle', - 'pkhtbeq','pkhtbne','pkhtbcs','pkhtbhs','pkhtbcc','pkhtblo','pkhtbmi','pkhtbpl','pkhtbvs','pkhtbvc','pkhtbhi','pkhtbls','pkhtbge','pkhtblt','pkhtbgt','pkhtble', - 'rbiteq','rbitne','rbitcs','rbiths','rbitcc','rbitlo','rbitmi','rbitpl','rbitvs','rbitvc','rbithi','rbitls','rbitge','rbitlt','rbitgt','rbitle', - 'reveq.w','revne.w','revcs.w','revhs.w','revcc.w','revlo.w','revmi.w','revpl.w','revvs.w','revvc.w','revhi.w','revls.w','revge.w','revlt.w','revgt.w','revle.w', - 'reveq','revne','revcs','revhs','revcc','revlo','revmi','revpl','revvs','revvc','revhi','revls','revge','revlt','revgt','revle', - 'rev16eq.w','rev16ne.w','rev16cs.w','rev16hs.w','rev16cc.w','rev16lo.w','rev16mi.w','rev16pl.w','rev16vs.w','rev16vc.w','rev16hi.w','rev16ls.w','rev16ge.w','rev16lt.w','rev16gt.w','rev16le.w', - 'rev16eq','rev16ne','rev16cs','rev16hs','rev16cc','rev16lo','rev16mi','rev16pl','rev16vs','rev16vc','rev16hi','rev16ls','rev16ge','rev16lt','rev16gt','rev16le', - 'revsheq.w','revshne.w','revshcs.w','revshhs.w','revshcc.w','revshlo.w','revshmi.w','revshpl.w','revshvs.w','revshvc.w','revshhi.w','revshls.w','revshge.w','revshlt.w','revshgt.w','revshle.w', - 'revsheq','revshne','revshcs','revshhs','revshcc','revshlo','revshmi','revshpl','revshvs','revshvc','revshhi','revshls','revshge','revshlt','revshgt','revshle', - 'seleq','selne','selcs','selhs','selcc','sello','selmi','selpl','selvs','selvc','selhi','sells','selge','sellt','selgt','selle', - /* ARMv6 SIMD: Conditional Multiply and Multiply-Add */ - 'smladeq','smladne','smladcs','smladhs','smladcc','smladlo','smladmi','smladpl','smladvs','smladvc','smladhi','smladls','smladge','smladlt','smladgt','smladle', - 'smladxeq','smladxne','smladxcs','smladxhs','smladxcc','smladxlo','smladxmi','smladxpl','smladxvs','smladxvc','smladxhi','smladxls','smladxge','smladxlt','smladxgt','smladxle', - 'smlsdeq','smlsdne','smlsdcs','smlsdhs','smlsdcc','smlsdlo','smlsdmi','smlsdpl','smlsdvs','smlsdvc','smlsdhi','smlsdls','smlsdge','smlsdlt','smlsdgt','smlsdle', - 'smlsdxeq','smlsdxne','smlsdxcs','smlsdxhs','smlsdxcc','smlsdxlo','smlsdxmi','smlsdxpl','smlsdxvs','smlsdxvc','smlsdxhi','smlsdxls','smlsdxge','smlsdxlt','smlsdxgt','smlsdxle', - 'smlaldeq','smlaldne','smlaldcs','smlaldhs','smlaldcc','smlaldlo','smlaldmi','smlaldpl','smlaldvs','smlaldvc','smlaldhi','smlaldls','smlaldge','smlaldlt','smlaldgt','smlaldle', - 'smlaldxeq','smlaldxne','smlaldxcs','smlaldxhs','smlaldxcc','smlaldxlo','smlaldxmi','smlaldxpl','smlaldxvs','smlaldxvc','smlaldxhi','smlaldxls','smlaldxge','smlaldxlt','smlaldxgt','smlaldxle', - 'smlsldeq','smlsldne','smlsldcs','smlsldhs','smlsldcc','smlsldlo','smlsldmi','smlsldpl','smlsldvs','smlsldvc','smlsldhi','smlsldls','smlsldge','smlsldlt','smlsldgt','smlsldle', - 'smlsldxeq','smlsldxne','smlsldxcs','smlsldxhs','smlsldxcc','smlsldxlo','smlsldxmi','smlsldxpl','smlsldxvs','smlsldxvc','smlsldxhi','smlsldxls','smlsldxge','smlsldxlt','smlsldxgt','smlsldxle', - 'smmuleq','smmulne','smmulcs','smmulhs','smmulcc','smmullo','smmulmi','smmulpl','smmulvs','smmulvc','smmulhi','smmulls','smmulge','smmullt','smmulgt','smmulle', - 'smmulreq','smmulrne','smmulrcs','smmulrhs','smmulrcc','smmulrlo','smmulrmi','smmulrpl','smmulrvs','smmulrvc','smmulrhi','smmulrls','smmulrge','smmulrlt','smmulrgt','smmulrle', - 'smmlaeq','smmlane','smmlacs','smmlahs','smmlacc','smmlalo','smmlami','smmlapl','smmlavs','smmlavc','smmlahi','smmlals','smmlage','smmlalt','smmlagt','smmlale', - 'smmlareq','smmlarne','smmlarcs','smmlarhs','smmlarcc','smmlarlo','smmlarmi','smmlarpl','smmlarvs','smmlarvc','smmlarhi','smmlarls','smmlarge','smmlarlt','smmlargt','smmlarle', - 'smmlseq','smmlsne','smmlscs','smmlshs','smmlscc','smmlslo','smmlsmi','smmlspl','smmlsvs','smmlsvc','smmlshi','smmlsls','smmlsge','smmlslt','smmlsgt','smmlsle', - 'smmlsreq','smmlsrne','smmlsrcs','smmlsrhs','smmlsrcc','smmlsrlo','smmlsrmi','smmlsrpl','smmlsrvs','smmlsrvc','smmlsrhi','smmlsrls','smmlsrge','smmlsrlt','smmlsrgt','smmlsrle', - 'smuadeq','smuadne','smuadcs','smuadhs','smuadcc','smuadlo','smuadmi','smuadpl','smuadvs','smuadvc','smuadhi','smuadls','smuadge','smuadlt','smuadgt','smuadle', - 'smuadxeq','smuadxne','smuadxcs','smuadxhs','smuadxcc','smuadxlo','smuadxmi','smuadxpl','smuadxvs','smuadxvc','smuadxhi','smuadxls','smuadxge','smuadxlt','smuadxgt','smuadxle', - 'smusdeq','smusdne','smusdcs','smusdhs','smusdcc','smusdlo','smusdmi','smusdpl','smusdvs','smusdvc','smusdhi','smusdls','smusdge','smusdlt','smusdgt','smusdle', - 'smusdxeq','smusdxne','smusdxcs','smusdxhs','smusdxcc','smusdxlo','smusdxmi','smusdxpl','smusdxvs','smusdxvc','smusdxhi','smusdxls','smusdxge','smusdxlt','smusdxgt','smusdxle', - 'umaaleq','umaalne','umaalcs','umaalhs','umaalcc','umaallo','umaalmi','umaalpl','umaalvs','umaalvc','umaalhi','umaalls','umaalge','umaallt','umaalgt','umaalle' - ), - /* Unconditional Coprocessor Instructions */ - 13 => array( - /* Data Processing: Unconditional Coprocessor Instructions */ - 'cdp','cdpal', - 'cdp2','cdp2al', - 'ldc','ldcal', - 'ldcl','ldclal', - 'ldc2','ldc2al', - 'ldc2l','ldc2lal', - 'stc','stcal', - 'stcl','stclal', - 'stc2','stc2al', - 'stc2l','stc2lal', - 'mcr','mcral', - 'mcr2','mcr2al', - 'mcrr','mcrral', - 'mcrr2','mcrr2al', - 'mrc','mrcal', - 'mrc2','mrc2al', - 'mrrc','mrrcal', - 'mrrc2','mrrc2al' - ), - /* Conditional Coprocessor Instructions */ - 14 => array( - /* Data Processing: Conditional Coprocessor Instructions */ - 'cdpeq','cdpne','cdpcs','cdphs','cdpcc','cdplo','cdpmi','cdppl','cdpvs','cdpvc','cdphi','cdpls','cdpge','cdplt','cdpgt','cdple', - 'cdp2eq','cdp2ne','cdp2cs','cdp2hs','cdp2cc','cdp2lo','cdp2mi','cdp2pl','cdp2vs','cdp2vc','cdp2hi','cdp2ls','cdp2ge','cdp2lt','cdp2gt','cdp2le', - 'ldceq','ldcne','ldccs','ldchs','ldccc','ldclo','ldcmi','ldcpl','ldcvs','ldcvc','ldchi','ldcls','ldcge','ldclt','ldcgt','ldcle', - 'ldcleq','ldclne','ldclcs','ldclhs','ldclcc','ldcllo','ldclmi','ldclpl','ldclvs','ldclvc','ldclhi','ldclls','ldclge','ldcllt','ldclgt','ldclle', - 'ldc2eq','ldc2ne','ldc2cs','ldc2hs','ldc2cc','ldc2lo','ldc2mi','ldc2pl','ldc2vs','ldc2vc','ldc2hi','ldc2ls','ldc2ge','ldc2lt','ldc2gt','ldc2le', - 'ldc2leq','ldc2lne','ldc2lcs','ldc2lhs','ldc2lcc','ldc2llo','ldc2lmi','ldc2lpl','ldc2lvs','ldc2lvc','ldc2lhi','ldc2lls','ldc2lge','ldc2llt','ldc2lgt','ldc2lle', - 'stceq','stcne','stccs','stchs','stccc','stclo','stcmi','stcpl','stcvs','stcvc','stchi','stcls','stcge','stclt','stcgt','stcle', - 'stcleq','stclne','stclcs','stclhs','stclcc','stcllo','stclmi','stclpl','stclvs','stclvc','stclhi','stclls','stclge','stcllt','stclgt','stclle', - 'stc2eq','stc2ne','stc2cs','stc2hs','stc2cc','stc2lo','stc2mi','stc2pl','stc2vs','stc2vc','stc2hi','stc2ls','stc2ge','stc2lt','stc2gt','stc2le', - 'stc2leq','stc2lne','stc2lcs','stc2lhs','stc2lcc','stc2llo','stc2lmi','stc2lpl','stc2lvs','stc2lvc','stc2lhi','stc2lls','stc2lge','stc2llt','stc2lgt','stc2lle', - 'mcreq','mcrne','mcrcs','mcrhs','mcrcc','mcrlo','mcrmi','mcrpl','mcrvs','mcrvc','mcrhi','mcrls','mcrge','mcrlt','mcrgt','mcrle', - 'mcr2eq','mcr2ne','mcr2cs','mcr2hs','mcr2cc','mcr2lo','mcr2mi','mcr2pl','mcr2vs','mcr2vc','mcr2hi','mcr2ls','mcr2ge','mcr2lt','mcr2gt','mcr2le', - 'mcrreq','mcrrne','mcrrcs','mcrrhs','mcrrcc','mcrrlo','mcrrmi','mcrrpl','mcrrvs','mcrrvc','mcrrhi','mcrrls','mcrrge','mcrrlt','mcrrgt','mcrrle', - 'mcrr2eq','mcrr2ne','mcrr2cs','mcrr2hs','mcrr2cc','mcrr2lo','mcrr2mi','mcrr2pl','mcrr2vs','mcrr2vc','mcrr2hi','mcrr2ls','mcrr2ge','mcrr2lt','mcrr2gt','mcrr2le', - 'mrceq','mrcne','mrccs','mrchs','mrccc','mrclo','mrcmi','mrcpl','mrcvs','mrcvc','mrchi','mrcls','mrcge','mrclt','mrcgt','mrcle', - 'mrc2eq','mrc2ne','mrc2cs','mrc2hs','mrc2cc','mrc2lo','mrc2mi','mrc2pl','mrc2vs','mrc2vc','mrc2hi','mrc2ls','mrc2ge','mrc2lt','mrc2gt','mrc2le', - 'mrrceq','mrrcne','mrrccs','mrrchs','mrrccc','mrrclo','mrrcmi','mrrcpl','mrrcvs','mrrcvc','mrrchi','mrrcls','mrrcge','mrrclt','mrrcgt','mrrcle', - 'mrrc2eq','mrrc2ne','mrrc2cs','mrrc2hs','mrrc2cc','mrrc2lo','mrrc2mi','mrrc2pl','mrrc2vs','mrrc2vc','mrrc2hi','mrrc2ls','mrrc2ge','mrrc2lt','mrrc2gt','mrrc2le' - ), - /* Unconditional System Instructions */ - 15 => array( - /* System: Unconditional Debug and State-Change Instructions */ - 'bkpt', - 'dbg','dbgal', - 'setend', - 'svc','svcal', - 'sev.w','seval.w', - 'sev','seval', - 'wfe.w','wfeal.w', - 'wfe','wfeal', - 'wfi.w','wfial.w', - 'wfi','wfial', - /* System: Unconditional ThumbEE Instructions */ - 'enterx', - 'leavex', - 'chka.n','chkaal.n', - 'chka','chkaal', - 'hb.n','hbal.n', - 'hb','hbal', - 'hbl.n','hblal.n', - 'hbl','hblal', - 'hblp.n','hblpal.n', - 'hblp','hblpal', - 'hbp.n','hbpal.n', - 'hbp','hbpal', - /* System: Unconditional Privileged Instructions */ - 'cpsie.n', - 'cpsie.w', - 'cpsie', - 'cpsid.n', - 'cpsid.w', - 'cpsid', - 'smc','smcal', - 'rfeda','rfedaal', - 'rfedb','rfedbal', - 'rfeia','rfeiaal', - 'rfeib','rfeibal', - 'srsda','srsdaal', - 'srsdb','srsdbal', - 'srsia','srsiaal', - 'srsib','srsibal' - ), - /* Conditional System Instructions */ - 16 => array( - /* System: Conditional Debug and State-Change Instructions */ - 'dbgeq','dbgne','dbgcs','dbghs','dbgcc','dbglo','dbgmi','dbgpl','dbgvs','dbgvc','dbghi','dbgls','dbgge','dbglt','dbggt','dbgle', - 'svceq','svcne','svccs','svchs','svccc','svclo','svcmi','svcpl','svcvs','svcvc','svchi','svcls','svcge','svclt','svcgt','svcle', - 'seveq.w','sevne.w','sevcs.w','sevhs.w','sevcc.w','sevlo.w','sevmi.w','sevpl.w','sevvs.w','sevvc.w','sevhi.w','sevls.w','sevge.w','sevlt.w','sevgt.w','sevle.w', - 'seveq','sevne','sevcs','sevhs','sevcc','sevlo','sevmi','sevpl','sevvs','sevvc','sevhi','sevls','sevge','sevlt','sevgt','sevle', - 'wfeeq.w','wfene.w','wfecs.w','wfehs.w','wfecc.w','wfelo.w','wfemi.w','wfepl.w','wfevs.w','wfevc.w','wfehi.w','wfels.w','wfege.w','wfelt.w','wfegt.w','wfele.w', - 'wfeeq','wfene','wfecs','wfehs','wfecc','wfelo','wfemi','wfepl','wfevs','wfevc','wfehi','wfels','wfege','wfelt','wfegt','wfele', - 'wfieq.w','wfine.w','wfics.w','wfihs.w','wficc.w','wfilo.w','wfimi.w','wfipl.w','wfivs.w','wfivc.w','wfihi.w','wfils.w','wfige.w','wfilt.w','wfigt.w','wfile.w', - 'wfieq','wfine','wfics','wfihs','wficc','wfilo','wfimi','wfipl','wfivs','wfivc','wfihi','wfils','wfige','wfilt','wfigt','wfile', - /* System: Conditional ThumbEE Instructions */ - 'chkaeq.n','chkane.n','chkacs.n','chkahs.n','chkacc.n','chkalo.n','chkami.n','chkapl.n','chkavs.n','chkavc.n','chkahi.n','chkals.n','chkage.n','chkalt.n','chkagt.n','chkale.n', - 'chkaeq','chkane','chkacs','chkahs','chkacc','chkalo','chkami','chkapl','chkavs','chkavc','chkahi','chkals','chkage','chkalt','chkagt','chkale', - 'hbeq.n','hbne.n','hbcs.n','hbhs.n','hbcc.n','hblo.n','hbmi.n','hbpl.n','hbvs.n','hbvc.n','hbhi.n','hbls.n','hbge.n','hblt.n','hbgt.n','hble.n', - 'hbeq','hbne','hbcs','hbhs','hbcc','hblo','hbmi','hbpl','hbvs','hbvc','hbhi','hbls','hbge','hblt','hbgt','hble', - 'hbleq.n','hblne.n','hblcs.n','hblhs.n','hblcc.n','hbllo.n','hblmi.n','hblpl.n','hblvs.n','hblvc.n','hblhi.n','hblls.n','hblge.n','hbllt.n','hblgt.n','hblle.n', - 'hbleq','hblne','hblcs','hblhs','hblcc','hbllo','hblmi','hblpl','hblvs','hblvc','hblhi','hblls','hblge','hbllt','hblgt','hblle', - 'hblpeq.n','hblpne.n','hblpcs.n','hblphs.n','hblpcc.n','hblplo.n','hblpmi.n','hblppl.n','hblpvs.n','hblpvc.n','hblphi.n','hblpls.n','hblpge.n','hblplt.n','hblpgt.n','hblple.n', - 'hblpeq','hblpne','hblpcs','hblphs','hblpcc','hblplo','hblpmi','hblppl','hblpvs','hblpvc','hblphi','hblpls','hblpge','hblplt','hblpgt','hblple', - 'hbpeq.n','hbpne.n','hbpcs.n','hbphs.n','hbpcc.n','hbplo.n','hbpmi.n','hbppl.n','hbpvs.n','hbpvc.n','hbphi.n','hbpls.n','hbpge.n','hbplt.n','hbpgt.n','hbple.n', - 'hbpeq','hbpne','hbpcs','hbphs','hbpcc','hbplo','hbpmi','hbppl','hbpvs','hbpvc','hbphi','hbpls','hbpge','hbplt','hbpgt','hbple', - /* System: Conditional Privileged Instructions */ - 'smceq','smcne','smccs','smchs','smccc','smclo','smcmi','smcpl','smcvs','smcvc','smchi','smcls','smcge','smclt','smcgt','smcle', - 'rfedaeq','rfedane','rfedacs','rfedahs','rfedacc','rfedalo','rfedami','rfedapl','rfedavs','rfedavc','rfedahi','rfedals','rfedage','rfedalt','rfedagt','rfedale', - 'rfedbeq','rfedbne','rfedbcs','rfedbhs','rfedbcc','rfedblo','rfedbmi','rfedbpl','rfedbvs','rfedbvc','rfedbhi','rfedbls','rfedbge','rfedblt','rfedbgt','rfedble', - 'rfeiaeq','rfeiane','rfeiacs','rfeiahs','rfeiacc','rfeialo','rfeiami','rfeiapl','rfeiavs','rfeiavc','rfeiahi','rfeials','rfeiage','rfeialt','rfeiagt','rfeiale', - 'rfeibeq','rfeibne','rfeibcs','rfeibhs','rfeibcc','rfeiblo','rfeibmi','rfeibpl','rfeibvs','rfeibvc','rfeibhi','rfeibls','rfeibge','rfeiblt','rfeibgt','rfeible', - 'srsdaeq','srsdane','srsdacs','srsdahs','srsdacc','srsdalo','srsdami','srsdapl','srsdavs','srsdavc','srsdahi','srsdals','srsdage','srsdalt','srsdagt','srsdale', - 'srsdbeq','srsdbne','srsdbcs','srsdbhs','srsdbcc','srsdblo','srsdbmi','srsdbpl','srsdbvs','srsdbvc','srsdbhi','srsdbls','srsdbge','srsdblt','srsdbgt','srsdble', - 'srsiaeq','srsiane','srsiacs','srsiahs','srsiacc','srsialo','srsiami','srsiapl','srsiavs','srsiavc','srsiahi','srsials','srsiage','srsialt','srsiagt','srsiale', - 'srsibeq','srsibne','srsibcs','srsibhs','srsibcc','srsiblo','srsibmi','srsibpl','srsibvs','srsibvc','srsibhi','srsibls','srsibge','srsiblt','srsibgt','srsible' - ), - /* Unconditional WMMX/WMMX2 instructions */ - 17 => array( - /* Unconditional WMMX/WMMX2 SIMD Instructions */ - 'tandcb','tandcbal', - 'tandch','tandchal', - 'tandcw','tandcwal', - 'tbcstb','tbcstbal', - 'tbcsth','tbcsthal', - 'tbcstw','tbcstwal', - 'textrcb','textrcbal', - 'textrch','textrchal', - 'textrcw','textrcwal', - 'textrmsb','textrmsbal', - 'textrmsh','textrmshal', - 'textrmsw','textrmswal', - 'textrmub','textrmubal', - 'textrmuh','textrmuhal', - 'textrmuw','textrmuwal', - 'tinsrb','tinsrbal', - 'tinsrh','tinsrhal', - 'tinsrw','tinsrwal', - 'tmcr','tmcral', - 'tmcrr','tmcrral', - 'tmia','tmiaal', - 'tmiaph','tmiaphal', - 'tmiabb','tmiabbal', - 'tmiabt','tmiabtal', - 'tmiatb','tmiatbal', - 'tmiatt','tmiattal', - 'tmovmskb','tmovmskbal', - 'tmovmskh','tmovmskhal', - 'tmovmskw','tmovmskwal', - 'tmrc','tmrcal', - 'tmrrc','tmrrcal', - 'torcb','torcbal', - 'torch','torchal', - 'torcw','torcwal', - 'torvscb','torvscbal', - 'torvsch','torvschal', - 'torvscw','torvscwal', - 'wabsb','wabsbal', - 'wabsh','wabshal', - 'wabsw','wabswal', - 'wabsdiffb','wabsdiffbal', - 'wabsdiffh','wabsdiffhal', - 'wabsdiffw','wabsdiffwal', - 'waccb','waccbal', - 'wacch','wacchal', - 'waccw','waccwal', - 'waddb','waddbal', - 'waddh','waddhal', - 'waddw','waddwal', - 'waddbc','waddbcal', - 'waddhc','waddhcal', - 'waddwc','waddwcal', - 'waddbss','waddbssal', - 'waddhss','waddhssal', - 'waddwss','waddwssal', - 'waddbus','waddbusal', - 'waddhus','waddhusal', - 'waddwus','waddwusal', - 'waddsubhx','waddsubhxal', - 'waligni','walignial', - 'walignr0','walignr0al', - 'walignr1','walignr1al', - 'walignr2','walignr2al', - 'walignr3','walignr3al', - 'wand','wandal', - 'wandn','wandnal', - 'wavg2b','wavg2bal', - 'wavg2h','wavg2hal', - 'wavg2br','wavg2bral', - 'wavg2hr','wavg2hral', - 'wavg4','wavg4al', - 'wavg4r','wavg4ral', - 'wcmpeqb','wcmpeqbal', - 'wcmpeqh','wcmpeqhal', - 'wcmpeqw','wcmpeqwal', - 'wcmpgtsb','wcmpgtsbal', - 'wcmpgtsh','wcmpgtshal', - 'wcmpgtsw','wcmpgtswal', - 'wcmpgtub','wcmpgtubal', - 'wcmpgtuh','wcmpgtuhal', - 'wcmpgtuw','wcmpgtuwal', - 'wldrb','wldrbal', - 'wldrh','wldrhal', - 'wldrw','wldrwal', - 'wldrd','wldrdal', - 'wmacs','wmacsal', - 'wmacu','wmacual', - 'wmacsz','wmacszal', - 'wmacuz','wmacuzal', - 'wmadds','wmaddsal', - 'wmaddu','wmaddual', - 'wmaddsx','wmaddsxal', - 'wmaddux','wmadduxal', - 'wmaddsn','wmaddsnal', - 'wmaddun','wmaddunal', - 'wmaxsb','wmaxsbal', - 'wmaxsh','wmaxshal', - 'wmaxsw','wmaxswal', - 'wmaxub','wmaxubal', - 'wmaxuh','wmaxuhal', - 'wmaxuw','wmaxuwal', - 'wmerge','wmergeal', - 'wmiabb','wmiabbal', - 'wmiabt','wmiabtal', - 'wmiatb','wmiatbal', - 'wmiatt','wmiattal', - 'wmiabbn','wmiabbnal', - 'wmiabtn','wmiabtnal', - 'wmiatbn','wmiatbnal', - 'wmiattn','wmiattnal', - 'wmiawbb','wmiawbbal', - 'wmiawbt','wmiawbtal', - 'wmiawtb','wmiawtbal', - 'wmiawtt','wmiawttal', - 'wmiawbbn','wmiawbbnal', - 'wmiawbtn','wmiawbtnal', - 'wmiawtbn','wmiawtbnal', - 'wmiawttn','wmiawttnal', - 'wminsb','wminsbal', - 'wminsh','wminshal', - 'wminsw','wminswal', - 'wminub','wminubal', - 'wminuh','wminuhal', - 'wminuw','wminuwal', - 'wmov','wmoval', - 'wmulsm','wmulsmal', - 'wmulsl','wmulslal', - 'wmulum','wmulumal', - 'wmulul','wmululal', - 'wmulsmr','wmulsmral', - 'wmulslr','wmulslral', - 'wmulumr','wmulumral', - 'wmululr','wmululral', - 'wmulwum','wmulwumal', - 'wmulwsm','wmulwsmal', - 'wmulwl','wmulwlal', - 'wmulwumr','wmulwumral', - 'wmulwsmr','wmulwsmral', - 'wor','woral', - 'wpackhss','wpackhssal', - 'wpackwss','wpackwssal', - 'wpackdss','wpackdssal', - 'wpackhus','wpackhusal', - 'wpackwus','wpackwusal', - 'wpackdus','wpackdusal', - 'wqmiabb','wqmiabbal', - 'wqmiabt','wqmiabtal', - 'wqmiatb','wqmiatbal', - 'wqmiatt','wqmiattal', - 'wqmiabbn','wqmiabbnal', - 'wqmiabtn','wqmiabtnal', - 'wqmiatbn','wqmiatbnal', - 'wqmiattn','wqmiattnal', - 'wqmulm','wqmulmal', - 'wqmulmr','wqmulmral', - 'wqmulwm','wqmulwmal', - 'wqmulwmr','wqmulwmral', - 'wrorh','wrorhal', - 'wrorw','wrorwal', - 'wrord','wrordal', - 'wrorhg','wrorhgal', - 'wrorwg','wrorwgal', - 'wrordg','wrordgal', - 'wsadb','wsadbal', - 'wsadh','wsadhal', - 'wsadbz','wsadbzal', - 'wsadhz','wsadhzal', - 'wshufh','wshufhal', - 'wsllh','wsllhal', - 'wsllw','wsllwal', - 'wslld','wslldal', - 'wsllhg','wsllhgal', - 'wsllwg','wsllwgal', - 'wslldg','wslldgal', - 'wsrah','wsrahal', - 'wsraw','wsrawal', - 'wsrad','wsradal', - 'wsrahg','wsrahgal', - 'wsrawg','wsrawgal', - 'wsradg','wsradgal', - 'wsrlh','wsrlhal', - 'wsrlw','wsrlwal', - 'wsrld','wsrldal', - 'wsrlhg','wsrlhgal', - 'wsrlwg','wsrlwgal', - 'wsrldg','wsrldgal', - 'wstrb','wstrbal', - 'wstrh','wstrhal', - 'wstrw','wstrwal', - 'wstrd','wstrdal', - 'wsubb','wsubbal', - 'wsubh','wsubhal', - 'wsubw','wsubwal', - 'wsubbss','wsubbssal', - 'wsubhss','wsubhssal', - 'wsubwss','wsubwssal', - 'wsubbus','wsubbusal', - 'wsubhus','wsubhusal', - 'wsubwus','wsubwusal', - 'wsubaddhx','wsubaddhxal', - 'wunpckehsb','wunpckehsbal', - 'wunpckehsh','wunpckehshal', - 'wunpckehsw','wunpckehswal', - 'wunpckehub','wunpckehubal', - 'wunpckehuh','wunpckehuhal', - 'wunpckehuw','wunpckehuwal', - 'wunpckihb','wunpckihbal', - 'wunpckihh','wunpckihhal', - 'wunpckihw','wunpckihwal', - 'wunpckelsb','wunpckelsbal', - 'wunpckelsh','wunpckelshal', - 'wunpckelsw','wunpckelswal', - 'wunpckelub','wunpckelubal', - 'wunpckeluh','wunpckeluhal', - 'wunpckeluw','wunpckeluwal', - 'wunpckilb','wunpckilbal', - 'wunpckilh','wunpckilhal', - 'wunpckilw','wunpckilwal', - 'wxor','wxoral', - 'wzero','wzeroal' - ), - /* Conditional WMMX/WMMX2 SIMD Instructions */ - 18 => array( - /* Conditional WMMX/WMMX2 SIMD Instructions */ - 'tandcbeq','tandcbne','tandcbcs','tandcbhs','tandcbcc','tandcblo','tandcbmi','tandcbpl','tandcbvs','tandcbvc','tandcbhi','tandcbls','tandcbge','tandcblt','tandcbgt','tandcble', - 'tandcheq','tandchne','tandchcs','tandchhs','tandchcc','tandchlo','tandchmi','tandchpl','tandchvs','tandchvc','tandchhi','tandchls','tandchge','tandchlt','tandchgt','tandchle', - 'tandcweq','tandcwne','tandcwcs','tandcwhs','tandcwcc','tandcwlo','tandcwmi','tandcwpl','tandcwvs','tandcwvc','tandcwhi','tandcwls','tandcwge','tandcwlt','tandcwgt','tandcwle', - 'tbcstbeq','tbcstbne','tbcstbcs','tbcstbhs','tbcstbcc','tbcstblo','tbcstbmi','tbcstbpl','tbcstbvs','tbcstbvc','tbcstbhi','tbcstbls','tbcstbge','tbcstblt','tbcstbgt','tbcstble', - 'tbcstheq','tbcsthne','tbcsthcs','tbcsthhs','tbcsthcc','tbcsthlo','tbcsthmi','tbcsthpl','tbcsthvs','tbcsthvc','tbcsthhi','tbcsthls','tbcsthge','tbcsthlt','tbcsthgt','tbcsthle', - 'tbcstweq','tbcstwne','tbcstwcs','tbcstwhs','tbcstwcc','tbcstwlo','tbcstwmi','tbcstwpl','tbcstwvs','tbcstwvc','tbcstwhi','tbcstwls','tbcstwge','tbcstwlt','tbcstwgt','tbcstwle', - 'textrcbeq','textrcbne','textrcbcs','textrcbhs','textrcbcc','textrcblo','textrcbmi','textrcbpl','textrcbvs','textrcbvc','textrcbhi','textrcbls','textrcbge','textrcblt','textrcbgt','textrcble', - 'textrcheq','textrchne','textrchcs','textrchhs','textrchcc','textrchlo','textrchmi','textrchpl','textrchvs','textrchvc','textrchhi','textrchls','textrchge','textrchlt','textrchgt','textrchle', - 'textrcweq','textrcwne','textrcwcs','textrcwhs','textrcwcc','textrcwlo','textrcwmi','textrcwpl','textrcwvs','textrcwvc','textrcwhi','textrcwls','textrcwge','textrcwlt','textrcwgt','textrcwle', - 'textrmsbeq','textrmsbne','textrmsbcs','textrmsbhs','textrmsbcc','textrmsblo','textrmsbmi','textrmsbpl','textrmsbvs','textrmsbvc','textrmsbhi','textrmsbls','textrmsbge','textrmsblt','textrmsbgt','textrmsble', - 'textrmsheq','textrmshne','textrmshcs','textrmshhs','textrmshcc','textrmshlo','textrmshmi','textrmshpl','textrmshvs','textrmshvc','textrmshhi','textrmshls','textrmshge','textrmshlt','textrmshgt','textrmshle', - 'textrmsweq','textrmswne','textrmswcs','textrmswhs','textrmswcc','textrmswlo','textrmswmi','textrmswpl','textrmswvs','textrmswvc','textrmswhi','textrmswls','textrmswge','textrmswlt','textrmswgt','textrmswle', - 'textrmubeq','textrmubne','textrmubcs','textrmubhs','textrmubcc','textrmublo','textrmubmi','textrmubpl','textrmubvs','textrmubvc','textrmubhi','textrmubls','textrmubge','textrmublt','textrmubgt','textrmuble', - 'textrmuheq','textrmuhne','textrmuhcs','textrmuhhs','textrmuhcc','textrmuhlo','textrmuhmi','textrmuhpl','textrmuhvs','textrmuhvc','textrmuhhi','textrmuhls','textrmuhge','textrmuhlt','textrmuhgt','textrmuhle', - 'textrmuweq','textrmuwne','textrmuwcs','textrmuwhs','textrmuwcc','textrmuwlo','textrmuwmi','textrmuwpl','textrmuwvs','textrmuwvc','textrmuwhi','textrmuwls','textrmuwge','textrmuwlt','textrmuwgt','textrmuwle', - 'tinsrbeq','tinsrbne','tinsrbcs','tinsrbhs','tinsrbcc','tinsrblo','tinsrbmi','tinsrbpl','tinsrbvs','tinsrbvc','tinsrbhi','tinsrbls','tinsrbge','tinsrblt','tinsrbgt','tinsrble', - 'tinsrheq','tinsrhne','tinsrhcs','tinsrhhs','tinsrhcc','tinsrhlo','tinsrhmi','tinsrhpl','tinsrhvs','tinsrhvc','tinsrhhi','tinsrhls','tinsrhge','tinsrhlt','tinsrhgt','tinsrhle', - 'tinsrweq','tinsrwne','tinsrwcs','tinsrwhs','tinsrwcc','tinsrwlo','tinsrwmi','tinsrwpl','tinsrwvs','tinsrwvc','tinsrwhi','tinsrwls','tinsrwge','tinsrwlt','tinsrwgt','tinsrwle', - 'tmcreq','tmcrne','tmcrcs','tmcrhs','tmcrcc','tmcrlo','tmcrmi','tmcrpl','tmcrvs','tmcrvc','tmcrhi','tmcrls','tmcrge','tmcrlt','tmcrgt','tmcrle', - 'tmcrreq','tmcrrne','tmcrrcs','tmcrrhs','tmcrrcc','tmcrrlo','tmcrrmi','tmcrrpl','tmcrrvs','tmcrrvc','tmcrrhi','tmcrrls','tmcrrge','tmcrrlt','tmcrrgt','tmcrrle', - 'tmiaeq','tmiane','tmiacs','tmiahs','tmiacc','tmialo','tmiami','tmiapl','tmiavs','tmiavc','tmiahi','tmials','tmiage','tmialt','tmiagt','tmiale', - 'tmiapheq','tmiaphne','tmiaphcs','tmiaphhs','tmiaphcc','tmiaphlo','tmiaphmi','tmiaphpl','tmiaphvs','tmiaphvc','tmiaphhi','tmiaphls','tmiaphge','tmiaphlt','tmiaphgt','tmiaphle', - 'tmiabbeq','tmiabbne','tmiabbcs','tmiabbhs','tmiabbcc','tmiabblo','tmiabbmi','tmiabbpl','tmiabbvs','tmiabbvc','tmiabbhi','tmiabbls','tmiabbge','tmiabblt','tmiabbgt','tmiabble', - 'tmiabteq','tmiabtne','tmiabtcs','tmiabths','tmiabtcc','tmiabtlo','tmiabtmi','tmiabtpl','tmiabtvs','tmiabtvc','tmiabthi','tmiabtls','tmiabtge','tmiabtlt','tmiabtgt','tmiabtle', - 'tmiatbeq','tmiatbne','tmiatbcs','tmiatbhs','tmiatbcc','tmiatblo','tmiatbmi','tmiatbpl','tmiatbvs','tmiatbvc','tmiatbhi','tmiatbls','tmiatbge','tmiatblt','tmiatbgt','tmiatble', - 'tmiatteq','tmiattne','tmiattcs','tmiatths','tmiattcc','tmiattlo','tmiattmi','tmiattpl','tmiattvs','tmiattvc','tmiatthi','tmiattls','tmiattge','tmiattlt','tmiattgt','tmiattle', - 'tmovmskbeq','tmovmskbne','tmovmskbcs','tmovmskbhs','tmovmskbcc','tmovmskblo','tmovmskbmi','tmovmskbpl','tmovmskbvs','tmovmskbvc','tmovmskbhi','tmovmskbls','tmovmskbge','tmovmskblt','tmovmskbgt','tmovmskble', - 'tmovmskheq','tmovmskhne','tmovmskhcs','tmovmskhhs','tmovmskhcc','tmovmskhlo','tmovmskhmi','tmovmskhpl','tmovmskhvs','tmovmskhvc','tmovmskhhi','tmovmskhls','tmovmskhge','tmovmskhlt','tmovmskhgt','tmovmskhle', - 'tmovmskweq','tmovmskwne','tmovmskwcs','tmovmskwhs','tmovmskwcc','tmovmskwlo','tmovmskwmi','tmovmskwpl','tmovmskwvs','tmovmskwvc','tmovmskwhi','tmovmskwls','tmovmskwge','tmovmskwlt','tmovmskwgt','tmovmskwle', - 'tmrceq','tmrcne','tmrccs','tmrchs','tmrccc','tmrclo','tmrcmi','tmrcpl','tmrcvs','tmrcvc','tmrchi','tmrcls','tmrcge','tmrclt','tmrcgt','tmrcle', - 'tmrrceq','tmrrcne','tmrrccs','tmrrchs','tmrrccc','tmrrclo','tmrrcmi','tmrrcpl','tmrrcvs','tmrrcvc','tmrrchi','tmrrcls','tmrrcge','tmrrclt','tmrrcgt','tmrrcle', - 'torcbeq','torcbne','torcbcs','torcbhs','torcbcc','torcblo','torcbmi','torcbpl','torcbvs','torcbvc','torcbhi','torcbls','torcbge','torcblt','torcbgt','torcble', - 'torcheq','torchne','torchcs','torchhs','torchcc','torchlo','torchmi','torchpl','torchvs','torchvc','torchhi','torchls','torchge','torchlt','torchgt','torchle', - 'torcweq','torcwne','torcwcs','torcwhs','torcwcc','torcwlo','torcwmi','torcwpl','torcwvs','torcwvc','torcwhi','torcwls','torcwge','torcwlt','torcwgt','torcwle', - 'torvscbeq','torvscbne','torvscbcs','torvscbhs','torvscbcc','torvscblo','torvscbmi','torvscbpl','torvscbvs','torvscbvc','torvscbhi','torvscbls','torvscbge','torvscblt','torvscbgt','torvscble', - 'torvscheq','torvschne','torvschcs','torvschhs','torvschcc','torvschlo','torvschmi','torvschpl','torvschvs','torvschvc','torvschhi','torvschls','torvschge','torvschlt','torvschgt','torvschle', - 'torvscweq','torvscwne','torvscwcs','torvscwhs','torvscwcc','torvscwlo','torvscwmi','torvscwpl','torvscwvs','torvscwvc','torvscwhi','torvscwls','torvscwge','torvscwlt','torvscwgt','torvscwle', - 'wabsbeq','wabsbne','wabsbcs','wabsbhs','wabsbcc','wabsblo','wabsbmi','wabsbpl','wabsbvs','wabsbvc','wabsbhi','wabsbls','wabsbge','wabsblt','wabsbgt','wabsble', - 'wabsheq','wabshne','wabshcs','wabshhs','wabshcc','wabshlo','wabshmi','wabshpl','wabshvs','wabshvc','wabshhi','wabshls','wabshge','wabshlt','wabshgt','wabshle', - 'wabsweq','wabswne','wabswcs','wabswhs','wabswcc','wabswlo','wabswmi','wabswpl','wabswvs','wabswvc','wabswhi','wabswls','wabswge','wabswlt','wabswgt','wabswle', - 'wabsdiffbeq','wabsdiffbne','wabsdiffbcs','wabsdiffbhs','wabsdiffbcc','wabsdiffblo','wabsdiffbmi','wabsdiffbpl','wabsdiffbvs','wabsdiffbvc','wabsdiffbhi','wabsdiffbls','wabsdiffbge','wabsdiffblt','wabsdiffbgt','wabsdiffble', - 'wabsdiffheq','wabsdiffhne','wabsdiffhcs','wabsdiffhhs','wabsdiffhcc','wabsdiffhlo','wabsdiffhmi','wabsdiffhpl','wabsdiffhvs','wabsdiffhvc','wabsdiffhhi','wabsdiffhls','wabsdiffhge','wabsdiffhlt','wabsdiffhgt','wabsdiffhle', - 'wabsdiffweq','wabsdiffwne','wabsdiffwcs','wabsdiffwhs','wabsdiffwcc','wabsdiffwlo','wabsdiffwmi','wabsdiffwpl','wabsdiffwvs','wabsdiffwvc','wabsdiffwhi','wabsdiffwls','wabsdiffwge','wabsdiffwlt','wabsdiffwgt','wabsdiffwle', - 'waccbeq','waccbne','waccbcs','waccbhs','waccbcc','waccblo','waccbmi','waccbpl','waccbvs','waccbvc','waccbhi','waccbls','waccbge','waccblt','waccbgt','waccble', - 'waccheq','wacchne','wacchcs','wacchhs','wacchcc','wacchlo','wacchmi','wacchpl','wacchvs','wacchvc','wacchhi','wacchls','wacchge','wacchlt','wacchgt','wacchle', - 'waccweq','waccwne','waccwcs','waccwhs','waccwcc','waccwlo','waccwmi','waccwpl','waccwvs','waccwvc','waccwhi','waccwls','waccwge','waccwlt','waccwgt','waccwle', - 'waddbeq','waddbne','waddbcs','waddbhs','waddbcc','waddblo','waddbmi','waddbpl','waddbvs','waddbvc','waddbhi','waddbls','waddbge','waddblt','waddbgt','waddble', - 'waddheq','waddhne','waddhcs','waddhhs','waddhcc','waddhlo','waddhmi','waddhpl','waddhvs','waddhvc','waddhhi','waddhls','waddhge','waddhlt','waddhgt','waddhle', - 'waddweq','waddwne','waddwcs','waddwhs','waddwcc','waddwlo','waddwmi','waddwpl','waddwvs','waddwvc','waddwhi','waddwls','waddwge','waddwlt','waddwgt','waddwle', - 'waddbceq','waddbcne','waddbccs','waddbchs','waddbccc','waddbclo','waddbcmi','waddbcpl','waddbcvs','waddbcvc','waddbchi','waddbcls','waddbcge','waddbclt','waddbcgt','waddbcle', - 'waddhceq','waddhcne','waddhccs','waddhchs','waddhccc','waddhclo','waddhcmi','waddhcpl','waddhcvs','waddhcvc','waddhchi','waddhcls','waddhcge','waddhclt','waddhcgt','waddhcle', - 'waddwceq','waddwcne','waddwccs','waddwchs','waddwccc','waddwclo','waddwcmi','waddwcpl','waddwcvs','waddwcvc','waddwchi','waddwcls','waddwcge','waddwclt','waddwcgt','waddwcle', - 'waddbsseq','waddbssne','waddbsscs','waddbsshs','waddbsscc','waddbsslo','waddbssmi','waddbsspl','waddbssvs','waddbssvc','waddbsshi','waddbssls','waddbssge','waddbsslt','waddbssgt','waddbssle', - 'waddhsseq','waddhssne','waddhsscs','waddhsshs','waddhsscc','waddhsslo','waddhssmi','waddhsspl','waddhssvs','waddhssvc','waddhsshi','waddhssls','waddhssge','waddhsslt','waddhssgt','waddhssle', - 'waddwsseq','waddwssne','waddwsscs','waddwsshs','waddwsscc','waddwsslo','waddwssmi','waddwsspl','waddwssvs','waddwssvc','waddwsshi','waddwssls','waddwssge','waddwsslt','waddwssgt','waddwssle', - 'waddbuseq','waddbusne','waddbuscs','waddbushs','waddbuscc','waddbuslo','waddbusmi','waddbuspl','waddbusvs','waddbusvc','waddbushi','waddbusls','waddbusge','waddbuslt','waddbusgt','waddbusle', - 'waddhuseq','waddhusne','waddhuscs','waddhushs','waddhuscc','waddhuslo','waddhusmi','waddhuspl','waddhusvs','waddhusvc','waddhushi','waddhusls','waddhusge','waddhuslt','waddhusgt','waddhusle', - 'waddwuseq','waddwusne','waddwuscs','waddwushs','waddwuscc','waddwuslo','waddwusmi','waddwuspl','waddwusvs','waddwusvc','waddwushi','waddwusls','waddwusge','waddwuslt','waddwusgt','waddwusle', - 'waddsubhxeq','waddsubhxne','waddsubhxcs','waddsubhxhs','waddsubhxcc','waddsubhxlo','waddsubhxmi','waddsubhxpl','waddsubhxvs','waddsubhxvc','waddsubhxhi','waddsubhxls','waddsubhxge','waddsubhxlt','waddsubhxgt','waddsubhxle', - 'walignieq','walignine','walignics','walignihs','walignicc','walignilo','walignimi','walignipl','walignivs','walignivc','walignihi','walignils','walignige','walignilt','walignigt','walignile', - 'walignr0eq','walignr0ne','walignr0cs','walignr0hs','walignr0cc','walignr0lo','walignr0mi','walignr0pl','walignr0vs','walignr0vc','walignr0hi','walignr0ls','walignr0ge','walignr0lt','walignr0gt','walignr0le', - 'walignr1eq','walignr1ne','walignr1cs','walignr1hs','walignr1cc','walignr1lo','walignr1mi','walignr1pl','walignr1vs','walignr1vc','walignr1hi','walignr1ls','walignr1ge','walignr1lt','walignr1gt','walignr1le', - 'walignr2eq','walignr2ne','walignr2cs','walignr2hs','walignr2cc','walignr2lo','walignr2mi','walignr2pl','walignr2vs','walignr2vc','walignr2hi','walignr2ls','walignr2ge','walignr2lt','walignr2gt','walignr2le', - 'walignr3eq','walignr3ne','walignr3cs','walignr3hs','walignr3cc','walignr3lo','walignr3mi','walignr3pl','walignr3vs','walignr3vc','walignr3hi','walignr3ls','walignr3ge','walignr3lt','walignr3gt','walignr3le', - 'wandeq','wandne','wandcs','wandhs','wandcc','wandlo','wandmi','wandpl','wandvs','wandvc','wandhi','wandls','wandge','wandlt','wandgt','wandle', - 'wandneq','wandnne','wandncs','wandnhs','wandncc','wandnlo','wandnmi','wandnpl','wandnvs','wandnvc','wandnhi','wandnls','wandnge','wandnlt','wandngt','wandnle', - 'wavg2beq','wavg2bne','wavg2bcs','wavg2bhs','wavg2bcc','wavg2blo','wavg2bmi','wavg2bpl','wavg2bvs','wavg2bvc','wavg2bhi','wavg2bls','wavg2bge','wavg2blt','wavg2bgt','wavg2ble', - 'wavg2heq','wavg2hne','wavg2hcs','wavg2hhs','wavg2hcc','wavg2hlo','wavg2hmi','wavg2hpl','wavg2hvs','wavg2hvc','wavg2hhi','wavg2hls','wavg2hge','wavg2hlt','wavg2hgt','wavg2hle', - 'wavg2breq','wavg2brne','wavg2brcs','wavg2brhs','wavg2brcc','wavg2brlo','wavg2brmi','wavg2brpl','wavg2brvs','wavg2brvc','wavg2brhi','wavg2brls','wavg2brge','wavg2brlt','wavg2brgt','wavg2brle', - 'wavg2hreq','wavg2hrne','wavg2hrcs','wavg2hrhs','wavg2hrcc','wavg2hrlo','wavg2hrmi','wavg2hrpl','wavg2hrvs','wavg2hrvc','wavg2hrhi','wavg2hrls','wavg2hrge','wavg2hrlt','wavg2hrgt','wavg2hrle', - 'wavg4eq','wavg4ne','wavg4cs','wavg4hs','wavg4cc','wavg4lo','wavg4mi','wavg4pl','wavg4vs','wavg4vc','wavg4hi','wavg4ls','wavg4ge','wavg4lt','wavg4gt','wavg4le', - 'wavg4req','wavg4rne','wavg4rcs','wavg4rhs','wavg4rcc','wavg4rlo','wavg4rmi','wavg4rpl','wavg4rvs','wavg4rvc','wavg4rhi','wavg4rls','wavg4rge','wavg4rlt','wavg4rgt','wavg4rle', - 'wcmpeqbeq','wcmpeqbne','wcmpeqbcs','wcmpeqbhs','wcmpeqbcc','wcmpeqblo','wcmpeqbmi','wcmpeqbpl','wcmpeqbvs','wcmpeqbvc','wcmpeqbhi','wcmpeqbls','wcmpeqbge','wcmpeqblt','wcmpeqbgt','wcmpeqble', - 'wcmpeqheq','wcmpeqhne','wcmpeqhcs','wcmpeqhhs','wcmpeqhcc','wcmpeqhlo','wcmpeqhmi','wcmpeqhpl','wcmpeqhvs','wcmpeqhvc','wcmpeqhhi','wcmpeqhls','wcmpeqhge','wcmpeqhlt','wcmpeqhgt','wcmpeqhle', - 'wcmpeqweq','wcmpeqwne','wcmpeqwcs','wcmpeqwhs','wcmpeqwcc','wcmpeqwlo','wcmpeqwmi','wcmpeqwpl','wcmpeqwvs','wcmpeqwvc','wcmpeqwhi','wcmpeqwls','wcmpeqwge','wcmpeqwlt','wcmpeqwgt','wcmpeqwle', - 'wcmpgtsbeq','wcmpgtsbne','wcmpgtsbcs','wcmpgtsbhs','wcmpgtsbcc','wcmpgtsblo','wcmpgtsbmi','wcmpgtsbpl','wcmpgtsbvs','wcmpgtsbvc','wcmpgtsbhi','wcmpgtsbls','wcmpgtsbge','wcmpgtsblt','wcmpgtsbgt','wcmpgtsble', - 'wcmpgtsheq','wcmpgtshne','wcmpgtshcs','wcmpgtshhs','wcmpgtshcc','wcmpgtshlo','wcmpgtshmi','wcmpgtshpl','wcmpgtshvs','wcmpgtshvc','wcmpgtshhi','wcmpgtshls','wcmpgtshge','wcmpgtshlt','wcmpgtshgt','wcmpgtshle', - 'wcmpgtsweq','wcmpgtswne','wcmpgtswcs','wcmpgtswhs','wcmpgtswcc','wcmpgtswlo','wcmpgtswmi','wcmpgtswpl','wcmpgtswvs','wcmpgtswvc','wcmpgtswhi','wcmpgtswls','wcmpgtswge','wcmpgtswlt','wcmpgtswgt','wcmpgtswle', - 'wcmpgtubeq','wcmpgtubne','wcmpgtubcs','wcmpgtubhs','wcmpgtubcc','wcmpgtublo','wcmpgtubmi','wcmpgtubpl','wcmpgtubvs','wcmpgtubvc','wcmpgtubhi','wcmpgtubls','wcmpgtubge','wcmpgtublt','wcmpgtubgt','wcmpgtuble', - 'wcmpgtuheq','wcmpgtuhne','wcmpgtuhcs','wcmpgtuhhs','wcmpgtuhcc','wcmpgtuhlo','wcmpgtuhmi','wcmpgtuhpl','wcmpgtuhvs','wcmpgtuhvc','wcmpgtuhhi','wcmpgtuhls','wcmpgtuhge','wcmpgtuhlt','wcmpgtuhgt','wcmpgtuhle', - 'wcmpgtuweq','wcmpgtuwne','wcmpgtuwcs','wcmpgtuwhs','wcmpgtuwcc','wcmpgtuwlo','wcmpgtuwmi','wcmpgtuwpl','wcmpgtuwvs','wcmpgtuwvc','wcmpgtuwhi','wcmpgtuwls','wcmpgtuwge','wcmpgtuwlt','wcmpgtuwgt','wcmpgtuwle', - 'wldrbeq','wldrbne','wldrbcs','wldrbhs','wldrbcc','wldrblo','wldrbmi','wldrbpl','wldrbvs','wldrbvc','wldrbhi','wldrbls','wldrbge','wldrblt','wldrbgt','wldrble', - 'wldrheq','wldrhne','wldrhcs','wldrhhs','wldrhcc','wldrhlo','wldrhmi','wldrhpl','wldrhvs','wldrhvc','wldrhhi','wldrhls','wldrhge','wldrhlt','wldrhgt','wldrhle', - 'wldrweq','wldrwne','wldrwcs','wldrwhs','wldrwcc','wldrwlo','wldrwmi','wldrwpl','wldrwvs','wldrwvc','wldrwhi','wldrwls','wldrwge','wldrwlt','wldrwgt','wldrwle', - 'wldrdeq','wldrdne','wldrdcs','wldrdhs','wldrdcc','wldrdlo','wldrdmi','wldrdpl','wldrdvs','wldrdvc','wldrdhi','wldrdls','wldrdge','wldrdlt','wldrdgt','wldrdle', - 'wmacseq','wmacsne','wmacscs','wmacshs','wmacscc','wmacslo','wmacsmi','wmacspl','wmacsvs','wmacsvc','wmacshi','wmacsls','wmacsge','wmacslt','wmacsgt','wmacsle', - 'wmacueq','wmacune','wmacucs','wmacuhs','wmacucc','wmaculo','wmacumi','wmacupl','wmacuvs','wmacuvc','wmacuhi','wmaculs','wmacuge','wmacult','wmacugt','wmacule', - 'wmacszeq','wmacszne','wmacszcs','wmacszhs','wmacszcc','wmacszlo','wmacszmi','wmacszpl','wmacszvs','wmacszvc','wmacszhi','wmacszls','wmacszge','wmacszlt','wmacszgt','wmacszle', - 'wmacuzeq','wmacuzne','wmacuzcs','wmacuzhs','wmacuzcc','wmacuzlo','wmacuzmi','wmacuzpl','wmacuzvs','wmacuzvc','wmacuzhi','wmacuzls','wmacuzge','wmacuzlt','wmacuzgt','wmacuzle', - 'wmaddseq','wmaddsne','wmaddscs','wmaddshs','wmaddscc','wmaddslo','wmaddsmi','wmaddspl','wmaddsvs','wmaddsvc','wmaddshi','wmaddsls','wmaddsge','wmaddslt','wmaddsgt','wmaddsle', - 'wmaddueq','wmaddune','wmadducs','wmadduhs','wmadducc','wmaddulo','wmaddumi','wmaddupl','wmadduvs','wmadduvc','wmadduhi','wmadduls','wmadduge','wmaddult','wmaddugt','wmaddule', - 'wmaddsxeq','wmaddsxne','wmaddsxcs','wmaddsxhs','wmaddsxcc','wmaddsxlo','wmaddsxmi','wmaddsxpl','wmaddsxvs','wmaddsxvc','wmaddsxhi','wmaddsxls','wmaddsxge','wmaddsxlt','wmaddsxgt','wmaddsxle', - 'wmadduxeq','wmadduxne','wmadduxcs','wmadduxhs','wmadduxcc','wmadduxlo','wmadduxmi','wmadduxpl','wmadduxvs','wmadduxvc','wmadduxhi','wmadduxls','wmadduxge','wmadduxlt','wmadduxgt','wmadduxle', - 'wmaddsneq','wmaddsnne','wmaddsncs','wmaddsnhs','wmaddsncc','wmaddsnlo','wmaddsnmi','wmaddsnpl','wmaddsnvs','wmaddsnvc','wmaddsnhi','wmaddsnls','wmaddsnge','wmaddsnlt','wmaddsngt','wmaddsnle', - 'wmadduneq','wmaddunne','wmadduncs','wmaddunhs','wmadduncc','wmaddunlo','wmaddunmi','wmaddunpl','wmaddunvs','wmaddunvc','wmaddunhi','wmaddunls','wmaddunge','wmaddunlt','wmaddungt','wmaddunle', - 'wmaxsbeq','wmaxsbne','wmaxsbcs','wmaxsbhs','wmaxsbcc','wmaxsblo','wmaxsbmi','wmaxsbpl','wmaxsbvs','wmaxsbvc','wmaxsbhi','wmaxsbls','wmaxsbge','wmaxsblt','wmaxsbgt','wmaxsble', - 'wmaxsheq','wmaxshne','wmaxshcs','wmaxshhs','wmaxshcc','wmaxshlo','wmaxshmi','wmaxshpl','wmaxshvs','wmaxshvc','wmaxshhi','wmaxshls','wmaxshge','wmaxshlt','wmaxshgt','wmaxshle', - 'wmaxsweq','wmaxswne','wmaxswcs','wmaxswhs','wmaxswcc','wmaxswlo','wmaxswmi','wmaxswpl','wmaxswvs','wmaxswvc','wmaxswhi','wmaxswls','wmaxswge','wmaxswlt','wmaxswgt','wmaxswle', - 'wmaxubeq','wmaxubne','wmaxubcs','wmaxubhs','wmaxubcc','wmaxublo','wmaxubmi','wmaxubpl','wmaxubvs','wmaxubvc','wmaxubhi','wmaxubls','wmaxubge','wmaxublt','wmaxubgt','wmaxuble', - 'wmaxuheq','wmaxuhne','wmaxuhcs','wmaxuhhs','wmaxuhcc','wmaxuhlo','wmaxuhmi','wmaxuhpl','wmaxuhvs','wmaxuhvc','wmaxuhhi','wmaxuhls','wmaxuhge','wmaxuhlt','wmaxuhgt','wmaxuhle', - 'wmaxuweq','wmaxuwne','wmaxuwcs','wmaxuwhs','wmaxuwcc','wmaxuwlo','wmaxuwmi','wmaxuwpl','wmaxuwvs','wmaxuwvc','wmaxuwhi','wmaxuwls','wmaxuwge','wmaxuwlt','wmaxuwgt','wmaxuwle', - 'wmergeeq','wmergene','wmergecs','wmergehs','wmergecc','wmergelo','wmergemi','wmergepl','wmergevs','wmergevc','wmergehi','wmergels','wmergege','wmergelt','wmergegt','wmergele', - 'wmiabbeq','wmiabbne','wmiabbcs','wmiabbhs','wmiabbcc','wmiabblo','wmiabbmi','wmiabbpl','wmiabbvs','wmiabbvc','wmiabbhi','wmiabbls','wmiabbge','wmiabblt','wmiabbgt','wmiabble', - 'wmiabteq','wmiabtne','wmiabtcs','wmiabths','wmiabtcc','wmiabtlo','wmiabtmi','wmiabtpl','wmiabtvs','wmiabtvc','wmiabthi','wmiabtls','wmiabtge','wmiabtlt','wmiabtgt','wmiabtle', - 'wmiatbeq','wmiatbne','wmiatbcs','wmiatbhs','wmiatbcc','wmiatblo','wmiatbmi','wmiatbpl','wmiatbvs','wmiatbvc','wmiatbhi','wmiatbls','wmiatbge','wmiatblt','wmiatbgt','wmiatble', - 'wmiatteq','wmiattne','wmiattcs','wmiatths','wmiattcc','wmiattlo','wmiattmi','wmiattpl','wmiattvs','wmiattvc','wmiatthi','wmiattls','wmiattge','wmiattlt','wmiattgt','wmiattle', - 'wmiabbneq','wmiabbnne','wmiabbncs','wmiabbnhs','wmiabbncc','wmiabbnlo','wmiabbnmi','wmiabbnpl','wmiabbnvs','wmiabbnvc','wmiabbnhi','wmiabbnls','wmiabbnge','wmiabbnlt','wmiabbngt','wmiabbnle', - 'wmiabtneq','wmiabtnne','wmiabtncs','wmiabtnhs','wmiabtncc','wmiabtnlo','wmiabtnmi','wmiabtnpl','wmiabtnvs','wmiabtnvc','wmiabtnhi','wmiabtnls','wmiabtnge','wmiabtnlt','wmiabtngt','wmiabtnle', - 'wmiatbneq','wmiatbnne','wmiatbncs','wmiatbnhs','wmiatbncc','wmiatbnlo','wmiatbnmi','wmiatbnpl','wmiatbnvs','wmiatbnvc','wmiatbnhi','wmiatbnls','wmiatbnge','wmiatbnlt','wmiatbngt','wmiatbnle', - 'wmiattneq','wmiattnne','wmiattncs','wmiattnhs','wmiattncc','wmiattnlo','wmiattnmi','wmiattnpl','wmiattnvs','wmiattnvc','wmiattnhi','wmiattnls','wmiattnge','wmiattnlt','wmiattngt','wmiattnle', - 'wmiawbbeq','wmiawbbne','wmiawbbcs','wmiawbbhs','wmiawbbcc','wmiawbblo','wmiawbbmi','wmiawbbpl','wmiawbbvs','wmiawbbvc','wmiawbbhi','wmiawbbls','wmiawbbge','wmiawbblt','wmiawbbgt','wmiawbble', - 'wmiawbteq','wmiawbtne','wmiawbtcs','wmiawbths','wmiawbtcc','wmiawbtlo','wmiawbtmi','wmiawbtpl','wmiawbtvs','wmiawbtvc','wmiawbthi','wmiawbtls','wmiawbtge','wmiawbtlt','wmiawbtgt','wmiawbtle', - 'wmiawtbeq','wmiawtbne','wmiawtbcs','wmiawtbhs','wmiawtbcc','wmiawtblo','wmiawtbmi','wmiawtbpl','wmiawtbvs','wmiawtbvc','wmiawtbhi','wmiawtbls','wmiawtbge','wmiawtblt','wmiawtbgt','wmiawtble', - 'wmiawtteq','wmiawttne','wmiawttcs','wmiawtths','wmiawttcc','wmiawttlo','wmiawttmi','wmiawttpl','wmiawttvs','wmiawttvc','wmiawtthi','wmiawttls','wmiawttge','wmiawttlt','wmiawttgt','wmiawttle', - 'wmiawbbneq','wmiawbbnne','wmiawbbncs','wmiawbbnhs','wmiawbbncc','wmiawbbnlo','wmiawbbnmi','wmiawbbnpl','wmiawbbnvs','wmiawbbnvc','wmiawbbnhi','wmiawbbnls','wmiawbbnge','wmiawbbnlt','wmiawbbngt','wmiawbbnle', - 'wmiawbtneq','wmiawbtnne','wmiawbtncs','wmiawbtnhs','wmiawbtncc','wmiawbtnlo','wmiawbtnmi','wmiawbtnpl','wmiawbtnvs','wmiawbtnvc','wmiawbtnhi','wmiawbtnls','wmiawbtnge','wmiawbtnlt','wmiawbtngt','wmiawbtnle', - 'wmiawtbneq','wmiawtbnne','wmiawtbncs','wmiawtbnhs','wmiawtbncc','wmiawtbnlo','wmiawtbnmi','wmiawtbnpl','wmiawtbnvs','wmiawtbnvc','wmiawtbnhi','wmiawtbnls','wmiawtbnge','wmiawtbnlt','wmiawtbngt','wmiawtbnle', - 'wmiawttneq','wmiawttnne','wmiawttncs','wmiawttnhs','wmiawttncc','wmiawttnlo','wmiawttnmi','wmiawttnpl','wmiawttnvs','wmiawttnvc','wmiawttnhi','wmiawttnls','wmiawttnge','wmiawttnlt','wmiawttngt','wmiawttnle', - 'wminsbeq','wminsbne','wminsbcs','wminsbhs','wminsbcc','wminsblo','wminsbmi','wminsbpl','wminsbvs','wminsbvc','wminsbhi','wminsbls','wminsbge','wminsblt','wminsbgt','wminsble', - 'wminsheq','wminshne','wminshcs','wminshhs','wminshcc','wminshlo','wminshmi','wminshpl','wminshvs','wminshvc','wminshhi','wminshls','wminshge','wminshlt','wminshgt','wminshle', - 'wminsweq','wminswne','wminswcs','wminswhs','wminswcc','wminswlo','wminswmi','wminswpl','wminswvs','wminswvc','wminswhi','wminswls','wminswge','wminswlt','wminswgt','wminswle', - 'wminubeq','wminubne','wminubcs','wminubhs','wminubcc','wminublo','wminubmi','wminubpl','wminubvs','wminubvc','wminubhi','wminubls','wminubge','wminublt','wminubgt','wminuble', - 'wminuheq','wminuhne','wminuhcs','wminuhhs','wminuhcc','wminuhlo','wminuhmi','wminuhpl','wminuhvs','wminuhvc','wminuhhi','wminuhls','wminuhge','wminuhlt','wminuhgt','wminuhle', - 'wminuweq','wminuwne','wminuwcs','wminuwhs','wminuwcc','wminuwlo','wminuwmi','wminuwpl','wminuwvs','wminuwvc','wminuwhi','wminuwls','wminuwge','wminuwlt','wminuwgt','wminuwle', - 'wmoveq','wmovne','wmovcs','wmovhs','wmovcc','wmovlo','wmovmi','wmovpl','wmovvs','wmovvc','wmovhi','wmovls','wmovge','wmovlt','wmovgt','wmovle', - 'wmulsmeq','wmulsmne','wmulsmcs','wmulsmhs','wmulsmcc','wmulsmlo','wmulsmmi','wmulsmpl','wmulsmvs','wmulsmvc','wmulsmhi','wmulsmls','wmulsmge','wmulsmlt','wmulsmgt','wmulsmle', - 'wmulsleq','wmulslne','wmulslcs','wmulslhs','wmulslcc','wmulsllo','wmulslmi','wmulslpl','wmulslvs','wmulslvc','wmulslhi','wmulslls','wmulslge','wmulsllt','wmulslgt','wmulslle', - 'wmulumeq','wmulumne','wmulumcs','wmulumhs','wmulumcc','wmulumlo','wmulummi','wmulumpl','wmulumvs','wmulumvc','wmulumhi','wmulumls','wmulumge','wmulumlt','wmulumgt','wmulumle', - 'wmululeq','wmululne','wmululcs','wmululhs','wmululcc','wmulullo','wmululmi','wmululpl','wmululvs','wmululvc','wmululhi','wmululls','wmululge','wmulullt','wmululgt','wmululle', - 'wmulsmreq','wmulsmrne','wmulsmrcs','wmulsmrhs','wmulsmrcc','wmulsmrlo','wmulsmrmi','wmulsmrpl','wmulsmrvs','wmulsmrvc','wmulsmrhi','wmulsmrls','wmulsmrge','wmulsmrlt','wmulsmrgt','wmulsmrle', - 'wmulslreq','wmulslrne','wmulslrcs','wmulslrhs','wmulslrcc','wmulslrlo','wmulslrmi','wmulslrpl','wmulslrvs','wmulslrvc','wmulslrhi','wmulslrls','wmulslrge','wmulslrlt','wmulslrgt','wmulslrle', - 'wmulumreq','wmulumrne','wmulumrcs','wmulumrhs','wmulumrcc','wmulumrlo','wmulumrmi','wmulumrpl','wmulumrvs','wmulumrvc','wmulumrhi','wmulumrls','wmulumrge','wmulumrlt','wmulumrgt','wmulumrle', - 'wmululreq','wmululrne','wmululrcs','wmululrhs','wmululrcc','wmululrlo','wmululrmi','wmululrpl','wmululrvs','wmululrvc','wmululrhi','wmululrls','wmululrge','wmululrlt','wmululrgt','wmululrle', - 'wmulwumeq','wmulwumne','wmulwumcs','wmulwumhs','wmulwumcc','wmulwumlo','wmulwummi','wmulwumpl','wmulwumvs','wmulwumvc','wmulwumhi','wmulwumls','wmulwumge','wmulwumlt','wmulwumgt','wmulwumle', - 'wmulwsmeq','wmulwsmne','wmulwsmcs','wmulwsmhs','wmulwsmcc','wmulwsmlo','wmulwsmmi','wmulwsmpl','wmulwsmvs','wmulwsmvc','wmulwsmhi','wmulwsmls','wmulwsmge','wmulwsmlt','wmulwsmgt','wmulwsmle', - 'wmulwleq','wmulwlne','wmulwlcs','wmulwlhs','wmulwlcc','wmulwllo','wmulwlmi','wmulwlpl','wmulwlvs','wmulwlvc','wmulwlhi','wmulwlls','wmulwlge','wmulwllt','wmulwlgt','wmulwlle', - 'wmulwumreq','wmulwumrne','wmulwumrcs','wmulwumrhs','wmulwumrcc','wmulwumrlo','wmulwumrmi','wmulwumrpl','wmulwumrvs','wmulwumrvc','wmulwumrhi','wmulwumrls','wmulwumrge','wmulwumrlt','wmulwumrgt','wmulwumrle', - 'wmulwsmreq','wmulwsmrne','wmulwsmrcs','wmulwsmrhs','wmulwsmrcc','wmulwsmrlo','wmulwsmrmi','wmulwsmrpl','wmulwsmrvs','wmulwsmrvc','wmulwsmrhi','wmulwsmrls','wmulwsmrge','wmulwsmrlt','wmulwsmrgt','wmulwsmrle', - 'woreq','worne','worcs','worhs','worcc','worlo','wormi','worpl','worvs','worvc','worhi','worls','worge','worlt','worgt','worle', - 'wpackhsseq','wpackhssne','wpackhsscs','wpackhsshs','wpackhsscc','wpackhsslo','wpackhssmi','wpackhsspl','wpackhssvs','wpackhssvc','wpackhsshi','wpackhssls','wpackhssge','wpackhsslt','wpackhssgt','wpackhssle', - 'wpackwsseq','wpackwssne','wpackwsscs','wpackwsshs','wpackwsscc','wpackwsslo','wpackwssmi','wpackwsspl','wpackwssvs','wpackwssvc','wpackwsshi','wpackwssls','wpackwssge','wpackwsslt','wpackwssgt','wpackwssle', - 'wpackdsseq','wpackdssne','wpackdsscs','wpackdsshs','wpackdsscc','wpackdsslo','wpackdssmi','wpackdsspl','wpackdssvs','wpackdssvc','wpackdsshi','wpackdssls','wpackdssge','wpackdsslt','wpackdssgt','wpackdssle', - 'wpackhuseq','wpackhusne','wpackhuscs','wpackhushs','wpackhuscc','wpackhuslo','wpackhusmi','wpackhuspl','wpackhusvs','wpackhusvc','wpackhushi','wpackhusls','wpackhusge','wpackhuslt','wpackhusgt','wpackhusle', - 'wpackwuseq','wpackwusne','wpackwuscs','wpackwushs','wpackwuscc','wpackwuslo','wpackwusmi','wpackwuspl','wpackwusvs','wpackwusvc','wpackwushi','wpackwusls','wpackwusge','wpackwuslt','wpackwusgt','wpackwusle', - 'wpackduseq','wpackdusne','wpackduscs','wpackdushs','wpackduscc','wpackduslo','wpackdusmi','wpackduspl','wpackdusvs','wpackdusvc','wpackdushi','wpackdusls','wpackdusge','wpackduslt','wpackdusgt','wpackdusle', - 'wqmiabbeq','wqmiabbne','wqmiabbcs','wqmiabbhs','wqmiabbcc','wqmiabblo','wqmiabbmi','wqmiabbpl','wqmiabbvs','wqmiabbvc','wqmiabbhi','wqmiabbls','wqmiabbge','wqmiabblt','wqmiabbgt','wqmiabble', - 'wqmiabteq','wqmiabtne','wqmiabtcs','wqmiabths','wqmiabtcc','wqmiabtlo','wqmiabtmi','wqmiabtpl','wqmiabtvs','wqmiabtvc','wqmiabthi','wqmiabtls','wqmiabtge','wqmiabtlt','wqmiabtgt','wqmiabtle', - 'wqmiatbeq','wqmiatbne','wqmiatbcs','wqmiatbhs','wqmiatbcc','wqmiatblo','wqmiatbmi','wqmiatbpl','wqmiatbvs','wqmiatbvc','wqmiatbhi','wqmiatbls','wqmiatbge','wqmiatblt','wqmiatbgt','wqmiatble', - 'wqmiatteq','wqmiattne','wqmiattcs','wqmiatths','wqmiattcc','wqmiattlo','wqmiattmi','wqmiattpl','wqmiattvs','wqmiattvc','wqmiatthi','wqmiattls','wqmiattge','wqmiattlt','wqmiattgt','wqmiattle', - 'wqmiabbneq','wqmiabbnne','wqmiabbncs','wqmiabbnhs','wqmiabbncc','wqmiabbnlo','wqmiabbnmi','wqmiabbnpl','wqmiabbnvs','wqmiabbnvc','wqmiabbnhi','wqmiabbnls','wqmiabbnge','wqmiabbnlt','wqmiabbngt','wqmiabbnle', - 'wqmiabtneq','wqmiabtnne','wqmiabtncs','wqmiabtnhs','wqmiabtncc','wqmiabtnlo','wqmiabtnmi','wqmiabtnpl','wqmiabtnvs','wqmiabtnvc','wqmiabtnhi','wqmiabtnls','wqmiabtnge','wqmiabtnlt','wqmiabtngt','wqmiabtnle', - 'wqmiatbneq','wqmiatbnne','wqmiatbncs','wqmiatbnhs','wqmiatbncc','wqmiatbnlo','wqmiatbnmi','wqmiatbnpl','wqmiatbnvs','wqmiatbnvc','wqmiatbnhi','wqmiatbnls','wqmiatbnge','wqmiatbnlt','wqmiatbngt','wqmiatbnle', - 'wqmiattneq','wqmiattnne','wqmiattncs','wqmiattnhs','wqmiattncc','wqmiattnlo','wqmiattnmi','wqmiattnpl','wqmiattnvs','wqmiattnvc','wqmiattnhi','wqmiattnls','wqmiattnge','wqmiattnlt','wqmiattngt','wqmiattnle', - 'wqmulmeq','wqmulmne','wqmulmcs','wqmulmhs','wqmulmcc','wqmulmlo','wqmulmmi','wqmulmpl','wqmulmvs','wqmulmvc','wqmulmhi','wqmulmls','wqmulmge','wqmulmlt','wqmulmgt','wqmulmle', - 'wqmulmreq','wqmulmrne','wqmulmrcs','wqmulmrhs','wqmulmrcc','wqmulmrlo','wqmulmrmi','wqmulmrpl','wqmulmrvs','wqmulmrvc','wqmulmrhi','wqmulmrls','wqmulmrge','wqmulmrlt','wqmulmrgt','wqmulmrle', - 'wqmulwmeq','wqmulwmne','wqmulwmcs','wqmulwmhs','wqmulwmcc','wqmulwmlo','wqmulwmmi','wqmulwmpl','wqmulwmvs','wqmulwmvc','wqmulwmhi','wqmulwmls','wqmulwmge','wqmulwmlt','wqmulwmgt','wqmulwmle', - 'wqmulwmreq','wqmulwmrne','wqmulwmrcs','wqmulwmrhs','wqmulwmrcc','wqmulwmrlo','wqmulwmrmi','wqmulwmrpl','wqmulwmrvs','wqmulwmrvc','wqmulwmrhi','wqmulwmrls','wqmulwmrge','wqmulwmrlt','wqmulwmrgt','wqmulwmrle', - 'wrorheq','wrorhne','wrorhcs','wrorhhs','wrorhcc','wrorhlo','wrorhmi','wrorhpl','wrorhvs','wrorhvc','wrorhhi','wrorhls','wrorhge','wrorhlt','wrorhgt','wrorhle', - 'wrorweq','wrorwne','wrorwcs','wrorwhs','wrorwcc','wrorwlo','wrorwmi','wrorwpl','wrorwvs','wrorwvc','wrorwhi','wrorwls','wrorwge','wrorwlt','wrorwgt','wrorwle', - 'wrordeq','wrordne','wrordcs','wrordhs','wrordcc','wrordlo','wrordmi','wrordpl','wrordvs','wrordvc','wrordhi','wrordls','wrordge','wrordlt','wrordgt','wrordle', - 'wrorhgeq','wrorhgne','wrorhgcs','wrorhghs','wrorhgcc','wrorhglo','wrorhgmi','wrorhgpl','wrorhgvs','wrorhgvc','wrorhghi','wrorhgls','wrorhgge','wrorhglt','wrorhggt','wrorhgle', - 'wrorwgeq','wrorwgne','wrorwgcs','wrorwghs','wrorwgcc','wrorwglo','wrorwgmi','wrorwgpl','wrorwgvs','wrorwgvc','wrorwghi','wrorwgls','wrorwgge','wrorwglt','wrorwggt','wrorwgle', - 'wrordgeq','wrordgne','wrordgcs','wrordghs','wrordgcc','wrordglo','wrordgmi','wrordgpl','wrordgvs','wrordgvc','wrordghi','wrordgls','wrordgge','wrordglt','wrordggt','wrordgle', - 'wsadbeq','wsadbne','wsadbcs','wsadbhs','wsadbcc','wsadblo','wsadbmi','wsadbpl','wsadbvs','wsadbvc','wsadbhi','wsadbls','wsadbge','wsadblt','wsadbgt','wsadble', - 'wsadheq','wsadhne','wsadhcs','wsadhhs','wsadhcc','wsadhlo','wsadhmi','wsadhpl','wsadhvs','wsadhvc','wsadhhi','wsadhls','wsadhge','wsadhlt','wsadhgt','wsadhle', - 'wsadbzeq','wsadbzne','wsadbzcs','wsadbzhs','wsadbzcc','wsadbzlo','wsadbzmi','wsadbzpl','wsadbzvs','wsadbzvc','wsadbzhi','wsadbzls','wsadbzge','wsadbzlt','wsadbzgt','wsadbzle', - 'wsadhzeq','wsadhzne','wsadhzcs','wsadhzhs','wsadhzcc','wsadhzlo','wsadhzmi','wsadhzpl','wsadhzvs','wsadhzvc','wsadhzhi','wsadhzls','wsadhzge','wsadhzlt','wsadhzgt','wsadhzle', - 'wshufheq','wshufhne','wshufhcs','wshufhhs','wshufhcc','wshufhlo','wshufhmi','wshufhpl','wshufhvs','wshufhvc','wshufhhi','wshufhls','wshufhge','wshufhlt','wshufhgt','wshufhle', - 'wsllheq','wsllhne','wsllhcs','wsllhhs','wsllhcc','wsllhlo','wsllhmi','wsllhpl','wsllhvs','wsllhvc','wsllhhi','wsllhls','wsllhge','wsllhlt','wsllhgt','wsllhle', - 'wsllweq','wsllwne','wsllwcs','wsllwhs','wsllwcc','wsllwlo','wsllwmi','wsllwpl','wsllwvs','wsllwvc','wsllwhi','wsllwls','wsllwge','wsllwlt','wsllwgt','wsllwle', - 'wslldeq','wslldne','wslldcs','wslldhs','wslldcc','wslldlo','wslldmi','wslldpl','wslldvs','wslldvc','wslldhi','wslldls','wslldge','wslldlt','wslldgt','wslldle', - 'wsllhgeq','wsllhgne','wsllhgcs','wsllhghs','wsllhgcc','wsllhglo','wsllhgmi','wsllhgpl','wsllhgvs','wsllhgvc','wsllhghi','wsllhgls','wsllhgge','wsllhglt','wsllhggt','wsllhgle', - 'wsllwgeq','wsllwgne','wsllwgcs','wsllwghs','wsllwgcc','wsllwglo','wsllwgmi','wsllwgpl','wsllwgvs','wsllwgvc','wsllwghi','wsllwgls','wsllwgge','wsllwglt','wsllwggt','wsllwgle', - 'wslldgeq','wslldgne','wslldgcs','wslldghs','wslldgcc','wslldglo','wslldgmi','wslldgpl','wslldgvs','wslldgvc','wslldghi','wslldgls','wslldgge','wslldglt','wslldggt','wslldgle', - 'wsraheq','wsrahne','wsrahcs','wsrahhs','wsrahcc','wsrahlo','wsrahmi','wsrahpl','wsrahvs','wsrahvc','wsrahhi','wsrahls','wsrahge','wsrahlt','wsrahgt','wsrahle', - 'wsraweq','wsrawne','wsrawcs','wsrawhs','wsrawcc','wsrawlo','wsrawmi','wsrawpl','wsrawvs','wsrawvc','wsrawhi','wsrawls','wsrawge','wsrawlt','wsrawgt','wsrawle', - 'wsradeq','wsradne','wsradcs','wsradhs','wsradcc','wsradlo','wsradmi','wsradpl','wsradvs','wsradvc','wsradhi','wsradls','wsradge','wsradlt','wsradgt','wsradle', - 'wsrahgeq','wsrahgne','wsrahgcs','wsrahghs','wsrahgcc','wsrahglo','wsrahgmi','wsrahgpl','wsrahgvs','wsrahgvc','wsrahghi','wsrahgls','wsrahgge','wsrahglt','wsrahggt','wsrahgle', - 'wsrawgeq','wsrawgne','wsrawgcs','wsrawghs','wsrawgcc','wsrawglo','wsrawgmi','wsrawgpl','wsrawgvs','wsrawgvc','wsrawghi','wsrawgls','wsrawgge','wsrawglt','wsrawggt','wsrawgle', - 'wsradgeq','wsradgne','wsradgcs','wsradghs','wsradgcc','wsradglo','wsradgmi','wsradgpl','wsradgvs','wsradgvc','wsradghi','wsradgls','wsradgge','wsradglt','wsradggt','wsradgle', - 'wsrlheq','wsrlhne','wsrlhcs','wsrlhhs','wsrlhcc','wsrlhlo','wsrlhmi','wsrlhpl','wsrlhvs','wsrlhvc','wsrlhhi','wsrlhls','wsrlhge','wsrlhlt','wsrlhgt','wsrlhle', - 'wsrlweq','wsrlwne','wsrlwcs','wsrlwhs','wsrlwcc','wsrlwlo','wsrlwmi','wsrlwpl','wsrlwvs','wsrlwvc','wsrlwhi','wsrlwls','wsrlwge','wsrlwlt','wsrlwgt','wsrlwle', - 'wsrldeq','wsrldne','wsrldcs','wsrldhs','wsrldcc','wsrldlo','wsrldmi','wsrldpl','wsrldvs','wsrldvc','wsrldhi','wsrldls','wsrldge','wsrldlt','wsrldgt','wsrldle', - 'wsrlhgeq','wsrlhgne','wsrlhgcs','wsrlhghs','wsrlhgcc','wsrlhglo','wsrlhgmi','wsrlhgpl','wsrlhgvs','wsrlhgvc','wsrlhghi','wsrlhgls','wsrlhgge','wsrlhglt','wsrlhggt','wsrlhgle', - 'wsrlwgeq','wsrlwgne','wsrlwgcs','wsrlwghs','wsrlwgcc','wsrlwglo','wsrlwgmi','wsrlwgpl','wsrlwgvs','wsrlwgvc','wsrlwghi','wsrlwgls','wsrlwgge','wsrlwglt','wsrlwggt','wsrlwgle', - 'wsrldgeq','wsrldgne','wsrldgcs','wsrldghs','wsrldgcc','wsrldglo','wsrldgmi','wsrldgpl','wsrldgvs','wsrldgvc','wsrldghi','wsrldgls','wsrldgge','wsrldglt','wsrldggt','wsrldgle', - 'wstrbeq','wstrbne','wstrbcs','wstrbhs','wstrbcc','wstrblo','wstrbmi','wstrbpl','wstrbvs','wstrbvc','wstrbhi','wstrbls','wstrbge','wstrblt','wstrbgt','wstrble', - 'wstrheq','wstrhne','wstrhcs','wstrhhs','wstrhcc','wstrhlo','wstrhmi','wstrhpl','wstrhvs','wstrhvc','wstrhhi','wstrhls','wstrhge','wstrhlt','wstrhgt','wstrhle', - 'wstrweq','wstrwne','wstrwcs','wstrwhs','wstrwcc','wstrwlo','wstrwmi','wstrwpl','wstrwvs','wstrwvc','wstrwhi','wstrwls','wstrwge','wstrwlt','wstrwgt','wstrwle', - 'wstrdeq','wstrdne','wstrdcs','wstrdhs','wstrdcc','wstrdlo','wstrdmi','wstrdpl','wstrdvs','wstrdvc','wstrdhi','wstrdls','wstrdge','wstrdlt','wstrdgt','wstrdle', - 'wsubbeq','wsubbne','wsubbcs','wsubbhs','wsubbcc','wsubblo','wsubbmi','wsubbpl','wsubbvs','wsubbvc','wsubbhi','wsubbls','wsubbge','wsubblt','wsubbgt','wsubble', - 'wsubheq','wsubhne','wsubhcs','wsubhhs','wsubhcc','wsubhlo','wsubhmi','wsubhpl','wsubhvs','wsubhvc','wsubhhi','wsubhls','wsubhge','wsubhlt','wsubhgt','wsubhle', - 'wsubweq','wsubwne','wsubwcs','wsubwhs','wsubwcc','wsubwlo','wsubwmi','wsubwpl','wsubwvs','wsubwvc','wsubwhi','wsubwls','wsubwge','wsubwlt','wsubwgt','wsubwle', - 'wsubbsseq','wsubbssne','wsubbsscs','wsubbsshs','wsubbsscc','wsubbsslo','wsubbssmi','wsubbsspl','wsubbssvs','wsubbssvc','wsubbsshi','wsubbssls','wsubbssge','wsubbsslt','wsubbssgt','wsubbssle', - 'wsubhsseq','wsubhssne','wsubhsscs','wsubhsshs','wsubhsscc','wsubhsslo','wsubhssmi','wsubhsspl','wsubhssvs','wsubhssvc','wsubhsshi','wsubhssls','wsubhssge','wsubhsslt','wsubhssgt','wsubhssle', - 'wsubwsseq','wsubwssne','wsubwsscs','wsubwsshs','wsubwsscc','wsubwsslo','wsubwssmi','wsubwsspl','wsubwssvs','wsubwssvc','wsubwsshi','wsubwssls','wsubwssge','wsubwsslt','wsubwssgt','wsubwssle', - 'wsubbuseq','wsubbusne','wsubbuscs','wsubbushs','wsubbuscc','wsubbuslo','wsubbusmi','wsubbuspl','wsubbusvs','wsubbusvc','wsubbushi','wsubbusls','wsubbusge','wsubbuslt','wsubbusgt','wsubbusle', - 'wsubhuseq','wsubhusne','wsubhuscs','wsubhushs','wsubhuscc','wsubhuslo','wsubhusmi','wsubhuspl','wsubhusvs','wsubhusvc','wsubhushi','wsubhusls','wsubhusge','wsubhuslt','wsubhusgt','wsubhusle', - 'wsubwuseq','wsubwusne','wsubwuscs','wsubwushs','wsubwuscc','wsubwuslo','wsubwusmi','wsubwuspl','wsubwusvs','wsubwusvc','wsubwushi','wsubwusls','wsubwusge','wsubwuslt','wsubwusgt','wsubwusle', - 'wsubaddhxeq','wsubaddhxne','wsubaddhxcs','wsubaddhxhs','wsubaddhxcc','wsubaddhxlo','wsubaddhxmi','wsubaddhxpl','wsubaddhxvs','wsubaddhxvc','wsubaddhxhi','wsubaddhxls','wsubaddhxge','wsubaddhxlt','wsubaddhxgt','wsubaddhxle', - 'wunpckehsbeq','wunpckehsbne','wunpckehsbcs','wunpckehsbhs','wunpckehsbcc','wunpckehsblo','wunpckehsbmi','wunpckehsbpl','wunpckehsbvs','wunpckehsbvc','wunpckehsbhi','wunpckehsbls','wunpckehsbge','wunpckehsblt','wunpckehsbgt','wunpckehsble', - 'wunpckehsheq','wunpckehshne','wunpckehshcs','wunpckehshhs','wunpckehshcc','wunpckehshlo','wunpckehshmi','wunpckehshpl','wunpckehshvs','wunpckehshvc','wunpckehshhi','wunpckehshls','wunpckehshge','wunpckehshlt','wunpckehshgt','wunpckehshle', - 'wunpckehsweq','wunpckehswne','wunpckehswcs','wunpckehswhs','wunpckehswcc','wunpckehswlo','wunpckehswmi','wunpckehswpl','wunpckehswvs','wunpckehswvc','wunpckehswhi','wunpckehswls','wunpckehswge','wunpckehswlt','wunpckehswgt','wunpckehswle', - 'wunpckehubeq','wunpckehubne','wunpckehubcs','wunpckehubhs','wunpckehubcc','wunpckehublo','wunpckehubmi','wunpckehubpl','wunpckehubvs','wunpckehubvc','wunpckehubhi','wunpckehubls','wunpckehubge','wunpckehublt','wunpckehubgt','wunpckehuble', - 'wunpckehuheq','wunpckehuhne','wunpckehuhcs','wunpckehuhhs','wunpckehuhcc','wunpckehuhlo','wunpckehuhmi','wunpckehuhpl','wunpckehuhvs','wunpckehuhvc','wunpckehuhhi','wunpckehuhls','wunpckehuhge','wunpckehuhlt','wunpckehuhgt','wunpckehuhle', - 'wunpckehuweq','wunpckehuwne','wunpckehuwcs','wunpckehuwhs','wunpckehuwcc','wunpckehuwlo','wunpckehuwmi','wunpckehuwpl','wunpckehuwvs','wunpckehuwvc','wunpckehuwhi','wunpckehuwls','wunpckehuwge','wunpckehuwlt','wunpckehuwgt','wunpckehuwle', - 'wunpckihbeq','wunpckihbne','wunpckihbcs','wunpckihbhs','wunpckihbcc','wunpckihblo','wunpckihbmi','wunpckihbpl','wunpckihbvs','wunpckihbvc','wunpckihbhi','wunpckihbls','wunpckihbge','wunpckihblt','wunpckihbgt','wunpckihble', - 'wunpckihheq','wunpckihhne','wunpckihhcs','wunpckihhhs','wunpckihhcc','wunpckihhlo','wunpckihhmi','wunpckihhpl','wunpckihhvs','wunpckihhvc','wunpckihhhi','wunpckihhls','wunpckihhge','wunpckihhlt','wunpckihhgt','wunpckihhle', - 'wunpckihweq','wunpckihwne','wunpckihwcs','wunpckihwhs','wunpckihwcc','wunpckihwlo','wunpckihwmi','wunpckihwpl','wunpckihwvs','wunpckihwvc','wunpckihwhi','wunpckihwls','wunpckihwge','wunpckihwlt','wunpckihwgt','wunpckihwle', - 'wunpckelsbeq','wunpckelsbne','wunpckelsbcs','wunpckelsbhs','wunpckelsbcc','wunpckelsblo','wunpckelsbmi','wunpckelsbpl','wunpckelsbvs','wunpckelsbvc','wunpckelsbhi','wunpckelsbls','wunpckelsbge','wunpckelsblt','wunpckelsbgt','wunpckelsble', - 'wunpckelsheq','wunpckelshne','wunpckelshcs','wunpckelshhs','wunpckelshcc','wunpckelshlo','wunpckelshmi','wunpckelshpl','wunpckelshvs','wunpckelshvc','wunpckelshhi','wunpckelshls','wunpckelshge','wunpckelshlt','wunpckelshgt','wunpckelshle', - 'wunpckelsweq','wunpckelswne','wunpckelswcs','wunpckelswhs','wunpckelswcc','wunpckelswlo','wunpckelswmi','wunpckelswpl','wunpckelswvs','wunpckelswvc','wunpckelswhi','wunpckelswls','wunpckelswge','wunpckelswlt','wunpckelswgt','wunpckelswle', - 'wunpckelubeq','wunpckelubne','wunpckelubcs','wunpckelubhs','wunpckelubcc','wunpckelublo','wunpckelubmi','wunpckelubpl','wunpckelubvs','wunpckelubvc','wunpckelubhi','wunpckelubls','wunpckelubge','wunpckelublt','wunpckelubgt','wunpckeluble', - 'wunpckeluheq','wunpckeluhne','wunpckeluhcs','wunpckeluhhs','wunpckeluhcc','wunpckeluhlo','wunpckeluhmi','wunpckeluhpl','wunpckeluhvs','wunpckeluhvc','wunpckeluhhi','wunpckeluhls','wunpckeluhge','wunpckeluhlt','wunpckeluhgt','wunpckeluhle', - 'wunpckeluweq','wunpckeluwne','wunpckeluwcs','wunpckeluwhs','wunpckeluwcc','wunpckeluwlo','wunpckeluwmi','wunpckeluwpl','wunpckeluwvs','wunpckeluwvc','wunpckeluwhi','wunpckeluwls','wunpckeluwge','wunpckeluwlt','wunpckeluwgt','wunpckeluwle', - 'wunpckilbeq','wunpckilbne','wunpckilbcs','wunpckilbhs','wunpckilbcc','wunpckilblo','wunpckilbmi','wunpckilbpl','wunpckilbvs','wunpckilbvc','wunpckilbhi','wunpckilbls','wunpckilbge','wunpckilblt','wunpckilbgt','wunpckilble', - 'wunpckilheq','wunpckilhne','wunpckilhcs','wunpckilhhs','wunpckilhcc','wunpckilhlo','wunpckilhmi','wunpckilhpl','wunpckilhvs','wunpckilhvc','wunpckilhhi','wunpckilhls','wunpckilhge','wunpckilhlt','wunpckilhgt','wunpckilhle', - 'wunpckilweq','wunpckilwne','wunpckilwcs','wunpckilwhs','wunpckilwcc','wunpckilwlo','wunpckilwmi','wunpckilwpl','wunpckilwvs','wunpckilwvc','wunpckilwhi','wunpckilwls','wunpckilwge','wunpckilwlt','wunpckilwgt','wunpckilwle', - 'wxoreq','wxorne','wxorcs','wxorhs','wxorcc','wxorlo','wxormi','wxorpl','wxorvs','wxorvc','wxorhi','wxorls','wxorge','wxorlt','wxorgt','wxorle', - 'wzeroeq','wzerone','wzerocs','wzerohs','wzerocc','wzerolo','wzeromi','wzeropl','wzerovs','wzerovc','wzerohi','wzerols','wzeroge','wzerolt','wzerogt','wzerole' - ), - /* Unconditional VFPv3 & NEON SIMD Memory Access Instructions */ - 19 => array( - /* Unconditional VFPv3 & NEON SIMD Memory Access: Loads */ - 'vld.8','vldal.8', - 'vld.16','vldal.16', - 'vld.32','vldal.32', - 'vld.64','vldal.64', - - 'vld1.8','vld1al.8', - 'vld1.16','vld1al.16', - 'vld1.32','vld1al.32', - - 'vld2.8','vld2al.8', - 'vld2.16','vld2al.16', - 'vld2.32','vld2al.32', - - 'vld3.8','vld3al.8', - 'vld3.16','vld3al.16', - 'vld3.32','vld3al.32', - - 'vld4.8','vld4al.8', - 'vld4.16','vld4al.16', - 'vld4.32','vld4al.32', - - 'vldm','vldmal', - 'vldm.32','vldmal.32', - 'vldm.64','vldmal.64', - - 'vldmia','vldmiaal', - 'vldmia.32','vldmiaal.32', - 'vldmia.64','vldmiaal.64', - - 'vldmdb','vldmdbal', - 'vldmdb.32','vldmdbal.32', - 'vldmdb.64','vldmdbal.64', - - 'vldr','vldral', - 'vldr.32','vldral.32', - 'vldr.64','vldral.64', - - 'vpop','vpopal', - 'vpop.32','vpopal.32', - 'vpop.64','vpopal.64', - - /* Unconditional VFPv3 & NEON SIMD Memory Access: Stores */ - 'vst1.8','vst1al.8', - 'vst1.16','vst1al.16', - 'vst1.32','vst1al.32', - 'vst1.64','vst1al.64', - - 'vst2.8','vst2al.8', - 'vst2.16','vst2al.16', - 'vst2.32','vst2al.32', - - 'vst3.8','vst3al.8', - 'vst3.16','vst3al.16', - 'vst3.32','vst3al.32', - - 'vst4.8','vst4al.8', - 'vst4.16','vst4al.16', - 'vst4.32','vst4al.32', - - 'vstm','vstmal', - 'vstm.32','vstmal.32', - 'vstm.64','vstmal.64', - - 'vstmia','vstmiaal', - 'vstmia.32','vstmiaal.32', - 'vstmia.64','vstmiaal.64', - - 'vstmdb','vstmdbal', - 'vstmdb.32','vstmdbal.32', - 'vstmdb.64','vstmdbal.64', - - 'vstr','vstral', - 'vstr.32','vstral.32', - 'vstr.64','vstral.64', - - 'vpush','vpushal', - 'vpush.32','vpushal.32', - 'vpush.64','vpushal.64' - ), - /* Unconditional NEON SIMD Logical Instructions */ - 20 => array( - 'vand','vandal', - 'vand.i8','vandal.i8', - 'vand.i16','vandal.i16', - 'vand.i32','vandal.i32', - 'vand.i64','vandal.i64', - 'vand.s8','vandal.s8', - 'vand.s16','vandal.s16', - 'vand.s32','vandal.s32', - 'vand.s64','vandal.s64', - 'vand.u8','vandal.u8', - 'vand.u16','vandal.u16', - 'vand.u32','vandal.u32', - 'vand.u64','vandal.u64', - 'vand.f32','vandal.f32', - 'vand.f64','vandal.f64', - - 'vbic','vbical', - 'vbic.i8','vbical.i8', - 'vbic.i16','vbical.i16', - 'vbic.i32','vbical.i32', - 'vbic.i64','vbical.i64', - 'vbic.s8','vbical.s8', - 'vbic.s16','vbical.s16', - 'vbic.s32','vbical.s32', - 'vbic.s64','vbical.s64', - 'vbic.u8','vbical.u8', - 'vbic.u16','vbical.u16', - 'vbic.u32','vbical.u32', - 'vbic.u64','vbical.u64', - 'vbic.f32','vbical.f32', - 'vbic.f64','vbical.f64', - - 'vbif','vbifal', - 'vbif.i8','vbifal.i8', - 'vbif.i16','vbifal.i16', - 'vbif.i32','vbifal.i32', - 'vbif.i64','vbifal.i64', - 'vbif.s8','vbifal.s8', - 'vbif.s16','vbifal.s16', - 'vbif.s32','vbifal.s32', - 'vbif.s64','vbifal.s64', - 'vbif.u8','vbifal.u8', - 'vbif.u16','vbifal.u16', - 'vbif.u32','vbifal.u32', - 'vbif.u64','vbifal.u64', - 'vbif.f32','vbifal.f32', - 'vbif.f64','vbifal.f64', - - 'vbit','vbital', - 'vbit.i8','vbital.i8', - 'vbit.i16','vbital.i16', - 'vbit.i32','vbital.i32', - 'vbit.i64','vbital.i64', - 'vbit.s8','vbital.s8', - 'vbit.s16','vbital.s16', - 'vbit.s32','vbital.s32', - 'vbit.s64','vbital.s64', - 'vbit.u8','vbital.u8', - 'vbit.u16','vbital.u16', - 'vbit.u32','vbital.u32', - 'vbit.u64','vbital.u64', - 'vbit.f32','vbital.f32', - 'vbit.f64','vbital.f64', - - 'vbsl','vbslal', - 'vbsl.i8','vbslal.i8', - 'vbsl.i16','vbslal.i16', - 'vbsl.i32','vbslal.i32', - 'vbsl.i64','vbslal.i64', - 'vbsl.s8','vbslal.s8', - 'vbsl.s16','vbslal.s16', - 'vbsl.s32','vbslal.s32', - 'vbsl.s64','vbslal.s64', - 'vbsl.u8','vbslal.u8', - 'vbsl.u16','vbslal.u16', - 'vbsl.u32','vbslal.u32', - 'vbsl.u64','vbslal.u64', - 'vbsl.f32','vbslal.f32', - 'vbsl.f64','vbslal.f64', - - 'veor','veoral', - 'veor.i8','veoral.i8', - 'veor.i16','veoral.i16', - 'veor.i32','veoral.i32', - 'veor.i64','veoral.i64', - 'veor.s8','veoral.s8', - 'veor.s16','veoral.s16', - 'veor.s32','veoral.s32', - 'veor.s64','veoral.s64', - 'veor.u8','veoral.u8', - 'veor.u16','veoral.u16', - 'veor.u32','veoral.u32', - 'veor.u64','veoral.u64', - 'veor.f32','veoral.f32', - 'veor.f64','veoral.f64', - - 'vmov','vmoval', - 'vmov.8','vmoval.8', - 'vmov.16','vmoval.16', - 'vmov.32','vmoval.32', - 'vmov.i8','vmoval.i8', - 'vmov.i16','vmoval.i16', - 'vmov.i32','vmoval.i32', - 'vmov.i64','vmoval.i64', - 'vmov.f32','vmoval.f32', - 'vmov.f64','vmoval.f64', - - 'vmvn','vmvnal', - 'vmvn.s8','vmvnal.s8', - 'vmvn.s16','vmvnal.s16', - 'vmvn.s32','vmvnal.s32', - 'vmvn.s64','vmvnal.s64', - 'vmvn.u8','vmvnal.u8', - 'vmvn.u16','vmvnal.u16', - 'vmvn.u32','vmvnal.u32', - 'vmvn.u64','vmvnal.u64', - 'vmvn.i8','vmvnal.i8', - 'vmvn.i16','vmvnal.i16', - 'vmvn.i32','vmvnal.i32', - 'vmvn.i64','vmvnal.i64', - 'vmvn.f32','vmvnal.f32', - 'vmvn.f64','vmvnal.f64', - - 'vorn','vornal', - 'vorn.s8','vornal.s8', - 'vorn.s16','vornal.s16', - 'vorn.s32','vornal.s32', - 'vorn.s64','vornal.s64', - 'vorn.u8','vornal.u8', - 'vorn.u16','vornal.u16', - 'vorn.u32','vornal.u32', - 'vorn.u64','vornal.u64', - 'vorn.i8','vornal.i8', - 'vorn.i16','vornal.i16', - 'vorn.i32','vornal.i32', - 'vorn.i64','vornal.i64', - 'vorn.f32','vornal.f32', - 'vorn.f64','vornal.f64', - - 'vorr','vorral', - 'vorr.s8','vorral.s8', - 'vorr.s16','vorral.s16', - 'vorr.s32','vorral.s32', - 'vorr.s64','vorral.s64', - 'vorr.u8','vorral.u8', - 'vorr.u16','vorral.u16', - 'vorr.u32','vorral.u32', - 'vorr.u64','vorral.u64', - 'vorr.i8','vorral.i8', - 'vorr.i16','vorral.i16', - 'vorr.i32','vorral.i32', - 'vorr.i64','vorral.i64', - 'vorr.f32','vorral.f32', - 'vorr.f64','vorral.f64', - - 'vswp','vswpal', - 'vswp.s8','vswpal.s8', - 'vswp.s16','vswpal.s16', - 'vswp.s32','vswpal.s32', - 'vswp.s64','vswpal.s64', - 'vswp.u8','vswpal.u8', - 'vswp.u16','vswpal.u16', - 'vswp.u32','vswpal.u32', - 'vswp.u64','vswpal.u64', - 'vswp.i8','vswpal.i8', - 'vswp.i16','vswpal.i16', - 'vswp.i32','vswpal.i32', - 'vswp.i64','vswpal.i64', - 'vswp.f32','vswpal.f32', - 'vswp.f64','vswpal.f64' - ), - /* Unconditional NEON SIMD ARM Registers Interop Instructions */ - 21 => array( - 'vmrs','vmrsal', - 'vmsr','vmsral' - ), - /* Unconditional NEON SIMD Bit/Byte-Level Instructions */ - 22 => array( - 'vcnt.8','vcntal.8', - 'vdup.8','vdupal.8', - - 'vdup.16','vdupal.16', - 'vdup.32','vdupal.32', - - 'vext.8','vextal.8', - 'vext.16','vextal.16', - - 'vext.32','vextal.32', - 'vext.64','vextal.64', - - 'vrev16.8','vrev16al.8', - 'vrev32.8','vrev32al.8', - 'vrev32.16','vrev32al.16', - 'vrev64.8','vrev64al.8', - 'vrev64.16','vrev64al.16', - 'vrev64.32','vrev64al.32', - - 'vsli.8','vslial.8', - 'vsli.16','vslial.16', - 'vsli.32','vslial.32', - 'vsli.64','vslial.64', - - 'vsri.8','vsrial.8', - 'vsri.16','vsrial.16', - 'vsri.32','vsrial.32', - 'vsri.64','vsrial.64', - - 'vtbl.8','vtblal.8', - - 'vtbx','vtbxal', - - 'vtrn.8','vtrnal.8', - 'vtrn.16','vtrnal.16', - 'vtrn.32','vtrnal.32', - - 'vtst.8','vtstal.8', - 'vtst.16','vtstal.16', - 'vtst.32','vtstal.32', - - 'vuzp.8','vuzpal.8', - 'vuzp.16','vuzpal.16', - 'vuzp.32','vuzpal.32', - - 'vzip.8','vzipal.8', - 'vzip.16','vzipal.16', - 'vzip.32','vzipal.32', - - 'vmull.p8','vmullal.p8' - ), - /* Unconditional NEON SIMD Universal Integer Instructions */ - 23 => array( - 'vadd.i8','vaddal.i8', - 'vadd.i16','vaddal.i16', - 'vadd.i32','vaddal.i32', - 'vadd.i64','vaddal.i64', - - 'vsub.i8','vsubal.i8', - 'vsub.i16','vsubal.i16', - 'vsub.i32','vsubal.i32', - 'vsub.i64','vsubal.i64', - - 'vaddhn.i16','vaddhnal.i16', - 'vaddhn.i32','vaddhnal.i32', - 'vaddhn.i64','vaddhnal.i64', - - 'vsubhn.i16','vsubhnal.i16', - 'vsubhn.i32','vsubhnal.i32', - 'vsubhn.i64','vsubhnal.i64', - - 'vraddhn.i16','vraddhnal.i16', - 'vraddhn.i32','vraddhnal.i32', - 'vraddhn.i64','vraddhnal.i64', - - 'vrsubhn.i16','vrsubhnal.i16', - 'vrsubhn.i32','vrsubhnal.i32', - 'vrsubhn.i64','vrsubhnal.i64', - - 'vpadd.i8','vpaddal.i8', - 'vpadd.i16','vpaddal.i16', - 'vpadd.i32','vpaddal.i32', - - 'vceq.i8','vceqal.i8', - 'vceq.i16','vceqal.i16', - 'vceq.i32','vceqal.i32', - - 'vclz.i8','vclzal.i8', - 'vclz.i16','vclzal.i16', - 'vclz.i32','vclzal.i32', - - 'vmovn.i16','vmovnal.i16', - 'vmovn.i32','vmovnal.i32', - 'vmovn.i64','vmovnal.i64', - - 'vmla.s8','vmlaal.s8', - 'vmla.s16','vmlaal.s16', - 'vmla.s32','vmlaal.s32', - 'vmla.u8','vmlaal.u8', - 'vmla.u16','vmlaal.u16', - 'vmla.u32','vmlaal.u32', - 'vmla.i8','vmlaal.i8', - 'vmla.i16','vmlaal.i16', - 'vmla.i32','vmlaal.i32', - - 'vmls.s8','vmlsal.s8', - 'vmls.s16','vmlsal.s16', - 'vmls.s32','vmlsal.s32', - 'vmls.u8','vmlsal.u8', - 'vmls.u16','vmlsal.u16', - 'vmls.u32','vmlsal.u32', - 'vmls.i8','vmlsal.i8', - 'vmls.i16','vmlsal.i16', - 'vmls.i32','vmlsal.i32', - - 'vmul.s8','vmulal.s8', - 'vmul.s16','vmulal.s16', - 'vmul.s32','vmulal.s32', - 'vmul.u8','vmulal.u8', - 'vmul.u16','vmulal.u16', - 'vmul.u32','vmulal.u32', - 'vmul.i8','vmulal.i8', - 'vmul.i16','vmulal.i16', - 'vmul.i32','vmulal.i32', - 'vmul.p8','vmulal.p8', - - 'vrshrn.i16','vrshrnal.i16', - 'vrshrn.i32','vrshrnal.i32', - 'vrshrn.i64','vrshrnal.i64', - - 'vshrn.i16','vshrnal.i16', - 'vshrn.i32','vshrnal.i32', - 'vshrn.i64','vshrnal.i64', - - 'vshl.i8','vshlal.i8', - 'vshl.i16','vshlal.i16', - 'vshl.i32','vshlal.i32', - 'vshl.i64','vshlal.i64', - - 'vshll.i8','vshllal.i8', - 'vshll.i16','vshllal.i16', - 'vshll.i32','vshllal.i32' - ), - /* Unconditional NEON SIMD Signed Integer Instructions */ - 24 => array( - 'vaba.s8','vabaal.s8', - 'vaba.s16','vabaal.s16', - 'vaba.s32','vabaal.s32', - - 'vabal.s8','vabalal.s8', - 'vabal.s16','vabalal.s16', - 'vabal.s32','vabalal.s32', - - 'vabd.s8','vabdal.s8', - 'vabd.s16','vabdal.s16', - 'vabd.s32','vabdal.s32', - - 'vabs.s8','vabsal.s8', - 'vabs.s16','vabsal.s16', - 'vabs.s32','vabsal.s32', - - 'vaddl.s8','vaddlal.s8', - 'vaddl.s16','vaddlal.s16', - 'vaddl.s32','vaddlal.s32', - - 'vcge.s8','vcgeal.s8', - 'vcge.s16','vcgeal.s16', - 'vcge.s32','vcgeal.s32', - - 'vcle.s8','vcleal.s8', - 'vcle.s16','vcleal.s16', - 'vcle.s32','vcleal.s32', - - 'vcgt.s8','vcgtal.s8', - 'vcgt.s16','vcgtal.s16', - 'vcgt.s32','vcgtal.s32', - - 'vclt.s8','vcltal.s8', - 'vclt.s16','vcltal.s16', - 'vclt.s32','vcltal.s32', - - 'vcls.s8','vclsal.s8', - 'vcls.s16','vclsal.s16', - 'vcls.s32','vclsal.s32', - - 'vaddw.s8','vaddwal.s8', - 'vaddw.s16','vaddwal.s16', - 'vaddw.s32','vaddwal.s32', - - 'vhadd.s8','vhaddal.s8', - 'vhadd.s16','vhaddal.s16', - 'vhadd.s32','vhaddal.s32', - - 'vhsub.s8','vhsubal.s8', - 'vhsub.s16','vhsubal.s16', - 'vhsub.s32','vhsubal.s32', - - 'vmax.s8','vmaxal.s8', - 'vmax.s16','vmaxal.s16', - 'vmax.s32','vmaxal.s32', - - 'vmin.s8','vminal.s8', - 'vmin.s16','vminal.s16', - 'vmin.s32','vminal.s32', - - 'vmlal.s8','vmlalal.s8', - 'vmlal.s16','vmlalal.s16', - 'vmlal.s32','vmlalal.s32', - - 'vmlsl.s8','vmlslal.s8', - 'vmlsl.s16','vmlslal.s16', - 'vmlsl.s32','vmlslal.s32', - - 'vneg.s8','vnegal.s8', - 'vneg.s16','vnegal.s16', - 'vneg.s32','vnegal.s32', - - 'vpadal.s8','vpadalal.s8', - 'vpadal.s16','vpadalal.s16', - 'vpadal.s32','vpadalal.s32', - - 'vmovl.s8','vmovlal.s8', - 'vmovl.s16','vmovlal.s16', - 'vmovl.s32','vmovlal.s32', - - 'vmull.s8','vmullal.s8', - 'vmull.s16','vmullal.s16', - 'vmull.s32','vmullal.s32', - - 'vpaddl.s8','vpaddlal.s8', - 'vpaddl.s16','vpaddlal.s16', - 'vpaddl.s32','vpaddlal.s32', - - 'vpmax.s8','vpmaxal.s8', - 'vpmax.s16','vpmaxal.s16', - 'vpmax.s32','vpmaxal.s32', - - 'vpmin.s8','vpminal.s8', - 'vpmin.s16','vpminal.s16', - 'vpmin.s32','vpminal.s32', - - 'vqabs.s8','vqabsal.s8', - 'vqabs.s16','vqabsal.s16', - 'vqabs.s32','vqabsal.s32', - - 'vqadd.s8','vqaddal.s8', - 'vqadd.s16','vqaddal.s16', - 'vqadd.s32','vqaddal.s32', - 'vqadd.s64','vqaddal.s64', - - 'vqdmlal.s16','vqdmlalal.s16', - 'vqdmlal.s32','vqdmlalal.s32', - - 'vqdmlsl.s16','vqdmlslal.s16', - 'vqdmlsl.s32','vqdmlslal.s32', - - 'vqdmulh.s16','vqdmulhal.s16', - 'vqdmulh.s32','vqdmulhal.s32', - - 'vqdmull.s16','vqdmullal.s16', - 'vqdmull.s32','vqdmullal.s32', - - 'vqmovn.s16','vqmovnal.s16', - 'vqmovn.s32','vqmovnal.s32', - 'vqmovn.s64','vqmovnal.s64', - - 'vqmovun.s16','vqmovunal.s16', - 'vqmovun.s32','vqmovunal.s32', - 'vqmovun.s64','vqmovunal.s64', - - 'vqneg.s8','vqnegal.s8', - 'vqneg.s16','vqnegal.s16', - 'vqneg.s32','vqnegal.s32', - - 'vqrdmulh.s16','vqrdmulhal.s16', - 'vqrdmulh.s32','vqrdmulhal.s32', - - 'vqrshl.s8','vqrshlal.s8', - 'vqrshl.s16','vqrshlal.s16', - 'vqrshl.s32','vqrshlal.s32', - 'vqrshl.s64','vqrshlal.s64', - - 'vqrshrn.s16','vqrshrnal.s16', - 'vqrshrn.s32','vqrshrnal.s32', - 'vqrshrn.s64','vqrshrnal.s64', - - 'vqrshrun.s16','vqrshrunal.s16', - 'vqrshrun.s32','vqrshrunal.s32', - 'vqrshrun.s64','vqrshrunal.s64', - - 'vqshl.s8','vqshlal.s8', - 'vqshl.s16','vqshlal.s16', - 'vqshl.s32','vqshlal.s32', - 'vqshl.s64','vqshlal.s64', - - 'vqshlu.s8','vqshlual.s8', - 'vqshlu.s16','vqshlual.s16', - 'vqshlu.s32','vqshlual.s32', - 'vqshlu.s64','vqshlual.s64', - - 'vqshrn.s16','vqshrnal.s16', - 'vqshrn.s32','vqshrnal.s32', - 'vqshrn.s64','vqshrnal.s64', - - 'vqshrun.s16','vqshrunal.s16', - 'vqshrun.s32','vqshrunal.s32', - 'vqshrun.s64','vqshrunal.s64', - - 'vqsub.s8','vqsubal.s8', - 'vqsub.s16','vqsubal.s16', - 'vqsub.s32','vqsubal.s32', - 'vqsub.s64','vqsubal.s64', - - 'vrhadd.s8','vrhaddal.s8', - 'vrhadd.s16','vrhaddal.s16', - 'vrhadd.s32','vrhaddal.s32', - - 'vrshl.s8','vrshlal.s8', - 'vrshl.s16','vrshlal.s16', - 'vrshl.s32','vrshlal.s32', - 'vrshl.s64','vrshlal.s64', - - 'vrshr.s8','vrshral.s8', - 'vrshr.s16','vrshral.s16', - 'vrshr.s32','vrshral.s32', - 'vrshr.s64','vrshral.s64', - - 'vrsra.s8','vrsraal.s8', - 'vrsra.s16','vrsraal.s16', - 'vrsra.s32','vrsraal.s32', - 'vrsra.s64','vrsraal.s64', - - 'vshl.s8','vshlal.s8', - 'vshl.s16','vshlal.s16', - 'vshl.s32','vshlal.s32', - 'vshl.s64','vshlal.s64', - - 'vshll.s8','vshllal.s8', - 'vshll.s16','vshllal.s16', - 'vshll.s32','vshllal.s32', - - 'vshr.s8','vshral.s8', - 'vshr.s16','vshral.s16', - 'vshr.s32','vshral.s32', - 'vshr.s64','vshral.s64', - - 'vsra.s8','vsraal.s8', - 'vsra.s16','vsraal.s16', - 'vsra.s32','vsraal.s32', - 'vsra.s64','vsraal.s64', - - 'vsubl.s8','vsublal.s8', - 'vsubl.s16','vsublal.s16', - 'vsubl.s32','vsublal.s32', - - 'vsubh.s8','vsubhal.s8', - 'vsubh.s16','vsubhal.s16', - 'vsubh.s32','vsubhal.s32' - ), - /* Unconditional NEON SIMD Unsigned Integer Instructions */ - 25 => array( - 'vaba.u8','vabaal.u8', - 'vaba.u16','vabaal.u16', - 'vaba.u32','vabaal.u32', - - 'vabal.u8','vabalal.u8', - 'vabal.u16','vabalal.u16', - 'vabal.u32','vabalal.u32', - - 'vabd.u8','vabdal.u8', - 'vabd.u16','vabdal.u16', - 'vabd.u32','vabdal.u32', - - 'vaddl.u8','vaddlal.u8', - 'vaddl.u16','vaddlal.u16', - 'vaddl.u32','vaddlal.u32', - - 'vsubl.u8','vsublal.u8', - 'vsubl.u16','vsublal.u16', - 'vsubl.u32','vsublal.u32', - - 'vaddw.u8','vaddwal.u8', - 'vaddw.u16','vaddwal.u16', - 'vaddw.u32','vaddwal.u32', - - 'vsubh.u8','vsubhal.u8', - 'vsubh.u16','vsubhal.u16', - 'vsubh.u32','vsubhal.u32', - - 'vhadd.u8','vhaddal.u8', - 'vhadd.u16','vhaddal.u16', - 'vhadd.u32','vhaddal.u32', - - 'vhsub.u8','vhsubal.u8', - 'vhsub.u16','vhsubal.u16', - 'vhsub.u32','vhsubal.u32', - - 'vpadal.u8','vpadalal.u8', - 'vpadal.u16','vpadalal.u16', - 'vpadal.u32','vpadalal.u32', - - 'vpaddl.u8','vpaddlal.u8', - 'vpaddl.u16','vpaddlal.u16', - 'vpaddl.u32','vpaddlal.u32', - - 'vcge.u8','vcgeal.u8', - 'vcge.u16','vcgeal.u16', - 'vcge.u32','vcgeal.u32', - - 'vcle.u8','vcleal.u8', - 'vcle.u16','vcleal.u16', - 'vcle.u32','vcleal.u32', - - 'vcgt.u8','vcgtal.u8', - 'vcgt.u16','vcgtal.u16', - 'vcgt.u32','vcgtal.u32', - - 'vclt.u8','vcltal.u8', - 'vclt.u16','vcltal.u16', - 'vclt.u32','vcltal.u32', - - 'vmax.u8','vmaxal.u8', - 'vmax.u16','vmaxal.u16', - 'vmax.u32','vmaxal.u32', - - 'vmin.u8','vminal.u8', - 'vmin.u16','vminal.u16', - 'vmin.u32','vminal.u32', - - 'vmlal.u8','vmlalal.u8', - 'vmlal.u16','vmlalal.u16', - 'vmlal.u32','vmlalal.u32', - - 'vmlsl.u8','vmlslal.u8', - 'vmlsl.u16','vmlslal.u16', - 'vmlsl.u32','vmlslal.u32', - - 'vmull.u8','vmullal.u8', - 'vmull.u16','vmullal.u16', - 'vmull.u32','vmullal.u32', - - 'vmovl.u8','vmovlal.u8', - 'vmovl.u16','vmovlal.u16', - 'vmovl.u32','vmovlal.u32', - - 'vshl.u8','vshlal.u8', - 'vshl.u16','vshlal.u16', - 'vshl.u32','vshlal.u32', - 'vshl.u64','vshlal.u64', - - 'vshll.u8','vshllal.u8', - 'vshll.u16','vshllal.u16', - 'vshll.u32','vshllal.u32', - - 'vshr.u8','vshral.u8', - 'vshr.u16','vshral.u16', - 'vshr.u32','vshral.u32', - 'vshr.u64','vshral.u64', - - 'vsra.u8','vsraal.u8', - 'vsra.u16','vsraal.u16', - 'vsra.u32','vsraal.u32', - 'vsra.u64','vsraal.u64', - - 'vpmax.u8','vpmaxal.u8', - 'vpmax.u16','vpmaxal.u16', - 'vpmax.u32','vpmaxal.u32', - - 'vpmin.u8','vpminal.u8', - 'vpmin.u16','vpminal.u16', - 'vpmin.u32','vpminal.u32', - - 'vqadd.u8','vqaddal.u8', - 'vqadd.u16','vqaddal.u16', - 'vqadd.u32','vqaddal.u32', - 'vqadd.u64','vqaddal.u64', - - 'vqsub.u8','vqsubal.u8', - 'vqsub.u16','vqsubal.u16', - 'vqsub.u32','vqsubal.u32', - 'vqsub.u64','vqsubal.u64', - - 'vqmovn.u16','vqmovnal.u16', - 'vqmovn.u32','vqmovnal.u32', - 'vqmovn.u64','vqmovnal.u64', - - 'vqshl.u8','vqshlal.u8', - 'vqshl.u16','vqshlal.u16', - 'vqshl.u32','vqshlal.u32', - 'vqshl.u64','vqshlal.u64', - - 'vqshrn.u16','vqshrnal.u16', - 'vqshrn.u32','vqshrnal.u32', - 'vqshrn.u64','vqshrnal.u64', - - 'vqrshl.u8','vqrshlal.u8', - 'vqrshl.u16','vqrshlal.u16', - 'vqrshl.u32','vqrshlal.u32', - 'vqrshl.u64','vqrshlal.u64', - - 'vqrshrn.u16','vqrshrnal.u16', - 'vqrshrn.u32','vqrshrnal.u32', - 'vqrshrn.u64','vqrshrnal.u64', - - 'vrhadd.u8','vrhaddal.u8', - 'vrhadd.u16','vrhaddal.u16', - 'vrhadd.u32','vrhaddal.u32', - - 'vrshl.u8','vrshlal.u8', - 'vrshl.u16','vrshlal.u16', - 'vrshl.u32','vrshlal.u32', - 'vrshl.u64','vrshlal.u64', - - 'vrshr.u8','vrshral.u8', - 'vrshr.u16','vrshral.u16', - 'vrshr.u32','vrshral.u32', - 'vrshr.u64','vrshral.u64', - - 'vrsra.u8','vrsraal.u8', - 'vrsra.u16','vrsraal.u16', - 'vrsra.u32','vrsraal.u32', - 'vrsra.u64','vrsraal.u64' - ), - /* Unconditional VFPv3 & NEON SIMD Floating-Point Instructions */ - 26 => array( - 'vabd.f32','vabdal.f32', - - 'vabs.f32','vabsal.f32', - 'vabs.f64','vabsal.f64', - - 'vacge.f32','vacgeal.f32', - 'vacgt.f32','vacgtal.f32', - 'vacle.f32','vacleal.f32', - 'vaclt.f32','vacltal.f32', - - 'vadd.f32','vaddal.f32', - 'vadd.f64','vaddal.f64', - - 'vceq.f32','vceqal.f32', - 'vcge.f32','vcgeal.f32', - 'vcle.f32','vcleal.f32', - 'vcgt.f32','vcgtal.f32', - 'vclt.f32','vcltal.f32', - - 'vcmp.f32','vcmpal.f32', - 'vcmp.f64','vcmpal.f64', - - 'vcmpe.f32','vcmpeal.f32', - 'vcmpe.f64','vcmpeal.f64', - - 'vcvt.s16.f32','vcvtal.s16.f32', - 'vcvt.s16.f64','vcvtal.s16.f64', - 'vcvt.s32.f32','vcvtal.s32.f32', - 'vcvt.s32.f64','vcvtal.s32.f64', - 'vcvt.u16.f32','vcvtal.u16.f32', - 'vcvt.u16.f64','vcvtal.u16.f64', - 'vcvt.u32.f32','vcvtal.u32.f32', - 'vcvt.u32.f64','vcvtal.u32.f64', - 'vcvt.f16.f32','vcvtal.f16.f32', - 'vcvt.f32.s32','vcvtal.f32.s32', - 'vcvt.f32.u32','vcvtal.f32.u32', - 'vcvt.f32.f16','vcvtal.f32.f16', - 'vcvt.f32.f64','vcvtal.f32.f64', - 'vcvt.f64.s32','vcvtal.f64.s32', - 'vcvt.f64.u32','vcvtal.f64.u32', - 'vcvt.f64.f32','vcvtal.f64.f32', - - 'vcvtr.s32.f32','vcvtral.s32.f32', - 'vcvtr.s32.f64','vcvtral.s32.f64', - 'vcvtr.u32.f32','vcvtral.u32.f32', - 'vcvtr.u32.f64','vcvtral.u32.f64', - - 'vcvtb.f16.f32','vcvtbal.f16.f32', - 'vcvtb.f32.f16','vcvtbal.f32.f16', - - 'vcvtt.f16.f32','vcvttal.f16.f32', - 'vcvtt.f32.f16','vcvttal.f32.f16', - - 'vdiv.f32','vdival.f32', - 'vdiv.f64','vdival.f64', - - 'vmax.f32','vmaxal.f32', - 'vmin.f32','vminal.f32', - - 'vmla.f32','vmlaal.f32', - 'vmla.f64','vmlaal.f64', - - 'vmls.f32','vmlsal.f32', - 'vmls.f64','vmlsal.f64', - - 'vmul.f32','vmulal.f32', - 'vmul.f64','vmulal.f64', - - 'vneg.f32','vnegal.f32', - 'vneg.f64','vnegal.f64', - - 'vnmla.f32','vnmlaal.f32', - 'vnmla.f64','vnmlaal.f64', - - 'vnmls.f32','vnmlsal.f32', - 'vnmls.f64','vnmlsal.f64', - - 'vnmul.f64','vnmulal.f64', - 'vnmul.f32','vnmulal.f32', - - 'vpadd.f32','vpaddal.f32', - - 'vpmax.f32','vpmaxal.f32', - 'vpmin.f32','vpminal.f32', - - 'vrecpe.u32','vrecpeal.u32', - 'vrecpe.f32','vrecpeal.f32', - 'vrecps.f32','vrecpsal.f32', - - 'vrsqrte.u32','vrsqrteal.u32', - 'vrsqrte.f32','vrsqrteal.f32', - 'vrsqrts.f32','vrsqrtsal.f32', - - 'vsqrt.f32','vsqrtal.f32', - 'vsqrt.f64','vsqrtal.f64', - - 'vsub.f32','vsubal.f32', - 'vsub.f64','vsubal.f64' - ), - /* Conditional VFPv3 & NEON SIMD Memory Access Instructions */ - 27 => array( - /* Conditional VFPv3 & NEON SIMD Memory Access: Loads */ - 'vldeq.8','vldne.8','vldcs.8','vldhs.8','vldcc.8','vldlo.8','vldmi.8','vldpl.8','vldvs.8','vldvc.8','vldhi.8','vldls.8','vldge.8','vldlt.8','vldgt.8','vldle.8', - 'vldeq.16','vldne.16','vldcs.16','vldhs.16','vldcc.16','vldlo.16','vldmi.16','vldpl.16','vldvs.16','vldvc.16','vldhi.16','vldls.16','vldge.16','vldlt.16','vldgt.16','vldle.16', - 'vldeq.32','vldne.32','vldcs.32','vldhs.32','vldcc.32','vldlo.32','vldmi.32','vldpl.32','vldvs.32','vldvc.32','vldhi.32','vldls.32','vldge.32','vldlt.32','vldgt.32','vldle.32', - 'vldeq.64','vldne.64','vldcs.64','vldhs.64','vldcc.64','vldlo.64','vldmi.64','vldpl.64','vldvs.64','vldvc.64','vldhi.64','vldls.64','vldge.64','vldlt.64','vldgt.64','vldle.64', - - 'vld1eq.8','vld1ne.8','vld1cs.8','vld1hs.8','vld1cc.8','vld1lo.8','vld1mi.8','vld1pl.8','vld1vs.8','vld1vc.8','vld1hi.8','vld1ls.8','vld1ge.8','vld1lt.8','vld1gt.8','vld1le.8', - 'vld1eq.16','vld1ne.16','vld1cs.16','vld1hs.16','vld1cc.16','vld1lo.16','vld1mi.16','vld1pl.16','vld1vs.16','vld1vc.16','vld1hi.16','vld1ls.16','vld1ge.16','vld1lt.16','vld1gt.16','vld1le.16', - 'vld1eq.32','vld1ne.32','vld1cs.32','vld1hs.32','vld1cc.32','vld1lo.32','vld1mi.32','vld1pl.32','vld1vs.32','vld1vc.32','vld1hi.32','vld1ls.32','vld1ge.32','vld1lt.32','vld1gt.32','vld1le.32', - - 'vld2eq.8','vld2ne.8','vld2cs.8','vld2hs.8','vld2cc.8','vld2lo.8','vld2mi.8','vld2pl.8','vld2vs.8','vld2vc.8','vld2hi.8','vld2ls.8','vld2ge.8','vld2lt.8','vld2gt.8','vld2le.8', - 'vld2eq.16','vld2ne.16','vld2cs.16','vld2hs.16','vld2cc.16','vld2lo.16','vld2mi.16','vld2pl.16','vld2vs.16','vld2vc.16','vld2hi.16','vld2ls.16','vld2ge.16','vld2lt.16','vld2gt.16','vld2le.16', - 'vld2eq.32','vld2ne.32','vld2cs.32','vld2hs.32','vld2cc.32','vld2lo.32','vld2mi.32','vld2pl.32','vld2vs.32','vld2vc.32','vld2hi.32','vld2ls.32','vld2ge.32','vld2lt.32','vld2gt.32','vld2le.32', - - 'vld3eq.8','vld3ne.8','vld3cs.8','vld3hs.8','vld3cc.8','vld3lo.8','vld3mi.8','vld3pl.8','vld3vs.8','vld3vc.8','vld3hi.8','vld3ls.8','vld3ge.8','vld3lt.8','vld3gt.8','vld3le.8', - 'vld3eq.16','vld3ne.16','vld3cs.16','vld3hs.16','vld3cc.16','vld3lo.16','vld3mi.16','vld3pl.16','vld3vs.16','vld3vc.16','vld3hi.16','vld3ls.16','vld3ge.16','vld3lt.16','vld3gt.16','vld3le.16', - 'vld3eq.32','vld3ne.32','vld3cs.32','vld3hs.32','vld3cc.32','vld3lo.32','vld3mi.32','vld3pl.32','vld3vs.32','vld3vc.32','vld3hi.32','vld3ls.32','vld3ge.32','vld3lt.32','vld3gt.32','vld3le.32', - - 'vld4eq.8','vld4ne.8','vld4cs.8','vld4hs.8','vld4cc.8','vld4lo.8','vld4mi.8','vld4pl.8','vld4vs.8','vld4vc.8','vld4hi.8','vld4ls.8','vld4ge.8','vld4lt.8','vld4gt.8','vld4le.8', - 'vld4eq.16','vld4ne.16','vld4cs.16','vld4hs.16','vld4cc.16','vld4lo.16','vld4mi.16','vld4pl.16','vld4vs.16','vld4vc.16','vld4hi.16','vld4ls.16','vld4ge.16','vld4lt.16','vld4gt.16','vld4le.16', - 'vld4eq.32','vld4ne.32','vld4cs.32','vld4hs.32','vld4cc.32','vld4lo.32','vld4mi.32','vld4pl.32','vld4vs.32','vld4vc.32','vld4hi.32','vld4ls.32','vld4ge.32','vld4lt.32','vld4gt.32','vld4le.32', - - 'vldmeq','vldmne','vldmcs','vldmhs','vldmcc','vldmlo','vldmmi','vldmpl','vldmvs','vldmvc','vldmhi','vldmls','vldmge','vldmlt','vldmgt','vldmle', - 'vldmeq.32','vldmne.32','vldmcs.32','vldmhs.32','vldmcc.32','vldmlo.32','vldmmi.32','vldmpl.32','vldmvs.32','vldmvc.32','vldmhi.32','vldmls.32','vldmge.32','vldmlt.32','vldmgt.32','vldmle.32', - 'vldmeq.64','vldmne.64','vldmcs.64','vldmhs.64','vldmcc.64','vldmlo.64','vldmmi.64','vldmpl.64','vldmvs.64','vldmvc.64','vldmhi.64','vldmls.64','vldmge.64','vldmlt.64','vldmgt.64','vldmle.64', - - 'vldmiaeq','vldmiane','vldmiacs','vldmiahs','vldmiacc','vldmialo','vldmiami','vldmiapl','vldmiavs','vldmiavc','vldmiahi','vldmials','vldmiage','vldmialt','vldmiagt','vldmiale', - 'vldmiaeq.32','vldmiane.32','vldmiacs.32','vldmiahs.32','vldmiacc.32','vldmialo.32','vldmiami.32','vldmiapl.32','vldmiavs.32','vldmiavc.32','vldmiahi.32','vldmials.32','vldmiage.32','vldmialt.32','vldmiagt.32','vldmiale.32', - 'vldmiaeq.64','vldmiane.64','vldmiacs.64','vldmiahs.64','vldmiacc.64','vldmialo.64','vldmiami.64','vldmiapl.64','vldmiavs.64','vldmiavc.64','vldmiahi.64','vldmials.64','vldmiage.64','vldmialt.64','vldmiagt.64','vldmiale.64', - - 'vldmdbeq','vldmdbne','vldmdbcs','vldmdbhs','vldmdbcc','vldmdblo','vldmdbmi','vldmdbpl','vldmdbvs','vldmdbvc','vldmdbhi','vldmdbls','vldmdbge','vldmdblt','vldmdbgt','vldmdble', - 'vldmdbeq.32','vldmdbne.32','vldmdbcs.32','vldmdbhs.32','vldmdbcc.32','vldmdblo.32','vldmdbmi.32','vldmdbpl.32','vldmdbvs.32','vldmdbvc.32','vldmdbhi.32','vldmdbls.32','vldmdbge.32','vldmdblt.32','vldmdbgt.32','vldmdble.32', - 'vldmdbeq.64','vldmdbne.64','vldmdbcs.64','vldmdbhs.64','vldmdbcc.64','vldmdblo.64','vldmdbmi.64','vldmdbpl.64','vldmdbvs.64','vldmdbvc.64','vldmdbhi.64','vldmdbls.64','vldmdbge.64','vldmdblt.64','vldmdbgt.64','vldmdble.64', - - 'vldreq','vldrne','vldrcs','vldrhs','vldrcc','vldrlo','vldrmi','vldrpl','vldrvs','vldrvc','vldrhi','vldrls','vldrge','vldrlt','vldrgt','vldrle', - 'vldreq.32','vldrne.32','vldrcs.32','vldrhs.32','vldrcc.32','vldrlo.32','vldrmi.32','vldrpl.32','vldrvs.32','vldrvc.32','vldrhi.32','vldrls.32','vldrge.32','vldrlt.32','vldrgt.32','vldrle.32', - 'vldreq.64','vldrne.64','vldrcs.64','vldrhs.64','vldrcc.64','vldrlo.64','vldrmi.64','vldrpl.64','vldrvs.64','vldrvc.64','vldrhi.64','vldrls.64','vldrge.64','vldrlt.64','vldrgt.64','vldrle.64', - - 'vpopeq','vpopne','vpopcs','vpophs','vpopcc','vpoplo','vpopmi','vpoppl','vpopvs','vpopvc','vpophi','vpopls','vpopge','vpoplt','vpopgt','vpople', - 'vpopeq.32','vpopne.32','vpopcs.32','vpophs.32','vpopcc.32','vpoplo.32','vpopmi.32','vpoppl.32','vpopvs.32','vpopvc.32','vpophi.32','vpopls.32','vpopge.32','vpoplt.32','vpopgt.32','vpople.32', - 'vpopeq.64','vpopne.64','vpopcs.64','vpophs.64','vpopcc.64','vpoplo.64','vpopmi.64','vpoppl.64','vpopvs.64','vpopvc.64','vpophi.64','vpopls.64','vpopge.64','vpoplt.64','vpopgt.64','vpople.64', - - /* Conditional VFPv3 & NEON SIMD Memory Access: Stores */ - 'vst1eq.8','vst1ne.8','vst1cs.8','vst1hs.8','vst1cc.8','vst1lo.8','vst1mi.8','vst1pl.8','vst1vs.8','vst1vc.8','vst1hi.8','vst1ls.8','vst1ge.8','vst1lt.8','vst1gt.8','vst1le.8', - 'vst1eq.16','vst1ne.16','vst1cs.16','vst1hs.16','vst1cc.16','vst1lo.16','vst1mi.16','vst1pl.16','vst1vs.16','vst1vc.16','vst1hi.16','vst1ls.16','vst1ge.16','vst1lt.16','vst1gt.16','vst1le.16', - 'vst1eq.32','vst1ne.32','vst1cs.32','vst1hs.32','vst1cc.32','vst1lo.32','vst1mi.32','vst1pl.32','vst1vs.32','vst1vc.32','vst1hi.32','vst1ls.32','vst1ge.32','vst1lt.32','vst1gt.32','vst1le.32', - 'vst1eq.64','vst1ne.64','vst1cs.64','vst1hs.64','vst1cc.64','vst1lo.64','vst1mi.64','vst1pl.64','vst1vs.64','vst1vc.64','vst1hi.64','vst1ls.64','vst1ge.64','vst1lt.64','vst1gt.64','vst1le.64', - - 'vst2eq.8','vst2ne.8','vst2cs.8','vst2hs.8','vst2cc.8','vst2lo.8','vst2mi.8','vst2pl.8','vst2vs.8','vst2vc.8','vst2hi.8','vst2ls.8','vst2ge.8','vst2lt.8','vst2gt.8','vst2le.8', - 'vst2eq.16','vst2ne.16','vst2cs.16','vst2hs.16','vst2cc.16','vst2lo.16','vst2mi.16','vst2pl.16','vst2vs.16','vst2vc.16','vst2hi.16','vst2ls.16','vst2ge.16','vst2lt.16','vst2gt.16','vst2le.16', - 'vst2eq.32','vst2ne.32','vst2cs.32','vst2hs.32','vst2cc.32','vst2lo.32','vst2mi.32','vst2pl.32','vst2vs.32','vst2vc.32','vst2hi.32','vst2ls.32','vst2ge.32','vst2lt.32','vst2gt.32','vst2le.32', - - 'vst3eq.8','vst3ne.8','vst3cs.8','vst3hs.8','vst3cc.8','vst3lo.8','vst3mi.8','vst3pl.8','vst3vs.8','vst3vc.8','vst3hi.8','vst3ls.8','vst3ge.8','vst3lt.8','vst3gt.8','vst3le.8', - 'vst3eq.16','vst3ne.16','vst3cs.16','vst3hs.16','vst3cc.16','vst3lo.16','vst3mi.16','vst3pl.16','vst3vs.16','vst3vc.16','vst3hi.16','vst3ls.16','vst3ge.16','vst3lt.16','vst3gt.16','vst3le.16', - 'vst3eq.32','vst3ne.32','vst3cs.32','vst3hs.32','vst3cc.32','vst3lo.32','vst3mi.32','vst3pl.32','vst3vs.32','vst3vc.32','vst3hi.32','vst3ls.32','vst3ge.32','vst3lt.32','vst3gt.32','vst3le.32', - - 'vst4eq.8','vst4ne.8','vst4cs.8','vst4hs.8','vst4cc.8','vst4lo.8','vst4mi.8','vst4pl.8','vst4vs.8','vst4vc.8','vst4hi.8','vst4ls.8','vst4ge.8','vst4lt.8','vst4gt.8','vst4le.8', - 'vst4eq.16','vst4ne.16','vst4cs.16','vst4hs.16','vst4cc.16','vst4lo.16','vst4mi.16','vst4pl.16','vst4vs.16','vst4vc.16','vst4hi.16','vst4ls.16','vst4ge.16','vst4lt.16','vst4gt.16','vst4le.16', - 'vst4eq.32','vst4ne.32','vst4cs.32','vst4hs.32','vst4cc.32','vst4lo.32','vst4mi.32','vst4pl.32','vst4vs.32','vst4vc.32','vst4hi.32','vst4ls.32','vst4ge.32','vst4lt.32','vst4gt.32','vst4le.32', - - 'vstmeq','vstmne','vstmcs','vstmhs','vstmcc','vstmlo','vstmmi','vstmpl','vstmvs','vstmvc','vstmhi','vstmls','vstmge','vstmlt','vstmgt','vstmle', - 'vstmeq.32','vstmne.32','vstmcs.32','vstmhs.32','vstmcc.32','vstmlo.32','vstmmi.32','vstmpl.32','vstmvs.32','vstmvc.32','vstmhi.32','vstmls.32','vstmge.32','vstmlt.32','vstmgt.32','vstmle.32', - 'vstmeq.64','vstmne.64','vstmcs.64','vstmhs.64','vstmcc.64','vstmlo.64','vstmmi.64','vstmpl.64','vstmvs.64','vstmvc.64','vstmhi.64','vstmls.64','vstmge.64','vstmlt.64','vstmgt.64','vstmle.64', - - 'vstmiaeq','vstmiane','vstmiacs','vstmiahs','vstmiacc','vstmialo','vstmiami','vstmiapl','vstmiavs','vstmiavc','vstmiahi','vstmials','vstmiage','vstmialt','vstmiagt','vstmiale', - 'vstmiaeq.32','vstmiane.32','vstmiacs.32','vstmiahs.32','vstmiacc.32','vstmialo.32','vstmiami.32','vstmiapl.32','vstmiavs.32','vstmiavc.32','vstmiahi.32','vstmials.32','vstmiage.32','vstmialt.32','vstmiagt.32','vstmiale.32', - 'vstmiaeq.64','vstmiane.64','vstmiacs.64','vstmiahs.64','vstmiacc.64','vstmialo.64','vstmiami.64','vstmiapl.64','vstmiavs.64','vstmiavc.64','vstmiahi.64','vstmials.64','vstmiage.64','vstmialt.64','vstmiagt.64','vstmiale.64', - - 'vstmdbeq','vstmdbne','vstmdbcs','vstmdbhs','vstmdbcc','vstmdblo','vstmdbmi','vstmdbpl','vstmdbvs','vstmdbvc','vstmdbhi','vstmdbls','vstmdbge','vstmdblt','vstmdbgt','vstmdble', - 'vstmdbeq.32','vstmdbne.32','vstmdbcs.32','vstmdbhs.32','vstmdbcc.32','vstmdblo.32','vstmdbmi.32','vstmdbpl.32','vstmdbvs.32','vstmdbvc.32','vstmdbhi.32','vstmdbls.32','vstmdbge.32','vstmdblt.32','vstmdbgt.32','vstmdble.32', - 'vstmdbeq.64','vstmdbne.64','vstmdbcs.64','vstmdbhs.64','vstmdbcc.64','vstmdblo.64','vstmdbmi.64','vstmdbpl.64','vstmdbvs.64','vstmdbvc.64','vstmdbhi.64','vstmdbls.64','vstmdbge.64','vstmdblt.64','vstmdbgt.64','vstmdble.64', - - 'vstreq','vstrne','vstrcs','vstrhs','vstrcc','vstrlo','vstrmi','vstrpl','vstrvs','vstrvc','vstrhi','vstrls','vstrge','vstrlt','vstrgt','vstrle', - 'vstreq.32','vstrne.32','vstrcs.32','vstrhs.32','vstrcc.32','vstrlo.32','vstrmi.32','vstrpl.32','vstrvs.32','vstrvc.32','vstrhi.32','vstrls.32','vstrge.32','vstrlt.32','vstrgt.32','vstrle.32', - 'vstreq.64','vstrne.64','vstrcs.64','vstrhs.64','vstrcc.64','vstrlo.64','vstrmi.64','vstrpl.64','vstrvs.64','vstrvc.64','vstrhi.64','vstrls.64','vstrge.64','vstrlt.64','vstrgt.64','vstrle.64', - - 'vpusheq','vpushne','vpushcs','vpushhs','vpushcc','vpushlo','vpushmi','vpushpl','vpushvs','vpushvc','vpushhi','vpushls','vpushge','vpushlt','vpushgt','vpushle', - 'vpusheq.32','vpushne.32','vpushcs.32','vpushhs.32','vpushcc.32','vpushlo.32','vpushmi.32','vpushpl.32','vpushvs.32','vpushvc.32','vpushhi.32','vpushls.32','vpushge.32','vpushlt.32','vpushgt.32','vpushle.32', - 'vpusheq.64','vpushne.64','vpushcs.64','vpushhs.64','vpushcc.64','vpushlo.64','vpushmi.64','vpushpl.64','vpushvs.64','vpushvc.64','vpushhi.64','vpushls.64','vpushge.64','vpushlt.64','vpushgt.64','vpushle.64' - ), - /* Conditional NEON SIMD Logical Instructions */ - 28 => array( - 'vandeq','vandne','vandcs','vandhs','vandcc','vandlo','vandmi','vandpl','vandvs','vandvc','vandhi','vandls','vandge','vandlt','vandgt','vandle', - 'vandeq.i8','vandne.i8','vandcs.i8','vandhs.i8','vandcc.i8','vandlo.i8','vandmi.i8','vandpl.i8','vandvs.i8','vandvc.i8','vandhi.i8','vandls.i8','vandge.i8','vandlt.i8','vandgt.i8','vandle.i8', - 'vandeq.i16','vandne.i16','vandcs.i16','vandhs.i16','vandcc.i16','vandlo.i16','vandmi.i16','vandpl.i16','vandvs.i16','vandvc.i16','vandhi.i16','vandls.i16','vandge.i16','vandlt.i16','vandgt.i16','vandle.i16', - 'vandeq.i32','vandne.i32','vandcs.i32','vandhs.i32','vandcc.i32','vandlo.i32','vandmi.i32','vandpl.i32','vandvs.i32','vandvc.i32','vandhi.i32','vandls.i32','vandge.i32','vandlt.i32','vandgt.i32','vandle.i32', - 'vandeq.i64','vandne.i64','vandcs.i64','vandhs.i64','vandcc.i64','vandlo.i64','vandmi.i64','vandpl.i64','vandvs.i64','vandvc.i64','vandhi.i64','vandls.i64','vandge.i64','vandlt.i64','vandgt.i64','vandle.i64', - 'vandeq.s8','vandne.s8','vandcs.s8','vandhs.s8','vandcc.s8','vandlo.s8','vandmi.s8','vandpl.s8','vandvs.s8','vandvc.s8','vandhi.s8','vandls.s8','vandge.s8','vandlt.s8','vandgt.s8','vandle.s8', - 'vandeq.s16','vandne.s16','vandcs.s16','vandhs.s16','vandcc.s16','vandlo.s16','vandmi.s16','vandpl.s16','vandvs.s16','vandvc.s16','vandhi.s16','vandls.s16','vandge.s16','vandlt.s16','vandgt.s16','vandle.s16', - 'vandeq.s32','vandne.s32','vandcs.s32','vandhs.s32','vandcc.s32','vandlo.s32','vandmi.s32','vandpl.s32','vandvs.s32','vandvc.s32','vandhi.s32','vandls.s32','vandge.s32','vandlt.s32','vandgt.s32','vandle.s32', - 'vandeq.s64','vandne.s64','vandcs.s64','vandhs.s64','vandcc.s64','vandlo.s64','vandmi.s64','vandpl.s64','vandvs.s64','vandvc.s64','vandhi.s64','vandls.s64','vandge.s64','vandlt.s64','vandgt.s64','vandle.s64', - 'vandeq.u8','vandne.u8','vandcs.u8','vandhs.u8','vandcc.u8','vandlo.u8','vandmi.u8','vandpl.u8','vandvs.u8','vandvc.u8','vandhi.u8','vandls.u8','vandge.u8','vandlt.u8','vandgt.u8','vandle.u8', - 'vandeq.u16','vandne.u16','vandcs.u16','vandhs.u16','vandcc.u16','vandlo.u16','vandmi.u16','vandpl.u16','vandvs.u16','vandvc.u16','vandhi.u16','vandls.u16','vandge.u16','vandlt.u16','vandgt.u16','vandle.u16', - 'vandeq.u32','vandne.u32','vandcs.u32','vandhs.u32','vandcc.u32','vandlo.u32','vandmi.u32','vandpl.u32','vandvs.u32','vandvc.u32','vandhi.u32','vandls.u32','vandge.u32','vandlt.u32','vandgt.u32','vandle.u32', - 'vandeq.u64','vandne.u64','vandcs.u64','vandhs.u64','vandcc.u64','vandlo.u64','vandmi.u64','vandpl.u64','vandvs.u64','vandvc.u64','vandhi.u64','vandls.u64','vandge.u64','vandlt.u64','vandgt.u64','vandle.u64', - 'vandeq.f32','vandne.f32','vandcs.f32','vandhs.f32','vandcc.f32','vandlo.f32','vandmi.f32','vandpl.f32','vandvs.f32','vandvc.f32','vandhi.f32','vandls.f32','vandge.f32','vandlt.f32','vandgt.f32','vandle.f32', - 'vandeq.f64','vandne.f64','vandcs.f64','vandhs.f64','vandcc.f64','vandlo.f64','vandmi.f64','vandpl.f64','vandvs.f64','vandvc.f64','vandhi.f64','vandls.f64','vandge.f64','vandlt.f64','vandgt.f64','vandle.f64', - - 'vbiceq','vbicne','vbiccs','vbichs','vbiccc','vbiclo','vbicmi','vbicpl','vbicvs','vbicvc','vbichi','vbicls','vbicge','vbiclt','vbicgt','vbicle', - 'vbiceq.i8','vbicne.i8','vbiccs.i8','vbichs.i8','vbiccc.i8','vbiclo.i8','vbicmi.i8','vbicpl.i8','vbicvs.i8','vbicvc.i8','vbichi.i8','vbicls.i8','vbicge.i8','vbiclt.i8','vbicgt.i8','vbicle.i8', - 'vbiceq.i16','vbicne.i16','vbiccs.i16','vbichs.i16','vbiccc.i16','vbiclo.i16','vbicmi.i16','vbicpl.i16','vbicvs.i16','vbicvc.i16','vbichi.i16','vbicls.i16','vbicge.i16','vbiclt.i16','vbicgt.i16','vbicle.i16', - 'vbiceq.i32','vbicne.i32','vbiccs.i32','vbichs.i32','vbiccc.i32','vbiclo.i32','vbicmi.i32','vbicpl.i32','vbicvs.i32','vbicvc.i32','vbichi.i32','vbicls.i32','vbicge.i32','vbiclt.i32','vbicgt.i32','vbicle.i32', - 'vbiceq.i64','vbicne.i64','vbiccs.i64','vbichs.i64','vbiccc.i64','vbiclo.i64','vbicmi.i64','vbicpl.i64','vbicvs.i64','vbicvc.i64','vbichi.i64','vbicls.i64','vbicge.i64','vbiclt.i64','vbicgt.i64','vbicle.i64', - 'vbiceq.s8','vbicne.s8','vbiccs.s8','vbichs.s8','vbiccc.s8','vbiclo.s8','vbicmi.s8','vbicpl.s8','vbicvs.s8','vbicvc.s8','vbichi.s8','vbicls.s8','vbicge.s8','vbiclt.s8','vbicgt.s8','vbicle.s8', - 'vbiceq.s16','vbicne.s16','vbiccs.s16','vbichs.s16','vbiccc.s16','vbiclo.s16','vbicmi.s16','vbicpl.s16','vbicvs.s16','vbicvc.s16','vbichi.s16','vbicls.s16','vbicge.s16','vbiclt.s16','vbicgt.s16','vbicle.s16', - 'vbiceq.s32','vbicne.s32','vbiccs.s32','vbichs.s32','vbiccc.s32','vbiclo.s32','vbicmi.s32','vbicpl.s32','vbicvs.s32','vbicvc.s32','vbichi.s32','vbicls.s32','vbicge.s32','vbiclt.s32','vbicgt.s32','vbicle.s32', - 'vbiceq.s64','vbicne.s64','vbiccs.s64','vbichs.s64','vbiccc.s64','vbiclo.s64','vbicmi.s64','vbicpl.s64','vbicvs.s64','vbicvc.s64','vbichi.s64','vbicls.s64','vbicge.s64','vbiclt.s64','vbicgt.s64','vbicle.s64', - 'vbiceq.u8','vbicne.u8','vbiccs.u8','vbichs.u8','vbiccc.u8','vbiclo.u8','vbicmi.u8','vbicpl.u8','vbicvs.u8','vbicvc.u8','vbichi.u8','vbicls.u8','vbicge.u8','vbiclt.u8','vbicgt.u8','vbicle.u8', - 'vbiceq.u16','vbicne.u16','vbiccs.u16','vbichs.u16','vbiccc.u16','vbiclo.u16','vbicmi.u16','vbicpl.u16','vbicvs.u16','vbicvc.u16','vbichi.u16','vbicls.u16','vbicge.u16','vbiclt.u16','vbicgt.u16','vbicle.u16', - 'vbiceq.u32','vbicne.u32','vbiccs.u32','vbichs.u32','vbiccc.u32','vbiclo.u32','vbicmi.u32','vbicpl.u32','vbicvs.u32','vbicvc.u32','vbichi.u32','vbicls.u32','vbicge.u32','vbiclt.u32','vbicgt.u32','vbicle.u32', - 'vbiceq.u64','vbicne.u64','vbiccs.u64','vbichs.u64','vbiccc.u64','vbiclo.u64','vbicmi.u64','vbicpl.u64','vbicvs.u64','vbicvc.u64','vbichi.u64','vbicls.u64','vbicge.u64','vbiclt.u64','vbicgt.u64','vbicle.u64', - 'vbiceq.f32','vbicne.f32','vbiccs.f32','vbichs.f32','vbiccc.f32','vbiclo.f32','vbicmi.f32','vbicpl.f32','vbicvs.f32','vbicvc.f32','vbichi.f32','vbicls.f32','vbicge.f32','vbiclt.f32','vbicgt.f32','vbicle.f32', - 'vbiceq.f64','vbicne.f64','vbiccs.f64','vbichs.f64','vbiccc.f64','vbiclo.f64','vbicmi.f64','vbicpl.f64','vbicvs.f64','vbicvc.f64','vbichi.f64','vbicls.f64','vbicge.f64','vbiclt.f64','vbicgt.f64','vbicle.f64', - - 'vbifeq','vbifne','vbifcs','vbifhs','vbifcc','vbiflo','vbifmi','vbifpl','vbifvs','vbifvc','vbifhi','vbifls','vbifge','vbiflt','vbifgt','vbifle', - 'vbifeq.i8','vbifne.i8','vbifcs.i8','vbifhs.i8','vbifcc.i8','vbiflo.i8','vbifmi.i8','vbifpl.i8','vbifvs.i8','vbifvc.i8','vbifhi.i8','vbifls.i8','vbifge.i8','vbiflt.i8','vbifgt.i8','vbifle.i8', - 'vbifeq.i16','vbifne.i16','vbifcs.i16','vbifhs.i16','vbifcc.i16','vbiflo.i16','vbifmi.i16','vbifpl.i16','vbifvs.i16','vbifvc.i16','vbifhi.i16','vbifls.i16','vbifge.i16','vbiflt.i16','vbifgt.i16','vbifle.i16', - 'vbifeq.i32','vbifne.i32','vbifcs.i32','vbifhs.i32','vbifcc.i32','vbiflo.i32','vbifmi.i32','vbifpl.i32','vbifvs.i32','vbifvc.i32','vbifhi.i32','vbifls.i32','vbifge.i32','vbiflt.i32','vbifgt.i32','vbifle.i32', - 'vbifeq.i64','vbifne.i64','vbifcs.i64','vbifhs.i64','vbifcc.i64','vbiflo.i64','vbifmi.i64','vbifpl.i64','vbifvs.i64','vbifvc.i64','vbifhi.i64','vbifls.i64','vbifge.i64','vbiflt.i64','vbifgt.i64','vbifle.i64', - 'vbifeq.s8','vbifne.s8','vbifcs.s8','vbifhs.s8','vbifcc.s8','vbiflo.s8','vbifmi.s8','vbifpl.s8','vbifvs.s8','vbifvc.s8','vbifhi.s8','vbifls.s8','vbifge.s8','vbiflt.s8','vbifgt.s8','vbifle.s8', - 'vbifeq.s16','vbifne.s16','vbifcs.s16','vbifhs.s16','vbifcc.s16','vbiflo.s16','vbifmi.s16','vbifpl.s16','vbifvs.s16','vbifvc.s16','vbifhi.s16','vbifls.s16','vbifge.s16','vbiflt.s16','vbifgt.s16','vbifle.s16', - 'vbifeq.s32','vbifne.s32','vbifcs.s32','vbifhs.s32','vbifcc.s32','vbiflo.s32','vbifmi.s32','vbifpl.s32','vbifvs.s32','vbifvc.s32','vbifhi.s32','vbifls.s32','vbifge.s32','vbiflt.s32','vbifgt.s32','vbifle.s32', - 'vbifeq.s64','vbifne.s64','vbifcs.s64','vbifhs.s64','vbifcc.s64','vbiflo.s64','vbifmi.s64','vbifpl.s64','vbifvs.s64','vbifvc.s64','vbifhi.s64','vbifls.s64','vbifge.s64','vbiflt.s64','vbifgt.s64','vbifle.s64', - 'vbifeq.u8','vbifne.u8','vbifcs.u8','vbifhs.u8','vbifcc.u8','vbiflo.u8','vbifmi.u8','vbifpl.u8','vbifvs.u8','vbifvc.u8','vbifhi.u8','vbifls.u8','vbifge.u8','vbiflt.u8','vbifgt.u8','vbifle.u8', - 'vbifeq.u16','vbifne.u16','vbifcs.u16','vbifhs.u16','vbifcc.u16','vbiflo.u16','vbifmi.u16','vbifpl.u16','vbifvs.u16','vbifvc.u16','vbifhi.u16','vbifls.u16','vbifge.u16','vbiflt.u16','vbifgt.u16','vbifle.u16', - 'vbifeq.u32','vbifne.u32','vbifcs.u32','vbifhs.u32','vbifcc.u32','vbiflo.u32','vbifmi.u32','vbifpl.u32','vbifvs.u32','vbifvc.u32','vbifhi.u32','vbifls.u32','vbifge.u32','vbiflt.u32','vbifgt.u32','vbifle.u32', - 'vbifeq.u64','vbifne.u64','vbifcs.u64','vbifhs.u64','vbifcc.u64','vbiflo.u64','vbifmi.u64','vbifpl.u64','vbifvs.u64','vbifvc.u64','vbifhi.u64','vbifls.u64','vbifge.u64','vbiflt.u64','vbifgt.u64','vbifle.u64', - 'vbifeq.f32','vbifne.f32','vbifcs.f32','vbifhs.f32','vbifcc.f32','vbiflo.f32','vbifmi.f32','vbifpl.f32','vbifvs.f32','vbifvc.f32','vbifhi.f32','vbifls.f32','vbifge.f32','vbiflt.f32','vbifgt.f32','vbifle.f32', - 'vbifeq.f64','vbifne.f64','vbifcs.f64','vbifhs.f64','vbifcc.f64','vbiflo.f64','vbifmi.f64','vbifpl.f64','vbifvs.f64','vbifvc.f64','vbifhi.f64','vbifls.f64','vbifge.f64','vbiflt.f64','vbifgt.f64','vbifle.f64', - - 'vbiteq','vbitne','vbitcs','vbiths','vbitcc','vbitlo','vbitmi','vbitpl','vbitvs','vbitvc','vbithi','vbitls','vbitge','vbitlt','vbitgt','vbitle', - 'vbiteq.i8','vbitne.i8','vbitcs.i8','vbiths.i8','vbitcc.i8','vbitlo.i8','vbitmi.i8','vbitpl.i8','vbitvs.i8','vbitvc.i8','vbithi.i8','vbitls.i8','vbitge.i8','vbitlt.i8','vbitgt.i8','vbitle.i8', - 'vbiteq.i16','vbitne.i16','vbitcs.i16','vbiths.i16','vbitcc.i16','vbitlo.i16','vbitmi.i16','vbitpl.i16','vbitvs.i16','vbitvc.i16','vbithi.i16','vbitls.i16','vbitge.i16','vbitlt.i16','vbitgt.i16','vbitle.i16', - 'vbiteq.i32','vbitne.i32','vbitcs.i32','vbiths.i32','vbitcc.i32','vbitlo.i32','vbitmi.i32','vbitpl.i32','vbitvs.i32','vbitvc.i32','vbithi.i32','vbitls.i32','vbitge.i32','vbitlt.i32','vbitgt.i32','vbitle.i32', - 'vbiteq.i64','vbitne.i64','vbitcs.i64','vbiths.i64','vbitcc.i64','vbitlo.i64','vbitmi.i64','vbitpl.i64','vbitvs.i64','vbitvc.i64','vbithi.i64','vbitls.i64','vbitge.i64','vbitlt.i64','vbitgt.i64','vbitle.i64', - 'vbiteq.s8','vbitne.s8','vbitcs.s8','vbiths.s8','vbitcc.s8','vbitlo.s8','vbitmi.s8','vbitpl.s8','vbitvs.s8','vbitvc.s8','vbithi.s8','vbitls.s8','vbitge.s8','vbitlt.s8','vbitgt.s8','vbitle.s8', - 'vbiteq.s16','vbitne.s16','vbitcs.s16','vbiths.s16','vbitcc.s16','vbitlo.s16','vbitmi.s16','vbitpl.s16','vbitvs.s16','vbitvc.s16','vbithi.s16','vbitls.s16','vbitge.s16','vbitlt.s16','vbitgt.s16','vbitle.s16', - 'vbiteq.s32','vbitne.s32','vbitcs.s32','vbiths.s32','vbitcc.s32','vbitlo.s32','vbitmi.s32','vbitpl.s32','vbitvs.s32','vbitvc.s32','vbithi.s32','vbitls.s32','vbitge.s32','vbitlt.s32','vbitgt.s32','vbitle.s32', - 'vbiteq.s64','vbitne.s64','vbitcs.s64','vbiths.s64','vbitcc.s64','vbitlo.s64','vbitmi.s64','vbitpl.s64','vbitvs.s64','vbitvc.s64','vbithi.s64','vbitls.s64','vbitge.s64','vbitlt.s64','vbitgt.s64','vbitle.s64', - 'vbiteq.u8','vbitne.u8','vbitcs.u8','vbiths.u8','vbitcc.u8','vbitlo.u8','vbitmi.u8','vbitpl.u8','vbitvs.u8','vbitvc.u8','vbithi.u8','vbitls.u8','vbitge.u8','vbitlt.u8','vbitgt.u8','vbitle.u8', - 'vbiteq.u16','vbitne.u16','vbitcs.u16','vbiths.u16','vbitcc.u16','vbitlo.u16','vbitmi.u16','vbitpl.u16','vbitvs.u16','vbitvc.u16','vbithi.u16','vbitls.u16','vbitge.u16','vbitlt.u16','vbitgt.u16','vbitle.u16', - 'vbiteq.u32','vbitne.u32','vbitcs.u32','vbiths.u32','vbitcc.u32','vbitlo.u32','vbitmi.u32','vbitpl.u32','vbitvs.u32','vbitvc.u32','vbithi.u32','vbitls.u32','vbitge.u32','vbitlt.u32','vbitgt.u32','vbitle.u32', - 'vbiteq.u64','vbitne.u64','vbitcs.u64','vbiths.u64','vbitcc.u64','vbitlo.u64','vbitmi.u64','vbitpl.u64','vbitvs.u64','vbitvc.u64','vbithi.u64','vbitls.u64','vbitge.u64','vbitlt.u64','vbitgt.u64','vbitle.u64', - 'vbiteq.f32','vbitne.f32','vbitcs.f32','vbiths.f32','vbitcc.f32','vbitlo.f32','vbitmi.f32','vbitpl.f32','vbitvs.f32','vbitvc.f32','vbithi.f32','vbitls.f32','vbitge.f32','vbitlt.f32','vbitgt.f32','vbitle.f32', - 'vbiteq.f64','vbitne.f64','vbitcs.f64','vbiths.f64','vbitcc.f64','vbitlo.f64','vbitmi.f64','vbitpl.f64','vbitvs.f64','vbitvc.f64','vbithi.f64','vbitls.f64','vbitge.f64','vbitlt.f64','vbitgt.f64','vbitle.f64', - - 'vbsleq','vbslne','vbslcs','vbslhs','vbslcc','vbsllo','vbslmi','vbslpl','vbslvs','vbslvc','vbslhi','vbslls','vbslge','vbsllt','vbslgt','vbslle', - 'vbsleq.i8','vbslne.i8','vbslcs.i8','vbslhs.i8','vbslcc.i8','vbsllo.i8','vbslmi.i8','vbslpl.i8','vbslvs.i8','vbslvc.i8','vbslhi.i8','vbslls.i8','vbslge.i8','vbsllt.i8','vbslgt.i8','vbslle.i8', - 'vbsleq.i16','vbslne.i16','vbslcs.i16','vbslhs.i16','vbslcc.i16','vbsllo.i16','vbslmi.i16','vbslpl.i16','vbslvs.i16','vbslvc.i16','vbslhi.i16','vbslls.i16','vbslge.i16','vbsllt.i16','vbslgt.i16','vbslle.i16', - 'vbsleq.i32','vbslne.i32','vbslcs.i32','vbslhs.i32','vbslcc.i32','vbsllo.i32','vbslmi.i32','vbslpl.i32','vbslvs.i32','vbslvc.i32','vbslhi.i32','vbslls.i32','vbslge.i32','vbsllt.i32','vbslgt.i32','vbslle.i32', - 'vbsleq.i64','vbslne.i64','vbslcs.i64','vbslhs.i64','vbslcc.i64','vbsllo.i64','vbslmi.i64','vbslpl.i64','vbslvs.i64','vbslvc.i64','vbslhi.i64','vbslls.i64','vbslge.i64','vbsllt.i64','vbslgt.i64','vbslle.i64', - 'vbsleq.s8','vbslne.s8','vbslcs.s8','vbslhs.s8','vbslcc.s8','vbsllo.s8','vbslmi.s8','vbslpl.s8','vbslvs.s8','vbslvc.s8','vbslhi.s8','vbslls.s8','vbslge.s8','vbsllt.s8','vbslgt.s8','vbslle.s8', - 'vbsleq.s16','vbslne.s16','vbslcs.s16','vbslhs.s16','vbslcc.s16','vbsllo.s16','vbslmi.s16','vbslpl.s16','vbslvs.s16','vbslvc.s16','vbslhi.s16','vbslls.s16','vbslge.s16','vbsllt.s16','vbslgt.s16','vbslle.s16', - 'vbsleq.s32','vbslne.s32','vbslcs.s32','vbslhs.s32','vbslcc.s32','vbsllo.s32','vbslmi.s32','vbslpl.s32','vbslvs.s32','vbslvc.s32','vbslhi.s32','vbslls.s32','vbslge.s32','vbsllt.s32','vbslgt.s32','vbslle.s32', - 'vbsleq.s64','vbslne.s64','vbslcs.s64','vbslhs.s64','vbslcc.s64','vbsllo.s64','vbslmi.s64','vbslpl.s64','vbslvs.s64','vbslvc.s64','vbslhi.s64','vbslls.s64','vbslge.s64','vbsllt.s64','vbslgt.s64','vbslle.s64', - 'vbsleq.u8','vbslne.u8','vbslcs.u8','vbslhs.u8','vbslcc.u8','vbsllo.u8','vbslmi.u8','vbslpl.u8','vbslvs.u8','vbslvc.u8','vbslhi.u8','vbslls.u8','vbslge.u8','vbsllt.u8','vbslgt.u8','vbslle.u8', - 'vbsleq.u16','vbslne.u16','vbslcs.u16','vbslhs.u16','vbslcc.u16','vbsllo.u16','vbslmi.u16','vbslpl.u16','vbslvs.u16','vbslvc.u16','vbslhi.u16','vbslls.u16','vbslge.u16','vbsllt.u16','vbslgt.u16','vbslle.u16', - 'vbsleq.u32','vbslne.u32','vbslcs.u32','vbslhs.u32','vbslcc.u32','vbsllo.u32','vbslmi.u32','vbslpl.u32','vbslvs.u32','vbslvc.u32','vbslhi.u32','vbslls.u32','vbslge.u32','vbsllt.u32','vbslgt.u32','vbslle.u32', - 'vbsleq.u64','vbslne.u64','vbslcs.u64','vbslhs.u64','vbslcc.u64','vbsllo.u64','vbslmi.u64','vbslpl.u64','vbslvs.u64','vbslvc.u64','vbslhi.u64','vbslls.u64','vbslge.u64','vbsllt.u64','vbslgt.u64','vbslle.u64', - 'vbsleq.f32','vbslne.f32','vbslcs.f32','vbslhs.f32','vbslcc.f32','vbsllo.f32','vbslmi.f32','vbslpl.f32','vbslvs.f32','vbslvc.f32','vbslhi.f32','vbslls.f32','vbslge.f32','vbsllt.f32','vbslgt.f32','vbslle.f32', - 'vbsleq.f64','vbslne.f64','vbslcs.f64','vbslhs.f64','vbslcc.f64','vbsllo.f64','vbslmi.f64','vbslpl.f64','vbslvs.f64','vbslvc.f64','vbslhi.f64','vbslls.f64','vbslge.f64','vbsllt.f64','vbslgt.f64','vbslle.f64', - - 'veoreq','veorne','veorcs','veorhs','veorcc','veorlo','veormi','veorpl','veorvs','veorvc','veorhi','veorls','veorge','veorlt','veorgt','veorle', - 'veoreq.i8','veorne.i8','veorcs.i8','veorhs.i8','veorcc.i8','veorlo.i8','veormi.i8','veorpl.i8','veorvs.i8','veorvc.i8','veorhi.i8','veorls.i8','veorge.i8','veorlt.i8','veorgt.i8','veorle.i8', - 'veoreq.i16','veorne.i16','veorcs.i16','veorhs.i16','veorcc.i16','veorlo.i16','veormi.i16','veorpl.i16','veorvs.i16','veorvc.i16','veorhi.i16','veorls.i16','veorge.i16','veorlt.i16','veorgt.i16','veorle.i16', - 'veoreq.i32','veorne.i32','veorcs.i32','veorhs.i32','veorcc.i32','veorlo.i32','veormi.i32','veorpl.i32','veorvs.i32','veorvc.i32','veorhi.i32','veorls.i32','veorge.i32','veorlt.i32','veorgt.i32','veorle.i32', - 'veoreq.i64','veorne.i64','veorcs.i64','veorhs.i64','veorcc.i64','veorlo.i64','veormi.i64','veorpl.i64','veorvs.i64','veorvc.i64','veorhi.i64','veorls.i64','veorge.i64','veorlt.i64','veorgt.i64','veorle.i64', - 'veoreq.s8','veorne.s8','veorcs.s8','veorhs.s8','veorcc.s8','veorlo.s8','veormi.s8','veorpl.s8','veorvs.s8','veorvc.s8','veorhi.s8','veorls.s8','veorge.s8','veorlt.s8','veorgt.s8','veorle.s8', - 'veoreq.s16','veorne.s16','veorcs.s16','veorhs.s16','veorcc.s16','veorlo.s16','veormi.s16','veorpl.s16','veorvs.s16','veorvc.s16','veorhi.s16','veorls.s16','veorge.s16','veorlt.s16','veorgt.s16','veorle.s16', - 'veoreq.s32','veorne.s32','veorcs.s32','veorhs.s32','veorcc.s32','veorlo.s32','veormi.s32','veorpl.s32','veorvs.s32','veorvc.s32','veorhi.s32','veorls.s32','veorge.s32','veorlt.s32','veorgt.s32','veorle.s32', - 'veoreq.s64','veorne.s64','veorcs.s64','veorhs.s64','veorcc.s64','veorlo.s64','veormi.s64','veorpl.s64','veorvs.s64','veorvc.s64','veorhi.s64','veorls.s64','veorge.s64','veorlt.s64','veorgt.s64','veorle.s64', - 'veoreq.u8','veorne.u8','veorcs.u8','veorhs.u8','veorcc.u8','veorlo.u8','veormi.u8','veorpl.u8','veorvs.u8','veorvc.u8','veorhi.u8','veorls.u8','veorge.u8','veorlt.u8','veorgt.u8','veorle.u8', - 'veoreq.u16','veorne.u16','veorcs.u16','veorhs.u16','veorcc.u16','veorlo.u16','veormi.u16','veorpl.u16','veorvs.u16','veorvc.u16','veorhi.u16','veorls.u16','veorge.u16','veorlt.u16','veorgt.u16','veorle.u16', - 'veoreq.u32','veorne.u32','veorcs.u32','veorhs.u32','veorcc.u32','veorlo.u32','veormi.u32','veorpl.u32','veorvs.u32','veorvc.u32','veorhi.u32','veorls.u32','veorge.u32','veorlt.u32','veorgt.u32','veorle.u32', - 'veoreq.u64','veorne.u64','veorcs.u64','veorhs.u64','veorcc.u64','veorlo.u64','veormi.u64','veorpl.u64','veorvs.u64','veorvc.u64','veorhi.u64','veorls.u64','veorge.u64','veorlt.u64','veorgt.u64','veorle.u64', - 'veoreq.f32','veorne.f32','veorcs.f32','veorhs.f32','veorcc.f32','veorlo.f32','veormi.f32','veorpl.f32','veorvs.f32','veorvc.f32','veorhi.f32','veorls.f32','veorge.f32','veorlt.f32','veorgt.f32','veorle.f32', - 'veoreq.f64','veorne.f64','veorcs.f64','veorhs.f64','veorcc.f64','veorlo.f64','veormi.f64','veorpl.f64','veorvs.f64','veorvc.f64','veorhi.f64','veorls.f64','veorge.f64','veorlt.f64','veorgt.f64','veorle.f64', - - 'vmoveq','vmovne','vmovcs','vmovhs','vmovcc','vmovlo','vmovmi','vmovpl','vmovvs','vmovvc','vmovhi','vmovls','vmovge','vmovlt','vmovgt','vmovle', - 'vmoveq.8','vmovne.8','vmovcs.8','vmovhs.8','vmovcc.8','vmovlo.8','vmovmi.8','vmovpl.8','vmovvs.8','vmovvc.8','vmovhi.8','vmovls.8','vmovge.8','vmovlt.8','vmovgt.8','vmovle.8', - 'vmoveq.16','vmovne.16','vmovcs.16','vmovhs.16','vmovcc.16','vmovlo.16','vmovmi.16','vmovpl.16','vmovvs.16','vmovvc.16','vmovhi.16','vmovls.16','vmovge.16','vmovlt.16','vmovgt.16','vmovle.16', - 'vmoveq.32','vmovne.32','vmovcs.32','vmovhs.32','vmovcc.32','vmovlo.32','vmovmi.32','vmovpl.32','vmovvs.32','vmovvc.32','vmovhi.32','vmovls.32','vmovge.32','vmovlt.32','vmovgt.32','vmovle.32', - 'vmoveq.i8','vmovne.i8','vmovcs.i8','vmovhs.i8','vmovcc.i8','vmovlo.i8','vmovmi.i8','vmovpl.i8','vmovvs.i8','vmovvc.i8','vmovhi.i8','vmovls.i8','vmovge.i8','vmovlt.i8','vmovgt.i8','vmovle.i8', - 'vmoveq.i16','vmovne.i16','vmovcs.i16','vmovhs.i16','vmovcc.i16','vmovlo.i16','vmovmi.i16','vmovpl.i16','vmovvs.i16','vmovvc.i16','vmovhi.i16','vmovls.i16','vmovge.i16','vmovlt.i16','vmovgt.i16','vmovle.i16', - 'vmoveq.i32','vmovne.i32','vmovcs.i32','vmovhs.i32','vmovcc.i32','vmovlo.i32','vmovmi.i32','vmovpl.i32','vmovvs.i32','vmovvc.i32','vmovhi.i32','vmovls.i32','vmovge.i32','vmovlt.i32','vmovgt.i32','vmovle.i32', - 'vmoveq.i64','vmovne.i64','vmovcs.i64','vmovhs.i64','vmovcc.i64','vmovlo.i64','vmovmi.i64','vmovpl.i64','vmovvs.i64','vmovvc.i64','vmovhi.i64','vmovls.i64','vmovge.i64','vmovlt.i64','vmovgt.i64','vmovle.i64', - 'vmoveq.f32','vmovne.f32','vmovcs.f32','vmovhs.f32','vmovcc.f32','vmovlo.f32','vmovmi.f32','vmovpl.f32','vmovvs.f32','vmovvc.f32','vmovhi.f32','vmovls.f32','vmovge.f32','vmovlt.f32','vmovgt.f32','vmovle.f32', - 'vmoveq.f64','vmovne.f64','vmovcs.f64','vmovhs.f64','vmovcc.f64','vmovlo.f64','vmovmi.f64','vmovpl.f64','vmovvs.f64','vmovvc.f64','vmovhi.f64','vmovls.f64','vmovge.f64','vmovlt.f64','vmovgt.f64','vmovle.f64', - - 'vmvneq','vmvnne','vmvncs','vmvnhs','vmvncc','vmvnlo','vmvnmi','vmvnpl','vmvnvs','vmvnvc','vmvnhi','vmvnls','vmvnge','vmvnlt','vmvngt','vmvnle', - 'vmvneq.s8','vmvnne.s8','vmvncs.s8','vmvnhs.s8','vmvncc.s8','vmvnlo.s8','vmvnmi.s8','vmvnpl.s8','vmvnvs.s8','vmvnvc.s8','vmvnhi.s8','vmvnls.s8','vmvnge.s8','vmvnlt.s8','vmvngt.s8','vmvnle.s8', - 'vmvneq.s16','vmvnne.s16','vmvncs.s16','vmvnhs.s16','vmvncc.s16','vmvnlo.s16','vmvnmi.s16','vmvnpl.s16','vmvnvs.s16','vmvnvc.s16','vmvnhi.s16','vmvnls.s16','vmvnge.s16','vmvnlt.s16','vmvngt.s16','vmvnle.s16', - 'vmvneq.s32','vmvnne.s32','vmvncs.s32','vmvnhs.s32','vmvncc.s32','vmvnlo.s32','vmvnmi.s32','vmvnpl.s32','vmvnvs.s32','vmvnvc.s32','vmvnhi.s32','vmvnls.s32','vmvnge.s32','vmvnlt.s32','vmvngt.s32','vmvnle.s32', - 'vmvneq.s64','vmvnne.s64','vmvncs.s64','vmvnhs.s64','vmvncc.s64','vmvnlo.s64','vmvnmi.s64','vmvnpl.s64','vmvnvs.s64','vmvnvc.s64','vmvnhi.s64','vmvnls.s64','vmvnge.s64','vmvnlt.s64','vmvngt.s64','vmvnle.s64', - 'vmvneq.u8','vmvnne.u8','vmvncs.u8','vmvnhs.u8','vmvncc.u8','vmvnlo.u8','vmvnmi.u8','vmvnpl.u8','vmvnvs.u8','vmvnvc.u8','vmvnhi.u8','vmvnls.u8','vmvnge.u8','vmvnlt.u8','vmvngt.u8','vmvnle.u8', - 'vmvneq.u16','vmvnne.u16','vmvncs.u16','vmvnhs.u16','vmvncc.u16','vmvnlo.u16','vmvnmi.u16','vmvnpl.u16','vmvnvs.u16','vmvnvc.u16','vmvnhi.u16','vmvnls.u16','vmvnge.u16','vmvnlt.u16','vmvngt.u16','vmvnle.u16', - 'vmvneq.u32','vmvnne.u32','vmvncs.u32','vmvnhs.u32','vmvncc.u32','vmvnlo.u32','vmvnmi.u32','vmvnpl.u32','vmvnvs.u32','vmvnvc.u32','vmvnhi.u32','vmvnls.u32','vmvnge.u32','vmvnlt.u32','vmvngt.u32','vmvnle.u32', - 'vmvneq.u64','vmvnne.u64','vmvncs.u64','vmvnhs.u64','vmvncc.u64','vmvnlo.u64','vmvnmi.u64','vmvnpl.u64','vmvnvs.u64','vmvnvc.u64','vmvnhi.u64','vmvnls.u64','vmvnge.u64','vmvnlt.u64','vmvngt.u64','vmvnle.u64', - 'vmvneq.i8','vmvnne.i8','vmvncs.i8','vmvnhs.i8','vmvncc.i8','vmvnlo.i8','vmvnmi.i8','vmvnpl.i8','vmvnvs.i8','vmvnvc.i8','vmvnhi.i8','vmvnls.i8','vmvnge.i8','vmvnlt.i8','vmvngt.i8','vmvnle.i8', - 'vmvneq.i16','vmvnne.i16','vmvncs.i16','vmvnhs.i16','vmvncc.i16','vmvnlo.i16','vmvnmi.i16','vmvnpl.i16','vmvnvs.i16','vmvnvc.i16','vmvnhi.i16','vmvnls.i16','vmvnge.i16','vmvnlt.i16','vmvngt.i16','vmvnle.i16', - 'vmvneq.i32','vmvnne.i32','vmvncs.i32','vmvnhs.i32','vmvncc.i32','vmvnlo.i32','vmvnmi.i32','vmvnpl.i32','vmvnvs.i32','vmvnvc.i32','vmvnhi.i32','vmvnls.i32','vmvnge.i32','vmvnlt.i32','vmvngt.i32','vmvnle.i32', - 'vmvneq.i64','vmvnne.i64','vmvncs.i64','vmvnhs.i64','vmvncc.i64','vmvnlo.i64','vmvnmi.i64','vmvnpl.i64','vmvnvs.i64','vmvnvc.i64','vmvnhi.i64','vmvnls.i64','vmvnge.i64','vmvnlt.i64','vmvngt.i64','vmvnle.i64', - 'vmvneq.f32','vmvnne.f32','vmvncs.f32','vmvnhs.f32','vmvncc.f32','vmvnlo.f32','vmvnmi.f32','vmvnpl.f32','vmvnvs.f32','vmvnvc.f32','vmvnhi.f32','vmvnls.f32','vmvnge.f32','vmvnlt.f32','vmvngt.f32','vmvnle.f32', - 'vmvneq.f64','vmvnne.f64','vmvncs.f64','vmvnhs.f64','vmvncc.f64','vmvnlo.f64','vmvnmi.f64','vmvnpl.f64','vmvnvs.f64','vmvnvc.f64','vmvnhi.f64','vmvnls.f64','vmvnge.f64','vmvnlt.f64','vmvngt.f64','vmvnle.f64', - - 'vorneq','vornne','vorncs','vornhs','vorncc','vornlo','vornmi','vornpl','vornvs','vornvc','vornhi','vornls','vornge','vornlt','vorngt','vornle', - 'vorneq.s8','vornne.s8','vorncs.s8','vornhs.s8','vorncc.s8','vornlo.s8','vornmi.s8','vornpl.s8','vornvs.s8','vornvc.s8','vornhi.s8','vornls.s8','vornge.s8','vornlt.s8','vorngt.s8','vornle.s8', - 'vorneq.s16','vornne.s16','vorncs.s16','vornhs.s16','vorncc.s16','vornlo.s16','vornmi.s16','vornpl.s16','vornvs.s16','vornvc.s16','vornhi.s16','vornls.s16','vornge.s16','vornlt.s16','vorngt.s16','vornle.s16', - 'vorneq.s32','vornne.s32','vorncs.s32','vornhs.s32','vorncc.s32','vornlo.s32','vornmi.s32','vornpl.s32','vornvs.s32','vornvc.s32','vornhi.s32','vornls.s32','vornge.s32','vornlt.s32','vorngt.s32','vornle.s32', - 'vorneq.s64','vornne.s64','vorncs.s64','vornhs.s64','vorncc.s64','vornlo.s64','vornmi.s64','vornpl.s64','vornvs.s64','vornvc.s64','vornhi.s64','vornls.s64','vornge.s64','vornlt.s64','vorngt.s64','vornle.s64', - 'vorneq.u8','vornne.u8','vorncs.u8','vornhs.u8','vorncc.u8','vornlo.u8','vornmi.u8','vornpl.u8','vornvs.u8','vornvc.u8','vornhi.u8','vornls.u8','vornge.u8','vornlt.u8','vorngt.u8','vornle.u8', - 'vorneq.u16','vornne.u16','vorncs.u16','vornhs.u16','vorncc.u16','vornlo.u16','vornmi.u16','vornpl.u16','vornvs.u16','vornvc.u16','vornhi.u16','vornls.u16','vornge.u16','vornlt.u16','vorngt.u16','vornle.u16', - 'vorneq.u32','vornne.u32','vorncs.u32','vornhs.u32','vorncc.u32','vornlo.u32','vornmi.u32','vornpl.u32','vornvs.u32','vornvc.u32','vornhi.u32','vornls.u32','vornge.u32','vornlt.u32','vorngt.u32','vornle.u32', - 'vorneq.u64','vornne.u64','vorncs.u64','vornhs.u64','vorncc.u64','vornlo.u64','vornmi.u64','vornpl.u64','vornvs.u64','vornvc.u64','vornhi.u64','vornls.u64','vornge.u64','vornlt.u64','vorngt.u64','vornle.u64', - 'vorneq.i8','vornne.i8','vorncs.i8','vornhs.i8','vorncc.i8','vornlo.i8','vornmi.i8','vornpl.i8','vornvs.i8','vornvc.i8','vornhi.i8','vornls.i8','vornge.i8','vornlt.i8','vorngt.i8','vornle.i8', - 'vorneq.i16','vornne.i16','vorncs.i16','vornhs.i16','vorncc.i16','vornlo.i16','vornmi.i16','vornpl.i16','vornvs.i16','vornvc.i16','vornhi.i16','vornls.i16','vornge.i16','vornlt.i16','vorngt.i16','vornle.i16', - 'vorneq.i32','vornne.i32','vorncs.i32','vornhs.i32','vorncc.i32','vornlo.i32','vornmi.i32','vornpl.i32','vornvs.i32','vornvc.i32','vornhi.i32','vornls.i32','vornge.i32','vornlt.i32','vorngt.i32','vornle.i32', - 'vorneq.i64','vornne.i64','vorncs.i64','vornhs.i64','vorncc.i64','vornlo.i64','vornmi.i64','vornpl.i64','vornvs.i64','vornvc.i64','vornhi.i64','vornls.i64','vornge.i64','vornlt.i64','vorngt.i64','vornle.i64', - 'vorneq.f32','vornne.f32','vorncs.f32','vornhs.f32','vorncc.f32','vornlo.f32','vornmi.f32','vornpl.f32','vornvs.f32','vornvc.f32','vornhi.f32','vornls.f32','vornge.f32','vornlt.f32','vorngt.f32','vornle.f32', - 'vorneq.f64','vornne.f64','vorncs.f64','vornhs.f64','vorncc.f64','vornlo.f64','vornmi.f64','vornpl.f64','vornvs.f64','vornvc.f64','vornhi.f64','vornls.f64','vornge.f64','vornlt.f64','vorngt.f64','vornle.f64', - - 'vorreq','vorrne','vorrcs','vorrhs','vorrcc','vorrlo','vorrmi','vorrpl','vorrvs','vorrvc','vorrhi','vorrls','vorrge','vorrlt','vorrgt','vorrle', - 'vorreq.s8','vorrne.s8','vorrcs.s8','vorrhs.s8','vorrcc.s8','vorrlo.s8','vorrmi.s8','vorrpl.s8','vorrvs.s8','vorrvc.s8','vorrhi.s8','vorrls.s8','vorrge.s8','vorrlt.s8','vorrgt.s8','vorrle.s8', - 'vorreq.s16','vorrne.s16','vorrcs.s16','vorrhs.s16','vorrcc.s16','vorrlo.s16','vorrmi.s16','vorrpl.s16','vorrvs.s16','vorrvc.s16','vorrhi.s16','vorrls.s16','vorrge.s16','vorrlt.s16','vorrgt.s16','vorrle.s16', - 'vorreq.s32','vorrne.s32','vorrcs.s32','vorrhs.s32','vorrcc.s32','vorrlo.s32','vorrmi.s32','vorrpl.s32','vorrvs.s32','vorrvc.s32','vorrhi.s32','vorrls.s32','vorrge.s32','vorrlt.s32','vorrgt.s32','vorrle.s32', - 'vorreq.s64','vorrne.s64','vorrcs.s64','vorrhs.s64','vorrcc.s64','vorrlo.s64','vorrmi.s64','vorrpl.s64','vorrvs.s64','vorrvc.s64','vorrhi.s64','vorrls.s64','vorrge.s64','vorrlt.s64','vorrgt.s64','vorrle.s64', - 'vorreq.u8','vorrne.u8','vorrcs.u8','vorrhs.u8','vorrcc.u8','vorrlo.u8','vorrmi.u8','vorrpl.u8','vorrvs.u8','vorrvc.u8','vorrhi.u8','vorrls.u8','vorrge.u8','vorrlt.u8','vorrgt.u8','vorrle.u8', - 'vorreq.u16','vorrne.u16','vorrcs.u16','vorrhs.u16','vorrcc.u16','vorrlo.u16','vorrmi.u16','vorrpl.u16','vorrvs.u16','vorrvc.u16','vorrhi.u16','vorrls.u16','vorrge.u16','vorrlt.u16','vorrgt.u16','vorrle.u16', - 'vorreq.u32','vorrne.u32','vorrcs.u32','vorrhs.u32','vorrcc.u32','vorrlo.u32','vorrmi.u32','vorrpl.u32','vorrvs.u32','vorrvc.u32','vorrhi.u32','vorrls.u32','vorrge.u32','vorrlt.u32','vorrgt.u32','vorrle.u32', - 'vorreq.u64','vorrne.u64','vorrcs.u64','vorrhs.u64','vorrcc.u64','vorrlo.u64','vorrmi.u64','vorrpl.u64','vorrvs.u64','vorrvc.u64','vorrhi.u64','vorrls.u64','vorrge.u64','vorrlt.u64','vorrgt.u64','vorrle.u64', - 'vorreq.i8','vorrne.i8','vorrcs.i8','vorrhs.i8','vorrcc.i8','vorrlo.i8','vorrmi.i8','vorrpl.i8','vorrvs.i8','vorrvc.i8','vorrhi.i8','vorrls.i8','vorrge.i8','vorrlt.i8','vorrgt.i8','vorrle.i8', - 'vorreq.i16','vorrne.i16','vorrcs.i16','vorrhs.i16','vorrcc.i16','vorrlo.i16','vorrmi.i16','vorrpl.i16','vorrvs.i16','vorrvc.i16','vorrhi.i16','vorrls.i16','vorrge.i16','vorrlt.i16','vorrgt.i16','vorrle.i16', - 'vorreq.i32','vorrne.i32','vorrcs.i32','vorrhs.i32','vorrcc.i32','vorrlo.i32','vorrmi.i32','vorrpl.i32','vorrvs.i32','vorrvc.i32','vorrhi.i32','vorrls.i32','vorrge.i32','vorrlt.i32','vorrgt.i32','vorrle.i32', - 'vorreq.i64','vorrne.i64','vorrcs.i64','vorrhs.i64','vorrcc.i64','vorrlo.i64','vorrmi.i64','vorrpl.i64','vorrvs.i64','vorrvc.i64','vorrhi.i64','vorrls.i64','vorrge.i64','vorrlt.i64','vorrgt.i64','vorrle.i64', - 'vorreq.f32','vorrne.f32','vorrcs.f32','vorrhs.f32','vorrcc.f32','vorrlo.f32','vorrmi.f32','vorrpl.f32','vorrvs.f32','vorrvc.f32','vorrhi.f32','vorrls.f32','vorrge.f32','vorrlt.f32','vorrgt.f32','vorrle.f32', - 'vorreq.f64','vorrne.f64','vorrcs.f64','vorrhs.f64','vorrcc.f64','vorrlo.f64','vorrmi.f64','vorrpl.f64','vorrvs.f64','vorrvc.f64','vorrhi.f64','vorrls.f64','vorrge.f64','vorrlt.f64','vorrgt.f64','vorrle.f64', - - 'vswpeq','vswpne','vswpcs','vswphs','vswpcc','vswplo','vswpmi','vswppl','vswpvs','vswpvc','vswphi','vswpls','vswpge','vswplt','vswpgt','vswple', - 'vswpeq.s8','vswpne.s8','vswpcs.s8','vswphs.s8','vswpcc.s8','vswplo.s8','vswpmi.s8','vswppl.s8','vswpvs.s8','vswpvc.s8','vswphi.s8','vswpls.s8','vswpge.s8','vswplt.s8','vswpgt.s8','vswple.s8', - 'vswpeq.s16','vswpne.s16','vswpcs.s16','vswphs.s16','vswpcc.s16','vswplo.s16','vswpmi.s16','vswppl.s16','vswpvs.s16','vswpvc.s16','vswphi.s16','vswpls.s16','vswpge.s16','vswplt.s16','vswpgt.s16','vswple.s16', - 'vswpeq.s32','vswpne.s32','vswpcs.s32','vswphs.s32','vswpcc.s32','vswplo.s32','vswpmi.s32','vswppl.s32','vswpvs.s32','vswpvc.s32','vswphi.s32','vswpls.s32','vswpge.s32','vswplt.s32','vswpgt.s32','vswple.s32', - 'vswpeq.s64','vswpne.s64','vswpcs.s64','vswphs.s64','vswpcc.s64','vswplo.s64','vswpmi.s64','vswppl.s64','vswpvs.s64','vswpvc.s64','vswphi.s64','vswpls.s64','vswpge.s64','vswplt.s64','vswpgt.s64','vswple.s64', - 'vswpeq.u8','vswpne.u8','vswpcs.u8','vswphs.u8','vswpcc.u8','vswplo.u8','vswpmi.u8','vswppl.u8','vswpvs.u8','vswpvc.u8','vswphi.u8','vswpls.u8','vswpge.u8','vswplt.u8','vswpgt.u8','vswple.u8', - 'vswpeq.u16','vswpne.u16','vswpcs.u16','vswphs.u16','vswpcc.u16','vswplo.u16','vswpmi.u16','vswppl.u16','vswpvs.u16','vswpvc.u16','vswphi.u16','vswpls.u16','vswpge.u16','vswplt.u16','vswpgt.u16','vswple.u16', - 'vswpeq.u32','vswpne.u32','vswpcs.u32','vswphs.u32','vswpcc.u32','vswplo.u32','vswpmi.u32','vswppl.u32','vswpvs.u32','vswpvc.u32','vswphi.u32','vswpls.u32','vswpge.u32','vswplt.u32','vswpgt.u32','vswple.u32', - 'vswpeq.u64','vswpne.u64','vswpcs.u64','vswphs.u64','vswpcc.u64','vswplo.u64','vswpmi.u64','vswppl.u64','vswpvs.u64','vswpvc.u64','vswphi.u64','vswpls.u64','vswpge.u64','vswplt.u64','vswpgt.u64','vswple.u64', - 'vswpeq.i8','vswpne.i8','vswpcs.i8','vswphs.i8','vswpcc.i8','vswplo.i8','vswpmi.i8','vswppl.i8','vswpvs.i8','vswpvc.i8','vswphi.i8','vswpls.i8','vswpge.i8','vswplt.i8','vswpgt.i8','vswple.i8', - 'vswpeq.i16','vswpne.i16','vswpcs.i16','vswphs.i16','vswpcc.i16','vswplo.i16','vswpmi.i16','vswppl.i16','vswpvs.i16','vswpvc.i16','vswphi.i16','vswpls.i16','vswpge.i16','vswplt.i16','vswpgt.i16','vswple.i16', - 'vswpeq.i32','vswpne.i32','vswpcs.i32','vswphs.i32','vswpcc.i32','vswplo.i32','vswpmi.i32','vswppl.i32','vswpvs.i32','vswpvc.i32','vswphi.i32','vswpls.i32','vswpge.i32','vswplt.i32','vswpgt.i32','vswple.i32', - 'vswpeq.i64','vswpne.i64','vswpcs.i64','vswphs.i64','vswpcc.i64','vswplo.i64','vswpmi.i64','vswppl.i64','vswpvs.i64','vswpvc.i64','vswphi.i64','vswpls.i64','vswpge.i64','vswplt.i64','vswpgt.i64','vswple.i64', - 'vswpeq.f32','vswpne.f32','vswpcs.f32','vswphs.f32','vswpcc.f32','vswplo.f32','vswpmi.f32','vswppl.f32','vswpvs.f32','vswpvc.f32','vswphi.f32','vswpls.f32','vswpge.f32','vswplt.f32','vswpgt.f32','vswple.f32', - 'vswpeq.f64','vswpne.f64','vswpcs.f64','vswphs.f64','vswpcc.f64','vswplo.f64','vswpmi.f64','vswppl.f64','vswpvs.f64','vswpvc.f64','vswphi.f64','vswpls.f64','vswpge.f64','vswplt.f64','vswpgt.f64','vswple.f64' - ), - /* Conditional NEON SIMD ARM Registers Interop Instructions */ - 29 => array( - 'vmrseq','vmrsne','vmrscs','vmrshs','vmrscc','vmrslo','vmrsmi','vmrspl','vmrsvs','vmrsvc','vmrshi','vmrsls','vmrsge','vmrslt','vmrsgt','vmrsle', - 'vmsreq','vmsrne','vmsrcs','vmsrhs','vmsrcc','vmsrlo','vmsrmi','vmsrpl','vmsrvs','vmsrvc','vmsrhi','vmsrls','vmsrge','vmsrlt','vmsrgt','vmsrle' - ), - /* Conditional NEON SIMD Bit/Byte-Level Instructions */ - 30 => array( - 'vcnteq.8','vcntne.8','vcntcs.8','vcnths.8','vcntcc.8','vcntlo.8','vcntmi.8','vcntpl.8','vcntvs.8','vcntvc.8','vcnthi.8','vcntls.8','vcntge.8','vcntlt.8','vcntgt.8','vcntle.8', - 'vdupeq.8','vdupne.8','vdupcs.8','vduphs.8','vdupcc.8','vduplo.8','vdupmi.8','vduppl.8','vdupvs.8','vdupvc.8','vduphi.8','vdupls.8','vdupge.8','vduplt.8','vdupgt.8','vduple.8', - - 'vdupeq.16','vdupne.16','vdupcs.16','vduphs.16','vdupcc.16','vduplo.16','vdupmi.16','vduppl.16','vdupvs.16','vdupvc.16','vduphi.16','vdupls.16','vdupge.16','vduplt.16','vdupgt.16','vduple.16', - 'vdupeq.32','vdupne.32','vdupcs.32','vduphs.32','vdupcc.32','vduplo.32','vdupmi.32','vduppl.32','vdupvs.32','vdupvc.32','vduphi.32','vdupls.32','vdupge.32','vduplt.32','vdupgt.32','vduple.32', - - 'vexteq.8','vextne.8','vextcs.8','vexths.8','vextcc.8','vextlo.8','vextmi.8','vextpl.8','vextvs.8','vextvc.8','vexthi.8','vextls.8','vextge.8','vextlt.8','vextgt.8','vextle.8', - 'vexteq.16','vextne.16','vextcs.16','vexths.16','vextcc.16','vextlo.16','vextmi.16','vextpl.16','vextvs.16','vextvc.16','vexthi.16','vextls.16','vextge.16','vextlt.16','vextgt.16','vextle.16', - - 'vexteq.32','vextne.32','vextcs.32','vexths.32','vextcc.32','vextlo.32','vextmi.32','vextpl.32','vextvs.32','vextvc.32','vexthi.32','vextls.32','vextge.32','vextlt.32','vextgt.32','vextle.32', - 'vexteq.64','vextne.64','vextcs.64','vexths.64','vextcc.64','vextlo.64','vextmi.64','vextpl.64','vextvs.64','vextvc.64','vexthi.64','vextls.64','vextge.64','vextlt.64','vextgt.64','vextle.64', - - 'vrev16eq.8','vrev16ne.8','vrev16cs.8','vrev16hs.8','vrev16cc.8','vrev16lo.8','vrev16mi.8','vrev16pl.8','vrev16vs.8','vrev16vc.8','vrev16hi.8','vrev16ls.8','vrev16ge.8','vrev16lt.8','vrev16gt.8','vrev16le.8', - 'vrev32eq.8','vrev32ne.8','vrev32cs.8','vrev32hs.8','vrev32cc.8','vrev32lo.8','vrev32mi.8','vrev32pl.8','vrev32vs.8','vrev32vc.8','vrev32hi.8','vrev32ls.8','vrev32ge.8','vrev32lt.8','vrev32gt.8','vrev32le.8', - 'vrev32eq.16','vrev32ne.16','vrev32cs.16','vrev32hs.16','vrev32cc.16','vrev32lo.16','vrev32mi.16','vrev32pl.16','vrev32vs.16','vrev32vc.16','vrev32hi.16','vrev32ls.16','vrev32ge.16','vrev32lt.16','vrev32gt.16','vrev32le.16', - 'vrev64eq.8','vrev64ne.8','vrev64cs.8','vrev64hs.8','vrev64cc.8','vrev64lo.8','vrev64mi.8','vrev64pl.8','vrev64vs.8','vrev64vc.8','vrev64hi.8','vrev64ls.8','vrev64ge.8','vrev64lt.8','vrev64gt.8','vrev64le.8', - 'vrev64eq.16','vrev64ne.16','vrev64cs.16','vrev64hs.16','vrev64cc.16','vrev64lo.16','vrev64mi.16','vrev64pl.16','vrev64vs.16','vrev64vc.16','vrev64hi.16','vrev64ls.16','vrev64ge.16','vrev64lt.16','vrev64gt.16','vrev64le.16', - 'vrev64eq.32','vrev64ne.32','vrev64cs.32','vrev64hs.32','vrev64cc.32','vrev64lo.32','vrev64mi.32','vrev64pl.32','vrev64vs.32','vrev64vc.32','vrev64hi.32','vrev64ls.32','vrev64ge.32','vrev64lt.32','vrev64gt.32','vrev64le.32', - - 'vslieq.8','vsline.8','vslics.8','vslihs.8','vslicc.8','vslilo.8','vslimi.8','vslipl.8','vslivs.8','vslivc.8','vslihi.8','vslils.8','vslige.8','vslilt.8','vsligt.8','vslile.8', - 'vslieq.16','vsline.16','vslics.16','vslihs.16','vslicc.16','vslilo.16','vslimi.16','vslipl.16','vslivs.16','vslivc.16','vslihi.16','vslils.16','vslige.16','vslilt.16','vsligt.16','vslile.16', - 'vslieq.32','vsline.32','vslics.32','vslihs.32','vslicc.32','vslilo.32','vslimi.32','vslipl.32','vslivs.32','vslivc.32','vslihi.32','vslils.32','vslige.32','vslilt.32','vsligt.32','vslile.32', - 'vslieq.64','vsline.64','vslics.64','vslihs.64','vslicc.64','vslilo.64','vslimi.64','vslipl.64','vslivs.64','vslivc.64','vslihi.64','vslils.64','vslige.64','vslilt.64','vsligt.64','vslile.64', - - 'vsrieq.8','vsrine.8','vsrics.8','vsrihs.8','vsricc.8','vsrilo.8','vsrimi.8','vsripl.8','vsrivs.8','vsrivc.8','vsrihi.8','vsrils.8','vsrige.8','vsrilt.8','vsrigt.8','vsrile.8', - 'vsrieq.16','vsrine.16','vsrics.16','vsrihs.16','vsricc.16','vsrilo.16','vsrimi.16','vsripl.16','vsrivs.16','vsrivc.16','vsrihi.16','vsrils.16','vsrige.16','vsrilt.16','vsrigt.16','vsrile.16', - 'vsrieq.32','vsrine.32','vsrics.32','vsrihs.32','vsricc.32','vsrilo.32','vsrimi.32','vsripl.32','vsrivs.32','vsrivc.32','vsrihi.32','vsrils.32','vsrige.32','vsrilt.32','vsrigt.32','vsrile.32', - 'vsrieq.64','vsrine.64','vsrics.64','vsrihs.64','vsricc.64','vsrilo.64','vsrimi.64','vsripl.64','vsrivs.64','vsrivc.64','vsrihi.64','vsrils.64','vsrige.64','vsrilt.64','vsrigt.64','vsrile.64', - - 'vtbleq.8','vtblne.8','vtblcs.8','vtblhs.8','vtblcc.8','vtbllo.8','vtblmi.8','vtblpl.8','vtblvs.8','vtblvc.8','vtblhi.8','vtblls.8','vtblge.8','vtbllt.8','vtblgt.8','vtblle.8', - - 'vtbxeq','vtbxne','vtbxcs','vtbxhs','vtbxcc','vtbxlo','vtbxmi','vtbxpl','vtbxvs','vtbxvc','vtbxhi','vtbxls','vtbxge','vtbxlt','vtbxgt','vtbxle', - - 'vtrneq.8','vtrnne.8','vtrncs.8','vtrnhs.8','vtrncc.8','vtrnlo.8','vtrnmi.8','vtrnpl.8','vtrnvs.8','vtrnvc.8','vtrnhi.8','vtrnls.8','vtrnge.8','vtrnlt.8','vtrngt.8','vtrnle.8', - 'vtrneq.16','vtrnne.16','vtrncs.16','vtrnhs.16','vtrncc.16','vtrnlo.16','vtrnmi.16','vtrnpl.16','vtrnvs.16','vtrnvc.16','vtrnhi.16','vtrnls.16','vtrnge.16','vtrnlt.16','vtrngt.16','vtrnle.16', - 'vtrneq.32','vtrnne.32','vtrncs.32','vtrnhs.32','vtrncc.32','vtrnlo.32','vtrnmi.32','vtrnpl.32','vtrnvs.32','vtrnvc.32','vtrnhi.32','vtrnls.32','vtrnge.32','vtrnlt.32','vtrngt.32','vtrnle.32', - - 'vtsteq.8','vtstne.8','vtstcs.8','vtsths.8','vtstcc.8','vtstlo.8','vtstmi.8','vtstpl.8','vtstvs.8','vtstvc.8','vtsthi.8','vtstls.8','vtstge.8','vtstlt.8','vtstgt.8','vtstle.8', - 'vtsteq.16','vtstne.16','vtstcs.16','vtsths.16','vtstcc.16','vtstlo.16','vtstmi.16','vtstpl.16','vtstvs.16','vtstvc.16','vtsthi.16','vtstls.16','vtstge.16','vtstlt.16','vtstgt.16','vtstle.16', - 'vtsteq.32','vtstne.32','vtstcs.32','vtsths.32','vtstcc.32','vtstlo.32','vtstmi.32','vtstpl.32','vtstvs.32','vtstvc.32','vtsthi.32','vtstls.32','vtstge.32','vtstlt.32','vtstgt.32','vtstle.32', - - 'vuzpeq.8','vuzpne.8','vuzpcs.8','vuzphs.8','vuzpcc.8','vuzplo.8','vuzpmi.8','vuzppl.8','vuzpvs.8','vuzpvc.8','vuzphi.8','vuzpls.8','vuzpge.8','vuzplt.8','vuzpgt.8','vuzple.8', - 'vuzpeq.16','vuzpne.16','vuzpcs.16','vuzphs.16','vuzpcc.16','vuzplo.16','vuzpmi.16','vuzppl.16','vuzpvs.16','vuzpvc.16','vuzphi.16','vuzpls.16','vuzpge.16','vuzplt.16','vuzpgt.16','vuzple.16', - 'vuzpeq.32','vuzpne.32','vuzpcs.32','vuzphs.32','vuzpcc.32','vuzplo.32','vuzpmi.32','vuzppl.32','vuzpvs.32','vuzpvc.32','vuzphi.32','vuzpls.32','vuzpge.32','vuzplt.32','vuzpgt.32','vuzple.32', - - 'vzipeq.8','vzipne.8','vzipcs.8','vziphs.8','vzipcc.8','vziplo.8','vzipmi.8','vzippl.8','vzipvs.8','vzipvc.8','vziphi.8','vzipls.8','vzipge.8','vziplt.8','vzipgt.8','vziple.8', - 'vzipeq.16','vzipne.16','vzipcs.16','vziphs.16','vzipcc.16','vziplo.16','vzipmi.16','vzippl.16','vzipvs.16','vzipvc.16','vziphi.16','vzipls.16','vzipge.16','vziplt.16','vzipgt.16','vziple.16', - 'vzipeq.32','vzipne.32','vzipcs.32','vziphs.32','vzipcc.32','vziplo.32','vzipmi.32','vzippl.32','vzipvs.32','vzipvc.32','vziphi.32','vzipls.32','vzipge.32','vziplt.32','vzipgt.32','vziple.32', - - 'vmulleq.p8','vmullne.p8','vmullcs.p8','vmullhs.p8','vmullcc.p8','vmulllo.p8','vmullmi.p8','vmullpl.p8','vmullvs.p8','vmullvc.p8','vmullhi.p8','vmullls.p8','vmullge.p8','vmulllt.p8','vmullgt.p8','vmullle.p8' - ), - /* Conditional NEON SIMD Universal Integer Instructions */ - 31 => array( - 'vaddeq.i8','vaddne.i8','vaddcs.i8','vaddhs.i8','vaddcc.i8','vaddlo.i8','vaddmi.i8','vaddpl.i8','vaddvs.i8','vaddvc.i8','vaddhi.i8','vaddls.i8','vaddge.i8','vaddlt.i8','vaddgt.i8','vaddle.i8', - 'vaddeq.i16','vaddne.i16','vaddcs.i16','vaddhs.i16','vaddcc.i16','vaddlo.i16','vaddmi.i16','vaddpl.i16','vaddvs.i16','vaddvc.i16','vaddhi.i16','vaddls.i16','vaddge.i16','vaddlt.i16','vaddgt.i16','vaddle.i16', - 'vaddeq.i32','vaddne.i32','vaddcs.i32','vaddhs.i32','vaddcc.i32','vaddlo.i32','vaddmi.i32','vaddpl.i32','vaddvs.i32','vaddvc.i32','vaddhi.i32','vaddls.i32','vaddge.i32','vaddlt.i32','vaddgt.i32','vaddle.i32', - 'vaddeq.i64','vaddne.i64','vaddcs.i64','vaddhs.i64','vaddcc.i64','vaddlo.i64','vaddmi.i64','vaddpl.i64','vaddvs.i64','vaddvc.i64','vaddhi.i64','vaddls.i64','vaddge.i64','vaddlt.i64','vaddgt.i64','vaddle.i64', - - 'vsubeq.i8','vsubne.i8','vsubcs.i8','vsubhs.i8','vsubcc.i8','vsublo.i8','vsubmi.i8','vsubpl.i8','vsubvs.i8','vsubvc.i8','vsubhi.i8','vsubls.i8','vsubge.i8','vsublt.i8','vsubgt.i8','vsuble.i8', - 'vsubeq.i16','vsubne.i16','vsubcs.i16','vsubhs.i16','vsubcc.i16','vsublo.i16','vsubmi.i16','vsubpl.i16','vsubvs.i16','vsubvc.i16','vsubhi.i16','vsubls.i16','vsubge.i16','vsublt.i16','vsubgt.i16','vsuble.i16', - 'vsubeq.i32','vsubne.i32','vsubcs.i32','vsubhs.i32','vsubcc.i32','vsublo.i32','vsubmi.i32','vsubpl.i32','vsubvs.i32','vsubvc.i32','vsubhi.i32','vsubls.i32','vsubge.i32','vsublt.i32','vsubgt.i32','vsuble.i32', - 'vsubeq.i64','vsubne.i64','vsubcs.i64','vsubhs.i64','vsubcc.i64','vsublo.i64','vsubmi.i64','vsubpl.i64','vsubvs.i64','vsubvc.i64','vsubhi.i64','vsubls.i64','vsubge.i64','vsublt.i64','vsubgt.i64','vsuble.i64', - - 'vaddhneq.i16','vaddhnne.i16','vaddhncs.i16','vaddhnhs.i16','vaddhncc.i16','vaddhnlo.i16','vaddhnmi.i16','vaddhnpl.i16','vaddhnvs.i16','vaddhnvc.i16','vaddhnhi.i16','vaddhnls.i16','vaddhnge.i16','vaddhnlt.i16','vaddhngt.i16','vaddhnle.i16', - 'vaddhneq.i32','vaddhnne.i32','vaddhncs.i32','vaddhnhs.i32','vaddhncc.i32','vaddhnlo.i32','vaddhnmi.i32','vaddhnpl.i32','vaddhnvs.i32','vaddhnvc.i32','vaddhnhi.i32','vaddhnls.i32','vaddhnge.i32','vaddhnlt.i32','vaddhngt.i32','vaddhnle.i32', - 'vaddhneq.i64','vaddhnne.i64','vaddhncs.i64','vaddhnhs.i64','vaddhncc.i64','vaddhnlo.i64','vaddhnmi.i64','vaddhnpl.i64','vaddhnvs.i64','vaddhnvc.i64','vaddhnhi.i64','vaddhnls.i64','vaddhnge.i64','vaddhnlt.i64','vaddhngt.i64','vaddhnle.i64', - - 'vsubhneq.i16','vsubhnne.i16','vsubhncs.i16','vsubhnhs.i16','vsubhncc.i16','vsubhnlo.i16','vsubhnmi.i16','vsubhnpl.i16','vsubhnvs.i16','vsubhnvc.i16','vsubhnhi.i16','vsubhnls.i16','vsubhnge.i16','vsubhnlt.i16','vsubhngt.i16','vsubhnle.i16', - 'vsubhneq.i32','vsubhnne.i32','vsubhncs.i32','vsubhnhs.i32','vsubhncc.i32','vsubhnlo.i32','vsubhnmi.i32','vsubhnpl.i32','vsubhnvs.i32','vsubhnvc.i32','vsubhnhi.i32','vsubhnls.i32','vsubhnge.i32','vsubhnlt.i32','vsubhngt.i32','vsubhnle.i32', - 'vsubhneq.i64','vsubhnne.i64','vsubhncs.i64','vsubhnhs.i64','vsubhncc.i64','vsubhnlo.i64','vsubhnmi.i64','vsubhnpl.i64','vsubhnvs.i64','vsubhnvc.i64','vsubhnhi.i64','vsubhnls.i64','vsubhnge.i64','vsubhnlt.i64','vsubhngt.i64','vsubhnle.i64', - - 'vraddhneq.i16','vraddhnne.i16','vraddhncs.i16','vraddhnhs.i16','vraddhncc.i16','vraddhnlo.i16','vraddhnmi.i16','vraddhnpl.i16','vraddhnvs.i16','vraddhnvc.i16','vraddhnhi.i16','vraddhnls.i16','vraddhnge.i16','vraddhnlt.i16','vraddhngt.i16','vraddhnle.i16', - 'vraddhneq.i32','vraddhnne.i32','vraddhncs.i32','vraddhnhs.i32','vraddhncc.i32','vraddhnlo.i32','vraddhnmi.i32','vraddhnpl.i32','vraddhnvs.i32','vraddhnvc.i32','vraddhnhi.i32','vraddhnls.i32','vraddhnge.i32','vraddhnlt.i32','vraddhngt.i32','vraddhnle.i32', - 'vraddhneq.i64','vraddhnne.i64','vraddhncs.i64','vraddhnhs.i64','vraddhncc.i64','vraddhnlo.i64','vraddhnmi.i64','vraddhnpl.i64','vraddhnvs.i64','vraddhnvc.i64','vraddhnhi.i64','vraddhnls.i64','vraddhnge.i64','vraddhnlt.i64','vraddhngt.i64','vraddhnle.i64', - - 'vrsubhneq.i16','vrsubhnne.i16','vrsubhncs.i16','vrsubhnhs.i16','vrsubhncc.i16','vrsubhnlo.i16','vrsubhnmi.i16','vrsubhnpl.i16','vrsubhnvs.i16','vrsubhnvc.i16','vrsubhnhi.i16','vrsubhnls.i16','vrsubhnge.i16','vrsubhnlt.i16','vrsubhngt.i16','vrsubhnle.i16', - 'vrsubhneq.i32','vrsubhnne.i32','vrsubhncs.i32','vrsubhnhs.i32','vrsubhncc.i32','vrsubhnlo.i32','vrsubhnmi.i32','vrsubhnpl.i32','vrsubhnvs.i32','vrsubhnvc.i32','vrsubhnhi.i32','vrsubhnls.i32','vrsubhnge.i32','vrsubhnlt.i32','vrsubhngt.i32','vrsubhnle.i32', - 'vrsubhneq.i64','vrsubhnne.i64','vrsubhncs.i64','vrsubhnhs.i64','vrsubhncc.i64','vrsubhnlo.i64','vrsubhnmi.i64','vrsubhnpl.i64','vrsubhnvs.i64','vrsubhnvc.i64','vrsubhnhi.i64','vrsubhnls.i64','vrsubhnge.i64','vrsubhnlt.i64','vrsubhngt.i64','vrsubhnle.i64', - - 'vpaddeq.i8','vpaddne.i8','vpaddcs.i8','vpaddhs.i8','vpaddcc.i8','vpaddlo.i8','vpaddmi.i8','vpaddpl.i8','vpaddvs.i8','vpaddvc.i8','vpaddhi.i8','vpaddls.i8','vpaddge.i8','vpaddlt.i8','vpaddgt.i8','vpaddle.i8', - 'vpaddeq.i16','vpaddne.i16','vpaddcs.i16','vpaddhs.i16','vpaddcc.i16','vpaddlo.i16','vpaddmi.i16','vpaddpl.i16','vpaddvs.i16','vpaddvc.i16','vpaddhi.i16','vpaddls.i16','vpaddge.i16','vpaddlt.i16','vpaddgt.i16','vpaddle.i16', - 'vpaddeq.i32','vpaddne.i32','vpaddcs.i32','vpaddhs.i32','vpaddcc.i32','vpaddlo.i32','vpaddmi.i32','vpaddpl.i32','vpaddvs.i32','vpaddvc.i32','vpaddhi.i32','vpaddls.i32','vpaddge.i32','vpaddlt.i32','vpaddgt.i32','vpaddle.i32', - - 'vceqeq.i8','vceqne.i8','vceqcs.i8','vceqhs.i8','vceqcc.i8','vceqlo.i8','vceqmi.i8','vceqpl.i8','vceqvs.i8','vceqvc.i8','vceqhi.i8','vceqls.i8','vceqge.i8','vceqlt.i8','vceqgt.i8','vceqle.i8', - 'vceqeq.i16','vceqne.i16','vceqcs.i16','vceqhs.i16','vceqcc.i16','vceqlo.i16','vceqmi.i16','vceqpl.i16','vceqvs.i16','vceqvc.i16','vceqhi.i16','vceqls.i16','vceqge.i16','vceqlt.i16','vceqgt.i16','vceqle.i16', - 'vceqeq.i32','vceqne.i32','vceqcs.i32','vceqhs.i32','vceqcc.i32','vceqlo.i32','vceqmi.i32','vceqpl.i32','vceqvs.i32','vceqvc.i32','vceqhi.i32','vceqls.i32','vceqge.i32','vceqlt.i32','vceqgt.i32','vceqle.i32', - - 'vclzeq.i8','vclzne.i8','vclzcs.i8','vclzhs.i8','vclzcc.i8','vclzlo.i8','vclzmi.i8','vclzpl.i8','vclzvs.i8','vclzvc.i8','vclzhi.i8','vclzls.i8','vclzge.i8','vclzlt.i8','vclzgt.i8','vclzle.i8', - 'vclzeq.i16','vclzne.i16','vclzcs.i16','vclzhs.i16','vclzcc.i16','vclzlo.i16','vclzmi.i16','vclzpl.i16','vclzvs.i16','vclzvc.i16','vclzhi.i16','vclzls.i16','vclzge.i16','vclzlt.i16','vclzgt.i16','vclzle.i16', - 'vclzeq.i32','vclzne.i32','vclzcs.i32','vclzhs.i32','vclzcc.i32','vclzlo.i32','vclzmi.i32','vclzpl.i32','vclzvs.i32','vclzvc.i32','vclzhi.i32','vclzls.i32','vclzge.i32','vclzlt.i32','vclzgt.i32','vclzle.i32', - - 'vmovneq.i16','vmovnne.i16','vmovncs.i16','vmovnhs.i16','vmovncc.i16','vmovnlo.i16','vmovnmi.i16','vmovnpl.i16','vmovnvs.i16','vmovnvc.i16','vmovnhi.i16','vmovnls.i16','vmovnge.i16','vmovnlt.i16','vmovngt.i16','vmovnle.i16', - 'vmovneq.i32','vmovnne.i32','vmovncs.i32','vmovnhs.i32','vmovncc.i32','vmovnlo.i32','vmovnmi.i32','vmovnpl.i32','vmovnvs.i32','vmovnvc.i32','vmovnhi.i32','vmovnls.i32','vmovnge.i32','vmovnlt.i32','vmovngt.i32','vmovnle.i32', - 'vmovneq.i64','vmovnne.i64','vmovncs.i64','vmovnhs.i64','vmovncc.i64','vmovnlo.i64','vmovnmi.i64','vmovnpl.i64','vmovnvs.i64','vmovnvc.i64','vmovnhi.i64','vmovnls.i64','vmovnge.i64','vmovnlt.i64','vmovngt.i64','vmovnle.i64', - - 'vmlaeq.s8','vmlane.s8','vmlacs.s8','vmlahs.s8','vmlacc.s8','vmlalo.s8','vmlami.s8','vmlapl.s8','vmlavs.s8','vmlavc.s8','vmlahi.s8','vmlals.s8','vmlage.s8','vmlalt.s8','vmlagt.s8','vmlale.s8', - 'vmlaeq.s16','vmlane.s16','vmlacs.s16','vmlahs.s16','vmlacc.s16','vmlalo.s16','vmlami.s16','vmlapl.s16','vmlavs.s16','vmlavc.s16','vmlahi.s16','vmlals.s16','vmlage.s16','vmlalt.s16','vmlagt.s16','vmlale.s16', - 'vmlaeq.s32','vmlane.s32','vmlacs.s32','vmlahs.s32','vmlacc.s32','vmlalo.s32','vmlami.s32','vmlapl.s32','vmlavs.s32','vmlavc.s32','vmlahi.s32','vmlals.s32','vmlage.s32','vmlalt.s32','vmlagt.s32','vmlale.s32', - 'vmlaeq.u8','vmlane.u8','vmlacs.u8','vmlahs.u8','vmlacc.u8','vmlalo.u8','vmlami.u8','vmlapl.u8','vmlavs.u8','vmlavc.u8','vmlahi.u8','vmlals.u8','vmlage.u8','vmlalt.u8','vmlagt.u8','vmlale.u8', - 'vmlaeq.u16','vmlane.u16','vmlacs.u16','vmlahs.u16','vmlacc.u16','vmlalo.u16','vmlami.u16','vmlapl.u16','vmlavs.u16','vmlavc.u16','vmlahi.u16','vmlals.u16','vmlage.u16','vmlalt.u16','vmlagt.u16','vmlale.u16', - 'vmlaeq.u32','vmlane.u32','vmlacs.u32','vmlahs.u32','vmlacc.u32','vmlalo.u32','vmlami.u32','vmlapl.u32','vmlavs.u32','vmlavc.u32','vmlahi.u32','vmlals.u32','vmlage.u32','vmlalt.u32','vmlagt.u32','vmlale.u32', - 'vmlaeq.i8','vmlane.i8','vmlacs.i8','vmlahs.i8','vmlacc.i8','vmlalo.i8','vmlami.i8','vmlapl.i8','vmlavs.i8','vmlavc.i8','vmlahi.i8','vmlals.i8','vmlage.i8','vmlalt.i8','vmlagt.i8','vmlale.i8', - 'vmlaeq.i16','vmlane.i16','vmlacs.i16','vmlahs.i16','vmlacc.i16','vmlalo.i16','vmlami.i16','vmlapl.i16','vmlavs.i16','vmlavc.i16','vmlahi.i16','vmlals.i16','vmlage.i16','vmlalt.i16','vmlagt.i16','vmlale.i16', - 'vmlaeq.i32','vmlane.i32','vmlacs.i32','vmlahs.i32','vmlacc.i32','vmlalo.i32','vmlami.i32','vmlapl.i32','vmlavs.i32','vmlavc.i32','vmlahi.i32','vmlals.i32','vmlage.i32','vmlalt.i32','vmlagt.i32','vmlale.i32', - - 'vmlseq.s8','vmlsne.s8','vmlscs.s8','vmlshs.s8','vmlscc.s8','vmlslo.s8','vmlsmi.s8','vmlspl.s8','vmlsvs.s8','vmlsvc.s8','vmlshi.s8','vmlsls.s8','vmlsge.s8','vmlslt.s8','vmlsgt.s8','vmlsle.s8', - 'vmlseq.s16','vmlsne.s16','vmlscs.s16','vmlshs.s16','vmlscc.s16','vmlslo.s16','vmlsmi.s16','vmlspl.s16','vmlsvs.s16','vmlsvc.s16','vmlshi.s16','vmlsls.s16','vmlsge.s16','vmlslt.s16','vmlsgt.s16','vmlsle.s16', - 'vmlseq.s32','vmlsne.s32','vmlscs.s32','vmlshs.s32','vmlscc.s32','vmlslo.s32','vmlsmi.s32','vmlspl.s32','vmlsvs.s32','vmlsvc.s32','vmlshi.s32','vmlsls.s32','vmlsge.s32','vmlslt.s32','vmlsgt.s32','vmlsle.s32', - 'vmlseq.u8','vmlsne.u8','vmlscs.u8','vmlshs.u8','vmlscc.u8','vmlslo.u8','vmlsmi.u8','vmlspl.u8','vmlsvs.u8','vmlsvc.u8','vmlshi.u8','vmlsls.u8','vmlsge.u8','vmlslt.u8','vmlsgt.u8','vmlsle.u8', - 'vmlseq.u16','vmlsne.u16','vmlscs.u16','vmlshs.u16','vmlscc.u16','vmlslo.u16','vmlsmi.u16','vmlspl.u16','vmlsvs.u16','vmlsvc.u16','vmlshi.u16','vmlsls.u16','vmlsge.u16','vmlslt.u16','vmlsgt.u16','vmlsle.u16', - 'vmlseq.u32','vmlsne.u32','vmlscs.u32','vmlshs.u32','vmlscc.u32','vmlslo.u32','vmlsmi.u32','vmlspl.u32','vmlsvs.u32','vmlsvc.u32','vmlshi.u32','vmlsls.u32','vmlsge.u32','vmlslt.u32','vmlsgt.u32','vmlsle.u32', - 'vmlseq.i8','vmlsne.i8','vmlscs.i8','vmlshs.i8','vmlscc.i8','vmlslo.i8','vmlsmi.i8','vmlspl.i8','vmlsvs.i8','vmlsvc.i8','vmlshi.i8','vmlsls.i8','vmlsge.i8','vmlslt.i8','vmlsgt.i8','vmlsle.i8', - 'vmlseq.i16','vmlsne.i16','vmlscs.i16','vmlshs.i16','vmlscc.i16','vmlslo.i16','vmlsmi.i16','vmlspl.i16','vmlsvs.i16','vmlsvc.i16','vmlshi.i16','vmlsls.i16','vmlsge.i16','vmlslt.i16','vmlsgt.i16','vmlsle.i16', - 'vmlseq.i32','vmlsne.i32','vmlscs.i32','vmlshs.i32','vmlscc.i32','vmlslo.i32','vmlsmi.i32','vmlspl.i32','vmlsvs.i32','vmlsvc.i32','vmlshi.i32','vmlsls.i32','vmlsge.i32','vmlslt.i32','vmlsgt.i32','vmlsle.i32', - - 'vmuleq.s8','vmulne.s8','vmulcs.s8','vmulhs.s8','vmulcc.s8','vmullo.s8','vmulmi.s8','vmulpl.s8','vmulvs.s8','vmulvc.s8','vmulhi.s8','vmulls.s8','vmulge.s8','vmullt.s8','vmulgt.s8','vmulle.s8', - 'vmuleq.s16','vmulne.s16','vmulcs.s16','vmulhs.s16','vmulcc.s16','vmullo.s16','vmulmi.s16','vmulpl.s16','vmulvs.s16','vmulvc.s16','vmulhi.s16','vmulls.s16','vmulge.s16','vmullt.s16','vmulgt.s16','vmulle.s16', - 'vmuleq.s32','vmulne.s32','vmulcs.s32','vmulhs.s32','vmulcc.s32','vmullo.s32','vmulmi.s32','vmulpl.s32','vmulvs.s32','vmulvc.s32','vmulhi.s32','vmulls.s32','vmulge.s32','vmullt.s32','vmulgt.s32','vmulle.s32', - 'vmuleq.u8','vmulne.u8','vmulcs.u8','vmulhs.u8','vmulcc.u8','vmullo.u8','vmulmi.u8','vmulpl.u8','vmulvs.u8','vmulvc.u8','vmulhi.u8','vmulls.u8','vmulge.u8','vmullt.u8','vmulgt.u8','vmulle.u8', - 'vmuleq.u16','vmulne.u16','vmulcs.u16','vmulhs.u16','vmulcc.u16','vmullo.u16','vmulmi.u16','vmulpl.u16','vmulvs.u16','vmulvc.u16','vmulhi.u16','vmulls.u16','vmulge.u16','vmullt.u16','vmulgt.u16','vmulle.u16', - 'vmuleq.u32','vmulne.u32','vmulcs.u32','vmulhs.u32','vmulcc.u32','vmullo.u32','vmulmi.u32','vmulpl.u32','vmulvs.u32','vmulvc.u32','vmulhi.u32','vmulls.u32','vmulge.u32','vmullt.u32','vmulgt.u32','vmulle.u32', - 'vmuleq.i8','vmulne.i8','vmulcs.i8','vmulhs.i8','vmulcc.i8','vmullo.i8','vmulmi.i8','vmulpl.i8','vmulvs.i8','vmulvc.i8','vmulhi.i8','vmulls.i8','vmulge.i8','vmullt.i8','vmulgt.i8','vmulle.i8', - 'vmuleq.i16','vmulne.i16','vmulcs.i16','vmulhs.i16','vmulcc.i16','vmullo.i16','vmulmi.i16','vmulpl.i16','vmulvs.i16','vmulvc.i16','vmulhi.i16','vmulls.i16','vmulge.i16','vmullt.i16','vmulgt.i16','vmulle.i16', - 'vmuleq.i32','vmulne.i32','vmulcs.i32','vmulhs.i32','vmulcc.i32','vmullo.i32','vmulmi.i32','vmulpl.i32','vmulvs.i32','vmulvc.i32','vmulhi.i32','vmulls.i32','vmulge.i32','vmullt.i32','vmulgt.i32','vmulle.i32', - 'vmuleq.p8','vmulne.p8','vmulcs.p8','vmulhs.p8','vmulcc.p8','vmullo.p8','vmulmi.p8','vmulpl.p8','vmulvs.p8','vmulvc.p8','vmulhi.p8','vmulls.p8','vmulge.p8','vmullt.p8','vmulgt.p8','vmulle.p8', - - 'vrshrneq.i16','vrshrnne.i16','vrshrncs.i16','vrshrnhs.i16','vrshrncc.i16','vrshrnlo.i16','vrshrnmi.i16','vrshrnpl.i16','vrshrnvs.i16','vrshrnvc.i16','vrshrnhi.i16','vrshrnls.i16','vrshrnge.i16','vrshrnlt.i16','vrshrngt.i16','vrshrnle.i16', - 'vrshrneq.i32','vrshrnne.i32','vrshrncs.i32','vrshrnhs.i32','vrshrncc.i32','vrshrnlo.i32','vrshrnmi.i32','vrshrnpl.i32','vrshrnvs.i32','vrshrnvc.i32','vrshrnhi.i32','vrshrnls.i32','vrshrnge.i32','vrshrnlt.i32','vrshrngt.i32','vrshrnle.i32', - 'vrshrneq.i64','vrshrnne.i64','vrshrncs.i64','vrshrnhs.i64','vrshrncc.i64','vrshrnlo.i64','vrshrnmi.i64','vrshrnpl.i64','vrshrnvs.i64','vrshrnvc.i64','vrshrnhi.i64','vrshrnls.i64','vrshrnge.i64','vrshrnlt.i64','vrshrngt.i64','vrshrnle.i64', - - 'vshrneq.i16','vshrnne.i16','vshrncs.i16','vshrnhs.i16','vshrncc.i16','vshrnlo.i16','vshrnmi.i16','vshrnpl.i16','vshrnvs.i16','vshrnvc.i16','vshrnhi.i16','vshrnls.i16','vshrnge.i16','vshrnlt.i16','vshrngt.i16','vshrnle.i16', - 'vshrneq.i32','vshrnne.i32','vshrncs.i32','vshrnhs.i32','vshrncc.i32','vshrnlo.i32','vshrnmi.i32','vshrnpl.i32','vshrnvs.i32','vshrnvc.i32','vshrnhi.i32','vshrnls.i32','vshrnge.i32','vshrnlt.i32','vshrngt.i32','vshrnle.i32', - 'vshrneq.i64','vshrnne.i64','vshrncs.i64','vshrnhs.i64','vshrncc.i64','vshrnlo.i64','vshrnmi.i64','vshrnpl.i64','vshrnvs.i64','vshrnvc.i64','vshrnhi.i64','vshrnls.i64','vshrnge.i64','vshrnlt.i64','vshrngt.i64','vshrnle.i64', - - 'vshleq.i8','vshlne.i8','vshlcs.i8','vshlhs.i8','vshlcc.i8','vshllo.i8','vshlmi.i8','vshlpl.i8','vshlvs.i8','vshlvc.i8','vshlhi.i8','vshlls.i8','vshlge.i8','vshllt.i8','vshlgt.i8','vshlle.i8', - 'vshleq.i16','vshlne.i16','vshlcs.i16','vshlhs.i16','vshlcc.i16','vshllo.i16','vshlmi.i16','vshlpl.i16','vshlvs.i16','vshlvc.i16','vshlhi.i16','vshlls.i16','vshlge.i16','vshllt.i16','vshlgt.i16','vshlle.i16', - 'vshleq.i32','vshlne.i32','vshlcs.i32','vshlhs.i32','vshlcc.i32','vshllo.i32','vshlmi.i32','vshlpl.i32','vshlvs.i32','vshlvc.i32','vshlhi.i32','vshlls.i32','vshlge.i32','vshllt.i32','vshlgt.i32','vshlle.i32', - 'vshleq.i64','vshlne.i64','vshlcs.i64','vshlhs.i64','vshlcc.i64','vshllo.i64','vshlmi.i64','vshlpl.i64','vshlvs.i64','vshlvc.i64','vshlhi.i64','vshlls.i64','vshlge.i64','vshllt.i64','vshlgt.i64','vshlle.i64', - - 'vshlleq.i8','vshllne.i8','vshllcs.i8','vshllhs.i8','vshllcc.i8','vshlllo.i8','vshllmi.i8','vshllpl.i8','vshllvs.i8','vshllvc.i8','vshllhi.i8','vshllls.i8','vshllge.i8','vshlllt.i8','vshllgt.i8','vshllle.i8', - 'vshlleq.i16','vshllne.i16','vshllcs.i16','vshllhs.i16','vshllcc.i16','vshlllo.i16','vshllmi.i16','vshllpl.i16','vshllvs.i16','vshllvc.i16','vshllhi.i16','vshllls.i16','vshllge.i16','vshlllt.i16','vshllgt.i16','vshllle.i16', - 'vshlleq.i32','vshllne.i32','vshllcs.i32','vshllhs.i32','vshllcc.i32','vshlllo.i32','vshllmi.i32','vshllpl.i32','vshllvs.i32','vshllvc.i32','vshllhi.i32','vshllls.i32','vshllge.i32','vshlllt.i32','vshllgt.i32','vshllle.i32' - ), - /* Conditional NEON SIMD Signed Integer Instructions */ - 32 => array( - 'vabaeq.s8','vabane.s8','vabacs.s8','vabahs.s8','vabacc.s8','vabalo.s8','vabami.s8','vabapl.s8','vabavs.s8','vabavc.s8','vabahi.s8','vabals.s8','vabage.s8','vabalt.s8','vabagt.s8','vabale.s8', - 'vabaeq.s16','vabane.s16','vabacs.s16','vabahs.s16','vabacc.s16','vabalo.s16','vabami.s16','vabapl.s16','vabavs.s16','vabavc.s16','vabahi.s16','vabals.s16','vabage.s16','vabalt.s16','vabagt.s16','vabale.s16', - 'vabaeq.s32','vabane.s32','vabacs.s32','vabahs.s32','vabacc.s32','vabalo.s32','vabami.s32','vabapl.s32','vabavs.s32','vabavc.s32','vabahi.s32','vabals.s32','vabage.s32','vabalt.s32','vabagt.s32','vabale.s32', - - 'vabaleq.s8','vabalne.s8','vabalcs.s8','vabalhs.s8','vabalcc.s8','vaballo.s8','vabalmi.s8','vabalpl.s8','vabalvs.s8','vabalvc.s8','vabalhi.s8','vaballs.s8','vabalge.s8','vaballt.s8','vabalgt.s8','vaballe.s8', - 'vabaleq.s16','vabalne.s16','vabalcs.s16','vabalhs.s16','vabalcc.s16','vaballo.s16','vabalmi.s16','vabalpl.s16','vabalvs.s16','vabalvc.s16','vabalhi.s16','vaballs.s16','vabalge.s16','vaballt.s16','vabalgt.s16','vaballe.s16', - 'vabaleq.s32','vabalne.s32','vabalcs.s32','vabalhs.s32','vabalcc.s32','vaballo.s32','vabalmi.s32','vabalpl.s32','vabalvs.s32','vabalvc.s32','vabalhi.s32','vaballs.s32','vabalge.s32','vaballt.s32','vabalgt.s32','vaballe.s32', - - 'vabdeq.s8','vabdne.s8','vabdcs.s8','vabdhs.s8','vabdcc.s8','vabdlo.s8','vabdmi.s8','vabdpl.s8','vabdvs.s8','vabdvc.s8','vabdhi.s8','vabdls.s8','vabdge.s8','vabdlt.s8','vabdgt.s8','vabdle.s8', - 'vabdeq.s16','vabdne.s16','vabdcs.s16','vabdhs.s16','vabdcc.s16','vabdlo.s16','vabdmi.s16','vabdpl.s16','vabdvs.s16','vabdvc.s16','vabdhi.s16','vabdls.s16','vabdge.s16','vabdlt.s16','vabdgt.s16','vabdle.s16', - 'vabdeq.s32','vabdne.s32','vabdcs.s32','vabdhs.s32','vabdcc.s32','vabdlo.s32','vabdmi.s32','vabdpl.s32','vabdvs.s32','vabdvc.s32','vabdhi.s32','vabdls.s32','vabdge.s32','vabdlt.s32','vabdgt.s32','vabdle.s32', - - 'vabseq.s8','vabsne.s8','vabscs.s8','vabshs.s8','vabscc.s8','vabslo.s8','vabsmi.s8','vabspl.s8','vabsvs.s8','vabsvc.s8','vabshi.s8','vabsls.s8','vabsge.s8','vabslt.s8','vabsgt.s8','vabsle.s8', - 'vabseq.s16','vabsne.s16','vabscs.s16','vabshs.s16','vabscc.s16','vabslo.s16','vabsmi.s16','vabspl.s16','vabsvs.s16','vabsvc.s16','vabshi.s16','vabsls.s16','vabsge.s16','vabslt.s16','vabsgt.s16','vabsle.s16', - 'vabseq.s32','vabsne.s32','vabscs.s32','vabshs.s32','vabscc.s32','vabslo.s32','vabsmi.s32','vabspl.s32','vabsvs.s32','vabsvc.s32','vabshi.s32','vabsls.s32','vabsge.s32','vabslt.s32','vabsgt.s32','vabsle.s32', - - 'vaddleq.s8','vaddlne.s8','vaddlcs.s8','vaddlhs.s8','vaddlcc.s8','vaddllo.s8','vaddlmi.s8','vaddlpl.s8','vaddlvs.s8','vaddlvc.s8','vaddlhi.s8','vaddlls.s8','vaddlge.s8','vaddllt.s8','vaddlgt.s8','vaddlle.s8', - 'vaddleq.s16','vaddlne.s16','vaddlcs.s16','vaddlhs.s16','vaddlcc.s16','vaddllo.s16','vaddlmi.s16','vaddlpl.s16','vaddlvs.s16','vaddlvc.s16','vaddlhi.s16','vaddlls.s16','vaddlge.s16','vaddllt.s16','vaddlgt.s16','vaddlle.s16', - 'vaddleq.s32','vaddlne.s32','vaddlcs.s32','vaddlhs.s32','vaddlcc.s32','vaddllo.s32','vaddlmi.s32','vaddlpl.s32','vaddlvs.s32','vaddlvc.s32','vaddlhi.s32','vaddlls.s32','vaddlge.s32','vaddllt.s32','vaddlgt.s32','vaddlle.s32', - - 'vcgeeq.s8','vcgene.s8','vcgecs.s8','vcgehs.s8','vcgecc.s8','vcgelo.s8','vcgemi.s8','vcgepl.s8','vcgevs.s8','vcgevc.s8','vcgehi.s8','vcgels.s8','vcgege.s8','vcgelt.s8','vcgegt.s8','vcgele.s8', - 'vcgeeq.s16','vcgene.s16','vcgecs.s16','vcgehs.s16','vcgecc.s16','vcgelo.s16','vcgemi.s16','vcgepl.s16','vcgevs.s16','vcgevc.s16','vcgehi.s16','vcgels.s16','vcgege.s16','vcgelt.s16','vcgegt.s16','vcgele.s16', - 'vcgeeq.s32','vcgene.s32','vcgecs.s32','vcgehs.s32','vcgecc.s32','vcgelo.s32','vcgemi.s32','vcgepl.s32','vcgevs.s32','vcgevc.s32','vcgehi.s32','vcgels.s32','vcgege.s32','vcgelt.s32','vcgegt.s32','vcgele.s32', - - 'vcleeq.s8','vclene.s8','vclecs.s8','vclehs.s8','vclecc.s8','vclelo.s8','vclemi.s8','vclepl.s8','vclevs.s8','vclevc.s8','vclehi.s8','vclels.s8','vclege.s8','vclelt.s8','vclegt.s8','vclele.s8', - 'vcleeq.s16','vclene.s16','vclecs.s16','vclehs.s16','vclecc.s16','vclelo.s16','vclemi.s16','vclepl.s16','vclevs.s16','vclevc.s16','vclehi.s16','vclels.s16','vclege.s16','vclelt.s16','vclegt.s16','vclele.s16', - 'vcleeq.s32','vclene.s32','vclecs.s32','vclehs.s32','vclecc.s32','vclelo.s32','vclemi.s32','vclepl.s32','vclevs.s32','vclevc.s32','vclehi.s32','vclels.s32','vclege.s32','vclelt.s32','vclegt.s32','vclele.s32', - - 'vcgteq.s8','vcgtne.s8','vcgtcs.s8','vcgths.s8','vcgtcc.s8','vcgtlo.s8','vcgtmi.s8','vcgtpl.s8','vcgtvs.s8','vcgtvc.s8','vcgthi.s8','vcgtls.s8','vcgtge.s8','vcgtlt.s8','vcgtgt.s8','vcgtle.s8', - 'vcgteq.s16','vcgtne.s16','vcgtcs.s16','vcgths.s16','vcgtcc.s16','vcgtlo.s16','vcgtmi.s16','vcgtpl.s16','vcgtvs.s16','vcgtvc.s16','vcgthi.s16','vcgtls.s16','vcgtge.s16','vcgtlt.s16','vcgtgt.s16','vcgtle.s16', - 'vcgteq.s32','vcgtne.s32','vcgtcs.s32','vcgths.s32','vcgtcc.s32','vcgtlo.s32','vcgtmi.s32','vcgtpl.s32','vcgtvs.s32','vcgtvc.s32','vcgthi.s32','vcgtls.s32','vcgtge.s32','vcgtlt.s32','vcgtgt.s32','vcgtle.s32', - - 'vclteq.s8','vcltne.s8','vcltcs.s8','vclths.s8','vcltcc.s8','vcltlo.s8','vcltmi.s8','vcltpl.s8','vcltvs.s8','vcltvc.s8','vclthi.s8','vcltls.s8','vcltge.s8','vcltlt.s8','vcltgt.s8','vcltle.s8', - 'vclteq.s16','vcltne.s16','vcltcs.s16','vclths.s16','vcltcc.s16','vcltlo.s16','vcltmi.s16','vcltpl.s16','vcltvs.s16','vcltvc.s16','vclthi.s16','vcltls.s16','vcltge.s16','vcltlt.s16','vcltgt.s16','vcltle.s16', - 'vclteq.s32','vcltne.s32','vcltcs.s32','vclths.s32','vcltcc.s32','vcltlo.s32','vcltmi.s32','vcltpl.s32','vcltvs.s32','vcltvc.s32','vclthi.s32','vcltls.s32','vcltge.s32','vcltlt.s32','vcltgt.s32','vcltle.s32', - - 'vclseq.s8','vclsne.s8','vclscs.s8','vclshs.s8','vclscc.s8','vclslo.s8','vclsmi.s8','vclspl.s8','vclsvs.s8','vclsvc.s8','vclshi.s8','vclsls.s8','vclsge.s8','vclslt.s8','vclsgt.s8','vclsle.s8', - 'vclseq.s16','vclsne.s16','vclscs.s16','vclshs.s16','vclscc.s16','vclslo.s16','vclsmi.s16','vclspl.s16','vclsvs.s16','vclsvc.s16','vclshi.s16','vclsls.s16','vclsge.s16','vclslt.s16','vclsgt.s16','vclsle.s16', - 'vclseq.s32','vclsne.s32','vclscs.s32','vclshs.s32','vclscc.s32','vclslo.s32','vclsmi.s32','vclspl.s32','vclsvs.s32','vclsvc.s32','vclshi.s32','vclsls.s32','vclsge.s32','vclslt.s32','vclsgt.s32','vclsle.s32', - - 'vaddweq.s8','vaddwne.s8','vaddwcs.s8','vaddwhs.s8','vaddwcc.s8','vaddwlo.s8','vaddwmi.s8','vaddwpl.s8','vaddwvs.s8','vaddwvc.s8','vaddwhi.s8','vaddwls.s8','vaddwge.s8','vaddwlt.s8','vaddwgt.s8','vaddwle.s8', - 'vaddweq.s16','vaddwne.s16','vaddwcs.s16','vaddwhs.s16','vaddwcc.s16','vaddwlo.s16','vaddwmi.s16','vaddwpl.s16','vaddwvs.s16','vaddwvc.s16','vaddwhi.s16','vaddwls.s16','vaddwge.s16','vaddwlt.s16','vaddwgt.s16','vaddwle.s16', - 'vaddweq.s32','vaddwne.s32','vaddwcs.s32','vaddwhs.s32','vaddwcc.s32','vaddwlo.s32','vaddwmi.s32','vaddwpl.s32','vaddwvs.s32','vaddwvc.s32','vaddwhi.s32','vaddwls.s32','vaddwge.s32','vaddwlt.s32','vaddwgt.s32','vaddwle.s32', - - 'vhaddeq.s8','vhaddne.s8','vhaddcs.s8','vhaddhs.s8','vhaddcc.s8','vhaddlo.s8','vhaddmi.s8','vhaddpl.s8','vhaddvs.s8','vhaddvc.s8','vhaddhi.s8','vhaddls.s8','vhaddge.s8','vhaddlt.s8','vhaddgt.s8','vhaddle.s8', - 'vhaddeq.s16','vhaddne.s16','vhaddcs.s16','vhaddhs.s16','vhaddcc.s16','vhaddlo.s16','vhaddmi.s16','vhaddpl.s16','vhaddvs.s16','vhaddvc.s16','vhaddhi.s16','vhaddls.s16','vhaddge.s16','vhaddlt.s16','vhaddgt.s16','vhaddle.s16', - 'vhaddeq.s32','vhaddne.s32','vhaddcs.s32','vhaddhs.s32','vhaddcc.s32','vhaddlo.s32','vhaddmi.s32','vhaddpl.s32','vhaddvs.s32','vhaddvc.s32','vhaddhi.s32','vhaddls.s32','vhaddge.s32','vhaddlt.s32','vhaddgt.s32','vhaddle.s32', - - 'vhsubeq.s8','vhsubne.s8','vhsubcs.s8','vhsubhs.s8','vhsubcc.s8','vhsublo.s8','vhsubmi.s8','vhsubpl.s8','vhsubvs.s8','vhsubvc.s8','vhsubhi.s8','vhsubls.s8','vhsubge.s8','vhsublt.s8','vhsubgt.s8','vhsuble.s8', - 'vhsubeq.s16','vhsubne.s16','vhsubcs.s16','vhsubhs.s16','vhsubcc.s16','vhsublo.s16','vhsubmi.s16','vhsubpl.s16','vhsubvs.s16','vhsubvc.s16','vhsubhi.s16','vhsubls.s16','vhsubge.s16','vhsublt.s16','vhsubgt.s16','vhsuble.s16', - 'vhsubeq.s32','vhsubne.s32','vhsubcs.s32','vhsubhs.s32','vhsubcc.s32','vhsublo.s32','vhsubmi.s32','vhsubpl.s32','vhsubvs.s32','vhsubvc.s32','vhsubhi.s32','vhsubls.s32','vhsubge.s32','vhsublt.s32','vhsubgt.s32','vhsuble.s32', - - 'vmaxeq.s8','vmaxne.s8','vmaxcs.s8','vmaxhs.s8','vmaxcc.s8','vmaxlo.s8','vmaxmi.s8','vmaxpl.s8','vmaxvs.s8','vmaxvc.s8','vmaxhi.s8','vmaxls.s8','vmaxge.s8','vmaxlt.s8','vmaxgt.s8','vmaxle.s8', - 'vmaxeq.s16','vmaxne.s16','vmaxcs.s16','vmaxhs.s16','vmaxcc.s16','vmaxlo.s16','vmaxmi.s16','vmaxpl.s16','vmaxvs.s16','vmaxvc.s16','vmaxhi.s16','vmaxls.s16','vmaxge.s16','vmaxlt.s16','vmaxgt.s16','vmaxle.s16', - 'vmaxeq.s32','vmaxne.s32','vmaxcs.s32','vmaxhs.s32','vmaxcc.s32','vmaxlo.s32','vmaxmi.s32','vmaxpl.s32','vmaxvs.s32','vmaxvc.s32','vmaxhi.s32','vmaxls.s32','vmaxge.s32','vmaxlt.s32','vmaxgt.s32','vmaxle.s32', - - 'vmineq.s8','vminne.s8','vmincs.s8','vminhs.s8','vmincc.s8','vminlo.s8','vminmi.s8','vminpl.s8','vminvs.s8','vminvc.s8','vminhi.s8','vminls.s8','vminge.s8','vminlt.s8','vmingt.s8','vminle.s8', - 'vmineq.s16','vminne.s16','vmincs.s16','vminhs.s16','vmincc.s16','vminlo.s16','vminmi.s16','vminpl.s16','vminvs.s16','vminvc.s16','vminhi.s16','vminls.s16','vminge.s16','vminlt.s16','vmingt.s16','vminle.s16', - 'vmineq.s32','vminne.s32','vmincs.s32','vminhs.s32','vmincc.s32','vminlo.s32','vminmi.s32','vminpl.s32','vminvs.s32','vminvc.s32','vminhi.s32','vminls.s32','vminge.s32','vminlt.s32','vmingt.s32','vminle.s32', - - 'vmlaleq.s8','vmlalne.s8','vmlalcs.s8','vmlalhs.s8','vmlalcc.s8','vmlallo.s8','vmlalmi.s8','vmlalpl.s8','vmlalvs.s8','vmlalvc.s8','vmlalhi.s8','vmlalls.s8','vmlalge.s8','vmlallt.s8','vmlalgt.s8','vmlalle.s8', - 'vmlaleq.s16','vmlalne.s16','vmlalcs.s16','vmlalhs.s16','vmlalcc.s16','vmlallo.s16','vmlalmi.s16','vmlalpl.s16','vmlalvs.s16','vmlalvc.s16','vmlalhi.s16','vmlalls.s16','vmlalge.s16','vmlallt.s16','vmlalgt.s16','vmlalle.s16', - 'vmlaleq.s32','vmlalne.s32','vmlalcs.s32','vmlalhs.s32','vmlalcc.s32','vmlallo.s32','vmlalmi.s32','vmlalpl.s32','vmlalvs.s32','vmlalvc.s32','vmlalhi.s32','vmlalls.s32','vmlalge.s32','vmlallt.s32','vmlalgt.s32','vmlalle.s32', - - 'vmlsleq.s8','vmlslne.s8','vmlslcs.s8','vmlslhs.s8','vmlslcc.s8','vmlsllo.s8','vmlslmi.s8','vmlslpl.s8','vmlslvs.s8','vmlslvc.s8','vmlslhi.s8','vmlslls.s8','vmlslge.s8','vmlsllt.s8','vmlslgt.s8','vmlslle.s8', - 'vmlsleq.s16','vmlslne.s16','vmlslcs.s16','vmlslhs.s16','vmlslcc.s16','vmlsllo.s16','vmlslmi.s16','vmlslpl.s16','vmlslvs.s16','vmlslvc.s16','vmlslhi.s16','vmlslls.s16','vmlslge.s16','vmlsllt.s16','vmlslgt.s16','vmlslle.s16', - 'vmlsleq.s32','vmlslne.s32','vmlslcs.s32','vmlslhs.s32','vmlslcc.s32','vmlsllo.s32','vmlslmi.s32','vmlslpl.s32','vmlslvs.s32','vmlslvc.s32','vmlslhi.s32','vmlslls.s32','vmlslge.s32','vmlsllt.s32','vmlslgt.s32','vmlslle.s32', - - 'vnegeq.s8','vnegne.s8','vnegcs.s8','vneghs.s8','vnegcc.s8','vneglo.s8','vnegmi.s8','vnegpl.s8','vnegvs.s8','vnegvc.s8','vneghi.s8','vnegls.s8','vnegge.s8','vneglt.s8','vneggt.s8','vnegle.s8', - 'vnegeq.s16','vnegne.s16','vnegcs.s16','vneghs.s16','vnegcc.s16','vneglo.s16','vnegmi.s16','vnegpl.s16','vnegvs.s16','vnegvc.s16','vneghi.s16','vnegls.s16','vnegge.s16','vneglt.s16','vneggt.s16','vnegle.s16', - 'vnegeq.s32','vnegne.s32','vnegcs.s32','vneghs.s32','vnegcc.s32','vneglo.s32','vnegmi.s32','vnegpl.s32','vnegvs.s32','vnegvc.s32','vneghi.s32','vnegls.s32','vnegge.s32','vneglt.s32','vneggt.s32','vnegle.s32', - - 'vpadaleq.s8','vpadalne.s8','vpadalcs.s8','vpadalhs.s8','vpadalcc.s8','vpadallo.s8','vpadalmi.s8','vpadalpl.s8','vpadalvs.s8','vpadalvc.s8','vpadalhi.s8','vpadalls.s8','vpadalge.s8','vpadallt.s8','vpadalgt.s8','vpadalle.s8', - 'vpadaleq.s16','vpadalne.s16','vpadalcs.s16','vpadalhs.s16','vpadalcc.s16','vpadallo.s16','vpadalmi.s16','vpadalpl.s16','vpadalvs.s16','vpadalvc.s16','vpadalhi.s16','vpadalls.s16','vpadalge.s16','vpadallt.s16','vpadalgt.s16','vpadalle.s16', - 'vpadaleq.s32','vpadalne.s32','vpadalcs.s32','vpadalhs.s32','vpadalcc.s32','vpadallo.s32','vpadalmi.s32','vpadalpl.s32','vpadalvs.s32','vpadalvc.s32','vpadalhi.s32','vpadalls.s32','vpadalge.s32','vpadallt.s32','vpadalgt.s32','vpadalle.s32', - - 'vmovleq.s8','vmovlne.s8','vmovlcs.s8','vmovlhs.s8','vmovlcc.s8','vmovllo.s8','vmovlmi.s8','vmovlpl.s8','vmovlvs.s8','vmovlvc.s8','vmovlhi.s8','vmovlls.s8','vmovlge.s8','vmovllt.s8','vmovlgt.s8','vmovlle.s8', - 'vmovleq.s16','vmovlne.s16','vmovlcs.s16','vmovlhs.s16','vmovlcc.s16','vmovllo.s16','vmovlmi.s16','vmovlpl.s16','vmovlvs.s16','vmovlvc.s16','vmovlhi.s16','vmovlls.s16','vmovlge.s16','vmovllt.s16','vmovlgt.s16','vmovlle.s16', - 'vmovleq.s32','vmovlne.s32','vmovlcs.s32','vmovlhs.s32','vmovlcc.s32','vmovllo.s32','vmovlmi.s32','vmovlpl.s32','vmovlvs.s32','vmovlvc.s32','vmovlhi.s32','vmovlls.s32','vmovlge.s32','vmovllt.s32','vmovlgt.s32','vmovlle.s32', - - 'vmulleq.s8','vmullne.s8','vmullcs.s8','vmullhs.s8','vmullcc.s8','vmulllo.s8','vmullmi.s8','vmullpl.s8','vmullvs.s8','vmullvc.s8','vmullhi.s8','vmullls.s8','vmullge.s8','vmulllt.s8','vmullgt.s8','vmullle.s8', - 'vmulleq.s16','vmullne.s16','vmullcs.s16','vmullhs.s16','vmullcc.s16','vmulllo.s16','vmullmi.s16','vmullpl.s16','vmullvs.s16','vmullvc.s16','vmullhi.s16','vmullls.s16','vmullge.s16','vmulllt.s16','vmullgt.s16','vmullle.s16', - 'vmulleq.s32','vmullne.s32','vmullcs.s32','vmullhs.s32','vmullcc.s32','vmulllo.s32','vmullmi.s32','vmullpl.s32','vmullvs.s32','vmullvc.s32','vmullhi.s32','vmullls.s32','vmullge.s32','vmulllt.s32','vmullgt.s32','vmullle.s32', - - 'vpaddleq.s8','vpaddlne.s8','vpaddlcs.s8','vpaddlhs.s8','vpaddlcc.s8','vpaddllo.s8','vpaddlmi.s8','vpaddlpl.s8','vpaddlvs.s8','vpaddlvc.s8','vpaddlhi.s8','vpaddlls.s8','vpaddlge.s8','vpaddllt.s8','vpaddlgt.s8','vpaddlle.s8', - 'vpaddleq.s16','vpaddlne.s16','vpaddlcs.s16','vpaddlhs.s16','vpaddlcc.s16','vpaddllo.s16','vpaddlmi.s16','vpaddlpl.s16','vpaddlvs.s16','vpaddlvc.s16','vpaddlhi.s16','vpaddlls.s16','vpaddlge.s16','vpaddllt.s16','vpaddlgt.s16','vpaddlle.s16', - 'vpaddleq.s32','vpaddlne.s32','vpaddlcs.s32','vpaddlhs.s32','vpaddlcc.s32','vpaddllo.s32','vpaddlmi.s32','vpaddlpl.s32','vpaddlvs.s32','vpaddlvc.s32','vpaddlhi.s32','vpaddlls.s32','vpaddlge.s32','vpaddllt.s32','vpaddlgt.s32','vpaddlle.s32', - - 'vpmaxeq.s8','vpmaxne.s8','vpmaxcs.s8','vpmaxhs.s8','vpmaxcc.s8','vpmaxlo.s8','vpmaxmi.s8','vpmaxpl.s8','vpmaxvs.s8','vpmaxvc.s8','vpmaxhi.s8','vpmaxls.s8','vpmaxge.s8','vpmaxlt.s8','vpmaxgt.s8','vpmaxle.s8', - 'vpmaxeq.s16','vpmaxne.s16','vpmaxcs.s16','vpmaxhs.s16','vpmaxcc.s16','vpmaxlo.s16','vpmaxmi.s16','vpmaxpl.s16','vpmaxvs.s16','vpmaxvc.s16','vpmaxhi.s16','vpmaxls.s16','vpmaxge.s16','vpmaxlt.s16','vpmaxgt.s16','vpmaxle.s16', - 'vpmaxeq.s32','vpmaxne.s32','vpmaxcs.s32','vpmaxhs.s32','vpmaxcc.s32','vpmaxlo.s32','vpmaxmi.s32','vpmaxpl.s32','vpmaxvs.s32','vpmaxvc.s32','vpmaxhi.s32','vpmaxls.s32','vpmaxge.s32','vpmaxlt.s32','vpmaxgt.s32','vpmaxle.s32', - - 'vpmineq.s8','vpminne.s8','vpmincs.s8','vpminhs.s8','vpmincc.s8','vpminlo.s8','vpminmi.s8','vpminpl.s8','vpminvs.s8','vpminvc.s8','vpminhi.s8','vpminls.s8','vpminge.s8','vpminlt.s8','vpmingt.s8','vpminle.s8', - 'vpmineq.s16','vpminne.s16','vpmincs.s16','vpminhs.s16','vpmincc.s16','vpminlo.s16','vpminmi.s16','vpminpl.s16','vpminvs.s16','vpminvc.s16','vpminhi.s16','vpminls.s16','vpminge.s16','vpminlt.s16','vpmingt.s16','vpminle.s16', - 'vpmineq.s32','vpminne.s32','vpmincs.s32','vpminhs.s32','vpmincc.s32','vpminlo.s32','vpminmi.s32','vpminpl.s32','vpminvs.s32','vpminvc.s32','vpminhi.s32','vpminls.s32','vpminge.s32','vpminlt.s32','vpmingt.s32','vpminle.s32', - - 'vqabseq.s8','vqabsne.s8','vqabscs.s8','vqabshs.s8','vqabscc.s8','vqabslo.s8','vqabsmi.s8','vqabspl.s8','vqabsvs.s8','vqabsvc.s8','vqabshi.s8','vqabsls.s8','vqabsge.s8','vqabslt.s8','vqabsgt.s8','vqabsle.s8', - 'vqabseq.s16','vqabsne.s16','vqabscs.s16','vqabshs.s16','vqabscc.s16','vqabslo.s16','vqabsmi.s16','vqabspl.s16','vqabsvs.s16','vqabsvc.s16','vqabshi.s16','vqabsls.s16','vqabsge.s16','vqabslt.s16','vqabsgt.s16','vqabsle.s16', - 'vqabseq.s32','vqabsne.s32','vqabscs.s32','vqabshs.s32','vqabscc.s32','vqabslo.s32','vqabsmi.s32','vqabspl.s32','vqabsvs.s32','vqabsvc.s32','vqabshi.s32','vqabsls.s32','vqabsge.s32','vqabslt.s32','vqabsgt.s32','vqabsle.s32', - - 'vqaddeq.s8','vqaddne.s8','vqaddcs.s8','vqaddhs.s8','vqaddcc.s8','vqaddlo.s8','vqaddmi.s8','vqaddpl.s8','vqaddvs.s8','vqaddvc.s8','vqaddhi.s8','vqaddls.s8','vqaddge.s8','vqaddlt.s8','vqaddgt.s8','vqaddle.s8', - 'vqaddeq.s16','vqaddne.s16','vqaddcs.s16','vqaddhs.s16','vqaddcc.s16','vqaddlo.s16','vqaddmi.s16','vqaddpl.s16','vqaddvs.s16','vqaddvc.s16','vqaddhi.s16','vqaddls.s16','vqaddge.s16','vqaddlt.s16','vqaddgt.s16','vqaddle.s16', - 'vqaddeq.s32','vqaddne.s32','vqaddcs.s32','vqaddhs.s32','vqaddcc.s32','vqaddlo.s32','vqaddmi.s32','vqaddpl.s32','vqaddvs.s32','vqaddvc.s32','vqaddhi.s32','vqaddls.s32','vqaddge.s32','vqaddlt.s32','vqaddgt.s32','vqaddle.s32', - 'vqaddeq.s64','vqaddne.s64','vqaddcs.s64','vqaddhs.s64','vqaddcc.s64','vqaddlo.s64','vqaddmi.s64','vqaddpl.s64','vqaddvs.s64','vqaddvc.s64','vqaddhi.s64','vqaddls.s64','vqaddge.s64','vqaddlt.s64','vqaddgt.s64','vqaddle.s64', - - 'vqdmlaleq.s16','vqdmlalne.s16','vqdmlalcs.s16','vqdmlalhs.s16','vqdmlalcc.s16','vqdmlallo.s16','vqdmlalmi.s16','vqdmlalpl.s16','vqdmlalvs.s16','vqdmlalvc.s16','vqdmlalhi.s16','vqdmlalls.s16','vqdmlalge.s16','vqdmlallt.s16','vqdmlalgt.s16','vqdmlalle.s16', - 'vqdmlaleq.s32','vqdmlalne.s32','vqdmlalcs.s32','vqdmlalhs.s32','vqdmlalcc.s32','vqdmlallo.s32','vqdmlalmi.s32','vqdmlalpl.s32','vqdmlalvs.s32','vqdmlalvc.s32','vqdmlalhi.s32','vqdmlalls.s32','vqdmlalge.s32','vqdmlallt.s32','vqdmlalgt.s32','vqdmlalle.s32', - - 'vqdmlsleq.s16','vqdmlslne.s16','vqdmlslcs.s16','vqdmlslhs.s16','vqdmlslcc.s16','vqdmlsllo.s16','vqdmlslmi.s16','vqdmlslpl.s16','vqdmlslvs.s16','vqdmlslvc.s16','vqdmlslhi.s16','vqdmlslls.s16','vqdmlslge.s16','vqdmlsllt.s16','vqdmlslgt.s16','vqdmlslle.s16', - 'vqdmlsleq.s32','vqdmlslne.s32','vqdmlslcs.s32','vqdmlslhs.s32','vqdmlslcc.s32','vqdmlsllo.s32','vqdmlslmi.s32','vqdmlslpl.s32','vqdmlslvs.s32','vqdmlslvc.s32','vqdmlslhi.s32','vqdmlslls.s32','vqdmlslge.s32','vqdmlsllt.s32','vqdmlslgt.s32','vqdmlslle.s32', - - 'vqdmulheq.s16','vqdmulhne.s16','vqdmulhcs.s16','vqdmulhhs.s16','vqdmulhcc.s16','vqdmulhlo.s16','vqdmulhmi.s16','vqdmulhpl.s16','vqdmulhvs.s16','vqdmulhvc.s16','vqdmulhhi.s16','vqdmulhls.s16','vqdmulhge.s16','vqdmulhlt.s16','vqdmulhgt.s16','vqdmulhle.s16', - 'vqdmulheq.s32','vqdmulhne.s32','vqdmulhcs.s32','vqdmulhhs.s32','vqdmulhcc.s32','vqdmulhlo.s32','vqdmulhmi.s32','vqdmulhpl.s32','vqdmulhvs.s32','vqdmulhvc.s32','vqdmulhhi.s32','vqdmulhls.s32','vqdmulhge.s32','vqdmulhlt.s32','vqdmulhgt.s32','vqdmulhle.s32', - - 'vqdmulleq.s16','vqdmullne.s16','vqdmullcs.s16','vqdmullhs.s16','vqdmullcc.s16','vqdmulllo.s16','vqdmullmi.s16','vqdmullpl.s16','vqdmullvs.s16','vqdmullvc.s16','vqdmullhi.s16','vqdmullls.s16','vqdmullge.s16','vqdmulllt.s16','vqdmullgt.s16','vqdmullle.s16', - 'vqdmulleq.s32','vqdmullne.s32','vqdmullcs.s32','vqdmullhs.s32','vqdmullcc.s32','vqdmulllo.s32','vqdmullmi.s32','vqdmullpl.s32','vqdmullvs.s32','vqdmullvc.s32','vqdmullhi.s32','vqdmullls.s32','vqdmullge.s32','vqdmulllt.s32','vqdmullgt.s32','vqdmullle.s32', - - 'vqmovneq.s16','vqmovnne.s16','vqmovncs.s16','vqmovnhs.s16','vqmovncc.s16','vqmovnlo.s16','vqmovnmi.s16','vqmovnpl.s16','vqmovnvs.s16','vqmovnvc.s16','vqmovnhi.s16','vqmovnls.s16','vqmovnge.s16','vqmovnlt.s16','vqmovngt.s16','vqmovnle.s16', - 'vqmovneq.s32','vqmovnne.s32','vqmovncs.s32','vqmovnhs.s32','vqmovncc.s32','vqmovnlo.s32','vqmovnmi.s32','vqmovnpl.s32','vqmovnvs.s32','vqmovnvc.s32','vqmovnhi.s32','vqmovnls.s32','vqmovnge.s32','vqmovnlt.s32','vqmovngt.s32','vqmovnle.s32', - 'vqmovneq.s64','vqmovnne.s64','vqmovncs.s64','vqmovnhs.s64','vqmovncc.s64','vqmovnlo.s64','vqmovnmi.s64','vqmovnpl.s64','vqmovnvs.s64','vqmovnvc.s64','vqmovnhi.s64','vqmovnls.s64','vqmovnge.s64','vqmovnlt.s64','vqmovngt.s64','vqmovnle.s64', - - 'vqmovuneq.s16','vqmovunne.s16','vqmovuncs.s16','vqmovunhs.s16','vqmovuncc.s16','vqmovunlo.s16','vqmovunmi.s16','vqmovunpl.s16','vqmovunvs.s16','vqmovunvc.s16','vqmovunhi.s16','vqmovunls.s16','vqmovunge.s16','vqmovunlt.s16','vqmovungt.s16','vqmovunle.s16', - 'vqmovuneq.s32','vqmovunne.s32','vqmovuncs.s32','vqmovunhs.s32','vqmovuncc.s32','vqmovunlo.s32','vqmovunmi.s32','vqmovunpl.s32','vqmovunvs.s32','vqmovunvc.s32','vqmovunhi.s32','vqmovunls.s32','vqmovunge.s32','vqmovunlt.s32','vqmovungt.s32','vqmovunle.s32', - 'vqmovuneq.s64','vqmovunne.s64','vqmovuncs.s64','vqmovunhs.s64','vqmovuncc.s64','vqmovunlo.s64','vqmovunmi.s64','vqmovunpl.s64','vqmovunvs.s64','vqmovunvc.s64','vqmovunhi.s64','vqmovunls.s64','vqmovunge.s64','vqmovunlt.s64','vqmovungt.s64','vqmovunle.s64', - - 'vqnegeq.s8','vqnegne.s8','vqnegcs.s8','vqneghs.s8','vqnegcc.s8','vqneglo.s8','vqnegmi.s8','vqnegpl.s8','vqnegvs.s8','vqnegvc.s8','vqneghi.s8','vqnegls.s8','vqnegge.s8','vqneglt.s8','vqneggt.s8','vqnegle.s8', - 'vqnegeq.s16','vqnegne.s16','vqnegcs.s16','vqneghs.s16','vqnegcc.s16','vqneglo.s16','vqnegmi.s16','vqnegpl.s16','vqnegvs.s16','vqnegvc.s16','vqneghi.s16','vqnegls.s16','vqnegge.s16','vqneglt.s16','vqneggt.s16','vqnegle.s16', - 'vqnegeq.s32','vqnegne.s32','vqnegcs.s32','vqneghs.s32','vqnegcc.s32','vqneglo.s32','vqnegmi.s32','vqnegpl.s32','vqnegvs.s32','vqnegvc.s32','vqneghi.s32','vqnegls.s32','vqnegge.s32','vqneglt.s32','vqneggt.s32','vqnegle.s32', - - 'vqrdmulheq.s16','vqrdmulhne.s16','vqrdmulhcs.s16','vqrdmulhhs.s16','vqrdmulhcc.s16','vqrdmulhlo.s16','vqrdmulhmi.s16','vqrdmulhpl.s16','vqrdmulhvs.s16','vqrdmulhvc.s16','vqrdmulhhi.s16','vqrdmulhls.s16','vqrdmulhge.s16','vqrdmulhlt.s16','vqrdmulhgt.s16','vqrdmulhle.s16', - 'vqrdmulheq.s32','vqrdmulhne.s32','vqrdmulhcs.s32','vqrdmulhhs.s32','vqrdmulhcc.s32','vqrdmulhlo.s32','vqrdmulhmi.s32','vqrdmulhpl.s32','vqrdmulhvs.s32','vqrdmulhvc.s32','vqrdmulhhi.s32','vqrdmulhls.s32','vqrdmulhge.s32','vqrdmulhlt.s32','vqrdmulhgt.s32','vqrdmulhle.s32', - - 'vqrshleq.s8','vqrshlne.s8','vqrshlcs.s8','vqrshlhs.s8','vqrshlcc.s8','vqrshllo.s8','vqrshlmi.s8','vqrshlpl.s8','vqrshlvs.s8','vqrshlvc.s8','vqrshlhi.s8','vqrshlls.s8','vqrshlge.s8','vqrshllt.s8','vqrshlgt.s8','vqrshlle.s8', - 'vqrshleq.s16','vqrshlne.s16','vqrshlcs.s16','vqrshlhs.s16','vqrshlcc.s16','vqrshllo.s16','vqrshlmi.s16','vqrshlpl.s16','vqrshlvs.s16','vqrshlvc.s16','vqrshlhi.s16','vqrshlls.s16','vqrshlge.s16','vqrshllt.s16','vqrshlgt.s16','vqrshlle.s16', - 'vqrshleq.s32','vqrshlne.s32','vqrshlcs.s32','vqrshlhs.s32','vqrshlcc.s32','vqrshllo.s32','vqrshlmi.s32','vqrshlpl.s32','vqrshlvs.s32','vqrshlvc.s32','vqrshlhi.s32','vqrshlls.s32','vqrshlge.s32','vqrshllt.s32','vqrshlgt.s32','vqrshlle.s32', - 'vqrshleq.s64','vqrshlne.s64','vqrshlcs.s64','vqrshlhs.s64','vqrshlcc.s64','vqrshllo.s64','vqrshlmi.s64','vqrshlpl.s64','vqrshlvs.s64','vqrshlvc.s64','vqrshlhi.s64','vqrshlls.s64','vqrshlge.s64','vqrshllt.s64','vqrshlgt.s64','vqrshlle.s64', - - 'vqrshrneq.s16','vqrshrnne.s16','vqrshrncs.s16','vqrshrnhs.s16','vqrshrncc.s16','vqrshrnlo.s16','vqrshrnmi.s16','vqrshrnpl.s16','vqrshrnvs.s16','vqrshrnvc.s16','vqrshrnhi.s16','vqrshrnls.s16','vqrshrnge.s16','vqrshrnlt.s16','vqrshrngt.s16','vqrshrnle.s16', - 'vqrshrneq.s32','vqrshrnne.s32','vqrshrncs.s32','vqrshrnhs.s32','vqrshrncc.s32','vqrshrnlo.s32','vqrshrnmi.s32','vqrshrnpl.s32','vqrshrnvs.s32','vqrshrnvc.s32','vqrshrnhi.s32','vqrshrnls.s32','vqrshrnge.s32','vqrshrnlt.s32','vqrshrngt.s32','vqrshrnle.s32', - 'vqrshrneq.s64','vqrshrnne.s64','vqrshrncs.s64','vqrshrnhs.s64','vqrshrncc.s64','vqrshrnlo.s64','vqrshrnmi.s64','vqrshrnpl.s64','vqrshrnvs.s64','vqrshrnvc.s64','vqrshrnhi.s64','vqrshrnls.s64','vqrshrnge.s64','vqrshrnlt.s64','vqrshrngt.s64','vqrshrnle.s64', - - 'vqrshruneq.s16','vqrshrunne.s16','vqrshruncs.s16','vqrshrunhs.s16','vqrshruncc.s16','vqrshrunlo.s16','vqrshrunmi.s16','vqrshrunpl.s16','vqrshrunvs.s16','vqrshrunvc.s16','vqrshrunhi.s16','vqrshrunls.s16','vqrshrunge.s16','vqrshrunlt.s16','vqrshrungt.s16','vqrshrunle.s16', - 'vqrshruneq.s32','vqrshrunne.s32','vqrshruncs.s32','vqrshrunhs.s32','vqrshruncc.s32','vqrshrunlo.s32','vqrshrunmi.s32','vqrshrunpl.s32','vqrshrunvs.s32','vqrshrunvc.s32','vqrshrunhi.s32','vqrshrunls.s32','vqrshrunge.s32','vqrshrunlt.s32','vqrshrungt.s32','vqrshrunle.s32', - 'vqrshruneq.s64','vqrshrunne.s64','vqrshruncs.s64','vqrshrunhs.s64','vqrshruncc.s64','vqrshrunlo.s64','vqrshrunmi.s64','vqrshrunpl.s64','vqrshrunvs.s64','vqrshrunvc.s64','vqrshrunhi.s64','vqrshrunls.s64','vqrshrunge.s64','vqrshrunlt.s64','vqrshrungt.s64','vqrshrunle.s64', - - 'vqshleq.s8','vqshlne.s8','vqshlcs.s8','vqshlhs.s8','vqshlcc.s8','vqshllo.s8','vqshlmi.s8','vqshlpl.s8','vqshlvs.s8','vqshlvc.s8','vqshlhi.s8','vqshlls.s8','vqshlge.s8','vqshllt.s8','vqshlgt.s8','vqshlle.s8', - 'vqshleq.s16','vqshlne.s16','vqshlcs.s16','vqshlhs.s16','vqshlcc.s16','vqshllo.s16','vqshlmi.s16','vqshlpl.s16','vqshlvs.s16','vqshlvc.s16','vqshlhi.s16','vqshlls.s16','vqshlge.s16','vqshllt.s16','vqshlgt.s16','vqshlle.s16', - 'vqshleq.s32','vqshlne.s32','vqshlcs.s32','vqshlhs.s32','vqshlcc.s32','vqshllo.s32','vqshlmi.s32','vqshlpl.s32','vqshlvs.s32','vqshlvc.s32','vqshlhi.s32','vqshlls.s32','vqshlge.s32','vqshllt.s32','vqshlgt.s32','vqshlle.s32', - 'vqshleq.s64','vqshlne.s64','vqshlcs.s64','vqshlhs.s64','vqshlcc.s64','vqshllo.s64','vqshlmi.s64','vqshlpl.s64','vqshlvs.s64','vqshlvc.s64','vqshlhi.s64','vqshlls.s64','vqshlge.s64','vqshllt.s64','vqshlgt.s64','vqshlle.s64', - - 'vqshlueq.s8','vqshlune.s8','vqshlucs.s8','vqshluhs.s8','vqshlucc.s8','vqshlulo.s8','vqshlumi.s8','vqshlupl.s8','vqshluvs.s8','vqshluvc.s8','vqshluhi.s8','vqshluls.s8','vqshluge.s8','vqshlult.s8','vqshlugt.s8','vqshlule.s8', - 'vqshlueq.s16','vqshlune.s16','vqshlucs.s16','vqshluhs.s16','vqshlucc.s16','vqshlulo.s16','vqshlumi.s16','vqshlupl.s16','vqshluvs.s16','vqshluvc.s16','vqshluhi.s16','vqshluls.s16','vqshluge.s16','vqshlult.s16','vqshlugt.s16','vqshlule.s16', - 'vqshlueq.s32','vqshlune.s32','vqshlucs.s32','vqshluhs.s32','vqshlucc.s32','vqshlulo.s32','vqshlumi.s32','vqshlupl.s32','vqshluvs.s32','vqshluvc.s32','vqshluhi.s32','vqshluls.s32','vqshluge.s32','vqshlult.s32','vqshlugt.s32','vqshlule.s32', - 'vqshlueq.s64','vqshlune.s64','vqshlucs.s64','vqshluhs.s64','vqshlucc.s64','vqshlulo.s64','vqshlumi.s64','vqshlupl.s64','vqshluvs.s64','vqshluvc.s64','vqshluhi.s64','vqshluls.s64','vqshluge.s64','vqshlult.s64','vqshlugt.s64','vqshlule.s64', - - 'vqshrneq.s16','vqshrnne.s16','vqshrncs.s16','vqshrnhs.s16','vqshrncc.s16','vqshrnlo.s16','vqshrnmi.s16','vqshrnpl.s16','vqshrnvs.s16','vqshrnvc.s16','vqshrnhi.s16','vqshrnls.s16','vqshrnge.s16','vqshrnlt.s16','vqshrngt.s16','vqshrnle.s16', - 'vqshrneq.s32','vqshrnne.s32','vqshrncs.s32','vqshrnhs.s32','vqshrncc.s32','vqshrnlo.s32','vqshrnmi.s32','vqshrnpl.s32','vqshrnvs.s32','vqshrnvc.s32','vqshrnhi.s32','vqshrnls.s32','vqshrnge.s32','vqshrnlt.s32','vqshrngt.s32','vqshrnle.s32', - 'vqshrneq.s64','vqshrnne.s64','vqshrncs.s64','vqshrnhs.s64','vqshrncc.s64','vqshrnlo.s64','vqshrnmi.s64','vqshrnpl.s64','vqshrnvs.s64','vqshrnvc.s64','vqshrnhi.s64','vqshrnls.s64','vqshrnge.s64','vqshrnlt.s64','vqshrngt.s64','vqshrnle.s64', - - 'vqshruneq.s16','vqshrunne.s16','vqshruncs.s16','vqshrunhs.s16','vqshruncc.s16','vqshrunlo.s16','vqshrunmi.s16','vqshrunpl.s16','vqshrunvs.s16','vqshrunvc.s16','vqshrunhi.s16','vqshrunls.s16','vqshrunge.s16','vqshrunlt.s16','vqshrungt.s16','vqshrunle.s16', - 'vqshruneq.s32','vqshrunne.s32','vqshruncs.s32','vqshrunhs.s32','vqshruncc.s32','vqshrunlo.s32','vqshrunmi.s32','vqshrunpl.s32','vqshrunvs.s32','vqshrunvc.s32','vqshrunhi.s32','vqshrunls.s32','vqshrunge.s32','vqshrunlt.s32','vqshrungt.s32','vqshrunle.s32', - 'vqshruneq.s64','vqshrunne.s64','vqshruncs.s64','vqshrunhs.s64','vqshruncc.s64','vqshrunlo.s64','vqshrunmi.s64','vqshrunpl.s64','vqshrunvs.s64','vqshrunvc.s64','vqshrunhi.s64','vqshrunls.s64','vqshrunge.s64','vqshrunlt.s64','vqshrungt.s64','vqshrunle.s64', - - 'vqsubeq.s8','vqsubne.s8','vqsubcs.s8','vqsubhs.s8','vqsubcc.s8','vqsublo.s8','vqsubmi.s8','vqsubpl.s8','vqsubvs.s8','vqsubvc.s8','vqsubhi.s8','vqsubls.s8','vqsubge.s8','vqsublt.s8','vqsubgt.s8','vqsuble.s8', - 'vqsubeq.s16','vqsubne.s16','vqsubcs.s16','vqsubhs.s16','vqsubcc.s16','vqsublo.s16','vqsubmi.s16','vqsubpl.s16','vqsubvs.s16','vqsubvc.s16','vqsubhi.s16','vqsubls.s16','vqsubge.s16','vqsublt.s16','vqsubgt.s16','vqsuble.s16', - 'vqsubeq.s32','vqsubne.s32','vqsubcs.s32','vqsubhs.s32','vqsubcc.s32','vqsublo.s32','vqsubmi.s32','vqsubpl.s32','vqsubvs.s32','vqsubvc.s32','vqsubhi.s32','vqsubls.s32','vqsubge.s32','vqsublt.s32','vqsubgt.s32','vqsuble.s32', - 'vqsubeq.s64','vqsubne.s64','vqsubcs.s64','vqsubhs.s64','vqsubcc.s64','vqsublo.s64','vqsubmi.s64','vqsubpl.s64','vqsubvs.s64','vqsubvc.s64','vqsubhi.s64','vqsubls.s64','vqsubge.s64','vqsublt.s64','vqsubgt.s64','vqsuble.s64', - - 'vrhaddeq.s8','vrhaddne.s8','vrhaddcs.s8','vrhaddhs.s8','vrhaddcc.s8','vrhaddlo.s8','vrhaddmi.s8','vrhaddpl.s8','vrhaddvs.s8','vrhaddvc.s8','vrhaddhi.s8','vrhaddls.s8','vrhaddge.s8','vrhaddlt.s8','vrhaddgt.s8','vrhaddle.s8', - 'vrhaddeq.s16','vrhaddne.s16','vrhaddcs.s16','vrhaddhs.s16','vrhaddcc.s16','vrhaddlo.s16','vrhaddmi.s16','vrhaddpl.s16','vrhaddvs.s16','vrhaddvc.s16','vrhaddhi.s16','vrhaddls.s16','vrhaddge.s16','vrhaddlt.s16','vrhaddgt.s16','vrhaddle.s16', - 'vrhaddeq.s32','vrhaddne.s32','vrhaddcs.s32','vrhaddhs.s32','vrhaddcc.s32','vrhaddlo.s32','vrhaddmi.s32','vrhaddpl.s32','vrhaddvs.s32','vrhaddvc.s32','vrhaddhi.s32','vrhaddls.s32','vrhaddge.s32','vrhaddlt.s32','vrhaddgt.s32','vrhaddle.s32', - - 'vrshleq.s8','vrshlne.s8','vrshlcs.s8','vrshlhs.s8','vrshlcc.s8','vrshllo.s8','vrshlmi.s8','vrshlpl.s8','vrshlvs.s8','vrshlvc.s8','vrshlhi.s8','vrshlls.s8','vrshlge.s8','vrshllt.s8','vrshlgt.s8','vrshlle.s8', - 'vrshleq.s16','vrshlne.s16','vrshlcs.s16','vrshlhs.s16','vrshlcc.s16','vrshllo.s16','vrshlmi.s16','vrshlpl.s16','vrshlvs.s16','vrshlvc.s16','vrshlhi.s16','vrshlls.s16','vrshlge.s16','vrshllt.s16','vrshlgt.s16','vrshlle.s16', - 'vrshleq.s32','vrshlne.s32','vrshlcs.s32','vrshlhs.s32','vrshlcc.s32','vrshllo.s32','vrshlmi.s32','vrshlpl.s32','vrshlvs.s32','vrshlvc.s32','vrshlhi.s32','vrshlls.s32','vrshlge.s32','vrshllt.s32','vrshlgt.s32','vrshlle.s32', - 'vrshleq.s64','vrshlne.s64','vrshlcs.s64','vrshlhs.s64','vrshlcc.s64','vrshllo.s64','vrshlmi.s64','vrshlpl.s64','vrshlvs.s64','vrshlvc.s64','vrshlhi.s64','vrshlls.s64','vrshlge.s64','vrshllt.s64','vrshlgt.s64','vrshlle.s64', - - 'vrshreq.s8','vrshrne.s8','vrshrcs.s8','vrshrhs.s8','vrshrcc.s8','vrshrlo.s8','vrshrmi.s8','vrshrpl.s8','vrshrvs.s8','vrshrvc.s8','vrshrhi.s8','vrshrls.s8','vrshrge.s8','vrshrlt.s8','vrshrgt.s8','vrshrle.s8', - 'vrshreq.s16','vrshrne.s16','vrshrcs.s16','vrshrhs.s16','vrshrcc.s16','vrshrlo.s16','vrshrmi.s16','vrshrpl.s16','vrshrvs.s16','vrshrvc.s16','vrshrhi.s16','vrshrls.s16','vrshrge.s16','vrshrlt.s16','vrshrgt.s16','vrshrle.s16', - 'vrshreq.s32','vrshrne.s32','vrshrcs.s32','vrshrhs.s32','vrshrcc.s32','vrshrlo.s32','vrshrmi.s32','vrshrpl.s32','vrshrvs.s32','vrshrvc.s32','vrshrhi.s32','vrshrls.s32','vrshrge.s32','vrshrlt.s32','vrshrgt.s32','vrshrle.s32', - 'vrshreq.s64','vrshrne.s64','vrshrcs.s64','vrshrhs.s64','vrshrcc.s64','vrshrlo.s64','vrshrmi.s64','vrshrpl.s64','vrshrvs.s64','vrshrvc.s64','vrshrhi.s64','vrshrls.s64','vrshrge.s64','vrshrlt.s64','vrshrgt.s64','vrshrle.s64', - - 'vrsraeq.s8','vrsrane.s8','vrsracs.s8','vrsrahs.s8','vrsracc.s8','vrsralo.s8','vrsrami.s8','vrsrapl.s8','vrsravs.s8','vrsravc.s8','vrsrahi.s8','vrsrals.s8','vrsrage.s8','vrsralt.s8','vrsragt.s8','vrsrale.s8', - 'vrsraeq.s16','vrsrane.s16','vrsracs.s16','vrsrahs.s16','vrsracc.s16','vrsralo.s16','vrsrami.s16','vrsrapl.s16','vrsravs.s16','vrsravc.s16','vrsrahi.s16','vrsrals.s16','vrsrage.s16','vrsralt.s16','vrsragt.s16','vrsrale.s16', - 'vrsraeq.s32','vrsrane.s32','vrsracs.s32','vrsrahs.s32','vrsracc.s32','vrsralo.s32','vrsrami.s32','vrsrapl.s32','vrsravs.s32','vrsravc.s32','vrsrahi.s32','vrsrals.s32','vrsrage.s32','vrsralt.s32','vrsragt.s32','vrsrale.s32', - 'vrsraeq.s64','vrsrane.s64','vrsracs.s64','vrsrahs.s64','vrsracc.s64','vrsralo.s64','vrsrami.s64','vrsrapl.s64','vrsravs.s64','vrsravc.s64','vrsrahi.s64','vrsrals.s64','vrsrage.s64','vrsralt.s64','vrsragt.s64','vrsrale.s64', - - 'vshleq.s8','vshlne.s8','vshlcs.s8','vshlhs.s8','vshlcc.s8','vshllo.s8','vshlmi.s8','vshlpl.s8','vshlvs.s8','vshlvc.s8','vshlhi.s8','vshlls.s8','vshlge.s8','vshllt.s8','vshlgt.s8','vshlle.s8', - 'vshleq.s16','vshlne.s16','vshlcs.s16','vshlhs.s16','vshlcc.s16','vshllo.s16','vshlmi.s16','vshlpl.s16','vshlvs.s16','vshlvc.s16','vshlhi.s16','vshlls.s16','vshlge.s16','vshllt.s16','vshlgt.s16','vshlle.s16', - 'vshleq.s32','vshlne.s32','vshlcs.s32','vshlhs.s32','vshlcc.s32','vshllo.s32','vshlmi.s32','vshlpl.s32','vshlvs.s32','vshlvc.s32','vshlhi.s32','vshlls.s32','vshlge.s32','vshllt.s32','vshlgt.s32','vshlle.s32', - 'vshleq.s64','vshlne.s64','vshlcs.s64','vshlhs.s64','vshlcc.s64','vshllo.s64','vshlmi.s64','vshlpl.s64','vshlvs.s64','vshlvc.s64','vshlhi.s64','vshlls.s64','vshlge.s64','vshllt.s64','vshlgt.s64','vshlle.s64', - - 'vshlleq.s8','vshllne.s8','vshllcs.s8','vshllhs.s8','vshllcc.s8','vshlllo.s8','vshllmi.s8','vshllpl.s8','vshllvs.s8','vshllvc.s8','vshllhi.s8','vshllls.s8','vshllge.s8','vshlllt.s8','vshllgt.s8','vshllle.s8', - 'vshlleq.s16','vshllne.s16','vshllcs.s16','vshllhs.s16','vshllcc.s16','vshlllo.s16','vshllmi.s16','vshllpl.s16','vshllvs.s16','vshllvc.s16','vshllhi.s16','vshllls.s16','vshllge.s16','vshlllt.s16','vshllgt.s16','vshllle.s16', - 'vshlleq.s32','vshllne.s32','vshllcs.s32','vshllhs.s32','vshllcc.s32','vshlllo.s32','vshllmi.s32','vshllpl.s32','vshllvs.s32','vshllvc.s32','vshllhi.s32','vshllls.s32','vshllge.s32','vshlllt.s32','vshllgt.s32','vshllle.s32', - - 'vshreq.s8','vshrne.s8','vshrcs.s8','vshrhs.s8','vshrcc.s8','vshrlo.s8','vshrmi.s8','vshrpl.s8','vshrvs.s8','vshrvc.s8','vshrhi.s8','vshrls.s8','vshrge.s8','vshrlt.s8','vshrgt.s8','vshrle.s8', - 'vshreq.s16','vshrne.s16','vshrcs.s16','vshrhs.s16','vshrcc.s16','vshrlo.s16','vshrmi.s16','vshrpl.s16','vshrvs.s16','vshrvc.s16','vshrhi.s16','vshrls.s16','vshrge.s16','vshrlt.s16','vshrgt.s16','vshrle.s16', - 'vshreq.s32','vshrne.s32','vshrcs.s32','vshrhs.s32','vshrcc.s32','vshrlo.s32','vshrmi.s32','vshrpl.s32','vshrvs.s32','vshrvc.s32','vshrhi.s32','vshrls.s32','vshrge.s32','vshrlt.s32','vshrgt.s32','vshrle.s32', - 'vshreq.s64','vshrne.s64','vshrcs.s64','vshrhs.s64','vshrcc.s64','vshrlo.s64','vshrmi.s64','vshrpl.s64','vshrvs.s64','vshrvc.s64','vshrhi.s64','vshrls.s64','vshrge.s64','vshrlt.s64','vshrgt.s64','vshrle.s64', - - 'vsraeq.s8','vsrane.s8','vsracs.s8','vsrahs.s8','vsracc.s8','vsralo.s8','vsrami.s8','vsrapl.s8','vsravs.s8','vsravc.s8','vsrahi.s8','vsrals.s8','vsrage.s8','vsralt.s8','vsragt.s8','vsrale.s8', - 'vsraeq.s16','vsrane.s16','vsracs.s16','vsrahs.s16','vsracc.s16','vsralo.s16','vsrami.s16','vsrapl.s16','vsravs.s16','vsravc.s16','vsrahi.s16','vsrals.s16','vsrage.s16','vsralt.s16','vsragt.s16','vsrale.s16', - 'vsraeq.s32','vsrane.s32','vsracs.s32','vsrahs.s32','vsracc.s32','vsralo.s32','vsrami.s32','vsrapl.s32','vsravs.s32','vsravc.s32','vsrahi.s32','vsrals.s32','vsrage.s32','vsralt.s32','vsragt.s32','vsrale.s32', - 'vsraeq.s64','vsrane.s64','vsracs.s64','vsrahs.s64','vsracc.s64','vsralo.s64','vsrami.s64','vsrapl.s64','vsravs.s64','vsravc.s64','vsrahi.s64','vsrals.s64','vsrage.s64','vsralt.s64','vsragt.s64','vsrale.s64', - - 'vsubleq.s8','vsublne.s8','vsublcs.s8','vsublhs.s8','vsublcc.s8','vsubllo.s8','vsublmi.s8','vsublpl.s8','vsublvs.s8','vsublvc.s8','vsublhi.s8','vsublls.s8','vsublge.s8','vsubllt.s8','vsublgt.s8','vsublle.s8', - 'vsubleq.s16','vsublne.s16','vsublcs.s16','vsublhs.s16','vsublcc.s16','vsubllo.s16','vsublmi.s16','vsublpl.s16','vsublvs.s16','vsublvc.s16','vsublhi.s16','vsublls.s16','vsublge.s16','vsubllt.s16','vsublgt.s16','vsublle.s16', - 'vsubleq.s32','vsublne.s32','vsublcs.s32','vsublhs.s32','vsublcc.s32','vsubllo.s32','vsublmi.s32','vsublpl.s32','vsublvs.s32','vsublvc.s32','vsublhi.s32','vsublls.s32','vsublge.s32','vsubllt.s32','vsublgt.s32','vsublle.s32', - - 'vsubheq.s8','vsubhne.s8','vsubhcs.s8','vsubhhs.s8','vsubhcc.s8','vsubhlo.s8','vsubhmi.s8','vsubhpl.s8','vsubhvs.s8','vsubhvc.s8','vsubhhi.s8','vsubhls.s8','vsubhge.s8','vsubhlt.s8','vsubhgt.s8','vsubhle.s8', - 'vsubheq.s16','vsubhne.s16','vsubhcs.s16','vsubhhs.s16','vsubhcc.s16','vsubhlo.s16','vsubhmi.s16','vsubhpl.s16','vsubhvs.s16','vsubhvc.s16','vsubhhi.s16','vsubhls.s16','vsubhge.s16','vsubhlt.s16','vsubhgt.s16','vsubhle.s16', - 'vsubheq.s32','vsubhne.s32','vsubhcs.s32','vsubhhs.s32','vsubhcc.s32','vsubhlo.s32','vsubhmi.s32','vsubhpl.s32','vsubhvs.s32','vsubhvc.s32','vsubhhi.s32','vsubhls.s32','vsubhge.s32','vsubhlt.s32','vsubhgt.s32','vsubhle.s32' - ), - /* Conditional NEON SIMD Unsigned Integer Instructions */ - 33 => array( - 'vabaeq.u8','vabane.u8','vabacs.u8','vabahs.u8','vabacc.u8','vabalo.u8','vabami.u8','vabapl.u8','vabavs.u8','vabavc.u8','vabahi.u8','vabals.u8','vabage.u8','vabalt.u8','vabagt.u8','vabale.u8', - 'vabaeq.u16','vabane.u16','vabacs.u16','vabahs.u16','vabacc.u16','vabalo.u16','vabami.u16','vabapl.u16','vabavs.u16','vabavc.u16','vabahi.u16','vabals.u16','vabage.u16','vabalt.u16','vabagt.u16','vabale.u16', - 'vabaeq.u32','vabane.u32','vabacs.u32','vabahs.u32','vabacc.u32','vabalo.u32','vabami.u32','vabapl.u32','vabavs.u32','vabavc.u32','vabahi.u32','vabals.u32','vabage.u32','vabalt.u32','vabagt.u32','vabale.u32', - - 'vabaleq.u8','vabalne.u8','vabalcs.u8','vabalhs.u8','vabalcc.u8','vaballo.u8','vabalmi.u8','vabalpl.u8','vabalvs.u8','vabalvc.u8','vabalhi.u8','vaballs.u8','vabalge.u8','vaballt.u8','vabalgt.u8','vaballe.u8', - 'vabaleq.u16','vabalne.u16','vabalcs.u16','vabalhs.u16','vabalcc.u16','vaballo.u16','vabalmi.u16','vabalpl.u16','vabalvs.u16','vabalvc.u16','vabalhi.u16','vaballs.u16','vabalge.u16','vaballt.u16','vabalgt.u16','vaballe.u16', - 'vabaleq.u32','vabalne.u32','vabalcs.u32','vabalhs.u32','vabalcc.u32','vaballo.u32','vabalmi.u32','vabalpl.u32','vabalvs.u32','vabalvc.u32','vabalhi.u32','vaballs.u32','vabalge.u32','vaballt.u32','vabalgt.u32','vaballe.u32', - - 'vabdeq.u8','vabdne.u8','vabdcs.u8','vabdhs.u8','vabdcc.u8','vabdlo.u8','vabdmi.u8','vabdpl.u8','vabdvs.u8','vabdvc.u8','vabdhi.u8','vabdls.u8','vabdge.u8','vabdlt.u8','vabdgt.u8','vabdle.u8', - 'vabdeq.u16','vabdne.u16','vabdcs.u16','vabdhs.u16','vabdcc.u16','vabdlo.u16','vabdmi.u16','vabdpl.u16','vabdvs.u16','vabdvc.u16','vabdhi.u16','vabdls.u16','vabdge.u16','vabdlt.u16','vabdgt.u16','vabdle.u16', - 'vabdeq.u32','vabdne.u32','vabdcs.u32','vabdhs.u32','vabdcc.u32','vabdlo.u32','vabdmi.u32','vabdpl.u32','vabdvs.u32','vabdvc.u32','vabdhi.u32','vabdls.u32','vabdge.u32','vabdlt.u32','vabdgt.u32','vabdle.u32', - - 'vaddleq.u8','vaddlne.u8','vaddlcs.u8','vaddlhs.u8','vaddlcc.u8','vaddllo.u8','vaddlmi.u8','vaddlpl.u8','vaddlvs.u8','vaddlvc.u8','vaddlhi.u8','vaddlls.u8','vaddlge.u8','vaddllt.u8','vaddlgt.u8','vaddlle.u8', - 'vaddleq.u16','vaddlne.u16','vaddlcs.u16','vaddlhs.u16','vaddlcc.u16','vaddllo.u16','vaddlmi.u16','vaddlpl.u16','vaddlvs.u16','vaddlvc.u16','vaddlhi.u16','vaddlls.u16','vaddlge.u16','vaddllt.u16','vaddlgt.u16','vaddlle.u16', - 'vaddleq.u32','vaddlne.u32','vaddlcs.u32','vaddlhs.u32','vaddlcc.u32','vaddllo.u32','vaddlmi.u32','vaddlpl.u32','vaddlvs.u32','vaddlvc.u32','vaddlhi.u32','vaddlls.u32','vaddlge.u32','vaddllt.u32','vaddlgt.u32','vaddlle.u32', - - 'vsubleq.u8','vsublne.u8','vsublcs.u8','vsublhs.u8','vsublcc.u8','vsubllo.u8','vsublmi.u8','vsublpl.u8','vsublvs.u8','vsublvc.u8','vsublhi.u8','vsublls.u8','vsublge.u8','vsubllt.u8','vsublgt.u8','vsublle.u8', - 'vsubleq.u16','vsublne.u16','vsublcs.u16','vsublhs.u16','vsublcc.u16','vsubllo.u16','vsublmi.u16','vsublpl.u16','vsublvs.u16','vsublvc.u16','vsublhi.u16','vsublls.u16','vsublge.u16','vsubllt.u16','vsublgt.u16','vsublle.u16', - 'vsubleq.u32','vsublne.u32','vsublcs.u32','vsublhs.u32','vsublcc.u32','vsubllo.u32','vsublmi.u32','vsublpl.u32','vsublvs.u32','vsublvc.u32','vsublhi.u32','vsublls.u32','vsublge.u32','vsubllt.u32','vsublgt.u32','vsublle.u32', - - 'vaddweq.u8','vaddwne.u8','vaddwcs.u8','vaddwhs.u8','vaddwcc.u8','vaddwlo.u8','vaddwmi.u8','vaddwpl.u8','vaddwvs.u8','vaddwvc.u8','vaddwhi.u8','vaddwls.u8','vaddwge.u8','vaddwlt.u8','vaddwgt.u8','vaddwle.u8', - 'vaddweq.u16','vaddwne.u16','vaddwcs.u16','vaddwhs.u16','vaddwcc.u16','vaddwlo.u16','vaddwmi.u16','vaddwpl.u16','vaddwvs.u16','vaddwvc.u16','vaddwhi.u16','vaddwls.u16','vaddwge.u16','vaddwlt.u16','vaddwgt.u16','vaddwle.u16', - 'vaddweq.u32','vaddwne.u32','vaddwcs.u32','vaddwhs.u32','vaddwcc.u32','vaddwlo.u32','vaddwmi.u32','vaddwpl.u32','vaddwvs.u32','vaddwvc.u32','vaddwhi.u32','vaddwls.u32','vaddwge.u32','vaddwlt.u32','vaddwgt.u32','vaddwle.u32', - - 'vsubheq.u8','vsubhne.u8','vsubhcs.u8','vsubhhs.u8','vsubhcc.u8','vsubhlo.u8','vsubhmi.u8','vsubhpl.u8','vsubhvs.u8','vsubhvc.u8','vsubhhi.u8','vsubhls.u8','vsubhge.u8','vsubhlt.u8','vsubhgt.u8','vsubhle.u8', - 'vsubheq.u16','vsubhne.u16','vsubhcs.u16','vsubhhs.u16','vsubhcc.u16','vsubhlo.u16','vsubhmi.u16','vsubhpl.u16','vsubhvs.u16','vsubhvc.u16','vsubhhi.u16','vsubhls.u16','vsubhge.u16','vsubhlt.u16','vsubhgt.u16','vsubhle.u16', - 'vsubheq.u32','vsubhne.u32','vsubhcs.u32','vsubhhs.u32','vsubhcc.u32','vsubhlo.u32','vsubhmi.u32','vsubhpl.u32','vsubhvs.u32','vsubhvc.u32','vsubhhi.u32','vsubhls.u32','vsubhge.u32','vsubhlt.u32','vsubhgt.u32','vsubhle.u32', - - 'vhaddeq.u8','vhaddne.u8','vhaddcs.u8','vhaddhs.u8','vhaddcc.u8','vhaddlo.u8','vhaddmi.u8','vhaddpl.u8','vhaddvs.u8','vhaddvc.u8','vhaddhi.u8','vhaddls.u8','vhaddge.u8','vhaddlt.u8','vhaddgt.u8','vhaddle.u8', - 'vhaddeq.u16','vhaddne.u16','vhaddcs.u16','vhaddhs.u16','vhaddcc.u16','vhaddlo.u16','vhaddmi.u16','vhaddpl.u16','vhaddvs.u16','vhaddvc.u16','vhaddhi.u16','vhaddls.u16','vhaddge.u16','vhaddlt.u16','vhaddgt.u16','vhaddle.u16', - 'vhaddeq.u32','vhaddne.u32','vhaddcs.u32','vhaddhs.u32','vhaddcc.u32','vhaddlo.u32','vhaddmi.u32','vhaddpl.u32','vhaddvs.u32','vhaddvc.u32','vhaddhi.u32','vhaddls.u32','vhaddge.u32','vhaddlt.u32','vhaddgt.u32','vhaddle.u32', - - 'vhsubeq.u8','vhsubne.u8','vhsubcs.u8','vhsubhs.u8','vhsubcc.u8','vhsublo.u8','vhsubmi.u8','vhsubpl.u8','vhsubvs.u8','vhsubvc.u8','vhsubhi.u8','vhsubls.u8','vhsubge.u8','vhsublt.u8','vhsubgt.u8','vhsuble.u8', - 'vhsubeq.u16','vhsubne.u16','vhsubcs.u16','vhsubhs.u16','vhsubcc.u16','vhsublo.u16','vhsubmi.u16','vhsubpl.u16','vhsubvs.u16','vhsubvc.u16','vhsubhi.u16','vhsubls.u16','vhsubge.u16','vhsublt.u16','vhsubgt.u16','vhsuble.u16', - 'vhsubeq.u32','vhsubne.u32','vhsubcs.u32','vhsubhs.u32','vhsubcc.u32','vhsublo.u32','vhsubmi.u32','vhsubpl.u32','vhsubvs.u32','vhsubvc.u32','vhsubhi.u32','vhsubls.u32','vhsubge.u32','vhsublt.u32','vhsubgt.u32','vhsuble.u32', - - 'vpadaleq.u8','vpadalne.u8','vpadalcs.u8','vpadalhs.u8','vpadalcc.u8','vpadallo.u8','vpadalmi.u8','vpadalpl.u8','vpadalvs.u8','vpadalvc.u8','vpadalhi.u8','vpadalls.u8','vpadalge.u8','vpadallt.u8','vpadalgt.u8','vpadalle.u8', - 'vpadaleq.u16','vpadalne.u16','vpadalcs.u16','vpadalhs.u16','vpadalcc.u16','vpadallo.u16','vpadalmi.u16','vpadalpl.u16','vpadalvs.u16','vpadalvc.u16','vpadalhi.u16','vpadalls.u16','vpadalge.u16','vpadallt.u16','vpadalgt.u16','vpadalle.u16', - 'vpadaleq.u32','vpadalne.u32','vpadalcs.u32','vpadalhs.u32','vpadalcc.u32','vpadallo.u32','vpadalmi.u32','vpadalpl.u32','vpadalvs.u32','vpadalvc.u32','vpadalhi.u32','vpadalls.u32','vpadalge.u32','vpadallt.u32','vpadalgt.u32','vpadalle.u32', - - 'vpaddleq.u8','vpaddlne.u8','vpaddlcs.u8','vpaddlhs.u8','vpaddlcc.u8','vpaddllo.u8','vpaddlmi.u8','vpaddlpl.u8','vpaddlvs.u8','vpaddlvc.u8','vpaddlhi.u8','vpaddlls.u8','vpaddlge.u8','vpaddllt.u8','vpaddlgt.u8','vpaddlle.u8', - 'vpaddleq.u16','vpaddlne.u16','vpaddlcs.u16','vpaddlhs.u16','vpaddlcc.u16','vpaddllo.u16','vpaddlmi.u16','vpaddlpl.u16','vpaddlvs.u16','vpaddlvc.u16','vpaddlhi.u16','vpaddlls.u16','vpaddlge.u16','vpaddllt.u16','vpaddlgt.u16','vpaddlle.u16', - 'vpaddleq.u32','vpaddlne.u32','vpaddlcs.u32','vpaddlhs.u32','vpaddlcc.u32','vpaddllo.u32','vpaddlmi.u32','vpaddlpl.u32','vpaddlvs.u32','vpaddlvc.u32','vpaddlhi.u32','vpaddlls.u32','vpaddlge.u32','vpaddllt.u32','vpaddlgt.u32','vpaddlle.u32', - - 'vcgeeq.u8','vcgene.u8','vcgecs.u8','vcgehs.u8','vcgecc.u8','vcgelo.u8','vcgemi.u8','vcgepl.u8','vcgevs.u8','vcgevc.u8','vcgehi.u8','vcgels.u8','vcgege.u8','vcgelt.u8','vcgegt.u8','vcgele.u8', - 'vcgeeq.u16','vcgene.u16','vcgecs.u16','vcgehs.u16','vcgecc.u16','vcgelo.u16','vcgemi.u16','vcgepl.u16','vcgevs.u16','vcgevc.u16','vcgehi.u16','vcgels.u16','vcgege.u16','vcgelt.u16','vcgegt.u16','vcgele.u16', - 'vcgeeq.u32','vcgene.u32','vcgecs.u32','vcgehs.u32','vcgecc.u32','vcgelo.u32','vcgemi.u32','vcgepl.u32','vcgevs.u32','vcgevc.u32','vcgehi.u32','vcgels.u32','vcgege.u32','vcgelt.u32','vcgegt.u32','vcgele.u32', - - 'vcleeq.u8','vclene.u8','vclecs.u8','vclehs.u8','vclecc.u8','vclelo.u8','vclemi.u8','vclepl.u8','vclevs.u8','vclevc.u8','vclehi.u8','vclels.u8','vclege.u8','vclelt.u8','vclegt.u8','vclele.u8', - 'vcleeq.u16','vclene.u16','vclecs.u16','vclehs.u16','vclecc.u16','vclelo.u16','vclemi.u16','vclepl.u16','vclevs.u16','vclevc.u16','vclehi.u16','vclels.u16','vclege.u16','vclelt.u16','vclegt.u16','vclele.u16', - 'vcleeq.u32','vclene.u32','vclecs.u32','vclehs.u32','vclecc.u32','vclelo.u32','vclemi.u32','vclepl.u32','vclevs.u32','vclevc.u32','vclehi.u32','vclels.u32','vclege.u32','vclelt.u32','vclegt.u32','vclele.u32', - - 'vcgteq.u8','vcgtne.u8','vcgtcs.u8','vcgths.u8','vcgtcc.u8','vcgtlo.u8','vcgtmi.u8','vcgtpl.u8','vcgtvs.u8','vcgtvc.u8','vcgthi.u8','vcgtls.u8','vcgtge.u8','vcgtlt.u8','vcgtgt.u8','vcgtle.u8', - 'vcgteq.u16','vcgtne.u16','vcgtcs.u16','vcgths.u16','vcgtcc.u16','vcgtlo.u16','vcgtmi.u16','vcgtpl.u16','vcgtvs.u16','vcgtvc.u16','vcgthi.u16','vcgtls.u16','vcgtge.u16','vcgtlt.u16','vcgtgt.u16','vcgtle.u16', - 'vcgteq.u32','vcgtne.u32','vcgtcs.u32','vcgths.u32','vcgtcc.u32','vcgtlo.u32','vcgtmi.u32','vcgtpl.u32','vcgtvs.u32','vcgtvc.u32','vcgthi.u32','vcgtls.u32','vcgtge.u32','vcgtlt.u32','vcgtgt.u32','vcgtle.u32', - - 'vclteq.u8','vcltne.u8','vcltcs.u8','vclths.u8','vcltcc.u8','vcltlo.u8','vcltmi.u8','vcltpl.u8','vcltvs.u8','vcltvc.u8','vclthi.u8','vcltls.u8','vcltge.u8','vcltlt.u8','vcltgt.u8','vcltle.u8', - 'vclteq.u16','vcltne.u16','vcltcs.u16','vclths.u16','vcltcc.u16','vcltlo.u16','vcltmi.u16','vcltpl.u16','vcltvs.u16','vcltvc.u16','vclthi.u16','vcltls.u16','vcltge.u16','vcltlt.u16','vcltgt.u16','vcltle.u16', - 'vclteq.u32','vcltne.u32','vcltcs.u32','vclths.u32','vcltcc.u32','vcltlo.u32','vcltmi.u32','vcltpl.u32','vcltvs.u32','vcltvc.u32','vclthi.u32','vcltls.u32','vcltge.u32','vcltlt.u32','vcltgt.u32','vcltle.u32', - - 'vmaxeq.u8','vmaxne.u8','vmaxcs.u8','vmaxhs.u8','vmaxcc.u8','vmaxlo.u8','vmaxmi.u8','vmaxpl.u8','vmaxvs.u8','vmaxvc.u8','vmaxhi.u8','vmaxls.u8','vmaxge.u8','vmaxlt.u8','vmaxgt.u8','vmaxle.u8', - 'vmaxeq.u16','vmaxne.u16','vmaxcs.u16','vmaxhs.u16','vmaxcc.u16','vmaxlo.u16','vmaxmi.u16','vmaxpl.u16','vmaxvs.u16','vmaxvc.u16','vmaxhi.u16','vmaxls.u16','vmaxge.u16','vmaxlt.u16','vmaxgt.u16','vmaxle.u16', - 'vmaxeq.u32','vmaxne.u32','vmaxcs.u32','vmaxhs.u32','vmaxcc.u32','vmaxlo.u32','vmaxmi.u32','vmaxpl.u32','vmaxvs.u32','vmaxvc.u32','vmaxhi.u32','vmaxls.u32','vmaxge.u32','vmaxlt.u32','vmaxgt.u32','vmaxle.u32', - - 'vmineq.u8','vminne.u8','vmincs.u8','vminhs.u8','vmincc.u8','vminlo.u8','vminmi.u8','vminpl.u8','vminvs.u8','vminvc.u8','vminhi.u8','vminls.u8','vminge.u8','vminlt.u8','vmingt.u8','vminle.u8', - 'vmineq.u16','vminne.u16','vmincs.u16','vminhs.u16','vmincc.u16','vminlo.u16','vminmi.u16','vminpl.u16','vminvs.u16','vminvc.u16','vminhi.u16','vminls.u16','vminge.u16','vminlt.u16','vmingt.u16','vminle.u16', - 'vmineq.u32','vminne.u32','vmincs.u32','vminhs.u32','vmincc.u32','vminlo.u32','vminmi.u32','vminpl.u32','vminvs.u32','vminvc.u32','vminhi.u32','vminls.u32','vminge.u32','vminlt.u32','vmingt.u32','vminle.u32', - - 'vmlaleq.u8','vmlalne.u8','vmlalcs.u8','vmlalhs.u8','vmlalcc.u8','vmlallo.u8','vmlalmi.u8','vmlalpl.u8','vmlalvs.u8','vmlalvc.u8','vmlalhi.u8','vmlalls.u8','vmlalge.u8','vmlallt.u8','vmlalgt.u8','vmlalle.u8', - 'vmlaleq.u16','vmlalne.u16','vmlalcs.u16','vmlalhs.u16','vmlalcc.u16','vmlallo.u16','vmlalmi.u16','vmlalpl.u16','vmlalvs.u16','vmlalvc.u16','vmlalhi.u16','vmlalls.u16','vmlalge.u16','vmlallt.u16','vmlalgt.u16','vmlalle.u16', - 'vmlaleq.u32','vmlalne.u32','vmlalcs.u32','vmlalhs.u32','vmlalcc.u32','vmlallo.u32','vmlalmi.u32','vmlalpl.u32','vmlalvs.u32','vmlalvc.u32','vmlalhi.u32','vmlalls.u32','vmlalge.u32','vmlallt.u32','vmlalgt.u32','vmlalle.u32', - - 'vmlsleq.u8','vmlslne.u8','vmlslcs.u8','vmlslhs.u8','vmlslcc.u8','vmlsllo.u8','vmlslmi.u8','vmlslpl.u8','vmlslvs.u8','vmlslvc.u8','vmlslhi.u8','vmlslls.u8','vmlslge.u8','vmlsllt.u8','vmlslgt.u8','vmlslle.u8', - 'vmlsleq.u16','vmlslne.u16','vmlslcs.u16','vmlslhs.u16','vmlslcc.u16','vmlsllo.u16','vmlslmi.u16','vmlslpl.u16','vmlslvs.u16','vmlslvc.u16','vmlslhi.u16','vmlslls.u16','vmlslge.u16','vmlsllt.u16','vmlslgt.u16','vmlslle.u16', - 'vmlsleq.u32','vmlslne.u32','vmlslcs.u32','vmlslhs.u32','vmlslcc.u32','vmlsllo.u32','vmlslmi.u32','vmlslpl.u32','vmlslvs.u32','vmlslvc.u32','vmlslhi.u32','vmlslls.u32','vmlslge.u32','vmlsllt.u32','vmlslgt.u32','vmlslle.u32', - - 'vmulleq.u8','vmullne.u8','vmullcs.u8','vmullhs.u8','vmullcc.u8','vmulllo.u8','vmullmi.u8','vmullpl.u8','vmullvs.u8','vmullvc.u8','vmullhi.u8','vmullls.u8','vmullge.u8','vmulllt.u8','vmullgt.u8','vmullle.u8', - 'vmulleq.u16','vmullne.u16','vmullcs.u16','vmullhs.u16','vmullcc.u16','vmulllo.u16','vmullmi.u16','vmullpl.u16','vmullvs.u16','vmullvc.u16','vmullhi.u16','vmullls.u16','vmullge.u16','vmulllt.u16','vmullgt.u16','vmullle.u16', - 'vmulleq.u32','vmullne.u32','vmullcs.u32','vmullhs.u32','vmullcc.u32','vmulllo.u32','vmullmi.u32','vmullpl.u32','vmullvs.u32','vmullvc.u32','vmullhi.u32','vmullls.u32','vmullge.u32','vmulllt.u32','vmullgt.u32','vmullle.u32', - - 'vmovleq.u8','vmovlne.u8','vmovlcs.u8','vmovlhs.u8','vmovlcc.u8','vmovllo.u8','vmovlmi.u8','vmovlpl.u8','vmovlvs.u8','vmovlvc.u8','vmovlhi.u8','vmovlls.u8','vmovlge.u8','vmovllt.u8','vmovlgt.u8','vmovlle.u8', - 'vmovleq.u16','vmovlne.u16','vmovlcs.u16','vmovlhs.u16','vmovlcc.u16','vmovllo.u16','vmovlmi.u16','vmovlpl.u16','vmovlvs.u16','vmovlvc.u16','vmovlhi.u16','vmovlls.u16','vmovlge.u16','vmovllt.u16','vmovlgt.u16','vmovlle.u16', - 'vmovleq.u32','vmovlne.u32','vmovlcs.u32','vmovlhs.u32','vmovlcc.u32','vmovllo.u32','vmovlmi.u32','vmovlpl.u32','vmovlvs.u32','vmovlvc.u32','vmovlhi.u32','vmovlls.u32','vmovlge.u32','vmovllt.u32','vmovlgt.u32','vmovlle.u32', - - 'vshleq.u8','vshlne.u8','vshlcs.u8','vshlhs.u8','vshlcc.u8','vshllo.u8','vshlmi.u8','vshlpl.u8','vshlvs.u8','vshlvc.u8','vshlhi.u8','vshlls.u8','vshlge.u8','vshllt.u8','vshlgt.u8','vshlle.u8', - 'vshleq.u16','vshlne.u16','vshlcs.u16','vshlhs.u16','vshlcc.u16','vshllo.u16','vshlmi.u16','vshlpl.u16','vshlvs.u16','vshlvc.u16','vshlhi.u16','vshlls.u16','vshlge.u16','vshllt.u16','vshlgt.u16','vshlle.u16', - 'vshleq.u32','vshlne.u32','vshlcs.u32','vshlhs.u32','vshlcc.u32','vshllo.u32','vshlmi.u32','vshlpl.u32','vshlvs.u32','vshlvc.u32','vshlhi.u32','vshlls.u32','vshlge.u32','vshllt.u32','vshlgt.u32','vshlle.u32', - 'vshleq.u64','vshlne.u64','vshlcs.u64','vshlhs.u64','vshlcc.u64','vshllo.u64','vshlmi.u64','vshlpl.u64','vshlvs.u64','vshlvc.u64','vshlhi.u64','vshlls.u64','vshlge.u64','vshllt.u64','vshlgt.u64','vshlle.u64', - - 'vshlleq.u8','vshllne.u8','vshllcs.u8','vshllhs.u8','vshllcc.u8','vshlllo.u8','vshllmi.u8','vshllpl.u8','vshllvs.u8','vshllvc.u8','vshllhi.u8','vshllls.u8','vshllge.u8','vshlllt.u8','vshllgt.u8','vshllle.u8', - 'vshlleq.u16','vshllne.u16','vshllcs.u16','vshllhs.u16','vshllcc.u16','vshlllo.u16','vshllmi.u16','vshllpl.u16','vshllvs.u16','vshllvc.u16','vshllhi.u16','vshllls.u16','vshllge.u16','vshlllt.u16','vshllgt.u16','vshllle.u16', - 'vshlleq.u32','vshllne.u32','vshllcs.u32','vshllhs.u32','vshllcc.u32','vshlllo.u32','vshllmi.u32','vshllpl.u32','vshllvs.u32','vshllvc.u32','vshllhi.u32','vshllls.u32','vshllge.u32','vshlllt.u32','vshllgt.u32','vshllle.u32', - - 'vshreq.u8','vshrne.u8','vshrcs.u8','vshrhs.u8','vshrcc.u8','vshrlo.u8','vshrmi.u8','vshrpl.u8','vshrvs.u8','vshrvc.u8','vshrhi.u8','vshrls.u8','vshrge.u8','vshrlt.u8','vshrgt.u8','vshrle.u8', - 'vshreq.u16','vshrne.u16','vshrcs.u16','vshrhs.u16','vshrcc.u16','vshrlo.u16','vshrmi.u16','vshrpl.u16','vshrvs.u16','vshrvc.u16','vshrhi.u16','vshrls.u16','vshrge.u16','vshrlt.u16','vshrgt.u16','vshrle.u16', - 'vshreq.u32','vshrne.u32','vshrcs.u32','vshrhs.u32','vshrcc.u32','vshrlo.u32','vshrmi.u32','vshrpl.u32','vshrvs.u32','vshrvc.u32','vshrhi.u32','vshrls.u32','vshrge.u32','vshrlt.u32','vshrgt.u32','vshrle.u32', - 'vshreq.u64','vshrne.u64','vshrcs.u64','vshrhs.u64','vshrcc.u64','vshrlo.u64','vshrmi.u64','vshrpl.u64','vshrvs.u64','vshrvc.u64','vshrhi.u64','vshrls.u64','vshrge.u64','vshrlt.u64','vshrgt.u64','vshrle.u64', - - 'vsraeq.u8','vsrane.u8','vsracs.u8','vsrahs.u8','vsracc.u8','vsralo.u8','vsrami.u8','vsrapl.u8','vsravs.u8','vsravc.u8','vsrahi.u8','vsrals.u8','vsrage.u8','vsralt.u8','vsragt.u8','vsrale.u8', - 'vsraeq.u16','vsrane.u16','vsracs.u16','vsrahs.u16','vsracc.u16','vsralo.u16','vsrami.u16','vsrapl.u16','vsravs.u16','vsravc.u16','vsrahi.u16','vsrals.u16','vsrage.u16','vsralt.u16','vsragt.u16','vsrale.u16', - 'vsraeq.u32','vsrane.u32','vsracs.u32','vsrahs.u32','vsracc.u32','vsralo.u32','vsrami.u32','vsrapl.u32','vsravs.u32','vsravc.u32','vsrahi.u32','vsrals.u32','vsrage.u32','vsralt.u32','vsragt.u32','vsrale.u32', - 'vsraeq.u64','vsrane.u64','vsracs.u64','vsrahs.u64','vsracc.u64','vsralo.u64','vsrami.u64','vsrapl.u64','vsravs.u64','vsravc.u64','vsrahi.u64','vsrals.u64','vsrage.u64','vsralt.u64','vsragt.u64','vsrale.u64', - - 'vpmaxeq.u8','vpmaxne.u8','vpmaxcs.u8','vpmaxhs.u8','vpmaxcc.u8','vpmaxlo.u8','vpmaxmi.u8','vpmaxpl.u8','vpmaxvs.u8','vpmaxvc.u8','vpmaxhi.u8','vpmaxls.u8','vpmaxge.u8','vpmaxlt.u8','vpmaxgt.u8','vpmaxle.u8', - 'vpmaxeq.u16','vpmaxne.u16','vpmaxcs.u16','vpmaxhs.u16','vpmaxcc.u16','vpmaxlo.u16','vpmaxmi.u16','vpmaxpl.u16','vpmaxvs.u16','vpmaxvc.u16','vpmaxhi.u16','vpmaxls.u16','vpmaxge.u16','vpmaxlt.u16','vpmaxgt.u16','vpmaxle.u16', - 'vpmaxeq.u32','vpmaxne.u32','vpmaxcs.u32','vpmaxhs.u32','vpmaxcc.u32','vpmaxlo.u32','vpmaxmi.u32','vpmaxpl.u32','vpmaxvs.u32','vpmaxvc.u32','vpmaxhi.u32','vpmaxls.u32','vpmaxge.u32','vpmaxlt.u32','vpmaxgt.u32','vpmaxle.u32', - - 'vpmineq.u8','vpminne.u8','vpmincs.u8','vpminhs.u8','vpmincc.u8','vpminlo.u8','vpminmi.u8','vpminpl.u8','vpminvs.u8','vpminvc.u8','vpminhi.u8','vpminls.u8','vpminge.u8','vpminlt.u8','vpmingt.u8','vpminle.u8', - 'vpmineq.u16','vpminne.u16','vpmincs.u16','vpminhs.u16','vpmincc.u16','vpminlo.u16','vpminmi.u16','vpminpl.u16','vpminvs.u16','vpminvc.u16','vpminhi.u16','vpminls.u16','vpminge.u16','vpminlt.u16','vpmingt.u16','vpminle.u16', - 'vpmineq.u32','vpminne.u32','vpmincs.u32','vpminhs.u32','vpmincc.u32','vpminlo.u32','vpminmi.u32','vpminpl.u32','vpminvs.u32','vpminvc.u32','vpminhi.u32','vpminls.u32','vpminge.u32','vpminlt.u32','vpmingt.u32','vpminle.u32', - - 'vqaddeq.u8','vqaddne.u8','vqaddcs.u8','vqaddhs.u8','vqaddcc.u8','vqaddlo.u8','vqaddmi.u8','vqaddpl.u8','vqaddvs.u8','vqaddvc.u8','vqaddhi.u8','vqaddls.u8','vqaddge.u8','vqaddlt.u8','vqaddgt.u8','vqaddle.u8', - 'vqaddeq.u16','vqaddne.u16','vqaddcs.u16','vqaddhs.u16','vqaddcc.u16','vqaddlo.u16','vqaddmi.u16','vqaddpl.u16','vqaddvs.u16','vqaddvc.u16','vqaddhi.u16','vqaddls.u16','vqaddge.u16','vqaddlt.u16','vqaddgt.u16','vqaddle.u16', - 'vqaddeq.u32','vqaddne.u32','vqaddcs.u32','vqaddhs.u32','vqaddcc.u32','vqaddlo.u32','vqaddmi.u32','vqaddpl.u32','vqaddvs.u32','vqaddvc.u32','vqaddhi.u32','vqaddls.u32','vqaddge.u32','vqaddlt.u32','vqaddgt.u32','vqaddle.u32', - 'vqaddeq.u64','vqaddne.u64','vqaddcs.u64','vqaddhs.u64','vqaddcc.u64','vqaddlo.u64','vqaddmi.u64','vqaddpl.u64','vqaddvs.u64','vqaddvc.u64','vqaddhi.u64','vqaddls.u64','vqaddge.u64','vqaddlt.u64','vqaddgt.u64','vqaddle.u64', - - 'vqsubeq.u8','vqsubne.u8','vqsubcs.u8','vqsubhs.u8','vqsubcc.u8','vqsublo.u8','vqsubmi.u8','vqsubpl.u8','vqsubvs.u8','vqsubvc.u8','vqsubhi.u8','vqsubls.u8','vqsubge.u8','vqsublt.u8','vqsubgt.u8','vqsuble.u8', - 'vqsubeq.u16','vqsubne.u16','vqsubcs.u16','vqsubhs.u16','vqsubcc.u16','vqsublo.u16','vqsubmi.u16','vqsubpl.u16','vqsubvs.u16','vqsubvc.u16','vqsubhi.u16','vqsubls.u16','vqsubge.u16','vqsublt.u16','vqsubgt.u16','vqsuble.u16', - 'vqsubeq.u32','vqsubne.u32','vqsubcs.u32','vqsubhs.u32','vqsubcc.u32','vqsublo.u32','vqsubmi.u32','vqsubpl.u32','vqsubvs.u32','vqsubvc.u32','vqsubhi.u32','vqsubls.u32','vqsubge.u32','vqsublt.u32','vqsubgt.u32','vqsuble.u32', - 'vqsubeq.u64','vqsubne.u64','vqsubcs.u64','vqsubhs.u64','vqsubcc.u64','vqsublo.u64','vqsubmi.u64','vqsubpl.u64','vqsubvs.u64','vqsubvc.u64','vqsubhi.u64','vqsubls.u64','vqsubge.u64','vqsublt.u64','vqsubgt.u64','vqsuble.u64', - - 'vqmovneq.u16','vqmovnne.u16','vqmovncs.u16','vqmovnhs.u16','vqmovncc.u16','vqmovnlo.u16','vqmovnmi.u16','vqmovnpl.u16','vqmovnvs.u16','vqmovnvc.u16','vqmovnhi.u16','vqmovnls.u16','vqmovnge.u16','vqmovnlt.u16','vqmovngt.u16','vqmovnle.u16', - 'vqmovneq.u32','vqmovnne.u32','vqmovncs.u32','vqmovnhs.u32','vqmovncc.u32','vqmovnlo.u32','vqmovnmi.u32','vqmovnpl.u32','vqmovnvs.u32','vqmovnvc.u32','vqmovnhi.u32','vqmovnls.u32','vqmovnge.u32','vqmovnlt.u32','vqmovngt.u32','vqmovnle.u32', - 'vqmovneq.u64','vqmovnne.u64','vqmovncs.u64','vqmovnhs.u64','vqmovncc.u64','vqmovnlo.u64','vqmovnmi.u64','vqmovnpl.u64','vqmovnvs.u64','vqmovnvc.u64','vqmovnhi.u64','vqmovnls.u64','vqmovnge.u64','vqmovnlt.u64','vqmovngt.u64','vqmovnle.u64', - - 'vqshleq.u8','vqshlne.u8','vqshlcs.u8','vqshlhs.u8','vqshlcc.u8','vqshllo.u8','vqshlmi.u8','vqshlpl.u8','vqshlvs.u8','vqshlvc.u8','vqshlhi.u8','vqshlls.u8','vqshlge.u8','vqshllt.u8','vqshlgt.u8','vqshlle.u8', - 'vqshleq.u16','vqshlne.u16','vqshlcs.u16','vqshlhs.u16','vqshlcc.u16','vqshllo.u16','vqshlmi.u16','vqshlpl.u16','vqshlvs.u16','vqshlvc.u16','vqshlhi.u16','vqshlls.u16','vqshlge.u16','vqshllt.u16','vqshlgt.u16','vqshlle.u16', - 'vqshleq.u32','vqshlne.u32','vqshlcs.u32','vqshlhs.u32','vqshlcc.u32','vqshllo.u32','vqshlmi.u32','vqshlpl.u32','vqshlvs.u32','vqshlvc.u32','vqshlhi.u32','vqshlls.u32','vqshlge.u32','vqshllt.u32','vqshlgt.u32','vqshlle.u32', - 'vqshleq.u64','vqshlne.u64','vqshlcs.u64','vqshlhs.u64','vqshlcc.u64','vqshllo.u64','vqshlmi.u64','vqshlpl.u64','vqshlvs.u64','vqshlvc.u64','vqshlhi.u64','vqshlls.u64','vqshlge.u64','vqshllt.u64','vqshlgt.u64','vqshlle.u64', - - 'vqshrneq.u16','vqshrnne.u16','vqshrncs.u16','vqshrnhs.u16','vqshrncc.u16','vqshrnlo.u16','vqshrnmi.u16','vqshrnpl.u16','vqshrnvs.u16','vqshrnvc.u16','vqshrnhi.u16','vqshrnls.u16','vqshrnge.u16','vqshrnlt.u16','vqshrngt.u16','vqshrnle.u16', - 'vqshrneq.u32','vqshrnne.u32','vqshrncs.u32','vqshrnhs.u32','vqshrncc.u32','vqshrnlo.u32','vqshrnmi.u32','vqshrnpl.u32','vqshrnvs.u32','vqshrnvc.u32','vqshrnhi.u32','vqshrnls.u32','vqshrnge.u32','vqshrnlt.u32','vqshrngt.u32','vqshrnle.u32', - 'vqshrneq.u64','vqshrnne.u64','vqshrncs.u64','vqshrnhs.u64','vqshrncc.u64','vqshrnlo.u64','vqshrnmi.u64','vqshrnpl.u64','vqshrnvs.u64','vqshrnvc.u64','vqshrnhi.u64','vqshrnls.u64','vqshrnge.u64','vqshrnlt.u64','vqshrngt.u64','vqshrnle.u64', - - 'vqrshleq.u8','vqrshlne.u8','vqrshlcs.u8','vqrshlhs.u8','vqrshlcc.u8','vqrshllo.u8','vqrshlmi.u8','vqrshlpl.u8','vqrshlvs.u8','vqrshlvc.u8','vqrshlhi.u8','vqrshlls.u8','vqrshlge.u8','vqrshllt.u8','vqrshlgt.u8','vqrshlle.u8', - 'vqrshleq.u16','vqrshlne.u16','vqrshlcs.u16','vqrshlhs.u16','vqrshlcc.u16','vqrshllo.u16','vqrshlmi.u16','vqrshlpl.u16','vqrshlvs.u16','vqrshlvc.u16','vqrshlhi.u16','vqrshlls.u16','vqrshlge.u16','vqrshllt.u16','vqrshlgt.u16','vqrshlle.u16', - 'vqrshleq.u32','vqrshlne.u32','vqrshlcs.u32','vqrshlhs.u32','vqrshlcc.u32','vqrshllo.u32','vqrshlmi.u32','vqrshlpl.u32','vqrshlvs.u32','vqrshlvc.u32','vqrshlhi.u32','vqrshlls.u32','vqrshlge.u32','vqrshllt.u32','vqrshlgt.u32','vqrshlle.u32', - 'vqrshleq.u64','vqrshlne.u64','vqrshlcs.u64','vqrshlhs.u64','vqrshlcc.u64','vqrshllo.u64','vqrshlmi.u64','vqrshlpl.u64','vqrshlvs.u64','vqrshlvc.u64','vqrshlhi.u64','vqrshlls.u64','vqrshlge.u64','vqrshllt.u64','vqrshlgt.u64','vqrshlle.u64', - - 'vqrshrneq.u16','vqrshrnne.u16','vqrshrncs.u16','vqrshrnhs.u16','vqrshrncc.u16','vqrshrnlo.u16','vqrshrnmi.u16','vqrshrnpl.u16','vqrshrnvs.u16','vqrshrnvc.u16','vqrshrnhi.u16','vqrshrnls.u16','vqrshrnge.u16','vqrshrnlt.u16','vqrshrngt.u16','vqrshrnle.u16', - 'vqrshrneq.u32','vqrshrnne.u32','vqrshrncs.u32','vqrshrnhs.u32','vqrshrncc.u32','vqrshrnlo.u32','vqrshrnmi.u32','vqrshrnpl.u32','vqrshrnvs.u32','vqrshrnvc.u32','vqrshrnhi.u32','vqrshrnls.u32','vqrshrnge.u32','vqrshrnlt.u32','vqrshrngt.u32','vqrshrnle.u32', - 'vqrshrneq.u64','vqrshrnne.u64','vqrshrncs.u64','vqrshrnhs.u64','vqrshrncc.u64','vqrshrnlo.u64','vqrshrnmi.u64','vqrshrnpl.u64','vqrshrnvs.u64','vqrshrnvc.u64','vqrshrnhi.u64','vqrshrnls.u64','vqrshrnge.u64','vqrshrnlt.u64','vqrshrngt.u64','vqrshrnle.u64', - - 'vrhaddeq.u8','vrhaddne.u8','vrhaddcs.u8','vrhaddhs.u8','vrhaddcc.u8','vrhaddlo.u8','vrhaddmi.u8','vrhaddpl.u8','vrhaddvs.u8','vrhaddvc.u8','vrhaddhi.u8','vrhaddls.u8','vrhaddge.u8','vrhaddlt.u8','vrhaddgt.u8','vrhaddle.u8', - 'vrhaddeq.u16','vrhaddne.u16','vrhaddcs.u16','vrhaddhs.u16','vrhaddcc.u16','vrhaddlo.u16','vrhaddmi.u16','vrhaddpl.u16','vrhaddvs.u16','vrhaddvc.u16','vrhaddhi.u16','vrhaddls.u16','vrhaddge.u16','vrhaddlt.u16','vrhaddgt.u16','vrhaddle.u16', - 'vrhaddeq.u32','vrhaddne.u32','vrhaddcs.u32','vrhaddhs.u32','vrhaddcc.u32','vrhaddlo.u32','vrhaddmi.u32','vrhaddpl.u32','vrhaddvs.u32','vrhaddvc.u32','vrhaddhi.u32','vrhaddls.u32','vrhaddge.u32','vrhaddlt.u32','vrhaddgt.u32','vrhaddle.u32', - - 'vrshleq.u8','vrshlne.u8','vrshlcs.u8','vrshlhs.u8','vrshlcc.u8','vrshllo.u8','vrshlmi.u8','vrshlpl.u8','vrshlvs.u8','vrshlvc.u8','vrshlhi.u8','vrshlls.u8','vrshlge.u8','vrshllt.u8','vrshlgt.u8','vrshlle.u8', - 'vrshleq.u16','vrshlne.u16','vrshlcs.u16','vrshlhs.u16','vrshlcc.u16','vrshllo.u16','vrshlmi.u16','vrshlpl.u16','vrshlvs.u16','vrshlvc.u16','vrshlhi.u16','vrshlls.u16','vrshlge.u16','vrshllt.u16','vrshlgt.u16','vrshlle.u16', - 'vrshleq.u32','vrshlne.u32','vrshlcs.u32','vrshlhs.u32','vrshlcc.u32','vrshllo.u32','vrshlmi.u32','vrshlpl.u32','vrshlvs.u32','vrshlvc.u32','vrshlhi.u32','vrshlls.u32','vrshlge.u32','vrshllt.u32','vrshlgt.u32','vrshlle.u32', - 'vrshleq.u64','vrshlne.u64','vrshlcs.u64','vrshlhs.u64','vrshlcc.u64','vrshllo.u64','vrshlmi.u64','vrshlpl.u64','vrshlvs.u64','vrshlvc.u64','vrshlhi.u64','vrshlls.u64','vrshlge.u64','vrshllt.u64','vrshlgt.u64','vrshlle.u64', - - 'vrshreq.u8','vrshrne.u8','vrshrcs.u8','vrshrhs.u8','vrshrcc.u8','vrshrlo.u8','vrshrmi.u8','vrshrpl.u8','vrshrvs.u8','vrshrvc.u8','vrshrhi.u8','vrshrls.u8','vrshrge.u8','vrshrlt.u8','vrshrgt.u8','vrshrle.u8', - 'vrshreq.u16','vrshrne.u16','vrshrcs.u16','vrshrhs.u16','vrshrcc.u16','vrshrlo.u16','vrshrmi.u16','vrshrpl.u16','vrshrvs.u16','vrshrvc.u16','vrshrhi.u16','vrshrls.u16','vrshrge.u16','vrshrlt.u16','vrshrgt.u16','vrshrle.u16', - 'vrshreq.u32','vrshrne.u32','vrshrcs.u32','vrshrhs.u32','vrshrcc.u32','vrshrlo.u32','vrshrmi.u32','vrshrpl.u32','vrshrvs.u32','vrshrvc.u32','vrshrhi.u32','vrshrls.u32','vrshrge.u32','vrshrlt.u32','vrshrgt.u32','vrshrle.u32', - 'vrshreq.u64','vrshrne.u64','vrshrcs.u64','vrshrhs.u64','vrshrcc.u64','vrshrlo.u64','vrshrmi.u64','vrshrpl.u64','vrshrvs.u64','vrshrvc.u64','vrshrhi.u64','vrshrls.u64','vrshrge.u64','vrshrlt.u64','vrshrgt.u64','vrshrle.u64', - - 'vrsraeq.u8','vrsrane.u8','vrsracs.u8','vrsrahs.u8','vrsracc.u8','vrsralo.u8','vrsrami.u8','vrsrapl.u8','vrsravs.u8','vrsravc.u8','vrsrahi.u8','vrsrals.u8','vrsrage.u8','vrsralt.u8','vrsragt.u8','vrsrale.u8', - 'vrsraeq.u16','vrsrane.u16','vrsracs.u16','vrsrahs.u16','vrsracc.u16','vrsralo.u16','vrsrami.u16','vrsrapl.u16','vrsravs.u16','vrsravc.u16','vrsrahi.u16','vrsrals.u16','vrsrage.u16','vrsralt.u16','vrsragt.u16','vrsrale.u16', - 'vrsraeq.u32','vrsrane.u32','vrsracs.u32','vrsrahs.u32','vrsracc.u32','vrsralo.u32','vrsrami.u32','vrsrapl.u32','vrsravs.u32','vrsravc.u32','vrsrahi.u32','vrsrals.u32','vrsrage.u32','vrsralt.u32','vrsragt.u32','vrsrale.u32', - 'vrsraeq.u64','vrsrane.u64','vrsracs.u64','vrsrahs.u64','vrsracc.u64','vrsralo.u64','vrsrami.u64','vrsrapl.u64','vrsravs.u64','vrsravc.u64','vrsrahi.u64','vrsrals.u64','vrsrage.u64','vrsralt.u64','vrsragt.u64','vrsrale.u64', - ), - /* Conditional VFPv3 & NEON SIMD Floating-Point Instructions */ - 34 => array( - 'vabdeq.f32','vabdne.f32','vabdcs.f32','vabdhs.f32','vabdcc.f32','vabdlo.f32','vabdmi.f32','vabdpl.f32','vabdvs.f32','vabdvc.f32','vabdhi.f32','vabdls.f32','vabdge.f32','vabdlt.f32','vabdgt.f32','vabdle.f32', - - 'vabseq.f32','vabsne.f32','vabscs.f32','vabshs.f32','vabscc.f32','vabslo.f32','vabsmi.f32','vabspl.f32','vabsvs.f32','vabsvc.f32','vabshi.f32','vabsls.f32','vabsge.f32','vabslt.f32','vabsgt.f32','vabsle.f32', - 'vabseq.f64','vabsne.f64','vabscs.f64','vabshs.f64','vabscc.f64','vabslo.f64','vabsmi.f64','vabspl.f64','vabsvs.f64','vabsvc.f64','vabshi.f64','vabsls.f64','vabsge.f64','vabslt.f64','vabsgt.f64','vabsle.f64', - - 'vacgeeq.f32','vacgene.f32','vacgecs.f32','vacgehs.f32','vacgecc.f32','vacgelo.f32','vacgemi.f32','vacgepl.f32','vacgevs.f32','vacgevc.f32','vacgehi.f32','vacgels.f32','vacgege.f32','vacgelt.f32','vacgegt.f32','vacgele.f32', - 'vacgteq.f32','vacgtne.f32','vacgtcs.f32','vacgths.f32','vacgtcc.f32','vacgtlo.f32','vacgtmi.f32','vacgtpl.f32','vacgtvs.f32','vacgtvc.f32','vacgthi.f32','vacgtls.f32','vacgtge.f32','vacgtlt.f32','vacgtgt.f32','vacgtle.f32', - 'vacleeq.f32','vaclene.f32','vaclecs.f32','vaclehs.f32','vaclecc.f32','vaclelo.f32','vaclemi.f32','vaclepl.f32','vaclevs.f32','vaclevc.f32','vaclehi.f32','vaclels.f32','vaclege.f32','vaclelt.f32','vaclegt.f32','vaclele.f32', - 'vaclteq.f32','vacltne.f32','vacltcs.f32','vaclths.f32','vacltcc.f32','vacltlo.f32','vacltmi.f32','vacltpl.f32','vacltvs.f32','vacltvc.f32','vaclthi.f32','vacltls.f32','vacltge.f32','vacltlt.f32','vacltgt.f32','vacltle.f32', - - 'vaddeq.f32','vaddne.f32','vaddcs.f32','vaddhs.f32','vaddcc.f32','vaddlo.f32','vaddmi.f32','vaddpl.f32','vaddvs.f32','vaddvc.f32','vaddhi.f32','vaddls.f32','vaddge.f32','vaddlt.f32','vaddgt.f32','vaddle.f32', - 'vaddeq.f64','vaddne.f64','vaddcs.f64','vaddhs.f64','vaddcc.f64','vaddlo.f64','vaddmi.f64','vaddpl.f64','vaddvs.f64','vaddvc.f64','vaddhi.f64','vaddls.f64','vaddge.f64','vaddlt.f64','vaddgt.f64','vaddle.f64', - - 'vceqeq.f32','vceqne.f32','vceqcs.f32','vceqhs.f32','vceqcc.f32','vceqlo.f32','vceqmi.f32','vceqpl.f32','vceqvs.f32','vceqvc.f32','vceqhi.f32','vceqls.f32','vceqge.f32','vceqlt.f32','vceqgt.f32','vceqle.f32', - 'vcgeeq.f32','vcgene.f32','vcgecs.f32','vcgehs.f32','vcgecc.f32','vcgelo.f32','vcgemi.f32','vcgepl.f32','vcgevs.f32','vcgevc.f32','vcgehi.f32','vcgels.f32','vcgege.f32','vcgelt.f32','vcgegt.f32','vcgele.f32', - 'vcleeq.f32','vclene.f32','vclecs.f32','vclehs.f32','vclecc.f32','vclelo.f32','vclemi.f32','vclepl.f32','vclevs.f32','vclevc.f32','vclehi.f32','vclels.f32','vclege.f32','vclelt.f32','vclegt.f32','vclele.f32', - 'vcgteq.f32','vcgtne.f32','vcgtcs.f32','vcgths.f32','vcgtcc.f32','vcgtlo.f32','vcgtmi.f32','vcgtpl.f32','vcgtvs.f32','vcgtvc.f32','vcgthi.f32','vcgtls.f32','vcgtge.f32','vcgtlt.f32','vcgtgt.f32','vcgtle.f32', - 'vclteq.f32','vcltne.f32','vcltcs.f32','vclths.f32','vcltcc.f32','vcltlo.f32','vcltmi.f32','vcltpl.f32','vcltvs.f32','vcltvc.f32','vclthi.f32','vcltls.f32','vcltge.f32','vcltlt.f32','vcltgt.f32','vcltle.f32', - - 'vcmpeq.f32','vcmpne.f32','vcmpcs.f32','vcmphs.f32','vcmpcc.f32','vcmplo.f32','vcmpmi.f32','vcmppl.f32','vcmpvs.f32','vcmpvc.f32','vcmphi.f32','vcmpls.f32','vcmpge.f32','vcmplt.f32','vcmpgt.f32','vcmple.f32', - 'vcmpeq.f64','vcmpne.f64','vcmpcs.f64','vcmphs.f64','vcmpcc.f64','vcmplo.f64','vcmpmi.f64','vcmppl.f64','vcmpvs.f64','vcmpvc.f64','vcmphi.f64','vcmpls.f64','vcmpge.f64','vcmplt.f64','vcmpgt.f64','vcmple.f64', - - 'vcmpeeq.f32','vcmpene.f32','vcmpecs.f32','vcmpehs.f32','vcmpecc.f32','vcmpelo.f32','vcmpemi.f32','vcmpepl.f32','vcmpevs.f32','vcmpevc.f32','vcmpehi.f32','vcmpels.f32','vcmpege.f32','vcmpelt.f32','vcmpegt.f32','vcmpele.f32', - 'vcmpeeq.f64','vcmpene.f64','vcmpecs.f64','vcmpehs.f64','vcmpecc.f64','vcmpelo.f64','vcmpemi.f64','vcmpepl.f64','vcmpevs.f64','vcmpevc.f64','vcmpehi.f64','vcmpels.f64','vcmpege.f64','vcmpelt.f64','vcmpegt.f64','vcmpele.f64', - - 'vcvteq.s16.f32','vcvtne.s16.f32','vcvtcs.s16.f32','vcvths.s16.f32','vcvtcc.s16.f32','vcvtlo.s16.f32','vcvtmi.s16.f32','vcvtpl.s16.f32','vcvtvs.s16.f32','vcvtvc.s16.f32','vcvthi.s16.f32','vcvtls.s16.f32','vcvtge.s16.f32','vcvtlt.s16.f32','vcvtgt.s16.f32','vcvtle.s16.f32', - 'vcvteq.s16.f64','vcvtne.s16.f64','vcvtcs.s16.f64','vcvths.s16.f64','vcvtcc.s16.f64','vcvtlo.s16.f64','vcvtmi.s16.f64','vcvtpl.s16.f64','vcvtvs.s16.f64','vcvtvc.s16.f64','vcvthi.s16.f64','vcvtls.s16.f64','vcvtge.s16.f64','vcvtlt.s16.f64','vcvtgt.s16.f64','vcvtle.s16.f64', - 'vcvteq.s32.f32','vcvtne.s32.f32','vcvtcs.s32.f32','vcvths.s32.f32','vcvtcc.s32.f32','vcvtlo.s32.f32','vcvtmi.s32.f32','vcvtpl.s32.f32','vcvtvs.s32.f32','vcvtvc.s32.f32','vcvthi.s32.f32','vcvtls.s32.f32','vcvtge.s32.f32','vcvtlt.s32.f32','vcvtgt.s32.f32','vcvtle.s32.f32', - 'vcvteq.s32.f64','vcvtne.s32.f64','vcvtcs.s32.f64','vcvths.s32.f64','vcvtcc.s32.f64','vcvtlo.s32.f64','vcvtmi.s32.f64','vcvtpl.s32.f64','vcvtvs.s32.f64','vcvtvc.s32.f64','vcvthi.s32.f64','vcvtls.s32.f64','vcvtge.s32.f64','vcvtlt.s32.f64','vcvtgt.s32.f64','vcvtle.s32.f64', - 'vcvteq.u16.f32','vcvtne.u16.f32','vcvtcs.u16.f32','vcvths.u16.f32','vcvtcc.u16.f32','vcvtlo.u16.f32','vcvtmi.u16.f32','vcvtpl.u16.f32','vcvtvs.u16.f32','vcvtvc.u16.f32','vcvthi.u16.f32','vcvtls.u16.f32','vcvtge.u16.f32','vcvtlt.u16.f32','vcvtgt.u16.f32','vcvtle.u16.f32', - 'vcvteq.u16.f64','vcvtne.u16.f64','vcvtcs.u16.f64','vcvths.u16.f64','vcvtcc.u16.f64','vcvtlo.u16.f64','vcvtmi.u16.f64','vcvtpl.u16.f64','vcvtvs.u16.f64','vcvtvc.u16.f64','vcvthi.u16.f64','vcvtls.u16.f64','vcvtge.u16.f64','vcvtlt.u16.f64','vcvtgt.u16.f64','vcvtle.u16.f64', - 'vcvteq.u32.f32','vcvtne.u32.f32','vcvtcs.u32.f32','vcvths.u32.f32','vcvtcc.u32.f32','vcvtlo.u32.f32','vcvtmi.u32.f32','vcvtpl.u32.f32','vcvtvs.u32.f32','vcvtvc.u32.f32','vcvthi.u32.f32','vcvtls.u32.f32','vcvtge.u32.f32','vcvtlt.u32.f32','vcvtgt.u32.f32','vcvtle.u32.f32', - 'vcvteq.u32.f64','vcvtne.u32.f64','vcvtcs.u32.f64','vcvths.u32.f64','vcvtcc.u32.f64','vcvtlo.u32.f64','vcvtmi.u32.f64','vcvtpl.u32.f64','vcvtvs.u32.f64','vcvtvc.u32.f64','vcvthi.u32.f64','vcvtls.u32.f64','vcvtge.u32.f64','vcvtlt.u32.f64','vcvtgt.u32.f64','vcvtle.u32.f64', - 'vcvteq.f16.f32','vcvtne.f16.f32','vcvtcs.f16.f32','vcvths.f16.f32','vcvtcc.f16.f32','vcvtlo.f16.f32','vcvtmi.f16.f32','vcvtpl.f16.f32','vcvtvs.f16.f32','vcvtvc.f16.f32','vcvthi.f16.f32','vcvtls.f16.f32','vcvtge.f16.f32','vcvtlt.f16.f32','vcvtgt.f16.f32','vcvtle.f16.f32', - 'vcvteq.f32.s32','vcvtne.f32.s32','vcvtcs.f32.s32','vcvths.f32.s32','vcvtcc.f32.s32','vcvtlo.f32.s32','vcvtmi.f32.s32','vcvtpl.f32.s32','vcvtvs.f32.s32','vcvtvc.f32.s32','vcvthi.f32.s32','vcvtls.f32.s32','vcvtge.f32.s32','vcvtlt.f32.s32','vcvtgt.f32.s32','vcvtle.f32.s32', - 'vcvteq.f32.u32','vcvtne.f32.u32','vcvtcs.f32.u32','vcvths.f32.u32','vcvtcc.f32.u32','vcvtlo.f32.u32','vcvtmi.f32.u32','vcvtpl.f32.u32','vcvtvs.f32.u32','vcvtvc.f32.u32','vcvthi.f32.u32','vcvtls.f32.u32','vcvtge.f32.u32','vcvtlt.f32.u32','vcvtgt.f32.u32','vcvtle.f32.u32', - 'vcvteq.f32.f16','vcvtne.f32.f16','vcvtcs.f32.f16','vcvths.f32.f16','vcvtcc.f32.f16','vcvtlo.f32.f16','vcvtmi.f32.f16','vcvtpl.f32.f16','vcvtvs.f32.f16','vcvtvc.f32.f16','vcvthi.f32.f16','vcvtls.f32.f16','vcvtge.f32.f16','vcvtlt.f32.f16','vcvtgt.f32.f16','vcvtle.f32.f16', - 'vcvteq.f32.f64','vcvtne.f32.f64','vcvtcs.f32.f64','vcvths.f32.f64','vcvtcc.f32.f64','vcvtlo.f32.f64','vcvtmi.f32.f64','vcvtpl.f32.f64','vcvtvs.f32.f64','vcvtvc.f32.f64','vcvthi.f32.f64','vcvtls.f32.f64','vcvtge.f32.f64','vcvtlt.f32.f64','vcvtgt.f32.f64','vcvtle.f32.f64', - 'vcvteq.f64.s32','vcvtne.f64.s32','vcvtcs.f64.s32','vcvths.f64.s32','vcvtcc.f64.s32','vcvtlo.f64.s32','vcvtmi.f64.s32','vcvtpl.f64.s32','vcvtvs.f64.s32','vcvtvc.f64.s32','vcvthi.f64.s32','vcvtls.f64.s32','vcvtge.f64.s32','vcvtlt.f64.s32','vcvtgt.f64.s32','vcvtle.f64.s32', - 'vcvteq.f64.u32','vcvtne.f64.u32','vcvtcs.f64.u32','vcvths.f64.u32','vcvtcc.f64.u32','vcvtlo.f64.u32','vcvtmi.f64.u32','vcvtpl.f64.u32','vcvtvs.f64.u32','vcvtvc.f64.u32','vcvthi.f64.u32','vcvtls.f64.u32','vcvtge.f64.u32','vcvtlt.f64.u32','vcvtgt.f64.u32','vcvtle.f64.u32', - 'vcvteq.f64.f32','vcvtne.f64.f32','vcvtcs.f64.f32','vcvths.f64.f32','vcvtcc.f64.f32','vcvtlo.f64.f32','vcvtmi.f64.f32','vcvtpl.f64.f32','vcvtvs.f64.f32','vcvtvc.f64.f32','vcvthi.f64.f32','vcvtls.f64.f32','vcvtge.f64.f32','vcvtlt.f64.f32','vcvtgt.f64.f32','vcvtle.f64.f32', - - 'vcvtreq.s32.f32','vcvtrne.s32.f32','vcvtrcs.s32.f32','vcvtrhs.s32.f32','vcvtrcc.s32.f32','vcvtrlo.s32.f32','vcvtrmi.s32.f32','vcvtrpl.s32.f32','vcvtrvs.s32.f32','vcvtrvc.s32.f32','vcvtrhi.s32.f32','vcvtrls.s32.f32','vcvtrge.s32.f32','vcvtrlt.s32.f32','vcvtrgt.s32.f32','vcvtrle.s32.f32', - 'vcvtreq.s32.f64','vcvtrne.s32.f64','vcvtrcs.s32.f64','vcvtrhs.s32.f64','vcvtrcc.s32.f64','vcvtrlo.s32.f64','vcvtrmi.s32.f64','vcvtrpl.s32.f64','vcvtrvs.s32.f64','vcvtrvc.s32.f64','vcvtrhi.s32.f64','vcvtrls.s32.f64','vcvtrge.s32.f64','vcvtrlt.s32.f64','vcvtrgt.s32.f64','vcvtrle.s32.f64', - 'vcvtreq.u32.f32','vcvtrne.u32.f32','vcvtrcs.u32.f32','vcvtrhs.u32.f32','vcvtrcc.u32.f32','vcvtrlo.u32.f32','vcvtrmi.u32.f32','vcvtrpl.u32.f32','vcvtrvs.u32.f32','vcvtrvc.u32.f32','vcvtrhi.u32.f32','vcvtrls.u32.f32','vcvtrge.u32.f32','vcvtrlt.u32.f32','vcvtrgt.u32.f32','vcvtrle.u32.f32', - 'vcvtreq.u32.f64','vcvtrne.u32.f64','vcvtrcs.u32.f64','vcvtrhs.u32.f64','vcvtrcc.u32.f64','vcvtrlo.u32.f64','vcvtrmi.u32.f64','vcvtrpl.u32.f64','vcvtrvs.u32.f64','vcvtrvc.u32.f64','vcvtrhi.u32.f64','vcvtrls.u32.f64','vcvtrge.u32.f64','vcvtrlt.u32.f64','vcvtrgt.u32.f64','vcvtrle.u32.f64', - - 'vcvtbeq.f16.f32','vcvtbne.f16.f32','vcvtbcs.f16.f32','vcvtbhs.f16.f32','vcvtbcc.f16.f32','vcvtblo.f16.f32','vcvtbmi.f16.f32','vcvtbpl.f16.f32','vcvtbvs.f16.f32','vcvtbvc.f16.f32','vcvtbhi.f16.f32','vcvtbls.f16.f32','vcvtbge.f16.f32','vcvtblt.f16.f32','vcvtbgt.f16.f32','vcvtble.f16.f32', - 'vcvtbeq.f32.f16','vcvtbne.f32.f16','vcvtbcs.f32.f16','vcvtbhs.f32.f16','vcvtbcc.f32.f16','vcvtblo.f32.f16','vcvtbmi.f32.f16','vcvtbpl.f32.f16','vcvtbvs.f32.f16','vcvtbvc.f32.f16','vcvtbhi.f32.f16','vcvtbls.f32.f16','vcvtbge.f32.f16','vcvtblt.f32.f16','vcvtbgt.f32.f16','vcvtble.f32.f16', - - 'vcvtteq.f16.f32','vcvttne.f16.f32','vcvttcs.f16.f32','vcvtths.f16.f32','vcvttcc.f16.f32','vcvttlo.f16.f32','vcvttmi.f16.f32','vcvttpl.f16.f32','vcvttvs.f16.f32','vcvttvc.f16.f32','vcvtthi.f16.f32','vcvttls.f16.f32','vcvttge.f16.f32','vcvttlt.f16.f32','vcvttgt.f16.f32','vcvttle.f16.f32', - 'vcvtteq.f32.f16','vcvttne.f32.f16','vcvttcs.f32.f16','vcvtths.f32.f16','vcvttcc.f32.f16','vcvttlo.f32.f16','vcvttmi.f32.f16','vcvttpl.f32.f16','vcvttvs.f32.f16','vcvttvc.f32.f16','vcvtthi.f32.f16','vcvttls.f32.f16','vcvttge.f32.f16','vcvttlt.f32.f16','vcvttgt.f32.f16','vcvttle.f32.f16', - - 'vdiveq.f32','vdivne.f32','vdivcs.f32','vdivhs.f32','vdivcc.f32','vdivlo.f32','vdivmi.f32','vdivpl.f32','vdivvs.f32','vdivvc.f32','vdivhi.f32','vdivls.f32','vdivge.f32','vdivlt.f32','vdivgt.f32','vdivle.f32', - 'vdiveq.f64','vdivne.f64','vdivcs.f64','vdivhs.f64','vdivcc.f64','vdivlo.f64','vdivmi.f64','vdivpl.f64','vdivvs.f64','vdivvc.f64','vdivhi.f64','vdivls.f64','vdivge.f64','vdivlt.f64','vdivgt.f64','vdivle.f64', - - 'vmaxeq.f32','vmaxne.f32','vmaxcs.f32','vmaxhs.f32','vmaxcc.f32','vmaxlo.f32','vmaxmi.f32','vmaxpl.f32','vmaxvs.f32','vmaxvc.f32','vmaxhi.f32','vmaxls.f32','vmaxge.f32','vmaxlt.f32','vmaxgt.f32','vmaxle.f32', - 'vmineq.f32','vminne.f32','vmincs.f32','vminhs.f32','vmincc.f32','vminlo.f32','vminmi.f32','vminpl.f32','vminvs.f32','vminvc.f32','vminhi.f32','vminls.f32','vminge.f32','vminlt.f32','vmingt.f32','vminle.f32', - - 'vmlaeq.f32','vmlane.f32','vmlacs.f32','vmlahs.f32','vmlacc.f32','vmlalo.f32','vmlami.f32','vmlapl.f32','vmlavs.f32','vmlavc.f32','vmlahi.f32','vmlals.f32','vmlage.f32','vmlalt.f32','vmlagt.f32','vmlale.f32', - 'vmlaeq.f64','vmlane.f64','vmlacs.f64','vmlahs.f64','vmlacc.f64','vmlalo.f64','vmlami.f64','vmlapl.f64','vmlavs.f64','vmlavc.f64','vmlahi.f64','vmlals.f64','vmlage.f64','vmlalt.f64','vmlagt.f64','vmlale.f64', - - 'vmlseq.f32','vmlsne.f32','vmlscs.f32','vmlshs.f32','vmlscc.f32','vmlslo.f32','vmlsmi.f32','vmlspl.f32','vmlsvs.f32','vmlsvc.f32','vmlshi.f32','vmlsls.f32','vmlsge.f32','vmlslt.f32','vmlsgt.f32','vmlsle.f32', - 'vmlseq.f64','vmlsne.f64','vmlscs.f64','vmlshs.f64','vmlscc.f64','vmlslo.f64','vmlsmi.f64','vmlspl.f64','vmlsvs.f64','vmlsvc.f64','vmlshi.f64','vmlsls.f64','vmlsge.f64','vmlslt.f64','vmlsgt.f64','vmlsle.f64', - - 'vmuleq.f32','vmulne.f32','vmulcs.f32','vmulhs.f32','vmulcc.f32','vmullo.f32','vmulmi.f32','vmulpl.f32','vmulvs.f32','vmulvc.f32','vmulhi.f32','vmulls.f32','vmulge.f32','vmullt.f32','vmulgt.f32','vmulle.f32', - 'vmuleq.f64','vmulne.f64','vmulcs.f64','vmulhs.f64','vmulcc.f64','vmullo.f64','vmulmi.f64','vmulpl.f64','vmulvs.f64','vmulvc.f64','vmulhi.f64','vmulls.f64','vmulge.f64','vmullt.f64','vmulgt.f64','vmulle.f64', - - 'vnegeq.f32','vnegne.f32','vnegcs.f32','vneghs.f32','vnegcc.f32','vneglo.f32','vnegmi.f32','vnegpl.f32','vnegvs.f32','vnegvc.f32','vneghi.f32','vnegls.f32','vnegge.f32','vneglt.f32','vneggt.f32','vnegle.f32', - 'vnegeq.f64','vnegne.f64','vnegcs.f64','vneghs.f64','vnegcc.f64','vneglo.f64','vnegmi.f64','vnegpl.f64','vnegvs.f64','vnegvc.f64','vneghi.f64','vnegls.f64','vnegge.f64','vneglt.f64','vneggt.f64','vnegle.f64', - - 'vnmlaeq.f32','vnmlane.f32','vnmlacs.f32','vnmlahs.f32','vnmlacc.f32','vnmlalo.f32','vnmlami.f32','vnmlapl.f32','vnmlavs.f32','vnmlavc.f32','vnmlahi.f32','vnmlals.f32','vnmlage.f32','vnmlalt.f32','vnmlagt.f32','vnmlale.f32', - 'vnmlaeq.f64','vnmlane.f64','vnmlacs.f64','vnmlahs.f64','vnmlacc.f64','vnmlalo.f64','vnmlami.f64','vnmlapl.f64','vnmlavs.f64','vnmlavc.f64','vnmlahi.f64','vnmlals.f64','vnmlage.f64','vnmlalt.f64','vnmlagt.f64','vnmlale.f64', - - 'vnmlseq.f32','vnmlsne.f32','vnmlscs.f32','vnmlshs.f32','vnmlscc.f32','vnmlslo.f32','vnmlsmi.f32','vnmlspl.f32','vnmlsvs.f32','vnmlsvc.f32','vnmlshi.f32','vnmlsls.f32','vnmlsge.f32','vnmlslt.f32','vnmlsgt.f32','vnmlsle.f32', - 'vnmlseq.f64','vnmlsne.f64','vnmlscs.f64','vnmlshs.f64','vnmlscc.f64','vnmlslo.f64','vnmlsmi.f64','vnmlspl.f64','vnmlsvs.f64','vnmlsvc.f64','vnmlshi.f64','vnmlsls.f64','vnmlsge.f64','vnmlslt.f64','vnmlsgt.f64','vnmlsle.f64', - - 'vnmuleq.f64','vnmulne.f64','vnmulcs.f64','vnmulhs.f64','vnmulcc.f64','vnmullo.f64','vnmulmi.f64','vnmulpl.f64','vnmulvs.f64','vnmulvc.f64','vnmulhi.f64','vnmulls.f64','vnmulge.f64','vnmullt.f64','vnmulgt.f64','vnmulle.f64', - 'vnmuleq.f32','vnmulne.f32','vnmulcs.f32','vnmulhs.f32','vnmulcc.f32','vnmullo.f32','vnmulmi.f32','vnmulpl.f32','vnmulvs.f32','vnmulvc.f32','vnmulhi.f32','vnmulls.f32','vnmulge.f32','vnmullt.f32','vnmulgt.f32','vnmulle.f32', - - 'vpaddeq.f32','vpaddne.f32','vpaddcs.f32','vpaddhs.f32','vpaddcc.f32','vpaddlo.f32','vpaddmi.f32','vpaddpl.f32','vpaddvs.f32','vpaddvc.f32','vpaddhi.f32','vpaddls.f32','vpaddge.f32','vpaddlt.f32','vpaddgt.f32','vpaddle.f32', - - 'vpmaxeq.f32','vpmaxne.f32','vpmaxcs.f32','vpmaxhs.f32','vpmaxcc.f32','vpmaxlo.f32','vpmaxmi.f32','vpmaxpl.f32','vpmaxvs.f32','vpmaxvc.f32','vpmaxhi.f32','vpmaxls.f32','vpmaxge.f32','vpmaxlt.f32','vpmaxgt.f32','vpmaxle.f32', - 'vpmineq.f32','vpminne.f32','vpmincs.f32','vpminhs.f32','vpmincc.f32','vpminlo.f32','vpminmi.f32','vpminpl.f32','vpminvs.f32','vpminvc.f32','vpminhi.f32','vpminls.f32','vpminge.f32','vpminlt.f32','vpmingt.f32','vpminle.f32', - - 'vrecpeeq.u32','vrecpene.u32','vrecpecs.u32','vrecpehs.u32','vrecpecc.u32','vrecpelo.u32','vrecpemi.u32','vrecpepl.u32','vrecpevs.u32','vrecpevc.u32','vrecpehi.u32','vrecpels.u32','vrecpege.u32','vrecpelt.u32','vrecpegt.u32','vrecpele.u32', - 'vrecpeeq.f32','vrecpene.f32','vrecpecs.f32','vrecpehs.f32','vrecpecc.f32','vrecpelo.f32','vrecpemi.f32','vrecpepl.f32','vrecpevs.f32','vrecpevc.f32','vrecpehi.f32','vrecpels.f32','vrecpege.f32','vrecpelt.f32','vrecpegt.f32','vrecpele.f32', - 'vrecpseq.f32','vrecpsne.f32','vrecpscs.f32','vrecpshs.f32','vrecpscc.f32','vrecpslo.f32','vrecpsmi.f32','vrecpspl.f32','vrecpsvs.f32','vrecpsvc.f32','vrecpshi.f32','vrecpsls.f32','vrecpsge.f32','vrecpslt.f32','vrecpsgt.f32','vrecpsle.f32', - - 'vrsqrteeq.u32','vrsqrtene.u32','vrsqrtecs.u32','vrsqrtehs.u32','vrsqrtecc.u32','vrsqrtelo.u32','vrsqrtemi.u32','vrsqrtepl.u32','vrsqrtevs.u32','vrsqrtevc.u32','vrsqrtehi.u32','vrsqrtels.u32','vrsqrtege.u32','vrsqrtelt.u32','vrsqrtegt.u32','vrsqrtele.u32', - 'vrsqrteeq.f32','vrsqrtene.f32','vrsqrtecs.f32','vrsqrtehs.f32','vrsqrtecc.f32','vrsqrtelo.f32','vrsqrtemi.f32','vrsqrtepl.f32','vrsqrtevs.f32','vrsqrtevc.f32','vrsqrtehi.f32','vrsqrtels.f32','vrsqrtege.f32','vrsqrtelt.f32','vrsqrtegt.f32','vrsqrtele.f32', - 'vrsqrtseq.f32','vrsqrtsne.f32','vrsqrtscs.f32','vrsqrtshs.f32','vrsqrtscc.f32','vrsqrtslo.f32','vrsqrtsmi.f32','vrsqrtspl.f32','vrsqrtsvs.f32','vrsqrtsvc.f32','vrsqrtshi.f32','vrsqrtsls.f32','vrsqrtsge.f32','vrsqrtslt.f32','vrsqrtsgt.f32','vrsqrtsle.f32', - - 'vsqrteq.f32','vsqrtne.f32','vsqrtcs.f32','vsqrths.f32','vsqrtcc.f32','vsqrtlo.f32','vsqrtmi.f32','vsqrtpl.f32','vsqrtvs.f32','vsqrtvc.f32','vsqrthi.f32','vsqrtls.f32','vsqrtge.f32','vsqrtlt.f32','vsqrtgt.f32','vsqrtle.f32', - 'vsqrteq.f64','vsqrtne.f64','vsqrtcs.f64','vsqrths.f64','vsqrtcc.f64','vsqrtlo.f64','vsqrtmi.f64','vsqrtpl.f64','vsqrtvs.f64','vsqrtvc.f64','vsqrthi.f64','vsqrtls.f64','vsqrtge.f64','vsqrtlt.f64','vsqrtgt.f64','vsqrtle.f64', - - 'vsubeq.f32','vsubne.f32','vsubcs.f32','vsubhs.f32','vsubcc.f32','vsublo.f32','vsubmi.f32','vsubpl.f32','vsubvs.f32','vsubvc.f32','vsubhi.f32','vsubls.f32','vsubge.f32','vsublt.f32','vsubgt.f32','vsuble.f32', - 'vsubeq.f64','vsubne.f64','vsubcs.f64','vsubhs.f64','vsubcc.f64','vsublo.f64','vsubmi.f64','vsubpl.f64','vsubvs.f64','vsubvc.f64','vsubhi.f64','vsubls.f64','vsubge.f64','vsublt.f64','vsubgt.f64','vsuble.f64' - ), - /* Registers */ - 35 => array( - /* General-Purpose Registers */ - 'r0','r1','r2','r3','r4','r5','r6','r7', - 'r8','r9','r10','r11','r12','r13','r14','r15', - /* Scratch Registers */ - 'a1','a2','a3','a4', - /* Variable Registers */ - 'v1','v2','v3','v4','v5','v6','v7','v8', - /* Other Synonims for General-Purpose Registers */ - 'sb','sl','fp','ip','sp','lr','pc', - /* WMMX Data Registers */ - 'wr0','wr1','wr2','wr3','wr4','wr5','wr6','wr7', - 'wr8','wr9','wr10','wr11','wr12','wr13','wr14','wr15', - /* WMMX Control Registers */ - 'wcid','wcon','wcssf','wcasf', - /* WMMX-Mapped General-Purpose Registers */ - 'wcgr0','wcgr1','wcgr2','wcgr3', - /* VFPv3 Registers */ - 's0','s1','s2','s3','s4','s5','s6','s7', - 's8','s9','s10','s11','s12','s13','s14','s15', - 's16','s17','s18','s19','s20','s21','s22','s23', - 's24','s25','s26','s27','s28','s29','s30','s31', - /* VFPv3/NEON Registers */ - 'd0','d1','d2','d3','d4','d5','d6','d7', - 'd8','d9','d10','d11','d12','d13','d14','d15', - 'd16','d17','d18','d19','d20','d21','d22','d23', - 'd24','d25','d26','d27','d28','d29','d30','d31', - /* NEON Registers */ - 'q0','q1','q2','q3','q4','q5','q6','q7', - 'q8','q9','q10','q11','q12','q13','q14','q15' - ) - ), - 'SYMBOLS' => array( - '[', ']', '(', ')', - '+', '-', '*', '/', '%', - '.', ',', ';', ':' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false, - 7 => false, - 8 => false, - 9 => false, - 10 => false, - 11 => false, - 12 => false, - 13 => false, - 14 => false, - 15 => false, - 16 => false, - 17 => false, - 18 => false, - 19 => false, - 20 => false, - 21 => false, - 22 => false, - 23 => false, - 24 => false, - 25 => false, - 26 => false, - 27 => false, - 28 => false, - 29 => false, - 30 => false, - 31 => false, - 32 => false, - 33 => false, - 34 => false, - 35 => false - ), - 'STYLES' => array( - 'KEYWORDS' => array( - /* Unconditional Data Processing Instructions */ - 1 => 'color: #00007f; font-weight: normal; font-style: normal;', - /* Conditional Data Processing Instructions */ - 2 => 'color: #00007f; font-weight: normal; font-style: italic;', - /* Unconditional Memory Access Instructions */ - 3 => 'color: #00007f; font-weight: normal; font-style: normal;', - /* Conditional Memory Access Instructions */ - 4 => 'color: #00007f; font-weight: normal; font-style: italic;', - /* Unconditional Flags Changing Instructions */ - 5 => 'color: #00007f; font-weight: bold; font-style: normal;', - /* Conditional Flags Changing Instructions */ - 6 => 'color: #00007f; font-weight: bold; font-style: italic;', - /* Unconditional Flow Control Instructions */ - 7 => 'color: #0000ff; font-weight: normal; font-style: normal;', - /* Conditional Flow Control Instructions */ - 8 => 'color: #0000ff; font-weight: normal; font-style: italic;', - /* Unconditional Syncronization Instructions */ - 9 => 'color: #00007f; font-weight: normal; font-style: normal;', - /* Conditional Syncronization Instructions */ - 10 => 'color: #00007f; font-weight: normal; font-style: italic;', - /* Unonditional ARMv6 SIMD */ - 11 => 'color: #b00040; font-weight: normal; font-style: normal;', - /* Conditional ARMv6 SIMD */ - 12 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional Coprocessor Instructions */ - 13 => 'color: #00007f; font-weight: normal; font-style: normal;', - /* Conditional Coprocessor Instructions */ - 14 => 'color: #00007f; font-weight: bold; font-style: italic;', - /* Unconditional System Instructions */ - 15 => 'color: #00007f; font-weight: normal; font-style: normal;', - /* Conditional System Instructions */ - 16 => 'color: #00007f; font-weight: bold; font-style: italic;', - /* Unconditional WMMX/WMMX2 SIMD Instructions */ - 17 => 'color: #b00040; font-weight: normal; font-style: normal;', - /* Conditional WMMX/WMMX2 SIMD Instructions */ - 18 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional VFPv3 & NEON SIMD Memory Access Instructions */ - 19 => 'color: #b00040; font-weight: normal; font-style: normal;', - /* Unconditional NEON SIMD Logical Instructions */ - 20 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional NEON SIMD ARM Registers Interop Instructions */ - 21 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional NEON SIMD Bit/Byte-Level Instructions */ - 22 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional NEON SIMD Universal Integer Instructions */ - 23 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional NEON SIMD Signed Integer Instructions */ - 24 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional NEON SIMD Unsigned Integer Instructions */ - 25 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Unconditional VFPv3 & NEON SIMD Floating-Point Instructions */ - 26 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional VFPv3 & NEON SIMD Memory Access Instructions */ - 27 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional NEON SIMD Logical Instructions */ - 28 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional NEON SIMD ARM Registers Interop Instructions */ - 29 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional NEON SIMD Bit/Byte-Level Instructions */ - 30 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional NEON SIMD Universal Integer Instructions */ - 31 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional NEON SIMD Signed Integer Instructions */ - 32 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional NEON SIMD Unsigned Integer Instructions */ - 33 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Conditional VFPv3 & NEON SIMD Floating-Point Instructions */ - 34 => 'color: #b00040; font-weight: normal; font-style: italic;', - /* Registers */ - 35 => 'color: #46aa03; font-weight: bold;' - ), - 'COMMENTS' => array( - 1 => 'color: #666666; font-style: italic;', - 2 => 'color: #adadad; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #009900; font-weight: bold;' - ), - 'STRINGS' => array( - 0 => 'color: #7f007f;' - ), - 'NUMBERS' => array( - 0 => 'color: #ff0000;' - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #339933;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - 8 => '', - 9 => '', - 10 => '', - 11 => '', - 12 => '', - 13 => '', - 14 => '', - 15 => '', - 16 => '', - 17 => '', - 18 => '', - 19 => '', - 20 => '', - 21 => '', - 22 => '', - 23 => '', - 24 => '', - 25 => '', - 26 => '', - 27 => '', - 28 => '', - 29 => '', - 30 => '', - 31 => '', - 32 => '', - 33 => '', - 34 => '', - 35 => '' - ), - 'NUMBERS' => - GESHI_NUMBER_BIN_PREFIX_PERCENT | - GESHI_NUMBER_BIN_SUFFIX | - GESHI_NUMBER_HEX_PREFIX | - GESHI_NUMBER_HEX_SUFFIX | - GESHI_NUMBER_OCT_SUFFIX | - GESHI_NUMBER_INT_BASIC | - GESHI_NUMBER_FLT_NONSCI | - GESHI_NUMBER_FLT_NONSCI_F | - GESHI_NUMBER_FLT_SCI_ZERO, - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 8, - 'PARSER_CONTROL' => array( - 'KEYWORDS' => array( - 'DISALLOWED_BEFORE' => "(?|^])", - 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%])" - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php deleted file mode 100644 index b602830f..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php +++ /dev/null @@ -1,601 +0,0 @@ - 'ASM', - 'COMMENT_SINGLE' => array(1 => ';'), - 'COMMENT_MULTI' => array(), - //Line address prefix suppression - 'COMMENT_REGEXP' => array(2 => "/^(?:[0-9a-f]{0,4}:)?[0-9a-f]{4}(?:[0-9a-f]{4})?/mi"), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - /* General-Purpose */ - 1 => array( - /* BCD instructions */ - 'aaa','aad','aam','aas','daa','das', - /* Control flow instructions */ - 'ja','jae','jb','jbe','jc','je','jg','jge','jl','jle','jmp','jna', - 'jnae','jnb','jnbe','jnc','jne','jng','jnge','jnl','jnle','jno','jnp','jns','jnz', - 'jo','jp','jpe','jpo','js','jz','jcxz','jecxz','jrcxz','loop','loope','loopne', - 'call','ret','enter','leave','syscall','sysenter','int','into', - /* Predicate instructions */ - 'seta','setae','setb','setbe','setc','sete','setg','setge','setl','setle','setna', - 'setnae','setnb','setnbe','setnc','setne','setng','setnge','setnl','setnle','setno', - 'setnp','setns','setnz','seto','setp','setpe','setpo','sets','setz','salc', - /* Conditional move instructions */ - 'cmovo','cmovno','cmovb','cmovc','cmovnae','cmovae','cmovnb','cmovnc','cmove','cmovz', - 'cmovne','cmovnz','cmovbe','cmovna','cmova','cmovnbe','cmovs','cmovns','cmovp','cmovpe', - 'cmovnp','cmovpo','cmovl','cmovnge','cmovge','cmovnl','cmovle','cmovng','cmovg','cmovnle', - /* ALU instructions */ - 'add','sub','adc','sbb','neg','cmp','inc','dec','and','or','xor','not','test', - 'shl','shr','sal','sar','shld','shrd','rol','ror','rcl','rcr', - 'cbw','cwd','cwde','cdq','cdqe','cqo','bsf','bsr','bt','btc','btr','bts', - 'idiv','imul','div','mul','bswap','nop', - /* Memory instructions */ - 'lea','mov','movsx','movsxd','movzx','xlatb','bound','xchg','xadd','cmpxchg','cmpxchg8b','cmpxchg16b', - /* Stack instructions */ - 'push','pop','pusha','popa','pushad','popad','pushf','popf','pushfd','popfd','pushfq','popfq', - /* EFLAGS manipulations instructions */ - 'clc','cld','stc','std','cmc','lahf','sahf', - /* Prefix instructions */ - 'lock','rep','repe','repz','repne','repnz', - /* String instructions */ - 'cmps','cmpsb','cmpsw',/*'cmpsd',*/ 'cmpsq', /*CMPSD conflicts with the SSE2 instructions of the same name*/ - 'movs','movsb','movsw',/*'movsd',*/ 'movsq', /*MOVSD conflicts with the SSE2 instructions of the same name*/ - 'scas','scasb','scasw','scasd','scasq', - 'stos','stosb','stosw','stosd','stosq', - 'lods','lodsb','lodsw','lodsd','lodsq', - /* Information instructions */ - 'cpuid','rdtsc','rdtscp','rdpmc','xgetbv', - 'sgdt','sidt','sldt','smsw','str','lar', - /* LWP instructions */ - 'llwpcb','slwpcb','lwpval','lwpins', - /* Instructions from miscellaneous extensions */ - 'crc32','popcnt','lzcnt','tzcnt','movbe','pclmulqdq','rdrand', - /* FSGSBASE instructions */ - 'rdfsbase','rdgsbase','wrfsbase','wrgsbase', - /* BMI1 instructions */ - 'andn','bextr','blsi','blsmk','blsr', - /* BMI2 instructions */ - 'bzhi','mulx','pdep','pext','rorx','sarx','shlx','shrx', - /* TBM instructions */ - 'blcfill','blci','blcic','blcmsk','blcs','blsfill','blsic','t1mskc','tzmsk', - /* Legacy instructions */ - 'arpl','ud2','lds','les','lfs','lgs','lss','lsl','verr','verw', - /* Privileged instructions */ - 'cli','sti','clts','hlt','rsm','in','insb','insw','insd', - 'out','outsb','outsw','outsd','clflush','invd','invlpg','invpcid','wbinvd', - 'iret','iretd','iretq','sysexit','sysret','lidt','lgdt','lldt','lmsw','ltr', - 'monitor','mwait','rdmsr','wrmsr','swapgs', - 'fxsave','fxsave64','fxrstor','fxrstor64', - 'xsave','xsaveopt','xrstor','xsetbv','getsec', - /* VMX instructions */ - 'invept','invvpid','vmcall','vmclear','vmlaunch','vmresume', - 'vmptrld','vmptrst','vmread','vmwrite','vmxoff','vmxon', - /* SVM (AMD-V) instructions */ - 'invlpga','skinit','clgi','stgi','vmload','vmsave','vmmcall','vmrun' - ), - /*FPU*/ - 2 => array( - 'f2xm1','fabs','fadd','faddp','fbld','fbstp','fchs','fclex','fcom','fcomp','fcompp','fdecstp', - 'fdisi','fdiv','fdivp','fdivr','fdivrp','feni','ffree','fiadd','ficom','ficomp','fidiv', - 'fidivr','fild','fimul','fincstp','finit','fist','fistp','fisub','fisubr','fld','fld1', - 'fldcw','fldenv','fldenvw','fldl2e','fldl2t','fldlg2','fldln2','fldpi','fldz','fmul', - 'fmulp','fnclex','fndisi','fneni','fninit','fnop','fnsave','fnsavew','fnstcw','fnstenv', - 'fnstenvw','fnstsw','fpatan','fprem','fptan','frndint','frstor','frstorw','fsave', - 'fsavew','fscale','fsqrt','fst','fstcw','fstenv','fstenvw','fstp','fstsw','fsub','fsubp', - 'fsubr','fsubrp','ftst','fwait','fxam','fxch','fxtract','fyl2x','fyl2xp1', - 'fsetpm','fcos','fldenvd','fnsaved','fnstenvd','fprem1','frstord','fsaved','fsin','fsincos', - 'fstenvd','fucom','fucomp','fucompp','ffreep', - /* FCMOV instructions */ - 'fcomi','fcomip','fucomi','fucomip', - 'fcmovb','fcmove','fcmovbe','fcmovu','fcmovnb','fcmovne','fcmovnbe','fcmovnu', - /* SSE3 instructions */ - 'fisttp' - ), - /*SIMD*/ - 3 => array( - /* MMX instructions */ - 'movd','movq', - 'paddb','paddw','paddd','paddsb','paddsw','paddusb','paddusw', - 'psubb','psubw','psubd','psubsb','psubsw','psubusb','psubusw', - 'pand','pandn','por','pxor', - 'pcmpeqb','pcmpeqd','pcmpeqw','pcmpgtb','pcmpgtd','pcmpgtw', - 'pmaddwd','pmulhw','pmullw', - 'psllw','pslld','psllq','psrlw','psrld','psrlq','psraw','psrad', - 'packuswb','packsswb','packssdw', - 'punpcklbw','punpcklwd','punpckldq','punpckhbw','punpckhwd','punpckhdq', - 'emms', - /* MMX+ instructions */ - 'pavgb','pavgw', - 'pextrw','pinsrw','pmovmskb', - 'pmaxsw','pmaxub','pminsw','pminub', - 'pmulhuw','psadbw','pshufw', - 'prefetchnta','prefetcht0','prefetcht1','prefetcht2', - 'maskmovq','movntq','sfence', - /* EMMX instructions (only available on Cyrix MediaGXm) */ - 'paddsiw','psubsiw', - /*'pmulhrw',*/'pmachriw','pmulhriw', /* PMULHRW conflicts with the 3dnow! instruction of the same name */ - 'pmagw','pdistib','paveb', - 'pmvzb','pmvnzb','pmvlzb','pmvgezb', - /* 3dnow! instructions! */ - 'pfacc','pfadd','pfsub','pfsubr','pfmul', - 'pfcmpeq','pfcmpge','pfcmpgt', - 'pfmax','pfmin', - 'pfrcp','pfrcpit1','pfrcpit2','pfrsqit1','pfrsqrt', - 'pi2fd','pf2id', - 'pavgusb','pmulhrw', - 'femms', - /* 3dnow!+ instructions */ - 'pfnacc','pfpnacc','pi2fw','pf2iw','pswapd', - /* 3dnow! Geode instructions */ - 'pfrsqrtv','pfrcpv', - /* 3dnow! Prefetch instructions */ - 'prefetch','prefetchw', - /* SSE instructions */ - 'addss','addps','subss','subps', - 'mulss','mulps','divss','divps','sqrtss','sqrtps', - 'rcpss','rcpps','rsqrtss','rsqrtps', - 'maxss','maxps','minss','minps', - 'cmpss','comiss','ucomiss','cmpps', - 'cmpeqss','cmpltss','cmpless','cmpunordss','cmpneqss','cmpnltss','cmpnless','cmpordss', - 'cmpeqps','cmpltps','cmpleps','cmpunordps','cmpneqps','cmpnltps','cmpnleps','cmpordps', - 'andnps','andps','orps','xorps', - 'cvtsi2ss','cvtss2si','cvttss2si', - 'cvtpi2ps','cvtps2pi','cvttps2pi', - 'movss','movlps','movhps','movlhps','movhlps','movaps','movups','movntps','movmskps', - 'shufps','unpckhps','unpcklps', - 'ldmxcsr','stmxcsr', - /* SSE2 instructions */ - 'addpd','addsd','subpd','subsd', - 'mulsd','mulpd','divsd','divpd','sqrtsd','sqrtpd', - 'maxsd','maxpd','minsd','minpd', - 'cmpsd','comisd','ucomisd','cmppd', - 'cmpeqsd','cmpltsd','cmplesd','cmpunordsd','cmpneqsd','cmpnltsd','cmpnlesd','cmpordsd', - 'cmpeqpd','cmpltpd','cmplepd','cmpunordpd','cmpneqpd','cmpnltpd','cmpnlepd','cmpordpd', - 'andnpd','andpd','orpd','xorpd', - 'cvtsd2ss','cvtpd2ps','cvtss2sd','cvtps2pd', - 'cvtdq2ps','cvtps2dq','cvttps2dq', - 'cvtdq2pd','cvtpd2dq','cvttpd2dq', - 'cvtsi2sd','cvtsd2si','cvttsd2si', - 'cvtpi2pd','cvtpd2pi','cvttpd2pi', - 'movsd','movlpd','movhpd','movapd','movupd','movntpd','movmskpd', - 'shufpd','unpckhpd','unpcklpd', - 'movnti','movdqa','movdqu','movntdq','maskmovdqu', - 'movdq2q','movq2dq', - 'paddq','psubq','pmuludq', - 'pslldq','psrldq', - 'punpcklqdq','punpckhqdq', - 'pshufhw','pshuflw','pshufd', - 'lfence','mfence', - /* SSE3 instructions */ - 'addsubps','addsubpd', - 'haddps','haddpd','hsubps','hsubpd', - 'movsldup','movshdup','movddup', - 'lddqu', - /* SSSE3 instructions */ - 'psignb','psignw','psignd', - 'pabsb','pabsw','pabsd', - 'palignr','pshufb', - 'pmulhrsw','pmaddubsw', - 'phaddw','phaddd','phaddsw', - 'phsubw','phsubd','phsubsw', - /* SSE4A instructions */ - 'extrq','insertq','movntsd','movntss', - /* SSE4.1 instructions */ - 'mpsadbw','phminposuw', - 'pmuldq','pmulld', - 'dpps','dppd', - 'blendps','blendpd','blendvps','blendvpd','pblendvb','pblendw', - 'pmaxsb','pmaxuw','pmaxsd','pmaxud','pminsb','pminuw','pminsd','pminud', - 'roundps','roundss','roundpd','roundsd', - 'insertps','pinsrb','pinsrd','pinsrq', - 'extractps','pextrb','pextrd','pextrq', - 'pmovsxbw','pmovsxbd','pmovsxbq','pmovsxwd','pmovsxwq','pmovsxdq', - 'pmovzxbw','pmovzxbd','pmovzxbq','pmovzxwd','pmovzxwq','pmovzxdq', - 'ptest', - 'pcmpeqq', - 'packusdw', - 'movntdqa', - /* SSE4.2 instructions */ - 'pcmpgtq', - 'pcmpestri','pcmpestrm','pcmpistri','pcmpistrm', - /* AES instructions */ - 'aesenc','aesenclast','aesdec','aesdeclast','aeskeygenassist','aesimc', - /* VIA Padlock instructions */ - 'xcryptcbc','xcryptcfb','xcryptctr','xcryptecb','xcryptofb', - 'xsha1','xsha256','montmul','xstore', - /* AVX instructions */ - 'vaddss','vaddps','vaddsd','vaddpd','vsubss','vsubps','vsubsd','vsubpd', - 'vaddsubps','vaddsubpd', - 'vhaddps','vhaddpd','vhsubps','vhsubpd', - 'vmulss','vmulps','vmulsd','vmulpd', - 'vmaxss','vmaxps','vmaxsd','vmaxpd','vminss','vminps','vminsd','vminpd', - 'vandps','vandpd','vandnps','vandnpd','vorps','vorpd','vxorps','vxorpd', - 'vblendps','vblendpd','vblendvps','vblendvpd', - 'vcmpss','vcomiss','vucomiss','vcmpsd','vcomisd','vucomisd','vcmpps','vcmppd', - 'vcmpeqss','vcmpltss','vcmpless','vcmpunordss','vcmpneqss','vcmpnltss','vcmpnless','vcmpordss', - 'vcmpeq_uqss','vcmpngess','vcmpngtss','vcmpfalsess','vcmpneq_oqss','vcmpgess','vcmpgtss','vcmptruess', - 'vcmpeq_osss','vcmplt_oqss','vcmple_oqss','vcmpunord_sss','vcmpneq_usss','vcmpnlt_uqss','vcmpnle_uqss','vcmpord_sss', - 'vcmpeq_usss','vcmpnge_uqss','vcmpngt_uqss','vcmpfalse_osss','vcmpneq_osss','vcmpge_oqss','vcmpgt_oqss','vcmptrue_usss', - 'vcmpeqps','vcmpltps','vcmpleps','vcmpunordps','vcmpneqps','vcmpnltps','vcmpnleps','vcmpordps', - 'vcmpeq_uqps','vcmpngeps','vcmpngtps','vcmpfalseps','vcmpneq_oqps','vcmpgeps','vcmpgtps','vcmptrueps', - 'vcmpeq_osps','vcmplt_oqps','vcmple_oqps','vcmpunord_sps','vcmpneq_usps','vcmpnlt_uqps','vcmpnle_uqps','vcmpord_sps', - 'vcmpeq_usps','vcmpnge_uqps','vcmpngt_uqps','vcmpfalse_osps','vcmpneq_osps','vcmpge_oqps','vcmpgt_oqps','vcmptrue_usps', - 'vcmpeqsd','vcmpltsd','vcmplesd','vcmpunordsd','vcmpneqsd','vcmpnltsd','vcmpnlesd','vcmpordsd', - 'vcmpeq_uqsd','vcmpngesd','vcmpngtsd','vcmpfalsesd','vcmpneq_oqsd','vcmpgesd','vcmpgtsd','vcmptruesd', - 'vcmpeq_ossd','vcmplt_oqsd','vcmple_oqsd','vcmpunord_ssd','vcmpneq_ussd','vcmpnlt_uqsd','vcmpnle_uqsd','vcmpord_ssd', - 'vcmpeq_ussd','vcmpnge_uqsd','vcmpngt_uqsd','vcmpfalse_ossd','vcmpneq_ossd','vcmpge_oqsd','vcmpgt_oqsd','vcmptrue_ussd', - 'vcmpeqpd','vcmpltpd','vcmplepd','vcmpunordpd','vcmpneqpd','vcmpnltpd','vcmpnlepd','vcmpordpd', - 'vcmpeq_uqpd','vcmpngepd','vcmpngtpd','vcmpfalsepd','vcmpneq_oqpd','vcmpgepd','vcmpgtpd','vcmptruepd', - 'vcmpeq_ospd','vcmplt_oqpd','vcmple_oqpd','vcmpunord_spd','vcmpneq_uspd','vcmpnlt_uqpd','vcmpnle_uqpd','vcmpord_spd', - 'vcmpeq_uspd','vcmpnge_uqpd','vcmpngt_uqpd','vcmpfalse_ospd','vcmpneq_ospd','vcmpge_oqpd','vcmpgt_oqpd','vcmptrue_uspd', - 'vcvtsd2ss','vcvtpd2ps','vcvtss2sd','vcvtps2pd', - 'vcvtsi2ss','vcvtss2si','vcvttss2si', - 'vcvtpi2ps','vcvtps2pi','vcvttps2pi', - 'vcvtdq2ps','vcvtps2dq','vcvttps2dq', - 'vcvtdq2pd','vcvtpd2dq','vcvttpd2dq', - 'vcvtsi2sd','vcvtsd2si','vcvttsd2si', - 'vcvtpi2pd','vcvtpd2pi','vcvttpd2pi', - 'vdivss','vdivps','vdivsd','vdivpd','vsqrtss','vsqrtps','vsqrtsd','vsqrtpd', - 'vdpps','vdppd', - 'vmaskmovps','vmaskmovpd', - 'vmovss','vmovsd','vmovaps','vmovapd','vmovups','vmovupd','vmovntps','vmovntpd', - 'vmovhlps','vmovlhps','vmovlps','vmovlpd','vmovhps','vmovhpd', - 'vmovsldup','vmovshdup','vmovddup', - 'vmovmskps','vmovmskpd', - 'vroundss','vroundps','vroundsd','vroundpd', - 'vrcpss','vrcpps','vrsqrtss','vrsqrtps', - 'vunpcklps','vunpckhps','vunpcklpd','vunpckhpd', - 'vbroadcastss','vbroadcastsd','vbroadcastf128', - 'vextractps','vinsertps','vextractf128','vinsertf128', - 'vshufps','vshufpd','vpermilps','vpermilpd','vperm2f128', - 'vtestps','vtestpd', - 'vpaddb','vpaddusb','vpaddsb','vpaddw','vpaddusw','vpaddsw','vpaddd','vpaddq', - 'vpsubb','vpsubusb','vpsubsb','vpsubw','vpsubusw','vpsubsw','vpsubd','vpsubq', - 'vphaddw','vphaddsw','vphaddd','vphsubw','vphsubsw','vphsubd', - 'vpsllw','vpslld','vpsllq','vpsrlw','vpsrld','vpsrlq','vpsraw','vpsrad', - 'vpand','vpandn','vpor','vpxor', - 'vpblendwb','vpblendw', - 'vpsignb','vpsignw','vpsignd', - 'vpavgb','vpavgw', - 'vpabsb','vpabsw','vpabsd', - 'vmovd','vmovq','vmovdqa','vmovdqu','vlddqu','vmovntdq','vmovntdqa','vmaskmovdqu', - 'vpmovsxbw','vpmovsxbd','vpmovsxbq','vpmovsxwd','vpmovsxwq','vpmovsxdq', - 'vpmovzxbw','vpmovzxbd','vpmovzxbq','vpmovzxwd','vpmovzxwq','vpmovzxdq', - 'vpackuswb','vpacksswb','vpackusdw','vpackssdw', - 'vpcmpeqb','vpcmpeqw','vpcmpeqd','vpcmpeqq','vpcmpgtb','vpcmpgtw','vpcmpgtd','vpcmpgtq', - 'vpmaddubsw','vpmaddwd', - 'vpmullw','vpmulhuw','vpmulhw','vpmulhrsw','vpmulld','vpmuludq','vpmuldq', - 'vpmaxub','vpmaxsb','vpmaxuw','vpmaxsw','vpmaxud','vpmaxsd', - 'vpminub','vpminsb','vpminuw','vpminsw','vpminud','vpminsd', - 'vpmovmskb','vptest', - 'vpunpcklbw','vpunpcklwd','vpunpckldq','vpunpcklqdq', - 'vpunpckhbw','vpunpckhwd','vpunpckhdq','vpunpckhqdq', - 'vpslldq','vpsrldq','vpalignr', - 'vpshufb','vpshuflw','vpshufhw','vpshufd', - 'vpextrb','vpextrw','vpextrd','vpextrq','vpinsrb','vpinsrw','vpinsrd','vpinsrq', - 'vpsadbw','vmpsadbw','vphminposuw', - 'vpcmpestri','vpcmpestrm','vpcmpistri','vpcmpistrm', - 'vpclmulqdq','vaesenc','vaesenclast','vaesdec','vaesdeclast','vaeskeygenassist','vaesimc', - 'vldmxcsr','vstmxcsr','vzeroall','vzeroupper', - /* AVX2 instructions */ - 'vbroadcasti128','vpbroadcastb','vpbroadcastw','vpbroadcastd','vpbroadcastq', - 'vpblendd', - 'vpermd','vpermq','vperm2i128', - 'vextracti128','vinserti128', - 'vpmaskmovd','vpmaskmovq', - 'vpsllvd','vpsllvq','vpsravd','vpsrlvd', - 'vpgatherdd','vpgatherqd','vgatherdq','vgatherqq', - 'vpermps','vpermpd', - 'vgatherdpd','vgatherqpd','vgatherdps','vgatherqps', - /* XOP instructions */ - 'vfrczss','vfrczps','vfrczsd','vfrczpd', - 'vpermil2ps','vperlil2pd', - 'vpcomub','vpcomb','vpcomuw','vpcomw','vpcomud','vpcomd','vpcomuq','vpcomq', - 'vphaddubw','vphaddbw','vphaddubd','vphaddbd','vphaddubq','vphaddbq', - 'vphadduwd','vphaddwd','vphadduwq','vphaddwq','vphaddudq','vphadddq', - 'vphsubbw','vphsubwd','vphsubdq', - 'vpmacsdd','vpmacssdd','vpmacsdql','vpmacssdql','vpmacsdqh','vpmacssdqh', - 'vpmacsww','vpmacssww','vpmacswd','vpmacsswd', - 'vpmadcswd','vpmadcsswd', - 'vpcmov','vpperm', - 'vprotb','vprotw','vprotd','vprotq', - 'vpshab','vpshaw','vpshad','vpshaq', - 'vpshlb','vpshlw','vpshld','vpshlq', - /* CVT16 instructions */ - 'vcvtph2ps','vcvtps2ph', - /* FMA4 instructions */ - 'vfmaddss','vfmaddps','vfmaddsd','vfmaddpd', - 'vfmsubss','vfmsubps','vfmsubsd','vfmsubpd', - 'vnfmaddss','vnfmaddps','vnfmaddsd','vnfmaddpd', - 'vnfmsubss','vnfmsubps','vnfmsubsd','vnfmsubpd', - 'vfmaddsubps','vfmaddsubpd','vfmsubaddps','vfmsubaddpd', - /* FMA3 instructions */ - 'vfmadd132ss','vfmadd213ss','vfmadd231ss', - 'vfmadd132ps','vfmadd213ps','vfmadd231ps', - 'vfmadd132sd','vfmadd213sd','vfmadd231sd', - 'vfmadd132pd','vfmadd213pd','vfmadd231pd', - 'vfmaddsub132ps','vfmaddsub213ps','vfmaddsub231ps', - 'vfmaddsub132pd','vfmaddsub213pd','vfmaddsub231pd', - 'vfmsubadd132ps','vfmsubadd213ps','vfmsubadd231ps', - 'vfmsubadd132pd','vfmsubadd213pd','vfmsubadd231pd', - 'vfmsub132ss','vfmsub213ss','vfmsub231ss', - 'vfmsub132ps','vfmsub213ps','vfmsub231ps', - 'vfmsub132sd','vfmsub213sd','vfmsub231sd', - 'vfmsub132pd','vfmsub213pd','vfmsub231pd', - 'vfnmadd132ss','vfnmadd213ss','vfnmadd231ss', - 'vfnmadd132ps','vfnmadd213ps','vfnmadd231ps', - 'vfnmadd132sd','vfnmadd213sd','vfnmadd231sd', - 'vfnmadd132pd','vfnmadd213pd','vfnmadd231pd', - 'vfnmsub132ss','vfnmsub213ss','vfnmsub231ss', - 'vfnmsub132ps','vfnmsub213ps','vfnmsub231ps', - 'vfnmsub132sd','vfnmsub213sd','vfnmsub231sd', - 'vfnmsub132pd','vfnmsub213pd','vfnmsub231pd' - ), - /*registers*/ - 4 => array( - /* General-Purpose Registers */ - 'al','ah','bl','bh','cl','ch','dl','dh','sil','dil','bpl','spl', - 'r8b','r9b','r10b','r11b','r12b','r13b','r14b','r15b', - 'ax','bx','cx','dx','si','di','bp','sp', - 'r8w','r9w','r10w','r11w','r12w','r13w','r14w','r15w', - 'eax','ebx','ecx','edx','esi','edi','ebp','esp', - 'r8d','r9d','r10d','r11d','r12d','r13d','r14d','r15d', - 'rax','rcx','rdx','rbx','rsp','rbp','rsi','rdi', - 'r8','r9','r10','r11','r12','r13','r14','r15', - /* Debug Registers */ - 'dr0','dr1','dr2','dr3','dr6','dr7', - /* Control Registers */ - 'cr0','cr2','cr3','cr4','cr8', - /* Test Registers (Supported on Intel 486 only) */ - 'tr3','tr4','tr5','tr6','tr7', - /* Segment Registers */ - 'cs','ds','es','fs','gs','ss', - /* FPU Registers */ - 'st','st0','st1','st2','st3','st4','st5','st6','st7', - /* MMX Registers */ - 'mm0','mm1','mm2','mm3','mm4','mm5','mm6','mm7', - /* SSE Registers */ - 'xmm0','xmm1','xmm2','xmm3','xmm4','xmm5','xmm6','xmm7', - 'xmm8','xmm9','xmm10','xmm11','xmm12','xmm13','xmm14','xmm15', - /* AVX Registers */ - 'ymm0','ymm1','ymm2','ymm3','ymm4','ymm5','ymm6','ymm7', - 'ymm8','ymm9','ymm10','ymm11','ymm12','ymm13','ymm14','ymm15' - ), - /*Directive*/ - 5 => array( - 'db','dw','dd','dq','dt','do','dy', - 'resb','resw','resd','resq','rest','reso','resy','incbin','equ','times','safeseh', - '__utf16__','__utf32__', - 'default','cpu','float','start','imagebase','osabi', - '..start','..imagebase','..gotpc','..gotoff','..gottpoff','..got','..plt','..sym','..tlsie', - 'section','segment','__sect__','group','absolute', - '.bss','.comment','.data','.lbss','.ldata','.lrodata','.rdata','.rodata','.tbss','.tdata','.text', - 'alloc','bss','code','exec','data','noalloc','nobits','noexec','nowrite','progbits','rdata','tls','write', - 'private','public','common','stack','overlay','class', - 'extern','global','import','export', - '%define','%idefine','%xdefine','%ixdefine','%assign','%undef', - '%defstr','%idefstr','%deftok','%ideftok', - '%strcat','%strlen','%substr', - '%macro','%imacro','%rmacro','%exitmacro','%endmacro','%unmacro', - '%if','%ifn','%elif','%elifn','%else','%endif', - '%ifdef','%ifndef','%elifdef','%elifndef', - '%ifmacro','%ifnmacro','%elifmacro','%elifnmacro', - '%ifctx','%ifnctx','%elifctx','%elifnctx', - '%ifidn','%ifnidn','%elifidn','%elifnidn', - '%ifidni','%ifnidni','%elifidni','%elifnidni', - '%ifid','%ifnid','%elifid','%elifnid', - '%ifnum','%ifnnum','%elifnum','%elifnnum', - '%ifstr','%ifnstr','%elifstr','%elifnstr', - '%iftoken','%ifntoken','%eliftoken','%elifntoken', - '%ifempty','%ifnempty','%elifempty','%elifnempty', - '%ifenv','%ifnenv','%elifenv','%elifnenv', - '%rep','%exitrep','%endrep', - '%while','%exitwhile','%endwhile', - '%include','%pathsearch','%depend','%use', - '%push','%pop','%repl','%arg','%local','%stacksize','flat','flat64','large','small', - '%error','%warning','%fatal', - '%00','.nolist','%rotate','%line','%!','%final','%clear', - 'struc','endstruc','istruc','at','iend', - 'align','alignb','sectalign', - 'bits','use16','use32','use64', - '__nasm_major__','__nasm_minor__','__nasm_subminor__','___nasm_patchlevel__', - '__nasm_version_id__','__nasm_ver__', - '__file__','__line__','__pass__','__bits__','__output_format__', - '__date__','__time__','__date_num__','__time_num__','__posix_time__', - '__utc_date__','__utc_time__','__utc_date_num__','__utc_time_num__', - '__float_daz__','__float_round__','__float__', - /* Keywords from standard packages */ - '__use_altreg__', - '__use_smartalign__','smartalign','__alignmode__', - '__use_fp__','__infinity__','__nan__','__qnan__','__snan__', - '__float8__','__float16__','__float32__','__float64__','__float80m__','__float80e__','__float128l__','__float128h__' - ), - /*Operands*/ - 6 => array( - 'a16','a32','a64','o16','o32','o64','strict', - 'byte','word','dword','qword','tword','oword','yword','nosplit', - '%0','%1','%2','%3','%4','%5','%6','%7','%8','%9', - 'abs','rel', - 'seg','wrt' - ) - ), - 'SYMBOLS' => array( - 1 => array( - '[', ']', '(', ')', - '+', '-', '*', '/', '%', - '.', ',', ';', ':' - ), - 2 => array( - '$','$$','%+','%?','%??' - ) - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00007f; font-weight: bold;', - 2 => 'color: #0000ff;', - 3 => 'color: #b00040;', - 4 => 'color: #46aa03; font-weight: bold;', - 5 => 'color: #0000ff; font-weight: bold;', - 6 => 'color: #0000ff; font-weight: bold;' - ), - 'COMMENTS' => array( - 1 => 'color: #666666; font-style: italic;', - 2 => 'color: #adadad; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #009900; font-weight: bold;' - ), - 'STRINGS' => array( - 0 => 'color: #7f007f;' - ), - 'NUMBERS' => array( - 0 => 'color: #ff0000;' - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 1 => 'color: #339933;', - 2 => 'color: #0000ff; font-weight: bold;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '' - ), - 'NUMBERS' => - GESHI_NUMBER_BIN_PREFIX_PERCENT | - GESHI_NUMBER_BIN_SUFFIX | - GESHI_NUMBER_HEX_PREFIX | - GESHI_NUMBER_HEX_SUFFIX | - GESHI_NUMBER_OCT_SUFFIX | - GESHI_NUMBER_INT_BASIC | - GESHI_NUMBER_FLT_NONSCI | - GESHI_NUMBER_FLT_NONSCI_F | - GESHI_NUMBER_FLT_SCI_ZERO, - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 8, - 'PARSER_CONTROL' => array( - 'KEYWORDS' => array( - 'DISALLOWED_BEFORE' => "(?|^])", - 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%])" - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php deleted file mode 100644 index c68ba07b..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php +++ /dev/null @@ -1,162 +0,0 @@ - 'ASP', - 'COMMENT_SINGLE' => array(1 => "'", 2 => '//'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - 'include', 'file', 'Const', 'Dim', 'Option', 'Explicit', 'Implicit', 'Set', 'Select', 'ReDim', 'Preserve', - 'ByVal', 'ByRef', 'End', 'Private', 'Public', 'If', 'Then', 'Else', 'ElseIf', 'Case', 'With', 'NOT', - 'While', 'Wend', 'For', 'Loop', 'Do', 'Request', 'Response', 'Server', 'ADODB', 'Session', 'Application', - 'Each', 'In', 'Get', 'Next', 'INT', 'CINT', 'CBOOL', 'CDATE', 'CBYTE', 'CCUR', 'CDBL', 'CLNG', 'CSNG', - 'CSTR', 'Fix', 'Is', 'Sgn', 'String', 'Boolean', 'Currency', 'Me', 'Single', 'Long', 'Integer', 'Byte', - 'Variant', 'Double', 'To', 'Let', 'Xor', 'Resume', 'On', 'Error', 'Imp', 'GoTo', 'Call', 'Global' - ), - 2 => array( - 'Null', 'Nothing', 'And', - 'False', - 'True', 'var', 'Or', 'BOF', 'EOF', 'xor', - 'Function', 'Class', 'New', 'Sub' - ), - 3 => array( - 'CreateObject', 'Write', 'Redirect', 'Cookies', 'BinaryRead', 'ClientCertificate', 'Form', 'QueryString', - 'ServerVariables', 'TotalBytes', 'AddHeader', 'AppendToLog', 'BinaryWrite', 'Buffer', 'CacheControl', - 'Charset', 'Clear', 'ContentType', 'End()', 'Expires', 'ExpiresAbsolute', 'Flush()', 'IsClientConnected', - 'PICS', 'Status', 'Connection', 'Recordset', 'Execute', 'Abandon', 'Lock', 'UnLock', 'Command', 'Fields', - 'Properties', 'Property', 'Send', 'Replace', 'InStr', 'TRIM', 'NOW', 'Day', 'Month', 'Hour', 'Minute', 'Second', - 'Year', 'MonthName', 'LCase', 'UCase', 'Abs', 'Array', 'As', 'LEN', 'MoveFirst', 'MoveLast', 'MovePrevious', - 'MoveNext', 'LBound', 'UBound', 'Transfer', 'Open', 'Close', 'MapPath', 'FileExists', 'OpenTextFile', 'ReadAll' - ) - ), - 'SYMBOLS' => array( - 1 => array( - '<%', '%>' - ), - 0 => array( - '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', - ';', ':', '?', '='), - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #990099; font-weight: bold;', - 2 => 'color: #0000ff; font-weight: bold;', - 3 => 'color: #330066;' - ), - 'COMMENTS' => array( - 1 => 'color: #008000;', - 2 => 'color: #ff6600;', - 'MULTI' => 'color: #008000;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #006600; font-weight:bold;' - ), - 'STRINGS' => array( - 0 => 'color: #cc0000;' - ), - 'NUMBERS' => array( - 0 => 'color: #800000;' - ), - 'METHODS' => array( - 1 => 'color: #9900cc;' - ), - 'SYMBOLS' => array( - 0 => 'color: #006600; font-weight: bold;', - 1 => 'color: #000000; font-weight: bold;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - 0 => '', - 1 => '', - 2 => '', - 3 => '' - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_MAYBE, - 'SCRIPT_DELIMITERS' => array( - 0 => array( - '<%' => '%>' - ), - 1 => array( - '' - ), - 2 => array( - '' - ), - 3 => "/(?P<%=?)(?:\"[^\"]*?\"|\/\*(?!\*\/).*?\*\/|.)*?(?P%>|\Z)/sm" - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - 0 => true, - 1 => true, - 2 => true, - 3 => true - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php deleted file mode 100644 index 1c5c56a1..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php +++ /dev/null @@ -1,192 +0,0 @@ - 'asymptote', - 'COMMENT_SINGLE' => array(1 => '//'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'COMMENT_REGEXP' => array( - //Multiline-continued single-line comments - 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m', - //Multiline-continued preprocessor define - 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m' - ), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'ESCAPE_REGEXP' => array( - //Simple Single Char Escapes - 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i", - //Hexadecimal Char Specs - 2 => "#\\\\x[\da-fA-F]{2}#", - //Hexadecimal Char Specs - 3 => "#\\\\u[\da-fA-F]{4}#", - //Hexadecimal Char Specs - 4 => "#\\\\U[\da-fA-F]{8}#", - //Octal Char Specs - 5 => "#\\\\[0-7]{1,3}#" - ), - 'NUMBERS' => - GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B | - GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI | - GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO, - 'KEYWORDS' => array( - 1 => array( - 'and','controls','tension','atleast','curl','if','else','while','for','do','return','break','continue','struct','typedef','new','access','import','unravel','from','include','quote','static','public','private','restricted','this','explicit','true','false','null','cycle','newframe','operator' - ), - 2 => array( - 'Braid','FitResult','Label','Legend','Segment','Solution','TreeNode','abscissa','arc','arrowhead','binarytree','binarytreeNode','block','bool','bool3','bounds','bqe','circle','conic','coord','coordsys','cputime','ellipse','file','filltype','frame','grid3','guide','horner','hsv','hyperbola','indexedTransform','int','inversion','key','light','line','linefit','marginT','marker','mass','object','pair','parabola','path','path3','pen','picture','point','position','projection','real','revolution','scaleT','scientific','segment','side','slice','solution','splitface','string','surface','tensionSpecifier','ticklocate','ticksgridT','tickvalues','transform','transformation','tree','triangle','trilinear','triple','vector','vertex','void'), - 3 => array( - 'AND','Arc','ArcArrow','ArcArrows','Arrow','Arrows','Automatic','AvantGarde','BBox','BWRainbow','BWRainbow2','Bar','Bars','BeginArcArrow','BeginArrow','BeginBar','BeginDotMargin','BeginMargin','BeginPenMargin','Blank','Bookman','Bottom','BottomTop','Bounds','Break','Broken','BrokenLog','CLZ','CTZ','Ceil','Circle','CircleBarIntervalMarker','Cos','Courier','CrossIntervalMarker','DOSendl','DOSnewl','DefaultFormat','DefaultLogFormat','Degrees','Dir','DotMargin','DotMargins','Dotted','Draw','Drawline','Embed','EndArcArrow','EndArrow','EndBar','EndDotMargin','EndMargin','EndPenMargin','Fill','FillDraw','Floor','Format','Full','Gaussian','Gaussrand','Gaussrandpair', - 'Gradient','Grayscale','Helvetica','Hermite','HookHead','InOutTicks','InTicks','Jn','Label','Landscape','Left','LeftRight','LeftTicks','Legend','Linear','Link','Log','LogFormat','Margin','Margins','Mark','MidArcArrow','MidArrow','NOT','NewCenturySchoolBook','NoBox','NoMargin','NoModifier','NoTicks','NoTicks3','NoZero','NoZeroFormat','None','OR','OmitFormat','OmitTick','OmitTickInterval','OmitTickIntervals','OutTicks','Ox','Oy','Palatino','PaletteTicks','Pen','PenMargin','PenMargins','Pentype','Portrait','RadialShade','RadialShadeDraw','Rainbow','Range','Relative','Right','RightTicks','Rotate','Round','SQR','Scale','ScaleX','ScaleY','ScaleZ','Seascape','Segment','Shift','Sin','Slant','Spline','StickIntervalMarker','Straight','Symbol','Tan','TeXify','Ticks','Ticks3','TildeIntervalMarker','TimesRoman','Top','TrueMargin','UnFill','UpsideDown','Wheel','X','XEquals','XOR','XY','XYEquals','XYZero','XYgrid','XZEquals','XZZero','XZero','XZgrid','Y','YEquals','YXgrid','YZ','YZEquals','YZZero','YZero','YZgrid','Yn','Z','ZX','ZXgrid','ZYgrid','ZapfChancery','ZapfDingbats','_begingroup3','_cputime','_draw','_eval','_image','_labelpath','_projection','_strokepath','_texpath','aCos','aSin','aTan','abort','abs','accel','acos','acosh','acot','acsc','activatequote','add', - 'addArrow','addMargins','addSaveFunction','addpenarc','addpenline','adjust','alias','align','all','altitude','angabscissa','angle','angpoint','animate','annotate','anticomplementary','antipedal','apply','approximate','arc','arcarrowsize','arccircle','arcdir','arcfromcenter','arcfromfocus','arclength','arcnodesnumber','arcpoint','arcsubtended','arcsubtendedcenter','arctime','arctopath','array','arrow','arrow2','arrowbase','arrowbasepoints','arrowsize','asec','asin','asinh','ask','assert','asy','asycode','asydir','asyfigure','asyfilecode','asyinclude','asywrite','atan','atan2','atanh','atbreakpoint','atexit','attach','attract','atupdate','autoformat','autoscale','autoscale3','axes','axes3','axialshade','axis','axiscoverage','azimuth','babel','background','bangles','bar','barmarksize','barsize','basealign','baseline','bbox','beep','begin','beginclip','begingroup','beginpoint','between','bevel','bezier','bezierP','bezierPP','bezierPPP','bezulate','bibliography','bibliographystyle','binarytree','binarytreeNode','binomial','binput','bins','bisector','bisectorpoint','bispline','blend','blockconnector','boutput','box','bqe','breakpoint','breakpoints','brick','buildRestoreDefaults','buildRestoreThunk','buildcycle','bulletcolor','byte','calculateScaling','canonical','canonicalcartesiansystem','cartesiansystem','case1','case2','case3','case4','cbrt','cd','ceil','center','centerToFocus', - 'centroid','cevian','change2','changecoordsys','checkSegment','checkconditionlength','checker','checkincreasing','checklengths','checkposition','checktriangle','choose','circle','circlebarframe','circlemarkradius','circlenodesnumber','circumcenter','circumcircle','clamped','clear','clip','clipdraw','close','cmyk','code','colatitude','collect','collinear','color','colorless','colors','colorspace','comma','compassmark','complement','complementary','concat','concurrent','cone','conic','conicnodesnumber','conictype','conj','connect','connected','connectedindex','containmentTree','contains','contour','contour3','contouredges','controlSpecifier','convert','coordinates','coordsys','copy','copyPairOrTriple','cos','cosh','cot','countIntersections','cputime','crop','cropcode','cross', - 'crossframe','crosshatch','crossmarksize','csc','cubicroots','curabscissa','curlSpecifier','curpoint','currentarrow','currentexitfunction','currentmomarrow','currentpolarconicroutine','curve','cut','cutafter','cutbefore','cyclic','cylinder','deactivatequote','debugger','deconstruct','defaultdir','defaultformat','defaultpen','defined','degenerate','degrees','delete','deletepreamble','determinant','diagonal','diamond','diffdiv','dir','dirSpecifier','dirtime','display','distance', - 'divisors','do_overpaint','dot','dotframe','dotsize','downcase','draw','drawAll','drawDoubleLine','drawFermion','drawGhost','drawGluon','drawMomArrow','drawPRCcylinder','drawPRCdisk','drawPRCsphere','drawPRCtube','drawPhoton','drawScalar','drawVertex','drawVertexBox','drawVertexBoxO','drawVertexBoxX','drawVertexO','drawVertexOX','drawVertexTriangle','drawVertexTriangleO','drawVertexX','drawarrow','drawarrow2','drawline','drawpixel','drawtick','duplicate','elle','ellipse','ellipsenodesnumber','embed','embed3','empty','enclose','end','endScript','endclip','endgroup','endgroup3','endl','endpoint','endpoints','eof','eol','equation','equations','erase','erasestep','erf','erfc','error','errorbar','errorbars','eval','excenter','excircle','exit','exitXasyMode','exitfunction','exp','expfactors','expi','expm1','exradius','extend','extension','extouch','fabs','factorial','fermat','fft','fhorner','figure','file','filecode','fill','filldraw','filloutside','fillrule','filltype','find','finite','finiteDifferenceJacobian','firstcut','firstframe','fit','fit2','fixedscaling','floor','flush','fmdefaults','fmod','focusToCenter','font','fontcommand','fontsize','foot','format','frac','frequency','fromCenter','fromFocus','fspline','functionshade','gamma','generate_random_backtrace','generateticks','gergonne','getc','getint','getpair','getreal','getstring','gettriple','gluon','gouraudshade','graph','graphic','gray','grestore','grid','grid3','gsave','halfbox','hatch','hdiffdiv','hermite','hex','histogram','history','hline','hprojection', - 'hsv','hyperbola','hyperbolanodesnumber','hyperlink','hypot','identity','image','incenter','incentral','incircle','increasing','incrementposition','indexedTransform','indexedfigure','initXasyMode','initdefaults','input','inradius','insert','inside','integrate','interactive','interior','interp','interpolate','intersect','intersection','intersectionpoint','intersectionpoints','intersections','intouch','inverse','inversion','invisible','is3D','isCCW','isDuplicate','isogonal','isogonalconjugate','isotomic','isotomicconjugate','isparabola','italic','item','jobname','key','kurtosis','kurtosisexcess','label','labelaxis','labelmargin','labelpath','labels','labeltick','labelx','labelx3','labely','labely3','labelz','labelz3','lastcut','latex','latitude','latticeshade','layer','layout','ldexp','leastsquares','legend','legenditem','length','lexorder','lift','light','limits','line','linear','linecap','lineinversion','linejoin','linemargin','lineskip','linetype','linewidth','link','list','lm_enorm','lm_evaluate_default','lm_lmdif','lm_lmpar','lm_minimize','lm_print_default','lm_print_quiet','lm_qrfac','lm_qrsolv','locale','locate', - 'locatefile','location','log','log10','log1p','logaxiscoverage','longitude','lookup','makeNode','makedraw','makepen','map','margin','markangle','markangleradius','markanglespace','markarc','marker','markinterval','marknodes','markrightangle','markuniform','mass','masscenter','massformat','math','max','max3','maxAfterTransform','maxbezier','maxbound','maxcoords','maxlength','maxratio','maxtimes','mean','medial','median','midpoint','min','min3','minAfterTransform','minbezier','minbound','minipage','minratio','mintimes','miterlimit','mktemp','momArrowPath','momarrowsize','monotonic','multifigure','nativeformat','natural','needshipout','newl','newpage','newslide','newton','newtree','nextframe','nextnormal','nextpage','nib','nodabscissa','none','norm','normalvideo','notaknot','nowarn','numberpage','nurb','object','offset','onpath','opacity','opposite','orientation','origin','orthic','orthocentercenter','outformat','outline','outname','outprefix','output','overloadedMessage','overwrite','pack','pad','pairs','palette','parabola','parabolanodesnumber','parallel','parallelogram','partialsum','path','path3','pattern','pause','pdf','pedal','periodic','perp','perpendicular','perpendicularmark','phantom','phi1','phi2','phi3','photon','piecewisestraight','point','polar','polarconicroutine','polargraph','polygon','postcontrol','postscript','pow10','ppoint','prc','prc0','precision','precontrol','prepend','printBytecode','print_random_addresses','project','projection','purge','pwhermite','quadrant','quadraticroots','quantize','quarticroots','quotient','radialshade','radians','radicalcenter','radicalline','radius','rand','randompath','rd','readline','realmult','realquarticroots','rectangle','rectangular','rectify','reflect','relabscissa','relative','relativedistance','reldir','relpoint','reltime','remainder','remark','removeDuplicates','rename','replace','report','resetdefaultpen','restore','restoredefaults','reverse','reversevideo','rf','rfind','rgb','rgba','rgbint','rms', - 'rotate','rotateO','rotation','round','roundbox','roundedpath','roundrectangle','same','samecoordsys','sameside','sample','save','savedefaults','saveline','scale','scale3','scaleO','scaleT','scaleless','scientific','search','searchindex','searchtree','sec','secondaryX','secondaryY','seconds','section','sector','seek','seekeof','segment','sequence','setcontour','setpens','sgn','sgnd','sharpangle','sharpdegrees','shift','shiftless','shipout','shipout3','show','side','simeq','simpson','sin','sinh','size','size3','skewness','skip','slant','sleep','slope','slopefield','solve','solveBVP','sort','sourceline','sphere','split','sqrt','square','srand','standardizecoordsys','startScript','stdev','step','stickframe','stickmarksize','stickmarkspace','stop','straight','straightness','string','stripdirectory','stripextension','stripfile','stripsuffix','strokepath','subdivide','subitem','subpath','substr','sum','surface','symmedial','symmedian','system', - 'tab','tableau','tan','tangent','tangential','tangents','tanh','tell','tensionSpecifier','tensorshade','tex','texcolor','texify','texpath','texpreamble','texreset','texshipout','texsize','textpath','thick','thin','tick','tickMax','tickMax3','tickMin','tickMin3','ticklabelshift','ticklocate','tildeframe','tildemarksize','tile','tiling','time','times','title','titlepage','topbox','transform','transformation','transpose','trembleFuzz','triangle','triangleAbc','triangleabc','triangulate','tricoef','tridiagonal','trilinear','trim','truepoint','tube','uncycle','unfill','uniform','unique','unit','unitrand','unitsize','unityroot','unstraighten','upcase','updatefunction','uperiodic','upscale','uptodate','usepackage','usersetting','usetypescript','usleep','value','variance','variancebiased','vbox','vector','vectorfield','verbatim','view','vline','vperiodic','vprojection','warn','warning','windingnumber','write','xaxis','xaxis3','xaxis3At','xaxisAt','xequals','xinput','xlimits','xoutput','xpart','xscale','xscaleO','xtick','xtick3','xtrans','yaxis','yaxis3','yaxis3At','yaxisAt','yequals','ylimits','ypart','yscale','yscaleO','ytick','ytick3','ytrans','zaxis3','zaxis3At','zero','zero3','zlimits','zpart','ztick','ztick3','ztrans' - ), - 4 => array( - 'AliceBlue','Align','Allow','AntiqueWhite','Apricot','Aqua','Aquamarine','Aspect','Azure','BeginPoint','Beige','Bisque','Bittersweet','Black','BlanchedAlmond','Blue','BlueGreen','BlueViolet','Both','Break','BrickRed','Brown','BurlyWood','BurntOrange','CCW','CW','CadetBlue','CarnationPink','Center','Centered','Cerulean','Chartreuse','Chocolate','Coeff','Coral','CornflowerBlue','Cornsilk','Crimson','Crop','Cyan','Dandelion','DarkBlue','DarkCyan','DarkGoldenrod','DarkGray','DarkGreen','DarkKhaki','DarkMagenta','DarkOliveGreen','DarkOrange','DarkOrchid','DarkRed','DarkSalmon','DarkSeaGreen','DarkSlateBlue','DarkSlateGray','DarkTurquoise','DarkViolet','DeepPink','DeepSkyBlue','DefaultHead','DimGray','DodgerBlue','Dotted','Down','Draw','E','ENE','EPS','ESE','E_Euler','E_PC','E_RK2','E_RK3BS','Emerald','EndPoint','Euler','Fill','FillDraw','FireBrick','FloralWhite','ForestGreen','Fuchsia','Gainsboro','GhostWhite','Gold','Goldenrod','Gray','Green','GreenYellow','Honeydew','HookHead','Horizontal','HotPink','I','IgnoreAspect','IndianRed','Indigo','Ivory','JOIN_IN','JOIN_OUT','JungleGreen','Khaki','LM_DWARF','LM_MACHEP','LM_SQRT_DWARF','LM_SQRT_GIANT','LM_USERTOL','Label','Lavender','LavenderBlush','LawnGreen','Left','LeftJustified','LeftSide','LemonChiffon','LightBlue','LightCoral','LightCyan','LightGoldenrodYellow', - 'LightGreen','LightGrey','LightPink','LightSalmon','LightSeaGreen','LightSkyBlue','LightSlateGray','LightSteelBlue','LightYellow','Lime','LimeGreen','Linear','Linen','Log','Logarithmic','Magenta','Mahogany','Mark','MarkFill','Maroon','Max','MediumAquamarine','MediumBlue','MediumOrchid','MediumPurple','MediumSeaGreen','MediumSlateBlue','MediumSpringGreen','MediumTurquoise','MediumVioletRed','Melon','MidPoint','MidnightBlue','Min','MintCream','MistyRose','Moccasin','Move','MoveQuiet','Mulberry','N','NE','NNE','NNW','NW','NavajoWhite','Navy','NavyBlue','NoAlign','NoCrop','NoFill','NoSide','OldLace','Olive','OliveDrab','OliveGreen','Orange','OrangeRed','Orchid','Ox','Oy','PC','PaleGoldenrod','PaleGreen','PaleTurquoise','PaleVioletRed','PapayaWhip','Peach','PeachPuff','Periwinkle','Peru','PineGreen','Pink','Plum','PowderBlue','ProcessBlue','Purple','RK2','RK3','RK3BS','RK4','RK5','RK5DP','RK5F','RawSienna','Red','RedOrange','RedViolet','Rhodamine','Right','RightJustified','RightSide','RosyBrown','RoyalBlue','RoyalPurple','RubineRed','S','SE','SSE','SSW','SW','SaddleBrown','Salmon','SandyBrown','SeaGreen','Seashell','Sepia','Sienna','Silver','SimpleHead','SkyBlue','SlateBlue','SlateGray','Snow','SpringGreen','SteelBlue','Suppress','SuppressQuiet','Tan','TeXHead','Teal','TealBlue','Thistle','Ticksize','Tomato', - 'Turquoise','UnFill','Up','VERSION','Value','Vertical','Violet','VioletRed','W','WNW','WSW','Wheat','White','WhiteSmoke','WildStrawberry','XYAlign','YAlign','Yellow','YellowGreen','YellowOrange','addpenarc','addpenline','align','allowstepping','angularsystem','animationdelay','appendsuffix','arcarrowangle','arcarrowfactor','arrow2sizelimit','arrowangle','arrowbarb','arrowdir','arrowfactor','arrowhookfactor','arrowlength','arrowsizelimit','arrowtexfactor','authorpen','axis','axiscoverage','axislabelfactor','background','backgroundcolor','backgroundpen','barfactor','barmarksizefactor','basealign','baselinetemplate','beveljoin','bigvertexpen','bigvertexsize','black','blue','bm','bottom','bp','brown','bullet','byfoci','byvertices','camerafactor','chartreuse','circlemarkradiusfactor','circlenodesnumberfactor','circleprecision','circlescale','cm','codefile','codepen','codeskip','colorPen','coloredNodes','coloredSegments', - 'conditionlength','conicnodesfactor','count','cputimeformat','crossmarksizefactor','currentcoordsys','currentlight','currentpatterns','currentpen','currentpicture','currentposition','currentprojection','curvilinearsystem','cuttings','cyan','darkblue','darkbrown','darkcyan','darkgray','darkgreen','darkgrey','darkmagenta','darkolive','darkred','dashdotted','dashed','datepen','dateskip','debuggerlines','debugging','deepblue','deepcyan','deepgray','deepgreen','deepgrey','deepmagenta','deepred','default','defaultControl','defaultS','defaultbackpen','defaultcoordsys','defaultexcursion','defaultfilename','defaultformat','defaultmassformat','defaultpen','diagnostics','differentlengths','dot','dotfactor','dotframe','dotted','doublelinepen','doublelinespacing','down','duplicateFuzz','edge','ellipsenodesnumberfactor','eps','epsgeo','epsilon','evenodd','expansionfactor','extendcap','exterior','fermionpen','figureborder','figuremattpen','file3','firstnode','firststep','foregroundcolor','fuchsia','fuzz','gapfactor','ghostpen','gluonamplitude','gluonpen','gluonratio','gray','green','grey','hatchepsilon','havepagenumber','heavyblue','heavycyan','heavygray','heavygreen','heavygrey','heavymagenta','heavyred','hline','hwratio','hyperbola','hyperbolanodesnumberfactor','identity4','ignore','inXasyMode','inch','inches','includegraphicscommand','inf','infinity','institutionpen','intMax','intMin','interior','invert','invisible','itempen','itemskip','itemstep','labelmargin','landscape','lastnode','left','legendhskip','legendlinelength', - 'legendmargin','legendmarkersize','legendmaxrelativewidth','legendvskip','lightblue','lightcyan','lightgray','lightgreen','lightgrey','lightmagenta','lightolive','lightred','lightyellow','line','linemargin','lm_infmsg','lm_shortmsg','longdashdotted','longdashed','magenta','magneticRadius','mantissaBits','markangleradius','markangleradiusfactor','markanglespace','markanglespacefactor','mediumblue','mediumcyan','mediumgray','mediumgreen','mediumgrey','mediummagenta','mediumred','mediumyellow','middle','minDistDefault','minblockheight','minblockwidth','mincirclediameter','minipagemargin','minipagewidth','minvertexangle','miterjoin','mm','momarrowfactor','momarrowlength','momarrowmargin','momarrowoffset','momarrowpen','monoPen','morepoints','nCircle','newbulletcolor','ngraph','nil','nmesh','nobasealign','nodeMarginDefault','nodesystem','nomarker','nopoint','noprimary','nullpath','nullpen','numarray','ocgindex','oldbulletcolor','olive','orange','origin','overpaint','page','pageheight','pagemargin','pagenumberalign','pagenumberpen','pagenumberposition','pagewidth','paleblue','palecyan','palegray','palegreen','palegrey', - 'palemagenta','palered','paleyellow','parabolanodesnumberfactor','perpfactor','phi','photonamplitude','photonpen','photonratio','pi','pink','plain','plain_bounds','plain_scaling','plus','preamblenodes','pt','purple','r3','r4a','r4b','randMax','realDigits','realEpsilon','realMax','realMin','red','relativesystem','reverse','right','roundcap','roundjoin','royalblue','salmon','saveFunctions','scalarpen','sequencereal','settings','shipped','signedtrailingzero','solid','springgreen','sqrtEpsilon','squarecap','squarepen','startposition','stdin','stdout','stepfactor','stepfraction','steppagenumberpen','stepping','stickframe','stickmarksizefactor','stickmarkspacefactor','swap','textpen','ticksize','tildeframe','tildemarksizefactor','tinv','titlealign','titlepagepen','titlepageposition','titlepen','titleskip','top','trailingzero','treeLevelStep','treeMinNodeWidth','treeNodeStep','trembleAngle','trembleFrequency','trembleRandom','undefined','unitcircle','unitsquare','up','urlpen','urlskip','version','vertexpen','vertexsize','viewportmargin','viewportsize','vline','white','wye','xformStack','yellow','ylabelwidth','zerotickfuzz','zerowinding' - ) - ), - 'SYMBOLS' => array( - 0 => array( - '(', ')', '{', '}', '[', ']' - ), - 1 => array('<', '>','='), - 2 => array('+', '-', '*', '/', '%'), - 3 => array('!', '^', '&', '|'), - 4 => array('?', ':', ';'), - 5 => array('..') - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, - 2 => true, - 3 => true, - 4 => true - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #b1b100;', - 2 => 'color: #000000; font-weight: bold;', - 3 => 'color: #990000;', - 4 => 'color: #009900; font-weight: bold;' - ), - 'COMMENTS' => array( - 1 => 'color: #666666;', - 2 => 'color: #339900;', - 'MULTI' => 'color: #ff0000; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;', - 1 => 'color: #000099; font-weight: bold;', - 2 => 'color: #660099; font-weight: bold;', - 3 => 'color: #660099; font-weight: bold;', - 4 => 'color: #660099; font-weight: bold;', - 5 => 'color: #006699; font-weight: bold;', - 'HARD' => '', - ), - 'BRACKETS' => array( - 0 => 'color: #008000;' - ), - 'STRINGS' => array( - 0 => 'color: #FF0000;' - ), - 'NUMBERS' => array( - 0 => 'color: #0000dd;', - GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;', - GESHI_NUMBER_OCT_PREFIX => 'color: #208080;', - GESHI_NUMBER_HEX_PREFIX => 'color: #208080;', - GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;', - GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;', - GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;', - GESHI_NUMBER_FLT_NONSCI => 'color:#800080;' - ), - 'METHODS' => array( - 1 => 'color: #007788;', - 2 => 'color: #007788;' - ), - 'SYMBOLS' => array( - 0 => 'color: #008000;', - 1 => 'color: #000080;', - 2 => 'color: #000040;', - 3 => 'color: #000040;', - 4 => 'color: #008080;', - 5 => 'color: #009080;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.', - 2 => '::' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_MAYBE, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4, - 'PARSER_CONTROL' => array( - 'KEYWORDS' => array( - 'DISALLOWED_BEFORE' => "(? "(?![a-zA-Z0-9_\|%\\-])" - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php deleted file mode 100644 index ec1cd0a6..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php +++ /dev/null @@ -1,510 +0,0 @@ - 'Autoconf', - 'COMMENT_SINGLE' => array(2 => '#'), - 'COMMENT_MULTI' => array(), - 'COMMENT_REGEXP' => array( - //Multiline-continued single-line comments - 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m', - //Multiline-continued preprocessor define - 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m', - //Single Line comment started by dnl - 3 => '/(? GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'ESCAPE_REGEXP' => array(), - 'NUMBERS' => - GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B | - GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI | - GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO, - 'KEYWORDS' => array( - 1 => array( - 'AC_ACT_IFELSE', - 'AC_AIX', - 'AC_ALLOCA', - 'AC_ARG_ARRAY', - 'AC_ARG_ENABLE', - 'AC_ARG_PROGRAM', - 'AC_ARG_VAR', - 'AC_ARG_WITH', - 'AC_AUTOCONF_VERSION', - 'AC_BEFORE', - 'AC_C_BACKSLASH_A', - 'AC_C_BIGENDIAN', - 'AC_C_CHAR_UNSIGNED', - 'AC_C_CONST', - 'AC_C_CROSS', - 'AC_C_FLEXIBLE_ARRAY_MEMBER', - 'AC_C_INLINE', - 'AC_C_LONG_DOUBLE', - 'AC_C_PROTOTYPES', - 'AC_C_RESTRICT', - 'AC_C_STRINGIZE', - 'AC_C_TYPEOF', - 'AC_C_VARARRAYS', - 'AC_C_VOLATILE', - 'AC_CACHE_CHECK', - 'AC_CACHE_LOAD', - 'AC_CACHE_SAVE', - 'AC_CACHE_VAL', - 'AC_CANONICAL_BUILD', - 'AC_CANONICAL_HOST', - 'AC_CANONICAL_SYSTEM', - 'AC_CANONICAL_TARGET', - 'AC_CHAR_UNSIGNED', - 'AC_CHECK_ALIGNOF', - 'AC_CHECK_DECL', - 'AC_CHECK_DECLS', - 'AC_CHECK_DECLS_ONCE', - 'AC_CHECK_FILE', - 'AC_CHECK_FILES', - 'AC_CHECK_FUNC', - 'AC_CHECK_FUNCS', - 'AC_CHECK_FUNCS_ONCE', - 'AC_CHECK_HEADER', - 'AC_CHECK_HEADERS', - 'AC_CHECK_HEADERS_ONCE', - 'AC_CHECK_LIB', - 'AC_CHECK_MEMBER', - 'AC_CHECK_MEMBERS', - 'AC_CHECK_PROG', - 'AC_CHECK_PROGS', - 'AC_CHECK_SIZEOF', - 'AC_CHECK_TARGET_TOOL', - 'AC_CHECK_TARGET_TOOLS', - 'AC_CHECK_TOOL', - 'AC_CHECK_TOOLS', - 'AC_CHECK_TYPE', - 'AC_CHECK_TYPES', - 'AC_CHECKING', - 'AC_COMPILE_CHECK', - 'AC_COMPILE_IFELSE', - 'AC_COMPUTE_INT', - 'AC_CONFIG_AUX_DIR', - 'AC_CONFIG_COMMANDS', - 'AC_CONFIG_COMMANDS_POST', - 'AC_CONFIG_COMMANDS_PRE', - 'AC_CONFIG_FILES', - 'AC_CONFIG_HEADERS', - 'AC_CONFIG_ITEMS', - 'AC_CONFIG_LIBOBJ_DIR', - 'AC_CONFIG_LINKS', - 'AC_CONFIG_MACRO_DIR', - 'AC_CONFIG_SRCDIR', - 'AC_CONFIG_SUBDIRS', - 'AC_CONFIG_TESTDIR', - 'AC_CONST', - 'AC_COPYRIGHT', - 'AC_CROSS_CHECK', - 'AC_CYGWIN', - 'AC_DATAROOTDIR_CHECKED', - 'AC_DECL_SYS_SIGLIST', - 'AC_DECL_YYTEXT', - 'AC_DEFINE', - 'AC_DEFINE_UNQUOTED', - 'AC_DEFUN', - 'AC_DEFUN_ONCE', - 'AC_DIAGNOSE', - 'AC_DIR_HEADER', - 'AC_DISABLE_OPTION_CHECKING', - 'AC_DYNIX_SEQ', - 'AC_EGREP_CPP', - 'AC_EGREP_HEADER', - 'AC_EMXOS2', - 'AC_ENABLE', - 'AC_ERLANG_CHECK_LIB', - 'AC_ERLANG_NEED_ERL', - 'AC_ERLANG_NEED_ERLC', - 'AC_ERLANG_PATH_ERL', - 'AC_ERLANG_PATH_ERLC', - 'AC_ERLANG_SUBST_ERTS_VER', - 'AC_ERLANG_SUBST_INSTALL_LIB_DIR', - 'AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR', - 'AC_ERLANG_SUBST_LIB_DIR', - 'AC_ERLANG_SUBST_ROOT_DIR', - 'AC_ERROR', - 'AC_EXEEXT', - 'AC_F77_DUMMY_MAIN', - 'AC_F77_FUNC', - 'AC_F77_LIBRARY_LDFLAGS', - 'AC_F77_MAIN', - 'AC_F77_WRAPPERS', - 'AC_FATAL', - 'AC_FC_FREEFORM', - 'AC_FC_FUNC', - 'AC_FC_LIBRARY_LDFLAGS', - 'AC_FC_MAIN', - 'AC_FC_SRCEXT', - 'AC_FC_WRAPPERS', - 'AC_FIND_X', - 'AC_FIND_XTRA', - 'AC_FOREACH', - 'AC_FUNC_ALLOCA', - 'AC_FUNC_CHECK', - 'AC_FUNC_CHOWN', - 'AC_FUNC_CLOSEDIR_VOID', - 'AC_FUNC_ERROR_AT_LINE', - 'AC_FUNC_FNMATCH', - 'AC_FUNC_FNMATCH_GNU', - 'AC_FUNC_FORK', - 'AC_FUNC_FSEEKO', - 'AC_FUNC_GETGROUPS', - 'AC_FUNC_GETLOADAVG', - 'AC_FUNC_GETMNTENT', - 'AC_FUNC_GETPGRP', - 'AC_FUNC_LSTAT', - 'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK', - 'AC_FUNC_MALLOC', - 'AC_FUNC_MBRTOWC', - 'AC_FUNC_MEMCMP', - 'AC_FUNC_MKTIME', - 'AC_FUNC_MMAP', - 'AC_FUNC_OBSTACK', - 'AC_FUNC_REALLOC', - 'AC_FUNC_SELECT_ARGTYPES', - 'AC_FUNC_SETPGRP', - 'AC_FUNC_SETVBUF_REVERSED', - 'AC_FUNC_STAT', - 'AC_FUNC_STRCOLL', - 'AC_FUNC_STRERROR_R', - 'AC_FUNC_STRFTIME', - 'AC_FUNC_STRNLEN', - 'AC_FUNC_STRTOD', - 'AC_FUNC_STRTOLD', - 'AC_FUNC_UTIME_NULL', - 'AC_FUNC_VPRINTF', - 'AC_FUNC_WAIT3', - 'AC_GCC_TRADITIONAL', - 'AC_GETGROUPS_T', - 'AC_GETLOADAVG', - 'AC_GNU_SOURCE', - 'AC_HAVE_FUNCS', - 'AC_HAVE_HEADERS', - 'AC_HAVE_LIBRARY', - 'AC_HAVE_POUNDBANG', - 'AC_HEADER_ASSERT', - 'AC_HEADER_CHECK', - 'AC_HEADER_DIRENT', - 'AC_HEADER_EGREP', - 'AC_HEADER_MAJOR', - 'AC_HEADER_RESOLV', - 'AC_HEADER_STAT', - 'AC_HEADER_STDBOOL', - 'AC_HEADER_STDC', - 'AC_HEADER_SYS_WAIT', - 'AC_HEADER_TIME', - 'AC_HEADER_TIOCGWINSZ', - 'AC_HELP_STRING', - 'AC_INCLUDES_DEFAULT', - 'AC_INIT', - 'AC_INLINE', - 'AC_INT_16_BITS', - 'AC_IRIX_SUN', - 'AC_ISC_POSIX', - 'AC_LANG_ASSERT', - 'AC_LANG_C', - 'AC_LANG_CALL', - 'AC_LANG_CONFTEST', - 'AC_LANG_CPLUSPLUS', - 'AC_LANG_FORTRAN77', - 'AC_LANG_FUNC_LINK_TRY', - 'AC_LANG_POP', - 'AC_LANG_PROGRAM', - 'AC_LANG_PUSH', - 'AC_LANG_RESTORE', - 'AC_LANG_SAVE', - 'AC_LANG_SOURCE', - 'AC_LANG_WERROR', - 'AC_LIBOBJ', - 'AC_LIBSOURCE', - 'AC_LIBSOURCES', - 'AC_LINK_FILES', - 'AC_LINK_IFELSE', - 'AC_LN_S', - 'AC_LONG_64_BITS', - 'AC_LONG_DOUBLE', - 'AC_LONG_FILE_NAMES', - 'AC_MAJOR_HEADER', - 'AC_MEMORY_H', - 'AC_MINGW32', - 'AC_MINIX', - 'AC_MINUS_C_MINUS_O', - 'AC_MMAP', - 'AC_MODE_T', - 'AC_MSG_CHECKING', - 'AC_MSG_ERROR', - 'AC_MSG_FAILURE', - 'AC_MSG_NOTICE', - 'AC_MSG_RESULT', - 'AC_MSG_WARN', - 'AC_OBJEXT', - 'AC_OBSOLETE', - 'AC_OFF_T', - 'AC_OPENMP', - 'AC_OUTPUT', - 'AC_OUTPUT_COMMANDS', - 'AC_PACKAGE_BUGREPORT', - 'AC_PACKAGE_NAME', - 'AC_PACKAGE_STRING', - 'AC_PACKAGE_TARNAME', - 'AC_PACKAGE_URL', - 'AC_PACKAGE_VERSION', - 'AC_PATH_PROG', - 'AC_PATH_PROGS', - 'AC_PATH_PROGS_FEATURE_CHECK', - 'AC_PATH_TARGET_TOOL', - 'AC_PATH_TOOL', - 'AC_PATH_X', - 'AC_PATH_XTRA', - 'AC_PID_T', - 'AC_PREFIX', - 'AC_PREFIX_DEFAULT', - 'AC_PREFIX_PROGRAM', - 'AC_PREPROC_IFELSE', - 'AC_PREREQ', - 'AC_PRESERVE_HELP_ORDER', - 'AC_PROG_AWK', - 'AC_PROG_CC', - 'AC_PROG_CC_C89', - 'AC_PROG_CC_C99', - 'AC_PROG_CC_C_O', - 'AC_PROG_CC_STDC', - 'AC_PROG_CPP', - 'AC_PROG_CPP_WERROR', - 'AC_PROG_CXX', - 'AC_PROG_CXX_C_O', - 'AC_PROG_CXXCPP', - 'AC_PROG_EGREP', - 'AC_PROG_F77', - 'AC_PROG_F77_C_O', - 'AC_PROG_FC', - 'AC_PROG_FC_C_O', - 'AC_PROG_FGREP', - 'AC_PROG_GCC_TRADITIONAL', - 'AC_PROG_GREP', - 'AC_PROG_INSTALL', - 'AC_PROG_LEX', - 'AC_PROG_LN_S', - 'AC_PROG_MAKE_SET', - 'AC_PROG_MKDIR_P', - 'AC_PROG_OBJC', - 'AC_PROG_OBJCPP', - 'AC_PROG_OBJCXX', - 'AC_PROG_OBJCXXCPP', - 'AC_PROG_RANLIB', - 'AC_PROG_SED', - 'AC_PROG_YACC', - 'AC_PROGRAM_CHECK', - 'AC_PROGRAM_EGREP', - 'AC_PROGRAM_PATH', - 'AC_PROGRAMS_CHECK', - 'AC_PROGRAMS_PATH', - 'AC_REMOTE_TAPE', - 'AC_REPLACE_FNMATCH', - 'AC_REPLACE_FUNCS', - 'AC_REQUIRE', - 'AC_REQUIRE_AUX_FILE', - 'AC_REQUIRE_CPP', - 'AC_RESTARTABLE_SYSCALLS', - 'AC_RETSIGTYPE', - 'AC_REVISION', - 'AC_RSH', - 'AC_RUN_IFELSE', - 'AC_SCO_INTL', - 'AC_SEARCH_LIBS', - 'AC_SET_MAKE', - 'AC_SETVBUF_REVERSED', - 'AC_SIZE_T', - 'AC_SIZEOF_TYPE', - 'AC_ST_BLKSIZE', - 'AC_ST_BLOCKS', - 'AC_ST_RDEV', - 'AC_STAT_MACROS_BROKEN', - 'AC_STDC_HEADERS', - 'AC_STRCOLL', - 'AC_STRUCT_DIRENT_D_INO', - 'AC_STRUCT_DIRENT_D_TYPE', - 'AC_STRUCT_ST_BLKSIZE', - 'AC_STRUCT_ST_BLOCKS', - 'AC_STRUCT_ST_RDEV', - 'AC_STRUCT_TIMEZONE', - 'AC_STRUCT_TM', - 'AC_SUBST', - 'AC_SUBST_FILE', - 'AC_SYS_INTERPRETER', - 'AC_SYS_LARGEFILE', - 'AC_SYS_LONG_FILE_NAMES', - 'AC_SYS_POSIX_TERMIOS', - 'AC_SYS_RESTARTABLE_SYSCALLS', - 'AC_SYS_SIGLIST_DECLARED', - 'AC_TEST_CPP', - 'AC_TEST_PROGRAM', - 'AC_TIME_WITH_SYS_TIME', - 'AC_TIMEZONE', - 'AC_TRY_ACT', - 'AC_TRY_COMPILE', - 'AC_TRY_CPP', - 'AC_TRY_LINK', - 'AC_TRY_LINK_FUNC', - 'AC_TRY_RUN', - 'AC_TYPE_GETGROUPS', - 'AC_TYPE_INT16_T', - 'AC_TYPE_INT32_T', - 'AC_TYPE_INT64_T', - 'AC_TYPE_INT8_T', - 'AC_TYPE_INTMAX_T', - 'AC_TYPE_INTPTR_T', - 'AC_TYPE_LONG_DOUBLE', - 'AC_TYPE_LONG_DOUBLE_WIDER', - 'AC_TYPE_LONG_LONG_INT', - 'AC_TYPE_MBSTATE_T', - 'AC_TYPE_MODE_T', - 'AC_TYPE_OFF_T', - 'AC_TYPE_PID_T', - 'AC_TYPE_SIGNAL', - 'AC_TYPE_SIZE_T', - 'AC_TYPE_SSIZE_T', - 'AC_TYPE_UID_T', - 'AC_TYPE_UINT16_T', - 'AC_TYPE_UINT32_T', - 'AC_TYPE_UINT64_T', - 'AC_TYPE_UINT8_T', - 'AC_TYPE_UINTMAX_T', - 'AC_TYPE_UINTPTR_T', - 'AC_TYPE_UNSIGNED_LONG_LONG_INT', - 'AC_UID_T', - 'AC_UNISTD_H', - 'AC_USE_SYSTEM_EXTENSIONS', - 'AC_USG', - 'AC_UTIME_NULL', - 'AC_VALIDATE_CACHED_SYSTEM_TUPLE', - 'AC_VERBOSE', - 'AC_VFORK', - 'AC_VPRINTF', - 'AC_WAIT3', - 'AC_WARN', - 'AC_WARNING', - 'AC_WITH', - 'AC_WORDS_BIGENDIAN', - 'AC_XENIX_DIR', - 'AC_YYTEXT_POINTER', - 'AH_BOTTOM', - 'AH_HEADER', - 'AH_TEMPLATE', - 'AH_TOP', - 'AH_VERBATIM', - 'AU_ALIAS', - 'AU_DEFUN'), - ), - 'SYMBOLS' => array('(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;', '`'), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #00ffff;', - ), - 'COMMENTS' => array( - 1 => 'color: #666666;', - 2 => 'color: #339900;', - 3 => 'color: #666666;', - 'MULTI' => 'color: #ff0000; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099;', - 1 => 'color: #000099;', - 2 => 'color: #660099;', - 3 => 'color: #660099;', - 4 => 'color: #660099;', - 5 => 'color: #006699;', - 'HARD' => '', - ), - 'BRACKETS' => array( - 0 => 'color: #008000;' - ), - 'STRINGS' => array( - 0 => 'color: #996600;' - ), - 'NUMBERS' => array( - 0 => 'color: #0000dd;', - GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;', - GESHI_NUMBER_OCT_PREFIX => 'color: #208080;', - GESHI_NUMBER_HEX_PREFIX => 'color: #208080;', - GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;', - GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;', - GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;', - GESHI_NUMBER_FLT_NONSCI => 'color:#800080;' - ), - 'METHODS' => array( - 1 => 'color: #202020;', - 2 => 'color: #202020;' - ), - 'SYMBOLS' => array( - 0 => 'color: #008000;', - 1 => 'color: #000080;', - 2 => 'color: #000040;', - 3 => 'color: #000040;', - 4 => 'color: #008080;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4, - 'PARSER_CONTROL' => array( - 'COMMENTS' => array( - 'DISALLOWED_BEFORE' => '$' - ), - 'KEYWORDS' => array( - 'DISALLOWED_BEFORE' => "(? "(?![\.\-a-zA-Z0-9_%\\/])" - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php deleted file mode 100644 index f6318af9..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php +++ /dev/null @@ -1,371 +0,0 @@ - 'Autohotkey', - 'COMMENT_SINGLE' => array( - 1 => ';' - ), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - 'while','if','and','or','else','return' - ), - 2 => array( - // built in variables - 'A_AhkPath','A_AhkVersion','A_AppData','A_AppDataCommon', - 'A_AutoTrim','A_BatchLines','A_CaretX','A_CaretY', - 'A_ComputerName','A_ControlDelay','A_Cursor','A_DD', - 'A_DDD','A_DDDD','A_DefaultMouseSpeed','A_Desktop', - 'A_DesktopCommon','A_DetectHiddenText','A_DetectHiddenWindows','A_EndChar', - 'A_EventInfo','A_ExitReason','A_FormatFloat','A_FormatInteger', - 'A_Gui','A_GuiEvent','A_GuiControl','A_GuiControlEvent', - 'A_GuiHeight','A_GuiWidth','A_GuiX','A_GuiY', - 'A_Hour','A_IconFile','A_IconHidden','A_IconNumber', - 'A_IconTip','A_Index','A_IPAddress1','A_IPAddress2', - 'A_IPAddress3','A_IPAddress4','A_ISAdmin','A_IsCompiled', - 'A_IsCritical','A_IsPaused','A_IsSuspended','A_KeyDelay', - 'A_Language','A_LastError','A_LineFile','A_LineNumber', - 'A_LoopField','A_LoopFileAttrib','A_LoopFileDir','A_LoopFileExt', - 'A_LoopFileFullPath','A_LoopFileLongPath','A_LoopFileName','A_LoopFileShortName', - 'A_LoopFileShortPath','A_LoopFileSize','A_LoopFileSizeKB','A_LoopFileSizeMB', - 'A_LoopFileTimeAccessed','A_LoopFileTimeCreated','A_LoopFileTimeModified','A_LoopReadLine', - 'A_LoopRegKey','A_LoopRegName','A_LoopRegSubkey','A_LoopRegTimeModified', - 'A_LoopRegType','A_MDAY','A_Min','A_MM', - 'A_MMM','A_MMMM','A_Mon','A_MouseDelay', - 'A_MSec','A_MyDocuments','A_Now','A_NowUTC', - 'A_NumBatchLines','A_OSType','A_OSVersion','A_PriorHotkey', - 'A_ProgramFiles','A_Programs','A_ProgramsCommon','A_ScreenHeight', - 'A_ScreenWidth','A_ScriptDir','A_ScriptFullPath','A_ScriptName', - 'A_Sec','A_Space','A_StartMenu','A_StartMenuCommon', - 'A_Startup','A_StartupCommon','A_StringCaseSense','A_Tab', - 'A_Temp','A_ThisFunc','A_ThisHotkey','A_ThisLabel', - 'A_ThisMenu','A_ThisMenuItem','A_ThisMenuItemPos','A_TickCount', - 'A_TimeIdle','A_TimeIdlePhysical','A_TimeSincePriorHotkey','A_TimeSinceThisHotkey', - 'A_TitleMatchMode','A_TitleMatchModeSpeed','A_UserName','A_WDay', - 'A_WinDelay','A_WinDir','A_WorkingDir','A_YDay', - 'A_YEAR','A_YWeek','A_YYYY','Clipboard', - 'ClipboardAll','ComSpec','ErrorLevel','ProgramFiles', - ), - 3 => array( - 'AutoTrim', - 'BlockInput','Break','Click', - 'ClipWait','Continue','Control', - 'ControlClick','ControlFocus','ControlGet', - 'ControlGetFocus','ControlGetPos','ControlGetText', - 'ControlMove','ControlSend','ControlSendRaw', - 'ControlSetText','CoordMode','Critical', - 'DetectHiddenText','DetectHiddenWindows','DllCall','Drive', - 'DriveGet','DriveSpaceFree', - 'Else','EnvAdd','EnvDiv', - 'EnvGet','EnvMult','EnvSet', - 'EnvSub','EnvUpdate','Exit', - 'ExitApp','FileAppend','FileCopy', - 'FileCopyDir','FileCreateDir','FileCreateShortcut', - 'FileDelete','FileGetAttrib','FileGetShortcut', - 'FileGetSize','FileGetTime','FileGetVersion', - 'FileInstall','FileMove','FileMoveDir', - 'FileRead','FileReadLine','FileRecycle', - 'FileRecycleEmpty','FileRemoveDir','FileSelectFile', - 'FileSelectFolder','FileSetAttrib','FileSetTime', - 'FormatTime','Gosub', - 'Goto','GroupActivate','GroupAdd', - 'GroupClose','GroupDeactivate','Gui', - 'GuiControl','GuiControlGet','Hotkey', - 'IfExist','IfGreater','IfGreaterOrEqual', - 'IfInString','IfLess','IfLessOrEqual', - 'IfMsgBox','IfNotEqual','IfNotExist', - 'IfNotInString','IfWinActive','IfWinExist', - 'IfWinNotActive','IfWinNotExist','ImageSearch', - 'IniDelete','IniRead','IniWrite', - 'Input','InputBox','KeyHistory', - 'KeyWait','ListHotkeys','ListLines', - 'ListVars','Loop', - 'Menu','MouseClick','MouseClickDrag', - 'MouseGetPos','MouseMove','MsgBox', - 'OnMessage','OnExit','OutputDebug', - 'PixelGetColor','PixelSearch','PostMessage', - 'Process','Progress','Random', - 'RegExMatch','RegExReplace','RegisterCallback', - 'RegDelete','RegRead','RegWrite', - 'Reload','Repeat','Return', - 'Run','RunAs','RunWait', - 'Send','SendEvent','SendInput', - 'SendMessage','SendMode','SendPlay', - 'SendRaw','SetBatchLines','SetCapslockState', - 'SetControlDelay','SetDefaultMouseSpeed','SetEnv', - 'SetFormat','SetKeyDelay','SetMouseDelay', - 'SetNumlockState','SetScrollLockState','SetStoreCapslockMode', - 'SetTimer','SetTitleMatchMode','SetWinDelay', - 'SetWorkingDir','Shutdown','Sleep', - 'Sort','SoundBeep','SoundGet', - 'SoundGetWaveVolume','SoundPlay','SoundSet', - 'SoundSetWaveVolume','SplashImage','SplashTextOff', - 'SplashTextOn','SplitPath','StatusBarGetText', - 'StatusBarWait','StringCaseSense','StringGetPos', - 'StringLeft','StringLen','StringLower', - 'StringMid','StringReplace','StringRight', - 'StringSplit','StringTrimLeft','StringTrimRight', - 'StringUpper','Suspend','SysGet', - 'Thread','ToolTip','Transform', - 'TrayTip','URLDownloadToFile','While', - 'VarSetCapacity', - 'WinActivate','WinActivateBottom','WinClose', - 'WinGet','WinGetActiveStats','WinGetActiveTitle', - 'WinGetClass','WinGetPos','WinGetText', - 'WinGetTitle','WinHide','WinKill', - 'WinMaximize','WinMenuSelectItem','WinMinimize', - 'WinMinimizeAll','WinMinimizeAllUndo','WinMove', - 'WinRestore','WinSet','WinSetTitle', - 'WinShow','WinWait','WinWaitActive', - 'WinWaitClose','WinWaitNotActive' - ), - 4 => array( - 'Abs','ACos','Asc','ASin', - 'ATan','Ceil','Chr','Cos', - 'Exp','FileExist','Floor', - 'GetKeyState','IL_Add','IL_Create','IL_Destroy', - 'InStr','IsFunc','IsLabel','Ln', - 'Log','LV_Add','LV_Delete','LV_DeleteCol', - 'LV_GetCount','LV_GetNext','LV_GetText','LV_Insert', - 'LV_InsertCol','LV_Modify','LV_ModifyCol','LV_SetImageList', - 'Mod','NumGet','NumPut', - 'Round', - 'SB_SetIcon','SB_SetParts','SB_SetText','Sin', - 'Sqrt','StrLen','SubStr','Tan', - 'TV_Add','TV_Delete','TV_GetChild','TV_GetCount', - 'TV_GetNext','TV_Get','TV_GetParent','TV_GetPrev', - 'TV_GetSelection','TV_GetText','TV_Modify', - 'WinActive','WinExist' - ), - 5 => array( - // #Directives - 'AllowSameLineComments','ClipboardTimeout','CommentFlag', - 'ErrorStdOut','EscapeChar','HotkeyInterval', - 'HotkeyModifierTimeout','Hotstring','IfWinActive', - 'IfWinExist','IfWinNotActive','IfWinNotExist', - 'Include','IncludeAgain','InstallKeybdHook', - 'InstallMouseHook','KeyHistory','LTrim', - 'MaxHotkeysPerInterval','MaxMem','MaxThreads', - 'MaxThreadsBuffer','MaxThreadsPerHotkey','NoEnv', - 'NoTrayIcon','Persistent','SingleInstance', - 'UseHook','WinActivateForce' - ), - 6 => array( - 'Shift','LShift','RShift', - 'Alt','LAlt','RAlt', - 'LControl','RControl', - 'Ctrl','LCtrl','RCtrl', - 'LWin','RWin','AppsKey', - 'AltDown','AltUp','ShiftDown', - 'ShiftUp','CtrlDown','CtrlUp', - 'LWinDown','LWinUp','RWinDown', - 'RWinUp','LButton','RButton', - 'MButton','WheelUp','WheelDown', - 'WheelLeft','WheelRight','XButton1', - 'XButton2','Joy1','Joy2', - 'Joy3','Joy4','Joy5', - 'Joy6','Joy7','Joy8', - 'Joy9','Joy10','Joy11', - 'Joy12','Joy13','Joy14', - 'Joy15','Joy16','Joy17', - 'Joy18','Joy19','Joy20', - 'Joy21','Joy22','Joy23', - 'Joy24','Joy25','Joy26', - 'Joy27','Joy28','Joy29', - 'Joy30','Joy31','Joy32', - 'JoyX','JoyY','JoyZ', - 'JoyR','JoyU','JoyV', - 'JoyPOV','JoyName','JoyButtons', - 'JoyAxes','JoyInfo','Space', - 'Tab','Enter', - 'Escape','Esc','BackSpace', - 'BS','Delete','Del', - 'Insert','Ins','PGUP', - 'PGDN','Home','End', - 'Up','Down','Left', - 'Right','PrintScreen','CtrlBreak', - 'Pause','ScrollLock','CapsLock', - 'NumLock','Numpad0','Numpad1', - 'Numpad2','Numpad3','Numpad4', - 'Numpad5','Numpad6','Numpad7', - 'Numpad8','Numpad9','NumpadMult', - 'NumpadAdd','NumpadSub','NumpadDiv', - 'NumpadDot','NumpadDel','NumpadIns', - 'NumpadClear','NumpadUp','NumpadDown', - 'NumpadLeft','NumpadRight','NumpadHome', - 'NumpadEnd','NumpadPgup','NumpadPgdn', - 'NumpadEnter','F1','F2', - 'F3','F4','F5', - 'F6','F7','F8', - 'F9','F10','F11', - 'F12','F13','F14', - 'F15','F16','F17', - 'F18','F19','F20', - 'F21','F22','F23', - 'F24','Browser_Back','Browser_Forward', - 'Browser_Refresh','Browser_Stop','Browser_Search', - 'Browser_Favorites','Browser_Home','Volume_Mute', - 'Volume_Down','Volume_Up','Media_Next', - 'Media_Prev','Media_Stop','Media_Play_Pause', - 'Launch_Mail','Launch_Media','Launch_App1', - 'Launch_App2' - ), - 7 => array( - // Gui commands - 'Add', - 'Show', 'Submit', 'Cancel', 'Destroy', - 'Font', 'Color', 'Margin', 'Flash', 'Default', - 'GuiEscape','GuiClose','GuiSize','GuiContextMenu','GuiDropFilesTabStop', - ), - 8 => array( - // Gui Controls - 'Button', - 'Checkbox','Radio','DropDownList','DDL', - 'ComboBox','ListBox','ListView', - 'Text', 'Edit', 'UpDown', 'Picture', - 'TreeView','DateTime', 'MonthCal', - 'Slider' - ) - ), - 'SYMBOLS' => array( - '(',')','[',']', - '+','-','*','/','&','^', - '=','+=','-=','*=','/=','&=', - '==','<','<=','>','>=',':=', - ',','.' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false, - 7 => false, - 8 => false - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #AAAAFF; font-weight: bold;', // reserved #blue - 2 => 'color: #88FF88;', // BIV yellow - 3 => 'color: #FF00FF; font-style: italic;', // commands purple - 4 => 'color: #888844; font-weight: bold;', // functions #0080FF - 5 => 'color: #000000; font-style: italic;', // directives #black - 6 => 'color: #FF0000; font-style: italic;', // hotkeys #red - 7 => 'color: #000000; font-style: italic;', // gui commands #black - 8 => 'color: #000000; font-style: italic;' // gui controls - ), - 'COMMENTS' => array( - 'MULTI' => 'font-style: italic; color: #669900;', - 1 => 'font-style: italic; color: #009933;' - ), - 'ESCAPE_CHAR' => array( - 0 => '' - ), - 'BRACKETS' => array( - 0 => 'color: #00FF00; font-weight: bold;' - ), - 'STRINGS' => array( - 0 => 'font-weight: bold; color: #008080;' - ), - 'NUMBERS' => array( - 0 => 'color: #0000dd;' - ), - 'METHODS' => array( - 1 => 'color: #0000FF; font-style: italic; font-weight: italic;' - ), - 'SYMBOLS' => array( - 0 => 'color: #000000; font-weight: italic;' - ), - 'REGEXPS' => array( - 0 => 'font-weight: italic; color: #A00A0;', - 1 => 'color: #CC0000; font-style: italic;', - 2 => 'color: #DD0000; font-style: italic;', - 3 => 'color: #88FF88;' - ), - 'SCRIPT' => array( - ) - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - 1 => '_' - ), - 'REGEXPS' => array( - //Variables - 0 => '%[a-zA-Z_][a-zA-Z0-9_]*%', - //hotstrings - 1 => '::[\w\d]+::', - //labels - 2 => '\w[\w\d]+:\s', - //Built-in Variables - 3 => '\bA_\w+\b(?![^<]*>)' - ), - 'URLS' => array( - 1 => '', - 2 => 'http://www.autohotkey.com/docs/Variables.htm#{FNAME}', - 3 => 'http://www.autohotkey.com/docs/commands/{FNAME}.htm', - 4 => 'http://www.autohotkey.com/docs/Functions.htm#BuiltIn', - 5 => 'http://www.autohotkey.com/docs/commands/_{FNAME}.htm', - 6 => '', - 7 => 'http://www.autohotkey.com/docs/commands/Gui.htm#{FNAME}', - 8 => 'http://www.autohotkey.com/docs/commands/GuiControls.htm#{FNAME}' - ), - 'STRICT_MODE_APPLIES' => GESHI_MAYBE, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - 0 => true, - 1 => true, - 2 => true, - 3 => true - ), - 'PARSER_CONTROL' => array( - 'KEYWORDS' => array( - 5 => array( - 'DISALLOWED_BEFORE' => '(? 'AutoIt', - 'COMMENT_SINGLE' => array(';'), - 'COMMENT_MULTI' => array( - '#comments-start' => '#comments-end', - '#cs' => '#ce'), - 'COMMENT_REGEXP' => array( - 0 => '/(? '/(?<=include)\s+<.*?>/' - ), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - 'And','ByRef','Case','Const','ContinueCase','ContinueLoop', - 'Default','Dim','Do','Else','ElseIf','EndFunc','EndIf','EndSelect', - 'EndSwitch','EndWith','Enum','Exit','ExitLoop','False','For','Func', - 'Global','If','In','Local','Next','Not','Or','ReDim','Return', - 'Select','Step','Switch','Then','To','True','Until','WEnd','While', - 'With' - ), - 2 => array( - '@AppDataCommonDir','@AppDataDir','@AutoItExe','@AutoItPID', - '@AutoItUnicode','@AutoItVersion','@AutoItX64','@COM_EventObj', - '@CommonFilesDir','@Compiled','@ComputerName','@ComSpec','@CR', - '@CRLF','@DesktopCommonDir','@DesktopDepth','@DesktopDir', - '@DesktopHeight','@DesktopRefresh','@DesktopWidth', - '@DocumentsCommonDir','@error','@exitCode','@exitMethod', - '@extended','@FavoritesCommonDir','@FavoritesDir','@GUI_CtrlHandle', - '@GUI_CtrlId','@GUI_DragFile','@GUI_DragId','@GUI_DropId', - '@GUI_WinHandle','@HomeDrive','@HomePath','@HomeShare', - '@HotKeyPressed','@HOUR','@InetGetActive','@InetGetBytesRead', - '@IPAddress1','@IPAddress2','@IPAddress3','@IPAddress4','@KBLayout', - '@LF','@LogonDNSDomain','@LogonDomain','@LogonServer','@MDAY', - '@MIN','@MON','@MyDocumentsDir','@NumParams','@OSBuild','@OSLang', - '@OSServicePack','@OSTYPE','@OSVersion','@ProcessorArch', - '@ProgramFilesDir','@ProgramsCommonDir','@ProgramsDir','@ScriptDir', - '@ScriptFullPath','@ScriptLineNumber','@ScriptName','@SEC', - '@StartMenuCommonDir','@StartMenuDir','@StartupCommonDir', - '@StartupDir','@SW_DISABLE','@SW_ENABLE','@SW_HIDE','@SW_LOCK', - '@SW_MAXIMIZE','@SW_MINIMIZE','@SW_RESTORE','@SW_SHOW', - '@SW_SHOWDEFAULT','@SW_SHOWMAXIMIZED','@SW_SHOWMINIMIZED', - '@SW_SHOWMINNOACTIVE','@SW_SHOWNA','@SW_SHOWNOACTIVATE', - '@SW_SHOWNORMAL','@SW_UNLOCK','@SystemDir','@TAB','@TempDir', - '@TRAY_ID','@TrayIconFlashing','@TrayIconVisible','@UserName', - '@UserProfileDir','@WDAY','@WindowsDir','@WorkingDir','@YDAY', - '@YEAR' - ), - 3 => array( - 'Abs','ACos','AdlibDisable','AdlibEnable','Asc','AscW','ASin', - 'Assign','ATan','AutoItSetOption','AutoItWinGetTitle', - 'AutoItWinSetTitle','Beep','Binary','BinaryLen','BinaryMid', - 'BinaryToString','BitAND','BitNOT','BitOR','BitRotate','BitShift', - 'BitXOR','BlockInput','Break','Call','CDTray','Ceiling','Chr', - 'ChrW','ClipGet','ClipPut','ConsoleRead','ConsoleWrite', - 'ConsoleWriteError','ControlClick','ControlCommand', - 'ControlDisable','ControlEnable','ControlFocus','ControlGetFocus', - 'ControlGetHandle','ControlGetPos','ControlGetText','ControlHide', - 'ControlListView','ControlMove','ControlSend','ControlSetText', - 'ControlShow','ControlTreeView','Cos','Dec','DirCopy','DirCreate', - 'DirGetSize','DirMove','DirRemove','DllCall','DllCallbackFree', - 'DllCallbackGetPtr','DllCallbackRegister','DllClose','DllOpen', - 'DllStructCreate','DllStructGetData','DllStructGetPtr', - 'DllStructGetSize','DllStructSetData','DriveGetDrive', - 'DriveGetFileSystem','DriveGetLabel','DriveGetSerial', - 'DriveGetType','DriveMapAdd','DriveMapDel','DriveMapGet', - 'DriveSetLabel','DriveSpaceFree','DriveSpaceTotal','DriveStatus', - 'EnvGet','EnvSet','EnvUpdate','Eval','Execute','Exp', - 'FileChangeDir','FileClose','FileCopy','FileCreateNTFSLink', - 'FileCreateShortcut','FileDelete','FileExists','FileFindFirstFile', - 'FileFindNextFile','FileGetAttrib','FileGetLongName', - 'FileGetShortcut','FileGetShortName','FileGetSize','FileGetTime', - 'FileGetVersion','FileInstall','FileMove','FileOpen', - 'FileOpenDialog','FileRead','FileReadLine','FileRecycle', - 'FileRecycleEmpty','FileSaveDialog','FileSelectFolder', - 'FileSetAttrib','FileSetTime','FileWrite','FileWriteLine','Floor', - 'FtpSetProxy','GUICreate','GUICtrlCreateAvi','GUICtrlCreateButton', - 'GUICtrlCreateCheckbox','GUICtrlCreateCombo', - 'GUICtrlCreateContextMenu','GUICtrlCreateDate','GUICtrlCreateDummy', - 'GUICtrlCreateEdit','GUICtrlCreateGraphic','GUICtrlCreateGroup', - 'GUICtrlCreateIcon','GUICtrlCreateInput','GUICtrlCreateLabel', - 'GUICtrlCreateList','GUICtrlCreateListView', - 'GUICtrlCreateListViewItem','GUICtrlCreateMenu', - 'GUICtrlCreateMenuItem','GUICtrlCreateMonthCal','GUICtrlCreateObj', - 'GUICtrlCreatePic','GUICtrlCreateProgress','GUICtrlCreateRadio', - 'GUICtrlCreateSlider','GUICtrlCreateTab','GUICtrlCreateTabItem', - 'GUICtrlCreateTreeView','GUICtrlCreateTreeViewItem', - 'GUICtrlCreateUpdown','GUICtrlDelete','GUICtrlGetHandle', - 'GUICtrlGetState','GUICtrlRead','GUICtrlRecvMsg', - 'GUICtrlRegisterListViewSort','GUICtrlSendMsg','GUICtrlSendToDummy', - 'GUICtrlSetBkColor','GUICtrlSetColor','GUICtrlSetCursor', - 'GUICtrlSetData','GUICtrlSetFont','GUICtrlSetDefColor', - 'GUICtrlSetDefBkColor','GUICtrlSetGraphic','GUICtrlSetImage', - 'GUICtrlSetLimit','GUICtrlSetOnEvent','GUICtrlSetPos', - 'GUICtrlSetResizing','GUICtrlSetState','GUICtrlSetStyle', - 'GUICtrlSetTip','GUIDelete','GUIGetCursorInfo','GUIGetMsg', - 'GUIGetStyle','GUIRegisterMsg','GUISetAccelerators()', - 'GUISetBkColor','GUISetCoord','GUISetCursor','GUISetFont', - 'GUISetHelp','GUISetIcon','GUISetOnEvent','GUISetState', - 'GUISetStyle','GUIStartGroup','GUISwitch','Hex','HotKeySet', - 'HttpSetProxy','HWnd','InetGet','InetGetSize','IniDelete','IniRead', - 'IniReadSection','IniReadSectionNames','IniRenameSection', - 'IniWrite','IniWriteSection','InputBox','Int','IsAdmin','IsArray', - 'IsBinary','IsBool','IsDeclared','IsDllStruct','IsFloat','IsHWnd', - 'IsInt','IsKeyword','IsNumber','IsObj','IsPtr','IsString','Log', - 'MemGetStats','Mod','MouseClick','MouseClickDrag','MouseDown', - 'MouseGetCursor','MouseGetPos','MouseMove','MouseUp','MouseWheel', - 'MsgBox','Number','ObjCreate','ObjEvent','ObjGet','ObjName','Opt', - 'Ping','PixelChecksum','PixelGetColor','PixelSearch','PluginClose', - 'PluginOpen','ProcessClose','ProcessExists','ProcessGetStats', - 'ProcessList','ProcessSetPriority','ProcessWait','ProcessWaitClose', - 'ProgressOff','ProgressOn','ProgressSet','Ptr','Random','RegDelete', - 'RegEnumKey','RegEnumVal','RegRead','RegWrite','Round','Run', - 'RunAs','RunAsWait','RunWait','Send','SendKeepActive','SetError', - 'SetExtended','ShellExecute','ShellExecuteWait','Shutdown','Sin', - 'Sleep','SoundPlay','SoundSetWaveVolume','SplashImageOn', - 'SplashOff','SplashTextOn','Sqrt','SRandom','StatusbarGetText', - 'StderrRead','StdinWrite','StdioClose','StdoutRead','String', - 'StringAddCR','StringCompare','StringFormat','StringInStr', - 'StringIsAlNum','StringIsAlpha','StringIsASCII','StringIsDigit', - 'StringIsFloat','StringIsInt','StringIsLower','StringIsSpace', - 'StringIsUpper','StringIsXDigit','StringLeft','StringLen', - 'StringLower','StringMid','StringRegExp','StringRegExpReplace', - 'StringReplace','StringRight','StringSplit','StringStripCR', - 'StringStripWS','StringToBinary','StringTrimLeft','StringTrimRight', - 'StringUpper','Tan','TCPAccept','TCPCloseSocket','TCPConnect', - 'TCPListen','TCPNameToIP','TCPRecv','TCPSend','TCPShutdown', - 'TCPStartup','TimerDiff','TimerInit','ToolTip','TrayCreateItem', - 'TrayCreateMenu','TrayGetMsg','TrayItemDelete','TrayItemGetHandle', - 'TrayItemGetState','TrayItemGetText','TrayItemSetOnEvent', - 'TrayItemSetState','TrayItemSetText','TraySetClick','TraySetIcon', - 'TraySetOnEvent','TraySetPauseIcon','TraySetState','TraySetToolTip', - 'TrayTip','UBound','UDPBind','UDPCloseSocket','UDPOpen','UDPRecv', - 'UDPSend','UDPShutdown','UDPStartup','VarGetType','WinActivate', - 'WinActive','WinClose','WinExists','WinFlash','WinGetCaretPos', - 'WinGetClassList','WinGetClientSize','WinGetHandle','WinGetPos', - 'WinGetProcess','WinGetState','WinGetText','WinGetTitle','WinKill', - 'WinList','WinMenuSelectItem','WinMinimizeAll','WinMinimizeAllUndo', - 'WinMove','WinSetOnTop','WinSetState','WinSetTitle','WinSetTrans', - 'WinWait','WinWaitActive','WinWaitClose','WinWaitNotActive' - ), - 4 => array( - 'ArrayAdd','ArrayBinarySearch','ArrayConcatenate','ArrayDelete', - 'ArrayDisplay','ArrayFindAll','ArrayInsert','ArrayMax', - 'ArrayMaxIndex','ArrayMin','ArrayMinIndex','ArrayPop','ArrayPush', - 'ArrayReverse','ArraySearch','ArraySort','ArraySwap','ArrayToClip', - 'ArrayToString','ArrayTrim','ChooseColor','ChooseFont', - 'ClipBoard_ChangeChain','ClipBoard_Close','ClipBoard_CountFormats', - 'ClipBoard_Empty','ClipBoard_EnumFormats','ClipBoard_FormatStr', - 'ClipBoard_GetData','ClipBoard_GetDataEx','ClipBoard_GetFormatName', - 'ClipBoard_GetOpenWindow','ClipBoard_GetOwner', - 'ClipBoard_GetPriorityFormat','ClipBoard_GetSequenceNumber', - 'ClipBoard_GetViewer','ClipBoard_IsFormatAvailable', - 'ClipBoard_Open','ClipBoard_RegisterFormat','ClipBoard_SetData', - 'ClipBoard_SetDataEx','ClipBoard_SetViewer','ClipPutFile', - 'ColorConvertHSLtoRGB','ColorConvertRGBtoHSL','ColorGetBlue', - 'ColorGetGreen','ColorGetRed','Date_Time_CompareFileTime', - 'Date_Time_DOSDateTimeToArray','Date_Time_DOSDateTimeToFileTime', - 'Date_Time_DOSDateTimeToStr','Date_Time_DOSDateToArray', - 'Date_Time_DOSDateToStr','Date_Time_DOSTimeToArray', - 'Date_Time_DOSTimeToStr','Date_Time_EncodeFileTime', - 'Date_Time_EncodeSystemTime','Date_Time_FileTimeToArray', - 'Date_Time_FileTimeToDOSDateTime', - 'Date_Time_FileTimeToLocalFileTime','Date_Time_FileTimeToStr', - 'Date_Time_FileTimeToSystemTime','Date_Time_GetFileTime', - 'Date_Time_GetLocalTime','Date_Time_GetSystemTime', - 'Date_Time_GetSystemTimeAdjustment', - 'Date_Time_GetSystemTimeAsFileTime', - 'Date_Time_GetSystemTimes','Date_Time_GetTickCount', - 'Date_Time_GetTimeZoneInformation', - 'Date_Time_LocalFileTimeToFileTime','Date_Time_SetFileTime', - 'Date_Time_SetLocalTime','Date_Time_SetSystemTime', - 'Date_Time_SetSystemTimeAdjustment', - 'Date_Time_SetTimeZoneInformation','Date_Time_SystemTimeToArray', - 'Date_Time_SystemTimeToDateStr','Date_Time_SystemTimeToDateTimeStr', - 'Date_Time_SystemTimeToFileTime','Date_Time_SystemTimeToTimeStr', - 'Date_Time_SystemTimeToTzSpecificLocalTime', - 'Date_Time_TzSpecificLocalTimeToSystemTime','DateAdd', - 'DateDayOfWeek','DateDaysInMonth','DateDiff','DateIsLeapYear', - 'DateIsValid','DateTimeFormat','DateTimeSplit','DateToDayOfWeek', - 'DateToDayOfWeekISO','DateToDayValue','DateToMonth', - 'DayValueToDate','DebugBugReportEnv','DebugOut','DebugSetup', - 'Degree','EventLog__Backup','EventLog__Clear','EventLog__Close', - 'EventLog__Count','EventLog__DeregisterSource','EventLog__Full', - 'EventLog__Notify','EventLog__Oldest','EventLog__Open', - 'EventLog__OpenBackup','EventLog__Read','EventLog__RegisterSource', - 'EventLog__Report','FileCountLines','FileCreate','FileListToArray', - 'FilePrint','FileReadToArray','FileWriteFromArray', - 'FileWriteLog','FileWriteToLine','GDIPlus_ArrowCapCreate', - 'GDIPlus_ArrowCapDispose','GDIPlus_ArrowCapGetFillState', - 'GDIPlus_ArrowCapGetHeight','GDIPlus_ArrowCapGetMiddleInset', - 'GDIPlus_ArrowCapGetWidth','GDIPlus_ArrowCapSetFillState', - 'GDIPlus_ArrowCapSetHeight','GDIPlus_ArrowCapSetMiddleInset', - 'GDIPlus_ArrowCapSetWidth','GDIPlus_BitmapCloneArea', - 'GDIPlus_BitmapCreateFromFile','GDIPlus_BitmapCreateFromGraphics', - 'GDIPlus_BitmapCreateFromHBITMAP', - 'GDIPlus_BitmapCreateHBITMAPFromBitmap','GDIPlus_BitmapDispose', - 'GDIPlus_BitmapLockBits','GDIPlus_BitmapUnlockBits', - 'GDIPlus_BrushClone','GDIPlus_BrushCreateSolid', - 'GDIPlus_BrushDispose','GDIPlus_BrushGetType', - 'GDIPlus_CustomLineCapDispose','GDIPlus_Decoders', - 'GDIPlus_DecodersGetCount','GDIPlus_DecodersGetSize', - 'GDIPlus_Encoders','GDIPlus_EncodersGetCLSID', - 'GDIPlus_EncodersGetCount','GDIPlus_EncodersGetParamList', - 'GDIPlus_EncodersGetParamListSize','GDIPlus_EncodersGetSize', - 'GDIPlus_FontCreate','GDIPlus_FontDispose', - 'GDIPlus_FontFamilyCreate','GDIPlus_FontFamilyDispose', - 'GDIPlus_GraphicsClear','GDIPlus_GraphicsCreateFromHDC', - 'GDIPlus_GraphicsCreateFromHWND','GDIPlus_GraphicsDispose', - 'GDIPlus_GraphicsDrawArc','GDIPlus_GraphicsDrawBezier', - 'GDIPlus_GraphicsDrawClosedCurve','GDIPlus_GraphicsDrawCurve', - 'GDIPlus_GraphicsDrawEllipse','GDIPlus_GraphicsDrawImage', - 'GDIPlus_GraphicsDrawImageRect','GDIPlus_GraphicsDrawImageRectRect', - 'GDIPlus_GraphicsDrawLine','GDIPlus_GraphicsDrawPie', - 'GDIPlus_GraphicsDrawPolygon','GDIPlus_GraphicsDrawRect', - 'GDIPlus_GraphicsDrawString','GDIPlus_GraphicsDrawStringEx', - 'GDIPlus_GraphicsFillClosedCurve','GDIPlus_GraphicsFillEllipse', - 'GDIPlus_GraphicsFillPie','GDIPlus_GraphicsFillRect', - 'GDIPlus_GraphicsGetDC','GDIPlus_GraphicsGetSmoothingMode', - 'GDIPlus_GraphicsMeasureString','GDIPlus_GraphicsReleaseDC', - 'GDIPlus_GraphicsSetSmoothingMode','GDIPlus_GraphicsSetTransform', - 'GDIPlus_ImageDispose','GDIPlus_ImageGetGraphicsContext', - 'GDIPlus_ImageGetHeight','GDIPlus_ImageGetWidth', - 'GDIPlus_ImageLoadFromFile','GDIPlus_ImageSaveToFile', - 'GDIPlus_ImageSaveToFileEx','GDIPlus_MatrixCreate', - 'GDIPlus_MatrixDispose','GDIPlus_MatrixRotate','GDIPlus_ParamAdd', - 'GDIPlus_ParamInit','GDIPlus_PenCreate','GDIPlus_PenDispose', - 'GDIPlus_PenGetAlignment','GDIPlus_PenGetColor', - 'GDIPlus_PenGetCustomEndCap','GDIPlus_PenGetDashCap', - 'GDIPlus_PenGetDashStyle','GDIPlus_PenGetEndCap', - 'GDIPlus_PenGetWidth','GDIPlus_PenSetAlignment', - 'GDIPlus_PenSetColor','GDIPlus_PenSetCustomEndCap', - 'GDIPlus_PenSetDashCap','GDIPlus_PenSetDashStyle', - 'GDIPlus_PenSetEndCap','GDIPlus_PenSetWidth','GDIPlus_RectFCreate', - 'GDIPlus_Shutdown','GDIPlus_Startup','GDIPlus_StringFormatCreate', - 'GDIPlus_StringFormatDispose','GetIP','GUICtrlAVI_Close', - 'GUICtrlAVI_Create','GUICtrlAVI_Destroy','GUICtrlAVI_Open', - 'GUICtrlAVI_OpenEx','GUICtrlAVI_Play','GUICtrlAVI_Seek', - 'GUICtrlAVI_Show','GUICtrlAVI_Stop','GUICtrlButton_Click', - 'GUICtrlButton_Create','GUICtrlButton_Destroy', - 'GUICtrlButton_Enable','GUICtrlButton_GetCheck', - 'GUICtrlButton_GetFocus','GUICtrlButton_GetIdealSize', - 'GUICtrlButton_GetImage','GUICtrlButton_GetImageList', - 'GUICtrlButton_GetState','GUICtrlButton_GetText', - 'GUICtrlButton_GetTextMargin','GUICtrlButton_SetCheck', - 'GUICtrlButton_SetFocus','GUICtrlButton_SetImage', - 'GUICtrlButton_SetImageList','GUICtrlButton_SetSize', - 'GUICtrlButton_SetState','GUICtrlButton_SetStyle', - 'GUICtrlButton_SetText','GUICtrlButton_SetTextMargin', - 'GUICtrlButton_Show','GUICtrlComboBox_AddDir', - 'GUICtrlComboBox_AddString','GUICtrlComboBox_AutoComplete', - 'GUICtrlComboBox_BeginUpdate','GUICtrlComboBox_Create', - 'GUICtrlComboBox_DeleteString','GUICtrlComboBox_Destroy', - 'GUICtrlComboBox_EndUpdate','GUICtrlComboBox_FindString', - 'GUICtrlComboBox_FindStringExact','GUICtrlComboBox_GetComboBoxInfo', - 'GUICtrlComboBox_GetCount','GUICtrlComboBox_GetCurSel', - 'GUICtrlComboBox_GetDroppedControlRect', - 'GUICtrlComboBox_GetDroppedControlRectEx', - 'GUICtrlComboBox_GetDroppedState','GUICtrlComboBox_GetDroppedWidth', - 'GUICtrlComboBox_GetEditSel','GUICtrlComboBox_GetEditText', - 'GUICtrlComboBox_GetExtendedUI', - 'GUICtrlComboBox_GetHorizontalExtent', - 'GUICtrlComboBox_GetItemHeight','GUICtrlComboBox_GetLBText', - 'GUICtrlComboBox_GetLBTextLen','GUICtrlComboBox_GetList', - 'GUICtrlComboBox_GetListArray','GUICtrlComboBox_GetLocale', - 'GUICtrlComboBox_GetLocaleCountry','GUICtrlComboBox_GetLocaleLang', - 'GUICtrlComboBox_GetLocalePrimLang', - 'GUICtrlComboBox_GetLocaleSubLang','GUICtrlComboBox_GetMinVisible', - 'GUICtrlComboBox_GetTopIndex','GUICtrlComboBox_InitStorage', - 'GUICtrlComboBox_InsertString','GUICtrlComboBox_LimitText', - 'GUICtrlComboBox_ReplaceEditSel','GUICtrlComboBox_ResetContent', - 'GUICtrlComboBox_SelectString','GUICtrlComboBox_SetCurSel', - 'GUICtrlComboBox_SetDroppedWidth','GUICtrlComboBox_SetEditSel', - 'GUICtrlComboBox_SetEditText','GUICtrlComboBox_SetExtendedUI', - 'GUICtrlComboBox_SetHorizontalExtent', - 'GUICtrlComboBox_SetItemHeight','GUICtrlComboBox_SetMinVisible', - 'GUICtrlComboBox_SetTopIndex','GUICtrlComboBox_ShowDropDown', - 'GUICtrlComboBoxEx_AddDir','GUICtrlComboBoxEx_AddString', - 'GUICtrlComboBoxEx_BeginUpdate','GUICtrlComboBoxEx_Create', - 'GUICtrlComboBoxEx_CreateSolidBitMap', - 'GUICtrlComboBoxEx_DeleteString','GUICtrlComboBoxEx_Destroy', - 'GUICtrlComboBoxEx_EndUpdate','GUICtrlComboBoxEx_FindStringExact', - 'GUICtrlComboBoxEx_GetComboBoxInfo', - 'GUICtrlComboBoxEx_GetComboControl','GUICtrlComboBoxEx_GetCount', - 'GUICtrlComboBoxEx_GetCurSel', - 'GUICtrlComboBoxEx_GetDroppedControlRect', - 'GUICtrlComboBoxEx_GetDroppedControlRectEx', - 'GUICtrlComboBoxEx_GetDroppedState', - 'GUICtrlComboBoxEx_GetDroppedWidth', - 'GUICtrlComboBoxEx_GetEditControl','GUICtrlComboBoxEx_GetEditSel', - 'GUICtrlComboBoxEx_GetEditText', - 'GUICtrlComboBoxEx_GetExtendedStyle', - 'GUICtrlComboBoxEx_GetExtendedUI','GUICtrlComboBoxEx_GetImageList', - 'GUICtrlComboBoxEx_GetItem','GUICtrlComboBoxEx_GetItemEx', - 'GUICtrlComboBoxEx_GetItemHeight','GUICtrlComboBoxEx_GetItemImage', - 'GUICtrlComboBoxEx_GetItemIndent', - 'GUICtrlComboBoxEx_GetItemOverlayImage', - 'GUICtrlComboBoxEx_GetItemParam', - 'GUICtrlComboBoxEx_GetItemSelectedImage', - 'GUICtrlComboBoxEx_GetItemText','GUICtrlComboBoxEx_GetItemTextLen', - 'GUICtrlComboBoxEx_GetList','GUICtrlComboBoxEx_GetListArray', - 'GUICtrlComboBoxEx_GetLocale','GUICtrlComboBoxEx_GetLocaleCountry', - 'GUICtrlComboBoxEx_GetLocaleLang', - 'GUICtrlComboBoxEx_GetLocalePrimLang', - 'GUICtrlComboBoxEx_GetLocaleSubLang', - 'GUICtrlComboBoxEx_GetMinVisible','GUICtrlComboBoxEx_GetTopIndex', - 'GUICtrlComboBoxEx_InitStorage','GUICtrlComboBoxEx_InsertString', - 'GUICtrlComboBoxEx_LimitText','GUICtrlComboBoxEx_ReplaceEditSel', - 'GUICtrlComboBoxEx_ResetContent','GUICtrlComboBoxEx_SetCurSel', - 'GUICtrlComboBoxEx_SetDroppedWidth','GUICtrlComboBoxEx_SetEditSel', - 'GUICtrlComboBoxEx_SetEditText', - 'GUICtrlComboBoxEx_SetExtendedStyle', - 'GUICtrlComboBoxEx_SetExtendedUI','GUICtrlComboBoxEx_SetImageList', - 'GUICtrlComboBoxEx_SetItem','GUICtrlComboBoxEx_SetItemEx', - 'GUICtrlComboBoxEx_SetItemHeight','GUICtrlComboBoxEx_SetItemImage', - 'GUICtrlComboBoxEx_SetItemIndent', - 'GUICtrlComboBoxEx_SetItemOverlayImage', - 'GUICtrlComboBoxEx_SetItemParam', - 'GUICtrlComboBoxEx_SetItemSelectedImage', - 'GUICtrlComboBoxEx_SetMinVisible','GUICtrlComboBoxEx_SetTopIndex', - 'GUICtrlComboBoxEx_ShowDropDown','GUICtrlDTP_Create', - 'GUICtrlDTP_Destroy','GUICtrlDTP_GetMCColor','GUICtrlDTP_GetMCFont', - 'GUICtrlDTP_GetMonthCal','GUICtrlDTP_GetRange', - 'GUICtrlDTP_GetRangeEx','GUICtrlDTP_GetSystemTime', - 'GUICtrlDTP_GetSystemTimeEx','GUICtrlDTP_SetFormat', - 'GUICtrlDTP_SetMCColor','GUICtrlDTP_SetMCFont', - 'GUICtrlDTP_SetRange','GUICtrlDTP_SetRangeEx', - 'GUICtrlDTP_SetSystemTime','GUICtrlDTP_SetSystemTimeEx', - 'GUICtrlEdit_AppendText','GUICtrlEdit_BeginUpdate', - 'GUICtrlEdit_CanUndo','GUICtrlEdit_CharFromPos', - 'GUICtrlEdit_Create','GUICtrlEdit_Destroy', - 'GUICtrlEdit_EmptyUndoBuffer','GUICtrlEdit_EndUpdate', - 'GUICtrlEdit_Find','GUICtrlEdit_FmtLines', - 'GUICtrlEdit_GetFirstVisibleLine','GUICtrlEdit_GetLimitText', - 'GUICtrlEdit_GetLine','GUICtrlEdit_GetLineCount', - 'GUICtrlEdit_GetMargins','GUICtrlEdit_GetModify', - 'GUICtrlEdit_GetPasswordChar','GUICtrlEdit_GetRECT', - 'GUICtrlEdit_GetRECTEx','GUICtrlEdit_GetSel','GUICtrlEdit_GetText', - 'GUICtrlEdit_GetTextLen','GUICtrlEdit_HideBalloonTip', - 'GUICtrlEdit_InsertText','GUICtrlEdit_LineFromChar', - 'GUICtrlEdit_LineIndex','GUICtrlEdit_LineLength', - 'GUICtrlEdit_LineScroll','GUICtrlEdit_PosFromChar', - 'GUICtrlEdit_ReplaceSel','GUICtrlEdit_Scroll', - 'GUICtrlEdit_SetLimitText','GUICtrlEdit_SetMargins', - 'GUICtrlEdit_SetModify','GUICtrlEdit_SetPasswordChar', - 'GUICtrlEdit_SetReadOnly','GUICtrlEdit_SetRECT', - 'GUICtrlEdit_SetRECTEx','GUICtrlEdit_SetRECTNP', - 'GUICtrlEdit_SetRectNPEx','GUICtrlEdit_SetSel', - 'GUICtrlEdit_SetTabStops','GUICtrlEdit_SetText', - 'GUICtrlEdit_ShowBalloonTip','GUICtrlEdit_Undo', - 'GUICtrlHeader_AddItem','GUICtrlHeader_ClearFilter', - 'GUICtrlHeader_ClearFilterAll','GUICtrlHeader_Create', - 'GUICtrlHeader_CreateDragImage','GUICtrlHeader_DeleteItem', - 'GUICtrlHeader_Destroy','GUICtrlHeader_EditFilter', - 'GUICtrlHeader_GetBitmapMargin','GUICtrlHeader_GetImageList', - 'GUICtrlHeader_GetItem','GUICtrlHeader_GetItemAlign', - 'GUICtrlHeader_GetItemBitmap','GUICtrlHeader_GetItemCount', - 'GUICtrlHeader_GetItemDisplay','GUICtrlHeader_GetItemFlags', - 'GUICtrlHeader_GetItemFormat','GUICtrlHeader_GetItemImage', - 'GUICtrlHeader_GetItemOrder','GUICtrlHeader_GetItemParam', - 'GUICtrlHeader_GetItemRect','GUICtrlHeader_GetItemRectEx', - 'GUICtrlHeader_GetItemText','GUICtrlHeader_GetItemWidth', - 'GUICtrlHeader_GetOrderArray','GUICtrlHeader_GetUnicodeFormat', - 'GUICtrlHeader_HitTest','GUICtrlHeader_InsertItem', - 'GUICtrlHeader_Layout','GUICtrlHeader_OrderToIndex', - 'GUICtrlHeader_SetBitmapMargin', - 'GUICtrlHeader_SetFilterChangeTimeout', - 'GUICtrlHeader_SetHotDivider','GUICtrlHeader_SetImageList', - 'GUICtrlHeader_SetItem','GUICtrlHeader_SetItemAlign', - 'GUICtrlHeader_SetItemBitmap','GUICtrlHeader_SetItemDisplay', - 'GUICtrlHeader_SetItemFlags','GUICtrlHeader_SetItemFormat', - 'GUICtrlHeader_SetItemImage','GUICtrlHeader_SetItemOrder', - 'GUICtrlHeader_SetItemParam','GUICtrlHeader_SetItemText', - 'GUICtrlHeader_SetItemWidth','GUICtrlHeader_SetOrderArray', - 'GUICtrlHeader_SetUnicodeFormat','GUICtrlIpAddress_ClearAddress', - 'GUICtrlIpAddress_Create','GUICtrlIpAddress_Destroy', - 'GUICtrlIpAddress_Get','GUICtrlIpAddress_GetArray', - 'GUICtrlIpAddress_GetEx','GUICtrlIpAddress_IsBlank', - 'GUICtrlIpAddress_Set','GUICtrlIpAddress_SetArray', - 'GUICtrlIpAddress_SetEx','GUICtrlIpAddress_SetFocus', - 'GUICtrlIpAddress_SetFont','GUICtrlIpAddress_SetRange', - 'GUICtrlIpAddress_ShowHide','GUICtrlListBox_AddFile', - 'GUICtrlListBox_AddString','GUICtrlListBox_BeginUpdate', - 'GUICtrlListBox_Create','GUICtrlListBox_DeleteString', - 'GUICtrlListBox_Destroy','GUICtrlListBox_Dir', - 'GUICtrlListBox_EndUpdate','GUICtrlListBox_FindInText', - 'GUICtrlListBox_FindString','GUICtrlListBox_GetAnchorIndex', - 'GUICtrlListBox_GetCaretIndex','GUICtrlListBox_GetCount', - 'GUICtrlListBox_GetCurSel','GUICtrlListBox_GetHorizontalExtent', - 'GUICtrlListBox_GetItemData','GUICtrlListBox_GetItemHeight', - 'GUICtrlListBox_GetItemRect','GUICtrlListBox_GetItemRectEx', - 'GUICtrlListBox_GetListBoxInfo','GUICtrlListBox_GetLocale', - 'GUICtrlListBox_GetLocaleCountry','GUICtrlListBox_GetLocaleLang', - 'GUICtrlListBox_GetLocalePrimLang', - 'GUICtrlListBox_GetLocaleSubLang','GUICtrlListBox_GetSel', - 'GUICtrlListBox_GetSelCount','GUICtrlListBox_GetSelItems', - 'GUICtrlListBox_GetSelItemsText','GUICtrlListBox_GetText', - 'GUICtrlListBox_GetTextLen','GUICtrlListBox_GetTopIndex', - 'GUICtrlListBox_InitStorage','GUICtrlListBox_InsertString', - 'GUICtrlListBox_ItemFromPoint','GUICtrlListBox_ReplaceString', - 'GUICtrlListBox_ResetContent','GUICtrlListBox_SelectString', - 'GUICtrlListBox_SelItemRange','GUICtrlListBox_SelItemRangeEx', - 'GUICtrlListBox_SetAnchorIndex','GUICtrlListBox_SetCaretIndex', - 'GUICtrlListBox_SetColumnWidth','GUICtrlListBox_SetCurSel', - 'GUICtrlListBox_SetHorizontalExtent','GUICtrlListBox_SetItemData', - 'GUICtrlListBox_SetItemHeight','GUICtrlListBox_SetLocale', - 'GUICtrlListBox_SetSel','GUICtrlListBox_SetTabStops', - 'GUICtrlListBox_SetTopIndex','GUICtrlListBox_Sort', - 'GUICtrlListBox_SwapString','GUICtrlListBox_UpdateHScroll', - 'GUICtrlListView_AddArray','GUICtrlListView_AddColumn', - 'GUICtrlListView_AddItem','GUICtrlListView_AddSubItem', - 'GUICtrlListView_ApproximateViewHeight', - 'GUICtrlListView_ApproximateViewRect', - 'GUICtrlListView_ApproximateViewWidth','GUICtrlListView_Arrange', - 'GUICtrlListView_BeginUpdate','GUICtrlListView_CancelEditLabel', - 'GUICtrlListView_ClickItem','GUICtrlListView_CopyItems', - 'GUICtrlListView_Create','GUICtrlListView_CreateDragImage', - 'GUICtrlListView_CreateSolidBitMap', - 'GUICtrlListView_DeleteAllItems','GUICtrlListView_DeleteColumn', - 'GUICtrlListView_DeleteItem','GUICtrlListView_DeleteItemsSelected', - 'GUICtrlListView_Destroy','GUICtrlListView_DrawDragImage', - 'GUICtrlListView_EditLabel','GUICtrlListView_EnableGroupView', - 'GUICtrlListView_EndUpdate','GUICtrlListView_EnsureVisible', - 'GUICtrlListView_FindInText','GUICtrlListView_FindItem', - 'GUICtrlListView_FindNearest','GUICtrlListView_FindParam', - 'GUICtrlListView_FindText','GUICtrlListView_GetBkColor', - 'GUICtrlListView_GetBkImage','GUICtrlListView_GetCallbackMask', - 'GUICtrlListView_GetColumn','GUICtrlListView_GetColumnCount', - 'GUICtrlListView_GetColumnOrder', - 'GUICtrlListView_GetColumnOrderArray', - 'GUICtrlListView_GetColumnWidth','GUICtrlListView_GetCounterPage', - 'GUICtrlListView_GetEditControl', - 'GUICtrlListView_GetExtendedListViewStyle', - 'GUICtrlListView_GetGroupInfo', - 'GUICtrlListView_GetGroupViewEnabled','GUICtrlListView_GetHeader', - 'GUICtrlListView_GetHotCursor','GUICtrlListView_GetHotItem', - 'GUICtrlListView_GetHoverTime','GUICtrlListView_GetImageList', - 'GUICtrlListView_GetISearchString','GUICtrlListView_GetItem', - 'GUICtrlListView_GetItemChecked','GUICtrlListView_GetItemCount', - 'GUICtrlListView_GetItemCut','GUICtrlListView_GetItemDropHilited', - 'GUICtrlListView_GetItemEx','GUICtrlListView_GetItemFocused', - 'GUICtrlListView_GetItemGroupID','GUICtrlListView_GetItemImage', - 'GUICtrlListView_GetItemIndent','GUICtrlListView_GetItemParam', - 'GUICtrlListView_GetItemPosition', - 'GUICtrlListView_GetItemPositionX', - 'GUICtrlListView_GetItemPositionY','GUICtrlListView_GetItemRect', - 'GUICtrlListView_GetItemRectEx','GUICtrlListView_GetItemSelected', - 'GUICtrlListView_GetItemSpacing','GUICtrlListView_GetItemSpacingX', - 'GUICtrlListView_GetItemSpacingY','GUICtrlListView_GetItemState', - 'GUICtrlListView_GetItemStateImage','GUICtrlListView_GetItemText', - 'GUICtrlListView_GetItemTextArray', - 'GUICtrlListView_GetItemTextString','GUICtrlListView_GetNextItem', - 'GUICtrlListView_GetNumberOfWorkAreas','GUICtrlListView_GetOrigin', - 'GUICtrlListView_GetOriginX','GUICtrlListView_GetOriginY', - 'GUICtrlListView_GetOutlineColor', - 'GUICtrlListView_GetSelectedColumn', - 'GUICtrlListView_GetSelectedCount', - 'GUICtrlListView_GetSelectedIndices', - 'GUICtrlListView_GetSelectionMark','GUICtrlListView_GetStringWidth', - 'GUICtrlListView_GetSubItemRect','GUICtrlListView_GetTextBkColor', - 'GUICtrlListView_GetTextColor','GUICtrlListView_GetToolTips', - 'GUICtrlListView_GetTopIndex','GUICtrlListView_GetUnicodeFormat', - 'GUICtrlListView_GetView','GUICtrlListView_GetViewDetails', - 'GUICtrlListView_GetViewLarge','GUICtrlListView_GetViewList', - 'GUICtrlListView_GetViewRect','GUICtrlListView_GetViewSmall', - 'GUICtrlListView_GetViewTile','GUICtrlListView_HideColumn', - 'GUICtrlListView_HitTest','GUICtrlListView_InsertColumn', - 'GUICtrlListView_InsertGroup','GUICtrlListView_InsertItem', - 'GUICtrlListView_JustifyColumn','GUICtrlListView_MapIDToIndex', - 'GUICtrlListView_MapIndexToID','GUICtrlListView_RedrawItems', - 'GUICtrlListView_RegisterSortCallBack', - 'GUICtrlListView_RemoveAllGroups','GUICtrlListView_RemoveGroup', - 'GUICtrlListView_Scroll','GUICtrlListView_SetBkColor', - 'GUICtrlListView_SetBkImage','GUICtrlListView_SetCallBackMask', - 'GUICtrlListView_SetColumn','GUICtrlListView_SetColumnOrder', - 'GUICtrlListView_SetColumnOrderArray', - 'GUICtrlListView_SetColumnWidth', - 'GUICtrlListView_SetExtendedListViewStyle', - 'GUICtrlListView_SetGroupInfo','GUICtrlListView_SetHotItem', - 'GUICtrlListView_SetHoverTime','GUICtrlListView_SetIconSpacing', - 'GUICtrlListView_SetImageList','GUICtrlListView_SetItem', - 'GUICtrlListView_SetItemChecked','GUICtrlListView_SetItemCount', - 'GUICtrlListView_SetItemCut','GUICtrlListView_SetItemDropHilited', - 'GUICtrlListView_SetItemEx','GUICtrlListView_SetItemFocused', - 'GUICtrlListView_SetItemGroupID','GUICtrlListView_SetItemImage', - 'GUICtrlListView_SetItemIndent','GUICtrlListView_SetItemParam', - 'GUICtrlListView_SetItemPosition', - 'GUICtrlListView_SetItemPosition32', - 'GUICtrlListView_SetItemSelected','GUICtrlListView_SetItemState', - 'GUICtrlListView_SetItemStateImage','GUICtrlListView_SetItemText', - 'GUICtrlListView_SetOutlineColor', - 'GUICtrlListView_SetSelectedColumn', - 'GUICtrlListView_SetSelectionMark','GUICtrlListView_SetTextBkColor', - 'GUICtrlListView_SetTextColor','GUICtrlListView_SetToolTips', - 'GUICtrlListView_SetUnicodeFormat','GUICtrlListView_SetView', - 'GUICtrlListView_SetWorkAreas','GUICtrlListView_SimpleSort', - 'GUICtrlListView_SortItems','GUICtrlListView_SubItemHitTest', - 'GUICtrlListView_UnRegisterSortCallBack', - 'GUICtrlMenu_AddMenuItem','GUICtrlMenu_AppendMenu', - 'GUICtrlMenu_CheckMenuItem','GUICtrlMenu_CheckRadioItem', - 'GUICtrlMenu_CreateMenu','GUICtrlMenu_CreatePopup', - 'GUICtrlMenu_DeleteMenu','GUICtrlMenu_DestroyMenu', - 'GUICtrlMenu_DrawMenuBar','GUICtrlMenu_EnableMenuItem', - 'GUICtrlMenu_FindItem','GUICtrlMenu_FindParent', - 'GUICtrlMenu_GetItemBmp','GUICtrlMenu_GetItemBmpChecked', - 'GUICtrlMenu_GetItemBmpUnchecked','GUICtrlMenu_GetItemChecked', - 'GUICtrlMenu_GetItemCount','GUICtrlMenu_GetItemData', - 'GUICtrlMenu_GetItemDefault','GUICtrlMenu_GetItemDisabled', - 'GUICtrlMenu_GetItemEnabled','GUICtrlMenu_GetItemGrayed', - 'GUICtrlMenu_GetItemHighlighted','GUICtrlMenu_GetItemID', - 'GUICtrlMenu_GetItemInfo','GUICtrlMenu_GetItemRect', - 'GUICtrlMenu_GetItemRectEx','GUICtrlMenu_GetItemState', - 'GUICtrlMenu_GetItemStateEx','GUICtrlMenu_GetItemSubMenu', - 'GUICtrlMenu_GetItemText','GUICtrlMenu_GetItemType', - 'GUICtrlMenu_GetMenu','GUICtrlMenu_GetMenuBackground', - 'GUICtrlMenu_GetMenuBarInfo','GUICtrlMenu_GetMenuContextHelpID', - 'GUICtrlMenu_GetMenuData','GUICtrlMenu_GetMenuDefaultItem', - 'GUICtrlMenu_GetMenuHeight','GUICtrlMenu_GetMenuInfo', - 'GUICtrlMenu_GetMenuStyle','GUICtrlMenu_GetSystemMenu', - 'GUICtrlMenu_InsertMenuItem','GUICtrlMenu_InsertMenuItemEx', - 'GUICtrlMenu_IsMenu','GUICtrlMenu_LoadMenu', - 'GUICtrlMenu_MapAccelerator','GUICtrlMenu_MenuItemFromPoint', - 'GUICtrlMenu_RemoveMenu','GUICtrlMenu_SetItemBitmaps', - 'GUICtrlMenu_SetItemBmp','GUICtrlMenu_SetItemBmpChecked', - 'GUICtrlMenu_SetItemBmpUnchecked','GUICtrlMenu_SetItemChecked', - 'GUICtrlMenu_SetItemData','GUICtrlMenu_SetItemDefault', - 'GUICtrlMenu_SetItemDisabled','GUICtrlMenu_SetItemEnabled', - 'GUICtrlMenu_SetItemGrayed','GUICtrlMenu_SetItemHighlighted', - 'GUICtrlMenu_SetItemID','GUICtrlMenu_SetItemInfo', - 'GUICtrlMenu_SetItemState','GUICtrlMenu_SetItemSubMenu', - 'GUICtrlMenu_SetItemText','GUICtrlMenu_SetItemType', - 'GUICtrlMenu_SetMenu','GUICtrlMenu_SetMenuBackground', - 'GUICtrlMenu_SetMenuContextHelpID','GUICtrlMenu_SetMenuData', - 'GUICtrlMenu_SetMenuDefaultItem','GUICtrlMenu_SetMenuHeight', - 'GUICtrlMenu_SetMenuInfo','GUICtrlMenu_SetMenuStyle', - 'GUICtrlMenu_TrackPopupMenu','GUICtrlMonthCal_Create', - 'GUICtrlMonthCal_Destroy','GUICtrlMonthCal_GetColor', - 'GUICtrlMonthCal_GetColorArray','GUICtrlMonthCal_GetCurSel', - 'GUICtrlMonthCal_GetCurSelStr','GUICtrlMonthCal_GetFirstDOW', - 'GUICtrlMonthCal_GetFirstDOWStr','GUICtrlMonthCal_GetMaxSelCount', - 'GUICtrlMonthCal_GetMaxTodayWidth', - 'GUICtrlMonthCal_GetMinReqHeight','GUICtrlMonthCal_GetMinReqRect', - 'GUICtrlMonthCal_GetMinReqRectArray', - 'GUICtrlMonthCal_GetMinReqWidth','GUICtrlMonthCal_GetMonthDelta', - 'GUICtrlMonthCal_GetMonthRange','GUICtrlMonthCal_GetMonthRangeMax', - 'GUICtrlMonthCal_GetMonthRangeMaxStr', - 'GUICtrlMonthCal_GetMonthRangeMin', - 'GUICtrlMonthCal_GetMonthRangeMinStr', - 'GUICtrlMonthCal_GetMonthRangeSpan','GUICtrlMonthCal_GetRange', - 'GUICtrlMonthCal_GetRangeMax','GUICtrlMonthCal_GetRangeMaxStr', - 'GUICtrlMonthCal_GetRangeMin','GUICtrlMonthCal_GetRangeMinStr', - 'GUICtrlMonthCal_GetSelRange','GUICtrlMonthCal_GetSelRangeMax', - 'GUICtrlMonthCal_GetSelRangeMaxStr', - 'GUICtrlMonthCal_GetSelRangeMin', - 'GUICtrlMonthCal_GetSelRangeMinStr','GUICtrlMonthCal_GetToday', - 'GUICtrlMonthCal_GetTodayStr','GUICtrlMonthCal_GetUnicodeFormat', - 'GUICtrlMonthCal_HitTest','GUICtrlMonthCal_SetColor', - 'GUICtrlMonthCal_SetCurSel','GUICtrlMonthCal_SetDayState', - 'GUICtrlMonthCal_SetFirstDOW','GUICtrlMonthCal_SetMaxSelCount', - 'GUICtrlMonthCal_SetMonthDelta','GUICtrlMonthCal_SetRange', - 'GUICtrlMonthCal_SetSelRange','GUICtrlMonthCal_SetToday', - 'GUICtrlMonthCal_SetUnicodeFormat','GUICtrlRebar_AddBand', - 'GUICtrlRebar_AddToolBarBand','GUICtrlRebar_BeginDrag', - 'GUICtrlRebar_Create','GUICtrlRebar_DeleteBand', - 'GUICtrlRebar_Destroy','GUICtrlRebar_DragMove', - 'GUICtrlRebar_EndDrag','GUICtrlRebar_GetBandBackColor', - 'GUICtrlRebar_GetBandBorders','GUICtrlRebar_GetBandBordersEx', - 'GUICtrlRebar_GetBandChildHandle','GUICtrlRebar_GetBandChildSize', - 'GUICtrlRebar_GetBandCount','GUICtrlRebar_GetBandForeColor', - 'GUICtrlRebar_GetBandHeaderSize','GUICtrlRebar_GetBandID', - 'GUICtrlRebar_GetBandIdealSize','GUICtrlRebar_GetBandLength', - 'GUICtrlRebar_GetBandLParam','GUICtrlRebar_GetBandMargins', - 'GUICtrlRebar_GetBandMarginsEx','GUICtrlRebar_GetBandRect', - 'GUICtrlRebar_GetBandRectEx','GUICtrlRebar_GetBandStyle', - 'GUICtrlRebar_GetBandStyleBreak', - 'GUICtrlRebar_GetBandStyleChildEdge', - 'GUICtrlRebar_GetBandStyleFixedBMP', - 'GUICtrlRebar_GetBandStyleFixedSize', - 'GUICtrlRebar_GetBandStyleGripperAlways', - 'GUICtrlRebar_GetBandStyleHidden', - 'GUICtrlRebar_GetBandStyleHideTitle', - 'GUICtrlRebar_GetBandStyleNoGripper', - 'GUICtrlRebar_GetBandStyleTopAlign', - 'GUICtrlRebar_GetBandStyleUseChevron', - 'GUICtrlRebar_GetBandStyleVariableHeight', - 'GUICtrlRebar_GetBandText','GUICtrlRebar_GetBarHeight', - 'GUICtrlRebar_GetBKColor','GUICtrlRebar_GetColorScheme', - 'GUICtrlRebar_GetRowCount','GUICtrlRebar_GetRowHeight', - 'GUICtrlRebar_GetTextColor','GUICtrlRebar_GetToolTips', - 'GUICtrlRebar_GetUnicodeFormat','GUICtrlRebar_HitTest', - 'GUICtrlRebar_IDToIndex','GUICtrlRebar_MaximizeBand', - 'GUICtrlRebar_MinimizeBand','GUICtrlRebar_MoveBand', - 'GUICtrlRebar_SetBandBackColor','GUICtrlRebar_SetBandForeColor', - 'GUICtrlRebar_SetBandHeaderSize','GUICtrlRebar_SetBandID', - 'GUICtrlRebar_SetBandIdealSize','GUICtrlRebar_SetBandLength', - 'GUICtrlRebar_SetBandLParam','GUICtrlRebar_SetBandStyle', - 'GUICtrlRebar_SetBandStyleBreak', - 'GUICtrlRebar_SetBandStyleChildEdge', - 'GUICtrlRebar_SetBandStyleFixedBMP', - 'GUICtrlRebar_SetBandStyleFixedSize', - 'GUICtrlRebar_SetBandStyleGripperAlways', - 'GUICtrlRebar_SetBandStyleHidden', - 'GUICtrlRebar_SetBandStyleHideTitle', - 'GUICtrlRebar_SetBandStyleNoGripper', - 'GUICtrlRebar_SetBandStyleTopAlign', - 'GUICtrlRebar_SetBandStyleUseChevron', - 'GUICtrlRebar_SetBandStyleVariableHeight', - 'GUICtrlRebar_SetBandText','GUICtrlRebar_SetBKColor', - 'GUICtrlRebar_SetColorScheme','GUICtrlRebar_SetTextColor', - 'GUICtrlRebar_SetToolTips','GUICtrlRebar_SetUnicodeFormat', - 'GUICtrlRebar_ShowBand','GUICtrlSlider_ClearSel', - 'GUICtrlSlider_ClearTics','GUICtrlSlider_Create', - 'GUICtrlSlider_Destroy','GUICtrlSlider_GetBuddy', - 'GUICtrlSlider_GetChannelRect','GUICtrlSlider_GetLineSize', - 'GUICtrlSlider_GetNumTics','GUICtrlSlider_GetPageSize', - 'GUICtrlSlider_GetPos','GUICtrlSlider_GetPTics', - 'GUICtrlSlider_GetRange','GUICtrlSlider_GetRangeMax', - 'GUICtrlSlider_GetRangeMin','GUICtrlSlider_GetSel', - 'GUICtrlSlider_GetSelEnd','GUICtrlSlider_GetSelStart', - 'GUICtrlSlider_GetThumbLength','GUICtrlSlider_GetThumbRect', - 'GUICtrlSlider_GetThumbRectEx','GUICtrlSlider_GetTic', - 'GUICtrlSlider_GetTicPos','GUICtrlSlider_GetToolTips', - 'GUICtrlSlider_GetUnicodeFormat','GUICtrlSlider_SetBuddy', - 'GUICtrlSlider_SetLineSize','GUICtrlSlider_SetPageSize', - 'GUICtrlSlider_SetPos','GUICtrlSlider_SetRange', - 'GUICtrlSlider_SetRangeMax','GUICtrlSlider_SetRangeMin', - 'GUICtrlSlider_SetSel','GUICtrlSlider_SetSelEnd', - 'GUICtrlSlider_SetSelStart','GUICtrlSlider_SetThumbLength', - 'GUICtrlSlider_SetTic','GUICtrlSlider_SetTicFreq', - 'GUICtrlSlider_SetTipSide','GUICtrlSlider_SetToolTips', - 'GUICtrlSlider_SetUnicodeFormat','GUICtrlStatusBar_Create', - 'GUICtrlStatusBar_Destroy','GUICtrlStatusBar_EmbedControl', - 'GUICtrlStatusBar_GetBorders','GUICtrlStatusBar_GetBordersHorz', - 'GUICtrlStatusBar_GetBordersRect','GUICtrlStatusBar_GetBordersVert', - 'GUICtrlStatusBar_GetCount','GUICtrlStatusBar_GetHeight', - 'GUICtrlStatusBar_GetIcon','GUICtrlStatusBar_GetParts', - 'GUICtrlStatusBar_GetRect','GUICtrlStatusBar_GetRectEx', - 'GUICtrlStatusBar_GetText','GUICtrlStatusBar_GetTextFlags', - 'GUICtrlStatusBar_GetTextLength','GUICtrlStatusBar_GetTextLengthEx', - 'GUICtrlStatusBar_GetTipText','GUICtrlStatusBar_GetUnicodeFormat', - 'GUICtrlStatusBar_GetWidth','GUICtrlStatusBar_IsSimple', - 'GUICtrlStatusBar_Resize','GUICtrlStatusBar_SetBkColor', - 'GUICtrlStatusBar_SetIcon','GUICtrlStatusBar_SetMinHeight', - 'GUICtrlStatusBar_SetParts','GUICtrlStatusBar_SetSimple', - 'GUICtrlStatusBar_SetText','GUICtrlStatusBar_SetTipText', - 'GUICtrlStatusBar_SetUnicodeFormat','GUICtrlStatusBar_ShowHide', - 'GUICtrlTab_Create','GUICtrlTab_DeleteAllItems', - 'GUICtrlTab_DeleteItem','GUICtrlTab_DeselectAll', - 'GUICtrlTab_Destroy','GUICtrlTab_FindTab','GUICtrlTab_GetCurFocus', - 'GUICtrlTab_GetCurSel','GUICtrlTab_GetDisplayRect', - 'GUICtrlTab_GetDisplayRectEx','GUICtrlTab_GetExtendedStyle', - 'GUICtrlTab_GetImageList','GUICtrlTab_GetItem', - 'GUICtrlTab_GetItemCount','GUICtrlTab_GetItemImage', - 'GUICtrlTab_GetItemParam','GUICtrlTab_GetItemRect', - 'GUICtrlTab_GetItemRectEx','GUICtrlTab_GetItemState', - 'GUICtrlTab_GetItemText','GUICtrlTab_GetRowCount', - 'GUICtrlTab_GetToolTips','GUICtrlTab_GetUnicodeFormat', - 'GUICtrlTab_HighlightItem','GUICtrlTab_HitTest', - 'GUICtrlTab_InsertItem','GUICtrlTab_RemoveImage', - 'GUICtrlTab_SetCurFocus','GUICtrlTab_SetCurSel', - 'GUICtrlTab_SetExtendedStyle','GUICtrlTab_SetImageList', - 'GUICtrlTab_SetItem','GUICtrlTab_SetItemImage', - 'GUICtrlTab_SetItemParam','GUICtrlTab_SetItemSize', - 'GUICtrlTab_SetItemState','GUICtrlTab_SetItemText', - 'GUICtrlTab_SetMinTabWidth','GUICtrlTab_SetPadding', - 'GUICtrlTab_SetToolTips','GUICtrlTab_SetUnicodeFormat', - 'GUICtrlToolbar_AddBitmap','GUICtrlToolbar_AddButton', - 'GUICtrlToolbar_AddButtonSep','GUICtrlToolbar_AddString', - 'GUICtrlToolbar_ButtonCount','GUICtrlToolbar_CheckButton', - 'GUICtrlToolbar_ClickAccel','GUICtrlToolbar_ClickButton', - 'GUICtrlToolbar_ClickIndex','GUICtrlToolbar_CommandToIndex', - 'GUICtrlToolbar_Create','GUICtrlToolbar_Customize', - 'GUICtrlToolbar_DeleteButton','GUICtrlToolbar_Destroy', - 'GUICtrlToolbar_EnableButton','GUICtrlToolbar_FindToolbar', - 'GUICtrlToolbar_GetAnchorHighlight','GUICtrlToolbar_GetBitmapFlags', - 'GUICtrlToolbar_GetButtonBitmap','GUICtrlToolbar_GetButtonInfo', - 'GUICtrlToolbar_GetButtonInfoEx','GUICtrlToolbar_GetButtonParam', - 'GUICtrlToolbar_GetButtonRect','GUICtrlToolbar_GetButtonRectEx', - 'GUICtrlToolbar_GetButtonSize','GUICtrlToolbar_GetButtonState', - 'GUICtrlToolbar_GetButtonStyle','GUICtrlToolbar_GetButtonText', - 'GUICtrlToolbar_GetColorScheme', - 'GUICtrlToolbar_GetDisabledImageList', - 'GUICtrlToolbar_GetExtendedStyle','GUICtrlToolbar_GetHotImageList', - 'GUICtrlToolbar_GetHotItem','GUICtrlToolbar_GetImageList', - 'GUICtrlToolbar_GetInsertMark','GUICtrlToolbar_GetInsertMarkColor', - 'GUICtrlToolbar_GetMaxSize','GUICtrlToolbar_GetMetrics', - 'GUICtrlToolbar_GetPadding','GUICtrlToolbar_GetRows', - 'GUICtrlToolbar_GetString','GUICtrlToolbar_GetStyle', - 'GUICtrlToolbar_GetStyleAltDrag', - 'GUICtrlToolbar_GetStyleCustomErase','GUICtrlToolbar_GetStyleFlat', - 'GUICtrlToolbar_GetStyleList','GUICtrlToolbar_GetStyleRegisterDrop', - 'GUICtrlToolbar_GetStyleToolTips', - 'GUICtrlToolbar_GetStyleTransparent', - 'GUICtrlToolbar_GetStyleWrapable','GUICtrlToolbar_GetTextRows', - 'GUICtrlToolbar_GetToolTips','GUICtrlToolbar_GetUnicodeFormat', - 'GUICtrlToolbar_HideButton','GUICtrlToolbar_HighlightButton', - 'GUICtrlToolbar_HitTest','GUICtrlToolbar_IndexToCommand', - 'GUICtrlToolbar_InsertButton','GUICtrlToolbar_InsertMarkHitTest', - 'GUICtrlToolbar_IsButtonChecked','GUICtrlToolbar_IsButtonEnabled', - 'GUICtrlToolbar_IsButtonHidden', - 'GUICtrlToolbar_IsButtonHighlighted', - 'GUICtrlToolbar_IsButtonIndeterminate', - 'GUICtrlToolbar_IsButtonPressed','GUICtrlToolbar_LoadBitmap', - 'GUICtrlToolbar_LoadImages','GUICtrlToolbar_MapAccelerator', - 'GUICtrlToolbar_MoveButton','GUICtrlToolbar_PressButton', - 'GUICtrlToolbar_SetAnchorHighlight','GUICtrlToolbar_SetBitmapSize', - 'GUICtrlToolbar_SetButtonBitMap','GUICtrlToolbar_SetButtonInfo', - 'GUICtrlToolbar_SetButtonInfoEx','GUICtrlToolbar_SetButtonParam', - 'GUICtrlToolbar_SetButtonSize','GUICtrlToolbar_SetButtonState', - 'GUICtrlToolbar_SetButtonStyle','GUICtrlToolbar_SetButtonText', - 'GUICtrlToolbar_SetButtonWidth','GUICtrlToolbar_SetCmdID', - 'GUICtrlToolbar_SetColorScheme', - 'GUICtrlToolbar_SetDisabledImageList', - 'GUICtrlToolbar_SetDrawTextFlags','GUICtrlToolbar_SetExtendedStyle', - 'GUICtrlToolbar_SetHotImageList','GUICtrlToolbar_SetHotItem', - 'GUICtrlToolbar_SetImageList','GUICtrlToolbar_SetIndent', - 'GUICtrlToolbar_SetIndeterminate','GUICtrlToolbar_SetInsertMark', - 'GUICtrlToolbar_SetInsertMarkColor','GUICtrlToolbar_SetMaxTextRows', - 'GUICtrlToolbar_SetMetrics','GUICtrlToolbar_SetPadding', - 'GUICtrlToolbar_SetParent','GUICtrlToolbar_SetRows', - 'GUICtrlToolbar_SetStyle','GUICtrlToolbar_SetStyleAltDrag', - 'GUICtrlToolbar_SetStyleCustomErase','GUICtrlToolbar_SetStyleFlat', - 'GUICtrlToolbar_SetStyleList','GUICtrlToolbar_SetStyleRegisterDrop', - 'GUICtrlToolbar_SetStyleToolTips', - 'GUICtrlToolbar_SetStyleTransparent', - 'GUICtrlToolbar_SetStyleWrapable','GUICtrlToolbar_SetToolTips', - 'GUICtrlToolbar_SetUnicodeFormat','GUICtrlToolbar_SetWindowTheme', - 'GUICtrlTreeView_Add','GUICtrlTreeView_AddChild', - 'GUICtrlTreeView_AddChildFirst','GUICtrlTreeView_AddFirst', - 'GUICtrlTreeView_BeginUpdate','GUICtrlTreeView_ClickItem', - 'GUICtrlTreeView_Create','GUICtrlTreeView_CreateDragImage', - 'GUICtrlTreeView_CreateSolidBitMap','GUICtrlTreeView_Delete', - 'GUICtrlTreeView_DeleteAll','GUICtrlTreeView_DeleteChildren', - 'GUICtrlTreeView_Destroy','GUICtrlTreeView_DisplayRect', - 'GUICtrlTreeView_DisplayRectEx','GUICtrlTreeView_EditText', - 'GUICtrlTreeView_EndEdit','GUICtrlTreeView_EndUpdate', - 'GUICtrlTreeView_EnsureVisible','GUICtrlTreeView_Expand', - 'GUICtrlTreeView_ExpandedOnce','GUICtrlTreeView_FindItem', - 'GUICtrlTreeView_FindItemEx','GUICtrlTreeView_GetBkColor', - 'GUICtrlTreeView_GetBold','GUICtrlTreeView_GetChecked', - 'GUICtrlTreeView_GetChildCount','GUICtrlTreeView_GetChildren', - 'GUICtrlTreeView_GetCount','GUICtrlTreeView_GetCut', - 'GUICtrlTreeView_GetDropTarget','GUICtrlTreeView_GetEditControl', - 'GUICtrlTreeView_GetExpanded','GUICtrlTreeView_GetFirstChild', - 'GUICtrlTreeView_GetFirstItem','GUICtrlTreeView_GetFirstVisible', - 'GUICtrlTreeView_GetFocused','GUICtrlTreeView_GetHeight', - 'GUICtrlTreeView_GetImageIndex', - 'GUICtrlTreeView_GetImageListIconHandle', - 'GUICtrlTreeView_GetIndent','GUICtrlTreeView_GetInsertMarkColor', - 'GUICtrlTreeView_GetISearchString','GUICtrlTreeView_GetItemByIndex', - 'GUICtrlTreeView_GetItemHandle','GUICtrlTreeView_GetItemParam', - 'GUICtrlTreeView_GetLastChild','GUICtrlTreeView_GetLineColor', - 'GUICtrlTreeView_GetNext','GUICtrlTreeView_GetNextChild', - 'GUICtrlTreeView_GetNextSibling','GUICtrlTreeView_GetNextVisible', - 'GUICtrlTreeView_GetNormalImageList', - 'GUICtrlTreeView_GetParentHandle','GUICtrlTreeView_GetParentParam', - 'GUICtrlTreeView_GetPrev','GUICtrlTreeView_GetPrevChild', - 'GUICtrlTreeView_GetPrevSibling','GUICtrlTreeView_GetPrevVisible', - 'GUICtrlTreeView_GetScrollTime','GUICtrlTreeView_GetSelected', - 'GUICtrlTreeView_GetSelectedImageIndex', - 'GUICtrlTreeView_GetSelection','GUICtrlTreeView_GetSiblingCount', - 'GUICtrlTreeView_GetState','GUICtrlTreeView_GetStateImageIndex', - 'GUICtrlTreeView_GetStateImageList','GUICtrlTreeView_GetText', - 'GUICtrlTreeView_GetTextColor','GUICtrlTreeView_GetToolTips', - 'GUICtrlTreeView_GetTree','GUICtrlTreeView_GetUnicodeFormat', - 'GUICtrlTreeView_GetVisible','GUICtrlTreeView_GetVisibleCount', - 'GUICtrlTreeView_HitTest','GUICtrlTreeView_HitTestEx', - 'GUICtrlTreeView_HitTestItem','GUICtrlTreeView_Index', - 'GUICtrlTreeView_InsertItem','GUICtrlTreeView_IsFirstItem', - 'GUICtrlTreeView_IsParent','GUICtrlTreeView_Level', - 'GUICtrlTreeView_SelectItem','GUICtrlTreeView_SelectItemByIndex', - 'GUICtrlTreeView_SetBkColor','GUICtrlTreeView_SetBold', - 'GUICtrlTreeView_SetChecked','GUICtrlTreeView_SetCheckedByIndex', - 'GUICtrlTreeView_SetChildren','GUICtrlTreeView_SetCut', - 'GUICtrlTreeView_SetDropTarget','GUICtrlTreeView_SetFocused', - 'GUICtrlTreeView_SetHeight','GUICtrlTreeView_SetIcon', - 'GUICtrlTreeView_SetImageIndex','GUICtrlTreeView_SetIndent', - 'GUICtrlTreeView_SetInsertMark', - 'GUICtrlTreeView_SetInsertMarkColor', - 'GUICtrlTreeView_SetItemHeight','GUICtrlTreeView_SetItemParam', - 'GUICtrlTreeView_SetLineColor','GUICtrlTreeView_SetNormalImageList', - 'GUICtrlTreeView_SetScrollTime','GUICtrlTreeView_SetSelected', - 'GUICtrlTreeView_SetSelectedImageIndex','GUICtrlTreeView_SetState', - 'GUICtrlTreeView_SetStateImageIndex', - 'GUICtrlTreeView_SetStateImageList','GUICtrlTreeView_SetText', - 'GUICtrlTreeView_SetTextColor','GUICtrlTreeView_SetToolTips', - 'GUICtrlTreeView_SetUnicodeFormat','GUICtrlTreeView_Sort', - 'GUIImageList_Add','GUIImageList_AddBitmap','GUIImageList_AddIcon', - 'GUIImageList_AddMasked','GUIImageList_BeginDrag', - 'GUIImageList_Copy','GUIImageList_Create','GUIImageList_Destroy', - 'GUIImageList_DestroyIcon','GUIImageList_DragEnter', - 'GUIImageList_DragLeave','GUIImageList_DragMove', - 'GUIImageList_Draw','GUIImageList_DrawEx','GUIImageList_Duplicate', - 'GUIImageList_EndDrag','GUIImageList_GetBkColor', - 'GUIImageList_GetIcon','GUIImageList_GetIconHeight', - 'GUIImageList_GetIconSize','GUIImageList_GetIconSizeEx', - 'GUIImageList_GetIconWidth','GUIImageList_GetImageCount', - 'GUIImageList_GetImageInfoEx','GUIImageList_Remove', - 'GUIImageList_ReplaceIcon','GUIImageList_SetBkColor', - 'GUIImageList_SetIconSize','GUIImageList_SetImageCount', - 'GUIImageList_Swap','GUIScrollBars_EnableScrollBar', - 'GUIScrollBars_GetScrollBarInfoEx','GUIScrollBars_GetScrollBarRect', - 'GUIScrollBars_GetScrollBarRGState', - 'GUIScrollBars_GetScrollBarXYLineButton', - 'GUIScrollBars_GetScrollBarXYThumbBottom', - 'GUIScrollBars_GetScrollBarXYThumbTop', - 'GUIScrollBars_GetScrollInfo','GUIScrollBars_GetScrollInfoEx', - 'GUIScrollBars_GetScrollInfoMax','GUIScrollBars_GetScrollInfoMin', - 'GUIScrollBars_GetScrollInfoPage','GUIScrollBars_GetScrollInfoPos', - 'GUIScrollBars_GetScrollInfoTrackPos','GUIScrollBars_GetScrollPos', - 'GUIScrollBars_GetScrollRange','GUIScrollBars_Init', - 'GUIScrollBars_ScrollWindow','GUIScrollBars_SetScrollInfo', - 'GUIScrollBars_SetScrollInfoMax','GUIScrollBars_SetScrollInfoMin', - 'GUIScrollBars_SetScrollInfoPage','GUIScrollBars_SetScrollInfoPos', - 'GUIScrollBars_SetScrollRange','GUIScrollBars_ShowScrollBar', - 'GUIToolTip_Activate','GUIToolTip_AddTool','GUIToolTip_AdjustRect', - 'GUIToolTip_BitsToTTF','GUIToolTip_Create','GUIToolTip_DelTool', - 'GUIToolTip_Destroy','GUIToolTip_EnumTools', - 'GUIToolTip_GetBubbleHeight','GUIToolTip_GetBubbleSize', - 'GUIToolTip_GetBubbleWidth','GUIToolTip_GetCurrentTool', - 'GUIToolTip_GetDelayTime','GUIToolTip_GetMargin', - 'GUIToolTip_GetMarginEx','GUIToolTip_GetMaxTipWidth', - 'GUIToolTip_GetText','GUIToolTip_GetTipBkColor', - 'GUIToolTip_GetTipTextColor','GUIToolTip_GetTitleBitMap', - 'GUIToolTip_GetTitleText','GUIToolTip_GetToolCount', - 'GUIToolTip_GetToolInfo','GUIToolTip_HitTest', - 'GUIToolTip_NewToolRect','GUIToolTip_Pop','GUIToolTip_PopUp', - 'GUIToolTip_SetDelayTime','GUIToolTip_SetMargin', - 'GUIToolTip_SetMaxTipWidth','GUIToolTip_SetTipBkColor', - 'GUIToolTip_SetTipTextColor','GUIToolTip_SetTitle', - 'GUIToolTip_SetToolInfo','GUIToolTip_SetWindowTheme', - 'GUIToolTip_ToolExists','GUIToolTip_ToolToArray', - 'GUIToolTip_TrackActivate','GUIToolTip_TrackPosition', - 'GUIToolTip_TTFToBits','GUIToolTip_Update', - 'GUIToolTip_UpdateTipText','HexToString','IE_Example', - 'IE_Introduction','IE_VersionInfo','IEAction','IEAttach', - 'IEBodyReadHTML','IEBodyReadText','IEBodyWriteHTML','IECreate', - 'IECreateEmbedded','IEDocGetObj','IEDocInsertHTML', - 'IEDocInsertText','IEDocReadHTML','IEDocWriteHTML', - 'IEErrorHandlerDeRegister','IEErrorHandlerRegister','IEErrorNotify', - 'IEFormElementCheckBoxSelect','IEFormElementGetCollection', - 'IEFormElementGetObjByName','IEFormElementGetValue', - 'IEFormElementOptionSelect','IEFormElementRadioSelect', - 'IEFormElementSetValue','IEFormGetCollection','IEFormGetObjByName', - 'IEFormImageClick','IEFormReset','IEFormSubmit', - 'IEFrameGetCollection','IEFrameGetObjByName','IEGetObjById', - 'IEGetObjByName','IEHeadInsertEventScript','IEImgClick', - 'IEImgGetCollection','IEIsFrameSet','IELinkClickByIndex', - 'IELinkClickByText','IELinkGetCollection','IELoadWait', - 'IELoadWaitTimeout','IENavigate','IEPropertyGet','IEPropertySet', - 'IEQuit','IETableGetCollection','IETableWriteToArray', - 'IETagNameAllGetCollection','IETagNameGetCollection','Iif', - 'INetExplorerCapable','INetGetSource','INetMail','INetSmtpMail', - 'IsPressed','MathCheckDiv','Max','MemGlobalAlloc','MemGlobalFree', - 'MemGlobalLock','MemGlobalSize','MemGlobalUnlock','MemMoveMemory', - 'MemMsgBox','MemShowError','MemVirtualAlloc','MemVirtualAllocEx', - 'MemVirtualFree','MemVirtualFreeEx','Min','MouseTrap', - 'NamedPipes_CallNamedPipe','NamedPipes_ConnectNamedPipe', - 'NamedPipes_CreateNamedPipe','NamedPipes_CreatePipe', - 'NamedPipes_DisconnectNamedPipe', - 'NamedPipes_GetNamedPipeHandleState','NamedPipes_GetNamedPipeInfo', - 'NamedPipes_PeekNamedPipe','NamedPipes_SetNamedPipeHandleState', - 'NamedPipes_TransactNamedPipe','NamedPipes_WaitNamedPipe', - 'Net_Share_ConnectionEnum','Net_Share_FileClose', - 'Net_Share_FileEnum','Net_Share_FileGetInfo','Net_Share_PermStr', - 'Net_Share_ResourceStr','Net_Share_SessionDel', - 'Net_Share_SessionEnum','Net_Share_SessionGetInfo', - 'Net_Share_ShareAdd','Net_Share_ShareCheck','Net_Share_ShareDel', - 'Net_Share_ShareEnum','Net_Share_ShareGetInfo', - 'Net_Share_ShareSetInfo','Net_Share_StatisticsGetSvr', - 'Net_Share_StatisticsGetWrk','Now','NowCalc','NowCalcDate', - 'NowDate','NowTime','PathFull','PathMake','PathSplit', - 'ProcessGetName','ProcessGetPriority','Radian', - 'ReplaceStringInFile','RunDOS','ScreenCapture_Capture', - 'ScreenCapture_CaptureWnd','ScreenCapture_SaveImage', - 'ScreenCapture_SetBMPFormat','ScreenCapture_SetJPGQuality', - 'ScreenCapture_SetTIFColorDepth','ScreenCapture_SetTIFCompression', - 'Security__AdjustTokenPrivileges','Security__GetAccountSid', - 'Security__GetLengthSid','Security__GetTokenInformation', - 'Security__ImpersonateSelf','Security__IsValidSid', - 'Security__LookupAccountName','Security__LookupAccountSid', - 'Security__LookupPrivilegeValue','Security__OpenProcessToken', - 'Security__OpenThreadToken','Security__OpenThreadTokenEx', - 'Security__SetPrivilege','Security__SidToStringSid', - 'Security__SidTypeStr','Security__StringSidToSid','SendMessage', - 'SendMessageA','SetDate','SetTime','Singleton','SoundClose', - 'SoundLength','SoundOpen','SoundPause','SoundPlay','SoundPos', - 'SoundResume','SoundSeek','SoundStatus','SoundStop', - 'SQLite_Changes','SQLite_Close','SQLite_Display2DResult', - 'SQLite_Encode','SQLite_ErrCode','SQLite_ErrMsg','SQLite_Escape', - 'SQLite_Exec','SQLite_FetchData','SQLite_FetchNames', - 'SQLite_GetTable','SQLite_GetTable2d','SQLite_LastInsertRowID', - 'SQLite_LibVersion','SQLite_Open','SQLite_Query', - 'SQLite_QueryFinalize','SQLite_QueryReset','SQLite_QuerySingleRow', - 'SQLite_SaveMode','SQLite_SetTimeout','SQLite_Shutdown', - 'SQLite_SQLiteExe','SQLite_Startup','SQLite_TotalChanges', - 'StringAddComma','StringBetween','StringEncrypt','StringInsert', - 'StringProper','StringRepeat','StringReverse','StringSplit', - 'StringToHex','TCPIpToName','TempFile','TicksToTime','Timer_Diff', - 'Timer_GetTimerID','Timer_Init','Timer_KillAllTimers', - 'Timer_KillTimer','Timer_SetTimer','TimeToTicks','VersionCompare', - 'viClose','viExecCommand','viFindGpib','viGpibBusReset','viGTL', - 'viOpen','viSetAttribute','viSetTimeout','WeekNumberISO', - 'WinAPI_AttachConsole','WinAPI_AttachThreadInput','WinAPI_Beep', - 'WinAPI_BitBlt','WinAPI_CallNextHookEx','WinAPI_Check', - 'WinAPI_ClientToScreen','WinAPI_CloseHandle', - 'WinAPI_CommDlgExtendedError','WinAPI_CopyIcon', - 'WinAPI_CreateBitmap','WinAPI_CreateCompatibleBitmap', - 'WinAPI_CreateCompatibleDC','WinAPI_CreateEvent', - 'WinAPI_CreateFile','WinAPI_CreateFont','WinAPI_CreateFontIndirect', - 'WinAPI_CreateProcess','WinAPI_CreateSolidBitmap', - 'WinAPI_CreateSolidBrush','WinAPI_CreateWindowEx', - 'WinAPI_DefWindowProc','WinAPI_DeleteDC','WinAPI_DeleteObject', - 'WinAPI_DestroyIcon','WinAPI_DestroyWindow','WinAPI_DrawEdge', - 'WinAPI_DrawFrameControl','WinAPI_DrawIcon','WinAPI_DrawIconEx', - 'WinAPI_DrawText','WinAPI_EnableWindow','WinAPI_EnumDisplayDevices', - 'WinAPI_EnumWindows','WinAPI_EnumWindowsPopup', - 'WinAPI_EnumWindowsTop','WinAPI_ExpandEnvironmentStrings', - 'WinAPI_ExtractIconEx','WinAPI_FatalAppExit','WinAPI_FillRect', - 'WinAPI_FindExecutable','WinAPI_FindWindow','WinAPI_FlashWindow', - 'WinAPI_FlashWindowEx','WinAPI_FloatToInt', - 'WinAPI_FlushFileBuffers','WinAPI_FormatMessage','WinAPI_FrameRect', - 'WinAPI_FreeLibrary','WinAPI_GetAncestor','WinAPI_GetAsyncKeyState', - 'WinAPI_GetClassName','WinAPI_GetClientHeight', - 'WinAPI_GetClientRect','WinAPI_GetClientWidth', - 'WinAPI_GetCurrentProcess','WinAPI_GetCurrentProcessID', - 'WinAPI_GetCurrentThread','WinAPI_GetCurrentThreadId', - 'WinAPI_GetCursorInfo','WinAPI_GetDC','WinAPI_GetDesktopWindow', - 'WinAPI_GetDeviceCaps','WinAPI_GetDIBits','WinAPI_GetDlgCtrlID', - 'WinAPI_GetDlgItem','WinAPI_GetFileSizeEx','WinAPI_GetFocus', - 'WinAPI_GetForegroundWindow','WinAPI_GetIconInfo', - 'WinAPI_GetLastError','WinAPI_GetLastErrorMessage', - 'WinAPI_GetModuleHandle','WinAPI_GetMousePos','WinAPI_GetMousePosX', - 'WinAPI_GetMousePosY','WinAPI_GetObject','WinAPI_GetOpenFileName', - 'WinAPI_GetOverlappedResult','WinAPI_GetParent', - 'WinAPI_GetProcessAffinityMask','WinAPI_GetSaveFileName', - 'WinAPI_GetStdHandle','WinAPI_GetStockObject','WinAPI_GetSysColor', - 'WinAPI_GetSysColorBrush','WinAPI_GetSystemMetrics', - 'WinAPI_GetTextExtentPoint32','WinAPI_GetWindow', - 'WinAPI_GetWindowDC','WinAPI_GetWindowHeight', - 'WinAPI_GetWindowLong','WinAPI_GetWindowRect', - 'WinAPI_GetWindowText','WinAPI_GetWindowThreadProcessId', - 'WinAPI_GetWindowWidth','WinAPI_GetXYFromPoint', - 'WinAPI_GlobalMemStatus','WinAPI_GUIDFromString', - 'WinAPI_GUIDFromStringEx','WinAPI_HiWord','WinAPI_InProcess', - 'WinAPI_IntToFloat','WinAPI_InvalidateRect','WinAPI_IsClassName', - 'WinAPI_IsWindow','WinAPI_IsWindowVisible','WinAPI_LoadBitmap', - 'WinAPI_LoadImage','WinAPI_LoadLibrary','WinAPI_LoadLibraryEx', - 'WinAPI_LoadShell32Icon','WinAPI_LoadString','WinAPI_LocalFree', - 'WinAPI_LoWord','WinAPI_MakeDWord','WinAPI_MAKELANGID', - 'WinAPI_MAKELCID','WinAPI_MakeLong','WinAPI_MessageBeep', - 'WinAPI_Mouse_Event','WinAPI_MoveWindow','WinAPI_MsgBox', - 'WinAPI_MulDiv','WinAPI_MultiByteToWideChar', - 'WinAPI_MultiByteToWideCharEx','WinAPI_OpenProcess', - 'WinAPI_PointFromRect','WinAPI_PostMessage','WinAPI_PrimaryLangId', - 'WinAPI_PtInRect','WinAPI_ReadFile','WinAPI_ReadProcessMemory', - 'WinAPI_RectIsEmpty','WinAPI_RedrawWindow', - 'WinAPI_RegisterWindowMessage','WinAPI_ReleaseCapture', - 'WinAPI_ReleaseDC','WinAPI_ScreenToClient','WinAPI_SelectObject', - 'WinAPI_SetBkColor','WinAPI_SetCapture','WinAPI_SetCursor', - 'WinAPI_SetDefaultPrinter','WinAPI_SetDIBits','WinAPI_SetEvent', - 'WinAPI_SetFocus','WinAPI_SetFont','WinAPI_SetHandleInformation', - 'WinAPI_SetLastError','WinAPI_SetParent', - 'WinAPI_SetProcessAffinityMask','WinAPI_SetSysColors', - 'WinAPI_SetTextColor','WinAPI_SetWindowLong','WinAPI_SetWindowPos', - 'WinAPI_SetWindowsHookEx','WinAPI_SetWindowText', - 'WinAPI_ShowCursor','WinAPI_ShowError','WinAPI_ShowMsg', - 'WinAPI_ShowWindow','WinAPI_StringFromGUID','WinAPI_SubLangId', - 'WinAPI_SystemParametersInfo','WinAPI_TwipsPerPixelX', - 'WinAPI_TwipsPerPixelY','WinAPI_UnhookWindowsHookEx', - 'WinAPI_UpdateLayeredWindow','WinAPI_UpdateWindow', - 'WinAPI_ValidateClassName','WinAPI_WaitForInputIdle', - 'WinAPI_WaitForMultipleObjects','WinAPI_WaitForSingleObject', - 'WinAPI_WideCharToMultiByte','WinAPI_WindowFromPoint', - 'WinAPI_WriteConsole','WinAPI_WriteFile', - 'WinAPI_WriteProcessMemory','WinNet_AddConnection', - 'WinNet_AddConnection2','WinNet_AddConnection3', - 'WinNet_CancelConnection','WinNet_CancelConnection2', - 'WinNet_CloseEnum','WinNet_ConnectionDialog', - 'WinNet_ConnectionDialog1','WinNet_DisconnectDialog', - 'WinNet_DisconnectDialog1','WinNet_EnumResource', - 'WinNet_GetConnection','WinNet_GetConnectionPerformance', - 'WinNet_GetLastError','WinNet_GetNetworkInformation', - 'WinNet_GetProviderName','WinNet_GetResourceInformation', - 'WinNet_GetResourceParent','WinNet_GetUniversalName', - 'WinNet_GetUser','WinNet_OpenEnum','WinNet_RestoreConnection', - 'WinNet_UseConnection','Word_VersionInfo','WordAttach','WordCreate', - 'WordDocAdd','WordDocAddLink','WordDocAddPicture','WordDocClose', - 'WordDocFindReplace','WordDocGetCollection', - 'WordDocLinkGetCollection','WordDocOpen','WordDocPrint', - 'WordDocPropertyGet','WordDocPropertySet','WordDocSave', - 'WordDocSaveAs','WordErrorHandlerDeRegister', - 'WordErrorHandlerRegister','WordErrorNotify','WordMacroRun', - 'WordPropertyGet','WordPropertySet','WordQuit' - ), - 5 => array( - 'ce','comments-end','comments-start','cs','include','include-once', - 'NoTrayIcon','RequireAdmin' - ), - 6 => array( - 'AutoIt3Wrapper_Au3Check_Parameters', - 'AutoIt3Wrapper_Au3Check_Stop_OnWarning', - 'AutoIt3Wrapper_Change2CUI','AutoIt3Wrapper_Compression', - 'AutoIt3Wrapper_cvsWrapper_Parameters','AutoIt3Wrapper_Icon', - 'AutoIt3Wrapper_Outfile','AutoIt3Wrapper_Outfile_Type', - 'AutoIt3Wrapper_Plugin_Funcs','AutoIt3Wrapper_Res_Comment', - 'AutoIt3Wrapper_Res_Description','AutoIt3Wrapper_Res_Field', - 'AutoIt3Wrapper_Res_File_Add','AutoIt3Wrapper_Res_Fileversion', - 'AutoIt3Wrapper_Res_FileVersion_AutoIncrement', - 'AutoIt3Wrapper_Res_Icon_Add','AutoIt3Wrapper_Res_Language', - 'AutoIt3Wrapper_Res_LegalCopyright', - 'AutoIt3Wrapper_res_requestedExecutionLevel', - 'AutoIt3Wrapper_Res_SaveSource','AutoIt3Wrapper_Run_After', - 'AutoIt3Wrapper_Run_Au3check','AutoIt3Wrapper_Run_Before', - 'AutoIt3Wrapper_Run_cvsWrapper','AutoIt3Wrapper_Run_Debug_Mode', - 'AutoIt3Wrapper_Run_Obfuscator','AutoIt3Wrapper_Run_Tidy', - 'AutoIt3Wrapper_Tidy_Stop_OnError','AutoIt3Wrapper_UseAnsi', - 'AutoIt3Wrapper_UseUpx','AutoIt3Wrapper_UseX64', - 'AutoIt3Wrapper_Version','EndRegion','forceref', - 'Obfuscator_Ignore_Funcs','Obfuscator_Ignore_Variables', - 'Obfuscator_Parameters','Region','Tidy_Parameters' - ) - ), - 'SYMBOLS' => array( - '(',')','[',']', - '+','-','*','/','&','^', - '=','+=','-=','*=','/=','&=', - '==','<','<=','>','>=', - ',','.' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #0000FF; font-weight: bold;', - 2 => 'color: #800000; font-weight: bold;', - 3 => 'color: #000080; font-style: italic; font-weight: bold;', - 4 => 'color: #0080FF; font-style: italic; font-weight: bold;', - 5 => 'color: #F000FF; font-style: italic;', - 6 => 'color: #A00FF0; font-style: italic;' - ), - 'COMMENTS' => array( - 'MULTI' => 'font-style: italic; color: #669900;', - 0 => 'font-style: italic; color: #009933;', - 1 => 'font-style: italic; color: #9977BB;', - ), - 'ESCAPE_CHAR' => array( - 0 => '' - ), - 'BRACKETS' => array( - 0 => 'color: #FF0000; font-weight: bold;' - ), - 'STRINGS' => array( - 0 => 'font-weight: bold; color: #9977BB;' - ), - 'NUMBERS' => array( - 0 => 'color: #AC00A9; font-style: italic; font-weight: bold;' - ), - 'METHODS' => array( - 1 => 'color: #0000FF; font-style: italic; font-weight: bold;' - ), - 'SYMBOLS' => array( - 0 => 'color: #FF0000; font-weight: bold;' - ), - 'REGEXPS' => array( - 0 => 'font-weight: bold; color: #AA0000;' - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => 'http://www.autoitscript.com/autoit3/docs/keywords.htm', - 2 => 'http://www.autoitscript.com/autoit3/docs/macros.htm', - 3 => 'http://www.autoitscript.com/autoit3/docs/functions/{FNAME}.htm', - 4 => '', - 5 => '', - 6 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.' - ), - 'REGEXPS' => array( - //Variables - 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*' - ), - 'STRICT_MODE_APPLIES' => GESHI_MAYBE, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - 0 => true, - 1 => true, - 2 => true, - 3 => true - ), - 'PARSER_CONTROL' => array( - 'KEYWORDS' => array( - 4 => array( - 'DISALLOWED_BEFORE' => '(? array( - 'DISALLOWED_BEFORE' => '(? array( - 'DISALLOWED_BEFORE' => '(? 'AviSynth', - 'COMMENT_SINGLE' => array(1 => '#'), - 'COMMENT_MULTI' => array('/*' => '*/', '[*' => '*]'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - // Reserved words. - 1 => array( - 'try', 'cache', 'function', 'global', 'return' - ), - // Constants / special variables. - 2 => array( - 'true', 'yes', 'false', 'no', '__END__' - ), - // Internal Filters. - 3 => array( - 'AviSource', 'AviFileSource', 'AddBorders', 'AlignedSplice', 'AssumeFPS', 'AssumeScaledFPS', - 'AssumeFrameBased', 'AssumeFieldBased', 'AssumeBFF', 'AssumeTFF', 'Amplify', 'AmplifydB', - 'AssumeSampleRate', 'AudioDub', 'AudioDubEx', 'Animate', 'ApplyRange', - 'BicubicResize', 'BilinearResize', 'BlackmanResize', 'Blur', 'Bob', 'BlankClip', 'Blackness', - 'ColorYUV', 'ConvertBackToYUY2', 'ConvertToRGB', 'ConvertToRGB24', 'ConvertToRGB32', - 'ConvertToYUY2', 'ConvertToY8', 'ConvertToYV411', 'ConvertToYV12', 'ConvertToYV16', 'ConvertToYV24', - 'ColorKeyMask', 'Crop', 'CropBottom', 'ChangeFPS', 'ConvertFPS', 'ComplementParity', 'ConvertAudioTo8bit', - 'ConvertAudioTo16bit', 'ConvertAudioTo24bit', 'ConvertAudioTo32bit', 'ConvertAudioToFloat', 'ConvertToMono', - 'ConditionalFilter', 'ConditionalReader', 'ColorBars', 'Compare', - 'DirectShowSource', 'DeleteFrame', 'Dissolve', 'DuplicateFrame', 'DoubleWeave', 'DelayAudio', - 'EnsureVBRMP3Sync', - 'FixLuminance', 'FlipHorizontal', 'FlipVertical', 'FixBrokenChromaUpsampling', 'FadeIn0', 'FadeIn', - 'FadeIn2', 'FadeOut0', 'FadeOut', 'FadeOut2', 'FadeIO0', 'FadeIO', 'FadeIO2', 'FreezeFrame', 'FrameEvaluate', - 'GreyScale', 'GaussResize', 'GeneralConvolution', 'GetChannel', 'GetLeftChannel', 'GetRightChannel', - 'HorizontalReduceBy2', 'Histogram', - 'ImageReader', 'ImageSource', 'ImageWriter', 'Invert', 'Interleave', 'Info', - 'KillAudio', 'KillVideo', - 'Levels', 'Limiter', 'Layer', 'Letterbox', 'LanczosResize', 'Lanczos4Resize', 'Loop', - 'MergeARGB', 'MergeRGB', 'MergeChroma', 'MergeLuma', 'Merge', 'Mask', 'MaskHS', 'MergeChannels', 'MixAudio', - 'MonoToStereo', 'MessageClip', - 'Normalize', - 'OpenDMLSource', 'Overlay', - 'PointResize', 'PeculiarBlend', 'Pulldown', - 'RGBAdjust', 'ResetMask', 'Reverse', 'ResampleAudio', 'ReduceBy2', - 'SegmentedAviSource', 'SegmentedDirectShowSource', 'SoundOut', 'ShowAlpha', 'ShowRed', 'ShowGreen', - 'ShowBlue', 'SwapUV', 'Subtract', 'SincResize', 'Spline16Resize', 'Spline36Resize', 'Spline64Resize', - 'SelectEven', 'SelectOdd', 'SelectEvery', 'SelectRangeEvery', 'Sharpen', 'SpatialSoften', 'SeparateFields', - 'ShowFiveVersions', 'ShowFrameNumber', 'ShowSMPTE', 'ShowTime', 'StackHorizontal', 'StackVertical', 'Subtitle', - 'SwapFields', 'SuperEQ', 'SSRC', 'ScriptClip', - 'Tweak', 'TurnLeft', 'TurnRight', 'Turn180', 'TemporalSoften', 'TimeStretch', 'TCPServer', 'TCPSource', 'Trim', - 'Tone', - 'UToY', 'UToY8', 'UnalignedSplice', - 'VToY', 'VToY8', 'VerticalReduceBy2', 'Version', - 'WavSource', 'Weave', 'WriteFile', 'WriteFileIf', 'WriteFileStart', 'WriteFileEnd', - 'YToUV' - ), - // Internal functions. - 4 => array( - 'Abs', 'Apply', 'Assert', 'AverageLuma', 'AverageChromaU', 'AverageChromaV', - 'Ceil', 'Cos', 'Chr', 'ChromaUDifference', 'ChromaVDifference', - 'Defined', 'Default', - 'Exp', 'Exist', 'Eval', - 'Floor', 'Frac', 'Float', 'Findstr', 'GetMTMode', - 'HexValue', - 'Int', 'IsBool', 'IsClip', 'IsFloat', 'IsInt', 'IsString', 'Import', - 'LoadPlugin', 'Log', 'LCase', 'LeftStr', 'LumaDifference', 'LoadVirtualDubPlugin', 'LoadVFAPIPlugin', - 'LoadCPlugin', 'Load_Stdcall_Plugin', - 'Max', 'MulDiv', 'MidStr', - 'NOP', - 'OPT_AllowFloatAudio', 'OPT_UseWaveExtensible', - 'Pi', 'Pow', - 'Round', 'Rand', 'RevStr', 'RightStr', 'RGBDifference', 'RGBDifferenceFromPrevious', 'RGBDifferenceToNext', - 'Sin', 'Sqrt', 'Sign', 'Spline', 'StrLen', 'String', 'Select', 'SetMemoryMax', 'SetWorkingDir', 'SetMTMode', - 'SetPlanarLegacyAlignment', - 'Time', - 'UCase', 'UDifferenceFromPrevious', 'UDifferenceToNext', 'UPlaneMax', 'UPlaneMin', 'UPlaneMedian', - 'UPlaneMinMaxDifference', - 'Value', 'VersionNumber', 'VersionString', 'VDifferenceFromPrevious', 'VDifferenceToNext', 'VPlaneMax', - 'VPlaneMin', 'VPlaneMedian', 'VPlaneMinMaxDifference', - 'YDifferenceFromPrevious', 'YDifferenceToNext', 'YPlaneMax', 'YPlaneMin', 'YPlaneMedian', - 'YPlaneMinMaxDifference' - ) - ), - 'SYMBOLS' => array( - '+', '++', '-', '--', '/', '*', '%', - '=', '==', '<', '<=', '>', '>=', '<>', '!=', - '!', '?', ':', - '|', '||', '&&', - '\\', - '(', ')', '{', '}', - '.', ',' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => true, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color:#9966CC; font-weight:bold;', - 2 => 'color:#0000FF; font-weight:bold;', - 3 => 'color:#CC3300; font-weight:bold;', - 4 => 'color:#660000; font-weight:bold;' - ), - 'COMMENTS' => array( - 1 => 'color:#008000; font-style:italic;', - 'MULTI' => 'color:#000080; font-style:italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color:#000099;' - ), - 'BRACKETS' => array( - 0 => 'color:#006600; font-weight:bold;' - ), - 'STRINGS' => array( - 0 => 'color:#996600;' - ), - 'NUMBERS' => array( - 0 => 'color:#006666;' - ), - 'METHODS' => array( - 1 => 'color:#9900CC;' - ), - 'SYMBOLS' => array( - 0 => 'color:#006600; font-weight:bold;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => 'http://avisynth.org/mediawiki/{FNAME}', - 4 => '' - ), - 'REGEXPS' => array( - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.' - ), - 'STRICT_MODE_APPLIES' => GESHI_MAYBE, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php deleted file mode 100644 index d1bc141f..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php +++ /dev/null @@ -1,156 +0,0 @@ - 'awk', - 'COMMENT_SINGLE' => array( - 1 => '#' - ), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array ( - 1 => array( - 'for', 'in', 'if', 'else', 'while', 'do', 'continue', 'break' - ), - 2 => array( - 'BEGIN', 'END' - ), - 3 => array( - 'ARGC', 'ARGV', 'CONVFMT', 'ENVIRON', - 'FILENAME', 'FNR', 'FS', 'NF', 'NR', 'OFMT', - 'OFS','ORS','RLENGTH','RS','RSTART','SUBSEP' - ), - 4 => array( - 'gsub','index','length','match','split', - 'sprintf','sub','substr','tolower','toupper', - 'atan2','cos','exp','int','log','rand', - 'sin','sqrt','srand' - ), - 5 => array( - 'print','printf','getline','close','fflush','system' - ), - 6 => array( - 'function', 'return' - ) - ), - 'SYMBOLS' => array ( - 0 => array( - '(',')','[',']','{','}' - ), - 1 => array( - '!','||','&&' - ), - 2 => array( - '<','>','<=','>=','==','!=' - ), - 3 => array( - '+','-','*','/','%','^','++','--' - ), - 4 => array( - '~','!~' - ), - 5 => array( - '?',':' - ) - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - 5 => false, - 6 => false - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #000000; font-weight: bold;', - 2 => 'color: #C20CB9; font-weight: bold;', - 3 => 'color: #4107D5; font-weight: bold;', - 4 => 'color: #07D589; font-weight: bold;', - 5 => 'color: #0BD507; font-weight: bold;', - 6 => 'color: #078CD5; font-weight: bold;' - ), - 'COMMENTS' => array( - 1 => 'color:#808080;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'SYMBOLS' => array( - 0 => 'color:black;', - 1 => 'color:black;', - 2 => 'color:black;', - 3 => 'color:black;', - 4 => 'color:#C4C364;', - 5 => 'color:black;font-weight:bold;'), - 'SCRIPT' => array(), - 'REGEXPS' => array( - 0 => 'color:#000088;' - ), - 'STRINGS' => array( - 0 => 'color: #ff0000;' - ), - 'NUMBERS' => array( - 0 => 'color: #000000;' - ), - 'BRACKETS' => array( - 0 => 'color: #7a0874; font-weight: bold;' - ), - 'METHODS' => array() - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '' - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array (), - 'REGEXPS' => array( - 0 => "\\$[a-zA-Z0-9_]+" - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array (), - 'HIGHLIGHT_STRICT_BLOCK' => array() -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php deleted file mode 100644 index d913135a..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php +++ /dev/null @@ -1,183 +0,0 @@ - 'BASCOM AVR', - 'COMMENT_SINGLE' => array(1 => "'"), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - // Navy Blue Bold Keywords - '1WRESET' , '1WREAD' , '1WWRITE' , '1WSEARCHFIRST' , '1WSEARCHNEXT' ,'1WVERIFY' , '1WIRECOUNT', - 'CONFIG' , 'ACI' , 'ADC' , 'BCCARD' , 'CLOCK' , 'COM1' , - 'COM2' , 'PS2EMU' , 'ATEMU' , 'I2CSLAVE' , - 'INPUT', 'OUTPUT', 'GRAPHLCD' , 'KEYBOARD' , 'TIMER0' , 'TIMER1' , - 'LCDBUS' , 'LCDMODE' , '1WIRE' , 'LCD' , 'SERIALOUT' , - 'SERIALIN' , 'SPI' , 'LCDPIN' , 'SDA' , 'SCL' , - 'WATCHDOG' , 'PORT' , 'COUNTER0', 'COUNTER1' , 'TCPIP' , 'TWISLAVE' , - 'X10' , 'XRAM' , 'USB', - 'BCD' , 'GRAY2BIN' , 'BIN2GRAY' , 'BIN' , 'MAKEBCD' , 'MAKEDEC' , 'MAKEINT' , 'FORMAT' , 'FUSING' , 'BINVAL' , - 'CRC8' , 'CRC16' , 'CRC16UNI' , 'CRC32' , 'HIGH' , 'HIGHW' , 'LOW', - 'DATE' , 'TIME' , 'DATE$' , 'TIME$' , 'DAYOFWEEK' , 'DAYOFYEAR' , 'SECOFDAY' , 'SECELAPSED' , 'SYSDAY' , 'SYSSEC' , 'SYSSECELAPSED', - 'WAIT' , 'WAITMS' , 'WAITUS' , 'DELAY', - 'BSAVE' , 'BLOAD' , 'GET' , 'VER' , 'DISKFREE' , 'DIR' , 'DriveReset' , 'DriveInit' , 'LINE' , 'INITFILESYSTEM' , - 'EOF' , 'WRITE' , 'FLUSH' , 'FREEFILE' , 'FILEATTR' , 'FILEDATE' , 'FILETIME' , 'FILEDATETIME' , 'FILELEN' , 'SEEK' , - 'KILL' , 'DriveGetIdentity' , 'DriveWriteSector' , 'DriveReadSector' , 'LOC' , 'LOF' , 'PUT' , 'OPEN' , 'CLOSE', - 'GLCDCMD' , 'GLCDDATA' , 'SETFONT' , 'PSET' , 'SHOWPIC' , 'SHOWPICE' , 'CIRCLE' , 'BOX', - 'I2CINIT' , 'I2CRECEIVE' , 'I2CSEND' , 'I2CSTART','I2CSTOP','I2CRBYTE','I2CWBYTE', - 'ALIAS' , 'BITWAIT' , 'TOGGLE' , 'RESET' , 'SET' , 'SHIFTIN' , 'SHIFTOUT' , 'DEBOUNCE' , 'PULSEIN' , 'PULSEOUT', - 'IDLE' , 'POWERDOWN' , 'POWERSAVE' , 'ON', 'INTERRUPT' , 'ENABLE' , 'DISABLE' , 'START' , 'VERSION' , 'CLOCKDIVISION' , 'CRYSTAL' , 'STOP', - 'ADR' , 'ADR2' , 'WRITEEEPROM' , 'CPEEK' , 'CPEEKH' , 'PEEK' , 'POKE' , 'OUT' , 'READEEPROM' , 'DATA' , 'INP' , 'READ' , 'RESTORE' , 'LOOKDOWN' , 'LOOKUP' , 'LOOKUPSTR' , 'LOAD' , 'LOADADR' , 'LOADLABEL' , 'LOADWORDADR' , 'MEMCOPY', - 'RC5SEND' , 'RC6SEND' , 'GETRC5' , 'SONYSEND', - 'BAUD' , 'BAUD1', 'BUFSPACE' , 'CLEAR', 'ECHO' , 'WAITKEY' , 'ISCHARWAITING' , 'INKEY' , 'INPUTBIN' , 'INPUTHEX' , 'PRINT', 'PRINT1','PRINT0', 'PRINTBIN' , 'SERIN' , 'SEROUT' , 'SPC' , 'MAKEMODBUS', - 'SPIIN' , 'SPIINIT' , 'SPIMOVE' , 'SPIOUT', 'SINGLE', - 'ASC' , 'UCASE' , 'LCASE' , 'TRIM' , 'SPLIT' , 'LTRIM' , 'INSTR' , 'SPACE' , 'RTRIM' , 'LEFT' , 'LEN' , 'MID' , 'RIGHT' , 'VAL' , 'STR' , 'CHR' , 'CHECKSUM' , 'HEX' , 'HEXVAL', - 'BASE64DEC' , 'BASE64ENC' , 'IP2STR' , 'UDPREAD' , 'UDPWRITE' , 'UDPWRITESTR' , 'TCPWRITE' , 'TCPWRITESTR' , 'TCPREAD' , 'GETDSTIP' , 'GETDSTPORT' , 'SOCKETSTAT' , 'SOCKETCONNECT' , 'SOCKETLISTEN' , 'GETSOCKET' , 'CLOSESOCKET' , - 'SETTCP' , 'GETTCPREGS' , 'SETTCPREGS' , 'SETIPPROTOCOL' , 'TCPCHECKSUM', - 'HOME' , 'CURSOR' , 'UPPERLINE' , 'THIRDLINE' , 'INITLCD' , 'LOWERLINE' , 'LCDAT' , 'FOURTHLINE' , 'DISPLAY' , 'LCDCONTRAST' , 'LOCATE' , 'SHIFTCURSOR' , 'DEFLCDCHAR' , 'SHIFTLCD' , 'CLS', - 'ACOS' , 'ASIN' , 'ATN' , 'ATN2' , 'EXP' , 'RAD2DEG' , 'FRAC' , 'TAN' , 'TANH' , 'COS' , 'COSH' , 'LOG' , 'LOG10' , 'ROUND' , 'ABS' , 'INT' , 'MAX' , 'MIN' , 'SQR' , 'SGN' , 'POWER' , 'SIN' , 'SINH' , 'FIX' , 'INCR' , 'DECR' , 'DEG2RAD', - 'DBG' , 'DEBUG', 'DTMFOUT' , 'ENCODER' , 'GETADC' , 'GETKBD' , 'GETATKBD' , 'GETRC' , 'VALUE' , 'POPALL' , 'PS2MOUSEXY' , 'PUSHALL' , - 'RETURN' , 'RND' , 'ROTATE' , 'SENDSCAN' , 'SENDSCANKBD' , 'SHIFT' , 'SOUND' , 'STCHECK' , 'SWAP' , 'VARPTR' , 'X10DETECT' , 'X10SEND' , 'READMAGCARD' , 'REM' , 'BITS' , 'BYVAL' , 'CALL' , 'READHITAG', - 'Buffered', 'Size', 'Dummy', 'Parity', 'None', 'Stopbits', 'Databits', 'Clockpol', 'Synchrone', 'Prescaler', 'Reference', 'int0', 'int1', 'Interrupts', - 'Auto', 'avcc', 'ack', 'nack', 'Pin', 'Db4', 'Db3', 'Db2', 'Db1', 'Db7', 'Db6', 'Db5', 'Db0', 'e', 'rs', 'twi', - ), - 2 => array( - // Red Lowercase Keywords - '$ASM' , '$BAUD' , '$BAUD1' , '$BGF' , '$BOOT' , '$CRYSTAL' , '$DATA' , '$DBG' , '$DEFAULT' , '$EEPLEAVE' , '$EEPROM' , - '$EEPROMHEX' , '$EXTERNAL' , '$HWSTACK' , '$INC' , '$INCLUDE' , '$INITMICRO' , '$LCD' , '$LCDRS' , '$LCDPUTCTRL' , - '$LCDPUTDATA' , '$LCDVFO' , '$LIB' , '$LOADER' , '$LOADERSIZE' , '$MAP' , '$NOCOMPILE' , '$NOINIT' , '$NORAMCLEAR' , - '$PROG' , '$PROGRAMMER' , '$REGFILE' , '$RESOURCE' , '$ROMSTART', '$SERIALINPUT', '$SERIALINPUT1' , '$SERIALINPUT2LCD' , - '$SERIALOUTPUT' , '$SERIALOUTPUT1' , '$SIM' , '$SWSTACK' , '$TIMEOUT' , '$TINY' , '$WAITSTATE' , '$XRAMSIZE' , '$XRAMSTART', '$XA', - '#IF' , '#ELSE' , '#ENDIF', '$framesize' - ), - 3 => array( - // Blue Lowercase Keywords - 'IF', 'THEN', 'ELSE', 'END', 'WHILE', 'WEND', 'DO', 'LOOP', 'SELECT', 'CASE', 'FOR', 'NEXT', - 'GOSUB' , 'GOTO' , 'LOCAL' , 'SUB' , 'DEFBIT', 'DEFBYTE', 'DEFINT', 'DEFWORD', 'DEFLNG', 'DEFSNG', 'DEFDBL', - 'CONST', 'DECLARE', 'FUNCTION', 'DIM', 'EXIT', 'LONG', 'INTEGER', 'BYTE', 'AS', 'STRING', 'WORD' - ), - 4 => array( - //light blue - 'PINA.0', 'PINA.1', 'PINA.2', 'PINA.3', 'PINA.4', 'PINA.5', 'PINA.6', 'PINA.7', - 'PINB.0', 'PINB.1', 'PINB.2', 'PINB.3', 'PINB.4', 'PINB.5', 'PINB.6', 'PINB.7', - 'PINC.0', 'PINC.1', 'PINC.2', 'PINC.3', 'PINC.4', 'PINC.5', 'PINC.6', 'PINC.7', - 'PIND.0', 'PIND.1', 'PIND.2', 'PIND.3', 'PIND.4', 'PIND.5', 'PIND.6', 'PIND.7', - 'PINE.0', 'PINE.1', 'PINE.2', 'PINE.3', 'PINE.4', 'PINE.5', 'PINE.6', 'PINE.7', - 'PINF.0', 'PINF.1', 'PINF.2', 'PINF.3', 'PINF.4', 'PINF.5', 'PINF.6', 'PINF.7', - - 'PORTA.0', 'PORTA.1', 'PORTA.2', 'PORTA.3', 'PORTA.4', 'PORTA.5', 'PORTA.6', 'PORTA.7', - 'PORTB.0', 'PORTB.1', 'PORTB.2', 'PORTB.3', 'PORTB.4', 'PORTB.5', 'PORTB.6', 'PORTB.7', - 'PORTC.0', 'PORTC.1', 'PORTC.2', 'PORTC.3', 'PORTC.4', 'PORTC.5', 'PORTC.6', 'PORTC.7', - 'PORTD.0', 'PORTD.1', 'PORTD.2', 'PORTD.3', 'PORTD.4', 'PORTD.5', 'PORTD.6', 'PORTD.7', - 'PORTE.0', 'PORTE.1', 'PORTE.2', 'PORTE.3', 'PORTE.4', 'PORTE.5', 'PORTE.6', 'PORTE.7', - 'PORTF.0', 'PORTF.1', 'PORTF.2', 'PORTF.3', 'PORTF.4', 'PORTF.5', 'PORTF.6', 'PORTF.7', - - 'DDRA.0', 'DDRA.1', 'DDRA.2', 'DDRA.3', 'DDRA.4', 'DDRA.5', 'DDRA.6', 'DDRA.7', - 'DDRB.0', 'DDRB.1', 'DDRB.2', 'DDRB.3', 'DDRB.4', 'DDRB.5', 'DDRB.6', 'DDRB.7', - 'DDRC.0', 'DDRC.1', 'DDRC.2', 'DDRC.3', 'DDRC.4', 'DDRC.5', 'DDRC.6', 'DDRC.7', - 'DDRD.0', 'DDRD.1', 'DDRD.2', 'DDRD.3', 'DDRD.4', 'DDRD.5', 'DDRD.6', 'DDRD.7', - 'DDRE.0', 'DDRE.1', 'DDRE.2', 'DDRE.3', 'DDRE.4', 'DDRE.5', 'DDRE.6', 'DDRE.7', - 'DDRF.0', 'DDRF.1', 'DDRF.2', 'DDRF.3', 'DDRF.4', 'DDRF.5', 'DDRF.6', 'DDRF.7', - - 'DDRA','DDRB','DDRC','DDRD','DDRE','DDRF', - 'PORTA','PORTB','PORTC','PORTD','PORTE','PORTF', - 'PINA','PINB','PINC','PIND','PINE','PINF', - ) - ), - 'SYMBOLS' => array( - '=', '<', '>', '>=', '<=', '+', '-', '*', '/', '%', '(', ')', '{', '}', '[', ']', ';', ':', '$', '&H' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - 4 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #000080; font-weight: bold;', - 2 => 'color: #FF0000;', - 3 => 'color: #0000FF;', - 4 => 'color: #0080FF;', - ), - 'COMMENTS' => array( - 1 => 'color: #657CC4; font-style: italic;' - ), - 'BRACKETS' => array( - 0 => 'color: #000080;' - ), - 'STRINGS' => array( - 0 => 'color: #008000;' - ), - 'NUMBERS' => array( - 0 => 'color: #000080; font-weight: bold;' - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #0000FF;' - ), - 'ESCAPE_CHAR' => array( - ), - 'SCRIPT' => array( - ), - 'REGEXPS' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '' - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php deleted file mode 100644 index e81b75a3..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php +++ /dev/null @@ -1,472 +0,0 @@ - 'Bash', - // Bash DOES have single line comments with # markers. But bash also has - // the $# variable, so comments need special handling (see sf.net - // 1564839) - 'COMMENT_SINGLE' => array('#'), - 'COMMENT_MULTI' => array(), - 'COMMENT_REGEXP' => array( - //Variables - 1 => "/\\$\\{[^\\n\\}]*?\\}/i", - //BASH-style Heredoc - 2 => '/<<-?\s*?(\'?)([a-zA-Z0-9]+)\1\\n.*\\n\\2(?![a-zA-Z0-9])/siU', - //Escaped String Starters - 3 => "/\\\\['\"]/siU", - // Single-Line Shell usage: Hide the prompt at the beginning - /* 4 => "/\A(?!#!)\s*(?>[\w:@\\/\\-\\._~]*[$#]\s?)?(?=[^\n]+\n?\Z)|^(?!#!)(\w+@)?[\w\\-\\.]+(:~?)[\w\\/\\-\\._]*?[$#]\s?/ms" */ - 4 => "/\A(?!#!)(?:(?>[\w:@\\/\\-\\._~]*)[$#]\s?)(?=(?>[^\n]+)\n?\Z)|^(?!#!)(?:\w+@)?(?>[\w\\-\\.]+)(?>:~?[\w\\/\\-\\._]*?)?[$#]\s?/sm" - ), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'HARDQUOTE' => array("'", "'"), - 'HARDESCAPE' => array("\'"), - 'ESCAPE_CHAR' => '', - 'ESCAPE_REGEXP' => array( - //Simple Single Char Escapes - 1 => "#\\\\[nfrtv\\$\\\"\n]#i", - // $var - 2 => "#\\$[a-z_][a-z0-9_]*#i", - // ${...} - 3 => "/\\$\\{[^\\n\\}]*?\\}/i", - // $(...) - 4 => "/\\$\\([^\\n\\)]*?\\)/i", - // `...` - 5 => "/`[^`]*`/" - ), - 'KEYWORDS' => array( - 1 => array( - 'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function', - 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time' - ), - 2 => array( - 'aclocal', 'aconnect', 'apachectl', 'apache2ctl', 'aplay', 'apm', - 'apmsleep', 'apropos', 'apt-cache', 'apt-cdrom', 'apt-config', - 'apt-file', 'apt-ftparchive', 'apt-get', 'apt-key', 'apt-listbugs', - 'apt-listchanges', 'apt-mark', 'apt-mirror', 'apt-sortpkgs', - 'apt-src', 'apticron', 'aptitude', 'aptsh', 'apxs', 'apxs2', 'ar', - 'arch', 'arecord', 'as', 'as86', 'ash', 'autoconf', 'autoheader', - 'automake', 'awk', - - 'apachectl start', 'apachectl stop', 'apachectl restart', - 'apachectl graceful', 'apachectl graceful-stop', - 'apachectl configtest', 'apachectl status', 'apachectl fullstatus', - 'apachectl help', 'apache2ctl start', 'apache2ctl stop', - 'apache2ctl restart', 'apache2ctl graceful', - 'apache2ctl graceful-stop', 'apache2ctl configtest', - 'apache2ctl status', 'apache2ctl fullstatus', 'apache2ctl help', - - 'apt-cache add', 'apt-cache depends', 'apt-cache dotty', - 'apt-cache dump', 'apt-cache dumpavail', 'apt-cache gencaches', - 'apt-cache pkgnames', 'apt-cache policy', 'apt-cache rdepends', - 'apt-cache search', 'apt-cache show', 'apt-cache showauto', - 'apt-cache showpkg', 'apt-cache showsrc', 'apt-cache stats', - 'apt-cache unmet', 'apt-cache xvcg', 'apt-cdrom add', - 'apt-cdrom ident', 'apt-config dump', 'apt-config shell', - 'apt-file find', 'apt-file list', 'apt-file purge', - 'apt-file search', 'apt-file shot', 'apt-file update', - 'apt-get autoclean', 'apt-get autoremove', 'apt-get build-dep', - 'apt-get check', 'apt-get clean', 'apt-get dist-upgrade', - 'apt-get dselect-upgrade', 'apt-get install', 'apt-get markauto', - 'apt-get purge', 'apt-get remove', 'apt-get source', - 'apt-get unmarkauto', 'apt-get update', 'apt-get upgrade', - 'apt-key add', 'apt-key adv', 'apt-key del', 'apt-key export', - 'apt-key exportall', 'apt-key finger', 'apt-key list', - 'apt-key net-update', 'apt-key update', 'apt-listbugs apt', - 'apt-listbugs list', 'apt-listbugs rss', 'apt-src build', - 'apt-src clean', 'apt-src import', 'apt-src install', - 'apt-src list', 'apt-src location', 'apt-src name', - 'apt-src remove', 'apt-src update', 'apt-src upgrade', - 'apt-src version', - - 'aptitude autoclean', 'aptitude build-dep', 'aptitude changelog', - 'aptitude clean', 'aptitude download', 'aptitude forbid-version', - 'aptitude forget-new', 'aptitude full-upgrade', 'aptitude hold', - 'aptitude install', 'aptitude markauto', 'aptitude purge', - 'aptitude reinstall', 'aptitude remove', 'aptitude safe-upgrade', - 'aptitude search', 'aptitude show', 'aptitude unhold', - 'aptitude unmarkauto', 'aptitude update', 'aptitude versions', - 'aptitude why', 'aptitude why-not', - - 'basename', 'bash', 'batctl', 'bc', 'bison', 'bunzip2', 'bzcat', - 'bzcmp', 'bzdiff', 'bzegrep', 'bzfgrep', 'bzgrep', - 'bzip2', 'bzip2recover', 'bzless', 'bzmore', - - 'c++', 'cal', 'cat', 'chattr', 'cc', 'cdda2wav', 'cdparanoia', - 'cdrdao', 'cd-read', 'cdrecord', 'chfn', 'chgrp', 'chmod', - 'chown', 'chroot', 'chsh', 'chvt', 'clear', 'cmp', 'comm', 'co', - 'col', 'cp', 'cpio', 'cpp', 'csh', 'cut', 'cvs', 'cvs-pserver', - - 'cvs add', 'cvs admin', 'cvs annotate', 'cvs checkout', - 'cvs commit', 'cvs diff', 'cvs edit', 'cvs editors', 'cvs export', - 'cvs history', 'cvs import', 'cvs init', 'cvs log', 'cvs login', - 'cvs logout', 'cvs ls', 'cvs pserver', 'cvs rannotate', - 'cvs rdiff', 'cvs release', 'cvs remove', 'cvs rlog', 'cvs rls', - 'cvs rtag', 'cvs server', 'cvs status', 'cvs tag', 'cvs unedit', - 'cvs update', 'cvs version', 'cvs watch', 'cvs watchers', - - 'dash', 'date', 'dc', 'dch', 'dcop', 'dd', 'ddate', 'ddd', - 'deallocvt', 'debconf', 'defoma', 'depmod', 'df', 'dh', - 'dialog', 'diff', 'diff3', 'dig', 'dir', 'dircolors', 'directomatic', - 'dirname', 'dmesg', 'dnsdomainname', 'domainname', 'dpkg', - 'dselect', 'du', 'dumpkeys', - - 'ed', 'egrep', 'env', 'expr', - - 'false', 'fbset', 'fdisk', 'ffmpeg', 'fgconsole','fgrep', 'file', - 'find', 'flex', 'flex++', 'fmt', 'free', 'ftp', 'funzip', 'fuser', - - 'g++', 'gawk', 'gc','gcc', 'gdb', 'gdisk', 'getent', 'getkeycodes', - 'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote', - 'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip', - 'gzexe', 'gzip', - - 'git', 'git add', 'git add--interactive', 'git am', 'git annotate', - 'git apply', 'git archive', 'git bisect', 'git bisect--helper', - 'git blame', 'git branch', 'git bundle', 'git cat-file', - 'git check-attr', 'git checkout', 'git checkout-index', - 'git check-ref-format', 'git cherry', 'git cherry-pick', - 'git clean', 'git clone', 'git commit', 'git commit-tree', - 'git config', 'git count-objects', 'git daemon', 'git describe', - 'git diff', 'git diff-files', 'git diff-index', 'git difftool', - 'git difftool--helper', 'git diff-tree', 'git fast-export', - 'git fast-import', 'git fetch', 'git fetch-pack', - 'git filter-branch', 'git fmt-merge-msg', 'git for-each-ref', - 'git format-patch', 'git fsck', 'git fsck-objects', 'git gc', 'git gui', - 'git get-tar-commit-id', 'git grep', 'git hash-object', 'git help', - 'git http-backend', 'git http-fetch', 'git http-push', - 'git imap-send', 'git index-pack', 'git init', 'git init-db', - 'git instaweb', 'git log', 'git lost-found', 'git ls-files', - 'git ls-remote', 'git ls-tree', 'git mailinfo', 'git mailsplit', - 'git merge', 'git merge-base', 'git merge-file', 'git merge-index', - 'git merge-octopus', 'git merge-one-file', 'git merge-ours', - 'git merge-recursive', 'git merge-resolve', 'git merge-subtree', - 'git mergetool', 'git merge-tree', 'git mktag', 'git mktree', - 'git mv', 'git name-rev', 'git notes', 'git pack-objects', - 'git pack-redundant', 'git pack-refs', 'git patch-id', - 'git peek-remote', 'git prune', 'git prune-packed', 'git pull', - 'git push', 'git quiltimport', 'git read-tree', 'git rebase', - 'git rebase--interactive', 'git receive-pack', 'git reflog', - 'git relink', 'git remote', 'git remote-ftp', 'git remote-ftps', - 'git remote-http', 'git remote-https', 'git remote-testgit', - 'git repack', 'git replace', 'git repo-config', 'git request-pull', - 'git rerere', 'git reset', 'git revert', 'git rev-list', - 'git rev-parse', 'git rm', 'git send-pack', 'git shell', - 'git shortlog', 'git show', 'git show-branch', 'git show-index', - 'git show-ref', 'git stage', 'git stash', 'git status', - 'git stripspace', 'git submodule', 'git symbolic-ref', 'git tag', - 'git tar-tree', 'git unpack-file', 'git unpack-objects', - 'git update-index', 'git update-ref', 'git update-server-info', - 'git upload-archive', 'git upload-pack', 'git var', - 'git verify-pack', 'git verify-tag', 'git web--browse', - 'git whatchanged', 'git write-tree', - - 'gitaction', 'git-add', 'git-add--interactive', 'git-am', - 'git-annotate', 'git-apply', 'git-archive', 'git-bisect', - 'git-bisect--helper', 'git-blame', 'git-branch', 'git-bundle', - 'git-cat-file', 'git-check-attr', 'git-checkout', - 'git-checkout-index', 'git-check-ref-format', 'git-cherry', - 'git-cherry-pick', 'git-clean', 'git-clone', 'git-commit', - 'git-commit-tree', 'git-config', 'git-count-objects', 'git-daemon', - 'git-describe', 'git-diff', 'git-diff-files', 'git-diff-index', - 'git-difftool', 'git-difftool--helper', 'git-diff-tree', - 'gitdpkgname', 'git-fast-export', 'git-fast-import', 'git-fetch', - 'git-fetch-pack', 'git-fetch--tool', 'git-filter-branch', 'gitfm', - 'git-fmt-merge-msg', 'git-for-each-ref', 'git-format-patch', - 'git-fsck', 'git-fsck-objects', 'git-gc', 'git-get-tar-commit-id', - 'git-grep', 'git-hash-object', 'git-help', 'git-http-fetch', - 'git-http-push', 'git-imap-send', 'git-index-pack', 'git-init', - 'git-init-db', 'git-instaweb', 'gitkeys', 'git-log', - 'git-lost-found', 'git-ls-files', 'git-ls-remote', 'git-ls-tree', - 'git-mailinfo', 'git-mailsplit', 'git-merge', 'git-merge-base', - 'git-merge-file', 'git-merge-index', 'git-merge-octopus', - 'git-merge-one-file', 'git-merge-ours', 'git-merge-recursive', - 'git-merge-resolve', 'git-merge-subtree', 'git-mergetool', - 'git-mergetool--lib', 'git-merge-tree', 'gitmkdirs', 'git-mktag', - 'git-mktree', 'gitmount', 'git-mv', 'git-name-rev', - 'git-pack-objects', 'git-pack-redundant', 'git-pack-refs', - 'git-parse-remote', 'git-patch-id', 'git-peek-remote', 'git-prune', - 'git-prune-packed', 'gitps', 'git-pull', 'git-push', - 'git-quiltimport', 'git-read-tree', 'git-rebase', - 'git-rebase--interactive', 'git-receive-pack', 'git-reflog', - 'gitregrep', 'git-relink', 'git-remote', 'git-repack', - 'git-repo-config', 'git-request-pull', 'git-rerere', 'git-reset', - 'git-revert', 'git-rev-list', 'git-rev-parse', 'gitrfgrep', - 'gitrgrep', 'git-rm', 'git-send-pack', 'git-shell', 'git-shortlog', - 'git-show', 'git-show-branch', 'git-show-index', 'git-show-ref', - 'git-sh-setup', 'git-stage', 'git-stash', 'git-status', - 'git-stripspace', 'git-submodule', 'git-svn', 'git-symbolic-ref', - 'git-tag', 'git-tar-tree', 'gitunpack', 'git-unpack-file', - 'git-unpack-objects', 'git-update-index', 'git-update-ref', - 'git-update-server-info', 'git-upload-archive', 'git-upload-pack', - 'git-var', 'git-verify-pack', 'git-verify-tag', 'gitview', - 'git-web--browse', 'git-whatchanged', 'gitwhich', 'gitwipe', - 'git-write-tree', 'gitxgrep', - - 'head', 'hexdump', 'hostname', 'htop', - - 'id', 'ifconfig', 'ifdown', 'ifup', 'igawk', 'install', - - 'ip', 'ip addr', 'ip addrlabel', 'ip link', 'ip maddr', 'ip mroute', - 'ip neigh', 'ip route', 'ip rule', 'ip tunnel', 'ip xfrm', - - 'jar', 'java', 'javac', 'join', - - 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall', - - 'lame', 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link', - 'ln', 'loadkeys', 'loadunimap', 'locate', 'lockfile', 'login', - 'logname', 'lp', 'lpr', 'ls', 'lsattr', 'lsmod', 'lsmod.old', - 'lspci', 'ltrace', 'lynx', - - 'm4', 'make', 'man', 'mapscrn', 'mesg', 'mkdir', 'mkfifo', - 'mknod', 'mktemp', 'more', 'mount', 'mplayer', 'msgfmt', 'mv', - - 'namei', 'nano', 'nasm', 'nawk', 'netstat', 'nice', - 'nisdomainname', 'nl', 'nm', 'nm86', 'nmap', 'nohup', 'nop', - - 'od', 'openvt', - - 'passwd', 'patch', 'pbzip2', 'pcregrep', 'pcretest', 'perl', - 'perror', 'pgawk', 'pidof', 'pigz', 'ping', 'pr', 'procmail', - 'prune', 'ps', 'pstree', 'ps2ascii', 'ps2epsi', 'ps2frag', - 'ps2pdf', 'ps2ps', 'psbook', 'psmerge', 'psnup', 'psresize', - 'psselect', 'pstops', - - 'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons', - 'rev', 'rm', 'rmdir', 'rsh', 'run-parts', - - 'sash', 'scp', 'screen', 'sed', 'seq', 'sendmail', 'setfont', - 'setkeycodes', 'setleds', 'setmetamode', 'setserial', 'setterm', - 'sh', 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep', - 'slogin', 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add', - 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'sshfs', 'stat', 'strace', - 'strings', 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'svn', - 'svnadmin', 'svndumpfilter', 'svnlook', 'svnmerge', 'svnmucc', - 'svnserve', 'svnshell', 'svnsync', 'svnversion', 'svnwrap', 'sync', - - 'svn add', 'svn ann', 'svn annotate', 'svn blame', 'svn cat', - 'svn changelist', 'svn checkout', 'svn ci', 'svn cl', 'svn cleanup', - 'svn co', 'svn commit', 'svn copy', 'svn cp', 'svn del', - 'svn delete', 'svn di', 'svn diff', 'svn export', 'svn help', - 'svn import', 'svn info', 'svn list', 'svn lock', 'svn log', - 'svn ls', 'svn merge', 'svn mergeinfo', 'svn mkdir', 'svn move', - 'svn mv', 'svn patch', 'svn pd', 'svn pdel', 'svn pe', 'svn pedit', - 'svn pg', 'svn pget', 'svn pl', 'svn plist', 'svn praise', - 'svn propdel', 'svn propedit', 'svn propget', 'svn proplist', - 'svn propset', 'svn ps', 'svn pset', 'svn relocate', 'svn remove', - 'svn rename', 'svn resolve', 'svn resolved', 'svn revert', 'svn rm', - 'svn st', 'svn stat', 'svn status', 'svn sw', 'svn switch', - 'svn unlock', 'svn up', 'svn update', 'svn upgrade', - - 'svnadmin crashtest', 'svnadmin create', 'svnadmin deltify', - 'svnadmin dump', 'svnadmin help', 'svnadmin hotcopy', - 'svnadmin list-dblogs', 'svnadmin list-unused-dblogs', - 'svnadmin load', 'svnadmin lslocks', 'svnadmin lstxns', - 'svnadmin pack', 'svnadmin recover', 'svnadmin rmlocks', - 'svnadmin rmtxns', 'svnadmin setlog', 'svnadmin setrevprop', - 'svnadmin setuuid', 'svnadmin upgrade', 'svnadmin verify', - - 'svndumpfilter exclude', 'svndumpfilter help', - 'svndumpfilter include', - - 'svnlook author', 'svnlook cat', 'svnlook changed', 'svnlook date', - 'svnlook diff', 'svnlook dirs-changed', 'svnlook filesize', - 'svnlook help', 'svnlook history', 'svnlook info', 'svnlook lock', - 'svnlook log', 'svnlook pg', 'svnlook pget', 'svnlook pl', - 'svnlook plist', 'svnlook propget', 'svnlook proplist', - 'svnlook tree', 'svnlook uuid', 'svnlook youngest', - - 'svnrdump dump', 'svnrdump help', 'svnrdump load', - - 'svnsync copy-revprops', 'svnsync help', 'svnsync info', - 'svnsync init', 'svnsync initialize', 'svnsync sync', - 'svnsync synchronize', - - 'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'tree', - 'true', - - 'umount', 'uname', 'unicode_start', 'unicode_stop', 'uniq', - 'unlink', 'unzip', 'updatedb', 'updmap', 'uptime', 'users', - 'utmpdump', 'uuidgen', - - 'valgrind', 'vdir', 'vi', 'vim', 'vmstat', - - 'w', 'wall', 'watch', 'wc', 'wget', 'whatis', 'whereis', - 'which', 'whiptail', 'who', 'whoami', 'whois', 'wine', 'wineboot', - 'winebuild', 'winecfg', 'wineconsole', 'winedbg', 'winedump', - 'winefile', 'wodim', 'write', - - 'xargs', 'xhost', 'xmodmap', 'xset', - - 'yacc', 'yes', 'ypdomainname', 'yum', - - 'yum check-update', 'yum clean', 'yum deplist', 'yum erase', - 'yum groupinfo', 'yum groupinstall', 'yum grouplist', - 'yum groupremove', 'yum groupupdate', 'yum info', 'yum install', - 'yum list', 'yum localinstall', 'yum localupdate', 'yum makecache', - 'yum provides', 'yum remove', 'yum resolvedep', 'yum search', - 'yum shell', 'yum update', 'yum upgrade', 'yum whatprovides', - - 'zcat', 'zcmp', 'zdiff', 'zdump', 'zegrep', 'zfgrep', 'zforce', - 'zgrep', 'zip', 'zipgrep', 'zipinfo', 'zless', 'zmore', 'znew', - 'zsh', 'zsoelim' - ), - 3 => array( - 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command', - 'compgen', 'complete', 'continue', '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' - ) - ), - 'SYMBOLS' => array( - '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;', '`' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, - 2 => true, - 3 => true - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #000000; font-weight: bold;', - 2 => 'color: #c20cb9; font-weight: bold;', - 3 => 'color: #7a0874; font-weight: bold;' - ), - 'COMMENTS' => array( - 0 => 'color: #666666; font-style: italic;', - 1 => 'color: #800000;', - 2 => 'color: #cc0000; font-style: italic;', - 3 => 'color: #000000; font-weight: bold;', - 4 => 'color: #666666;' - ), - 'ESCAPE_CHAR' => array( - 1 => 'color: #000099; font-weight: bold;', - 2 => 'color: #007800;', - 3 => 'color: #007800;', - 4 => 'color: #007800;', - 5 => 'color: #780078;', - 'HARD' => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #7a0874; font-weight: bold;' - ), - 'STRINGS' => array( - 0 => 'color: #ff0000;', - 'HARD' => 'color: #ff0000;' - ), - 'NUMBERS' => array( - 0 => 'color: #000000;' - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #000000; font-weight: bold;' - ), - 'REGEXPS' => array( - 0 => 'color: #007800;', - 1 => 'color: #007800;', - 2 => 'color: #007800;', - 4 => 'color: #007800;', - 5 => 'color: #660033;' - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - //Variables (will be handled by comment_regexps) - 0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}", - //Variables without braces - 1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*", - //Variable assignment - 2 => "(? "\\$[*#\$\\-\\?!\d]", - //Parameters of commands - 5 => "(?<=\s)--?[0-9a-zA-Z\-]+(?=[\s=]|<(?:SEMI|PIPE)>|$)" - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4, - 'PARSER_CONTROL' => array( - 'COMMENTS' => array( - 'DISALLOWED_BEFORE' => '$' - ), - 'KEYWORDS' => array( - 'DISALLOWED_BEFORE' => "(? "(?![\.\-a-zA-Z0-9_%=\\/:])", - 2 => array( - 'SPACE_AS_WHITESPACE' => false - ) - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php deleted file mode 100644 index b0574cec..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php +++ /dev/null @@ -1,339 +0,0 @@ - 'Basic4GL', - 'COMMENT_SINGLE' => array(1 => "'"), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - - // Navy Blue Bold Keywords - - 'true','rnd_max','m_pi','m_e','false','VK_ZOOM','VK_UP','VK_TAB','VK_SUBTRACT','VK_SPACE','VK_SNAPSHOT', - 'VK_SHIFT','VK_SEPARATOR','VK_SELECT','VK_SCROLL','VK_RWIN','VK_RSHIFT','VK_RMENU','VK_RIGHT','VK_RETURN', - 'VK_RCONTROL','VK_RBUTTON','VK_PROCESSKEY','VK_PRIOR','VK_PRINT','VK_PLAY','VK_PAUSE','VK_NUMPAD9','VK_NUMPAD8', - 'VK_NUMPAD7','VK_NUMPAD6','VK_NUMPAD5','VK_NUMPAD4','VK_NUMPAD3','VK_NUMPAD2','VK_NUMPAD1','VK_NUMPAD0', - 'VK_NUMLOCK','VK_NONCONVERT','VK_NEXT','VK_MULTIPLY','VK_MODECHANGE','VK_MENU','VK_MBUTTON','VK_LWIN', - 'VK_LSHIFT','VK_LMENU','VK_LEFT','VK_LCONTROL','VK_LBUTTON','VK_KANJI','VK_KANA','VK_JUNJA','VK_INSERT', - 'VK_HOME','VK_HELP','VK_HANJA','VK_HANGUL','VK_HANGEUL','VK_FINAL','VK_F9','VK_F8','VK_F7','VK_F6','VK_F5', - 'VK_F4','VK_F3','VK_F24','VK_F23','VK_F22','VK_F21','VK_F20','VK_F2','VK_F19','VK_F18','VK_F17','VK_F16', - 'VK_F15','VK_F14','VK_F13','VK_F12','VK_F11','VK_F10','VK_F1','VK_EXSEL','VK_EXECUTE','VK_ESCAPE','VK_EREOF', - 'VK_END','VK_DOWN','VK_DIVIDE','VK_DELETE','VK_DECIMAL','VK_CRSEL','VK_CONVERT','VK_CONTROL','VK_CLEAR', - 'VK_CAPITAL','VK_CANCEL','VK_BACK','VK_ATTN','VK_APPS','VK_ADD','VK_ACCEPT','TEXT_SIMPLE','TEXT_OVERLAID', - 'TEXT_BUFFERED','SPR_TILEMAP','SPR_SPRITE','SPR_INVALID','MOUSE_RBUTTON','MOUSE_MBUTTON','MOUSE_LBUTTON', - 'GL_ZOOM_Y','GL_ZOOM_X','GL_ZERO','GL_XOR','GL_WIN_swap_hint','GL_WIN_draw_range_elements','GL_VIEWPORT_BIT', - 'GL_VIEWPORT','GL_VERTEX_ARRAY_TYPE_EXT','GL_VERTEX_ARRAY_TYPE','GL_VERTEX_ARRAY_STRIDE_EXT','GL_VERTEX_ARRAY_STRIDE', - 'GL_VERTEX_ARRAY_SIZE_EXT','GL_VERTEX_ARRAY_SIZE','GL_VERTEX_ARRAY_POINTER_EXT','GL_VERTEX_ARRAY_POINTER', - 'GL_VERTEX_ARRAY_EXT','GL_VERTEX_ARRAY_COUNT_EXT','GL_VERTEX_ARRAY','GL_VERSION_1_1','GL_VERSION','GL_VENDOR', - 'GL_V3F','GL_V2F','GL_UNSIGNED_SHORT','GL_UNSIGNED_INT','GL_UNSIGNED_BYTE','GL_UNPACK_SWAP_BYTES','GL_UNPACK_SKIP_ROWS', - 'GL_UNPACK_SKIP_PIXELS','GL_UNPACK_ROW_LENGTH','GL_UNPACK_LSB_FIRST','GL_UNPACK_ALIGNMENT','GL_TRUE','GL_TRIANGLE_STRIP', - 'GL_TRIANGLE_FAN','GL_TRIANGLES','GL_TRANSFORM_BIT','GL_TEXTURE_WRAP_T','GL_TEXTURE_WRAP_S','GL_TEXTURE_WIDTH', - 'GL_TEXTURE_STACK_DEPTH','GL_TEXTURE_RESIDENT','GL_TEXTURE_RED_SIZE','GL_TEXTURE_PRIORITY','GL_TEXTURE_MIN_FILTER', - 'GL_TEXTURE_MATRIX','GL_TEXTURE_MAG_FILTER','GL_TEXTURE_LUMINANCE_SIZE','GL_TEXTURE_INTERNAL_FORMAT','GL_TEXTURE_INTENSITY_SIZE', - 'GL_TEXTURE_HEIGHT','GL_TEXTURE_GREEN_SIZE','GL_TEXTURE_GEN_T','GL_TEXTURE_GEN_S','GL_TEXTURE_GEN_R','GL_TEXTURE_GEN_Q', - 'GL_TEXTURE_GEN_MODE','GL_TEXTURE_ENV_MODE','GL_TEXTURE_ENV_COLOR','GL_TEXTURE_ENV','GL_TEXTURE_COORD_ARRAY_TYPE_EXT', - 'GL_TEXTURE_COORD_ARRAY_TYPE','GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','GL_TEXTURE_COORD_ARRAY_STRIDE','GL_TEXTURE_COORD_ARRAY_SIZE_EXT', - 'GL_TEXTURE_COORD_ARRAY_SIZE','GL_TEXTURE_COORD_ARRAY_POINTER_EXT','GL_TEXTURE_COORD_ARRAY_POINTER','GL_TEXTURE_COORD_ARRAY_EXT', - 'GL_TEXTURE_COORD_ARRAY_COUNT_EXT','GL_TEXTURE_COORD_ARRAY','GL_TEXTURE_COMPONENTS','GL_TEXTURE_BORDER_COLOR','GL_TEXTURE_BORDER', - 'GL_TEXTURE_BLUE_SIZE','GL_TEXTURE_BIT','GL_TEXTURE_BINDING_2D','GL_TEXTURE_BINDING_1D','GL_TEXTURE_ALPHA_SIZE', - 'GL_TEXTURE_2D','GL_TEXTURE_1D','GL_TEXTURE9_ARB','GL_TEXTURE9','GL_TEXTURE8_ARB','GL_TEXTURE8','GL_TEXTURE7_ARB', - 'GL_TEXTURE7','GL_TEXTURE6_ARB','GL_TEXTURE6','GL_TEXTURE5_ARB','GL_TEXTURE5','GL_TEXTURE4_ARB','GL_TEXTURE4', - 'GL_TEXTURE3_ARB','GL_TEXTURE31_ARB','GL_TEXTURE31','GL_TEXTURE30_ARB','GL_TEXTURE30','GL_TEXTURE3','GL_TEXTURE2_ARB', - 'GL_TEXTURE29_ARB','GL_TEXTURE29','GL_TEXTURE28_ARB','GL_TEXTURE28','GL_TEXTURE27_ARB','GL_TEXTURE27','GL_TEXTURE26_ARB', - 'GL_TEXTURE26','GL_TEXTURE25_ARB','GL_TEXTURE25','GL_TEXTURE24_ARB','GL_TEXTURE24','GL_TEXTURE23_ARB','GL_TEXTURE23', - 'GL_TEXTURE22_ARB','GL_TEXTURE22','GL_TEXTURE21_ARB','GL_TEXTURE21','GL_TEXTURE20_ARB','GL_TEXTURE20','GL_TEXTURE2', - 'GL_TEXTURE1_ARB','GL_TEXTURE19_ARB','GL_TEXTURE19','GL_TEXTURE18_ARB','GL_TEXTURE18','GL_TEXTURE17_ARB', - 'GL_TEXTURE17','GL_TEXTURE16_ARB','GL_TEXTURE16','GL_TEXTURE15_ARB','GL_TEXTURE15','GL_TEXTURE14_ARB','GL_TEXTURE14', - 'GL_TEXTURE13_ARB','GL_TEXTURE13','GL_TEXTURE12_ARB','GL_TEXTURE12','GL_TEXTURE11_ARB','GL_TEXTURE11','GL_TEXTURE10_ARB', - 'GL_TEXTURE10','GL_TEXTURE1','GL_TEXTURE0_ARB','GL_TEXTURE0','GL_TEXTURE','GL_T4F_V4F','GL_T4F_C4F_N3F_V4F','GL_T2F_V3F', - 'GL_T2F_N3F_V3F','GL_T2F_C4UB_V3F','GL_T2F_C4F_N3F_V3F','GL_T2F_C3F_V3F','GL_T','GL_SUBPIXEL_BITS','GL_STEREO', - 'GL_STENCIL_WRITEMASK','GL_STENCIL_VALUE_MASK','GL_STENCIL_TEST','GL_STENCIL_REF','GL_STENCIL_PASS_DEPTH_PASS', - 'GL_STENCIL_PASS_DEPTH_FAIL','GL_STENCIL_INDEX','GL_STENCIL_FUNC','GL_STENCIL_FAIL','GL_STENCIL_CLEAR_VALUE', - 'GL_STENCIL_BUFFER_BIT','GL_STENCIL_BITS','GL_STENCIL','GL_STACK_UNDERFLOW','GL_STACK_OVERFLOW','GL_SRC_COLOR', - 'GL_SRC_ALPHA_SATURATE','GL_SRC_ALPHA','GL_SPOT_EXPONENT','GL_SPOT_DIRECTION','GL_SPOT_CUTOFF','GL_SPHERE_MAP', - 'GL_SPECULAR','GL_SOURCE2_RGB_EXT','GL_SOURCE2_RGB','GL_SOURCE2_ALPHA_EXT','GL_SOURCE2_ALPHA','GL_SOURCE1_RGB_EXT', - 'GL_SOURCE1_RGB','GL_SOURCE1_ALPHA_EXT','GL_SOURCE1_ALPHA','GL_SOURCE0_RGB_EXT','GL_SOURCE0_RGB','GL_SOURCE0_ALPHA_EXT', - 'GL_SOURCE0_ALPHA','GL_SMOOTH','GL_SHORT','GL_SHININESS','GL_SHADE_MODEL','GL_SET','GL_SELECTION_BUFFER_SIZE', - 'GL_SELECTION_BUFFER_POINTER','GL_SELECT','GL_SCISSOR_TEST','GL_SCISSOR_BOX','GL_SCISSOR_BIT','GL_S','GL_RIGHT', - 'GL_RGB_SCALE_EXT','GL_RGB_SCALE','GL_RGBA_MODE','GL_RGBA8','GL_RGBA4','GL_RGBA2','GL_RGBA16','GL_RGBA12','GL_RGBA', - 'GL_RGB8','GL_RGB5_A1','GL_RGB5','GL_RGB4','GL_RGB16','GL_RGB12','GL_RGB10_A2','GL_RGB10','GL_RGB','GL_RETURN', - 'GL_REPLACE','GL_REPEAT','GL_RENDER_MODE','GL_RENDERER','GL_RENDER','GL_RED_SCALE','GL_RED_BITS','GL_RED_BIAS', - 'GL_RED','GL_READ_BUFFER','GL_R3_G3_B2','GL_R','GL_QUAD_STRIP','GL_QUADS','GL_QUADRATIC_ATTENUATION','GL_Q', - 'GL_PROXY_TEXTURE_2D','GL_PROXY_TEXTURE_1D','GL_PROJECTION_STACK_DEPTH','GL_PROJECTION_MATRIX','GL_PROJECTION', - 'GL_PRIMARY_COLOR_EXT','GL_PRIMARY_COLOR','GL_PREVIOUS_EXT','GL_PREVIOUS','GL_POSITION','GL_POLYGON_TOKEN', - 'GL_POLYGON_STIPPLE_BIT','GL_POLYGON_STIPPLE','GL_POLYGON_SMOOTH_HINT','GL_POLYGON_SMOOTH','GL_POLYGON_OFFSET_UNITS', - 'GL_POLYGON_OFFSET_POINT','GL_POLYGON_OFFSET_LINE','GL_POLYGON_OFFSET_FILL','GL_POLYGON_OFFSET_FACTOR','GL_POLYGON_MODE', - 'GL_POLYGON_BIT','GL_POLYGON','GL_POINT_TOKEN','GL_POINT_SMOOTH_HINT','GL_POINT_SMOOTH','GL_POINT_SIZE_RANGE', - 'GL_POINT_SIZE_GRANULARITY','GL_POINT_SIZE','GL_POINT_BIT','GL_POINTS','GL_POINT','GL_PIXEL_MODE_BIT', - 'GL_PIXEL_MAP_S_TO_S_SIZE','GL_PIXEL_MAP_S_TO_S','GL_PIXEL_MAP_R_TO_R_SIZE','GL_PIXEL_MAP_R_TO_R','GL_PIXEL_MAP_I_TO_R_SIZE', - 'GL_PIXEL_MAP_I_TO_R','GL_PIXEL_MAP_I_TO_I_SIZE','GL_PIXEL_MAP_I_TO_I','GL_PIXEL_MAP_I_TO_G_SIZE','GL_PIXEL_MAP_I_TO_G', - 'GL_PIXEL_MAP_I_TO_B_SIZE','GL_PIXEL_MAP_I_TO_B','GL_PIXEL_MAP_I_TO_A_SIZE','GL_PIXEL_MAP_I_TO_A','GL_PIXEL_MAP_G_TO_G_SIZE', - 'GL_PIXEL_MAP_G_TO_G','GL_PIXEL_MAP_B_TO_B_SIZE','GL_PIXEL_MAP_B_TO_B','GL_PIXEL_MAP_A_TO_A_SIZE','GL_PIXEL_MAP_A_TO_A', - 'GL_PHONG_WIN','GL_PHONG_HINT_WIN','GL_PERSPECTIVE_CORRECTION_HINT','GL_PASS_THROUGH_TOKEN','GL_PACK_SWAP_BYTES', - 'GL_PACK_SKIP_ROWS','GL_PACK_SKIP_PIXELS','GL_PACK_ROW_LENGTH','GL_PACK_LSB_FIRST','GL_PACK_ALIGNMENT','GL_OUT_OF_MEMORY', - 'GL_OR_REVERSE','GL_OR_INVERTED','GL_ORDER','GL_OR','GL_OPERAND2_RGB_EXT','GL_OPERAND2_RGB','GL_OPERAND2_ALPHA_EXT', - 'GL_OPERAND2_ALPHA','GL_OPERAND1_RGB_EXT','GL_OPERAND1_RGB','GL_OPERAND1_ALPHA_EXT','GL_OPERAND1_ALPHA','GL_OPERAND0_RGB_EXT', - 'GL_OPERAND0_RGB','GL_OPERAND0_ALPHA_EXT','GL_OPERAND0_ALPHA','GL_ONE_MINUS_SRC_COLOR','GL_ONE_MINUS_SRC_ALPHA', - 'GL_ONE_MINUS_DST_COLOR','GL_ONE_MINUS_DST_ALPHA','GL_ONE','GL_OBJECT_PLANE','GL_OBJECT_LINEAR','GL_NO_ERROR', - 'GL_NOTEQUAL','GL_NORMAL_ARRAY_TYPE_EXT','GL_NORMAL_ARRAY_TYPE','GL_NORMAL_ARRAY_STRIDE_EXT','GL_NORMAL_ARRAY_STRIDE', - 'GL_NORMAL_ARRAY_POINTER_EXT','GL_NORMAL_ARRAY_POINTER','GL_NORMAL_ARRAY_EXT','GL_NORMAL_ARRAY_COUNT_EXT', - 'GL_NORMAL_ARRAY','GL_NORMALIZE','GL_NOR','GL_NOOP','GL_NONE','GL_NICEST','GL_NEVER','GL_NEAREST_MIPMAP_NEAREST','GL_NEAREST_MIPMAP_LINEAR', - 'GL_NEAREST','GL_NAND','GL_NAME_STACK_DEPTH','GL_N3F_V3F','GL_MULT','GL_MODULATE','GL_MODELVIEW_STACK_DEPTH','GL_MODELVIEW_MATRIX', - 'GL_MODELVIEW','GL_MAX_VIEWPORT_DIMS','GL_MAX_TEXTURE_UNITS_ARB','GL_MAX_TEXTURE_UNITS','GL_MAX_TEXTURE_STACK_DEPTH', - 'GL_MAX_TEXTURE_SIZE','GL_MAX_PROJECTION_STACK_DEPTH','GL_MAX_PIXEL_MAP_TABLE','GL_MAX_NAME_STACK_DEPTH','GL_MAX_MODELVIEW_STACK_DEPTH', - 'GL_MAX_LIST_NESTING','GL_MAX_LIGHTS','GL_MAX_EVAL_ORDER','GL_MAX_ELEMENTS_VERTICES_WIN','GL_MAX_ELEMENTS_INDICES_WIN', - 'GL_MAX_CLIP_PLANES','GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','GL_MAX_ATTRIB_STACK_DEPTH','GL_MATRIX_MODE','GL_MAP_STENCIL', - 'GL_MAP_COLOR','GL_MAP2_VERTEX_4','GL_MAP2_VERTEX_3','GL_MAP2_TEXTURE_COORD_4','GL_MAP2_TEXTURE_COORD_3','GL_MAP2_TEXTURE_COORD_2', - 'GL_MAP2_TEXTURE_COORD_1','GL_MAP2_NORMAL','GL_MAP2_INDEX','GL_MAP2_GRID_SEGMENTS','GL_MAP2_GRID_DOMAIN','GL_MAP2_COLOR_4', - 'GL_MAP1_VERTEX_4','GL_MAP1_VERTEX_3','GL_MAP1_TEXTURE_COORD_4','GL_MAP1_TEXTURE_COORD_3','GL_MAP1_TEXTURE_COORD_2', - 'GL_MAP1_TEXTURE_COORD_1','GL_MAP1_NORMAL','GL_MAP1_INDEX','GL_MAP1_GRID_SEGMENTS','GL_MAP1_GRID_DOMAIN', - 'GL_MAP1_COLOR_4','GL_LUMINANCE_ALPHA','GL_LUMINANCE8_ALPHA8','GL_LUMINANCE8','GL_LUMINANCE6_ALPHA2','GL_LUMINANCE4_ALPHA4', - 'GL_LUMINANCE4','GL_LUMINANCE16_ALPHA16','GL_LUMINANCE16','GL_LUMINANCE12_ALPHA4','GL_LUMINANCE12_ALPHA12','GL_LUMINANCE12', - 'GL_LUMINANCE','GL_LOGIC_OP_MODE','GL_LOGIC_OP','GL_LOAD','GL_LIST_MODE','GL_LIST_INDEX','GL_LIST_BIT', - 'GL_LIST_BASE','GL_LINE_WIDTH_RANGE','GL_LINE_WIDTH_GRANULARITY','GL_LINE_WIDTH','GL_LINE_TOKEN','GL_LINE_STRIP','GL_LINE_STIPPLE_REPEAT', - 'GL_LINE_STIPPLE_PATTERN','GL_LINE_STIPPLE','GL_LINE_SMOOTH_HINT','GL_LINE_SMOOTH','GL_LINE_RESET_TOKEN','GL_LINE_LOOP', - 'GL_LINE_BIT','GL_LINES','GL_LINEAR_MIPMAP_NEAREST','GL_LINEAR_MIPMAP_LINEAR','GL_LINEAR_ATTENUATION','GL_LINEAR', - 'GL_LINE','GL_LIGHT_MODEL_TWO_SIDE','GL_LIGHT_MODEL_LOCAL_VIEWER','GL_LIGHT_MODEL_AMBIENT','GL_LIGHTING_BIT', - 'GL_LIGHTING','GL_LIGHT7','GL_LIGHT6','GL_LIGHT5','GL_LIGHT4','GL_LIGHT3','GL_LIGHT2','GL_LIGHT1','GL_LIGHT0', - 'GL_LESS','GL_LEQUAL','GL_LEFT','GL_KEEP','GL_INVERT','GL_INVALID_VALUE','GL_INVALID_OPERATION','GL_INVALID_ENUM','GL_INTERPOLATE_EXT', - 'GL_INTERPOLATE','GL_INTENSITY8','GL_INTENSITY4','GL_INTENSITY16','GL_INTENSITY12','GL_INTENSITY','GL_INT', - 'GL_INDEX_WRITEMASK','GL_INDEX_SHIFT','GL_INDEX_OFFSET','GL_INDEX_MODE','GL_INDEX_LOGIC_OP','GL_INDEX_CLEAR_VALUE','GL_INDEX_BITS', - 'GL_INDEX_ARRAY_TYPE_EXT','GL_INDEX_ARRAY_TYPE','GL_INDEX_ARRAY_STRIDE_EXT','GL_INDEX_ARRAY_STRIDE','GL_INDEX_ARRAY_POINTER_EXT', - 'GL_INDEX_ARRAY_POINTER','GL_INDEX_ARRAY_EXT','GL_INDEX_ARRAY_COUNT_EXT','GL_INDEX_ARRAY','GL_INCR','GL_HINT_BIT', - 'GL_GREEN_SCALE','GL_GREEN_BITS','GL_GREEN_BIAS','GL_GREEN','GL_GREATER','GL_GEQUAL','GL_FRONT_RIGHT','GL_FRONT_LEFT', - 'GL_FRONT_FACE','GL_FRONT_AND_BACK','GL_FRONT','GL_FOG_START','GL_FOG_SPECULAR_TEXTURE_WIN','GL_FOG_MODE','GL_FOG_INDEX', - 'GL_FOG_HINT','GL_FOG_END','GL_FOG_DENSITY','GL_FOG_COLOR','GL_FOG_BIT','GL_FOG','GL_FLOAT','GL_FLAT','GL_FILL', - 'GL_FEEDBACK_BUFFER_TYPE','GL_FEEDBACK_BUFFER_SIZE','GL_FEEDBACK_BUFFER_POINTER','GL_FEEDBACK','GL_FASTEST','GL_FALSE', - 'GL_EYE_PLANE','GL_EYE_LINEAR','GL_EXT_vertex_array','GL_EXT_paletted_texture','GL_EXT_bgra','GL_EXTENSIONS','GL_EXP2', - 'GL_EXP','GL_EVAL_BIT','GL_EQUIV','GL_EQUAL','GL_ENABLE_BIT','GL_EMISSION','GL_EDGE_FLAG_ARRAY_STRIDE_EXT','GL_EDGE_FLAG_ARRAY_STRIDE', - 'GL_EDGE_FLAG_ARRAY_POINTER_EXT','GL_EDGE_FLAG_ARRAY_POINTER','GL_EDGE_FLAG_ARRAY_EXT','GL_EDGE_FLAG_ARRAY_COUNT_EXT','GL_EDGE_FLAG_ARRAY', - 'GL_EDGE_FLAG','GL_DST_COLOR','GL_DST_ALPHA','GL_DRAW_PIXEL_TOKEN','GL_DRAW_BUFFER','GL_DOUBLE_EXT','GL_DOUBLEBUFFER', - 'GL_DOUBLE','GL_DONT_CARE','GL_DOMAIN','GL_DITHER','GL_DIFFUSE','GL_DEPTH_WRITEMASK','GL_DEPTH_TEST','GL_DEPTH_SCALE', - 'GL_DEPTH_RANGE','GL_DEPTH_FUNC','GL_DEPTH_COMPONENT','GL_DEPTH_CLEAR_VALUE','GL_DEPTH_BUFFER_BIT','GL_DEPTH_BITS', - 'GL_DEPTH_BIAS','GL_DEPTH','GL_DECR','GL_DECAL','GL_CW','GL_CURRENT_TEXTURE_COORDS','GL_CURRENT_RASTER_TEXTURE_COORDS','GL_CURRENT_RASTER_POSITION_VALID', - 'GL_CURRENT_RASTER_POSITION','GL_CURRENT_RASTER_INDEX','GL_CURRENT_RASTER_DISTANCE','GL_CURRENT_RASTER_COLOR','GL_CURRENT_NORMAL', - 'GL_CURRENT_INDEX','GL_CURRENT_COLOR','GL_CURRENT_BIT','GL_CULL_FACE_MODE','GL_CULL_FACE','GL_COPY_PIXEL_TOKEN', - 'GL_COPY_INVERTED','GL_COPY','GL_CONSTANT_EXT','GL_CONSTANT_ATTENUATION','GL_CONSTANT','GL_COMPILE_AND_EXECUTE','GL_COMPILE','GL_COMBINE_RGB_EXT', - 'GL_COMBINE_RGB','GL_COMBINE_EXT','GL_COMBINE_ALPHA_EXT','GL_COMBINE_ALPHA','GL_COMBINE','GL_COLOR_WRITEMASK', - 'GL_COLOR_TABLE_WIDTH_EXT','GL_COLOR_TABLE_RED_SIZE_EXT','GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','GL_COLOR_TABLE_INTENSITY_SIZE_EXT', - 'GL_COLOR_TABLE_GREEN_SIZE_EXT','GL_COLOR_TABLE_FORMAT_EXT','GL_COLOR_TABLE_BLUE_SIZE_EXT','GL_COLOR_TABLE_ALPHA_SIZE_EXT', - 'GL_COLOR_MATERIAL_PARAMETER','GL_COLOR_MATERIAL_FACE','GL_COLOR_MATERIAL','GL_COLOR_LOGIC_OP','GL_COLOR_INDEXES', - 'GL_COLOR_INDEX8_EXT','GL_COLOR_INDEX4_EXT','GL_COLOR_INDEX2_EXT','GL_COLOR_INDEX1_EXT','GL_COLOR_INDEX16_EXT', - 'GL_COLOR_INDEX12_EXT','GL_COLOR_INDEX','GL_COLOR_CLEAR_VALUE','GL_COLOR_BUFFER_BIT','GL_COLOR_ARRAY_TYPE_EXT', - 'GL_COLOR_ARRAY_TYPE','GL_COLOR_ARRAY_STRIDE_EXT','GL_COLOR_ARRAY_STRIDE','GL_COLOR_ARRAY_SIZE_EXT','GL_COLOR_ARRAY_SIZE', - 'GL_COLOR_ARRAY_POINTER_EXT','GL_COLOR_ARRAY_POINTER','GL_COLOR_ARRAY_EXT','GL_COLOR_ARRAY_COUNT_EXT','GL_COLOR_ARRAY', - 'GL_COLOR','GL_COEFF','GL_CLIP_PLANE5','GL_CLIP_PLANE4','GL_CLIP_PLANE3','GL_CLIP_PLANE2','GL_CLIP_PLANE1','GL_CLIP_PLANE0', - 'GL_CLIENT_VERTEX_ARRAY_BIT','GL_CLIENT_PIXEL_STORE_BIT','GL_CLIENT_ATTRIB_STACK_DEPTH','GL_CLIENT_ALL_ATTRIB_BITS', - 'GL_CLIENT_ACTIVE_TEXTURE_ARB','GL_CLIENT_ACTIVE_TEXTURE','GL_CLEAR','GL_CLAMP','GL_CCW','GL_C4UB_V3F','GL_C4UB_V2F', - 'GL_C4F_N3F_V3F','GL_C3F_V3F','GL_BYTE','GL_BLUE_SCALE','GL_BLUE_BITS','GL_BLUE_BIAS','GL_BLUE','GL_BLEND_SRC','GL_BLEND_DST', - 'GL_BLEND','GL_BITMAP_TOKEN','GL_BITMAP','GL_BGR_EXT','GL_BGRA_EXT','GL_BACK_RIGHT','GL_BACK_LEFT','GL_BACK', - 'GL_AUX_BUFFERS','GL_AUX3','GL_AUX2','GL_AUX1','GL_AUX0','GL_AUTO_NORMAL','GL_ATTRIB_STACK_DEPTH','GL_AND_REVERSE', - 'GL_AND_INVERTED','GL_AND','GL_AMBIENT_AND_DIFFUSE','GL_AMBIENT','GL_ALWAYS','GL_ALPHA_TEST_REF','GL_ALPHA_TEST_FUNC', - 'GL_ALPHA_TEST','GL_ALPHA_SCALE','GL_ALPHA_BITS','GL_ALPHA_BIAS','GL_ALPHA8','GL_ALPHA4','GL_ALPHA16','GL_ALPHA12', - 'GL_ALPHA','GL_ALL_ATTRIB_BITS','GL_ADD_SIGNED_EXT','GL_ADD_SIGNED','GL_ADD','GL_ACTIVE_TEXTURE_ARB','GL_ACTIVE_TEXTURE', - 'GL_ACCUM_RED_BITS','GL_ACCUM_GREEN_BITS','GL_ACCUM_CLEAR_VALUE','GL_ACCUM_BUFFER_BIT','GL_ACCUM_BLUE_BITS','GL_ACCUM_ALPHA_BITS', - 'GL_ACCUM','GL_4_BYTES','GL_4D_COLOR_TEXTURE','GL_3_BYTES','GL_3D_COLOR_TEXTURE','GL_3D_COLOR','GL_3D','GL_2_BYTES', - 'GL_2D','GLU_V_STEP','GLU_VERTEX','GLU_VERSION_1_2','GLU_VERSION_1_1','GLU_VERSION','GLU_U_STEP','GLU_UNKNOWN','GLU_TRUE', - 'GLU_TESS_WINDING_RULE','GLU_TESS_WINDING_POSITIVE','GLU_TESS_WINDING_ODD','GLU_TESS_WINDING_NONZERO','GLU_TESS_WINDING_NEGATIVE', - 'GLU_TESS_WINDING_ABS_GEQ_TWO','GLU_TESS_VERTEX_DATA','GLU_TESS_VERTEX','GLU_TESS_TOLERANCE','GLU_TESS_NEED_COMBINE_CALLBACK','GLU_TESS_MISSING_END_POLYGON', - 'GLU_TESS_MISSING_END_CONTOUR','GLU_TESS_MISSING_BEGIN_POLYGON','GLU_TESS_MISSING_BEGIN_CONTOUR','GLU_TESS_ERROR_DATA', - 'GLU_TESS_ERROR8','GLU_TESS_ERROR7','GLU_TESS_ERROR6','GLU_TESS_ERROR5','GLU_TESS_ERROR4','GLU_TESS_ERROR3','GLU_TESS_ERROR2', - 'GLU_TESS_ERROR1','GLU_TESS_ERROR','GLU_TESS_END_DATA','GLU_TESS_END','GLU_TESS_EDGE_FLAG_DATA','GLU_TESS_EDGE_FLAG', - 'GLU_TESS_COORD_TOO_LARGE','GLU_TESS_COMBINE_DATA','GLU_TESS_COMBINE','GLU_TESS_BOUNDARY_ONLY','GLU_TESS_BEGIN_DATA', - 'GLU_TESS_BEGIN','GLU_SMOOTH','GLU_SILHOUETTE','GLU_SAMPLING_TOLERANCE','GLU_SAMPLING_METHOD','GLU_POINT','GLU_PATH_LENGTH', - 'GLU_PARAMETRIC_TOLERANCE','GLU_PARAMETRIC_ERROR','GLU_OUT_OF_MEMORY','GLU_OUTSIDE','GLU_OUTLINE_POLYGON','GLU_OUTLINE_PATCH', - 'GLU_NURBS_ERROR9','GLU_NURBS_ERROR8','GLU_NURBS_ERROR7','GLU_NURBS_ERROR6','GLU_NURBS_ERROR5','GLU_NURBS_ERROR4', - 'GLU_NURBS_ERROR37','GLU_NURBS_ERROR36','GLU_NURBS_ERROR35','GLU_NURBS_ERROR34','GLU_NURBS_ERROR33','GLU_NURBS_ERROR32', - 'GLU_NURBS_ERROR31','GLU_NURBS_ERROR30','GLU_NURBS_ERROR3','GLU_NURBS_ERROR29','GLU_NURBS_ERROR28','GLU_NURBS_ERROR27','GLU_NURBS_ERROR26', - 'GLU_NURBS_ERROR25','GLU_NURBS_ERROR24','GLU_NURBS_ERROR23','GLU_NURBS_ERROR22','GLU_NURBS_ERROR21','GLU_NURBS_ERROR20', - 'GLU_NURBS_ERROR2','GLU_NURBS_ERROR19','GLU_NURBS_ERROR18','GLU_NURBS_ERROR17','GLU_NURBS_ERROR16','GLU_NURBS_ERROR15','GLU_NURBS_ERROR14', - 'GLU_NURBS_ERROR13','GLU_NURBS_ERROR12','GLU_NURBS_ERROR11','GLU_NURBS_ERROR10','GLU_NURBS_ERROR1','GLU_NONE', - 'GLU_MAP1_TRIM_3','GLU_MAP1_TRIM_2','GLU_LINE','GLU_INVALID_VALUE','GLU_INVALID_ENUM','GLU_INTERIOR','GLU_INSIDE','GLU_INCOMPATIBLE_GL_VERSION', - 'GLU_FLAT','GLU_FILL','GLU_FALSE','GLU_EXTERIOR','GLU_EXTENSIONS','GLU_ERROR','GLU_END','GLU_EDGE_FLAG','GLU_DOMAIN_DISTANCE', - 'GLU_DISPLAY_MODE','GLU_CW','GLU_CULLING','GLU_CCW','GLU_BEGIN','GLU_AUTO_LOAD_MATRIX','CHANNEL_UNORDERED','CHANNEL_ORDERED', - 'CHANNEL_MAX' - ), - 2 => array( - - // Red Lowercase Keywords - - 'WriteWord','WriteString','WriteReal','WriteLine','WriteInt','WriteFloat','WriteDouble','WriteChar','WriteByte', - 'windowwidth','windowheight','waittimer','Vec4','Vec3','Vec2','val','UpdateJoystick','ucase$','Transpose','tickcount', - 'textscroll','textrows','textmode','textcols','tanh','tand','tan','synctimercatchup','synctimer','swapbuffers', - 'str$','stopsoundvoice','stopsounds','stopmusic','sqrt','sqr','sprzorder','spryvel','sprytiles','sprysize','spryrepeat', - 'spryflip','sprycentre','spry','sprxvel','sprxtiles','sprxsize','sprxrepeat','sprxflip','sprxcentre','sprx', - 'sprvisible','sprvel','sprtype','sprtop','sprspin','sprsolid','sprsetzorder','sprsetyvel','sprsetysize','sprsetyrepeat', - 'sprsetyflip','sprsetycentre','sprsety','sprsetxvel','sprsetxsize','sprsetxrepeat','sprsetxflip','sprsetxcentre', - 'sprsetx','sprsetvisible','sprsetvel','sprsettiles','sprsettextures','sprsettexture','sprsetspin','sprsetsolid', - 'sprsetsize','sprsetscale','sprsetpos','sprsetparallax','sprsetframe','sprsetcolor','sprsetanimspeed','sprsetanimloop', - 'sprsetangle','sprsetalpha','sprscale','sprright','sprpos','sprparallax','sprleft','spriteareawidth','spriteareaheight', - 'sprframe','sprcolor','sprcameraz','sprcameray','sprcamerax','sprcamerasetz','sprcamerasety','sprcamerasetx', - 'sprcamerasetpos','sprcamerasetfov','sprcamerasetangle','sprcamerapos','sprcamerafov','sprcameraangle', - 'sprbottom','spranimspeed','spranimloop','spranimdone','sprangle','spralpha','spraddtextures','spraddtexture', - 'sounderror','sleep','sind','sin','showcursor','sgn','settextscroll','setmusicvolume','SendMessage','Seek', - 'scankeydown','RTInvert','rnd','right$','resizetext','resizespritearea','RejectConnection','ReceiveMessage','ReadWord', - 'ReadText','ReadReal','ReadLine','ReadInt','ReadFloat','ReadDouble','ReadChar','ReadByte','randomize','printr', - 'print','pow','playsound','playmusic','performancecounter','Orthonormalize','OpenFileWrite','OpenFileRead','Normalize', - 'newtilemap','newsprite','NewServer','NewConnection','musicplaying','mouse_yd','mouse_y','mouse_xd','mouse_x', - 'mouse_wheel','mouse_button','mid$','MessageSmoothed','MessageReliable','MessagePending','MessageChannel','maxtextureunits', - 'MatrixZero','MatrixTranslate','MatrixScale','MatrixRotateZ','MatrixRotateY','MatrixRotateX','MatrixRotate','MatrixIdentity', - 'MatrixCrossProduct','MatrixBasis','log','locate','loadtexture','loadsound','loadmipmaptexture','loadmipmapimagestrip', - 'loadimagestrip','loadimage','Length','len','left$','lcase$','keydown','Joy_Y','Joy_X','Joy_Up','Joy_Right','Joy_Left', - 'Joy_Keys','Joy_Down','Joy_Button','Joy_3','Joy_2','Joy_1','Joy_0','int','inscankey','input$','inkey$','inittimer', - 'imagewidth','imagestripframes','imageheight','imageformat','imagedatatype','hidecursor','glViewport','glVertex4sv', - 'glVertex4s','glVertex4iv','glVertex4i','glVertex4fv','glVertex4f','glVertex4dv','glVertex4d','glVertex3sv','glVertex3s', - 'glVertex3iv','glVertex3i','glVertex3fv','glVertex3f','glVertex3dv','glVertex3d','glVertex2sv','glVertex2s','glVertex2iv', - 'glVertex2i','glVertex2fv','glVertex2f','glVertex2dv','glVertex2d','gluPerspective','gluOrtho2D','gluLookAt', - 'glubuild2dmipmaps','glTranslatef','glTranslated','gltexsubimage2d','glTexParameteriv','glTexParameteri', - 'glTexParameterfv','glTexParameterf','glteximage2d','glTexGeniv','glTexGeni','glTexGenfv','glTexGenf','glTexGendv', - 'glTexGend','glTexEnviv','glTexEnvi','glTexEnvfv','glTexEnvf','glTexCoord4sv','glTexCoord4s','glTexCoord4iv','glTexCoord4i', - 'glTexCoord4fv','glTexCoord4f','glTexCoord4dv','glTexCoord4d','glTexCoord3sv','glTexCoord3s','glTexCoord3iv','glTexCoord3i', - 'glTexCoord3fv','glTexCoord3f','glTexCoord3dv','glTexCoord3d','glTexCoord2sv','glTexCoord2s','glTexCoord2iv','glTexCoord2i', - 'glTexCoord2fv','glTexCoord2f','glTexCoord2dv','glTexCoord2d','glTexCoord1sv','glTexCoord1s','glTexCoord1iv','glTexCoord1i','glTexCoord1fv', - 'glTexCoord1f','glTexCoord1dv','glTexCoord1d','glStencilOp','glStencilMask','glStencilFunc','glShadeModel','glSelectBuffer', - 'glScissor','glScalef','glScaled','glRotatef','glRotated','glRenderMode','glRectsv','glRects','glRectiv','glRecti', - 'glRectfv','glRectf','glRectdv','glRectd','glReadBuffer','glRasterPos4sv','glRasterPos4s','glRasterPos4iv', - 'glRasterPos4i','glRasterPos4fv','glRasterPos4f','glRasterPos4dv','glRasterPos4d','glRasterPos3sv','glRasterPos3s', - 'glRasterPos3iv','glRasterPos3i','glRasterPos3fv','glRasterPos3f','glRasterPos3dv','glRasterPos3d','glRasterPos2sv', - 'glRasterPos2s','glRasterPos2iv','glRasterPos2i','glRasterPos2fv','glRasterPos2f','glRasterPos2dv','glRasterPos2d', - 'glPushName','glPushMatrix','glPushClientAttrib','glPushAttrib','glPrioritizeTextures','glPopName','glPopMatrix', - 'glPopClientAttrib','glPopAttrib','glpolygonstipple','glPolygonOffset','glPolygonMode','glPointSize','glPixelZoom', - 'glPixelTransferi','glPixelTransferf','glPixelStorei','glPixelStoref','glPassThrough','glOrtho','glNormal3sv','glNormal3s', - 'glNormal3iv','glNormal3i','glNormal3fv','glNormal3f','glNormal3dv','glNormal3d','glNormal3bv','glNormal3b','glNewList', - 'glMultMatrixf','glMultMatrixd','glmultitexcoord2f','glmultitexcoord2d','glMatrixMode','glMaterialiv','glMateriali', - 'glMaterialfv','glMaterialf','glMapGrid2f','glMapGrid2d','glMapGrid1f','glMapGrid1d','glLogicOp','glLoadName','glLoadMatrixf', - 'glLoadMatrixd','glLoadIdentity','glListBase','glLineWidth','glLineStipple','glLightModeliv','glLightModeli','glLightModelfv', - 'glLightModelf','glLightiv','glLighti','glLightfv','glLightf','glIsTexture','glIsList','glIsEnabled','glInitNames', - 'glIndexubv','glIndexub','glIndexsv','glIndexs','glIndexMask','glIndexiv','glIndexi','glIndexfv','glIndexf','glIndexdv', - 'glIndexd','glHint','glGetTexParameteriv','glGetTexParameterfv','glGetTexLevelParameteriv','glGetTexLevelParameterfv', - 'glGetTexGeniv','glGetTexGenfv','glGetTexGendv','glGetTexEnviv','glGetTexEnvfv','glgetstring','glgetpolygonstipple','glGetPixelMapuiv', - 'glGetMaterialiv','glGetMaterialfv','glGetLightiv','glGetLightfv','glGetIntegerv','glGetFloatv', - 'glGetError','glGetDoublev','glGetClipPlane','glGetBooleanv','glgentextures','glgentexture', - 'glgenlists','glFrustum','glFrontFace','glFogiv','glFogi','glFogfv','glFogf','glFlush','glFinish','glFeedbackBuffer', - 'glEvalPoint2','glEvalPoint1','glEvalMesh2','glEvalMesh1','glEvalCoord2fv','glEvalCoord2f','glEvalCoord2dv','glEvalCoord2d', - 'glEvalCoord1fv','glEvalCoord1f','glEvalCoord1dv','glEvalCoord1d','glEndList','glEnd','glEnableClientState','glEnable', - 'glEdgeFlagv','glEdgeFlag','glDrawBuffer','glDrawArrays','glDisableClientState','glDisable','glDepthRange','glDepthMask', - 'glDepthFunc','gldeletetextures','gldeletetexture','gldeletelists','glCullFace','glCopyTexSubImage2D','glCopyTexSubImage1D', - 'glCopyTexImage2D','glCopyTexImage1D','glColorMaterial','glColorMask','glColor4usv','glColor4us','glColor4uiv','glColor4ui', - 'glColor4ubv','glColor4ub','glColor4sv','glColor4s','glColor4iv','glColor4i','glColor4fv','glColor4f','glColor4dv', - 'glColor4d','glColor4bv','glColor4b','glColor3usv','glColor3us','glColor3uiv','glColor3ui','glColor3ubv','glColor3ub', - 'glColor3sv','glColor3s','glColor3iv','glColor3i','glColor3fv','glColor3f','glColor3dv','glColor3d','glColor3bv', - 'glColor3b','glClipPlane','glClearStencil','glClearIndex','glClearDepth','glClearColor','glClearAccum','glClear', - 'glcalllists','glCallList','glBlendFunc','glBindTexture','glBegin','glArrayElement','glAreTexturesResident', - 'glAlphaFunc','glactivetexture','glAccum','font','FindNextFile','FindFirstFile','FindClose','FileError', - 'extensionsupported','exp','execute','EndOfFile','drawtext','divbyzero','Determinant','deletesprite','deletesound', - 'DeleteServer','deleteimage','DeleteConnection','defaultfont','CrossProduct','cosd','cos','copysprite','ConnectionPending', - 'ConnectionHandShaking','ConnectionConnected','ConnectionAddress','compilererrorline','compilererrorcol','compilererror', - 'compilefile','compile','color','cls','CloseFile','clearregion','clearline','clearkeys','chr$','charat$','bindsprite', - 'beep','atnd','atn2d','atn2','atn','atand','asc','argcount','arg','animatesprites','AcceptConnection','abs' - ), - 3 => array( - - // Blue Lowercase Keywords - - 'xor','while','wend','until','type','traditional_print','traditional','to','then','struc','string','step','single', - 'run','return','reset','read','or','null','not','next','lor','loop','language','land','integer','input','if', - 'goto','gosub','for','endstruc','endif','end','elseif','else','double','do','dim','data','const','basic4gl','as', - 'and','alloc' - ) - - ), - 'SYMBOLS' => array( - '=', '<', '>', '>=', '<=', '+', '-', '*', '/', '%', '(', ')', '{', '}', '[', ']', '&', ';', ':', '$' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - 3 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #000080; font-weight: bold;', - 2 => 'color: #FF0000;', - 3 => 'color: #0000FF;' - ), - 'COMMENTS' => array( - 1 => 'color: #657CC4; font-style: italic;' - ), - 'BRACKETS' => array( - 0 => 'color: #000080;' - ), - 'STRINGS' => array( - 0 => 'color: #008000;' - ), - 'NUMBERS' => array( - 0 => 'color: #000080; font-weight: bold;' - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #0000FF;' - ), - 'ESCAPE_CHAR' => array( - ), - 'SCRIPT' => array( - ), - 'REGEXPS' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '' - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php deleted file mode 100644 index 023c059a..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php +++ /dev/null @@ -1,113 +0,0 @@ - 'Brainfuck', - 'COMMENT_SINGLE' => array(), - 'COMMENT_MULTI' => array(), - 'COMMENT_REGEXP' => array(1 => '/[^\n+\-<>\[\]\.\,Y]+/s'), - 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, - 'QUOTEMARKS' => array(), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - ), - 'SYMBOLS' => array( - 0 => array('+', '-'), - 1 => array('[', ']'), - 2 => array('<', '>'), - 3 => array('.', ','), - 4 => array('Y') //Brainfork Extension ;-) - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - ), - 'COMMENTS' => array( - 1 => 'color: #666666; font-style: italic;' - ), - 'BRACKETS' => array( - 0 => 'color: #660000;' - ), - 'STRINGS' => array( - 0 => 'color: #ff0000;' - ), - 'NUMBERS' => array( - ), - 'METHODS' => array( - ), - 'SYMBOLS' => array( - 0 => 'color: #006600;', - 1 => 'color: #660000;', - 2 => 'color: #000066;', - 3 => 'color: #666600;', - 4 => 'color: #660066;' - ), - 'ESCAPE_CHAR' => array( - ), - 'SCRIPT' => array( - ), - 'REGEXPS' => array( - ) - ), - 'URLS' => array( - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4, - 'PARSER_CONTROL' => array( - 'ENABLE_FLAGS' => array( - 'STRINGS' => GESHI_NEVER, - 'NUMBERS' => GESHI_NEVER, - 'BRACKETS' => GESHI_NEVER - ), - 'KEYWORDS' => array( - 'DISALLOW_BEFORE' => '', - 'DISALLOW_AFTER' => '' - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php deleted file mode 100644 index 5afecbfa..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php +++ /dev/null @@ -1,181 +0,0 @@ - 'BibTeX', - 'OOLANG' => false, - 'COMMENT_SINGLE' => array( - 1 => '%%' - ), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array(), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 0 => array( - '@comment','@preamble','@string' - ), - // Standard entry types - 1 => array( - '@article','@book','@booklet','@conference','@inbook', - '@incollection','@inproceedings','@manual','@mastersthesis', - '@misc','@phdthesis','@proceedings','@techreport','@unpublished' - ), - // Custom entry types - 2 => array( - '@collection','@patent','@webpage' - ), - // Standard entry field names - 3 => array( - 'address','annote','author','booktitle','chapter','crossref', - 'edition','editor','howpublished','institution','journal','key', - 'month','note','number','organization','pages','publisher','school', - 'series','title','type','volume','year' - ), - // Custom entry field names - 4 => array( - 'abstract','affiliation','chaptername','cited-by','cites', - 'contents','copyright','date-added','date-modified','doi','eprint', - 'isbn','issn','keywords','language','lccn','lib-congress', - 'location','price','rating','read','size','source','url' - ) - ), - 'URLS' => array( - 0 => '', - 1 => '', - 2 => '', - 3 => '', - 4 => '' - ), - 'SYMBOLS' => array( - '{', '}', '#', '=', ',' - ), - 'CASE_SENSITIVE' => array( - 1 => false, - 2 => false, - 3 => false, - 4 => false, - GESHI_COMMENTS => false, - ), - // Define the colors for the groups listed above - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #C02020;', // Standard entry types - 2 => 'color: #C02020;', // Custom entry types - 3 => 'color: #C08020;', // Standard entry field names - 4 => 'color: #C08020;' // Custom entry field names - ), - 'COMMENTS' => array( - 1 => 'color: #2C922C; font-style: italic;' - ), - 'STRINGS' => array( - 0 => 'color: #2020C0;' - ), - 'SYMBOLS' => array( - 0 => 'color: #E02020;' - ), - 'REGEXPS' => array( - 1 => 'color: #2020C0;', // {...} - 2 => 'color: #C08020;', // BibDesk fields - 3 => 'color: #800000;' // LaTeX commands - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000000; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #E02020;' - ), - 'NUMBERS' => array( - ), - 'METHODS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'REGEXPS' => array( - // {parameters} - 1 => array( - GESHI_SEARCH => "(?<=\\{)(?:\\{(?R)\\}|[^\\{\\}])*(?=\\})", - GESHI_REPLACE => '\0', - GESHI_MODIFIERS => 's', - GESHI_BEFORE => '', - GESHI_AFTER => '' - ), - 2 => array( - GESHI_SEARCH => "\bBdsk-(File|Url)-\d+", - GESHI_REPLACE => '\0', - GESHI_MODIFIERS => 'Us', - GESHI_BEFORE => '', - GESHI_AFTER => '' - ), - 3 => array( - GESHI_SEARCH => "\\\\[A-Za-z0-9]*+", - GESHI_REPLACE => '\0', - GESHI_MODIFIERS => 'Us', - GESHI_BEFORE => '', - GESHI_AFTER => '' - ), - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'OBJECT_SPLITTERS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'PARSER_CONTROL' => array( - 'ENABLE_FLAGS' => array( - 'NUMBERS' => GESHI_NEVER - ), - 'KEYWORDS' => array( - 3 => array( - 'DISALLOWED_AFTER' => '(?=\s*=)' - ), - 4 => array( - 'DISALLOWED_AFTER' => '(?=\s*=)' - ), - ) - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php deleted file mode 100644 index 8ea60632..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php +++ /dev/null @@ -1,183 +0,0 @@ - 'BlitzBasic', - 'COMMENT_SINGLE' => array(1 => ';'), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"'), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array( - 1 => array( - 'If','EndIf','ElseIf','Else','While','Wend','Return','Next','Include','End Type','End Select','End If','End Function','End','Select', - 'Type','Forever','For','Or','And','AppTitle','Case','Goto','Gosub','Step','Stop','Int','Last','False','Then','To','True','Until','Float', - 'String','Before','Not' - ), - 2 => array( - // All Functions - 2D BB and 3D BB - 'Xor','WriteString','WriteShort','WritePixelFast','WritePixel','WriteLine','WriteInt','WriteFloat','WriteFile','WriteBytes', - 'WriteByte','Write','WaitTimer','WaitMouse','WaitKey','WaitJoy','VWait','Viewport', - 'Upper','UpdateGamma','UnlockBuffer','UDPTimeouts','UDPStreamPort','UDPStreamIP','UDPMsgPort','UDPMsgIP', - 'Trim','TotalVidMem','TileImage','TileBlock','TFormImage','TFormFilter','Text', - 'TCPTimeouts','TCPStreamPort','TCPStreamIP','Tan','SystemProperty','StringWidth','StringHeight','Str','StopNetGame', - 'StopChannel','StartNetGame','Sqr','SoundVolume','SoundPitch','SoundPan','Sin','Shr', - 'ShowPointer','Shl','Sgn','SetGfxDriver','SetGamma','SetFont','SetEnv','SetBuffer','SendUDPMsg','SendNetMsg', - 'SeekFile','SeedRnd','ScanLine','ScaleImage','SaveImage','SaveBuffer','Sar','RuntimeError','RSet', - 'RotateImage','RndSeed','Rnd','Right','ResumeChannel','Restore','ResizeImage','ResizeBank','Replace', - 'Repeat','RecvUDPMsg','RecvNetMsg','RectsOverlap','Rect','ReadString','ReadShort','ReadPixelFast','ReadPixel','ReadLine', - 'ReadInt','ReadFloat','ReadFile','ReadDir','ReadBytes','ReadByte','ReadAvail','Read','Rand','Print', - 'PokeShort','PokeInt','PokeFloat','PokeByte','Plot','PlaySound','PlayMusic','PlayCDTrack','Pi','PeekShort', - 'PeekInt','PeekFloat','PeekByte','PauseChannel','Oval','Origin','OpenTCPStream','OpenMovie','OpenFile', - 'Null','NextFile','New','NetPlayerName','NetPlayerLocal','NetMsgType','NetMsgTo','NetMsgFrom', - 'NetMsgData','MovieWidth','MoviePlaying','MovieHeight','MoveMouse','MouseZSpeed','MouseZ','MouseYSpeed','MouseY','MouseXSpeed', - 'MouseX','MouseHit','MouseDown','Mod','Millisecs','MidHandle','Mid','MaskImage','LSet','Lower', - 'LoopSound','Log10','Log','LockBuffer','Locate','Local','LoadSound','LoadImage','LoadFont','LoadBuffer', - 'LoadAnimImage','Line','Len','Left','KeyHit','KeyDown','JoyZDir','JoyZ','JoyYDir', - 'JoyYaw','JoyY','JoyXDir','JoyX','JoyVDir','JoyV','JoyUDir','JoyU','JoyType','JoyRoll', - 'JoyPitch','JoyHit','JoyHat','JoyDown','JoinNetGame','Instr','Insert','Input', - 'ImageYHandle','ImageXHandle','ImageWidth','ImagesOverlap','ImagesCollide','ImageRectOverlap','ImageRectCollide','ImageHeight','ImageBuffer', - 'HostNetGame','HostIP','HidePointer','Hex','HandleImage','GraphicsWidth','GraphicsHeight','GraphicsDepth','GraphicsBuffer','Graphics', - 'GrabImage','Global','GFXModeWidth','GFXModeHeight','GfxModeExists','GFXModeDepth','GfxDriverName','GetMouse', - 'GetKey','GetJoy','GetEnv','GetColor','GammaRed','GammaGreen','GammaBlue','Function','FrontBuffer','FreeTimer', - 'FreeSound','FreeImage','FreeFont','FreeBank','FontWidth','FontHeight','FlushMouse','FlushKeys', - 'FlushJoy','Floor','Flip','First','FileType','FileSize','FilePos','Field', - 'Exp','Exit','ExecFile','Eof','EndGraphics','Each','DrawMovie','DrawImageRect','DrawImage','DrawBlockRect','DrawBlock', - 'DottedIP','Dim','DeleteNetPlayer','DeleteFile','DeleteDir','Delete','Delay','Default','DebugLog','Data', - 'CurrentTime','CurrentDir','CurrentDate','CreateUDPStream','CreateTimer','CreateTCPServer','CreateNetPlayer','CreateImage','CreateDir','CreateBank', - 'CountHostIPs','CountGFXModes','CountGfxDrivers','Cos','CopyStream','CopyRect','CopyPixelFast','CopyPixel','CopyImage','CopyFile', - 'CopyBank','Const','CommandLine','ColorRed','ColorGreen','ColorBlue','Color','ClsColor','Cls','CloseUDPStream', - 'CloseTCPStream','CloseTCPServer','CloseMovie','CloseFile','CloseDir','Chr','ChannelVolume','ChannelPlaying','ChannelPitch','ChannelPan', - 'ChangeDir','Ceil','CallDLL','Bin','BankSize','BackBuffer','AvailVidMem','AutoMidHandle', - 'ATan2','ATan','ASin','Asc','After','ACos','AcceptTCPStream','Abs', - // 3D Commands - 'Wireframe','Windowed3D','WBuffer','VertexZ','VertexY', - 'VertexX','VertexW','VertexV','VertexU','VertexTexCoords','VertexRed','VertexNZ','VertexNY','VertexNX','VertexNormal', - 'VertexGreen','VertexCoords','VertexColor','VertexBlue','VertexAlpha','VectorYaw','VectorPitch','UpdateWorld','UpdateNormals','TurnEntity', - 'TrisRendered','TriangleVertex','TranslateEntity','TFormVector','TFormPoint','TFormNormal','TFormedZ','TFormedY','TFormedX','TextureWidth', - 'TextureName','TextureHeight','TextureFilter','TextureCoords','TextureBuffer','TextureBlend','TerrainZ','TerrainY','TerrainX','TerrainSize', - 'TerrainShading','TerrainHeight','TerrainDetail','SpriteViewMode','ShowEntity','SetCubeFace','SetAnimTime','SetAnimKey','ScaleTexture','ScaleSprite', - 'ScaleMesh','ScaleEntity','RotateTexture','RotateSprite','RotateMesh','RotateEntity','ResetEntity','RenderWorld','ProjectedZ','ProjectedY', - 'ProjectedX','PositionTexture','PositionMesh','PositionEntity','PointEntity','PickedZ','PickedY','PickedX','PickedTriangle','PickedTime', - 'PickedSurface','PickedNZ','PickedNY','PickedNX','PickedEntity','PaintSurface','PaintMesh','PaintEntity','NameEntity','MoveEntity', - 'ModifyTerrain','MeshWidth','MeshHeight','MeshesIntersect','MeshDepth','MD2AnimTime','MD2AnimLength','MD2Animating','LoadTexture','LoadTerrain', - 'LoadSprite','LoadMesh','LoadMD2','LoaderMatrix','LoadBSP','LoadBrush','LoadAnimTexture','LoadAnimSeq','LoadAnimMesh','Load3DSound', - 'LinePick','LightRange','LightMesh','LightConeAngles','LightColor','HWMultiTex','HideEntity','HandleSprite','Graphics3D','GfxMode3DExists', - 'GfxMode3D','GfxDriverCaps3D','GfxDriver3D','GetSurfaceBrush','GetSurface','GetParent','GetMatElement','GetEntityType','GetEntityBrush','GetChild', - 'GetBrushTexture','FreeTexture','FreeEntity','FreeBrush','FlipMesh','FitMesh','FindSurface','FindChild','ExtractAnimSeq','EntityZ', - 'EntityYaw','EntityY','EntityX','EntityVisible','EntityType','EntityTexture','EntityShininess','EntityRoll','EntityRadius','EntityPitch', - 'EntityPickMode','EntityPick','EntityParent','EntityOrder','EntityName','EntityInView','EntityFX','EntityDistance','EntityColor','EntityCollided', - 'EntityBox','EntityBlend','EntityAutoFade','EntityAlpha','EmitSound','Dither','DeltaYaw','DeltaPitch','CreateTexture','CreateTerrain', - 'CreateSurface','CreateSprite','CreateSphere','CreatePlane','CreatePivot','CreateMirror','CreateMesh','CreateListener','CreateLight','CreateCylinder', - 'CreateCube','CreateCone','CreateCamera','CreateBrush','CountVertices','CountTriangles','CountSurfaces','CountGfxModes3D','CountCollisions','CountChildren', - 'CopyMesh','CopyEntity','CollisionZ','CollisionY','CollisionX','CollisionTriangle','CollisionTime','CollisionSurface','Collisions','CollisionNZ', - 'CollisionNY','CollisionNX','CollisionEntity','ClearWorld','ClearTextureFilters','ClearSurface','ClearCollisions','CaptureWorld','CameraZoom','CameraViewport', - 'CameraRange','CameraProjMode','CameraProject','CameraPick','CameraFogRange','CameraFogMode','CameraFogColor','CameraClsMode','CameraClsColor','BSPLighting', - 'BSPAmbientLight','BrushTexture','BrushShininess','BrushFX','BrushColor','BrushBlend','BrushAlpha','AntiAlias','AnimTime','AnimSeq', - 'AnimLength','Animating','AnimateMD2','Animate','AmbientLight','AlignToVector','AddVertex','AddTriangle','AddMesh','AddAnimSeq', - ) - ), - 'SYMBOLS' => array( - '(',')' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => false, - 2 => false, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #000066; font-weight: bold;', - 2 => 'color: #0000ff;' - ), - 'COMMENTS' => array( - 1 => 'color: #D9D100; font-style: italic;', - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;' - ), - 'BRACKETS' => array( - 0 => 'color: #000066;' - ), - 'STRINGS' => array( - 0 => 'color: #009900;' - ), - 'NUMBERS' => array( - 0 => 'color: #CC0000;' - ), - 'METHODS' => array( - 1 => 'color: #006600;' - ), - 'SYMBOLS' => array( - 0 => 'color: #000066;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - 0 => '', - 1 => '', - ) - ), - 'URLS' => array( - 1 => '', - 2 => '' - ), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - 1 => '\\' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array(), - 'HIGHLIGHT_STRICT_BLOCK' => array( - 0 => false, - 1 => false - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php deleted file mode 100644 index 0fe98d11..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php +++ /dev/null @@ -1,117 +0,0 @@ - 'bnf', - 'COMMENT_SINGLE' => array(';'), - 'COMMENT_MULTI' => array(), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array('"', "'"), - 'ESCAPE_CHAR' => '', - 'KEYWORDS' => array(), - 'SYMBOLS' => array( - 0 => array('(', ')'), - 1 => array('<', '>'), - 2 => array('[', ']'), - 3 => array('{', '}'), - 4 => array('=', '*', '/', '|', ':'), - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false - ), - 'STYLES' => array( - 'KEYWORDS' => array(), - 'COMMENTS' => array( - 0 => 'color: #666666; font-style: italic;', // Single Line comments - ), - 'ESCAPE_CHAR' => array( - 0 => '' - ), - 'BRACKETS' => array( - 0 => '' - ), - 'STRINGS' => array( - 0 => 'color: #a00;', - 1 => 'color: #a00;' - ), - 'NUMBERS' => array( - 0 => '' - ), - 'METHODS' => array( - 0 => '' - ), - 'SYMBOLS' => array( - 0 => 'color: #000066; font-weight: bold;', // Round brackets - 1 => 'color: #000066; font-weight: bold;', // Angel Brackets - 2 => 'color: #000066; font-weight: bold;', // Square Brackets - 3 => 'color: #000066; font-weight: bold;', // BRaces - 4 => 'color: #006600; font-weight: bold;', // Other operator symbols - ), - 'REGEXPS' => array( - 0 => 'color: #007;', - ), - 'SCRIPT' => array( - 0 => '' - ) - ), - 'URLS' => array(), - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array(), - 'REGEXPS' => array( - //terminal symbols - 0 => array( - GESHI_SEARCH => '(<)([^&]+?)(>)', - GESHI_REPLACE => '\\2', - GESHI_MODIFIERS => '', - GESHI_BEFORE => '\\1', - GESHI_AFTER => '\\3' - ), - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ) -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php deleted file mode 100644 index 862881a5..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php +++ /dev/null @@ -1,215 +0,0 @@ - 'Boo', - 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'''", "'", '"""', '"'), - 'HARDQUOTE' => array('"""', '"""'), - 'HARDESCAPE' => array('\"""'), - 'ESCAPE_CHAR' => '\\', - 'KEYWORDS' => array( - 1 => array(//Namespace - 'namespace', 'import', 'from' - ), - 2 => array(//Jump - 'yield', 'return', 'goto', 'continue', 'break' - ), - 3 => array(//Conditional - 'while', 'unless', 'then', 'in', 'if', 'for', 'else', 'elif' - ), - 4 => array(//Property - 'set', 'get' - ), - 5 => array(//Exception - 'try', 'raise', 'failure', 'except', 'ensure' - ), - 6 => array(//Visibility - 'public', 'private', 'protected', 'internal' - ), - 7 => array(//Define - 'struct', 'ref', 'of', 'interface', 'event', 'enum', 'do', 'destructor', 'def', 'constructor', 'class' - ), - 8 => array(//Cast - 'typeof', 'cast', 'as' - ), - 9 => array(//BiMacro - 'yieldAll', 'using', 'unchecked', 'rawArayIndexing', 'print', 'normalArrayIndexing', 'lock', - 'debug', 'checked', 'assert' - ), - 10 => array(//BiAttr - 'required', 'property', 'meta', 'getter', 'default' - ), - 11 => array(//BiFunc - 'zip', 'shellp', 'shellm', 'shell', 'reversed', 'range', 'prompt', - 'matrix', 'map', 'len', 'join', 'iterator', 'gets', 'enumerate', 'cat', 'array' - ), - 12 => array(//HiFunc - '__switch__', '__initobj__', '__eval__', '__addressof__', 'quack' - ), - 13 => array(//Primitive - 'void', 'ushort', 'ulong', 'uint', 'true', 'timespan', 'string', 'single', - 'short', 'sbyte', 'regex', 'object', 'null', 'long', 'int', 'false', 'duck', - 'double', 'decimal', 'date', 'char', 'callable', 'byte', 'bool' - ), - 14 => array(//Operator - 'not', 'or', 'and', 'is', 'isa', - ), - 15 => array(//Modifier - 'virtual', 'transient', 'static', 'partial', 'override', 'final', 'abstract' - ), - 16 => array(//Access - 'super', 'self' - ), - 17 => array(//Pass - 'pass' - ) - ), - 'SYMBOLS' => array( - '[|', '|]', '${', '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>', '+', '-', ';' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, - 2 => true, - 3 => true, - 4 => true, - 5 => true, - 6 => true, - 7 => true, - 8 => true, - 9 => true, - 10 => true, - 11 => true, - 12 => true, - 13 => true, - 14 => true, - 15 => true, - 16 => true, - 17 => true - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color:green;font-weight:bold;', - 2 => 'color:navy;', - 3 => 'color:blue;font-weight:bold;', - 4 => 'color:#8B4513;', - 5 => 'color:teal;font-weight:bold;', - 6 => 'color:blue;font-weight:bold;', - 7 => 'color:blue;font-weight:bold;', - 8 => 'color:blue;font-weight:bold;', - 9 => 'color:maroon;', - 10 => 'color:maroon;', - 11 => 'color:purple;', - 12 => 'color:#4B0082;', - 13 => 'color:purple;font-weight:bold;', - 14 => 'color:#008B8B;font-weight:bold;', - 15 => 'color:brown;', - 16 => 'color:black;font-weight:bold;', - 17 => 'color:gray;' - ), - 'COMMENTS' => array( - 1 => 'color: #999999; font-style: italic;', - 2 => 'color: #999999; font-style: italic;', - 'MULTI' => 'color: #008000; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #0000FF; font-weight: bold;', - 'HARD' => 'color: #0000FF; font-weight: bold;', - ), - 'BRACKETS' => array( - 0 => 'color: #006400;' - ), - 'STRINGS' => array( - 0 => 'color: #008000;', - 'HARD' => 'color: #008000;' - ), - 'NUMBERS' => array( - 0 => 'color: #00008B;' - ), - 'METHODS' => array( - 0 => 'color: 000000;', - 1 => 'color: 000000;' - ), - 'SYMBOLS' => array( - 0 => 'color: #006400;' - ), - 'REGEXPS' => array( - #0 => 'color: #0066ff;' - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - 8 => '', - 9 => '', - 10 => '', - 11 => '', - 12 => '', - 13 => '', - 14 => '', - 15 => '', - 16 => '', - 17 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 0 => '.', - 1 => '::' - ), - 'REGEXPS' => array( - #0 => '%(@)?\/(?:(?(1)[^\/\\\\\r\n]+|[^\/\\\\\r\n \t]+)|\\\\[\/\\\\\w+()|.*?$^[\]{}\d])+\/%' - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php deleted file mode 100644 index 9dbe6104..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php +++ /dev/null @@ -1,279 +0,0 @@ - 'C', - 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'COMMENT_REGEXP' => array( - //Multiline-continued single-line comments - 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m', - //Multiline-continued preprocessor define - 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m' - ), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - 'ESCAPE_REGEXP' => array( - //Simple Single Char Escapes - 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i", - //Hexadecimal Char Specs - 2 => "#\\\\x[\da-fA-F]{2}#", - //Hexadecimal Char Specs - 3 => "#\\\\u[\da-fA-F]{4}#", - //Hexadecimal Char Specs - 4 => "#\\\\U[\da-fA-F]{8}#", - //Octal Char Specs - 5 => "#\\\\[0-7]{1,3}#" - ), - 'NUMBERS' => - GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B | - GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI | - GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO, - 'KEYWORDS' => array( - 1 => array( - 'if', 'return', 'while', 'case', 'continue', 'default', - 'do', 'else', 'for', 'switch', 'goto' - ), - 2 => array( - 'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline' - ), - 3 => array( - // assert.h - 'assert', - - //complex.h - 'cabs', 'cacos', 'cacosh', 'carg', 'casin', 'casinh', 'catan', - 'catanh', 'ccos', 'ccosh', 'cexp', 'cimag', 'cis', 'clog', 'conj', - 'cpow', 'cproj', 'creal', 'csin', 'csinh', 'csqrt', 'ctan', 'ctanh', - - //ctype.h - 'digittoint', 'isalnum', 'isalpha', 'isascii', 'isblank', 'iscntrl', - 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace', - 'isupper', 'isxdigit', 'toascii', 'tolower', 'toupper', - - //inttypes.h - 'imaxabs', 'imaxdiv', 'strtoimax', 'strtoumax', 'wcstoimax', - 'wcstoumax', - - //locale.h - 'localeconv', 'setlocale', - - //math.h - 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'exp', - 'fabs', 'floor', 'frexp', 'ldexp', 'log', 'log10', 'modf', 'pow', - 'sin', 'sinh', 'sqrt', 'tan', 'tanh', - - //setjmp.h - 'longjmp', 'setjmp', - - //signal.h - 'raise', - - //stdarg.h - 'va_arg', 'va_copy', 'va_end', 'va_start', - - //stddef.h - 'offsetof', - - //stdio.h - 'clearerr', 'fclose', 'fdopen', 'feof', 'ferror', 'fflush', 'fgetc', - 'fgetpos', 'fgets', 'fopen', 'fprintf', 'fputc', 'fputchar', - 'fputs', 'fread', 'freopen', 'fscanf', 'fseek', 'fsetpos', 'ftell', - 'fwrite', 'getc', 'getch', 'getchar', 'gets', 'perror', 'printf', - 'putc', 'putchar', 'puts', 'remove', 'rename', 'rewind', 'scanf', - 'setbuf', 'setvbuf', 'snprintf', 'sprintf', 'sscanf', 'tmpfile', - 'tmpnam', 'ungetc', 'vfprintf', 'vfscanf', 'vprintf', 'vscanf', - 'vsprintf', 'vsscanf', - - //stdlib.h - 'abort', 'abs', 'atexit', 'atof', 'atoi', 'atol', 'bsearch', - 'calloc', 'div', 'exit', 'free', 'getenv', 'itoa', 'labs', 'ldiv', - 'ltoa', 'malloc', 'qsort', 'rand', 'realloc', 'srand', 'strtod', - 'strtol', 'strtoul', 'system', - - //string.h - 'memchr', 'memcmp', 'memcpy', 'memmove', 'memset', 'strcat', - 'strchr', 'strcmp', 'strcoll', 'strcpy', 'strcspn', 'strerror', - 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', 'strrchr', - 'strspn', 'strstr', 'strtok', 'strxfrm', - - //time.h - 'asctime', 'clock', 'ctime', 'difftime', 'gmtime', 'localtime', - 'mktime', 'strftime', 'time', - - //wchar.h - 'btowc', 'fgetwc', 'fgetws', 'fputwc', 'fputws', 'fwide', - 'fwprintf', 'fwscanf', 'getwc', 'getwchar', 'mbrlen', 'mbrtowc', - 'mbsinit', 'mbsrtowcs', 'putwc', 'putwchar', 'swprintf', 'swscanf', - 'ungetwc', 'vfwprintf', 'vswprintf', 'vwprintf', 'wcrtomb', - 'wcscat', 'wcschr', 'wcscmp', 'wcscoll', 'wcscpy', 'wcscspn', - 'wcsftime', 'wcslen', 'wcsncat', 'wcsncmp', 'wcsncpy', 'wcspbrk', - 'wcsrchr', 'wcsrtombs', 'wcsspn', 'wcsstr', 'wcstod', 'wcstok', - 'wcstol', 'wcstoul', 'wcsxfrm', 'wctob', 'wmemchr', 'wmemcmp', - 'wmemcpy', 'wmemmove', 'wmemset', 'wprintf', 'wscanf', - - //wctype.h - 'iswalnum', 'iswalpha', 'iswcntrl', 'iswctype', 'iswdigit', - 'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', - 'iswupper', 'iswxdigit', 'towctrans', 'towlower', 'towupper', - 'wctrans', 'wctype' - ), - 4 => array( - 'auto', 'char', 'const', 'double', 'float', 'int', 'long', - 'register', 'short', 'signed', 'sizeof', 'static', 'struct', - 'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t', - - 'int8', 'int16', 'int32', 'int64', - 'uint8', 'uint16', 'uint32', 'uint64', - - 'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t', - 'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t', - - 'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t', - 'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t', - - 'int8_t', 'int16_t', 'int32_t', 'int64_t', - 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t', - - 'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t', - 'size_t', 'off_t' - ), - ), - 'SYMBOLS' => array( - '(', ')', '{', '}', '[', ']', - '+', '-', '*', '/', '%', - '=', '<', '>', - '!', '^', '&', '|', - '?', ':', - ';', ',' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, - 2 => true, - 3 => true, - 4 => true, - ), - 'STYLES' => array( - 'KEYWORDS' => array( - 1 => 'color: #b1b100;', - 2 => 'color: #000000; font-weight: bold;', - 3 => 'color: #000066;', - 4 => 'color: #993333;' - ), - 'COMMENTS' => array( - 1 => 'color: #666666; font-style: italic;', - 2 => 'color: #339933;', - 'MULTI' => 'color: #808080; font-style: italic;' - ), - 'ESCAPE_CHAR' => array( - 0 => 'color: #000099; font-weight: bold;', - 1 => 'color: #000099; font-weight: bold;', - 2 => 'color: #660099; font-weight: bold;', - 3 => 'color: #660099; font-weight: bold;', - 4 => 'color: #660099; font-weight: bold;', - 5 => 'color: #006699; font-weight: bold;', - 'HARD' => '', - ), - 'BRACKETS' => array( - 0 => 'color: #009900;' - ), - 'STRINGS' => array( - 0 => 'color: #ff0000;' - ), - 'NUMBERS' => array( - 0 => 'color: #0000dd;', - GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;', - GESHI_NUMBER_OCT_PREFIX => 'color: #208080;', - GESHI_NUMBER_HEX_PREFIX => 'color: #208080;', - GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;', - GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;', - GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;', - GESHI_NUMBER_FLT_NONSCI => 'color:#800080;' - ), - 'METHODS' => array( - 1 => 'color: #202020;', - 2 => 'color: #202020;' - ), - 'SYMBOLS' => array( - 0 => 'color: #339933;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - 'URLS' => array( - 1 => '', - 2 => '', - 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html', - 4 => '' - ), - 'OOLANG' => true, - 'OBJECT_SPLITTERS' => array( - 1 => '.', - 2 => '::' - ), - 'REGEXPS' => array( - ), - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - 'TAB_WIDTH' => 4 -); diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php deleted file mode 100644 index 12c60df0..00000000 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php +++ /dev/null @@ -1,321 +0,0 @@ - 'C (LoadRunner)', - 'COMMENT_SINGLE' => array(1 => '//'), - 'COMMENT_MULTI' => array('/*' => '*/'), - 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, - 'QUOTEMARKS' => array("'", '"'), - 'ESCAPE_CHAR' => '', - // Escape characters within strings (like \\) are not highlighted differently in LoadRunner, so - // I am using GeSHi escape characters (or regular expressions) to highlight LoadRunner {parameters}. - // LoadRunner {parameters} must begin with a letter and contain only alphanumeric characters and '_' - 'ESCAPE_REGEXP' => array( - 0 => "#\{[a-zA-Z]{1}[a-zA-Z_]{0,}\}#", - ), - - // Keywords - 'KEYWORDS' => array( - // Keywords from http://en.wikipedia.org/wiki/C_syntax - 1 => array( - 'auto', 'break', 'case', 'char', 'const', 'continue', 'default', - 'do', 'double', 'else', 'enum', 'extern', 'float', 'for', 'goto', - 'if', 'inline', 'int', 'long', 'register', 'restrict', 'return', - 'short', 'signed', 'sizeof', 'static', 'struct', 'switch', - 'typedef', 'union', 'unsigned', 'void', 'volatile', 'while', - '_Bool', '_Complex', '_Imaginary' - ), - // C preprocessor directives from http://en.wikipedia.org/wiki/C_preprocessor - 2 => array( - '#define', '#if', '#ifdef', '#ifndef', '#include', '#else', '#elif', '#endif', '#pragma', '#undef' - ), - // Functions from lrun.h - 3 => array( - 'lr_start_transaction', 'lr_start_sub_transaction', 'lr_start_transaction_instance', 'lr_end_transaction', - 'lr_end_sub_transaction', 'lr_end_transaction_instance', 'lr_stop_transaction', 'lr_stop_transaction_instance', - 'lr_resume_transaction', 'lr_resume_transaction_instance', 'lr_wasted_time', 'lr_set_transaction', 'lr_user_data_point', - 'lr_user_data_point_instance', 'lr_user_data_point_ex', 'lr_user_data_point_instance_ex', 'lr_get_transaction_duration', - 'lr_get_trans_instance_duration', 'lr_get_transaction_think_time', 'lr_get_trans_instance_think_time', - 'lr_get_transaction_wasted_time', 'lr_get_trans_instance_wasted_time', 'lr_get_transaction_status', - 'lr_get_trans_instance_status', 'lr_set_transaction_status', 'lr_set_transaction_status_by_name', - 'lr_set_transaction_instance_status', 'lr_start_timer', 'lr_end_timer', 'lr_rendezvous', 'lr_rendezvous_ex', - 'lr_get_vuser_ip', 'lr_whoami', 'lr_get_host_name', 'lr_get_master_host_name', 'lr_get_attrib_long', - 'lr_get_attrib_string', 'lr_get_attrib_double', 'lr_paramarr_idx', 'lr_paramarr_random', 'lr_paramarr_len', - 'lr_param_unique', 'lr_param_sprintf', 'lr_load_dll', 'lr_continue_on_error', 'lr_decrypt', 'lr_abort', 'lr_exit', - 'lr_peek_events', 'lr_think_time', 'lr_debug_message', 'lr_log_message', 'lr_message', 'lr_error_message', - 'lr_output_message', 'lr_vuser_status_message', 'lr_fail_trans_with_error', 'lr_next_row', 'lr_advance_param', - 'lr_eval_string', 'lr_eval_string_ext', 'lr_eval_string_ext_free', 'lr_param_increment', 'lr_save_var', - 'lr_save_string', 'lr_save_int', 'lr_save_datetime', 'lr_save_searched_string', 'lr_set_debug_message', - 'lr_get_debug_message', 'lr_enable_ip_spoofing', 'lr_disable_ip_spoofing', 'lr_convert_string_encoding' - ), - // Constants from lrun.h - 4 => array( - 'DP_FLAGS_NO_LOG', 'DP_FLAGS_STANDARD_LOG', 'DP_FLAGS_EXTENDED_LOG', 'merc_timer_handle_t', 'LR_EXIT_VUSER', - 'LR_EXIT_ACTION_AND_CONTINUE', 'LR_EXIT_ITERATION_AND_CONTINUE', 'LR_EXIT_VUSER_AFTER_ITERATION', - 'LR_EXIT_VUSER_AFTER_ACTION', 'LR_EXIT_MAIN_ITERATION_AND_CONTINUE', 'LR_MSG_CLASS_DISABLE_LOG', - 'LR_MSG_CLASS_STANDARD_LOG', 'LR_MSG_CLASS_RETURNED_DATA', 'LR_MSG_CLASS_PARAMETERS', 'LR_MSG_CLASS_ADVANCED_TRACE', - 'LR_MSG_CLASS_EXTENDED_LOG', 'LR_MSG_CLASS_SENT_DATA', 'LR_MSG_CLASS_JIT_LOG_ON_ERROR', 'LR_SWITCH_OFF', 'LR_SWITCH_ON', - 'LR_SWITCH_DEFAULT', 'ONE_DAY', 'ONE_HOUR', 'ONE_MIN', 'DATE_NOW', 'TIME_NOW', 'LR_MSG_CLASS_BRIEF_LOG', - 'LR_MSG_CLASS_RESULT_DATA', 'LR_MSG_CLASS_FULL_TRACE', 'LR_MSG_CLASS_AUTO_LOG', 'LR_MSG_OFF', 'LR_MSG_ON', - 'LR_MSG_DEFAULT' - ), - // Functions from web_api.h - 5 => array( - 'web_reg_add_cookie', 'web_report_data_point', 'web_text_link', 'web_element', 'web_image_link', 'web_static_image', - 'web_image_submit', 'web_button', 'web_edit_field', 'web_radio_group', 'web_check_box', 'web_list', 'web_text_area', - 'web_map_area', 'web_eval_java_script', 'web_reg_dialog', 'web_reg_cross_step_download', 'web_browser', - 'web_set_rts_key', 'web_save_param_length', 'web_save_timestamp_param', 'web_load_cache', 'web_dump_cache', - 'web_add_cookie_ex' - ), - // Constants from web_api.h - 6 => array( - 'DESCRIPTION', 'ACTION', 'VERIFICATION', 'LR_NOT_FOUND', 'HTTP_INFO_TOTAL_REQUEST_STAT', - 'HTTP_INFO_TOTAL_RESPONSE_STAT', 'LRW_OPT_STOP_VUSER_ON_ERROR', 'LRW_OPT_DISPLAY_IMAGE_BODY' - ), - // Functions from as_web.h - 7 => array( - 'web_add_filter', 'web_add_auto_filter', 'web_add_auto_header', 'web_add_header', 'web_add_cookie', - 'web_cleanup_auto_headers', 'web_cleanup_cookies', 'web_concurrent_end', 'web_concurrent_start', 'web_create_html_param', - 'web_create_html_param_ex', 'web_custom_request', 'web_disable_keep_alive', 'web_enable_keep_alive', 'web_find', - 'web_get_int_property', 'web_image', 'web_image_check', 'web_link', 'web_global_verification', 'web_reg_find', - 'web_reg_save_param', 'web_convert_param', 'web_remove_auto_filter', 'web_remove_auto_header', 'web_revert_auto_header', - 'web_remove_cookie', 'web_save_header', 'web_set_certificate', 'web_set_certificate_ex', 'web_set_connections_limit', - 'web_set_max_html_param_len', 'web_set_max_retries', 'web_set_proxy', 'web_set_proxy_bypass', 'web_set_secure_proxy', - 'web_set_sockets_option', 'web_set_option', 'web_set_timeout', 'web_set_user', 'web_sjis_to_euc_param', - 'web_submit_data', 'web_submit_form', 'web_url', 'web_set_proxy_bypass_local', 'web_cache_cleanup', - 'web_create_html_query', 'web_create_radio_button_param', 'web_switch_net_layer' - ), - // Constants from as_web.h - 8 => array( - 'ENDFORM', 'LAST', 'ENDITEM', 'EXTRARES', 'ITEMDATA', 'STARTHIDDENS', 'ENDHIDDENS', 'CONNECT', 'RECEIVE', 'RESOLVE', - 'STEP', 'REQUEST', 'RESPONSE', 'STARTQUERY', 'ENDQUERY', 'INPROPS', 'OUTPROPS', 'ENDPROPS', 'RAW_BODY_START', - 'RAW_BODY_END', 'HTTP_INFO_RETURN_CODE', 'HTTP_INFO_DOWNLOAD_SIZE', 'HTTP_INFO_DOWNLOAD_TIME', - 'LRW_NET_SOCKET_OPT_LOAD_VERIFY_FILE', 'LRW_NET_SOCKET_OPT_DEFAULT_VERIFY_PATH', 'LRW_NET_SOCKET_OPT_SSL_VERSION', - 'LRW_NET_SOCKET_OPT_SSL_CIPHER_LIST', 'LRW_NET_SOCKET_OPT_SO_REUSE_ADDRESS', 'LRW_NET_SOCKET_OPT_USER_IP_ADDRESS', - 'LRW_NET_SOCKET_OPT_IP_ADDRESS_BY_INDEX', 'LRW_NET_SOCKET_OPT_HELP', 'LRW_NET_SOCKET_OPT_PRINT_USER_IP_ADDRESS_LIST', - 'LRW_OPT_HTML_CHAR_REF_BACKWARD_COMPATIBILITY', 'LRW_OPT_VALUE_YES', 'LRW_OPT_VALUE_NO' - ), - // Functions from as_sapgui.h - 9 => array( - 'sapgui_open_connection', 'sapgui_open_connection_ex', 'sapgui_logon', 'sapgui_create_session', - 'sapgui_create_new_session', 'sapgui_call_method', 'sapgui_call_method_ex', 'sapgui_set_property', - 'sapgui_get_property', 'sapgui_set_collection_property', 'sapgui_active_object_from_parent_method', - 'sapgui_active_object_from_parent_property', 'sapgui_call_method_of_active_object', - 'sapgui_call_method_of_active_object_ex', 'sapgui_set_property_of_active_object', 'sapgui_get_property_of_active_object', - 'sapgui_select_active_connection', 'sapgui_select_active_session', 'sapgui_select_active_window ', - 'sapgui_status_bar_get_text', 'sapgui_status_bar_get_param', 'sapgui_status_bar_get_type', 'sapgui_get_status_bar_text', - 'sapgui_get_active_window_title', 'sapgui_is_object_available', 'sapgui_is_tab_selected', 'sapgui_is_object_changeable', - 'sapgui_set_ok_code', 'sapgui_send_vkey', 'sapgui_resize_window', 'sapgui_window_resize', 'sapgui_window_maximize', - 'sapgui_window_close', 'sapgui_window_restore', 'sapgui_window_scroll_to_row', 'sapgui_press_button', - 'sapgui_select_radio_button', 'sapgui_set_password', 'sapgui_set_text', 'sapgui_select_menu', 'sapgui_select_tab', - 'sapgui_set_checkbox', 'sapgui_set_focus', 'sapgui_select_combobox_entry', 'sapgui_get_ok_code', - 'sapgui_is_radio_button_selected', 'sapgui_get_text', 'sapgui_is_checkbox_selected', 'sapgui_table_set_focus', - 'sapgui_table_press_button', 'sapgui_table_select_radio_button', 'sapgui_table_set_password', 'sapgui_table_set_text', - 'sapgui_table_set_checkbox', 'sapgui_table_select_combobox_entry', 'sapgui_table_set_row_selected', - 'sapgui_table_set_column_selected', 'sapgui_table_set_column_width', 'sapgui_table_reorder', 'sapgui_table_fill_data', - 'sapgui_table_get_text', 'sapgui_table_is_radio_button_selected', 'sapgui_table_is_checkbox_selected', - 'sapgui_table_is_row_selected', 'sapgui_table_is_column_selected', 'sapgui_table_get_column_width', - 'sapgui_grid_clear_selection', 'sapgui_grid_select_all', 'sapgui_grid_selection_changed', - 'sapgui_grid_press_column_header', 'sapgui_grid_select_cell', 'sapgui_grid_select_rows', 'sapgui_grid_select_column', - 'sapgui_grid_deselect_column', 'sapgui_grid_select_columns', 'sapgui_grid_select_cells', 'sapgui_grid_select_cell_row', - 'sapgui_grid_select_cell_column', 'sapgui_grid_set_column_order', 'sapgui_grid_set_column_width', - 'sapgui_grid_scroll_to_row', 'sapgui_grid_double_click', 'sapgui_grid_click', 'sapgui_grid_press_button', - 'sapgui_grid_press_total_row', 'sapgui_grid_set_cell_data', 'sapgui_grid_set_checkbox', - 'sapgui_grid_double_click_current_cell', 'sapgui_grid_click_current_cell', 'sapgui_grid_press_button_current_cell', - 'sapgui_grid_press_total_row_current_cell', 'sapgui_grid_press_F1', 'sapgui_grid_press_F4', 'sapgui_grid_press_ENTER', - 'sapgui_grid_press_toolbar_button', 'sapgui_grid_press_toolbar_context_button', 'sapgui_grid_open_context_menu', - 'sapgui_grid_select_context_menu', 'sapgui_grid_select_toolbar_menu', 'sapgui_grid_fill_data', - 'sapgui_grid_get_current_cell_row', 'sapgui_grid_get_current_cell_column', 'sapgui_grid_get_rows_count', - 'sapgui_grid_get_columns_count', 'sapgui_grid_get_cell_data', 'sapgui_grid_is_checkbox_selected', - 'sapgui_tree_scroll_to_node', 'sapgui_tree_set_hierarchy_header_width', 'sapgui_tree_set_selected_node', - 'sapgui_tree_double_click_node', 'sapgui_tree_press_key', 'sapgui_tree_press_button', 'sapgui_tree_set_checkbox', - 'sapgui_tree_double_click_item', 'sapgui_tree_click_link', 'sapgui_tree_open_default_context_menu', - 'sapgui_tree_open_node_context_menu', 'sapgui_tree_open_header_context_menu', 'sapgui_tree_open_item_context_menu', - 'sapgui_tree_select_context_menu', 'sapgui_tree_select_item', 'sapgui_tree_select_node', 'sapgui_tree_unselect_node', - 'sapgui_tree_unselect_all', 'sapgui_tree_select_column', 'sapgui_tree_unselect_column', 'sapgui_tree_set_column_order', - 'sapgui_tree_collapse_node', 'sapgui_tree_expand_node', 'sapgui_tree_scroll_to_item', 'sapgui_tree_set_column_width', - 'sapgui_tree_press_header', 'sapgui_tree_is_checkbox_selected', 'sapgui_tree_get_node_text', 'sapgui_tree_get_item_text', - 'sapgui_calendar_scroll_to_date', 'sapgui_calendar_focus_date', 'sapgui_calendar_select_interval', - 'sapgui_apogrid_select_all', 'sapgui_apogrid_clear_selection', 'sapgui_apogrid_select_cell', - 'sapgui_apogrid_deselect_cell', 'sapgui_apogrid_select_row', 'sapgui_apogrid_deselect_row', - 'sapgui_apogrid_select_column', 'sapgui_apogrid_deselect_column', 'sapgui_apogrid_scroll_to_row', - 'sapgui_apogrid_scroll_to_column', 'sapgui_apogrid_double_click', 'sapgui_apogrid_set_cell_data', - 'sapgui_apogrid_get_cell_data', 'sapgui_apogrid_is_cell_changeable', 'sapgui_apogrid_get_cell_format', - 'sapgui_apogrid_get_cell_tooltip', 'sapgui_apogrid_press_ENTER', 'sapgui_apogrid_open_cell_context_menu', - 'sapgui_apogrid_select_context_menu_item', 'sapgui_text_edit_scroll_to_line', 'sapgui_text_edit_set_selection_indexes', - 'sapgui_text_edit_set_unprotected_text_part', 'sapgui_text_edit_get_first_visible_line', - 'sapgui_text_edit_get_selection_index_start', 'sapgui_text_edit_get_selection_index_end', - 'sapgui_text_edit_get_number_of_unprotected_text_parts', 'sapgui_text_edit_double_click', - 'sapgui_text_edit_single_file_dropped', 'sapgui_text_edit_multiple_files_dropped', 'sapgui_text_edit_press_F1', - 'sapgui_text_edit_press_F4', 'sapgui_text_edit_open_context_menu', 'sapgui_text_edit_select_context_menu', - 'sapgui_text_edit_modified_status_changed', 'sapgui_htmlviewer_send_event', 'sapgui_htmlviewer_dom_get_property', - 'sapgui_toolbar_press_button', 'sapgui_toolbar_press_context_button', 'sapgui_toolbar_select_menu_item', - 'sapgui_toolbar_select_menu_item_by_text', 'sapgui_toolbar_select_context_menu_item', - 'sapgui_toolbar_select_context_menu_item_by_text' - ), - // Constants from as_sapgui.h - 10 => array( - 'BEGIN_OPTIONAL', 'END_OPTIONAL', 'al-keys', 'ENTER', 'HELP', 'F2', 'BACK', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', - 'F10', 'F11', 'ESC', 'SHIFT_F1', 'SHIFT_F2', 'SHIFT_F3', 'SHIFT_F4', 'SHIFT_F5', 'SHIFT_F6', 'SHIFT_F7', 'SHIFT_F8', - 'SHIFT_F9', 'SHIFT_F10', 'SHIFT_F11', 'SHIFT_F12', 'CTRL_F1', 'CTRL_F2', 'CTRL_F3', 'CTRL_F4', 'CTRL_F5', 'CTRL_F6', - 'CTRL_F7', 'CTRL_F8', 'CTRL_F9', 'CTRL_F10', 'CTRL_F11', 'CTRL_F12', 'CTRL_SHIFT_F1', 'CTRL_SHIFT_F2', 'CTRL_SHIFT_F3', - 'CTRL_SHIFT_F4', 'CTRL_SHIFT_F5', 'CTRL_SHIFT_F6', 'CTRL_SHIFT_F7', 'CTRL_SHIFT_F8', 'CTRL_SHIFT_F9', 'CTRL_SHIFT_F10', - 'CTRL_SHIFT_F11', 'CTRL_SHIFT_F12', 'CANCEL', 'CTRL_F', 'CTRL_PAGE_UP', 'PAGE_UP', 'PAGE_DOWN', 'CTRL_PAGE_DOWN', - 'CTRL_G', 'CTRL_P' - ), - ), - - // Symbols and Case Sensitivity - // Symbols from: http://en.wikipedia.org/wiki/C_syntax - 'SYMBOLS' => array( - '(', ')', '{', '}', '[', ']', - '+', '-', '*', '/', '%', - '=', '<', '>', '!', '^', '&', '|', '?', ':', ';', ',' - ), - 'CASE_SENSITIVE' => array( - GESHI_COMMENTS => false, - 1 => true, // Standard C reserved keywords - 2 => true, // C preprocessor directives - 3 => true, // Functions from lrun.h - 4 => true, // Constants from lrun.h - 5 => true, // Functions from web_api.h - 6 => true, // Constants from web_api.h - 7 => true, // Functions from as_web.h - 8 => true, // Constants from as_web.h - 9 => true, // Functions from as_sapgui.h - 10 => true, // Constants from as_sapgui.h - ), - - // Styles - 'STYLES' => array( - 'KEYWORDS' => array( - // Functions are brown, constants and reserved words are blue - 1 => 'color: #0000ff;', // Standard C reserved keywords - 2 => 'color: #0000ff;', // C preprocessor directives - 3 => 'color: #8a0000;', // Functions from lrun.h - 4 => 'color: #0000ff;', // Constants from lrun.h - 5 => 'color: #8a0000;', // Functions from web_api.h - 6 => 'color: #0000ff;', // Constants from web_api.h - 7 => 'color: #8a0000;', // Functions from as_web.h - 8 => 'color: #0000ff;', // Constants from as_web.h - 9 => 'color: #8a0000;', // Functions from as_sapgui.h - 10 => 'color: #0000ff;', // Constants from as_sapgui.h - ), - 'COMMENTS' => array( - // Comments are grey - 1 => 'color: #9b9b9b;', - 'MULTI' => 'color: #9b9b9b;' - ), - 'ESCAPE_CHAR' => array( - // GeSHi cannot define a separate style for ESCAPE_REGEXP. The style for ESCAPE_CHAR also applies to ESCAPE_REGEXP. - // This is used for LoadRunner {parameters} - // {parameters} are pink - 0 => 'color: #c000c0;' - ), - 'BRACKETS' => array( - 0 => 'color: #000000;' - ), - 'STRINGS' => array( - // Strings are green - 0 => 'color: #008080;' - ), - 'NUMBERS' => array( - // Numbers are green - 0 => 'color: #008080;', - GESHI_NUMBER_BIN_PREFIX_0B => 'color: #008080;', - GESHI_NUMBER_OCT_PREFIX => 'color: #008080;', - GESHI_NUMBER_HEX_PREFIX => 'color: #008080;', - GESHI_NUMBER_FLT_SCI_SHORT => 'color:#008080;', - GESHI_NUMBER_FLT_SCI_ZERO => 'color:#008080;', - GESHI_NUMBER_FLT_NONSCI_F => 'color:#008080;', - GESHI_NUMBER_FLT_NONSCI => 'color:#008080;' - ), - 'METHODS' => array( - 1 => 'color: #000000;' - ), - 'SYMBOLS' => array( - 0 => 'color: #000000;' - ), - 'REGEXPS' => array( - ), - 'SCRIPT' => array( - ) - ), - - // URLs for Functions - 'URLS' => array( - 1 => '', // Standard C reserved keywords - 2 => '', // C preprocessor directives - 3 => '', // Functions from lrun.h - 4 => '', // Constants from lrun.h - 5 => '', // Functions from web_api.h - 6 => '', // Constants from web_api.h - 7 => '', // Functions from as_web.h - 8 => '', // Constants from as_web.h - 9 => '', // Functions from as_sapgui.h - 10 => '', // Constants from as_sapgui.h - ), - - // Object Orientation - 'OOLANG' => false, - 'OBJECT_SPLITTERS' => array( - ), - - // Regular Expressions - // Note that REGEXPS are not applied within strings. - 'REGEXPS' => array( - ), - - // Contextual Highlighting and Strict Mode - 'STRICT_MODE_APPLIES' => GESHI_NEVER, - 'SCRIPT_DELIMITERS' => array( - ), - 'HIGHLIGHT_STRICT_BLOCK' => array( - ), - - // Tabs - // Note that if you are using
         tags for your code, then the browser chooses how many spaces your tabs will translate to.
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php
        deleted file mode 100644
        index 94131a57..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php
        +++ /dev/null
        @@ -1,225 +0,0 @@
        - 'C (Mac)',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'if', 'return', 'while', 'case', 'continue', 'default',
        -            'do', 'else', 'for', 'switch', 'goto'
        -            ),
        -        2 => array(
        -            'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM',
        -            'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
        -            'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
        -            'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
        -            'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
        -            'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
        -            'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
        -            'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
        -            'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
        -            'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
        -            'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
        -            'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
        -            // Mac-specific constants:
        -            'kCFAllocatorDefault'
        -            ),
        -        3 => array(
        -            'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
        -            'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
        -            'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
        -            'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
        -            'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
        -            'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
        -            'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
        -            'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
        -            'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
        -            'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
        -            'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
        -            'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
        -            'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
        -            'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
        -            'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
        -            'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
        -            'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
        -            'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
        -            'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
        -            ),
        -        4 => array(
        -            'auto', 'char', 'const', 'double',  'float', 'int', 'long',
        -            'register', 'short', 'signed', 'static', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
        -            'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
        -            'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', 'wchar_t',
        -
        -            'int8', 'int16', 'int32', 'int64',
        -            'uint8', 'uint16', 'uint32', 'uint64',
        -
        -            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
        -            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
        -
        -            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
        -            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
        -
        -            'int8_t', 'int16_t', 'int32_t', 'int64_t',
        -            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
        -
        -            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t',
        -
        -            // Mac-specific types:
        -            'CFArrayRef', 'CFDictionaryRef', 'CFMutableDictionaryRef', 'CFBundleRef', 'CFSetRef', 'CFStringRef',
        -            'CFURLRef', 'CFLocaleRef', 'CFDateFormatterRef', 'CFNumberFormatterRef', 'CFPropertyListRef',
        -            'CFTreeRef', 'CFWriteStreamRef', 'CFCharacterSetRef', 'CFMutableStringRef', 'CFNotificationRef',
        -            'CFReadStreamRef', 'CFNull', 'CFAllocatorRef', 'CFBagRef', 'CFBinaryHeapRef',
        -            'CFBitVectorRef', 'CFBooleanRef', 'CFDataRef', 'CFDateRef', 'CFMachPortRef', 'CFMessagePortRef',
        -            'CFMutableArrayRef', 'CFMutableBagRef', 'CFMutableBitVectorRef', 'CFMutableCharacterSetRef',
        -            'CFMutableDataRef', 'CFMutableSetRef', 'CFNumberRef', 'CFPlugInRef', 'CFPlugInInstanceRef',
        -            'CFRunLoopRef', 'CFRunLoopObserverRef', 'CFRunLoopSourceRef', 'CFRunLoopTimerRef', 'CFSocketRef',
        -            'CFTimeZoneRef', 'CFTypeRef', 'CFUserNotificationRef', 'CFUUIDRef', 'CFXMLNodeRef', 'CFXMLParserRef',
        -            'CFXMLTreeRef'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #0000dd;',
        -            4 => 'color: #0000ff;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #ff0000;',
        -            2 => 'color: #339900;',
        -            'MULTI' => 'color: #ff0000; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #666666;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #00eeff;',
        -            2 => 'color: #00eeff;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php
        deleted file mode 100644
        index 69cad2a7..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php
        +++ /dev/null
        @@ -1,870 +0,0 @@
        - 'C (WinAPI)',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'if', 'return', 'while', 'case', 'continue', 'default',
        -            'do', 'else', 'for', 'switch', 'goto'
        -            ),
        -        2 => array(
        -            'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline'
        -            ),
        -        3 => array(
        -            // assert.h
        -            'assert',
        -
        -            //complex.h
        -            'cabs', 'cacos', 'cacosh', 'carg', 'casin', 'casinh', 'catan',
        -            'catanh', 'ccos', 'ccosh', 'cexp', 'cimag', 'cis', 'clog', 'conj',
        -            'cpow', 'cproj', 'creal', 'csin', 'csinh', 'csqrt', 'ctan', 'ctanh',
        -
        -            //ctype.h
        -            'digittoint', 'isalnum', 'isalpha', 'isascii', 'isblank', 'iscntrl',
        -            'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
        -            'isupper', 'isxdigit', 'toascii', 'tolower', 'toupper',
        -
        -            //inttypes.h
        -            'imaxabs', 'imaxdiv', 'strtoimax', 'strtoumax', 'wcstoimax',
        -            'wcstoumax',
        -
        -            //locale.h
        -            'localeconv', 'setlocale',
        -
        -            //math.h
        -            'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'exp',
        -            'fabs', 'floor', 'frexp', 'ldexp', 'log', 'log10', 'modf', 'pow',
        -            'sin', 'sinh', 'sqrt', 'tan', 'tanh',
        -
        -            //setjmp.h
        -            'longjmp', 'setjmp',
        -
        -            //signal.h
        -            'raise',
        -
        -            //stdarg.h
        -            'va_arg', 'va_copy', 'va_end', 'va_start',
        -
        -            //stddef.h
        -            'offsetof',
        -
        -            //stdio.h
        -            'clearerr', 'fclose', 'fdopen', 'feof', 'ferror', 'fflush', 'fgetc',
        -            'fgetpos', 'fgets', 'fopen', 'fprintf', 'fputc', 'fputchar',
        -            'fputs', 'fread', 'freopen', 'fscanf', 'fseek', 'fsetpos', 'ftell',
        -            'fwrite', 'getc', 'getch', 'getchar', 'gets', 'perror', 'printf',
        -            'putc', 'putchar', 'puts', 'remove', 'rename', 'rewind', 'scanf',
        -            'setbuf', 'setvbuf', 'snprintf', 'sprintf', 'sscanf', 'tmpfile',
        -            'tmpnam', 'ungetc', 'vfprintf', 'vfscanf', 'vprintf', 'vscanf',
        -            'vsprintf', 'vsscanf',
        -
        -            //stdlib.h
        -            'abort', 'abs', 'atexit', 'atof', 'atoi', 'atol', 'bsearch',
        -            'calloc', 'div', 'exit', 'free', 'getenv', 'itoa', 'labs', 'ldiv',
        -            'ltoa', 'malloc', 'qsort', 'rand', 'realloc', 'srand', 'strtod',
        -            'strtol', 'strtoul', 'system',
        -
        -            //string.h
        -            'memchr', 'memcmp', 'memcpy', 'memmove', 'memset', 'strcat',
        -            'strchr', 'strcmp', 'strcoll', 'strcpy', 'strcspn', 'strerror',
        -            'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', 'strrchr',
        -            'strspn', 'strstr', 'strtok', 'strxfrm',
        -
        -            //time.h
        -            'asctime', 'clock', 'ctime', 'difftime', 'gmtime', 'localtime',
        -            'mktime', 'strftime', 'time',
        -
        -            //wchar.h
        -            'btowc', 'fgetwc', 'fgetws', 'fputwc', 'fputws', 'fwide',
        -            'fwprintf', 'fwscanf', 'getwc', 'getwchar', 'mbrlen', 'mbrtowc',
        -            'mbsinit', 'mbsrtowcs', 'putwc', 'putwchar', 'swprintf', 'swscanf',
        -            'ungetwc', 'vfwprintf', 'vswprintf', 'vwprintf', 'wcrtomb',
        -            'wcscat', 'wcschr', 'wcscmp', 'wcscoll', 'wcscpy', 'wcscspn',
        -            'wcsftime', 'wcslen', 'wcsncat', 'wcsncmp', 'wcsncpy', 'wcspbrk',
        -            'wcsrchr', 'wcsrtombs', 'wcsspn', 'wcsstr', 'wcstod', 'wcstok',
        -            'wcstol', 'wcstoul', 'wcsxfrm', 'wctob', 'wmemchr', 'wmemcmp',
        -            'wmemcpy', 'wmemmove', 'wmemset', 'wprintf', 'wscanf',
        -
        -            //wctype.h
        -            'iswalnum', 'iswalpha', 'iswcntrl', 'iswctype', 'iswdigit',
        -            'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace',
        -            'iswupper', 'iswxdigit', 'towctrans', 'towlower', 'towupper',
        -            'wctrans', 'wctype'
        -            ),
        -        4 => array(
        -            'auto', 'char', 'const', 'double',  'float', 'int', 'long',
        -            'register', 'short', 'signed', 'sizeof', 'static', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t',
        -
        -            'int8', 'int16', 'int32', 'int64',
        -            'uint8', 'uint16', 'uint32', 'uint64',
        -
        -            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
        -            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
        -
        -            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
        -            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
        -
        -            'int8_t', 'int16_t', 'int32_t', 'int64_t',
        -            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
        -
        -            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t',
        -            'size_t', 'off_t'
        -            ),
        -        // Public API
        -        5 => array(
        -            'AssignProcessToJobObject', 'CommandLineToArgvW', 'ConvertThreadToFiber',
        -            'CreateFiber', 'CreateJobObjectA', 'CreateJobObjectW', 'CreateProcessA',
        -            'CreateProcessAsUserA', 'CreateProcessAsUserW', 'CreateProcessW',
        -            'CreateRemoteThread', 'CreateThread', 'DeleteFiber', 'ExitProcess',
        -            'ExitThread', 'FreeEnvironmentStringsA', 'FreeEnvironmentStringsW',
        -            'GetCommandLineA', 'GetCommandLineW', 'GetCurrentProcess',
        -            'GetCurrentProcessId', 'GetCurrentThread', 'GetCurrentThreadId',
        -            'GetEnvironmentStringsA', 'GetEnvironmentStringsW',
        -            'GetEnvironmentVariableA', 'GetEnvironmentVariableW', 'GetExitCodeProcess',
        -            'GetExitCodeThread', 'GetGuiResources', 'GetPriorityClass',
        -            'GetProcessAffinityMask', 'GetProcessPriorityBoost',
        -            'GetProcessShutdownParameters', 'GetProcessTimes', 'GetProcessVersion',
        -            'GetProcessWorkingSetSize', 'GetStartupInfoA', 'GetStartupInfoW',
        -            'GetThreadPriority', 'GetThreadPriorityBoost', 'GetThreadTimes',
        -            'OpenJobObjectA', 'OpenJobObjectW', 'OpenProcess',
        -            'QueryInformationJobObject', 'ResumeThread', 'SetEnvironmentVariableA',
        -            'SetEnvironmentVariableW', 'SetInformationJobObject', 'SetPriorityClass',
        -            'SetProcessAffinityMask', 'SetProcessPriorityBoost',
        -            'SetProcessShutdownParameters', 'SetProcessWorkingSetSize',
        -            'SetThreadAffinityMask', 'SetThreadIdealProcessor', 'SetThreadPriority',
        -            'SetThreadPriorityBoost', 'Sleep', 'SleepEx', 'SuspendThread',
        -            'SwitchToFiber', 'SwitchToThread', 'TerminateJobObject', 'TerminateProcess',
        -            'TerminateThread', 'WaitForInputIdle', 'WinExec',
        -
        -            '_hread', '_hwrite', '_lclose', '_lcreat', '_llseek', '_lopen', '_lread',
        -            '_lwrite', 'AreFileApisANSI', 'CancelIo', 'CopyFileA', 'CopyFileW',
        -            'CreateDirectoryA', 'CreateDirectoryExA', 'CreateDirectoryExW',
        -            'CreateDirectoryW', 'CreateFileA', 'CreateFileW', 'DeleteFileA',
        -            'DeleteFileW', 'FindClose', 'FindCloseChangeNotification',
        -            'FindFirstChangeNotificationA', 'FindFirstChangeNotificationW',
        -            'FindFirstFileA', 'FindFirstFileW', 'FindNextFileA', 'FindNextFileW',
        -            'FlushFileBuffers', 'GetCurrentDirectoryA', 'GetCurrentDirectoryW',
        -            'GetDiskFreeSpaceA', 'GetDiskFreeSpaceExA', 'GetDiskFreeSpaceExW',
        -            'GetDiskFreeSpaceW', 'GetDriveTypeA', 'GetDriveTypeW', 'GetFileAttributesA',
        -            'GetFileAttributesExA', 'GetFileAttributesExW', 'GetFileAttributesW',
        -            'GetFileInformationByHandle', 'GetFileSize', 'GetFileType',
        -            'GetFullPathNameA', 'GetFullPathNameW', 'GetLogicalDrives',
        -            'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetLongPathNameA',
        -            'GetLongPathNameW', 'GetShortPathNameA', 'GetShortPathNameW',
        -            'GetTempFileNameA', 'GetTempFileNameW', 'GetTempPathA', 'GetTempPathW',
        -            'LockFile', 'MoveFileA', 'MoveFileW', 'MulDiv', 'OpenFile',
        -            'QueryDosDeviceA', 'QueryDosDeviceW', 'ReadFile', 'ReadFileEx',
        -            'RemoveDirectoryA', 'RemoveDirectoryW', 'SearchPathA', 'SearchPathW',
        -            'SetCurrentDirectoryA', 'SetCurrentDirectoryW', 'SetEndOfFile',
        -            'SetFileApisToANSI', 'SetFileApisToOEM', 'SetFileAttributesA',
        -            'SetFileAttributesW', 'SetFilePointer', 'SetHandleCount',
        -            'SetVolumeLabelA', 'SetVolumeLabelW', 'UnlockFile', 'WriteFile',
        -            'WriteFileEx',
        -
        -            'DeviceIoControl',
        -
        -            'GetModuleFileNameA', 'GetModuleFileNameW', 'GetProcAddress',
        -            'LoadLibraryA', 'LoadLibraryExA', 'LoadLibraryExW', 'LoadLibraryW',
        -            'LoadModule',
        -
        -            'GetPrivateProfileIntA', 'GetPrivateProfileIntW',
        -            'GetPrivateProfileSectionA', 'GetPrivateProfileSectionNamesA',
        -            'GetPrivateProfileSectionNamesW', 'GetPrivateProfileSectionW',
        -            'GetPrivateProfileStringA', 'GetPrivateProfileStringW',
        -            'GetPrivateProfileStructA', 'GetPrivateProfileStructW',
        -            'GetProfileIntA', 'GetProfileIntW', 'GetProfileSectionA',
        -            'GetProfileSectionW', 'GetProfileStringA', 'GetProfileStringW',
        -            'RegCloseKey', 'RegConnectRegistryA', 'RegConnectRegistryW',
        -            'RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW',
        -            'RegCreateKeyW', 'RegDeleteKeyA', 'RegDeleteKeyW', 'RegDeleteValueA',
        -            'RegDeleteValueW', 'RegEnumKeyA', 'RegEnumKeyExA', 'RegEnumKeyExW',
        -            'RegEnumKeyW', 'RegEnumValueA', 'RegEnumValueW', 'RegFlushKey',
        -            'RegGetKeySecurity', 'RegLoadKeyA', 'RegLoadKeyW',
        -            'RegNotifyChangeKeyValue', 'RegOpenKeyA', 'RegOpenKeyExA', 'RegOpenKeyExW',
        -            'RegOpenKeyW', 'RegOverridePredefKey', 'RegQueryInfoKeyA',
        -            'RegQueryInfoKeyW', 'RegQueryMultipleValuesA', 'RegQueryMultipleValuesW',
        -            'RegQueryValueA', 'RegQueryValueExA', 'RegQueryValueExW', 'RegQueryValueW',
        -            'RegReplaceKeyA', 'RegReplaceKeyW', 'RegRestoreKeyA', 'RegRestoreKeyW',
        -            'RegSaveKeyA', 'RegSaveKeyW', 'RegSetKeySecurity', 'RegSetValueA',
        -            'RegSetValueExA', 'RegSetValueExW', 'RegSetValueW', 'RegUnLoadKeyA',
        -            'RegUnLoadKeyW', 'WritePrivateProfileSectionA', 'WritePrivateProfileSectionW',
        -            'WritePrivateProfileStringA', 'WritePrivateProfileStringW',
        -            'WritePrivateProfileStructA', 'WritePrivateProfileStructW',
        -            'WriteProfileSectionA', 'WriteProfileSectionW', 'WriteProfileStringA',
        -            'WriteProfileStringW',
        -
        -            'AccessCheck', 'AccessCheckAndAuditAlarmA', 'AccessCheckAndAuditAlarmW',
        -            'AccessCheckByType', 'AccessCheckByTypeAndAuditAlarmA',
        -            'AccessCheckByTypeAndAuditAlarmW', 'AccessCheckByTypeResultList',
        -            'AccessCheckByTypeResultListAndAuditAlarmA', 'AccessCheckByTypeResultListAndAuditAlarmW',
        -            'AddAccessAllowedAce', 'AddAccessAllowedAceEx', 'AddAccessAllowedObjectAce',
        -            'AddAccessDeniedAce', 'AddAccessDeniedAceEx', 'AddAccessDeniedObjectAce',
        -            'AddAce', 'AddAuditAccessAce', 'AddAuditAccessAceEx', 'AddAuditAccessObjectAce',
        -            'AdjustTokenGroups', 'AdjustTokenPrivileges', 'AllocateAndInitializeSid',
        -            'AllocateLocallyUniqueId', 'AreAllAccessesGranted', 'AreAnyAccessesGranted',
        -            'BuildExplicitAccessWithNameA', 'BuildExplicitAccessWithNameW',
        -            'BuildImpersonateExplicitAccessWithNameA', 'BuildImpersonateExplicitAccessWithNameW',
        -            'BuildImpersonateTrusteeA', 'BuildImpersonateTrusteeW', 'BuildSecurityDescriptorA',
        -            'BuildSecurityDescriptorW', 'BuildTrusteeWithNameA', 'BuildTrusteeWithNameW',
        -            'BuildTrusteeWithSidA', 'BuildTrusteeWithSidW',
        -            'ConvertToAutoInheritPrivateObjectSecurity', 'CopySid', 'CreatePrivateObjectSecurity',
        -            'CreatePrivateObjectSecurityEx', 'CreateRestrictedToken', 'DeleteAce',
        -            'DestroyPrivateObjectSecurity', 'DuplicateToken', 'DuplicateTokenEx',
        -            'EqualPrefixSid', 'EqualSid', 'FindFirstFreeAce', 'FreeSid', 'GetAce',
        -            'GetAclInformation', 'GetAuditedPermissionsFromAclA', 'GetAuditedPermissionsFromAclW',
        -            'GetEffectiveRightsFromAclA', 'GetEffectiveRightsFromAclW',
        -            'GetExplicitEntriesFromAclA', 'GetExplicitEntriesFromAclW', 'GetFileSecurityA',
        -            'GetFileSecurityW', 'GetKernelObjectSecurity', 'GetLengthSid', 'GetMultipleTrusteeA',
        -            'GetMultipleTrusteeOperationA', 'GetMultipleTrusteeOperationW', 'GetMultipleTrusteeW',
        -            'GetNamedSecurityInfoA', 'GetNamedSecurityInfoW', 'GetPrivateObjectSecurity',
        -            'GetSecurityDescriptorControl', 'GetSecurityDescriptorDacl',
        -            'GetSecurityDescriptorGroup', 'GetSecurityDescriptorLength',
        -            'GetSecurityDescriptorOwner', 'GetSecurityDescriptorSacl', 'GetSecurityInfo',
        -            'GetSidIdentifierAuthority', 'GetSidLengthRequired', 'GetSidSubAuthority',
        -            'GetSidSubAuthorityCount', 'GetTokenInformation', 'GetTrusteeFormA',
        -            'GetTrusteeFormW', 'GetTrusteeNameA', 'GetTrusteeNameW', 'GetTrusteeTypeA',
        -            'GetTrusteeTypeW', 'GetUserObjectSecurity', 'ImpersonateLoggedOnUser',
        -            'ImpersonateNamedPipeClient', 'ImpersonateSelf', 'InitializeAcl',
        -            'InitializeSecurityDescriptor', 'InitializeSid', 'IsTokenRestricted', 'IsValidAcl',
        -            'IsValidSecurityDescriptor', 'IsValidSid', 'LogonUserA', 'LogonUserW',
        -            'LookupAccountNameA', 'LookupAccountNameW', 'LookupAccountSidA', 'LookupAccountSidW',
        -            'LookupPrivilegeDisplayNameA', 'LookupPrivilegeDisplayNameW', 'LookupPrivilegeNameA',
        -            'LookupPrivilegeNameW', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW',
        -            'LookupSecurityDescriptorPartsA', 'LookupSecurityDescriptorPartsW', 'MakeAbsoluteSD',
        -            'MakeSelfRelativeSD', 'MapGenericMask', 'ObjectCloseAuditAlarmA',
        -            'ObjectCloseAuditAlarmW', 'ObjectDeleteAuditAlarmA', 'ObjectDeleteAuditAlarmW',
        -            'ObjectOpenAuditAlarmA', 'ObjectOpenAuditAlarmW', 'ObjectPrivilegeAuditAlarmA',
        -            'ObjectPrivilegeAuditAlarmW', 'OpenProcessToken', 'OpenThreadToken', 'PrivilegeCheck',
        -            'PrivilegedServiceAuditAlarmA', 'PrivilegedServiceAuditAlarmW', 'RevertToSelf',
        -            'SetAclInformation', 'SetEntriesInAclA', 'SetEntriesInAclW', 'SetFileSecurityA',
        -            'SetFileSecurityW', 'SetKernelObjectSecurity', 'SetNamedSecurityInfoA',
        -            'SetNamedSecurityInfoW', 'SetPrivateObjectSecurity', 'SetPrivateObjectSecurityEx',
        -            'SetSecurityDescriptorControl', 'SetSecurityDescriptorDacl',
        -            'SetSecurityDescriptorGroup', 'SetSecurityDescriptorOwner',
        -            'SetSecurityDescriptorSacl', 'SetSecurityInfo', 'SetThreadToken',
        -            'SetTokenInformation', 'SetUserObjectSecurity', 'ChangeServiceConfig2A',
        -            'ChangeServiceConfig2W', 'ChangeServiceConfigA', 'ChangeServiceConfigW',
        -            'CloseServiceHandle', 'ControlService', 'CreateServiceA', 'CreateServiceW',
        -            'DeleteService', 'EnumDependentServicesA', 'EnumDependentServicesW',
        -            'EnumServicesStatusA', 'EnumServicesStatusW', 'GetServiceDisplayNameA',
        -            'GetServiceDisplayNameW', 'GetServiceKeyNameA', 'GetServiceKeyNameW',
        -            'LockServiceDatabase', 'NotifyBootConfigStatus', 'OpenSCManagerA', 'OpenSCManagerW',
        -            'OpenServiceA', 'OpenServiceW', 'QueryServiceConfig2A', 'QueryServiceConfig2W',
        -            'QueryServiceConfigA', 'QueryServiceConfigW', 'QueryServiceLockStatusA',
        -            'QueryServiceLockStatusW', 'QueryServiceObjectSecurity', 'QueryServiceStatus',
        -            'RegisterServiceCtrlHandlerA', 'RegisterServiceCtrlHandlerW',
        -            'SetServiceObjectSecurity', 'SetServiceStatus', 'StartServiceA',
        -            'StartServiceCtrlDispatcherA', 'StartServiceCtrlDispatcherW', 'StartServiceW',
        -            'UnlockServiceDatabase',
        -
        -            'MultinetGetConnectionPerformanceA', 'MultinetGetConnectionPerformanceW',
        -            'NetAlertRaise', 'NetAlertRaiseEx', 'NetApiBufferAllocate', 'NetApiBufferFree',
        -            'NetApiBufferReallocate', 'NetApiBufferSize', 'NetConnectionEnum', 'NetFileClose',
        -            'NetFileGetInfo', 'NetGetAnyDCName', 'NetGetDCName', 'NetGetDisplayInformationIndex',
        -            'NetGroupAdd', 'NetGroupAddUser', 'NetGroupDel', 'NetGroupDelUser', 'NetGroupEnum',
        -            'NetGroupGetInfo', 'NetGroupGetUsers', 'NetGroupSetInfo', 'NetGroupSetUsers',
        -            'NetLocalGroupAdd', 'NetLocalGroupAddMember', 'NetLocalGroupAddMembers',
        -            'NetLocalGroupDel', 'NetLocalGroupDelMember', 'NetLocalGroupDelMembers',
        -            'NetLocalGroupEnum', 'NetLocalGroupGetInfo', 'NetLocalGroupGetMembers',
        -            'NetLocalGroupSetInfo', 'NetLocalGroupSetMembers', 'NetMessageBufferSend',
        -            'NetMessageNameAdd', 'NetMessageNameDel', 'NetMessageNameEnum',
        -            'NetMessageNameGetInfo', 'NetQueryDisplayInformation', 'NetRemoteComputerSupports',
        -            'NetRemoteTOd', 'NetReplExportDirAdd', 'NetReplExportDirDel', 'NetReplExportDirEnum',
        -            'NetReplExportDirGetInfo', 'NetReplExportDirLock', 'NetReplExportDirSetInfo',
        -            'NetReplExportDirUnlock', 'NetReplGetInfo', 'NetReplImportDirAdd',
        -            'NetReplImportDirDel', 'NetReplImportDirEnum', 'NetReplImportDirGetInfo',
        -            'NetReplImportDirLock', 'NetReplImportDirUnlock', 'NetReplSetInfo',
        -            'NetScheduleJobAdd', 'NetScheduleJobDel', 'NetScheduleJobEnum',
        -            'NetScheduleJobGetInfo', 'NetServerComputerNameAdd', 'NetServerComputerNameDel',
        -            'NetServerDiskEnum', 'NetServerEnum', 'NetServerEnumEx', 'NetServerGetInfo',
        -            'NetServerSetInfo', 'NetServerTransportAdd', 'NetServerTransportAddEx',
        -            'NetServerTransportDel', 'NetServerTransportEnum', 'NetSessionDel', 'NetSessionEnum',
        -            'NetSessionGetInfo', 'NetShareAdd', 'NetShareCheck', 'NetShareDel', 'NetShareEnum',
        -            'NetShareGetInfo', 'NetShareSetInfo', 'NetStatisticsGet', 'NetUseAdd', 'NetUseDel',
        -            'NetUseEnum', 'NetUseGetInfo', 'NetUserAdd', 'NetUserChangePassword', 'NetUserDel',
        -            'NetUserEnum', 'NetUserGetGroups', 'NetUserGetInfo', 'NetUserGetLocalGroups',
        -            'NetUserModalsGet', 'NetUserModalsSet', 'NetUserSetGroups', 'NetUserSetInfo',
        -            'NetWkstaGetInfo', 'NetWkstaSetInfo', 'NetWkstaTransportAdd', 'NetWkstaTransportDel',
        -            'NetWkstaTransportEnum', 'NetWkstaUserEnum', 'NetWkstaUserGetInfo',
        -            'NetWkstaUserSetInfo', 'WNetAddConnection2A', 'WNetAddConnection2W',
        -            'WNetAddConnection3A', 'WNetAddConnection3W', 'WNetAddConnectionA',
        -            'WNetAddConnectionW', 'WNetCancelConnection2A', 'WNetCancelConnection2W',
        -            'WNetCancelConnectionA', 'WNetCancelConnectionW', 'WNetCloseEnum',
        -            'WNetConnectionDialog', 'WNetConnectionDialog1A', 'WNetConnectionDialog1W',
        -            'WNetDisconnectDialog', 'WNetDisconnectDialog1A', 'WNetDisconnectDialog1W',
        -            'WNetEnumResourceA', 'WNetEnumResourceW', 'WNetGetConnectionA', 'WNetGetConnectionW',
        -            'WNetGetLastErrorA', 'WNetGetLastErrorW', 'WNetGetNetworkInformationA',
        -            'WNetGetNetworkInformationW', 'WNetGetProviderNameA', 'WNetGetProviderNameW',
        -            'WNetGetResourceInformationA', 'WNetGetResourceInformationW',
        -            'WNetGetResourceParentA', 'WNetGetResourceParentW', 'WNetGetUniversalNameA',
        -            'WNetGetUniversalNameW', 'WNetGetUserA', 'WNetGetUserW', 'WNetOpenEnumA',
        -            'WNetOpenEnumW', 'WNetUseConnectionA', 'WnetUseConnectionW',
        -
        -            'accept', 'bind', 'closesocket', 'connect', 'gethostbyaddr', 'gethostbyname',
        -            'gethostname', 'getpeername', 'getprotobyname', 'getprotobynumber', 'getservbyname',
        -            'getservbyport', 'getsockname', 'getsockopt', 'htonl', 'htons', 'inet_addr',
        -            'inet_ntoa', 'ioctlsocket', 'listen', 'ntohl', 'ntohs', 'recv', 'recvfrom', 'select',
        -            'send', 'sendto', 'setsockopt', 'shutdown', 'socket', 'WSAAccept',
        -            'WSAAddressToStringA', 'WSAAddressToStringW', 'WSAAsyncGetHostByAddr',
        -            'WSAAsyncGetHostByName', 'WSAAsyncGetProtoByName', 'WSAAsyncGetProtoByNumber',
        -            'WSAAsyncGetServByName', 'WSAAsyncGetServByPort', 'WSAAsyncSelect',
        -            'WSACancelAsyncRequest', 'WSACancelBlockingCall', 'WSACleanup', 'WSACloseEvent',
        -            'WSAConnect', 'WSACreateEvent', 'WSADuplicateSocketA', 'WSADuplicateSocketW',
        -            'WSAEnumNameSpaceProvidersA', 'WSAEnumNameSpaceProvidersW', 'WSAEnumNetworkEvents',
        -            'WSAEnumProtocolsA', 'WSAEnumProtocolsW', 'WSAEventSelect', 'WSAGetLastError',
        -            'WSAGetOverlappedResult', 'WSAGetQOSByName', 'WSAGetServiceClassInfoA',
        -            'WSAGetServiceClassInfoW', 'WSAGetServiceClassNameByClassIdA',
        -            'WSAGetServiceClassNameByClassIdW', 'WSAHtonl', 'WSAHtons', 'WSAInstallServiceClassA',
        -            'WSAInstallServiceClassW', 'WSAIoctl', 'WSAIsBlocking', 'WSAJoinLeaf',
        -            'WSALookupServiceBeginA', 'WSALookupServiceBeginW', 'WSALookupServiceEnd',
        -            'WSALookupServiceNextA', 'WSALookupServiceNextW', 'WSANtohl', 'WSANtohs',
        -            'WSAProviderConfigChange', 'WSARecv', 'WSARecvDisconnect', 'WSARecvFrom',
        -            'WSARemoveServiceClass', 'WSAResetEvent', 'WSASend', 'WSASendDisconnect', 'WSASendTo',
        -            'WSASetBlockingHook', 'WSASetEvent', 'WSASetLastError', 'WSASetServiceA',
        -            'WSASetServiceW', 'WSASocketA', 'WSASocketW', 'WSAStartup', 'WSAStringToAddressA',
        -            'WSAStringToAddressW', 'WSAUnhookBlockingHook', 'WSAWaitForMultipleEvents',
        -            'WSCDeinstallProvider', 'WSCEnableNSProvider', 'WSCEnumProtocols',
        -            'WSCGetProviderPath', 'WSCInstallNameSpace', 'WSCInstallProvider',
        -            'WSCUnInstallNameSpace',
        -
        -            'ContinueDebugEvent', 'DebugActiveProcess', 'DebugBreak', 'FatalExit',
        -            'FlushInstructionCache', 'GetThreadContext', 'GetThreadSelectorEntry',
        -            'IsDebuggerPresent', 'OutputDebugStringA', 'OutputDebugStringW', 'ReadProcessMemory',
        -            'SetDebugErrorLevel', 'SetThreadContext', 'WaitForDebugEvent', 'WriteProcessMemory',
        -
        -            'CloseHandle', 'DuplicateHandle', 'GetHandleInformation', 'SetHandleInformation',
        -
        -            'AdjustWindowRect', 'AdjustWindowRectEx', 'AllowSetForegroundWindow',
        -            'AnimateWindow', 'AnyPopup', 'ArrangeIconicWindows', 'BeginDeferWindowPos',
        -            'BringWindowToTop', 'CascadeWindows', 'ChildWindowFromPoint',
        -            'ChildWindowFromPointEx', 'CloseWindow', 'CreateWindowExA', 'CreateWindowExW',
        -            'DeferWindowPos', 'DestroyWindow', 'EndDeferWindowPos', 'EnumChildWindows',
        -            'EnumThreadWindows', 'EnumWindows', 'FindWindowA', 'FindWindowExA', 'FindWindowExW',
        -            'FindWindowW', 'GetAltTabInfoA', 'GetAltTabInfoW', 'GetAncestor', 'GetClientRect',
        -            'GetDesktopWindow', 'GetForegroundWindow', 'GetGUIThreadInfo', 'GetLastActivePopup',
        -            'GetLayout', 'GetParent', 'GetProcessDefaultLayout', 'GetTitleBarInf', 'GetTopWindow',
        -            'GetWindow', 'GetWindowInfo', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW',
        -            'GetWindowPlacement', 'GetWindowRect', 'GetWindowTextA', 'GetWindowTextLengthA',
        -            'GetWindowTextLengthW', 'GetWindowTextW', 'GetWindowThreadProcessId', 'IsChild',
        -            'IsIconic', 'IsWindow', 'IsWindowUnicode', 'IsWindowVisible', 'IsZoomed',
        -            'LockSetForegroundWindow', 'MoveWindow', 'OpenIcon', 'RealChildWindowFromPoint',
        -            'RealGetWindowClassA', 'RealGetWindowClassW', 'SetForegroundWindow',
        -            'SetLayeredWindowAttributes', 'SetLayout', 'SetParent', 'SetProcessDefaultLayout',
        -            'SetWindowPlacement', 'SetWindowPos', 'SetWindowTextA', 'SetWindowTextW',
        -            'ShowOwnedPopups', 'ShowWindow', 'ShowWindowAsync', 'TileWindows',
        -            'UpdateLayeredWindow', 'WindowFromPoint',
        -
        -            'CreateDialogIndirectParamA', 'CreateDialogIndirectParamW', 'CreateDialogParamA',
        -            'CreateDialogParamW', 'DefDlgProcA', 'DefDlgProcW', 'DialogBoxIndirectParamA',
        -            'DialogBoxIndirectParamW', 'DialogBoxParamA', 'DialogBoxParamW', 'EndDialog',
        -            'GetDialogBaseUnits', 'GetDlgCtrlID', 'GetDlgItem', 'GetDlgItemInt',
        -            'GetDlgItemTextA', 'GetDlgItemTextW', 'GetNextDlgGroupItem', 'GetNextDlgTabItem',
        -            'IsDialogMessageA', 'IsDialogMessageW', 'MapDialogRect', 'MessageBoxA',
        -            'MessageBoxExA', 'MessageBoxExW', 'MessageBoxIndirectA', 'MessageBoxIndirectW',
        -            'MessageBoxW', 'SendDlgItemMessageA', 'SendDlgItemMessageW', 'SetDlgItemInt',
        -            'SetDlgItemTextA', 'SetDlgItemTextW',
        -
        -            'GetWriteWatch', 'GlobalMemoryStatus', 'GlobalMemoryStatusEx', 'IsBadCodePtr',
        -            'IsBadReadPtr', 'IsBadStringPtrA', 'IsBadStringPtrW', 'IsBadWritePtr',
        -            'ResetWriteWatch', 'AllocateUserPhysicalPages', 'FreeUserPhysicalPages',
        -            'MapUserPhysicalPages', 'MapUserPhysicalPagesScatter', 'GlobalAlloc', 'GlobalFlags',
        -            'GlobalFree', 'GlobalHandle', 'GlobalLock', 'GlobalReAlloc', 'GlobalSize',
        -            'GlobalUnlock', 'LocalAlloc', 'LocalFlags', 'LocalFree', 'LocalHandle', 'LocalLock',
        -            'LocalReAlloc', 'LocalSize', 'LocalUnlock', 'GetProcessHeap', 'GetProcessHeaps',
        -            'HeapAlloc', 'HeapCompact', 'HeapCreate', 'HeapDestroy', 'HeapFree', 'HeapLock',
        -            'HeapReAlloc', 'HeapSize', 'HeapUnlock', 'HeapValidate', 'HeapWalk', 'VirtualAlloc',
        -            'VirtualAllocEx', 'VirtualFree', 'VirtualFreeEx', 'VirtualLock', 'VirtualProtect',
        -            'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'VirtualUnlock',
        -            'GetFreeSpace', 'GlobalCompact', 'GlobalFix', 'GlobalUnfix', 'GlobalUnWire',
        -            'GlobalWire', 'IsBadHugeReadPtr', 'IsBadHugeWritePtr', 'LocalCompact', 'LocalShrink',
        -
        -            'GetClassInfoA', 'GetClassInfoW', 'GetClassInfoExA', 'GetClassInfoExW',
        -            'GetClassLongA', 'GetClassLongW', 'GetClassLongPtrA', 'GetClassLongPtrW',
        -            'RegisterClassA', 'RegisterClassW', 'RegisterClassExA', 'RegisterClassExW',
        -            'SetClassLongA', 'SetClassLongW', 'SetClassLongPtrA', 'SetClassLongPtrW',
        -            'SetWindowLongA', 'SetWindowLongW', 'SetWindowLongPtrA', 'SetWindowLongPtrW',
        -            'UnregisterClassA', 'UnregisterClassW', 'GetClassWord', 'GetWindowWord',
        -            'SetClassWord', 'SetWindowWord'
        -            ),
        -        // Native API
        -        6 => array(
        -            'CsrAllocateCaptureBuffer', 'CsrAllocateCapturePointer', 'CsrAllocateMessagePointer',
        -            'CsrCaptureMessageBuffer', 'CsrCaptureMessageString', 'CsrCaptureTimeout',
        -            'CsrClientCallServer', 'CsrClientConnectToServer', 'CsrFreeCaptureBuffer',
        -            'CsrIdentifyAlertableThread', 'CsrNewThread', 'CsrProbeForRead', 'CsrProbeForWrite',
        -            'CsrSetPriorityClass',
        -
        -            'LdrAccessResource', 'LdrDisableThreadCalloutsForDll', 'LdrEnumResources',
        -            'LdrFindEntryForAddress', 'LdrFindResource_U', 'LdrFindResourceDirectory_U',
        -            'LdrGetDllHandle', 'LdrGetProcedureAddress', 'LdrInitializeThunk', 'LdrLoadDll',
        -            'LdrProcessRelocationBlock', 'LdrQueryImageFileExecutionOptions',
        -            'LdrQueryProcessModuleInformation', 'LdrShutdownProcess', 'LdrShutdownThread',
        -            'LdrUnloadDll', 'LdrVerifyImageMatchesChecksum',
        -
        -            'NtAcceptConnectPort', 'ZwAcceptConnectPort', 'NtCompleteConnectPort',
        -            'ZwCompleteConnectPort', 'NtConnectPort', 'ZwConnectPort', 'NtCreatePort',
        -            'ZwCreatePort', 'NtImpersonateClientOfPort', 'ZwImpersonateClientOfPort',
        -            'NtListenPort', 'ZwListenPort', 'NtQueryInformationPort', 'ZwQueryInformationPort',
        -            'NtReadRequestData', 'ZwReadRequestData', 'NtReplyPort', 'ZwReplyPort',
        -            'NtReplyWaitReceivePort', 'ZwReplyWaitReceivePort', 'NtReplyWaitReplyPort',
        -            'ZwReplyWaitReplyPort', 'NtRequestPort', 'ZwRequestPort', 'NtRequestWaitReplyPort',
        -            'ZwRequestWaitReplyPort', 'NtSecureConnectPort', 'ZwSecureConnectPort',
        -            'NtWriteRequestData', 'ZwWriteRequestData',
        -
        -            'NtAccessCheck', 'ZwAccessCheck', 'NtAccessCheckAndAuditAlarm',
        -            'ZwAccessCheckAndAuditAlarm', 'NtAccessCheckByType', 'ZwAccessCheckByType',
        -            'NtAccessCheckByTypeAndAuditAlarm', 'ZwAccessCheckByTypeAndAuditAlarm',
        -            'NtAccessCheckByTypeResultList', 'ZwAccessCheckByTypeResultList',
        -            'NtAdjustGroupsToken', 'ZwAdjustGroupsToken', 'NtAdjustPrivilegesToken',
        -            'ZwAdjustPrivilegesToken', 'NtCloseObjectAuditAlarm', 'ZwCloseObjectAuditAlarm',
        -            'NtCreateToken', 'ZwCreateToken', 'NtDeleteObjectAuditAlarm',
        -            'ZwDeleteObjectAuditAlarm', 'NtDuplicateToken', 'ZwDuplicateToken',
        -            'NtFilterToken', 'ZwFilterToken', 'NtImpersonateThread', 'ZwImpersonateThread',
        -            'NtOpenObjectAuditAlarm', 'ZwOpenObjectAuditAlarm', 'NtOpenProcessToken',
        -            'ZwOpenProcessToken', 'NtOpenThreadToken', 'ZwOpenThreadToken', 'NtPrivilegeCheck',
        -            'ZwPrivilegeCheck', 'NtPrivilegedServiceAuditAlarm', 'ZwPrivilegedServiceAuditAlarm',
        -            'NtPrivilegeObjectAuditAlarm', 'ZwPrivilegeObjectAuditAlarm',
        -            'NtQueryInformationToken', 'ZwQueryInformationToken', 'NtQuerySecurityObject',
        -            'ZwQuerySecurityObject', 'NtSetInformationToken', 'ZwSetInformationToken',
        -            'NtSetSecurityObject', 'ZwSetSecurityObject',
        -
        -            'NtAddAtom', 'ZwAddAtom', 'NtDeleteAtom', 'ZwDeleteAtom', 'NtFindAtom', 'ZwFindAtom',
        -            'NtQueryInformationAtom', 'ZwQueryInformationAtom',
        -
        -            'NtAlertResumeThread', 'ZwAlertResumeThread', 'NtAlertThread', 'ZwAlertThread',
        -            'NtCreateProcess', 'ZwCreateProcess', 'NtCreateThread', 'ZwCreateThread',
        -            'NtCurrentTeb', 'NtDelayExecution', 'ZwDelayExecution', 'NtGetContextThread',
        -            'ZwGetContextThread', 'NtOpenProcess', 'ZwOpenProcess', 'NtOpenThread',
        -            'ZwOpenThread', 'NtQueryInformationProcess', 'ZwQueryInformationProcess',
        -            'NtQueryInformationThread', 'ZwQueryInformationThread', 'NtQueueApcThread',
        -            'ZwQueueApcThread', 'NtResumeThread', 'ZwResumeThread', 'NtSetContextThread',
        -            'ZwSetContextThread', 'NtSetHighWaitLowThread', 'ZwSetHighWaitLowThread',
        -            'NtSetInformationProcess', 'ZwSetInformationProcess', 'NtSetInformationThread',
        -            'ZwSetInformationThread', 'NtSetLowWaitHighThread', 'ZwSetLowWaitHighThread',
        -            'NtSuspendThread', 'ZwSuspendThread', 'NtTerminateProcess', 'ZwTerminateProcess',
        -            'NtTerminateThread', 'ZwTerminateThread', 'NtTestAlert', 'ZwTestAlert',
        -            'NtYieldExecution', 'ZwYieldExecution',
        -
        -            'NtAllocateVirtualMemory', 'ZwAllocateVirtualMemory', 'NtAllocateVirtualMemory64',
        -            'ZwAllocateVirtualMemory64', 'NtAreMappedFilesTheSame', 'ZwAreMappedFilesTheSame',
        -            'NtCreateSection', 'ZwCreateSection', 'NtExtendSection', 'ZwExtendSection',
        -            'NtFlushVirtualMemory', 'ZwFlushVirtualMemory', 'NtFreeVirtualMemory',
        -            'ZwFreeVirtualMemory', 'NtFreeVirtualMemory64', 'ZwFreeVirtualMemory64',
        -            'NtLockVirtualMemory', 'ZwLockVirtualMemory', 'NtMapViewOfSection',
        -            'ZwMapViewOfSection', 'NtMapViewOfVlmSection', 'ZwMapViewOfVlmSection',
        -            'NtOpenSection', 'ZwOpenSection', 'NtProtectVirtualMemory', 'ZwProtectVirtualMemory',
        -            'NtProtectVirtualMemory64', 'ZwProtectVirtualMemory64', 'NtQueryVirtualMemory',
        -            'ZwQueryVirtualMemory', 'NtQueryVirtualMemory64', 'ZwQueryVirtualMemory64',
        -            'NtReadVirtualMemory', 'ZwReadVirtualMemory', 'NtReadVirtualMemory64',
        -            'ZwReadVirtualMemory64', 'NtUnlockVirtualMemory', 'ZwUnlockVirtualMemory',
        -            'NtUnmapViewOfSection', 'ZwUnmapViewOfSection', 'NtUnmapViewOfVlmSection',
        -            'ZwUnmapViewOfVlmSection', 'NtWriteVirtualMemory', 'ZwWriteVirtualMemory',
        -            'NtWriteVirtualMemory64', 'ZwWriteVirtualMemory64',
        -
        -            'NtAssignProcessToJobObject', 'ZwAssignProcessToJobObject', 'NtCreateJobObject',
        -            'ZwCreateJobObject', 'NtOpenJobObject', 'ZwOpenJobObject',
        -            'NtQueryInformationJobObject', 'ZwQueryInformationJobObject',
        -            'NtSetInformationJobObject', 'ZwSetInformationJobObject', 'NtTerminateJobObject',
        -            'ZwTerminateJobObject',
        -
        -            'NtCancelIoFile', 'ZwCancelIoFile', 'NtCreateFile', 'ZwCreateFile',
        -            'NtCreateIoCompletion', 'ZwCreateIoCompletion', 'NtDeleteFile', 'ZwDeleteFile',
        -            'NtDeviceIoControlFile', 'ZwDeviceIoControlFile', 'NtFlushBuffersFile',
        -            'ZwFlushBuffersFile', 'NtFsControlFile', 'ZwFsControlFile', 'NtLockFile', 'ZwLockFile',
        -            'NtNotifyChangeDirectoryFile', 'ZwNotifyChangeDirectoryFile', 'NtOpenFile',
        -            'ZwOpenFile', 'NtOpenIoCompletion', 'ZwOpenIoCompletion', 'NtQueryAttributesFile',
        -            'ZwQueryAttributesFile', 'NtQueryDirectoryFile', 'ZwQueryDirectoryFile',
        -            'NtQueryEaFile', 'ZwQueryEaFile', 'NtQueryIoCompletion', 'ZwQueryIoCompletion',
        -            'NtQueryQuotaInformationFile', 'ZwQueryQuotaInformationFile',
        -            'NtQueryVolumeInformationFile', 'ZwQueryVolumeInformationFile', 'NtReadFile',
        -            'ZwReadFile', 'NtReadFile64', 'ZwReadFile64', 'NtReadFileScatter', 'ZwReadFileScatter',
        -            'NtRemoveIoCompletion', 'ZwRemoveIoCompletion', 'NtSetEaFile', 'ZwSetEaFile',
        -            'NtSetInformationFile', 'ZwSetInformationFile', 'NtSetIoCompletion',
        -            'ZwSetIoCompletion', 'NtSetQuotaInformationFile', 'ZwSetQuotaInformationFile',
        -            'NtSetVolumeInformationFile', 'ZwSetVolumeInformationFile', 'NtUnlockFile',
        -            'ZwUnlockFile', 'NtWriteFile', 'ZwWriteFile', 'NtWriteFile64','ZwWriteFile64',
        -            'NtWriteFileGather', 'ZwWriteFileGather', 'NtQueryFullAttributesFile',
        -            'ZwQueryFullAttributesFile', 'NtQueryInformationFile', 'ZwQueryInformationFile',
        -
        -            'RtlAbortRXact', 'RtlAbsoluteToSelfRelativeSD', 'RtlAcquirePebLock',
        -            'RtlAcquireResourceExclusive', 'RtlAcquireResourceShared', 'RtlAddAccessAllowedAce',
        -            'RtlAddAccessDeniedAce', 'RtlAddAce', 'RtlAddActionToRXact', 'RtlAddAtomToAtomTable',
        -            'RtlAddAttributeActionToRXact', 'RtlAddAuditAccessAce', 'RtlAddCompoundAce',
        -            'RtlAdjustPrivilege', 'RtlAllocateAndInitializeSid', 'RtlAllocateHandle',
        -            'RtlAllocateHeap', 'RtlAnsiCharToUnicodeChar', 'RtlAnsiStringToUnicodeSize',
        -            'RtlAnsiStringToUnicodeString', 'RtlAppendAsciizToString', 'RtlAppendStringToString',
        -            'RtlAppendUnicodeStringToString', 'RtlAppendUnicodeToString', 'RtlApplyRXact',
        -            'RtlApplyRXactNoFlush', 'RtlAreAllAccessesGranted', 'RtlAreAnyAccessesGranted',
        -            'RtlAreBitsClear', 'RtlAreBitsSet', 'RtlAssert', 'RtlCaptureStackBackTrace',
        -            'RtlCharToInteger', 'RtlCheckRegistryKey', 'RtlClearAllBits', 'RtlClearBits',
        -            'RtlClosePropertySet', 'RtlCompactHeap', 'RtlCompareMemory', 'RtlCompareMemoryUlong',
        -            'RtlCompareString', 'RtlCompareUnicodeString', 'RtlCompareVariants',
        -            'RtlCompressBuffer', 'RtlConsoleMultiByteToUnicodeN', 'RtlConvertExclusiveToShared',
        -            'RtlConvertLongToLargeInteger', 'RtlConvertPropertyToVariant',
        -            'RtlConvertSharedToExclusive', 'RtlConvertSidToUnicodeString',
        -            'RtlConvertUiListToApiList', 'RtlConvertUlongToLargeInteger',
        -            'RtlConvertVariantToProperty', 'RtlCopyLuid', 'RtlCopyLuidAndAttributesArray',
        -            'RtlCopySecurityDescriptor', 'RtlCopySid', 'RtlCopySidAndAttributesArray',
        -            'RtlCopyString', 'RtlCopyUnicodeString', 'RtlCreateAcl', 'RtlCreateAndSetSD',
        -            'RtlCreateAtomTable', 'RtlCreateEnvironment', 'RtlCreateHeap',
        -            'RtlCreateProcessParameters', 'RtlCreatePropertySet', 'RtlCreateQueryDebugBuffer',
        -            'RtlCreateRegistryKey', 'RtlCreateSecurityDescriptor', 'RtlCreateTagHeap',
        -            'RtlCreateUnicodeString', 'RtlCreateUnicodeStringFromAsciiz', 'RtlCreateUserProcess',
        -            'RtlCreateUserSecurityObject', 'RtlCreateUserThread', 'RtlCustomCPToUnicodeN',
        -            'RtlCutoverTimeToSystemTime', 'RtlDecompressBuffer', 'RtlDecompressFragment',
        -            'RtlDelete', 'RtlDeleteAce', 'RtlDeleteAtomFromAtomTable', 'RtlDeleteCriticalSection',
        -            'RtlDeleteElementGenericTable', 'RtlDeleteNoSplay', 'RtlDeleteRegistryValue',
        -            'RtlDeleteResource', 'RtlDeleteSecurityObject', 'RtlDeNormalizeProcessParams',
        -            'RtlDestroyAtomTable', 'RtlDestroyEnvironment', 'RtlDestroyHandleTable',
        -            'RtlDestroyHeap', 'RtlDestroyProcessParameters', 'RtlDestroyQueryDebugBuffer',
        -            'RtlDetermineDosPathNameType_U', 'RtlDoesFileExists_U', 'RtlDosPathNameToNtPathName_U',
        -            'RtlDosSearchPath_U', 'RtlDowncaseUnicodeString', 'RtlDumpResource',
        -            'RtlEmptyAtomTable', 'RtlEnlargedIntegerMultiply', 'RtlEnlargedUnsignedDivide',
        -            'RtlEnlargedUnsignedMultiply', 'RtlEnterCriticalSection', 'RtlEnumerateGenericTable',
        -            'RtlEnumerateGenericTableWithoutSplaying', 'RtlEnumerateProperties',
        -            'RtlEnumProcessHeaps', 'RtlEqualComputerName', 'RtlEqualDomainName', 'RtlEqualLuid',
        -            'RtlEqualPrefixSid', 'RtlEqualSid', 'RtlEqualString', 'RtlEqualUnicodeString',
        -            'RtlEraseUnicodeString', 'RtlExpandEnvironmentStrings_U', 'RtlExtendedIntegerMultiply',
        -            'RtlExtendedLargeIntegerDivide', 'RtlExtendedMagicDivide', 'RtlExtendHeap',
        -            'RtlFillMemory', 'RtlFillMemoryUlong', 'RtlFindClearBits', 'RtlFindClearBitsAndSet',
        -            'RtlFindLongestRunClear', 'RtlFindLongestRunSet', 'RtlFindMessage', 'RtlFindSetBits',
        -            'RtlFindSetBitsAndClear', 'RtlFirstFreeAce', 'RtlFlushPropertySet',
        -            'RtlFormatCurrentUserKeyPath', 'RtlFormatMessage', 'RtlFreeAnsiString',
        -            'RtlFreeHandle', 'RtlFreeHeap', 'RtlFreeOemString', 'RtlFreeSid',
        -            'RtlFreeUnicodeString', 'RtlFreeUserThreadStack', 'RtlGenerate8dot3Name', 'RtlGetAce',
        -            'RtlGetCallersAddress', 'RtlGetCompressionWorkSpaceSize',
        -            'RtlGetControlSecurityDescriptor', 'RtlGetCurrentDirectory_U',
        -            'RtlGetDaclSecurityDescriptor', 'RtlGetElementGenericTable', 'RtlGetFullPathName_U',
        -            'RtlGetGroupSecurityDescriptor', 'RtlGetLongestNtPathLength', 'RtlGetNtGlobalFlags',
        -            'RtlGetNtProductType', 'RtlGetOwnerSecurityDescriptor', 'RtlGetProcessHeaps',
        -            'RtlGetSaclSecurityDescriptor', 'RtlGetUserInfoHeap', 'RtlGuidToPropertySetName',
        -            'RtlIdentifierAuthoritySid', 'RtlImageDirectoryEntryToData', 'RtlImageNtHeader',
        -            'RtlImageRvaToSection', 'RtlImageRvaToVa', 'RtlImpersonateSelf', 'RtlInitAnsiString',
        -            'RtlInitCodePageTable', 'RtlInitializeAtomPackage', 'RtlInitializeBitMap',
        -            'RtlInitializeContext', 'RtlInitializeCriticalSection',
        -            'RtlInitializeCriticalSectionAndSpinCount', 'RtlInitializeGenericTable',
        -            'RtlInitializeHandleTable', 'RtlInitializeResource', 'RtlInitializeRXact',
        -            'RtlInitializeSid', 'RtlInitNlsTables', 'RtlInitString', 'RtlInitUnicodeString',
        -            'RtlInsertElementGenericTable', 'RtlIntegerToChar', 'RtlIntegerToUnicodeString',
        -            'RtlIsDosDeviceName_U', 'RtlIsGenericTableEmpty', 'RtlIsNameLegalDOS8Dot3',
        -            'RtlIsTextUnicode', 'RtlIsValidHandle', 'RtlIsValidIndexHandle', 'RtlLargeIntegerAdd',
        -            'RtlLargeIntegerArithmeticShift', 'RtlLargeIntegerDivide', 'RtlLargeIntegerNegate',
        -            'RtlLargeIntegerShiftLeft', 'RtlLargeIntegerShiftRight', 'RtlLargeIntegerSubtract',
        -            'RtlLargeIntegerToChar', 'RtlLeaveCriticalSection', 'RtlLengthRequiredSid',
        -            'RtlLengthSecurityDescriptor', 'RtlLengthSid', 'RtlLocalTimeToSystemTime',
        -            'RtlLockHeap', 'RtlLookupAtomInAtomTable', 'RtlLookupElementGenericTable',
        -            'RtlMakeSelfRelativeSD', 'RtlMapGenericMask', 'RtlMoveMemory',
        -            'RtlMultiByteToUnicodeN', 'RtlMultiByteToUnicodeSize', 'RtlNewInstanceSecurityObject',
        -            'RtlNewSecurityGrantedAccess', 'RtlNewSecurityObject', 'RtlNormalizeProcessParams',
        -            'RtlNtStatusToDosError', 'RtlNumberGenericTableElements', 'RtlNumberOfClearBits',
        -            'RtlNumberOfSetBits', 'RtlOemStringToUnicodeSize', 'RtlOemStringToUnicodeString',
        -            'RtlOemToUnicodeN', 'RtlOnMappedStreamEvent', 'RtlOpenCurrentUser',
        -            'RtlPcToFileHeader', 'RtlPinAtomInAtomTable', 'RtlpNtCreateKey',
        -            'RtlpNtEnumerateSubKey', 'RtlpNtMakeTemporaryKey', 'RtlpNtOpenKey',
        -            'RtlpNtQueryValueKey', 'RtlpNtSetValueKey', 'RtlPrefixString',
        -            'RtlPrefixUnicodeString', 'RtlPropertySetNameToGuid', 'RtlProtectHeap',
        -            'RtlpUnWaitCriticalSection', 'RtlpWaitForCriticalSection', 'RtlQueryAtomInAtomTable',
        -            'RtlQueryEnvironmentVariable_U', 'RtlQueryInformationAcl',
        -            'RtlQueryProcessBackTraceInformation', 'RtlQueryProcessDebugInformation',
        -            'RtlQueryProcessHeapInformation', 'RtlQueryProcessLockInformation',
        -            'RtlQueryProperties', 'RtlQueryPropertyNames', 'RtlQueryPropertySet',
        -            'RtlQueryRegistryValues', 'RtlQuerySecurityObject', 'RtlQueryTagHeap',
        -            'RtlQueryTimeZoneInformation', 'RtlRaiseException', 'RtlRaiseStatus', 'RtlRandom',
        -            'RtlReAllocateHeap', 'RtlRealPredecessor', 'RtlRealSuccessor', 'RtlReleasePebLock',
        -            'RtlReleaseResource', 'RtlRemoteCall', 'RtlResetRtlTranslations',
        -            'RtlRunDecodeUnicodeString', 'RtlRunEncodeUnicodeString', 'RtlSecondsSince1970ToTime',
        -            'RtlSecondsSince1980ToTime', 'RtlSelfRelativeToAbsoluteSD', 'RtlSetAllBits',
        -            'RtlSetAttributesSecurityDescriptor', 'RtlSetBits', 'RtlSetCriticalSectionSpinCount',
        -            'RtlSetCurrentDirectory_U', 'RtlSetCurrentEnvironment', 'RtlSetDaclSecurityDescriptor',
        -            'RtlSetEnvironmentVariable', 'RtlSetGroupSecurityDescriptor', 'RtlSetInformationAcl',
        -            'RtlSetOwnerSecurityDescriptor', 'RtlSetProperties', 'RtlSetPropertyNames',
        -            'RtlSetPropertySetClassId', 'RtlSetSaclSecurityDescriptor', 'RtlSetSecurityObject',
        -            'RtlSetTimeZoneInformation', 'RtlSetUnicodeCallouts', 'RtlSetUserFlagsHeap',
        -            'RtlSetUserValueHeap', 'RtlSizeHeap', 'RtlSplay', 'RtlStartRXact',
        -            'RtlSubAuthorityCountSid', 'RtlSubAuthoritySid', 'RtlSubtreePredecessor',
        -            'RtlSubtreeSuccessor', 'RtlSystemTimeToLocalTime', 'RtlTimeFieldsToTime',
        -            'RtlTimeToElapsedTimeFields', 'RtlTimeToSecondsSince1970', 'RtlTimeToSecondsSince1980',
        -            'RtlTimeToTimeFields', 'RtlTryEnterCriticalSection', 'RtlUnicodeStringToAnsiSize',
        -            'RtlUnicodeStringToAnsiString', 'RtlUnicodeStringToCountedOemString',
        -            'RtlUnicodeStringToInteger', 'RtlUnicodeStringToOemSize',
        -            'RtlUnicodeStringToOemString', 'RtlUnicodeToCustomCPN', 'RtlUnicodeToMultiByteN',
        -            'RtlUnicodeToMultiByteSize', 'RtlUnicodeToOemN', 'RtlUniform', 'RtlUnlockHeap',
        -            'RtlUnwind', 'RtlUpcaseUnicodeChar', 'RtlUpcaseUnicodeString',
        -            'RtlUpcaseUnicodeStringToAnsiString', 'RtlUpcaseUnicodeStringToCountedOemString',
        -            'RtlUpcaseUnicodeStringToOemString', 'RtlUpcaseUnicodeToCustomCPN',
        -            'RtlUpcaseUnicodeToMultiByteN', 'RtlUpcaseUnicodeToOemN', 'RtlUpperChar',
        -            'RtlUpperString', 'RtlUsageHeap', 'RtlValidAcl', 'RtlValidateHeap',
        -            'RtlValidateProcessHeaps', 'RtlValidSecurityDescriptor', 'RtlValidSid', 'RtlWalkHeap',
        -            'RtlWriteRegistryValue', 'RtlxAnsiStringToUnicodeSize', 'RtlxOemStringToUnicodeSize',
        -            'RtlxUnicodeStringToAnsiSize', 'RtlxUnicodeStringToOemSize', 'RtlZeroHeap',
        -            'RtlZeroMemory',
        -
        -            'NtCancelTimer', 'ZwCancelTimer', 'NtCreateTimer', 'ZwCreateTimer', 'NtGetTickCount',
        -            'ZwGetTickCount', 'NtOpenTimer', 'ZwOpenTimer', 'NtQueryPerformanceCounter',
        -            'ZwQueryPerformanceCounter', 'NtQuerySystemTime', 'ZwQuerySystemTime', 'NtQueryTimer',
        -            'ZwQueryTimer', 'NtQueryTimerResolution', 'ZwQueryTimerResolution', 'NtSetSystemTime',
        -            'ZwSetSystemTime', 'NtSetTimer', 'ZwSetTimer', 'NtSetTimerResolution',
        -            'ZwSetTimerResolution',
        -
        -            'NtClearEvent', 'ZwClearEvent', 'NtCreateEvent', 'ZwCreateEvent', 'NtCreateEventPair',
        -            'ZwCreateEventPair', 'NtCreateMutant', 'ZwCreateMutant', 'NtCreateSemaphore',
        -            'ZwCreateSemaphore', 'NtOpenEvent', 'ZwOpenEvent', 'NtOpenEventPair',
        -            'ZwOpenEventPair', 'NtOpenMutant', 'ZwOpenMutant', 'NtOpenSemaphore',
        -            'ZwOpenSemaphore', 'NtPulseEvent', 'ZwPulseEvent', 'NtQueryEvent', 'ZwQueryEvent',
        -            'NtQueryMutant', 'ZwQueryMutant', 'NtQuerySemaphore', 'ZwQuerySemaphore',
        -            'NtReleaseMutant', 'ZwReleaseMutant', 'NtReleaseProcessMutant',
        -            'ZwReleaseProcessMutant', 'NtReleaseSemaphore', 'ZwReleaseSemaphore',
        -            'NtReleaseThreadMutant', 'ZwReleaseThreadMutant', 'NtResetEvent', 'ZwResetEvent',
        -            'NtSetEvent', 'ZwSetEvent', 'NtSetHighEventPair', 'ZwSetHighEventPair',
        -            'NtSetHighWaitLowEventPair', 'ZwSetHighWaitLowEventPair', 'NtSetLowEventPair',
        -            'ZwSetLowEventPair', 'NtSetLowWaitHighEventPair', 'ZwSetLowWaitHighEventPair',
        -            'NtSignalAndWaitForSingleObject', 'ZwSignalAndWaitForSingleObject',
        -            'NtWaitForMultipleObjects', 'ZwWaitForMultipleObjects', 'NtWaitForSingleObject',
        -            'ZwWaitForSingleObject', 'NtWaitHighEventPair', 'ZwWaitHighEventPair',
        -            'NtWaitLowEventPair', 'ZwWaitLowEventPair',
        -
        -            'NtClose', 'ZwClose', 'NtCreateDirectoryObject', 'ZwCreateDirectoryObject',
        -            'NtCreateSymbolicLinkObject', 'ZwCreateSymbolicLinkObject',
        -            'NtDuplicateObject', 'ZwDuplicateObject', 'NtMakeTemporaryObject',
        -            'ZwMakeTemporaryObject', 'NtOpenDirectoryObject', 'ZwOpenDirectoryObject',
        -            'NtOpenSymbolicLinkObject', 'ZwOpenSymbolicLinkObject', 'NtQueryDirectoryObject',
        -            'ZwQueryDirectoryObject', 'NtQueryObject', 'ZwQueryObject',
        -            'NtQuerySymbolicLinkObject', 'ZwQuerySymbolicLinkObject', 'NtSetInformationObject',
        -            'ZwSetInformationObject',
        -
        -            'NtContinue', 'ZwContinue', 'NtRaiseException', 'ZwRaiseException',
        -            'NtRaiseHardError', 'ZwRaiseHardError', 'NtSetDefaultHardErrorPort',
        -            'ZwSetDefaultHardErrorPort',
        -
        -            'NtCreateChannel', 'ZwCreateChannel', 'NtListenChannel', 'ZwListenChannel',
        -            'NtOpenChannel', 'ZwOpenChannel', 'NtReplyWaitSendChannel', 'ZwReplyWaitSendChannel',
        -            'NtSendWaitReplyChannel', 'ZwSendWaitReplyChannel', 'NtSetContextChannel',
        -            'ZwSetContextChannel',
        -
        -            'NtCreateKey', 'ZwCreateKey', 'NtDeleteKey', 'ZwDeleteKey', 'NtDeleteValueKey',
        -            'ZwDeleteValueKey', 'NtEnumerateKey', 'ZwEnumerateKey', 'NtEnumerateValueKey',
        -            'ZwEnumerateValueKey', 'NtFlushKey', 'ZwFlushKey', 'NtInitializeRegistry',
        -            'ZwInitializeRegistry', 'NtLoadKey', 'ZwLoadKey', 'NtLoadKey2', 'ZwLoadKey2',
        -            'NtNotifyChangeKey', 'ZwNotifyChangeKey', 'NtOpenKey', 'ZwOpenKey', 'NtQueryKey',
        -            'ZwQueryKey', 'NtQueryMultipleValueKey', 'ZwQueryMultipleValueKey',
        -            'NtQueryMultiplValueKey', 'ZwQueryMultiplValueKey', 'NtQueryValueKey',
        -            'ZwQueryValueKey', 'NtReplaceKey', 'ZwReplaceKey', 'NtRestoreKey', 'ZwRestoreKey',
        -            'NtSaveKey', 'ZwSaveKey', 'NtSetInformationKey', 'ZwSetInformationKey',
        -            'NtSetValueKey', 'ZwSetValueKey', 'NtUnloadKey', 'ZwUnloadKey',
        -
        -            'NtCreateMailslotFile', 'ZwCreateMailslotFile', 'NtCreateNamedPipeFile',
        -            'ZwCreateNamedPipeFile', 'NtCreatePagingFile', 'ZwCreatePagingFile',
        -
        -            'NtCreateProfile', 'ZwCreateProfile', 'NtQueryIntervalProfile',
        -            'ZwQueryIntervalProfile', 'NtRegisterThreadTerminatePort',
        -            'ZwRegisterThreadTerminatePort', 'NtSetIntervalProfile', 'ZwSetIntervalProfile',
        -            'NtStartProfile', 'ZwStartProfile', 'NtStopProfile', 'ZwStopProfile',
        -            'NtSystemDebugControl', 'ZwSystemDebugControl',
        -
        -            'NtEnumerateBus', 'ZwEnumerateBus', 'NtFlushInstructionCache',
        -            'ZwFlushInstructionCache', 'NtFlushWriteBuffer', 'ZwFlushWriteBuffer',
        -            'NtSetLdtEntries', 'ZwSetLdtEntries',
        -
        -            'NtGetPlugPlayEvent', 'ZwGetPlugPlayEvent', 'NtPlugPlayControl', 'ZwPlugPlayControl',
        -
        -            'NtInitiatePowerAction', 'ZwInitiatePowerAction', 'NtPowerInformation',
        -            'ZwPowerInformation', 'NtRequestWakeupLatency', 'ZwRequestWakeupLatency',
        -            'NtSetSystemPowerState', 'ZwSetSystemPowerState', 'NtSetThreadExecutionState',
        -            'ZwSetThreadExecutionState',
        -
        -            'NtLoadDriver', 'ZwLoadDriver', 'NtRegisterNewDevice', 'ZwRegisterNewDevice',
        -            'NtUnloadDriver', 'ZwUnloadDriver',
        -
        -            'NtQueryDefaultLocale', 'ZwQueryDefaultLocale', 'NtQueryDefaultUILanguage',
        -            'ZwQueryDefaultUILanguage', 'NtQuerySystemEnvironmentValue',
        -            'ZwQuerySystemEnvironmentValue', 'NtSetDefaultLocale', 'ZwSetDefaultLocale',
        -            'NtSetDefaultUILanguage', 'ZwSetDefaultUILanguage', 'NtSetSystemEnvironmentValue',
        -            'ZwSetSystemEnvironmentValue',
        -
        -            'DbgBreakPoint', 'DbgPrint', 'DbgPrompt', 'DbgSsHandleKmApiMsg', 'DbgSsInitialize',
        -            'DbgUiConnectToDbg', 'DbgUiContinue', 'DbgUiWaitStateChange', 'DbgUserBreakPoint',
        -            'KiRaiseUserExceptionDispatcher', 'KiUserApcDispatcher', 'KiUserCallbackDispatcher',
        -            'KiUserExceptionDispatcher', 'NlsAnsiCodePage', 'NlsMbCodePageTag',
        -            'NlsMbOemCodePageTag', 'NtAllocateLocallyUniqueId', 'ZwAllocateLocallyUniqueId',
        -            'NtAllocateUuids', 'ZwAllocateUuids', 'NtCallbackReturn', 'ZwCallbackReturn',
        -            'NtDisplayString', 'ZwDisplayString', 'NtQueryOleDirectoryFile',
        -            'ZwQueryOleDirectoryFile', 'NtQuerySection', 'ZwQuerySection',
        -            'NtQuerySystemInformation', 'ZwQuerySystemInformation', 'NtSetSystemInformation',
        -            'ZwSetSystemInformation', 'NtShutdownSystem', 'ZwShutdownSystem', 'NtVdmControl',
        -            'ZwVdmControl', 'NtW32Call', 'ZwW32Call', 'PfxFindPrefix', 'PfxInitialize',
        -            'PfxInsertPrefix', 'PfxRemovePrefix', 'PropertyLengthAsVariant', 'RestoreEm87Context',
        -            'SaveEm87Context'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']',
        -        '+', '-', '*', '/', '%',
        -        '=', '<', '>',
        -        '!', '^', '&', '|',
        -        '?', ':',
        -        ';', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #993333;',
        -            5 => 'color: #4000dd;',
        -            6 => 'color: #4000dd;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #339933;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
        -        4 => '',
        -        5 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
        -        6 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php
        deleted file mode 100644
        index 8408f29c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php
        +++ /dev/null
        @@ -1,124 +0,0 @@
        - 'CAD DCL',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'boxed_column','boxed_radio_column','boxed_radio_row','boxed_row',
        -            'column','concatenation','button','dialog','edit_box','image','image_button',
        -            'errtile','list_box','ok_cancel','ok_cancel_help','ok_cancel_help_errtile',
        -            'ok_cancel_help_info','ok_only','paragraph','popup_list','radio_button',
        -            'radio_column','radio_row','row','slider','spacer','spacer_0','spacer_1','text',
        -            'text_part','toggle',
        -            'action','alignment','allow_accept','aspect_ratio','big_increment',
        -            'children_alignment','children_fixed_height',
        -            'children_fixed_width','color',
        -            'edit_limit','edit_width','fixed_height','fixed_width',
        -            'height','initial_focus','is_cancel','is_default',
        -            'is_enabled','is_tab_stop','is-bold','key','label','layout','list',
        -            'max_value','min_value','mnemonic','multiple_select','password_char',
        -            'small_increment','tabs','tab_truncate','value','width',
        -            'false','true','left','right','centered','top','bottom',
        -            'dialog_line','dialog_foreground','dialog_background',
        -            'graphics_background','black','red','yellow','green','cyan',
        -            'blue','magenta','whitegraphics_foreground',
        -            'horizontal','vertical'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php
        deleted file mode 100644
        index 6a913753..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php
        +++ /dev/null
        @@ -1,184 +0,0 @@
        - 'CAD Lisp',
        -    'COMMENT_SINGLE' => array(1 => ";"),
        -    'COMMENT_MULTI' => array(";|" => "|;"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abs','acad_colordlg','acad_helpdlg','acad_strlsort','action_tile',
        -            'add_list','alert','alloc','and','angle','angtof','angtos','append','apply',
        -            'arx','arxload','arxunload','ascii','assoc','atan','atof','atoi','atom',
        -            'atoms-family','autoarxload','autoload','Boole','boundp','caddr',
        -            'cadr','car','cdr','chr','client_data_tile','close','command','cond',
        -            'cons','cos','cvunit','defun','defun-q','defun-q-list-ref',
        -            'defun-q-list-set','dictadd','dictnext','dictremove','dictrename',
        -            'dictsearch','dimx_tile','dimy_tile','distance','distof','done_dialog',
        -            'end_image','end_list','entdel','entget','entlast','entmake',
        -            'entmakex','entmod','entnext','entsel','entupd','eq','equal','eval','exit',
        -            'exp','expand','expt','fill_image','findfile','fix','float','foreach','function',
        -            'gc','gcd','get_attr','get_tile','getangle','getcfg','getcname','getcorner',
        -            'getdist','getenv','getfiled','getint','getkword','getorient','getpoint',
        -            'getreal','getstring','getvar','graphscr','grclear','grdraw','grread','grtext',
        -            'grvecs','handent','help','if','initdia','initget','inters','itoa','lambda','last',
        -            'layoutlist','length','list','listp','load','load_dialog','log','logand','logior',
        -            'lsh','mapcar','max','mem','member','menucmd','menugroup','min','minusp','mode_tile',
        -            'namedobjdict','nentsel','nentselp','new_dialog','nil','not','nth','null',
        -            'numberp','open','or','osnap','polar','prin1','princ','print','progn','prompt',
        -            'quit','quote','read','read-char','read-line','redraw','regapp','rem','repeat',
        -            'reverse','rtos','set','set_tile','setcfg','setenv','setfunhelp','setq','setvar',
        -            'setview','sin','slide_image','snvalid','sqrt','ssadd','ssdel','ssget','ssgetfirst',
        -            'sslength','ssmemb','ssname','ssnamex','sssetfirst','start_dialog','start_image',
        -            'start_list','startapp','strcase','strcat','strlen','subst','substr','t','tablet',
        -            'tblnext','tblobjname','tblsearch','term_dialog','terpri','textbox','textpage',
        -            'textscr','trace','trans','type','unload_dialog','untrace','vector_image','ver',
        -            'vports','wcmatch','while','write-char','write-line','xdroom','xdsize','zerop',
        -            'vl-acad-defun','vl-acad-undefun','vl-arx-import','vlax-3D-point',
        -            'vlax-add-cmd','vlax-create-object','vlax-curve-getArea',
        -            'vlax-curve-getClosestPointTo','vlax-curve-getClosestPointToProjection',
        -            'vlax-curve-getDistAtParam','vlax-curve-getDistAtPoint',
        -            'vlax-curve-getEndParam','vlax-curve-getEndPoint',
        -            'vlax-curve-getFirstDeriv','vlax-curve-getParamAtDist',
        -            'vlax-curve-getParamAtPoint','vlax-curve-getPointAtDist',
        -            'vlax-curve-getPointAtParam','vlax-curve-getSecondDeriv',
        -            'vlax-curve-getStartParam','vlax-curve-getStartPoint',
        -            'vlax-curve-isClosed','vlax-curve-isPeriodic','vlax-curve-isPlanar',
        -            'vlax-dump-object','vlax-erased-p','vlax-for','vlax-get-acad-object',
        -            'vlax-get-object','vlax-get-or-create-object','vlax-get-property',
        -            'vlax-import-type-library','vlax-invoke-method','vlax-ldata-delete',
        -            'vlax-ldata-get','vlax-ldata-list','vlax-ldata-put','vlax-ldata-test',
        -            'vlax-make-safearray','vlax-make-variant','vlax-map-collection',
        -            'vlax-method-applicable-p','vlax-object-released-p','vlax-product-key',
        -            'vlax-property-available-p','vlax-put-property','vlax-read-enabled-p',
        -            'vlax-release-object','vlax-remove-cmd','vlax-safearray-fill',
        -            'vlax-safearray-get-dim','vlax-safearray-get-element',
        -            'vlax-safearray-get-l-bound','vlax-safearray-get-u-bound',
        -            'vlax-safearray-put-element','vlax-safearray-type','vlax-tmatrix',
        -            'vlax-typeinfo-available-p','vlax-variant-change-type',
        -            'vlax-variant-type','vlax-variant-value','vlax-write-enabled-p',
        -            'vl-bb-ref','vl-bb-set','vl-catch-all-apply','vl-catch-all-error-message',
        -            'vl-catch-all-error-p','vl-cmdf','vl-consp','vl-directory-files','vl-doc-export',
        -            'vl-doc-import','vl-doc-ref','vl-doc-set','vl-every','vl-exit-with-error',
        -            'vl-exit-with-value','vl-file-copy','vl-file-delete','vl-file-directory-p',
        -            'vl-filename-base','vl-filename-directory','vl-filename-extension',
        -            'vl-filename-mktemp','vl-file-rename','vl-file-size','vl-file-systime',
        -            'vl-get-resource','vlisp-compile','vl-list-exported-functions',
        -            'vl-list-length','vl-list-loaded-vlx','vl-load-all','vl-load-com',
        -            'vl-load-reactors','vl-member-if','vl-member-if-not','vl-position',
        -            'vl-prin1-to-string','vl-princ-to-string','vl-propagate','vlr-acdb-reactor',
        -            'vlr-add','vlr-added-p','vlr-beep-reaction','vlr-command-reactor',
        -            'vlr-current-reaction-name','vlr-data','vlr-data-set',
        -            'vlr-deepclone-reactor','vlr-docmanager-reactor','vlr-dwg-reactor',
        -            'vlr-dxf-reactor','vlr-editor-reactor','vl-registry-delete',
        -            'vl-registry-descendents','vl-registry-read','vl-registry-write',
        -            'vl-remove','vl-remove-if','vl-remove-if-not','vlr-insert-reactor',
        -            'vlr-linker-reactor','vlr-lisp-reactor','vlr-miscellaneous-reactor',
        -            'vlr-mouse-reactor','vlr-notification','vlr-object-reactor',
        -            'vlr-owner-add','vlr-owner-remove','vlr-owners','vlr-pers','vlr-pers-list',
        -            'vlr-pers-p','vlr-pers-release','vlr-reaction-names','vlr-reactions',
        -            'vlr-reaction-set','vlr-reactors','vlr-remove','vlr-remove-all',
        -            'vlr-set-notification','vlr-sysvar-reactor','vlr-toolbar-reactor',
        -            'vlr-trace-reaction','vlr-type','vlr-types','vlr-undo-reactor',
        -            'vlr-wblock-reactor','vlr-window-reactor','vlr-xref-reactor',
        -            'vl-some','vl-sort','vl-sort-i','vl-string-elt','vl-string-left-trim',
        -            'vl-string-mismatch','vl-string-position','vl-string-right-trim',
        -            'vl-string-search','vl-string-subst','vl-string-translate','vl-string-trim',
        -            'vl-symbol-name','vl-symbolp','vl-symbol-value','vl-unload-vlx','vl-vbaload',
        -            'vl-vbarun','vl-vlx-loaded-p'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php
        deleted file mode 100644
        index 788e0564..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php
        +++ /dev/null
        @@ -1,122 +0,0 @@
        -
        - * Copyright: (c) 2006 John Horigan http://www.ozonehouse.com/john/
        - * Release Version: 1.0.8.12
        - * Date Started: 2006/03/11
        - *
        - * CFDG language file for GeSHi.
        - *
        - * CHANGES
        - * -------
        - * 2006/03/11 (1.0.0)
        - *  -  First Release
        - *
        - * TODO (updated 2006/03/11)
        - * -------------------------
        - *
        - *************************************************************************************
        - *
        - *     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' => 'CFDG',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'include', 'startshape', 'rule', 'background'
        -            ),
        -        2 => array(
        -            'SQUARE', 'CIRCLE', 'TRIANGLE',
        -            ),
        -        3 => array(
        -            'b','brightness','h','hue','sat','saturation',
        -            'a','alpha','x','y','z','s','size',
        -            'r','rotate','f','flip','skew','xml_set_object'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '{', '}', '*', '|'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #717100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #006666;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php
        deleted file mode 100644
        index c0454660..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php
        +++ /dev/null
        @@ -1,297 +0,0 @@
        - 'ColdFusion',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        /* CFM Tags */
        -        1 => array(
        -            'cfabort', 'cfapplet', 'cfapplication', 'cfargument', 'cfassociate',
        -            'cfbreak', 'cfcache', 'cfcase', 'cfcatch', 'cfchart', 'cfchartdata',
        -            'cfchartseries', 'cfcol', 'cfcollection', 'cfcomponent',
        -            'cfcontent', 'cfcookie', 'cfdefaultcase', 'cfdirectory',
        -            'cfdocument', 'cfdocumentitem', 'cfdocumentsection', 'cfdump',
        -            'cfelse', 'cfelseif', 'cferror', 'cfexecute', 'cfexit', 'cffile',
        -            'cfflush', 'cfform', 'cfformgroup', 'cfformitem', 'cfftp',
        -            'cffunction', 'cfgrid', 'cfgridcolumn', 'cfgridrow', 'cfgridupdate',
        -            'cfheader', 'cfhtmlhead', 'cfhttp', 'cfhttpparam', 'cfif',
        -            'cfimport', 'cfinclude', 'cfindex', 'cfinput', 'cfinsert',
        -            'cfinvoke', 'cfinvokeargument', 'cfldap', 'cflocation', 'cflock',
        -            'cflog', 'cflogin', 'cfloginuser', 'cflogout', 'cfloop', 'cfmail',
        -            'cfmailparam', 'cfmailpart', 'cfmodule', 'cfNTauthenticate',
        -            'cfobject', 'cfobjectcache', 'cfoutput', 'cfparam', 'cfpop',
        -            'cfprocessingdirective', 'cfprocparam',
        -            'cfprocresult', 'cfproperty', 'cfquery', 'cfqueryparam',
        -            'cfregistry', 'cfreport', 'cfreportparam', 'cfrethrow', 'cfreturn',
        -            'cfsavecontent', 'cfschedule', 'cfscript', 'cfsearch', 'cfselect',
        -            'cfset', 'cfsetting', 'cfsilent', 'cfstoredproc',
        -            'cfswitch', 'cftable', 'cftextarea', 'cfthrow', 'cftimer',
        -            'cftrace', 'cftransaction', 'cftree', 'cftreeitem', 'cftry',
        -            'cfupdate', 'cfwddx'
        -            ),
        -        /* HTML Tags */
        -        2 => array(
        -            'a', 'abbr', 'acronym', 'address', 'applet',
        -
        -            'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
        -
        -            'caption', 'center', 'cite', 'code', 'colgroup', 'col',
        -
        -            'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
        -
        -            'em',
        -
        -            'fieldset', 'font', 'form', 'frame', 'frameset',
        -
        -            'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
        -
        -            'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
        -
        -            'kbd',
        -
        -            'label', 'legend', 'link', 'li',
        -
        -            'map', 'meta',
        -
        -            'noframes', 'noscript',
        -
        -            'object', 'ol', 'optgroup', 'option',
        -
        -            'param', 'pre', 'p',
        -
        -            'q',
        -
        -            'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
        -
        -            'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
        -
        -            'ul', 'u',
        -
        -            'var',
        -            ),
        -        /* HTML attributes */
        -        3 => array(
        -            'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
        -            'background', 'bgcolor', 'border',
        -            'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
        -            'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
        -            'enctype',
        -            'face', 'for', 'frame', 'frameborder',
        -            'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
        -            'id', 'ismap',
        -            'label', 'lang', 'language', 'link', 'longdesc',
        -            'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
        -            'name', 'nohref', 'noresize', 'noshade', 'nowrap',
        -            'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
        -            'profile', 'prompt',
        -            'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
        -            'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
        -            'tabindex', 'target', 'text', 'title', 'type',
        -            'usemap',
        -            'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
        -            'width'
        -            ),
        -        /* CFM Script delimeters */
        -        4 => array(
        -            'var', 'function', 'while', 'if','else'
        -            ),
        -        /* CFM Functions */
        -        5 => array(
        -            'Abs', 'GetFunctionList', 'LSTimeFormat','ACos','GetGatewayHelper','LTrim','AddSOAPRequestHeader','GetHttpRequestData',
        -            'Max','AddSOAPResponseHeader','GetHttpTimeString','Mid','ArrayAppend','GetLocale','Min','ArrayAvg','GetLocaleDisplayName',
        -            'Minute','ArrayClear','GetMetaData','Month','ArrayDeleteAt','GetMetricData','MonthAsString','ArrayInsertAt','GetPageContext',
        -            'Now','ArrayIsEmpty','GetProfileSections','NumberFormat','ArrayLen','GetProfileString','ParagraphFormat','ArrayMax',
        -            'GetLocalHostIP','ParseDateTime','ArrayMin','GetSOAPRequest','Pi','ArrayNew','GetSOAPRequestHeader','PreserveSingleQuotes',
        -            'ArrayPrepend','GetSOAPResponse','Quarter','ArrayResize','GetSOAPResponseHeader','QueryAddColumn','ArraySet',
        -            'GetTempDirectory','QueryAddRow','ArraySort','QueryNew','ArraySum','GetTempFile','QuerySetCell',
        -            'ArraySwap','GetTickCount','QuotedValueList','ArrayToList','GetTimeZoneInfo','Rand','Asc','GetToken','Randomize',
        -            'ASin','Hash','RandRange','Atn','Hour','REFind','BinaryDecode','HTMLCodeFormat','REFindNoCase','BinaryEncode',
        -            'HTMLEditFormat','ReleaseComObject','BitAnd','IIf','RemoveChars','BitMaskClear','IncrementValue','RepeatString',
        -            'BitMaskRead','InputBaseN','Replace','BitMaskSet','Insert','ReplaceList','BitNot','Int','ReplaceNoCase','BitOr',
        -            'IsArray','REReplace','BitSHLN','IsBinary','REReplaceNoCase','BitSHRN','IsBoolean','Reverse','BitXor','IsCustomFunction',
        -            'Right','Ceiling','IsDate','RJustify','CharsetDecode','IsDebugMode','Round','CharsetEncode','IsDefined','RTrim',
        -            'Chr','IsLeapYear','Second','CJustify','IsLocalHost','SendGatewayMessage','Compare','IsNumeric','SetEncoding',
        -            'CompareNoCase','IsNumericDate','SetLocale','Cos','IsObject','SetProfileString','CreateDate','IsQuery','SetVariable',
        -            'CreateDateTime','IsSimpleValue','Sgn','CreateObject','IsSOAPRequest','Sin','CreateODBCDate','IsStruct','SpanExcluding',
        -            'CreateODBCDateTime','IsUserInRole','SpanIncluding','CreateODBCTime','IsValid','Sqr','CreateTime','IsWDDX','StripCR',
        -            'CreateTimeSpan','IsXML','StructAppend','CreateUUID','IsXmlAttribute','StructClear','DateAdd','IsXmlDoc','StructCopy',
        -            'DateCompare','IsXmlElem','StructCount','DateConvert','IsXmlNode','StructDelete','DateDiff','IsXmlRoot','StructFind',
        -            'DateFormat','JavaCast','StructFindKey','DatePart','JSStringFormat','StructFindValue','Day','LCase','StructGet',
        -            'DayOfWeek','Left','StructInsert','DayOfWeekAsString','Len','StructIsEmpty','DayOfYear','ListAppend','StructKeyArray',
        -            'DaysInMonth','ListChangeDelims','StructKeyExists','DaysInYear','ListContains','StructKeyList','DE','ListContainsNoCase',
        -            'StructNew','DecimalFormat','ListDeleteAt','StructSort','DecrementValue','ListFind','StructUpdate','Decrypt','ListFindNoCase',
        -            'Tan','DecryptBinary','ListFirst','TimeFormat','DeleteClientVariable','ListGetAt','ToBase64','DirectoryExists',
        -            'ListInsertAt','ToBinary','DollarFormat','ListLast','ToScript','Duplicate','ListLen','ToString','Encrypt','ListPrepend',
        -            'Trim','EncryptBinary','ListQualify','UCase','Evaluate','ListRest','URLDecode','Exp','ListSetAt','URLEncodedFormat',
        -            'ExpandPath','ListSort','URLSessionFormat','FileExists','ListToArray','Val','Find','ListValueCount','ValueList',
        -            'FindNoCase','ListValueCountNoCase','Week','FindOneOf','LJustify','Wrap','FirstDayOfMonth','Log','WriteOutput',
        -            'Fix','Log10','XmlChildPos','FormatBaseN','LSCurrencyFormat','XmlElemNew','GetAuthUser','LSDateFormat','XmlFormat',
        -            'GetBaseTagData','LSEuroCurrencyFormat','XmlGetNodeType','GetBaseTagList','LSIsCurrency','XmlNew','GetBaseTemplatePath',
        -            'LSIsDate','XmlParse','GetClientVariablesList','LSIsNumeric','XmlSearch','GetCurrentTemplatePath','LSNumberFormat',
        -            'XmlTransform','GetDirectoryFromPath','LSParseCurrency','XmlValidate','GetEncoding','LSParseDateTime','Year',
        -            'GetException','LSParseEuroCurrency','YesNoFormat','GetFileFromPath','LSParseNumber'
        -            ),
        -        /* CFM Attributes */
        -        6 => array(
        -            'dbtype','connectstring','datasource','username','password','query','delimeter','description','required','hint','default','access','from','to','list','index'
        -            ),
        -        7 => array(
        -            'EQ', 'GT', 'LT', 'GTE', 'LTE', 'IS', 'LIKE', 'NEQ'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '/', '=', '{', '}', '(', ')', '[', ']', '<', '>', '&'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #990000; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #0000FF;',
        -            4 => 'color: #000000; font-weight: bold;',
        -            5 => 'color: #0000FF;',
        -            6 => 'color: #0000FF;',
        -            7 => 'color: #0000FF;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #0000FF;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #0000FF;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => 'color: #808080; font-style: italic;',
        -            1 => 'color: #00bbdd;',
        -            2 => 'color: #0000FF;',
        -            3 => 'color: #000099;',
        -            4 => 'color: #333333;',
        -            5 => 'color: #333333;'
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => 'http://december.com/html/4/element/{FNAMEL}.html',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ''
        -            ),
        -        1 => array(
        -            ' '>'
        -            ),
        -        2 => "/(?!<#)(?:(?:##)*)(#)[a-zA-Z0-9_\.\(\)]+(#)/",
        -        3 => array(
        -            '' => ''
        -            ),
        -        4 => array(
        -            '<' => '>'
        -            ),
        -        5 => '/((?!])+?(>)/si'
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => false,
        -        1 => false,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            1 => array(
        -                'DISALLOWED_BEFORE' => '(?<=<|<\/)',
        -                'DISALLOWED_AFTER' => '(?=\s|\/|>)',
        -                ),
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(?<=<|<\/)',
        -                'DISALLOWED_AFTER' => '(?=\s|\/|>)',
        -                ),
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(?|^])', // allow ; before keywords
        -                'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-])', // allow & after keywords
        -                ),
        -            7 => array(
        -                'DISALLOWED_BEFORE' => '(?&|^])', // allow ; before keywords
        -                'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-])', // allow & after keywords
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php
        deleted file mode 100644
        index 677f2afb..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php
        +++ /dev/null
        @@ -1,138 +0,0 @@
        - 'ChaiScript',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    //Regular Expressions
        -    'COMMENT_REGEXP' => array(2 => "/(?<=[\\s^])s\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])m?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\,\\;\\)])/iU"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'break', 'else', 'elseif', 'eval', 'for', 'if', 'return', 'while', 'try', 'catch', 'finally',
        -            ),
        -        2 => array(
        -            'def', 'false', 'fun', 'true', 'var', 'attr',
        -            ),
        -        3 => array(
        -            // built in functions
        -            'throw',
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}',
        -        '+', '-', '*', '/', '%',
        -        '!', '@', '&', '|', '^',
        -        '<', '>', '=',
        -        ',', ';', '?', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000066; font-weight: bold;',
        -            2 => 'color: #003366; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #006600; font-style: italic;',
        -            2 => 'color: #009966; font-style: italic;',
        -            'MULTI' => 'color: #006600; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #3366CC;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #CC0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #660066;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ),
        -        1 => array(
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php
        deleted file mode 100644
        index d0e50e61..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php
        +++ /dev/null
        @@ -1,169 +0,0 @@
        - 'Chapel',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F |
        -        GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        // statements
        -        1 => array(
        -            'atomic', 'begin', 'break', 'class', 'cobegin', 'coforall',
        -            'continue', 'do', 'else', 'export', 'extern', 'for', 'forall', 'if',
        -            'iter', 'inline', 'label', 'let', 'local', 'module',
        -            'otherwise', 'proc', 'record', 'return', 'select', 'serial',
        -            'then', 'use', 'var', 'when', 'where', 'while', 'yield'
        -            ),
        -        // literals
        -        2 => array(
        -            'nil', 'true', 'false'
        -            ),
        -        // built-in functions
        -        3 => array(
        -            'by', 'delete', 'dmapped', 'domain', 'enum', 'index', 'min',
        -            'minloc', 'max', 'maxloc', 'new', 'range', 'reduce', 'scan',
        -            'sparse', 'subdomain', 'sync', 'union', 'zip'
        -            ),
        -        // built-in types
        -        4 => array(
        -            'config', 'const', 'in', 'inout', 'opaque', 'on', 'out', 'param',
        -            'ref', 'single', 'type'
        -            ),
        -        // library types
        -        5 => array(
        -            'void', 'bool', 'int', 'uint', 'real', 'imag', 'complex', 'string',
        -            'locale'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']',
        -        '+', '-', '*', '/', '%',
        -        '=', '<', '>',
        -        '!', '^', '&', '|',
        -        '?', ':',
        -        ';', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #993333;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            //2 => 'color: #339933;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php
        deleted file mode 100644
        index c1fe8a9a..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php
        +++ /dev/null
        @@ -1,194 +0,0 @@
        - 'CIL',
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'COMMENT_SINGLE' => array('//'),
        -    'COMMENT_MULTI' => array(),
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(//Dotted
        -            '.zeroinit', '.vtfixup', '.vtentry', '.vtable', '.ver', '.try', '.subsystem', '.size', '.set', '.removeon',
        -            '.publickeytoken', '.publickey', '.property', '.permissionset', '.permission', '.pdirect', '.param', '.pack',
        -            '.override', '.other', '.namespace', '.mresource', '.module', '.method', '.maxstack', '.manifestres', '.locals',
        -            '.localized', '.locale', '.line', '.language', '.import', '.imagebase', '.hash', '.get', '.fire', '.file', '.field',
        -            '.export', '.event', '.entrypoint', '.emitbyte', '.data', '.custom', '.culture', '.ctor', '.corflags', '.class',
        -            '.cctor', '.assembly', '.addon'
        -            ),
        -        2 => array(//Attributes
        -            'wrapper', 'with', 'winapi', 'virtual', 'vector', 'vararg', 'value', 'userdefined', 'unused', 'unmanagedexp',
        -            'unmanaged', 'unicode', 'to', 'tls', 'thiscall', 'synchronized', 'struct', 'strict', 'storage', 'stdcall',
        -            'static', 'specialname', 'special', 'serializable', 'sequential', 'sealed', 'runtime', 'rtspecialname', 'request',
        -            'reqsecobj', 'reqrefuse', 'reqopt', 'reqmin', 'record', 'public', 'privatescope', 'private', 'preservesig',
        -            'prejitgrant', 'prejitdeny', 'platformapi', 'pinvokeimpl', 'pinned', 'permitonly', 'out', 'optil', 'opt',
        -            'notserialized', 'notremotable', 'not_in_gc_heap', 'noprocess', 'noncaslinkdemand', 'noncasinheritance',
        -            'noncasdemand', 'nometadata', 'nomangle', 'nomachine', 'noinlining', 'noappdomain', 'newslot', 'nested', 'native',
        -            'modreq', 'modopt', 'marshal', 'managed', 'literal', 'linkcheck', 'lcid', 'lasterr', 'internalcall', 'interface',
        -            'instance', 'initonly', 'init', 'inheritcheck', 'in', 'import', 'implicitres', 'implicitcom', 'implements',
        -            'illegal', 'il', 'hidebysig', 'handler', 'fromunmanaged', 'forwardref', 'fixed', 'finally', 'final', 'filter',
        -            'filetime', 'field', 'fault', 'fastcall', 'famorassem', 'family', 'famandassem', 'extern', 'extends', 'explicit',
        -            'error', 'enum', 'endmac', 'deny', 'demand', 'default', 'custom', 'compilercontrolled', 'clsid', 'class', 'cil',
        -            'cf', 'cdecl', 'catch', 'beforefieldinit', 'autochar', 'auto', 'at', 'assert', 'assembly', 'as', 'any', 'ansi',
        -            'alignment', 'algorithm', 'abstract'
        -            ),
        -        3 => array(//Types
        -            'wchar', 'void', 'variant', 'unsigned', 'valuetype', 'typedref', 'tbstr', 'sysstring', 'syschar', 'string',
        -            'streamed_object', 'stream', 'stored_object', 'safearray', 'objectref', 'object', 'nullref', 'method', 'lpwstr',
        -            'lpvoid', 'lptstr', 'lpstruct', 'lpstr', 'iunknown', 'int64', 'int32', 'int16', 'int8', 'int', 'idispatch',
        -            'hresult', 'float64', 'float32', 'float', 'decimal', 'date', 'currency', 'char', 'carray', 'byvalstr',
        -            'bytearray', 'boxed', 'bool', 'blob_object', 'blob', 'array'
        -            ),
        -        4 => array(//Prefix
        -            'volatile', 'unaligned', 'tail', 'readonly', 'no', 'constrained'
        -            ),
        -        5 => array(//Suffix
        -            'un', 'u8', 'u4', 'u2', 'u1', 'u', 's', 'ref', 'r8', 'r4', 'm1', 'i8', 'i4', 'i2', 'i1', 'i'#, '.8', '.7', '.6', '.5', '.4', '.3', '.2', '.1', '.0'
        -            ),
        -        6 => array(//Base
        -            'xor', 'switch', 'sub', 'stloc',
        -            'stind', 'starg',
        -            'shr', 'shl', 'ret', 'rem', 'pop', 'or', 'not', 'nop', 'neg', 'mul',
        -            'localloc', 'leave', 'ldnull', 'ldloca',
        -            'ldloc', 'ldind', 'ldftn', 'ldc', 'ldarga',
        -            'ldarg', 'jmp', 'initblk', 'endfinally', 'endfilter',
        -            'endfault', 'dup', 'div', 'cpblk', 'conv', 'clt', 'ckfinite', 'cgt', 'ceq', 'calli',
        -            'call', 'brzero', 'brtrue', 'brnull', 'brinst',
        -            'brfalse', 'break', 'br', 'bne', 'blt', 'ble', 'bgt', 'bge', 'beq', 'arglist',
        -            'and', 'add'
        -            ),
        -        7 => array(//Object
        -            'unbox.any', 'unbox', 'throw', 'stsfld', 'stobj', 'stfld', 'stelem', 'sizeof', 'rethrow', 'refanyval', 'refanytype', 'newobj',
        -            'newarr', 'mkrefany', 'ldvirtftn', 'ldtoken', 'ldstr', 'ldsflda', 'ldsfld', 'ldobj', 'ldlen', 'ldflda', 'ldfld',
        -            'ldelema', 'ldelem', 'isinst', 'initobj', 'cpobj', 'castclass',
        -            'callvirt', 'callmostderived', 'box'
        -            ),
        -        8 => array(//Other
        -            'prefixref', 'prefix7', 'prefix6', 'prefix5', 'prefix4', 'prefix3', 'prefix2', 'prefix1', 'prefix0'
        -            ),
        -        9 => array(//Literal
        -            'true', 'null', 'false'
        -            ),
        -        10 => array(//Comment-like
        -            '#line', '^THE_END^'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '!', '!!'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true,
        -        10 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color:maroon;font-weight:bold;',
        -            2 => 'color:blue;font-weight:bold;',
        -            3 => 'color:purple;font-weight:bold;',
        -            4 => 'color:teal;',
        -            5 => 'color:blue;',
        -            6 => 'color:blue;',
        -            7 => 'color:blue;',
        -            8 => 'color:blue;',
        -            9 => 'color:00008B',
        -            10 => 'color:gray'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color:gray;font-style:italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008000; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #006400;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #00008B;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #000033;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #006400;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color:blue;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => '',
        -        9 => '',
        -        10 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        0 => '(?<=ldc\\.i4\\.)[0-8]|(?<=(?:ldarg|ldloc|stloc)\\.)[0-3]' # Pickup the opcodes that end with integers
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php
        deleted file mode 100644
        index 0b9ed44c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php
        +++ /dev/null
        @@ -1,132 +0,0 @@
        - 'Clojure',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(';|' => '|;'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'defn', 'defn-', 'defmulti', 'defmethod', 'defmacro', 'deftest',
        -            'defstruct', 'def', 'defonce', 'let', 'letfn', 'do', 'cond', 'condp',
        -            'for', 'loop', 'recur', 'when', 'when-not', 'when-let', 'when-first',
        -            'if', 'if-let', 'if-not', 'doto', 'and', 'or','not','aget','aset',
        -            'dosync', 'doseq', 'dotimes', 'dorun', 'doall',
        -            'load', 'import', 'unimport', 'ns', 'in-ns', 'refer', 'print',
        -            'try', 'catch', 'finally', 'throw', 'fn', 'update-in',
        -            'with-open', 'with-local-vars', 'binding',
        -            'gen-class', 'gen-and-load-class', 'gen-and-save-class',
        -            'implement', 'proxy', 'lazy-cons', 'with-meta',
        -            'struct', 'struct-map', 'delay', 'locking', 'sync', 'time', 'apply',
        -            'remove', 'merge', 'interleave', 'interpose', 'distinct',
        -            'cons', 'concat', 'lazy-cat', 'cycle', 'rest', 'frest', 'drop',
        -            'drop-while', 'nthrest', 'take', 'take-while', 'take-nth', 'butlast',
        -            'reverse', 'sort', 'sort-by', 'split-at', 'partition', 'split-with',
        -            'first', 'ffirst', 'rfirst', 'zipmap', 'into', 'set', 'vec',
        -            'to-array-2d', 'not-empty', 'seq?', 'not-every?', 'every?', 'not-any?',
        -            'map', 'mapcat', 'vector?', 'list?', 'hash-map', 'reduce', 'filter',
        -            'vals', 'keys', 'rseq', 'subseq', 'rsubseq', 'count', 'empty?',
        -            'fnseq', 'repeatedly', 'iterate', 'drop-last',
        -            'repeat', 'replicate', 'range',  'into-array',
        -            'line-seq', 'resultset-seq', 're-seq', 're-find', 'tree-seq', 'file-seq',
        -            'iterator-seq', 'enumeration-seq', 'declare',  'xml-seq',
        -            'symbol?', 'string?', 'vector', 'conj', 'str',
        -            'pos?', 'neg?', 'zero?', 'nil?', 'inc', 'dec', 'format',
        -            'alter', 'commute', 'ref-set', 'floor', 'assoc', 'send', 'send-off'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|', '.', '..', '->',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #555;',
        -            1 => 'color: #555;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -            '::', ':'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php
        deleted file mode 100644
        index 21552165..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php
        +++ /dev/null
        @@ -1,179 +0,0 @@
        - ()
        - *  -  First Release
        - *
        - * TODO (updated )
        - * -------------------------
        - *
        - *************************************************************************************
        - *
        - *     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' => 'CMake',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'ESCAPE_REGEXP' => array(
        -        // Quoted variables ${...}
        -        1 => "/\\$(ENV)?\\{[^\\n\\}]*?\\}/i",
        -        // Quoted registry keys [...]
        -        2 => "/\\[HKEY[^\n\\]]*?]/i"
        -        ),
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'add_custom_command', 'add_custom_target', 'add_definitions',
        -            'add_dependencies', 'add_executable', 'add_library',
        -            'add_subdirectory', 'add_test', 'aux_source_directory', 'break',
        -            'build_command', 'cmake_minimum_required', 'cmake_policy',
        -            'configure_file', 'create_test_sourcelist', 'define_property',
        -            'else', 'elseif', 'enable_language', 'enable_testing',
        -            'endforeach', 'endfunction', 'endif', 'endmacro',
        -            'endwhile', 'execute_process', 'export', 'file', 'find_file',
        -            'find_library', 'find_package', 'find_path', 'find_program',
        -            'fltk_wrap_ui', 'foreach', 'function', 'get_cmake_property',
        -            'get_directory_property', 'get_filename_component', 'get_property',
        -            'get_source_file_property', 'get_target_property',
        -            'get_test_property', 'if', 'include', 'include_directories',
        -            'include_external_msproject', 'include_regular_expression',
        -            'install', 'link_directories', 'list', 'load_cache',
        -            'load_command', 'macro', 'mark_as_advanced', 'math', 'message',
        -            'option', 'output_required_files', 'project', 'qt_wrap_cpp',
        -            'qt_wrap_ui', 'remove_definitions', 'return', 'separate_arguments',
        -            'set', 'set_directory_properties', 'set_property',
        -            'set_source_files_properties', 'set_target_properties',
        -            'set_tests_properties', 'site_name', 'source_group', 'string',
        -            'target_link_libraries', 'try_compile', 'try_run', 'unset',
        -            'variable_watch', 'while'
        -            ),
        -        2 => array(
        -            // Deprecated commands
        -            'build_name', 'exec_program', 'export_library_dependencies',
        -            'install_files', 'install_programs', 'install_targets',
        -            'link_libraries', 'make_directory', 'remove', 'subdir_depends',
        -            'subdirs', 'use_mangled_mesa', 'utility_source',
        -            'variable_requires', 'write_file'
        -            ),
        -        3 => array(
        -            // Special command arguments, this list is not comprehesive.
        -            'AND', 'APPEND', 'ASCII', 'BOOL', 'CACHE', 'COMMAND', 'COMMENT',
        -            'COMPARE', 'CONFIGURE', 'DEFINED', 'DEPENDS', 'DIRECTORY',
        -            'EQUAL', 'EXCLUDE_FROM_ALL', 'EXISTS', 'FALSE', 'FATAL_ERROR',
        -            'FILEPATH', 'FIND', 'FORCE', 'GET', 'GLOBAL', 'GREATER',
        -            'IMPLICIT_DEPENDS', 'INSERT', 'INTERNAL', 'IS_ABSOLUTE',
        -            'IS_DIRECTORY', 'IS_NEWER_THAN', 'LENGTH', 'LESS',
        -            'MAIN_DEPENDENCY', 'MATCH', 'MATCHALL', 'MATCHES', 'MODULE', 'NOT',
        -            'NOTFOUND', 'OFF', 'ON', 'OR', 'OUTPUT', 'PARENT_SCOPE', 'PATH',
        -            'POLICY', 'POST_BUILD', 'PRE_BUILD', 'PRE_LINK', 'PROPERTY',
        -            'RANDOM', 'REGEX', 'REMOVE_AT', 'REMOVE_DUPLICATES', 'REMOVE_ITEM',
        -            'REPLACE', 'REVERSE', 'SEND_ERROR', 'SHARED', 'SORT', 'SOURCE',
        -            'STATIC', 'STATUS', 'STREQUAL', 'STRGREATER', 'STRING', 'STRIP',
        -            'STRLESS', 'SUBSTRING', 'TARGET', 'TEST', 'TOLOWER', 'TOUPPER',
        -            'TRUE', 'VERBATIM', 'VERSION', 'VERSION_EQUAL', 'VERSION_GREATOR',
        -            'VERSION_LESS', 'WORKING_DIRECTORY',
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => true
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')')
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #1f3f81; font-style: bold;',
        -            2 => 'color: #1f3f81;',
        -            3 => 'color: #077807; font-sytle: italic;'
        -            ),
        -        'BRACKETS' => array(),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #b08000;',
        -            2 => 'color: #0000cd;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #912f11;',
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #197d8b;'
        -            ),
        -        'NUMBERS' => array(),
        -        'METHODS' => array(),
        -        'REGEXPS' => array(
        -            0 => 'color: #b08000;',
        -            1 => 'color: #0000cd;'
        -            ),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.cmake.org/cmake/help/cmake2.6docs.html#command:{FNAMEL}',
        -        2 => 'http://www.cmake.org/cmake/help/cmake2.6docs.html#command:{FNAMEL}',
        -        3 => '',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        // Unquoted variables
        -        0 => "\\$(ENV)?\\{[^\\n}]*?\\}",
        -        // Unquoted registry keys
        -        1 => "\\[HKEY[^\n\\]]*?]"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            // These keywords cannot come after a open paren
        -            1 => array(
        -                'DISALLOWED_AFTER' =>  '(?= *\()'
        -                ),
        -            2 => array(
        -                'DISALLOWED_AFTER' =>  '(?= *\()'
        -                )
        -            ),
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'METHODS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php
        deleted file mode 100644
        index 1280a4c7..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php
        +++ /dev/null
        @@ -1,457 +0,0 @@
        - 'COBOL',
        -    'COMMENT_SINGLE' => array(
        -        1 => '*>', // COBOL 2002 inline comment
        -        2 => '>>'  // COBOL compiler directive indicator
        -        ),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        1 => '/^......(\*.*?$)/m', // Fixed-form comment
        -        2 => '/\$SET.*/i'          // MF compiler directive indicator
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'"),
        -    'ESCAPE_CHAR' => '',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC |
        -        GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_SCI_SHORT |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        // Statements containing spaces. These are separate to other statements
        -        // so that they are highlighted correctly.
        -        1 => array(
        -            'DELETE FILE', 'GO TO', 'NEXT SENTENCE', 'XML GENERATE',
        -            'XML PARSE'
        -            ),
        -
        -        2 => array( // Other Reserved Words
        -            '3-D', 'ABSENT', 'ABSTRACT', 'ACCESS', 'ACQUIRE',
        -            'ACTION', 'ACTIVE-CLASS', 'ACTIVE-X', 'ACTUAL', 'ADDRESS',
        -            'ADDRESS-ARRAY', 'ADDRESS-OFFSET', 'ADJUSTABLE-COLUMNS',
        -            'ADVANCING', 'AFP-5A', 'AFTER', 'ALIGNED', 'ALIGNMENT', 'ALL',
        -            'ALLOW', 'ALLOWING', 'ALPHABET', 'ALPHABETIC',
        -            'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER', 'ALPHANUMERIC',
        -            'ALPHANUMERIC-EDITED', 'ALSO', 'ALTERNATE', 'AND', 'ANY',
        -            'ANYCASE',
        -            'APPLY', 'ARE', 'AREA', 'AREAS', 'ARGUMENT-NUMBER',
        -            'ARGUMENT-VALUE',
        -            'ARITHMETIC', 'AS', 'ASCENDING',
        -            'ASSEMBLY-ATTRIBUTES', 'ASSIGN', 'AT', 'ATTRIBUTE', 'AUTHOR',
        -            'AUTO', 'AUTO-DECIMAL', 'AUTO-HYPHEN-SKIP', 'AUTO-MINIMIZE',
        -            'AUTO-RESIZE', 'AUTO-SKIP', 'AUTO-SPIN', 'AUTOMATIC',
        -            'AUTOTERMINATE', 'AWAY-FROM-ZERO',
        -            'AX-EVENT-LIST', 'B-AND', 'B-EXOR', 'B-LEFT',
        -            'B-NOT', 'B-OR', 'B-RIGHT', 'B-XOR', 'BACKGROUND-COLOR',
        -            'BACKGROUND-COLOUR', 'BACKGROUND-HIGH', 'BACKGROUND-LOW',
        -            'BACKGROUND-STANDARD', 'BACKWARD', 'BAR', 'BASED', 'BASIS', 'BEEP',
        -            'BEFORE', 'BEGINNING', 'BELL', 'BINARY', 'BINARY-CHAR',
        -            'BINARY-DOUBLE', 'BINARY-LONG', 'BINARY-SHORT', 'BIND', 'BIT',
        -            'BITMAP', 'BITMAP-END', 'BITMAP-HANDLE', 'BITMAP-NUMBER',
        -            'BITMAP-RAW-HEIGHT', 'BITMAP-RAW-WIDTH', 'BITMAP-SCALE',
        -            'BITMAP-START', 'BITMAP-TIMER', 'BITMAP-TRAILING', 'BITMAP-WIDTH',
        -            'BLANK', 'BLINK', 'BLINKING', 'BLOB', 'BLOB-FILE', 'BLOB-LOCATOR',
        -            'BLOCK', 'BOLD', 'BOOLEAN', 'BOTTOM', 'BOX', 'BOXED', 'BROWSING',
        -            'BUSY', 'BUTTONS', 'BY', 'C01', 'C02', 'C03', 'C04',
        -            'C05',
        -            'C06', 'C07', 'C08', 'C09', 'C10', 'C11', 'C12', 'CALENDAR-FONT',
        -            'CALLED', 'CANCEL-BUTTON', 'CAPACITY', 'CATCH', 'CBL',
        -            'CBL-CTR', 'CCOL', 'CD', 'CELL', 'CELL-COLOR', 'CELL-DATA',
        -            'CELL-FONT', 'CELL-PROTECTION', 'CELLS', 'CENTER', 'CENTERED',
        -            'CENTERED-HEADINGS', 'CENTURY-DATE', 'CENTURY-DAY', 'CF', 'CH',
        -            'CHAINING', 'CHANGED', 'CHAR-VARYING',
        -            'CHARACTER',
        -            'CHARACTERS', 'CHART', 'CHECK-BOX', 'CHECKING', 'CLASS',
        -            'CLASS-ATTRIBUTES', 'CLASS-CONTROL', 'CLASS-ID', 'CLASS-OBJECT',
        -            'CLASSIFICATION',
        -            'CLEAR-SELECTION', 'CLINE', 'CLINES', 'CLOB', 'CLOB-FILE',
        -            'CLOB-LOCATOR', 'CLOCK-UNITS', 'COBOL', 'CODE', 'CODE-SET',
        -            'COERCION', 'COL', 'COLLATING', 'COLORS', 'COLOUR',
        -            'COLOURS', 'COLS', 'COLUMN', 'COLUMN-COLOR', 'COLUMN-DIVIDERS',
        -            'COLUMN-FONT', 'COLUMN-HEADINGS', 'COLUMN-PROTECTION', 'COLUMNS',
        -            'COM-REG', 'COMBO-BOX', 'COMMA', 'COMMITMENT', 'COMMON',
        -            'COMMUNICATION', 'COMP', 'COMP-0', 'COMP-1', 'COMP-2', 'COMP-3',
        -            'COMP-4', 'COMP-5', 'COMP-6', 'COMP-X', 'COMPRESSION',
        -            'COMPUTATIONAL', 'COMPUTATIONAL-0', 'COMPUTATIONAL-1',
        -            'COMPUTATIONAL-2', 'COMPUTATIONAL-3', 'COMPUTATIONAL-4',
        -            'COMPUTATIONAL-5', 'COMPUTATIONAL-6', 'COMPUTATIONAL-X',
        -            'CONDITION-VALUE', 'CONFIGURATION', 'CONSOLE', 'CONSTANT',
        -            'CONSTRAIN', 'CONSTRAINTS', 'CONTAINS', 'CONTENT',
        -            'CONTROL', 'CONTROL-AREA', 'CONTROLS', 'CONTROLS-UNCROPPED',
        -            'CONVERSION', 'CONVERT', 'CONVERTING', 'COPY-SELECTION',
        -            'CORE-INDEX', 'CORR', 'CORRESPONDING', 'COUNT',
        -            'CREATING', 'CRT', 'CRT-UNDER', 'CSIZE', 'CSP', 'CURRENCY',
        -            'CURSOR', 'CURSOR-COL', 'CURSOR-COLOR',
        -            'CURSOR-FRAME-WIDTH', 'CURSOR-ROW', 'CURSOR-X', 'CURSOR-Y',
        -            'CUSTOM-ATTRIBUTE', 'CUSTOM-PRINT-TEMPLATE', 'CYCLE', 'CYL-INDEX',
        -            'CYL-OVERFLOW', 'DASHED', 'DATA', 'DATA-COLUMNS',
        -            'DATA-POINTER', 'DATA-TYPES', 'DATABASE-KEY', 'DATABASE-KEY-LONG',
        -            'DATE', 'DATE-COMPILED', 'DATE-ENTRY', 'DATE-RECORD',
        -            'DATE-WRITTEN', 'DAY', 'DAY-OF-WEEK', 'DBCLOB', 'DBCLOB-FILE',
        -            'DBCLOB-LOCATOR', 'DBCS', 'DE', 'DEBUG', 'DEBUG-CONTENTS',
        -            'DEBUG-ITEM', 'DEBUG-LINE', 'DEBUG-NAME', 'DEBUG-SUB-1',
        -            'DEBUG-SUB-2', 'DEBUG-SUB-3', 'DEBUGGING', 'DECIMAL',
        -            'DECIMAL-POINT', 'DECLARATIVES', 'DEFAULT',
        -            'DEFAULT-BUTTON', 'DEFAULT-FONT', 'DEFINITION',
        -            'DELEGATE-ID', 'DELIMITED', 'DELIMITER', 'DEPENDING',
        -            'DESCENDING', 'DESTINATION', 'DESTROY', 'DETAIL', 'DICTIONARY',
        -            'DISABLE', 'DISC', 'DISJOINING', 'DISK', 'DISP',
        -            'DISPLAY-1', 'DISPLAY-COLUMNS', 'DISPLAY-FORMAT', 'DISPLAY-ST',
        -            'DIVIDER-COLOR', 'DIVIDERS', 'DIVISION', 'DOT-DASH',
        -            'DOTTED', 'DOWN', 'DRAG-COLOR', 'DRAW', 'DROP', 'DROP-DOWN',
        -            'DROP-LIST', 'DUPLICATES', 'DYNAMIC', 'EBCDIC', 'EC', 'ECHO', 'EGCS',
        -            'EGI', 'EJECT', 'ELEMENTARY', 'ELSE', 'EMI', 'EMPTY-CHECK',
        -            'ENABLE', 'ENABLED', 'END', 'END-ACCEPT', 'END-ADD', 'END-CALL',
        -            'END-CHAIN', 'END-COLOR', 'END-COMPUTE', 'END-DELEGATE',
        -            'END-DELETE', 'END-DISPLAY', 'END-DIVIDE', 'END-EVALUATE',
        -            'END-IF', 'END-INVOKE', 'END-MODIFY', 'END-MOVE', 'END-MULTIPLY',
        -            'END-OF-PAGE', 'END-PERFORM', 'END-READ', 'END-RECEIVE',
        -            'END-RETURN', 'END-REWRITE', 'END-SEARCH', 'END-START',
        -            'END-STRING', 'END-SUBTRACT', 'END-SYNC', 'END-TRY',
        -            'END-UNSTRING', 'END-WAIT', 'END-WRITE', 'END-XML', 'ENDING',
        -            'ENGRAVED', 'ENSURE-VISIBLE', 'ENTRY-CONVENTION',
        -            'ENTRY-FIELD',
        -            'ENTRY-REASON', 'ENUM', 'ENUM-ID', 'ENVIRONMENT',
        -            'ENVIRONMENT-NAME', 'ENVIRONMENT-VALUE', 'EOL', 'EOP',
        -            'EOS', 'EQUAL', 'EQUALS', 'ERASE', 'ERROR', 'ESCAPE',
        -            'ESCAPE-BUTTON', 'ESI', 'EVENT', 'EVENT-LIST',
        -            'EVENT-POINTER', 'EVERY', 'EXCEEDS', 'EXCEPTION',
        -            'EXCEPTION-OBJECT', 'EXCEPTION-VALUE', 'EXCESS-3',
        -            'EXCLUDE-EVENT-LIST', 'EXCLUSIVE',
        -            'EXPAND', 'EXPANDS', 'EXTEND', 'EXTENDED',
        -            'EXTENDED-SEARCH', 'EXTENSION', 'EXTERNAL', 'EXTERNAL-FORM',
        -            'EXTERNALLY-DESCRIBED-KEY', 'FACTORY', 'FALSE', 'FD',
        -            'FH--FCD', 'FH--KEYDEF', 'FILE', 'FILE-CONTROL', 'FILE-ID',
        -            'FILE-LIMIT', 'FILE-LIMITS', 'FILE-NAME', 'FILE-POS', 'FILL-COLOR',
        -            'FILL-COLOR2', 'FILL-PERCENT', 'FILLER', 'FINAL', 'FINALLY',
        -            'FINISH-REASON', 'FIRST', 'FIXED', 'FIXED-FONT', 'FIXED-WIDTH',
        -            'FLAT', 'FLAT-BUTTONS', 'FLOAT-BINARY-7', 'FLOAT-BINARY-16',
        -            'FLOAT-BINARY-34', 'FLOAT-DECIMAL-16', 'FLOAT-DECIMAL-34',
        -            'FLOAT-EXTENDED', 'FLOAT-LONG',
        -            'FLOAT-SHORT', 'FLOATING', 'FONT', 'FOOTING', 'FOR',
        -            'FOREGROUND-COLOR', 'FOREGROUND-COLOUR', 'FOREVER', 'FORMAT',
        -            'FRAME', 'FRAMED', 'FROM', 'FULL', 'FULL-HEIGHT',
        -            'FUNCTION', 'FUNCTION-ID', 'FUNCTION-POINTER', 'GENERATE',
        -            'GET', 'GETTER', 'GIVING', 'GLOBAL', 'GO-BACK', 'GO-FORWARD',
        -            'GO-HOME', 'GO-SEARCH', 'GRAPHICAL', 'GREATER', 'GRID',
        -            'GRIP', 'GROUP', 'GROUP-USAGE', 'GROUP-VALUE', 'HANDLE',
        -            'HAS-CHILDREN', 'HEADING', 'HEADING-COLOR', 'HEADING-DIVIDER-COLOR',
        -            'HEADING-FONT', 'HEAVY', 'HEIGHT', 'HEIGHT-IN-CELLS', 'HELP-ID',
        -            'HIDDEN-DATA', 'HIGH', 'HIGH-COLOR', 'HIGH-VALUE', 'HIGH-VALUES',
        -            'HIGHLIGHT', 'HORIZONTAL', 'HOT-TRACK', 'HSCROLL', 'HSCROLL-POS',
        -            'I-O', 'I-O-CONTROL', 'ICON', 'ID', 'IDENTIFICATION',
        -            'IDENTIFIED', 'IFINITY', 'IGNORE', 'IGNORING', 'IMPLEMENTS', 'IN',
        -            'INDEPENDENT', 'INDEX', 'INDEXED', 'INDEXER', 'INDEXER-ID', 'INDIC',
        -            'INDICATE', 'INDICATOR', 'INDICATORS', 'INDIRECT',
        -            'INHERITING', 'INHERITS',
        -            'INITIAL', 'INITIALIZED', 'INPUT',
        -            'INPUT-OUTPUT', 'INQUIRE', 'INSERT', 'INSERT-ROWS',
        -            'INSERTION-INDEX', 'INSTALLATION', 'INSTANCE',
        -            'INTERFACE', 'INTERFACE-ID', 'INTERMEDIATE',
        -            'INTERNAL', 'INTO', 'INTRINSIC',
        -            'INVALID', 'INVOKED', 'IS', 'ITEM', 'ITEM-BOLD',
        -            'ITEM-ID', 'ITEM-TEXT', 'ITEM-TO-ADD', 'ITEM-TO-DELETE',
        -            'ITEM-TO-EMPTY', 'ITEM-VALUE', 'ITERATOR', 'ITERATOR-ID', 'J',
        -            'JOINED', 'JOINING', 'JUST', 'JUSTIFIED', 'KANJI',
        -            'KEPT', 'KEY', 'KEY-YY', 'KEYBOARD', 'LABEL', 'LABEL-OFFSET',
        -            'LARGE-FONT', 'LAST', 'LAST-ROW', 'LAYOUT-DATA', 'LAYOUT-MANAGER',
        -            'LC_ALL', 'LC_COLLATE', 'LC_CTYPE', 'LC_CURRENCY', 'LC_MESSAGES',
        -            'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME', 'LEADING', 'LEADING-SHIFT',
        -            'LEAVE', 'LEFT', 'LEFT-JUSTIFY', 'LEFT-TEXT', 'LEFTLINE',
        -            'LENGTH-CHECK', 'LESS', 'LIMIT', 'LIMITS', 'LIN', 'LINAGE',
        -            'LINAGE-COUNTER', 'LINE', 'LINE-COUNTER', 'LINES', 'LINES-AT-ROOT',
        -            'LINK', 'LINKAGE', 'LIST', 'LIST-BOX', 'LM-RESIZE', 'LOCAL-STORAGE',
        -            'LOCALE', 'LOCK', 'LOCKING', 'LONG-DATE', 'LONG-VARBINARY',
        -            'LONG-VARCHAR', 'LOW', 'LOW-COLOR', 'LOW-VALUE', 'LOW-VALUES',
        -            'LOWER', 'LOWERED', 'LOWLIGHT', 'MANUAL', 'MASS-UPDATE',
        -            'MASTER-INDEX', 'MAX-HEIGHT', 'MAX-LINES', 'MAX-PROGRESS',
        -            'MAX-SIZE', 'MAX-TEXT', 'MAX-VAL', 'MAX-WIDTH', 'MDI-CHILD',
        -            'MDI-FRAME', 'MEDIUM-FONT', 'MEMORY', 'MENU', 'MESSAGE',
        -            'MESSAGES', 'METACLASS', 'METHOD', 'METHOD-ID', 'MIN-HEIGHT',
        -            'MIN-LINES', 'MIN-SIZE', 'MIN-VAL', 'MIN-WIDTH', 'MODAL', 'MODE',
        -            'MODELESS', 'MODIFIED', 'MODULES', 'MONITOR-POINTER',
        -            'MORE-LABELS', 'MULTILINE',
        -            'MUTEX-POINTER', 'NAME', 'NAMED', 'NATIONAL',
        -            'NATIONAL-EDITED', 'NATIVE', 'NAVIGATE-URL', 'NCHAR',
        -            'NEAREST-AWAY-FROM-ZERO', 'NEAREST-EVEN', 'NEAREST-TOWARD-ZERO',
        -            'NEGATIVE', 'NEGATIVE-INFINITY',
        -            'NESTED', 'NET-EVENT-LIST', 'NEW', 'NEWABLE', 'NEXT ', 'NEXT-ITEM',
        -            'NO', 'NO-AUTO-DEFAULT', 'NO-AUTOSEL', 'NO-BOX', 'NO-CELL-DRAG',
        -            'NO-CLOSE', 'NO-DIVIDERS', 'NO-ECHO', 'NO-F4', 'NO-FOCUS',
        -            'NO-GROUP-TAB', 'NO-KEY-LETTER', 'NO-SEARCH', 'NO-TAB', 'NO-UPDOWN',
        -            'NOMINAL', 'NONE', 'NORMAL', 'NOT', 'NOT-A-NUMBER', 'NOTIFY',
        -            'NOTIFY-CHANGE', 'NOTIFY-DBLCLICK', 'NOTIFY-SELCHANGE',
        -            'NSTD-REELS', 'NULL', 'NULLS', 'NUM-COL-HEADINGS',
        -            'NUM-ROW-HEADINGS', 'NUM-ROWS', 'NUMBER', 'NUMBERS', 'NUMERIC',
        -            'NUMERIC-EDITED', 'NUMERIC-FILL', 'O-FILL', 'OBJECT',
        -            'OBJECT-COMPUTER', 'OBJECT-ID', 'OBJECT-REFERENCE',
        -            'OBJECT-STORAGE', 'OCCURS', 'OF', 'OFF', 'OK-BUTTON', 'OMITTED',
        -            'ONLY', 'OOSTACKPTR', 'OPERATOR', 'OPERATOR-ID',
        -            'OPTIONAL', 'OPTIONS', 'OR', 'ORDER', 'ORGANIZATION', 'OTHER',
        -            'OTHERWISE', 'OUTPUT', 'OVERFLOW', 'OVERLAP-LEFT', 'OVERLAP-TOP',
        -            'OVERLAPPED', 'OVERLINE', 'OVERRIDE', 'PACKED-DECIMAL',
        -            'PADDING', 'PAGE', 'PAGE-COUNTER', 'PAGE-SETUP', 'PAGE-SIZE',
        -            'PAGED', 'PANEL-INDEX', 'PANEL-STYLE', 'PANEL-TEXT', 'PANEL-WIDTHS',
        -            'PARAGRAPH', 'PARAMS', 'PARENT', 'PARSE', 'PARTIAL', 'PASSWORD',
        -            'PERMANENT', 'PF', 'PH', 'PIC', 'PICTURE', 'PIXEL',
        -            'PIXELS', 'PLACEMENT', 'PLUS', 'POINTER', 'POP-UP', 'POSITION',
        -            'POSITION-SHIFT', 'POSITIONING', 'POSITIVE', 'POSITIVE-INFINITY',
        -            'PREFIXED', 'PREFIXING', 'PRESENT',
        -            'PREVIOUS', 'PRINT', 'PRINT-CONTROL', 'PRINT-NO-PROMPT',
        -            'PRINT-PREVIEW', 'PRINT-SWITCH', 'PRINTER', 'PRINTER-1', 'PRINTING',
        -            'PRIOR', 'PRIORITY', 'PRIVATE', 'PROCEDURE', 'PROCEDURE-POINTER',
        -            'PROCEDURES', 'PROCEED', 'PROCESS', 'PROCESSING', 'PROGRAM',
        -            'PROGRAM-ID', 'PROGRAM-POINTER', 'PROGRESS', 'PROHIBITED',
        -            'PROMPT', 'PROPERTIES',
        -            'PROPERTY', 'PROPERTY-ID', 'PROPERTY-VALUE', 'PROTECTED',
        -            'PROTOTYPE', 'PUBLIC', 'PURGE', 'PUSH-BUTTON', 'QUERY-INDEX',
        -            'QUEUE', 'QUOTE', 'QUOTES', 'RADIO-BUTTON', 'RAISED',
        -            'RAISING', 'RD', 'READ-ONLY', 'READING',
        -            'READY', 'RECORD', 'RECORD-DATA', 'RECORD-OVERFLOW',
        -            'RECORD-TO-ADD', 'RECORD-TO-DELETE', 'RECORDING', 'RECORDS',
        -            'RECURSIVE', 'REDEFINE', 'REDEFINES', 'REDEFINITION', 'REEL',
        -            'REFERENCE', 'REFERENCES', 'REFRESH', 'REGION-COLOR', 'RELATION',
        -            'RELATIVE', 'RELOAD', 'REMAINDER', 'REMARKS', 'REMOVAL',
        -            'RENAMES', 'REORG-CRITERIA', 'REPEATED', 'REPLACE', 'REPLACING',
        -            'REPORT', 'REPORTING', 'REPORTS', 'REPOSITORY', 'REQUIRED',
        -            'REPRESENTS-NOT-A-NUMBER',
        -            'REREAD', 'RERUN', 'RESERVE', 'RESET-GRID', 'RESET-LIST',
        -            'RESET-TABS', 'RESIZABLE', 'RESTRICTED', 'RESULT-SET-LOCATOR',
        -            'RETRY', 'RETURN-CODE', 'RETURNING',
        -            'REVERSE-VIDEO', 'REVERSED', 'REWIND', 'RF', 'RH',
        -            'RIGHT', 'RIGHT-ALIGN', 'RIGHT-JUSTIFY', 'RIMMED',
        -            'ROLLING', 'ROUNDED', 'ROUNDING', 'ROW-COLOR', 'ROW-COLOR-PATTERN',
        -            'ROW-DIVIDERS', 'ROW-FONT', 'ROW-HEADINGS', 'ROW-PROTECTION',
        -            'ROWID', 'RUN', 'S01', 'S02', 'S03', 'S04', 'S05', 'SAME',
        -            'SAVE-AS', 'SAVE-AS-NO-PROMPT', 'SCREEN', 'SCROLL', 'SCROLL-BAR',
        -            'SD', 'SEARCH-OPTIONS', 'SEARCH-TEXT', 'SECONDS',
        -            'SECTION', 'SECURE', 'SECURITY', 'SEEK', 'SEGMENT', 'SEGMENT-LIMIT',
        -            'SELECT-ALL', 'SELECTION-INDEX', 'SELECTION-TEXT',
        -            'SELECTIVE', 'SELF', 'SELF-ACT', 'SELFCLASS', 'SEMAPHORE-POINTER',
        -            'SEND', 'SENTENCE', 'SEPARATE', 'SEPARATION', 'SEQUENCE',
        -            'SEQUENTIAL', 'SETTER', 'SHADING', 'SHADOW',
        -            'SHARING', 'SHIFT-IN', 'SHIFT-OUT', 'SHORT-DATE', 'SHOW-LINES',
        -            'SHOW-NONE', 'SHOW-SEL-ALWAYS', 'SIGNED', 'SIGNED-INT',
        -            'SIGNED-LONG', 'SIGNED-SHORT', 'SIZE', 'SKIP1',
        -            'SKIP2', 'SKIP3', 'SMALL-FONT', 'SORT-CONTROL',
        -            'SORT-CORE-SIZE', 'SORT-FILE-SIZE', 'SORT-MERGE', 'SORT-MESSAGE',
        -            'SORT-MODE-SIZE', 'SORT-OPTION', 'SORT-ORDER', 'SORT-RETURN',
        -            'SORT-TAPE', 'SORT-TAPES', 'SOURCE', 'SOURCE-COMPUTER', 'SOURCES',
        -            'SPACE', 'SPACE-FILL', 'SPACES', 'SPECIAL-NAMES', 'SPINNER', 'SQL',
        -            'SQUARE', 'STANDARD', 'STANDARD-1', 'STANDARD-2', 'STANDARD-3',
        -            'STANDARD-BINARY', 'STANDARD-DECIMAL',
        -            'START-X', 'START-Y', 'STARTING', 'STATEMENT', 'STATIC',
        -            'STATIC-LIST',
        -            'STATUS', 'STATUS-BAR', 'STATUS-TEXT', 'STEP',
        -            'STOP-BROWSER', 'STRONG', 'STYLE', 'SUB-QUEUE-1',
        -            'SUB-QUEUE-2', 'SUB-QUEUE-3', 'SUBFILE', 'SUBWINDOW',
        -            'SUFFIXING', 'SUPER', 'SYMBOL', 'SYMBOLIC',
        -            'SYNCHRONIZED', 'SYSIN', 'SYSIPT', 'SYSLST', 'SYSOUT',
        -            'SYSPCH', 'SYSPUNCH', 'SYSTEM', 'SYSTEM-DEFAULT', 'SYSTEM-INFO',
        -            'TAB', 'TAB-CONTROL', 'TAB-TO-ADD', 'TAB-TO-DELETE', 'TABLE',
        -            'TALLY', 'TALLYING', 'TAPE', 'TAPES', 'TEMPORARY', 'TERMINAL',
        -            'TERMINAL-INFO', 'TERMINATION-VALUE', 'TEST', 'TEXT',
        -            'THAN', 'THEN', 'THREAD', 'THREAD-LOCAL', 'THREAD-LOCAL-STORAGE',
        -            'THREAD-POINTER', 'THROUGH', 'THRU', 'THUMB-POSITION',
        -            'TILED-HEADINGS', 'TIME', 'TIME-OF-DAY', 'TIME-OUT', 'TIME-RECORD',
        -            'TIMEOUT', 'TIMES', 'TIMESTAMP', 'TIMESTAMP-OFFSET',
        -            'TIMESTAMP-OFFSET-RECORD', 'TIMESTAMP-RECORD', 'TITLE', 'TITLE-BAR',
        -            'TITLE-POSITION', 'TO', 'TOOL-BAR', 'TOP', 'TOTALED', 'TOTALING',
        -            'TOWARD-GREATER', 'TOWARD-LESSER',
        -            'TRACE', 'TRACK-AREA', 'TRACK-LIMIT', 'TRACK-THUMB', 'TRACKS',
        -            'TRADITIONAL-FONT', 'TRAILING', 'TRAILING-SHIFT', 'TRAILING-SIGN',
        -            'TRANSACTION', 'TRANSPARENT', 'TRANSPARENT-COLOR',
        -            'TREE-VIEW', 'TRUE', 'TRUNCATION', 'TYPE', 'TYPEDEF', 'UCS-4',
        -            'UNDERLINE', 'UNDERLINED', 'UNEQUAL', 'UNFRAMED', 'UNIT', 'UNITS',
        -            'UNIVERSAL', 'UNSIGNED', 'UNSIGNED-INT', 'UNSIGNED-LONG',
        -            'UNSIGNED-SHORT',
        -            'UNSORTED', 'UP', 'UPDATE', 'UNTIL', 'UPON', 'UPPER',
        -            'UPSI-0', 'UPSI-1', 'UPSI-2', 'UPSI-3', 'UPSI-4', 'UPSI-5',
        -            'UPSI-6', 'UPSI-7', 'USAGE', 'USE-ALT', 'USE-RETURN',
        -            'USE-TAB', 'USER', 'USER-COLORS', 'USER-DEFAULT', 'USER-GRAY',
        -            'USER-WHITE', 'USING', 'UTF-16', 'UTF-8', 'VALID',
        -            'VAL-STATUS', 'VALIDATE-STATUS',
        -            'VALUE', 'VALUE-FORMAT', 'VALUES', 'VALUETYPE', 'VALUETYPE-ID',
        -            'VARBINARY', 'VARIABLE', 'VARIANT', 'VARYING', 'VERTICAL',
        -            'VERY-HEAVY', 'VIRTUAL-WIDTH', 'VISIBLE', 'VPADDING', 'VSCROLL',
        -            'VSCROLL-BAR', 'VSCROLL-POS', 'VTOP', 'WEB-BROWSER', 'WHEN',
        -            'WHERE', 'WIDTH', 'WIDTH-IN-CELLS', 'WINDOW',
        -            'WITH', 'WORDS', 'WORKING-STORAGE', 'WRAP', 'WRITE-ONLY',
        -            'WRITE-VERIFY', 'WRITING', ' XML', 'XML ', 'XML-CODE', 'XML-EVENT',
        -            'XML-NTEXT', 'XML-TEXT', 'YIELDING', 'YYYYDDD', 'YYYYMMDD', 'ZERO',
        -            'ZERO-FILL', 'ZEROES', 'ZEROS'
        -            ),
        -        3 => array( // Statement Keywords containing no spaces.
        -            'ACCEPT', 'ADD', 'ALTER', 'ALLOCATE', 'ATTACH', 'CALL', 'CANCEL',
        -            'CHAIN', 'CREATE',
        -            'CLOSE', 'COLOR', 'COMPUTE', 'COMMIT', 'CONTINUE',
        -            'COPY', 'DECLARE', 'DELEGATE', 'DELETE', 'DETACH', 'DISPLAY',
        -            'DIVIDE',
        -            'ENTER', 'ENTRY', 'EVALUATE', 'EXAMINE',
        -            'EXEC', 'EXECUTE', 'EXHIBIT', 'EXIT', 'FREE', 'GOBACK',
        -            'IF',  'INITIALIZE', 'INITIATE', 'INSPECT', 'INVOKE', 'MERGE',
        -            'MODIFY', 'MOVE', 'MULTIPLY', 'NOTE', 'ON', 'OPEN',
        -            'PERFORM', 'RAISE', 'READ', 'RECEIVE', 'RELEASE', 'RETURN',
        -            'RESET', 'RESUME',
        -            'REWRITE', 'ROLLBACK', 'SEARCH', 'SELECT', 'SERVICE', 'SET', 'SORT',
        -            'START', 'STOP', 'STRING', 'SUBTRACT', 'SYNC',
        -            'SUPPRESS', 'TERMINATE',
        -            'TRANSFORM', 'TRY', 'UNLOCKFILE', 'UNLOCK', 'UNSTRING', 'USE',
        -            'VALIDATE', 'WAIT', 'WRITE'
        -            ),
        -        4 => array( // Intrinsic functions
        -            'ABS', 'ACOS', 'ANNUITY', 'ASIN', 'ATAN', 'BOOLEAN-OF-INTEGER',
        -            'BYTE-LENGTH', 'CHAR', 'CHAR-NATIONAL',
        -            'COS', 'COMBINED-DATETIME', 'CONCATENATE', 'CURRENT-DATE',
        -            'DATE-OF-INTEGER', 'DATE-TO-YYYYMMDD', 'DAY-TO-YYYYDDD',
        -            'DAY-OF-INTEGER', 'DISPLAY-OF', 'E', 'EXCEPTION-FILE',
        -            'EXCEPTION-FILE-N', 'EXCEPTION-LOCATION',
        -            'EXCEPTION-LOCATION-N', 'EXCEPTION-STATEMENT', 'EXCEPTION-STATUS',
        -            'EXP', 'EXP10', 'FACTORIAL', 'FORMATTED-CURRENT-DATE',
        -            'FORMATTED-DATE', 'FORMATTED-DATETIME', 'FORMATTED-TIME',
        -            'FRACTION-PART', 'HIGHEST-ALGEBRAIC', 'INTEGER',
        -            'INTEGER-OF-BOOLEAN', 'INTEGER-OF-DATE', 'INTEGER-OF-DAY',
        -            'INTEGER-OF-FORMATTED-DATE', 'INTEGER-PART', 'LENGTH',
        -            'LOCALE-COMPARE',
        -            'LOCALE-DATE', 'LOCALE-TIME', 'LOCALE-TIME-FROM-SECONDS',
        -            'LOCALE-TIME-FROM-SECS', 'LOG',
        -            'LOG10', 'LOWER-CASE', 'LOWEST-ALGEBRAIC',
        -            'MAX', 'MEAN', 'MEDIAN', 'MIDRANGE',
        -            'MIN', 'MOD', 'NATIONAL-OF', 'NUMVAL', 'NUMVAL-C', 'NUMVAL-F',
        -            'ORD', 'ORD-MAX', 'ORD-MIN',
        -            'PI', 'PRESENT-VALUE', 'RANDOM', 'RANGE', 'REM', 'REVERSE',
        -            'SECONDS-FROM-FORMATTED-TIME', 'SIGN', 'SIN', 'SQRT',
        -            'SECONDS-PAST-MIDNIGHT', 'STANDARD-DEVIATION', 'STANDARD-COMPARE',
        -            'STORED-CHAR-LENGTH',
        -            'SUBSTITUTE', 'SUBSTITUE-CASE', 'SUM', 'TAN', 'TEST-DATE-YYYYMMDD',
        -            'TEST-DAY-YYYYDDD', 'TEST-FORMATTED-TIME', 'TEST-NUMVAL',
        -            'TEST-NUMVAL-C', 'TEST-NUMVAL-F',
        -            'TRIM', 'UPPER-CASE', 'VARIANCE', 'YEAR-TO-YYYY', 'WHEN-COMPILED'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        //  Arithmetic and comparison operators must be surrounded by spaces.
        -        ' + ', ' - ', ' * ', ' / ', ' ** ', ' ^ ',
        -        '.', ',',
        -        ' = ', ' < ', ' > ', ' >= ', ' <= ', ' <> ',
        -        '(', ')', '[', ']'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #008000; font-weight: bold;',
        -            3 => 'color: #000000; font-weight: bold;',
        -            4 => 'color: #9d7700;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #a0a0a0; font-style: italic;',
        -            2 => 'color: #000080; font-weight: bold;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #993399;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #800080;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => '(? 'CoffeeScript',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array('###' => '###'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    //Longest quotemarks ALWAYS first
        -    'QUOTEMARKS' => array('"""', "'''", '"', "'"),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -
        -        /*
        -        ** Set 1: control keywords
        -        */
        -        1 => array(
        -            'break', 'by', 'catch', 'continue', 'else', 'finally', 'for', 'in', 'of', 'if',
        -            'return', 'switch', 'then', 'throw', 'try', 'unless', 'when', 'while', 'until'
        -            ),
        -
        -        /*
        -        ** Set 2: logic keywords
        -        */
        -        2 => array(
        -            'and', 'or', 'is', 'isnt', 'not'
        -            ),
        -
        -        /*
        -        ** Set 3: other keywords
        -        */
        -        3 => array(
        -            'instanceof', 'new', 'delete', 'typeof',
        -            'class', 'super', 'this', 'extends'
        -            ),
        -
        -        /*
        -        ** Set 4: constants
        -        */
        -        4 => array(
        -            'true', 'false', 'on', 'off', 'yes', 'no',
        -            'Infinity', 'NaN', 'undefined', 'null'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -            '(', ')', '[', ']', '{', '}', '*', '&', '|', '%', '!', ',', ';', '<', '>', '?', '`',
        -            '+', '-', '*', '/', '->', '=>', '<<', '>>', '@', ':', '^'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #ff7700;font-weight:bold;',
        -            2 => 'color: #008000;',
        -            3 => 'color: #dc143c;',
        -            4 => 'color: #0000cd;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: black;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #483d8b;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff4500;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: black;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ''
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php
        deleted file mode 100644
        index fbd5c842..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php
        +++ /dev/null
        @@ -1,568 +0,0 @@
        - 'C++ (Qt)',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //C++ 11 string literal extensions
        -        3 => '/(?:L|u8?|U)(?=")/',
        -        //C++ 11 string literal extensions (raw)
        -        4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[abfnrtv\\\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
        -            'switch', 'while', 'delete', 'new', 'this'
        -            ),
        -        2 => array(
        -            'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM',
        -            'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
        -            'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
        -            'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
        -            'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
        -            'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
        -            'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
        -            'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
        -            'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
        -            'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
        -            'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
        -            'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
        -            'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
        -            'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
        -            'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class' ,
        -            'foreach','connect', 'Q_OBJECT' , 'slots' , 'signals', 'Q_SIGNALS', 'Q_SLOTS',
        -            'Q_FOREACH', 'QCOMPARE', 'QVERIFY', 'qDebug', 'kDebug', 'QBENCHMARK'
        -            ),
        -        3 => array(
        -            'cin', 'cerr', 'clog', 'cout',
        -            'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
        -            'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
        -            'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
        -            'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
        -            'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
        -            'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
        -            'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
        -            'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
        -            'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
        -            'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
        -            'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
        -            'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
        -            'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
        -            'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
        -            'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
        -            'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
        -            'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
        -            'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
        -            'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
        -            ),
        -        4 => array(
        -            'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
        -            'register', 'short', 'shortint', 'signed', 'static', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
        -            'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
        -            'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', 'wchar_t',
        -
        -            'int8', 'int16', 'int32', 'int64',
        -            'uint8', 'uint16', 'uint32', 'uint64',
        -
        -            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
        -            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
        -
        -            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
        -            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
        -
        -            'int8_t', 'int16_t', 'int32_t', 'int64_t',
        -            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
        -
        -            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t'
        -            ),
        -        5 => array(
        -            "Q_UINT16", "Q_UINT32", "Q_UINT64", "Q_UINT8", "Q_ULLONG",
        -            "Q_ULONG", "Q3Accel", "Q3Action", "Q3ActionGroup", "Q3AsciiBucket",
        -            "Q3AsciiCache", "Q3AsciiCacheIterator", "Q3AsciiDict",
        -            "Q3AsciiDictIterator", "Q3BaseBucket", "Q3BoxLayout", "Q3Button",
        -            "Q3ButtonGroup", "Q3Cache", "Q3CacheIterator", "Q3Canvas",
        -            "Q3CanvasEllipse", "Q3CanvasItem", "Q3CanvasItemList",
        -            "Q3CanvasLine", "Q3CanvasPixmap", "Q3CanvasPixmapArray",
        -            "Q3CanvasPolygon", "Q3CanvasPolygonalItem", "Q3CanvasRectangle",
        -            "Q3CanvasSpline", "Q3CanvasSprite", "Q3CanvasText", "Q3CanvasView",
        -            "Q3CheckListItem", "Q3CheckTableItem", "Q3CleanupHandler",
        -            "Q3ColorDrag", "Q3ComboBox", "Q3ComboTableItem", "Q3CString",
        -            "Q3DataBrowser", "Q3DataTable", "Q3DataView", "Q3DateEdit",
        -            "Q3DateTimeEdit", "Q3DateTimeEditBase", "Q3DeepCopy", "Q3Dict",
        -            "Q3DictIterator", "Q3Dns", "Q3DnsSocket", "Q3DockArea",
        -            "Q3DockAreaLayout", "Q3DockWindow", "Q3DragObject", "Q3DropSite",
        -            "Q3EditorFactory", "Q3FileDialog", "Q3FileIconProvider",
        -            "Q3FilePreview", "Q3Frame", "Q3Ftp", "Q3GArray", "Q3GCache",
        -            "Q3GCacheIterator", "Q3GDict", "Q3GDictIterator", "Q3GList",
        -            "Q3GListIterator", "Q3GListStdIterator", "Q3Grid", "Q3GridLayout",
        -            "Q3GridView", "Q3GroupBox", "Q3GVector", "Q3HBox", "Q3HBoxLayout",
        -            "Q3HButtonGroup", "Q3Header", "Q3HGroupBox", "Q3Http",
        -            "Q3HttpHeader", "Q3HttpRequestHeader", "Q3HttpResponseHeader",
        -            "Q3IconDrag", "Q3IconDragItem", "Q3IconView", "Q3IconViewItem",
        -            "Q3ImageDrag", "Q3IntBucket", "Q3IntCache", "Q3IntCacheIterator",
        -            "Q3IntDict", "Q3IntDictIterator", "Q3ListBox", "Q3ListBoxItem",
        -            "Q3ListBoxPixmap", "Q3ListBoxText", "Q3ListView", "Q3ListViewItem",
        -            "Q3ListViewItemIterator", "Q3LNode", "Q3LocalFs", "Q3MainWindow",
        -            "Q3MemArray", "Q3MimeSourceFactory", "Q3MultiLineEdit",
        -            "Q3NetworkOperation", "Q3NetworkProtocol", "Q3NetworkProtocolDict",
        -            "Q3NetworkProtocolFactory", "Q3NetworkProtocolFactoryBase",
        -            "Q3ObjectDictionary", "Q3PaintDeviceMetrics", "Q3Painter",
        -            "Q3Picture", "Q3PointArray", "Q3PolygonScanner", "Q3PopupMenu",
        -            "Q3Process", "Q3ProgressBar", "Q3ProgressDialog", "Q3PtrBucket",
        -            "Q3PtrCollection", "Q3PtrDict", "Q3PtrDictIterator", "Q3PtrList",
        -            "Q3PtrListIterator", "Q3PtrListStdIterator", "Q3PtrQueue",
        -            "Q3PtrStack", "Q3PtrVector", "Q3RangeControl", "Q3ScrollView",
        -            "Q3Semaphore", "Q3ServerSocket", "Q3Shared", "Q3Signal",
        -            "Q3SimpleRichText", "Q3SingleCleanupHandler", "Q3Socket",
        -            "Q3SocketDevice", "Q3SortedList", "Q3SpinWidget", "Q3SqlCursor",
        -            "Q3SqlEditorFactory", "Q3SqlFieldInfo", "Q3SqlFieldInfoList",
        -            "Q3SqlForm", "Q3SqlPropertyMap", "Q3SqlRecordInfo",
        -            "Q3SqlSelectCursor", "Q3StoredDrag", "Q3StrIList", "Q3StringBucket",
        -            "Q3StrIVec", "Q3StrList", "Q3StrListIterator", "Q3StrVec",
        -            "Q3StyleSheet", "Q3StyleSheetItem", "Q3SyntaxHighlighter",
        -            "Q3TabDialog", "Q3Table", "Q3TableItem", "Q3TableSelection",
        -            "Q3TextBrowser", "Q3TextDrag", "Q3TextEdit",
        -            "Q3TextEditOptimPrivate", "Q3TextStream", "Q3TextView",
        -            "Q3TimeEdit", "Q3ToolBar", "Q3TSFUNC", "Q3UriDrag", "Q3Url",
        -            "Q3UrlOperator", "Q3ValueList", "Q3ValueListConstIterator",
        -            "Q3ValueListIterator", "Q3ValueStack", "Q3ValueVector", "Q3VBox",
        -            "Q3VBoxLayout", "Q3VButtonGroup", "Q3VGroupBox", "Q3WhatsThis",
        -            "Q3WidgetStack", "Q3Wizard", "QAbstractButton",
        -            "QAbstractEventDispatcher", "QAbstractExtensionFactory",
        -            "QAbstractExtensionManager", "QAbstractFileEngine",
        -            "QAbstractFileEngineHandler", "QAbstractFileEngineIterator",
        -            "QAbstractFormBuilder", "QAbstractGraphicsShapeItem",
        -            "QAbstractItemDelegate", "QAbstractItemModel", "QAbstractItemView",
        -            "QAbstractListModel", "QAbstractMessageHandler",
        -            "QAbstractNetworkCache", "QAbstractPageSetupDialog",
        -            "QAbstractPrintDialog", "QAbstractProxyModel",
        -            "QAbstractScrollArea", "QAbstractSlider", "QAbstractSocket",
        -            "QAbstractSpinBox", "QAbstractTableModel",
        -            "QAbstractTextDocumentLayout", "QAbstractUndoItem",
        -            "QAbstractUriResolver", "QAbstractXmlNodeModel",
        -            "QAbstractXmlReceiver", "QAccessible", "QAccessible2Interface",
        -            "QAccessibleApplication", "QAccessibleBridge",
        -            "QAccessibleBridgeFactoryInterface", "QAccessibleBridgePlugin",
        -            "QAccessibleEditableTextInterface", "QAccessibleEvent",
        -            "QAccessibleFactoryInterface", "QAccessibleInterface",
        -            "QAccessibleInterfaceEx", "QAccessibleObject",
        -            "QAccessibleObjectEx", "QAccessiblePlugin",
        -            "QAccessibleSimpleEditableTextInterface",
        -            "QAccessibleTableInterface", "QAccessibleTextInterface",
        -            "QAccessibleValueInterface", "QAccessibleWidget",
        -            "QAccessibleWidgetEx", "QAction", "QActionEvent", "QActionGroup",
        -            "QApplication", "QArgument", "QAssistantClient", "QAtomicInt",
        -            "QAtomicPointer", "QAuthenticator", "QBasicAtomicInt",
        -            "QBasicAtomicPointer", "QBasicTimer", "QBitArray", "QBitmap",
        -            "QBitRef", "QBool", "QBoxLayout", "QBrush", "QBrushData", "QBuffer",
        -            "QButtonGroup", "QByteArray", "QByteArrayMatcher", "QByteRef",
        -            "QCache", "QCalendarWidget", "QCDEStyle", "QChar", "QCharRef",
        -            "QCheckBox", "QChildEvent", "QCleanlooksStyle", "QClipboard",
        -            "QClipboardEvent", "QCloseEvent", "QColor", "QColorDialog",
        -            "QColorGroup", "QColormap", "QColumnView", "QComboBox",
        -            "QCommandLinkButton", "QCommonStyle", "QCompleter",
        -            "QConicalGradient", "QConstString", "QContextMenuEvent", "QCOORD",
        -            "QCoreApplication", "QCryptographicHash", "QCursor", "QCursorShape",
        -            "QCustomEvent", "QDataStream", "QDataWidgetMapper", "QDate",
        -            "QDateEdit", "QDateTime", "QDateTimeEdit", "QDB2Driver",
        -            "QDB2Result", "QDBusAbstractAdaptor", "QDBusAbstractInterface",
        -            "QDBusArgument", "QDBusConnection", "QDBusConnectionInterface",
        -            "QDBusContext", "QDBusError", "QDBusInterface", "QDBusMessage",
        -            "QDBusMetaType", "QDBusObjectPath", "QDBusPendingCall",
        -            "QDBusPendingCallWatcher", "QDBusPendingReply",
        -            "QDBusPendingReplyData", "QDBusReply", "QDBusServer",
        -            "QDBusSignature", "QDBusVariant", "QDebug",
        -            "QDesignerActionEditorInterface", "QDesignerBrushManagerInterface",
        -            "QDesignerComponents", "QDesignerContainerExtension",
        -            "QDesignerCustomWidgetCollectionInterface",
        -            "QDesignerCustomWidgetInterface", "QDesignerDnDItemInterface",
        -            "QDesignerDynamicPropertySheetExtension", "QDesignerExportWidget",
        -            "QDesignerExtraInfoExtension", "QDesignerFormEditorInterface",
        -            "QDesignerFormEditorPluginInterface", "QDesignerFormWindowCursorInterface",
        -            "QDesignerFormWindowInterface", "QDesignerFormWindowManagerInterface",
        -            "QDesignerFormWindowToolInterface",
        -            "QDesignerIconCacheInterface", "QDesignerIntegrationInterface",
        -            "QDesignerLanguageExtension", "QDesignerLayoutDecorationExtension",
        -            "QDesignerMemberSheetExtension", "QDesignerMetaDataBaseInterface",
        -            "QDesignerMetaDataBaseItemInterface",
        -            "QDesignerObjectInspectorInterface", "QDesignerPromotionInterface",
        -            "QDesignerPropertyEditorInterface",
        -            "QDesignerPropertySheetExtension", "QDesignerResourceBrowserInterface",
        -            "QDesignerTaskMenuExtension", "QDesignerWidgetBoxInterface",
        -            "QDesignerWidgetDataBaseInterface", "QDesignerWidgetDataBaseItemInterface",
        -            "QDesignerWidgetFactoryInterface", "QDesktopServices",
        -            "QDesktopWidget", "QDial", "QDialog", "QDialogButtonBox", "QDir",
        -            "QDirIterator", "QDirModel", "QDockWidget", "QDomAttr",
        -            "QDomCDATASection", "QDomCharacterData", "QDomComment",
        -            "QDomDocument", "QDomDocumentFragment", "QDomDocumentType",
        -            "QDomElement", "QDomEntity", "QDomEntityReference",
        -            "QDomImplementation", "QDomNamedNodeMap", "QDomNode",
        -            "QDomNodeList", "QDomNotation", "QDomProcessingInstruction",
        -            "QDomText", "QDoubleSpinBox", "QDoubleValidator", "QDrag",
        -            "QDragEnterEvent", "QDragLeaveEvent", "QDragMoveEvent",
        -            "QDragResponseEvent", "QDropEvent", "QDynamicPropertyChangeEvent",
        -            "QErrorMessage", "QEvent", "QEventLoop", "QEventSizeOfChecker",
        -            "QExplicitlySharedDataPointer", "QExtensionFactory",
        -            "QExtensionManager", "QFactoryInterface", "QFile", "QFileDialog",
        -            "QFileIconProvider", "QFileInfo", "QFileInfoList",
        -            "QFileInfoListIterator", "QFileOpenEvent", "QFileSystemModel",
        -            "QFileSystemWatcher", "QFlag", "QFlags", "QFocusEvent",
        -            "QFocusFrame", "QFont", "QFontComboBox", "QFontDatabase",
        -            "QFontDialog", "QFontInfo", "QFontMetrics", "QFontMetricsF",
        -            "QForeachContainer", "QForeachContainerBase", "QFormBuilder",
        -            "QFormLayout", "QFrame", "QFSFileEngine", "QFtp", "QFuture",
        -            "QFutureInterface", "QFutureInterfaceBase", "QFutureIterator",
        -            "QFutureSynchronizer", "QFutureWatcher", "QFutureWatcherBase",
        -            "QGenericArgument", "QGenericReturnArgument", "QGLColormap",
        -            "QGLContext", "QGLFormat", "QGLFramebufferObject", "QGlobalStatic",
        -            "QGlobalStaticDeleter", "QGLPixelBuffer", "QGLWidget", "QGradient",
        -            "QGradientStop", "QGradientStops", "QGraphicsEllipseItem",
        -            "QGraphicsGridLayout", "QGraphicsItem", "QGraphicsItemAnimation",
        -            "QGraphicsItemGroup", "QGraphicsLayout", "QGraphicsLayoutItem",
        -            "QGraphicsLinearLayout", "QGraphicsLineItem", "QGraphicsPathItem",
        -            "QGraphicsPixmapItem", "QGraphicsPolygonItem",
        -            "QGraphicsProxyWidget", "QGraphicsRectItem", "QGraphicsScene",
        -            "QGraphicsSceneContextMenuEvent", "QGraphicsSceneDragDropEvent",
        -            "QGraphicsSceneEvent", "QGraphicsSceneHelpEvent",
        -            "QGraphicsSceneHoverEvent", "QGraphicsSceneMouseEvent",
        -            "QGraphicsSceneMoveEvent", "QGraphicsSceneResizeEvent",
        -            "QGraphicsSceneWheelEvent", "QGraphicsSimpleTextItem",
        -            "QGraphicsSvgItem", "QGraphicsTextItem", "QGraphicsView",
        -            "QGraphicsWidget", "QGridLayout", "QGroupBox", "QGtkStyle", "QHash",
        -            "QHashData", "QHashDummyNode", "QHashDummyValue", "QHashIterator",
        -            "QHashNode", "QHBoxLayout", "QHeaderView", "QHelpContentItem",
        -            "QHelpContentModel", "QHelpContentWidget", "QHelpEngine",
        -            "QHelpEngineCore", "QHelpEvent", "QHelpGlobal", "QHelpIndexModel",
        -            "QHelpIndexWidget", "QHelpSearchEngine", "QHelpSearchQuery",
        -            "QHelpSearchQueryWidget", "QHelpSearchResultWidget", "QHideEvent",
        -            "QHostAddress", "QHostInfo", "QHoverEvent", "QHttp", "QHttpHeader",
        -            "QHttpRequestHeader", "QHttpResponseHeader", "QIBaseDriver",
        -            "QIBaseResult", "QIcon", "QIconDragEvent", "QIconEngine",
        -            "QIconEngineFactoryInterface", "QIconEngineFactoryInterfaceV2",
        -            "QIconEnginePlugin", "QIconEnginePluginV2", "QIconEngineV2",
        -            "QIconSet", "QImage", "QImageIOHandler",
        -            "QImageIOHandlerFactoryInterface", "QImageIOPlugin", "QImageReader",
        -            "QImageTextKeyLang", "QImageWriter", "QIncompatibleFlag",
        -            "QInputContext", "QInputContextFactory",
        -            "QInputContextFactoryInterface", "QInputContextPlugin",
        -            "QInputDialog", "QInputEvent", "QInputMethodEvent", "Q_INT16",
        -            "Q_INT32", "Q_INT64", "Q_INT8", "QInternal", "QIntForSize",
        -            "QIntForType", "QIntValidator", "QIODevice", "Q_IPV6ADDR",
        -            "QIPv6Address", "QItemDelegate", "QItemEditorCreator",
        -            "QItemEditorCreatorBase", "QItemEditorFactory", "QItemSelection",
        -            "QItemSelectionModel", "QItemSelectionRange", "QKeyEvent",
        -            "QKeySequence", "QLabel", "QLatin1Char", "QLatin1String", "QLayout",
        -            "QLayoutItem", "QLayoutIterator", "QLCDNumber", "QLibrary",
        -            "QLibraryInfo", "QLine", "QLinearGradient", "QLineEdit", "QLineF",
        -            "QLinkedList", "QLinkedListData", "QLinkedListIterator",
        -            "QLinkedListNode", "QList", "QListData", "QListIterator",
        -            "QListView", "QListWidget", "QListWidgetItem", "Q_LLONG", "QLocale",
        -            "QLocalServer", "QLocalSocket", "Q_LONG", "QMacCompatGLenum",
        -            "QMacCompatGLint", "QMacCompatGLuint", "QMacGLCompatTypes",
        -            "QMacMime", "QMacPasteboardMime", "QMainWindow", "QMap", "QMapData",
        -            "QMapIterator", "QMapNode", "QMapPayloadNode", "QMatrix",
        -            "QMdiArea", "QMdiSubWindow", "QMenu", "QMenuBar",
        -            "QMenubarUpdatedEvent", "QMenuItem", "QMessageBox",
        -            "QMetaClassInfo", "QMetaEnum", "QMetaMethod", "QMetaObject",
        -            "QMetaObjectExtraData", "QMetaProperty", "QMetaType", "QMetaTypeId",
        -            "QMetaTypeId2", "QMimeData", "QMimeSource", "QModelIndex",
        -            "QModelIndexList", "QMotifStyle", "QMouseEvent", "QMoveEvent",
        -            "QMovie", "QMultiHash", "QMultiMap", "QMutableFutureIterator",
        -            "QMutableHashIterator", "QMutableLinkedListIterator",
        -            "QMutableListIterator", "QMutableMapIterator",
        -            "QMutableSetIterator", "QMutableStringListIterator",
        -            "QMutableVectorIterator", "QMutex", "QMutexLocker", "QMYSQLDriver",
        -            "QMYSQLResult", "QNetworkAccessManager", "QNetworkAddressEntry",
        -            "QNetworkCacheMetaData", "QNetworkCookie", "QNetworkCookieJar",
        -            "QNetworkDiskCache", "QNetworkInterface", "QNetworkProxy",
        -            "QNetworkProxyFactory", "QNetworkProxyQuery", "QNetworkReply",
        -            "QNetworkRequest", "QNoDebug", "QNoImplicitBoolCast", "QObject",
        -            "QObjectCleanupHandler", "QObjectData", "QObjectList",
        -            "QObjectUserData", "QOCIDriver", "QOCIResult", "QODBCDriver",
        -            "QODBCResult", "QPageSetupDialog", "QPaintDevice", "QPaintEngine",
        -            "QPaintEngineState", "QPainter", "QPainterPath",
        -            "QPainterPathPrivate", "QPainterPathStroker", "QPaintEvent",
        -            "QPair", "QPalette", "QPen", "QPersistentModelIndex", "QPicture",
        -            "QPictureFormatInterface", "QPictureFormatPlugin", "QPictureIO",
        -            "Q_PID", "QPixmap", "QPixmapCache", "QPlainTextDocumentLayout",
        -            "QPlainTextEdit", "QPlastiqueStyle", "QPluginLoader", "QPoint",
        -            "QPointer", "QPointF", "QPolygon", "QPolygonF", "QPrintDialog",
        -            "QPrintEngine", "QPrinter", "QPrinterInfo", "QPrintPreviewDialog",
        -            "QPrintPreviewWidget", "QProcess", "QProgressBar",
        -            "QProgressDialog", "QProxyModel", "QPSQLDriver", "QPSQLResult",
        -            "QPushButton", "QQueue", "QRadialGradient", "QRadioButton",
        -            "QReadLocker", "QReadWriteLock", "QRect", "QRectF", "QRegExp",
        -            "QRegExpValidator", "QRegion", "QResizeEvent", "QResource",
        -            "QReturnArgument", "QRgb", "QRubberBand", "QRunnable",
        -            "QScriptable", "QScriptClass", "QScriptClassPropertyIterator",
        -            "QScriptContext", "QScriptContextInfo", "QScriptContextInfoList",
        -            "QScriptEngine", "QScriptEngineAgent", "QScriptEngineDebugger",
        -            "QScriptExtensionInterface", "QScriptExtensionPlugin",
        -            "QScriptString", "QScriptSyntaxCheckResult", "QScriptValue",
        -            "QScriptValueIterator", "QScriptValueList", "QScrollArea",
        -            "QScrollBar", "QSemaphore", "QSessionManager", "QSet",
        -            "QSetIterator", "QSettings", "QSharedData", "QSharedDataPointer",
        -            "QSharedMemory", "QSharedPointer", "QShortcut", "QShortcutEvent",
        -            "QShowEvent", "QSignalMapper", "QSignalSpy", "QSimpleXmlNodeModel",
        -            "QSize", "QSizeF", "QSizeGrip", "QSizePolicy", "QSlider",
        -            "QSocketNotifier", "QSortFilterProxyModel", "QSound",
        -            "QSourceLocation", "QSpacerItem", "QSpinBox", "QSplashScreen",
        -            "QSplitter", "QSplitterHandle", "QSpontaneKeyEvent", "QSqlDatabase",
        -            "QSqlDriver", "QSqlDriverCreator", "QSqlDriverCreatorBase",
        -            "QSqlDriverFactoryInterface", "QSqlDriverPlugin", "QSqlError",
        -            "QSqlField", "QSqlIndex", "QSQLite2Driver", "QSQLite2Result",
        -            "QSQLiteDriver", "QSQLiteResult", "QSqlQuery", "QSqlQueryModel",
        -            "QSqlRecord", "QSqlRelation", "QSqlRelationalDelegate",
        -            "QSqlRelationalTableModel", "QSqlResult", "QSqlTableModel", "QSsl",
        -            "QSslCertificate", "QSslCipher", "QSslConfiguration", "QSslError",
        -            "QSslKey", "QSslSocket", "QStack", "QStackedLayout",
        -            "QStackedWidget", "QStandardItem", "QStandardItemEditorCreator",
        -            "QStandardItemModel", "QStatusBar", "QStatusTipEvent",
        -            "QStdWString", "QString", "QStringList", "QStringListIterator",
        -            "QStringListModel", "QStringMatcher", "QStringRef", "QStyle",
        -            "QStyledItemDelegate", "QStyleFactory", "QStyleFactoryInterface",
        -            "QStyleHintReturn", "QStyleHintReturnMask",
        -            "QStyleHintReturnVariant", "QStyleOption", "QStyleOptionButton",
        -            "QStyleOptionComboBox", "QStyleOptionComplex",
        -            "QStyleOptionDockWidget", "QStyleOptionDockWidgetV2",
        -            "QStyleOptionFocusRect", "QStyleOptionFrame", "QStyleOptionFrameV2",
        -            "QStyleOptionFrameV3", "QStyleOptionGraphicsItem",
        -            "QStyleOptionGroupBox", "QStyleOptionHeader",
        -            "QStyleOptionMenuItem", "QStyleOptionProgressBar",
        -            "QStyleOptionProgressBarV2", "QStyleOptionQ3DockWindow",
        -            "QStyleOptionQ3ListView", "QStyleOptionQ3ListViewItem",
        -            "QStyleOptionRubberBand", "QStyleOptionSizeGrip",
        -            "QStyleOptionSlider", "QStyleOptionSpinBox", "QStyleOptionTab",
        -            "QStyleOptionTabBarBase", "QStyleOptionTabBarBaseV2",
        -            "QStyleOptionTabV2", "QStyleOptionTabV3",
        -            "QStyleOptionTabWidgetFrame", "QStyleOptionTitleBar",
        -            "QStyleOptionToolBar", "QStyleOptionToolBox",
        -            "QStyleOptionToolBoxV2", "QStyleOptionToolButton",
        -            "QStyleOptionViewItem", "QStyleOptionViewItemV2",
        -            "QStyleOptionViewItemV3", "QStyleOptionViewItemV4", "QStylePainter",
        -            "QStylePlugin", "QSvgGenerator", "QSvgRenderer", "QSvgWidget",
        -            "QSyntaxHighlighter", "QSysInfo", "QSystemLocale",
        -            "QSystemSemaphore", "QSystemTrayIcon", "Qt", "Qt3Support",
        -            "QTabBar", "QTabletEvent", "QTableView", "QTableWidget",
        -            "QTableWidgetItem", "QTableWidgetSelectionRange", "QTabWidget",
        -            "QtAlgorithms", "QtAssistant", "QtCleanUpFunction",
        -            "QtConcurrentFilter", "QtConcurrentMap", "QtConcurrentRun",
        -            "QtContainerFwd", "QtCore", "QTcpServer", "QTcpSocket", "QtDBus",
        -            "QtDebug", "QtDesigner", "QTDSDriver", "QTDSResult",
        -            "QTemporaryFile", "QtEndian", "QTest", "QTestAccessibility",
        -            "QTestAccessibilityEvent", "QTestData", "QTestDelayEvent",
        -            "QTestEvent", "QTestEventList", "QTestEventLoop",
        -            "QTestKeyClicksEvent", "QTestKeyEvent", "QTestMouseEvent",
        -            "QtEvents", "QTextBlock", "QTextBlockFormat", "QTextBlockGroup",
        -            "QTextBlockUserData", "QTextBoundaryFinder", "QTextBrowser",
        -            "QTextCharFormat", "QTextCodec", "QTextCodecFactoryInterface",
        -            "QTextCodecPlugin", "QTextCursor", "QTextDecoder", "QTextDocument",
        -            "QTextDocumentFragment", "QTextDocumentWriter", "QTextEdit",
        -            "QTextEncoder", "QTextFormat", "QTextFragment", "QTextFrame",
        -            "QTextFrameFormat", "QTextFrameLayoutData", "QTextImageFormat",
        -            "QTextInlineObject", "QTextIStream", "QTextItem", "QTextLayout",
        -            "QTextLength", "QTextLine", "QTextList", "QTextListFormat",
        -            "QTextObject", "QTextObjectInterface", "QTextOption",
        -            "QTextOStream", "QTextStream", "QTextStreamFunction",
        -            "QTextStreamManipulator", "QTextTable", "QTextTableCell",
        -            "QTextTableCellFormat", "QTextTableFormat", "QtGlobal", "QtGui",
        -            "QtHelp", "QThread", "QThreadPool", "QThreadStorage",
        -            "QThreadStorageData", "QTime", "QTimeEdit", "QTimeLine", "QTimer",
        -            "QTimerEvent", "QtMsgHandler", "QtNetwork", "QToolBar",
        -            "QToolBarChangeEvent", "QToolBox", "QToolButton", "QToolTip",
        -            "QtOpenGL", "QtPlugin", "QtPluginInstanceFunction", "QTransform",
        -            "QTranslator", "QTreeView", "QTreeWidget", "QTreeWidgetItem",
        -            "QTreeWidgetItemIterator", "QTS", "QtScript", "QtScriptTools",
        -            "QtSql", "QtSvg", "QtTest", "QtUiTools", "QtWebKit", "QtXml",
        -            "QtXmlPatterns", "QTypeInfo", "QUdpSocket", "QUiLoader",
        -            "QUintForSize", "QUintForType", "QUndoCommand", "QUndoGroup",
        -            "QUndoStack", "QUndoView", "QUnixPrintWidget", "QUpdateLaterEvent",
        -            "QUrl", "QUrlInfo", "QUuid", "QValidator", "QVariant",
        -            "QVariantComparisonHelper", "QVariantHash", "QVariantList",
        -            "QVariantMap", "QVarLengthArray", "QVBoxLayout", "QVector",
        -            "QVectorData", "QVectorIterator", "QVectorTypedData",
        -            "QWaitCondition", "QWeakPointer", "QWebDatabase", "QWebFrame",
        -            "QWebHistory", "QWebHistoryInterface", "QWebHistoryItem",
        -            "QWebHitTestResult", "QWebPage", "QWebPluginFactory",
        -            "QWebSecurityOrigin", "QWebSettings", "QWebView", "QWhatsThis",
        -            "QWhatsThisClickedEvent", "QWheelEvent", "QWidget", "QWidgetAction",
        -            "QWidgetData", "QWidgetItem", "QWidgetItemV2", "QWidgetList",
        -            "QWidgetMapper", "QWidgetSet", "QWindowsCEStyle", "QWindowsMime",
        -            "QWindowsMobileStyle", "QWindowsStyle", "QWindowStateChangeEvent",
        -            "QWindowsVistaStyle", "QWindowsXPStyle", "QWizard", "QWizardPage",
        -            "QWMatrix", "QWorkspace", "QWriteLocker", "QX11EmbedContainer",
        -            "QX11EmbedWidget", "QX11Info", "QXmlAttributes",
        -            "QXmlContentHandler", "QXmlDeclHandler", "QXmlDefaultHandler",
        -            "QXmlDTDHandler", "QXmlEntityResolver", "QXmlErrorHandler",
        -            "QXmlFormatter", "QXmlInputSource", "QXmlItem",
        -            "QXmlLexicalHandler", "QXmlLocator", "QXmlName", "QXmlNamePool",
        -            "QXmlNamespaceSupport", "QXmlNodeModelIndex", "QXmlParseException",
        -            "QXmlQuery", "QXmlReader", "QXmlResultItems", "QXmlSerializer",
        -            "QXmlSimpleReader", "QXmlStreamAttribute", "QXmlStreamAttributes",
        -            "QXmlStreamEntityDeclaration", "QXmlStreamEntityDeclarations",
        -            "QXmlStreamEntityResolver", "QXmlStreamNamespaceDeclaration",
        -            "QXmlStreamNamespaceDeclarations", "QXmlStreamNotationDeclaration",
        -            "QXmlStreamNotationDeclarations", "QXmlStreamReader",
        -            "QXmlStreamStringRef", "QXmlStreamWriter"
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ',', ';', '|', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight:bold;',
        -            2 => 'color: #0057AE;',
        -            3 => 'color: #2B74C7;',
        -            4 => 'color: #0057AE;',
        -            5 => 'color: #22aadd;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #888888;',
        -            2 => 'color: #006E28;',
        -            3 => 'color: #BF0303;',
        -            4 => 'color: #BF0303;',
        -            'MULTI' => 'color: #888888; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #006E28;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #BF0303;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #B08000;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #2B74C7;',
        -            2 => 'color: #2B74C7;',
        -            3 => 'color: #2B74C7;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #006E28;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => 'http://qt-project.org/doc/latest/{FNAMEL}.html'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::',
        -        3 => '->',
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?|^])",
        -            'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
        -        ),
        -        'OOLANG' => array(
        -            'MATCH_AFTER' => '~?[a-zA-Z][a-zA-Z0-9_]*',
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php
        deleted file mode 100644
        index f642616a..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php
        +++ /dev/null
        @@ -1,836 +0,0 @@
        - 'C++ (WinAPI)',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //C++ 11 string literal extensions
        -        3 => '/(?:L|u8?|U)(?=")/',
        -        //C++ 11 string literal extensions (raw)
        -        4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[abfnrtv\\\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
        -            'switch', 'throw', 'while'
        -            ),
        -        2 => array(
        -            'NULL', 'false', 'true', 'enum', 'errno', 'EDOM',
        -            'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
        -            'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
        -            'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
        -            'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
        -            'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
        -            'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
        -            'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
        -            'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
        -            'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
        -            'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
        -            'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
        -            'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
        -            'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
        -            'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class'
        -            ),
        -        3 => array(
        -            'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
        -            'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
        -            'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
        -            'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
        -            'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
        -            'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
        -            'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
        -            'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
        -            'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
        -            'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
        -            'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
        -            'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
        -            'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
        -            'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
        -            'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
        -            'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
        -            'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
        -            'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
        -            'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
        -            'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
        -            ),
        -        4 => array(
        -            'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
        -            'register', 'short', 'shortint', 'signed', 'static', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
        -            'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
        -            'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', 'wchar_t',
        -
        -            'int8', 'int16', 'int32', 'int64',
        -            'uint8', 'uint16', 'uint32', 'uint64',
        -
        -            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
        -            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
        -
        -            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
        -            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
        -
        -            'int8_t', 'int16_t', 'int32_t', 'int64_t',
        -            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
        -
        -            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t'
        -            ),
        -        // Public API
        -        5 => array(
        -            'AssignProcessToJobObject', 'CommandLineToArgvW', 'ConvertThreadToFiber',
        -            'CreateFiber', 'CreateJobObjectA', 'CreateJobObjectW', 'CreateProcessA',
        -            'CreateProcessAsUserA', 'CreateProcessAsUserW', 'CreateProcessW',
        -            'CreateRemoteThread', 'CreateThread', 'DeleteFiber', 'ExitProcess',
        -            'ExitThread', 'FreeEnvironmentStringsA', 'FreeEnvironmentStringsW',
        -            'GetCommandLineA', 'GetCommandLineW', 'GetCurrentProcess',
        -            'GetCurrentProcessId', 'GetCurrentThread', 'GetCurrentThreadId',
        -            'GetEnvironmentStringsA', 'GetEnvironmentStringsW',
        -            'GetEnvironmentVariableA', 'GetEnvironmentVariableW', 'GetExitCodeProcess',
        -            'GetExitCodeThread', 'GetGuiResources', 'GetPriorityClass',
        -            'GetProcessAffinityMask', 'GetProcessPriorityBoost',
        -            'GetProcessShutdownParameters', 'GetProcessTimes', 'GetProcessVersion',
        -            'GetProcessWorkingSetSize', 'GetStartupInfoA', 'GetStartupInfoW',
        -            'GetThreadPriority', 'GetThreadPriorityBoost', 'GetThreadTimes',
        -            'OpenJobObjectA', 'OpenJobObjectW', 'OpenProcess',
        -            'QueryInformationJobObject', 'ResumeThread', 'SetEnvironmentVariableA',
        -            'SetEnvironmentVariableW', 'SetInformationJobObject', 'SetPriorityClass',
        -            'SetProcessAffinityMask', 'SetProcessPriorityBoost',
        -            'SetProcessShutdownParameters', 'SetProcessWorkingSetSize',
        -            'SetThreadAffinityMask', 'SetThreadIdealProcessor', 'SetThreadPriority',
        -            'SetThreadPriorityBoost', 'Sleep', 'SleepEx', 'SuspendThread',
        -            'SwitchToFiber', 'SwitchToThread', 'TerminateJobObject', 'TerminateProcess',
        -            'TerminateThread', 'WaitForInputIdle', 'WinExec',
        -
        -            '_hread', '_hwrite', '_lclose', '_lcreat', '_llseek', '_lopen', '_lread',
        -            '_lwrite', 'AreFileApisANSI', 'CancelIo', 'CopyFileA', 'CopyFileW',
        -            'CreateDirectoryA', 'CreateDirectoryExA', 'CreateDirectoryExW',
        -            'CreateDirectoryW', 'CreateFileA', 'CreateFileW', 'DeleteFileA',
        -            'DeleteFileW', 'FindClose', 'FindCloseChangeNotification',
        -            'FindFirstChangeNotificationA', 'FindFirstChangeNotificationW',
        -            'FindFirstFileA', 'FindFirstFileW', 'FindNextFileA', 'FindNextFileW',
        -            'FlushFileBuffers', 'GetCurrentDirectoryA', 'GetCurrentDirectoryW',
        -            'GetDiskFreeSpaceA', 'GetDiskFreeSpaceExA', 'GetDiskFreeSpaceExW',
        -            'GetDiskFreeSpaceW', 'GetDriveTypeA', 'GetDriveTypeW', 'GetFileAttributesA',
        -            'GetFileAttributesExA', 'GetFileAttributesExW', 'GetFileAttributesW',
        -            'GetFileInformationByHandle', 'GetFileSize', 'GetFileType',
        -            'GetFullPathNameA', 'GetFullPathNameW', 'GetLogicalDrives',
        -            'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetLongPathNameA',
        -            'GetLongPathNameW', 'GetShortPathNameA', 'GetShortPathNameW',
        -            'GetTempFileNameA', 'GetTempFileNameW', 'GetTempPathA', 'GetTempPathW',
        -            'LockFile', 'MoveFileA', 'MoveFileW', 'MulDiv', 'OpenFile',
        -            'QueryDosDeviceA', 'QueryDosDeviceW', 'ReadFile', 'ReadFileEx',
        -            'RemoveDirectoryA', 'RemoveDirectoryW', 'SearchPathA', 'SearchPathW',
        -            'SetCurrentDirectoryA', 'SetCurrentDirectoryW', 'SetEndOfFile',
        -            'SetFileApisToANSI', 'SetFileApisToOEM', 'SetFileAttributesA',
        -            'SetFileAttributesW', 'SetFilePointer', 'SetHandleCount',
        -            'SetVolumeLabelA', 'SetVolumeLabelW', 'UnlockFile', 'WriteFile',
        -            'WriteFileEx',
        -
        -            'DeviceIoControl',
        -
        -            'GetModuleFileNameA', 'GetModuleFileNameW', 'GetProcAddress',
        -            'LoadLibraryA', 'LoadLibraryExA', 'LoadLibraryExW', 'LoadLibraryW',
        -            'LoadModule',
        -
        -            'GetPrivateProfileIntA', 'GetPrivateProfileIntW',
        -            'GetPrivateProfileSectionA', 'GetPrivateProfileSectionNamesA',
        -            'GetPrivateProfileSectionNamesW', 'GetPrivateProfileSectionW',
        -            'GetPrivateProfileStringA', 'GetPrivateProfileStringW',
        -            'GetPrivateProfileStructA', 'GetPrivateProfileStructW',
        -            'GetProfileIntA', 'GetProfileIntW', 'GetProfileSectionA',
        -            'GetProfileSectionW', 'GetProfileStringA', 'GetProfileStringW',
        -            'RegCloseKey', 'RegConnectRegistryA', 'RegConnectRegistryW',
        -            'RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW',
        -            'RegCreateKeyW', 'RegDeleteKeyA', 'RegDeleteKeyW', 'RegDeleteValueA',
        -            'RegDeleteValueW', 'RegEnumKeyA', 'RegEnumKeyExA', 'RegEnumKeyExW',
        -            'RegEnumKeyW', 'RegEnumValueA', 'RegEnumValueW', 'RegFlushKey',
        -            'RegGetKeySecurity', 'RegLoadKeyA', 'RegLoadKeyW',
        -            'RegNotifyChangeKeyValue', 'RegOpenKeyA', 'RegOpenKeyExA', 'RegOpenKeyExW',
        -            'RegOpenKeyW', 'RegOverridePredefKey', 'RegQueryInfoKeyA',
        -            'RegQueryInfoKeyW', 'RegQueryMultipleValuesA', 'RegQueryMultipleValuesW',
        -            'RegQueryValueA', 'RegQueryValueExA', 'RegQueryValueExW', 'RegQueryValueW',
        -            'RegReplaceKeyA', 'RegReplaceKeyW', 'RegRestoreKeyA', 'RegRestoreKeyW',
        -            'RegSaveKeyA', 'RegSaveKeyW', 'RegSetKeySecurity', 'RegSetValueA',
        -            'RegSetValueExA', 'RegSetValueExW', 'RegSetValueW', 'RegUnLoadKeyA',
        -            'RegUnLoadKeyW', 'WritePrivateProfileSectionA', 'WritePrivateProfileSectionW',
        -            'WritePrivateProfileStringA', 'WritePrivateProfileStringW',
        -            'WritePrivateProfileStructA', 'WritePrivateProfileStructW',
        -            'WriteProfileSectionA', 'WriteProfileSectionW', 'WriteProfileStringA',
        -            'WriteProfileStringW',
        -
        -            'AccessCheck', 'AccessCheckAndAuditAlarmA', 'AccessCheckAndAuditAlarmW',
        -            'AccessCheckByType', 'AccessCheckByTypeAndAuditAlarmA',
        -            'AccessCheckByTypeAndAuditAlarmW', 'AccessCheckByTypeResultList',
        -            'AccessCheckByTypeResultListAndAuditAlarmA', 'AccessCheckByTypeResultListAndAuditAlarmW',
        -            'AddAccessAllowedAce', 'AddAccessAllowedAceEx', 'AddAccessAllowedObjectAce',
        -            'AddAccessDeniedAce', 'AddAccessDeniedAceEx', 'AddAccessDeniedObjectAce',
        -            'AddAce', 'AddAuditAccessAce', 'AddAuditAccessAceEx', 'AddAuditAccessObjectAce',
        -            'AdjustTokenGroups', 'AdjustTokenPrivileges', 'AllocateAndInitializeSid',
        -            'AllocateLocallyUniqueId', 'AreAllAccessesGranted', 'AreAnyAccessesGranted',
        -            'BuildExplicitAccessWithNameA', 'BuildExplicitAccessWithNameW',
        -            'BuildImpersonateExplicitAccessWithNameA', 'BuildImpersonateExplicitAccessWithNameW',
        -            'BuildImpersonateTrusteeA', 'BuildImpersonateTrusteeW', 'BuildSecurityDescriptorA',
        -            'BuildSecurityDescriptorW', 'BuildTrusteeWithNameA', 'BuildTrusteeWithNameW',
        -            'BuildTrusteeWithSidA', 'BuildTrusteeWithSidW',
        -            'ConvertToAutoInheritPrivateObjectSecurity', 'CopySid', 'CreatePrivateObjectSecurity',
        -            'CreatePrivateObjectSecurityEx', 'CreateRestrictedToken', 'DeleteAce',
        -            'DestroyPrivateObjectSecurity', 'DuplicateToken', 'DuplicateTokenEx',
        -            'EqualPrefixSid', 'EqualSid', 'FindFirstFreeAce', 'FreeSid', 'GetAce',
        -            'GetAclInformation', 'GetAuditedPermissionsFromAclA', 'GetAuditedPermissionsFromAclW',
        -            'GetEffectiveRightsFromAclA', 'GetEffectiveRightsFromAclW',
        -            'GetExplicitEntriesFromAclA', 'GetExplicitEntriesFromAclW', 'GetFileSecurityA',
        -            'GetFileSecurityW', 'GetKernelObjectSecurity', 'GetLengthSid', 'GetMultipleTrusteeA',
        -            'GetMultipleTrusteeOperationA', 'GetMultipleTrusteeOperationW', 'GetMultipleTrusteeW',
        -            'GetNamedSecurityInfoA', 'GetNamedSecurityInfoW', 'GetPrivateObjectSecurity',
        -            'GetSecurityDescriptorControl', 'GetSecurityDescriptorDacl',
        -            'GetSecurityDescriptorGroup', 'GetSecurityDescriptorLength',
        -            'GetSecurityDescriptorOwner', 'GetSecurityDescriptorSacl', 'GetSecurityInfo',
        -            'GetSidIdentifierAuthority', 'GetSidLengthRequired', 'GetSidSubAuthority',
        -            'GetSidSubAuthorityCount', 'GetTokenInformation', 'GetTrusteeFormA',
        -            'GetTrusteeFormW', 'GetTrusteeNameA', 'GetTrusteeNameW', 'GetTrusteeTypeA',
        -            'GetTrusteeTypeW', 'GetUserObjectSecurity', 'ImpersonateLoggedOnUser',
        -            'ImpersonateNamedPipeClient', 'ImpersonateSelf', 'InitializeAcl',
        -            'InitializeSecurityDescriptor', 'InitializeSid', 'IsTokenRestricted', 'IsValidAcl',
        -            'IsValidSecurityDescriptor', 'IsValidSid', 'LogonUserA', 'LogonUserW',
        -            'LookupAccountNameA', 'LookupAccountNameW', 'LookupAccountSidA', 'LookupAccountSidW',
        -            'LookupPrivilegeDisplayNameA', 'LookupPrivilegeDisplayNameW', 'LookupPrivilegeNameA',
        -            'LookupPrivilegeNameW', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW',
        -            'LookupSecurityDescriptorPartsA', 'LookupSecurityDescriptorPartsW', 'MakeAbsoluteSD',
        -            'MakeSelfRelativeSD', 'MapGenericMask', 'ObjectCloseAuditAlarmA',
        -            'ObjectCloseAuditAlarmW', 'ObjectDeleteAuditAlarmA', 'ObjectDeleteAuditAlarmW',
        -            'ObjectOpenAuditAlarmA', 'ObjectOpenAuditAlarmW', 'ObjectPrivilegeAuditAlarmA',
        -            'ObjectPrivilegeAuditAlarmW', 'OpenProcessToken', 'OpenThreadToken', 'PrivilegeCheck',
        -            'PrivilegedServiceAuditAlarmA', 'PrivilegedServiceAuditAlarmW', 'RevertToSelf',
        -            'SetAclInformation', 'SetEntriesInAclA', 'SetEntriesInAclW', 'SetFileSecurityA',
        -            'SetFileSecurityW', 'SetKernelObjectSecurity', 'SetNamedSecurityInfoA',
        -            'SetNamedSecurityInfoW', 'SetPrivateObjectSecurity', 'SetPrivateObjectSecurityEx',
        -            'SetSecurityDescriptorControl', 'SetSecurityDescriptorDacl',
        -            'SetSecurityDescriptorGroup', 'SetSecurityDescriptorOwner',
        -            'SetSecurityDescriptorSacl', 'SetSecurityInfo', 'SetThreadToken',
        -            'SetTokenInformation', 'SetUserObjectSecurity', 'ChangeServiceConfig2A',
        -            'ChangeServiceConfig2W', 'ChangeServiceConfigA', 'ChangeServiceConfigW',
        -            'CloseServiceHandle', 'ControlService', 'CreateServiceA', 'CreateServiceW',
        -            'DeleteService', 'EnumDependentServicesA', 'EnumDependentServicesW',
        -            'EnumServicesStatusA', 'EnumServicesStatusW', 'GetServiceDisplayNameA',
        -            'GetServiceDisplayNameW', 'GetServiceKeyNameA', 'GetServiceKeyNameW',
        -            'LockServiceDatabase', 'NotifyBootConfigStatus', 'OpenSCManagerA', 'OpenSCManagerW',
        -            'OpenServiceA', 'OpenServiceW', 'QueryServiceConfig2A', 'QueryServiceConfig2W',
        -            'QueryServiceConfigA', 'QueryServiceConfigW', 'QueryServiceLockStatusA',
        -            'QueryServiceLockStatusW', 'QueryServiceObjectSecurity', 'QueryServiceStatus',
        -            'RegisterServiceCtrlHandlerA', 'RegisterServiceCtrlHandlerW',
        -            'SetServiceObjectSecurity', 'SetServiceStatus', 'StartServiceA',
        -            'StartServiceCtrlDispatcherA', 'StartServiceCtrlDispatcherW', 'StartServiceW',
        -            'UnlockServiceDatabase',
        -
        -            'MultinetGetConnectionPerformanceA', 'MultinetGetConnectionPerformanceW',
        -            'NetAlertRaise', 'NetAlertRaiseEx', 'NetApiBufferAllocate', 'NetApiBufferFree',
        -            'NetApiBufferReallocate', 'NetApiBufferSize', 'NetConnectionEnum', 'NetFileClose',
        -            'NetFileGetInfo', 'NetGetAnyDCName', 'NetGetDCName', 'NetGetDisplayInformationIndex',
        -            'NetGroupAdd', 'NetGroupAddUser', 'NetGroupDel', 'NetGroupDelUser', 'NetGroupEnum',
        -            'NetGroupGetInfo', 'NetGroupGetUsers', 'NetGroupSetInfo', 'NetGroupSetUsers',
        -            'NetLocalGroupAdd', 'NetLocalGroupAddMember', 'NetLocalGroupAddMembers',
        -            'NetLocalGroupDel', 'NetLocalGroupDelMember', 'NetLocalGroupDelMembers',
        -            'NetLocalGroupEnum', 'NetLocalGroupGetInfo', 'NetLocalGroupGetMembers',
        -            'NetLocalGroupSetInfo', 'NetLocalGroupSetMembers', 'NetMessageBufferSend',
        -            'NetMessageNameAdd', 'NetMessageNameDel', 'NetMessageNameEnum',
        -            'NetMessageNameGetInfo', 'NetQueryDisplayInformation', 'NetRemoteComputerSupports',
        -            'NetRemoteTOd', 'NetReplExportDirAdd', 'NetReplExportDirDel', 'NetReplExportDirEnum',
        -            'NetReplExportDirGetInfo', 'NetReplExportDirLock', 'NetReplExportDirSetInfo',
        -            'NetReplExportDirUnlock', 'NetReplGetInfo', 'NetReplImportDirAdd',
        -            'NetReplImportDirDel', 'NetReplImportDirEnum', 'NetReplImportDirGetInfo',
        -            'NetReplImportDirLock', 'NetReplImportDirUnlock', 'NetReplSetInfo',
        -            'NetScheduleJobAdd', 'NetScheduleJobDel', 'NetScheduleJobEnum',
        -            'NetScheduleJobGetInfo', 'NetServerComputerNameAdd', 'NetServerComputerNameDel',
        -            'NetServerDiskEnum', 'NetServerEnum', 'NetServerEnumEx', 'NetServerGetInfo',
        -            'NetServerSetInfo', 'NetServerTransportAdd', 'NetServerTransportAddEx',
        -            'NetServerTransportDel', 'NetServerTransportEnum', 'NetSessionDel', 'NetSessionEnum',
        -            'NetSessionGetInfo', 'NetShareAdd', 'NetShareCheck', 'NetShareDel', 'NetShareEnum',
        -            'NetShareGetInfo', 'NetShareSetInfo', 'NetStatisticsGet', 'NetUseAdd', 'NetUseDel',
        -            'NetUseEnum', 'NetUseGetInfo', 'NetUserAdd', 'NetUserChangePassword', 'NetUserDel',
        -            'NetUserEnum', 'NetUserGetGroups', 'NetUserGetInfo', 'NetUserGetLocalGroups',
        -            'NetUserModalsGet', 'NetUserModalsSet', 'NetUserSetGroups', 'NetUserSetInfo',
        -            'NetWkstaGetInfo', 'NetWkstaSetInfo', 'NetWkstaTransportAdd', 'NetWkstaTransportDel',
        -            'NetWkstaTransportEnum', 'NetWkstaUserEnum', 'NetWkstaUserGetInfo',
        -            'NetWkstaUserSetInfo', 'WNetAddConnection2A', 'WNetAddConnection2W',
        -            'WNetAddConnection3A', 'WNetAddConnection3W', 'WNetAddConnectionA',
        -            'WNetAddConnectionW', 'WNetCancelConnection2A', 'WNetCancelConnection2W',
        -            'WNetCancelConnectionA', 'WNetCancelConnectionW', 'WNetCloseEnum',
        -            'WNetConnectionDialog', 'WNetConnectionDialog1A', 'WNetConnectionDialog1W',
        -            'WNetDisconnectDialog', 'WNetDisconnectDialog1A', 'WNetDisconnectDialog1W',
        -            'WNetEnumResourceA', 'WNetEnumResourceW', 'WNetGetConnectionA', 'WNetGetConnectionW',
        -            'WNetGetLastErrorA', 'WNetGetLastErrorW', 'WNetGetNetworkInformationA',
        -            'WNetGetNetworkInformationW', 'WNetGetProviderNameA', 'WNetGetProviderNameW',
        -            'WNetGetResourceInformationA', 'WNetGetResourceInformationW',
        -            'WNetGetResourceParentA', 'WNetGetResourceParentW', 'WNetGetUniversalNameA',
        -            'WNetGetUniversalNameW', 'WNetGetUserA', 'WNetGetUserW', 'WNetOpenEnumA',
        -            'WNetOpenEnumW', 'WNetUseConnectionA', 'WnetUseConnectionW',
        -
        -            'accept', 'bind', 'closesocket', 'connect', 'gethostbyaddr', 'gethostbyname',
        -            'gethostname', 'getpeername', 'getprotobyname', 'getprotobynumber', 'getservbyname',
        -            'getservbyport', 'getsockname', 'getsockopt', 'htonl', 'htons', 'inet_addr',
        -            'inet_ntoa', 'ioctlsocket', 'listen', 'ntohl', 'ntohs', 'recv', 'recvfrom', 'select',
        -            'send', 'sendto', 'setsockopt', 'shutdown', 'socket', 'WSAAccept',
        -            'WSAAddressToStringA', 'WSAAddressToStringW', 'WSAAsyncGetHostByAddr',
        -            'WSAAsyncGetHostByName', 'WSAAsyncGetProtoByName', 'WSAAsyncGetProtoByNumber',
        -            'WSAAsyncGetServByName', 'WSAAsyncGetServByPort', 'WSAAsyncSelect',
        -            'WSACancelAsyncRequest', 'WSACancelBlockingCall', 'WSACleanup', 'WSACloseEvent',
        -            'WSAConnect', 'WSACreateEvent', 'WSADuplicateSocketA', 'WSADuplicateSocketW',
        -            'WSAEnumNameSpaceProvidersA', 'WSAEnumNameSpaceProvidersW', 'WSAEnumNetworkEvents',
        -            'WSAEnumProtocolsA', 'WSAEnumProtocolsW', 'WSAEventSelect', 'WSAGetLastError',
        -            'WSAGetOverlappedResult', 'WSAGetQOSByName', 'WSAGetServiceClassInfoA',
        -            'WSAGetServiceClassInfoW', 'WSAGetServiceClassNameByClassIdA',
        -            'WSAGetServiceClassNameByClassIdW', 'WSAHtonl', 'WSAHtons', 'WSAInstallServiceClassA',
        -            'WSAInstallServiceClassW', 'WSAIoctl', 'WSAIsBlocking', 'WSAJoinLeaf',
        -            'WSALookupServiceBeginA', 'WSALookupServiceBeginW', 'WSALookupServiceEnd',
        -            'WSALookupServiceNextA', 'WSALookupServiceNextW', 'WSANtohl', 'WSANtohs',
        -            'WSAProviderConfigChange', 'WSARecv', 'WSARecvDisconnect', 'WSARecvFrom',
        -            'WSARemoveServiceClass', 'WSAResetEvent', 'WSASend', 'WSASendDisconnect', 'WSASendTo',
        -            'WSASetBlockingHook', 'WSASetEvent', 'WSASetLastError', 'WSASetServiceA',
        -            'WSASetServiceW', 'WSASocketA', 'WSASocketW', 'WSAStartup', 'WSAStringToAddressA',
        -            'WSAStringToAddressW', 'WSAUnhookBlockingHook', 'WSAWaitForMultipleEvents',
        -            'WSCDeinstallProvider', 'WSCEnableNSProvider', 'WSCEnumProtocols',
        -            'WSCGetProviderPath', 'WSCInstallNameSpace', 'WSCInstallProvider',
        -            'WSCUnInstallNameSpace',
        -
        -            'ContinueDebugEvent', 'DebugActiveProcess', 'DebugBreak', 'FatalExit',
        -            'FlushInstructionCache', 'GetThreadContext', 'GetThreadSelectorEntry',
        -            'IsDebuggerPresent', 'OutputDebugStringA', 'OutputDebugStringW', 'ReadProcessMemory',
        -            'SetDebugErrorLevel', 'SetThreadContext', 'WaitForDebugEvent', 'WriteProcessMemory',
        -
        -            'CloseHandle', 'DuplicateHandle', 'GetHandleInformation', 'SetHandleInformation',
        -
        -            'AdjustWindowRect', 'AdjustWindowRectEx', 'AllowSetForegroundWindow',
        -            'AnimateWindow', 'AnyPopup', 'ArrangeIconicWindows', 'BeginDeferWindowPos',
        -            'BringWindowToTop', 'CascadeWindows', 'ChildWindowFromPoint',
        -            'ChildWindowFromPointEx', 'CloseWindow', 'CreateWindowExA', 'CreateWindowExW',
        -            'DeferWindowPos', 'DestroyWindow', 'EndDeferWindowPos', 'EnumChildWindows',
        -            'EnumThreadWindows', 'EnumWindows', 'FindWindowA', 'FindWindowExA', 'FindWindowExW',
        -            'FindWindowW', 'GetAltTabInfoA', 'GetAltTabInfoW', 'GetAncestor', 'GetClientRect',
        -            'GetDesktopWindow', 'GetForegroundWindow', 'GetGUIThreadInfo', 'GetLastActivePopup',
        -            'GetLayout', 'GetParent', 'GetProcessDefaultLayout', 'GetTitleBarInf', 'GetTopWindow',
        -            'GetWindow', 'GetWindowInfo', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW',
        -            'GetWindowPlacement', 'GetWindowRect', 'GetWindowTextA', 'GetWindowTextLengthA',
        -            'GetWindowTextLengthW', 'GetWindowTextW', 'GetWindowThreadProcessId', 'IsChild',
        -            'IsIconic', 'IsWindow', 'IsWindowUnicode', 'IsWindowVisible', 'IsZoomed',
        -            'LockSetForegroundWindow', 'MoveWindow', 'OpenIcon', 'RealChildWindowFromPoint',
        -            'RealGetWindowClassA', 'RealGetWindowClassW', 'SetForegroundWindow',
        -            'SetLayeredWindowAttributes', 'SetLayout', 'SetParent', 'SetProcessDefaultLayout',
        -            'SetWindowPlacement', 'SetWindowPos', 'SetWindowTextA', 'SetWindowTextW',
        -            'ShowOwnedPopups', 'ShowWindow', 'ShowWindowAsync', 'TileWindows',
        -            'UpdateLayeredWindow', 'WindowFromPoint',
        -
        -            'CreateDialogIndirectParamA', 'CreateDialogIndirectParamW', 'CreateDialogParamA',
        -            'CreateDialogParamW', 'DefDlgProcA', 'DefDlgProcW', 'DialogBoxIndirectParamA',
        -            'DialogBoxIndirectParamW', 'DialogBoxParamA', 'DialogBoxParamW', 'EndDialog',
        -            'GetDialogBaseUnits', 'GetDlgCtrlID', 'GetDlgItem', 'GetDlgItemInt',
        -            'GetDlgItemTextA', 'GetDlgItemTextW', 'GetNextDlgGroupItem', 'GetNextDlgTabItem',
        -            'IsDialogMessageA', 'IsDialogMessageW', 'MapDialogRect', 'MessageBoxA',
        -            'MessageBoxExA', 'MessageBoxExW', 'MessageBoxIndirectA', 'MessageBoxIndirectW',
        -            'MessageBoxW', 'SendDlgItemMessageA', 'SendDlgItemMessageW', 'SetDlgItemInt',
        -            'SetDlgItemTextA', 'SetDlgItemTextW',
        -
        -            'GetWriteWatch', 'GlobalMemoryStatus', 'GlobalMemoryStatusEx', 'IsBadCodePtr',
        -            'IsBadReadPtr', 'IsBadStringPtrA', 'IsBadStringPtrW', 'IsBadWritePtr',
        -            'ResetWriteWatch', 'AllocateUserPhysicalPages', 'FreeUserPhysicalPages',
        -            'MapUserPhysicalPages', 'MapUserPhysicalPagesScatter', 'GlobalAlloc', 'GlobalFlags',
        -            'GlobalFree', 'GlobalHandle', 'GlobalLock', 'GlobalReAlloc', 'GlobalSize',
        -            'GlobalUnlock', 'LocalAlloc', 'LocalFlags', 'LocalFree', 'LocalHandle', 'LocalLock',
        -            'LocalReAlloc', 'LocalSize', 'LocalUnlock', 'GetProcessHeap', 'GetProcessHeaps',
        -            'HeapAlloc', 'HeapCompact', 'HeapCreate', 'HeapDestroy', 'HeapFree', 'HeapLock',
        -            'HeapReAlloc', 'HeapSize', 'HeapUnlock', 'HeapValidate', 'HeapWalk', 'VirtualAlloc',
        -            'VirtualAllocEx', 'VirtualFree', 'VirtualFreeEx', 'VirtualLock', 'VirtualProtect',
        -            'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'VirtualUnlock',
        -            'GetFreeSpace', 'GlobalCompact', 'GlobalFix', 'GlobalUnfix', 'GlobalUnWire',
        -            'GlobalWire', 'IsBadHugeReadPtr', 'IsBadHugeWritePtr', 'LocalCompact', 'LocalShrink',
        -
        -            'GetClassInfoA', 'GetClassInfoW', 'GetClassInfoExA', 'GetClassInfoExW',
        -            'GetClassLongA', 'GetClassLongW', 'GetClassLongPtrA', 'GetClassLongPtrW',
        -            'RegisterClassA', 'RegisterClassW', 'RegisterClassExA', 'RegisterClassExW',
        -            'SetClassLongA', 'SetClassLongW', 'SetClassLongPtrA', 'SetClassLongPtrW',
        -            'SetWindowLongA', 'SetWindowLongW', 'SetWindowLongPtrA', 'SetWindowLongPtrW',
        -            'UnregisterClassA', 'UnregisterClassW', 'GetClassWord', 'GetWindowWord',
        -            'SetClassWord', 'SetWindowWord'
        -            ),
        -        // Native API
        -        6 => array(
        -            'CsrAllocateCaptureBuffer', 'CsrAllocateCapturePointer', 'CsrAllocateMessagePointer',
        -            'CsrCaptureMessageBuffer', 'CsrCaptureMessageString', 'CsrCaptureTimeout',
        -            'CsrClientCallServer', 'CsrClientConnectToServer', 'CsrFreeCaptureBuffer',
        -            'CsrIdentifyAlertableThread', 'CsrNewThread', 'CsrProbeForRead', 'CsrProbeForWrite',
        -            'CsrSetPriorityClass',
        -
        -            'LdrAccessResource', 'LdrDisableThreadCalloutsForDll', 'LdrEnumResources',
        -            'LdrFindEntryForAddress', 'LdrFindResource_U', 'LdrFindResourceDirectory_U',
        -            'LdrGetDllHandle', 'LdrGetProcedureAddress', 'LdrInitializeThunk', 'LdrLoadDll',
        -            'LdrProcessRelocationBlock', 'LdrQueryImageFileExecutionOptions',
        -            'LdrQueryProcessModuleInformation', 'LdrShutdownProcess', 'LdrShutdownThread',
        -            'LdrUnloadDll', 'LdrVerifyImageMatchesChecksum',
        -
        -            'NtAcceptConnectPort', 'ZwAcceptConnectPort', 'NtCompleteConnectPort',
        -            'ZwCompleteConnectPort', 'NtConnectPort', 'ZwConnectPort', 'NtCreatePort',
        -            'ZwCreatePort', 'NtImpersonateClientOfPort', 'ZwImpersonateClientOfPort',
        -            'NtListenPort', 'ZwListenPort', 'NtQueryInformationPort', 'ZwQueryInformationPort',
        -            'NtReadRequestData', 'ZwReadRequestData', 'NtReplyPort', 'ZwReplyPort',
        -            'NtReplyWaitReceivePort', 'ZwReplyWaitReceivePort', 'NtReplyWaitReplyPort',
        -            'ZwReplyWaitReplyPort', 'NtRequestPort', 'ZwRequestPort', 'NtRequestWaitReplyPort',
        -            'ZwRequestWaitReplyPort', 'NtSecureConnectPort', 'ZwSecureConnectPort',
        -            'NtWriteRequestData', 'ZwWriteRequestData',
        -
        -            'NtAccessCheck', 'ZwAccessCheck', 'NtAccessCheckAndAuditAlarm',
        -            'ZwAccessCheckAndAuditAlarm', 'NtAccessCheckByType', 'ZwAccessCheckByType',
        -            'NtAccessCheckByTypeAndAuditAlarm', 'ZwAccessCheckByTypeAndAuditAlarm',
        -            'NtAccessCheckByTypeResultList', 'ZwAccessCheckByTypeResultList',
        -            'NtAdjustGroupsToken', 'ZwAdjustGroupsToken', 'NtAdjustPrivilegesToken',
        -            'ZwAdjustPrivilegesToken', 'NtCloseObjectAuditAlarm', 'ZwCloseObjectAuditAlarm',
        -            'NtCreateToken', 'ZwCreateToken', 'NtDeleteObjectAuditAlarm',
        -            'ZwDeleteObjectAuditAlarm', 'NtDuplicateToken', 'ZwDuplicateToken',
        -            'NtFilterToken', 'ZwFilterToken', 'NtImpersonateThread', 'ZwImpersonateThread',
        -            'NtOpenObjectAuditAlarm', 'ZwOpenObjectAuditAlarm', 'NtOpenProcessToken',
        -            'ZwOpenProcessToken', 'NtOpenThreadToken', 'ZwOpenThreadToken', 'NtPrivilegeCheck',
        -            'ZwPrivilegeCheck', 'NtPrivilegedServiceAuditAlarm', 'ZwPrivilegedServiceAuditAlarm',
        -            'NtPrivilegeObjectAuditAlarm', 'ZwPrivilegeObjectAuditAlarm',
        -            'NtQueryInformationToken', 'ZwQueryInformationToken', 'NtQuerySecurityObject',
        -            'ZwQuerySecurityObject', 'NtSetInformationToken', 'ZwSetInformationToken',
        -            'NtSetSecurityObject', 'ZwSetSecurityObject',
        -
        -            'NtAddAtom', 'ZwAddAtom', 'NtDeleteAtom', 'ZwDeleteAtom', 'NtFindAtom', 'ZwFindAtom',
        -            'NtQueryInformationAtom', 'ZwQueryInformationAtom',
        -
        -            'NtAlertResumeThread', 'ZwAlertResumeThread', 'NtAlertThread', 'ZwAlertThread',
        -            'NtCreateProcess', 'ZwCreateProcess', 'NtCreateThread', 'ZwCreateThread',
        -            'NtCurrentTeb', 'NtDelayExecution', 'ZwDelayExecution', 'NtGetContextThread',
        -            'ZwGetContextThread', 'NtOpenProcess', 'ZwOpenProcess', 'NtOpenThread',
        -            'ZwOpenThread', 'NtQueryInformationProcess', 'ZwQueryInformationProcess',
        -            'NtQueryInformationThread', 'ZwQueryInformationThread', 'NtQueueApcThread',
        -            'ZwQueueApcThread', 'NtResumeThread', 'ZwResumeThread', 'NtSetContextThread',
        -            'ZwSetContextThread', 'NtSetHighWaitLowThread', 'ZwSetHighWaitLowThread',
        -            'NtSetInformationProcess', 'ZwSetInformationProcess', 'NtSetInformationThread',
        -            'ZwSetInformationThread', 'NtSetLowWaitHighThread', 'ZwSetLowWaitHighThread',
        -            'NtSuspendThread', 'ZwSuspendThread', 'NtTerminateProcess', 'ZwTerminateProcess',
        -            'NtTerminateThread', 'ZwTerminateThread', 'NtTestAlert', 'ZwTestAlert',
        -            'NtYieldExecution', 'ZwYieldExecution',
        -
        -            'NtAllocateVirtualMemory', 'ZwAllocateVirtualMemory', 'NtAllocateVirtualMemory64',
        -            'ZwAllocateVirtualMemory64', 'NtAreMappedFilesTheSame', 'ZwAreMappedFilesTheSame',
        -            'NtCreateSection', 'ZwCreateSection', 'NtExtendSection', 'ZwExtendSection',
        -            'NtFlushVirtualMemory', 'ZwFlushVirtualMemory', 'NtFreeVirtualMemory',
        -            'ZwFreeVirtualMemory', 'NtFreeVirtualMemory64', 'ZwFreeVirtualMemory64',
        -            'NtLockVirtualMemory', 'ZwLockVirtualMemory', 'NtMapViewOfSection',
        -            'ZwMapViewOfSection', 'NtMapViewOfVlmSection', 'ZwMapViewOfVlmSection',
        -            'NtOpenSection', 'ZwOpenSection', 'NtProtectVirtualMemory', 'ZwProtectVirtualMemory',
        -            'NtProtectVirtualMemory64', 'ZwProtectVirtualMemory64', 'NtQueryVirtualMemory',
        -            'ZwQueryVirtualMemory', 'NtQueryVirtualMemory64', 'ZwQueryVirtualMemory64',
        -            'NtReadVirtualMemory', 'ZwReadVirtualMemory', 'NtReadVirtualMemory64',
        -            'ZwReadVirtualMemory64', 'NtUnlockVirtualMemory', 'ZwUnlockVirtualMemory',
        -            'NtUnmapViewOfSection', 'ZwUnmapViewOfSection', 'NtUnmapViewOfVlmSection',
        -            'ZwUnmapViewOfVlmSection', 'NtWriteVirtualMemory', 'ZwWriteVirtualMemory',
        -            'NtWriteVirtualMemory64', 'ZwWriteVirtualMemory64',
        -
        -            'NtAssignProcessToJobObject', 'ZwAssignProcessToJobObject', 'NtCreateJobObject',
        -            'ZwCreateJobObject', 'NtOpenJobObject', 'ZwOpenJobObject',
        -            'NtQueryInformationJobObject', 'ZwQueryInformationJobObject',
        -            'NtSetInformationJobObject', 'ZwSetInformationJobObject', 'NtTerminateJobObject',
        -            'ZwTerminateJobObject',
        -
        -            'NtCancelIoFile', 'ZwCancelIoFile', 'NtCreateFile', 'ZwCreateFile',
        -            'NtCreateIoCompletion', 'ZwCreateIoCompletion', 'NtDeleteFile', 'ZwDeleteFile',
        -            'NtDeviceIoControlFile', 'ZwDeviceIoControlFile', 'NtFlushBuffersFile',
        -            'ZwFlushBuffersFile', 'NtFsControlFile', 'ZwFsControlFile', 'NtLockFile', 'ZwLockFile',
        -            'NtNotifyChangeDirectoryFile', 'ZwNotifyChangeDirectoryFile', 'NtOpenFile',
        -            'ZwOpenFile', 'NtOpenIoCompletion', 'ZwOpenIoCompletion', 'NtQueryAttributesFile',
        -            'ZwQueryAttributesFile', 'NtQueryDirectoryFile', 'ZwQueryDirectoryFile',
        -            'NtQueryEaFile', 'ZwQueryEaFile', 'NtQueryIoCompletion', 'ZwQueryIoCompletion',
        -            'NtQueryQuotaInformationFile', 'ZwQueryQuotaInformationFile',
        -            'NtQueryVolumeInformationFile', 'ZwQueryVolumeInformationFile', 'NtReadFile',
        -            'ZwReadFile', 'NtReadFile64', 'ZwReadFile64', 'NtReadFileScatter', 'ZwReadFileScatter',
        -            'NtRemoveIoCompletion', 'ZwRemoveIoCompletion', 'NtSetEaFile', 'ZwSetEaFile',
        -            'NtSetInformationFile', 'ZwSetInformationFile', 'NtSetIoCompletion',
        -            'ZwSetIoCompletion', 'NtSetQuotaInformationFile', 'ZwSetQuotaInformationFile',
        -            'NtSetVolumeInformationFile', 'ZwSetVolumeInformationFile', 'NtUnlockFile',
        -            'ZwUnlockFile', 'NtWriteFile', 'ZwWriteFile', 'NtWriteFile64','ZwWriteFile64',
        -            'NtWriteFileGather', 'ZwWriteFileGather', 'NtQueryFullAttributesFile',
        -            'ZwQueryFullAttributesFile', 'NtQueryInformationFile', 'ZwQueryInformationFile',
        -
        -            'RtlAbortRXact', 'RtlAbsoluteToSelfRelativeSD', 'RtlAcquirePebLock',
        -            'RtlAcquireResourceExclusive', 'RtlAcquireResourceShared', 'RtlAddAccessAllowedAce',
        -            'RtlAddAccessDeniedAce', 'RtlAddAce', 'RtlAddActionToRXact', 'RtlAddAtomToAtomTable',
        -            'RtlAddAttributeActionToRXact', 'RtlAddAuditAccessAce', 'RtlAddCompoundAce',
        -            'RtlAdjustPrivilege', 'RtlAllocateAndInitializeSid', 'RtlAllocateHandle',
        -            'RtlAllocateHeap', 'RtlAnsiCharToUnicodeChar', 'RtlAnsiStringToUnicodeSize',
        -            'RtlAnsiStringToUnicodeString', 'RtlAppendAsciizToString', 'RtlAppendStringToString',
        -            'RtlAppendUnicodeStringToString', 'RtlAppendUnicodeToString', 'RtlApplyRXact',
        -            'RtlApplyRXactNoFlush', 'RtlAreAllAccessesGranted', 'RtlAreAnyAccessesGranted',
        -            'RtlAreBitsClear', 'RtlAreBitsSet', 'RtlAssert', 'RtlCaptureStackBackTrace',
        -            'RtlCharToInteger', 'RtlCheckRegistryKey', 'RtlClearAllBits', 'RtlClearBits',
        -            'RtlClosePropertySet', 'RtlCompactHeap', 'RtlCompareMemory', 'RtlCompareMemoryUlong',
        -            'RtlCompareString', 'RtlCompareUnicodeString', 'RtlCompareVariants',
        -            'RtlCompressBuffer', 'RtlConsoleMultiByteToUnicodeN', 'RtlConvertExclusiveToShared',
        -            'RtlConvertLongToLargeInteger', 'RtlConvertPropertyToVariant',
        -            'RtlConvertSharedToExclusive', 'RtlConvertSidToUnicodeString',
        -            'RtlConvertUiListToApiList', 'RtlConvertUlongToLargeInteger',
        -            'RtlConvertVariantToProperty', 'RtlCopyLuid', 'RtlCopyLuidAndAttributesArray',
        -            'RtlCopySecurityDescriptor', 'RtlCopySid', 'RtlCopySidAndAttributesArray',
        -            'RtlCopyString', 'RtlCopyUnicodeString', 'RtlCreateAcl', 'RtlCreateAndSetSD',
        -            'RtlCreateAtomTable', 'RtlCreateEnvironment', 'RtlCreateHeap',
        -            'RtlCreateProcessParameters', 'RtlCreatePropertySet', 'RtlCreateQueryDebugBuffer',
        -            'RtlCreateRegistryKey', 'RtlCreateSecurityDescriptor', 'RtlCreateTagHeap',
        -            'RtlCreateUnicodeString', 'RtlCreateUnicodeStringFromAsciiz', 'RtlCreateUserProcess',
        -            'RtlCreateUserSecurityObject', 'RtlCreateUserThread', 'RtlCustomCPToUnicodeN',
        -            'RtlCutoverTimeToSystemTime', 'RtlDecompressBuffer', 'RtlDecompressFragment',
        -            'RtlDelete', 'RtlDeleteAce', 'RtlDeleteAtomFromAtomTable', 'RtlDeleteCriticalSection',
        -            'RtlDeleteElementGenericTable', 'RtlDeleteNoSplay', 'RtlDeleteRegistryValue',
        -            'RtlDeleteResource', 'RtlDeleteSecurityObject', 'RtlDeNormalizeProcessParams',
        -            'RtlDestroyAtomTable', 'RtlDestroyEnvironment', 'RtlDestroyHandleTable',
        -            'RtlDestroyHeap', 'RtlDestroyProcessParameters', 'RtlDestroyQueryDebugBuffer',
        -            'RtlDetermineDosPathNameType_U', 'RtlDoesFileExists_U', 'RtlDosPathNameToNtPathName_U',
        -            'RtlDosSearchPath_U', 'RtlDowncaseUnicodeString', 'RtlDumpResource',
        -            'RtlEmptyAtomTable', 'RtlEnlargedIntegerMultiply', 'RtlEnlargedUnsignedDivide',
        -            'RtlEnlargedUnsignedMultiply', 'RtlEnterCriticalSection', 'RtlEnumerateGenericTable',
        -            'RtlEnumerateGenericTableWithoutSplaying', 'RtlEnumerateProperties',
        -            'RtlEnumProcessHeaps', 'RtlEqualComputerName', 'RtlEqualDomainName', 'RtlEqualLuid',
        -            'RtlEqualPrefixSid', 'RtlEqualSid', 'RtlEqualString', 'RtlEqualUnicodeString',
        -            'RtlEraseUnicodeString', 'RtlExpandEnvironmentStrings_U', 'RtlExtendedIntegerMultiply',
        -            'RtlExtendedLargeIntegerDivide', 'RtlExtendedMagicDivide', 'RtlExtendHeap',
        -            'RtlFillMemory', 'RtlFillMemoryUlong', 'RtlFindClearBits', 'RtlFindClearBitsAndSet',
        -            'RtlFindLongestRunClear', 'RtlFindLongestRunSet', 'RtlFindMessage', 'RtlFindSetBits',
        -            'RtlFindSetBitsAndClear', 'RtlFirstFreeAce', 'RtlFlushPropertySet',
        -            'RtlFormatCurrentUserKeyPath', 'RtlFormatMessage', 'RtlFreeAnsiString',
        -            'RtlFreeHandle', 'RtlFreeHeap', 'RtlFreeOemString', 'RtlFreeSid',
        -            'RtlFreeUnicodeString', 'RtlFreeUserThreadStack', 'RtlGenerate8dot3Name', 'RtlGetAce',
        -            'RtlGetCallersAddress', 'RtlGetCompressionWorkSpaceSize',
        -            'RtlGetControlSecurityDescriptor', 'RtlGetCurrentDirectory_U',
        -            'RtlGetDaclSecurityDescriptor', 'RtlGetElementGenericTable', 'RtlGetFullPathName_U',
        -            'RtlGetGroupSecurityDescriptor', 'RtlGetLongestNtPathLength', 'RtlGetNtGlobalFlags',
        -            'RtlGetNtProductType', 'RtlGetOwnerSecurityDescriptor', 'RtlGetProcessHeaps',
        -            'RtlGetSaclSecurityDescriptor', 'RtlGetUserInfoHeap', 'RtlGuidToPropertySetName',
        -            'RtlIdentifierAuthoritySid', 'RtlImageDirectoryEntryToData', 'RtlImageNtHeader',
        -            'RtlImageRvaToSection', 'RtlImageRvaToVa', 'RtlImpersonateSelf', 'RtlInitAnsiString',
        -            'RtlInitCodePageTable', 'RtlInitializeAtomPackage', 'RtlInitializeBitMap',
        -            'RtlInitializeContext', 'RtlInitializeCriticalSection',
        -            'RtlInitializeCriticalSectionAndSpinCount', 'RtlInitializeGenericTable',
        -            'RtlInitializeHandleTable', 'RtlInitializeResource', 'RtlInitializeRXact',
        -            'RtlInitializeSid', 'RtlInitNlsTables', 'RtlInitString', 'RtlInitUnicodeString',
        -            'RtlInsertElementGenericTable', 'RtlIntegerToChar', 'RtlIntegerToUnicodeString',
        -            'RtlIsDosDeviceName_U', 'RtlIsGenericTableEmpty', 'RtlIsNameLegalDOS8Dot3',
        -            'RtlIsTextUnicode', 'RtlIsValidHandle', 'RtlIsValidIndexHandle', 'RtlLargeIntegerAdd',
        -            'RtlLargeIntegerArithmeticShift', 'RtlLargeIntegerDivide', 'RtlLargeIntegerNegate',
        -            'RtlLargeIntegerShiftLeft', 'RtlLargeIntegerShiftRight', 'RtlLargeIntegerSubtract',
        -            'RtlLargeIntegerToChar', 'RtlLeaveCriticalSection', 'RtlLengthRequiredSid',
        -            'RtlLengthSecurityDescriptor', 'RtlLengthSid', 'RtlLocalTimeToSystemTime',
        -            'RtlLockHeap', 'RtlLookupAtomInAtomTable', 'RtlLookupElementGenericTable',
        -            'RtlMakeSelfRelativeSD', 'RtlMapGenericMask', 'RtlMoveMemory',
        -            'RtlMultiByteToUnicodeN', 'RtlMultiByteToUnicodeSize', 'RtlNewInstanceSecurityObject',
        -            'RtlNewSecurityGrantedAccess', 'RtlNewSecurityObject', 'RtlNormalizeProcessParams',
        -            'RtlNtStatusToDosError', 'RtlNumberGenericTableElements', 'RtlNumberOfClearBits',
        -            'RtlNumberOfSetBits', 'RtlOemStringToUnicodeSize', 'RtlOemStringToUnicodeString',
        -            'RtlOemToUnicodeN', 'RtlOnMappedStreamEvent', 'RtlOpenCurrentUser',
        -            'RtlPcToFileHeader', 'RtlPinAtomInAtomTable', 'RtlpNtCreateKey',
        -            'RtlpNtEnumerateSubKey', 'RtlpNtMakeTemporaryKey', 'RtlpNtOpenKey',
        -            'RtlpNtQueryValueKey', 'RtlpNtSetValueKey', 'RtlPrefixString',
        -            'RtlPrefixUnicodeString', 'RtlPropertySetNameToGuid', 'RtlProtectHeap',
        -            'RtlpUnWaitCriticalSection', 'RtlpWaitForCriticalSection', 'RtlQueryAtomInAtomTable',
        -            'RtlQueryEnvironmentVariable_U', 'RtlQueryInformationAcl',
        -            'RtlQueryProcessBackTraceInformation', 'RtlQueryProcessDebugInformation',
        -            'RtlQueryProcessHeapInformation', 'RtlQueryProcessLockInformation',
        -            'RtlQueryProperties', 'RtlQueryPropertyNames', 'RtlQueryPropertySet',
        -            'RtlQueryRegistryValues', 'RtlQuerySecurityObject', 'RtlQueryTagHeap',
        -            'RtlQueryTimeZoneInformation', 'RtlRaiseException', 'RtlRaiseStatus', 'RtlRandom',
        -            'RtlReAllocateHeap', 'RtlRealPredecessor', 'RtlRealSuccessor', 'RtlReleasePebLock',
        -            'RtlReleaseResource', 'RtlRemoteCall', 'RtlResetRtlTranslations',
        -            'RtlRunDecodeUnicodeString', 'RtlRunEncodeUnicodeString', 'RtlSecondsSince1970ToTime',
        -            'RtlSecondsSince1980ToTime', 'RtlSelfRelativeToAbsoluteSD', 'RtlSetAllBits',
        -            'RtlSetAttributesSecurityDescriptor', 'RtlSetBits', 'RtlSetCriticalSectionSpinCount',
        -            'RtlSetCurrentDirectory_U', 'RtlSetCurrentEnvironment', 'RtlSetDaclSecurityDescriptor',
        -            'RtlSetEnvironmentVariable', 'RtlSetGroupSecurityDescriptor', 'RtlSetInformationAcl',
        -            'RtlSetOwnerSecurityDescriptor', 'RtlSetProperties', 'RtlSetPropertyNames',
        -            'RtlSetPropertySetClassId', 'RtlSetSaclSecurityDescriptor', 'RtlSetSecurityObject',
        -            'RtlSetTimeZoneInformation', 'RtlSetUnicodeCallouts', 'RtlSetUserFlagsHeap',
        -            'RtlSetUserValueHeap', 'RtlSizeHeap', 'RtlSplay', 'RtlStartRXact',
        -            'RtlSubAuthorityCountSid', 'RtlSubAuthoritySid', 'RtlSubtreePredecessor',
        -            'RtlSubtreeSuccessor', 'RtlSystemTimeToLocalTime', 'RtlTimeFieldsToTime',
        -            'RtlTimeToElapsedTimeFields', 'RtlTimeToSecondsSince1970', 'RtlTimeToSecondsSince1980',
        -            'RtlTimeToTimeFields', 'RtlTryEnterCriticalSection', 'RtlUnicodeStringToAnsiSize',
        -            'RtlUnicodeStringToAnsiString', 'RtlUnicodeStringToCountedOemString',
        -            'RtlUnicodeStringToInteger', 'RtlUnicodeStringToOemSize',
        -            'RtlUnicodeStringToOemString', 'RtlUnicodeToCustomCPN', 'RtlUnicodeToMultiByteN',
        -            'RtlUnicodeToMultiByteSize', 'RtlUnicodeToOemN', 'RtlUniform', 'RtlUnlockHeap',
        -            'RtlUnwind', 'RtlUpcaseUnicodeChar', 'RtlUpcaseUnicodeString',
        -            'RtlUpcaseUnicodeStringToAnsiString', 'RtlUpcaseUnicodeStringToCountedOemString',
        -            'RtlUpcaseUnicodeStringToOemString', 'RtlUpcaseUnicodeToCustomCPN',
        -            'RtlUpcaseUnicodeToMultiByteN', 'RtlUpcaseUnicodeToOemN', 'RtlUpperChar',
        -            'RtlUpperString', 'RtlUsageHeap', 'RtlValidAcl', 'RtlValidateHeap',
        -            'RtlValidateProcessHeaps', 'RtlValidSecurityDescriptor', 'RtlValidSid', 'RtlWalkHeap',
        -            'RtlWriteRegistryValue', 'RtlxAnsiStringToUnicodeSize', 'RtlxOemStringToUnicodeSize',
        -            'RtlxUnicodeStringToAnsiSize', 'RtlxUnicodeStringToOemSize', 'RtlZeroHeap',
        -            'RtlZeroMemory',
        -
        -            'NtCancelTimer', 'ZwCancelTimer', 'NtCreateTimer', 'ZwCreateTimer', 'NtGetTickCount',
        -            'ZwGetTickCount', 'NtOpenTimer', 'ZwOpenTimer', 'NtQueryPerformanceCounter',
        -            'ZwQueryPerformanceCounter', 'NtQuerySystemTime', 'ZwQuerySystemTime', 'NtQueryTimer',
        -            'ZwQueryTimer', 'NtQueryTimerResolution', 'ZwQueryTimerResolution', 'NtSetSystemTime',
        -            'ZwSetSystemTime', 'NtSetTimer', 'ZwSetTimer', 'NtSetTimerResolution',
        -            'ZwSetTimerResolution',
        -
        -            'NtClearEvent', 'ZwClearEvent', 'NtCreateEvent', 'ZwCreateEvent', 'NtCreateEventPair',
        -            'ZwCreateEventPair', 'NtCreateMutant', 'ZwCreateMutant', 'NtCreateSemaphore',
        -            'ZwCreateSemaphore', 'NtOpenEvent', 'ZwOpenEvent', 'NtOpenEventPair',
        -            'ZwOpenEventPair', 'NtOpenMutant', 'ZwOpenMutant', 'NtOpenSemaphore',
        -            'ZwOpenSemaphore', 'NtPulseEvent', 'ZwPulseEvent', 'NtQueryEvent', 'ZwQueryEvent',
        -            'NtQueryMutant', 'ZwQueryMutant', 'NtQuerySemaphore', 'ZwQuerySemaphore',
        -            'NtReleaseMutant', 'ZwReleaseMutant', 'NtReleaseProcessMutant',
        -            'ZwReleaseProcessMutant', 'NtReleaseSemaphore', 'ZwReleaseSemaphore',
        -            'NtReleaseThreadMutant', 'ZwReleaseThreadMutant', 'NtResetEvent', 'ZwResetEvent',
        -            'NtSetEvent', 'ZwSetEvent', 'NtSetHighEventPair', 'ZwSetHighEventPair',
        -            'NtSetHighWaitLowEventPair', 'ZwSetHighWaitLowEventPair', 'NtSetLowEventPair',
        -            'ZwSetLowEventPair', 'NtSetLowWaitHighEventPair', 'ZwSetLowWaitHighEventPair',
        -            'NtSignalAndWaitForSingleObject', 'ZwSignalAndWaitForSingleObject',
        -            'NtWaitForMultipleObjects', 'ZwWaitForMultipleObjects', 'NtWaitForSingleObject',
        -            'ZwWaitForSingleObject', 'NtWaitHighEventPair', 'ZwWaitHighEventPair',
        -            'NtWaitLowEventPair', 'ZwWaitLowEventPair',
        -
        -            'NtClose', 'ZwClose', 'NtCreateDirectoryObject', 'ZwCreateDirectoryObject',
        -            'NtCreateSymbolicLinkObject', 'ZwCreateSymbolicLinkObject',
        -            'NtDuplicateObject', 'ZwDuplicateObject', 'NtMakeTemporaryObject',
        -            'ZwMakeTemporaryObject', 'NtOpenDirectoryObject', 'ZwOpenDirectoryObject',
        -            'NtOpenSymbolicLinkObject', 'ZwOpenSymbolicLinkObject', 'NtQueryDirectoryObject',
        -            'ZwQueryDirectoryObject', 'NtQueryObject', 'ZwQueryObject',
        -            'NtQuerySymbolicLinkObject', 'ZwQuerySymbolicLinkObject', 'NtSetInformationObject',
        -            'ZwSetInformationObject',
        -
        -            'NtContinue', 'ZwContinue', 'NtRaiseException', 'ZwRaiseException',
        -            'NtRaiseHardError', 'ZwRaiseHardError', 'NtSetDefaultHardErrorPort',
        -            'ZwSetDefaultHardErrorPort',
        -
        -            'NtCreateChannel', 'ZwCreateChannel', 'NtListenChannel', 'ZwListenChannel',
        -            'NtOpenChannel', 'ZwOpenChannel', 'NtReplyWaitSendChannel', 'ZwReplyWaitSendChannel',
        -            'NtSendWaitReplyChannel', 'ZwSendWaitReplyChannel', 'NtSetContextChannel',
        -            'ZwSetContextChannel',
        -
        -            'NtCreateKey', 'ZwCreateKey', 'NtDeleteKey', 'ZwDeleteKey', 'NtDeleteValueKey',
        -            'ZwDeleteValueKey', 'NtEnumerateKey', 'ZwEnumerateKey', 'NtEnumerateValueKey',
        -            'ZwEnumerateValueKey', 'NtFlushKey', 'ZwFlushKey', 'NtInitializeRegistry',
        -            'ZwInitializeRegistry', 'NtLoadKey', 'ZwLoadKey', 'NtLoadKey2', 'ZwLoadKey2',
        -            'NtNotifyChangeKey', 'ZwNotifyChangeKey', 'NtOpenKey', 'ZwOpenKey', 'NtQueryKey',
        -            'ZwQueryKey', 'NtQueryMultipleValueKey', 'ZwQueryMultipleValueKey',
        -            'NtQueryMultiplValueKey', 'ZwQueryMultiplValueKey', 'NtQueryValueKey',
        -            'ZwQueryValueKey', 'NtReplaceKey', 'ZwReplaceKey', 'NtRestoreKey', 'ZwRestoreKey',
        -            'NtSaveKey', 'ZwSaveKey', 'NtSetInformationKey', 'ZwSetInformationKey',
        -            'NtSetValueKey', 'ZwSetValueKey', 'NtUnloadKey', 'ZwUnloadKey',
        -
        -            'NtCreateMailslotFile', 'ZwCreateMailslotFile', 'NtCreateNamedPipeFile',
        -            'ZwCreateNamedPipeFile', 'NtCreatePagingFile', 'ZwCreatePagingFile',
        -
        -            'NtCreateProfile', 'ZwCreateProfile', 'NtQueryIntervalProfile',
        -            'ZwQueryIntervalProfile', 'NtRegisterThreadTerminatePort',
        -            'ZwRegisterThreadTerminatePort', 'NtSetIntervalProfile', 'ZwSetIntervalProfile',
        -            'NtStartProfile', 'ZwStartProfile', 'NtStopProfile', 'ZwStopProfile',
        -            'NtSystemDebugControl', 'ZwSystemDebugControl',
        -
        -            'NtEnumerateBus', 'ZwEnumerateBus', 'NtFlushInstructionCache',
        -            'ZwFlushInstructionCache', 'NtFlushWriteBuffer', 'ZwFlushWriteBuffer',
        -            'NtSetLdtEntries', 'ZwSetLdtEntries',
        -
        -            'NtGetPlugPlayEvent', 'ZwGetPlugPlayEvent', 'NtPlugPlayControl', 'ZwPlugPlayControl',
        -
        -            'NtInitiatePowerAction', 'ZwInitiatePowerAction', 'NtPowerInformation',
        -            'ZwPowerInformation', 'NtRequestWakeupLatency', 'ZwRequestWakeupLatency',
        -            'NtSetSystemPowerState', 'ZwSetSystemPowerState', 'NtSetThreadExecutionState',
        -            'ZwSetThreadExecutionState',
        -
        -            'NtLoadDriver', 'ZwLoadDriver', 'NtRegisterNewDevice', 'ZwRegisterNewDevice',
        -            'NtUnloadDriver', 'ZwUnloadDriver',
        -
        -            'NtQueryDefaultLocale', 'ZwQueryDefaultLocale', 'NtQueryDefaultUILanguage',
        -            'ZwQueryDefaultUILanguage', 'NtQuerySystemEnvironmentValue',
        -            'ZwQuerySystemEnvironmentValue', 'NtSetDefaultLocale', 'ZwSetDefaultLocale',
        -            'NtSetDefaultUILanguage', 'ZwSetDefaultUILanguage', 'NtSetSystemEnvironmentValue',
        -            'ZwSetSystemEnvironmentValue',
        -
        -            'DbgBreakPoint', 'DbgPrint', 'DbgPrompt', 'DbgSsHandleKmApiMsg', 'DbgSsInitialize',
        -            'DbgUiConnectToDbg', 'DbgUiContinue', 'DbgUiWaitStateChange', 'DbgUserBreakPoint',
        -            'KiRaiseUserExceptionDispatcher', 'KiUserApcDispatcher', 'KiUserCallbackDispatcher',
        -            'KiUserExceptionDispatcher', 'NlsAnsiCodePage', 'NlsMbCodePageTag',
        -            'NlsMbOemCodePageTag', 'NtAllocateLocallyUniqueId', 'ZwAllocateLocallyUniqueId',
        -            'NtAllocateUuids', 'ZwAllocateUuids', 'NtCallbackReturn', 'ZwCallbackReturn',
        -            'NtDisplayString', 'ZwDisplayString', 'NtQueryOleDirectoryFile',
        -            'ZwQueryOleDirectoryFile', 'NtQuerySection', 'ZwQuerySection',
        -            'NtQuerySystemInformation', 'ZwQuerySystemInformation', 'NtSetSystemInformation',
        -            'ZwSetSystemInformation', 'NtShutdownSystem', 'ZwShutdownSystem', 'NtVdmControl',
        -            'ZwVdmControl', 'NtW32Call', 'ZwW32Call', 'PfxFindPrefix', 'PfxInitialize',
        -            'PfxInsertPrefix', 'PfxRemovePrefix', 'PropertyLengthAsVariant', 'RestoreEm87Context',
        -            'SaveEm87Context'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '{', '}', '[', ']'),
        -        1 => array('<', '>','='),
        -        2 => array('+', '-', '*', '/', '%'),
        -        3 => array('!', '^', '&', '|'),
        -        4 => array('?', ':', ';')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #0000dd;',
        -            4 => 'color: #0000ff;',
        -            5 => 'color: #4000dd;',
        -            6 => 'color: #4000dd;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666;',
        -            2 => 'color: #339900;',
        -            3 => 'color: #FF0000;',
        -            4 => 'color: #FF0000;',
        -            'MULTI' => 'color: #ff0000; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #007788;',
        -            2 => 'color: #007788;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;',
        -            1 => 'color: #000080;',
        -            2 => 'color: #000040;',
        -            3 => 'color: #000040;',
        -            4 => 'color: #008080;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
        -        6 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(? "(?![a-zA-Z0-9_\|%\\-])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php
        deleted file mode 100644
        index 05cadf06..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php
        +++ /dev/null
        @@ -1,244 +0,0 @@
        - 'C++',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //C++ 11 string literal extensions
        -        3 => '/(?:L|u8?|U)(?=")/',
        -        //C++ 11 string literal extensions (raw)
        -        4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[abfnrtv\\\'\"?\n]#",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
        -            'switch', 'throw', 'while'
        -            ),
        -        2 => array(
        -            'NULL', 'false', 'true', 'enum', 'errno', 'EDOM',
        -            'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
        -            'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
        -            'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
        -            'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
        -            'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
        -            'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
        -            'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
        -            'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
        -            'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
        -            'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
        -            'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
        -            'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
        -            'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
        -            'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class'
        -            ),
        -        3 => array(
        -            'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
        -            'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
        -            'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
        -            'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
        -            'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
        -            'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
        -            'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
        -            'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
        -            'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
        -            'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
        -            'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
        -            'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
        -            'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
        -            'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
        -            'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
        -            'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
        -            'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
        -            'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
        -            'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
        -            'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
        -            ),
        -        4 => array(
        -            'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
        -            'register', 'short', 'shortint', 'signed', 'static', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
        -            'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
        -            'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', 'wchar_t',
        -
        -            'int8', 'int16', 'int32', 'int64',
        -            'uint8', 'uint16', 'uint32', 'uint64',
        -
        -            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
        -            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
        -
        -            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
        -            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
        -
        -            'int8_t', 'int16_t', 'int32_t', 'int64_t',
        -            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
        -
        -            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '{', '}', '[', ']'),
        -        1 => array('<', '>','='),
        -        2 => array('+', '-', '*', '/', '%'),
        -        3 => array('!', '^', '&', '|'),
        -        4 => array('?', ':', ';')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #0000dd;',
        -            4 => 'color: #0000ff;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666;',
        -            2 => 'color: #339900;',
        -            3 => 'color: #FF0000;',
        -            4 => 'color: #FF0000;',
        -            'MULTI' => 'color: #ff0000; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #007788;',
        -            2 => 'color: #007788;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;',
        -            1 => 'color: #000080;',
        -            2 => 'color: #000040;',
        -            3 => 'color: #000040;',
        -            4 => 'color: #008080;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(? "(?![a-zA-Z0-9_\|%\\-])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php
        deleted file mode 100644
        index 14f0fa0d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php
        +++ /dev/null
        @@ -1,254 +0,0 @@
        - 'C#',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Using and Namespace directives (basic support)
        -        //Please note that the alias syntax for using is not supported
        -        3 => '/(?:(?<=using[\\n\\s])|(?<=namespace[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*[a-zA-Z0-9_]+[\n\s]*(?=[;=])/i'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'HARDQUOTE' => array('@"', '"'),
        -    'HARDESCAPE' => array('"'),
        -    'HARDCHAR' => '"',
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abstract', 'add', 'as', 'base', 'break', 'by', 'case', 'catch', 'const', 'continue',
        -            'default', 'do', 'else', 'event', 'explicit', 'extern', 'false',
        -            'finally', 'fixed', 'for', 'foreach', 'from', 'get', 'goto', 'group', 'if',
        -            'implicit', 'in', 'into', 'internal', 'join', 'lock', 'namespace', 'null',
        -            'operator', 'out', 'override', 'params', 'partial', 'private',
        -            'protected', 'public', 'readonly', 'remove', 'ref', 'return', 'sealed',
        -            'select', 'set', 'stackalloc', 'static', 'switch', 'this', 'throw', 'true',
        -            'try', 'unsafe', 'using', 'var', 'value', 'virtual', 'volatile', 'where',
        -            'while', 'yield'
        -            ),
        -        2 => array(
        -            '#elif', '#endif', '#endregion', '#else', '#error', '#define', '#if',
        -            '#line', '#region', '#undef', '#warning'
        -            ),
        -        3 => array(
        -            'checked', 'is', 'new', 'sizeof', 'typeof', 'unchecked'
        -            ),
        -        4 => array(
        -            'bool', 'byte', 'char', 'class', 'decimal', 'delegate', 'double',
        -            'dynamic', 'enum', 'float', 'int', 'interface', 'long', 'object', 'sbyte',
        -            'short', 'string', 'struct', 'uint', 'ulong', 'ushort', 'void'
        -            ),
        -        5 => array(
        -            'Microsoft.Win32',
        -            'System',
        -            'System.CodeDOM',
        -            'System.CodeDOM.Compiler',
        -            'System.Collections',
        -            'System.Collections.Bases',
        -            'System.ComponentModel',
        -            'System.ComponentModel.Design',
        -            'System.ComponentModel.Design.CodeModel',
        -            'System.Configuration',
        -            'System.Configuration.Assemblies',
        -            'System.Configuration.Core',
        -            'System.Configuration.Install',
        -            'System.Configuration.Interceptors',
        -            'System.Configuration.Schema',
        -            'System.Configuration.Web',
        -            'System.Core',
        -            'System.Data',
        -            'System.Data.ADO',
        -            'System.Data.Design',
        -            'System.Data.Internal',
        -            'System.Data.SQL',
        -            'System.Data.SQLTypes',
        -            'System.Data.XML',
        -            'System.Data.XML.DOM',
        -            'System.Data.XML.XPath',
        -            'System.Data.XML.XSLT',
        -            'System.Diagnostics',
        -            'System.Diagnostics.SymbolStore',
        -            'System.DirectoryServices',
        -            'System.Drawing',
        -            'System.Drawing.Design',
        -            'System.Drawing.Drawing2D',
        -            'System.Drawing.Imaging',
        -            'System.Drawing.Printing',
        -            'System.Drawing.Text',
        -            'System.Globalization',
        -            'System.IO',
        -            'System.IO.IsolatedStorage',
        -            'System.Messaging',
        -            'System.Net',
        -            'System.Net.Sockets',
        -            'System.NewXml',
        -            'System.NewXml.XPath',
        -            'System.NewXml.Xsl',
        -            'System.Reflection',
        -            'System.Reflection.Emit',
        -            'System.Resources',
        -            'System.Runtime.InteropServices',
        -            'System.Runtime.InteropServices.Expando',
        -            'System.Runtime.Remoting',
        -            'System.Runtime.Serialization',
        -            'System.Runtime.Serialization.Formatters',
        -            'System.Runtime.Serialization.Formatters.Binary',
        -            'System.Security',
        -            'System.Security.Cryptography',
        -            'System.Security.Cryptography.X509Certificates',
        -            'System.Security.Permissions',
        -            'System.Security.Policy',
        -            'System.Security.Principal',
        -            'System.ServiceProcess',
        -            'System.Text',
        -            'System.Text.RegularExpressions',
        -            'System.Threading',
        -            'System.Timers',
        -            'System.Web',
        -            'System.Web.Caching',
        -            'System.Web.Configuration',
        -            'System.Web.Security',
        -            'System.Web.Services',
        -            'System.Web.Services.Description',
        -            'System.Web.Services.Discovery',
        -            'System.Web.Services.Protocols',
        -            'System.Web.UI',
        -            'System.Web.UI.Design',
        -            'System.Web.UI.Design.WebControls',
        -            'System.Web.UI.Design.WebControls.ListControls',
        -            'System.Web.UI.HtmlControls',
        -            'System.Web.UI.WebControls',
        -            'System.WinForms',
        -            'System.WinForms.ComponentModel',
        -            'System.WinForms.Design',
        -            'System.Xml',
        -            'System.Xml.Serialization',
        -            'System.Xml.Serialization.Code',
        -            'System.Xml.Serialization.Schema'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', ':', ';',
        -        '(', ')', '{', '}', '[', ']', '|', '.'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF; font-weight: bold;',
        -            2 => 'color: #FF8000; font-weight: bold;',
        -            3 => 'color: #008000;',
        -            4 => 'color: #6666cc; font-weight: bold;',
        -            5 => 'color: #000000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080; font-style: italic;',
        -            2 => 'color: #008080;',
        -            3 => 'color: #008080;',
        -            'MULTI' => 'color: #008080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080; font-weight: bold;',
        -            'HARD' => 'color: #008080; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #666666;',
        -            'HARD' => 'color: #666666;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #0000FF;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?|^])",
        -            'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_%\\-])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php
        deleted file mode 100644
        index bfb6e0e1..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php
        +++ /dev/null
        @@ -1,346 +0,0 @@
        - 'CSS',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        2 => "/(?<=\\()\\s*(?:(?:[a-z0-9]+?:\\/\\/)?[a-z0-9_\\-\\.\\/:]+?)?[a-z]+?\\.[a-z]+?(\\?[^\)]+?)?\\s*?(?=\\))/i"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'"),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        //1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\[\da-fA-F]{1,6}\s?#i",
        -        //Unicode Char Specs
        -        //3 => "#\\\\u[\da-fA-F]{1,8}#i",
        -        ),
        -    'KEYWORDS' => array(
        -        // properties
        -        1 => array(
        -            'align-content','align-items','align-self','all','animation',
        -            'animation-delay','animation-direction','animation-duration',
        -            'animation-fill-mode','animation-iteration-count','animation-name',
        -            'animation-play-state','animation-timing-function',
        -            'backface-visibility','background','background-attachment',
        -            'background-blend-mode','background-clip','background-color',
        -            'background-image','background-origin','background-position',
        -            'background-repeat','background-size','border','border-bottom',
        -            'border-bottom-color','border-bottom-left-radius',
        -            'border-bottom-right-radius','border-bottom-style',
        -            'border-bottom-width','border-collapse','border-color',
        -            'border-image','border-image-outset','border-image-repeat',
        -            'border-image-slice','border-image-source','border-image-width',
        -            'border-left','border-left-color','border-left-style',
        -            'border-left-width','border-radius','border-right',
        -            'border-right-color','border-right-style','border-right-width',
        -            'border-spacing','border-style','border-top','border-top-color',
        -            'border-top-left-radius','border-top-right-radius',
        -            'border-top-style','border-top-width','border-width','bottom',
        -            'box-decoration-break','box-shadow','box-sizing','break-after',
        -            'break-before','break-inside','caption-side','clear','clip',
        -            'clip-path','color','columns','column-count','column-fill',
        -            'column-gap','column-rule','column-rule-color','column-rule-style',
        -            'column-rule-width','column-span','column-width','content',
        -            'counter-increment','counter-reset','cursor','direction','display',
        -            'empty-cells','filter','flex','flex-basis','flex-direction',
        -            'flex-flow','flex-grow','flex-shrink','flex-wrap','float','font',
        -            'font-family','font-feature-settings','font-kerning',
        -            'font-language-override','font-size','font-size-adjust',
        -            'font-stretch','font-style','font-synthesis','font-variant',
        -            'font-variant-alternates','font-variant-caps',
        -            'font-variant-east-asian','font-variant-ligatures',
        -            'font-variant-numeric','font-variant-position','font-weight','grid',
        -            'grid-area','grid-auto-columns','grid-auto-flow',
        -            'grid-auto-position','grid-auto-rows','grid-column',
        -            'grid-column-start','grid-column-end','grid-row','grid-row-start',
        -            'grid-row-end','grid-template','grid-template-areas',
        -            'grid-template-rows','grid-template-columns','height','hyphens',
        -            'icon','image-rendering','image-resolution','image-orientation',
        -            'ime-mode','justify-content','left','letter-spacing','line-break',
        -            'line-height','list-style','list-style-image','list-style-position',
        -            'list-style-type','margin','margin-bottom','margin-left',
        -            'margin-right','margin-top','marks','mask','mask-type','max-height',
        -            'max-width','min-height','min-width','mix-blend-mode','nav-down',
        -            'nav-index','nav-left','nav-right','nav-up','object-fit',
        -            'object-position','opacity','order','orphans','outline',
        -            'outline-color','outline-offset','outline-style','outline-width',
        -            'overflow','overflow-wrap','overflow-x','overflow-y',
        -            'overflow-clip-box','padding','padding-bottom','padding-left',
        -            'padding-right','padding-top','page-break-after','page-break-before',
        -            'page-break-inside','perspective','perspective-origin',
        -            'pointer-events','position','quotes','resize','right',
        -            'shape-image-threshold','shape-margin','shape-outside',
        -            'table-layout','tab-size','text-align','text-align-last',
        -            'text-combine-horizontal','text-decoration','text-decoration-color',
        -            'text-decoration-line','text-decoration-style','text-indent',
        -            'text-orientation','text-overflow','text-rendering','text-shadow',
        -            'text-transform','text-underline-position','top','touch-action',
        -            'transform','transform-origin','transform-style','transition',
        -            'transition-delay','transition-duration','transition-property',
        -            'transition-timing-function','unicode-bidi','unicode-range',
        -            'vertical-align','visibility','white-space','widows','width',
        -            'will-change','word-break','word-spacing','word-wrap',
        -            'writing-mode','z-index'
        -            ),
        -        // value
        -        2 => array(
        -            'absolute','activeborder','activecaption','after-white-space',
        -            'ahead','alternate','always','appworkspace','aqua','armenian','auto',
        -            'avoid','background','backwards','baseline','below','bidi-override',
        -            'blink','block','block clear','block width','block-axis','bold',
        -            'bolder','border','border-box','both','bottom','break-word','button',
        -            'button-bevel','buttonface','buttonhighlight','buttonshadow',
        -            'buttontext','capitalize','caption','captiontext','caret','center',
        -            'checkbox','circle','cjk-ideographic','clip','close-quote',
        -            'collapse','compact','condensed','content','content-box',
        -            'continuous','crop','cross','crosshair','cursive','dashed','decimal',
        -            'decimal-leading-zero','default','disc','discard','dot-dash',
        -            'dot-dot-dash','dotted','double','down','e-resize','element',
        -            'ellipsis','embed','end','expanded','extra-condensed',
        -            'extra-expanded','fantasy','fast','fixed','forwards','georgian',
        -            'graytext','groove','hand','hebrew','help','hidden','hide','higher',
        -            'highlight','highlighttext','hiragana','hiragana-iroha',
        -            'horizontal','icon','ignore','inactiveborder','inactivecaption',
        -            'inactivecaptiontext','infinite','infobackground','infotext',
        -            'inherit','initial','inline','inline-axis','inline-block',
        -            'inline-table','inset','inside','intrinsic','invert','italic',
        -            'justify','katakana','katakana-iroha','landscape','large','larger',
        -            'left','level','lighter','lime','line-through','list-item','listbox',
        -            'listitem','logical','loud','lower','lower-alpha','lower-greek',
        -            'lower-latin','lower-roman','lowercase','ltr','marker','match',
        -            'medium','menu','menulist','menulist-button','menulist-text',
        -            'menulist-textfield','menutext','message-box','middle',
        -            'min-intrinsic','mix','monospace','move','multiple','n-resize',
        -            'narrower','ne-resize','no-close','no-close-quote','no-open-quote',
        -            'no-repeat','none','normal','nowrap','nw-resize','oblique','once',
        -            'open-quote','outset','outside','overline','padding','pointer',
        -            'portrait','pre','pre-line','pre-wrap','push-button','radio',
        -            'read-only','read-write','read-write-plaintext-only','relative',
        -            'repeat','repeat-x','repeat-y','reverse','ridge','right','round',
        -            'rtl','run-in','s-resize','sans-serif','scroll','scrollbar',
        -            'scrollbarbutton-down','scrollbarbutton-left',
        -            'scrollbarbutton-right','scrollbarbutton-up',
        -            'scrollbargripper-horizontal','scrollbargripper-vertical',
        -            'scrollbarthumb-horizontal','scrollbarthumb-vertical',
        -            'scrollbartrack-horizontal','scrollbartrack-vertical',
        -            'se-resize','searchfield','searchfield-close','searchfield-results',
        -            'semi-condensed','semi-expanded','separate','serif','show','single',
        -            'skip-white-space','slide','slider-horizontal','slider-vertical',
        -            'sliderthumb-horizontal','sliderthumb-vertical','slow','small',
        -            'small-caps','small-caption','smaller','solid','space','square',
        -            'square-button','start','static','status-bar','stretch','sub',
        -            'super','sw-resize','table','table-caption','table-cell',
        -            'table-column','table-column-group','table-footer-group',
        -            'table-header-group','table-row','table-row-group','text',
        -            'text-bottom','text-top','textfield','thick','thin',
        -            'threeddarkshadow','threedface','threedhighlight',
        -            'threedlightshadow','threedshadow','top','ultra-condensed',
        -            'ultra-expanded','underline','unfurl','up','upper-alpha',
        -            'upper-latin','upper-roman','uppercase','vertical','visible',
        -            'visual','w-resize','wait','wave','wider','window','windowframe',
        -            'windowtext','x-large','x-small','xx-large','xx-small'
        -            ),
        -        // function xxx()
        -        3 => array(
        -            'attr','calc','contrast','cross-fade','cubic-bezier','cycle',
        -            'device-cmyk','drop-shadow','element','ellipse','hsl','hsla','hwb',
        -            'image','matrix','matrix3d','minmax','gray','grayscale',
        -            'perspective','polygon','radial-gradient','translate','translatex',
        -            'translatey','translatez','translate3d','skew','skewx','skewy',
        -            'saturate','sepia','scale','scalex','scaley','scalez','scale3d',
        -            'steps','rect','repeating-linear-gradient',
        -            'repeating-radial-gradient','repeat','rgb','rgba','rotate','rotatex',
        -            'rotatey','rotatez','rotate3d','url','var'
        -            ),
        -        // colors
        -        4 => array(
        -            'aliceblue','antiquewhite','aqua','aquamarine','azure','beige',
        -            'bisque','black','blanchedalmond','blue','blueviolet','brown',
        -            'burlywood','cadetblue','chartreuse','chocolate','coral',
        -            'cornflowerblue','cornsilk','crimson','cyan','darkblue','darkcyan',
        -            'darkgoldenrod','darkgray','darkgreen','darkgrey','darkkhaki',
        -            'darkmagenta','darkolivegreen','darkorange','darkorchid','darkred',
        -            'darksalmon','darkseagreen','darkslateblue','darkslategray',
        -            'darkslategrey','darkturquoise','darkviolet','deeppink',
        -            'deepskyblue','dimgray','dimgrey','dodgerblue','firebrick',
        -            'floralwhite','forestgreen','fuchsia','gainsboro','ghostwhite',
        -            'gold','goldenrod','gray','green','greenyellow','grey','honeydew',
        -            'hotpink','indianred','indigo','ivory','khaki','lavender',
        -            'lavenderblush','lawngreen','lemonchiffon','lightblue','lightcoral',
        -            'lightcyan','lightgoldenrodyellow','lightgray','lightgreen',
        -            'lightgrey','lightpink','lightsalmon','lightseagreen','lightskyblue',
        -            'lightslategray','lightslategrey','lightsteelblue','lightyellow',
        -            'lime','limegreen','linen','magenta','maroon','mediumaquamarine',
        -            'mediumblue','mediumorchid','mediumpurple','mediumseagreen',
        -            'mediumslateblue','mediumspringgreen','mediumturquoise',
        -            'mediumvioletred','midnightblue','mintcream','mistyrose','moccasin',
        -            'navajowhite','navy','oldlace','olive','olivedrab','orange',
        -            'orangered','orchid','palegoldenrod','palegreen','paleturquoise',
        -            'palevioletred','papayawhip','peachpuff','peru','pink','plum',
        -            'powderblue','purple','rebeccapurple','red','rosybrown','royalblue',
        -            'saddlebrown','salmon','sandybrown','seagreen','seashell','sienna',
        -            'silver','skyblue','slateblue','slategray','slategrey','snow',
        -            'springgreen','steelblue','tan','teal','thistle','transparent',
        -            'tomato','turquoise','violet','wheat','white','whitesmoke','yellow',
        -            'yellowgreen'
        -            ),
        -        // pseudo class
        -        5 => array(
        -            'active','after','before','checked','choices','default','dir',
        -            'disabled','empty','enabled','first','first-child','first-letter',
        -            'first-line','first-of-type','focus','fullscreen','hover',
        -            'indeterminate','in-range','invalid','lang','last-child',
        -            'last-of-type','left','link','not','nth-child','nth-last-child',
        -            'nth-last-of-type','nth-of-type','only-child','only-of-type',
        -            'optional','out-of-range','read-only','read-write','repeat-index',
        -            'repeat-item','required','right','root','scope','selection','target',
        -            'valid','value','visited'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', ':', ';',
        -        '>', '+', '*', ',', '^', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #993333;',
        -            3 => 'color: #9932cc;',
        -            4 => 'color: #dc143c;',
        -            5 => 'color: #F5758F;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #a1a100;',
        -            2 => 'color: #ff0000; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            //1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #000099; font-weight: bold;'
        -            //3 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #00AA00;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #00AA00;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #cc00cc;',
        -            1 => 'color: #6666ff;',
        -            2 => 'color: #3F84D9; font-weight: bold;',
        -            3 => 'color: #933;',
        -            4 => 'color: #444;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //DOM Node ID
        -        0 => '\#[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*',
        -        //CSS classname
        -        1 => '\.(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
        -        //CSS rules
        -        2 => '\@(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
        -        //Measurements
        -        3 => '[+\-]?(\d+|(\d*\.\d+))(em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|%)',
        -        //var
        -        4 => '(--[a-zA-Z0-9\-]*)'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_AFTER' => '(?![\-a-zA-Z0-9_\|%\\-&\.])',
        -            'DISALLOWED_BEFORE' => '(? 'Cuesheet',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        //Single-Line Comments using REM command
        -        1 => "/(?<=\bREM\b).*?$/im",
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'CATALOG','CDTEXTFILE','FILE','FLAGS','INDEX','ISRC','PERFORMER',
        -            'POSTGAP','PREGAP','REM','SONGWRITER','TITLE','TRACK'
        -            ),
        -        2 => array(
        -            'AIFF', 'BINARY', 'MOTOROLA', 'MP3', 'WAVE'
        -            ),
        -        3 => array(
        -            '4CH', 'DCP', 'PRE', 'SCMS'
        -            ),
        -        4 => array(
        -            'AUDIO', 'CDG', 'MODE1/2048', 'MODE1/2336', 'MODE2/2336',
        -            'MODE2/2352', 'CDI/2336', 'CDI/2352'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000066; font-weight: bold;',
        -            3 => 'color: #000066; font-weight: bold;',
        -            4 => 'color: #000066; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #006600;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #000099;',
        -            2 => 'color: #009900;',
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://digitalx.org/cuesheetsyntax.php#{FNAMEL}',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        2 => '\b[A-Za-z0-9]{5}\d{7}\b',
        -        1 => '(?<=[\s:]|^)\d+(?=[\s:]|$)',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 2,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => '(? '(?![\w\.])',
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php
        deleted file mode 100644
        index eb68ea58..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php
        +++ /dev/null
        @@ -1,250 +0,0 @@
        - 'D',
        -    'COMMENT_SINGLE' => array(2 => '///', 1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/', '/+' => '+/'),
        -    'COMMENT_REGEXP' => array(
        -        // doxygen comments
        -        3 => '#/\*\*(?![\*\/]).*\*/#sU',
        -        // raw strings
        -        4 => '#r"[^"]*"#s',
        -        // Script Style interpreter comment
        -        5 => "/\A#!(?=\\/).*?$/m"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'"),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[abfnrtv\\'\"?\n\\\\]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#",
        -        //Named entity escapes
        -        /*6 => "#\\\\&(?:quot|amp|lt|gt|OElig|oelig|Scaron|scaron|Yuml|circ|tilde|".
        -            "ensp|emsp|thinsp|zwnj|zwj|lrm|rlm|ndash|mdash|lsquo|rsquo|sbquo|".
        -            "ldquo|rdquo|bdquo|dagger|Dagger|permil|lsaquo|rsaquo|euro|nbsp|".
        -            "iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|".
        -            "shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|".
        -            "sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|".
        -            "Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|".
        -            "Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|".
        -            "times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|".
        -            "aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|".
        -            "euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|".
        -            "otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|".
        -            "yuml|fnof|Alpha|Beta|Gamma|Delta|Epsilon|Zeta|Eta|Theta|Iota|".
        -            "Kappa|Lambda|Mu|Nu|Xi|Omicron|Pi|Rho|Sigma|Tau|Upsilon|Phi|Chi|".
        -            "Psi|Omega|alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|".
        -            "kappa|lambda|mu|nu|xi|omicron|pi|rho|sigmaf|sigma|tau|upsilon|".
        -            "phi|chi|psi|omega|thetasym|upsih|piv|bull|hellip|prime|Prime|".
        -            "oline|frasl|weierp|image|real|trade|alefsym|larr|uarr|rarr|darr|".
        -            "harr|crarr|lArr|uArr|rArr|dArr|hArr|forall|part|exist|empty|".
        -            "nabla|isin|notin|ni|prod|sum|minus|lowast|radic|prop|infin|ang|".
        -            "and|or|cap|cup|int|there4|sim|cong|asymp|ne|equiv|le|ge|sub|sup|".
        -            "nsub|sube|supe|oplus|otimes|perp|sdot|lceil|rceil|lfloor|rfloor|".
        -            "lang|rang|loz|spades|clubs|hearts|diams);#",*/
        -        // optimized:
        -        6 => "#\\\\&(?:A(?:Elig|acute|circ|grave|lpha|ring|tilde|uml)|Beta|".
        -            "C(?:cedil|hi)|D(?:agger|elta)|E(?:TH|acute|circ|grave|psilon|ta|uml)|".
        -            "Gamma|I(?:acute|circ|grave|ota|uml)|Kappa|Lambda|Mu|N(?:tilde|u)|".
        -            "O(?:Elig|acute|circ|grave|m(?:ega|icron)|slash|tilde|uml)|".
        -            "P(?:hi|i|rime|si)|Rho|S(?:caron|igma)|T(?:HORN|au|heta)|".
        -            "U(?:acute|circ|grave|psilon|uml)|Xi|Y(?:acute|uml)|Zeta|".
        -            "a(?:acute|c(?:irc|ute)|elig|grave|l(?:efsym|pha)|mp|n[dg]|ring|".
        -            "symp|tilde|uml)|b(?:dquo|eta|rvbar|ull)|c(?:ap|cedil|e(?:dil|nt)|".
        -            "hi|irc|lubs|o(?:ng|py)|rarr|u(?:p|rren))|d(?:Arr|a(?:gger|rr)|".
        -            "e(?:g|lta)|i(?:ams|vide))|e(?:acute|circ|grave|m(?:pty|sp)|nsp|".
        -            "psilon|quiv|t[ah]|u(?:ml|ro)|xist)|f(?:nof|orall|ra(?:c(?:1[24]|34)|sl))|".
        -            "g(?:amma|e|t)|h(?:Arr|arr|e(?:arts|llip))|i(?:acute|circ|excl|grave|mage|".
        -            "n(?:fin|t)|ota|quest|sin|uml)|kappa|l(?:Arr|a(?:mbda|ng|quo|rr)|ceil|".
        -            "dquo|e|floor|o(?:wast|z)|rm|s(?:aquo|quo)|t)|m(?:acr|dash|".
        -            "i(?:cro|ddot|nus)|u)|n(?:abla|bsp|dash|e|i|ot(?:in)?|sub|tilde|u)|".
        -            "o(?:acute|circ|elig|grave|line|m(?:ega|icron)|plus|r(?:d[fm])?|".
        -            "slash|ti(?:lde|mes)|uml)|p(?:ar[at]|er(?:mil|p)|hi|iv?|lusmn|ound|".
        -            "r(?:ime|o[dp])|si)|quot|r(?:Arr|a(?:dic|ng|quo|rr)|ceil|dquo|e(?:al|g)|".
        -            "floor|ho|lm|s(?:aquo|quo))|s(?:bquo|caron|dot|ect|hy|i(?:gmaf?|m)|".
        -            "pades|u(?:be?|m|p[123e]?)|zlig)|t(?:au|h(?:e(?:re4|ta(?:sym)?)|insp|".
        -            "orn)|i(?:lde|mes)|rade)|u(?:Arr|a(?:cute|rr)|circ|grave|ml|".
        -            "psi(?:h|lon)|uml)|weierp|xi|y(?:acute|en|uml)|z(?:eta|w(?:j|nj)));#",
        -        ),
        -    'HARDQUOTE' => array('`', '`'),
        -    'HARDESCAPE' => array(),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -                'break', 'case', 'continue', 'do', 'else',
        -                'for', 'foreach', 'goto', 'if', 'return',
        -                'switch', 'while', 'foreach_reverse'
        -            ),
        -        2 => array(
        -                'alias', 'asm', 'assert', 'body', 'cast',
        -                'catch', 'default', 'delegate', 'delete',
        -                'extern', 'false', 'finally', 'function',
        -                'import', 'in', 'inout',
        -                'invariant', 'is', 'lazy', 'mixin', 'module', 'new',
        -                'null', 'out', 'pragma', 'ref', 'super', 'this',
        -                'throw', 'true', 'try', 'typeid',
        -                'typeof', 'union', 'with', 'scope'
        -            ),
        -        3 => array(
        -                'ClassInfo', 'Error', 'Exception',
        -                'Interface', 'Object', 'IMonitor',
        -                'OffsetTypeInfo', 'Throwable',
        -                'TypeInfo_Class', 'TypeInfo', '__traits',
        -                '__EOF__', '__FILE__', '__LINE__',
        -            ),
        -        4 => array(
        -                'abstract', 'align', 'auto', 'bit', 'bool',
        -                'byte', 'cdouble', 'cfloat', 'char',
        -                'class', 'const', 'creal', 'dchar', 'dstring', 'debug',
        -                'deprecated', 'double', 'enum', 'export',
        -                'final', 'float', 'idouble', 'ifloat', 'immutable', 'int',
        -                'interface', 'ireal', 'long', 'nothrow', 'override',
        -                'package', 'private', 'protected', 'ptrdiff_t',
        -                'public', 'real', 'short', 'shared', 'size_t',
        -                'static', 'string', 'struct', 'synchronized',
        -                'template', 'ubyte', 'ucent', 'uint',
        -                'ulong', 'unittest', 'ushort', 'version',
        -                'void', 'volatile', 'wchar', 'wstring',
        -                '__gshared', '@disable', '@property', 'pure', 'safe'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '?', '!', ';', ':', ',', '...', '..',
        -        '+', '-', '*', '/', '%', '&', '|', '^', '<', '>', '=', '~',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #aaaadd; font-weight: bold;',
        -            4 => 'color: #993333;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #009933; font-style: italic;',
        -            3 => 'color: #009933; font-style: italic;',
        -            4 => 'color: #ff0000;',
        -            5 => 'color: #0040ff;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            6 => 'color: #666699; font-weight: bold; font-style: italic;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            'HARD' => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php
        deleted file mode 100644
        index 932e13e8..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php
        +++ /dev/null
        @@ -1,159 +0,0 @@
        - 'Dart',
        -
        -    'COMMENT_SINGLE' => array('//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(),
        -
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\nrfbtv\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        4 => "#\\\\u\\{[\da-fA-F]*\\}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE |
        -        GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abstract', 'as', 'assert', 'break', 'case', 'catch', 'class',
        -            'const', 'continue', 'default', 'do', 'dynamic', 'else', 'export',
        -            'extends', 'external', 'factory', 'false', 'final', 'finally',
        -            'for', 'get', 'if', 'implements', 'import', 'in', 'is', 'library',
        -            'new', 'null', 'operator', 'part', 'return', 'set', 'static',
        -            'super', 'switch', 'this', 'throw', 'true', 'try', 'typedef', 'var',
        -            'while', 'with'
        -            ),
        -        2 => array(
        -            'double', 'bool', 'int', 'num', 'void'
        -            ),
        -        ),
        -
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '{', '}', '[', ']'),
        -        1 => array('+', '-', '*', '/', '%', '~'),
        -        2 => array('&', '|', '^'),
        -        3 => array('=', '!', '<', '>'),
        -        4 => array('?', ':'),
        -        5 => array('..'),
        -        6 => array(';', ',')
        -        ),
        -
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        ),
        -
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'font-weight: bold;',
        -            2 => 'color: #445588; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #999988; font-style: italic;',
        -            'MULTI' => 'color: #999988; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => ''
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #d14;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #009999;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'BRACKETS' => array(''),
        -        'METHODS' => array(
        -            1 => 'color: #006633;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'font-weight: bold;',
        -            1 => 'font-weight: bold;',
        -            2 => 'font-weight: bold;',
        -            3 => 'font-weight: bold;',
        -            4 => 'font-weight: bold;',
        -            5 => 'font-weight: bold;',
        -            6 => 'font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php
        deleted file mode 100644
        index 90de8732..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php
        +++ /dev/null
        @@ -1,190 +0,0 @@
        - 'DCL',
        -    'COMMENT_SINGLE' => array('$!', '!'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        2 => '/(?<=\$)\s*sql\s+.*?(?:quit|exit);?\s*?$/sim' // do not highlight inline sql
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'HARDESCAPE' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        1 => "/''[a-zA-Z\\-_]+'/"
        -        ),
        -    'KEYWORDS' => array(
        -        1 => array( // commands
        -            'ACCOUNTING', 'ALLOCATE', 'ANALYZE', 'APPEND', 'ASSIGN', 'ATTACH', 'BACKUP',
        -            'CALL', 'CANCEL', 'CHECKSUM', 'CLOSE', 'CONNECT', 'CONTINUE', 'CONVERT',
        -            'COPY', 'CREATE', 'DEALLOCATE', 'DEASSIGN', 'DEBUG', 'DECK',
        -            'DECRYPT', 'DEFINE', 'DELETE', 'DEPOSIT', 'DIFFERENCES', 'DIRECTORY',
        -            'DISABLE',  'AUTOSTART', 'DISCONNECT', 'DISMOUNT', 'DUMP', 'EDIT', 'ENABLE',
        -            'ENCRYPT', 'ENDSUBROUTINE', 'EOD', 'EOJ', 'EXAMINE', 'EXCHANGE',
        -            'EXIT', 'FONT', 'GOSUB', 'GOTO', 'HELP', 'IF', 'THEN', 'ELSE', 'ENDIF', 'INITIALIZE', 'INQUIRE',
        -            'INSTALL', 'JAVA', 'JOB', 'LIBRARY', 'LICENSE', 'LINK', 'LOGIN', 'LOGOUT',
        -            'MACRO', 'MAIL', 'MERGE', 'MESSAGE', 'MONITOR', 'MOUNT', 'NCS', 'ON', 'OPEN',
        -            'PASSWORD', 'PATCH', 'PHONE', 'PIPE', 'PPPD', 'PRINT', 'PRODUCT', 'PURGE',
        -            'READ', 'RECALL', 'RENAME', 'REPLY', 'REQUEST', 'RETURN', 'RMU', 'RUN', 'RUNOFF',
        -            'SEARCH', 'SET', 'SET AUDIT', 'SET BOOTBLOCK', 'SET BROADCAST',
        -            'SET CACHE', 'SET CARD_READER', 'SET CLUSTER', 'SET COMMAND', 'SET CONTROL',
        -            'SET CPU', 'SET DAY', 'SET DEFAULT', 'SET DEVICE', 'SET DIRECTORY',
        -            'SET DISPLAY', 'SET ENTRY', 'SET FILE', 'SET HOST', 'SET IMAGE', 'SET KEY',
        -            'SET LOGINS', 'SET MAGTAPE', 'SET MESSAGE', 'SET NETWORK', 'SET ON', 'SET OUTPUT_RATE',
        -            'SET PASSWORD', 'SET PREFERRED_PATH', 'SET PREFIX', 'SET PRINTER', 'SET PROCESS',
        -            'SET PROMPT', 'SET PROTECTION', 'SET QUEUE', 'SET RESTART_VALUE',
        -            'SET RIGHTS_LIST', 'SET RMS_DEFAULT', 'SET ROOT', 'SET SECURITY',
        -            'SET SERVER ACME_SERVER', 'SET SERVER REGISTRY_SERVER', 'SET SERVER SECURITY_SERVER',
        -            'SET SHADOW', 'SET SYMBOL', 'SET TERMINAL', 'SET TIME', 'SET VERIFY',
        -            'SET VOLUME', 'SET WORKING_SET', 'SHOW', 'SHOW AUDIT',
        -            'SHOW BROADCAST', 'SHOW CLUSTER', 'SHOW CPU', 'SHOW DEFAULT', 'SHOW DEVICES',
        -            'SHOW DISPLAY', 'SHOW ENTRY', 'SHOW ERROR', 'SHOW FASTPATH', 'SHOW IMAGE',
        -            'SHOW INTRUSION', 'SHOW KEY', 'SHOW LICENSE', 'SHOW LOGICAL', 'SHOW MEMORY',
        -            'SHOW NETWORK', 'SHOW PRINTER', 'SHOW PROCESS', 'SHOW PROTECTION', 'SHOW QUEUE',
        -            'SHOW QUOTA', 'SHOW RMS_DEFAULT', 'SHOW ROOT', 'SHOW SECURITY',
        -            'SHOW SERVER ACME_SERVER', 'SHOW SERVER REGISTRY_SERVER', 'SHOW SHADOW',
        -            'SHOW STATUS', 'SHOW SYMBOL', 'SHOW SYSTEM', 'SHOW TERMINAL', 'SHOW TIME',
        -            'SHOW TRANSLATION', 'SHOW USERS', 'SHOW WORKING_SET', 'SHOW ZONE', 'SORT',
        -            'SPAWN', 'START', 'STOP', 'SUBMIT', 'SUBROUTINE', 'SYNCHRONIZE', 'TYPE',
        -            'UNLOCK', 'VIEW', 'WAIT', 'WRITE', 'XAUTH'
        -            ),
        -        2 => array( // lexical functions
        -            'F$CONTEXT', 'F$CSID', 'F$CUNITS', 'F$CVSI', 'F$CVTIME', 'F$CVUI',
        -            'F$DELTA_TIME', 'F$DEVICE', 'F$DIRECTORY', 'F$EDIT', 'F$ELEMENT',
        -            'F$ENVIRONMENT', 'F$EXTRACT', 'F$FAO', 'F$FID_TO_NAME', 'F$FILE_ATTRIBUTES',
        -            'F$GETDVI', 'F$GETENV', 'F$GETJPI', 'F$GETQUI', 'F$GETSYI', 'F$IDENTIFIER',
        -            'F$INTEGER', 'F$LENGTH', 'F$LICENSE', 'F$LOCATE', 'F$MATCH_WILD', 'F$MESSAGE',
        -            'F$MODE', 'F$MULTIPATH', 'F$PARSE', 'F$PID', 'F$PRIVILEGE', 'F$PROCESS',
        -            'F$SEARCH', 'F$SETPRV', 'F$STRING', 'F$TIME', 'F$TRNLNM', 'F$TYPE', 'F$UNIQUE',
        -            'F$USER', 'F$VERIFY'
        -            ),
        -        3 => array( // special variables etc
        -            'sql$database', 'P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7', 'P8', 'P9',
        -            '$status', '$severity', 'sys$login', 'sys$system',
        -            'sys$input', 'sys$output', 'sys$pipe'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '@', '&', '|', '<', '>', '-',
        -        '.eqs.', '.eq.', '.lt.', '.lts.', '.gt.', '.gts.', '.ne.', '.nes.',
        -        '.le.', '.ge.', '.ges.', '.les.',
        -        '.EQS.', '.EQ.', '.LT.', '.LTS.', '.GT.', '.GTS.', '.NE.', '.NES.',
        -        '.LE.', '.GE.', '.GES.', '.LES.',
        -        '.and.', '.or.', '.not.',
        -        '.AND.', '.OR.', '.NOT.',
        -        '==', ':==', '=', ':='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #0066FF;',
        -            3 => 'color: #993300;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #666666; font-style: italic;',
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #9999FF; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #006666;',
        -            1 => 'color: #0099FF;',
        -            2 => 'color: red;',
        -            3 => 'color: #007800;',
        -            4 => 'color: #007800;',
        -            5 => 'color: #780078;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #7a0874; font-weight: bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0099FF;',                     // variables
        -            1 => 'color: #0000FF;',                     // qualifiers
        -            2 => 'color: #FF6600; font-weight: bold;'   // labels
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        // variables
        -        0 => "'[a-zA-Z_\\-$]+'",
        -        // qualifiers and parameters
        -        1 => "(?:\/[a-zA-Z_\/]+)[\s=]",
        -        // labels
        -        2 => '(?<=\$)\s*[a-zA-Z\-_]+:'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'COMMENTS' => array(
        -        ),
        -        'KEYWORDS' => array(
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php
        deleted file mode 100644
        index 4dec5a85..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php
        +++ /dev/null
        @@ -1,129 +0,0 @@
        - 'DCPU-16 Assembly',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'NUMBERS' => GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_HEX_PREFIX,
        -    'KEYWORDS' => array(
        -        /*CPU*/
        -        1 => array(
        -            'set','add','sub','mul','div','mod','shl','shr','and','bor','xor',
        -            'ife','ifn','ifg','ifb',
        -            'jsr'
        -            ),
        -        /*registers*/
        -        2 => array(
        -            'a','b','c','x','y','z','i','j',
        -            'pc','sp','o',
        -            'pop','peek','push' //Special cases with DCPU-16
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '+', '-', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000088; font-weight:bold;',
        -            2 => 'color: #0000ff;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000088;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7f007f;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #880000;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            2 => 'color: #993333;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://0x10c.com/doc/dcpu-16.txt',
        -        2 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Hex numbers
        -        //0 => '0[0-9a-fA-F]{1,32}[hH]',
        -        //Binary numbers
        -        //1 => '\%[01]{1,64}|[01]{1,64}[bB]?(?![^<]*>)',
        -        //Labels
        -        2 => '^:[_a-zA-Z][_a-zA-Z0-9]?(?=\s|$)'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(? "(?![a-zA-Z0-9_\|%\\-])"
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php
        deleted file mode 100644
        index 99fa6280..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php
        +++ /dev/null
        @@ -1,180 +0,0 @@
        - 'DCS',
        -    'COMMENT_SINGLE' => array(
        -        1 => ';'
        -        ),
        -    'COMMENT_MULTI' => array(
        -        ),
        -    'COMMENT_REGEXP' => array(
        -        // Highlight embedded C code in a separate color:
        -        2 => '/\bINSERT_C_CODE\b.*?\bEND_C_CODE\b/ims'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array(
        -        '"'
        -        ),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => '',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abs', 'ascii_value', 'bit_value', 'blank_date', 'calc_unit_values', 'cm',
        -            'complete_months', 'complete_years', 'correct', 'create_input_file', 'cy',
        -            'date_convert', 'day', 'del_output_separator',
        -            'delete_existing_output_files', 'div', 'ex', 'exact_years', 'exp',
        -            'extract_date', 'failed_validation', 'file_number', 'first_record',
        -            'fract', 'fund_fac_a', 'fund_fac_b', 'fund_fac_c', 'fund_fac_d',
        -            'fund_fac_e', 'fund_fac_f', 'fund_fac_g', 'fund_fac_h', 'fund_fac_i',
        -            'fund_fac_j', 'fund_fac_k', 'fund_fac_l', 'fund_fac_m', 'fund_fac_n',
        -            'fund_fac_o', 'fund_fac_p', 'fund_fac_q', 'fund_fac_r', 'fund_fac_s',
        -            'fund_fac_t', 'fund_fac_u', 'fund_fac_v', 'fund_fac_w', 'fund_fac_x',
        -            'fund_fac_y', 'fund_fac_z', 'group', 'group_record',
        -            'input_file_date_time', 'input_file_extension', 'input_file_location',
        -            'input_file_name', 'int', 'invalid', 'last_record', 'leap_year', 'len',
        -            'ln', 'log', 'main_format_name', 'max', 'max_num_subrecords', 'message',
        -            'min', 'mod', 'month', 'months_add', 'months_sub', 'nearest_months',
        -            'nearest_years', 'next_record', 'nm', 'no_of_current_records',
        -            'no_of_records', 'numval', 'ny', 'output', 'output_array_as_constants',
        -            'output_file_path', 'output_record', 'pmdf_output', 'previous', 'rand',
        -            're_start', 'read_generic_table', 'read_generic_table_text',
        -            'read_input_footer', 'read_input_footer_text', 'read_input_header',
        -            'read_input_header_text', 'record_count', 'record_suppressed', 'round',
        -            'round_down', 'round_near', 'round_up', 'run_dcs_program', 'run_parameter',
        -            'run_parameter_text', 'set_main_record', 'set_num_subrecords',
        -            'sort_array', 'sort_current_records', 'sort_input', 'strval', 'substr',
        -            'summarise', 'summarise_record', 'summarise_units',
        -            'summarise_units_record', 'suppress_record', 'table_correct',
        -            'table_validate', 'terminate', 'time', 'today', 'trim', 'ubound', 'year',
        -            'years_add', 'years_sub'
        -            ),
        -        2 => array(
        -            'and', 'as', 'begin', 'boolean', 'byref', 'byval', 'call', 'case', 'date',
        -            'default', 'do', 'else', 'elseif', 'end_c_code', 'endfor', 'endfunction',
        -            'endif', 'endproc', 'endswitch', 'endwhile', 'eq',
        -            'explicit_declarations', 'false', 'for', 'from', 'function', 'ge', 'gt',
        -            'if', 'insert_c_code', 'integer', 'le', 'loop', 'lt', 'ne', 'not',
        -            'number', 'or', 'private', 'proc', 'public', 'quitloop', 'return',
        -            'short', 'step', 'switch', 'text', 'then', 'to', 'true', 'while'
        -            ),
        -        3 => array(
        -            // These keywords are not highlighted by the DCS IDE but we may as well
        -            // keep track of them anyway:
        -            'mp_file', 'odbc_file'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']',
        -        '=', '<', '>',
        -        '+', '-', '*', '/', '^',
        -        ':', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: red;',
        -            2 => 'color: blue;',
        -            3 => 'color: black;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: black; background-color: silver;',
        -            // Colors for highlighting embedded C code:
        -            2 => 'color: maroon; background-color: pink;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: black;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: green;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: green;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: black;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php
        deleted file mode 100644
        index a0cd36eb..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php
        +++ /dev/null
        @@ -1,299 +0,0 @@
        - 'Delphi',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'),
        -    //Compiler directives
        -    'COMMENT_REGEXP' => array(2 => '/\\{\\$.*?}|\\(\\*\\$.*?\\*\\)/U'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'"),
        -    'ESCAPE_CHAR' => '',
        -
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'Abstract', 'And', 'Array', 'As', 'Asm', 'At', 'Begin', 'Case',
        -            'Class', 'Const', 'Constructor', 'Contains', 'Default', 'delayed', 'Destructor',
        -            'DispInterface', 'Div', 'Do', 'DownTo', 'Else', 'End', 'Except',
        -            'Export', 'Exports', 'External', 'File', 'Finalization', 'Finally', 'For',
        -            'Function', 'Generic', 'Goto', 'If', 'Implementation', 'In', 'Inherited',
        -            'Initialization', 'Inline', 'Interface', 'Is', 'Label', 'Library', 'Message',
        -            'Mod', 'Nil', 'Not', 'Object', 'Of', 'On', 'Or', 'Overload', 'Override',
        -            'Package', 'Packed', 'Private', 'Procedure', 'Program', 'Property',
        -            'Protected', 'Public', 'Published', 'Read', 'Raise', 'Record', 'Register',
        -            'Repeat', 'Requires', 'Resourcestring', 'Set', 'Shl', 'Shr', 'Specialize', 'Stored',
        -            'Then', 'ThreadVar', 'To', 'Try', 'Type', 'Unit', 'Until', 'Uses', 'Var',
        -            'Virtual', 'While', 'With', 'Write', 'Xor', 'assembler', 'far',
        -            'near', 'pascal', 'cdecl', 'safecall', 'stdcall', 'varargs'
        -            ),
        -        2 => array(
        -            'false', 'self', 'true',
        -            ),
        -        3 => array(
        -            'Abs', 'AcquireExceptionObject', 'Addr', 'AnsiToUtf8', 'Append', 'ArcTan',
        -            'Assert', 'AssignFile', 'Assigned', 'BeginThread', 'BlockRead',
        -            'BlockWrite', 'Break', 'ChDir', 'Chr', 'Close', 'CloseFile',
        -            'CompToCurrency', 'CompToDouble', 'Concat', 'Continue', 'Copy', 'Cos',
        -            'Dec', 'Delete', 'Dispose', 'DoubleToComp', 'EndThread', 'EnumModules',
        -            'EnumResourceModules', 'Eof', 'Eoln', 'Erase', 'ExceptAddr',
        -            'ExceptObject', 'Exclude', 'Exit', 'Exp', 'FilePos', 'FileSize',
        -            'FillChar', 'Finalize', 'FindClassHInstance', 'FindHInstance',
        -            'FindResourceHInstance', 'Flush', 'Frac', 'FreeMem', 'Get8087CW',
        -            'GetDir', 'GetLastError', 'GetMem', 'GetMemoryManager',
        -            'GetModuleFileName', 'GetVariantManager', 'Halt', 'Hi', 'High',
        -            'IOResult', 'Inc', 'Include', 'Initialize', 'Insert', 'Int',
        -            'IsMemoryManagerSet', 'IsVariantManagerSet', 'Length', 'Ln', 'Lo', 'Low',
        -            'MkDir', 'Move', 'New', 'Odd', 'OleStrToStrVar', 'OleStrToString', 'Ord',
        -            'PUCS4Chars', 'ParamCount', 'ParamStr', 'Pi', 'Pos', 'Pred', 'Ptr',
        -            'Random', 'Randomize', 'Read', 'ReadLn', 'ReallocMem',
        -            'ReleaseExceptionObject', 'Rename', 'Reset', 'Rewrite', 'RmDir', 'Round',
        -            'RunError', 'Seek', 'SeekEof', 'SeekEoln', 'Set8087CW', 'SetLength',
        -            'SetLineBreakStyle', 'SetMemoryManager', 'SetString', 'SetTextBuf',
        -            'SetVariantManager', 'Sin', 'SizeOf', 'Slice', 'Sqr', 'Sqrt', 'Str',
        -            'StringOfChar', 'StringToOleStr', 'StringToWideChar', 'Succ', 'Swap',
        -            'Trunc', 'Truncate', 'TypeInfo', 'UCS4StringToWideString', 'UTF8Decode',
        -            'UTF8Encode', 'UnicodeToUtf8', 'UniqueString', 'UpCase', 'Utf8ToAnsi',
        -            'Utf8ToUnicode', 'Val', 'VarArrayRedim', 'VarClear',
        -            'WideCharLenToStrVar', 'WideCharLenToString', 'WideCharToStrVar',
        -            'WideCharToString', 'WideStringToUCS4String', 'Write', 'WriteLn',
        -
        -            'Abort', 'AddExitProc', 'AddTerminateProc', 'AdjustLineBreaks', 'AllocMem',
        -            'AnsiCompareFileName', 'AnsiCompareStr', 'AnsiCompareText',
        -            'AnsiDequotedStr', 'AnsiExtractQuotedStr', 'AnsiLastChar',
        -            'AnsiLowerCase', 'AnsiLowerCaseFileName', 'AnsiPos', 'AnsiQuotedStr',
        -            'AnsiSameStr', 'AnsiSameText', 'AnsiStrComp', 'AnsiStrIComp',
        -            'AnsiStrLComp', 'AnsiStrLIComp', 'AnsiStrLastChar', 'AnsiStrLower',
        -            'AnsiStrPos', 'AnsiStrRScan', 'AnsiStrScan', 'AnsiStrUpper',
        -            'AnsiUpperCase', 'AnsiUpperCaseFileName', 'AppendStr', 'AssignStr',
        -            'Beep', 'BoolToStr', 'ByteToCharIndex', 'ByteToCharLen', 'ByteType',
        -            'CallTerminateProcs', 'ChangeFileExt', 'CharLength', 'CharToByteIndex',
        -            'CharToByteLen', 'CompareMem', 'CompareStr', 'CompareText', 'CreateDir',
        -            'CreateGUID', 'CurrToStr', 'CurrToStrF', 'CurrentYear', 'Date',
        -            'DateTimeToFileDate', 'DateTimeToStr', 'DateTimeToString',
        -            'DateTimeToSystemTime', 'DateTimeToTimeStamp', 'DateToStr', 'DayOfWeek',
        -            'DecodeDate', 'DecodeDateFully', 'DecodeTime', 'DeleteFile',
        -            'DirectoryExists', 'DiskFree', 'DiskSize', 'DisposeStr', 'EncodeDate',
        -            'EncodeTime', 'ExceptionErrorMessage', 'ExcludeTrailingBackslash',
        -            'ExcludeTrailingPathDelimiter', 'ExpandFileName', 'ExpandFileNameCase',
        -            'ExpandUNCFileName', 'ExtractFileDir', 'ExtractFileDrive',
        -            'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath',
        -            'ExtractRelativePath', 'ExtractShortPathName', 'FileAge', 'FileClose',
        -            'FileCreate', 'FileDateToDateTime', 'FileExists', 'FileGetAttr',
        -            'FileGetDate', 'FileIsReadOnly', 'FileOpen', 'FileRead', 'FileSearch',
        -            'FileSeek', 'FileSetAttr', 'FileSetDate', 'FileSetReadOnly', 'FileWrite',
        -            'FinalizePackage', 'FindClose', 'FindCmdLineSwitch', 'FindFirst',
        -            'FindNext', 'FloatToCurr', 'FloatToDateTime', 'FloatToDecimal',
        -            'FloatToStr', 'FloatToStrF', 'FloatToText', 'FloatToTextFmt',
        -            'FmtLoadStr', 'FmtStr', 'ForceDirectories', 'Format', 'FormatBuf',
        -            'FormatCurr', 'FormatDateTime', 'FormatFloat', 'FreeAndNil',
        -            'GUIDToString', 'GetCurrentDir', 'GetEnvironmentVariable',
        -            'GetFileVersion', 'GetFormatSettings', 'GetLocaleFormatSettings',
        -            'GetModuleName', 'GetPackageDescription', 'GetPackageInfo', 'GetTime',
        -            'IncAMonth', 'IncMonth', 'IncludeTrailingBackslash',
        -            'IncludeTrailingPathDelimiter', 'InitializePackage', 'IntToHex',
        -            'IntToStr', 'InterlockedDecrement', 'InterlockedExchange',
        -            'InterlockedExchangeAdd', 'InterlockedIncrement', 'IsDelimiter',
        -            'IsEqualGUID', 'IsLeapYear', 'IsPathDelimiter', 'IsValidIdent',
        -            'Languages', 'LastDelimiter', 'LoadPackage', 'LoadStr', 'LowerCase',
        -            'MSecsToTimeStamp', 'NewStr', 'NextCharIndex', 'Now', 'OutOfMemoryError',
        -            'QuotedStr', 'RaiseLastOSError', 'RaiseLastWin32Error', 'RemoveDir',
        -            'RenameFile', 'ReplaceDate', 'ReplaceTime', 'SafeLoadLibrary',
        -            'SameFileName', 'SameText', 'SetCurrentDir', 'ShowException', 'Sleep',
        -            'StrAlloc', 'StrBufSize', 'StrByteType', 'StrCat', 'StrCharLength',
        -            'StrComp', 'StrCopy', 'StrDispose', 'StrECopy', 'StrEnd', 'StrFmt',
        -            'StrIComp', 'StrLCat', 'StrLComp', 'StrLCopy', 'StrLFmt', 'StrLIComp',
        -            'StrLen', 'StrLower', 'StrMove', 'StrNew', 'StrNextChar', 'StrPCopy',
        -            'StrPLCopy', 'StrPas', 'StrPos', 'StrRScan', 'StrScan', 'StrToBool',
        -            'StrToBoolDef', 'StrToCurr', 'StrToCurrDef', 'StrToDate', 'StrToDateDef',
        -            'StrToDateTime', 'StrToDateTimeDef', 'StrToFloat', 'StrToFloatDef',
        -            'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime',
        -            'StrToTimeDef', 'StrUpper', 'StringReplace', 'StringToGUID', 'Supports',
        -            'SysErrorMessage', 'SystemTimeToDateTime', 'TextToFloat', 'Time',
        -            'TimeStampToDateTime', 'TimeStampToMSecs', 'TimeToStr', 'Trim',
        -            'TrimLeft', 'TrimRight', 'TryEncodeDate', 'TryEncodeTime',
        -            'TryFloatToCurr', 'TryFloatToDateTime', 'TryStrToBool', 'TryStrToCurr',
        -            'TryStrToDate', 'TryStrToDateTime', 'TryStrToFloat', 'TryStrToInt',
        -            'TryStrToInt64', 'TryStrToTime', 'UnloadPackage', 'UpperCase',
        -            'WideCompareStr', 'WideCompareText', 'WideFmtStr', 'WideFormat',
        -            'WideFormatBuf', 'WideLowerCase', 'WideSameStr', 'WideSameText',
        -            'WideUpperCase', 'Win32Check', 'WrapText',
        -
        -            'ActivateClassGroup', 'AllocateHwnd', 'BinToHex', 'CheckSynchronize',
        -            'CollectionsEqual', 'CountGenerations', 'DeallocateHwnd', 'EqualRect',
        -            'ExtractStrings', 'FindClass', 'FindGlobalComponent', 'GetClass',
        -            'GroupDescendantsWith', 'HexToBin', 'IdentToInt',
        -            'InitInheritedComponent', 'IntToIdent', 'InvalidPoint',
        -            'IsUniqueGlobalComponentName', 'LineStart', 'ObjectBinaryToText',
        -            'ObjectResourceToText', 'ObjectTextToBinary', 'ObjectTextToResource',
        -            'PointsEqual', 'ReadComponentRes', 'ReadComponentResEx',
        -            'ReadComponentResFile', 'Rect', 'RegisterClass', 'RegisterClassAlias',
        -            'RegisterClasses', 'RegisterComponents', 'RegisterIntegerConsts',
        -            'RegisterNoIcon', 'RegisterNonActiveX', 'SmallPoint', 'StartClassGroup',
        -            'TestStreamFormat', 'UnregisterClass', 'UnregisterClasses',
        -            'UnregisterIntegerConsts', 'UnregisterModuleClasses',
        -            'WriteComponentResFile',
        -
        -            'ArcCos', 'ArcCosh', 'ArcCot', 'ArcCotH', 'ArcCsc', 'ArcCscH', 'ArcSec',
        -            'ArcSecH', 'ArcSin', 'ArcSinh', 'ArcTan2', 'ArcTanh', 'Ceil',
        -            'CompareValue', 'Cosecant', 'Cosh', 'Cot', 'CotH', 'Cotan', 'Csc', 'CscH',
        -            'CycleToDeg', 'CycleToGrad', 'CycleToRad', 'DegToCycle', 'DegToGrad',
        -            'DegToRad', 'DivMod', 'DoubleDecliningBalance', 'EnsureRange', 'Floor',
        -            'Frexp', 'FutureValue', 'GetExceptionMask', 'GetPrecisionMode',
        -            'GetRoundMode', 'GradToCycle', 'GradToDeg', 'GradToRad', 'Hypot',
        -            'InRange', 'IntPower', 'InterestPayment', 'InterestRate',
        -            'InternalRateOfReturn', 'IsInfinite', 'IsNan', 'IsZero', 'Ldexp', 'LnXP1',
        -            'Log10', 'Log2', 'LogN', 'Max', 'MaxIntValue', 'MaxValue', 'Mean',
        -            'MeanAndStdDev', 'Min', 'MinIntValue', 'MinValue', 'MomentSkewKurtosis',
        -            'NetPresentValue', 'Norm', 'NumberOfPeriods', 'Payment', 'PeriodPayment',
        -            'Poly', 'PopnStdDev', 'PopnVariance', 'Power', 'PresentValue',
        -            'RadToCycle', 'RadToDeg', 'RadToGrad', 'RandG', 'RandomRange', 'RoundTo',
        -            'SLNDepreciation', 'SYDDepreciation', 'SameValue', 'Sec', 'SecH',
        -            'Secant', 'SetExceptionMask', 'SetPrecisionMode', 'SetRoundMode', 'Sign',
        -            'SimpleRoundTo', 'SinCos', 'Sinh', 'StdDev', 'Sum', 'SumInt',
        -            'SumOfSquares', 'SumsAndSquares', 'Tan', 'Tanh', 'TotalVariance',
        -            'Variance'
        -            ),
        -        4 => array(
        -            'AnsiChar', 'AnsiString', 'Bool', 'Boolean', 'Byte', 'ByteBool', 'Cardinal', 'Char',
        -            'Comp', 'Currency', 'DWORD', 'Double', 'Extended', 'Int64', 'Integer', 'IUnknown',
        -            'LongBool', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PBool', 'PBoolean', 'PByte',
        -            'PByteArray', 'PCardinal', 'PChar', 'PComp', 'PCurrency', 'PDWORD', 'PDate', 'PDateTime',
        -            'PDouble', 'PExtended', 'PInt64', 'PInteger', 'PLongInt', 'PLongWord', 'Pointer', 'PPointer',
        -            'PShortInt', 'PShortString', 'PSingle', 'PSmallInt', 'PString', 'PHandle', 'PVariant', 'PWord',
        -            'PWordArray', 'PWordBool', 'PWideChar', 'PWideString', 'Real', 'Real48', 'ShortInt', 'ShortString',
        -            'Single', 'SmallInt', 'String', 'TClass', 'TDate', 'TDateTime', 'TextFile', 'THandle',
        -            'TObject', 'TTime', 'Variant', 'WideChar', 'WideString', 'Word', 'WordBool'
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '[', ']'),
        -        1 => array('.', ',', ':', ';'),
        -        2 => array('@', '^'),
        -        3 => array('=', '+', '-', '*', '/')
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #000066; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #008000; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #ff0000; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000cc;',
        -            1 => 'color: #ff0000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;',
        -            1 => 'color: #000066;',
        -            2 => 'color: #000066;',
        -            3 => 'color: #000066;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        //Hex numbers
        -        0 => '(? '\#(?:\$[0-9a-fA-F]{1,4}|\d{1,5})'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 2,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            3 => array(
        -                'DISALLOWED_AFTER' => '(?=\s*[(;])'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php
        deleted file mode 100644
        index e4bfc6f4..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php
        +++ /dev/null
        @@ -1,194 +0,0 @@
        - 'Diff',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => ' ',
        -    'KEYWORDS' => array(
        -            1 => array(
        -                '\ No newline at end of file'
        -            ),
        -//            2 => array(
        -//                '***************' /* This only seems to works in some cases? */
        -//            ),
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        1 => false,
        -//        2 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #aaaaaa; font-style: italic;',
        -//            2 => 'color: #dd6611;',
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => ''
        -            ),
        -        'STRINGS' => array(
        -            0 => ''
        -            ),
        -        'NUMBERS' => array(
        -            0 => ''
        -            ),
        -        'METHODS' => array(
        -            0 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => ''
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #440088;',
        -            1 => 'color: #991111;',
        -            2 => 'color: #00b000;',
        -            3 => 'color: #888822;',
        -            4 => 'color: #888822;',
        -            5 => 'color: #0011dd;',
        -            6 => 'color: #440088;',
        -            7 => 'color: #991111;',
        -            8 => 'color: #00b000;',
        -            9 => 'color: #888822;',
        -            ),
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -//        2 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        0 => "[0-9,]+[acd][0-9,]+",
        -        //Removed lines
        -        1 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))\\<.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Inserted lines
        -        2 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))\\>.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Location line
        -        3 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))-{3}\\s.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Inserted line
        -        4 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))(\\+){3}\\s.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Modified line
        -        5 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))\\!.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //File specification
        -        6 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))[\\@]{2}.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Removed line
        -        7 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))\\-.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Inserted line
        -        8 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))\\+.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //File specification
        -        9 => array(
        -            GESHI_SEARCH => '(^|(?<=\A\s))(\\*){3}\\s.*$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php
        deleted file mode 100644
        index 8b230da9..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php
        +++ /dev/null
        @@ -1,124 +0,0 @@
        - 'DIV',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'while','until','to','switch','step','return','repeat','loop','if','from','frame','for','end','elseif',
        -            'else','default','debug','continue','clone','case','break','begin'
        -            ),
        -        2 => array(
        -            'xor','whoami','type','sizeof','pointer','or','offset','not','neg','mod','id','dup','and','_ne','_lt',
        -            '_le','_gt','_ge','_eq'
        -            ),
        -        3 => array(
        -            'setup_program','program','process','private','local','import','global','function','const',
        -            'compiler_options'
        -            ),
        -        4 => array(
        -            'word','struct','string','int','byte'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(',')','[',']','=','+','-','*','/','!','%','^','&',':',';',',','<','>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0040b1;',
        -            2 => 'color: #000000;',
        -            3 => 'color: #000066; font-weight: bold;',
        -            4 => 'color: #993333;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #44aa44;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #202020;',
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #44aa44;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php
        deleted file mode 100644
        index 080f300d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php
        +++ /dev/null
        @@ -1,225 +0,0 @@
        - 'DOS',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    //DOS comment lines
        -    'COMMENT_REGEXP' => array(
        -        1 => "/^\s*@?REM\b.*$/mi",
        -        2 => "/^\s*::.*$/m",
        -        3 => "/\^./"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        /* Flow control keywords */
        -        1 => array(
        -            'if', 'else', 'goto', 'shift',
        -            'for', 'in', 'do',
        -            'call', 'exit'
        -            ),
        -        /* IF statement keywords */
        -        2 => array(
        -            'not', 'exist', 'errorlevel',
        -            'defined',
        -            'equ', 'neq', 'lss', 'leq', 'gtr', 'geq'
        -            ),
        -        /* Internal commands */
        -        3 => array(
        -            'cd', 'md', 'rd', 'chdir', 'mkdir', 'rmdir', 'dir',
        -            'del', 'copy', 'move', 'ren', 'rename',
        -            'echo',
        -            'setlocal', 'endlocal', 'set',
        -            'pause',
        -            'pushd', 'popd', 'title', 'verify'
        -            ),
        -        /* Special files */
        -        4 => array(
        -            'prn', 'nul', 'lpt3', 'lpt2', 'lpt1', 'con',
        -            'com4', 'com3', 'com2', 'com1', 'aux'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '@', '%', '!', '|', '<', '>', '&'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #00b100; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #b1b100; font-weight: bold;',
        -            4 => 'color: #0000ff; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #b100b1; font-style: italic;',
        -            3 => 'color: #33cc33;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #ff0000; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #33cc33;',
        -            1 => 'color: #33cc33;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #b100b1; font-weight: bold;',
        -            1 => 'color: #448844;',
        -            2 => 'color: #448888;',
        -            3 => 'color: #448888;'
        -            )
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.ss64.com/nt/{FNAMEL}.html',
        -        2 => 'http://www.ss64.com/nt/{FNAMEL}.html',
        -        3 => 'http://www.ss64.com/nt/{FNAMEL}.html',
        -        4 => 'http://www.ss64.com/nt/{FNAMEL}.html'
        -        ),
        -    'REGEXPS' => array(
        -        /* Label */
        -        0 => array(
        -/*            GESHI_SEARCH => '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((? '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((? '\\2',
        -            GESHI_MODIFIERS => 'si',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -        ),
        -        /* Variable assignement */
        -        1 => array(
        -/*            GESHI_SEARCH => '(SET[\s]+(?si:\/A[\s]+|\/P[\s]+|))([^=\s\n]+)([\s]*=)',*/
        -            GESHI_SEARCH => '(SET\s+(?si:\\/A\s+|\\/P\s+)?)([^=\n]+)(\s*=)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'si',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        /* Arguments or variable evaluation */
        -        2 => array(
        -/*            GESHI_SEARCH => '(%)([\d*]|[^%\s]*(?=%))((? '(!(?:!(?=[a-z0-9]))?)([\d*]|(?:~[adfnpstxz]*(?:$\w+:)?)?[a-z0-9](?!\w)|[^!>\n]*(?=!))((?)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'si',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        /* Arguments or variable evaluation */
        -        3 => array(
        -/*            GESHI_SEARCH => '(%)([\d*]|[^%\s]*(?=%))((? '(%(?:%(?=[a-z0-9]))?)([\d*]|(?:~[adfnpstxz]*(?:$\w+:)?)?[a-z0-9](?!\w)|[^%\n]*(?=%))((? '\\2',
        -            GESHI_MODIFIERS => 'si',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -            ),
        -        'KEYWORDS' => array(
        -            1 => array(
        -                'DISALLOWED_BEFORE' => '(? array(
        -                'DISALLOWED_BEFORE' => '(? array(
        -                'DISALLOWED_BEFORE' => '(? array(
        -                'DISALLOWED_BEFORE' => '(? 'dot',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'URL', 'arrowhead', 'arrowsize', 'arrowtail', 'bb', 'bgcolor', 'bottomlabel',
        -            'center', 'clusterrank', 'color', 'comment', 'constraint', 'decorate',
        -            'dir', 'distortion', 'fillcolor', 'fixedsize', 'fontcolor',
        -            'fontname', 'fontsize', 'group', 'headclip', 'headlabel', 'headport',
        -            'height', 'id', 'label', 'labelangle', 'labeldistance', 'labelfontcolor',
        -            'labelfontname', 'labelfontsize', 'layer', 'layers', 'margin', 'mclimit',
        -            'minlen', 'nodesep', 'nslimit', 'ordering', 'orientation', 'page',
        -            'pagedir', 'peripheries', 'port_label_distance', 'quantum', 'rank', 'rankdir',
        -            'ranksep', 'ratio', 'regular', 'rotate', 'samehead', 'sametail', 'searchsize',
        -            'shape', 'shapefile', 'showboxes', 'sides', 'size', 'skew', 'style',
        -            'tailclip', 'taillabel', 'tailport', 'toplabel', 'weight', 'width'
        -            ),
        -        2 => array(
        -            'node', 'graph', 'digraph', 'strict', 'edge', 'subgraph'
        -            ),
        -        3 => array(
        -            'Mcircle', 'Mdiamond', 'Mrecord', 'Msquare', 'auto', 'back', 'bold',
        -            'both', 'box', 'circle', 'compress', 'dashed', 'diamond', 'dot',
        -            'dotted', 'doublecircle', 'doubleoctagon', 'egg', 'ellipse', 'epsf',
        -            'false', 'fill', 'filled', 'forward', 'global', 'hexagon', 'house',
        -            'inv', 'invdot', 'invhouse', 'invis', 'invodot', 'invtrapezium',
        -            'invtriangle', 'local', 'max', 'min', 'none', 'normal', 'octagon',
        -            'odot', 'out', 'parallelogram', 'plaintext', 'polygon', 'record',
        -            'same', 'solid', 'trapezium', 'triangle', 'tripleoctagon', 'true'
        -            ),
        -        4 => array(
        -            'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'black',
        -            'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue',
        -            'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson',
        -            'cyan', 'darkgoldenrod', 'darkgreen', 'darkkhaki', 'darkolivegreen',
        -            'darkorange', 'darkorchid', 'darksalmon', 'darkseagreen', 'darkslateblue',
        -            'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue',
        -            'dimgray', 'dodgerblue', 'firebrick', 'forestgreen', 'gainsboro', 'ghostwhite',
        -            'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink',
        -            'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush',
        -            'lawngreen', 'lemonchiffon', 'lightblue', 'lightcyan', 'lightgoldenrod',
        -            'lightgoldenrodyellow', 'lightgray', 'lightpink', 'lightsalmon',
        -            'lightseagreen', 'lightskyblue', 'lightslateblue', 'lightslategray',
        -            'lightyellow', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine',
        -            'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',
        -            'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred',
        -            'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy',
        -            'navyblue', 'oldlace', 'olivedrab', 'oralwhite', 'orange', 'orangered',
        -            'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred',
        -            'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple',
        -            'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'salmon2', 'sandybrown',
        -            'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'snow',
        -            'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet',
        -            'violetred', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '{', '}', '-', '+', '*', '/', '<', '>', '!', '~', '%', '&', '|', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000066;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #993333;',
        -            4 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #339933;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #af624d; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true,
        -        2 => true,
        -        3 => true
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php
        deleted file mode 100644
        index 4d4c539c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php
        +++ /dev/null
        @@ -1,206 +0,0 @@
        - 'E',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array('/**' => '*/'), // Note: This is method doc, not a general comment syntax.
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -
        -    // FIXME: The escaping inside ` is actually doubling of any interior `, $, or @ -- backslash is NOT special
        -    'QUOTEMARKS' => array('\'', '"', '`'),
        -    'ESCAPE_CHAR' => '\\',
        -
        -    'KEYWORDS' => array(
        -        // builtin control structures
        -        1 => array(
        -            'accum', 'break', 'try', 'continue', 'if', 'while', 'for', 'switch'
        -            ),
        -
        -        // control structures subsidiary keywords
        -        2 => array(
        -            'catch', 'else', 'finally', 'in', 'exit'
        -            ),
        -
        -        // named operators
        -        3 => array(
        -            'fn', 'via'
        -            ),
        -
        -        // variable/function/object definers
        -        4 => array(
        -            'def', 'bind', 'var'
        -            ),
        -
        -        // object definition subsidiary keywords
        -        5 => array(
        -            'extends', 'as', 'implements', 'guards', 'match', 'to', 'method'
        -            ),
        -
        -        // builtin nouns in safeEnv
        -        6 => array(
        -            'null', 'false', 'true', 'throw', '__loop', '__makeList',
        -            '__makeMap', '__makeProtocolDesc', '__makeMessageDesc',
        -            '__makeParamDesc', 'any', 'void', 'boolean', '__makeOrderedSpace',
        -            'ValueGuard', '__MatchContext', 'require', '__makeVerbFacet', 'NaN',
        -            'Infinity', '__identityFunc', '__makeInt', '__makeFinalSlot',
        -            '__makeVarSlot', '__makeGuardedSlot', '__makeGuard', '__makeTwine',
        -            '__makeSourceSpan', '__auditedBy', 'Guard', 'near', 'pbc',
        -            'PassByCopy', 'DeepPassByCopy', 'Data', 'Persistent', 'DeepFrozen',
        -            'int', 'float64', 'char', 'String', 'Twine', 'TextWriter', 'List',
        -            'Map', 'nullOk', 'Tuple', '__Portrayal', 'notNull', 'vow', 'rcvr',
        -            'SturdyRef', 'simple__quasiParser', 'twine__quasiParser',
        -            'rx__quasiParser', 'e__quasiParser', 'epatt__quasiParser',
        -            'sml__quasiParser', 'term__quasiParser', 'traceln', '__equalizer',
        -            '__comparer', 'Ref', 'E', 'promiseAllFulfilled', 'EIO', 'help',
        -            'safeScope', '__eval', 'resource__uriGetter', 'type__uriGetter',
        -            'import__uriGetter', 'elib__uriGetter', 'elang__uriGetter',
        -            'opaque__uriGetter'
        -            ),
        -
        -        // builtin nouns in privilegedEnv
        -        7 => array(
        -            'file__uriGetter', 'fileURL__uriGetter', 'jar__uriGetter',
        -            'http__uriGetter', 'ftp__uriGetter', 'gopher__uriGetter',
        -            'news__uriGetter', 'cap__uriGetter', 'makeCommand', 'stdout',
        -            'stderr', 'stdin', 'print', 'println', 'interp', 'entropy', 'timer',
        -            'introducer', 'identityMgr', 'makeSturdyRef', 'timeMachine',
        -            'unsafe__uriGetter', 'currentVat', 'rune', 'awt__uriGetter',
        -            'swing__uriGetter', 'JPanel__quasiParser', 'swt__uriGetter',
        -            'currentDisplay', 'swtGrid__quasiParser', 'swtGrid`',
        -            'privilegedScope'
        -            ),
        -
        -        // reserved keywords
        -        8 => array(
        -            'abstract', 'an', 'assert', 'attribute', 'be', 'begin', 'behalf',
        -            'belief', 'believe', 'believes', 'case', 'class', 'const',
        -            'constructor', 'declare', 'default', 'define', 'defmacro',
        -            'delicate', 'deprecated', 'dispatch', 'do', 'encapsulate',
        -            'encapsulated', 'encapsulates', 'end', 'ensure', 'enum', 'eventual',
        -            'eventually', 'export', 'facet', 'forall', 'function', 'given',
        -            'hidden', 'hides', 'inline', 'is', 'know', 'knows', 'lambda', 'let',
        -            'methods', 'module', 'namespace', 'native', 'obeys', 'octet',
        -            'oneway', 'operator', 'package', 'private', 'protected', 'public',
        -            'raises', 'reliance', 'reliant', 'relies', 'rely', 'reveal', 'sake',
        -            'signed', 'static', 'struct', 'suchthat', 'supports', 'suspect',
        -            'suspects', 'synchronized', 'this', 'transient', 'truncatable',
        -            'typedef', 'unsigned', 'unum', 'uses', 'using', 'utf8', 'utf16',
        -            'virtual', 'volatile', 'wstring'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '%', '=', '<', '>', '!', '^', '&', '|', '?', ':', ';', ','
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #b1b100;',
        -            3 => 'color: #b1b100;',
        -            4 => 'color: #b1b100;',
        -            5 => 'color: #b1b100;',
        -            6 => 'color: #b1b100;',
        -            7 => 'color: #b1b100;',
        -            8 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => 'http://wiki.erights.org/wiki/{FNAME}',
        -        2 => 'http://wiki.erights.org/wiki/{FNAME}',
        -        3 => 'http://wiki.erights.org/wiki/{FNAME}',
        -        4 => 'http://wiki.erights.org/wiki/{FNAME}',
        -        5 => 'http://wiki.erights.org/wiki/{FNAME}',
        -        6 => 'http://wiki.erights.org/wiki/{FNAME}',
        -        7 => 'http://wiki.erights.org/wiki/{FNAME}',
        -        8 => 'http://wiki.erights.org/wiki/{FNAME}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '<-',
        -        3 => '::'
        -        ),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php
        deleted file mode 100644
        index 7a1da92d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php
        +++ /dev/null
        @@ -1,208 +0,0 @@
        - 'ECMAScript',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    // Regular Expression Literals
        -    'COMMENT_REGEXP' => array(2 => "/(?<=[\\s^])s\\/(?:\\\\.|(?!\n)[^\\*\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\*\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])m?\\/(?:\\\\.|(?!\n)[^\\*\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\,\\;\\)])/iU"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array( // Reserved literals
        -            'false', 'true',
        -            'null'
        -            ),
        -        2 => array( // Main keywords
        -            'break', 'case', 'catch', 'continue', 'default', 'delete', 'do', 'else',
        -            'finally', 'for', 'function', 'if', 'in', 'instanceof', 'new', 'return',
        -            'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while',
        -            'with'
        -            ),
        -        3 => array( // Extra keywords or keywords reserved for future use
        -            'abstract', 'as', 'boolean', 'byte', 'char', 'class', 'const', 'debugger',
        -            'double', 'enum', 'export', 'extends', 'final', 'float', 'goto', 'implements',
        -            'import', 'int', 'interface', 'is', 'long', 'native', 'namespace', 'package',
        -            'private', 'protected', 'public', 'short', 'static', 'super', 'synchronized', 'throws',
        -            'transient', 'use', 'volatile'
        -            ),
        -        4 => array( // Operators
        -            'get', 'set'
        -            ),
        -        5 => array( // Built-in object classes
        -            'Array', 'Boolean', 'Date', 'EvalError', 'Error', 'Function', 'Math', 'Number',
        -            'Object', 'RangeError', 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError'
        -            ),
        -        6 => array( // Global properties
        -            'Infinity', 'NaN', 'undefined'
        -            ),
        -        7 => array( // Global methods
        -            'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent',
        -            'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt',
        -            // The escape and unescape functions do not work properly for non-ASCII characters and have been deprecated.
        -            // In JavaScript 1.5 and later, use encodeURI, decodeURI, encodeURIComponent, and decodeURIComponent.
        -            'escape', 'unescape'
        -            ),
        -        8 => array( // Function's arguments
        -            'arguments'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}',
        -        '+', '-', '*', '/', '%',
        -        '!', '.', '&', '|', '^',
        -        '<', '>', '=', '~',
        -        ',', ';', '?', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #009999;',
        -            2 => 'color: #1500C8;',
        -            3 => 'color: #1500C8;',
        -            4 => 'color: #1500C8;',
        -            5 => 'color: #1500C8;',
        -            6 => 'color: #1500C8;',
        -            7 => 'color: #1500C8;',
        -            8 => 'color: #1500C8;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #CC0000;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #3366CC;',
        -            1 => 'color: #3366CC;',
        -            2 => 'color: #3366CC;',
        -            3 => 'color: #3366CC;',
        -            4 => 'color: #3366CC;',
        -            5 => 'color: #3366CC;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #008800;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #9900FF;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF00FF;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #FF00FF;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #FF00FF;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #FF00FF;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color: #FF00FF;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color: #FF00FF;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color: #FF00FF;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color: #FF00FF;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #660066;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php
        deleted file mode 100644
        index 5142e797..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php
        +++ /dev/null
        @@ -1,393 +0,0 @@
        - 'Eiffel',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '%',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'separate',
        -            'invariant',
        -            'inherit',
        -            'indexing',
        -            'feature',
        -            'expanded',
        -            'deferred',
        -            'class'
        -            ),
        -        2 => array(
        -            'xor',
        -            'when',
        -            'variant',
        -            'until',
        -            'unique',
        -            'undefine',
        -            'then',
        -            'strip',
        -            'select',
        -            'retry',
        -            'rescue',
        -            'require',
        -            'rename',
        -            'reference',
        -            'redefine',
        -            'prefix',
        -            'or',
        -            'once',
        -            'old',
        -            'obsolete',
        -            'not',
        -            'loop',
        -            'local',
        -            'like',
        -            'is',
        -            'inspect',
        -            'infix',
        -            'include',
        -            'implies',
        -            'if',
        -            'frozen',
        -            'from',
        -            'external',
        -            'export',
        -            'ensure',
        -            'end',
        -            'elseif',
        -            'else',
        -            'do',
        -            'creation',
        -            'create',
        -            'check',
        -            'as',
        -            'and',
        -            'alias',
        -            'agent'
        -            ),
        -        3 => array(
        -            'Void',
        -            'True',
        -            'Result',
        -            'Precursor',
        -            'False',
        -            'Current'
        -            ),
        -        4 => array(
        -            'UNIX_SIGNALS',
        -            'UNIX_FILE_INFO',
        -            'UNBOUNDED',
        -            'TWO_WAY_TREE_CURSOR',
        -            'TWO_WAY_TREE',
        -            'TWO_WAY_SORTED_SET',
        -            'TWO_WAY_LIST',
        -            'TWO_WAY_CURSOR_TREE',
        -            'TWO_WAY_CIRCULAR',
        -            'TWO_WAY_CHAIN_ITERATOR',
        -            'TUPLE',
        -            'TREE',
        -            'TRAVERSABLE',
        -            'TO_SPECIAL',
        -            'THREAD_CONTROL',
        -            'THREAD_ATTRIBUTES',
        -            'THREAD',
        -            'TABLE',
        -            'SUBSET',
        -            'STRING_HANDLER',
        -            'STRING',
        -            'STREAM',
        -            'STORABLE',
        -            'STD_FILES',
        -            'STACK',
        -            'SPECIAL',
        -            'SORTED_TWO_WAY_LIST',
        -            'SORTED_STRUCT',
        -            'SORTED_LIST',
        -            'SINGLE_MATH',
        -            'SET',
        -            'SEQUENCE',
        -            'SEQ_STRING',
        -            'SEMAPHORE',
        -            'ROUTINE',
        -            'RESIZABLE',
        -            'RECURSIVE_TREE_CURSOR',
        -            'RECURSIVE_CURSOR_TREE',
        -            'REAL_REF',
        -            'REAL',
        -            'RAW_FILE',
        -            'RANDOM',
        -            'QUEUE',
        -            'PROXY',
        -            'PROFILING_SETTING',
        -            'PROCEDURE',
        -            'PRIORITY_QUEUE',
        -            'PRIMES',
        -            'PRECOMP',
        -            'POINTER_REF',
        -            'POINTER',
        -            'PLATFORM',
        -            'PLAIN_TEXT_FILE',
        -            'PATH_NAME',
        -            'PART_SORTED_TWO_WAY_LIST',
        -            'PART_SORTED_SET',
        -            'PART_SORTED_LIST',
        -            'PART_COMPARABLE',
        -            'OPERATING_ENVIRONMENT',
        -            'ONCE_CONTROL',
        -            'OBJECT_OWNER',
        -            'OBJECT_CONTROL',
        -            'NUMERIC',
        -            'NONE',
        -            'MUTEX',
        -            'MULTI_ARRAY_LIST',
        -            'MULTAR_LIST_CURSOR',
        -            'MEMORY',
        -            'MEM_INFO',
        -            'MEM_CONST',
        -            'MATH_CONST',
        -            'LIST',
        -            'LINKED_TREE_CURSOR',
        -            'LINKED_TREE',
        -            'LINKED_STACK',
        -            'LINKED_SET',
        -            'LINKED_QUEUE',
        -            'LINKED_PRIORITY_QUEUE',
        -            'LINKED_LIST_CURSOR',
        -            'LINKED_LIST',
        -            'LINKED_CURSOR_TREE',
        -            'LINKED_CIRCULAR',
        -            'LINKABLE',
        -            'LINEAR_ITERATOR',
        -            'LINEAR',
        -            'ITERATOR',
        -            'IO_MEDIUM',
        -            'INTERNAL',
        -            'INTEGER_REF',
        -            'INTEGER_INTERVAL',
        -            'INTEGER',
        -            'INFINITE',
        -            'INDEXABLE',
        -            'IDENTIFIED_CONTROLLER',
        -            'IDENTIFIED',
        -            'HIERARCHICAL',
        -            'HEAP_PRIORITY_QUEUE',
        -            'HASHABLE',
        -            'HASH_TABLE_CURSOR',
        -            'HASH_TABLE',
        -            'GENERAL',
        -            'GC_INFO',
        -            'FUNCTION',
        -            'FORMAT_INTEGER',
        -            'FORMAT_DOUBLE',
        -            'FIXED_TREE',
        -            'FIXED_LIST',
        -            'FIXED',
        -            'FINITE',
        -            'FILE_NAME',
        -            'FILE',
        -            'FIBONACCI',
        -            'EXECUTION_ENVIRONMENT',
        -            'EXCEPTIONS',
        -            'EXCEP_CONST',
        -            'DYNAMIC_TREE',
        -            'DYNAMIC_LIST',
        -            'DYNAMIC_CIRCULAR',
        -            'DYNAMIC_CHAIN',
        -            'DOUBLE_REF',
        -            'DOUBLE_MATH',
        -            'DOUBLE',
        -            'DISPENSER',
        -            'DIRECTORY_NAME',
        -            'DIRECTORY',
        -            'DECLARATOR',
        -            'DEBUG_OUTPUT',
        -            'CURSOR_TREE_ITERATOR',
        -            'CURSOR_TREE',
        -            'CURSOR_STRUCTURE',
        -            'CURSOR',
        -            'COUNTABLE_SEQUENCE',
        -            'COUNTABLE',
        -            'CONTAINER',
        -            'CONSOLE',
        -            'CONDITION_VARIABLE',
        -            'COMPARABLE_STRUCT',
        -            'COMPARABLE_SET',
        -            'COMPARABLE',
        -            'COMPACT_TREE_CURSOR',
        -            'COMPACT_CURSOR_TREE',
        -            'COLLECTION',
        -            'CIRCULAR_CURSOR',
        -            'CIRCULAR',
        -            'CHARACTER_REF',
        -            'CHARACTER',
        -            'CHAIN',
        -            'CELL',
        -            'BOX',
        -            'BOUNDED_STACK',
        -            'BOUNDED_QUEUE',
        -            'BOUNDED',
        -            'BOOLEAN_REF',
        -            'BOOLEAN',
        -            'BOOL_STRING',
        -            'BIT_REF',
        -            'BINARY_TREE',
        -            'BINARY_SEARCH_TREE_SET',
        -            'BINARY_SEARCH_TREE',
        -            'BILINEAR',
        -            'BI_LINKABLE',
        -            'BASIC_ROUTINES',
        -            'BAG',
        -            'ASCII',
        -            'ARRAYED_TREE',
        -            'ARRAYED_STACK',
        -            'ARRAYED_QUEUE',
        -            'ARRAYED_LIST_CURSOR',
        -            'ARRAYED_LIST',
        -            'ARRAYED_CIRCULAR',
        -            'ARRAY2',
        -            'ARRAY',
        -            'ARGUMENTS',
        -            'ANY',
        -            'ACTIVE'
        -            ),
        -        5 => array(
        -            'yes',
        -            'visible',
        -            'trace',
        -            'system',
        -            'root',
        -            'profile',
        -            'override_cluster',
        -            'object',
        -            'no',
        -            'multithreaded',
        -            'msil_generation_type',
        -            'line_generation',
        -            'library',
        -            'inlining_size',
        -            'inlining',
        -            'include_path',
        -            'il_verifiable',
        -            'exclude',
        -            'exception_trace',
        -            'dynamic_runtime',
        -            'dotnet_naming_convention',
        -            'disabled_debug',
        -            'default',
        -            'debug',
        -            'dead_code_removal',
        -            'console_application',
        -            'cluster',
        -            'cls_compliant',
        -            'check_vape',
        -            'assertion',
        -            'array_optimization',
        -            'all',
        -            'address_expression'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', '|', ':',
        -        '(', ')', '{', '}', '[', ']', '#'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => true,
        -        5 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF; font-weight: bold;',
        -            2 => 'color: #0600FF; font-weight: bold;',
        -            3 => 'color: #800080;',
        -            4 => 'color: #800000',
        -            5 => 'color: #603000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000; font-style: italic;',
        -            'MULTI' => ''
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #005070; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0080A0;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #000060;',
        -            2 => 'color: #000050;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #600000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => 'http://www.google.com/search?q=site%3Ahttp%3A%2F%2Fdocs.eiffel.com%2Feiffelstudio%2Flibraries+{FNAMEL}&btnI=I%27m+Feeling+Lucky',
        -        5 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php
        deleted file mode 100644
        index 4ddc6ab6..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php
        +++ /dev/null
        @@ -1,220 +0,0 @@
        - 'eMail (mbox)',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => 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'
        -            ),
        -        3 => array(
        -            'Date','From','Sender','Subject','To','CC'
        -            ),
        -        4 => array(
        -            'by', 'for', 'from', 'id', 'with'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        ':', ';', '<', '>', '[', ']'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => false,
        -        3 => false,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #800000; font-weight: bold;',
        -            4 => 'font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => 'color: #000040;',
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #0000FF;',
        -            3 => 'color: #008000;',
        -            4 => 'color: #0000FF; font-weight: bold;',
        -            5 => 'font-weight: bold;',
        -            6 => 'color: #400080;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        // Non-Standard-Header
        -        1 => array(
        -            GESHI_SEARCH => "(?<=\A\x20|\n)x-[a-z0-9\-]*(?=\s*:|\s*<)",
        -            GESHI_REPLACE => "\\0",
        -            GESHI_MODIFIERS => "smi",
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            ),
        -        //Email-Adresses or Mail-IDs
        -        2 => array(
        -            GESHI_SEARCH => "\b(?\"?)[\w\.\-]+\k@(?!-)[\w\-]+(? "\\0",
        -            GESHI_MODIFIERS => "mi",
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            ),
        -        //Date values in RFC format
        -        3 => array(
        -            GESHI_SEARCH => "\b(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s+\d\d?\s+" .
        -                "(?:Jan|Feb|Mar|apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+" .
        -                "\d{4}\s+\d\d?:\d\d:\d\d\s+[+\-]\d{4}(?:\s+\(\w+\))?",
        -            GESHI_REPLACE => "\\0",
        -            GESHI_MODIFIERS => "mi",
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            ),
        -        //IP addresses
        -        4 => array(
        -            GESHI_SEARCH => "(?<=\s)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=\s)|".
        -                "(?<=\[)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=\])|".
        -                "(?<==)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=<)|".
        -
        -                "(?<=\s)(?:[a-f\d]{1,4}\:)+(?:[a-f\d]{0,4})?(?:\:[a-f\d]{1,4})+(?=\s)|".
        -                "(?<=\[)(?:[a-f\d]{1,4}\:)+(?:[a-f\d]{0,4})?(?:\:[a-f\d]{1,4})+(?=\])|".
        -                "(?<==)(?:[a-f\d]{1,4}\:)+(?:[a-f\d]{0,4})?(?:\:[a-f\d]{1,4})+(?=<)|".
        -
        -                "(?<=\s)\:(?:\:[a-f\d]{1,4})+(?=\s)|".
        -                "(?<=\[)\:(?:\:[a-f\d]{1,4})+(?=\])|".
        -                "(?<==)\:(?:\:[a-f\d]{1,4})+(?=<)|".
        -
        -                "(?<=\s)(?:[a-f\d]{1,4}\:)+\:(?=\s)|".
        -                "(?<=\[)(?:[a-f\d]{1,4}\:)+\:(?=\])|".
        -                "(?<==)(?:[a-f\d]{1,4}\:)+\:(?=<)",
        -            GESHI_REPLACE => "\\0",
        -            GESHI_MODIFIERS => "i",
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            ),
        -        //Field-Assignments
        -        5 => array(
        -            GESHI_SEARCH => "(?<=\s)[A-Z0-9\-\.]+(?==(?:$|\s$|[^\s=]))",
        -            GESHI_REPLACE => "\\0",
        -            GESHI_MODIFIERS => "mi",
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            ),
        -        //MIME type
        -        6 => array(
        -            GESHI_SEARCH => "(?<=\s)(?:audio|application|image|multipart|text|".
        -                "video|x-[a-z0-9\-]+)\/[a-z0-9][a-z0-9\-]*(?=\s|<|$)",
        -            GESHI_REPLACE => "\\0",
        -            GESHI_MODIFIERS => "m",
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => "/(?P^)[A-Za-z][a-zA-Z0-9\-]*\s*:\s*(?:.|(?=\n\s)\n)*(?P$)/m"
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\A\x20|\n)',
        -                'DISALLOWED_AFTER' => '(?=\s*:)',
        -            ),
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\A\x20|\n)',
        -                'DISALLOWED_AFTER' => '(?=\s*:)',
        -            ),
        -            4 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\s)',
        -                'DISALLOWED_AFTER' => '(?=\s|\b)',
        -            )
        -        ),
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'COMMENTS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php
        deleted file mode 100644
        index 2db41fed..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php
        +++ /dev/null
        @@ -1,152 +0,0 @@
        - 'EPC',
        -    'COMMENT_SINGLE' => array('//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //[Sections]
        -        //1 => "/^\\[.*\\]/"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(
        -        0 => '"',
        -        1 => '$'
        -        ),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'if', 'then', 'else', 'endif',
        -            'and', 'or', 'xor', 'hysteresis'
        -            ),
        -        2 => array(
        -            'read', 'write', 'event',
        -            'gettime', 'settime', 'getdate', 'setdate', 'gettimedate', 'settimedate',
        -            'hour', 'minute', 'second', 'changehour', 'changeminute', 'changesecond',
        -            'date', 'month', 'day', 'dayofweek', 'sun', 'azimuth', 'elevation',
        -            'sunrisehour', 'sunriseminute', 'sunsethour', 'sunsetminute',
        -            'wtime', 'htime', 'mtime', 'stime',
        -            'cwtime', 'chtime', 'cmtime', 'cstime',
        -            'delay', 'after', 'cycle',
        -            'readflash', 'writeflash',
        -            'abs', 'acos', 'asin', 'atan', 'cos', 'ceil', 'average', 'exp', 'floor',
        -            'log', 'max', 'min', 'mod', 'pow', 'sqrt', 'sin', 'tan', 'change', 'convert',
        -            'eval', 'systemstart', 'random', 'comobject', 'sleep', 'scene', 'storescene', 'callscene',
        -            'find', 'stringcast', 'stringset', 'stringformat', 'split', 'size',
        -            'readrs232'. 'sendrs232', 'address', 'readknx',
        -            'readudp', 'sendudp', 'connecttcp', 'closetcp', 'readtcp', 'sendtcp',
        -            'resolve', 'sendmail',
        -            'button', 'webbutton', 'chart', 'webchart', 'webdisplay', 'getslider', 'pshifter', 'mpshifter',
        -            'getpslider', 'mbutton', 'mbbutton', 'mchart', 'mpchart', 'mpbutton', 'pdisplay', 'pchart',
        -            'pbutton', 'setslider', 'setpslider', 'slider', 'pslider', 'page', 'line', 'header',
        -            'footer', 'none', 'plink', 'link', 'frame', 'dframe'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '%', 'b01',
        -            ),
        -        1 => array(
        -            '+', '-', '==', '>=', '=<',
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #e63ec3;',
        -            2 => 'color: #e63ec3;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #0000ff;'
        -            //1 => 'color: #ffa500;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            1 => 'color: #000099;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #8a0808;',
        -            1 => 'color: #6e6e6e;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0b610b;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #0b610b;',
        -            1 => 'color: #e63ec3;'
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #0b610b;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        // Numbers, e.g. 255u08
        -        1 => "[0-9]*[subf][0136][12468]"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'COMMENTS' => array(
        -            'DISALLOWED_BEFORE' => '$'
        -        ),
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?  "(?![\.\-a-zA-Z0-9_%=\\/])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php
        deleted file mode 100644
        index 9939d1a7..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php
        +++ /dev/null
        @@ -1,439 +0,0 @@
        -'
        - *
        - *************************************************************************************
        - *
        - *     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' => 'Erlang',
        -    'COMMENT_SINGLE' => array(1 => '%'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array("'", "\\"),
        -    'HARDCHAR' => "\\",
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' => GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        //Control flow keywrods
        -        1 => array(
        -            'after', 'andalso', 'begin', 'case', 'catch', 'end', 'fun', 'if',
        -            'of', 'orelse', 'receive', 'try', 'when', 'query'
        -            ),
        -        //Binary operators
        -        2 => array(
        -            'and', 'band', 'bnot', 'bor', 'bsl', 'bsr', 'bxor', 'div', 'not',
        -            'or', 'rem', 'xor'
        -            ),
        -        3 => array(
        -            'abs', 'alive', 'apply', 'atom_to_list', 'binary_to_list',
        -            'binary_to_term', 'concat_binary', 'date', 'disconnect_node',
        -            'element', 'erase', 'exit', 'float', 'float_to_list', 'get',
        -            'get_keys', 'group_leader', 'halt', 'hd', 'integer_to_list',
        -            'is_alive', 'length', 'link', 'list_to_atom', 'list_to_binary',
        -            'list_to_float', 'list_to_integer', 'list_to_pid', 'list_to_tuple',
        -            'load_module', 'make_ref', 'monitor_node', 'node', 'nodes', 'now',
        -            'open_port', 'pid_to_list', 'process_flag', 'process_info',
        -            'process', 'put', 'register', 'registered', 'round', 'self',
        -            'setelement', 'size', 'spawn', 'spawn_link', 'split_binary',
        -            'statistics', 'term_to_binary', 'throw', 'time', 'tl', 'trunc',
        -            'tuple_to_list', 'unlink', 'unregister', 'whereis'
        -            ),
        -        // Built-In Functions
        -        4 => array(
        -            'atom', 'binary', 'constant', 'function', 'integer', 'is_atom',
        -            'is_binary', 'is_constant', 'is_function', 'is_integer', 'is_list',
        -            'is_number', 'is_pid', 'is_reference', 'is_record', 'list',
        -            'number', 'pid', 'ports', 'port_close', 'port_info', 'reference'
        -            ),
        -        // Erlang/OTP internal modules (scary one)
        -        5 => array(
        -            'alarm_handler', 'any', 'app', 'application', 'appmon', 'appup',
        -            'array', 'asn1ct', 'asn1rt', 'auth', 'base64', 'beam_lib', 'c',
        -            'calendar', 'code', 'common_test_app', 'compile', 'config',
        -            'corba', 'corba_object', 'cosEventApp', 'CosEventChannelAdmin',
        -            'CosEventChannelAdmin_ConsumerAdmin',
        -            'CosEventChannelAdmin_EventChannel',
        -            'CosEventChannelAdmin_ProxyPullConsumer',
        -            'CosEventChannelAdmin_ProxyPullSupplier',
        -            'CosEventChannelAdmin_ProxyPushConsumer',
        -            'CosEventChannelAdmin_ProxyPushSupplier',
        -            'CosEventChannelAdmin_SupplierAdmin', 'CosEventDomainAdmin',
        -            'CosEventDomainAdmin_EventDomain',
        -            'CosEventDomainAdmin_EventDomainFactory',
        -            'cosEventDomainApp', 'CosFileTransfer_Directory',
        -            'CosFileTransfer_File', 'CosFileTransfer_FileIterator',
        -            'CosFileTransfer_FileTransferSession',
        -            'CosFileTransfer_VirtualFileSystem',
        -            'cosFileTransferApp', 'CosNaming', 'CosNaming_BindingIterator',
        -            'CosNaming_NamingContext', 'CosNaming_NamingContextExt',
        -            'CosNotification', 'CosNotification_AdminPropertiesAdmin',
        -            'CosNotification_QoSAdmin', 'cosNotificationApp',
        -            'CosNotifyChannelAdmin_ConsumerAdmin',
        -            'CosNotifyChannelAdmin_EventChannel',
        -            'CosNotifyChannelAdmin_EventChannelFactory',
        -            'CosNotifyChannelAdmin_ProxyConsumer',
        -            'CosNotifyChannelAdmin_ProxyPullConsumer',
        -            'CosNotifyChannelAdmin_ProxyPullSupplier',
        -            'CosNotifyChannelAdmin_ProxyPushConsumer',
        -            'CosNotifyChannelAdmin_ProxyPushSupplier',
        -            'CosNotifyChannelAdmin_ProxySupplier',
        -            'CosNotifyChannelAdmin_SequenceProxyPullConsumer',
        -            'CosNotifyChannelAdmin_SequenceProxyPullSupplier',
        -            'CosNotifyChannelAdmin_SequenceProxyPushConsumer',
        -            'CosNotifyChannelAdmin_SequenceProxyPushSupplier',
        -            'CosNotifyChannelAdmin_StructuredProxyPullConsumer',
        -            'CosNotifyChannelAdmin_StructuredProxyPullSupplier',
        -            'CosNotifyChannelAdmin_StructuredProxyPushConsumer',
        -            'CosNotifyChannelAdmin_StructuredProxyPushSupplier',
        -            'CosNotifyChannelAdmin_SupplierAdmin',
        -            'CosNotifyComm_NotifyPublish', 'CosNotifyComm_NotifySubscribe',
        -            'CosNotifyFilter_Filter', 'CosNotifyFilter_FilterAdmin',
        -            'CosNotifyFilter_FilterFactory', 'CosNotifyFilter_MappingFilter',
        -            'cosProperty', 'CosPropertyService_PropertiesIterator',
        -            'CosPropertyService_PropertyNamesIterator',
        -            'CosPropertyService_PropertySet',
        -            'CosPropertyService_PropertySetDef',
        -            'CosPropertyService_PropertySetDefFactory',
        -            'CosPropertyService_PropertySetFactory', 'cosTime',
        -            'CosTime_TimeService', 'CosTime_TIO', 'CosTime_UTO',
        -            'CosTimerEvent_TimerEventHandler',
        -            'CosTimerEvent_TimerEventService', 'cosTransactions',
        -            'CosTransactions_Control', 'CosTransactions_Coordinator',
        -            'CosTransactions_RecoveryCoordinator', 'CosTransactions_Resource',
        -            'CosTransactions_SubtransactionAwareResource',
        -            'CosTransactions_Terminator', 'CosTransactions_TransactionFactory',
        -            'cover', 'cprof', 'cpu_sup', 'crashdump', 'crypto', 'crypto_app',
        -            'ct', 'ct_cover', 'ct_ftp', 'ct_master', 'ct_rpc', 'ct_snmp',
        -            'ct_ssh', 'ct_telnet', 'dbg', 'debugger', 'dets', 'dialyzer',
        -            'dict', 'digraph', 'digraph_utils', 'disk_log', 'disksup',
        -            'docb_gen', 'docb_transform', 'docb_xml_check', 'docbuilder_app',
        -            'driver_entry', 'edoc', 'edoc_doclet', 'edoc_extract',
        -            'edoc_layout', 'edoc_lib', 'edoc_run', 'egd', 'ei', 'ei_connect',
        -            'epmd', 'epp', 'epp_dodger', 'eprof', 'erl', 'erl_boot_server',
        -            'erl_call', 'erl_comment_scan', 'erl_connect', 'erl_ddll',
        -            'erl_driver', 'erl_error', 'erl_eterm', 'erl_eval',
        -            'erl_expand_records', 'erl_format', 'erl_global', 'erl_id_trans',
        -            'erl_internal', 'erl_lint', 'erl_malloc', 'erl_marshal',
        -            'erl_parse', 'erl_pp', 'erl_prettypr', 'erl_prim_loader',
        -            'erl_prim_loader_stub', 'erl_recomment', 'erl_scan',
        -            'erl_set_memory_block', 'erl_syntax', 'erl_syntax_lib', 'erl_tar',
        -            'erl_tidy', 'erlang', 'erlang_mode', 'erlang_stub', 'erlc',
        -            'erlsrv', 'error_handler', 'error_logger', 'erts_alloc',
        -            'erts_alloc_config', 'escript', 'et', 'et_collector',
        -            'et_selector', 'et_viewer', 'etop', 'ets', 'eunit', 'file',
        -            'file_sorter', 'filelib', 'filename', 'fixed', 'fprof', 'ftp',
        -            'gb_sets', 'gb_trees', 'gen_event', 'gen_fsm', 'gen_sctp',
        -            'gen_server', 'gen_tcp', 'gen_udp', 'gl', 'global', 'global_group',
        -            'glu', 'gs', 'heart', 'http', 'httpd', 'httpd_conf',
        -            'httpd_socket', 'httpd_util', 'i', 'ic', 'ic_c_protocol',
        -            'ic_clib', 'igor', 'inet', 'inets', 'init', 'init_stub',
        -            'instrument', 'int', 'interceptors', 'inviso', 'inviso_as_lib',
        -            'inviso_lfm', 'inviso_lfm_tpfreader', 'inviso_rt',
        -            'inviso_rt_meta', 'io', 'io_lib', 'kernel_app', 'lib', 'lists',
        -            'lname', 'lname_component', 'log_mf_h', 'make', 'math', 'megaco',
        -            'megaco_codec_meas', 'megaco_codec_transform',
        -            'megaco_edist_compress', 'megaco_encoder', 'megaco_flex_scanner',
        -            'megaco_tcp', 'megaco_transport', 'megaco_udp', 'megaco_user',
        -            'memsup', 'mnesia', 'mnesia_frag_hash', 'mnesia_registry',
        -            'mod_alias', 'mod_auth', 'mod_esi', 'mod_security',
        -            'Module_Interface', 'ms_transform', 'net_adm', 'net_kernel',
        -            'new_ssl', 'nteventlog', 'observer_app', 'odbc', 'orber',
        -            'orber_acl', 'orber_diagnostics', 'orber_ifr', 'orber_tc',
        -            'orddict', 'ordsets', 'os', 'os_mon', 'os_mon_mib', 'os_sup',
        -            'otp_mib', 'overload', 'packages', 'percept', 'percept_profile',
        -            'pg', 'pg2', 'pman', 'pool', 'prettypr', 'proc_lib', 'proplists',
        -            'public_key', 'qlc', 'queue', 'random', 'rb', 're', 'regexp',
        -            'registry', 'rel', 'release_handler', 'reltool', 'relup', 'rpc',
        -            'run_erl', 'run_test', 'runtime_tools_app', 'sasl_app', 'script',
        -            'seq_trace', 'sets', 'shell', 'shell_default', 'slave', 'snmp',
        -            'snmp_app', 'snmp_community_mib', 'snmp_framework_mib',
        -            'snmp_generic', 'snmp_index', 'snmp_notification_mib', 'snmp_pdus',
        -            'snmp_standard_mib', 'snmp_target_mib', 'snmp_user_based_sm_mib',
        -            'snmp_view_based_acm_mib', 'snmpa', 'snmpa_conf', 'snmpa_error',
        -            'snmpa_error_io', 'snmpa_error_logger', 'snmpa_error_report',
        -            'snmpa_local_db', 'snmpa_mpd', 'snmpa_network_interface',
        -            'snmpa_network_interface_filter',
        -            'snmpa_notification_delivery_info_receiver',
        -            'snmpa_notification_filter', 'snmpa_supervisor', 'snmpc', 'snmpm',
        -            'snmpm_conf', 'snmpm_mpd', 'snmpm_network_interface', 'snmpm_user',
        -            'sofs', 'ssh', 'ssh_channel', 'ssh_connection', 'ssh_sftp',
        -            'ssh_sftpd', 'ssl', 'ssl_app', 'ssl_pkix', 'start', 'start_erl',
        -            'start_webtool', 'stdlib_app', 'string', 'supervisor',
        -            'supervisor_bridge', 'sys', 'systools', 'tags', 'test_server',
        -            'test_server_app', 'test_server_ctrl', 'tftp', 'timer', 'toolbar',
        -            'ttb', 'tv', 'unicode', 'unix_telnet', 'user', 'webtool', 'werl',
        -            'win32reg', 'wrap_log_reader', 'wx', 'wx_misc', 'wx_object',
        -            'wxAcceleratorEntry', 'wxAcceleratorTable', 'wxArtProvider',
        -            'wxAuiDockArt', 'wxAuiManager', 'wxAuiNotebook', 'wxAuiPaneInfo',
        -            'wxAuiTabArt', 'wxBitmap', 'wxBitmapButton', 'wxBitmapDataObject',
        -            'wxBoxSizer', 'wxBrush', 'wxBufferedDC', 'wxBufferedPaintDC',
        -            'wxButton', 'wxCalendarCtrl', 'wxCalendarDateAttr',
        -            'wxCalendarEvent', 'wxCaret', 'wxCheckBox', 'wxCheckListBox',
        -            'wxChildFocusEvent', 'wxChoice', 'wxClientDC', 'wxClipboard',
        -            'wxCloseEvent', 'wxColourData', 'wxColourDialog',
        -            'wxColourPickerCtrl', 'wxColourPickerEvent', 'wxComboBox',
        -            'wxCommandEvent', 'wxContextMenuEvent', 'wxControl',
        -            'wxControlWithItems', 'wxCursor', 'wxDataObject', 'wxDateEvent',
        -            'wxDatePickerCtrl', 'wxDC', 'wxDialog', 'wxDirDialog',
        -            'wxDirPickerCtrl', 'wxDisplayChangedEvent', 'wxEraseEvent',
        -            'wxEvent', 'wxEvtHandler', 'wxFileDataObject', 'wxFileDialog',
        -            'wxFileDirPickerEvent', 'wxFilePickerCtrl', 'wxFindReplaceData',
        -            'wxFindReplaceDialog', 'wxFlexGridSizer', 'wxFocusEvent', 'wxFont',
        -            'wxFontData', 'wxFontDialog', 'wxFontPickerCtrl',
        -            'wxFontPickerEvent', 'wxFrame', 'wxGauge', 'wxGBSizerItem',
        -            'wxGenericDirCtrl', 'wxGLCanvas', 'wxGraphicsBrush',
        -            'wxGraphicsContext', 'wxGraphicsFont', 'wxGraphicsMatrix',
        -            'wxGraphicsObject', 'wxGraphicsPath', 'wxGraphicsPen',
        -            'wxGraphicsRenderer', 'wxGrid', 'wxGridBagSizer', 'wxGridCellAttr',
        -            'wxGridCellEditor', 'wxGridCellRenderer', 'wxGridEvent',
        -            'wxGridSizer', 'wxHelpEvent', 'wxHtmlEasyPrinting', 'wxIcon',
        -            'wxIconBundle', 'wxIconizeEvent', 'wxIdleEvent', 'wxImage',
        -            'wxImageList', 'wxJoystickEvent', 'wxKeyEvent',
        -            'wxLayoutAlgorithm', 'wxListBox', 'wxListCtrl', 'wxListEvent',
        -            'wxListItem', 'wxListView', 'wxMask', 'wxMaximizeEvent',
        -            'wxMDIChildFrame', 'wxMDIClientWindow', 'wxMDIParentFrame',
        -            'wxMemoryDC', 'wxMenu', 'wxMenuBar', 'wxMenuEvent', 'wxMenuItem',
        -            'wxMessageDialog', 'wxMiniFrame', 'wxMirrorDC',
        -            'wxMouseCaptureChangedEvent', 'wxMouseEvent', 'wxMoveEvent',
        -            'wxMultiChoiceDialog', 'wxNavigationKeyEvent', 'wxNcPaintEvent',
        -            'wxNotebook', 'wxNotebookEvent', 'wxNotifyEvent',
        -            'wxPageSetupDialog', 'wxPageSetupDialogData', 'wxPaintDC',
        -            'wxPaintEvent', 'wxPalette', 'wxPaletteChangedEvent', 'wxPanel',
        -            'wxPasswordEntryDialog', 'wxPen', 'wxPickerBase', 'wxPostScriptDC',
        -            'wxPreviewCanvas', 'wxPreviewControlBar', 'wxPreviewFrame',
        -            'wxPrintData', 'wxPrintDialog', 'wxPrintDialogData', 'wxPrinter',
        -            'wxPrintout', 'wxPrintPreview', 'wxProgressDialog',
        -            'wxQueryNewPaletteEvent', 'wxRadioBox', 'wxRadioButton',
        -            'wxRegion', 'wxSashEvent', 'wxSashLayoutWindow', 'wxSashWindow',
        -            'wxScreenDC', 'wxScrollBar', 'wxScrolledWindow', 'wxScrollEvent',
        -            'wxScrollWinEvent', 'wxSetCursorEvent', 'wxShowEvent',
        -            'wxSingleChoiceDialog', 'wxSizeEvent', 'wxSizer', 'wxSizerFlags',
        -            'wxSizerItem', 'wxSlider', 'wxSpinButton', 'wxSpinCtrl',
        -            'wxSpinEvent', 'wxSplashScreen', 'wxSplitterEvent',
        -            'wxSplitterWindow', 'wxStaticBitmap', 'wxStaticBox',
        -            'wxStaticBoxSizer', 'wxStaticLine', 'wxStaticText', 'wxStatusBar',
        -            'wxStdDialogButtonSizer', 'wxStyledTextCtrl', 'wxStyledTextEvent',
        -            'wxSysColourChangedEvent', 'wxTextAttr', 'wxTextCtrl',
        -            'wxTextDataObject', 'wxTextEntryDialog', 'wxToggleButton',
        -            'wxToolBar', 'wxToolTip', 'wxTopLevelWindow', 'wxTreeCtrl',
        -            'wxTreeEvent', 'wxUpdateUIEvent', 'wxWindow', 'wxWindowCreateEvent',
        -            'wxWindowDC', 'wxWindowDestroyEvent', 'wxXmlResource', 'xmerl',
        -            'xmerl_eventp', 'xmerl_scan', 'xmerl_xpath', 'xmerl_xs',
        -            'xmerl_xsd', 'xref', 'yecc', 'zip', 'zlib', 'zlib_stub'
        -            ),
        -        // Binary modifiers
        -        6 => array(
        -            'big', 'binary', 'float', 'integer', 'little', 'signed', 'unit', 'unsigned'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '[', ']', '{', '}'),
        -        1 => array('->', ',', ';', '.'),
        -        2 => array('<<', '>>'),
        -        3 => array('=', '||', '-', '+', '*', '/', '++', '--', '!', '<', '>', '>=',
        -                    '=<', '==', '/=', '=:=', '=/=')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #186895;',
        -            2 => 'color: #014ea4;',
        -            3 => 'color: #fa6fff;',
        -            4 => 'color: #fa6fff;',
        -            5 => 'color: #ff4e18;',
        -            6 => 'color: #9d4f37;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #109ab8;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff7800;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff9600;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #004866;',
        -            1 => 'color: #6bb810;',
        -            2 => 'color: #ee3800;',
        -            3 => 'color: #014ea4;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #6941fd;',
        -            1 => 'color: #d400ed;',
        -            2 => 'color: #5400b3;',
        -            3 => 'color: #ff3c00;',
        -            4 => 'color: #6941fd;',
        -            5 => 'color: #45b3e6;',
        -            6 => 'color: #ff9600;',
        -            7 => 'color: #d400ed;',
        -            8 => 'color: #ff9600;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => 'http://erlang.org/doc/man/{FNAME}.html',
        -        6 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '->',
        -        2 => ':'
        -        ),
        -    'REGEXPS' => array(
        -        //�Macro definitions
        -        0 => array(
        -            GESHI_SEARCH => '(-define\s*\()([a-zA-Z0-9_]+)(\(|,)',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => '\3'
        -            ),
        -        // Record definitions
        -        1 => array(
        -            GESHI_SEARCH => '(-record\s*\()([a-zA-Z0-9_]+)(,)',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => '\3'
        -            ),
        -        // Precompiler directives
        -        2 => array(
        -            GESHI_SEARCH => '(-)([a-z][a-zA-Z0-9_]*)(\()',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => '\3'
        -            ),
        -        // Functions
        -        3 => array(
        -            GESHI_SEARCH => '([a-z]\w*|\'\w*\')(\s*\()',
        -            GESHI_REPLACE => '\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '\2'
        -            ),
        -        // Macros
        -        4 => array(
        -            GESHI_SEARCH => '(\?)([a-zA-Z0-9_]+)',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => ''
        -            ),
        -        // Variables - With hack to avoid interfering wish GeSHi internals
        -        5 => array(
        -            GESHI_SEARCH => '([([{,<+*-\/=\s!]|<)(?!(?:PIPE|SEMI|DOT|NUM|REG3XP\d*)\W)([A-Z_]\w*)(?!\w)',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => ''
        -            ),
        -        // ASCII�codes
        -        6 => '(\$[a-zA-Z0-9_])',
        -        // Records
        -        7 => array(
        -            GESHI_SEARCH => '(#)([a-z][a-zA-Z0-9_]*)(\.|\{)',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => '\3'
        -            ),
        -        // Numbers with a different radix
        -        8 => '(?<=>)(#[a-zA-Z0-9]*)'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(? ''//'(?=\s*\()'
        -                ),
        -            5 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\'|)',
        -                'DISALLOWED_AFTER' => '(?=(\'|):)'
        -                ),
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\/|-)',
        -                'DISALLOWED_AFTER' => ''
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php
        deleted file mode 100644
        index 19897554..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php
        +++ /dev/null
        @@ -1,138 +0,0 @@
        - (1.0.8.9)
        - *  -  First Release
        - *
        - * TODO (updated )
        - * -------------------------
        - * seperate the funtions from the procedures, and have a slight color change for each.
        - *
        - *************************************************************************************
        - *
        - *     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' => 'Euphoria',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array(), //Euphoria doesn't support multi-line comments
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array( // keywords
        -            'and', 'by', 'constant', 'do', 'else', 'elsif', 'end', 'exit',
        -            'for', 'function', 'global', 'if', 'include', 'not', 'or',
        -            'procedure', 'return', 'then', 'to', 'type', 'while', 'with',
        -            'without', 'xor'
        -            ),
        -        2 => array( // built-ins
        -            'abort', 'and_bits', 'append', 'arctan', 'atom', 'c_func', 'call',
        -            'c_proc', 'call_func', 'call_proc', 'clear_screen', 'close', 'compare',
        -            'command_line', 'cos', 'date', 'equal', 'find', 'find_from', 'floor',
        -            'getc', 'getenv', 'gets', 'get_key', 'get_pixel', 'integer', 'length',
        -            'log', 'machine_func', 'machine_proc', 'match', 'match_from',
        -            'mem_copy', 'mem_set', 'not_bits', 'object', 'open', 'or_bits', 'peek',
        -            'peek4s', 'peek4u', 'pixel', 'platform', 'poke', 'poke4', 'position',
        -            'power', 'prepend', 'print', 'printf', 'profile', 'puts', 'rand',
        -            'remainder', 'repeat', 'routine_id', 'sequence', 'sin', 'sprintf',
        -            'sqrt', 'system', 'system_exec', 'tan', 'task_clock_stop',
        -            'task_clock_start', 'task_create', 'task_list', 'task_schedule',
        -            'task_self', 'task_status', 'task_suspend', 'task_yield', 'time',
        -            'trace', 'xor_bits'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '(', ')', '{', '}', '[', ']'
        -            ),
        -        1 => array(
        -            '+', '-', '*', '/', '=', '&', '^'
        -            ),
        -        2 => array(
        -            '&', '?', ','
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff; font-weight: bold;', // keywords
        -            2 => 'color: #cc33ff; font-weight: bold;', // builtins
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #ff0000; font-style: italic;',
        -            'MULTI' => '' // doesn't exist
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #009900; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #999900; font-weight: bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #00cc00;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc33cc; font-style: italic'
        -            ),
        -        'METHODS' => array( // Doesn't exist in Euphoria.  Everything is a function =)
        -            0 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #999900;', // brackets
        -            1 => 'color: #333333;', // operators
        -            2 => 'color: #333333; font-style: bold' // print+concat
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array( // Never included in scripts.
        -            )
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php
        deleted file mode 100644
        index 196a56b8..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php
        +++ /dev/null
        @@ -1,134 +0,0 @@
        - 'EZT',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'COMMENT_REGEXP' => array(
        -        // First character of the line is an asterisk. Rest of the line is spaces/null
        -        0 => '/\*(\s|\D)?(\n)/',
        -        // Asterisk followed by any character & then a non numeric character.
        -        // This is to prevent expressions such as 25 * 4 from being marked as a comment
        -        // Note: 25*4 - 100 will mark *4 - 100 as a comment. Pls. space out expressions
        -        // In any case, 25*4 will result in an Easytrieve error
        -        1 => '/\*.([^0-9\n])+.*(\n)/'
        -        ),
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'CONTROL','DEFINE','DISPLAY','DO','ELSE','END-DO','END-IF',
        -            'END-PROC','FILE','GET','GOTO','HEADING','IF','JOB','LINE',
        -            'PARM','PERFORM','POINT','PRINT','PROC','PUT','READ','RECORD',
        -            'REPORT','RETRIEVE','SEARCH','SELECT','SEQUENCE','SORT','STOP',
        -            'TITLE','WRITE'
        -            ),
        -        // Procedure Keywords (Names of specific procedures)
        -        2 => array (
        -            'AFTER-BREAK','AFTER-LINE','BEFORE-BREAK','BEFORE-LINE',
        -            'ENDPAGE','REPORT-INPUT','TERMINATION',
        -            ),
        -        // Macro names, Parameters
        -        3 => array (
        -            'COMPILE','CONCAT','DESC','GETDATE','MASK','PUNCH',
        -            'VALUE','SYNTAX','NEWPAGE','SKIP','COL','TALLY',
        -            'WITH'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(',')','=','&',',','*','>','<','%'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        //4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #FF0000;',
        -            2 => 'color: #21A502;',
        -            3 => 'color: #FF00FF;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #0000FF; font-style: italic;',
        -            1 => 'color: #0000FF; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #FF7400;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #66CC66;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #736205;'
        -            ),
        -        'METHODS' => array(
        -            1 => '',
        -            2 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #FF7400;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #E01B6A;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        // We are trying to highlight Macro names here which preceded by %
        -        0 => '(%)([a-zA-Z0-9])+(\s|\n)'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php
        deleted file mode 100644
        index 75a7cd5c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php
        +++ /dev/null
        @@ -1,149 +0,0 @@
        - 'Formula One',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('{' => '}'),
        -    'COMMENT_REGEXP' => array(
        -        //Nested Comments
        -        2 =>  "/(\{(?:\{.*\}|[^\{])*\})/m"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'",'"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\nrt\'\"?\n]#i",
        -        //Hexadecimal Char Specs (Utf16 codes, Unicode versions only)
        -        2 => "#\\\\u[\da-fA-F]{4}#",
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE |
        -        GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX_0O |
        -        GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'pred','proc','subr','else','elsif','iff','if','then','false','true',
        -            'case','of','use','local','mod','end','list','file','all','one','max','min','rel',
        -            'external','Nil','_stdcall','_cdecl','_addressof','_pred','_file','_line'
        -            ),
        -        2 => array(
        -            'Ascii','Bin','I','L','P','R','S','U'
        -            ),
        -        3 => array(
        -            'Append','in','Dupl','Len','Print','_AllDifferent','_AllAscending',
        -            '_AllDescending','_Ascending','_Descending'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '[', ']'),
        -        1 => array('<', '>','='),
        -        2 => array('+', '-', '*', '/'),
        -        3 => array('&', '|'),
        -        4 => array(':', ';')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #000080;',
        -            3 => 'color: #000080;',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000; font-style: italic;',
        -            2 => 'color: #008000; font-style: italic;',
        -            'MULTI' => 'color: #008000; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #009999; font-weight: bold;',
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #800000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;',
        -            1 => 'color: #000000;',
        -            2 => 'color: #000000;',
        -            3 => 'color: #000000;',
        -            4 => 'color: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.f1compiler.com/f1helponline/f1_runtime_library.html#{FNAME}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php
        deleted file mode 100644
        index aeb41332..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php
        +++ /dev/null
        @@ -1,217 +0,0 @@
        - (1.0.8.10)
        - *  -  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' => 'Falcon',
        -    'COMMENT_SINGLE' => array( 1 => '//' ),
        -    'COMMENT_MULTI' => array( '/*' => '*/' ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array( "'", '"' ),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'break','case','catch','class','const','continue','def','default',
        -            'dropping','elif','else','end','enum','for','forfirst','forlast',
        -            'formiddle','from','function','global','if','init','innerfunc',
        -            'launch','loop','object','raise','return','select','state','static',
        -            'switch','try','while'
        -        ),
        -        2 => array(
        -            'false','nil','true',
        -        ),
        -        3 => array(
        -            'and','as','eq','fself','in','not','notin','or','provides','self','to'
        -        ),
        -        4 => array(
        -            'directive','export','import','load','macro'
        -        ),
        -        5 => array(
        -            'ArrayType','BooleanType','ClassMethodType','ClassType','DictionaryType',
        -            'FunctionType','MemBufType','MethodType','NilType','NumericType','ObjectType',
        -            'RangeType','StringType','LBindType'
        -        ),
        -        6 => array(
        -            "CurrentTime","IOStream","InputStream","MemBufFromPtr","OutputStream",
        -            "PageDict","ParseRFC2822","abs","acos","all",
        -            "allp","any","anyp","argd","argv",
        -            "arrayAdd","arrayBuffer","arrayCompact","arrayDel","arrayDelAll",
        -            "arrayFill","arrayFind","arrayHead","arrayIns","arrayMerge",
        -            "arrayNM","arrayRemove","arrayResize","arrayScan","arraySort",
        -            "arrayTail","asin","assert","atan","atan2",
        -            "attributes","baseClass","beginCritical","bless","brigade",
        -            "broadcast","cascade","ceil","choice","chr",
        -            "className","clone","combinations","compare","consume",
        -            "cos","deg2rad","deoob","derivedFrom","describe",
        -            "deserialize","dictBack","dictBest","dictClear","dictFill",
        -            "dictFind","dictFront","dictGet","dictKeys","dictMerge",
        -            "dictRemove","dictSet","dictValues","dirChange","dirCurrent",
        -            "dirMake","dirMakeLink","dirReadLink","dirRemove","dolist",
        -            "endCritical","epoch","eval","exit","exp",
        -            "factorial","fileChgroup","fileChmod","fileChown","fileCopy",
        -            "fileExt","fileMove","fileName","fileNameMerge","filePath",
        -            "fileRemove","fileType","fileUnit","filter","fint",
        -            "firstOf","floop","floor","fract","getAssert",
        -            "getEnviron","getProperty","getSlot","getSystemEncoding","getenv",
        -            "iff","include","input","inspect","int",
        -            "isBound","isCallable","isoob","lbind","len",
        -            "let","lit","log","map","max",
        -            "metaclass","min","numeric","oob","ord",
        -            "paramCount","paramIsRef","paramSet","parameter","passvp",
        -            "permutations","pow","print","printl","properties",
        -            "rad2deg","random","randomChoice","randomDice","randomGrab",
        -            "randomPick","randomSeed","randomWalk","readURI","reduce",
        -            "retract","round","seconds","serialize","set",
        -            "setProperty","setenv","sin","sleep","stdErr",
        -            "stdErrRaw","stdIn","stdInRaw","stdOut","stdOutRaw",
        -            "strBack","strBackFind","strBackTrim","strBuffer","strCmpIgnoreCase",
        -            "strEndsWith","strEscape","strEsq","strFill","strFind",
        -            "strFromMemBuf","strFront","strFrontTrim","strLower","strMerge",
        -            "strReplace","strReplicate","strSplit","strSplitTrimmed","strStartsWith",
        -            "strToMemBuf","strTrim","strUnescape","strUnesq","strUpper",
        -            "strWildcardMatch","subscribe","systemErrorDescription","tan","times",
        -            "toString","transcodeFrom","transcodeTo","typeOf","unsetenv",
        -            "unsubscribe","valof","vmFalconPath","vmIsMain","vmModuleName",
        -            "vmModuleVersionInfo","vmSearchPath","vmSystemType","vmVersionInfo","vmVersionName",
        -            "writeURI","xmap","yield","yieldOut"
        -        ),
        -        7 => array(
        -            "AccessError","Array","BOM","Base64","Class",
        -            "ClassMethod","CloneError","CmdlineParser","CodeError","Continuation",
        -            "Dictionary","Directory","Error","FileStat","Format",
        -            "Function","GarbagePointer","GenericError","Integer","InterruptedError",
        -            "IoError","Iterator","LateBinding","List","MathError",
        -            "MemoryBuffer","MessageError","Method","Numeric","Object",
        -            "ParamError","ParseError","Path","Range","Semaphore",
        -            "Sequence","Set","Stream","String","StringStream",
        -            "SyntaxError","Table","TableError","TimeStamp","TimeZone",
        -            "Tokenizer","TypeError","URI","VMSlot"
        -        ),
        -        8 => array(
        -            "args","scriptName","scriptPath"
        -        ),
        -        9 => array(
        -            "GC"
        -        ),
        -    ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => 'http://falconpl.org/project_docs/core/functions.html#typeOf',
        -        6 => 'http://falconpl.org/project_docs/core/functions.html#{FNAME}',
        -        7 => 'http://falconpl.org/project_docs/core/class_{FNAME}.html',
        -        8 => 'http://falconpl.org/project_docs/core/globals.html#{FNAME}',
        -        9 => 'http://falconpl.org/project_docs/core/object_{FNAME}.html)'
        -    ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true
        -    ),
        -    'SYMBOLS' => array(
        -        '(',')','$','%','&','/','{','[',']','=','}','?','+','-','#','*','@',
        -        '<','>','|',',',':',';','\\','^'
        -    ),
        -    'REGEXPS' => array(
        -        0 => array(
        -            GESHI_SEARCH => '(\[)([a-zA-Z_]|\c{C})(?:[a-zA-Z0-9_]|\p{C})*(\])',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3',
        -
        -        ),
        -    ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array( ' '?>' )
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true
        -    ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000080;font-weight:bold;',
        -            2 => 'color: #800000;font-weight:bold;',
        -            3 => 'color: #800000;font-weight:bold;',
        -            4 => 'color: #000080;font-weight:bold;',
        -            5 => 'color: #000000;font-weight:bold;',
        -            6 => 'font-weight:bold;',
        -            7 => 'font-weight:bold;',
        -            8 => 'font-weight:bold;'
        -        ),
        -        'COMMENTS' => array(
        -            1 => 'color: #29B900;',
        -            'MULTI' => 'color: #008080'
        -        ),
        -        'STRINGS' => array(
        -            0 => 'color: #800000'
        -        ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000'
        -        ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #800000'
        -        ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000000'
        -        ),
        -        'METHODS' => array(
        -            0 => 'color: #000000'
        -        ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #8B0513'
        -        ),
        -        'SCRIPT' => array(
        -            0 => ''
        -        ),
        -        'REGEXPS' => array(
        -            0 => 'color: #FF00FF'
        -        )
        -    ),
        -
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        '.'
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php
        deleted file mode 100644
        index 661f5bb3..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php
        +++ /dev/null
        @@ -1,326 +0,0 @@
        - 'FO (abas-ERP)',
        -    'COMMENT_SINGLE' => array(1 => '..'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        //Control Flow
        -        1 => array(
        -            /* see http://www.abas.de/sub_de/kunden/help/hd/html/9.html */
        -
        -            /* fo keywords, part 1: control flow */
        -            '.weiter', '.continue'
        -
        -            /* this language works with goto's only*/
        -            ),
        -
        -        //FO Keywords
        -        2 => array(
        -            /* fo keywords, part 2 */
        -            '.fo', '.formel', '.formula',
        -            '.zuweisen', '.assign',
        -            '.fehler', '.error',
        -            '.ende', '.end'
        -            ),
        -
        -        //Java Keywords
        -        3 => array(
        -            /* Java keywords, part 3: primitive data types */
        -            '.art', '.type',
        -            'integer', 'real', 'bool', 'text', 'datum', 'woche', 'termin', 'zeit',
        -            'mehr', 'MEHR'
        -            ),
        -
        -        //Reserved words in fo literals
        -        4 => array(
        -            /* other reserved words in fo literals */
        -            /* should be styled to look similar to numbers and Strings */
        -            'false', 'null', 'true',
        -            'OBJEKT',
        -            'VORGANG', 'PROCESS',
        -            'OFFEN', 'OPEN',
        -            'ABORT',
        -            'AN', 'ADDEDTO',
        -            'AUF', 'NEW',
        -            'BILDSCHIRM', 'TERMINAL',
        -            'PC',
        -            'MASKE', 'SCREEN',
        -            'ZEILE', 'LINE'
        -            ),
        -
        -        // interpreter settings
        -        5 => array (
        -            '..!INTERPRETER', 'DEBUG'
        -            ),
        -
        -        // database commands
        -        6 => array (
        -            '.hole', '.hol', '.select',
        -            '.lade', '.load',
        -            '.aktion', '.action',
        -            '.belegen', '.occupy',
        -            '.bringe', '.rewrite',
        -            '.dazu', '.add',
        -            '.löschen', '.delete',
        -            '.mache', '.make',
        -            '.merke', '.reserve',
        -            '.setze', '.set',
        -            'SPERREN', 'LOCK',
        -            'TEIL', 'PART',
        -            'KEINESPERRE',
        -            'AMASKE', 'ASCREEN',
        -            'BETRIEB', 'WORK-ORDER',
        -            'NUMERISCH', 'NUMERICAL',
        -            'VORSCHLAG', 'SUGGESTION',
        -            'OBLIGO', 'OUTSTANDING',
        -            'LISTE', 'LIST',
        -            'DRUCK', 'PRINT',
        -            'ÃœBERNAHME', 'TAGEOVER',
        -            'ABLAGE', 'FILINGSYSTEM',
        -            'BDE', 'PDC',
        -            'BINDUNG', 'ALLOCATION',
        -            'BUCHUNG', 'ENTRY',
        -            'COLLI', 'SERIAL',
        -            'DATEI', 'FILE',
        -            'VERKAUF', 'SALES',
        -            'EINKAUF', 'PURCHASING',
        -            'EXEMPLAR', 'EXAMPLE',
        -            'FERTIGUNG', 'PRODUCTION',
        -            'FIFO',
        -            'GRUPPE', 'GROUP',
        -            'JAHR', 'YEAR',
        -            'JOURNAL',
        -            'KOPF', 'HEADER',
        -            'KOSTEN',
        -            'LIFO',
        -            'LMENGE', 'SQUANTITY',
        -            'LOHNFERTIGUNG', 'SUBCONTRACTING',
        -            'LPLATZ', 'LOCATION',
        -            'MBELEGUNG', 'MACHLOADING',
        -            'MONAT', 'MONTH', 'MZ',
        -            'NACHRICHT', 'MESSAGE',
        -            'PLAN', 'TARGET',
        -            'REGIONEN', 'REGIONS',
        -            'SERVICEANFRAGE', 'SERVICEREQUEST',
        -            'VERWENDUNG', 'APPLICATION',
        -            'WEITER', 'CONTINUE',
        -            'ABBRUCH', 'CANCEL',
        -            'ABLAGEKENNZEICHEN', 'FILLINGCODE',
        -            'ALLEIN', 'SINGLEUSER',
        -            'AUFZAEHLTYP', 'ENUMERATION-TYPE',
        -            'AUSGABE', 'OUTPUT',
        -            'DEZPUNKT', 'DECPOINT'
        -            ),
        -
        -        // output settings
        -        7 => array (
        -            '.absatz', '.para',
        -            '.blocksatz', '.justified',
        -            '.flattersatz', '.unjustified',
        -            '.format',
        -            '.box',
        -            '.drucken', '.print',
        -            '.gedruckt', '.printed',
        -            '.länge', '.length',
        -            '.links', '.left',
        -            '.rechts', '.right',
        -            '.oben', '.up',
        -            '.unten', '.down',
        -            '.seite', '.page',
        -            '.tabellensatz', '.tablerecord',
        -            '.trenner', '.separator',
        -            'ARCHIV'
        -            ),
        -
        -        // text commands
        -        8 => array (
        -            '.text',
        -            '.atext',
        -            '.println',
        -            '.uebersetzen', '.translate'
        -            ),
        -
        -        // I/O commands
        -        9 => array (
        -            '.aus', '.ausgabe', '.output',
        -            '.ein', '.eingabe', '.input',
        -            '.datei', '.file',
        -            '.lesen', '.read',
        -            '.sortiere', '.sort',
        -            '-ÖFFNEN', '-OPEN',
        -            '-TEST',
        -            '-LESEN', '-READ',
        -            'VON', 'FROM'
        -            ),
        -
        -        //system
        -        10 => array (
        -            '.browser',
        -            '.kommando', '.command',
        -            '.system', '.dde',
        -            '.editiere', '.edit',
        -            '.hilfe', '.help',
        -            '.kopieren', '.copy',
        -            '.pc.clip',
        -            '.pc.copy',
        -            '.pc.dll',
        -            '.pc.exec',
        -            '.pc.open',
        -            'DIAGNOSE', 'ERRORREPORT',
        -            'DOPPELPUNKT', 'COLON',
        -            'ERSETZUNG', 'REPLACEMENT',
        -            'WARTEN', 'PARALLEL'
        -            ),
        -
        -        //fibu/accounting specific commands
        -        11 => array (
        -            '.budget',
        -            '.chart',
        -            'VKZ',
        -            'KONTO', 'ACCOUNT',
        -            'AUSZUG', 'STATEMENT',
        -            'WAEHRUNG', 'CURRENCY',
        -            'WAEHRUNGSKURS', 'EXCHANGERATE',
        -            'AUSWAEHR', 'FORCURR',
        -            'BUCHUNGSKREIS', 'SET OF BOOKS'
        -            ),
        -
        -        // efop - extended flexible surface
        -        12 => array (
        -            '.cursor',
        -            '.farbe', '.colour',
        -            '.fenster', '.window',
        -            '.hinweis', '.note',
        -            '.menue', '.menu',
        -            '.schutz', '.protection',
        -            '.zeigen', '.view',
        -            '.zeile', '.line',
        -            'VORDERGRUND', 'FOREGROUND',
        -            'HINTERGRUND', 'BACKGROUND',
        -            'SOFORT', 'IMMEDIATELY',
        -            'AKTUALISIEREN', 'UPDATE',
        -            'FENSTERSCHLIESSEN', 'CLOSEWINDOWS'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '[', ']', '{', '}', '*', '&', '%', ';', '<', '>'),
        -        1 => array('?', '!')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        /* all fo keywords are case sensitive, don't have to but I like this type of coding */
        -        1 => true, 2 => true, 3 => true, 4 => true,
        -        5 => true, 6 => true, 7 => true, 8 => true, 9 => true,
        -        10 => true, 11 => true, 12 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #006600; font-weight: bold;',
        -            4 => 'color: #006600; font-weight: bold;',
        -            5 => 'color: #003399; font-weight: bold;',
        -            6 => 'color: #003399; font-weight: bold;',
        -            7 => 'color: #003399; font-weight: bold;',
        -            8 => 'color: #003399; font-weight: bold;',
        -            9 => 'color: #003399; font-weight: bold;',
        -            10 => 'color: #003399; font-weight: bold;',
        -            11 => 'color: #003399; font-weight: bold;',
        -            12 => 'color: #003399; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            //2 => 'color: #006699;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006633;',
        -            2 => 'color: #006633;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            1 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => '',
        -        9 => '',
        -        10 => '',
        -        11 => '',
        -        12 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php
        deleted file mode 100644
        index c3bd402a..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php
        +++ /dev/null
        @@ -1,158 +0,0 @@
        -'Fortran',
        -    'COMMENT_SINGLE'=> array(1 =>'!',2=>'Cf2py'),
        -    'COMMENT_MULTI'=> array(),
        -    //Fortran Comments
        -    'COMMENT_REGEXP' => array(1 => '/^C.*?$/mi'),
        -    'CASE_KEYWORDS'=> GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS'=> array("'",'"'),
        -    'ESCAPE_CHAR'=>'\\',
        -    'KEYWORDS'=> array(
        -        1 => array(
        -            'allocate','block','call','case','contains','continue','cycle','deallocate',
        -            'default','do','else','elseif','elsewhere','end','enddo','endif','endwhere',
        -            'entry','exit','function','go','goto','if','interface','module','nullify','only',
        -            'operator','procedure','program','recursive','return','select','stop',
        -            'subroutine','then','to','where','while',
        -            'access','action','advance','blank','blocksize','carriagecontrol',
        -            'delim','direct','eor','err','exist','file','flen','fmt','form','formatted',
        -            'iostat','name','named','nextrec','nml','number','opened','pad','position',
        -            'readwrite','recl','sequential','status','unformatted','unit'
        -            ),
        -        2 => array(
        -            '.AND.','.EQ.','.EQV.','.GE.','.GT.','.LE.','.LT.','.NE.','.NEQV.','.NOT.',
        -            '.OR.','.TRUE.','.FALSE.'
        -            ),
        -        3 => array(
        -            'allocatable','character','common','complex','data','dimension','double',
        -            'equivalence','external','implicit','in','inout','integer','intent','intrinsic',
        -            'kind','logical','namelist','none','optional','out','parameter','pointer',
        -            'private','public','real','result','save','sequence','target','type','use'
        -            ),
        -        4 => array(
        -            'abs','achar','acos','adjustl','adjustr','aimag','aint','all','allocated',
        -            'anint','any','asin','atan','atan2','bit_size','break','btest','carg',
        -            'ceiling','char','cmplx','conjg','cos','cosh','cpu_time','count','cshift',
        -            'date_and_time','dble','digits','dim','dot_product','dprod dvchk',
        -            'eoshift','epsilon','error','exp','exponent','floor','flush','fraction',
        -            'getcl','huge','iachar','iand','ibclr','ibits','ibset','ichar','ieor','index',
        -            'int','intrup','invalop','ior','iostat_msg','ishft','ishftc','lbound',
        -            'len','len_trim','lge','lgt','lle','llt','log','log10','matmul','max','maxexponent',
        -            'maxloc','maxval','merge','min','minexponent','minloc','minval','mod','modulo',
        -            'mvbits','nbreak','ndperr','ndpexc','nearest','nint','not','offset','ovefl',
        -            'pack','precfill','precision','present','product','prompt','radix',
        -            'random_number','random_seed','range','repeat','reshape','rrspacing',
        -            'scale','scan','segment','selected_int_kind','selected_real_kind',
        -            'set_exponent','shape','sign','sin','sinh','size','spacing','spread','sqrt',
        -            'sum system','system_clock','tan','tanh','timer','tiny','transfer','transpose',
        -            'trim','ubound','undfl','unpack','val','verify'
        -            ),
        -        ),
        -    'SYMBOLS'=> array(
        -        '(',')','{','}','[',']','=','+','-','*','/','!','%','^','&',':'
        -        ),
        -    'CASE_SENSITIVE'=> array(
        -        GESHI_COMMENTS => true,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES'=> array(
        -        'KEYWORDS'=> array(
        -            1 =>'color: #b1b100;',
        -            2 =>'color: #000000; font-weight: bold;',
        -            3 =>'color: #000066;',
        -            4 =>'color: #993333;'
        -            ),
        -        'COMMENTS'=> array(
        -            1 =>'color: #666666; font-style: italic;',
        -            2 =>'color: #339933;',
        -            'MULTI'=>'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR'=> array(
        -            0 =>'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS'=> array(
        -            0 =>'color: #009900;'
        -            ),
        -        'STRINGS'=> array(
        -            0 =>'color: #ff0000;'
        -            ),
        -        'NUMBERS'=> array(
        -            0 =>'color: #cc66cc;'
        -            ),
        -        'METHODS'=> array(
        -            1 =>'color: #202020;',
        -            2 =>'color: #202020;'
        -            ),
        -        'SYMBOLS'=> array(
        -            0 =>'color: #339933;'
        -            ),
        -        'REGEXPS'=> array(
        -            ),
        -        'SCRIPT'=> array(
        -            )
        -        ),
        -    'URLS'=> array(
        -        1 =>'',
        -        2 =>'',
        -        3 =>'',
        -        4 =>''
        -        ),
        -    'OOLANG'=> true,
        -    'OBJECT_SPLITTERS'=> array(
        -        1 =>'.',
        -        2 =>'::'
        -        ),
        -    'REGEXPS'=> array(
        -        ),
        -    'STRICT_MODE_APPLIES'=> GESHI_NEVER,
        -    'SCRIPT_DELIMITERS'=> array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK'=> array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php
        deleted file mode 100644
        index 842a8057..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php
        +++ /dev/null
        @@ -1,139 +0,0 @@
        - 'FreeBasic',
        -    'COMMENT_SINGLE' => array(1 => "'", 2 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            "append", "as", "asc", "asin", "asm", "atan2", "atn", "beep", "bin", "binary", "bit",
        -            "bitreset", "bitset", "bload", "bsave", "byref", "byte", "byval", "call",
        -            "callocate", "case", "cbyte", "cdbl", "cdecl", "chain", "chdir", "chr", "cint",
        -            "circle", "clear", "clng", "clngint", "close", "cls", "color", "command",
        -            "common", "cons", "const", "continue", "cos", "cshort", "csign", "csng",
        -            "csrlin", "cubyte", "cuint", "culngint", "cunsg", "curdir", "cushort", "custom",
        -            "cvd", "cvi", "cvl", "cvlongint", "cvs", "cvshort", "data", "date",
        -            "deallocate", "declare", "defbyte", "defdbl", "defined", "defint", "deflng",
        -            "deflngint", "defshort", "defsng", "defstr", "defubyte", "defuint",
        -            "defulngint", "defushort", "dim", "dir", "do", "double", "draw", "dylibload",
        -            "dylibsymbol", "else", "elseif", "end", "enum", "environ", 'environ$', "eof",
        -            "eqv", "erase", "err", "error", "exec", "exepath", "exit", "exp", "export",
        -            "extern", "field", "fix", "flip", "for", "fre", "freefile", "function", "get",
        -            "getjoystick", "getkey", "getmouse", "gosub", "goto", "hex", "hibyte", "hiword",
        -            "if", "iif", "imagecreate", "imagedestroy", "imp", "inkey", "inp", "input",
        -            "instr", "int", "integer", "is", "kill", "lbound", "lcase", "left", "len",
        -            "let", "lib", "line", "lobyte", "loc", "local", "locate", "lock", "lof", "log",
        -            "long", "longint", "loop", "loword", "lset", "ltrim", "mid", "mkd", "mkdir",
        -            "mki", "mkl", "mklongint", "mks", "mkshort", "mod", "multikey", "mutexcreate",
        -            "mutexdestroy", "mutexlock", "mutexunlock", "name", "next", "not", "oct", "on",
        -            "once", "open", "option", "or", "out", "output", "overload", "paint", "palette",
        -            "pascal", "pcopy", "peek", "peeki", "peeks", "pipe", "pmap", "point", "pointer",
        -            "poke", "pokei", "pokes", "pos", "preserve", "preset", "print", "private",
        -            "procptr", "pset", "ptr", "public", "put", "random", "randomize", "read",
        -            "reallocate", "redim", "rem", "reset", "restore", "resume",
        -            "return", "rgb", "rgba", "right", "rmdir", "rnd", "rset", "rtrim", "run",
        -            "sadd", "screen", "screencopy", "screeninfo", "screenlock", "screenptr",
        -            "screenres", "screenset", "screensync", "screenunlock", "seek", "statement",
        -            "selectcase", "setdate", "setenviron", "setmouse",
        -            "settime", "sgn", "shared", "shell", "shl", "short", "shr", "sin", "single",
        -            "sizeof", "sleep", "space", "spc", "sqr", "static", "stdcall", "step", "stop",
        -            "str", "string", "strptr", "sub", "swap", "system", "tab", "tan",
        -            "then", "threadcreate", "threadwait", "time", "timer", "to", "trans",
        -            "trim", "type", "ubound", "ubyte", "ucase", "uinteger", "ulongint", "union",
        -            "unlock", "unsigned", "until", "ushort", "using", "va_arg", "va_first",
        -            "va_next", "val", "val64", "valint", "varptr", "view", "viewprint", "wait",
        -            "wend", "while", "width", "window", "windowtitle", "with", "write", "xor",
        -            "zstring", "explicit", "escape", "true", "false"
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;',
        -            2 => 'color: #339933;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php
        deleted file mode 100644
        index efeceddb..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php
        +++ /dev/null
        @@ -1,166 +0,0 @@
        - 'FreeSWITCH',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(1 => "/^Comment:.*?$/m"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -//        1 => array(
        -//            'Disallow', 'Request-rate', 'Robot-version',
        -//            'Sitemap', 'User-agent', 'Visit-time'
        -//            )
        -        ),
        -    'SYMBOLS' => array(
        -//        ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false
        -        ),
        -
        -//order is important. regexes will overwrite most things....
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -//            1 => 'color: #FF0000; font-weight: bold;',//red
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -//            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -//            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -//            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -//            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: firebrick; font-weight: bold;',
        -            1 => 'color: cornflowerblue; font-weight: bold;',
        -            2 => 'color: goldenrod; font-weight: bold;',
        -            3 => 'color: green; font-weight: bold;',
        -            4 => 'color: dimgrey; font-style: italic;',
        -            5 => 'color: green; font-weight: bold;',
        -            6 => 'color: firebrick; font-weight: bold;',
        -            7 => 'color: indigo; font-weight: italic;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -//        1 => 'http://www.robotstxt.org/wc/norobots.html'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(
        -            GESHI_SEARCH => '(^.*ERROR.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        1 => array(
        -            GESHI_SEARCH => '(^.*NOTICE.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => array(
        -            GESHI_SEARCH => '(^.*DEBUG.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        3 => array(
        -            GESHI_SEARCH => '(^.*INFO.*|.*info\(.*|^Channel.*|^Caller.*|^variable.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        4 => array(
        -            GESHI_SEARCH => '(^Dialplan.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        5 => array(
        -            GESHI_SEARCH => '(Regex\ \(PASS\))',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        6 => array(
        -            GESHI_SEARCH => '(Regex\ \(FAIL\))',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        7 => array(
        -            GESHI_SEARCH => '(\d{7,15})',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php
        deleted file mode 100644
        index 33aa1220..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php
        +++ /dev/null
        @@ -1,211 +0,0 @@
        - 'F#',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(3 => '/\(\*(?!\)).*?\*\)/s'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'HARDQUOTE' => array('@"', '"'),
        -    'HARDESCAPE' => array('"'),
        -    'HARDCHAR' => '"',
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        /* main F# keywords */
        -        /* section 3.4 */
        -        1 => array(
        -            'abstract', 'and', 'as', 'assert', 'base', 'begin', 'class', 'default', 'delegate', 'do', 'done',
        -            'downcast', 'downto', 'elif', 'else', 'end', 'exception', 'extern', 'false', 'finally', 'for',
        -            'fun', 'function', 'if', 'in', 'inherit', 'inline', 'interface', 'internal', 'lazy', 'let',
        -            'match', 'member', 'module', 'mutable', 'namespace', 'new', 'not', 'null', 'of', 'open', 'or',
        -            'override', 'private', 'public', 'rec', 'return', 'sig', 'static', 'struct', 'then', 'to',
        -            'true', 'try', 'type', 'upcast', 'use', 'val', 'void', 'when', 'while', 'with', 'yield',
        -            'asr', 'land', 'lor', 'lsl', 'lsr', 'lxor', 'mod',
        -            /* identifiers are reserved for future use by F# */
        -            'atomic', 'break', 'checked', 'component', 'const', 'constraint', 'constructor',
        -            'continue', 'eager', 'fixed', 'fori', 'functor', 'global', 'include', 'method', 'mixin',
        -            'object', 'parallel', 'params', 'process', 'protected', 'pure', 'sealed', 'tailcall',
        -            'trait', 'virtual', 'volatile',
        -            /* take monads into account */
        -            'let!', 'yield!'
        -            ),
        -        /* define names of main libraries in F# Core, so we can link to it
        -         * http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/namespaces.html
        -         */
        -        2 => array(
        -            'Array', 'Array2D', 'Array3D', 'Array4D', 'ComparisonIdentity', 'HashIdentity', 'List',
        -            'Map', 'Seq', 'SequenceExpressionHelpers', 'Set', 'CommonExtensions', 'Event',
        -            'ExtraTopLevelOperators', 'LanguagePrimitives', 'NumericLiterals', 'Operators',
        -            'OptimizedClosures', 'Option', 'String', 'NativePtr', 'Printf'
        -            ),
        -        /* 17.2 & 17.3 */
        -        3 => array(
        -            'abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'exp',
        -            'floor', 'log', 'log10', 'pown', 'round', 'sign', 'sin', 'sinh', 'sqrt',
        -            'tan', 'tanh',
        -            'ignore',
        -            'fst', 'snd',
        -            'stdin', 'stdout', 'stderr',
        -            'KeyValue',
        -            'max', 'min'
        -            ),
        -        /* Pervasives Types & Overloaded Conversion Functions */
        -        4 => array(
        -            'bool', 'byref', 'byte', 'char', 'decimal', 'double', 'exn', 'float', 'float32',
        -            'FuncConvert', 'ilsigptr', 'int', 'int16', 'int32', 'int64', 'int8',
        -            'nativeint', 'nativeptr', 'obj', 'option', 'ref', 'sbyte', 'single', 'string', 'uint16',
        -            'uint32', 'uint64', 'uint8', 'unativeint', 'unit',
        -            'enum',
        -            'async', 'seq', 'dict'
        -            ),
        -        /* 17.2 Exceptions */
        -        5 => array (
        -            'failwith', 'invalidArg', 'raise', 'rethrow'
        -            ),
        -        /* 3.3 Conditional compilation & 13.3 Compiler Directives + light / light off */
        -        6 => array(
        -            '(*IF-FSHARP', 'ENDIF-FSHARP*)', '(*F#', 'F#*)', '(*IF-OCAML', 'ENDIF-OCAML*)',
        -            '#light',
        -            '#if', '#else', '#endif', '#indent', '#nowarn', '#r', '#reference',
        -            '#I', '#Include', '#load', '#time', '#help', '#q', '#quit',
        -            ),
        -        /* 3.11 Pre-processor Declarations / Identifier Replacements */
        -        7 => array(
        -            '__SOURCE_DIRECTORY__', '__SOURCE_FILE__', '__LINE__'
        -            ),
        -        /* 17.2 Object Transformation Operators */
        -        8 => array(
        -            'box', 'hash', 'sizeof', 'typeof', 'typedefof', 'unbox'
        -            )
        -        ),
        -    /* 17.2 basic operators + the yield and yield! arrows */
        -    'SYMBOLS' => array(
        -        1 => array('+', '-', '/', '*', '**', '%', '~-'),
        -        2 => array('<', '<=', '>', '<=', '=', '<>'),
        -        3 => array('<<<', '>>>', '^^^', '&&&', '|||', '~~~'),
        -        4 => array('|>', '>>', '<|', '<<'),
        -        5 => array('!', '->', '->>'),
        -        6 => array('[',']','(',')','{','}', '[|', '|]', '(|', '|)'),
        -        7 => array(':=', ';', ';;')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true, /* keywords */
        -        2 => true, /* modules */
        -        3 => true, /* pervasives functions */
        -        4 => true, /* types and overloaded conversion operators */
        -        5 => true, /* exceptions */
        -        6 => true, /* conditional compilation & compiler Directives */
        -        7 => true, /* pre-processor declarations / identifier replacements */
        -        8 => true  /* object transformation operators */
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            2 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            3 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            4 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            5 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            6 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            7 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            8 => 'color: #06c; font-weight: bold;' /* nice blue */
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #5d478b; font-style: italic;', /* light purple */
        -            1 => 'color: #5d478b; font-style: italic;',
        -            2 => 'color: #5d478b; font-style: italic;', /* light purple */
        -            3 => 'color: #5d478b; font-style: italic;' /* light purple */
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #6c6;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #3cb371;' /* nice green */
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #c6c;' /* pink */
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #060;' /* dark green */
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #a52a2a;' /* maroon */
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        /* some of keywords are Pervasives functions (land, lxor, asr, ...) */
        -        1 => '',
        -        2 => 'http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/namespaces.html',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?|^])",
        -            'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php
        deleted file mode 100644
        index 4bb582e6..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php
        +++ /dev/null
        @@ -1,212 +0,0 @@
        - 'GAMBAS',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        //keywords
        -        1 => array(
        -            'APPEND', 'AS', 'BREAK', 'BYREF', 'CASE', 'CATCH', 'CLASS', 'CLOSE', 'CONST', 'CONTINUE', 'COPY',
        -            'CREATE', 'DEBUG', 'DEC', 'DEFAULT', 'DIM', 'DO', 'EACH', 'ELSE', 'END', 'ENDIF', 'ERROR', 'EVENT', 'EXEC',
        -            'EXPORT', 'EXTERN', 'FALSE', 'FINALLY', 'FLUSH', 'FOR', 'FUNCTION', 'GOTO', 'IF', 'IN', 'INC', 'INHERITS',
        -            'INPUT', 'FROM', 'IS', 'KILL', 'LAST', 'LIBRARY', 'LIKE', 'LINE INPUT', 'LINK', 'LOCK', 'LOOP', 'ME',
        -            'MKDIR', 'MOVE', 'NEW', 'NEXT', 'NULL', 'OPEN', 'OPTIONAL', 'OUTPUT', 'PIPE', 'PRINT', 'PRIVATE',
        -            'PROCEDURE', 'PROPERTY', 'PUBLIC', 'QUIT', 'RAISE', 'RANDOMIZE', 'READ', 'REPEAT', 'RETURN', 'RMDIR',
        -            'SEEK', 'SELECT', 'SHELL', 'SLEEP', 'STATIC', 'STEP', 'STOP', 'SUB', 'SUPER', 'SWAP', 'THEN', 'TO',
        -            'TRUE', 'TRY', 'UNLOCK', 'UNTIL', 'WAIT', 'WATCH', 'WEND', 'WHILE', 'WITH', 'WRITE'
        -            ),
        -        //functions
        -        2 => array(
        -            'Abs', 'Access', 'Acos', 'Acosh', 'Alloc', 'Ang', 'Asc', 'ASin', 'ASinh', 'Asl', 'Asr', 'Assign', 'Atan',
        -            'ATan2', 'ATanh',
        -            'BChg', 'BClr', 'Bin', 'BSet', 'BTst',
        -            'CBool', 'Cbr', 'CByte', 'CDate', 'CFloat', 'Choose', 'Chr', 'CInt', 'CLong', 'Comp', 'Conv', 'Cos',
        -            'Cosh', 'CShort', 'CSng', 'CStr',
        -            'DateAdd', 'DateDiff', 'Day', 'DConv', 'Deg', 'DFree', 'Dir',
        -            'Eof', 'Eval', 'Exist', 'Exp', 'Exp10', 'Exp2', 'Expm',
        -            'Fix', 'Format', 'Frac', 'Free',
        -            'Hex', 'Hour', 'Hyp',
        -            'Iif', 'InStr', 'Int', 'IsAscii', 'IsBlank', 'IsBoolean', 'IsByte', 'IsDate', 'IsDigit', 'IsDir',
        -            'IsFloat', 'IsHexa', 'IsInteger', 'IsLCase', 'IsLetter', 'IsLong', 'IsNull', 'IsNumber', 'IsObject',
        -            'IsPunct', 'IsShort', 'IsSingle', 'IsSpace', 'IsString', 'IsUCase', 'IsVariant',
        -            'LCase', 'Left', 'Len', 'Lof', 'Log', 'Log10', 'Log2', 'Logp', 'Lsl', 'Lsr', 'LTrim',
        -            'Mag', 'Max', 'Mid', 'Min', 'Minute', 'Month', 'Now', 'Quote',
        -            'Rad', 'RDir', 'Realloc', 'Replace', 'Right', 'RInStr', 'Rnd', 'Rol', 'Ror', 'Round', 'RTrim',
        -            'Scan', 'SConv', 'Second', 'Seek', 'Sgn', 'Shl', 'Shr', 'Sin', 'Sinh', 'Space', 'Split', 'Sqr',
        -            'Stat', 'Str', 'StrPtr', 'Subst',
        -            'Tan', 'Tanh', 'Temp$', 'Time', 'Timer', 'Tr', 'Trim', 'TypeOf',
        -            'UCase', 'Unquote', 'Val', 'VarPtr', 'Week', 'WeekDay', 'Year'
        -            ),
        -        //string functions
        -        3 => array(
        -            'Bin$', 'Chr$', 'Conv$', 'DConv$', 'Format$', 'Hex$', 'LCase$', 'Left$', 'LTrim$', 'Mid$', 'Quote$',
        -            'Replace$', 'Right$', 'SConv$', 'Space$', 'Str$', 'String$', 'Subst$', 'Tr$', 'Trim$', 'UCase$',
        -            'Unquote$'
        -            ),
        -        //datatypes
        -        4 => array(
        -            'Boolean', 'Byte', 'Short', 'Integer', 'Long', 'Single', 'Float', 'Date', 'String', 'Variant', 'Object',
        -            'Pointer', 'File'
        -            ),
        -        //operators
        -        5 => array(
        -            'AND', 'DIV', 'MOD', 'NOT', 'OR', 'XOR'
        -            ),
        -        //objects/classes
        -        6 => array(
        -            'Application', 'Array', 'Byte[]', 'Collection', 'Component', 'Enum', 'Observer', 'Param', 'Process',
        -            'Stream', 'System', 'User', 'Chart', 'Compress', 'Crypt', 'Blob', 'Connection', 'DB', 'Database',
        -            'DatabaseUser', 'Field', 'Index', 'Result', 'ResultField', 'Table', 'DataBrowser', 'DataCombo',
        -            'DataControl', 'DataSource', 'DataView', 'Desktop', 'DesktopFile', 'Balloon', 'ColorButton',
        -            'ColorChooser', 'DateChooser', 'DirChooser', 'DirView', 'Expander', 'FileChooser', 'FileView',
        -            'FontChooser', 'InputBox', 'ListContainer', 'SidePanel', 'Stock', 'TableView', 'ToolPanel', 'ValueBox',
        -            'Wizard', 'Dialog', 'ToolBar', 'WorkSpace', 'DnsClient', 'SerialPort', 'ServerSocket', 'Socket',
        -            'UdpSocket', 'FtpClient', 'HttpClient', 'SmtpClient', 'Regexp', 'Action', 'Button', 'CheckBox',
        -            'ColumnView', 'ComboBox', 'Draw', 'Container', 'Control', 'Cursor', 'DrawingArea', 'Embedder',
        -            'Font', 'Form', 'Frame', 'GridView', 'HBox', 'HPanel', 'HSplit', 'IconView', 'Image', 'Key', 'Label',
        -            'Line', 'ListBox', 'ListView', 'Menu', 'Message', 'Mouse', 'MovieBox', 'Panel', 'Picture', 'PictureBox',
        -            'ProgressBar', 'RadioButton', 'ScrollBar', 'ScrollView', 'Separator', 'Slider', 'SpinBox', 'TabStrip',
        -            'TextArea', 'TextBox', 'TextLabel', 'ToggleButton', 'TrayIcon', 'TreeView', 'VBox', 'VPanel', 'VSplit',
        -            'Watcher', 'Window', 'Dial', 'Editor', 'LCDNumber', 'Printer', 'TextEdit', 'WebBrowser', 'GLarea',
        -            'Report', 'ReportCloner', 'ReportContainer', 'ReportControl', 'ReportDrawing', 'ReportField', 'ReportHBox',
        -            'ReportImage', 'ReportLabel', 'ReportSection', 'ReportSpecialField', 'ReportTextLabel', 'ReportVBox',
        -            'CDRom', 'Channel', 'Music', 'Sound', 'Settings', 'VideoDevice', 'Vb', 'CGI', 'HTML', 'Request', 'Response',
        -            'Session', 'XmlDocument', 'XmlNode', 'XmlReader', 'XmlReaderNodeType', 'XmlWriter', 'RpcArray', 'RpcClient',
        -            'RpcFunction', 'RpcServer', 'RpcStruct', 'RpcType', 'XmlRpc', 'Xslt'
        -            ),
        -        //constants
        -        7 => array(
        -            'Pi'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '&', '&=', '&/', '*', '*=', '+', '+=', '-', '-=', '//', '/', '/=', '=', '==', '\\', '\\=',
        -        '^', '^=', '[', ']', '{', '}', '<', '>', '<>', '<=', '>='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF; font-weight: bold;',          // Keywords
        -            2 => 'color: #8B1433;',                             // Functions
        -            3 => 'color: #8B1433;',                             // String Functions
        -            4 => 'color: #0600FF;',                             // Data Types
        -            5 => 'color: #1E90FF;',                             // Operators
        -            6 => 'color: #0600FF;',                             // Objects/Components
        -            7 => 'color: #0600FF;'                              // Constants
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #1A5B1A; font-style: italic;',
        -            'MULTI' => 'color: #1A5B1A; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #612188;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7E4B05;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;',
        -            GESHI_NUMBER_INT_BASIC => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000FF;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #6132B2;'
        -            ),
        -        'REGEXPS' => array(
        -            //3 => 'color: #8B1433;'  //fakes '$' colour matched by REGEXP
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://gambasdoc.org/help/lang/{FNAMEL}',
        -        2 => 'http://gambasdoc.org/help/lang/{FNAMEL}',
        -        3 => 'http://www.google.com/search?hl=en&q={FNAMEL}+site:http://gambasdoc.org/help/lang/&btnI=I%27m%20Feeling%20Lucky',
        -        4 => 'http://gambasdoc.org/help/lang/type/{FNAMEL}',
        -        5 => 'http://gambasdoc.org/help/lang/{FNAMEL}',
        -        6 => 'http://www.google.com/search?hl=en&q={FNAMEL}+site:http://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky',
        -        7 => 'http://gambasdoc.org/help/lang/{FNAMEL}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 =>'.'
        -        ),
        -    'REGEXPS' => array(
        -        //3 => "\\$(?!\\w)"   //matches '$' at the end of Keyword
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            2 => array(
        -                'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_\|%\\-&;\$])"
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php
        deleted file mode 100644
        index 16cc9fb4..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php
        +++ /dev/null
        @@ -1,194 +0,0 @@
        - 'GDB',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        0 => array(
        -            'Application',
        -            'signal',
        -            ),
        -        1 => array(
        -            'Segmentation fault',
        -            '[KCrash Handler]',
        -            ),
        -        ),
        -    'NUMBERS' => false,
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        0 => true,
        -        1 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            0 => 'font-weight:bold;',
        -            1 => 'font-weight:bold; color: #ff0000;'
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'font-weight:bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #933;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000066; font-weight:bold;',
        -            1 => 'color: #006600;',
        -            2 => 'color: #B07E00;',
        -            3 => 'color: #0057AE; text-style:italic;',
        -            4 => 'color: #0057AE; text-style:italic;',
        -            5 => 'color: #442886;',
        -            6 => 'color: #442886; font-weight:bold;',
        -            7 => 'color: #FF0000; font-weight:bold;',
        -            8 => 'color: #006E26;',
        -            9 => 'color: #555;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        0 => '',
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //[Current Thread...], [KCrash Handler] etc.
        -        0 => array(
        -            GESHI_SEARCH => '^\[.+\]',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //stack number
        -        1 => array(
        -            GESHI_SEARCH => '^#\d+',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Thread X (Thread...)
        -        2 => array(
        -            GESHI_SEARCH => '^Thread \d.+$',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Files with linenumbers
        -        3 => array(
        -            GESHI_SEARCH => '(at\s+)(.+)(:\d+\s*)$',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        //Libs without linenumbers
        -        4 => array(
        -            GESHI_SEARCH => '(from\s+)(.+)(\s*)$',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        //Line numbers
        -        5 => array(
        -            GESHI_SEARCH => '(:)(\d+)(\s*)$',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        //Location
        -        6 => array(
        -            GESHI_SEARCH => '(\s+)(in\s+)?([^ 0-9][^ ]*)([ \n]+\()',
        -            GESHI_REPLACE => '\\3',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1\\2',
        -            GESHI_AFTER => '\\4'
        -            ),
        -        // interesting parts: abort, qFatal, assertions, null ptrs, ...
        -        7 => array(
        -            GESHI_SEARCH => '\b((?:\*__GI_)?(?:__assert_fail|abort)|qFatal|0x0)\b([^\.]|$)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '\\2'
        -            ),
        -        // Namespace / Classes
        -        8 => array(
        -            GESHI_SEARCH => '\b(\w+)(::)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'U',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '\\2'
        -            ),
        -        // make ptr adresses and  uninteresting
        -        9 => '\b(?:0x[a-f0-9]{2,}|value\s+optimized\s+out)\b'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'NUMBERS' => false
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php
        deleted file mode 100644
        index faac5e88..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php
        +++ /dev/null
        @@ -1,461 +0,0 @@
        - 'genero',
        -    'COMMENT_SINGLE' => array(1 => '--', 2 => '#'),
        -    'COMMENT_MULTI' => array('{' => '}'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            "ABSOLUTE",
        -            "ACCEPT",
        -            "ACTION",
        -            "ADD",
        -            "AFTER",
        -            "ALL",
        -            "ALTER",
        -            "AND",
        -            "ANY",
        -            "APPEND",
        -            "APPLICATION",
        -            "AS",
        -            "AT",
        -            "ATTRIBUTE",
        -            "ATTRIBUTES",
        -            "AUDIT",
        -            "AVG",
        -            "BEFORE",
        -            "BEGIN",
        -            "BETWEEN",
        -            "BORDER",
        -            "BOTTOM",
        -            "BREAKPOINT",
        -            "BUFFER",
        -            "BUFFERED",
        -            "BY",
        -            "CALL",
        -            "CANCEL",
        -            "CASE",
        -            "CENTURY",
        -            "CHANGE",
        -            "CHECK",
        -            "CLEAR",
        -            "CLIPPED",
        -            "CLOSE",
        -            "CLUSTER",
        -            "COLUMN",
        -            "COLUMNS",
        -            "COMMAND",
        -            "COMMENT",
        -            "COMMIT",
        -            "COMMITTED",
        -            "CONCURRENT ",
        -            "CONNECT",
        -            "CONNECTION",
        -            "CONSTANT",
        -            "CONSTRAINED",
        -            "CONSTRAINT",
        -            "CONSTRUCT",
        -            "CONTINUE",
        -            "CONTROL",
        -            "COUNT",
        -            "CREATE",
        -            "CROSS",
        -            "CURRENT",
        -            "DATABASE",
        -            "DBA",
        -            "DEC",
        -            "DECLARE",
        -            "DEFAULT",
        -            "DEFAULTS",
        -            "DEFER",
        -            "DEFINE",
        -            "DELETE",
        -            "DELIMITER",
        -            "DESCRIBE",
        -            "DESTINATION",
        -            "DIM",
        -            "DIALOG",
        -            "DIMENSION",
        -            "DIRTY",
        -            "DISCONNECT",
        -            "DISPLAY",
        -            "DISTINCT",
        -            "DORMANT",
        -            "DOWN",
        -            "DROP",
        -            "DYNAMIC",
        -            "ELSE",
        -            "END",
        -            "ERROR",
        -            "ESCAPE",
        -            "EVERY",
        -            "EXCLUSIVE",
        -            "EXECUTE",
        -            "EXISTS",
        -            "EXIT",
        -            "EXPLAIN",
        -            "EXTEND",
        -            "EXTENT",
        -            "EXTERNAL",
        -            "FETCH",
        -            "FGL_DRAWBOX",
        -            "FIELD",
        -            "FIELD_TOUCHED",
        -            "FILE",
        -            "FILL",
        -            "FINISH",
        -            "FIRST",
        -            "FLOAT",
        -            "FLUSH",
        -            "FOR",
        -            "FOREACH",
        -            "FORM",
        -            "FORMAT",
        -            "FOUND",
        -            "FRACTION",
        -            "FREE",
        -            "FROM",
        -            "FULL",
        -            "FUNCTION",
        -            "GET_FLDBUF",
        -            "GLOBALS",
        -            "GO",
        -            "GOTO",
        -            "GRANT",
        -            "GROUP",
        -            "HAVING",
        -            "HEADER",
        -            "HELP",
        -            "HIDE",
        -            "HOLD",
        -            "HOUR",
        -            "IDLE",
        -            "IF",
        -            "IMAGE",
        -            "IMMEDIATE",
        -            "IN",
        -            "INDEX",
        -            "INFIELD",
        -            "INITIALIZE",
        -            "INNER",
        -            "INPUT",
        -            "INSERT",
        -            "INTERRUPT",
        -            "INTERVAL",
        -            "INTO",
        -            "INVISIBLE",
        -            "IS",
        -            "ISOLATION",
        -            "JOIN",
        -            "KEEP",
        -            "KEY",
        -            "LABEL",
        -            "LAST",
        -            "LEFT",
        -            "LENGTH",
        -            "LET",
        -            "LIKE",
        -            "LINE",
        -            "LINENO",
        -            "LINES",
        -            "LOAD",
        -            "LOCATE",
        -            "LOCK",
        -            "LOG",
        -            "LSTR",
        -            "MAIN",
        -            "MARGIN",
        -            "MATCHES",
        -            "MAX",
        -            "MAXCOUNT",
        -            "MDY",
        -            "MEMORY",
        -            "MENU",
        -            "MESSAGE",
        -            "MIN",
        -            "MINUTE",
        -            "MOD",
        -            "MODE",
        -            "MODIFY",
        -            "MONEY",
        -            "NAME",
        -            "NEED",
        -            "NEXT",
        -            "NO",
        -            "NORMAL",
        -            "NOT",
        -            "NOTFOUND",
        -            "NULL",
        -            "NUMERIC",
        -            "OF",
        -            "ON",
        -            "OPEN",
        -            "OPTION",
        -            "OPTIONS",
        -            "OR",
        -            "ORDER",
        -            "OTHERWISE",
        -            "OUTER",
        -            "OUTPUT",
        -            "PAGE",
        -            "PAGENO",
        -            "PAUSE",
        -            "PERCENT",
        -            "PICTURE",
        -            "PIPE",
        -            "PRECISION",
        -            "PREPARE",
        -            "PREVIOUS",
        -            "PRINT",
        -            "PRINTER",
        -            "PRINTX",
        -            "PRIOR",
        -            "PRIVILEGES",
        -            "PROCEDURE",
        -            "PROGRAM",
        -            "PROMPT",
        -            "PUBLIC",
        -            "PUT",
        -            "QUIT",
        -            "READ",
        -            "REAL",
        -            "RECORD",
        -            "RECOVER",
        -            "RED ",
        -            "RELATIVE",
        -            "RENAME",
        -            "REOPTIMIZATION",
        -            "REPEATABLE",
        -            "REPORT",
        -            "RESOURCE",
        -            "RETURN",
        -            "RETURNING",
        -            "REVERSE",
        -            "REVOKE",
        -            "RIGHT",
        -            "ROLLBACK",
        -            "ROLLFORWARD",
        -            "ROW",
        -            "ROWS",
        -            "RUN",
        -            "SCHEMA",
        -            "SCREEN",
        -            "SCROLL",
        -            "SECOND",
        -            "SELECT",
        -            "SERIAL",
        -            "SET",
        -            "SFMT",
        -            "SHARE",
        -            "SHIFT",
        -            "SHOW",
        -            "SIGNAL ",
        -            "SIZE",
        -            "SKIP",
        -            "SLEEP",
        -            "SOME",
        -            "SPACE",
        -            "SPACES",
        -            "SQL",
        -            "SQLERRMESSAGE",
        -            "SQLERROR",
        -            "SQLSTATE",
        -            "STABILITY",
        -            "START",
        -            "STATISTICS",
        -            "STEP",
        -            "STOP",
        -            "STYLE",
        -            "SUM",
        -            "SYNONYM",
        -            "TABLE",
        -            "TEMP",
        -            "TERMINATE",
        -            "TEXT",
        -            "THEN",
        -            "THROUGH",
        -            "THRU",
        -            "TO",
        -            "TODAY",
        -            "TOP",
        -            "TRAILER",
        -            "TRANSACTION ",
        -            "UNBUFFERED",
        -            "UNCONSTRAINED",
        -            "UNDERLINE",
        -            "UNION",
        -            "UNIQUE",
        -            "UNITS",
        -            "UNLOAD",
        -            "UNLOCK",
        -            "UP",
        -            "UPDATE",
        -            "USE",
        -            "USER",
        -            "USING",
        -            "VALIDATE",
        -            "VALUE",
        -            "VALUES",
        -            "VARCHAR",
        -            "VIEW",
        -            "WAIT",
        -            "WAITING",
        -            "WARNING",
        -            "WHEN",
        -            "WHENEVER",
        -            "WHERE",
        -            "WHILE",
        -            "WINDOW",
        -            "WITH",
        -            "WITHOUT",
        -            "WORDWRAP",
        -            "WORK",
        -            "WRAP"
        -            ),
        -        2 => array(
        -            '&IFDEF', '&ENDIF'
        -            ),
        -        3 => array(
        -            "ARRAY",
        -            "BYTE",
        -            "CHAR",
        -            "CHARACTER",
        -            "CURSOR",
        -            "DATE",
        -            "DATETIME",
        -            "DECIMAL",
        -            "DOUBLE",
        -            "FALSE",
        -            "INT",
        -            "INTEGER",
        -            "SMALLFLOAT",
        -            "SMALLINT",
        -            "STRING",
        -            "TIME",
        -            "TRUE"
        -            ),
        -        4 => array(
        -            "BLACK",
        -            "BLINK",
        -            "BLUE",
        -            "BOLD",
        -            "ANSI",
        -            "ASC",
        -            "ASCENDING",
        -            "ASCII",
        -            "CYAN",
        -            "DESC",
        -            "DESCENDING",
        -            "GREEN",
        -            "MAGENTA",
        -            "OFF",
        -            "WHITE",
        -            "YELLOW",
        -            "YEAR",
        -            "DAY",
        -            "MONTH",
        -            "WEEKDAY"
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':',
        -        '(', ')', '[', ']'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF;',
        -            2 => 'color: #0000FF; font-weight: bold;',
        -            3 => 'color: #008000;',
        -            4 => 'color: #FF0000;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080; font-style: italic;',
        -            2 => 'color: #008080;',
        -            'MULTI' => 'color: #008080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #808080;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #0000FF;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php
        deleted file mode 100644
        index 38495627..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php
        +++ /dev/null
        @@ -1,155 +0,0 @@
        - 'Genie',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Using and Namespace directives (basic support)
        -        //Please note that the alias syntax for using is not supported
        -        3 => '/(?:(?<=using[\\n\\s])|(?<=namespace[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*[a-zA-Z0-9_]+[\n\s]*(?=[;=])/i'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'HARDQUOTE' => array('@"', '"'),
        -    'HARDESCAPE' => array('""'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'and', 'as', 'abstract', 'break', 'case', 'cast', 'catch', 'const',
        -            'construct', 'continue', 'default', 'def', 'delete', 'div',
        -            'dynamic', 'do', 'downto', 'else', 'ensures', 'except', 'extern',
        -            'false', 'final', 'finally', 'for', 'foreach', 'get', 'if', 'in',
        -            'init', 'inline', 'internal', 'implements', 'lock', 'not', 'null',
        -            'of', 'or', 'otherwise', 'out', 'override', 'pass', 'raise',
        -            'raises', 'readonly', 'ref', 'requires', 'self', 'set', 'static',
        -            'super', 'switch', 'to', 'true', 'try', 'unless', 'uses', 'var', 'virtual',
        -            'volatile', 'void', 'when', 'while'
        -            ),
        -//        2 => array(
        -//            ),
        -        3 => array(
        -            'is', 'isa', 'new', 'owned', 'sizeof', 'typeof', 'unchecked',
        -            'unowned', 'weak'
        -            ),
        -        4 => array(
        -            'bool', 'byte', 'class', 'char', 'date', 'datetime', 'decimal', 'delegate',
        -            'double', 'enum', 'event', 'exception', 'float', 'int', 'interface',
        -            'long', 'object', 'prop', 'sbyte', 'short', 'single', 'string',
        -            'struct', 'ulong', 'ushort'
        -            ),
        -//        5 => array(
        -//            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', ':', ';',
        -        '(', ')', '{', '}', '[', ']', '|'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -//        2 => false,
        -        3 => false,
        -        4 => false,
        -//        5 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF;',
        -//            2 => 'color: #FF8000; font-weight: bold;',
        -            3 => 'color: #008000;',
        -            4 => 'color: #FF0000;',
        -//            5 => 'color: #000000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080; font-style: italic;',
        -//            2 => 'color: #008080;',
        -            3 => 'color: #008080;',
        -            'MULTI' => 'color: #008080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080; font-weight: bold;',
        -            'HARD' => 'color: #008080; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #666666;',
        -            'HARD' => 'color: #666666;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #0000FF;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -//        2 => '',
        -        3 => '',
        -        4 => '',
        -//        5 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?|^])",
        -            'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php
        deleted file mode 100644
        index ef4dd96b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php
        +++ /dev/null
        @@ -1,95 +0,0 @@
        - 'GNU Gettext',
        -    'COMMENT_SINGLE' => array('#:', '#.', '#,', '#|', '#'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array('msgctxt', 'msgid_plural', 'msgid', 'msgstr'),
        -    ),
        -    'SYMBOLS' => array(),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -    ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;'
        -        ),
        -        'COMMENTS' => array(
        -            0 => 'color: #000099;',
        -            1 => 'color: #000099;',
        -            2 => 'color: #000099;',
        -            3 => 'color: #006666;',
        -            4 => 'color: #666666; font-style: italic;',
        -        ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -        ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -        ),
        -        'REGEXPS' => array(),
        -        'SYMBOLS' => array(),
        -        'NUMBERS' => array(
        -            0 => 'color: #000099;'
        -        ),
        -        'METHODS' => array(),
        -        'SCRIPT' => array(),
        -        'BRACKETS' => array(
        -            0 => 'color: #000099;'
        -        ),
        -    ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php
        deleted file mode 100644
        index 1eb3918e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php
        +++ /dev/null
        @@ -1,203 +0,0 @@
        - 'glSlang',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'if', 'else', 'for', 'while', 'do', 'break', 'continue', 'asm',
        -            'switch', 'case', 'default', 'return', 'discard',
        -            'namespace', 'using', 'sizeof', 'cast'
        -            ),
        -        2 => array(
        -            'const', 'uniform', 'attribute', 'centroid', 'varying', 'invariant',
        -            'in', 'out', 'inout', 'input', 'output', 'typedef', 'volatile',
        -            'public', 'static', 'extern', 'external', 'packed',
        -            'inline', 'noinline', 'noperspective', 'flat'
        -            ),
        -        3 => array(
        -            'void', 'bool', 'int', 'long', 'short', 'float', 'half', 'fixed',
        -            'unsigned', 'lowp', 'mediump', 'highp', 'precision',
        -            'vec2', 'vec3', 'vec4', 'bvec2', 'bvec3', 'bvec4',
        -            'dvec2', 'dvec3', 'dvec4', 'fvec2', 'fvec3', 'fvec4',
        -            'hvec2', 'hvec3', 'hvec4', 'ivec2', 'ivec3', 'ivec4',
        -            'mat2', 'mat3', 'mat4', 'mat2x2', 'mat3x2', 'mat4x2',
        -            'mat2x3', 'mat3x3', 'mat4x3', 'mat2x4', 'mat3x4', 'mat4x4',
        -            'sampler1D', 'sampler2D', 'sampler3D', 'samplerCube',
        -            'sampler1DShadow', 'sampler2DShadow',
        -            'struct', 'class', 'union', 'enum', 'interface', 'template'
        -            ),
        -        4 => array(
        -            'this', 'false', 'true'
        -            ),
        -        5 => array(
        -            'radians', 'degrees', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan',
        -            'pow', 'exp2', 'log2', 'sqrt', 'inversesqrt', 'abs', 'sign', 'ceil',
        -            'floor', 'fract', 'mod', 'min', 'max', 'clamp', 'mix', 'step',
        -            'smoothstep', 'length', 'distance', 'dot', 'cross', 'normalize',
        -            'ftransform', 'faceforward', 'reflect', 'matrixCompMult', 'equal',
        -            'lessThan', 'lessThanEqual', 'greaterThan', 'greaterThanEqual',
        -            'notEqual', 'any', 'all', 'not', 'texture1D', 'texture1DProj',
        -            'texture1DLod', 'texture1DProjLod', 'texture2D', 'texture2DProj',
        -            'texture2DLod', 'texture2DProjLod', 'texture3D', 'texture3DProj',
        -            'texture3DLod', 'texture3DProjLod', 'textureCube', 'textureCubeLod',
        -            'shadow1D', 'shadow1DProj', 'shadow1DLod', 'shadow1DProjLod',
        -            'shadow2D', 'shadow2DProj', 'shadow2DLod', 'shadow2DProjLod',
        -            'noise1', 'noise2', 'noise3', 'noise4'
        -            ),
        -        6 => array(
        -            'gl_Position', 'gl_PointSize', 'gl_ClipVertex', 'gl_FragColor',
        -            'gl_FragData', 'gl_FragDepth', 'gl_FragCoord', 'gl_FrontFacing',
        -            'gl_Color', 'gl_SecondaryColor', 'gl_Normal', 'gl_Vertex',
        -            'gl_MultiTexCoord0', 'gl_MultiTexCoord1', 'gl_MultiTexCoord2',
        -            'gl_MultiTexCoord3', 'gl_MultiTexCoord4', 'gl_MultiTexCoord5',
        -            'gl_MultiTexCoord6', 'gl_MultiTexCoord7', 'gl_FogCoord',
        -            'gl_MaxLights', 'gl_MaxClipPlanes', 'gl_MaxTextureUnits',
        -            'gl_MaxTextureCoords', 'gl_MaxVertexAttribs', 'gl_MaxVaryingFloats',
        -            'gl_MaxVertexUniformComponents', 'gl_MaxVertexTextureImageUnits',
        -            'gl_MaxCombinedTextureImageUnits', 'gl_MaxTextureImageUnits',
        -            'gl_MaxFragmentUniformComponents', 'gl_MaxDrawBuffers', 'gl_Point',
        -            'gl_ModelViewMatrix', 'gl_ProjectionMatrix', 'gl_FrontMaterial',
        -            'gl_ModelViewProjectionMatrix', 'gl_TextureMatrix', 'gl_ClipPlane',
        -            'gl_NormalMatrix', 'gl_ModelViewMatrixInverse', 'gl_BackMaterial',
        -            'gl_ProjectionMatrixInverse', 'gl_ModelViewProjectionMatrixInverse',
        -            'gl_TextureMatrixInverse', 'gl_ModelViewMatrixTranspose', 'gl_Fog',
        -            'gl_ProjectionMatrixTranspose', 'gl_NormalScale', 'gl_DepthRange',
        -            'gl_odelViewProjectionMatrixTranspose', 'gl_TextureMatrixTranspose',
        -            'gl_ModelViewMatrixInverseTranspose', 'gl_LightSource',
        -            'gl_ProjectionMatrixInverseTranspose', 'gl_LightModel',
        -            'gl_ModelViewProjectionMatrixInverseTranspose', 'gl_TexCoord',
        -            'gl_TextureMatrixInverseTranspose', 'gl_TextureEnvColor',
        -            'gl_FrontLightModelProduct', 'gl_BackLightModelProduct',
        -            'gl_FrontLightProduct', 'gl_BackLightProduct', 'gl_ObjectPlaneS',
        -            'gl_ObjectPlaneT', 'gl_ObjectPlaneR', 'gl_ObjectPlaneQ',
        -            'gl_EyePlaneS', 'gl_EyePlaneT', 'gl_EyePlaneR', 'gl_EyePlaneQ',
        -            'gl_FrontColor', 'gl_BackColor', 'gl_FrontSecondaryColor',
        -            'gl_BackSecondaryColor', 'gl_FogFragCoord', 'gl_PointCoord'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^',
        -        '&', '?', ':', '.', '|', ';', ',', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #333399; font-weight: bold;',
        -            3 => 'color: #000066; font-weight: bold;',
        -            4 => 'color: #333399; font-weight: bold;',
        -            5 => 'color: #993333; font-weight: bold;',
        -            6 => 'color: #551111;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #009900;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'OOLANG' => array(
        -            'MATCH_BEFORE' => '',
        -            'MATCH_AFTER' => '[a-zA-Z_][a-zA-Z0-9_]*',
        -            'MATCH_SPACES' => '[\s]*'
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php
        deleted file mode 100644
        index 26c913b6..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php
        +++ /dev/null
        @@ -1,367 +0,0 @@
        -, Timon Knigge 
        - * 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.8.12
        - * Date Started: 2005/06/21
        - *
        - * GML language file for GeSHi.
        - *
        - * GML (Game Maker Language) is a script language that is built-in into Game Maker,
        - * a game creation program, more info about Game Maker can be found at
        - * http://www.gamemaker.nl/
        - * All GML keywords were extracted from the Game Maker HTML Help file using a PHP
        - * script (one section at a time). I love PHP for saving me that bunch of work :P!.
        - * I think all GML functions have been indexed here, but I'm not sure about it, so
        - * please let me know of any issue you may find.
        - *
        - * CHANGES
        - * -------
        - * 2005/11/11
        - *  -  Changed 'CASE_KEYWORDS' fom 'GESHI_CAPS_LOWER' to 'GESHI_CAPS_NO_CHANGE',
        - *     so that MCI_command appears correctly (the only GML function using capitals).
        - *  -  Changed 'CASE_SENSITIVE' options, 'GESHI_COMMENTS' from true to false and all
        - *     of the others from false to true.
        - *  -  Deleted repeated entries.
        - *  -  div and mod are language keywords, moved (from symbols) to the appropiate section (1).
        - *  -  Moved self, other, all, noone and global identifiers to language keywords section 1.
        - *  -  Edited this file lines to a maximum width of 100 characters (as stated in
        - *     the GeSHi docs). Well, not strictly to 100 but around it.
        - *  -  Corrected some minor issues (the vk_f1...vk_f12 keys and similar).
        - *  -  Deleted the KEYWORDS=>5 and KEYWORDS=>6 sections (actually, they were empty).
        - *     I was planning of using those for the GML functions available only in the
        - *     registered version of the program, but not anymore.
        - *
        - * 2005/06/26 (1.0.3)
        - *  -  First Release.
        - *
        - * TODO (updated 2005/11/11)
        - * -------------------------
        - *  -  Test it for a while and make the appropiate corrections.
        - *
        - *************************************************************************************
        - *
        - *     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' => 'GML',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'"),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        // Variables
        -        1 => array(
        -            'argument','argument0','argument1','argument10','argument11','argument12','argument13','argument14','argument15','argument2','argument3','argument4','argument5','argument6','argument7',
        -            'argument8','argument9','argument_count','argument_relative','async_load','background_alpha','background_blend','background_color','background_foreground','background_height','background_hspeed',
        -            'background_htiled','background_index','background_showcolor','background_visible','background_vspeed','background_vtiled','background_width','background_x','background_xscale','background_y',
        -            'background_yscale','browser_height','browser_width','caption_health','caption_lives','caption_score','current_day','current_hour','current_minute','current_month','current_second','current_time',
        -            'current_weekday','current_year','cursor_sprite','debug_mode','delta_time','display_aa','error_last','error_occurred','event_action','event_number','event_object','event_type','fps','fps_real',
        -            'game_id','gamemaker_pro','gamemaker_registered','gamemaker_version','health','instance_count','instance_id','keyboard_key','keyboard_lastchar','keyboard_lastkey','keyboard_string','lives',
        -            'mouse_button','mouse_lastbutton','mouse_x','mouse_y','os_browser','os_device','os_type','os_version','program_directory','room','room_caption','room_first','room_height','room_last',
        -            'room_persistent','room_speed','room_width','score','secure_mode','show_health','show_lives','show_score','temp_directory','transition_color','transition_kind','transition_steps','view_angle',
        -            'view_current','view_enabled','view_hborder','view_hport','view_hspeed','view_hview','view_object','view_surface_id','view_vborder','view_visible','view_vspeed','view_wport','view_wview','view_xport',
        -            'view_xview','view_yport','view_yview','webgl_enabled','working_directory','alarm','bbox_bottom','bbox_left','bbox_right','bbox_top','depth','direction','friction','gravity','gravity_direction',
        -            'hspeed','id','image_alpha','image_angle','image_blend','image_index','image_number','image_single','image_speed','image_xscale','image_yscale','mask_index','object_index','path_endaction','path_index',
        -            'path_orientation','path_position','path_positionprevious','path_scale','path_speed','persistent','phy_active','phy_angular_damping','phy_angular_velocity','phy_bullet','phy_col_normal_x',
        -            'phy_col_normal_y','phy_collision_points','phy_collision_x','phy_collision_y','phy_com_x','phy_com_y','phy_dynamic','phy_fixed_rotation','phy_inertia','phy_kinematic','phy_linear_damping',
        -            'phy_linear_velocity_x','phy_linear_velocity_y','phy_mass','phy_position_x','phy_position_xprevious','phy_position_y','phy_position_yprevious','phy_rotation','phy_sleeping','phy_speed','phy_speed_x',
        -            'phy_speed_y','solid','speed','sprite_height','sprite_index','sprite_width','sprite_xoffset','sprite_yoffset','timeline_index','timeline_loop','timeline_position','timeline_running','timeline_speed',
        -            'visible','vspeed','x','xprevious','xstart','y','yprevious','ystart'
        -            ),
        -
        -        // Functions
        -        2 => array(
        -            'YoYo_AchievementsAvailable','YoYo_AddVirtualKey','YoYo_CheckSecurity','YoYo_DeleteVirtualKey','YoYo_DisableAds','YoYo_EnableAds','YoYo_EnableAlphaBlend','YoYo_GetCPUDetails','YoYo_GetConfig',
        -            'YoYo_GetDevice','YoYo_GetDomain','YoYo_GetPictureSprite','YoYo_GetPlatform','YoYo_GetSessionKey','YoYo_GetTiltX','YoYo_GetTiltY','YoYo_GetTiltZ','YoYo_GetTimer','YoYo_HideVirtualKey','YoYo_IsKeypadOpen',
        -            'YoYo_LeaveRating','YoYo_LoginAchievements','YoYo_LogoutAchievements','YoYo_MouseCheckButton','YoYo_MouseCheckButtonPressed','YoYo_MouseCheckButtonReleased','YoYo_MouseX','YoYo_MouseXRaw','YoYo_MouseY',
        -            'YoYo_MouseYRaw','YoYo_OSPauseEvent','YoYo_OpenURL','YoYo_OpenURL_ext','YoYo_OpenURL_full','YoYo_PostAchievement','YoYo_PostScore','YoYo_SelectPicture','YoYo_ShowVirtualKey','abs','achievement_available',
        -            'achievement_event','achievement_get_challenges','achievement_get_info','achievement_get_pic','achievement_increment','achievement_load_friends','achievement_load_leaderboard','achievement_load_progress',
        -            'achievement_login','achievement_login_status','achievement_logout','achievement_post','achievement_post_score','achievement_reset','achievement_send_challenge','achievement_show',
        -            'achievement_show_achievements','achievement_show_challenge_notifications','achievement_show_leaderboards','action_another_room','action_bounce','action_change_object','action_color','action_create_object',
        -            'action_create_object_motion','action_create_object_random','action_current_room','action_draw_arrow','action_draw_background','action_draw_ellipse','action_draw_ellipse_gradient','action_draw_gradient_hor',
        -            'action_draw_gradient_vert','action_draw_health','action_draw_life','action_draw_life_images','action_draw_line','action_draw_rectangle','action_draw_score','action_draw_sprite','action_draw_text',
        -            'action_draw_text_transformed','action_draw_variable','action_effect','action_end_game','action_end_sound','action_execute_script','action_font','action_fullscreen','action_highscore_clear','action_if',
        -            'action_if_aligned','action_if_collision','action_if_dice','action_if_empty','action_if_health','action_if_life','action_if_mouse','action_if_next_room','action_if_number','action_if_object',
        -            'action_if_previous_room','action_if_question','action_if_score','action_if_sound','action_if_variable','action_inherited','action_kill_object','action_kill_position','action_linear_step','action_load_game',
        -            'action_message','action_move','action_move_contact','action_move_point','action_move_random','action_move_start','action_move_to','action_next_room','action_partemit_burst','action_partemit_create',
        -            'action_partemit_destroy','action_partemit_stream','action_partsyst_clear','action_partsyst_create','action_partsyst_destroy','action_parttype_color','action_parttype_create','action_parttype_gravity',
        -            'action_parttype_life','action_parttype_secondary','action_parttype_speed','action_path','action_path_end','action_path_position','action_path_speed','action_potential_step','action_previous_room',
        -            'action_replace_background','action_replace_sound','action_replace_sprite','action_restart_game','action_reverse_xdir','action_reverse_ydir','action_save_game','action_set_alarm','action_set_cursor',
        -            'action_set_friction','action_set_gravity','action_set_health','action_set_hspeed','action_set_life','action_set_motion','action_set_score','action_set_timeline_position','action_set_timeline_speed',
        -            'action_set_vspeed','action_snap','action_snapshot','action_sound','action_sprite_color','action_sprite_set','action_sprite_transform','action_timeline_pause','action_timeline_set','action_timeline_start',
        -            'action_timeline_stop','action_webpage','action_wrap','ads_disable','ads_enable','ads_engagement_active','ads_engagement_available','ads_engagement_launch','ads_event','ads_event_preload',
        -            'ads_get_display_height','ads_get_display_width','ads_interstitial_available','ads_interstitial_display','ads_move','ads_set_reward_callback','ads_setup','analytics_event','analytics_event_ext','ansi_char',
        -            'arccos','arcsin','arctan','arctan2','array_height_2d','array_length_1d','array_length_2d','asset_get_index','asset_get_type','audio_channel_num','audio_emitter_create','audio_emitter_exists',
        -            'audio_emitter_falloff','audio_emitter_free','audio_emitter_gain','audio_emitter_pitch','audio_emitter_position','audio_emitter_velocity','audio_exists','audio_falloff_set_model','audio_get_type',
        -            'audio_is_paused','audio_is_playing','audio_listener_orientation','audio_listener_position','audio_listener_velocity','audio_master_gain','audio_music_gain','audio_music_is_playing','audio_pause_all',
        -            'audio_pause_music','audio_pause_sound','audio_play_music','audio_play_sound','audio_play_sound_at','audio_play_sound_on','audio_resume_all','audio_resume_music','audio_resume_sound','audio_sound_gain',
        -            'audio_sound_length','audio_sound_pitch','audio_stop_all','audio_stop_music','audio_stop_sound','audio_system','background_add','background_assign','background_create_color','background_create_from_surface',
        -            'background_create_gradient','background_delete','background_duplicate','background_exists','background_get_height','background_get_name','background_get_texture','background_get_uvs','background_get_width',
        -            'background_replace','background_save','background_set_alpha_from_background','base64_decode','base64_encode','buffer_base64_decode','buffer_base64_decode_ext','buffer_base64_encode','buffer_copy',
        -            'buffer_create','buffer_delete','buffer_fill','buffer_get_size','buffer_get_surface','buffer_load','buffer_load_ext','buffer_md5','buffer_peek','buffer_poke','buffer_read','buffer_resize','buffer_save',
        -            'buffer_save_ext','buffer_seek','buffer_set_surface','buffer_sha1','buffer_sizeof','buffer_tell','buffer_write','ceil','choose','chr','clamp','clickable_add','clickable_add_ext','clickable_change',
        -            'clickable_change_ext','clickable_delete','clickable_exists','clipboard_get_text','clipboard_has_text','clipboard_set_text','cloud_file_save','cloud_string_save','cloud_synchronise','code_is_compiled',
        -            'collision_circle','collision_ellipse','collision_line','collision_point','collision_rectangle','color_get_blue','color_get_green','color_get_hue','color_get_red','color_get_saturation','color_get_value',
        -            'cos','d3d_draw_block','d3d_draw_cone','d3d_draw_cylinder','d3d_draw_ellipsoid','d3d_draw_floor','d3d_draw_wall','d3d_end','d3d_light_define_ambient','d3d_light_define_direction','d3d_light_define_point',
        -            'd3d_light_enable','d3d_model_block','d3d_model_clear','d3d_model_cone','d3d_model_create','d3d_model_cylinder','d3d_model_destroy','d3d_model_draw','d3d_model_ellipsoid','d3d_model_floor','d3d_model_load',
        -            'd3d_model_primitive_begin','d3d_model_primitive_end','d3d_model_save','d3d_model_vertex','d3d_model_vertex_color','d3d_model_vertex_normal','d3d_model_vertex_normal_color','d3d_model_vertex_normal_texture',
        -            'd3d_model_vertex_normal_texture_color','d3d_model_vertex_texture','d3d_model_vertex_texture_color','d3d_model_wall','d3d_primitive_begin','d3d_primitive_begin_texture','d3d_primitive_end','d3d_set_culling',
        -            'd3d_set_depth','d3d_set_fog','d3d_set_hidden','d3d_set_lighting','d3d_set_perspective','d3d_set_projection','d3d_set_projection_ext','d3d_set_projection_ortho','d3d_set_projection_perspective',
        -            'd3d_set_shading','d3d_set_zwriteenable','d3d_start','d3d_transform_add_rotation_axis','d3d_transform_add_rotation_x','d3d_transform_add_rotation_y','d3d_transform_add_rotation_z','d3d_transform_add_scaling',
        -            'd3d_transform_add_translation','d3d_transform_set_identity','d3d_transform_set_rotation_axis','d3d_transform_set_rotation_x','d3d_transform_set_rotation_y','d3d_transform_set_rotation_z',
        -            'd3d_transform_set_scaling','d3d_transform_set_translation','d3d_transform_stack_clear','d3d_transform_stack_discard','d3d_transform_stack_empty','d3d_transform_stack_pop','d3d_transform_stack_push',
        -            'd3d_transform_stack_top','d3d_transform_vertex','d3d_vertex','d3d_vertex_color','d3d_vertex_normal','d3d_vertex_normal_color','d3d_vertex_normal_texture','d3d_vertex_normal_texture_color','d3d_vertex_texture',
        -            'd3d_vertex_texture_color','date_compare_date','date_compare_datetime','date_compare_time','date_create_datetime','date_current_datetime','date_date_of','date_date_string','date_datetime_string','date_day_span',
        -            'date_days_in_month','date_days_in_year','date_get_day','date_get_day_of_year','date_get_hour','date_get_hour_of_year','date_get_minute','date_get_minute_of_year','date_get_month','date_get_second',
        -            'date_get_second_of_year','date_get_week','date_get_weekday','date_get_year','date_hour_span','date_inc_day','date_inc_hour','date_inc_minute','date_inc_month','date_inc_second','date_inc_week','date_inc_year',
        -            'date_is_today','date_leap_year','date_minute_span','date_month_span','date_second_span','date_time_of','date_time_string','date_valid_datetime','date_week_span','date_year_span','degtorad','device_get_tilt_x',
        -            'device_get_tilt_y','device_get_tilt_z','device_ios_get_image','device_ios_get_imagename','device_is_keypad_open','device_mouse_check_button','device_mouse_check_button_pressed',
        -            'device_mouse_check_button_released','device_mouse_dbclick_enable','device_mouse_raw_x','device_mouse_raw_y','device_mouse_x','device_mouse_y','directory_create','directory_exists','display_get_dpi_x',
        -            'display_get_dpi_y','display_get_gui_height','display_get_gui_width','display_get_height','display_get_orientation','display_get_width','display_mouse_get_x','display_mouse_get_y','display_mouse_set',
        -            'display_reset','display_set_gui_size','distance_to_object','distance_to_point','dot_product','dot_product_3d','dot_product_3d_normalised','dot_product_normalised','draw_arrow','draw_background',
        -            'draw_background_ext','draw_background_general','draw_background_part','draw_background_part_ext','draw_background_stretched','draw_background_stretched_ext','draw_background_tiled','draw_background_tiled_ext',
        -            'draw_button','draw_circle','draw_circle_color','draw_clear','draw_clear_alpha','draw_ellipse','draw_ellipse_color','draw_enable_alphablend','draw_enable_drawevent','draw_get_alpha','draw_get_alpha_test',
        -            'draw_get_alpha_test_ref_value','draw_get_color','draw_getpixel','draw_getpixel_ext','draw_healthbar','draw_highscore','draw_line','draw_line_color','draw_line_width','draw_line_width_color','draw_path',
        -            'draw_point','draw_point_color','draw_primitive_begin','draw_primitive_begin_texture','draw_primitive_end','draw_rectangle','draw_rectangle_color','draw_roundrect','draw_roundrect_color','draw_self',
        -            'draw_set_alpha','draw_set_alpha_test','draw_set_alpha_test_ref_value','draw_set_blend_mode','draw_set_blend_mode_ext','draw_set_circle_precision','draw_set_color','draw_set_color_write_enable',
        -            'draw_set_font','draw_set_halign','draw_set_valign','draw_sprite','draw_sprite_ext','draw_sprite_general','draw_sprite_part','draw_sprite_part_ext','draw_sprite_pos','draw_sprite_stretched',
        -            'draw_sprite_stretched_ext','draw_sprite_tiled','draw_sprite_tiled_ext','draw_surface','draw_surface_ext','draw_surface_general','draw_surface_part','draw_surface_part_ext','draw_surface_stretched',
        -            'draw_surface_stretched_ext','draw_surface_tiled','draw_surface_tiled_ext','draw_text','draw_text_color','draw_text_ext','draw_text_ext_color','draw_text_ext_transformed','draw_text_ext_transformed_color',
        -            'draw_text_transformed','draw_text_transformed_color','draw_texture_flush','draw_triangle','draw_triangle_color','draw_vertex','draw_vertex_color','draw_vertex_texture','draw_vertex_texture_color',
        -            'ds_exists','ds_grid_add','ds_grid_add_disk','ds_grid_add_grid_region','ds_grid_add_region','ds_grid_clear','ds_grid_copy','ds_grid_create','ds_grid_destroy','ds_grid_get','ds_grid_get_disk_max',
        -            'ds_grid_get_disk_mean','ds_grid_get_disk_min','ds_grid_get_disk_sum','ds_grid_get_max','ds_grid_get_mean','ds_grid_get_min','ds_grid_get_sum','ds_grid_height','ds_grid_multiply','ds_grid_multiply_disk',
        -            'ds_grid_multiply_grid_region','ds_grid_multiply_region','ds_grid_read','ds_grid_resize','ds_grid_set','ds_grid_set_disk','ds_grid_set_grid_region','ds_grid_set_region','ds_grid_shuffle','ds_grid_sort',
        -            'ds_grid_value_disk_exists','ds_grid_value_disk_x','ds_grid_value_disk_y','ds_grid_value_exists','ds_grid_value_x','ds_grid_value_y','ds_grid_width','ds_grid_write','ds_list_add','ds_list_clear',
        -            'ds_list_copy','ds_list_create','ds_list_delete','ds_list_destroy','ds_list_empty','ds_list_find_index','ds_list_find_value','ds_list_insert','ds_list_mark_as_list','ds_list_mark_as_map','ds_list_read',
        -            'ds_list_replace','ds_list_shuffle','ds_list_size','ds_list_sort','ds_list_write','ds_map_add','ds_map_add_list','ds_map_add_map','ds_map_clear','ds_map_copy','ds_map_create','ds_map_delete',
        -            'ds_map_destroy','ds_map_empty','ds_map_exists','ds_map_find_first','ds_map_find_last','ds_map_find_next','ds_map_find_previous','ds_map_find_value','ds_map_read','ds_map_replace','ds_map_replace_list',
        -            'ds_map_replace_map','ds_map_size','ds_map_write','ds_priority_add','ds_priority_change_priority','ds_priority_clear','ds_priority_copy','ds_priority_create','ds_priority_delete_max','ds_priority_delete_min',
        -            'ds_priority_delete_value','ds_priority_destroy','ds_priority_empty','ds_priority_find_max','ds_priority_find_min','ds_priority_find_priority','ds_priority_read','ds_priority_size','ds_priority_write',
        -            'ds_queue_clear','ds_queue_copy','ds_queue_create','ds_queue_dequeue','ds_queue_destroy','ds_queue_empty','ds_queue_enqueue','ds_queue_head','ds_queue_read','ds_queue_size','ds_queue_tail','ds_queue_write',
        -            'ds_set_precision','ds_stack_clear','ds_stack_copy','ds_stack_create','ds_stack_destroy','ds_stack_empty','ds_stack_pop','ds_stack_push','ds_stack_read','ds_stack_size','ds_stack_top','ds_stack_write',
        -            'effect_clear','effect_create_above','effect_create_below','environment_get_variable','event_inherited','event_perform','event_perform_object','event_user','exp','external_call','external_define','external_free',
        -            'facebook_accesstoken','facebook_dialog','facebook_graph_request','facebook_init','facebook_launch_offerwall','facebook_login','facebook_logout','facebook_post_message','facebook_send_invite','facebook_status',
        -            'facebook_user_id','file_attributes','file_bin_close','file_bin_open','file_bin_position','file_bin_read_byte','file_bin_rewrite','file_bin_seek','file_bin_size','file_bin_write_byte','file_copy','file_delete',
        -            'file_exists','file_find_close','file_find_first','file_find_next','file_rename','file_text_close','file_text_eof','file_text_eoln','file_text_open_append','file_text_open_from_string','file_text_open_read',
        -            'file_text_open_write','file_text_read_real','file_text_read_string','file_text_readln','file_text_write_real','file_text_write_string','file_text_writeln','filename_change_ext','filename_dir','filename_drive',
        -            'filename_ext','filename_name','filename_path','floor','font_add','font_add_sprite','font_add_sprite_ext','font_delete','font_exists','font_get_bold','font_get_first','font_get_fontname','font_get_italic',
        -            'font_get_last','font_get_name','font_get_size','font_get_texture','font_get_uvs','font_replace','font_replace_sprite','font_replace_sprite_ext','font_set_cache_size','frac','game_end','game_load',
        -            'game_load_buffer','game_restart','game_save','game_save_buffer','gamepad_axis_count','gamepad_axis_value','gamepad_button_check','gamepad_button_check_pressed','gamepad_button_check_released',
        -            'gamepad_button_count','gamepad_button_value','gamepad_get_axis_deadzone','gamepad_get_button_threshold','gamepad_get_description','gamepad_get_device_count','gamepad_is_connected','gamepad_is_supported',
        -            'gamepad_set_axis_deadzone','gamepad_set_button_threshold','gamepad_set_vibration','get_integer','get_integer_async','get_login_async','get_open_filename','get_open_filename_ext','get_save_filename',
        -            'get_save_filename_ext','get_string','get_string_async','get_timer','highscore_add','highscore_clear','highscore_name','highscore_value','http_get','http_get_file','http_post_string','iap_acquire',
        -            'iap_activate','iap_consume','iap_event_queue','iap_files_purchased','iap_is_downloaded','iap_is_purchased','iap_product_details','iap_product_files','iap_product_status','iap_restore_all','iap_status',
        -            'iap_store_status','immersion_play_effect','immersion_stop','ini_close','ini_key_delete','ini_key_exists','ini_open','ini_open_from_string','ini_read_real','ini_read_string','ini_section_delete',
        -            'ini_section_exists','ini_write_real','ini_write_string','instance_activate_all','instance_activate_object','instance_activate_region','instance_change','instance_copy','instance_create',
        -            'instance_deactivate_all','instance_deactivate_object','instance_deactivate_region','instance_destroy','instance_exists','instance_find','instance_furthest','instance_nearest','instance_number',
        -            'instance_place','instance_position','io_clear','irandom','irandom_range','is_array','is_real','is_string','joystick_axes','joystick_buttons','joystick_check_button','joystick_direction','joystick_exists',
        -            'joystick_has_pov','joystick_name','joystick_pov','joystick_rpos','joystick_upos','joystick_vpos','joystick_xpos','joystick_ypos','joystick_zpos','json_decode','json_encode','keyboard_check',
        -            'keyboard_check_direct','keyboard_check_pressed','keyboard_check_released','keyboard_clear','keyboard_get_map','keyboard_get_numlock','keyboard_key_press','keyboard_key_release','keyboard_set_map',
        -            'keyboard_set_numlock','keyboard_unset_map','lengthdir_x','lengthdir_y','lerp','ln','log10','log2','logn','make_color_hsv','make_color_rgb','math_set_epsilon','matrix_build','matrix_get','matrix_multiply',
        -            'matrix_set','max','md5_file','md5_string_unicode','md5_string_utf8','mean','median','merge_color','message_caption','min','motion_add','motion_set','mouse_check_button','mouse_check_button_pressed',
        -            'mouse_check_button_released','mouse_clear','mouse_wheel_down','mouse_wheel_up','move_bounce','move_bounce_all','move_bounce_solid','move_contact','move_contact_all','move_contact_solid','move_outside_all',
        -            'move_outside_solid','move_random','move_snap','move_towards_point','move_wrap','mp_grid_add_cell','mp_grid_add_instances','mp_grid_add_rectangle','mp_grid_clear_all','mp_grid_clear_cell',
        -            'mp_grid_clear_rectangle','mp_grid_create','mp_grid_destroy','mp_grid_draw','mp_grid_path','mp_linear_path','mp_linear_path_object','mp_linear_step','mp_linear_step_object','mp_potential_path',
        -            'mp_potential_path_object','mp_potential_settings','mp_potential_step','mp_potential_step_object','network_connect','network_connect_raw','network_create_server','network_create_socket','network_destroy',
        -            'network_destroy','network_resolve','network_send_broadcast','network_send_packet','network_send_raw','network_send_udp','network_set_timeout','object_exists','object_get_depth','object_get_mask',
        -            'object_get_name','object_get_parent','object_get_persistent','object_get_physics','object_get_solid','object_get_sprite','object_get_visible','object_is_ancestor','object_set_depth','object_set_mask',
        -            'object_set_persistent','object_set_solid','object_set_sprite','object_set_visible','ord','os_get_config','os_get_info','os_get_language','os_is_network_connected','os_is_paused','os_lock_orientation',
        -            'os_powersave_enable','parameter_count','parameter_string','part_emitter_burst','part_emitter_clear','part_emitter_create','part_emitter_destroy','part_emitter_destroy_all','part_emitter_exists',
        -            'part_emitter_region','part_emitter_stream','part_particles_clear','part_particles_count','part_particles_create','part_particles_create_color','part_system_automatic_draw','part_system_automatic_update',
        -            'part_system_clear','part_system_create','part_system_depth','part_system_destroy','part_system_draw_order','part_system_drawit','part_system_exists','part_system_position','part_system_update',
        -            'part_type_alpha','part_type_alpha1','part_type_alpha2','part_type_alpha3','part_type_blend','part_type_clear','part_type_color','part_type_color1','part_type_color2','part_type_color3','part_type_color_hsv',
        -            'part_type_color_mix','part_type_color_rgb','part_type_create','part_type_death','part_type_destroy','part_type_direction','part_type_exists','part_type_gravity','part_type_life','part_type_orientation',
        -            'part_type_scale','part_type_shape','part_type_size','part_type_speed','part_type_sprite','part_type_step','path_add','path_add_point','path_append','path_assign','path_change_point','path_clear_points',
        -            'path_delete','path_delete_point','path_duplicate','path_end','path_exists','path_flip','path_get_closed','path_get_kind','path_get_length','path_get_name','path_get_number','path_get_point_speed',
        -            'path_get_point_x','path_get_point_y','path_get_precision','path_get_speed','path_get_x','path_get_y','path_insert_point','path_mirror','path_rescale','path_reverse','path_rotate','path_set_closed',
        -            'path_set_kind','path_set_precision','path_shift','path_start','physics_apply_force','physics_apply_impulse','physics_apply_local_force','physics_apply_local_impulse','physics_apply_torque',
        -            'physics_draw_debug','physics_fixture_add_point','physics_fixture_bind','physics_fixture_bind_ext','physics_fixture_create','physics_fixture_delete','physics_fixture_set_angular_damping',
        -            'physics_fixture_set_awake','physics_fixture_set_box_shape','physics_fixture_set_circle_shape','physics_fixture_set_collision_group','physics_fixture_set_density','physics_fixture_set_edge_shape',
        -            'physics_fixture_set_friction','physics_fixture_set_kinematic','physics_fixture_set_linear_damping','physics_fixture_set_polygon_shape','physics_fixture_set_restitution','physics_fixture_set_sensor',
        -            'physics_get_density','physics_get_friction','physics_get_restitution','physics_joint_delete','physics_joint_distance_create','physics_joint_enable_motor','physics_joint_gear_create','physics_joint_get_value',
        -            'physics_joint_prismatic_create','physics_joint_pulley_create','physics_joint_revolute_create','physics_joint_set_value','physics_mass_properties','physics_pause_enable','physics_remove_fixture','physics_set_density',
        -            'physics_set_friction','physics_set_restitution','physics_test_overlap','physics_world_create','physics_world_draw_debug','physics_world_gravity','physics_world_update_iterations','physics_world_update_speed',
        -            'place_empty','place_free','place_meeting','place_snapped','playhaven_add_notification_badge','playhaven_hide_notification_badge','playhaven_position_notification_badge','playhaven_update_notification_badge',
        -            'pocketchange_display_reward','pocketchange_display_shop','point_direction','point_distance','point_distance_3d','position_change','position_destroy','position_empty','position_meeting','power','radtodeg','random',
        -            'random_get_seed','random_range','random_set_seed','randomize','real','room_add','room_assign','room_duplicate','room_exists','room_get_name','room_goto','room_goto_next','room_goto_previous','room_instance_add',
        -            'room_instance_clear','room_next','room_previous','room_restart','room_set_background','room_set_background_color','room_set_height','room_set_persistent','room_set_view','room_set_view_enabled','room_set_width',
        -            'room_tile_add','room_tile_add_ext','room_tile_clear','round','screen_save','screen_save_part','script_execute','script_exists','script_get_name','sha1_file','sha1_string_unicode','sha1_string_utf8','shader_enable_corner_id',
        -            'shader_get_sampler_index','shader_get_uniform','shader_is_compiled','shader_reset','shader_set','shader_set_uniform_f','shader_set_uniform_f_array','shader_set_uniform_i','shader_set_uniform_i_array',
        -            'shader_set_uniform_matrix','shader_set_uniform_matrix_array','shaders_are_supported','shop_leave_rating','show_debug_message','show_debug_overlay','show_error','show_message','show_message','show_message_async',
        -            'show_question','show_question_async','sign','sin','sound_add','sound_delete','sound_exists','sound_fade','sound_get_name','sound_global_volume','sound_isplaying','sound_loop','sound_play','sound_replace',
        -            'sound_stop','sound_stop_all','sound_volume','sprite_add','sprite_add_from_surface','sprite_assign','sprite_collision_mask','sprite_create_from_surface','sprite_delete','sprite_duplicate','sprite_exists',
        -            'sprite_get_bbox_bottom','sprite_get_bbox_left','sprite_get_bbox_right','sprite_get_bbox_top','sprite_get_height','sprite_get_name','sprite_get_number','sprite_get_texture','sprite_get_tpe','sprite_get_uvs',
        -            'sprite_get_width','sprite_get_xoffset','sprite_get_yoffset','sprite_merge','sprite_replace','sprite_save','sprite_save_strip','sprite_set_alpha_from_sprite','sprite_set_cache_size','sprite_set_cache_size_ext',
        -            'sprite_set_offset','sqr','sqrt','steam_activate_overlay','steam_clear_achievement','steam_create_leaderboard','steam_download_friends_scores','steam_download_scores','steam_download_scores_around_user',
        -            'steam_file_delete','steam_file_exists','steam_file_persisted','steam_file_read','steam_file_share','steam_file_size','steam_file_write','steam_file_write_file','steam_get_achievement','steam_get_persona_name',
        -            'steam_get_quota_free','steam_get_quota_total','steam_get_stat_avg_rate','steam_get_stat_float','steam_get_stat_int','steam_get_user_steam_id','steam_initialised','steam_is_cloud_enabled_for_account',
        -            'steam_is_cloud_enabled_for_app','steam_is_overlay_activated','steam_is_overlay_enabled','steam_is_screenshot_requested','steam_is_user_logged_on','steam_publish_workshop_file','steam_reset_all_stats',
        -            'steam_reset_all_stats_achievements','steam_send_screenshot','steam_set_achievement','steam_set_stat_avg_rate','steam_set_stat_float','steam_set_stat_int','steam_stats_ready','steam_upload_score',
        -            'steam_user_installed_dlc','steam_user_owns_dlc','string','string_byte_at','string_byte_length','string_char_at','string_copy','string_count','string_delete','string_digits','string_format','string_height',
        -            'string_height_ext','string_insert','string_length','string_letters','string_lettersdigits','string_lower','string_pos','string_repeat','string_replace','string_replace_all','string_set_byte_at','string_upper',
        -            'string_width','string_width_ext','surface_copy','surface_copy_part','surface_create','surface_create_ext','surface_exists','surface_free','surface_get_height','surface_get_texture','surface_get_width',
        -            'surface_getpixel','surface_getpixel_ext','surface_reset_target','surface_save','surface_save_part','surface_set_target','surface_set_target_ext','tan','texture_exists','texture_get_height','texture_get_texel_height',
        -            'texture_get_texel_width','texture_get_width','texture_set_blending','texture_set_interpolation','texture_set_interpolation_ext','texture_set_repeat','texture_set_repeat_ext','texture_set_stage','tile_add',
        -            'tile_delete','tile_delete_at','tile_exists','tile_find','tile_get_alpha','tile_get_background','tile_get_blend','tile_get_depth','tile_get_height','tile_get_left','tile_get_top','tile_get_visible','tile_get_width',
        -            'tile_get_x','tile_get_xscale','tile_get_y','tile_get_yscale','tile_layer_delete','tile_layer_delete_at','tile_layer_depth','tile_layer_find','tile_layer_hide','tile_layer_shift','tile_layer_show','tile_set_alpha',
        -            'tile_set_background','tile_set_blend','tile_set_depth','tile_set_position','tile_set_region','tile_set_scale','tile_set_visible','timeline_add','timeline_clear','timeline_delete','timeline_exists','timeline_get_name',
        -            'timeline_moment_clear','url_get_domain','url_open','url_open_ext','url_open_full','vertex_argb','vertex_begin','vertex_colour','vertex_create_buffer','vertex_create_buffer_ext','vertex_delete_buffer','vertex_end',
        -            'vertex_float1','vertex_float2','vertex_float3','vertex_float4','vertex_format_add_colour','vertex_format_add_custom','vertex_format_add_normal','vertex_format_add_position','vertex_format_add_position_3d',
        -            'vertex_format_add_textcoord','vertex_format_begin','vertex_format_end','vertex_freeze','vertex_normal','vertex_position','vertex_position_3d','vertex_submit','vertex_texcoord','vertex_ubyte4','virtual_key_add',
        -            'virtual_key_delete','virtual_key_hide','virtual_key_show','win8_appbar_add_element','win8_appbar_enable','win8_appbar_remove_element','win8_device_touchscreen_available','win8_license_initialize_sandbox',
        -            'win8_license_trial_version','win8_livetile_badge_clear','win8_livetile_badge_notification','win8_livetile_notification_begin','win8_livetile_notification_end','win8_livetile_notification_expiry',
        -            'win8_livetile_notification_image_add','win8_livetile_notification_secondary_begin','win8_livetile_notification_tag','win8_livetile_notification_text_add','win8_livetile_queue_enable','win8_livetile_tile_clear',
        -            'win8_livetile_tile_notification','win8_search_add_suggestions','win8_search_disable','win8_search_enable','win8_secondarytile_badge_notification','win8_secondarytile_delete','win8_secondarytile_pin',
        -            'win8_settingscharm_add_entry','win8_settingscharm_add_html_entry','win8_settingscharm_add_xaml_entry','win8_settingscharm_get_xaml_property','win8_settingscharm_remove_entry','win8_settingscharm_set_xaml_property',
        -            'win8_share_file','win8_share_image','win8_share_screenshot','win8_share_text','win8_share_url','window_center','window_get_caption','window_get_color','window_get_cursor','window_get_fullscreen','window_get_height',
        -            'window_get_width','window_get_x','window_get_y','window_handle','window_has_focus','window_mouse_get_x','window_mouse_get_y','window_mouse_set','window_set_caption','window_set_color','window_set_cursor',
        -            'window_set_fullscreen','window_set_position','window_set_rectangle','window_set_size','window_view_mouse_get_x','window_view_mouse_get_y','window_views_mouse_get_x','window_views_mouse_get_y',
        -            'winphone_license_trial_version','winphone_tile_back_content','winphone_tile_back_content_wide','winphone_tile_back_image','winphone_tile_back_image_wide','winphone_tile_back_title','winphone_tile_background_color',
        -            'winphone_tile_count','winphone_tile_cycle_images','winphone_tile_front_image','winphone_tile_front_image_small','winphone_tile_front_image_wide','winphone_tile_icon_image','winphone_tile_small_background_image',
        -            'winphone_tile_small_icon_image','winphone_tile_title','winphone_tile_wide_content','zip_unzip'
        -            ),
        -
        -        // Constants
        -        3 => array(
        -            'ANSI_CHARSET','ARABIC_CHARSET','BALTIC_CHARSET','CHINESEBIG5_CHARSET','DEFAULT_CHARSET','EASTEUROPE_CHARSET','GB2312_CHARSET','GREEK_CHARSET','HANGEUL_CHARSET','HEBREW_CHARSET','JOHAB_CHARSET',
        -            'MAC_CHARSET','OEM_CHARSET','RUSSIAN_CHARSET','SHIFTJIS_CHARSET','SYMBOL_CHARSET','THAI_CHARSET','TURKISH_CHARSET','VIETNAMESE_CHARSET','achievement_achievement_info','achievement_challenge_completed',
        -            'achievement_challenge_completed_by_remote','achievement_challenge_launched','achievement_challenge_list_received','achievement_challenge_received','achievement_filter_all_players',
        -            'achievement_filter_friends_only','achievement_friends_info','achievement_leaderboard_info','achievement_our_info','achievement_pic_loaded','achievement_player_info','achievement_purchase_info',
        -            'achievement_show_achievement','achievement_show_bank','achievement_show_friend_picker','achievement_show_leaderboard','achievement_show_profile','achievement_show_purchase_prompt','achievement_show_ui',
        -            'achievement_type_achievement_challenge','achievement_type_score_challenge','all','asset_background','asset_font','asset_object','asset_path','asset_room','asset_script','asset_sound','asset_sprite',
        -            'asset_timeline','asset_unknown','audio_falloff_exponent_distance','audio_falloff_exponent_distance_clamped','audio_falloff_inverse_distance','audio_falloff_inverse_distance_clamped',
        -            'audio_falloff_linear_distance','audio_falloff_linear_distance_clamped','audio_falloff_none','audio_new_system','audio_old_system','bm_add','bm_dest_alpha','bm_dest_color','bm_inv_dest_alpha',
        -            'bm_inv_dest_color','bm_inv_src_alpha','bm_inv_src_color','bm_max','bm_normal','bm_one','bm_src_alpha','bm_src_alpha_sat','bm_src_color','bm_subtract','bm_zero','browser_chrome',
        -            'browser_firefox','browser_ie','browser_ie_mobile','browser_not_a_browser','browser_opera','browser_safari','browser_safari_mobile','browser_tizen','browser_unknown','browser_windows_store','buffer_bool',
        -            'buffer_f16','buffer_f32','buffer_f64','buffer_fast','buffer_fixed','buffer_generalerror','buffer_grow','buffer_invalidtype','buffer_outofbounds','buffer_outofspace','buffer_s16','buffer_s32','buffer_s8',
        -            'buffer_seek_end','buffer_seek_relative','buffer_seek_start','buffer_string','buffer_u16','buffer_u32','buffer_u8','buffer_vbuffer','buffer_wrap','button_type','c_aqua','c_black','c_blue','c_dkgray',
        -            'c_fuchsia','c_gray','c_green','c_lime','c_ltgray','c_maroon','c_navy','c_olive','c_orange','c_purple','c_red','c_silver','c_teal','c_white','c_yellow','cr_appstart','cr_arrow','cr_beam','cr_cross',
        -            'cr_default','cr_drag','cr_handpoint','cr_help','cr_hourglass','cr_hsplit','cr_multidrag','cr_no','cr_nodrop','cr_none','cr_size_all','cr_size_nesw','cr_size_ns','cr_size_nwse','cr_size_we','cr_sqlwait',
        -            'cr_uparrow','cr_vsplit','device_emulator','device_ios_ipad','device_ios_ipad_retina','device_ios_iphone','device_ios_iphone5','device_ios_iphone_retina','device_ios_unknown','device_tablet','display_landscape',
        -            'display_landscape_flipped','display_portrait','display_portrait_flipped','dll_cdecl','dll_stdcall','ds_type_grid','ds_type_list','ds_type_map','ds_type_priority','ds_type_queue','ds_type_stack','e','ef_cloud',
        -            'ef_ellipse','ef_explosion','ef_firework','ef_flare','ef_rain','ef_ring','ef_smoke','ef_smokeup','ef_snow','ef_spark','ef_star','ev_alarm','ev_animation_end','ev_boundary','ev_close_button','ev_collision',
        -            'ev_create','ev_destroy','ev_draw','ev_end_of_path','ev_game_end','ev_game_start','ev_global_left_button','ev_global_left_press','ev_global_left_release','ev_global_middle_button','ev_global_middle_press',
        -            'ev_global_middle_release','ev_global_press','ev_global_release','ev_global_right_button','ev_global_right_press','ev_global_right_release','ev_gui','ev_joystick1_button1','ev_joystick1_button2',
        -            'ev_joystick1_button3','ev_joystick1_button4','ev_joystick1_button5','ev_joystick1_button6','ev_joystick1_button7','ev_joystick1_button8','ev_joystick1_down','ev_joystick1_left','ev_joystick1_right',
        -            'ev_joystick1_up','ev_joystick2_button1','ev_joystick2_button2','ev_joystick2_button3','ev_joystick2_button4','ev_joystick2_button5','ev_joystick2_button6','ev_joystick2_button7','ev_joystick2_button8',
        -            'ev_joystick2_down','ev_joystick2_left','ev_joystick2_right','ev_joystick2_up','ev_keyboard','ev_keypress','ev_keyrelease','ev_left_button','ev_left_press','ev_left_release','ev_middle_button',
        -            'ev_middle_press','ev_middle_release','ev_mouse','ev_mouse_enter','ev_mouse_leave','ev_mouse_wheel_down','ev_mouse_wheel_up','ev_no_button','ev_no_more_health','ev_no_more_lives','ev_other','ev_outside',
        -            'ev_right_button','ev_right_press','ev_right_release','ev_room_end','ev_room_start','ev_step','ev_step_begin','ev_step_end','ev_step_normal','ev_trigger','ev_user0','ev_user1','ev_user10','ev_user11',
        -            'ev_user12','ev_user13','ev_user14','ev_user15','ev_user2','ev_user3','ev_user4','ev_user5','ev_user6','ev_user7','ev_user8','ev_user9','fa_archive','fa_bottom','fa_center','fa_directory','fa_hidden',
        -            'fa_left','fa_middle','fa_readonly','fa_right','fa_sysfile','fa_top','fa_volumeid','false','gp_axislh','gp_axislv','gp_axisrh','gp_axisrv','gp_face1','gp_face2','gp_face3','gp_face4','gp_padd',
        -            'gp_padl','gp_padr','gp_padu','gp_select','gp_shoulderl','gp_shoulderlb','gp_shoulderr','gp_shoulderrb','gp_start','gp_stickl','gp_stickr','input_type','lb_disp_none','lb_disp_numeric','lb_disp_time_ms',
        -            'lb_disp_time_sec','lb_sort_ascending','lb_sort_descending','lb_sort_none','leaderboard_type_number','leaderboard_type_time_mins_secs','matrix_projection','matrix_view','matrix_world','mb_any',
        -            'mb_left','mb_middle','mb_none','mb_right','network_socket_bluetooth','network_socket_tcp','network_socket_udp','network_type_connect','network_type_data','network_type_disconnect',
        -            'of_challenge_lose','of_challenge_tie','of_challenge_win','os_android','os_ios','os_linux','os_macosx','os_psp','os_symbian','os_tizen','os_unknown','os_win32','os_win8native','os_windows','os_winphone',
        -            'ov_achievements','ov_community','ov_friends','ov_gamegroup','ov_players','ov_settings','phy_debug_render_aabb','phy_debug_render_collision_pairs','phy_debug_render_coms',
        -            'phy_debug_render_core_shapes','phy_debug_render_joints','phy_debug_render_obb','phy_debug_render_shapes','phy_joint_anchor_1_x','phy_joint_anchor_1_y','phy_joint_anchor_2_x','phy_joint_anchor_2_y',
        -            'phy_joint_angle','phy_joint_angle_limits','phy_joint_damping_ratio','phy_joint_frequency','phy_joint_length_1','phy_joint_length_2','phy_joint_lower_angle_limit','phy_joint_max_motor_force',
        -            'phy_joint_max_motor_torque','phy_joint_motor_force','phy_joint_motor_speed','phy_joint_motor_torque','phy_joint_reaction_force_x','phy_joint_reaction_force_y','phy_joint_reaction_torque','phy_joint_speed',
        -            'phy_joint_translation','phy_joint_upper_angle_limit','pi','pr_linelist','pr_linestrip','pr_pointlist','pr_trianglefan','pr_trianglelist','pr_trianglestrip','ps_change_all','ps_change_motion',
        -            'ps_change_shape','ps_deflect_horizontal','ps_deflect_vertical','ps_distr_gaussian','ps_distr_invgaussian','ps_distr_linear','ps_force_constant','ps_force_linear','ps_force_quadratic','ps_shape_diamond',
        -            'ps_shape_ellipse','ps_shape_line','ps_shape_rectangle','pt_shape_circle','pt_shape_cloud','pt_shape_disk','pt_shape_explosion','pt_shape_flare','pt_shape_line','pt_shape_pixel','pt_shape_ring',
        -            'pt_shape_smoke','pt_shape_snow','pt_shape_spark','pt_shape_sphere','pt_shape_square','pt_shape_star','se_chorus','se_compressor','se_echo','se_equalizer','se_flanger','se_gargle','se_none','se_reverb',
        -            'text_type','true','ty_real','ty_string','vertex_type_colour','vertex_type_float1','vertex_type_float2','vertex_type_float3','vertex_type_float4','vertex_type_ubyte4','vertex_usage_binormal',
        -            'vertex_usage_blendindices','vertex_usage_blendweight','vertex_usage_colour','vertex_usage_depth','vertex_usage_fog','vertex_usage_normal','vertex_usage_position','vertex_usage_psize','vertex_usage_sample',
        -            'vertex_usage_tagnet','vertex_usage_textcoord','vk_add','vk_alt','vk_anykey','vk_backspace','vk_control','vk_decimal','vk_delete','vk_divide','vk_down','vk_end','vk_enter','vk_escape','vk_f1','vk_f10',
        -            'vk_f11','vk_f12','vk_f2','vk_f3','vk_f4','vk_f5','vk_f6','vk_f7','vk_f8','vk_f9','vk_home','vk_insert','vk_lalt','vk_lcontrol','vk_left','vk_lshift','vk_multiply','vk_nokey','vk_numpad0','vk_numpad1',
        -            'vk_numpad2','vk_numpad3','vk_numpad4','vk_numpad5','vk_numpad6','vk_numpad7','vk_numpad8','vk_numpad9','vk_pagedown','vk_pageup','vk_pause','vk_printscreen','vk_ralt','vk_rcontrol','vk_return','vk_right',
        -            'vk_rshift','vk_shift','vk_space','vk_subtract','vk_tab','vk_up'
        -            ),
        -
        -        // Keywords
        -        4 => array(
        -            'if','while','do','until','exit','break','continue','for','switch','case','default',
        -            'else','then','begin','end','repeat','switch','var','globalvar','with','div','mod',
        -            'self','noone','other','all','global','local','return',
        -            'and','or','xor','not'
        -            )
        -        ),
        -
        -    'SYMBOLS' => array(
        -        // Angled brackets
        -        0 => array('{','}'),
        -        // Other brackets
        -        1 => array('(',')','[',']'),
        -        // Operators (NOTE: Operators and/or/not/xor are included in the keywords section. These are non-alphanumeric operators
        -        2 => array('&&', '||', '^^', '&', '|', '^',
        -            '<', '<=', '==', '!=', '>', '>=', '=',
        -            '<<', '>>',
        -            '+=', '-=', '*=', '/=',
        -            '+', '-', '*', '/',
        -            '!', '~', ',', ';'
        -        )),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #800000;',
        -            2 => 'color: #800000;',
        -            3 => 'color: #800000;',
        -            4 => 'color: #000080; font-weight: bold;'),
        -        'COMMENTS' => array(
        -            1 => 'font-style: italic; color: #008000;',
        -            'MULTI' => 'font-style: italic; color: #008000;'),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''),
        -        'BRACKETS' => array(
        -            0 => 'color: #000080;'),
        -        'STRINGS' => array(
        -            0 => 'color: #0000FF;',
        -            1 => 'color: #0000FF;'),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000FF;'),
        -        'METHODS' => array(
        -            0 => 'color: #800000;'),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000080; font-weight: bold;',
        -            1 => 'color: #000000;',
        -            2 => 'color: #000000;'),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php
        deleted file mode 100644
        index 27a2a639..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php
        +++ /dev/null
        @@ -1,294 +0,0 @@
        - 'Gnuplot',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('`', '"', "'"),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC |
        -        GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_SCI_SHORT |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        // copy output of help command, indent properly and use this replace regexp:
        -        // ([a-z0-9_\-]+)(( )+|$)          =>     '\1',\3
        -
        -        // commands as found in `help commands`
        -        1 => array(
        -            'bind', 'call', 'cd', 'clear',
        -            'exit', 'fit', 'help', 'history',
        -            'if', 'load', 'lower', 'pause',
        -            'plot', 'print', 'pwd', 'quit',
        -            'raise', 'replot', 'reread', 'reset',
        -            'save', 'set', 'shell', 'show',
        -            'splot', 'system', 'test', 'unset',
        -            'update'
        -            ),
        -        2 => array(
        -            // set commands as returned by `help set`
        -            'angles', 'arrow', 'autoscale', 'bars',
        -            'bmargin', 'border', 'boxwidth', 'cbdata',
        -            'cbdtics', 'cblabel', 'cbmtics', 'cbrange',
        -            'cbtics', 'clabel', 'clip', 'cntrparam',
        -            'colorbox', 'contour', 'datafile', 'date_specifiers',
        -            'decimalsign', 'dgrid3d', 'dummy', 'encoding',
        -            'fontpath', 'format', 'grid',
        -            'hidden3d', 'historysize', 'isosamples', 'key',
        -            'label', 'lmargin', 'loadpath', 'locale',
        -            'log', 'logscale', 'macros', 'mapping',
        -            'margin', 'missing', 'mouse', 'multiplot',
        -            'mx2tics', 'mxtics', 'my2tics', 'mytics',
        -            'mztics', 'object', 'offsets', 'origin',
        -            'output', 'palette', 'parametric', 'pm3d',
        -            'pointsize', 'polar', 'rmargin',
        -            'rrange', 'samples', 'size', 'style',
        -            'surface', 'table', 'term', 'terminal',
        -            'termoption', 'tics', 'ticscale', 'ticslevel',
        -            'time_specifiers', 'timefmt', 'timestamp', 'title',
        -            'trange', 'urange', 'view',
        -            'vrange', 'x2data', 'x2dtics', 'x2label',
        -            'x2mtics', 'x2range', 'x2tics', 'x2zeroaxis',
        -            'xdata', 'xdtics', 'xlabel', 'xmtics',
        -            'xrange', 'xtics', 'xyplane', 'xzeroaxis',
        -            'y2data', 'y2dtics', 'y2label', 'y2mtics',
        -            'y2range', 'y2tics', 'y2zeroaxis', 'ydata',
        -            'ydtics', 'ylabel', 'ymtics', 'yrange',
        -            'ytics', 'yzeroaxis', 'zdata', 'zdtics',
        -            'zero', 'zeroaxis', 'zlabel', 'zmtics',
        -            'zrange', 'ztics', 'zzeroaxis',
        -            // same but with leading no
        -            'noangles', 'noarrow', 'noautoscale', 'nobars',
        -            'nobmargin', 'noborder', 'noboxwidth', 'nocbdata',
        -            'nocbdtics', 'nocblabel', 'nocbmtics', 'nocbrange',
        -            'nocbtics', 'noclabel', 'noclip', 'nocntrparam',
        -            'nocolorbox', 'nocontour', 'nodatafile', 'nodate_specifiers',
        -            'nodecimalsign', 'nodgrid3d', 'nodummy', 'noencoding',
        -            'nofit', 'nofontpath', 'noformat', 'nogrid',
        -            'nohidden3d', 'nohistorysize', 'noisosamples', 'nokey',
        -            'nolabel', 'nolmargin', 'noloadpath', 'nolocale',
        -            'nolog', 'nologscale', 'nomacros', 'nomapping',
        -            'nomargin', 'nomissing', 'nomouse', 'nomultiplot',
        -            'nomx2tics', 'nomxtics', 'nomy2tics', 'nomytics',
        -            'nomztics', 'noobject', 'nooffsets', 'noorigin',
        -            'nooutput', 'nopalette', 'noparametric', 'nopm3d',
        -            'nopointsize', 'nopolar', 'noprint', 'normargin',
        -            'norrange', 'nosamples', 'nosize', 'nostyle',
        -            'nosurface', 'notable', 'noterm', 'noterminal',
        -            'notermoption', 'notics', 'noticscale', 'noticslevel',
        -            'notime_specifiers', 'notimefmt', 'notimestamp', 'notitle',
        -            'notmargin', 'notrange', 'nourange', 'noview',
        -            'novrange', 'nox2data', 'nox2dtics', 'nox2label',
        -            'nox2mtics', 'nox2range', 'nox2tics', 'nox2zeroaxis',
        -            'noxdata', 'noxdtics', 'noxlabel', 'noxmtics',
        -            'noxrange', 'noxtics', 'noxyplane', 'noxzeroaxis',
        -            'noy2data', 'noy2dtics', 'noy2label', 'noy2mtics',
        -            'noy2range', 'noy2tics', 'noy2zeroaxis', 'noydata',
        -            'noydtics', 'noylabel', 'noymtics', 'noyrange',
        -            'noytics', 'noyzeroaxis', 'nozdata', 'nozdtics',
        -            'nozero', 'nozeroaxis', 'nozlabel', 'nozmtics',
        -            'nozrange', 'noztics', 'nozzeroaxis',
        -            ),
        -        3 => array(
        -            // predefined variables
        -            'pi', 'NaN', 'GNUTERM',
        -            'GPVAL_X_MIN', 'GPVAL_X_MAX', 'GPVAL_Y_MIN', 'GPVAL_Y_MAX',
        -            'GPVAL_TERM', 'GPVAL_TERMOPTIONS', 'GPVAL_OUTPUT',
        -            'GPVAL_VERSION', 'GPVAL_PATcHLEVEL', 'GPVAL_COMPILE_OPTIONS',
        -            'MOUSE_KEY', 'MOUSE_X', 'MOUSE_X2', 'MOUSE_Y', 'MOUSE_Y2',
        -            'MOUSE_BUTTON', 'MOUSE_SHIFT', 'MOUSE_ALT', 'MOUSE_CTRL'
        -            ),
        -        4 => array(
        -            // predefined functions `help functions`
        -            'abs', 'acos', 'acosh', 'arg',
        -            'asin', 'asinh', 'atan', 'atan2',
        -            'atanh', 'besj0', 'besj1', 'besy0',
        -            'besy1', 'ceil', 'column', 'cos',
        -            'cosh', 'defined', 'erf', 'erfc',
        -            'exists', 'exp', 'floor', 'gamma',
        -            'gprintf', 'ibeta', 'igamma', 'imag',
        -            'int', 'inverf', 'invnorm', 'lambertw',
        -            'lgamma', 'log10', 'norm',
        -            'rand', 'random', 'real', 'sgn',
        -            'sin', 'sinh', 'sprintf', 'sqrt',
        -            'stringcolumn', 'strlen', 'strstrt', 'substr',
        -            'tan', 'tanh', 'timecolumn',
        -            'tm_hour', 'tm_mday', 'tm_min', 'tm_mon',
        -            'tm_sec', 'tm_wday', 'tm_yday', 'tm_year',
        -            'valid', 'word', 'words',
        -            ),
        -        5 => array(
        -            // mixed arguments
        -            // there is no sane way to get these ones easily...
        -            'autofreq', 'x', 'y', 'z',
        -            'lt', 'linetype', 'lw', 'linewidth', 'ls', 'linestyle',
        -            'out', 'rotate by', 'screen',
        -            'enhanced', 'via',
        -            // `help set key`
        -            'on', 'off', 'default', 'inside', 'outside', 'tmargin',
        -            'at', 'left', 'right', 'center', 'top', 'bottom', 'vertical', 'horizontal', 'Left', 'Right',
        -            'noreverse', 'reverse', 'noinvert', 'invert', 'samplen', 'spacing', 'width', 'height',
        -            'noautotitle', 'autotitle', 'noenhanced', 'nobox', 'box',
        -
        -            // help set terminal postscript
        -            'landscape', 'portrait', 'eps', 'defaultplex', 'simplex', 'duplex',
        -            'fontfile', 'add', 'delete', 'nofontfiles', 'level1', 'leveldefault',
        -            'color', 'colour', 'monochrome', 'solid', 'dashed', 'dashlength', 'dl',
        -            'rounded', 'butt', 'palfuncparam', 'blacktext', 'colortext', 'colourtext',
        -            'font',
        -
        -            // help set terminal png
        -            'notransparent', 'transparent', 'nointerlace', 'interlace',
        -            'notruecolor', 'truecolor', 'tiny', 'small', 'medium', 'large', 'giant',
        -            'nocrop', 'crop',
        -
        -            // `help plot`
        -            'acsplines', 'bezier', 'binary', 'csplines',
        -            'every',
        -            'example', 'frequency', 'index', 'matrix',
        -            'ranges', 'sbezier', 'smooth',
        -            'special-filenames', 'thru',
        -            'unique', 'using', 'with',
        -
        -            // `help plotting styles`
        -            'boxerrorbars', 'boxes', 'boxxyerrorbars', 'candlesticks',
        -            'dots', 'errorbars', 'errorlines', 'filledcurves',
        -            'financebars', 'fsteps', 'histeps', 'histograms',
        -            'image', 'impulses', 'labels', 'lines',
        -            'linespoints', 'points', 'rgbimage', 'steps',
        -            'vectors', 'xerrorbars', 'xerrorlines', 'xyerrorbars',
        -            'xyerrorlines', 'yerrorbars', 'yerrorlines',
        -
        -
        -            // terminals `help terminals`
        -            'aed512', 'aed767', 'aifm', 'bitgraph',
        -            'cgm', 'corel', 'dumb', 'dxf',
        -            'eepic', 'emf', 'emtex', 'epslatex',
        -            'epson-180dpi', 'epson-60dpi', 'epson-lx800', 'fig',
        -            'gif', 'gpic', 'hp2623a', 'hp2648',
        -            'hp500c', 'hpdj', 'hpgl', 'hpljii',
        -            'hppj', 'imagen', 'jpeg', 'kc-tek40xx',
        -            'km-tek40xx', 'latex', 'mf', 'mif',
        -            'mp', 'nec-cp6', 'okidata', 'pbm',
        -            'pcl5', 'png', 'pop', 'postscript',
        -            'pslatex', 'pstex', 'pstricks', 'push',
        -            'qms', 'regis', 'selanar', 'starc',
        -            'svg', 'tandy-60dpi', 'tek40xx', 'tek410x',
        -            'texdraw', 'tgif', 'tkcanvas', 'tpic',
        -            'vttek', 'x11', 'xlib',
        -            )
        -        ),
        -    'REGEXPS' => array(
        -        //Variable assignment
        -        0 => "(?\w])([a-zA-Z_][a-zA-Z0-9_]*)\s*=",
        -        //Numbers with unit
        -        1 => "(?<=^|\s)([0-9]*\.?[0-9]+\s*cm)"
        -        ),
        -    'SYMBOLS' => array(
        -        '-', '+', '~', '!', '$',
        -        '*', '/', '%', '=', '<', '>', '&',
        -        '^', '|', '.', 'eq', 'ne', '?:', ':', '`', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #990000;',
        -            3 => 'color: #550000;',
        -            4 => 'color: #7a0874;',
        -            5 => 'color: #448888;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight:bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000099; font-weight:bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #007800;',
        -            1 => 'color: #cc66cc;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => 'http://www.google.com/search?q=%22set+{FNAME}%22+site%3Ahttp%3A%2F%2Fwww.gnuplot.info%2Fdocs%2F&btnI=lucky',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            4 => array(
        -                'DISALLOWED_AFTER' =>  "(?![\.\-a-zA-Z0-9_%])"
        -            )
        -        )
        -    ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php
        deleted file mode 100644
        index 7f1b825f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php
        +++ /dev/null
        @@ -1,373 +0,0 @@
        - 'Go',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        # Raw strings (escapes and linebreaks ignored)
        -        2 => "#`[^`]*`#"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'"),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        1 => "#\\\\[abfnrtv\\\\\'\"]#",
        -        2 => "#\\\\[0-7]{3}#",
        -        3 => "#\\\\x[0-9a-fA-F]{2}#",
        -        4 => "#\\\\u[0-9a-fA-F]{4}#",
        -        5 => "#\\\\U[0-9a-fA-F]{8}#"
        -        ),
        -    'NUMBERS' => array(
        -        # integer literals (possibly imaginary)
        -        0 => '\b([1-9][0-9]*i?|0[0-7]*|0[xX][0-9a-f]+|0[0-9]*i)\b',
        -        # real floating point literals
        -        1 => '\b((?:\d+\.\d*(?:[Ee][+-]?\d+\b)?|\.\d+(?:[Ee][+-]?\d+)?|\d+[Ee][+-]?\d+)?)\b',
        -        # imaginary floating point literals
        -        2 => '\b((?:\d+\.\d*(?:[Ee][+-]?\d+)?|\.\d+(?:[Ee][+-]?\d+)?|\d+[Ee][+-]?\d+)?i)\b'
        -        ),
        -    'KEYWORDS' => array(
        -        # statements
        -        1 => array(
        -            'break', 'case', 'const', 'continue', 'default', 'defer', 'else',
        -            'fallthrough', 'for', 'go', 'goto', 'if', 'import', 'package',
        -            'range', 'return', 'select', 'switch', 'type', 'var'
        -            ),
        -        # literals
        -        2 => array(
        -            'nil', 'true', 'false'
        -            ),
        -        # built-in functions
        -        3 => array(
        -            'close', 'closed', 'len', 'cap', 'new', 'make', 'copy', 'cmplx',
        -            'real', 'imag', 'panic', 'recover', 'print', 'println'
        -            ),
        -        # built-in types
        -        4 => array(
        -            'chan', 'func', 'interface', 'map', 'struct', 'bool', 'uint8',
        -            'uint16', 'uint32', 'uint64', 'int8', 'int16', 'int32', 'int64',
        -            'float32', 'float64', 'complex64', 'complex128', 'byte', 'uint',
        -            'int', 'float', 'complex', 'uintptr', 'string'
        -            ),
        -        # library types
        -        5 => array(
        -            'aes.Cipher', 'aes.KeySizeError', 'ascii85.CorruptInputError', 'asn1.BitString',
        -            'asn1.RawValue', 'asn1.StructuralError', 'asn1.SyntaxError', 'ast.ChanDir',
        -            'ast.Comment', 'ast.CommentGroup', 'ast.Decl', 'ast.Expr', 'ast.Field',
        -            'ast.FieldList', 'ast.File', 'ast.Filter', 'ast.MergeMode', 'ast.Node',
        -            'ast.ObjKind', 'ast.Object', 'ast.Package', 'ast.Scope', 'ast.Stmt',
        -            'ast.Visitor', 'av.Color', 'av.Image', 'av.Window', 'base64.CorruptInputError',
        -            'base64.Encoding', 'big.Int', 'big.Word', 'bignum.Integer', 'bignum.Rational',
        -            'binary.ByteOrder', 'block.Cipher', 'block.EAXTagError', 'blowfish.Cipher',
        -            'blowfish.KeySizeError', 'bufio.BufSizeError', 'bufio.Error', 'bufio.ReadWriter',
        -            'bufio.Reader', 'bufio.Writer', 'bytes.Buffer', 'datafmt.Environment',
        -            'datafmt.Format', 'datafmt.Formatter', 'datafmt.FormatterMap', 'datafmt.State',
        -            'doc.Filter', 'doc.FuncDoc', 'doc.PackageDoc', 'doc.TypeDoc', 'doc.ValueDoc',
        -            'draw.Color', 'draw.Context', 'draw.Image', 'draw.Mouse', 'draw.Op',
        -            'draw.Point', 'draw.Rectangle', 'dwarf.AddrType', 'dwarf.ArrayType',
        -            'dwarf.Attr', 'dwarf.BasicType', 'dwarf.BoolType', 'dwarf.CharType',
        -            'dwarf.CommonType', 'dwarf.ComplexType', 'dwarf.Data', 'dwarf.DecodeError',
        -            'dwarf.DotDotDotType', 'dwarf.Entry', 'dwarf.EnumType', 'dwarf.EnumValue',
        -            'dwarf.Field', 'dwarf.FloatType', 'dwarf.FuncType', 'dwarf.IntType',
        -            'dwarf.Offset', 'dwarf.PtrType', 'dwarf.QualType', 'dwarf.Reader',
        -            'dwarf.StructField', 'dwarf.StructType', 'dwarf.Tag', 'dwarf.Type',
        -            'dwarf.TypedefType', 'dwarf.UcharType', 'dwarf.UintType', 'dwarf.VoidType',
        -            'elf.Class', 'elf.Data', 'elf.Dyn32', 'elf.Dyn64', 'elf.DynFlag', 'elf.DynTag',
        -            'elf.File', 'elf.FileHeader', 'elf.FormatError', 'elf.Header32', 'elf.Header64',
        -            'elf.Machine', 'elf.NType', 'elf.OSABI', 'elf.Prog', 'elf.Prog32', 'elf.Prog64',
        -            'elf.ProgFlag', 'elf.ProgHeader', 'elf.ProgType', 'elf.R_386', 'elf.R_ALPHA',
        -            'elf.R_ARM', 'elf.R_PPC', 'elf.R_SPARC', 'elf.R_X86_64', 'elf.Rel32',
        -            'elf.Rel64', 'elf.Rela32', 'elf.Rela64', 'elf.Section', 'elf.Section32',
        -            'elf.Section64', 'elf.SectionFlag', 'elf.SectionHeader', 'elf.SectionIndex',
        -            'elf.SectionType', 'elf.Sym32', 'elf.Sym64', 'elf.SymBind', 'elf.SymType',
        -            'elf.SymVis', 'elf.Symbol', 'elf.Type', 'elf.Version', 'eval.ArrayType',
        -            'eval.ArrayValue', 'eval.BoolValue', 'eval.BoundedType', 'eval.ChanType',
        -            'eval.Code', 'eval.Constant', 'eval.Def', 'eval.DivByZeroError',
        -            'eval.FloatValue', 'eval.Frame', 'eval.Func', 'eval.FuncDecl', 'eval.FuncType',
        -            'eval.FuncValue', 'eval.IMethod', 'eval.IdealFloatValue', 'eval.IdealIntValue',
        -            'eval.IndexError', 'eval.IntValue', 'eval.Interface', 'eval.InterfaceType',
        -            'eval.InterfaceValue', 'eval.KeyError', 'eval.Map', 'eval.MapType',
        -            'eval.MapValue', 'eval.Method', 'eval.MultiType', 'eval.NamedType',
        -            'eval.NegativeCapacityError', 'eval.NegativeLengthError', 'eval.NilPointerError',
        -            'eval.PtrType', 'eval.PtrValue', 'eval.RedefinitionError', 'eval.Scope',
        -            'eval.Slice', 'eval.SliceError', 'eval.SliceType', 'eval.SliceValue',
        -            'eval.StringValue', 'eval.StructField', 'eval.StructType', 'eval.StructValue',
        -            'eval.Thread', 'eval.Type', 'eval.UintValue', 'eval.Value', 'eval.Variable',
        -            'eval.World', 'exec.Cmd', 'expvar.Int', 'expvar.IntFunc', 'expvar.KeyValue',
        -            'expvar.Map', 'expvar.String', 'expvar.StringFunc', 'expvar.Var', 'flag.Flag',
        -            'flag.Value', 'flate.CorruptInputError', 'flate.InternalError',
        -            'flate.ReadError', 'flate.Reader', 'flate.WriteError', 'flate.WrongValueError',
        -            'fmt.Formatter', 'fmt.GoStringer', 'fmt.State', 'fmt.Stringer',
        -            'git85.CorruptInputError', 'gob.Decoder', 'gob.Encoder', 'gosym.DecodingError',
        -            'gosym.Func', 'gosym.LineTable', 'gosym.Obj', 'gosym.Sym', 'gosym.Table',
        -            'gosym.UnknownFileError', 'gosym.UnknownLineError', 'gzip.Deflater',
        -            'gzip.Header', 'gzip.Inflater', 'hash.Hash', 'hash.Hash32', 'hash.Hash64',
        -            'heap.Interface', 'hex.InvalidHexCharError', 'hex.OddLengthInputError',
        -            'http.ClientConn', 'http.Conn', 'http.Handler', 'http.HandlerFunc',
        -            'http.ProtocolError', 'http.Request', 'http.Response', 'http.ServeMux',
        -            'http.ServerConn', 'http.URL', 'http.URLError', 'http.URLEscapeError',
        -            'image.Alpha', 'image.AlphaColor', 'image.Color', 'image.ColorImage',
        -            'image.ColorModel', 'image.ColorModelFunc', 'image.Image', 'image.NRGBA',
        -            'image.NRGBA64', 'image.NRGBA64Color', 'image.NRGBAColor', 'image.Paletted',
        -            'image.RGBA', 'image.RGBA64', 'image.RGBA64Color', 'image.RGBAColor',
        -            'io.Closer', 'io.Error', 'io.PipeReader', 'io.PipeWriter', 'io.ReadByter',
        -            'io.ReadCloser', 'io.ReadSeeker', 'io.ReadWriteCloser', 'io.ReadWriteSeeker',
        -            'io.ReadWriter', 'io.Reader', 'io.ReaderAt', 'io.ReaderFrom', 'io.SectionReader',
        -            'io.Seeker', 'io.WriteCloser', 'io.WriteSeeker', 'io.Writer', 'io.WriterAt',
        -            'io.WriterTo', 'iterable.Func', 'iterable.Group', 'iterable.Grouper',
        -            'iterable.Injector', 'iterable.Iterable', 'jpeg.FormatError', 'jpeg.Reader',
        -            'jpeg.UnsupportedError', 'json.Decoder', 'json.Encoder',
        -            'json.InvalidUnmarshalError', 'json.Marshaler', 'json.MarshalerError',
        -            'json.SyntaxError', 'json.UnmarshalTypeError', 'json.Unmarshaler',
        -            'json.UnsupportedTypeError', 'list.Element', 'list.List', 'log.Logger',
        -            'macho.Cpu', 'macho.File', 'macho.FileHeader', 'macho.FormatError', 'macho.Load',
        -            'macho.LoadCmd', 'macho.Regs386', 'macho.RegsAMD64', 'macho.Section',
        -            'macho.Section32', 'macho.Section64', 'macho.SectionHeader', 'macho.Segment',
        -            'macho.Segment32', 'macho.Segment64', 'macho.SegmentHeader', 'macho.Thread',
        -            'macho.Type', 'net.Addr', 'net.AddrError', 'net.Conn', 'net.DNSConfigError',
        -            'net.DNSError', 'net.Error', 'net.InvalidAddrError', 'net.InvalidConnError',
        -            'net.Listener', 'net.OpError', 'net.PacketConn', 'net.TCPAddr', 'net.TCPConn',
        -            'net.TCPListener', 'net.UDPAddr', 'net.UDPConn', 'net.UnixAddr', 'net.UnixConn',
        -            'net.UnixListener', 'net.UnknownNetworkError', 'net.UnknownSocketError',
        -            'netchan.Dir', 'netchan.Exporter', 'netchan.Importer', 'nntp.Article',
        -            'nntp.Conn', 'nntp.Error', 'nntp.Group', 'nntp.ProtocolError', 'ogle.Arch',
        -            'ogle.ArchAlignedMultiple', 'ogle.ArchLSB', 'ogle.Breakpoint', 'ogle.Event',
        -            'ogle.EventAction', 'ogle.EventHandler', 'ogle.EventHook', 'ogle.FormatError',
        -            'ogle.Frame', 'ogle.Goroutine', 'ogle.GoroutineCreate', 'ogle.GoroutineExit',
        -            'ogle.NoCurrentGoroutine', 'ogle.NotOnStack', 'ogle.Process',
        -            'ogle.ProcessNotStopped', 'ogle.ReadOnlyError', 'ogle.RemoteMismatchError',
        -            'ogle.UnknownArchitecture', 'ogle.UnknownGoroutine', 'ogle.UsageError',
        -            'os.Errno', 'os.Error', 'os.ErrorString', 'os.File', 'os.FileInfo',
        -            'os.LinkError', 'os.PathError', 'os.SyscallError', 'os.Waitmsg', 'patch.Diff',
        -            'patch.File', 'patch.GitBinaryLiteral', 'patch.Op', 'patch.Set',
        -            'patch.SyntaxError', 'patch.TextChunk', 'patch.Verb', 'path.Visitor',
        -            'pdp1.HaltError', 'pdp1.LoopError', 'pdp1.Trapper', 'pdp1.UnknownInstrError',
        -            'pdp1.Word', 'pem.Block', 'png.FormatError', 'png.IDATDecodingError',
        -            'png.UnsupportedError', 'printer.Config', 'printer.HTMLTag', 'printer.Styler',
        -            'proc.Breakpoint', 'proc.Cause', 'proc.Process', 'proc.ProcessExited',
        -            'proc.Regs', 'proc.Signal', 'proc.Stopped', 'proc.Thread', 'proc.ThreadCreate',
        -            'proc.ThreadExit', 'proc.Word', 'quick.CheckEqualError', 'quick.CheckError',
        -            'quick.Config', 'quick.Generator', 'quick.SetupError', 'rand.Rand',
        -            'rand.Source', 'rand.Zipf', 'rc4.Cipher', 'rc4.KeySizeError',
        -            'reflect.ArrayOrSliceType', 'reflect.ArrayOrSliceValue', 'reflect.ArrayType',
        -            'reflect.ArrayValue', 'reflect.BoolType', 'reflect.BoolValue', 'reflect.ChanDir',
        -            'reflect.ChanType', 'reflect.ChanValue', 'reflect.Complex128Type',
        -            'reflect.Complex128Value', 'reflect.Complex64Type', 'reflect.Complex64Value',
        -            'reflect.ComplexType', 'reflect.ComplexValue', 'reflect.Float32Type',
        -            'reflect.Float32Value', 'reflect.Float64Type', 'reflect.Float64Value',
        -            'reflect.FloatType', 'reflect.FloatValue', 'reflect.FuncType',
        -            'reflect.FuncValue', 'reflect.Int16Type', 'reflect.Int16Value',
        -            'reflect.Int32Type', 'reflect.Int32Value', 'reflect.Int64Type',
        -            'reflect.Int64Value', 'reflect.Int8Type', 'reflect.Int8Value', 'reflect.IntType',
        -            'reflect.IntValue', 'reflect.InterfaceType', 'reflect.InterfaceValue',
        -            'reflect.MapType', 'reflect.MapValue', 'reflect.Method', 'reflect.PtrType',
        -            'reflect.PtrValue', 'reflect.SliceHeader', 'reflect.SliceType',
        -            'reflect.SliceValue', 'reflect.StringHeader', 'reflect.StringType',
        -            'reflect.StringValue', 'reflect.StructField', 'reflect.StructType',
        -            'reflect.StructValue', 'reflect.Type', 'reflect.Uint16Type',
        -            'reflect.Uint16Value', 'reflect.Uint32Type', 'reflect.Uint32Value',
        -            'reflect.Uint64Type', 'reflect.Uint64Value', 'reflect.Uint8Type',
        -            'reflect.Uint8Value', 'reflect.UintType', 'reflect.UintValue',
        -            'reflect.UintptrType', 'reflect.UintptrValue', 'reflect.UnsafePointerType',
        -            'reflect.UnsafePointerValue', 'reflect.Value', 'regexp.Error', 'regexp.Regexp',
        -            'ring.Ring', 'rpc.Call', 'rpc.Client', 'rpc.ClientCodec', 'rpc.InvalidRequest',
        -            'rpc.Request', 'rpc.Response', 'rpc.ServerCodec', 'rsa.DecryptionError',
        -            'rsa.MessageTooLongError', 'rsa.PKCS1v15Hash', 'rsa.PrivateKey', 'rsa.PublicKey',
        -            'rsa.VerificationError', 'runtime.ArrayType', 'runtime.BoolType',
        -            'runtime.ChanDir', 'runtime.ChanType', 'runtime.Complex128Type',
        -            'runtime.Complex64Type', 'runtime.ComplexType', 'runtime.Error',
        -            'runtime.Float32Type', 'runtime.Float64Type', 'runtime.FloatType',
        -            'runtime.Func', 'runtime.FuncType', 'runtime.Int16Type', 'runtime.Int32Type',
        -            'runtime.Int64Type', 'runtime.Int8Type', 'runtime.IntType',
        -            'runtime.InterfaceType', 'runtime.Itable', 'runtime.MapType',
        -            'runtime.MemProfileRecord', 'runtime.MemStatsType', 'runtime.PtrType',
        -            'runtime.SliceType', 'runtime.StringType', 'runtime.StructType', 'runtime.Type',
        -            'runtime.TypeAssertionError', 'runtime.Uint16Type', 'runtime.Uint32Type',
        -            'runtime.Uint64Type', 'runtime.Uint8Type', 'runtime.UintType',
        -            'runtime.UintptrType', 'runtime.UnsafePointerType', 'scanner.Error',
        -            'scanner.ErrorHandler', 'scanner.ErrorVector', 'scanner.Position',
        -            'scanner.Scanner', 'script.Close', 'script.Closed', 'script.Event',
        -            'script.ReceivedUnexpected', 'script.Recv', 'script.RecvMatch', 'script.Send',
        -            'script.SetupError', 'signal.Signal', 'signal.UnixSignal', 'sort.Interface',
        -            'srpc.Client', 'srpc.Errno', 'srpc.Handler', 'srpc.RPC', 'strconv.NumError',
        -            'strings.Reader', 'sync.Mutex', 'sync.RWMutex',
        -            'syscall.ByHandleFileInformation', 'syscall.Cmsghdr', 'syscall.Dirent',
        -            'syscall.EpollEvent', 'syscall.Fbootstraptransfer_t', 'syscall.FdSet',
        -            'syscall.Filetime', 'syscall.Flock_t', 'syscall.Fstore_t', 'syscall.Iovec',
        -            'syscall.Kevent_t', 'syscall.Linger', 'syscall.Log2phys_t', 'syscall.Msghdr',
        -            'syscall.Overlapped', 'syscall.PtraceRegs', 'syscall.Radvisory_t',
        -            'syscall.RawSockaddr', 'syscall.RawSockaddrAny', 'syscall.RawSockaddrInet4',
        -            'syscall.RawSockaddrInet6', 'syscall.RawSockaddrUnix', 'syscall.Rlimit',
        -            'syscall.Rusage', 'syscall.Sockaddr', 'syscall.SockaddrInet4',
        -            'syscall.SockaddrInet6', 'syscall.SockaddrUnix', 'syscall.Stat_t',
        -            'syscall.Statfs_t', 'syscall.Sysinfo_t', 'syscall.Time_t', 'syscall.Timespec',
        -            'syscall.Timeval', 'syscall.Timex', 'syscall.Tms', 'syscall.Ustat_t',
        -            'syscall.Utimbuf', 'syscall.Utsname', 'syscall.WaitStatus',
        -            'syscall.Win32finddata', 'syslog.Priority', 'syslog.Writer', 'tabwriter.Writer',
        -            'tar.Header', 'tar.Reader', 'tar.Writer', 'template.Error',
        -            'template.FormatterMap', 'template.Template', 'testing.Benchmark',
        -            'testing.Regexp', 'testing.Test', 'time.ParseError', 'time.Ticker', 'time.Time',
        -            'tls.CASet', 'tls.Certificate', 'tls.Config', 'tls.Conn', 'tls.ConnectionState',
        -            'tls.Listener', 'token.Position', 'token.Token', 'unicode.CaseRange',
        -            'unicode.Range', 'unsafe.ArbitraryType', 'vector.LessInterface',
        -            'websocket.Conn', 'websocket.Draft75Handler', 'websocket.Handler',
        -            'websocket.ProtocolError', 'websocket.WebSocketAddr', 'x509.Certificate',
        -            'x509.ConstraintViolationError', 'x509.KeyUsage', 'x509.Name',
        -            'x509.PublicKeyAlgorithm', 'x509.SignatureAlgorithm',
        -            'x509.UnhandledCriticalExtension', 'x509.UnsupportedAlgorithmError', 'xml.Attr',
        -            'xml.EndElement', 'xml.Name', 'xml.Parser', 'xml.ProcInst', 'xml.StartElement',
        -            'xml.SyntaxError', 'xml.Token', 'xml.UnmarshalError', 'xtea.Cipher',
        -            'xtea.KeySizeError'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        # delimiters
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']', ',', ':', ';'
        -            ),
        -        # assignments
        -        2 => array(
        -            '<<=', '!=', '%=', '&=', '&^=', '*=', '+=', '-=', '/=', ':=', '>>=',
        -            '^=', '|=', '=', '++', '--'
        -            ),
        -        # operators
        -        3 => array(
        -            '<=', '<', '==', '>', '>=', '&&', '!', '||', '&', '&^', '|', '^',
        -            '>>', '<<', '*', '%', '+', '-', '.', '/', '<-'),
        -        # vararg
        -        4 => array(
        -            '...'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            # statements
        -            1 => 'color: #b1b100; font-weight: bold;',
        -            # literals
        -            2 => 'color: #000000; font-weight: bold;',
        -            # built-in functions
        -            3 => 'color: #000066;',
        -            # built-in types
        -            4 => 'color: #993333;',
        -            # library types
        -            5 => 'color: #003399;'
        -            ),
        -        'COMMENTS' => array(
        -            # single-line comments
        -            1 => 'color: #666666; font-style: italic;',
        -            # raw strings
        -            2 => 'color: #0000ff;',
        -            # multi-line comments
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            # simple escape
        -            1 => 'color: #000099; font-weight: bold;',
        -            # octal escape
        -            2 => 'color: #000099;',
        -            # hex escape
        -            3 => 'color: #000099;',
        -            # unicode escape
        -            4 => 'color: #000099;',
        -            # long unicode escape
        -            5 => 'color: #000099;'
        -            ),
        -        'BRACKETS' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;',
        -            0 => 'color: #cc66cc;' // FIXME: Duplicate array key
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            # delimiters
        -            1 => 'color: #339933;',
        -            # assignments
        -            2 => 'color: #339933;',
        -            # operators
        -            3 => 'color: #339933;',
        -            # vararg (highlighted as a keyword)
        -            4 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            # If CSS classes are enabled, these would be highlighted as numbers (nu0)
        -            # integer literals (possibly imaginary)
        -            //0 => 'color: #cc66cc;',
        -            # real floating point literals
        -            //1 => 'color: #cc66cc;',
        -            # imaginary floating point literals
        -            //2 => 'color: #cc66cc;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => 'http://golang.org/search?q={FNAME}'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(1 => '.'),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER, # handled by symbols
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php
        deleted file mode 100644
        index 37fc8174..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php
        +++ /dev/null
        @@ -1,1009 +0,0 @@
        - 'Groovy',
        -    'COMMENT_SINGLE' => array(1 => '//', 3 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Import and Package directives (Basic Support only)
        -        2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'''", '"""', "'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'case', 'do', 'else', 'for', 'foreach', 'if', 'in', 'switch',
        -            'while',
        -            ),
        -        2 => array(
        -            'abstract', 'as', 'assert', 'break', 'catch', 'class', 'const',
        -            'continue', 'def', 'default', 'enum', 'extends',
        -            'false', 'final', 'finally', 'goto', 'implements', 'import',
        -            'instanceof', 'interface', 'native', 'new', 'null',
        -            'package', 'private', 'property', 'protected',
        -            'public', 'return', 'static', 'strictfp', 'super',
        -            'synchronized', 'this', 'throw', 'throws',
        -            'transient', 'true', 'try', 'volatile'
        -            ),
        -        3 => array(
        -            'AbstractAction', 'AbstractBorder', 'AbstractButton',
        -            'AbstractCellEditor', 'AbstractCollection',
        -            'AbstractColorChooserPanel', 'AbstractDocument',
        -            'AbstractDocument.AttributeContext',
        -            'AbstractDocument.Content',
        -            'AbstractDocument.ElementEdit',
        -            'AbstractLayoutCache',
        -            'AbstractLayoutCache.NodeDimensions', 'AbstractList',
        -            'AbstractListModel', 'AbstractMap',
        -            'AbstractMethodError', 'AbstractSequentialList',
        -            'AbstractSet', 'AbstractTableModel',
        -            'AbstractUndoableEdit', 'AbstractWriter',
        -            'AccessControlContext', 'AccessControlException',
        -            'AccessController', 'AccessException', 'Accessible',
        -            'AccessibleAction', 'AccessibleBundle',
        -            'AccessibleComponent', 'AccessibleContext',
        -            'AccessibleHyperlink', 'AccessibleHypertext',
        -            'AccessibleIcon', 'AccessibleObject',
        -            'AccessibleRelation', 'AccessibleRelationSet',
        -            'AccessibleResourceBundle', 'AccessibleRole',
        -            'AccessibleSelection', 'AccessibleState',
        -            'AccessibleStateSet', 'AccessibleTable',
        -            'AccessibleTableModelChange', 'AccessibleText',
        -            'AccessibleValue', 'Acl', 'AclEntry',
        -            'AclNotFoundException', 'Action', 'ActionEvent',
        -            'ActionListener', 'ActionMap', 'ActionMapUIResource',
        -            'Activatable', 'ActivateFailedException',
        -            'ActivationDesc', 'ActivationException',
        -            'ActivationGroup', 'ActivationGroupDesc',
        -            'ActivationGroupDesc.CommandEnvironment',
        -            'ActivationGroupID', 'ActivationID',
        -            'ActivationInstantiator', 'ActivationMonitor',
        -            'ActivationSystem', 'Activator', 'ActiveEvent',
        -            'Adjustable', 'AdjustmentEvent',
        -            'AdjustmentListener', 'Adler32', 'AffineTransform',
        -            'AffineTransformOp', 'AlgorithmParameterGenerator',
        -            'AlgorithmParameterGeneratorSpi',
        -            'AlgorithmParameters', 'AlgorithmParameterSpec',
        -            'AlgorithmParametersSpi', 'AllPermission',
        -            'AlphaComposite', 'AlreadyBound',
        -            'AlreadyBoundException', 'AlreadyBoundHelper',
        -            'AlreadyBoundHolder', 'AncestorEvent',
        -            'AncestorListener', 'Annotation', 'Any', 'AnyHolder',
        -            'AnySeqHelper', 'AnySeqHolder', 'Applet',
        -            'AppletContext', 'AppletInitializer', 'AppletStub',
        -            'ApplicationException', 'Arc2D', 'Arc2D.Double',
        -            'Arc2D.Float', 'Area', 'AreaAveragingScaleFilter',
        -            'ARG_IN', 'ARG_INOUT', 'ARG_OUT',
        -            'ArithmeticException', 'Array',
        -            'ArrayIndexOutOfBoundsException', 'ArrayList',
        -            'Arrays', 'ArrayStoreException', 'AsyncBoxView',
        -            'Attribute', 'AttributedCharacterIterator',
        -            'AttributedCharacterIterator.Attribute',
        -            'AttributedString', 'AttributeInUseException',
        -            'AttributeList', 'AttributeModificationException',
        -            'Attributes', 'Attributes.Name', 'AttributeSet',
        -            'AttributeSet.CharacterAttribute',
        -            'AttributeSet.ColorAttribute',
        -            'AttributeSet.FontAttribute',
        -            'AttributeSet.ParagraphAttribute', 'AudioClip',
        -            'AudioFileFormat', 'AudioFileFormat.Type',
        -            'AudioFileReader', 'AudioFileWriter', 'AudioFormat',
        -            'AudioFormat.Encoding', 'AudioInputStream',
        -            'AudioPermission', 'AudioSystem',
        -            'AuthenticationException',
        -            'AuthenticationNotSupportedException',
        -            'Authenticator', 'Autoscroll', 'AWTError',
        -            'AWTEvent', 'AWTEventListener',
        -            'AWTEventMulticaster', 'AWTException',
        -            'AWTPermission', 'BadKind', 'BadLocationException',
        -            'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION',
        -            'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE',
        -            'BAD_POLICY_VALUE', 'BAD_TYPECODE', 'BandCombineOp',
        -            'BandedSampleModel', 'BasicArrowButton',
        -            'BasicAttribute', 'BasicAttributes', 'BasicBorders',
        -            'BasicBorders.ButtonBorder',
        -            'BasicBorders.FieldBorder',
        -            'BasicBorders.MarginBorder',
        -            'BasicBorders.MenuBarBorder',
        -            'BasicBorders.RadioButtonBorder',
        -            'BasicBorders.SplitPaneBorder',
        -            'BasicBorders.ToggleButtonBorder',
        -            'BasicButtonListener', 'BasicButtonUI',
        -            'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI',
        -            'BasicColorChooserUI', 'BasicComboBoxEditor',
        -            'BasicComboBoxEditor.UIResource',
        -            'BasicComboBoxRenderer',
        -            'BasicComboBoxRenderer.UIResource',
        -            'BasicComboBoxUI', 'BasicComboPopup',
        -            'BasicDesktopIconUI', 'BasicDesktopPaneUI',
        -            'BasicDirectoryModel', 'BasicEditorPaneUI',
        -            'BasicFileChooserUI', 'BasicGraphicsUtils',
        -            'BasicHTML', 'BasicIconFactory',
        -            'BasicInternalFrameTitlePane',
        -            'BasicInternalFrameUI', 'BasicLabelUI',
        -            'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI',
        -            'BasicMenuItemUI', 'BasicMenuUI',
        -            'BasicOptionPaneUI',
        -            'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI',
        -            'BasicPasswordFieldUI', 'BasicPermission',
        -            'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI',
        -            'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI',
        -            'BasicRadioButtonUI', 'BasicRootPaneUI',
        -            'BasicScrollBarUI', 'BasicScrollPaneUI',
        -            'BasicSeparatorUI', 'BasicSliderUI',
        -            'BasicSplitPaneDivider', 'BasicSplitPaneUI',
        -            'BasicStroke', 'BasicTabbedPaneUI',
        -            'BasicTableHeaderUI', 'BasicTableUI',
        -            'BasicTextAreaUI', 'BasicTextFieldUI',
        -            'BasicTextPaneUI', 'BasicTextUI',
        -            'BasicTextUI.BasicCaret',
        -            'BasicTextUI.BasicHighlighter',
        -            'BasicToggleButtonUI', 'BasicToolBarSeparatorUI',
        -            'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI',
        -            'BasicViewportUI', 'BatchUpdateException',
        -            'BeanContext', 'BeanContextChild',
        -            'BeanContextChildComponentProxy',
        -            'BeanContextChildSupport',
        -            'BeanContextContainerProxy', 'BeanContextEvent',
        -            'BeanContextMembershipEvent',
        -            'BeanContextMembershipListener', 'BeanContextProxy',
        -            'BeanContextServiceAvailableEvent',
        -            'BeanContextServiceProvider',
        -            'BeanContextServiceProviderBeanInfo',
        -            'BeanContextServiceRevokedEvent',
        -            'BeanContextServiceRevokedListener',
        -            'BeanContextServices', 'BeanContextServicesListener',
        -            'BeanContextServicesSupport',
        -            'BeanContextServicesSupport.BCSSServiceProvider',
        -            'BeanContextSupport',
        -            'BeanContextSupport.BCSIterator', 'BeanDescriptor',
        -            'BeanInfo', 'Beans', 'BevelBorder', 'BigDecimal',
        -            'BigInteger', 'BinaryRefAddr', 'BindException',
        -            'Binding', 'BindingHelper', 'BindingHolder',
        -            'BindingIterator', 'BindingIteratorHelper',
        -            'BindingIteratorHolder', 'BindingIteratorOperations',
        -            'BindingListHelper', 'BindingListHolder',
        -            'BindingType', 'BindingTypeHelper',
        -            'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView',
        -            'Book', 'Boolean', 'BooleanControl',
        -            'BooleanControl.Type', 'BooleanHolder',
        -            'BooleanSeqHelper', 'BooleanSeqHolder', 'Border',
        -            'BorderFactory', 'BorderLayout', 'BorderUIResource',
        -            'BorderUIResource.BevelBorderUIResource',
        -            'BorderUIResource.CompoundBorderUIResource',
        -            'BorderUIResource.EmptyBorderUIResource',
        -            'BorderUIResource.EtchedBorderUIResource',
        -            'BorderUIResource.LineBorderUIResource',
        -            'BorderUIResource.MatteBorderUIResource',
        -            'BorderUIResource.TitledBorderUIResource',
        -            'BoundedRangeModel', 'Bounds', 'Box', 'Box.Filler',
        -            'BoxedValueHelper', 'BoxLayout', 'BoxView',
        -            'BreakIterator', 'BufferedImage',
        -            'BufferedImageFilter', 'BufferedImageOp',
        -            'BufferedInputStream', 'BufferedOutputStream',
        -            'BufferedReader', 'BufferedWriter', 'Button',
        -            'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte',
        -            'ByteArrayInputStream', 'ByteArrayOutputStream',
        -            'ByteHolder', 'ByteLookupTable', 'Calendar',
        -            'CallableStatement', 'CannotProceed',
        -            'CannotProceedException', 'CannotProceedHelper',
        -            'CannotProceedHolder', 'CannotRedoException',
        -            'CannotUndoException', 'Canvas', 'CardLayout',
        -            'Caret', 'CaretEvent', 'CaretListener', 'CellEditor',
        -            'CellEditorListener', 'CellRendererPane',
        -            'Certificate', 'Certificate.CertificateRep',
        -            'CertificateEncodingException',
        -            'CertificateException',
        -            'CertificateExpiredException', 'CertificateFactory',
        -            'CertificateFactorySpi',
        -            'CertificateNotYetValidException',
        -            'CertificateParsingException',
        -            'ChangedCharSetException', 'ChangeEvent',
        -            'ChangeListener', 'Character', 'Character.Subset',
        -            'Character.UnicodeBlock', 'CharacterIterator',
        -            'CharArrayReader', 'CharArrayWriter',
        -            'CharConversionException', 'CharHolder',
        -            'CharSeqHelper', 'CharSeqHolder', 'Checkbox',
        -            'CheckboxGroup', 'CheckboxMenuItem',
        -            'CheckedInputStream', 'CheckedOutputStream',
        -            'Checksum', 'Choice', 'ChoiceFormat', 'Class',
        -            'ClassCastException', 'ClassCircularityError',
        -            'ClassDesc', 'ClassFormatError', 'ClassLoader',
        -            'ClassNotFoundException', 'Clip', 'Clipboard',
        -            'ClipboardOwner', 'Clob', 'Cloneable',
        -            'CloneNotSupportedException', 'CMMException',
        -            'CodeSource', 'CollationElementIterator',
        -            'CollationKey', 'Collator', 'Collection',
        -            'Collections', 'Color',
        -            'ColorChooserComponentFactory', 'ColorChooserUI',
        -            'ColorConvertOp', 'ColorModel',
        -            'ColorSelectionModel', 'ColorSpace',
        -            'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel',
        -            'ComboBoxUI', 'ComboPopup', 'CommunicationException',
        -            'COMM_FAILURE', 'Comparable', 'Comparator',
        -            'Compiler', 'CompletionStatus',
        -            'CompletionStatusHelper', 'Component',
        -            'ComponentAdapter', 'ComponentColorModel',
        -            'ComponentEvent', 'ComponentInputMap',
        -            'ComponentInputMapUIResource', 'ComponentListener',
        -            'ComponentOrientation', 'ComponentSampleModel',
        -            'ComponentUI', 'ComponentView', 'Composite',
        -            'CompositeContext', 'CompositeName', 'CompositeView',
        -            'CompoundBorder', 'CompoundControl',
        -            'CompoundControl.Type', 'CompoundEdit',
        -            'CompoundName', 'ConcurrentModificationException',
        -            'ConfigurationException', 'ConnectException',
        -            'ConnectIOException', 'Connection', 'Constructor',
        -            'Container', 'ContainerAdapter', 'ContainerEvent',
        -            'ContainerListener', 'ContentHandler',
        -            'ContentHandlerFactory', 'ContentModel', 'Context',
        -            'ContextList', 'ContextNotEmptyException',
        -            'ContextualRenderedImageFactory', 'Control',
        -            'Control.Type', 'ControlFactory',
        -            'ControllerEventListener', 'ConvolveOp', 'CRC32',
        -            'CRL', 'CRLException', 'CropImageFilter', 'CSS',
        -            'CSS.Attribute', 'CTX_RESTRICT_SCOPE',
        -            'CubicCurve2D', 'CubicCurve2D.Double',
        -            'CubicCurve2D.Float', 'Current', 'CurrentHelper',
        -            'CurrentHolder', 'CurrentOperations', 'Cursor',
        -            'Customizer', 'CustomMarshal', 'CustomValue',
        -            'DatabaseMetaData', 'DataBuffer', 'DataBufferByte',
        -            'DataBufferInt', 'DataBufferShort',
        -            'DataBufferUShort', 'DataFlavor',
        -            'DataFormatException', 'DatagramPacket',
        -            'DatagramSocket', 'DatagramSocketImpl',
        -            'DatagramSocketImplFactory', 'DataInput',
        -            'DataInputStream', 'DataLine', 'DataLine.Info',
        -            'DataOutput', 'DataOutputStream', 'DataTruncation',
        -            'DATA_CONVERSION', 'Date', 'DateFormat',
        -            'DateFormatSymbols', 'DebugGraphics',
        -            'DecimalFormat', 'DecimalFormatSymbols',
        -            'DefaultBoundedRangeModel', 'DefaultButtonModel',
        -            'DefaultCaret', 'DefaultCellEditor',
        -            'DefaultColorSelectionModel', 'DefaultComboBoxModel',
        -            'DefaultDesktopManager', 'DefaultEditorKit',
        -            'DefaultEditorKit.BeepAction',
        -            'DefaultEditorKit.CopyAction',
        -            'DefaultEditorKit.CutAction',
        -            'DefaultEditorKit.DefaultKeyTypedAction',
        -            'DefaultEditorKit.InsertBreakAction',
        -            'DefaultEditorKit.InsertContentAction',
        -            'DefaultEditorKit.InsertTabAction',
        -            'DefaultEditorKit.PasteAction,',
        -            'DefaultFocusManager', 'DefaultHighlighter',
        -            'DefaultHighlighter.DefaultHighlightPainter',
        -            'DefaultListCellRenderer',
        -            'DefaultListCellRenderer.UIResource',
        -            'DefaultListModel', 'DefaultListSelectionModel',
        -            'DefaultMenuLayout', 'DefaultMetalTheme',
        -            'DefaultMutableTreeNode',
        -            'DefaultSingleSelectionModel',
        -            'DefaultStyledDocument',
        -            'DefaultStyledDocument.AttributeUndoableEdit',
        -            'DefaultStyledDocument.ElementSpec',
        -            'DefaultTableCellRenderer',
        -            'DefaultTableCellRenderer.UIResource',
        -            'DefaultTableColumnModel', 'DefaultTableModel',
        -            'DefaultTextUI', 'DefaultTreeCellEditor',
        -            'DefaultTreeCellRenderer', 'DefaultTreeModel',
        -            'DefaultTreeSelectionModel', 'DefinitionKind',
        -            'DefinitionKindHelper', 'Deflater',
        -            'DeflaterOutputStream', 'Delegate', 'DesignMode',
        -            'DesktopIconUI', 'DesktopManager', 'DesktopPaneUI',
        -            'DGC', 'Dialog', 'Dictionary', 'DigestException',
        -            'DigestInputStream', 'DigestOutputStream',
        -            'Dimension', 'Dimension2D', 'DimensionUIResource',
        -            'DirContext', 'DirectColorModel', 'DirectoryManager',
        -            'DirObjectFactory', 'DirStateFactory',
        -            'DirStateFactory.Result', 'DnDConstants', 'Document',
        -            'DocumentEvent', 'DocumentEvent.ElementChange',
        -            'DocumentEvent.EventType', 'DocumentListener',
        -            'DocumentParser', 'DomainCombiner', 'DomainManager',
        -            'DomainManagerOperations', 'Double', 'DoubleHolder',
        -            'DoubleSeqHelper', 'DoubleSeqHolder',
        -            'DragGestureEvent', 'DragGestureListener',
        -            'DragGestureRecognizer', 'DragSource',
        -            'DragSourceContext', 'DragSourceDragEvent',
        -            'DragSourceDropEvent', 'DragSourceEvent',
        -            'DragSourceListener', 'Driver', 'DriverManager',
        -            'DriverPropertyInfo', 'DropTarget',
        -            'DropTarget.DropTargetAutoScroller',
        -            'DropTargetContext', 'DropTargetDragEvent',
        -            'DropTargetDropEvent', 'DropTargetEvent',
        -            'DropTargetListener', 'DSAKey',
        -            'DSAKeyPairGenerator', 'DSAParameterSpec',
        -            'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec',
        -            'DSAPublicKey', 'DSAPublicKeySpec', 'DTD',
        -            'DTDConstants', 'DynamicImplementation', 'DynAny',
        -            'DynArray', 'DynEnum', 'DynFixed', 'DynSequence',
        -            'DynStruct', 'DynUnion', 'DynValue', 'EditorKit',
        -            'Element', 'ElementIterator', 'Ellipse2D',
        -            'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder',
        -            'EmptyStackException', 'EncodedKeySpec', 'Entity',
        -            'EnumControl', 'EnumControl.Type', 'Enumeration',
        -            'Environment', 'EOFException', 'Error',
        -            'EtchedBorder', 'Event', 'EventContext',
        -            'EventDirContext', 'EventListener',
        -            'EventListenerList', 'EventObject', 'EventQueue',
        -            'EventSetDescriptor', 'Exception',
        -            'ExceptionInInitializerError', 'ExceptionList',
        -            'ExpandVetoException', 'ExportException',
        -            'ExtendedRequest', 'ExtendedResponse',
        -            'Externalizable', 'FeatureDescriptor', 'Field',
        -            'FieldNameHelper', 'FieldPosition', 'FieldView',
        -            'File', 'FileChooserUI', 'FileDescriptor',
        -            'FileDialog', 'FileFilter', 'FileInputStream',
        -            'FilenameFilter', 'FileNameMap',
        -            'FileNotFoundException', 'FileOutputStream',
        -            'FilePermission', 'FileReader', 'FileSystemView',
        -            'FileView', 'FileWriter', 'FilteredImageSource',
        -            'FilterInputStream', 'FilterOutputStream',
        -            'FilterReader', 'FilterWriter',
        -            'FixedHeightLayoutCache', 'FixedHolder',
        -            'FlatteningPathIterator', 'FlavorMap', 'Float',
        -            'FloatControl', 'FloatControl.Type', 'FloatHolder',
        -            'FloatSeqHelper', 'FloatSeqHolder', 'FlowLayout',
        -            'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter',
        -            'FocusEvent', 'FocusListener', 'FocusManager',
        -            'Font', 'FontFormatException', 'FontMetrics',
        -            'FontRenderContext', 'FontUIResource', 'Format',
        -            'FormatConversionProvider', 'FormView', 'Frame',
        -            'FREE_MEM', 'GapContent', 'GeneralPath',
        -            'GeneralSecurityException', 'GlyphJustificationInfo',
        -            'GlyphMetrics', 'GlyphVector', 'GlyphView',
        -            'GlyphView.GlyphPainter', 'GradientPaint',
        -            'GraphicAttribute', 'Graphics', 'Graphics2D',
        -            'GraphicsConfigTemplate', 'GraphicsConfiguration',
        -            'GraphicsDevice', 'GraphicsEnvironment',
        -            'GrayFilter', 'GregorianCalendar',
        -            'GridBagConstraints', 'GridBagLayout', 'GridLayout',
        -            'Group', 'Guard', 'GuardedObject', 'GZIPInputStream',
        -            'GZIPOutputStream', 'HasControls', 'HashMap',
        -            'HashSet', 'Hashtable', 'HierarchyBoundsAdapter',
        -            'HierarchyBoundsListener', 'HierarchyEvent',
        -            'HierarchyListener', 'Highlighter',
        -            'Highlighter.Highlight',
        -            'Highlighter.HighlightPainter', 'HTML',
        -            'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag',
        -            'HTMLDocument', 'HTMLDocument.Iterator',
        -            'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory',
        -            'HTMLEditorKit.HTMLTextAction',
        -            'HTMLEditorKit.InsertHTMLTextAction',
        -            'HTMLEditorKit.LinkController',
        -            'HTMLEditorKit.Parser',
        -            'HTMLEditorKit.ParserCallback',
        -            'HTMLFrameHyperlinkEvent', 'HTMLWriter',
        -            'HttpURLConnection', 'HyperlinkEvent',
        -            'HyperlinkEvent.EventType', 'HyperlinkListener',
        -            'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray',
        -            'ICC_ProfileRGB', 'Icon', 'IconUIResource',
        -            'IconView', 'IdentifierHelper', 'Identity',
        -            'IdentityScope', 'IDLEntity', 'IDLType',
        -            'IDLTypeHelper', 'IDLTypeOperations',
        -            'IllegalAccessError', 'IllegalAccessException',
        -            'IllegalArgumentException',
        -            'IllegalComponentStateException',
        -            'IllegalMonitorStateException',
        -            'IllegalPathStateException', 'IllegalStateException',
        -            'IllegalThreadStateException', 'Image',
        -            'ImageConsumer', 'ImageFilter',
        -            'ImageGraphicAttribute', 'ImageIcon',
        -            'ImageObserver', 'ImageProducer',
        -            'ImagingOpException', 'IMP_LIMIT',
        -            'IncompatibleClassChangeError',
        -            'InconsistentTypeCode', 'IndexColorModel',
        -            'IndexedPropertyDescriptor',
        -            'IndexOutOfBoundsException', 'IndirectionException',
        -            'InetAddress', 'Inflater', 'InflaterInputStream',
        -            'InheritableThreadLocal', 'InitialContext',
        -            'InitialContextFactory',
        -            'InitialContextFactoryBuilder', 'InitialDirContext',
        -            'INITIALIZE', 'Initializer', 'InitialLdapContext',
        -            'InlineView', 'InputContext', 'InputEvent',
        -            'InputMap', 'InputMapUIResource', 'InputMethod',
        -            'InputMethodContext', 'InputMethodDescriptor',
        -            'InputMethodEvent', 'InputMethodHighlight',
        -            'InputMethodListener', 'InputMethodRequests',
        -            'InputStream', 'InputStreamReader', 'InputSubset',
        -            'InputVerifier', 'Insets', 'InsetsUIResource',
        -            'InstantiationError', 'InstantiationException',
        -            'Instrument', 'InsufficientResourcesException',
        -            'Integer', 'INTERNAL', 'InternalError',
        -            'InternalFrameAdapter', 'InternalFrameEvent',
        -            'InternalFrameListener', 'InternalFrameUI',
        -            'InterruptedException', 'InterruptedIOException',
        -            'InterruptedNamingException', 'INTF_REPOS',
        -            'IntHolder', 'IntrospectionException',
        -            'Introspector', 'Invalid',
        -            'InvalidAlgorithmParameterException',
        -            'InvalidAttributeIdentifierException',
        -            'InvalidAttributesException',
        -            'InvalidAttributeValueException',
        -            'InvalidClassException',
        -            'InvalidDnDOperationException',
        -            'InvalidKeyException', 'InvalidKeySpecException',
        -            'InvalidMidiDataException', 'InvalidName',
        -            'InvalidNameException', 'InvalidNameHelper',
        -            'InvalidNameHolder', 'InvalidObjectException',
        -            'InvalidParameterException',
        -            'InvalidParameterSpecException',
        -            'InvalidSearchControlsException',
        -            'InvalidSearchFilterException', 'InvalidSeq',
        -            'InvalidTransactionException', 'InvalidValue',
        -            'INVALID_TRANSACTION', 'InvocationEvent',
        -            'InvocationHandler', 'InvocationTargetException',
        -            'InvokeHandler', 'INV_FLAG', 'INV_IDENT',
        -            'INV_OBJREF', 'INV_POLICY', 'IOException',
        -            'IRObject', 'IRObjectOperations', 'IstringHelper',
        -            'ItemEvent', 'ItemListener', 'ItemSelectable',
        -            'Iterator', 'JApplet', 'JarEntry', 'JarException',
        -            'JarFile', 'JarInputStream', 'JarOutputStream',
        -            'JarURLConnection', 'JButton', 'JCheckBox',
        -            'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox',
        -            'JComboBox.KeySelectionManager', 'JComponent',
        -            'JDesktopPane', 'JDialog', 'JEditorPane',
        -            'JFileChooser', 'JFrame', 'JInternalFrame',
        -            'JInternalFrame.JDesktopIcon', 'JLabel',
        -            'JLayeredPane', 'JList', 'JMenu', 'JMenuBar',
        -            'JMenuItem', 'JobAttributes',
        -            'JobAttributes.DefaultSelectionType',
        -            'JobAttributes.DestinationType',
        -            'JobAttributes.DialogType',
        -            'JobAttributes.MultipleDocumentHandlingType',
        -            'JobAttributes.SidesType', 'JOptionPane', 'JPanel',
        -            'JPasswordField', 'JPopupMenu',
        -            'JPopupMenu.Separator', 'JProgressBar',
        -            'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane',
        -            'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider',
        -            'JSplitPane', 'JTabbedPane', 'JTable',
        -            'JTableHeader', 'JTextArea', 'JTextComponent',
        -            'JTextComponent.KeyBinding', 'JTextField',
        -            'JTextPane', 'JToggleButton',
        -            'JToggleButton.ToggleButtonModel', 'JToolBar',
        -            'JToolBar.Separator', 'JToolTip', 'JTree',
        -            'JTree.DynamicUtilTreeNode',
        -            'JTree.EmptySelectionModel', 'JViewport', 'JWindow',
        -            'Kernel', 'Key', 'KeyAdapter', 'KeyEvent',
        -            'KeyException', 'KeyFactory', 'KeyFactorySpi',
        -            'KeyListener', 'KeyManagementException', 'Keymap',
        -            'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi',
        -            'KeySpec', 'KeyStore', 'KeyStoreException',
        -            'KeyStoreSpi', 'KeyStroke', 'Label', 'LabelUI',
        -            'LabelView', 'LastOwnerException',
        -            'LayeredHighlighter',
        -            'LayeredHighlighter.LayerPainter', 'LayoutManager',
        -            'LayoutManager2', 'LayoutQueue', 'LdapContext',
        -            'LdapReferralException', 'Lease',
        -            'LimitExceededException', 'Line', 'Line.Info',
        -            'Line2D', 'Line2D.Double', 'Line2D.Float',
        -            'LineBorder', 'LineBreakMeasurer', 'LineEvent',
        -            'LineEvent.Type', 'LineListener', 'LineMetrics',
        -            'LineNumberInputStream', 'LineNumberReader',
        -            'LineUnavailableException', 'LinkageError',
        -            'LinkedList', 'LinkException', 'LinkLoopException',
        -            'LinkRef', 'List', 'ListCellRenderer',
        -            'ListDataEvent', 'ListDataListener', 'ListIterator',
        -            'ListModel', 'ListResourceBundle',
        -            'ListSelectionEvent', 'ListSelectionListener',
        -            'ListSelectionModel', 'ListUI', 'ListView',
        -            'LoaderHandler', 'Locale', 'LocateRegistry',
        -            'LogStream', 'Long', 'LongHolder',
        -            'LongLongSeqHelper', 'LongLongSeqHolder',
        -            'LongSeqHelper', 'LongSeqHolder', 'LookAndFeel',
        -            'LookupOp', 'LookupTable', 'MalformedLinkException',
        -            'MalformedURLException', 'Manifest', 'Map',
        -            'Map.Entry', 'MARSHAL', 'MarshalException',
        -            'MarshalledObject', 'Math', 'MatteBorder',
        -            'MediaTracker', 'Member', 'MemoryImageSource',
        -            'Menu', 'MenuBar', 'MenuBarUI', 'MenuComponent',
        -            'MenuContainer', 'MenuDragMouseEvent',
        -            'MenuDragMouseListener', 'MenuElement', 'MenuEvent',
        -            'MenuItem', 'MenuItemUI', 'MenuKeyEvent',
        -            'MenuKeyListener', 'MenuListener',
        -            'MenuSelectionManager', 'MenuShortcut',
        -            'MessageDigest', 'MessageDigestSpi', 'MessageFormat',
        -            'MetaEventListener', 'MetalBorders',
        -            'MetalBorders.ButtonBorder',
        -            'MetalBorders.Flush3DBorder',
        -            'MetalBorders.InternalFrameBorder',
        -            'MetalBorders.MenuBarBorder',
        -            'MetalBorders.MenuItemBorder',
        -            'MetalBorders.OptionDialogBorder',
        -            'MetalBorders.PaletteBorder',
        -            'MetalBorders.PopupMenuBorder',
        -            'MetalBorders.RolloverButtonBorder',
        -            'MetalBorders.ScrollPaneBorder',
        -            'MetalBorders.TableHeaderBorder',
        -            'MetalBorders.TextFieldBorder',
        -            'MetalBorders.ToggleButtonBorder',
        -            'MetalBorders.ToolBarBorder', 'MetalButtonUI',
        -            'MetalCheckBoxIcon', 'MetalCheckBoxUI',
        -            'MetalComboBoxButton', 'MetalComboBoxEditor',
        -            'MetalComboBoxEditor.UIResource',
        -            'MetalComboBoxIcon', 'MetalComboBoxUI',
        -            'MetalDesktopIconUI', 'MetalFileChooserUI',
        -            'MetalIconFactory', 'MetalIconFactory.FileIcon16',
        -            'MetalIconFactory.FolderIcon16',
        -            'MetalIconFactory.PaletteCloseIcon',
        -            'MetalIconFactory.TreeControlIcon',
        -            'MetalIconFactory.TreeFolderIcon',
        -            'MetalIconFactory.TreeLeafIcon',
        -            'MetalInternalFrameTitlePane',
        -            'MetalInternalFrameUI', 'MetalLabelUI',
        -            'MetalLookAndFeel', 'MetalPopupMenuSeparatorUI',
        -            'MetalProgressBarUI', 'MetalRadioButtonUI',
        -            'MetalScrollBarUI', 'MetalScrollButton',
        -            'MetalScrollPaneUI', 'MetalSeparatorUI',
        -            'MetalSliderUI', 'MetalSplitPaneUI',
        -            'MetalTabbedPaneUI', 'MetalTextFieldUI',
        -            'MetalTheme', 'MetalToggleButtonUI',
        -            'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI',
        -            'MetaMessage', 'Method', 'MethodDescriptor',
        -            'MidiChannel', 'MidiDevice', 'MidiDevice.Info',
        -            'MidiDeviceProvider', 'MidiEvent', 'MidiFileFormat',
        -            'MidiFileReader', 'MidiFileWriter', 'MidiMessage',
        -            'MidiSystem', 'MidiUnavailableException',
        -            'MimeTypeParseException', 'MinimalHTMLWriter',
        -            'MissingResourceException', 'Mixer', 'Mixer.Info',
        -            'MixerProvider', 'ModificationItem', 'Modifier',
        -            'MouseAdapter', 'MouseDragGestureRecognizer',
        -            'MouseEvent', 'MouseInputAdapter',
        -            'MouseInputListener', 'MouseListener',
        -            'MouseMotionAdapter', 'MouseMotionListener',
        -            'MultiButtonUI', 'MulticastSocket',
        -            'MultiColorChooserUI', 'MultiComboBoxUI',
        -            'MultiDesktopIconUI', 'MultiDesktopPaneUI',
        -            'MultiFileChooserUI', 'MultiInternalFrameUI',
        -            'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel',
        -            'MultiMenuBarUI', 'MultiMenuItemUI',
        -            'MultiOptionPaneUI', 'MultiPanelUI',
        -            'MultiPixelPackedSampleModel', 'MultipleMaster',
        -            'MultiPopupMenuUI', 'MultiProgressBarUI',
        -            'MultiScrollBarUI', 'MultiScrollPaneUI',
        -            'MultiSeparatorUI', 'MultiSliderUI',
        -            'MultiSplitPaneUI', 'MultiTabbedPaneUI',
        -            'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI',
        -            'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI',
        -            'MultiViewportUI', 'MutableAttributeSet',
        -            'MutableComboBoxModel', 'MutableTreeNode', 'Name',
        -            'NameAlreadyBoundException', 'NameClassPair',
        -            'NameComponent', 'NameComponentHelper',
        -            'NameComponentHolder', 'NamedValue', 'NameHelper',
        -            'NameHolder', 'NameNotFoundException', 'NameParser',
        -            'NamespaceChangeListener', 'NameValuePair',
        -            'NameValuePairHelper', 'Naming', 'NamingContext',
        -            'NamingContextHelper', 'NamingContextHolder',
        -            'NamingContextOperations', 'NamingEnumeration',
        -            'NamingEvent', 'NamingException',
        -            'NamingExceptionEvent', 'NamingListener',
        -            'NamingManager', 'NamingSecurityException',
        -            'NegativeArraySizeException', 'NetPermission',
        -            'NoClassDefFoundError', 'NoInitialContextException',
        -            'NoninvertibleTransformException',
        -            'NoPermissionException', 'NoRouteToHostException',
        -            'NoSuchAlgorithmException',
        -            'NoSuchAttributeException', 'NoSuchElementException',
        -            'NoSuchFieldError', 'NoSuchFieldException',
        -            'NoSuchMethodError', 'NoSuchMethodException',
        -            'NoSuchObjectException', 'NoSuchProviderException',
        -            'NotActiveException', 'NotBoundException',
        -            'NotContextException', 'NotEmpty', 'NotEmptyHelper',
        -            'NotEmptyHolder', 'NotFound', 'NotFoundHelper',
        -            'NotFoundHolder', 'NotFoundReason',
        -            'NotFoundReasonHelper', 'NotFoundReasonHolder',
        -            'NotOwnerException', 'NotSerializableException',
        -            'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION',
        -            'NO_RESOURCES', 'NO_RESPONSE',
        -            'NullPointerException', 'Number', 'NumberFormat',
        -            'NumberFormatException', 'NVList', 'Object',
        -            'ObjectChangeListener', 'ObjectFactory',
        -            'ObjectFactoryBuilder', 'ObjectHelper',
        -            'ObjectHolder', 'ObjectImpl', 'ObjectInput',
        -            'ObjectInputStream', 'ObjectInputStream.GetField',
        -            'ObjectInputValidation', 'ObjectOutput',
        -            'ObjectOutputStream', 'ObjectOutputStream.PutField',
        -            'ObjectStreamClass', 'ObjectStreamConstants',
        -            'ObjectStreamException', 'ObjectStreamField',
        -            'ObjectView', 'OBJECT_NOT_EXIST', 'ObjID',
        -            'OBJ_ADAPTER', 'Observable', 'Observer',
        -            'OctetSeqHelper', 'OctetSeqHolder', 'OMGVMCID',
        -            'OpenType', 'Operation',
        -            'OperationNotSupportedException', 'Option',
        -            'OptionalDataException', 'OptionPaneUI', 'ORB',
        -            'OutOfMemoryError', 'OutputStream',
        -            'OutputStreamWriter', 'OverlayLayout', 'Owner',
        -            'Package', 'PackedColorModel', 'Pageable',
        -            'PageAttributes', 'PageAttributes.ColorType',
        -            'PageAttributes.MediaType',
        -            'PageAttributes.OrientationRequestedType',
        -            'PageAttributes.OriginType',
        -            'PageAttributes.PrintQualityType', 'PageFormat',
        -            'Paint', 'PaintContext', 'PaintEvent', 'Panel',
        -            'PanelUI', 'Paper', 'ParagraphView',
        -            'ParameterBlock', 'ParameterDescriptor',
        -            'ParseException', 'ParsePosition', 'Parser',
        -            'ParserDelegator', 'PartialResultException',
        -            'PasswordAuthentication', 'PasswordView', 'Patch',
        -            'PathIterator', 'Permission', 'PermissionCollection',
        -            'Permissions', 'PERSIST_STORE', 'PhantomReference',
        -            'PipedInputStream', 'PipedOutputStream',
        -            'PipedReader', 'PipedWriter', 'PixelGrabber',
        -            'PixelInterleavedSampleModel', 'PKCS8EncodedKeySpec',
        -            'PlainDocument', 'PlainView', 'Point', 'Point2D',
        -            'Point2D.Double', 'Point2D.Float', 'Policy',
        -            'PolicyError', 'PolicyHelper', 'PolicyHolder',
        -            'PolicyListHelper', 'PolicyListHolder',
        -            'PolicyOperations', 'PolicyTypeHelper', 'Polygon',
        -            'PopupMenu', 'PopupMenuEvent', 'PopupMenuListener',
        -            'PopupMenuUI', 'Port', 'Port.Info',
        -            'PortableRemoteObject',
        -            'PortableRemoteObjectDelegate', 'Position',
        -            'Position.Bias', 'PreparedStatement', 'Principal',
        -            'PrincipalHolder', 'Printable',
        -            'PrinterAbortException', 'PrinterException',
        -            'PrinterGraphics', 'PrinterIOException',
        -            'PrinterJob', 'PrintGraphics', 'PrintJob',
        -            'PrintStream', 'PrintWriter', 'PrivateKey',
        -            'PRIVATE_MEMBER', 'PrivilegedAction',
        -            'PrivilegedActionException',
        -            'PrivilegedExceptionAction', 'Process',
        -            'ProfileDataException', 'ProgressBarUI',
        -            'ProgressMonitor', 'ProgressMonitorInputStream',
        -            'Properties', 'PropertyChangeEvent',
        -            'PropertyChangeListener', 'PropertyChangeSupport',
        -            'PropertyDescriptor', 'PropertyEditor',
        -            'PropertyEditorManager', 'PropertyEditorSupport',
        -            'PropertyPermission', 'PropertyResourceBundle',
        -            'PropertyVetoException', 'ProtectionDomain',
        -            'ProtocolException', 'Provider', 'ProviderException',
        -            'Proxy', 'PublicKey', 'PUBLIC_MEMBER',
        -            'PushbackInputStream', 'PushbackReader',
        -            'QuadCurve2D', 'QuadCurve2D.Double',
        -            'QuadCurve2D.Float', 'Random', 'RandomAccessFile',
        -            'Raster', 'RasterFormatException', 'RasterOp',
        -            'Reader', 'Receiver', 'Rectangle', 'Rectangle2D',
        -            'Rectangle2D.Double', 'Rectangle2D.Float',
        -            'RectangularShape', 'Ref', 'RefAddr', 'Reference',
        -            'Referenceable', 'ReferenceQueue',
        -            'ReferralException', 'ReflectPermission', 'Registry',
        -            'RegistryHandler', 'RemarshalException', 'Remote',
        -            'RemoteCall', 'RemoteException', 'RemoteObject',
        -            'RemoteRef', 'RemoteServer', 'RemoteStub',
        -            'RenderableImage', 'RenderableImageOp',
        -            'RenderableImageProducer', 'RenderContext',
        -            'RenderedImage', 'RenderedImageFactory', 'Renderer',
        -            'RenderingHints', 'RenderingHints.Key',
        -            'RepaintManager', 'ReplicateScaleFilter',
        -            'Repository', 'RepositoryIdHelper', 'Request',
        -            'RescaleOp', 'Resolver', 'ResolveResult',
        -            'ResourceBundle', 'ResponseHandler', 'ResultSet',
        -            'ResultSetMetaData', 'ReverbType', 'RGBImageFilter',
        -            'RMIClassLoader', 'RMIClientSocketFactory',
        -            'RMIFailureHandler', 'RMISecurityException',
        -            'RMISecurityManager', 'RMIServerSocketFactory',
        -            'RMISocketFactory', 'Robot', 'RootPaneContainer',
        -            'RootPaneUI', 'RoundRectangle2D',
        -            'RoundRectangle2D.Double', 'RoundRectangle2D.Float',
        -            'RowMapper', 'RSAKey', 'RSAKeyGenParameterSpec',
        -            'RSAPrivateCrtKey', 'RSAPrivateCrtKeySpec',
        -            'RSAPrivateKey', 'RSAPrivateKeySpec', 'RSAPublicKey',
        -            'RSAPublicKeySpec', 'RTFEditorKit',
        -            'RuleBasedCollator', 'Runnable', 'Runtime',
        -            'RunTime', 'RuntimeException', 'RunTimeOperations',
        -            'RuntimePermission', 'SampleModel',
        -            'SchemaViolationException', 'Scrollable',
        -            'Scrollbar', 'ScrollBarUI', 'ScrollPane',
        -            'ScrollPaneConstants', 'ScrollPaneLayout',
        -            'ScrollPaneLayout.UIResource', 'ScrollPaneUI',
        -            'SearchControls', 'SearchResult',
        -            'SecureClassLoader', 'SecureRandom',
        -            'SecureRandomSpi', 'Security', 'SecurityException',
        -            'SecurityManager', 'SecurityPermission', 'Segment',
        -            'SeparatorUI', 'Sequence', 'SequenceInputStream',
        -            'Sequencer', 'Sequencer.SyncMode', 'Serializable',
        -            'SerializablePermission', 'ServantObject',
        -            'ServerCloneException', 'ServerError',
        -            'ServerException', 'ServerNotActiveException',
        -            'ServerRef', 'ServerRequest',
        -            'ServerRuntimeException', 'ServerSocket',
        -            'ServiceDetail', 'ServiceDetailHelper',
        -            'ServiceInformation', 'ServiceInformationHelper',
        -            'ServiceInformationHolder',
        -            'ServiceUnavailableException', 'Set',
        -            'SetOverrideType', 'SetOverrideTypeHelper', 'Shape',
        -            'ShapeGraphicAttribute', 'Short', 'ShortHolder',
        -            'ShortLookupTable', 'ShortMessage', 'ShortSeqHelper',
        -            'ShortSeqHolder', 'Signature', 'SignatureException',
        -            'SignatureSpi', 'SignedObject', 'Signer',
        -            'SimpleAttributeSet', 'SimpleBeanInfo',
        -            'SimpleDateFormat', 'SimpleTimeZone',
        -            'SinglePixelPackedSampleModel',
        -            'SingleSelectionModel', 'SizeLimitExceededException',
        -            'SizeRequirements', 'SizeSequence', 'Skeleton',
        -            'SkeletonMismatchException',
        -            'SkeletonNotFoundException', 'SliderUI', 'Socket',
        -            'SocketException', 'SocketImpl', 'SocketImplFactory',
        -            'SocketOptions', 'SocketPermission',
        -            'SocketSecurityException', 'SoftBevelBorder',
        -            'SoftReference', 'SortedMap', 'SortedSet',
        -            'Soundbank', 'SoundbankReader', 'SoundbankResource',
        -            'SourceDataLine', 'SplitPaneUI', 'SQLData',
        -            'SQLException', 'SQLInput', 'SQLOutput',
        -            'SQLPermission', 'SQLWarning', 'Stack',
        -            'StackOverflowError', 'StateEdit', 'StateEditable',
        -            'StateFactory', 'Statement', 'Streamable',
        -            'StreamableValue', 'StreamCorruptedException',
        -            'StreamTokenizer', 'StrictMath', 'String',
        -            'StringBuffer', 'StringBufferInputStream',
        -            'StringCharacterIterator', 'StringContent',
        -            'StringHolder', 'StringIndexOutOfBoundsException',
        -            'StringReader', 'StringRefAddr', 'StringSelection',
        -            'StringTokenizer', 'StringValueHelper',
        -            'StringWriter', 'Stroke', 'Struct', 'StructMember',
        -            'StructMemberHelper', 'Stub', 'StubDelegate',
        -            'StubNotFoundException', 'Style', 'StyleConstants',
        -            'StyleConstants.CharacterConstants',
        -            'StyleConstants.ColorConstants',
        -            'StyleConstants.FontConstants',
        -            'StyleConstants.ParagraphConstants', 'StyleContext',
        -            'StyledDocument', 'StyledEditorKit',
        -            'StyledEditorKit.AlignmentAction',
        -            'StyledEditorKit.BoldAction',
        -            'StyledEditorKit.FontFamilyAction',
        -            'StyledEditorKit.FontSizeAction',
        -            'StyledEditorKit.ForegroundAction',
        -            'StyledEditorKit.ItalicAction',
        -            'StyledEditorKit.StyledTextAction',
        -            'StyledEditorKit.UnderlineAction', 'StyleSheet',
        -            'StyleSheet.BoxPainter', 'StyleSheet.ListPainter',
        -            'SwingConstants', 'SwingPropertyChangeSupport',
        -            'SwingUtilities', 'SyncFailedException',
        -            'Synthesizer', 'SysexMessage', 'System',
        -            'SystemColor', 'SystemException', 'SystemFlavorMap',
        -            'TabableView', 'TabbedPaneUI', 'TabExpander',
        -            'TableCellEditor', 'TableCellRenderer',
        -            'TableColumn', 'TableColumnModel',
        -            'TableColumnModelEvent', 'TableColumnModelListener',
        -            'TableHeaderUI', 'TableModel', 'TableModelEvent',
        -            'TableModelListener', 'TableUI', 'TableView',
        -            'TabSet', 'TabStop', 'TagElement', 'TargetDataLine',
        -            'TCKind', 'TextAction', 'TextArea', 'TextAttribute',
        -            'TextComponent', 'TextEvent', 'TextField',
        -            'TextHitInfo', 'TextLayout',
        -            'TextLayout.CaretPolicy', 'TextListener',
        -            'TextMeasurer', 'TextUI', 'TexturePaint', 'Thread',
        -            'ThreadDeath', 'ThreadGroup', 'ThreadLocal',
        -            'Throwable', 'Tie', 'TileObserver', 'Time',
        -            'TimeLimitExceededException', 'Timer', 'TimerTask',
        -            'Timestamp', 'TimeZone', 'TitledBorder', 'ToolBarUI',
        -            'Toolkit', 'ToolTipManager', 'ToolTipUI',
        -            'TooManyListenersException', 'Track',
        -            'TransactionRequiredException',
        -            'TransactionRolledbackException',
        -            'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK',
        -            'Transferable', 'TransformAttribute', 'TRANSIENT',
        -            'Transmitter', 'Transparency', 'TreeCellEditor',
        -            'TreeCellRenderer', 'TreeExpansionEvent',
        -            'TreeExpansionListener', 'TreeMap', 'TreeModel',
        -            'TreeModelEvent', 'TreeModelListener', 'TreeNode',
        -            'TreePath', 'TreeSelectionEvent',
        -            'TreeSelectionListener', 'TreeSelectionModel',
        -            'TreeSet', 'TreeUI', 'TreeWillExpandListener',
        -            'TypeCode', 'TypeCodeHolder', 'TypeMismatch',
        -            'Types', 'UID', 'UIDefaults',
        -            'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap',
        -            'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue',
        -            'UIManager', 'UIManager.LookAndFeelInfo',
        -            'UIResource', 'ULongLongSeqHelper',
        -            'ULongLongSeqHolder', 'ULongSeqHelper',
        -            'ULongSeqHolder', 'UndeclaredThrowableException',
        -            'UndoableEdit', 'UndoableEditEvent',
        -            'UndoableEditListener', 'UndoableEditSupport',
        -            'UndoManager', 'UnexpectedException',
        -            'UnicastRemoteObject', 'UnionMember',
        -            'UnionMemberHelper', 'UNKNOWN', 'UnknownError',
        -            'UnknownException', 'UnknownGroupException',
        -            'UnknownHostException', 'UnknownObjectException',
        -            'UnknownServiceException', 'UnknownUserException',
        -            'UnmarshalException', 'UnrecoverableKeyException',
        -            'Unreferenced', 'UnresolvedPermission',
        -            'UnsatisfiedLinkError', 'UnsolicitedNotification',
        -            'UnsolicitedNotificationEvent',
        -            'UnsolicitedNotificationListener',
        -            'UnsupportedAudioFileException',
        -            'UnsupportedClassVersionError',
        -            'UnsupportedEncodingException',
        -            'UnsupportedFlavorException',
        -            'UnsupportedLookAndFeelException',
        -            'UnsupportedOperationException',
        -            'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE',
        -            'URL', 'URLClassLoader', 'URLConnection',
        -            'URLDecoder', 'URLEncoder', 'URLStreamHandler',
        -            'URLStreamHandlerFactory', 'UserException',
        -            'UShortSeqHelper', 'UShortSeqHolder',
        -            'UTFDataFormatException', 'Util', 'UtilDelegate',
        -            'Utilities', 'ValueBase', 'ValueBaseHelper',
        -            'ValueBaseHolder', 'ValueFactory', 'ValueHandler',
        -            'ValueMember', 'ValueMemberHelper',
        -            'VariableHeightLayoutCache', 'Vector', 'VerifyError',
        -            'VersionSpecHelper', 'VetoableChangeListener',
        -            'VetoableChangeSupport', 'View', 'ViewFactory',
        -            'ViewportLayout', 'ViewportUI',
        -            'VirtualMachineError', 'Visibility',
        -            'VisibilityHelper', 'VMID', 'VM_ABSTRACT',
        -            'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE',
        -            'VoiceStatus', 'Void', 'WCharSeqHelper',
        -            'WCharSeqHolder', 'WeakHashMap', 'WeakReference',
        -            'Window', 'WindowAdapter', 'WindowConstants',
        -            'WindowEvent', 'WindowListener', 'WrappedPlainView',
        -            'WritableRaster', 'WritableRenderedImage',
        -            'WriteAbortedException', 'Writer',
        -            'WrongTransaction', 'WStringValueHelper',
        -            'X509Certificate', 'X509CRL', 'X509CRLEntry',
        -            'X509EncodedKeySpec', 'X509Extension', 'ZipEntry',
        -            'ZipException', 'ZipFile', 'ZipInputStream',
        -            'ZipOutputStream', 'ZoneView',
        -            '_BindingIteratorImplBase', '_BindingIteratorStub',
        -            '_IDLTypeStub', '_NamingContextImplBase',
        -            '_NamingContextStub', '_PolicyStub', '_Remote_Stub'
        -            ),
        -        4 => array(
        -            'boolean', 'byte', 'char', 'double', 'float', 'int', 'long',
        -            'short', 'void'
        -            ),
        -        5 => array(
        -            'allProperties', 'asImmutable', 'asSynchronized', 'collect',
        -            'count', 'each', 'eachProperty', 'eachPropertyName',
        -            'eachWithIndex', 'find', 'findAll', 'findIndexOf',
        -            'flatten', 'get', 'grep', 'inject', 'intersect',
        -            'join', 'max', 'min', 'pop', 'reverse',
        -            'reverseEach', 'size', 'sort', 'subMap', 'toList'
        -            ),
        -        6 => array(
        -            'center', 'contains', 'eachMatch', 'padLeft', 'padRight',
        -            'toCharacter', 'tokenize', 'toLong', 'toURL'
        -            ),
        -        7 => array(
        -            'append', 'eachByte', 'eachFile', 'eachFileRecurse', 'eachLine',
        -            'eachLines', 'encodeBase64', 'filterLine', 'getText',
        -            'splitEachLine', 'transformChar', 'transformLine',
        -            'withOutputStream', 'withPrintWriter', 'withReader',
        -            'withStream', 'withStreams', 'withWriter',
        -            'withWriterAppend', 'write', 'writeLine'
        -            ),
        -        8 => array(
        -            'dump', 'getLastMatcher', 'inspect', 'invokeMethod', 'print',
        -            'println', 'start', 'startDaemon', 'step', 'times',
        -            'upto', 'use'
        -            ),
        -        9 => array(
        -            'call', 'close', 'eachRow', 'execute', 'executeUpdate', 'Sql'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '|', '=',
        -        '=>', '||', '-', '+', '<<', '<<<', '&&'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => false,
        -        2 => false,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #aaaadd; font-weight: bold;',
        -            4 => 'color: #993333;',
        -            5 => 'color: #663399;',
        -            6 => 'color: #CC0099;',
        -            7 => 'color: #FFCC33;',
        -            8 => 'color: #993399;',
        -            9 => 'color: #993399; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1=> 'color: #808080; font-style: italic;',
        -            2=> 'color: #a1a100;',
        -            3=> 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAMEL}',
        -        2 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAMEL}',
        -        3 => 'http://www.google.de/search?as_q={FNAME}&num=100&hl=en&as_occt=url&as_sitesearch=java.sun.com%2Fj2se%2F1%2E5%2E0%2Fdocs%2Fapi%2F',
        -        4 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAME}',
        -        5 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAME}',
        -        6 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAME}',
        -        7 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAME}',
        -        8 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAME}',
        -        9 => 'http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20{FNAME}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        //Variables
        -        0 => '\\$\\{[a-zA-Z_][a-zA-Z0-9_]*\\}'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php
        deleted file mode 100644
        index 97310df1..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php
        +++ /dev/null
        @@ -1,151 +0,0 @@
        - 'GwBasic',
        -    'COMMENT_SINGLE' => array(1 => "'", 2=> "REM"),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -    /* Statements */
        -        1 => array('END','FOR','NEXT','DATA','INPUT','DIM','READ','LET',
        -            'GOTO','RUN','IF','RESTORE','GOSUB','RETURN','REM',
        -            'STOP','PRINT','CLEAR','LIST','NEW','ON','WAIT','DEF',
        -            'POKE','CONT','OUT','LPRINT','LLIST','WIDTH','ELSE',
        -            'TRON','TROFF','SWAP','ERASE','EDIT','ERROR','RESUME',
        -            'DELETE','AUTO','RENUM','DEFSTR','DEFINT','DEFSNG',
        -            'DEFDBL','LINE','WHILE','WEND','CALL','WRITE','OPTION',
        -            'RANDOMIZE','OPEN','CLOSE','LOAD','MERGE','SAVE',
        -            'COLOR','CLS','MOTOR','BSAVE','BLOAD','SOUND','BEEP',
        -            'PSET','PRESET','SCREEN','KEY','LOCATE','TO','THEN',
        -            'STEP','USR','FN','SPC','NOT','ERL','ERR','STRING',
        -            'USING','INSTR','VARPTR','CSRLIN','POINT','OFF',
        -            'FILES','FIELD','SYSTEM','NAME','LSET','RSET','KILL',
        -            'PUT','GET','RESET','COMMON','CHAIN','PAINT','COM',
        -            'CIRCLE','DRAW','PLAY','TIMER','IOCTL','CHDIR','MKDIR',
        -            'RMDIR','SHELL','VIEW','WINDOW','PMAP','PALETTE','LCOPY',
        -            'CALLS','PCOPY','LOCK','UNLOCK','RANDOM','APPEND',
        -            ),
        -        2 => array(
        -            /* Functions */
        -            'CVI','CVS','CVD','MKI','MKS','MKD','ENVIRON',
        -            'LEFT','RIGHT','MID','SGN','INT','ABS',
        -            'SQR','SIN','LOG','EXP','COS','TAN','ATN',
        -            'FRE','INP','POS','LEN','STR','VAL','ASC',
        -            'CHR','PEEK','SPACE','OCT','HEX','LPOS',
        -            'CINT','CSNG','CDBL','FIX','PEN','STICK',
        -            'STRIG','EOF','LOC','LOF'
        -            ),
        -        3 => array(
        -            /* alpha Operators */
        -            'AND','OR','XOR','EQV','IMP','MOD'
        -            ),
        -        4 => array(
        -            /* parameterless functions */
        -            'INKEY','DATE','TIME','ERDEV','RND'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '>','=','<','+','-','*','/','^','\\'
        -            ),
        -        1 => array(
        -            '?'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -            GESHI_COMMENTS => false,
        -            1 => false,
        -            2 => false,
        -            3 => false,
        -            4 => false
        -            ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #00a1a1;font-weight: bold',
        -            2 => 'color: #000066;font-weight: bold',
        -            3 => 'color: #00a166;font-weight: bold',
        -            4 => 'color: #0066a1;font-weight: bold'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;',
        -            2 => 'color: #808080;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -        /* Same as KEYWORDS[3] (and, or, not...) */
        -            0 => 'color: #00a166;font-weight: bold',
        -            1 => 'color: #00a1a1;font-weight: bold',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #708090'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        1 => '^[0-9]+ '
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php
        deleted file mode 100644
        index 6fdc2cec..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php
        +++ /dev/null
        @@ -1,204 +0,0 @@
        -.
        - *      Change is local to SyntaxHighlight_GeSHi, made by Ori Livneh (ori@wikimedia.org), based
        - *      on a proposed upstream patch.
        - *      Upstream bug report:
        - *        
        - *      Upstream patch (stalled since 2012):
        - *        
        - *
        - *************************************************************************************
        - *
        - *   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' => 'Haskell',
        -    'COMMENT_SINGLE' => array( 1 => '--'),
        -    'COMMENT_MULTI' => array('{-' => '-}'),
        -    'COMMENT_REGEXP' => array(
        -        2 => "/-->/",
        -        3 => "/{-(?:(?R)|.)-}/s", //Nested Comments
        -        ),
        -    'CASE_KEYWORDS' => 0,
        -    'QUOTEMARKS' => array('"'),  // SyntaxHighlight_GeSHi modification; see CHANGES above.
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        /* main haskell keywords */
        -        1 => array(
        -            'as',
        -            'case', 'of', 'class', 'data', 'default',
        -            'deriving', 'do', 'forall', 'hiding', 'if', 'then',
        -            'else', 'import', 'infix', 'infixl', 'infixr',
        -            'instance', 'let', 'in', 'module', 'newtype',
        -            'qualified', 'type', 'where'
        -            ),
        -        /* define names of main libraries, so we can link to it */
        -        2 => array(
        -            'Foreign', 'Numeric', 'Prelude'
        -            ),
        -        /* just link to Prelude functions, cause it's the default opened library when starting Haskell */
        -        3 => array(
        -            'not', 'otherwise', 'maybe',
        -            'either', 'fst', 'snd', 'curry', 'uncurry',
        -            'compare',
        -            'max', 'min', 'succ', 'pred', 'toEnum', 'fromEnum',
        -            'enumFrom', 'enumFromThen', 'enumFromTo',
        -            'enumFromThenTo', 'minBound', 'maxBound',
        -            'negate', 'abs', 'signum',
        -            'fromInteger', 'toRational', 'quot', 'rem',
        -            'div', 'mod', 'quotRem', 'divMod', 'toInteger',
        -            'recip', 'fromRational', 'pi', 'exp',
        -            'log', 'sqrt', 'logBase', 'sin', 'cos',
        -            'tan', 'asin', 'acos', 'atan', 'sinh', 'cosh',
        -            'tanh', 'asinh', 'acosh', 'atanh',
        -            'properFraction', 'truncate', 'round', 'ceiling',
        -            'floor', 'floatRadix', 'floatDigits', 'floatRange',
        -            'decodeFloat', 'encodeFloat', 'exponent',
        -            'significand', 'scaleFloat', 'isNaN', 'isInfinite',
        -            'isDenomalized', 'isNegativeZero', 'isIEEE',
        -            'atan2', 'subtract', 'even', 'odd', 'gcd',
        -            'lcm', 'fromIntegral', 'realToFrac',
        -            'return', 'fail', 'fmap',
        -            'mapM', 'mapM_', 'sequence', 'sequence_',
        -            'id', 'const','flip',
        -            'until', 'asTypeOf', 'error', 'undefined',
        -            'seq','map','filter', 'head',
        -            'last', 'tail', 'init', 'null', 'length',
        -            'reverse', 'foldl', 'foldl1', 'foldr',
        -            'foldr1', 'and', 'or', 'any', 'all', 'sum',
        -            'product', 'concat', 'concatMap', 'maximum',
        -            'minimum', 'scanl', 'scanl1', 'scanr', 'scanr1',
        -            'iterate', 'repeat', 'cycle', 'take', 'drop',
        -            'splitAt', 'takeWhile', 'dropWhile', 'span',
        -            'break', 'elem', 'notElem', 'lookup', 'zip',
        -            'zip3', 'zipWith', 'zipWith3', 'unzip', 'unzip3',
        -            'lines', 'words', 'unlines',
        -            'unwords', 'showPrec', 'show', 'showList',
        -            'shows', 'showChar', 'showString', 'showParen',
        -            'readsPrec', 'readList', 'reads', 'readParen',
        -            'read', 'lex', 'putChar', 'putStr', 'putStrLn',
        -            'print', 'getChar', 'getLine', 'getContents',
        -            'interact', 'readFile', 'writeFile', 'appendFile',
        -            'readIO', 'readLn', 'ioError', 'userError', 'catch'
        -            ),
        -        /* Prelude types */
        -        4 => array (
        -            'Bool', 'Maybe', 'Either', 'Ordering',
        -            'Char', 'String',
        -            'Int', 'Integer', 'Float', 'Double', 'Rational',
        -            'ShowS', 'ReadS',
        -            'IO', 'IOError', 'IOException'
        -            ),
        -        /* Prelude classes */
        -        5 => array (
        -            'Ord', 'Eq', 'Enum', 'Bounded',
        -            'Num', 'Real', 'Integral', 'Fractional',
        -            'Floating', 'RealFrac', 'RealFloat',
        -            'Monad', 'Functor',
        -            'Show', 'Read'
        -            )
        -        ),
        -    /* Most symbol combinations can be valid Haskell operators */
        -    'SYMBOLS' => array(
        -        '!', '@', '#', '$', '%', '&', '*', '-', '+', '=',
        -        '^', '~', '|', '\\', '>', '<', ':', '?', '/'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true, /* Haskell is a case sensitive language */
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            2 => 'color: #06c; font-weight: bold;', /* blue as well */
        -            3 => 'font-weight: bold;', /* make the preduled functions bold */
        -            4 => 'color: #cccc00; font-weight: bold;', /* give types a different bg */
        -            5 => 'color: maroon; font-weight: bold;' /* similarly for classes */
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #5d478b; font-style: italic;',
        -            2 => 'color: #339933; font-weight: bold;',
        -            3 => 'color: #5d478b; font-style: italic;', /* light purple */
        -            'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'background-color: #3cb371; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: green;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'background-color: #3cb371;' /* nice green */
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: red;' /* pink */
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #060;' /* dark green */
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => 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',
        -        /* link to Prelude functions */
        -        3 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:{FNAME}',
        -        /* link to Prelude types */
        -        4 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
        -        /* link to Prelude exceptions */
        -        5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php
        deleted file mode 100644
        index 17f8394b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php
        +++ /dev/null
        @@ -1,158 +0,0 @@
        - 'Haxe',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Import and Package directives (Basic Support only)
        -        2 => '/(?:(?<=import[\\n\\s])|(?<=using[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
        -        // Haxe comments
        -        3 => '#/\*\*(?![\*\/]).*\*/#sU',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            //http://haxe.org/ref/keywords
        -            'break', 'callback', 'case', 'cast', 'catch', 'class', 'continue', 'default', 'do', 'dynamic',
        -            'else', 'enum', 'extends', 'extern', /*'false',*/ 'for', 'function', 'here', 'if',
        -            'implements', 'import', 'in', 'inline', 'interface', 'never', 'new', /*'null',*/ 'override',
        -            'package', 'private', 'public', 'return', 'static', 'super', 'switch', 'this', 'throw',
        -            'trace', /*'true',*/ 'try', 'typedef', 'untyped', 'using', 'var', 'while',
        -            'macro', '$type',
        -            ),
        -        2 => array(
        -            //primitive values
        -            'null', 'false', 'true',
        -            ),
        -        3 => array(
        -            //global types
        -            'Array', 'ArrayAccess', /*'Bool',*/ 'Class', 'Date', 'DateTools', 'Dynamic',
        -            'EReg', 'Enum', 'EnumValue', /*'Float',*/ 'Hash', /*'Int',*/ 'IntHash', 'IntIter',
        -            'Iterable', 'Iterator', 'Lambda', 'List', 'Math', 'Null', 'Reflect', 'Std',
        -            /*'String',*/ 'StringBuf', 'StringTools', 'Sys', 'Type', /*'UInt',*/ 'ValueType',
        -            /*'Void',*/ 'Xml', 'XmlType',
        -            ),
        -        4 => array(
        -            //primitive types
        -            'Void', 'Bool', 'Int', 'Float', 'UInt', 'String',
        -            ),
        -        5 => array(
        -            //compiler switches
        -            "#if", "#elseif", "#else", "#end", "#error",
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        //http://haxe.org/manual/operators
        -        '++', '--',
        -        '%',
        -        '*', '/',
        -        '+', '-',
        -        '<<', '>>', '>>>',
        -        '|', '&', '^',
        -        '==', '!=', '>', '>=', '<', '<=',
        -        '...',
        -        '&&',
        -        '||',
        -        '?', ':',
        -        '=', '+=', '-=', '/=', '*=', '<<=', '>>=', '>>>=', '|=', '&=', '^=',
        -        '(', ')', '[', ']', '{', '}', ';',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #6699cc; font-weight: bold;',
        -            2 => 'color: #000066; font-weight: bold;',
        -            3 => 'color: #03F; ',
        -            4 => 'color: #000033; font-weight: bold;',
        -            5 => 'color: #330000; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #006699;',
        -            3 => 'color: #008000; font-style: italic; font-weight: bold;',
        -            'MULTI' => 'color: #666666; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;',
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #FF0000;',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006633;',
        -            2 => 'color: #006633;',
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php
        deleted file mode 100644
        index cc2c0172..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php
        +++ /dev/null
        @@ -1,106 +0,0 @@
        - 'HicEst',
        -    'COMMENT_SINGLE' => array(1 => '!'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '\''),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            '$cmd_line', 'abs', 'acos', 'alarm', 'alias', 'allocate', 'appendix', 'asin', 'atan', 'axis', 'beep',
        -            'call', 'ceiling', 'char', 'character', 'com', 'continue', 'cos', 'cosh', 'data', 'diffeq', 'dimension', 'dlg', 'dll',
        -            'do', 'edit', 'else', 'elseif', 'end', 'enddo', 'endif', 'exp', 'floor', 'function', 'fuz', 'goto', 'iand', 'ichar',
        -            'ieor', 'if', 'index', 'init', 'int', 'intpol', 'ior', 'key', 'len', 'len_trim', 'line', 'lock', 'log', 'max', 'maxloc',
        -            'min', 'minloc', 'mod', 'nint', 'not', 'open', 'pop', 'ran', 'read', 'real', 'return', 'rgb', 'roots', 'sign', 'sin',
        -            'sinh', 'solve', 'sort', 'subroutine', 'sum', 'system', 'tan', 'tanh', 'then', 'time', 'use', 'window', 'write', 'xeq'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '+', '-', '*', '/', '=', '<', '>', '!', '^', ':', ','
        -            ),
        -        2 => array(
        -            '$', '$$'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #ff0000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;',
        -            2 => 'color: #ff0000;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(1 => ''),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php
        deleted file mode 100644
        index bb461b14..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php
        +++ /dev/null
        @@ -1,102 +0,0 @@
        - 'HQ9+',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        'H', 'Q', '9', '+', 'h', 'q'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #a16000;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'KEYWORDS' => GESHI_NEVER,
        -            'COMMENTS' => GESHI_NEVER,
        -            'STRINGS' => GESHI_NEVER,
        -            'REGEXPS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php
        deleted file mode 100644
        index 1f01f68e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php
        +++ /dev/null
        @@ -1,188 +0,0 @@
        - 'HTML',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        2 => array(
        -            'a', 'abbr', 'acronym', 'address', 'applet', 'area',
        -            'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
        -            'caption', 'center', 'cite', 'code', 'colgroup', 'col',
        -            'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
        -            'em',
        -            'fieldset', 'font', 'form', 'frame', 'frameset',
        -            'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
        -            'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
        -            'kbd',
        -            'label', 'legend', 'link', 'li',
        -            'map', 'meta',
        -            'noframes', 'noscript',
        -            'object', 'ol', 'optgroup', 'option',
        -            'param', 'pre', 'p',
        -            'q',
        -            'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
        -            'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
        -            'ul', 'u',
        -            'var',
        -            ),
        -        3 => array(
        -            'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
        -            'background', 'bgcolor', 'border',
        -            'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
        -            'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
        -            'enctype',
        -            'face', 'for', 'frame', 'frameborder',
        -            'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
        -            'id', 'ismap',
        -            'label', 'lang', 'language', 'link', 'longdesc',
        -            'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
        -            'name', 'nohref', 'noresize', 'noshade', 'nowrap',
        -            'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
        -            'profile', 'prompt',
        -            'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
        -            'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
        -            'tabindex', 'target', 'text', 'title', 'type',
        -            'usemap',
        -            'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
        -            'width'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '/', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            -2 => 'color: #404040;', // CDATA
        -            -1 => 'color: #808080; font-style: italic;', // comments
        -            0 => 'color: #00bbdd;',
        -            1 => 'color: #ddbb00;',
        -            2 => 'color: #009900;'
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        2 => 'http://december.com/html/4/element/{FNAMEL}.html',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        -2 => array(
        -            ' ']]>'
        -            ),
        -        -1 => array(
        -            ''
        -            ),
        -        0 => array(
        -            ' '>'
        -            ),
        -        1 => array(
        -            '&' => ';'
        -            ),
        -        2 => array(
        -            '<' => '>'
        -            )
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        -2 => false,
        -        -1 => false,
        -        0 => false,
        -        1 => false,
        -        2 => true
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(?<=<|<\/)',
        -                'DISALLOWED_AFTER' => '(?=\s|\/|>)',
        -            )
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php
        deleted file mode 100644
        index 04fb8203..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php
        +++ /dev/null
        @@ -1,210 +0,0 @@
        - 'HTML5',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        2 => array(
        -            'a', 'abbr', 'address', 'article', 'area', 'aside', 'audio',
        -
        -            'base', 'bdo', 'blockquote', 'body', 'br', 'button', 'b',
        -
        -            'caption', 'cite', 'code', 'colgroup', 'col', 'canvas', 'command', 'datalist', 'details',
        -
        -            'dd', 'del', 'dfn', 'div', 'dl', 'dt',
        -
        -            'em', 'embed',
        -
        -            'fieldset', 'form', 'figcaption', 'figure', 'footer',
        -
        -            'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html', 'header', 'hgroup',
        -
        -            'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
        -
        -            'kbd', 'keygen',
        -
        -            'label', 'legend', 'link', 'li',
        -
        -            'map', 'meta', 'mark', 'meter',
        -
        -            'noscript', 'nav',
        -
        -            'object', 'ol', 'optgroup', 'option', 'output',
        -
        -            'param', 'pre', 'p', 'progress',
        -
        -            'q',
        -
        -            'rp', 'rt', 'ruby',
        -
        -            'samp', 'script', 'select', 'small', 'span', 'strong', 'style', 'sub', 'sup', 's', 'section', 'source', 'summary',
        -
        -            'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'time',
        -
        -            'ul',
        -
        -            'var', 'video',
        -
        -            'wbr',
        -            ),
        -        3 => array(
        -            'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis', 'autocomplete', 'autofocus',
        -            'background', 'bgcolor', 'border',
        -            'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords', 'contenteditable', 'contextmenu',
        -            'data', 'datetime', 'declare', 'defer', 'dir', 'disabled', 'draggable', 'dropzone',
        -            'enctype',
        -            'face', 'for', 'frame', 'frameborder', 'form', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget',
        -            'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv', 'hidden',
        -            'id', 'ismap',
        -            'label', 'lang', 'language', 'link', 'longdesc',
        -            'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple', 'min', 'max',
        -            'name', 'nohref', 'noresize', 'noshade', 'nowrap', 'novalidate',
        -            'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onselect', 'onsubmit', 'onunload', 'onafterprint', 'onbeforeprint', 'onbeforeonload', 'onerror', 'onhaschange', 'onmessage', 'onoffline', 'ononline', 'onpagehide', 'onpageshow', 'onpopstate', 'onredo', 'onresize', 'onstorage', 'onundo', 'oncontextmenu', 'onformchange', 'onforminput', 'oninput', 'oninvalid', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onmousewheel', 'onscroll', 'oncanplay', 'oncanplaythrough', 'ondurationchange', 'onemptied', 'onended', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onpause', 'onplay', 'onplaying', 'onprogress', 'onratechange', 'onreadystatechange', 'onseeked', 'onseeking', 'onstalled', 'onsuspend', 'ontimeupdate', 'onvolumechange', 'onwaiting',
        -            'profile', 'prompt', 'pattern', 'placeholder',
        -            'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules', 'required',
        -            'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary', 'spellcheck', 'step',
        -            'tabindex', 'target', 'text', 'title', 'type',
        -            'usemap',
        -            'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
        -            'width'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '/', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            -2 => 'color: #404040;', // CDATA
        -            -1 => 'color: #808080; font-style: italic;', // comments
        -            0 => 'color: #00bbdd;',
        -            1 => 'color: #ddbb00;',
        -            2 => 'color: #009900;'
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        2 => 'http://december.com/html/4/element/{FNAMEL}.html',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        -2 => array(
        -            ' ']]>'
        -            ),
        -        -1 => array(
        -            ''
        -            ),
        -        0 => array(
        -            ' '>'
        -            ),
        -        1 => array(
        -            '&' => ';'
        -            ),
        -        2 => array(
        -            '<' => '>'
        -            )
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        -2 => false,
        -        -1 => false,
        -        0 => false,
        -        1 => false,
        -        2 => true
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(?<=<|<\/)',
        -                'DISALLOWED_AFTER' => '(?=\s|\/|>)',
        -            )
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php
        deleted file mode 100644
        index eddc88bc..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php
        +++ /dev/null
        @@ -1,210 +0,0 @@
        - 'Icon',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '\''),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'break', 'case', 'continue', 'create', 'default', 'do', 'else',
        -            'end', 'every', 'fail', 'for', 'if', 'import', 'initial',
        -            'initially', 'invocable', 'link', 'next', 'not', 'of', 'package',
        -            'procedure', 'record', 'repeat', 'return', 'switch', 'suspend',
        -            'then', 'to', 'until', 'while'
        -            ),
        -        2 => array(
        -            'global', 'local', 'static'
        -            ),
        -        3 => array(
        -            'allocated', 'ascii', 'clock', 'collections',
        -            'column', 'cset', 'current', 'date', 'dateline', 'digits',
        -            'dump', 'e', 'error', 'errornumber', 'errortext',
        -            'errorvalue', 'errout', 'eventcode', 'eventsource', 'eventvalue',
        -            'fail', 'features', 'file', 'host', 'input', 'lcase',
        -            'letters', 'level', 'line', 'main', 'now', 'null',
        -            'output', 'phi', 'pi', 'pos', 'progname', 'random',
        -            'regions', 'source', 'storage', 'subject', 'syserr', 'time',
        -            'trace', 'ucase', 'version', 'col', 'control', 'interval',
        -            'ldrag', 'lpress', 'lrelease', 'mdrag', 'meta', 'mpress',
        -            'mrelease', 'rdrag', 'resize', 'row', 'rpress', 'rrelease',
        -            'shift', 'window', 'x', 'y'
        -            ),
        -        4 => array(
        -            'abs', 'acos', 'any', 'args', 'asin', 'atan', 'bal', 'center', 'char',
        -            'chmod', 'close', 'cofail', 'collect', 'copy', 'cos', 'cset', 'ctime', 'delay', 'delete',
        -            'detab', 'display', 'dtor', 'entab', 'errorclear', 'event', 'eventmask', 'EvGet', 'exit',
        -            'exp', 'fetch', 'fieldnames', 'find', 'flock', 'flush', 'function', 'get', 'getch',
        -            'getche', 'getenv', 'gettimeofday', 'globalnames', 'gtime', 'iand', 'icom', 'image',
        -            'insert', 'integer', 'ior', 'ishift', 'ixor', 'key', 'left', 'list', 'load', 'loadfunc',
        -            'localnames', 'log', 'many', 'map', 'match', 'member', 'mkdir', 'move', 'name', 'numeric',
        -            'open', 'opmask', 'ord', 'paramnames', 'parent', 'pipe', 'pop', 'pos', 'proc', 'pull',
        -            'push', 'put', 'read', 'reads', 'real', 'receive', 'remove', 'rename', 'repl', 'reverse',
        -            'right', 'rmdir', 'rtod', 'runerr', 'seek', 'select', 'send', 'seq', 'serial', 'set',
        -            'setenv', 'sort', 'sortf', 'sql', 'sqrt', 'stat', 'stop', 'string', 'system', 'tab',
        -            'table', 'tan', 'trap', 'trim', 'truncate', 'type', 'upto', 'utime', 'variable', 'where',
        -            'write', 'writes'
        -            ),
        -        5 => array(
        -            'Active', 'Alert', 'Bg', 'Clip', 'Clone', 'Color', 'ColorValue',
        -            'CopyArea', 'Couple', 'DrawArc', 'DrawCircle', 'DrawCurve', 'DrawCylinder', 'DrawDisk',
        -            'DrawImage', 'DrawLine', 'DrawPoint', 'DrawPolygon', 'DrawRectangle', 'DrawSegment',
        -            'DrawSphere', 'DrawString', 'DrawTorus', 'EraseArea', 'Event', 'Fg', 'FillArc',
        -            'FillCircle', 'FillPolygon', 'FillRectangle', 'Font', 'FreeColor', 'GotoRC', 'GotoXY',
        -            'IdentifyMatrix', 'Lower', 'MatrixMode', 'NewColor', 'PaletteChars', 'PaletteColor',
        -            'PaletteKey', 'Pattern', 'Pending', 'Pixel', 'PopMatrix', 'PushMatrix', 'PushRotate',
        -            'PushScale', 'PushTranslate', 'QueryPointer', 'Raise', 'ReadImage', 'Refresh', 'Rotate',
        -            'Scale', 'Texcoord', 'TextWidth', 'Texture', 'Translate', 'Uncouple', 'WAttrib',
        -            'WDefault', 'WFlush', 'WindowContents', 'WriteImage', 'WSync'
        -            ),
        -        6 => array(
        -            'define', 'include', 'ifdef', 'ifndef', 'else', 'endif', 'error',
        -            'line', 'undef'
        -            ),
        -        7 => array(
        -            '_V9', '_AMIGA', '_ACORN', '_CMS', '_MACINTOSH', '_MSDOS_386',
        -            '_MS_WINDOWS_NT', '_MSDOS', '_MVS', '_OS2', '_POR', 'T', '_UNIX', '_POSIX', '_DBM',
        -            '_VMS', '_ASCII', '_EBCDIC', '_CO_EXPRESSIONS', '_CONSOLE_WINDOW', '_DYNAMIC_LOADING',
        -            '_EVENT_MONITOR', '_EXTERNAL_FUNCTIONS', '_KEYBOARD_FUNCTIONS', '_LARGE_INTEGERS',
        -            '_MULTITASKING', '_PIPES', '_RECORD_IO', '_SYSTEM_FUNCTION', '_MESSAGING', '_GRAPHICS',
        -            '_X_WINDOW_SYSTEM', '_MS_WINDOWS', '_WIN32', '_PRESENTATION_MGR', '_ARM_FUNCTIONS',
        -            '_DOS_FUNCTIONS'
        -            ),
        -        8 => array(
        -            'line'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '\\', '%', '=', '<', '>', '!', '^',
        -            '&', '|', '?', ':', ';', ',', '.', '~', '@'
        -            ),
        -        2 => array(
        -            '$(', '$)', '$<', '$>', '$'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #b1b100;',
        -            3 => 'color: #b1b100;',
        -            4 => 'color: #b1b100;',
        -            5 => 'color: #b1b100;',
        -            6 => 'color: #b1b100;',
        -            7 => 'color: #b1b100;',
        -            8 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;',
        -            2 => 'color: #b1b100;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(1 => '.'),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(?<=&)'
        -                ),
        -            4 => array(
        -                'DISALLOWED_BEFORE' => "(? "(?![a-zA-Z0-9_\"\'])"
        -                ),
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\$)'
        -                ),
        -            8 => array(
        -                'DISALLOWED_BEFORE' => '(?<=#)'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php
        deleted file mode 100644
        index 0bdeb9ce..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php
        +++ /dev/null
        @@ -1,121 +0,0 @@
        - 'Uno Idl',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'published', 'get', 'set', 'service', 'singleton', 'type', 'module', 'interface', 'struct',
        -            'const', 'constants', 'exception', 'enum', 'raises', 'typedef'
        -            ),
        -        2 => array(
        -            'bound', 'maybeambiguous', 'maybedefault', 'maybevoid', 'oneway', 'optional',
        -            'readonly', 'in', 'out', 'inout', 'attribute', 'transient', 'removable'
        -            ),
        -        3 => array(
        -            'True', 'False', 'TRUE', 'FALSE'
        -            ),
        -        4 => array(
        -            'string', 'long', 'byte', 'hyper', 'boolean', 'any', 'char', 'double',
        -            'void', 'sequence', 'unsigned'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ';', '...'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #990078; font-weight: bold',
        -            2 => 'color: #36dd1c;',
        -            3 => 'color: #990078; font-weight: bold',
        -            4 => 'color: #0000ec;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #3f7f5f;',
        -            2 => 'color: #808080;',
        -            'MULTI' => 'color: #4080ff; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #666666; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #808080;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php
        deleted file mode 100644
        index 914ebdfe..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php
        +++ /dev/null
        @@ -1,127 +0,0 @@
        - 'INI',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(0 => '/^\s*;.*?$/m'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        '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: #000066; font-weight:bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000066; font-weight:bold;',
        -            1 => 'color: #000099;',
        -            2 => 'color: #660066;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Section names
        -        0 => '\[.+\]',
        -        //Entry names
        -        1 => array(
        -            GESHI_SEARCH => '^(\s*)([a-zA-Z0-9_\-]+)(\s*=)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        //Entry values
        -        2 => array(
        -            // Evil hackery to get around GeSHi bug: <>" and ; are added so s can be matched
        -            // Explicit match on variable names because if a comment is before the first < of the span
        -            // gets chewed up...
        -            GESHI_SEARCH => '([<>";a-zA-Z0-9_]+\s*)=(.*)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1=',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php
        deleted file mode 100644
        index 5fde614b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php
        +++ /dev/null
        @@ -1,210 +0,0 @@
        - 'Inno',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('(*' => '*)'),
        -    'CASE_KEYWORDS' => 0,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'Setup','Types','Components','Tasks','Dirs','Files','Icons','INI',
        -            'InstallDelete','Languages','Messages','CustomMessage',
        -            'LangOptions','Registry','RUN','UninstallDelete','UninstallRun',
        -            'app','win','sys','syswow64','src','sd','pf','pf32','pf64','cf',
        -            'cf32','cf64','tmp','fonts','dao','group','localappdata','sendto',
        -            'userappdata','commonappdata','userdesktop','commondesktop',
        -            'userdocs','commondocs','userfavorites','commonfavorites',
        -            'userprograms','commonprograms','userstartmenu','commonstartmenu',
        -            'userstartup','commonstartup','usertemplates','commontemplates'
        -            ),
        -        2 => array(
        -            'nil', 'false', 'true', 'var', 'type', 'const','And', 'Array', 'As', 'Begin', 'Case', 'Class', 'Constructor', 'Destructor', 'Div', 'Do', 'DownTo', 'Else',
        -            'End', 'Except', 'File', 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited', 'Interface',
        -            'Is', 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Packed', 'Procedure', 'Property', 'Raise', 'Record',
        -            'Repeat', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', 'To', 'Try', 'Unit', 'Until', 'Uses', 'While', 'With', 'Xor',
        -
        -            'HKCC','HKCR','HKCU','HKLM','HKU','alwaysoverwrite','alwaysskipifsameorolder','append',
        -            'binary','classic','closeonexit','comparetimestamp','confirmoverwrite',
        -            'createkeyifdoesntexist','createonlyiffileexists','createvalueifdoesntexist',
        -            'deleteafterinstall','deletekey','deletevalue','dirifempty','dontcloseonexit',
        -            'dontcopy','dontcreatekey','disablenouninstallwarning','dword','exclusive','expandsz',
        -            'external','files','filesandordirs','fixed','fontisnttruetype','ignoreversion','iscustom','isreadme',
        -            'modern','multisz','new','noerror','none','normal','nowait','onlyifdestfileexists',
        -            'onlyifdoesntexist','onlyifnewer','overwrite','overwritereadonly','postinstall',
        -            'preservestringtype','promptifolder','regserver','regtypelib','restart','restartreplace',
        -            'runhidden','runmaximized','runminimized','sharedfile','shellexec','showcheckbox',
        -            'skipifnotsilent','skipifsilent','silent','skipifdoesntexist',
        -            'skipifsourcedoesntexist','sortfilesbyextension','unchecked','uninsalwaysuninstall',
        -            'uninsclearvalue','uninsdeleteentry','uninsdeletekey','uninsdeletekeyifempty',
        -            'uninsdeletesection','uninsdeletesectionifempty','uninsdeletevalue',
        -            'uninsneveruninstall','useapppaths','verysilent','waituntilidle'
        -            ),
        -        3 => array(
        -            'Abs', 'Addr', 'AnsiCompareStr', 'AnsiCompareText', 'AnsiContainsStr', 'AnsiEndsStr', 'AnsiIndexStr', 'AnsiLeftStr',
        -            'AnsiLowerCase', 'AnsiMatchStr', 'AnsiMidStr', 'AnsiPos', 'AnsiReplaceStr', 'AnsiReverseString', 'AnsiRightStr',
        -            'AnsiStartsStr', 'AnsiUpperCase', 'ArcCos', 'ArcSin', 'ArcTan', 'Assigned', 'BeginThread', 'Bounds', 'CelsiusToFahrenheit',
        -            'ChangeFileExt', 'Chr', 'CompareStr', 'CompareText', 'Concat', 'Convert', 'Copy', 'Cos', 'CreateDir', 'CurrToStr',
        -            'CurrToStrF', 'Date', 'DateTimeToFileDate', 'DateTimeToStr', 'DateToStr', 'DayOfTheMonth', 'DayOfTheWeek', 'DayOfTheYear',
        -            'DayOfWeek', 'DaysBetween', 'DaysInAMonth', 'DaysInAYear', 'DaySpan', 'DegToRad', 'DeleteFile', 'DiskFree', 'DiskSize',
        -            'DupeString', 'EncodeDate', 'EncodeDateTime', 'EncodeTime', 'EndOfADay', 'EndOfAMonth', 'Eof', 'Eoln', 'Exp', 'ExtractFileDir',
        -            'ExtractFileDrive', 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath', 'FahrenheitToCelsius', 'FileAge',
        -            'FileDateToDateTime', 'FileExists', 'FilePos', 'FileSearch', 'FileSetDate', 'FileSize', 'FindClose', 'FindCmdLineSwitch',
        -            'FindFirst', 'FindNext', 'FloatToStr', 'FloatToStrF', 'Format', 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'Frac',
        -            'GetCurrentDir', 'GetLastError', 'GetMem', 'High', 'IncDay', 'IncMinute', 'IncMonth', 'IncYear', 'InputBox',
        -            'InputQuery', 'Int', 'IntToHex', 'IntToStr', 'IOResult', 'IsInfinite', 'IsLeapYear', 'IsMultiThread', 'IsNaN',
        -            'LastDelimiter', 'Length', 'Ln', 'Lo', 'Log10', 'Low', 'LowerCase', 'Max', 'Mean', 'MessageDlg', 'MessageDlgPos',
        -            'MonthOfTheYear', 'Now', 'Odd', 'Ord', 'ParamCount', 'ParamStr', 'Pi', 'Point', 'PointsEqual', 'Pos', 'Pred',
        -            'Printer', 'PromptForFileName', 'PtInRect', 'RadToDeg', 'Random', 'RandomRange', 'RecodeDate', 'RecodeTime', 'Rect',
        -            'RemoveDir', 'RenameFile', 'Round', 'SeekEof', 'SeekEoln', 'SelectDirectory', 'SetCurrentDir', 'Sin', 'SizeOf',
        -            'Slice', 'Sqr', 'Sqrt', 'StringOfChar', 'StringReplace', 'StringToWideChar', 'StrToCurr', 'StrToDate', 'StrToDateTime',
        -            'StrToFloat', 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime', 'StuffString', 'Succ', 'Sum', 'Tan',
        -            'Time', 'TimeToStr', 'Tomorrow', 'Trunc', 'UpCase', 'UpperCase', 'VarType', 'WideCharToString', 'WrapText', 'Yesterday',
        -            'Append', 'AppendStr', 'Assign', 'AssignFile', 'AssignPrn', 'Beep', 'BlockRead', 'BlockWrite', 'Break',
        -            'ChDir', 'Close', 'CloseFile', 'Continue', 'DateTimeToString', 'Dec', 'DecodeDate', 'DecodeDateTime',
        -            'DecodeTime', 'Delete', 'Dispose', 'EndThread', 'Erase', 'Exclude', 'Exit', 'FillChar', 'Flush', 'FreeAndNil',
        -            'FreeMem', 'GetDir', 'GetLocaleFormatSettings', 'Halt', 'Inc', 'Include', 'Insert', 'MkDir', 'Move', 'New',
        -            'ProcessPath', 'Randomize', 'Read', 'ReadLn', 'ReallocMem', 'Rename', 'ReplaceDate', 'ReplaceTime',
        -            'Reset', 'ReWrite', 'RmDir', 'RunError', 'Seek', 'SetLength', 'SetString', 'ShowMessage', 'ShowMessageFmt',
        -            'ShowMessagePos', 'Str', 'Truncate', 'Val', 'Write', 'WriteLn',
        -
        -            'AdminPrivilegesRequired','AfterInstall','AllowCancelDuringInstall','AllowNoIcons','AllowRootDirectory','AllowUNCPath','AlwaysRestart','AlwaysShowComponentsList','AlwaysShowDirOnReadyPage','AlwaysShowGroupOnReadyPage ','AlwaysUsePersonalGroup','AppComments','AppContact','AppCopyright','AppendDefaultDirName',
        -            'AppendDefaultGroupName','AppId','AppModifyPath','AppMutex','AppName','AppPublisher',
        -            'AppPublisherURL','AppReadmeFile','AppSupportURL','AppUpdatesURL','AppVerName','AppVersion',
        -            'Attribs','BackColor','BackColor2','BackColorDirection','BackSolid','BeforeInstall',
        -            'ChangesAssociations','ChangesEnvironment','Check','CodeFile','Comment','Compression','CopyMode',
        -            'CreateAppDir','CreateUninstallRegKey','DefaultDirName','DefaultGroupName',
        -            'DefaultUserInfoName','DefaultUserInfoOrg','DefaultUserInfoSerial',
        -            'Description','DestDir','DestName','DirExistsWarning',
        -            'DisableDirPage','DisableFinishedPage',
        -            'DisableProgramGroupPage','DisableReadyMemo','DisableReadyPage',
        -            'DisableStartupPrompt','DiskClusterSize','DiskSliceSize','DiskSpaceMBLabel',
        -            'DiskSpanning','DontMergeDuplicateFiles','EnableDirDoesntExistWarning','Encryption',
        -            'Excludes','ExtraDiskSpaceRequired','Filename','Flags','FlatComponentsList','FontInstall',
        -            'GroupDescription','HotKey','IconFilename','IconIndex','InfoAfterFile','InfoBeforeFile',
        -            'InternalCompressLevel','Key','LanguageDetectionMethod',
        -            'LicenseFile','MergeDuplicateFiles','MessagesFile','MinVersion','Name',
        -            'OnlyBelowVersion','OutputBaseFilename','OutputManifestFile','OutputDir',
        -            'Parameters','Password','Permissions','PrivilegesRequired','ReserveBytes',
        -            'RestartIfNeededByRun','Root','RunOnceId','Section','SetupIconFile',
        -            'ShowComponentSizes','ShowLanguageDialog','ShowTasksTreeLines','SlicesPerDisk',
        -            'SolidCompression','Source','SourceDir','StatusMsg','Subkey',
        -            'TimeStampRounding','TimeStampsInUTC','TouchDate','TouchTime','Type',
        -            'UninstallDisplayIcon','UninstallDisplayName','UninstallFilesDir','UninstallIconFile',
        -            'UninstallLogMode','UninstallRestartComputer','UninstallStyle','Uninstallable',
        -            'UpdateUninstallLogAppName','UsePreviousAppDir','UsePreviousGroup',
        -            'UsePreviousTasks','UsePreviousSetupType','UsePreviousUserInfo',
        -            'UserInfoPage','UseSetupLdr','ValueData','ValueName','ValueType',
        -            'VersionInfoVersion','VersionInfoCompany','VersionInfoDescription','VersionInfoTextVersion',
        -            'WindowResizable','WindowShowCaption','WindowStartMaximized',
        -            'WindowVisible','WizardImageBackColor','WizardImageFile','WizardImageStretch','WizardSmallImageBackColor','WizardSmallImageFile','WizardStyle','WorkingDir'
        -            ),
        -        4 => array(
        -            'AnsiChar', 'AnsiString', 'Boolean', 'Byte', 'Cardinal', 'Char', 'Comp', 'Currency', 'Double', 'Extended',
        -            'Int64', 'Integer', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PChar', 'PCurrency', 'PDateTime',
        -            'PExtended', 'PInt64', 'Pointer', 'PShortString', 'PString', 'PVariant', 'PWideChar', 'PWideString',
        -            'Real', 'Real48', 'ShortInt', 'ShortString', 'Single', 'SmallInt', 'String', 'TBits', 'TConvType', 'TDateTime',
        -            'Text', 'TextFile', 'TFloatFormat', 'TFormatSettings', 'TList', 'TObject', 'TOpenDialog', 'TPoint',
        -            'TPrintDialog', 'TRect', 'TReplaceFlags', 'TSaveDialog', 'TSearchRec', 'TStringList', 'TSysCharSet',
        -            'TThreadFunc', 'Variant', 'WideChar', 'WideString', 'Word'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '@', '%', '&', '*', '|', '/', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',/*bold Black*/
        -            2 => 'color: #000000;font-style: italic;',/*Black*/
        -            3 => 'color: #0000FF;',/*blue*/
        -            4 => 'color: #CC0000;'/*red*/
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #33FF00; font-style: italic;',
        -            'MULTI' => 'color: #33FF00; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000; font-weight: bold;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php
        deleted file mode 100644
        index c68b9791..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php
        +++ /dev/null
        @@ -1,120 +0,0 @@
        - 'INTERCAL',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        //Politeness
        -        1 => array(
        -            'DO', 'DOES', 'DONT', 'DON\'T', 'NOT', 'PLEASE', 'PLEASENT', 'PLEASEN\'T', 'MAYBE'
        -            ),
        -        //Statements
        -        2 => array(
        -            'STASH', 'RETRIEVE', 'NEXT', 'RESUME', 'FORGET', 'ABSTAIN', 'ABSTAINING',
        -            'COME', 'FROM', 'CALCULATING', 'REINSTATE', 'IGNORE', 'REMEMBER',
        -            'WRITE', 'IN', 'READ', 'OUT', 'GIVE', 'UP'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '.', ',', ':', ';', '#',
        -        '~', '$', '&', '?',
        -        '\'', '"', '<-'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000080; font-weight: bold;',
        -            2 => 'color: #000080; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #808080; font-style: italic;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        1 => '^\(\d+\)'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'COMMENTS' => GESHI_NEVER,
        -            'STRINGS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php
        deleted file mode 100644
        index b57ab857..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php
        +++ /dev/null
        @@ -1,136 +0,0 @@
        - 'Io',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'and', 'break', 'else', 'elseif', 'exit', 'for', 'foreach', 'if', 'ifFalse', 'ifNil',
        -            'ifTrue', 'or', 'pass', 'raise', 'return', 'then', 'try', 'wait', 'while', 'yield'
        -            ),
        -        2 => array(
        -            'activate', 'activeCoroCount', 'asString', 'block', 'catch', 'clone', 'collectGarbage',
        -            'compileString', 'continue', 'do', 'doFile', 'doMessage', 'doString', 'forward',
        -            'getSlot', 'getenv', 'hasSlot', 'isActive', 'isNil', 'isResumable', 'list', 'message',
        -            'method', 'parent', 'pause', 'perform', 'performWithArgList', 'print', 'proto',
        -            'raiseResumable', 'removeSlot', 'resend', 'resume', 'schedulerSleepSeconds', 'self',
        -            'sender', 'setSchedulerSleepSeconds', 'setSlot', 'shallowCopy', 'slotNames', 'super',
        -            'system', 'thisBlock', 'thisContext', 'thisMessage', 'type', 'uniqueId', 'updateSlot',
        -            'write'
        -            ),
        -        3 => array(
        -            'Array', 'AudioDevice', 'AudioMixer', 'Block', 'Box', 'Buffer', 'CFunction', 'CGI',
        -            'Color', 'Curses', 'DBM', 'DNSResolver', 'DOConnection', 'DOProxy', 'DOServer',
        -            'Date', 'Directory', 'Duration', 'DynLib', 'Error', 'Exception', 'FFT', 'File',
        -            'Fnmatch', 'Font', 'Future', 'GL', 'GLE', 'GLScissor', 'GLU', 'GLUCylinder',
        -            'GLUQuadric', 'GLUSphere', 'GLUT', 'Host', 'Image', 'Importer', 'LinkList', 'List',
        -            'Lobby', 'Locals', 'MD5', 'MP3Decoder', 'MP3Encoder', 'Map', 'Message', 'Movie',
        -            'NULL', 'Nil', 'Nop', 'Notifiction', 'Number', 'Object', 'OpenGL', 'Point', 'Protos',
        -            'Regex', 'SGMLTag', 'SQLite', 'Server', 'ShowMessage', 'SleepyCat', 'SleepyCatCursor',
        -            'Socket', 'SocketManager', 'Sound', 'Soup', 'Store', 'String', 'Tree', 'UDPSender',
        -            'UDPReceiver', 'URL', 'User', 'Warning', 'WeakLink'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php
        deleted file mode 100644
        index a0b0541b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php
        +++ /dev/null
        @@ -1,165 +0,0 @@
        - 'ISPF Panel',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        // Panel Definition Statements
        -        1 => array(
        -            ')CCSID',')PANEL',')ATTR',')ABC',')ABCINIT',')ABCPROC',')BODY',')MODEL',
        -            ')AREA',')INIT',')REINIT',')PROC',')FIELD',')HELP',')LIST',')PNTS',')END'
        -            ),
        -        // File-Tailoring Skeletons
        -        2 => array (
        -            ')DEFAULT',')BLANK', ')CM', ')DO', ')DOT', ')ELSE', ')ENDSEL',
        -            ')ENDDO', ')ENDDOT', ')IF', ')IM', ')ITERATE', ')LEAVE', ')NOP', ')SEL',
        -            ')SET', ')TB', ')TBA'
        -            ),
        -        // Control Variables
        -        3 => array (
        -            '.ALARM','.ATTR','.ATTRCHAR','.AUTOSEL','.CSRPOS','.CSRROW','.CURSOR','.HELP',
        -            '.HHELP','.KANA','.MSG','.NRET','.PFKEY','.RESP','.TRAIL','.ZVARS'
        -            ),
        -        // Keywords
        -        4 => array (
        -            'WINDOW','ALARM','ATTN','BARRIER','HILITE','CAPS',
        -            'CKBOX','CLEAR','CMD','COLOR','COMBO','CSRGRP','CUADYN',
        -            'SKIP','INTENS','AREA','EXTEND',
        -            'DESC','ASIS','VGET','VPUT','JUST','BATSCRD','BATSCRW',
        -            'BDBCS','BDISPMAX','BIT','BKGRND','BREDIMAX','PAD','PADC',
        -            'PAS','CHINESES','CHINESET','DANISH','DATAMOD','DDLIST',
        -            'DEPTH','DUMP','ENGLISH','ERROR','EXIT','EXPAND','FIELD',
        -            'FORMAT','FRENCH','GE','GERMAN','IMAGE','IND','TYPE',
        -            'ITALIAN','JAPANESE','KOREAN','LCOL','LEN','LIND','LISTBOX',
        -            'MODE','NEST','NOJUMP','NOKANA','NUMERIC','OUTLINE','PARM',
        -            'PGM','PORTUGESE','RADIO','RCOL','REP','RIND','ROWS',
        -            'SCALE','SCROLL','SFIHDR','SGERMAN','SIND','SPANISH',
        -            'UPPERENG','WIDTH'
        -            ),
        -        // Parameters
        -        5 => array (
        -            'ADDPOP','ALPHA','ALPHAB','DYNAMIC','SCRL',
        -            'CCSID','COMMAND','DSNAME','DSNAMEF','DSNAMEFM',
        -            'DSNAMEPQ','DSNAMEQ','EBCDIC','ENBLDUMP','ENUM',// 'EXTEND',
        -            'FI','FILEID','FRAME','GUI','GUISCRD','GUISCRW','HEX',
        -            'HIGH','IDATE','IN','INCLUDE','INPUT','ITIME','JDATE',
        -            'JSTD','KEYLIST','LANG','LEFT','LIST','LISTV','LISTVX',
        -            'LISTX','LMSG','LOGO','LOW','MIX','NAME','NAMEF','NB',
        -            'NEWAPPL','NEWPOOL','NOCHECK','NOLOGO','NON','NONBLANK',
        -            'NULLS','NUM','OFF','ON','OPT','OUT','OUTPUT','PANEL',
        -            /* 'PGM',*/'PICT','PICTN','POSITION','TBDISPL','PROFILE',
        -            'QUERY','RANGE','REVERSE','RIGHT','SHARED','SMSG',
        -            'STDDATE','STDTIME','TERMSTAT','TERMTRAC','TEST',
        -            'TESTX','TEXT','TRACE','TRACEX','USCORE','USER',
        -            'USERMOD','WSCMD','WSCMDV'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(',')','=','&',',','*','#','+','&','%','_','-','@','!'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false
        -        ),
        -    'STYLES' => array(
        -        'BKGROUND' => 'background-color: #000000; color: #00FFFF;',
        -        'KEYWORDS' => array(
        -            1 => 'color: #FF0000;',
        -            2 => 'color: #21A502;',
        -            3 => 'color: #FF00FF;',
        -            4 => 'color: #876C00;',
        -            5 => 'color: #00FF00;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #002EB8; font-style: italic;',
        -            //1 => 'color: #002EB8; font-style: italic;',
        -            //2 => 'color: #002EB8; font-style: italic;',
        -            'MULTI' => 'color: #002EB8; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #FF7400;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #700000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF6633;'
        -            ),
        -        'METHODS' => array(
        -            1 => '',
        -            2 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #FF7400;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #6B1F6B;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        // Variables Defined in the Panel
        -        0 => '&[a-zA-Z]{1,8}[0-9]{0,}',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php
        deleted file mode 100644
        index 4cfda8b5..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php
        +++ /dev/null
        @@ -1,188 +0,0 @@
        - 'J',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        1 => '/(? '/(?<=\bNote\b).*?$\s+\)(?:(?!\n)\s)*$/sm',   //multiline comments in Note
        -        3 => "/'[^']*?$/m"                        //incomplete strings/open quotes
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array("'"),
        -    'HARDCHAR' => "'",
        -    'NUMBERS' => array(
        -        0 => '\b(?:_?\d+(?:\.\d+)?(?:x|[bejprx]_?[\da-z]+(?:\.[\da-z]+)?)?|__?)(?![\w\.\:])',
        -        ),
        -    'KEYWORDS' => array(
        -        //Control words
        -        1 => array(
        -            'assert.', 'break.', 'case.', 'catch.', 'catcht.', 'continue.', 'do.',
        -            'else.', 'elseif.', 'end.', 'fcase.', 'for.', 'goto.', 'if.', 'label.',
        -            'return.', 'select.', 'throw.', 'trap.', 'try.', 'while.', 'whilst.'
        -            ),
        -        //Arguments
        -        2 => array(
        -            'm', 'n', 'u', 'v', 'x', 'y'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        //Punctuation
        -        0 => array(
        -            '(', ')'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        //6 => true,
        -        //7 => true,
        -        //8 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff; font-weight: bold;',
        -            2 => 'color: #0000cc; font-weight: bold;',
        -            //6 => 'color: #000000; font-weight: bold;',
        -            //7 => 'color: #000000; font-weight: bold;',
        -            //8 => 'color: #000000; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #666666; font-style: italic; font-weight: bold;',
        -            3 => 'color: #ff00ff; ',                      //open quote
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            'HARD' => 'font-weight: bold;',
        -            0 => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            'HARD' => 'color: #ff0000;',
        -            0 => 'color: #ff0000;',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #009999; font-weight: bold;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #009900; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff; font-weight: bold;',   //for_xyz. - same as kw1
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '', //'http://www.jsoftware.com/help/dictionary/ctrl.htm',
        -        2 => '',
        -        //6 => '', //'http://www.jsoftware.com/jwiki/Vocabulary',
        -        //7 => '', //'http://www.jsoftware.com/jwiki/Vocabulary',
        -        //8 => '', //'http://www.jsoftware.com/jwiki/Vocabulary',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => '\b(for|goto|label)_[a-zA-Z]\w*\.',   //for_xyz. - should be kw1
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            ),
        -        'NUMBERS' => array(
        -            'PRECHECK_RX' => '#[\d_]#',            // underscore is valid number
        -            ),
        -        'KEYWORDS' => array(
        -            //Control words
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(? '(?![\w\.\:])',
        -                ),
        -            //Primtives starting with a symbol (except . or :)
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?!K)',    // effect should be to allow anything
        -                'DISALLOWED_AFTER' => '(?=.*)',
        -                ),
        -            //Primtives starting with a letter
        -            7 => array(
        -                'DISALLOWED_BEFORE' => '(? '(?=.*)',
        -                ),
        -            //Primtives starting with symbol . or :
        -            8 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\s)',
        -                'DISALLOWED_AFTER' => '(?=.*)',
        -                ),
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php
        deleted file mode 100644
        index b7323cd0..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php
        +++ /dev/null
        @@ -1,980 +0,0 @@
        - 'Java',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Import and Package directives (Basic Support only)
        -        2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
        -        // javadoc comments
        -        3 => '#/\*\*(?![\*\/]).*\*/#sU'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'for', 'foreach', 'if', 'else', 'while', 'do',
        -            'switch', 'case',  'return', 'public',
        -            'private', 'protected', 'extends', 'break', 'class',
        -            'new', 'try', 'catch', 'throws', 'finally', 'implements',
        -            'interface', 'throw', 'final', 'native', 'synchronized', 'this',
        -            'abstract', 'transient', 'instanceof', 'assert', 'continue',
        -            'default', 'enum', 'package', 'static', 'strictfp', 'super',
        -            'volatile', 'const', 'goto', 'import'
        -            ),
        -        2 => array(
        -            'null', 'false', 'true'
        -            ),
        -        3 => array(
        -            'AbstractAction', 'AbstractBorder', 'AbstractButton',
        -            'AbstractCellEditor', 'AbstractCollection',
        -            'AbstractColorChooserPanel', 'AbstractDocument',
        -            'AbstractDocument.AttributeContext',
        -            'AbstractDocument.Content',
        -            'AbstractDocument.ElementEdit',
        -            'AbstractLayoutCache',
        -            'AbstractLayoutCache.NodeDimensions', 'AbstractList',
        -            'AbstractListModel', 'AbstractMap',
        -            'AbstractMethodError', 'AbstractSequentialList',
        -            'AbstractSet', 'AbstractTableModel',
        -            'AbstractUndoableEdit', 'AbstractWriter',
        -            'AccessControlContext', 'AccessControlException',
        -            'AccessController', 'AccessException', 'Accessible',
        -            'AccessibleAction', 'AccessibleBundle',
        -            'AccessibleComponent', 'AccessibleContext',
        -            'AccessibleHyperlink', 'AccessibleHypertext',
        -            'AccessibleIcon', 'AccessibleObject',
        -            'AccessibleRelation', 'AccessibleRelationSet',
        -            'AccessibleResourceBundle', 'AccessibleRole',
        -            'AccessibleSelection', 'AccessibleState',
        -            'AccessibleStateSet', 'AccessibleTable',
        -            'AccessibleTableModelChange', 'AccessibleText',
        -            'AccessibleValue', 'Acl', 'AclEntry',
        -            'AclNotFoundException', 'Action', 'ActionEvent',
        -            'ActionListener', 'ActionMap', 'ActionMapUIResource',
        -            'Activatable', 'ActivateFailedException',
        -            'ActivationDesc', 'ActivationException',
        -            'ActivationGroup', 'ActivationGroupDesc',
        -            'ActivationGroupDesc.CommandEnvironment',
        -            'ActivationGroupID', 'ActivationID',
        -            'ActivationInstantiator', 'ActivationMonitor',
        -            'ActivationSystem', 'Activator', 'ActiveEvent',
        -            'Adjustable', 'AdjustmentEvent',
        -            'AdjustmentListener', 'Adler32', 'AffineTransform',
        -            'AffineTransformOp', 'AlgorithmParameterGenerator',
        -            'AlgorithmParameterGeneratorSpi',
        -            'AlgorithmParameters', 'AlgorithmParameterSpec',
        -            'AlgorithmParametersSpi', 'AllPermission',
        -            'AlphaComposite', 'AlreadyBound',
        -            'AlreadyBoundException', 'AlreadyBoundHelper',
        -            'AlreadyBoundHolder', 'AncestorEvent',
        -            'AncestorListener', 'Annotation', 'Any', 'AnyHolder',
        -            'AnySeqHelper', 'AnySeqHolder', 'Applet',
        -            'AppletContext', 'AppletInitializer', 'AppletStub',
        -            'ApplicationException', 'Arc2D', 'Arc2D.Double',
        -            'Arc2D.Float', 'Area', 'AreaAveragingScaleFilter',
        -            'ARG_IN', 'ARG_INOUT', 'ARG_OUT',
        -            'ArithmeticException', 'Array',
        -            'ArrayIndexOutOfBoundsException', 'ArrayList',
        -            'Arrays', 'ArrayStoreException', 'AsyncBoxView',
        -            'Attribute', 'AttributedCharacterIterator',
        -            'AttributedCharacterIterator.Attribute',
        -            'AttributedString', 'AttributeInUseException',
        -            'AttributeList', 'AttributeModificationException',
        -            'Attributes', 'Attributes.Name', 'AttributeSet',
        -            'AttributeSet.CharacterAttribute',
        -            'AttributeSet.ColorAttribute',
        -            'AttributeSet.FontAttribute',
        -            'AttributeSet.ParagraphAttribute', 'AudioClip',
        -            'AudioFileFormat', 'AudioFileFormat.Type',
        -            'AudioFileReader', 'AudioFileWriter', 'AudioFormat',
        -            'AudioFormat.Encoding', 'AudioInputStream',
        -            'AudioPermission', 'AudioSystem',
        -            'AuthenticationException',
        -            'AuthenticationNotSupportedException',
        -            'Authenticator', 'Autoscroll', 'AWTError',
        -            'AWTEvent', 'AWTEventListener',
        -            'AWTEventMulticaster', 'AWTException',
        -            'AWTPermission', 'BadKind', 'BadLocationException',
        -            'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION',
        -            'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE',
        -            'BAD_POLICY_VALUE', 'BAD_TYPECODE', 'BandCombineOp',
        -            'BandedSampleModel', 'BasicArrowButton',
        -            'BasicAttribute', 'BasicAttributes', 'BasicBorders',
        -            'BasicBorders.ButtonBorder',
        -            'BasicBorders.FieldBorder',
        -            'BasicBorders.MarginBorder',
        -            'BasicBorders.MenuBarBorder',
        -            'BasicBorders.RadioButtonBorder',
        -            'BasicBorders.SplitPaneBorder',
        -            'BasicBorders.ToggleButtonBorder',
        -            'BasicButtonListener', 'BasicButtonUI',
        -            'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI',
        -            'BasicColorChooserUI', 'BasicComboBoxEditor',
        -            'BasicComboBoxEditor.UIResource',
        -            'BasicComboBoxRenderer',
        -            'BasicComboBoxRenderer.UIResource',
        -            'BasicComboBoxUI', 'BasicComboPopup',
        -            'BasicDesktopIconUI', 'BasicDesktopPaneUI',
        -            'BasicDirectoryModel', 'BasicEditorPaneUI',
        -            'BasicFileChooserUI', 'BasicGraphicsUtils',
        -            'BasicHTML', 'BasicIconFactory',
        -            'BasicInternalFrameTitlePane',
        -            'BasicInternalFrameUI', 'BasicLabelUI',
        -            'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI',
        -            'BasicMenuItemUI', 'BasicMenuUI',
        -            'BasicOptionPaneUI',
        -            'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI',
        -            'BasicPasswordFieldUI', 'BasicPermission',
        -            'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI',
        -            'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI',
        -            'BasicRadioButtonUI', 'BasicRootPaneUI',
        -            'BasicScrollBarUI', 'BasicScrollPaneUI',
        -            'BasicSeparatorUI', 'BasicSliderUI',
        -            'BasicSplitPaneDivider', 'BasicSplitPaneUI',
        -            'BasicStroke', 'BasicTabbedPaneUI',
        -            'BasicTableHeaderUI', 'BasicTableUI',
        -            'BasicTextAreaUI', 'BasicTextFieldUI',
        -            'BasicTextPaneUI', 'BasicTextUI',
        -            'BasicTextUI.BasicCaret',
        -            'BasicTextUI.BasicHighlighter',
        -            'BasicToggleButtonUI', 'BasicToolBarSeparatorUI',
        -            'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI',
        -            'BasicViewportUI', 'BatchUpdateException',
        -            'BeanContext', 'BeanContextChild',
        -            'BeanContextChildComponentProxy',
        -            'BeanContextChildSupport',
        -            'BeanContextContainerProxy', 'BeanContextEvent',
        -            'BeanContextMembershipEvent',
        -            'BeanContextMembershipListener', 'BeanContextProxy',
        -            'BeanContextServiceAvailableEvent',
        -            'BeanContextServiceProvider',
        -            'BeanContextServiceProviderBeanInfo',
        -            'BeanContextServiceRevokedEvent',
        -            'BeanContextServiceRevokedListener',
        -            'BeanContextServices', 'BeanContextServicesListener',
        -            'BeanContextServicesSupport',
        -            'BeanContextServicesSupport.BCSSServiceProvider',
        -            'BeanContextSupport',
        -            'BeanContextSupport.BCSIterator', 'BeanDescriptor',
        -            'BeanInfo', 'Beans', 'BevelBorder', 'BigDecimal',
        -            'BigInteger', 'BinaryRefAddr', 'BindException',
        -            'Binding', 'BindingHelper', 'BindingHolder',
        -            'BindingIterator', 'BindingIteratorHelper',
        -            'BindingIteratorHolder', 'BindingIteratorOperations',
        -            'BindingListHelper', 'BindingListHolder',
        -            'BindingType', 'BindingTypeHelper',
        -            'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView',
        -            'Book', 'Boolean', 'BooleanControl',
        -            'BooleanControl.Type', 'BooleanHolder',
        -            'BooleanSeqHelper', 'BooleanSeqHolder', 'Border',
        -            'BorderFactory', 'BorderLayout', 'BorderUIResource',
        -            'BorderUIResource.BevelBorderUIResource',
        -            'BorderUIResource.CompoundBorderUIResource',
        -            'BorderUIResource.EmptyBorderUIResource',
        -            'BorderUIResource.EtchedBorderUIResource',
        -            'BorderUIResource.LineBorderUIResource',
        -            'BorderUIResource.MatteBorderUIResource',
        -            'BorderUIResource.TitledBorderUIResource',
        -            'BoundedRangeModel', 'Bounds', 'Box', 'Box.Filler',
        -            'BoxedValueHelper', 'BoxLayout', 'BoxView',
        -            'BreakIterator', 'BufferedImage',
        -            'BufferedImageFilter', 'BufferedImageOp',
        -            'BufferedInputStream', 'BufferedOutputStream',
        -            'BufferedReader', 'BufferedWriter', 'Button',
        -            'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte',
        -            'ByteArrayInputStream', 'ByteArrayOutputStream',
        -            'ByteHolder', 'ByteLookupTable', 'Calendar',
        -            'CallableStatement', 'CannotProceed',
        -            'CannotProceedException', 'CannotProceedHelper',
        -            'CannotProceedHolder', 'CannotRedoException',
        -            'CannotUndoException', 'Canvas', 'CardLayout',
        -            'Caret', 'CaretEvent', 'CaretListener', 'CellEditor',
        -            'CellEditorListener', 'CellRendererPane',
        -            'Certificate', 'Certificate.CertificateRep',
        -            'CertificateEncodingException',
        -            'CertificateException',
        -            'CertificateExpiredException', 'CertificateFactory',
        -            'CertificateFactorySpi',
        -            'CertificateNotYetValidException',
        -            'CertificateParsingException',
        -            'ChangedCharSetException', 'ChangeEvent',
        -            'ChangeListener', 'Character', 'Character.Subset',
        -            'Character.UnicodeBlock', 'CharacterIterator',
        -            'CharArrayReader', 'CharArrayWriter',
        -            'CharConversionException', 'CharHolder',
        -            'CharSeqHelper', 'CharSeqHolder', 'Checkbox',
        -            'CheckboxGroup', 'CheckboxMenuItem',
        -            'CheckedInputStream', 'CheckedOutputStream',
        -            'Checksum', 'Choice', 'ChoiceFormat', 'Class',
        -            'ClassCastException', 'ClassCircularityError',
        -            'ClassDesc', 'ClassFormatError', 'ClassLoader',
        -            'ClassNotFoundException', 'Clip', 'Clipboard',
        -            'ClipboardOwner', 'Clob', 'Cloneable',
        -            'CloneNotSupportedException', 'CMMException',
        -            'CodeSource', 'CollationElementIterator',
        -            'CollationKey', 'Collator', 'Collection',
        -            'Collections', 'Color',
        -            'ColorChooserComponentFactory', 'ColorChooserUI',
        -            'ColorConvertOp', 'ColorModel',
        -            'ColorSelectionModel', 'ColorSpace',
        -            'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel',
        -            'ComboBoxUI', 'ComboPopup', 'CommunicationException',
        -            'COMM_FAILURE', 'Comparable', 'Comparator',
        -            'Compiler', 'CompletionStatus',
        -            'CompletionStatusHelper', 'Component',
        -            'ComponentAdapter', 'ComponentColorModel',
        -            'ComponentEvent', 'ComponentInputMap',
        -            'ComponentInputMapUIResource', 'ComponentListener',
        -            'ComponentOrientation', 'ComponentSampleModel',
        -            'ComponentUI', 'ComponentView', 'Composite',
        -            'CompositeContext', 'CompositeName', 'CompositeView',
        -            'CompoundBorder', 'CompoundControl',
        -            'CompoundControl.Type', 'CompoundEdit',
        -            'CompoundName', 'ConcurrentModificationException',
        -            'ConfigurationException', 'ConnectException',
        -            'ConnectIOException', 'Connection', 'Constructor', 'Container',
        -            'ContainerAdapter', 'ContainerEvent',
        -            'ContainerListener', 'ContentHandler',
        -            'ContentHandlerFactory', 'ContentModel', 'Context',
        -            'ContextList', 'ContextNotEmptyException',
        -            'ContextualRenderedImageFactory', 'Control',
        -            'Control.Type', 'ControlFactory',
        -            'ControllerEventListener', 'ConvolveOp', 'CRC32',
        -            'CRL', 'CRLException', 'CropImageFilter', 'CSS',
        -            'CSS.Attribute', 'CTX_RESTRICT_SCOPE',
        -            'CubicCurve2D', 'CubicCurve2D.Double',
        -            'CubicCurve2D.Float', 'Current', 'CurrentHelper',
        -            'CurrentHolder', 'CurrentOperations', 'Cursor',
        -            'Customizer', 'CustomMarshal', 'CustomValue',
        -            'DatabaseMetaData', 'DataBuffer', 'DataBufferByte',
        -            'DataBufferInt', 'DataBufferShort',
        -            'DataBufferUShort', 'DataFlavor',
        -            'DataFormatException', 'DatagramPacket',
        -            'DatagramSocket', 'DatagramSocketImpl',
        -            'DatagramSocketImplFactory', 'DataInput',
        -            'DataInputStream', 'DataLine', 'DataLine.Info',
        -            'DataOutput', 'DataOutputStream',
        -            'DataTruncation', 'DATA_CONVERSION', 'Date',
        -            'DateFormat', 'DateFormatSymbols', 'DebugGraphics',
        -            'DecimalFormat', 'DecimalFormatSymbols',
        -            'DefaultBoundedRangeModel', 'DefaultButtonModel',
        -            'DefaultCaret', 'DefaultCellEditor',
        -            'DefaultColorSelectionModel', 'DefaultComboBoxModel',
        -            'DefaultDesktopManager', 'DefaultEditorKit',
        -            'DefaultEditorKit.BeepAction',
        -            'DefaultEditorKit.CopyAction',
        -            'DefaultEditorKit.CutAction',
        -            'DefaultEditorKit.DefaultKeyTypedAction',
        -            'DefaultEditorKit.InsertBreakAction',
        -            'DefaultEditorKit.InsertContentAction',
        -            'DefaultEditorKit.InsertTabAction',
        -            'DefaultEditorKit.PasteAction,',
        -            'DefaultFocusManager', 'DefaultHighlighter',
        -            'DefaultHighlighter.DefaultHighlightPainter',
        -            'DefaultListCellRenderer',
        -            'DefaultListCellRenderer.UIResource',
        -            'DefaultListModel', 'DefaultListSelectionModel',
        -            'DefaultMenuLayout', 'DefaultMetalTheme',
        -            'DefaultMutableTreeNode',
        -            'DefaultSingleSelectionModel',
        -            'DefaultStyledDocument',
        -            'DefaultStyledDocument.AttributeUndoableEdit',
        -            'DefaultStyledDocument.ElementSpec',
        -            'DefaultTableCellRenderer',
        -            'DefaultTableCellRenderer.UIResource',
        -            'DefaultTableColumnModel', 'DefaultTableModel',
        -            'DefaultTextUI', 'DefaultTreeCellEditor',
        -            'DefaultTreeCellRenderer', 'DefaultTreeModel',
        -            'DefaultTreeSelectionModel', 'DefinitionKind',
        -            'DefinitionKindHelper', 'Deflater',
        -            'DeflaterOutputStream', 'Delegate', 'DesignMode',
        -            'DesktopIconUI', 'DesktopManager', 'DesktopPaneUI',
        -            'DGC', 'Dialog', 'Dictionary', 'DigestException',
        -            'DigestInputStream', 'DigestOutputStream',
        -            'Dimension', 'Dimension2D', 'DimensionUIResource',
        -            'DirContext', 'DirectColorModel', 'DirectoryManager',
        -            'DirObjectFactory', 'DirStateFactory',
        -            'DirStateFactory.Result', 'DnDConstants', 'Document',
        -            'DocumentEvent', 'DocumentEvent.ElementChange',
        -            'DocumentEvent.EventType', 'DocumentListener',
        -            'DocumentParser', 'DomainCombiner', 'DomainManager',
        -            'DomainManagerOperations', 'Double', 'DoubleHolder',
        -            'DoubleSeqHelper', 'DoubleSeqHolder',
        -            'DragGestureEvent', 'DragGestureListener',
        -            'DragGestureRecognizer', 'DragSource',
        -            'DragSourceContext', 'DragSourceDragEvent',
        -            'DragSourceDropEvent', 'DragSourceEvent',
        -            'DragSourceListener', 'Driver', 'DriverManager',
        -            'DriverPropertyInfo', 'DropTarget',
        -            'DropTarget.DropTargetAutoScroller',
        -            'DropTargetContext', 'DropTargetDragEvent',
        -            'DropTargetDropEvent', 'DropTargetEvent',
        -            'DropTargetListener', 'DSAKey',
        -            'DSAKeyPairGenerator', 'DSAParameterSpec',
        -            'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec',
        -            'DSAPublicKey', 'DSAPublicKeySpec', 'DTD',
        -            'DTDConstants', 'DynamicImplementation', 'DynAny',
        -            'DynArray', 'DynEnum', 'DynFixed', 'DynSequence',
        -            'DynStruct', 'DynUnion', 'DynValue', 'EditorKit',
        -            'Element', 'ElementIterator', 'Ellipse2D',
        -            'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder',
        -            'EmptyStackException', 'EncodedKeySpec', 'Entity',
        -            'EnumControl', 'EnumControl.Type', 'Enumeration',
        -            'Environment', 'EOFException', 'Error',
        -            'EtchedBorder', 'Event', 'EventContext',
        -            'EventDirContext', 'EventListener',
        -            'EventListenerList', 'EventObject', 'EventQueue',
        -            'EventSetDescriptor', 'Exception',
        -            'ExceptionInInitializerError', 'ExceptionList',
        -            'ExpandVetoException', 'ExportException',
        -            'ExtendedRequest', 'ExtendedResponse',
        -            'Externalizable', 'FeatureDescriptor', 'Field',
        -            'FieldNameHelper', 'FieldPosition', 'FieldView',
        -            'File', 'FileChooserUI', 'FileDescriptor',
        -            'FileDialog', 'FileFilter',
        -            'FileInputStream', 'FilenameFilter', 'FileNameMap',
        -            'FileNotFoundException', 'FileOutputStream',
        -            'FilePermission', 'FileReader', 'FileSystemView',
        -            'FileView', 'FileWriter', 'FilteredImageSource',
        -            'FilterInputStream', 'FilterOutputStream',
        -            'FilterReader', 'FilterWriter',
        -            'FixedHeightLayoutCache', 'FixedHolder',
        -            'FlatteningPathIterator', 'FlavorMap', 'Float',
        -            'FloatControl', 'FloatControl.Type', 'FloatHolder',
        -            'FloatSeqHelper', 'FloatSeqHolder', 'FlowLayout',
        -            'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter',
        -            'FocusEvent', 'FocusListener', 'FocusManager',
        -            'Font', 'FontFormatException', 'FontMetrics',
        -            'FontRenderContext', 'FontUIResource', 'Format',
        -            'FormatConversionProvider', 'FormView', 'Frame',
        -            'FREE_MEM', 'GapContent', 'GeneralPath',
        -            'GeneralSecurityException', 'GlyphJustificationInfo',
        -            'GlyphMetrics', 'GlyphVector', 'GlyphView',
        -            'GlyphView.GlyphPainter', 'GradientPaint',
        -            'GraphicAttribute', 'Graphics', 'Graphics2D',
        -            'GraphicsConfigTemplate', 'GraphicsConfiguration',
        -            'GraphicsDevice', 'GraphicsEnvironment',
        -            'GrayFilter', 'GregorianCalendar',
        -            'GridBagConstraints', 'GridBagLayout', 'GridLayout',
        -            'Group', 'Guard', 'GuardedObject', 'GZIPInputStream',
        -            'GZIPOutputStream', 'HasControls', 'HashMap',
        -            'HashSet', 'Hashtable', 'HierarchyBoundsAdapter',
        -            'HierarchyBoundsListener', 'HierarchyEvent',
        -            'HierarchyListener', 'Highlighter',
        -            'Highlighter.Highlight',
        -            'Highlighter.HighlightPainter', 'HTML',
        -            'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag',
        -            'HTMLDocument', 'HTMLDocument.Iterator',
        -            'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory',
        -            'HTMLEditorKit.HTMLTextAction',
        -            'HTMLEditorKit.InsertHTMLTextAction',
        -            'HTMLEditorKit.LinkController',
        -            'HTMLEditorKit.Parser',
        -            'HTMLEditorKit.ParserCallback',
        -            'HTMLFrameHyperlinkEvent', 'HTMLWriter',
        -            'HttpURLConnection', 'HyperlinkEvent',
        -            'HyperlinkEvent.EventType', 'HyperlinkListener',
        -            'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray',
        -            'ICC_ProfileRGB', 'Icon', 'IconUIResource',
        -            'IconView', 'IdentifierHelper', 'Identity',
        -            'IdentityScope', 'IDLEntity', 'IDLType',
        -            'IDLTypeHelper', 'IDLTypeOperations',
        -            'IllegalAccessError', 'IllegalAccessException',
        -            'IllegalArgumentException',
        -            'IllegalComponentStateException',
        -            'IllegalMonitorStateException',
        -            'IllegalPathStateException', 'IllegalStateException',
        -            'IllegalThreadStateException', 'Image',
        -            'ImageConsumer', 'ImageFilter',
        -            'ImageGraphicAttribute', 'ImageIcon',
        -            'ImageObserver', 'ImageProducer',
        -            'ImagingOpException', 'IMP_LIMIT',
        -            'IncompatibleClassChangeError',
        -            'InconsistentTypeCode', 'IndexColorModel',
        -            'IndexedPropertyDescriptor',
        -            'IndexOutOfBoundsException', 'IndirectionException',
        -            'InetAddress', 'Inflater', 'InflaterInputStream',
        -            'InheritableThreadLocal', 'InitialContext',
        -            'InitialContextFactory',
        -            'InitialContextFactoryBuilder', 'InitialDirContext',
        -            'INITIALIZE', 'Initializer', 'InitialLdapContext',
        -            'InlineView', 'InputContext', 'InputEvent',
        -            'InputMap', 'InputMapUIResource', 'InputMethod',
        -            'InputMethodContext', 'InputMethodDescriptor',
        -            'InputMethodEvent', 'InputMethodHighlight',
        -            'InputMethodListener', 'InputMethodRequests',
        -            'InputStream',
        -            'InputStreamReader', 'InputSubset', 'InputVerifier',
        -            'Insets', 'InsetsUIResource', 'InstantiationError',
        -            'InstantiationException', 'Instrument',
        -            'InsufficientResourcesException', 'Integer',
        -            'INTERNAL', 'InternalError', 'InternalFrameAdapter',
        -            'InternalFrameEvent', 'InternalFrameListener',
        -            'InternalFrameUI', 'InterruptedException',
        -            'InterruptedIOException',
        -            'InterruptedNamingException', 'INTF_REPOS',
        -            'IntHolder', 'IntrospectionException',
        -            'Introspector', 'Invalid',
        -            'InvalidAlgorithmParameterException',
        -            'InvalidAttributeIdentifierException',
        -            'InvalidAttributesException',
        -            'InvalidAttributeValueException',
        -            'InvalidClassException',
        -            'InvalidDnDOperationException',
        -            'InvalidKeyException', 'InvalidKeySpecException',
        -            'InvalidMidiDataException', 'InvalidName',
        -            'InvalidNameException',
        -            'InvalidNameHelper', 'InvalidNameHolder',
        -            'InvalidObjectException',
        -            'InvalidParameterException',
        -            'InvalidParameterSpecException',
        -            'InvalidSearchControlsException',
        -            'InvalidSearchFilterException', 'InvalidSeq',
        -            'InvalidTransactionException', 'InvalidValue',
        -            'INVALID_TRANSACTION', 'InvocationEvent',
        -            'InvocationHandler', 'InvocationTargetException',
        -            'InvokeHandler', 'INV_FLAG', 'INV_IDENT',
        -            'INV_OBJREF', 'INV_POLICY', 'IOException',
        -            'IRObject', 'IRObjectOperations', 'IstringHelper',
        -            'ItemEvent', 'ItemListener', 'ItemSelectable',
        -            'Iterator', 'JApplet', 'JarEntry', 'JarException',
        -            'JarFile', 'JarInputStream', 'JarOutputStream',
        -            'JarURLConnection', 'JButton', 'JCheckBox',
        -            'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox',
        -            'JComboBox.KeySelectionManager', 'JComponent',
        -            'JDesktopPane', 'JDialog', 'JEditorPane',
        -            'JFileChooser', 'JFrame', 'JInternalFrame',
        -            'JInternalFrame.JDesktopIcon', 'JLabel',
        -            'JLayeredPane', 'JList', 'JMenu', 'JMenuBar',
        -            'JMenuItem', 'JobAttributes',
        -            'JobAttributes.DefaultSelectionType',
        -            'JobAttributes.DestinationType',
        -            'JobAttributes.DialogType',
        -            'JobAttributes.MultipleDocumentHandlingType',
        -            'JobAttributes.SidesType', 'JOptionPane', 'JPanel',
        -            'JPasswordField', 'JPopupMenu',
        -            'JPopupMenu.Separator', 'JProgressBar',
        -            'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane',
        -            'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider',
        -            'JSplitPane', 'JTabbedPane', 'JTable',
        -            'JTableHeader', 'JTextArea', 'JTextComponent',
        -            'JTextComponent.KeyBinding', 'JTextField',
        -            'JTextPane', 'JToggleButton',
        -            'JToggleButton.ToggleButtonModel', 'JToolBar',
        -            'JToolBar.Separator', 'JToolTip', 'JTree',
        -            'JTree.DynamicUtilTreeNode',
        -            'JTree.EmptySelectionModel', 'JViewport', 'JWindow',
        -            'Kernel', 'Key', 'KeyAdapter', 'KeyEvent',
        -            'KeyException', 'KeyFactory', 'KeyFactorySpi',
        -            'KeyListener', 'KeyManagementException', 'Keymap',
        -            'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi',
        -            'KeySpec', 'KeyStore', 'KeyStoreException',
        -            'KeyStoreSpi', 'KeyStroke', 'Label', 'LabelUI',
        -            'LabelView', 'LastOwnerException',
        -            'LayeredHighlighter',
        -            'LayeredHighlighter.LayerPainter', 'LayoutManager',
        -            'LayoutManager2', 'LayoutQueue', 'LdapContext',
        -            'LdapReferralException', 'Lease',
        -            'LimitExceededException', 'Line', 'Line.Info',
        -            'Line2D', 'Line2D.Double', 'Line2D.Float',
        -            'LineBorder', 'LineBreakMeasurer', 'LineEvent',
        -            'LineEvent.Type', 'LineListener', 'LineMetrics',
        -            'LineNumberInputStream', 'LineNumberReader',
        -            'LineUnavailableException', 'LinkageError',
        -            'LinkedList', 'LinkException', 'LinkLoopException',
        -            'LinkRef', 'List', 'ListCellRenderer',
        -            'ListDataEvent', 'ListDataListener', 'ListIterator',
        -            'ListModel', 'ListResourceBundle',
        -            'ListSelectionEvent', 'ListSelectionListener',
        -            'ListSelectionModel', 'ListUI', 'ListView',
        -            'LoaderHandler', 'Locale', 'LocateRegistry',
        -            'LogStream', 'Long', 'LongHolder',
        -            'LongLongSeqHelper', 'LongLongSeqHolder',
        -            'LongSeqHelper', 'LongSeqHolder', 'LookAndFeel',
        -            'LookupOp', 'LookupTable', 'MalformedLinkException',
        -            'MalformedURLException', 'Manifest', 'Map',
        -            'Map.Entry', 'MARSHAL', 'MarshalException',
        -            'MarshalledObject', 'Math', 'MatteBorder',
        -            'MediaTracker', 'Member', 'MemoryImageSource',
        -            'Menu', 'MenuBar', 'MenuBarUI', 'MenuComponent',
        -            'MenuContainer', 'MenuDragMouseEvent',
        -            'MenuDragMouseListener', 'MenuElement', 'MenuEvent',
        -            'MenuItem', 'MenuItemUI', 'MenuKeyEvent',
        -            'MenuKeyListener', 'MenuListener',
        -            'MenuSelectionManager', 'MenuShortcut',
        -            'MessageDigest', 'MessageDigestSpi', 'MessageFormat',
        -            'MetaEventListener', 'MetalBorders',
        -            'MetalBorders.ButtonBorder',
        -            'MetalBorders.Flush3DBorder',
        -            'MetalBorders.InternalFrameBorder',
        -            'MetalBorders.MenuBarBorder',
        -            'MetalBorders.MenuItemBorder',
        -            'MetalBorders.OptionDialogBorder',
        -            'MetalBorders.PaletteBorder',
        -            'MetalBorders.PopupMenuBorder',
        -            'MetalBorders.RolloverButtonBorder',
        -            'MetalBorders.ScrollPaneBorder',
        -            'MetalBorders.TableHeaderBorder',
        -            'MetalBorders.TextFieldBorder',
        -            'MetalBorders.ToggleButtonBorder',
        -            'MetalBorders.ToolBarBorder', 'MetalButtonUI',
        -            'MetalCheckBoxIcon', 'MetalCheckBoxUI',
        -            'MetalComboBoxButton', 'MetalComboBoxEditor',
        -            'MetalComboBoxEditor.UIResource',
        -            'MetalComboBoxIcon', 'MetalComboBoxUI',
        -            'MetalDesktopIconUI', 'MetalFileChooserUI',
        -            'MetalIconFactory', 'MetalIconFactory.FileIcon16',
        -            'MetalIconFactory.FolderIcon16',
        -            'MetalIconFactory.PaletteCloseIcon',
        -            'MetalIconFactory.TreeControlIcon',
        -            'MetalIconFactory.TreeFolderIcon',
        -            'MetalIconFactory.TreeLeafIcon',
        -            'MetalInternalFrameTitlePane',
        -            'MetalInternalFrameUI', 'MetalLabelUI',
        -            'MetalLookAndFeel', 'MetalPopupMenuSeparatorUI',
        -            'MetalProgressBarUI', 'MetalRadioButtonUI',
        -            'MetalScrollBarUI', 'MetalScrollButton',
        -            'MetalScrollPaneUI', 'MetalSeparatorUI',
        -            'MetalSliderUI', 'MetalSplitPaneUI',
        -            'MetalTabbedPaneUI', 'MetalTextFieldUI',
        -            'MetalTheme', 'MetalToggleButtonUI',
        -            'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI',
        -            'MetaMessage', 'Method', 'MethodDescriptor',
        -            'MidiChannel', 'MidiDevice', 'MidiDevice.Info',
        -            'MidiDeviceProvider', 'MidiEvent', 'MidiFileFormat',
        -            'MidiFileReader', 'MidiFileWriter', 'MidiMessage',
        -            'MidiSystem', 'MidiUnavailableException',
        -            'MimeTypeParseException', 'MinimalHTMLWriter',
        -            'MissingResourceException', 'Mixer', 'Mixer.Info',
        -            'MixerProvider', 'ModificationItem', 'Modifier',
        -            'MouseAdapter', 'MouseDragGestureRecognizer',
        -            'MouseEvent', 'MouseInputAdapter',
        -            'MouseInputListener', 'MouseListener',
        -            'MouseMotionAdapter', 'MouseMotionListener',
        -            'MultiButtonUI', 'MulticastSocket',
        -            'MultiColorChooserUI', 'MultiComboBoxUI',
        -            'MultiDesktopIconUI', 'MultiDesktopPaneUI',
        -            'MultiFileChooserUI', 'MultiInternalFrameUI',
        -            'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel',
        -            'MultiMenuBarUI', 'MultiMenuItemUI',
        -            'MultiOptionPaneUI', 'MultiPanelUI',
        -            'MultiPixelPackedSampleModel', 'MultipleMaster',
        -            'MultiPopupMenuUI', 'MultiProgressBarUI',
        -            'MultiScrollBarUI', 'MultiScrollPaneUI',
        -            'MultiSeparatorUI', 'MultiSliderUI',
        -            'MultiSplitPaneUI', 'MultiTabbedPaneUI',
        -            'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI',
        -            'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI',
        -            'MultiViewportUI', 'MutableAttributeSet',
        -            'MutableComboBoxModel', 'MutableTreeNode', 'Name',
        -            'NameAlreadyBoundException', 'NameClassPair',
        -            'NameComponent', 'NameComponentHelper',
        -            'NameComponentHolder', 'NamedValue', 'NameHelper',
        -            'NameHolder', 'NameNotFoundException', 'NameParser',
        -            'NamespaceChangeListener', 'NameValuePair',
        -            'NameValuePairHelper', 'Naming', 'NamingContext',
        -            'NamingContextHelper', 'NamingContextHolder',
        -            'NamingContextOperations', 'NamingEnumeration',
        -            'NamingEvent', 'NamingException',
        -            'NamingExceptionEvent', 'NamingListener',
        -            'NamingManager', 'NamingSecurityException',
        -            'NegativeArraySizeException', 'NetPermission',
        -            'NoClassDefFoundError', 'NoInitialContextException',
        -            'NoninvertibleTransformException',
        -            'NoPermissionException', 'NoRouteToHostException',
        -            'NoSuchAlgorithmException',
        -            'NoSuchAttributeException', 'NoSuchElementException',
        -            'NoSuchFieldError', 'NoSuchFieldException',
        -            'NoSuchMethodError', 'NoSuchMethodException',
        -            'NoSuchObjectException', 'NoSuchProviderException',
        -            'NotActiveException', 'NotBoundException',
        -            'NotContextException', 'NotEmpty', 'NotEmptyHelper',
        -            'NotEmptyHolder', 'NotFound', 'NotFoundHelper',
        -            'NotFoundHolder', 'NotFoundReason',
        -            'NotFoundReasonHelper', 'NotFoundReasonHolder',
        -            'NotOwnerException', 'NotSerializableException',
        -            'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION',
        -            'NO_RESOURCES', 'NO_RESPONSE',
        -            'NullPointerException', 'Number', 'NumberFormat',
        -            'NumberFormatException', 'NVList', 'Object',
        -            'ObjectChangeListener', 'ObjectFactory',
        -            'ObjectFactoryBuilder', 'ObjectHelper',
        -            'ObjectHolder', 'ObjectImpl',
        -            'ObjectInput', 'ObjectInputStream',
        -            'ObjectInputStream.GetField',
        -            'ObjectInputValidation', 'ObjectOutput',
        -            'ObjectOutputStream', 'ObjectOutputStream.PutField',
        -            'ObjectStreamClass', 'ObjectStreamConstants',
        -            'ObjectStreamException', 'ObjectStreamField',
        -            'ObjectView', 'OBJECT_NOT_EXIST', 'ObjID',
        -            'OBJ_ADAPTER', 'Observable', 'Observer',
        -            'OctetSeqHelper', 'OctetSeqHolder', 'OMGVMCID',
        -            'OpenType', 'Operation',
        -            'OperationNotSupportedException', 'Option',
        -            'OptionalDataException', 'OptionPaneUI', 'ORB',
        -            'OutOfMemoryError', 'OutputStream',
        -            'OutputStreamWriter', 'OverlayLayout', 'Owner',
        -            'Package', 'PackedColorModel', 'Pageable',
        -            'PageAttributes', 'PageAttributes.ColorType',
        -            'PageAttributes.MediaType',
        -            'PageAttributes.OrientationRequestedType',
        -            'PageAttributes.OriginType',
        -            'PageAttributes.PrintQualityType', 'PageFormat',
        -            'Paint', 'PaintContext', 'PaintEvent', 'Panel',
        -            'PanelUI', 'Paper', 'ParagraphView',
        -            'ParameterBlock', 'ParameterDescriptor',
        -            'ParseException', 'ParsePosition', 'Parser',
        -            'ParserDelegator', 'PartialResultException',
        -            'PasswordAuthentication', 'PasswordView', 'Patch',
        -            'PathIterator', 'Permission',
        -            'PermissionCollection', 'Permissions',
        -            'PERSIST_STORE', 'PhantomReference',
        -            'PipedInputStream', 'PipedOutputStream',
        -            'PipedReader', 'PipedWriter', 'PixelGrabber',
        -            'PixelInterleavedSampleModel', 'PKCS8EncodedKeySpec',
        -            'PlainDocument', 'PlainView', 'Point', 'Point2D',
        -            'Point2D.Double', 'Point2D.Float', 'Policy',
        -            'PolicyError', 'PolicyHelper',
        -            'PolicyHolder', 'PolicyListHelper',
        -            'PolicyListHolder', 'PolicyOperations',
        -            'PolicyTypeHelper', 'Polygon', 'PopupMenu',
        -            'PopupMenuEvent', 'PopupMenuListener', 'PopupMenuUI',
        -            'Port', 'Port.Info', 'PortableRemoteObject',
        -            'PortableRemoteObjectDelegate', 'Position',
        -            'Position.Bias', 'PreparedStatement', 'Principal',
        -            'PrincipalHolder', 'Printable',
        -            'PrinterAbortException', 'PrinterException',
        -            'PrinterGraphics', 'PrinterIOException',
        -            'PrinterJob', 'PrintGraphics', 'PrintJob',
        -            'PrintStream', 'PrintWriter', 'PrivateKey',
        -            'PRIVATE_MEMBER', 'PrivilegedAction',
        -            'PrivilegedActionException',
        -            'PrivilegedExceptionAction', 'Process',
        -            'ProfileDataException', 'ProgressBarUI',
        -            'ProgressMonitor', 'ProgressMonitorInputStream',
        -            'Properties', 'PropertyChangeEvent',
        -            'PropertyChangeListener', 'PropertyChangeSupport',
        -            'PropertyDescriptor', 'PropertyEditor',
        -            'PropertyEditorManager', 'PropertyEditorSupport',
        -            'PropertyPermission', 'PropertyResourceBundle',
        -            'PropertyVetoException', 'ProtectionDomain',
        -            'ProtocolException', 'Provider', 'ProviderException',
        -            'Proxy', 'PublicKey', 'PUBLIC_MEMBER',
        -            'PushbackInputStream', 'PushbackReader',
        -            'QuadCurve2D', 'QuadCurve2D.Double',
        -            'QuadCurve2D.Float', 'Random', 'RandomAccessFile',
        -            'Raster', 'RasterFormatException', 'RasterOp',
        -            'Reader', 'Receiver', 'Rectangle', 'Rectangle2D',
        -            'Rectangle2D.Double', 'Rectangle2D.Float',
        -            'RectangularShape', 'Ref', 'RefAddr', 'Reference',
        -            'Referenceable', 'ReferenceQueue',
        -            'ReferralException', 'ReflectPermission', 'Registry',
        -            'RegistryHandler', 'RemarshalException', 'Remote',
        -            'RemoteCall', 'RemoteException', 'RemoteObject',
        -            'RemoteRef', 'RemoteServer', 'RemoteStub',
        -            'RenderableImage', 'RenderableImageOp',
        -            'RenderableImageProducer', 'RenderContext',
        -            'RenderedImage', 'RenderedImageFactory', 'Renderer',
        -            'RenderingHints', 'RenderingHints.Key',
        -            'RepaintManager', 'ReplicateScaleFilter',
        -            'Repository', 'RepositoryIdHelper', 'Request',
        -            'RescaleOp', 'Resolver', 'ResolveResult',
        -            'ResourceBundle', 'ResponseHandler', 'ResultSet',
        -            'ResultSetMetaData', 'ReverbType', 'RGBImageFilter',
        -            'RMIClassLoader', 'RMIClientSocketFactory',
        -            'RMIFailureHandler', 'RMISecurityException',
        -            'RMISecurityManager', 'RMIServerSocketFactory',
        -            'RMISocketFactory', 'Robot', 'RootPaneContainer',
        -            'RootPaneUI', 'RoundRectangle2D',
        -            'RoundRectangle2D.Double', 'RoundRectangle2D.Float',
        -            'RowMapper', 'RSAKey', 'RSAKeyGenParameterSpec',
        -            'RSAPrivateCrtKey', 'RSAPrivateCrtKeySpec',
        -            'RSAPrivateKey', 'RSAPrivateKeySpec', 'RSAPublicKey',
        -            'RSAPublicKeySpec', 'RTFEditorKit',
        -            'RuleBasedCollator', 'Runnable', 'RunTime',
        -            'Runtime', 'RuntimeException', 'RunTimeOperations',
        -            'RuntimePermission', 'SampleModel',
        -            'SchemaViolationException', 'Scrollable',
        -            'Scrollbar', 'ScrollBarUI', 'ScrollPane',
        -            'ScrollPaneConstants', 'ScrollPaneLayout',
        -            'ScrollPaneLayout.UIResource', 'ScrollPaneUI',
        -            'SearchControls', 'SearchResult',
        -            'SecureClassLoader', 'SecureRandom',
        -            'SecureRandomSpi', 'Security', 'SecurityException',
        -            'SecurityManager', 'SecurityPermission', 'Segment',
        -            'SeparatorUI', 'Sequence', 'SequenceInputStream',
        -            'Sequencer', 'Sequencer.SyncMode', 'Serializable',
        -            'SerializablePermission', 'ServantObject',
        -            'ServerCloneException', 'ServerError',
        -            'ServerException', 'ServerNotActiveException',
        -            'ServerRef', 'ServerRequest',
        -            'ServerRuntimeException', 'ServerSocket',
        -            'ServiceDetail', 'ServiceDetailHelper',
        -            'ServiceInformation', 'ServiceInformationHelper',
        -            'ServiceInformationHolder',
        -            'ServiceUnavailableException', 'Set',
        -            'SetOverrideType', 'SetOverrideTypeHelper', 'Shape',
        -            'ShapeGraphicAttribute', 'Short', 'ShortHolder',
        -            'ShortLookupTable', 'ShortMessage', 'ShortSeqHelper',
        -            'ShortSeqHolder', 'Signature', 'SignatureException',
        -            'SignatureSpi', 'SignedObject', 'Signer',
        -            'SimpleAttributeSet', 'SimpleBeanInfo',
        -            'SimpleDateFormat', 'SimpleTimeZone',
        -            'SinglePixelPackedSampleModel',
        -            'SingleSelectionModel', 'SizeLimitExceededException',
        -            'SizeRequirements', 'SizeSequence', 'Skeleton',
        -            'SkeletonMismatchException',
        -            'SkeletonNotFoundException', 'SliderUI', 'Socket',
        -            'SocketException', 'SocketImpl', 'SocketImplFactory',
        -            'SocketOptions', 'SocketPermission',
        -            'SocketSecurityException', 'SoftBevelBorder',
        -            'SoftReference', 'SortedMap', 'SortedSet',
        -            'Soundbank', 'SoundbankReader', 'SoundbankResource',
        -            'SourceDataLine', 'SplitPaneUI', 'SQLData',
        -            'SQLException', 'SQLInput', 'SQLOutput',
        -            'SQLPermission', 'SQLWarning', 'Stack',
        -            'StackOverflowError', 'StateEdit', 'StateEditable',
        -            'StateFactory', 'Statement', 'Streamable',
        -            'StreamableValue', 'StreamCorruptedException',
        -            'StreamTokenizer', 'StrictMath', 'String',
        -            'StringBuffer', 'StringBufferInputStream',
        -            'StringCharacterIterator', 'StringContent',
        -            'StringHolder', 'StringIndexOutOfBoundsException',
        -            'StringReader', 'StringRefAddr', 'StringSelection',
        -            'StringTokenizer', 'StringValueHelper',
        -            'StringWriter', 'Stroke', 'Struct', 'StructMember',
        -            'StructMemberHelper', 'Stub', 'StubDelegate',
        -            'StubNotFoundException', 'Style', 'StyleConstants',
        -            'StyleConstants.CharacterConstants',
        -            'StyleConstants.ColorConstants',
        -            'StyleConstants.FontConstants',
        -            'StyleConstants.ParagraphConstants', 'StyleContext',
        -            'StyledDocument', 'StyledEditorKit',
        -            'StyledEditorKit.AlignmentAction',
        -            'StyledEditorKit.BoldAction',
        -            'StyledEditorKit.FontFamilyAction',
        -            'StyledEditorKit.FontSizeAction',
        -            'StyledEditorKit.ForegroundAction',
        -            'StyledEditorKit.ItalicAction',
        -            'StyledEditorKit.StyledTextAction',
        -            'StyledEditorKit.UnderlineAction', 'StyleSheet',
        -            'StyleSheet.BoxPainter', 'StyleSheet.ListPainter',
        -            'SwingConstants', 'SwingPropertyChangeSupport',
        -            'SwingUtilities', 'SyncFailedException',
        -            'Synthesizer', 'SysexMessage', 'System',
        -            'SystemColor', 'SystemException', 'SystemFlavorMap',
        -            'TabableView', 'TabbedPaneUI', 'TabExpander',
        -            'TableCellEditor', 'TableCellRenderer',
        -            'TableColumn', 'TableColumnModel',
        -            'TableColumnModelEvent', 'TableColumnModelListener',
        -            'TableHeaderUI', 'TableModel', 'TableModelEvent',
        -            'TableModelListener', 'TableUI', 'TableView',
        -            'TabSet', 'TabStop', 'TagElement', 'TargetDataLine',
        -            'TCKind', 'TextAction', 'TextArea', 'TextAttribute',
        -            'TextComponent', 'TextEvent', 'TextField',
        -            'TextHitInfo', 'TextLayout',
        -            'TextLayout.CaretPolicy', 'TextListener',
        -            'TextMeasurer', 'TextUI', 'TexturePaint', 'Thread',
        -            'ThreadDeath', 'ThreadGroup', 'ThreadLocal',
        -            'Throwable', 'Tie', 'TileObserver', 'Time',
        -            'TimeLimitExceededException', 'Timer',
        -            'TimerTask', 'Timestamp', 'TimeZone', 'TitledBorder',
        -            'ToolBarUI', 'Toolkit', 'ToolTipManager',
        -            'ToolTipUI', 'TooManyListenersException', 'Track',
        -            'TransactionRequiredException',
        -            'TransactionRolledbackException',
        -            'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK',
        -            'Transferable', 'TransformAttribute', 'TRANSIENT',
        -            'Transmitter', 'Transparency', 'TreeCellEditor',
        -            'TreeCellRenderer', 'TreeExpansionEvent',
        -            'TreeExpansionListener', 'TreeMap', 'TreeModel',
        -            'TreeModelEvent', 'TreeModelListener', 'TreeNode',
        -            'TreePath', 'TreeSelectionEvent',
        -            'TreeSelectionListener', 'TreeSelectionModel',
        -            'TreeSet', 'TreeUI', 'TreeWillExpandListener',
        -            'TypeCode', 'TypeCodeHolder', 'TypeMismatch',
        -            'Types', 'UID', 'UIDefaults',
        -            'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap',
        -            'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue',
        -            'UIManager', 'UIManager.LookAndFeelInfo',
        -            'UIResource', 'ULongLongSeqHelper',
        -            'ULongLongSeqHolder', 'ULongSeqHelper',
        -            'ULongSeqHolder', 'UndeclaredThrowableException',
        -            'UndoableEdit', 'UndoableEditEvent',
        -            'UndoableEditListener', 'UndoableEditSupport',
        -            'UndoManager', 'UnexpectedException',
        -            'UnicastRemoteObject', 'UnionMember',
        -            'UnionMemberHelper', 'UNKNOWN', 'UnknownError',
        -            'UnknownException', 'UnknownGroupException',
        -            'UnknownHostException',
        -            'UnknownObjectException', 'UnknownServiceException',
        -            'UnknownUserException', 'UnmarshalException',
        -            'UnrecoverableKeyException', 'Unreferenced',
        -            'UnresolvedPermission', 'UnsatisfiedLinkError',
        -            'UnsolicitedNotification',
        -            'UnsolicitedNotificationEvent',
        -            'UnsolicitedNotificationListener',
        -            'UnsupportedAudioFileException',
        -            'UnsupportedClassVersionError',
        -            'UnsupportedEncodingException',
        -            'UnsupportedFlavorException',
        -            'UnsupportedLookAndFeelException',
        -            'UnsupportedOperationException',
        -            'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE',
        -            'URL', 'URLClassLoader', 'URLConnection',
        -            'URLDecoder', 'URLEncoder', 'URLStreamHandler',
        -            'URLStreamHandlerFactory', 'UserException',
        -            'UShortSeqHelper', 'UShortSeqHolder',
        -            'UTFDataFormatException', 'Util', 'UtilDelegate',
        -            'Utilities', 'ValueBase', 'ValueBaseHelper',
        -            'ValueBaseHolder', 'ValueFactory', 'ValueHandler',
        -            'ValueMember', 'ValueMemberHelper',
        -            'VariableHeightLayoutCache', 'Vector', 'VerifyError',
        -            'VersionSpecHelper', 'VetoableChangeListener',
        -            'VetoableChangeSupport', 'View', 'ViewFactory',
        -            'ViewportLayout', 'ViewportUI',
        -            'VirtualMachineError', 'Visibility',
        -            'VisibilityHelper', 'VMID', 'VM_ABSTRACT',
        -            'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE',
        -            'VoiceStatus', 'Void', 'WCharSeqHelper',
        -            'WCharSeqHolder', 'WeakHashMap', 'WeakReference',
        -            'Window', 'WindowAdapter', 'WindowConstants',
        -            'WindowEvent', 'WindowListener', 'WrappedPlainView',
        -            'WritableRaster', 'WritableRenderedImage',
        -            'WriteAbortedException', 'Writer',
        -            'WrongTransaction', 'WStringValueHelper',
        -            'X509Certificate', 'X509CRL', 'X509CRLEntry',
        -            'X509EncodedKeySpec', 'X509Extension', 'ZipEntry',
        -            'ZipException', 'ZipFile', 'ZipInputStream',
        -            'ZipOutputStream', 'ZoneView',
        -            '_BindingIteratorImplBase', '_BindingIteratorStub',
        -            '_IDLTypeStub', '_NamingContextImplBase',
        -            '_NamingContextStub', '_PolicyStub', '_Remote_Stub'
        -            ),
        -        4 => array(
        -            'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}',
        -        '+', '-', '*', '/', '%',
        -        '!', '&', '|', '^',
        -        '<', '>', '=',
        -        '?', ':', ';',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => true,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000066; font-weight: bold;',
        -            3 => 'color: #003399;',
        -            4 => 'color: #000066; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #006699;',
        -            3 => 'color: #008000; font-style: italic; font-weight: bold;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006633;',
        -            2 => 'color: #006633;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+{FNAMEL}',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php
        deleted file mode 100644
        index 8f0d6704..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php
        +++ /dev/null
        @@ -1,1035 +0,0 @@
        - 'Java(TM) 2 Platform Standard Edition 5.0',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Import and Package directives (Basic Support only)
        -        2 => '/(?:(?<=import[\\n\\s](?!static))|(?<=import[\\n\\s]static[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
        -        // javadoc comments
        -        3 => '#/\*\*(?![\*\/]).*\*/#sU'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            /* see the authoritative list of all 50 Java keywords at */
        -            /* http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#229308 */
        -
        -            /* java keywords, part 1: control flow */
        -            'case', 'default', 'do', 'else', 'for',
        -            'goto', 'if', 'switch', 'while'
        -
        -            /* IMO 'break', 'continue', 'return' and 'throw' */
        -                        /* should also be added to this group, as they   */
        -            /* also manage the control flow,                 */
        -            /* arguably 'try'/'catch'/'finally' as well      */
        -            ),
        -        2 => array(
        -            /* java keywords, part 2 */
        -
        -            'break', 'continue', 'return', 'throw',
        -            'try', 'catch', 'finally',
        -
        -            'abstract', 'assert', 'class', 'const', 'enum', 'extends',
        -            'final', 'implements', 'import', 'instanceof', 'interface',
        -            'native', 'new', 'package', 'private', 'protected',
        -            'public', 'static', 'strictfp', 'super', 'synchronized',
        -            'this', 'throws', 'transient', 'volatile'
        -            ),
        -        3 => array(
        -            /* Java keywords, part 3: primitive data types and 'void' */
        -            'boolean', 'byte', 'char', 'double',
        -            'float', 'int', 'long', 'short', 'void'
        -            ),
        -        4 => array(
        -            /* other reserved words in Java: literals */
        -            /* should be styled to look similar to numbers and Strings */
        -            'false', 'null', 'true'
        -            ),
        -        5 => array (
        -            'Applet', 'AppletContext', 'AppletStub', 'AudioClip'
        -            ),
        -        6 => array (
        -            'AWTError', 'AWTEvent', 'AWTEventMulticaster', 'AWTException', 'AWTKeyStroke', 'AWTPermission', 'ActiveEvent', 'Adjustable', 'AlphaComposite', 'BasicStroke', 'BorderLayout', 'BufferCapabilities', 'BufferCapabilities.FlipContents', 'Button', 'Canvas', 'CardLayout', 'Checkbox', 'CheckboxGroup', 'CheckboxMenuItem', 'Choice', 'Color', 'Component', 'ComponentOrientation', 'Composite', 'CompositeContext', 'Container', 'ContainerOrderFocusTraversalPolicy', 'Cursor', 'DefaultFocusTraversalPolicy', 'DefaultKeyboardFocusManager', 'Dialog', 'Dimension', 'DisplayMode', 'EventQueue', 'FileDialog', 'FlowLayout', 'FocusTraversalPolicy', 'Font', 'FontFormatException', 'FontMetrics', 'Frame', 'GradientPaint', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'HeadlessException', 'IllegalComponentStateException', 'Image', 'ImageCapabilities', 'Insets', 'ItemSelectable', 'JobAttributes',
        -            'JobAttributes.DefaultSelectionType', 'JobAttributes.DestinationType', 'JobAttributes.DialogType', 'JobAttributes.MultipleDocumentHandlingType', 'JobAttributes.SidesType', 'KeyEventDispatcher', 'KeyEventPostProcessor', 'KeyboardFocusManager', 'Label', 'LayoutManager', 'LayoutManager2', 'MediaTracker', 'Menu', 'MenuBar', 'MenuComponent', 'MenuContainer', 'MenuItem', 'MenuShortcut', 'MouseInfo', 'PageAttributes', 'PageAttributes.ColorType', 'PageAttributes.MediaType', 'PageAttributes.OrientationRequestedType', 'PageAttributes.OriginType', 'PageAttributes.PrintQualityType', 'Paint', 'PaintContext', 'Panel', 'Point', 'PointerInfo', 'Polygon', 'PopupMenu', 'PrintGraphics', 'PrintJob', 'Rectangle', 'RenderingHints', 'RenderingHints.Key', 'Robot', 'ScrollPane', 'ScrollPaneAdjustable', 'Scrollbar', 'Shape', 'Stroke', 'SystemColor', 'TextArea', 'TextComponent', 'TextField', 'TexturePaint', 'Toolkit', 'Transparency', 'Window'
        -            ),
        -        7 => array (
        -            'CMMException', 'ColorSpace', 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray', 'ICC_ProfileRGB', 'ProfileDataException'
        -            ),
        -        8 => array (
        -            'Clipboard', 'ClipboardOwner', 'DataFlavor', 'FlavorEvent', 'FlavorListener', 'FlavorMap', 'FlavorTable', 'MimeTypeParseException', 'StringSelection', 'SystemFlavorMap', 'Transferable', 'UnsupportedFlavorException'
        -            ),
        -        9 => array (
        -            'Autoscroll', 'DnDConstants', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', 'DragSource', 'DragSourceAdapter', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', 'DragSourceEvent', 'DragSourceListener', 'DragSourceMotionListener', 'DropTarget', 'DropTarget.DropTargetAutoScroller', 'DropTargetAdapter', 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', 'DropTargetEvent', 'DropTargetListener', 'InvalidDnDOperationException', 'MouseDragGestureRecognizer'
        -            ),
        -        10 => array (
        -            'AWTEventListener', 'AWTEventListenerProxy', 'ActionEvent', 'ActionListener', 'AdjustmentEvent', 'AdjustmentListener', 'ComponentAdapter', 'ComponentEvent', 'ComponentListener', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', 'FocusAdapter', 'FocusEvent', 'FocusListener', 'HierarchyBoundsAdapter', 'HierarchyBoundsListener', 'HierarchyEvent', 'HierarchyListener', 'InputEvent', 'InputMethodEvent', 'InputMethodListener', 'InvocationEvent', 'ItemEvent', 'ItemListener', 'KeyAdapter', 'KeyEvent', 'KeyListener', 'MouseAdapter', 'MouseListener', 'MouseMotionAdapter', 'MouseMotionListener', 'MouseWheelEvent', 'MouseWheelListener', 'PaintEvent', 'TextEvent', 'TextListener', 'WindowAdapter', 'WindowEvent', 'WindowFocusListener', 'WindowListener', 'WindowStateListener'
        -            ),
        -        11 => array (
        -            'FontRenderContext', 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GraphicAttribute', 'ImageGraphicAttribute', 'LineBreakMeasurer', 'LineMetrics', 'MultipleMaster', 'NumericShaper', 'ShapeGraphicAttribute', 'TextAttribute', 'TextHitInfo', 'TextLayout', 'TextLayout.CaretPolicy', 'TextMeasurer', 'TransformAttribute'
        -            ),
        -        12 => array (
        -            'AffineTransform', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', 'Area', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', 'Dimension2D', 'Ellipse2D', 'Ellipse2D.Double', 'Ellipse2D.Float', 'FlatteningPathIterator', 'GeneralPath', 'IllegalPathStateException', 'Line2D', 'Line2D.Double', 'Line2D.Float', 'NoninvertibleTransformException', 'PathIterator', 'Point2D', 'Point2D.Double', 'Point2D.Float', 'QuadCurve2D', 'QuadCurve2D.Double', 'QuadCurve2D.Float', 'Rectangle2D', 'Rectangle2D.Double', 'Rectangle2D.Float', 'RectangularShape', 'RoundRectangle2D', 'RoundRectangle2D.Double', 'RoundRectangle2D.Float'
        -            ),
        -        13 => array (
        -            'InputContext', 'InputMethodHighlight', 'InputMethodRequests', 'InputSubset'
        -            ),
        -        14 => array (
        -            'InputMethod', 'InputMethodContext', 'InputMethodDescriptor'
        -            ),
        -        15 => array (
        -            'AffineTransformOp', 'AreaAveragingScaleFilter', 'BandCombineOp', 'BandedSampleModel', 'BufferStrategy', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', 'ByteLookupTable', 'ColorConvertOp', 'ColorModel', 'ComponentColorModel', 'ComponentSampleModel', 'ConvolveOp', 'CropImageFilter', 'DataBuffer', 'DataBufferByte', 'DataBufferDouble', 'DataBufferFloat', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', 'DirectColorModel', 'FilteredImageSource', 'ImageConsumer', 'ImageFilter', 'ImageObserver', 'ImageProducer', 'ImagingOpException', 'IndexColorModel', 'Kernel', 'LookupOp', 'LookupTable', 'MemoryImageSource', 'MultiPixelPackedSampleModel', 'PackedColorModel', 'PixelGrabber', 'PixelInterleavedSampleModel', 'RGBImageFilter', 'Raster', 'RasterFormatException', 'RasterOp', 'RenderedImage', 'ReplicateScaleFilter', 'RescaleOp', 'SampleModel', 'ShortLookupTable', 'SinglePixelPackedSampleModel', 'TileObserver', 'VolatileImage', 'WritableRaster', 'WritableRenderedImage'
        -            ),
        -        16 => array (
        -            'ContextualRenderedImageFactory', 'ParameterBlock', 'RenderContext', 'RenderableImage', 'RenderableImageOp', 'RenderableImageProducer', 'RenderedImageFactory'
        -            ),
        -        17 => array (
        -            'Book', 'PageFormat', 'Pageable', 'Paper', 'Printable', 'PrinterAbortException', 'PrinterException', 'PrinterGraphics', 'PrinterIOException', 'PrinterJob'
        -            ),
        -        18 => array (
        -            'AppletInitializer', 'BeanDescriptor', 'BeanInfo', 'Beans', 'Customizer', 'DefaultPersistenceDelegate', 'DesignMode', 'Encoder', 'EventHandler', 'EventSetDescriptor', 'ExceptionListener', 'Expression', 'FeatureDescriptor', 'IndexedPropertyChangeEvent', 'IndexedPropertyDescriptor', 'Introspector', 'MethodDescriptor', 'ParameterDescriptor', 'PersistenceDelegate', 'PropertyChangeEvent', 'PropertyChangeListener', 'PropertyChangeListenerProxy', 'PropertyChangeSupport', 'PropertyDescriptor', 'PropertyEditor', 'PropertyEditorManager', 'PropertyEditorSupport', 'PropertyVetoException', 'SimpleBeanInfo', 'VetoableChangeListener', 'VetoableChangeListenerProxy', 'VetoableChangeSupport', 'Visibility', 'XMLDecoder', 'XMLEncoder'
        -            ),
        -        19 => array (
        -            'BeanContext', 'BeanContextChild', 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', 'BeanContextServiceRevokedListener', 'BeanContextServices', 'BeanContextServicesListener', 'BeanContextServicesSupport', 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', 'BeanContextSupport.BCSIterator'
        -            ),
        -        20 => array (
        -            'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', 'ByteArrayInputStream', 'ByteArrayOutputStream', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', 'Closeable', 'DataInput', 'DataOutput', 'EOFException', 'Externalizable', 'File', 'FileDescriptor', 'FileInputStream', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', 'FileReader', 'FileWriter', 'FilenameFilter', 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', 'Flushable', 'IOException', 'InputStreamReader', 'InterruptedIOException', 'InvalidClassException', 'InvalidObjectException', 'LineNumberInputStream', 'LineNumberReader', 'NotActiveException', 'NotSerializableException', 'ObjectInput', 'ObjectInputStream', 'ObjectInputStream.GetField', 'ObjectInputValidation', 'ObjectOutput', 'ObjectOutputStream', 'ObjectOutputStream.PutField', 'ObjectStreamClass', 'ObjectStreamConstants', 'ObjectStreamException', 'ObjectStreamField', 'OptionalDataException', 'OutputStreamWriter',
        -            'PipedInputStream', 'PipedOutputStream', 'PipedReader', 'PipedWriter', 'PrintStream', 'PrintWriter', 'PushbackInputStream', 'PushbackReader', 'RandomAccessFile', 'Reader', 'SequenceInputStream', 'Serializable', 'SerializablePermission', 'StreamCorruptedException', 'StreamTokenizer', 'StringBufferInputStream', 'StringReader', 'StringWriter', 'SyncFailedException', 'UTFDataFormatException', 'UnsupportedEncodingException', 'WriteAbortedException', 'Writer'
        -            ),
        -        21 => array (
        -            'AbstractMethodError', 'Appendable', 'ArithmeticException', 'ArrayIndexOutOfBoundsException', 'ArrayStoreException', 'AssertionError', 'Boolean', 'Byte', 'CharSequence', 'Character', 'Character.Subset', 'Character.UnicodeBlock', 'Class', 'ClassCastException', 'ClassCircularityError', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', 'CloneNotSupportedException', 'Cloneable', 'Comparable', 'Compiler', 'Deprecated', 'Double', 'Enum', 'EnumConstantNotPresentException', 'Error', 'Exception', 'ExceptionInInitializerError', 'Float', 'IllegalAccessError', 'IllegalAccessException', 'IllegalArgumentException', 'IllegalMonitorStateException', 'IllegalStateException', 'IllegalThreadStateException', 'IncompatibleClassChangeError', 'IndexOutOfBoundsException', 'InheritableThreadLocal', 'InstantiationError', 'InstantiationException', 'Integer', 'InternalError', 'InterruptedException', 'Iterable', 'LinkageError', 'Long', 'Math', 'NegativeArraySizeException', 'NoClassDefFoundError', 'NoSuchFieldError',
        -            'NoSuchFieldException', 'NoSuchMethodError', 'NoSuchMethodException', 'NullPointerException', 'Number', 'NumberFormatException', 'OutOfMemoryError', 'Override', 'Package', 'Process', 'ProcessBuilder', 'Readable', 'Runnable', 'Runtime', 'RuntimeException', 'RuntimePermission', 'SecurityException', 'SecurityManager', 'Short', 'StackOverflowError', 'StackTraceElement', 'StrictMath', 'String', 'StringBuffer', 'StringBuilder', 'StringIndexOutOfBoundsException', 'SuppressWarnings', 'System', 'Thread', 'Thread.State', 'Thread.UncaughtExceptionHandler', 'ThreadDeath', 'ThreadGroup', 'ThreadLocal', 'Throwable', 'TypeNotPresentException', 'UnknownError', 'UnsatisfiedLinkError', 'UnsupportedClassVersionError', 'UnsupportedOperationException', 'VerifyError', 'VirtualMachineError', 'Void'
        -            ),
        -        22 => array (
        -            'AnnotationFormatError', 'AnnotationTypeMismatchException', 'Documented', 'ElementType', 'IncompleteAnnotationException', 'Inherited', 'Retention', 'RetentionPolicy', 'Target'
        -            ),
        -        23 => array (
        -            'ClassDefinition', 'ClassFileTransformer', 'IllegalClassFormatException', 'Instrumentation', 'UnmodifiableClassException'
        -            ),
        -        24 => array (
        -            'ClassLoadingMXBean', 'CompilationMXBean', 'GarbageCollectorMXBean', 'ManagementFactory', 'ManagementPermission', 'MemoryMXBean', 'MemoryManagerMXBean', 'MemoryNotificationInfo', 'MemoryPoolMXBean', 'MemoryType', 'MemoryUsage', 'OperatingSystemMXBean', 'RuntimeMXBean', 'ThreadInfo', 'ThreadMXBean'
        -            ),
        -        25 => array (
        -            'PhantomReference', 'ReferenceQueue', 'SoftReference', 'WeakReference'
        -            ),
        -        26 => array (
        -            'AccessibleObject', 'AnnotatedElement', 'Constructor', 'Field', 'GenericArrayType', 'GenericDeclaration', 'GenericSignatureFormatError', 'InvocationHandler', 'InvocationTargetException', 'MalformedParameterizedTypeException', 'Member', 'Method', 'Modifier', 'ParameterizedType', 'ReflectPermission', 'Type', 'TypeVariable', 'UndeclaredThrowableException', 'WildcardType'
        -            ),
        -        27 => array (
        -            'BigDecimal', 'BigInteger', 'MathContext', 'RoundingMode'
        -            ),
        -        28 => array (
        -            'Authenticator', 'Authenticator.RequestorType', 'BindException', 'CacheRequest', 'CacheResponse', 'ContentHandlerFactory', 'CookieHandler', 'DatagramPacket', 'DatagramSocket', 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'FileNameMap', 'HttpRetryException', 'HttpURLConnection', 'Inet4Address', 'Inet6Address', 'InetAddress', 'InetSocketAddress', 'JarURLConnection', 'MalformedURLException', 'MulticastSocket', 'NetPermission', 'NetworkInterface', 'NoRouteToHostException', 'PasswordAuthentication', 'PortUnreachableException', 'ProtocolException', 'Proxy.Type', 'ProxySelector', 'ResponseCache', 'SecureCacheResponse', 'ServerSocket', 'Socket', 'SocketAddress', 'SocketException', 'SocketImpl', 'SocketImplFactory', 'SocketOptions', 'SocketPermission', 'SocketTimeoutException', 'URI', 'URISyntaxException', 'URL', 'URLClassLoader', 'URLConnection', 'URLDecoder', 'URLEncoder', 'URLStreamHandler', 'URLStreamHandlerFactory', 'UnknownServiceException'
        -            ),
        -        29 => array (
        -            'Buffer', 'BufferOverflowException', 'BufferUnderflowException', 'ByteBuffer', 'ByteOrder', 'CharBuffer', 'DoubleBuffer', 'FloatBuffer', 'IntBuffer', 'InvalidMarkException', 'LongBuffer', 'MappedByteBuffer', 'ReadOnlyBufferException', 'ShortBuffer'
        -            ),
        -        30 => array (
        -            'AlreadyConnectedException', 'AsynchronousCloseException', 'ByteChannel', 'CancelledKeyException', 'Channel', 'Channels', 'ClosedByInterruptException', 'ClosedChannelException', 'ClosedSelectorException', 'ConnectionPendingException', 'DatagramChannel', 'FileChannel', 'FileChannel.MapMode', 'FileLock', 'FileLockInterruptionException', 'GatheringByteChannel', 'IllegalBlockingModeException', 'IllegalSelectorException', 'InterruptibleChannel', 'NoConnectionPendingException', 'NonReadableChannelException', 'NonWritableChannelException', 'NotYetBoundException', 'NotYetConnectedException', 'OverlappingFileLockException', 'Pipe', 'Pipe.SinkChannel', 'Pipe.SourceChannel', 'ReadableByteChannel', 'ScatteringByteChannel', 'SelectableChannel', 'SelectionKey', 'Selector', 'ServerSocketChannel', 'SocketChannel', 'UnresolvedAddressException', 'UnsupportedAddressTypeException', 'WritableByteChannel'
        -            ),
        -        31 => array (
        -            'AbstractInterruptibleChannel', 'AbstractSelectableChannel', 'AbstractSelectionKey', 'AbstractSelector', 'SelectorProvider'
        -            ),
        -        32 => array (
        -            'CharacterCodingException', 'Charset', 'CharsetDecoder', 'CharsetEncoder', 'CoderMalfunctionError', 'CoderResult', 'CodingErrorAction', 'IllegalCharsetNameException', 'MalformedInputException', 'UnmappableCharacterException', 'UnsupportedCharsetException'
        -            ),
        -        33 => array (
        -            'CharsetProvider'
        -            ),
        -        34 => array (
        -            'AccessException', 'AlreadyBoundException', 'ConnectIOException', 'MarshalException', 'MarshalledObject', 'Naming', 'NoSuchObjectException', 'NotBoundException', 'RMISecurityException', 'RMISecurityManager', 'Remote', 'RemoteException', 'ServerError', 'ServerException', 'ServerRuntimeException', 'StubNotFoundException', 'UnexpectedException', 'UnmarshalException'
        -            ),
        -        35 => array (
        -            'Activatable', 'ActivateFailedException', 'ActivationDesc', 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationGroup_Stub', 'ActivationID', 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', 'Activator', 'UnknownGroupException', 'UnknownObjectException'
        -            ),
        -        36 => array (
        -            'DGC', 'Lease', 'VMID'
        -            ),
        -        37 => array (
        -            'LocateRegistry', 'Registry', 'RegistryHandler'
        -            ),
        -        38 => array (
        -            'ExportException', 'LoaderHandler', 'LogStream', 'ObjID', 'Operation', 'RMIClassLoader', 'RMIClassLoaderSpi', 'RMIClientSocketFactory', 'RMIFailureHandler', 'RMIServerSocketFactory', 'RMISocketFactory', 'RemoteCall', 'RemoteObject', 'RemoteObjectInvocationHandler', 'RemoteRef', 'RemoteServer', 'RemoteStub', 'ServerCloneException', 'ServerNotActiveException', 'ServerRef', 'Skeleton', 'SkeletonMismatchException', 'SkeletonNotFoundException', 'SocketSecurityException', 'UID', 'UnicastRemoteObject', 'Unreferenced'
        -            ),
        -        39 => array (
        -            'AccessControlContext', 'AccessControlException', 'AccessController', 'AlgorithmParameterGenerator', 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParametersSpi', 'AllPermission', 'AuthProvider', 'BasicPermission', 'CodeSigner', 'CodeSource', 'DigestException', 'DigestInputStream', 'DigestOutputStream', 'DomainCombiner', 'GeneralSecurityException', 'Guard', 'GuardedObject', 'Identity', 'IdentityScope', 'InvalidAlgorithmParameterException', 'InvalidParameterException', 'Key', 'KeyException', 'KeyFactory', 'KeyFactorySpi', 'KeyManagementException', 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi', 'KeyRep', 'KeyRep.Type', 'KeyStore', 'KeyStore.Builder', 'KeyStore.CallbackHandlerProtection', 'KeyStore.Entry', 'KeyStore.LoadStoreParameter', 'KeyStore.PasswordProtection', 'KeyStore.PrivateKeyEntry', 'KeyStore.ProtectionParameter', 'KeyStore.SecretKeyEntry', 'KeyStore.TrustedCertificateEntry', 'KeyStoreException', 'KeyStoreSpi', 'MessageDigest', 'MessageDigestSpi',
        -            'NoSuchAlgorithmException', 'NoSuchProviderException', 'PermissionCollection', 'Permissions', 'PrivateKey', 'PrivilegedAction', 'PrivilegedActionException', 'PrivilegedExceptionAction', 'ProtectionDomain', 'Provider', 'Provider.Service', 'ProviderException', 'PublicKey', 'SecureClassLoader', 'SecureRandom', 'SecureRandomSpi', 'Security', 'SecurityPermission', 'Signature', 'SignatureException', 'SignatureSpi', 'SignedObject', 'Signer', 'UnrecoverableEntryException', 'UnrecoverableKeyException', 'UnresolvedPermission'
        -            ),
        -        40 => array (
        -            'Acl', 'AclEntry', 'AclNotFoundException', 'Group', 'LastOwnerException', 'NotOwnerException', 'Owner'
        -            ),
        -        41 => array (
        -            'CRL', 'CRLException', 'CRLSelector', 'CertPath', 'CertPath.CertPathRep', 'CertPathBuilder', 'CertPathBuilderException', 'CertPathBuilderResult', 'CertPathBuilderSpi', 'CertPathParameters', 'CertPathValidator', 'CertPathValidatorException', 'CertPathValidatorResult', 'CertPathValidatorSpi', 'CertSelector', 'CertStore', 'CertStoreException', 'CertStoreParameters', 'CertStoreSpi', 'Certificate.CertificateRep', 'CertificateFactory', 'CertificateFactorySpi', 'CollectionCertStoreParameters', 'LDAPCertStoreParameters', 'PKIXBuilderParameters', 'PKIXCertPathBuilderResult', 'PKIXCertPathChecker', 'PKIXCertPathValidatorResult', 'PKIXParameters', 'PolicyNode', 'PolicyQualifierInfo', 'TrustAnchor', 'X509CRL', 'X509CRLEntry', 'X509CRLSelector', 'X509CertSelector', 'X509Extension'
        -            ),
        -        42 => array (
        -            'DSAKey', 'DSAKeyPairGenerator', 'DSAParams', 'DSAPrivateKey', 'DSAPublicKey', 'ECKey', 'ECPrivateKey', 'ECPublicKey', 'RSAKey', 'RSAMultiPrimePrivateCrtKey', 'RSAPrivateCrtKey', 'RSAPrivateKey', 'RSAPublicKey'
        -            ),
        -        43 => array (
        -            'AlgorithmParameterSpec', 'DSAParameterSpec', 'DSAPrivateKeySpec', 'DSAPublicKeySpec', 'ECField', 'ECFieldF2m', 'ECFieldFp', 'ECGenParameterSpec', 'ECParameterSpec', 'ECPoint', 'ECPrivateKeySpec', 'ECPublicKeySpec', 'EllipticCurve', 'EncodedKeySpec', 'InvalidKeySpecException', 'InvalidParameterSpecException', 'KeySpec', 'MGF1ParameterSpec', 'PKCS8EncodedKeySpec', 'PSSParameterSpec', 'RSAKeyGenParameterSpec', 'RSAMultiPrimePrivateCrtKeySpec', 'RSAOtherPrimeInfo', 'RSAPrivateCrtKeySpec', 'RSAPrivateKeySpec', 'RSAPublicKeySpec', 'X509EncodedKeySpec'
        -            ),
        -        44 => array (
        -            'BatchUpdateException', 'Blob', 'CallableStatement', 'Clob', 'Connection', 'DataTruncation', 'DatabaseMetaData', 'Driver', 'DriverManager', 'DriverPropertyInfo', 'ParameterMetaData', 'PreparedStatement', 'Ref', 'ResultSet', 'ResultSetMetaData', 'SQLData', 'SQLException', 'SQLInput', 'SQLOutput', 'SQLPermission', 'SQLWarning', 'Savepoint', 'Struct', 'Time', 'Types'
        -            ),
        -        45 => array (
        -            'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', 'AttributedString', 'Bidi', 'BreakIterator', 'CharacterIterator', 'ChoiceFormat', 'CollationElementIterator', 'CollationKey', 'Collator', 'DateFormat', 'DateFormat.Field', 'DateFormatSymbols', 'DecimalFormat', 'DecimalFormatSymbols', 'FieldPosition', 'Format', 'Format.Field', 'MessageFormat', 'MessageFormat.Field', 'NumberFormat', 'NumberFormat.Field', 'ParseException', 'ParsePosition', 'RuleBasedCollator', 'SimpleDateFormat', 'StringCharacterIterator'
        -            ),
        -        46 => array (
        -            'AbstractCollection', 'AbstractList', 'AbstractMap', 'AbstractQueue', 'AbstractSequentialList', 'AbstractSet', 'ArrayList', 'Arrays', 'BitSet', 'Calendar', 'Collection', 'Collections', 'Comparator', 'ConcurrentModificationException', 'Currency', 'Dictionary', 'DuplicateFormatFlagsException', 'EmptyStackException', 'EnumMap', 'EnumSet', 'Enumeration', 'EventListenerProxy', 'EventObject', 'FormatFlagsConversionMismatchException', 'Formattable', 'FormattableFlags', 'Formatter.BigDecimalLayoutForm', 'FormatterClosedException', 'GregorianCalendar', 'HashMap', 'HashSet', 'Hashtable', 'IdentityHashMap', 'IllegalFormatCodePointException', 'IllegalFormatConversionException', 'IllegalFormatException', 'IllegalFormatFlagsException', 'IllegalFormatPrecisionException', 'IllegalFormatWidthException', 'InputMismatchException', 'InvalidPropertiesFormatException', 'Iterator', 'LinkedHashMap', 'LinkedHashSet', 'LinkedList', 'ListIterator', 'ListResourceBundle', 'Locale', 'Map', 'Map.Entry', 'MissingFormatArgumentException',
        -            'MissingFormatWidthException', 'MissingResourceException', 'NoSuchElementException', 'Observable', 'Observer', 'PriorityQueue', 'Properties', 'PropertyPermission', 'PropertyResourceBundle', 'Queue', 'Random', 'RandomAccess', 'ResourceBundle', 'Scanner', 'Set', 'SimpleTimeZone', 'SortedMap', 'SortedSet', 'Stack', 'StringTokenizer', 'TimeZone', 'TimerTask', 'TooManyListenersException', 'TreeMap', 'TreeSet', 'UUID', 'UnknownFormatConversionException', 'UnknownFormatFlagsException', 'Vector', 'WeakHashMap'
        -            ),
        -        47 => array (
        -            'AbstractExecutorService', 'ArrayBlockingQueue', 'BlockingQueue', 'BrokenBarrierException', 'Callable', 'CancellationException', 'CompletionService', 'ConcurrentHashMap', 'ConcurrentLinkedQueue', 'ConcurrentMap', 'CopyOnWriteArrayList', 'CopyOnWriteArraySet', 'CountDownLatch', 'CyclicBarrier', 'DelayQueue', 'Delayed', 'Exchanger', 'ExecutionException', 'Executor', 'ExecutorCompletionService', 'ExecutorService', 'Executors', 'Future', 'FutureTask', 'LinkedBlockingQueue', 'PriorityBlockingQueue', 'RejectedExecutionException', 'RejectedExecutionHandler', 'ScheduledExecutorService', 'ScheduledFuture', 'ScheduledThreadPoolExecutor', 'Semaphore', 'SynchronousQueue', 'ThreadFactory', 'ThreadPoolExecutor', 'ThreadPoolExecutor.AbortPolicy', 'ThreadPoolExecutor.CallerRunsPolicy', 'ThreadPoolExecutor.DiscardOldestPolicy', 'ThreadPoolExecutor.DiscardPolicy', 'TimeUnit', 'TimeoutException'
        -            ),
        -        48 => array (
        -            'AtomicBoolean', 'AtomicInteger', 'AtomicIntegerArray', 'AtomicIntegerFieldUpdater', 'AtomicLong', 'AtomicLongArray', 'AtomicLongFieldUpdater', 'AtomicMarkableReference', 'AtomicReference', 'AtomicReferenceArray', 'AtomicReferenceFieldUpdater', 'AtomicStampedReference'
        -            ),
        -        49 => array (
        -            'AbstractQueuedSynchronizer', 'Condition', 'Lock', 'LockSupport', 'ReadWriteLock', 'ReentrantLock', 'ReentrantReadWriteLock', 'ReentrantReadWriteLock.ReadLock', 'ReentrantReadWriteLock.WriteLock'
        -            ),
        -        50 => array (
        -            'Attributes.Name', 'JarEntry', 'JarException', 'JarFile', 'JarInputStream', 'JarOutputStream', 'Manifest', 'Pack200', 'Pack200.Packer', 'Pack200.Unpacker'
        -            ),
        -        51 => array (
        -            'ConsoleHandler', 'ErrorManager', 'FileHandler', 'Filter', 'Handler', 'Level', 'LogManager', 'LogRecord', 'Logger', 'LoggingMXBean', 'LoggingPermission', 'MemoryHandler', 'SimpleFormatter', 'SocketHandler', 'StreamHandler', 'XMLFormatter'
        -            ),
        -        52 => array (
        -            'AbstractPreferences', 'BackingStoreException', 'InvalidPreferencesFormatException', 'NodeChangeEvent', 'NodeChangeListener', 'PreferenceChangeEvent', 'PreferenceChangeListener', 'Preferences', 'PreferencesFactory'
        -            ),
        -        53 => array (
        -            'MatchResult', 'Matcher', 'Pattern', 'PatternSyntaxException'
        -            ),
        -        54 => array (
        -            'Adler32', 'CRC32', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', 'DataFormatException', 'Deflater', 'DeflaterOutputStream', 'GZIPInputStream', 'GZIPOutputStream', 'Inflater', 'InflaterInputStream', 'ZipEntry', 'ZipException', 'ZipFile', 'ZipInputStream', 'ZipOutputStream'
        -            ),
        -        55 => array (
        -            'Accessible', 'AccessibleAction', 'AccessibleAttributeSequence', 'AccessibleBundle', 'AccessibleComponent', 'AccessibleContext', 'AccessibleEditableText', 'AccessibleExtendedComponent', 'AccessibleExtendedTable', 'AccessibleExtendedText', 'AccessibleHyperlink', 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleKeyBinding', 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', 'AccessibleStateSet', 'AccessibleStreamable', 'AccessibleTable', 'AccessibleTableModelChange', 'AccessibleText', 'AccessibleTextSequence', 'AccessibleValue'
        -            ),
        -        56 => array (
        -            'ActivityCompletedException', 'ActivityRequiredException', 'InvalidActivityException'
        -            ),
        -        57 => array (
        -            'BadPaddingException', 'Cipher', 'CipherInputStream', 'CipherOutputStream', 'CipherSpi', 'EncryptedPrivateKeyInfo', 'ExemptionMechanism', 'ExemptionMechanismException', 'ExemptionMechanismSpi', 'IllegalBlockSizeException', 'KeyAgreement', 'KeyAgreementSpi', 'KeyGenerator', 'KeyGeneratorSpi', 'Mac', 'MacSpi', 'NoSuchPaddingException', 'NullCipher', 'SealedObject', 'SecretKey', 'SecretKeyFactory', 'SecretKeyFactorySpi', 'ShortBufferException'
        -            ),
        -        58 => array (
        -            'DHKey', 'DHPrivateKey', 'DHPublicKey', 'PBEKey'
        -            ),
        -        59 => array (
        -            'DESKeySpec', 'DESedeKeySpec', 'DHGenParameterSpec', 'DHParameterSpec', 'DHPrivateKeySpec', 'DHPublicKeySpec', 'IvParameterSpec', 'OAEPParameterSpec', 'PBEKeySpec', 'PBEParameterSpec', 'PSource', 'PSource.PSpecified', 'RC2ParameterSpec', 'RC5ParameterSpec', 'SecretKeySpec'
        -            ),
        -        60 => array (
        -            'IIOException', 'IIOImage', 'IIOParam', 'IIOParamController', 'ImageIO', 'ImageReadParam', 'ImageReader', 'ImageTranscoder', 'ImageTypeSpecifier', 'ImageWriteParam', 'ImageWriter'
        -            ),
        -        61 => array (
        -            'IIOReadProgressListener', 'IIOReadUpdateListener', 'IIOReadWarningListener', 'IIOWriteProgressListener', 'IIOWriteWarningListener'
        -            ),
        -        62 => array (
        -            'IIOInvalidTreeException', 'IIOMetadata', 'IIOMetadataController', 'IIOMetadataFormat', 'IIOMetadataFormatImpl', 'IIOMetadataNode'
        -            ),
        -        63 => array (
        -            'BMPImageWriteParam'
        -            ),
        -        64 => array (
        -            'JPEGHuffmanTable', 'JPEGImageReadParam', 'JPEGImageWriteParam', 'JPEGQTable'
        -            ),
        -        65 => array (
        -            'IIORegistry', 'IIOServiceProvider', 'ImageInputStreamSpi', 'ImageOutputStreamSpi', 'ImageReaderSpi', 'ImageReaderWriterSpi', 'ImageTranscoderSpi', 'ImageWriterSpi', 'RegisterableService', 'ServiceRegistry', 'ServiceRegistry.Filter'
        -            ),
        -        66 => array (
        -            'FileCacheImageInputStream', 'FileCacheImageOutputStream', 'FileImageInputStream', 'FileImageOutputStream', 'IIOByteBuffer', 'ImageInputStream', 'ImageInputStreamImpl', 'ImageOutputStream', 'ImageOutputStreamImpl', 'MemoryCacheImageInputStream', 'MemoryCacheImageOutputStream'
        -            ),
        -        67 => array (
        -            'AttributeChangeNotification', 'AttributeChangeNotificationFilter', 'AttributeNotFoundException', 'AttributeValueExp', 'BadAttributeValueExpException', 'BadBinaryOpValueExpException', 'BadStringOperationException', 'Descriptor', 'DescriptorAccess', 'DynamicMBean', 'InstanceAlreadyExistsException', 'InstanceNotFoundException', 'InvalidApplicationException', 'JMException', 'JMRuntimeException', 'ListenerNotFoundException', 'MBeanAttributeInfo', 'MBeanConstructorInfo', 'MBeanException', 'MBeanFeatureInfo', 'MBeanInfo', 'MBeanNotificationInfo', 'MBeanOperationInfo', 'MBeanParameterInfo', 'MBeanPermission', 'MBeanRegistration', 'MBeanRegistrationException', 'MBeanServer', 'MBeanServerBuilder', 'MBeanServerConnection', 'MBeanServerDelegate', 'MBeanServerDelegateMBean', 'MBeanServerFactory', 'MBeanServerInvocationHandler', 'MBeanServerNotification', 'MBeanServerPermission', 'MBeanTrustPermission', 'MalformedObjectNameException', 'NotCompliantMBeanException', 'Notification', 'NotificationBroadcaster',
        -            'NotificationBroadcasterSupport', 'NotificationEmitter', 'NotificationFilter', 'NotificationFilterSupport', 'NotificationListener', 'ObjectInstance', 'ObjectName', 'OperationsException', 'PersistentMBean', 'Query', 'QueryEval', 'QueryExp', 'ReflectionException', 'RuntimeErrorException', 'RuntimeMBeanException', 'RuntimeOperationsException', 'ServiceNotFoundException', 'StandardMBean', 'StringValueExp', 'ValueExp'
        -            ),
        -        68 => array (
        -            'ClassLoaderRepository', 'MLet', 'MLetMBean', 'PrivateClassLoader', 'PrivateMLet'
        -            ),
        -        69 => array (
        -            'DescriptorSupport', 'InvalidTargetObjectTypeException', 'ModelMBean', 'ModelMBeanAttributeInfo', 'ModelMBeanConstructorInfo', 'ModelMBeanInfo', 'ModelMBeanInfoSupport', 'ModelMBeanNotificationBroadcaster', 'ModelMBeanNotificationInfo', 'ModelMBeanOperationInfo', 'RequiredModelMBean', 'XMLParseException'
        -            ),
        -        70 => array (
        -            'CounterMonitor', 'CounterMonitorMBean', 'GaugeMonitor', 'GaugeMonitorMBean', 'Monitor', 'MonitorMBean', 'MonitorNotification', 'MonitorSettingException', 'StringMonitor', 'StringMonitorMBean'
        -            ),
        -        71 => array (
        -            'ArrayType', 'CompositeData', 'CompositeDataSupport', 'CompositeType', 'InvalidOpenTypeException', 'KeyAlreadyExistsException', 'OpenDataException', 'OpenMBeanAttributeInfo', 'OpenMBeanAttributeInfoSupport', 'OpenMBeanConstructorInfo', 'OpenMBeanConstructorInfoSupport', 'OpenMBeanInfo', 'OpenMBeanInfoSupport', 'OpenMBeanOperationInfo', 'OpenMBeanOperationInfoSupport', 'OpenMBeanParameterInfo', 'OpenMBeanParameterInfoSupport', 'SimpleType', 'TabularData', 'TabularDataSupport', 'TabularType'
        -            ),
        -        72 => array (
        -            'InvalidRelationIdException', 'InvalidRelationServiceException', 'InvalidRelationTypeException', 'InvalidRoleInfoException', 'InvalidRoleValueException', 'MBeanServerNotificationFilter', 'Relation', 'RelationException', 'RelationNotFoundException', 'RelationNotification', 'RelationService', 'RelationServiceMBean', 'RelationServiceNotRegisteredException', 'RelationSupport', 'RelationSupportMBean', 'RelationType', 'RelationTypeNotFoundException', 'RelationTypeSupport', 'Role', 'RoleInfo', 'RoleInfoNotFoundException', 'RoleList', 'RoleNotFoundException', 'RoleResult', 'RoleStatus', 'RoleUnresolved', 'RoleUnresolvedList'
        -            ),
        -        73 => array (
        -            'JMXAuthenticator', 'JMXConnectionNotification', 'JMXConnector', 'JMXConnectorFactory', 'JMXConnectorProvider', 'JMXConnectorServer', 'JMXConnectorServerFactory', 'JMXConnectorServerMBean', 'JMXConnectorServerProvider', 'JMXPrincipal', 'JMXProviderException', 'JMXServerErrorException', 'JMXServiceURL', 'MBeanServerForwarder', 'NotificationResult', 'SubjectDelegationPermission', 'TargetedNotification'
        -            ),
        -        74 => array (
        -            'RMIConnection', 'RMIConnectionImpl', 'RMIConnectionImpl_Stub', 'RMIConnector', 'RMIConnectorServer', 'RMIIIOPServerImpl', 'RMIJRMPServerImpl', 'RMIServer', 'RMIServerImpl', 'RMIServerImpl_Stub'
        -            ),
        -        75 => array (
        -            'TimerAlarmClockNotification', 'TimerMBean', 'TimerNotification'
        -            ),
        -        76 => array (
        -            'AuthenticationNotSupportedException', 'BinaryRefAddr', 'CannotProceedException', 'CommunicationException', 'CompositeName', 'CompoundName', 'ConfigurationException', 'ContextNotEmptyException', 'InitialContext', 'InsufficientResourcesException', 'InterruptedNamingException', 'InvalidNameException', 'LimitExceededException', 'LinkException', 'LinkLoopException', 'LinkRef', 'MalformedLinkException', 'Name', 'NameAlreadyBoundException', 'NameClassPair', 'NameNotFoundException', 'NameParser', 'NamingEnumeration', 'NamingException', 'NamingSecurityException', 'NoInitialContextException', 'NoPermissionException', 'NotContextException', 'OperationNotSupportedException', 'PartialResultException', 'RefAddr', 'Referenceable', 'ReferralException', 'ServiceUnavailableException', 'SizeLimitExceededException', 'StringRefAddr', 'TimeLimitExceededException'
        -            ),
        -        77 => array (
        -            'AttributeInUseException', 'AttributeModificationException', 'BasicAttribute', 'BasicAttributes', 'DirContext', 'InitialDirContext', 'InvalidAttributeIdentifierException', 'InvalidAttributesException', 'InvalidSearchControlsException', 'InvalidSearchFilterException', 'ModificationItem', 'NoSuchAttributeException', 'SchemaViolationException', 'SearchControls', 'SearchResult'
        -            ),
        -        78 => array (
        -            'EventContext', 'EventDirContext', 'NamespaceChangeListener', 'NamingEvent', 'NamingExceptionEvent', 'NamingListener', 'ObjectChangeListener'
        -            ),
        -        79 => array (
        -            'BasicControl', 'ControlFactory', 'ExtendedRequest', 'ExtendedResponse', 'HasControls', 'InitialLdapContext', 'LdapContext', 'LdapName', 'LdapReferralException', 'ManageReferralControl', 'PagedResultsControl', 'PagedResultsResponseControl', 'Rdn', 'SortControl', 'SortKey', 'SortResponseControl', 'StartTlsRequest', 'StartTlsResponse', 'UnsolicitedNotification', 'UnsolicitedNotificationEvent', 'UnsolicitedNotificationListener'
        -            ),
        -        80 => array (
        -            'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DirectoryManager', 'InitialContextFactory', 'InitialContextFactoryBuilder', 'NamingManager', 'ObjectFactory', 'ObjectFactoryBuilder', 'ResolveResult', 'Resolver', 'StateFactory'
        -            ),
        -        81 => array (
        -            'ServerSocketFactory', 'SocketFactory'
        -            ),
        -        82 => array (
        -            'CertPathTrustManagerParameters', 'HandshakeCompletedEvent', 'HandshakeCompletedListener', 'HostnameVerifier', 'HttpsURLConnection', 'KeyManager', 'KeyManagerFactory', 'KeyManagerFactorySpi', 'KeyStoreBuilderParameters', 'ManagerFactoryParameters', 'SSLContext', 'SSLContextSpi', 'SSLEngine', 'SSLEngineResult', 'SSLEngineResult.HandshakeStatus', 'SSLEngineResult.Status', 'SSLException', 'SSLHandshakeException', 'SSLKeyException', 'SSLPeerUnverifiedException', 'SSLPermission', 'SSLProtocolException', 'SSLServerSocket', 'SSLServerSocketFactory', 'SSLSession', 'SSLSessionBindingEvent', 'SSLSessionBindingListener', 'SSLSessionContext', 'SSLSocket', 'SSLSocketFactory', 'TrustManager', 'TrustManagerFactory', 'TrustManagerFactorySpi', 'X509ExtendedKeyManager', 'X509KeyManager', 'X509TrustManager'
        -            ),
        -        83 => array (
        -            'AttributeException', 'CancelablePrintJob', 'Doc', 'DocFlavor', 'DocFlavor.BYTE_ARRAY', 'DocFlavor.CHAR_ARRAY', 'DocFlavor.INPUT_STREAM', 'DocFlavor.READER', 'DocFlavor.SERVICE_FORMATTED', 'DocFlavor.STRING', 'DocFlavor.URL', 'DocPrintJob', 'FlavorException', 'MultiDoc', 'MultiDocPrintJob', 'MultiDocPrintService', 'PrintException', 'PrintService', 'PrintServiceLookup', 'ServiceUI', 'ServiceUIFactory', 'SimpleDoc', 'StreamPrintService', 'StreamPrintServiceFactory', 'URIException'
        -            ),
        -        84 => array (
        -            'AttributeSetUtilities', 'DateTimeSyntax', 'DocAttribute', 'DocAttributeSet', 'EnumSyntax', 'HashAttributeSet', 'HashDocAttributeSet', 'HashPrintJobAttributeSet', 'HashPrintRequestAttributeSet', 'HashPrintServiceAttributeSet', 'IntegerSyntax', 'PrintJobAttribute', 'PrintJobAttributeSet', 'PrintRequestAttribute', 'PrintRequestAttributeSet', 'PrintServiceAttribute', 'PrintServiceAttributeSet', 'ResolutionSyntax', 'SetOfIntegerSyntax', 'Size2DSyntax', 'SupportedValuesAttribute', 'TextSyntax', 'URISyntax', 'UnmodifiableSetException'
        -            ),
        -        85 => array (
        -            'Chromaticity', 'ColorSupported', 'Compression', 'Copies', 'CopiesSupported', 'DateTimeAtCompleted', 'DateTimeAtCreation', 'DateTimeAtProcessing', 'Destination', 'DocumentName', 'Fidelity', 'Finishings', 'JobHoldUntil', 'JobImpressions', 'JobImpressionsCompleted', 'JobImpressionsSupported', 'JobKOctets', 'JobKOctetsProcessed', 'JobKOctetsSupported', 'JobMediaSheets', 'JobMediaSheetsCompleted', 'JobMediaSheetsSupported', 'JobMessageFromOperator', 'JobName', 'JobOriginatingUserName', 'JobPriority', 'JobPrioritySupported', 'JobSheets', 'JobState', 'JobStateReason', 'JobStateReasons', 'Media', 'MediaName', 'MediaPrintableArea', 'MediaSize', 'MediaSize.Engineering', 'MediaSize.ISO', 'MediaSize.JIS', 'MediaSize.NA', 'MediaSize.Other', 'MediaSizeName', 'MediaTray', 'MultipleDocumentHandling', 'NumberOfDocuments', 'NumberOfInterveningJobs', 'NumberUp', 'NumberUpSupported', 'OrientationRequested', 'OutputDeviceAssigned', 'PDLOverrideSupported', 'PageRanges', 'PagesPerMinute', 'PagesPerMinuteColor',
        -            'PresentationDirection', 'PrintQuality', 'PrinterInfo', 'PrinterIsAcceptingJobs', 'PrinterLocation', 'PrinterMakeAndModel', 'PrinterMessageFromOperator', 'PrinterMoreInfo', 'PrinterMoreInfoManufacturer', 'PrinterName', 'PrinterResolution', 'PrinterState', 'PrinterStateReason', 'PrinterStateReasons', 'PrinterURI', 'QueuedJobCount', 'ReferenceUriSchemesSupported', 'RequestingUserName', 'Severity', 'SheetCollate', 'Sides'
        -            ),
        -        86 => array (
        -            'PrintEvent', 'PrintJobAdapter', 'PrintJobAttributeEvent', 'PrintJobAttributeListener', 'PrintJobEvent', 'PrintJobListener', 'PrintServiceAttributeEvent', 'PrintServiceAttributeListener'
        -            ),
        -        87 => array (
        -            'PortableRemoteObject'
        -            ),
        -        88 => array (
        -            'ClassDesc', 'PortableRemoteObjectDelegate', 'Stub', 'StubDelegate', 'Tie', 'Util', 'UtilDelegate', 'ValueHandler', 'ValueHandlerMultiFormat'
        -            ),
        -        89 => array (
        -            'SslRMIClientSocketFactory', 'SslRMIServerSocketFactory'
        -            ),
        -        90 => array (
        -            'AuthPermission', 'DestroyFailedException', 'Destroyable', 'PrivateCredentialPermission', 'RefreshFailedException', 'Refreshable', 'Subject', 'SubjectDomainCombiner'
        -            ),
        -        91 => array (
        -            'Callback', 'CallbackHandler', 'ChoiceCallback', 'ConfirmationCallback', 'LanguageCallback', 'NameCallback', 'PasswordCallback', 'TextInputCallback', 'TextOutputCallback', 'UnsupportedCallbackException'
        -            ),
        -        92 => array (
        -            'DelegationPermission', 'KerberosKey', 'KerberosPrincipal', 'KerberosTicket', 'ServicePermission'
        -            ),
        -        93 => array (
        -            'AccountException', 'AccountExpiredException', 'AccountLockedException', 'AccountNotFoundException', 'AppConfigurationEntry', 'AppConfigurationEntry.LoginModuleControlFlag', 'Configuration', 'CredentialException', 'CredentialExpiredException', 'CredentialNotFoundException', 'FailedLoginException', 'LoginContext', 'LoginException'
        -            ),
        -        94 => array (
        -            'LoginModule'
        -            ),
        -        95 => array (
        -            'X500Principal', 'X500PrivateCredential'
        -            ),
        -        96 => array (
        -            'AuthorizeCallback', 'RealmCallback', 'RealmChoiceCallback', 'Sasl', 'SaslClient', 'SaslClientFactory', 'SaslException', 'SaslServer', 'SaslServerFactory'
        -            ),
        -        97 => array (
        -            'ControllerEventListener', 'Instrument', 'InvalidMidiDataException', 'MetaEventListener', 'MetaMessage', 'MidiChannel', 'MidiDevice', 'MidiDevice.Info', 'MidiEvent', 'MidiFileFormat', 'MidiMessage', 'MidiSystem', 'MidiUnavailableException', 'Patch', 'Receiver', 'Sequence', 'Sequencer', 'Sequencer.SyncMode', 'ShortMessage', 'Soundbank', 'SoundbankResource', 'Synthesizer', 'SysexMessage', 'Track', 'Transmitter', 'VoiceStatus'
        -            ),
        -        98 => array (
        -            'MidiDeviceProvider', 'MidiFileReader', 'MidiFileWriter', 'SoundbankReader'
        -            ),
        -        99 => array (
        -            'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', 'AudioPermission', 'AudioSystem', 'BooleanControl', 'BooleanControl.Type', 'Clip', 'CompoundControl', 'CompoundControl.Type', 'Control.Type', 'DataLine', 'DataLine.Info', 'EnumControl', 'EnumControl.Type', 'FloatControl', 'FloatControl.Type', 'Line', 'Line.Info', 'LineEvent', 'LineEvent.Type', 'LineListener', 'LineUnavailableException', 'Mixer', 'Mixer.Info', 'Port', 'Port.Info', 'ReverbType', 'SourceDataLine', 'TargetDataLine', 'UnsupportedAudioFileException'
        -            ),
        -        100 => array (
        -            'AudioFileReader', 'AudioFileWriter', 'FormatConversionProvider', 'MixerProvider'
        -            ),
        -        101 => array (
        -            'ConnectionEvent', 'ConnectionEventListener', 'ConnectionPoolDataSource', 'DataSource', 'PooledConnection', 'RowSet', 'RowSetEvent', 'RowSetInternal', 'RowSetListener', 'RowSetMetaData', 'RowSetReader', 'RowSetWriter', 'XAConnection', 'XADataSource'
        -            ),
        -        102 => array (
        -            'BaseRowSet', 'CachedRowSet', 'FilteredRowSet', 'JdbcRowSet', 'JoinRowSet', 'Joinable', 'Predicate', 'RowSetMetaDataImpl', 'RowSetWarning', 'WebRowSet'
        -            ),
        -        103 => array (
        -            'SQLInputImpl', 'SQLOutputImpl', 'SerialArray', 'SerialBlob', 'SerialClob', 'SerialDatalink', 'SerialException', 'SerialJavaObject', 'SerialRef', 'SerialStruct'
        -            ),
        -        104 => array (
        -            'SyncFactory', 'SyncFactoryException', 'SyncProvider', 'SyncProviderException', 'SyncResolver', 'TransactionalWriter', 'XmlReader', 'XmlWriter'
        -            ),
        -        105 => array (
        -            'AbstractAction', 'AbstractButton', 'AbstractCellEditor', 'AbstractListModel', 'AbstractSpinnerModel', 'Action', 'ActionMap', 'BorderFactory', 'BoundedRangeModel', 'Box', 'Box.Filler', 'BoxLayout', 'ButtonGroup', 'ButtonModel', 'CellEditor', 'CellRendererPane', 'ComboBoxEditor', 'ComboBoxModel', 'ComponentInputMap', 'DebugGraphics', 'DefaultBoundedRangeModel', 'DefaultButtonModel', 'DefaultCellEditor', 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultFocusManager', 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', 'DefaultListSelectionModel', 'DefaultSingleSelectionModel', 'DesktopManager', 'FocusManager', 'GrayFilter', 'Icon', 'ImageIcon', 'InputMap', 'InputVerifier', 'InternalFrameFocusTraversalPolicy', 'JApplet', 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox', 'JComboBox.KeySelectionManager', 'JComponent', 'JDesktopPane', 'JDialog', 'JEditorPane', 'JFileChooser', 'JFormattedTextField', 'JFormattedTextField.AbstractFormatter',
        -            'JFormattedTextField.AbstractFormatterFactory', 'JFrame', 'JInternalFrame', 'JInternalFrame.JDesktopIcon', 'JLabel', 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar', 'JMenuItem', 'JOptionPane', 'JPanel', 'JPasswordField', 'JPopupMenu', 'JPopupMenu.Separator', 'JProgressBar', 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane', 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider', 'JSpinner', 'JSpinner.DateEditor', 'JSpinner.DefaultEditor', 'JSpinner.ListEditor', 'JSpinner.NumberEditor', 'JSplitPane', 'JTabbedPane', 'JTable', 'JTable.PrintMode', 'JTextArea', 'JTextField', 'JTextPane', 'JToggleButton', 'JToggleButton.ToggleButtonModel', 'JToolBar', 'JToolBar.Separator', 'JToolTip', 'JTree', 'JTree.DynamicUtilTreeNode', 'JTree.EmptySelectionModel', 'JViewport', 'JWindow', 'KeyStroke', 'LayoutFocusTraversalPolicy', 'ListCellRenderer', 'ListModel', 'ListSelectionModel', 'LookAndFeel', 'MenuElement', 'MenuSelectionManager', 'MutableComboBoxModel', 'OverlayLayout', 'Popup', 'PopupFactory', 'ProgressMonitor',
        -            'ProgressMonitorInputStream', 'Renderer', 'RepaintManager', 'RootPaneContainer', 'ScrollPaneConstants', 'ScrollPaneLayout', 'ScrollPaneLayout.UIResource', 'Scrollable', 'SingleSelectionModel', 'SizeRequirements', 'SizeSequence', 'SortingFocusTraversalPolicy', 'SpinnerDateModel', 'SpinnerListModel', 'SpinnerModel', 'SpinnerNumberModel', 'Spring', 'SpringLayout', 'SpringLayout.Constraints', 'SwingConstants', 'SwingUtilities', 'ToolTipManager', 'TransferHandler', 'UIDefaults', 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap', 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue', 'UIManager', 'UIManager.LookAndFeelInfo', 'UnsupportedLookAndFeelException', 'ViewportLayout', 'WindowConstants'
        -            ),
        -        106 => array (
        -            'AbstractBorder', 'BevelBorder', 'Border', 'CompoundBorder', 'EmptyBorder', 'EtchedBorder', 'LineBorder', 'MatteBorder', 'SoftBevelBorder', 'TitledBorder'
        -            ),
        -        107 => array (
        -            'AbstractColorChooserPanel', 'ColorChooserComponentFactory', 'ColorSelectionModel', 'DefaultColorSelectionModel'
        -            ),
        -        108 => array (
        -            'AncestorEvent', 'AncestorListener', 'CaretEvent', 'CaretListener', 'CellEditorListener', 'ChangeEvent', 'ChangeListener', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', 'DocumentListener', 'EventListenerList', 'HyperlinkEvent', 'HyperlinkEvent.EventType', 'HyperlinkListener', 'InternalFrameAdapter', 'InternalFrameEvent', 'InternalFrameListener', 'ListDataEvent', 'ListDataListener', 'ListSelectionEvent', 'ListSelectionListener', 'MenuDragMouseEvent', 'MenuDragMouseListener', 'MenuEvent', 'MenuKeyEvent', 'MenuKeyListener', 'MenuListener', 'MouseInputAdapter', 'MouseInputListener', 'PopupMenuEvent', 'PopupMenuListener', 'SwingPropertyChangeSupport', 'TableColumnModelEvent', 'TableColumnModelListener', 'TableModelEvent', 'TableModelListener', 'TreeExpansionEvent', 'TreeExpansionListener', 'TreeModelEvent', 'TreeModelListener', 'TreeSelectionEvent', 'TreeSelectionListener', 'TreeWillExpandListener', 'UndoableEditEvent', 'UndoableEditListener'
        -            ),
        -        109 => array (
        -            'FileSystemView', 'FileView'
        -            ),
        -        110 => array (
        -            'ActionMapUIResource', 'BorderUIResource', 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', 'BorderUIResource.TitledBorderUIResource', 'ButtonUI', 'ColorChooserUI', 'ColorUIResource', 'ComboBoxUI', 'ComponentInputMapUIResource', 'ComponentUI', 'DesktopIconUI', 'DesktopPaneUI', 'DimensionUIResource', 'FileChooserUI', 'FontUIResource', 'IconUIResource', 'InputMapUIResource', 'InsetsUIResource', 'InternalFrameUI', 'LabelUI', 'ListUI', 'MenuBarUI', 'MenuItemUI', 'OptionPaneUI', 'PanelUI', 'PopupMenuUI', 'ProgressBarUI', 'RootPaneUI', 'ScrollBarUI', 'ScrollPaneUI', 'SeparatorUI', 'SliderUI', 'SpinnerUI', 'SplitPaneUI', 'TabbedPaneUI', 'TableHeaderUI', 'TableUI', 'TextUI', 'ToolBarUI', 'ToolTipUI', 'TreeUI', 'UIResource', 'ViewportUI'
        -            ),
        -        111 => array (
        -            'BasicArrowButton', 'BasicBorders', 'BasicBorders.ButtonBorder', 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', 'BasicBorders.RadioButtonBorder', 'BasicBorders.RolloverButtonBorder', 'BasicBorders.SplitPaneBorder', 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', 'BasicFormattedTextFieldUI', 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI',
        -            'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', 'BasicSliderUI', 'BasicSpinnerUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', 'ComboPopup', 'DefaultMenuLayout'
        -            ),
        -        112 => array (
        -            'DefaultMetalTheme', 'MetalBorders', 'MetalBorders.ButtonBorder', 'MetalBorders.Flush3DBorder', 'MetalBorders.InternalFrameBorder', 'MetalBorders.MenuBarBorder', 'MetalBorders.MenuItemBorder', 'MetalBorders.OptionDialogBorder', 'MetalBorders.PaletteBorder', 'MetalBorders.PopupMenuBorder', 'MetalBorders.RolloverButtonBorder', 'MetalBorders.ScrollPaneBorder', 'MetalBorders.TableHeaderBorder', 'MetalBorders.TextFieldBorder', 'MetalBorders.ToggleButtonBorder', 'MetalBorders.ToolBarBorder', 'MetalButtonUI', 'MetalCheckBoxIcon', 'MetalCheckBoxUI', 'MetalComboBoxButton', 'MetalComboBoxEditor', 'MetalComboBoxEditor.UIResource', 'MetalComboBoxIcon', 'MetalComboBoxUI', 'MetalDesktopIconUI', 'MetalFileChooserUI', 'MetalIconFactory', 'MetalIconFactory.FileIcon16', 'MetalIconFactory.FolderIcon16', 'MetalIconFactory.PaletteCloseIcon', 'MetalIconFactory.TreeControlIcon', 'MetalIconFactory.TreeFolderIcon', 'MetalIconFactory.TreeLeafIcon', 'MetalInternalFrameTitlePane', 'MetalInternalFrameUI', 'MetalLabelUI',
        -            'MetalLookAndFeel', 'MetalMenuBarUI', 'MetalPopupMenuSeparatorUI', 'MetalProgressBarUI', 'MetalRadioButtonUI', 'MetalRootPaneUI', 'MetalScrollBarUI', 'MetalScrollButton', 'MetalScrollPaneUI', 'MetalSeparatorUI', 'MetalSliderUI', 'MetalSplitPaneUI', 'MetalTabbedPaneUI', 'MetalTextFieldUI', 'MetalTheme', 'MetalToggleButtonUI', 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI', 'OceanTheme'
        -            ),
        -        113 => array (
        -            'MultiButtonUI', 'MultiColorChooserUI', 'MultiComboBoxUI', 'MultiDesktopIconUI', 'MultiDesktopPaneUI', 'MultiFileChooserUI', 'MultiInternalFrameUI', 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel', 'MultiMenuBarUI', 'MultiMenuItemUI', 'MultiOptionPaneUI', 'MultiPanelUI', 'MultiPopupMenuUI', 'MultiProgressBarUI', 'MultiRootPaneUI', 'MultiScrollBarUI', 'MultiScrollPaneUI', 'MultiSeparatorUI', 'MultiSliderUI', 'MultiSpinnerUI', 'MultiSplitPaneUI', 'MultiTabbedPaneUI', 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI', 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI', 'MultiViewportUI'
        -            ),
        -        114 => array (
        -            'ColorType', 'Region', 'SynthConstants', 'SynthContext', 'SynthGraphicsUtils', 'SynthLookAndFeel', 'SynthPainter', 'SynthStyle', 'SynthStyleFactory'
        -            ),
        -        115 => array (
        -            'AbstractTableModel', 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', 'DefaultTableModel', 'JTableHeader', 'TableCellEditor', 'TableCellRenderer', 'TableColumn', 'TableColumnModel', 'TableModel'
        -            ),
        -        116 => array (
        -            'AbstractDocument', 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', 'AbstractDocument.ElementEdit', 'AbstractWriter', 'AsyncBoxView', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', 'BadLocationException', 'BoxView', 'Caret', 'ChangedCharSetException', 'ComponentView', 'CompositeView', 'DateFormatter', 'DefaultCaret', 'DefaultEditorKit', 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction', 'DefaultFormatter', 'DefaultFormatterFactory', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', 'DefaultStyledDocument', 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', 'DefaultTextUI', 'DocumentFilter', 'DocumentFilter.FilterBypass',
        -            'EditorKit', 'ElementIterator', 'FieldView', 'FlowView', 'FlowView.FlowStrategy', 'GapContent', 'GlyphView', 'GlyphView.GlyphPainter', 'Highlighter', 'Highlighter.Highlight', 'Highlighter.HighlightPainter', 'IconView', 'InternationalFormatter', 'JTextComponent', 'JTextComponent.KeyBinding', 'Keymap', 'LabelView', 'LayeredHighlighter', 'LayeredHighlighter.LayerPainter', 'LayoutQueue', 'MaskFormatter', 'MutableAttributeSet', 'NavigationFilter', 'NavigationFilter.FilterBypass', 'NumberFormatter', 'PasswordView', 'PlainDocument', 'PlainView', 'Position', 'Position.Bias', 'Segment', 'SimpleAttributeSet', 'StringContent', 'Style', 'StyleConstants', 'StyleConstants.CharacterConstants', 'StyleConstants.ColorConstants', 'StyleConstants.FontConstants', 'StyleConstants.ParagraphConstants', 'StyleContext', 'StyledDocument', 'StyledEditorKit', 'StyledEditorKit.AlignmentAction', 'StyledEditorKit.BoldAction', 'StyledEditorKit.FontFamilyAction', 'StyledEditorKit.FontSizeAction', 'StyledEditorKit.ForegroundAction',
        -            'StyledEditorKit.ItalicAction', 'StyledEditorKit.StyledTextAction', 'StyledEditorKit.UnderlineAction', 'TabExpander', 'TabSet', 'TabStop', 'TabableView', 'TableView', 'TextAction', 'Utilities', 'View', 'ViewFactory', 'WrappedPlainView', 'ZoneView'
        -            ),
        -        117 => array (
        -            'BlockView', 'CSS', 'CSS.Attribute', 'FormSubmitEvent', 'FormSubmitEvent.MethodType', 'FormView', 'HTML', 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag', 'HTMLDocument', 'HTMLDocument.Iterator', 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory', 'HTMLEditorKit.HTMLTextAction', 'HTMLEditorKit.InsertHTMLTextAction', 'HTMLEditorKit.LinkController', 'HTMLEditorKit.Parser', 'HTMLEditorKit.ParserCallback', 'HTMLFrameHyperlinkEvent', 'HTMLWriter', 'ImageView', 'InlineView', 'ListView', 'MinimalHTMLWriter', 'ObjectView', 'Option', 'StyleSheet', 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter'
        -            ),
        -        118 => array (
        -            'ContentModel', 'DTD', 'DTDConstants', 'DocumentParser', 'ParserDelegator', 'TagElement'
        -            ),
        -        119 => array (
        -            'RTFEditorKit'
        -            ),
        -        120 => array (
        -            'AbstractLayoutCache', 'AbstractLayoutCache.NodeDimensions', 'DefaultMutableTreeNode', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'ExpandVetoException', 'FixedHeightLayoutCache', 'MutableTreeNode', 'RowMapper', 'TreeCellEditor', 'TreeCellRenderer', 'TreeModel', 'TreeNode', 'TreePath', 'TreeSelectionModel', 'VariableHeightLayoutCache'
        -            ),
        -        121 => array (
        -            'AbstractUndoableEdit', 'CannotRedoException', 'CannotUndoException', 'CompoundEdit', 'StateEdit', 'StateEditable', 'UndoManager', 'UndoableEdit', 'UndoableEditSupport'
        -            ),
        -        122 => array (
        -            'InvalidTransactionException', 'TransactionRequiredException', 'TransactionRolledbackException'
        -            ),
        -        123 => array (
        -            'XAException', 'XAResource', 'Xid'
        -            ),
        -        124 => array (
        -            'XMLConstants'
        -            ),
        -        125 => array (
        -            'DatatypeConfigurationException', 'DatatypeConstants', 'DatatypeConstants.Field', 'DatatypeFactory', 'Duration', 'XMLGregorianCalendar'
        -            ),
        -        126 => array (
        -            'NamespaceContext', 'QName'
        -            ),
        -        127 => array (
        -            'DocumentBuilder', 'DocumentBuilderFactory', 'FactoryConfigurationError', 'ParserConfigurationException', 'SAXParser', 'SAXParserFactory'
        -            ),
        -        128 => array (
        -            'ErrorListener', 'OutputKeys', 'Result', 'Source', 'SourceLocator', 'Templates', 'Transformer', 'TransformerConfigurationException', 'TransformerException', 'TransformerFactory', 'TransformerFactoryConfigurationError', 'URIResolver'
        -            ),
        -        129 => array (
        -            'DOMResult', 'DOMSource'
        -            ),
        -        130 => array (
        -            'SAXResult', 'SAXSource', 'SAXTransformerFactory', 'TemplatesHandler', 'TransformerHandler'
        -            ),
        -        131 => array (
        -            'StreamResult', 'StreamSource'
        -            ),
        -        132 => array (
        -            'Schema', 'SchemaFactory', 'SchemaFactoryLoader', 'TypeInfoProvider', 'Validator', 'ValidatorHandler'
        -            ),
        -        133 => array (
        -            'XPath', 'XPathConstants', 'XPathException', 'XPathExpression', 'XPathExpressionException', 'XPathFactory', 'XPathFactoryConfigurationException', 'XPathFunction', 'XPathFunctionException', 'XPathFunctionResolver', 'XPathVariableResolver'
        -            ),
        -        134 => array (
        -            'ChannelBinding', 'GSSContext', 'GSSCredential', 'GSSException', 'GSSManager', 'GSSName', 'MessageProp', 'Oid'
        -            ),
        -        135 => array (
        -            'ACTIVITY_COMPLETED', 'ACTIVITY_REQUIRED', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', 'Any', 'AnyHolder', 'AnySeqHolder', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_QOS', 'BAD_TYPECODE', 'BooleanHolder', 'BooleanSeqHelper', 'BooleanSeqHolder', 'ByteHolder', 'CODESET_INCOMPATIBLE', 'COMM_FAILURE', 'CTX_RESTRICT_SCOPE', 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'CompletionStatus', 'CompletionStatusHelper', 'ContextList', 'CurrentHolder', 'CustomMarshal', 'DATA_CONVERSION', 'DefinitionKind', 'DefinitionKindHelper', 'DomainManager', 'DomainManagerOperations', 'DoubleHolder', 'DoubleSeqHelper', 'DoubleSeqHolder', 'Environment', 'ExceptionList', 'FREE_MEM', 'FixedHolder', 'FloatHolder', 'FloatSeqHelper', 'FloatSeqHolder', 'IDLType', 'IDLTypeHelper', 'IDLTypeOperations', 'IMP_LIMIT', 'INITIALIZE', 'INTERNAL', 'INTF_REPOS', 'INVALID_ACTIVITY', 'INVALID_TRANSACTION', 'INV_FLAG', 'INV_IDENT', 'INV_OBJREF', 'INV_POLICY', 'IRObject',
        -            'IRObjectOperations', 'IdentifierHelper', 'IntHolder', 'LocalObject', 'LongHolder', 'LongLongSeqHelper', 'LongLongSeqHolder', 'LongSeqHelper', 'LongSeqHolder', 'MARSHAL', 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION', 'NO_RESOURCES', 'NO_RESPONSE', 'NVList', 'NamedValue', 'OBJECT_NOT_EXIST', 'OBJ_ADAPTER', 'OMGVMCID', 'ObjectHelper', 'ObjectHolder', 'OctetSeqHelper', 'OctetSeqHolder', 'PERSIST_STORE', 'PRIVATE_MEMBER', 'PUBLIC_MEMBER', 'ParameterMode', 'ParameterModeHelper', 'ParameterModeHolder', 'PolicyError', 'PolicyErrorCodeHelper', 'PolicyErrorHelper', 'PolicyErrorHolder', 'PolicyHelper', 'PolicyHolder', 'PolicyListHelper', 'PolicyListHolder', 'PolicyOperations', 'PolicyTypeHelper', 'PrincipalHolder', 'REBIND', 'RepositoryIdHelper', 'Request', 'ServerRequest', 'ServiceDetail', 'ServiceDetailHelper', 'ServiceInformation', 'ServiceInformationHelper', 'ServiceInformationHolder', 'SetOverrideType', 'SetOverrideTypeHelper', 'ShortHolder', 'ShortSeqHelper', 'ShortSeqHolder', 'StringHolder',
        -            'StringSeqHelper', 'StringSeqHolder', 'StringValueHelper', 'StructMember', 'StructMemberHelper', 'SystemException', 'TCKind', 'TIMEOUT', 'TRANSACTION_MODE', 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK', 'TRANSACTION_UNAVAILABLE', 'TRANSIENT', 'TypeCode', 'TypeCodeHolder', 'ULongLongSeqHelper', 'ULongLongSeqHolder', 'ULongSeqHelper', 'ULongSeqHolder', 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE', 'UShortSeqHelper', 'UShortSeqHolder', 'UnionMember', 'UnionMemberHelper', 'UnknownUserException', 'UnknownUserExceptionHelper', 'UnknownUserExceptionHolder', 'UserException', 'VM_ABSTRACT', 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE', 'ValueBaseHelper', 'ValueBaseHolder', 'ValueMember', 'ValueMemberHelper', 'VersionSpecHelper', 'VisibilityHelper', 'WCharSeqHelper', 'WCharSeqHolder', 'WStringSeqHelper', 'WStringSeqHolder', 'WStringValueHelper', 'WrongTransaction', 'WrongTransactionHelper', 'WrongTransactionHolder', '_IDLTypeStub', '_PolicyStub'
        -            ),
        -        136 => array (
        -            'Invalid', 'InvalidSeq'
        -            ),
        -        137 => array (
        -            'BadKind'
        -            ),
        -        138 => array (
        -            'ApplicationException', 'BoxedValueHelper', 'CustomValue', 'IDLEntity', 'IndirectionException', 'InvokeHandler', 'RemarshalException', 'ResponseHandler', 'ServantObject', 'Streamable', 'StreamableValue', 'UnknownException', 'ValueBase', 'ValueFactory', 'ValueInputStream', 'ValueOutputStream'
        -            ),
        -        139 => array (
        -            'BindingHelper', 'BindingHolder', 'BindingIterator', 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', 'BindingIteratorPOA', 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', 'BindingTypeHolder', 'IstringHelper', 'NameComponent', 'NameComponentHelper', 'NameComponentHolder', 'NameHelper', 'NameHolder', 'NamingContext', 'NamingContextExt', 'NamingContextExtHelper', 'NamingContextExtHolder', 'NamingContextExtOperations', 'NamingContextExtPOA', 'NamingContextHelper', 'NamingContextHolder', 'NamingContextOperations', 'NamingContextPOA', '_BindingIteratorImplBase', '_BindingIteratorStub', '_NamingContextExtStub', '_NamingContextImplBase', '_NamingContextStub'
        -            ),
        -        140 => array (
        -            'AddressHelper', 'InvalidAddress', 'InvalidAddressHelper', 'InvalidAddressHolder', 'StringNameHelper', 'URLStringHelper'
        -            ),
        -        141 => array (
        -            'AlreadyBound', 'AlreadyBoundHelper', 'AlreadyBoundHolder', 'CannotProceed', 'CannotProceedHelper', 'CannotProceedHolder', 'InvalidNameHolder', 'NotEmpty', 'NotEmptyHelper', 'NotEmptyHolder', 'NotFound', 'NotFoundHelper', 'NotFoundHolder', 'NotFoundReason', 'NotFoundReasonHelper', 'NotFoundReasonHolder'
        -            ),
        -        142 => array (
        -            'Parameter'
        -            ),
        -        143 => array (
        -            'DynAnyFactory', 'DynAnyFactoryHelper', 'DynAnyFactoryOperations', 'DynAnyHelper', 'DynAnyOperations', 'DynAnySeqHelper', 'DynArrayHelper', 'DynArrayOperations', 'DynEnumHelper', 'DynEnumOperations', 'DynFixedHelper', 'DynFixedOperations', 'DynSequenceHelper', 'DynSequenceOperations', 'DynStructHelper', 'DynStructOperations', 'DynUnionHelper', 'DynUnionOperations', 'DynValueBox', 'DynValueBoxOperations', 'DynValueCommon', 'DynValueCommonOperations', 'DynValueHelper', 'DynValueOperations', 'NameDynAnyPair', 'NameDynAnyPairHelper', 'NameDynAnyPairSeqHelper', 'NameValuePairSeqHelper', '_DynAnyFactoryStub', '_DynAnyStub', '_DynArrayStub', '_DynEnumStub', '_DynFixedStub', '_DynSequenceStub', '_DynStructStub', '_DynUnionStub', '_DynValueStub'
        -            ),
        -        144 => array (
        -            'InconsistentTypeCodeHelper'
        -            ),
        -        145 => array (
        -            'InvalidValueHelper'
        -            ),
        -        146 => array (
        -            'CodeSets', 'Codec', 'CodecFactory', 'CodecFactoryHelper', 'CodecFactoryOperations', 'CodecOperations', 'ComponentIdHelper', 'ENCODING_CDR_ENCAPS', 'Encoding', 'ExceptionDetailMessage', 'IOR', 'IORHelper', 'IORHolder', 'MultipleComponentProfileHelper', 'MultipleComponentProfileHolder', 'ProfileIdHelper', 'RMICustomMaxStreamFormat', 'ServiceContext', 'ServiceContextHelper', 'ServiceContextHolder', 'ServiceContextListHelper', 'ServiceContextListHolder', 'ServiceIdHelper', 'TAG_ALTERNATE_IIOP_ADDRESS', 'TAG_CODE_SETS', 'TAG_INTERNET_IOP', 'TAG_JAVA_CODEBASE', 'TAG_MULTIPLE_COMPONENTS', 'TAG_ORB_TYPE', 'TAG_POLICIES', 'TAG_RMI_CUSTOM_MAX_STREAM_FORMAT', 'TaggedComponent', 'TaggedComponentHelper', 'TaggedComponentHolder', 'TaggedProfile', 'TaggedProfileHelper', 'TaggedProfileHolder', 'TransactionService'
        -            ),
        -        147 => array (
        -            'UnknownEncoding', 'UnknownEncodingHelper'
        -            ),
        -        148 => array (
        -            'FormatMismatch', 'FormatMismatchHelper', 'InvalidTypeForEncoding', 'InvalidTypeForEncodingHelper'
        -            ),
        -        149 => array (
        -            'SYNC_WITH_TRANSPORT', 'SyncScopeHelper'
        -            ),
        -        150 => array (
        -            'ACTIVE', 'AdapterManagerIdHelper', 'AdapterNameHelper', 'AdapterStateHelper', 'ClientRequestInfo', 'ClientRequestInfoOperations', 'ClientRequestInterceptor', 'ClientRequestInterceptorOperations', 'DISCARDING', 'HOLDING', 'INACTIVE', 'IORInfo', 'IORInfoOperations', 'IORInterceptor', 'IORInterceptorOperations', 'IORInterceptor_3_0', 'IORInterceptor_3_0Helper', 'IORInterceptor_3_0Holder', 'IORInterceptor_3_0Operations', 'Interceptor', 'InterceptorOperations', 'InvalidSlot', 'InvalidSlotHelper', 'LOCATION_FORWARD', 'NON_EXISTENT', 'ORBIdHelper', 'ORBInitInfo', 'ORBInitInfoOperations', 'ORBInitializer', 'ORBInitializerOperations', 'ObjectReferenceFactory', 'ObjectReferenceFactoryHelper', 'ObjectReferenceFactoryHolder', 'ObjectReferenceTemplate', 'ObjectReferenceTemplateHelper', 'ObjectReferenceTemplateHolder', 'ObjectReferenceTemplateSeqHelper', 'ObjectReferenceTemplateSeqHolder', 'PolicyFactory', 'PolicyFactoryOperations', 'RequestInfo', 'RequestInfoOperations', 'SUCCESSFUL', 'SYSTEM_EXCEPTION',
        -            'ServerIdHelper', 'ServerRequestInfo', 'ServerRequestInfoOperations', 'ServerRequestInterceptor', 'ServerRequestInterceptorOperations', 'TRANSPORT_RETRY', 'USER_EXCEPTION'
        -            ),
        -        151 => array (
        -            'DuplicateName', 'DuplicateNameHelper'
        -            ),
        -        152 => array (
        -            'AdapterActivator', 'AdapterActivatorOperations', 'ID_ASSIGNMENT_POLICY_ID', 'ID_UNIQUENESS_POLICY_ID', 'IMPLICIT_ACTIVATION_POLICY_ID', 'IdAssignmentPolicy', 'IdAssignmentPolicyOperations', 'IdAssignmentPolicyValue', 'IdUniquenessPolicy', 'IdUniquenessPolicyOperations', 'IdUniquenessPolicyValue', 'ImplicitActivationPolicy', 'ImplicitActivationPolicyOperations', 'ImplicitActivationPolicyValue', 'LIFESPAN_POLICY_ID', 'LifespanPolicy', 'LifespanPolicyOperations', 'LifespanPolicyValue', 'POA', 'POAHelper', 'POAManager', 'POAManagerOperations', 'POAOperations', 'REQUEST_PROCESSING_POLICY_ID', 'RequestProcessingPolicy', 'RequestProcessingPolicyOperations', 'RequestProcessingPolicyValue', 'SERVANT_RETENTION_POLICY_ID', 'Servant', 'ServantActivator', 'ServantActivatorHelper', 'ServantActivatorOperations', 'ServantActivatorPOA', 'ServantLocator', 'ServantLocatorHelper', 'ServantLocatorOperations', 'ServantLocatorPOA', 'ServantManager', 'ServantManagerOperations', 'ServantRetentionPolicy',
        -            'ServantRetentionPolicyOperations', 'ServantRetentionPolicyValue', 'THREAD_POLICY_ID', 'ThreadPolicy', 'ThreadPolicyOperations', 'ThreadPolicyValue', '_ServantActivatorStub', '_ServantLocatorStub'
        -            ),
        -        153 => array (
        -            'NoContext', 'NoContextHelper'
        -            ),
        -        154 => array (
        -            'AdapterInactive', 'AdapterInactiveHelper', 'State'
        -            ),
        -        155 => array (
        -            'AdapterAlreadyExists', 'AdapterAlreadyExistsHelper', 'AdapterNonExistent', 'AdapterNonExistentHelper', 'InvalidPolicy', 'InvalidPolicyHelper', 'NoServant', 'NoServantHelper', 'ObjectAlreadyActive', 'ObjectAlreadyActiveHelper', 'ObjectNotActive', 'ObjectNotActiveHelper', 'ServantAlreadyActive', 'ServantAlreadyActiveHelper', 'ServantNotActive', 'ServantNotActiveHelper', 'WrongAdapter', 'WrongAdapterHelper', 'WrongPolicy', 'WrongPolicyHelper'
        -            ),
        -        156 => array (
        -            'CookieHolder'
        -            ),
        -        157 => array (
        -            'RunTime', 'RunTimeOperations'
        -            ),
        -        158 => array (
        -            '_Remote_Stub'
        -            ),
        -        159 => array (
        -            'Attr', 'CDATASection', 'CharacterData', 'Comment', 'DOMConfiguration', 'DOMError', 'DOMErrorHandler', 'DOMException', 'DOMImplementation', 'DOMImplementationList', 'DOMImplementationSource', 'DOMStringList', 'DocumentFragment', 'DocumentType', 'EntityReference', 'NameList', 'NamedNodeMap', 'Node', 'NodeList', 'Notation', 'ProcessingInstruction', 'Text', 'TypeInfo', 'UserDataHandler'
        -            ),
        -        160 => array (
        -            'DOMImplementationRegistry'
        -            ),
        -        161 => array (
        -            'EventException', 'EventTarget', 'MutationEvent', 'UIEvent'
        -            ),
        -        162 => array (
        -            'DOMImplementationLS', 'LSException', 'LSInput', 'LSLoadEvent', 'LSOutput', 'LSParser', 'LSParserFilter', 'LSProgressEvent', 'LSResourceResolver', 'LSSerializer', 'LSSerializerFilter'
        -            ),
        -        163 => array (
        -            'DTDHandler', 'DocumentHandler', 'EntityResolver', 'ErrorHandler', 'HandlerBase', 'InputSource', 'Locator', 'SAXException', 'SAXNotRecognizedException', 'SAXNotSupportedException', 'SAXParseException', 'XMLFilter', 'XMLReader'
        -            ),
        -        164 => array (
        -            'Attributes2', 'Attributes2Impl', 'DeclHandler', 'DefaultHandler2', 'EntityResolver2', 'LexicalHandler', 'Locator2', 'Locator2Impl'
        -            ),
        -        165 => array (
        -            'AttributeListImpl', 'AttributesImpl', 'DefaultHandler', 'LocatorImpl', 'NamespaceSupport', 'ParserAdapter', 'ParserFactory', 'XMLFilterImpl', 'XMLReaderAdapter', 'XMLReaderFactory'
        -            ),
        -        /* ambiguous class names (appear in more than one package) */
        -        166 => array (
        -            'Annotation', 'AnySeqHelper', 'Array', 'Attribute', 'AttributeList', 'AttributeSet', 'Attributes', 'AuthenticationException', 'Binding', 'Bounds', 'Certificate', 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', 'CertificateNotYetValidException', 'CertificateParsingException', 'ConnectException', 'ContentHandler', 'Context', 'Control', 'Current', 'CurrentHelper', 'CurrentOperations', 'DOMLocator', 'DataInputStream', 'DataOutputStream', 'Date', 'DefaultLoaderRepository', 'Delegate', 'Document', 'DocumentEvent', 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', 'DynUnion', 'DynValue', 'DynamicImplementation', 'Element', 'Entity', 'Event', 'EventListener', 'FieldNameHelper', 'FileFilter', 'Formatter', 'ForwardRequest', 'ForwardRequestHelper', 'InconsistentTypeCode', 'InputStream', 'IntrospectionException', 'InvalidAttributeValueException', 'InvalidKeyException', 'InvalidName', 'InvalidNameHelper', 'InvalidValue', 'List', 'MouseEvent',
        -            'NameValuePair', 'NameValuePairHelper', 'ORB', 'Object', 'ObjectIdHelper', 'ObjectImpl', 'OpenType', 'OutputStream', 'ParagraphView', 'Parser', 'Permission', 'Policy', 'Principal', 'Proxy', 'Reference', 'Statement', 'Timer', 'Timestamp', 'TypeMismatch', 'TypeMismatchHelper', 'UNKNOWN', 'UnknownHostException', 'X509Certificate'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        /* all Java keywords are case sensitive */
        -        1 => true, 2 => true, 3 => true, 4 => true,
        -        5 => true, 6 => true, 7 => true, 8 => true, 9 => true,
        -        10 => true, 11 => true, 12 => true, 13 => true, 14 => true,
        -        15 => true, 16 => true, 17 => true, 18 => true, 19 => true,
        -        20 => true, 21 => true, 22 => true, 23 => true, 24 => true,
        -        25 => true, 26 => true, 27 => true, 28 => true, 29 => true,
        -        30 => true, 31 => true, 32 => true, 33 => true, 34 => true,
        -        35 => true, 36 => true, 37 => true, 38 => true, 39 => true,
        -        40 => true, 41 => true, 42 => true, 43 => true, 44 => true,
        -        45 => true, 46 => true, 47 => true, 48 => true, 49 => true,
        -        50 => true, 51 => true, 52 => true, 53 => true, 54 => true,
        -        55 => true, 56 => true, 57 => true, 58 => true, 59 => true,
        -        60 => true, 61 => true, 62 => true, 63 => true, 64 => true,
        -        65 => true, 66 => true, 67 => true, 68 => true, 69 => true,
        -        70 => true, 71 => true, 72 => true, 73 => true, 74 => true,
        -        75 => true, 76 => true, 77 => true, 78 => true, 79 => true,
        -        80 => true, 81 => true, 82 => true, 83 => true, 84 => true,
        -        85 => true, 86 => true, 87 => true, 88 => true, 89 => true,
        -        90 => true, 91 => true, 92 => true, 93 => true, 94 => true,
        -        95 => true, 96 => true, 97 => true, 98 => true, 99 => true,
        -        100 => true, 101 => true, 102 => true, 103 => true, 104 => true,
        -        105 => true, 106 => true, 107 => true, 108 => true, 109 => true,
        -        110 => true, 111 => true, 112 => true, 113 => true, 114 => true,
        -        115 => true, 116 => true, 117 => true, 118 => true, 119 => true,
        -        120 => true, 121 => true, 122 => true, 123 => true, 124 => true,
        -        125 => true, 126 => true, 127 => true, 128 => true, 129 => true,
        -        130 => true, 131 => true, 132 => true, 133 => true, 134 => true,
        -        135 => true, 136 => true, 137 => true, 138 => true, 139 => true,
        -        140 => true, 141 => true, 142 => true, 143 => true, 144 => true,
        -        145 => true, 146 => true, 147 => true, 148 => true, 149 => true,
        -        150 => true, 151 => true, 152 => true, 153 => true, 154 => true,
        -        155 => true, 156 => true, 157 => true, 158 => true, 159 => true,
        -        160 => true, 161 => true, 162 => true, 163 => true, 164 => true,
        -        165 => true, 166 => true
        -    ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000;  font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #006600; font-weight: bold;',
        -            4 => 'color: #006600; font-weight: bold;',
        -            5 => 'color: #003399; font-weight: bold;',
        -            6 => 'color: #003399; font-weight: bold;',
        -            7 => 'color: #003399; font-weight: bold;',
        -            8 => 'color: #003399; font-weight: bold;',
        -            9 => 'color: #003399; font-weight: bold;',
        -            10 => 'color: #003399; font-weight: bold;',
        -            11 => 'color: #003399; font-weight: bold;',
        -            12 => 'color: #003399; font-weight: bold;',
        -            13 => 'color: #003399; font-weight: bold;',
        -            14 => 'color: #003399; font-weight: bold;',
        -            15 => 'color: #003399; font-weight: bold;',
        -            16 => 'color: #003399; font-weight: bold;',
        -            17 => 'color: #003399; font-weight: bold;',
        -            18 => 'color: #003399; font-weight: bold;',
        -            19 => 'color: #003399; font-weight: bold;',
        -            20 => 'color: #003399; font-weight: bold;',
        -            21 => 'color: #003399; font-weight: bold;',
        -            22 => 'color: #003399; font-weight: bold;',
        -            23 => 'color: #003399; font-weight: bold;',
        -            24 => 'color: #003399; font-weight: bold;',
        -            25 => 'color: #003399; font-weight: bold;',
        -            26 => 'color: #003399; font-weight: bold;',
        -            27 => 'color: #003399; font-weight: bold;',
        -            28 => 'color: #003399; font-weight: bold;',
        -            29 => 'color: #003399; font-weight: bold;',
        -            30 => 'color: #003399; font-weight: bold;',
        -            31 => 'color: #003399; font-weight: bold;',
        -            32 => 'color: #003399; font-weight: bold;',
        -            33 => 'color: #003399; font-weight: bold;',
        -            34 => 'color: #003399; font-weight: bold;',
        -            35 => 'color: #003399; font-weight: bold;',
        -            36 => 'color: #003399; font-weight: bold;',
        -            37 => 'color: #003399; font-weight: bold;',
        -            38 => 'color: #003399; font-weight: bold;',
        -            39 => 'color: #003399; font-weight: bold;',
        -            40 => 'color: #003399; font-weight: bold;',
        -            41 => 'color: #003399; font-weight: bold;',
        -            42 => 'color: #003399; font-weight: bold;',
        -            43 => 'color: #003399; font-weight: bold;',
        -            44 => 'color: #003399; font-weight: bold;',
        -            45 => 'color: #003399; font-weight: bold;',
        -            46 => 'color: #003399; font-weight: bold;',
        -            47 => 'color: #003399; font-weight: bold;',
        -            48 => 'color: #003399; font-weight: bold;',
        -            49 => 'color: #003399; font-weight: bold;',
        -            50 => 'color: #003399; font-weight: bold;',
        -            51 => 'color: #003399; font-weight: bold;',
        -            52 => 'color: #003399; font-weight: bold;',
        -            53 => 'color: #003399; font-weight: bold;',
        -            54 => 'color: #003399; font-weight: bold;',
        -            55 => 'color: #003399; font-weight: bold;',
        -            56 => 'color: #003399; font-weight: bold;',
        -            57 => 'color: #003399; font-weight: bold;',
        -            58 => 'color: #003399; font-weight: bold;',
        -            59 => 'color: #003399; font-weight: bold;',
        -            60 => 'color: #003399; font-weight: bold;',
        -            61 => 'color: #003399; font-weight: bold;',
        -            62 => 'color: #003399; font-weight: bold;',
        -            63 => 'color: #003399; font-weight: bold;',
        -            64 => 'color: #003399; font-weight: bold;',
        -            65 => 'color: #003399; font-weight: bold;',
        -            66 => 'color: #003399; font-weight: bold;',
        -            67 => 'color: #003399; font-weight: bold;',
        -            68 => 'color: #003399; font-weight: bold;',
        -            69 => 'color: #003399; font-weight: bold;',
        -            70 => 'color: #003399; font-weight: bold;',
        -            71 => 'color: #003399; font-weight: bold;',
        -            72 => 'color: #003399; font-weight: bold;',
        -            73 => 'color: #003399; font-weight: bold;',
        -            74 => 'color: #003399; font-weight: bold;',
        -            75 => 'color: #003399; font-weight: bold;',
        -            76 => 'color: #003399; font-weight: bold;',
        -            77 => 'color: #003399; font-weight: bold;',
        -            78 => 'color: #003399; font-weight: bold;',
        -            79 => 'color: #003399; font-weight: bold;',
        -            80 => 'color: #003399; font-weight: bold;',
        -            81 => 'color: #003399; font-weight: bold;',
        -            82 => 'color: #003399; font-weight: bold;',
        -            83 => 'color: #003399; font-weight: bold;',
        -            84 => 'color: #003399; font-weight: bold;',
        -            85 => 'color: #003399; font-weight: bold;',
        -            86 => 'color: #003399; font-weight: bold;',
        -            87 => 'color: #003399; font-weight: bold;',
        -            88 => 'color: #003399; font-weight: bold;',
        -            89 => 'color: #003399; font-weight: bold;',
        -            90 => 'color: #003399; font-weight: bold;',
        -            91 => 'color: #003399; font-weight: bold;',
        -            92 => 'color: #003399; font-weight: bold;',
        -            93 => 'color: #003399; font-weight: bold;',
        -            94 => 'color: #003399; font-weight: bold;',
        -            95 => 'color: #003399; font-weight: bold;',
        -            96 => 'color: #003399; font-weight: bold;',
        -            97 => 'color: #003399; font-weight: bold;',
        -            98 => 'color: #003399; font-weight: bold;',
        -            99 => 'color: #003399; font-weight: bold;',
        -            100 => 'color: #003399; font-weight: bold;',
        -            101 => 'color: #003399; font-weight: bold;',
        -            102 => 'color: #003399; font-weight: bold;',
        -            103 => 'color: #003399; font-weight: bold;',
        -            104 => 'color: #003399; font-weight: bold;',
        -            105 => 'color: #003399; font-weight: bold;',
        -            106 => 'color: #003399; font-weight: bold;',
        -            107 => 'color: #003399; font-weight: bold;',
        -            108 => 'color: #003399; font-weight: bold;',
        -            109 => 'color: #003399; font-weight: bold;',
        -            110 => 'color: #003399; font-weight: bold;',
        -            111 => 'color: #003399; font-weight: bold;',
        -            112 => 'color: #003399; font-weight: bold;',
        -            113 => 'color: #003399; font-weight: bold;',
        -            114 => 'color: #003399; font-weight: bold;',
        -            115 => 'color: #003399; font-weight: bold;',
        -            116 => 'color: #003399; font-weight: bold;',
        -            117 => 'color: #003399; font-weight: bold;',
        -            118 => 'color: #003399; font-weight: bold;',
        -            119 => 'color: #003399; font-weight: bold;',
        -            120 => 'color: #003399; font-weight: bold;',
        -            121 => 'color: #003399; font-weight: bold;',
        -            122 => 'color: #003399; font-weight: bold;',
        -            123 => 'color: #003399; font-weight: bold;',
        -            124 => 'color: #003399; font-weight: bold;',
        -            125 => 'color: #003399; font-weight: bold;',
        -            126 => 'color: #003399; font-weight: bold;',
        -            127 => 'color: #003399; font-weight: bold;',
        -            128 => 'color: #003399; font-weight: bold;',
        -            129 => 'color: #003399; font-weight: bold;',
        -            130 => 'color: #003399; font-weight: bold;',
        -            131 => 'color: #003399; font-weight: bold;',
        -            132 => 'color: #003399; font-weight: bold;',
        -            133 => 'color: #003399; font-weight: bold;',
        -            134 => 'color: #003399; font-weight: bold;',
        -            135 => 'color: #003399; font-weight: bold;',
        -            136 => 'color: #003399; font-weight: bold;',
        -            137 => 'color: #003399; font-weight: bold;',
        -            138 => 'color: #003399; font-weight: bold;',
        -            139 => 'color: #003399; font-weight: bold;',
        -            140 => 'color: #003399; font-weight: bold;',
        -            141 => 'color: #003399; font-weight: bold;',
        -            142 => 'color: #003399; font-weight: bold;',
        -            143 => 'color: #003399; font-weight: bold;',
        -            144 => 'color: #003399; font-weight: bold;',
        -            145 => 'color: #003399; font-weight: bold;',
        -            146 => 'color: #003399; font-weight: bold;',
        -            147 => 'color: #003399; font-weight: bold;',
        -            148 => 'color: #003399; font-weight: bold;',
        -            149 => 'color: #003399; font-weight: bold;',
        -            150 => 'color: #003399; font-weight: bold;',
        -            151 => 'color: #003399; font-weight: bold;',
        -            152 => 'color: #003399; font-weight: bold;',
        -            153 => 'color: #003399; font-weight: bold;',
        -            154 => 'color: #003399; font-weight: bold;',
        -            155 => 'color: #003399; font-weight: bold;',
        -            156 => 'color: #003399; font-weight: bold;',
        -            157 => 'color: #003399; font-weight: bold;',
        -            158 => 'color: #003399; font-weight: bold;',
        -            159 => 'color: #003399; font-weight: bold;',
        -            160 => 'color: #003399; font-weight: bold;',
        -            161 => 'color: #003399; font-weight: bold;',
        -            162 => 'color: #003399; font-weight: bold;',
        -            163 => 'color: #003399; font-weight: bold;',
        -            164 => 'color: #003399; font-weight: bold;',
        -            165 => 'color: #003399; font-weight: bold;',
        -            166 => 'color: #003399; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #006699;',
        -            3 => 'color: #008000; font-style: italic; font-weight: bold;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006633;',
        -            2 => 'color: #006633;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => 'http://docs.oracle.com/javase/7/docs/api/java/applet/{FNAME}.html',
        -        6 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/{FNAME}.html',
        -        7 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/color/{FNAME}.html',
        -        8 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/{FNAME}.html',
        -        9 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/dnd/{FNAME}.html',
        -        10 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/event/{FNAME}.html',
        -        11 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/font/{FNAME}.html',
        -        12 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/geom/{FNAME}.html',
        -        13 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/im/{FNAME}.html',
        -        14 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/im/spi/{FNAME}.html',
        -        15 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/image/{FNAME}.html',
        -        16 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/image/renderable/{FNAME}.html',
        -        17 => 'http://docs.oracle.com/javase/7/docs/api/java/awt/print/{FNAME}.html',
        -        18 => 'http://docs.oracle.com/javase/7/docs/api/java/beans/{FNAME}.html',
        -        19 => 'http://docs.oracle.com/javase/7/docs/api/java/beans/beancontext/{FNAME}.html',
        -        20 => 'http://docs.oracle.com/javase/7/docs/api/java/io/{FNAME}.html',
        -        21 => 'http://docs.oracle.com/javase/7/docs/api/java/lang/{FNAME}.html',
        -        22 => 'http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/{FNAME}.html',
        -        23 => 'http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/{FNAME}.html',
        -        24 => 'http://docs.oracle.com/javase/7/docs/api/java/lang/management/{FNAME}.html',
        -        25 => 'http://docs.oracle.com/javase/7/docs/api/java/lang/ref/{FNAME}.html',
        -        26 => 'http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/{FNAME}.html',
        -        27 => 'http://docs.oracle.com/javase/7/docs/api/java/math/{FNAME}.html',
        -        28 => 'http://docs.oracle.com/javase/7/docs/api/java/net/{FNAME}.html',
        -        29 => 'http://docs.oracle.com/javase/7/docs/api/java/nio/{FNAME}.html',
        -        30 => 'http://docs.oracle.com/javase/7/docs/api/java/nio/channels/{FNAME}.html',
        -        31 => 'http://docs.oracle.com/javase/7/docs/api/java/nio/channels/spi/{FNAME}.html',
        -        32 => 'http://docs.oracle.com/javase/7/docs/api/java/nio/charset/{FNAME}.html',
        -        33 => 'http://docs.oracle.com/javase/7/docs/api/java/nio/charset/spi/{FNAME}.html',
        -        34 => 'http://docs.oracle.com/javase/7/docs/api/java/rmi/{FNAME}.html',
        -        35 => 'http://docs.oracle.com/javase/7/docs/api/java/rmi/activation/{FNAME}.html',
        -        36 => 'http://docs.oracle.com/javase/7/docs/api/java/rmi/dgc/{FNAME}.html',
        -        37 => 'http://docs.oracle.com/javase/7/docs/api/java/rmi/registry/{FNAME}.html',
        -        38 => 'http://docs.oracle.com/javase/7/docs/api/java/rmi/server/{FNAME}.html',
        -        39 => 'http://docs.oracle.com/javase/7/docs/api/java/security/{FNAME}.html',
        -        40 => 'http://docs.oracle.com/javase/7/docs/api/java/security/acl/{FNAME}.html',
        -        41 => 'http://docs.oracle.com/javase/7/docs/api/java/security/cert/{FNAME}.html',
        -        42 => 'http://docs.oracle.com/javase/7/docs/api/java/security/interfaces/{FNAME}.html',
        -        43 => 'http://docs.oracle.com/javase/7/docs/api/java/security/spec/{FNAME}.html',
        -        44 => 'http://docs.oracle.com/javase/7/docs/api/java/sql/{FNAME}.html',
        -        45 => 'http://docs.oracle.com/javase/7/docs/api/java/text/{FNAME}.html',
        -        46 => 'http://docs.oracle.com/javase/7/docs/api/java/util/{FNAME}.html',
        -        47 => 'http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/{FNAME}.html',
        -        48 => 'http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/{FNAME}.html',
        -        49 => 'http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/{FNAME}.html',
        -        50 => 'http://docs.oracle.com/javase/7/docs/api/java/util/jar/{FNAME}.html',
        -        51 => 'http://docs.oracle.com/javase/7/docs/api/java/util/logging/{FNAME}.html',
        -        52 => 'http://docs.oracle.com/javase/7/docs/api/java/util/prefs/{FNAME}.html',
        -        53 => 'http://docs.oracle.com/javase/7/docs/api/java/util/regex/{FNAME}.html',
        -        54 => 'http://docs.oracle.com/javase/7/docs/api/java/util/zip/{FNAME}.html',
        -        55 => 'http://docs.oracle.com/javase/7/docs/api/javax/accessibility/{FNAME}.html',
        -        56 => 'http://docs.oracle.com/javase/7/docs/api/javax/activity/{FNAME}.html',
        -        57 => 'http://docs.oracle.com/javase/7/docs/api/javax/crypto/{FNAME}.html',
        -        58 => 'http://docs.oracle.com/javase/7/docs/api/javax/crypto/interfaces/{FNAME}.html',
        -        59 => 'http://docs.oracle.com/javase/7/docs/api/javax/crypto/spec/{FNAME}.html',
        -        60 => 'http://docs.oracle.com/javase/7/docs/api/javax/imageio/{FNAME}.html',
        -        61 => 'http://docs.oracle.com/javase/7/docs/api/javax/imageio/event/{FNAME}.html',
        -        62 => 'http://docs.oracle.com/javase/7/docs/api/javax/imageio/metadata/{FNAME}.html',
        -        63 => 'http://docs.oracle.com/javase/7/docs/api/javax/imageio/plugins/bmp/{FNAME}.html',
        -        64 => 'http://docs.oracle.com/javase/7/docs/api/javax/imageio/plugins/jpeg/{FNAME}.html',
        -        65 => 'http://docs.oracle.com/javase/7/docs/api/javax/imageio/spi/{FNAME}.html',
        -        66 => 'http://docs.oracle.com/javase/7/docs/api/javax/imageio/stream/{FNAME}.html',
        -        67 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/{FNAME}.html',
        -        68 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/loading/{FNAME}.html',
        -        69 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/modelmbean/{FNAME}.html',
        -        70 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/monitor/{FNAME}.html',
        -        71 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/openmbean/{FNAME}.html',
        -        72 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/relation/{FNAME}.html',
        -        73 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/remote/{FNAME}.html',
        -        74 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/remote/rmi/{FNAME}.html',
        -        75 => 'http://docs.oracle.com/javase/7/docs/api/javax/management/timer/{FNAME}.html',
        -        76 => 'http://docs.oracle.com/javase/7/docs/api/javax/naming/{FNAME}.html',
        -        77 => 'http://docs.oracle.com/javase/7/docs/api/javax/naming/directory/{FNAME}.html',
        -        78 => 'http://docs.oracle.com/javase/7/docs/api/javax/naming/event/{FNAME}.html',
        -        79 => 'http://docs.oracle.com/javase/7/docs/api/javax/naming/ldap/{FNAME}.html',
        -        80 => 'http://docs.oracle.com/javase/7/docs/api/javax/naming/spi/{FNAME}.html',
        -        81 => 'http://docs.oracle.com/javase/7/docs/api/javax/net/{FNAME}.html',
        -        82 => 'http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/{FNAME}.html',
        -        83 => 'http://docs.oracle.com/javase/7/docs/api/javax/print/{FNAME}.html',
        -        84 => 'http://docs.oracle.com/javase/7/docs/api/javax/print/attribute/{FNAME}.html',
        -        85 => 'http://docs.oracle.com/javase/7/docs/api/javax/print/attribute/standard/{FNAME}.html',
        -        86 => 'http://docs.oracle.com/javase/7/docs/api/javax/print/event/{FNAME}.html',
        -        87 => 'http://docs.oracle.com/javase/7/docs/api/javax/rmi/{FNAME}.html',
        -        88 => 'http://docs.oracle.com/javase/7/docs/api/javax/rmi/CORBA/{FNAME}.html',
        -        89 => 'http://docs.oracle.com/javase/7/docs/api/javax/rmi/ssl/{FNAME}.html',
        -        90 => 'http://docs.oracle.com/javase/7/docs/api/javax/security/auth/{FNAME}.html',
        -        91 => 'http://docs.oracle.com/javase/7/docs/api/javax/security/auth/callback/{FNAME}.html',
        -        92 => 'http://docs.oracle.com/javase/7/docs/api/javax/security/auth/kerberos/{FNAME}.html',
        -        93 => 'http://docs.oracle.com/javase/7/docs/api/javax/security/auth/login/{FNAME}.html',
        -        94 => 'http://docs.oracle.com/javase/7/docs/api/javax/security/auth/spi/{FNAME}.html',
        -        95 => 'http://docs.oracle.com/javase/7/docs/api/javax/security/auth/x500/{FNAME}.html',
        -        96 => 'http://docs.oracle.com/javase/7/docs/api/javax/security/sasl/{FNAME}.html',
        -        97 => 'http://docs.oracle.com/javase/7/docs/api/javax/sound/midi/{FNAME}.html',
        -        98 => 'http://docs.oracle.com/javase/7/docs/api/javax/sound/midi/spi/{FNAME}.html',
        -        99 => 'http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/{FNAME}.html',
        -        100 => 'http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/spi/{FNAME}.html',
        -        101 => 'http://docs.oracle.com/javase/7/docs/api/javax/sql/{FNAME}.html',
        -        102 => 'http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/{FNAME}.html',
        -        103 => 'http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/{FNAME}.html',
        -        104 => 'http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/spi/{FNAME}.html',
        -        105 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/{FNAME}.html',
        -        106 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/border/{FNAME}.html',
        -        107 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/colorchooser/{FNAME}.html',
        -        108 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/event/{FNAME}.html',
        -        109 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/filechooser/{FNAME}.html',
        -        110 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/{FNAME}.html',
        -        111 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/basic/{FNAME}.html',
        -        112 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/metal/{FNAME}.html',
        -        113 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/multi/{FNAME}.html',
        -        114 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/synth/{FNAME}.html',
        -        115 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/table/{FNAME}.html',
        -        116 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/text/{FNAME}.html',
        -        117 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/text/html/{FNAME}.html',
        -        118 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/text/html/parser/{FNAME}.html',
        -        119 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/text/rtf/{FNAME}.html',
        -        120 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/tree/{FNAME}.html',
        -        121 => 'http://docs.oracle.com/javase/7/docs/api/javax/swing/undo/{FNAME}.html',
        -        122 => 'http://docs.oracle.com/javase/7/docs/api/javax/transaction/{FNAME}.html',
        -        123 => 'http://docs.oracle.com/javase/7/docs/api/javax/transaction/xa/{FNAME}.html',
        -        124 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/{FNAME}.html',
        -        125 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/datatype/{FNAME}.html',
        -        126 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/namespace/{FNAME}.html',
        -        127 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/{FNAME}.html',
        -        128 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/transform/{FNAME}.html',
        -        129 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/transform/dom/{FNAME}.html',
        -        130 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/transform/sax/{FNAME}.html',
        -        131 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/transform/stream/{FNAME}.html',
        -        132 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/validation/{FNAME}.html',
        -        133 => 'http://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/{FNAME}.html',
        -        134 => 'http://docs.oracle.com/javase/7/docs/api/org/ietf/jgss/{FNAME}.html',
        -        135 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/CORBA/{FNAME}.html',
        -        136 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/CORBA/DynAnyPackage/{FNAME}.html',
        -        137 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/CORBA/TypeCodePackage/{FNAME}.html',
        -        138 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/CORBA/portable/{FNAME}.html',
        -        139 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/CosNaming/{FNAME}.html',
        -        140 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/CosNaming/NamingContextExtPackage/{FNAME}.html',
        -        141 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/CosNaming/NamingContextPackage/{FNAME}.html',
        -        142 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/Dynamic/{FNAME}.html',
        -        143 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/DynamicAny/{FNAME}.html',
        -        144 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/DynamicAny/DynAnyFactoryPackage/{FNAME}.html',
        -        145 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/DynamicAny/DynAnyPackage/{FNAME}.html',
        -        146 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/IOP/{FNAME}.html',
        -        147 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/IOP/CodecFactoryPackage/{FNAME}.html',
        -        148 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/IOP/CodecPackage/{FNAME}.html',
        -        149 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/Messaging/{FNAME}.html',
        -        150 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/PortableInterceptor/{FNAME}.html',
        -        151 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/PortableInterceptor/ORBInitInfoPackage/{FNAME}.html',
        -        152 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/PortableServer/{FNAME}.html',
        -        153 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/PortableServer/CurrentPackage/{FNAME}.html',
        -        154 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/PortableServer/POAManagerPackage/{FNAME}.html',
        -        155 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/PortableServer/POAPackage/{FNAME}.html',
        -        156 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/PortableServer/ServantLocatorPackage/{FNAME}.html',
        -        157 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/SendingContext/{FNAME}.html',
        -        158 => 'http://docs.oracle.com/javase/7/docs/api/org/omg/stub/java/rmi/{FNAME}.html',
        -        159 => 'http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/{FNAME}.html',
        -        160 => 'http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/bootstrap/{FNAME}.html',
        -        161 => 'http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/events/{FNAME}.html',
        -        162 => 'http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/ls/{FNAME}.html',
        -        163 => 'http://docs.oracle.com/javase/7/docs/api/org/xml/sax/{FNAME}.html',
        -        164 => 'http://docs.oracle.com/javase/7/docs/api/org/xml/sax/ext/{FNAME}.html',
        -        165 => 'http://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/{FNAME}.html',
        -        /* ambiguous class names (appear in more than one package) */
        -        166 => 'http://www.google.com/search?sitesearch=docs.oracle.com&q=allinurl%3Ajavase+docs+api+{FNAME}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        /* Java does not use '::' */
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => '(?|^&"\'])',
        -            'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-;"\'])'
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php
        deleted file mode 100644
        index 439b7a9b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php
        +++ /dev/null
        @@ -1,172 +0,0 @@
        - 'Javascript',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Regular Expressions
        -        2 => "/(?<=[\\s^])(s|tr|y)\\/(?!\*)(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])+(? GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            //reserved/keywords; also some non-reserved keywords
        -            'break','case','catch','const','continue',
        -            'default','delete','do',
        -            'else',
        -            'finally','for','function',
        -            'get','goto',
        -            'if','in','instanceof',
        -            'new',
        -            'prototype',
        -            'return',
        -            'set','static','switch',
        -            'this','throw','try','typeof',
        -            'var','void'
        -            ),
        -        2 => array(
        -            //reserved/non-keywords; metaconstants
        -            'false','null','true','undefined','NaN','Infinity'
        -            ),
        -        3 => array(
        -            //magic properties/functions
        -            '__proto__','__defineGetter__','__defineSetter__','hasOwnProperty','hasProperty'
        -            ),
        -        4 => array(
        -            //type constructors
        -            'Object', 'Function', 'Date', 'Math', 'String', 'Number', 'Boolean', 'Array'
        -            ),
        -        5 => array(
        -            //reserved, but invalid in language
        -            'abstract','boolean','byte','char','class','debugger','double','enum','export','extends',
        -            'final','float','implements','import','int','interface','long','native',
        -            'short','super','synchronized','throws','transient','volatile'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}',
        -        '+', '-', '*', '/', '%',
        -        '!', '@', '&', '|', '^',
        -        '<', '>', '=',
        -        ',', ';', '?', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000066; font-weight: bold;',
        -            2 => 'color: #003366; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            5 => 'color: #FF0000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #006600; font-style: italic;',
        -            2 => 'color: #009966; font-style: italic;',
        -            'MULTI' => 'color: #006600; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #3366CC;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #CC0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #660066;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -    ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ''
        -            ),
        -        1 => array(
        -            ''
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php
        deleted file mode 100644
        index 74fe0fd8..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php
        +++ /dev/null
        @@ -1,155 +0,0 @@
        - 'JCL',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        // Comments identified using REGEX
        -        // Comments start with //* but should not be followed by % (TWS) or + (some JES3 stmts)
        -        3 => "\/\/\*[^%](.*?)(\n)"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'COMMAND', 'CNTL', 'DD', 'ENDCNTL', 'EXEC', 'IF', 'THEN', 'ELSE',
        -            'ENDIF', 'JCLLIB', 'JOB', 'OUTPUT', 'PEND',
        -            'PROC', 'SET', 'XMIT'
        -            ),
        -        2 => array (
        -            'PGM','CLASS','NOTIFY','MSGCLASS','DSN','KEYLEN','LABEL','LIKE',
        -            'RECFM','LRECL','DCB','DSORG','BLKSIZE','SPACE','STORCLAS',
        -            'DUMMY','DYNAM','AVGREC','BURST','DISP','UNIT','VOLUME',
        -            'MSGLEVEL','REGION'
        -            ),
        -        // Keywords set 3: DFSORT, ICETOOL
        -        3 => array (
        -            'ALTSEQ','DEBUG','END','INCLUDE','INREC','MERGE','MODS','OMIT',
        -            'OPTION','OUTFIL','OUTREC','RECORD','SORT','SUM',
        -            'COPY','COUNT','DEFAULTS','DISPLAY','MODE','OCCUR','RANGE',
        -            'SELECT','STATS','UNIQUE','VERIFY'
        -            ),
        -        // Keywords set 4: IDCAMS
        -        4 => array (
        -            'ALTER','BLDINDEX','CNVTCAT','DEFINE','ALIAS','ALTERNATEINDEX',
        -            'CLUSTER','GENERATIONDATAGROUP','GDG','NONVSAM','PAGESPACE','PATH',
        -            /* 'SPACE',*/'USERCATALOG','DELETE','EXAMINE','EXPORT','DISCONNECT',
        -            'EXPORTRA','IMPORT','CONNECT','IMPORTRA','LISTCAT','LISTCRA',
        -            'PRINT','REPRO','RESETCAT'//,'VERIFY'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(',')','=',',','>','<'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #FF0000;',
        -            2 => 'color: #21A502;',
        -            3 => 'color: #FF00FF;',
        -            4 => 'color: #876C00;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #0000FF;',
        -            //1 => 'color: #0000FF;',
        -            //2 => 'color: #0000FF;',
        -            3 => 'color: #0000FF;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #FF7400;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #66CC66;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #336633;'
        -            ),
        -        'METHODS' => array(
        -            1 => '',
        -            2 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #FF7400;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #6B1F6B;',
        -            1 => 'color: #6B1F6B;',
        -            2 => 'color: #6B1F6B;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        // JCL book at IBM Bookshelf is http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/handheld/Connected/BOOKS/IEA2B680/CONTENTS?SHELF=&DT=20080604022956#3.1
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        // The following regular expressions solves three purposes
        -        // - Identify Temp Variables in JCL (e.g. &&TEMP)
        -        // - Symbolic variables in JCL (e.g. &SYSUID)
        -        // - TWS OPC Variables (e.g. %OPC)
        -        // Thanks to Simon for pointing me to this
        -        0 => '&&[a-zA-Z]{1,8}[0-9]{0,}',
        -        1 => '&[a-zA-Z]{1,8}[0-9]{0,}',
        -        2 => '&|\?|%[a-zA-Z]{1,8}[0-9]{0,}'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php
        deleted file mode 100644
        index 02a9eeef..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php
        +++ /dev/null
        @@ -1,236 +0,0 @@
        - 'jQuery',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    //Regular Expressions
        -    'COMMENT_REGEXP' => array(2 => "/(?<=[\\s^])s\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])m?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\,\\;\\)])/iU"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do',
        -            'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item',
        -            'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void',
        -            'while', 'write', 'with'
        -            ),
        -        2 => array(
        -            'class', 'const', 'default', 'debugger', 'export', 'extends', 'false',
        -            'function', 'import', 'namespace', 'new', 'null', 'package', 'private',
        -            'protected', 'public', 'super', 'true', 'use', 'var'
        -            ),
        -        3 => array(
        -            // common functions for Window object
        -            'alert', 'back', 'close', 'confirm', 'forward', 'home',
        -            'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove',
        -            'onresize', 'onunload', 'open', 'print', 'prompt', 'status',
        -            //'blur', 'focus', 'scroll', // Duplicate with kw9
        -            //'stop', //Duplicate with kw10
        -            ),
        -        4 => array(
        -            // jQuery Core Functions
        -            'jQuery', 'each', 'size', 'length', 'selector', 'context', 'eq',
        -            'index', 'data', 'removeData', 'queue', 'dequeue', 'noConflict'
        -            //'get', //Duplicate with kw11
        -            ),
        -        5 => array(
        -            // jQuery Attribute Functions
        -            'attr', 'removeAttr', 'addClass', 'hasClass', 'removeClass', 'toggleClass',
        -            'html', 'text', 'val',
        -            ),
        -        6 => array(
        -            // jQuery Traversing Functions
        -            'filter', 'not', 'slice', 'add', 'children', 'closest',
        -            'contents', 'find', 'next', 'nextAll', 'parent', 'parents',
        -            'prev', 'prevAll', 'siblings', 'andSelf', 'end',
        -            //'is',  //Dup with kw1
        -            //'offsetParent', //Duplicate with kw8
        -            //'map', //Duplicate with kw12
        -            ),
        -        7 => array(
        -            // jQuery Manipulation Functions
        -            'append', 'appendTo', 'prepend', 'prependTo', 'after', 'before', 'insertAfter',
        -            'insertBefore', 'wrap', 'wrapAll', 'wrapInner', 'replaceWith', 'replaceAll',
        -            'empty', 'remove', 'clone',
        -            ),
        -        8 => array(
        -            // jQuery CSS Functions
        -            'css', 'offset', 'offsetParent', 'position', 'scrollTop', 'scrollLeft',
        -            'height', 'width', 'innerHeight', 'innerWidth', 'outerHeight', 'outerWidth',
        -            ),
        -        9 => array(
        -            // jQuery Events Functions
        -            'ready', 'bind', 'one', 'trigger', 'triggerHandler', 'unbind', 'live',
        -            'die', 'hover', 'blur', 'change', 'click', 'dblclick', 'error',
        -            'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mouseenter',
        -            'mouseleave', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize',
        -            'scroll', 'select', 'submit', 'unload',
        -            //'toggle', //Duplicate with kw10
        -            //'load', //Duplicate with kw11
        -            ),
        -        10 => array(
        -            // jQuery Effects Functions
        -            'show', 'hide', 'toggle', 'slideDown', 'slideUp', 'slideToggle', 'fadeIn',
        -            'fadeOut', 'fadeTo', 'animate', 'stop',
        -            ),
        -        11 => array(
        -            // jQuery Ajax Functions
        -            'ajax', 'load', 'get', 'getJSON', 'getScript', 'post', 'ajaxComplete',
        -            'ajaxError', 'ajaxSend', 'ajaxStart', 'ajaxStop', 'ajaxSuccess', 'ajaxSetup',
        -            'serialize', 'serializeArray',
        -            ),
        -        12 => array(
        -            // jQuery Utility Functions
        -            'support', 'browser', 'version', 'boxModal', 'extend', 'grep', 'makeArray',
        -            'map', 'inArray', 'merge', 'unique', 'isArray', 'isFunction', 'trim',
        -            'param',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '(', ')', '[', ']', '{', '}',
        -            '+', '-', '*', '/', '%',
        -            '!', '@', '&', '|', '^',
        -            '<', '>', '=',
        -            ',', ';', '?', ':'
        -            ),
        -        1 => array(
        -            '$'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false,
        -        8 => false,
        -        9 => false,
        -        10 => false,
        -        11 => false,
        -        12 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000066; font-weight: bold;',
        -            2 => 'color: #003366; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #000066;',
        -            5 => 'color: #000066;',
        -            6 => 'color: #000066;',
        -            7 => 'color: #000066;',
        -            8 => 'color: #000066;',
        -            9 => 'color: #000066;',
        -            10 => 'color: #000066;',
        -            11 => 'color: #000066;',
        -            12 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #006600; font-style: italic;',
        -            2 => 'color: #009966; font-style: italic;',
        -            'MULTI' => 'color: #006600; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #3366CC;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #CC0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #660066;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            1 => 'color: #000066;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => 'http://docs.jquery.com/Core/{FNAME}',
        -        5 => 'http://docs.jquery.com/Attributes/{FNAME}',
        -        6 => 'http://docs.jquery.com/Traversing/{FNAME}',
        -        7 => 'http://docs.jquery.com/Manipulation/{FNAME}',
        -        8 => 'http://docs.jquery.com/CSS/{FNAME}',
        -        9 => 'http://docs.jquery.com/Events/{FNAME}',
        -        10 => 'http://docs.jquery.com/Effects/{FNAME}',
        -        11 => 'http://docs.jquery.com/Ajax/{FNAME}',
        -        12 => 'http://docs.jquery.com/Utilities/{FNAME}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ''
        -            ),
        -        1 => array(
        -            ''
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php
        deleted file mode 100644
        index b2b7b935..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php
        +++ /dev/null
        @@ -1,327 +0,0 @@
        - 'KiXtart',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'While', 'Loop',
        -            'Use',
        -            'Small',
        -            'Sleep',
        -            'Shell',
        -            'SetTime',
        -            'SetM',
        -            'SetL',
        -            'Set',
        -            'Select', 'Case',
        -            'Run',
        -            'Return',
        -            'Redim',
        -            'RD',
        -            'Quit',
        -            'Play',
        -            'Move',
        -            'MD',
        -            'Include',
        -            'If', 'Else', 'Endif',
        -            'GoTo',
        -            'GoSub',
        -            'Go',
        -            'Global',
        -            'GetS',
        -            'Get',
        -            'Function', 'Endfunction',
        -            'For', 'Next',
        -            'Each',
        -            'FlushKb',
        -            'Exit',
        -            'Do', 'Until',
        -            'Display',
        -            'Dim',
        -            'Del',
        -            'Debug',
        -            'Copy',
        -            'Cookie1',
        -            'Color',
        -            'CLS',
        -            'CD',
        -            'Call',
        -            'Break',
        -            'Big',
        -            'Beep',
        -            ),
        -        2 => array(
        -            '@Address',
        -            '@Build',
        -            '@Color',
        -            '@Comment',
        -            '@CPU',
        -            '@CRLF',
        -            '@CSD',
        -            '@CurDir',
        -            '@Date',
        -            '@Day',
        -            '@Domain',
        -            '@DOS',
        -            '@Error',
        -            '@FullName',
        -            '@HomeDir',
        -            '@HomeDrive',
        -            '@HomeShr',
        -            '@HostName',
        -            '@InWin',
        -            '@IPaddressX',
        -            '@KiX',
        -            '@LanRoot',
        -            '@LDomain',
        -            '@LDrive',
        -            '@LM',
        -            '@LogonMode',
        -            '@LongHomeDir',
        -            '@LServer',
        -            '@MaxPWAge',
        -            '@MDayNo',
        -            '@MHz',
        -            '@MonthNo',
        -            '@Month',
        -            '@MSecs',
        -            '@OnWoW64',
        -            '@PID',
        -            '@PrimaryGroup',
        -            '@Priv',
        -            '@ProductSuite',
        -            '@ProductType',
        -            '@PWAge',
        -            '@RAS',
        -            '@Result',
        -            '@RServer',
        -            '@ScriptDir',
        -            '@ScriptExe',
        -            '@ScriptName',
        -            '@SError',
        -            '@SID',
        -            '@Site',
        -            '@StartDir',
        -            '@SysLang',
        -            '@Ticks',
        -            '@Time',
        -            '@TsSession',
        -            '@UserID',
        -            '@UserLang',
        -            '@WDayNo',
        -            '@Wksta',
        -            '@WUserID',
        -            '@YDayNo',
        -            '@Year',
        -            ),
        -        3 => array(
        -            'WriteValue',
        -            'WriteProfileString',
        -            'WriteLine',
        -            'VarTypeName',
        -            'VarType',
        -            'Val',
        -            'UnloadHive',
        -            'UCase',
        -            'Ubound',
        -            'Trim',
        -            'Substr',
        -            'SRnd',
        -            'Split',
        -            'SidToName',
        -            'ShutDown',
        -            'ShowProgramGroup',
        -            'SetWallpaper',
        -            'SetTitle',
        -            'SetSystemState',
        -            'SetOption',
        -            'SetFocus',
        -            'SetFileAttr',
        -            'SetDefaultPrinter',
        -            'SetConsole',
        -            'SetAscii',
        -            'SendMessage',
        -            'SendKeys',
        -            'SaveKey',
        -            'RTrim',
        -            'Round',
        -            'Rnd',
        -            'Right',
        -            'RedirectOutput',
        -            'ReadValue',
        -            'ReadType',
        -            'ReadProfileString',
        -            'ReadLine',
        -            'Open',
        -            'MessageBox',
        -            'MemorySize',
        -            'LTrim',
        -            'Logoff',
        -            'LogEvent',
        -            'LoadKey',
        -            'LoadHive',
        -            'Len',
        -            'Left',
        -            'LCase',
        -            'KeyExist',
        -            'KbHit',
        -            'Join',
        -            'IsDeclared',
        -            'Int',
        -            'InStrRev',
        -            'InStr',
        -            'InGroup',
        -            'IIF',
        -            'GetObject',
        -            'GetFileVersion',
        -            'GetFileTime',
        -            'GetFileSize',
        -            'GetFileAttr',
        -            'GetDiskSpace',
        -            'FreeFileHandle',
        -            'FormatNumber',
        -            'Fix',
        -            'ExpandEnvironmentVars',
        -            'Exist',
        -            'Execute',
        -            'EnumValue',
        -            'EnumLocalGroup',
        -            'EnumKey',
        -            'EnumIpInfo',
        -            'EnumGroup',
        -            'Dir',
        -            'DelValue',
        -            'DelTree',
        -            'DelProgramItem',
        -            'DelProgramGroup',
        -            'DelPrinterConnection',
        -            'DelKey',
        -            'DecToHex',
        -            'CStr',
        -            'CreateObject',
        -            'CompareFileTimes',
        -            'Close',
        -            'ClearEventLog',
        -            'CInt',
        -            'Chr',
        -            'CDbl',
        -            'Box',
        -            'BackupEventLog',
        -            'At',
        -            'AScan',
        -            'Asc',
        -            'AddProgramItem',
        -            'AddProgramGroup',
        -            'AddPrinterConnection',
        -            'AddKey',
        -            'Abs'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '?', ':', '+', '-', '*', '/', '&', '|', '^', '~', '<', '>', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.kixtart.org/manual/Commands/{FNAMEL}.htm',
        -        2 => '',
        -        3 => 'http://www.kixtart.org/manual/Functions/{FNAMEL}.htm'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true,
        -        2 => true,
        -        3 => true
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php
        deleted file mode 100644
        index f4f8ac43..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php
        +++ /dev/null
        @@ -1,280 +0,0 @@
        - 'KLone C',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),//#pour precede les include de C
        -    'COMMENT_MULTI' => array('/*' => '*/', '' ),//comentaires C et KLone suivi de ceux pour HTML
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(//mots-cles C
        -            'if', 'return', 'while', 'case', 'class', 'continue', 'default',
        -            'do', 'else', 'for', 'switch', 'goto',
        -            'null', 'break', 'true', 'enum', 'extern', 'inline', 'false'
        -            ),
        -        2 => array(//mots-cles KLone
        -            'out', 'request', 'response',
        -            ),
        -        3 => array(//fonctions C usuelles
        -            'printf', 'malloc', 'fopen', 'fclose', 'free', 'fputs', 'fgets', 'feof', 'fwrite',
        -            'perror', 'ferror', 'qsort', 'stats', 'sscanf', 'scanf',
        -            'strdup', 'strcpy', 'strcmp', 'strncpy', 'strcasecmp', 'cat', 'strcat', 'strstr',
        -            'strlen', 'strtof', 'strtod', 'strtok', 'towlower', 'towupper',
        -            'cd', 'system', 'exit', 'exec', 'fork', 'vfork', 'kill', 'signal', 'syslog',
        -            'usleep', 'utime', 'wait', 'waitpid', 'waitid',
        -            'ceil', 'eval', 'round', 'floor',
        -            'atoi', 'atol', 'abs', 'cos', 'sin', 'tan', 'acos', 'asin', 'atan', 'exp',
        -            'time', 'ctime', 'localtime', 'asctime', 'gmtime', 'difftime', 'date'
        -            ),
        -        4 => array(//fonctions KLone usuelles
        -            'request_get_cookies', 'request_get_cookie', 'request_get_args', 'request_get_arg',
        -            'request_io', 'request_get_uri', 'request_get_filename', 'request_get_query_string', 'request_get_path_info',
        -            'request_get_if_modified_since', 'request_get_http', 'request_get_client_request',
        -            'request_get_content_length', 'request_get_uploads', 'request_get_uploaded_file',
        -            'request_get_method', 'request_get_protocol', 'request_get_resolved_filename',
        -            'request_get_resolved_path_info', 'request_get_addr', 'request_get_peer_addr',
        -            'request_get_header', 'request_get_field', 'request_get_field_value',
        -            'response_set_content_encoding', 'response_disable_caching', 'response_enable_caching',
        -            'response_set_cookie', 'response_set_method', 'response_get_method',
        -            'response_print_header', 'response_set_field', 'response_del_field',
        -            'response_set_content_type', 'response_set_date', 'response_set_last_modified',
        -            'response_set_content_length', 'response_get_status', 'response_get_header',
        -            'response_io', 'response_redirect', 'response_set_status',
        -            'session_get_vars', 'session_get', 'session_set', 'session_age', 'session_clean', 'session_del',
        -            'io_type', 'io_pipe', 'io_dup', 'io_copy', 'io_seek', 'io_tell', 'io_close',
        -            'io_free', 'io_read', 'io_printf', 'io_flush', 'io_write', 'io_putc', 'io_getc',
        -            'io_get_until', 'io_gets', 'io_codec_add_head', 'io_codec_add_tail',
        -            'io_codecs_remove', 'io_name_set', 'io_name_get'
        -            ),
        -        5 => array(//types C
        -            'auto', 'char', 'const', 'double',  'float', 'int', 'long',
        -            'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile',
        -            'wchar_t', 'time_t', 'FILE'
        -            ),
        -        6 => array(//mots-cles HTML
        -            'a', 'abbr', 'acronym', 'address', 'applet',
        -
        -            'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
        -
        -            'caption', 'center', 'cite', 'code', 'colgroup', 'col',
        -
        -            'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
        -
        -            'em',
        -
        -            'fieldset', 'font', 'form', 'frame', 'frameset',
        -
        -            'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
        -
        -            'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
        -
        -            'kbd',
        -
        -            'label', 'legend', 'link', 'li',
        -
        -            'map', 'meta',
        -
        -            'noframes', 'noscript',
        -
        -            'object', 'ol', 'optgroup', 'option',
        -
        -            'param', 'pre', 'p',
        -
        -            'q',
        -
        -            'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
        -
        -            'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
        -
        -            'ul', 'u',
        -
        -            'var',
        -            ),
        -        7 => array(//autres mots-cles HTML
        -            'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
        -            'background', 'bgcolor', 'border',
        -            'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
        -            'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
        -            'enctype',
        -            'face', 'for', 'frame', 'frameborder',
        -            'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
        -            'id', 'ismap',
        -            'label', 'lang', 'language', 'link', 'longdesc',
        -            'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
        -            'name', 'nohref', 'noresize', 'noshade', 'nowrap',
        -            'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
        -            'profile', 'prompt',
        -            'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
        -            'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
        -            'tabindex', 'target', 'text', 'title', 'type',
        -            'usemap',
        -            'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
        -            'width'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '<%=', '<%!', '<%', '%>'
        -            ),
        -        0 => array(
        -            '(', ')', '[', ']', '{', '}',
        -            '!', '%', '&', '|', '/',
        -            '<', '>',
        -            '=', '-', '+', '*',
        -            '.', ':', ',', ';', '^'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100; font-weight: bold;',//pour les mots-cles C
        -            2 => 'color: #000000; font-weight: bold;',//pour les mots-cles KLone
        -            3 => 'color: #6600FF;',//pour les fonctions C
        -            4 => 'color: #6600FF;',//pour les fonctions Klone
        -            5 => 'color: #0099FF; font-weight: bold;',//pour les types C
        -            6 => 'color: #990099; font-weight: bold;',//pour les mots-cles HTML
        -            7 => 'color: #000066;'//pour les autres mots-cles HTML
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',//commentaire sur une ligne C et KLone
        -            2 => 'color: #339933;',//pour les #... en C
        -            'MULTI' => 'color: #808080; font-style: italic;'//commentaire sur plusieurs lignes C et KLone
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;',
        -            1 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array(
        -            0 => 'background-color:#ffccff; font-weight: bold; color:#000000;',
        -            1 => '',
        -            2 => '',
        -            3 => 'color: #00bbdd; font-weight: bold;',
        -            4 => 'color: #ddbb00;',
        -            5 => 'color: #009900;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
        -        4 => 'http://www.koanlogic.com/klone/api/html/globals.html',
        -        5 => '',
        -        6 => 'http://december.com/html/4/element/{FNAMEL}.html',
        -        7 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        //delimiteurs pour KLone
        -        0 => array(
        -            '<%=' => '%>'
        -            ),
        -        1 => array(
        -            '<%!' => '%>'
        -            ),
        -        2 => array(
        -            '<%' => '%>'
        -            ),
        -        //delimiteur pour HTML
        -        3 => array(
        -            ' '>'
        -            ),
        -        4 => array(
        -            '&' => ';'
        -            ),
        -        5 => array(
        -            '<' => '>'
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => false,
        -        1 => true,
        -        2 => true,
        -        3 => false,
        -        4 => false,
        -        5 => true
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?<=<|<\/)',
        -                'DISALLOWED_AFTER' => '(?=\s|\/|>)',
        -            ),
        -            7 => array(
        -                'DISALLOWED_AFTER' => '(?=\s*=)',
        -            )
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php
        deleted file mode 100644
        index e11015e6..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php
        +++ /dev/null
        @@ -1,308 +0,0 @@
        - 'KLone C++',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),//#pour precede les include de C
        -    'COMMENT_MULTI' => array('/*' => '*/', '' ),//comentaires C et KLone suivi de ceux pour HTML
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(//mots-cles C++
        -            'if', 'return', 'while', 'case', 'continue', 'default',
        -            'do', 'else', 'for', 'switch', 'goto',
        -            'break', 'true', 'enum', 'extern', 'inline', 'false',
        -            'errno', 'stdin', 'stdout', 'stderr',
        -            'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
        -            'try', 'catch', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
        -            'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class',
        -            'EDOM', 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
        -            'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
        -            'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
        -            'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
        -            'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
        -            'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
        -            'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
        -            'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
        -            'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL',
        -            'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX',
        -            'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC'
        -            ),
        -        2 => array(//mots-cles KLone
        -            'out', 'request', 'response',
        -            ),
        -        3 => array(//fonctions C++ usuelles
        -            'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
        -            'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
        -            'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
        -            'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
        -            'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
        -            'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
        -            'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
        -            'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
        -            'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
        -            'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
        -            'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
        -            'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
        -            'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
        -            'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
        -            'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
        -            'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
        -            'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
        -            'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
        -            'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
        -            'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
        -            ),
        -        4 => array(//fonctions KLone usuelles
        -            'request_get_cookies', 'request_get_cookie', 'request_get_args', 'request_get_arg',
        -            'request_io', 'request_get_uri', 'request_get_filename', 'request_get_query_string', 'request_get_path_info',
        -            'request_get_if_modified_since', 'request_get_http', 'request_get_client_request',
        -            'request_get_content_length', 'request_get_uploads', 'request_get_uploaded_file',
        -            'request_get_method', 'request_get_protocol', 'request_get_resolved_filename',
        -            'request_get_resolved_path_info', 'request_get_addr', 'request_get_peer_addr',
        -            'request_get_header', 'request_get_field', 'request_get_field_value',
        -            'response_set_content_encoding', 'response_disable_caching', 'response_enable_caching',
        -            'response_set_cookie', 'response_set_method', 'response_get_method',
        -            'response_print_header', 'response_set_field', 'response_del_field',
        -            'response_set_content_type', 'response_set_date', 'response_set_last_modified',
        -            'response_set_content_length', 'response_get_status', 'response_get_header',
        -            'response_io', 'response_redirect', 'response_set_status',
        -            'session_get_vars', 'session_get', 'session_set', 'session_age', 'session_clean', 'session_del',
        -            'io_type', 'io_pipe', 'io_dup', 'io_copy', 'io_seek', 'io_tell', 'io_close',
        -            'io_free', 'io_read', 'io_printf', 'io_flush', 'io_write', 'io_putc', 'io_getc',
        -            'io_get_until', 'io_gets', 'io_codec_add_head', 'io_codec_add_tail',
        -            'io_codecs_remove', 'io_name_set', 'io_name_get'
        -            ),
        -        5 => array(//types C++
        -            'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
        -            'register', 'short', 'shortint', 'signed', 'static', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile', 'jmp_buf',
        -            'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
        -            'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
        -            'string', 'wchar_t'
        -            ),
        -        6 => array(//mots-cles HTML
        -            'a', 'abbr', 'acronym', 'address', 'applet',
        -
        -            'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
        -
        -            'caption', 'center', 'cite', 'code', 'colgroup', 'col',
        -
        -            'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
        -
        -            'em',
        -
        -            'fieldset', 'font', 'form', 'frame', 'frameset',
        -
        -            'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
        -
        -            'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
        -
        -            'kbd',
        -
        -            'label', 'legend', 'link', 'li',
        -
        -            'map', 'meta',
        -
        -            'noframes', 'noscript',
        -
        -            'object', 'ol', 'optgroup', 'option',
        -
        -            'param', 'pre', 'p',
        -
        -            'q',
        -
        -            'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
        -
        -            'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
        -
        -            'ul', 'u',
        -
        -            'var',
        -            ),
        -        7 => array(//autres mots-cles HTML
        -            'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
        -            'background', 'bgcolor', 'border',
        -            'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
        -            'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
        -            'enctype',
        -            'face', 'for', 'frame', 'frameborder',
        -            'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
        -            'id', 'ismap',
        -            'label', 'lang', 'language', 'link', 'longdesc',
        -            'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
        -            'name', 'nohref', 'noresize', 'noshade', 'nowrap',
        -            'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
        -            'profile', 'prompt',
        -            'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
        -            'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
        -            'tabindex', 'target', 'text', 'title', 'type',
        -            'usemap',
        -            'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
        -            'width'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '<%=', '<%!', '<%', '%>'
        -            ),
        -        0 => array(
        -            '(', ')', '[', ']', '{', '}',
        -            '!', '%', '&', '|', '/',
        -            '<', '>',
        -            '=', '-', '+', '*',
        -            '.', ':', ',', ';', '^'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100; font-weight: bold;',//pour les mots-cles C++
        -            2 => 'color: #000000; font-weight: bold;',//pour les mots-cles KLone
        -            3 => 'color: #6600FF;',//pour les fonctions C++
        -            4 => 'color: #6600FF;',//pour les fonctions Klone
        -            5 => 'color: #0099FF; font-weight: bold;',//pour les types C++
        -            6 => 'color: #990099; font-weight: bold;',//pour les mots-cles HTML
        -            7 => 'color: #000066;'//pour les autres mots-cles HTML
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',//commentaire sur une ligne C++ et KLone
        -            2 => 'color: #339933;',//pour les #... en C++
        -            'MULTI' => 'color: #808080; font-style: italic;'//commentaire sur plusieurs lignes C++ et KLone
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;',
        -            1 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array(
        -            0 => 'background-color:#ffccff; font-weight: bold; color:#000000;',
        -            1 => '',
        -            2 => '',
        -            3 => 'color: #00bbdd; font-weight: bold;',
        -            4 => 'color: #ddbb00;',
        -            5 => 'color: #009900;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
        -        4 => 'http://www.koanlogic.com/klone/api/html/globals.html',
        -        5 => '',
        -        6 => 'http://december.com/html/4/element/{FNAMEL}.html',
        -        7 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        //delimiteurs pour KLone
        -        0 => array(
        -            '<%=' => '%>'
        -            ),
        -        1 => array(
        -            '<%!' => '%>'
        -            ),
        -        2 => array(
        -            '<%' => '%>'
        -            ),
        -        //delimiteur pour HTML
        -        3 => array(
        -            ' '>'
        -            ),
        -        4 => array(
        -            '&' => ';'
        -            ),
        -        5 => array(
        -            '<' => '>'
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => false,
        -        1 => true,
        -        2 => true,
        -        3 => false,
        -        4 => false,
        -        5 => true
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?<=<|<\/)',
        -                'DISALLOWED_AFTER' => '(?=\s|\/|>)',
        -            ),
        -            7 => array(
        -                'DISALLOWED_AFTER' => '(?=\s*=)',
        -            )
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php
        deleted file mode 100644
        index 8b28e344..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php
        +++ /dev/null
        @@ -1,221 +0,0 @@
        - 'LaTeX',
        -    'COMMENT_SINGLE' => array(
        -        1 => '%'
        -        ),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'addlinespace','and','address','appendix','author','backmatter',
        -            'bfseries','bibitem','bigskip','blindtext','caption','captionabove',
        -            'captionbelow','cdot','centering','chapter','cite','color',
        -            'colorbox','date','dedication','def','definecolor','documentclass',
        -            'edef','else','email','emph','eqref','extratitle','fbox','fi',
        -            'flushleft','flushright','footnote','frac','frontmatter',
        -            'graphicspath','hfil','hfill','hfilll','hline','hspace','huge','ifx','include',
        -            'includegraphics','infty','input','int','item','itemsep',
        -            'KOMAoption','KOMAoptions','label','LaTeX','left','let','limits',
        -            'listfiles','listoffigures','listoftables','lowertitleback',
        -            'mainmatter','makeatletter','makeatother','makebox','makeindex',
        -            'maketitle','mbox','mediumskip','newcommand','newenvironment',
        -            'newpage','nocite','nonumber','pagestyle','par','paragraph',
        -            'parbox','parident','parskip','partial','publishers','raggedleft',
        -            'raggedright','raisebox','ref','renewcommand','renewenvironment',
        -            'right','rule','section','setlength','sffamily','subject',
        -            'subparagraph','subsection','subsubsection','subtitle','sum',
        -            'table','tableofcontents','textbf','textcolor','textit',
        -            'textnormal','textsuperscript','texttt','textwidth','thanks','title',
        -            'titlehead','today','ttfamily','uppertitleback','urlstyle',
        -            'usepackage','vfil','vfill','vfilll','vspace'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        "&", "\\", "{", "}", "[", "]"
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        1 => true,
        -        GESHI_COMMENTS => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #800000;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #2C922C; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 =>  'color: #000000; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 =>  'color: #000000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 =>  'color: #E02020; '
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #8020E0; font-weight: normal;',  // Math inner
        -            2 => 'color: #C08020; font-weight: normal;', // [Option]
        -            3 => 'color: #8020E0; font-weight: normal;', // Maths
        -            4 => 'color: #800000; font-weight: normal;', // Structure: Labels
        -            5 => 'color: #00008B; font-weight: bold;',  // Structure (\section{->x<-})
        -            6 => 'color: #800000; font-weight: normal;', // Structure (\section)
        -            7 => 'color: #0000D0; font-weight: normal;', // Environment \end or \begin{->x<-} (brighter blue)
        -            8 => 'color: #C00000; font-weight: normal;', // Structure \end or \begin
        -            9 => 'color: #2020C0; font-weight: normal;', // {...}
        -            10 => 'color: #800000; font-weight: normal;', // \%, \& etc.
        -            11 => 'color: #E00000; font-weight: normal;', // \@keyword
        -            12 => 'color: #800000; font-weight: normal;', // \keyword
        -        ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.golatex.de/wiki/%5C{FNAME}',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        // Math inner
        -        1 => array(
        -            GESHI_SEARCH => "(\\\\begin\\{(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|alignat|flalign)\\})(.*)(\\\\end\\{\\2\\})",
        -            GESHI_REPLACE => '\3',
        -            GESHI_MODIFIERS => 'Us',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => '\4'
        -            ),
        -        // [options]
        -        2 => array(
        -            GESHI_SEARCH => "(?<=\[).*(?=\])",
        -            GESHI_REPLACE => '\0',
        -            GESHI_MODIFIERS => 'Us',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        // Math mode with $ ... $
        -        3 => array(
        -            GESHI_SEARCH => "\\$.+\\$",
        -            GESHI_REPLACE => '\0',
        -            GESHI_MODIFIERS => 'Us',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        // Structure: Label
        -        4 => "\\\\(?:label|pageref|ref|cite)(?=[^a-zA-Z])",
        -        // Structure: sections
        -        5 => array(
        -            GESHI_SEARCH => "(\\\\(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph|addpart|addchap|addsec)\*?\\{)(.*)(?=\\})",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'U',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        // Structure: sections
        -        6 => "\\\\(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph|addpart|addchap|addsec)\*?(?=[^a-zA-Z])",
        -        // environment \begin{} and \end{} (i.e. the things inside the {})
        -        7 => array(
        -            GESHI_SEARCH => "(\\\\(?:begin|end)\\{)(.*)(?=\\})",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'U',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        // Structure \begin and \end
        -        8 => "\\\\(?:end|begin)(?=[^a-zA-Z])",
        -        // {parameters}
        -        9 => array(
        -            GESHI_SEARCH => "(?<=\\{)(?!<\|!REG3XP5!>).*?(?=\\})",
        -            GESHI_REPLACE => '\0',
        -            GESHI_MODIFIERS => 'Us',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        // \%, \& usw.
        -        10 => "\\\\(?:[_$%]|&)",
        -        //  \@keywords
        -        11 => "(?)\\\\@[a-zA-Z]+\*?",
        -        // \keywords
        -        12 => "(?)\\\\[a-zA-Z]+\*?",
        -
        -// ---------------------------------------------
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'COMMENTS' => array(
        -            'DISALLOWED_BEFORE' => '\\'
        -        ),
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?<=\\\\)",
        -            'DISALLOWED_AFTER' => "(?![A-Za-z0-9])"
        -        ),
        -        'ENABLE_FLAGS' => array(
        -            'NUMBERS' => GESHI_NEVER,
        -            'BRACKETS' => GESHI_NEVER
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php
        deleted file mode 100644
        index aa3f5c0d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php
        +++ /dev/null
        @@ -1,160 +0,0 @@
        - 'Liberty BASIC',
        -    'COMMENT_SINGLE' => array(1 => '\''),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'and', 'append', 'as', 'beep', 'bmpbutton', 'bmpsave', 'boolean',
        -            'button', 'byref', 'call', 'callback', 'calldll', 'callfn', 'case',
        -            'checkbox', 'close', 'cls', 'colordialog', 'combobox', 'confirm',
        -            'cursor', 'data', 'dialog', 'dim', 'dll', 'do', 'double', 'dump',
        -            'dword', 'else', 'end', 'error', 'exit', 'field', 'filedialog',
        -            'files', 'fontdialog', 'for', 'function', 'get', 'gettrim',
        -            'global', 'gosub', 'goto', 'graphicbox', 'graphics', 'groupbox',
        -            'if', 'input', 'kill', 'let', 'line', 'listbox', 'loadbmp',
        -            'locate', 'long', 'loop', 'lprint', 'mainwin', 'maphandle', 'menu',
        -            'mod', 'name', 'next', 'nomainwin', 'none', 'notice', 'on',
        -            'oncomerror', 'or', 'open', 'out', 'output', 'password', 'playmidi',
        -            'playwave', 'popupmenu', 'print', 'printerdialog', 'prompt', 'ptr',
        -            'put', 'radiobutton', 'random', 'randomize', 'read', 'readjoystick',
        -            'redim', 'rem', 'restore', 'resume', 'return', 'run', 'scan',
        -            'seek', 'select', 'short', 'sort', 'statictext', 'stop', 'stopmidi',
        -            'struct', 'stylebits', 'sub', 'text', 'textbox', 'texteditor',
        -            'then', 'timer', 'titlebar', 'to', 'trace', 'ulong', 'unloadbmp',
        -            'until', 'ushort', 'void', 'wait', 'window', 'wend', 'while',
        -            'word', 'xor'
        -            ),
        -        2 => array(
        -            'abs', 'acs', 'asc', 'asn', 'atn', 'chr$', 'cos', 'date$',
        -            'dechex$', 'eof', 'eval', 'eval$', 'exp', 'hbmp', 'hexdec', 'hwnd',
        -            'inp', 'input$', 'inputto$', 'instr', 'int', 'left$', 'len', 'lof',
        -            'log', 'lower$', 'max', 'midipos', 'mid$', 'min', 'mkdir', 'not',
        -            'right$', 'rmdir', 'rnd', 'sin', 'space$', 'sqr', 'str$', 'tab',
        -            'tan', 'time$', 'trim$', 'txcount', 'upper$', 'using', 'val',
        -            'winstring', 'word$'
        -            ),
        -        3 => array(
        -            'BackgroundColor$', 'Com', 'ComboboxColor$', 'ComError', 'ComErrorNumber',
        -            'CommandLine$', 'ComPortNumber', 'DefaultDir$',
        -            'DisplayHeight', 'DisplayWidth', 'Drives$', 'Err', 'Err$',
        -            'ForegroundColor$', 'Inkey$', 'Joy1x', 'Joy1y', 'Joy1z',
        -            'Joy1button1', 'Joy1button2', 'Joy2x', 'Joy2y', 'Joy2z',
        -            'Joy2button1', 'Joy2button2', 'ListboxColor$', 'MouseX', 'MouseY', 'Platform$',
        -            'PrintCollate', 'PrintCopies', 'PrinterFont$', 'PrinterName$', 'StartupDir$',
        -            'TextboxColor$', 'TexteditorColor$', 'Version$', 'WindowHeight',
        -            'WindowWidth', 'UpperLeftX', 'UpperLeftY'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '[', ']', '+', '-', '*', '/', '%', '=', '<', '>', ':', ',', '#'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #AD0080;',
        -            3 => 'color: #008080;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            2 => array(
        -                //In LB, the second keyword list is a list of built-in functions,
        -                //and their names should not be highlighted unless being used
        -                //as a function name.
        -                'DISALLOWED_AFTER' => '(?=\s*\()'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php
        deleted file mode 100644
        index c4135137..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php
        +++ /dev/null
        @@ -1,114 +0,0 @@
        - 'LDIF',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        'COMMENTS' => array(
        -            1 => '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(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000066; font-weight: bold;',
        -            1 => 'color: #FF0000;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(
        -            GESHI_SEARCH => '([a-zA-Z0-9_]+):(.+)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ':\\2'
        -            ),
        -        1 => array(
        -            // Evil hackery to get around GeSHi bug: <>" and ; are added so s can be matched
        -            // Explicit match on variable names because if a comment is before the first < of the span
        -            // gets chewed up...
        -            GESHI_SEARCH => '([<>";a-zA-Z0-9_]+):(.+)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1:',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php
        deleted file mode 100644
        index a2301914..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php
        +++ /dev/null
        @@ -1,147 +0,0 @@
        - 'Lisp',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(';|' => '|;'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'not','defun','princ','when',
        -            'eval','apply','funcall','quote','identity','function',
        -            'complement','backquote','lambda','set','setq','setf',
        -            'defmacro','gensym','make','symbol','intern',
        -            'name','value','plist','get',
        -            'getf','putprop','remprop','hash','array','aref',
        -            'car','cdr','caar','cadr','cdar','cddr','caaar','caadr','cadar',
        -            'caddr','cdaar','cdadr','cddar','cdddr','caaaar','caaadr',
        -            'caadar','caaddr','cadaar','cadadr','caddar','cadddr',
        -            'cdaaar','cdaadr','cdadar','cdaddr','cddaar','cddadr',
        -            'cdddar','cddddr','cons','list','append','reverse','last','nth',
        -            'nthcdr','member','assoc','subst','sublis','nsubst',
        -            'nsublis','remove','length',
        -            'mapc','mapcar','mapl','maplist','mapcan','mapcon','rplaca',
        -            'rplacd','nconc','delete','atom','symbolp','numberp',
        -            'boundp','null','listp','consp','minusp','zerop','plusp',
        -            'evenp','oddp','eq','eql','equal','cond','case','and','or',
        -            'let','l','if','prog','prog1','prog2','progn','go','return',
        -            'do','dolist','dotimes','catch','throw','error','cerror','break',
        -            'continue','errset','baktrace','evalhook','truncate','float',
        -            'rem','min','max','abs','sin','cos','tan','expt','exp','sqrt',
        -            'random','logand','logior','logxor','lognot','bignums','logeqv',
        -            'lognand','lognor','logorc2','logtest','logbitp','logcount',
        -            'integer','nil','parse-integer','make-list','print','write'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']',
        -        '!', '%', '^', '&',
        -        ' + ',' - ',' * ',' / ',
        -        '=','<','>',
        -        '.',':',',',';',
        -        '|'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #555;',
        -            1 => 'color: #555;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        '::', ':'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => '(? array(
        -            'MATCH_AFTER' => '[a-zA-Z][a-zA-Z0-9_\-]*'
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php
        deleted file mode 100644
        index 4fc2040c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php
        +++ /dev/null
        @@ -1,383 +0,0 @@
        - 'LLVM Intermediate Representation',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(),
        -    'HARDQUOTE' => array("\"", "\""),
        -    'HARDESCAPE' => array("\"", "\\"),
        -    'HARDCHAR' => "\\",
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        // 1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
        -        //Hexadecimal Char Specs
        -        // 2 => "#\\\\x[\da-fA-F]{1,2}#i",
        -        //Octal Char Specs
        -        // 3 => "#\\\\[0-7]{1,3}#",
        -        //String Parsing of Variable Names
        -        // 4 => "#\\$[a-z0-9_]+(?:\\[[a-z0-9_]+\\]|->[a-z0-9_]+)?|(?:\\{\\$|\\$\\{)[a-z0-9_]+(?:\\[('?)[a-z0-9_]*\\1\\]|->[a-z0-9_]+)*\\}#i",
        -        //Experimental extension supporting cascaded {${$var}} syntax
        -        // 5 => "#\$[a-z0-9_]+(?:\[[a-z0-9_]+\]|->[a-z0-9_]+)?|(?:\{\$|\$\{)[a-z0-9_]+(?:\[('?)[a-z0-9_]*\\1\]|->[a-z0-9_]+)*\}|\{\$(?R)\}#i",
        -        //Format String support in ""-Strings
        -        // 6 => "#%(?:%|(?:\d+\\\\\\\$)?\\+?(?:\x20|0|'.)?-?(?:\d+|\\*)?(?:\.\d+)?[bcdefFosuxX])#"
        -        ),
        -    'NUMBERS' =>
        -    GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        0 => array(
        -            'to', 'nuw', 'nsw', 'align', 'inbounds', 'entry', 'return'
        -            ),
        -        //Terminator Instructions
        -        1 => array(
        -            'ret', 'br', 'switch', 'indirectbr', 'invoke', 'unwind', 'unreachable'
        -            ),
        -        //Binary Operations
        -        2 => array(
        -            'add', 'fadd', 'sub', 'fsub', 'mul', 'fmul', 'udiv', 'sdiv', 'fdiv', 'urem', 'frem', 'srem'
        -            ),
        -        //Bitwise Binary Operations
        -        3 => array(
        -            'shl', 'lshr', 'ashr', 'and', 'or', 'xor'
        -            ),
        -        //Vector Operations
        -        4 => array(
        -            'extractelement', 'insertelement', 'shufflevector'
        -            ),
        -        //Aggregate Operations
        -        5 => array(
        -            'extractvalue', 'insertvalue'
        -            ),
        -        //Memory Access and Addressing Operations
        -        6 => array(
        -            'alloca', 'load', 'store', 'getelementptr'
        -            ),
        -        //Conversion Operations
        -        7 => array(
        -            'trunc', 'zext', 'sext', 'fptrunc', 'fpext', 'fptoui', 'fptosi',
        -            'uitofp', 'sitofp', 'ptrtoint', 'inttoptr', 'bitcast'
        -            ),
        -        //Other Operations
        -        8 => array(
        -            'icmp', 'fcmp', 'phi', 'select', 'call', 'va_arg'
        -            ),
        -        //Linkage Types
        -        9 => array(
        -            'private', 'linker_private', 'linker_private_weak', 'linker_private_weak_def_auto',
        -            'internal', 'available_externally', 'linkonce', 'common', 'weak', 'appending',
        -            'extern_weak', 'linkonce_odr', 'weak_odr', 'externally visible', 'dllimport', 'dllexport',
        -            ),
        -        //Calling Conventions
        -        10 => array(
        -            'ccc', 'fastcc', 'coldcc', 'cc 10'
        -            ),
        -        //Named Types
        -        11 => array(
        -            'type'
        -            ),
        -        //Parameter Attributes
        -        12 => array(
        -            'zeroext', 'signext', 'inreg', 'byval', 'sret', 'noalias', 'nocapture', 'nest'
        -            ),
        -        //Function Attributes
        -        13 => array(
        -            'alignstack', 'alwaysinline', 'inlinehint', 'naked', 'noimplicitfloat', 'noinline', 'noredzone', 'noreturn',
        -            'nounwind', 'optsize', 'readnone', 'readonly', 'ssp', 'sspreq',
        -            ),
        -        //Module-Level Inline Assembly
        -        14 => array(
        -            'module asm'
        -            ),
        -        //Data Layout
        -        15 => array(
        -            'target datalayout'
        -            ),
        -        //Primitive Types
        -        16 => array(
        -            'x86mmx',
        -            'void',
        -            'label',
        -            'metadata',
        -            'opaque'
        -            ),
        -        //Floating Point Types
        -        17 => array(
        -            'float', 'double', 'fp128', 'x86_fp80', 'ppc_fp128',
        -            ),
        -        //Simple Constants
        -        18 => array(
        -            'false', 'true', 'null'
        -            ),
        -        //Global Variable and Function Addresses
        -        19 => array(
        -            'global', 'addrspace', 'constant', 'section'
        -            ),
        -        //Functions
        -        20 => array(
        -            'declare', 'define'
        -            ),
        -        //Complex Constants
        -        21 => array(
        -            'zeroinitializer'
        -            ),
        -        //Undefined Values
        -        22 => array(
        -            'undef'
        -            ),
        -        //Addresses of Basic Blocks
        -        23 => array(
        -            'blockaddress'
        -            ),
        -        //Visibility Styles
        -        24 => array(
        -            'default', 'hidden', 'protected'
        -            ),
        -        25 => array(
        -            'volatile'
        -            ),
        -        26 => array(
        -            'tail'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '(', ')', '[', ']', '{', '}',
        -            '!', '@', '%', '&', '|', '/',
        -            '<', '>',
        -            '=', '-', '+', '*',
        -            '.', ':', ',', ';'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true,
        -        10 => true,
        -        11 => true,
        -        12 => true,
        -        13 => true,
        -        14 => true,
        -        15 => true,
        -        16 => true,
        -        17 => true,
        -        18 => true,
        -        19 => true,
        -        20 => true,
        -        21 => true,
        -        22 => true,
        -        23 => true,
        -        24 => true,
        -        25 => true,
        -        26 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            0 => 'color: #209090;',
        -            1 => 'color: #0000F0;',
        -            2 => 'color: #00F000; font-weight: bold;',
        -            3 => 'color: #F00000;',
        -            4 => 'color: #00F0F0; font-weight: bold;',
        -            5 => 'color: #F000F0; font-weight: bold;',
        -            6 => 'color: #403020; font-weight: bold;',
        -            7 => 'color: #909090; font-weight: bold;',
        -            8 => 'color: #009090; font-weight: bold;',
        -            9 => 'color: #900090; font-weight: bold;',
        -            10 => 'color: #909000; font-weight: bold;',
        -            11 => 'color: #000090; font-weight: bold;',
        -            12 => 'color: #900000; font-weight: bold;',
        -            13 => 'color: #009000; font-weight: bold;',
        -            14 => 'color: #F0F090; font-weight: bold;',
        -            15 => 'color: #F090F0; font-weight: bold;',
        -            16 => 'color: #90F0F0; font-weight: bold;',
        -            17 => 'color: #9090F0; font-weight: bold;',
        -            18 => 'color: #90F090; font-weight: bold;',
        -            19 => 'color: #F09090; font-weight: bold;',
        -            20 => 'color: #4040F0; font-weight: bold;',
        -            21 => 'color: #40F040; font-weight: bold;',
        -            22 => 'color: #F04040; font-weight: bold;',
        -            23 => 'color: #F0F040; font-weight: bold;',
        -            24 => 'color: #F040F0; font-weight: bold;',
        -            25 => 'color: #40F0F0; font-weight: bold;',
        -            26 => 'color: #904040; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #006699; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold; font-style: italic;',
        -            6 => 'color: #009933; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;',
        -            'HARD' => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #004000;',
        -            2 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #007088;',
        -            1 => 'color: #007088;',
        -            // 2 => 'color: #000088;',
        -            3 => 'color: #700088;',
        -            4 => 'color: #010088;',
        -            // 5 => 'color: #610088;',
        -            // 6 => 'color: #616088;',
        -            // 7 => 'color: #616988;',
        -            // 8 => 'color: #616908;',
        -            9 => 'color: #6109F8;',
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => '',
        -            4 => '',
        -            5 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        0 => '',
        -        1 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        2 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        3 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        4 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        5 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        6 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        7 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        8 => 'http://llvm.org/docs/LangRef.html#i_{FNAME}',
        -        9 => 'http://llvm.org/docs/LangRef.html#linkage_{FNAME}',
        -        10 => 'http://llvm.org/docs/LangRef.html#callingconv',
        -        11 => 'http://llvm.org/docs/LangRef.html#namedtypes',
        -        12 => 'http://llvm.org/docs/LangRef.html#paramattrs',
        -        13 => 'http://llvm.org/docs/LangRef.html#fnattrs',
        -        14 => 'http://llvm.org/docs/LangRef.html#moduleasm',
        -        15 => 'http://llvm.org/docs/LangRef.html#datalayout',
        -        16 => 'http://llvm.org/docs/LangRef.html#t_{FNAME}',
        -        17 => 'http://llvm.org/docs/LangRef.html#t_floating',
        -        18 => 'http://llvm.org/docs/LangRef.html#simpleconstants',
        -        19 => 'http://llvm.org/docs/LangRef.html#globalvars',
        -        20 => 'http://llvm.org/docs/LangRef.html#functionstructure',
        -        21 => 'http://llvm.org/docs/LangRef.html#complexconstants',
        -        22 => 'http://llvm.org/docs/LangRef.html#undefvalues',
        -        23 => 'http://llvm.org/docs/LangRef.html#blockaddress',
        -        24 => 'http://llvm.org/docs/LangRef.html#visibility',
        -        25 => 'http://llvm.org/docs/LangRef.html#volatile',
        -        26 => 'http://llvm.org/docs/LangRef.html#i_call',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Variables
        -        0 => '%[-a-zA-Z$\._][-a-zA-Z$\._0-9]*',
        -        //Labels
        -        // 1 => '[-a-zA-Z$\._0-9]+:',
        -        1 => '(?]*<)',
        -        //Strings
        -        // 2 => '"[^"]+"',
        -        //Unnamed variable slots
        -        3 => '%[-]?[0-9]+',
        -        //Integer Types
        -        4 => array(
        -            GESHI_SEARCH => '(? '\\0',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        //Comments
        -        // 5 => ';.*',
        -        //Integer literals
        -        // 6 => '\\b[-]?[0-9]+\\b',
        -        //Floating point constants
        -        // 7 => '\\b[-+]?[0-9]+\.[0-9]*\([eE][-+]?[0-9]+\)?\\b',
        -        //Hex constants
        -        // 8 => '\\b0x[0-9A-Fa-f]+\\b',
        -        //Global variables
        -        9 => array(
        -            GESHI_SEARCH => '@[-a-zA-Z$\._][-a-zA-Z$\._0-9]*',
        -            GESHI_REPLACE => '\\0',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'SCRIPT_DELIMITERS' => array(),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php
        deleted file mode 100644
        index 686bb6c5..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php
        +++ /dev/null
        @@ -1,128 +0,0 @@
        - 'Locomotive Basic',
        -    'COMMENT_SINGLE' => array(1 => "'", 2 => 'REM'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            "AFTER", "AND", "AUTO", "BORDER", "BREAK", "CALL", "CAT", "CHAIN",
        -            "CLEAR", "CLG", "CLS", "CLOSEIN", "CLOSEOUT", "CONT", "CURSOR",
        -            "DATA", "DEF", "DEFINT", "DEFREAL", "DEFSTR", "DEG", "DELETE",
        -            "DERR", "DI", "DIM", "DRAW", "DRAWR", "EDIT", "EI", "ELSE", "END",
        -            "ENV", "ENT", "EOF", "ERASE", "ERL", "ERR", "ERROR", "EVERY",
        -            "FILL", "FN", "FOR", "FRAME", "GOSUB", "GOTO", "GRAPHICS", "HIMEM",
        -            "IF", "INK", "INPUT", "KEY", "LET", "LINE", "LIST", "LOAD",
        -            "LOCATE", "MASK", "MEMORY", "MERGE", "MODE", "MOVE", "MOVER", "NEW",
        -            "NEXT", "NOT", "ON", "OPENIN", "OPENOUT", "OR", "ORIGIN", "PAPER",
        -            "PEEK", "PEN", "PLOT", "PLOTR", "POKE", "PRINT", "RAD", "RANDOMIZE",
        -            "READ", "RELEASE", "REMAIN", "RENUM", "RESTORE", "RESUME", "RETURN",
        -            "RUN", "SAVE", "SPEED", "SOUND", "SPC", "SQ", "STEP", "STOP", "SWAP",
        -            "SYMBOL", "TAB", "TAG", "TAGOFF", "TEST", "TESTR", "TIME", "TO",
        -            "THEN", "TRON", "TROFF", "USING", "WAIT", "WEND", "WHILE", "WIDTH",
        -            "WINDOW", "WRITE", "XOR", "ZONE"
        -            ),
        -        2 => array(
        -            "ABS", "ASC", "ATN", "BIN", "CHR", "CINT", "COPYCHR", "COS",
        -            "CREAL", "DEC", "FIX", "FRE", "EXP", "HEX", "INKEY", "INP", "INSTR",
        -            "INT", "JOY", "LEFT", "LEN", "LOG", "LOG10", "LOWER", "MAX", "MID",
        -            "MIN", "MOD", "OUT", "PI", "POS", "RIGHT", "RND", "ROUND", "SGN",
        -            "SIN", "SPACE", "SQR", "STR", "STRING", "TAN", "UNT", "UPPER",
        -            "VAL", "VPOS", "XPOS", "YPOS"
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000088; font-weight: bold;',
        -            2 => 'color: #AA00AA; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;',
        -            2 => 'color: #808080;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #008800;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0044ff;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php
        deleted file mode 100644
        index c72e548d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php
        +++ /dev/null
        @@ -1,343 +0,0 @@
        - 'Logtalk',
        -    'COMMENT_SINGLE' => array(1 => '%'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(2 => "/0'./sim"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'"),
        -    'HARDQUOTE' => array('"', '"'),
        -    'HARDESCAPE' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]+\\\\#",
        -        //Octal Char Specs
        -        3 => "#\\\\[0-7]+\\\\#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC |
        -        GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX_0O |
        -        GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        // Directives (with arguments)
        -        1 => array(
        -            // file directives
        -            'encoding', 'ensure_loaded',
        -            // flag directives
        -            'set_logtalk_flag', 'set_prolog_flag',
        -            // entity opening directives
        -            'category', 'object', 'protocol',
        -            // predicate scope directives
        -            'private', 'protected', 'public',
        -            // conditional compilation directives
        -            'elif', 'if',
        -            // entity directives
        -            'calls', 'initialization', 'op', 'uses',
        -            // predicate directives
        -            'alias', 'coinductive', 'discontiguous', 'dynamic', 'mode', 'info', 'meta_predicate', 'multifile', 'synchronized',
        -            // module directives
        -            'export', 'module', 'reexport', 'use_module'
        -            ),
        -        // Directives (no arguments)
        -        2 => array(
        -            // entity directives
        -            'dynamic',
        -            // multi-threading directives
        -            'synchronized', 'threaded',
        -            // entity closing directives
        -            'end_category', 'end_object', 'end_protocol',
        -            // conditional compilation directives
        -            'else', 'endif'
        -            ),
        -        // Entity relations
        -        3 => array(
        -            'complements', 'extends', 'imports', 'implements','instantiates', 'specializes'
        -            ),
        -        // Built-in predicates (with arguments)
        -        4 => array(
        -            // event handlers
        -            'after', 'before',
        -            // execution-context methods
        -            'parameter', 'self', 'sender', 'this',
        -            // predicate reflection
        -            'current_predicate', 'predicate_property',
        -            // DCGs and term expansion
        -            'expand_goal', 'expand_term', 'goal_expansion', 'phrase', 'term_expansion',
        -            // entity
        -            'abolish_category', 'abolish_object', 'abolish_protocol',
        -            'create_category', 'create_object', 'create_protocol',
        -            'current_category', 'current_object', 'current_protocol',
        -            'category_property', 'object_property', 'protocol_property',
        -            // entity relations
        -            'complements_object', 'conforms_to_protocol',
        -            'extends_category', 'extends_object', 'extends_protocol',
        -            'implements_protocol', 'imports_category',
        -            'instantiates_class', 'specializes_class',
        -            // events
        -            'abolish_events', 'current_event', 'define_events',
        -            // flags
        -            'current_logtalk_flag', 'set_logtalk_flag',
        -            'current_prolog_flag', 'set_prolog_flag',
        -            // compiling, loading, and library path
        -            'logtalk_compile', 'logtalk_library_path', 'logtalk_load',
        -            // database
        -            'abolish', 'asserta', 'assertz', 'clause', 'retract', 'retractall',
        -            // control
        -            'call', 'catch', 'ignore', 'once', 'throw',
        -            // all solutions predicates
        -            'bagof', 'findall', 'forall', 'setof',
        -            // multi-threading meta-predicates
        -            'threaded',
        -            'threaded_call', 'threaded_once', 'threaded_ignore', 'threaded_exit', 'threaded_peek',
        -            'threaded_wait', 'threaded_notify',
        -            // term unification
        -            'unify_with_occurs_check',
        -            // atomic term processing
        -            'atom_chars', 'atom_codes', 'atom_concat', 'atom_length',
        -            'number_chars', 'number_codes',
        -            'char_code',
        -            // term creation and decomposition
        -            'arg', 'copy_term', 'functor', 'numbervars',
        -            // term testing
        -            'atom', 'atomic', 'callable', 'compound', 'float', 'ground', 'integer', 'nonvar', 'number', 'sub_atom', 'var',
        -            // term comparison
        -            'compare',
        -            // stream selection and control
        -            'current_input', 'current_output', 'set_input', 'set_output',
        -            'open', 'close', 'flush_output', 'stream_property',
        -            'at_end_of_stream', 'set_stream_position',
        -            // character and byte input/output predicates
        -            'get_byte', 'get_char', 'get_code',
        -            'peek_byte', 'peek_char', 'peek_code',
        -            'put_byte', 'put_char', 'put_code',
        -            'nl',
        -            // term input/output predicates
        -            'current_op', 'op',
        -            'write', 'writeq', 'write_canonical', 'write_term',
        -            'read', 'read_term',
        -            'char_conversion', 'current_char_conversion',
        -            // hooks
        -            'halt',
        -            // sorting
        -            'keysort', 'sort'
        -            ),
        -        // Built-in predicates (no arguments)
        -        5 => array(
        -            // control
        -            'fail', 'repeat', 'true',
        -            // character and byte input/output predicates
        -            'nl',
        -            // implementation defined hooks functions
        -            'halt',
        -            // arithemtic evaluation
        -            'is',
        -            // stream selection and control
        -            'at_end_of_stream', 'flush_output'
        -            ),
        -        // Evaluable functors (with arguments)
        -        6 => array(
        -            'float_integer_part', 'float_fractional_part',
        -            'rem', 'mod', 'abs', 'sign', 'floor', 'truncate', 'round', 'ceiling',
        -            'cos', 'atan', 'exp', 'log', 'sin', 'sqrt'
        -            ),
        -        // Evaluable functors (no arguments)
        -        7 => array(
        -            'e', 'pi', 'mod', 'rem'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            // external call
        -            '{', '}'
        -            ),
        -        1 => array(
        -            // arithemtic comparison
        -            '=:=', '=\=', '<', '=<', '>=', '>',
        -            // term comparison
        -            '<<', '>>', '/\\', '\\/', '\\',
        -            // bitwise functors
        -            '==', '\==', '@<', '@=<', '@>=', '@>',
        -            // evaluable functors
        -            '+', '-', '*', '/', '**',
        -            // logic and control
        -            '!', '\\+', ';',
        -            // message sending operators
        -            '::', '^^', ':',
        -            // grammar rule and conditional functors
        -            '-->', '->',
        -            // mode operators
        -            '@', '?',
        -            // term to list predicate
        -            '=..',
        -            // unification
        -            '=', '\\='
        -            ),
        -        2 => array(
        -            // clause and directive functors
        -            ':-'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #2e4dc9;',
        -            2 => 'color: #2e4dc9;',
        -            3 => 'color: #2e4dc9;',
        -            4 => 'color: #9d4f37;',
        -            5 => 'color: #9d4f37;',
        -            6 => 'color: #9d4f37;',
        -            7 => 'color: #9d4f37;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #430000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #60a0b0; font-style: italic;',
        -            2 => 'color: #430000;',
        -            'MULTI' => 'color: #60a0b0; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #9f0000; font-weight: bold;',
        -            1 => 'color: #9f0000; font-weight: bold;',
        -            2 => 'color: #9f0000; font-weight: bold;',
        -            3 => 'color: #9f0000; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #666666;font-weight: bold;',
        -            1 => 'color: #666666;font-weight: bold;',
        -            2 => 'color: #000000;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #9f0000;',
        -            'HARD' => 'color: #9f0000;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #848484;'
        -            ),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        // variables
        -        0 => '\b(?!(?:PIPE|SEMI|REG3XP\d*)[^a-zA-Z0-9_])[A-Z_][a-zA-Z0-9_]*(?![a-zA-Z0-9_])'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER
        -            ),
        -        'KEYWORDS' => array(
        -            1 => array(
        -                'DISALLOWED_BEFORE' => '(?<=:-\s)',
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(?<=:-\s)',
        -                'DISALLOWED_AFTER' => '(?=\.)'
        -                ),
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(?|^&\'"])',
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            4 => array(
        -                'DISALLOWED_BEFORE' => '(?|^&\'"])',
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            5 => array(
        -                'DISALLOWED_BEFORE' => '(?|^&\'"])',
        -                'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\'"])'
        -                ),
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?|^&\'"])',
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            7 => array(
        -                'DISALLOWED_BEFORE' => '(?|^&\'"])',
        -                'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\'"])'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php
        deleted file mode 100644
        index 3dee0921..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php
        +++ /dev/null
        @@ -1,159 +0,0 @@
        - 'LOLcode',
        -    'COMMENT_SINGLE' => array('BTW'),
        -    'COMMENT_MULTI' => array('BTW','WTB'),
        -    'COMMENT_REGEXP' => array(
        -        1 => "/\bBTW\b.*$/im",
        -        2 => "/(^|\b)(?:OBTW\b.+?\bTLDR|LOL\b.+?\/LOL)(\b|$)/si"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        1 => '/:[)>o":]/',
        -        2 => '/:\([\da-f]+\)/i',
        -        3 => '/:\{\w+\}/i',
        -        4 => '/:\[\w+\]/i',
        -        ),
        -    'KEYWORDS' => array(
        -        //Statements
        -        1 => array(
        -            'VISIBLE', 'HAI', 'KTHX', 'KTHXBYE', 'SMOOSH', 'GIMMEH', 'PLZ',
        -            'ON', 'INVISIBLE', 'R', 'ITZ', 'GTFO', 'COMPLAIN', 'GIMME',
        -
        -            'OPEN', 'FILE', 'I HAS A', 'AWSUM THX', 'O NOES', 'CAN', 'HAS', 'HAZ',
        -            'HOW DOES I', 'IF U SAY SO', 'FOUND YR', 'BORROW', 'OWN', 'ALONG',
        -            'WITH', 'WIT', 'LOOK', 'AT', 'AWSUM', 'THX'
        -            ),
        -        //Conditionals
        -        2 => array(
        -            'IZ', 'YARLY', 'NOWAI', 'WTF?', 'MEBBE', 'OMG', 'OMGWTF',
        -            'ORLY?', 'OF', 'NOPE', 'SO', 'IM', 'MAI',
        -
        -            'O RLY?', 'SUM', 'BOTH SAEM', 'DIFFRINT', 'BOTH', 'EITHER', 'WON',
        -            'DIFF', 'PRODUKT', 'QUOSHUNT', 'MOD', 'MKAY', 'OK', 'THING',
        -            'BIGNESS'
        -            ),
        -        //Repetition
        -        3 => array(
        -            'IN', 'OUTTA', 'LOOP', 'WHILE'
        -            ),
        -        //Operators \Math
        -        4 => array(
        -            'AN', 'AND', 'NOT', 'UP', 'YR', 'UPPIN', 'NERF', 'NERFIN', 'NERFZ',
        -            'SMASHING', 'UR', 'KINDA', 'LIKE', 'SAEM', 'BIG', 'SMALL',
        -            'BIGGR', 'SMALLR', 'BIGGER', 'SMALLER', 'GOOD', 'CUTE', 'THAN'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '.', ',', '?',
        -        '!!'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #008000;',
        -            2 => 'color: #000080;',
        -            3 => 'color: #000080;',
        -            4 => 'color: #800000;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #666666; style: italic;',
        -            1 => 'color: #666666; style: italic;',
        -            2 => 'color: #666666; style: italic;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #00F;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #0F0;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #00F;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => 'color: #00F;'
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'SPACE_AS_WHITESPACE' => true
        -            )
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php
        deleted file mode 100644
        index e94f5df8..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php
        +++ /dev/null
        @@ -1,316 +0,0 @@
        - 'Lotus Notes @Formulas',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array('REM' => ';'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array (
        -            '[ZoomPreview]', '[WorkspaceStackReplicaIcons]',
        -            '[WorkspaceProperties]', '[WindowWorkspace]',
        -            '[WindowTile]', '[WindowRestore]', '[WindowNext]',
        -            '[WindowMinimizeAll]', '[WindowMinimize]', '[WindowMaximizeAll]',
        -            '[WindowMaximize]', '[WindowCascade]', '[ViewSwitchForm]',
        -            '[ViewShowUnread]', '[ViewShowServerNames]', '[ViewShowSearchBar]',
        -            '[ViewShowRuler]', '[ViewShowPageBreaks]', '[ViewShowOnlyUnread]',
        -            '[ViewShowOnlySelected]', '[ViewShowOnlySearchResults]',
        -            '[ViewShowOnlyCategories]', '[ViewShowObject]',
        -            '[ViewShowFieldHelp]', '[ViewRenamePerson]', '[ViewRefreshUnread]',
        -            '[ViewRefreshFields]', '[ViewNavigatorsNone]',
        -            '[ViewNavigatorsFolders]', '[ViewMoveName]', '[ViewHorizScrollbar]',
        -            '[ViewExpandWithChildren]', '[ViewExpandAll]', '[ViewExpand]',
        -            '[ViewCollapseAll]', '[ViewCollapse]', '[ViewChange]',
        -            '[ViewCertify]', '[ViewBesideFolders]', '[ViewBelowFolders]',
        -            '[ViewArrangeIcons]', '[V3EditPrevField]', '[V3EditNextField]',
        -            '[UserIDSwitch]', '[UserIDSetPassword]', '[UserIDMergeCopy]',
        -            '[UserIDInfo]', '[UserIDEncryptionKeys]', '[UserIDCreateSafeCopy]',
        -            '[UserIDClearPassword]', '[UserIDCertificates]',
        -            '[ToolsUserLogoff]', '[ToolsSpellCheck]', '[ToolsSmartIcons]',
        -            '[ToolsSetupUserSetup]', '[ToolsSetupPorts]', '[ToolsSetupMail]',
        -            '[ToolsSetupLocation]', '[ToolsScanUnreadSelected]',
        -            '[ToolsScanUnreadPreferred]', '[ToolsScanUnreadChoose]',
        -            '[ToolsRunMacro]', '[ToolsRunBackgroundMacros]', '[ToolsReplicate]',
        -            '[ToolsRefreshSelectedDocs]', '[ToolsRefreshAllDocs]',
        -            '[ToolsMarkSelectedUnread]', '[ToolsMarkSelectedRead]',
        -            '[ToolsMarkAllUnread]', '[ToolsMarkAllRead]', '[ToolsHangUp]',
        -            '[ToolsCategorize]', '[ToolsCall]', '[TextUnderline]',
        -            '[TextSpacingSingle]', '[TextSpacingOneAndaHalf]',
        -            '[TextSpacingDouble]', '[TextSetFontSize]', '[TextSetFontFace]',
        -            '[TextSetFontColor]', '[TextReduceFont]', '[TextPermanentPen]',
        -            '[TextParagraphStyles]', '[TextParagraph]', '[TextOutdent]',
        -            '[TextNumbers]', '[TextNormal]', '[TextItalic]', '[TextFont]',
        -            '[TextEnlargeFont]', '[TextCycleSpacing]', '[TextBullet]',
        -            '[TextBold]', '[TextAlignRight]', '[TextAlignNone]',
        -            '[TextAlignLeft]', '[TextAlignFull]', '[TextAlignCenter]',
        -            '[SwitchView]', '[SwitchForm]', '[StyleCycleKey]',
        -            '[SmartIconsNextSet]', '[SmartIconsFloating]', '[ShowProperties]',
        -            '[ShowHidePreviewPane]', '[ShowHideParentPreview]',
        -            '[ShowHideLinkPreview]', '[ShowHideIMContactList]',
        -            '[SetCurrentLocation]', '[SendInstantMessage]',
        -            '[SectionRemoveHeader]', '[SectionProperties]',
        -            '[SectionExpandAll]', '[SectionExpand]', '[SectionDefineEditors]',
        -            '[SectionCollapseAll]', '[SectionCollapse]', '[RunScheduledAgents]',
        -            '[RunAgent]', '[ReplicatorStop]', '[ReplicatorStart]',
        -            '[ReplicatorSendReceiveMail]', '[ReplicatorSendMail]',
        -            '[ReplicatorReplicateWithServer]', '[ReplicatorReplicateSelected]',
        -            '[ReplicatorReplicateNext]', '[ReplicatorReplicateHigh]',
        -            '[Replicator]', '[RenameDatabase]', '[RemoveFromFolder]',
        -            '[RemoteDebugLotusScript]', '[ReloadWindow]', '[RefreshWindow]',
        -            '[RefreshParentNote]', '[RefreshHideFormulas]', '[RefreshFrame]',
        -            '[PublishDatabase]', '[PictureProperties]', '[PasteBitmapAsObject]',
        -            '[PasteBitmapAsBackground]', '[OpenView]', '[OpenPage]',
        -            '[OpenNavigator]', '[OpenInNewWindow]', '[OpenHelpDocument]',
        -            '[OpenFrameset]', '[OpenDocument]', '[OpenCalendar]',
        -            '[ObjectProperties]', '[ObjectOpen]', '[ObjectDisplayAs]',
        -            '[NavPrevUnread]', '[NavPrevSelected]', '[NavPrevMain]',
        -            '[NavPrev]', '[NavNextUnread]', '[NavNextSelected]',
        -            '[NavNextMain]', '[NavNext]', '[NavigatorTest]',
        -            '[NavigatorProperties]', '[NavigateToBacklink]',
        -            '[NavigatePrevUnread]', '[NavigatePrevSelected]',
        -            '[NavigatePrevMain]', '[NavigatePrevHighlight]', '[NavigatePrev]',
        -            '[NavigateNextUnread]', '[NavigateNextSelected]',
        -            '[NavigateNextMain]', '[NavigateNextHighlight]', '[NavigateNext]',
        -            '[MoveToTrash]', '[MailSendPublicKey]', '[MailSendEncryptionKey]',
        -            '[MailSendCertificateRequest]', '[MailSend]', '[MailScanUnread]',
        -            '[MailRequestNewPublicKey]', '[MailRequestNewName]',
        -            '[MailRequestCrossCert]', '[MailOpen]', '[MailForwardAsAttachment]',
        -            '[MailForward]', '[MailComposeMemo]', '[MailAddress]',
        -            '[LayoutProperties]', '[LayoutElementSendToBack]',
        -            '[LayoutElementProperties]', '[LayoutElementBringToFront]',
        -            '[LayoutAddText]', '[LayoutAddGraphic]', '[InsertSubform]',
        -            '[HotspotProperties]', '[HotspotClear]', '[HelpUsingDatabase]',
        -            '[HelpAboutNotes]', '[HelpAboutDatabase]', '[GoUpLevel]',
        -            '[FormTestDocument]', '[FormActions]', '[FolderRename]',
        -            '[FolderProperties]', '[FolderMove]', '[FolderExpandWithChildren]',
        -            '[FolderExpandAll]', '[FolderExpand]', '[FolderDocuments]',
        -            '[FolderCustomize]', '[FolderCollapse]', '[Folder]',
        -            '[FindFreeTimeDialog]', '[FileSaveNewVersion]', '[FileSave]',
        -            '[FilePrintSetup]', '[FilePrint]', '[FilePageSetup]',
        -            '[FileOpenDBRepID]', '[FileOpenDatabase]', '[FileNewReplica]',
        -            '[FileNewDatabase]', '[FileImport]', '[FileFullTextUpdate]',
        -            '[FileFullTextInfo]', '[FileFullTextDelete]',
        -            '[FileFullTextCreate]', '[FileExport]', '[FileExit]',
        -            '[FileDatabaseUseServer]', '[FileDatabaseRemove]',
        -            '[FileDatabaseInfo]', '[FileDatabaseDelete]', '[FileDatabaseCopy]',
        -            '[FileDatabaseCompact]', '[FileDatabaseACL]', '[FileCloseWindow]',
        -            '[ExitNotes]', '[Execute]', '[ExchangeUnreadMarks]', '[EmptyTrash]',
        -            '[EditUp]', '[EditUntruncate]', '[EditUndo]', '[EditTop]',
        -            '[EditTableInsertRowColumn]', '[EditTableFormat]',
        -            '[EditTableDeleteRowColumn]', '[EditShowHideHiddenChars]',
        -            '[EditSelectByDate]', '[EditSelectAll]', '[EditRight]',
        -            '[EditRestoreDocument]', '[EditResizePicture]',
        -            '[EditQuoteSelection]', '[EditProfileDocument]', '[EditProfile]',
        -            '[EditPrevField]', '[EditPhoneNumbers]', '[EditPasteSpecial]',
        -            '[EditPaste]', '[EditOpenLink]', '[EditNextField]',
        -            '[EditMakeDocLink]', '[EditLocations]', '[EditLinks]', '[EditLeft]',
        -            '[EditInsertText]', '[EditInsertTable]', '[EditInsertPopup]',
        -            '[EditInsertPageBreak]', '[EditInsertObject]',
        -            '[EditInsertFileAttachment]', '[EditInsertButton]',
        -            '[EditIndentFirstLine]', '[EditIndent]', '[EditHorizScrollbar]',
        -            '[EditHeaderFooter]', '[EditGotoField]', '[EditFindNext]',
        -            '[EditFindInPreview]', '[EditFind]', '[EditEncryptionKeys]',
        -            '[EditDown]', '[EditDocument]', '[EditDetach]', '[EditDeselectAll]',
        -            '[EditCut]', '[EditCopy]', '[EditClear]', '[EditButton]',
        -            '[EditBottom]', '[DiscoverFolders]', '[Directories]',
        -            '[DialingRules]', '[DesignViewSelectFormula]', '[DesignViews]',
        -            '[DesignViewNewColumn]', '[DesignViewFormFormula]',
        -            '[DesignViewEditActions]', '[DesignViewColumnDef]',
        -            '[DesignViewAttributes]', '[DesignViewAppendColumn]',
        -            '[DesignSynopsis]', '[DesignSharedFields]', '[DesignReplace]',
        -            '[DesignRefresh]', '[DesignMacros]', '[DesignIcon]',
        -            '[DesignHelpUsingDocument]', '[DesignHelpAboutDocument]',
        -            '[DesignFormWindowTitle]', '[DesignFormUseField]',
        -            '[DesignFormShareField]', '[DesignForms]', '[DesignFormNewField]',
        -            '[DesignFormFieldDef]', '[DesignFormAttributes]',
        -            '[DesignDocumentInfo]', '[DebugLotusScript]',
        -            '[DatabaseReplSettings]', '[DatabaseDelete]', '[CreateView]',
        -            '[CreateTextbox]', '[CreateSubForm]', '[CreateSection]',
        -            '[CreateRectangularHotspot]', '[CreateRectangle]',
        -            '[CreatePolyline]', '[CreatePolygon]', '[CreateNavigator]',
        -            '[CreateLayoutRegion]', '[CreateForm]', '[CreateFolder]',
        -            '[CreateEllipse]', '[CreateControlledAccessSection]',
        -            '[CreateAgent]', '[CreateAction]', '[CopySelectedAsTable]',
        -            '[ComposeWithReference]', '[Compose]', '[CloseWindow]', '[Clear]',
        -            '[ChooseFolders]', '[CalendarGoTo]', '[CalendarFormat]',
        -            '[AttachmentView]', '[AttachmentProperties]', '[AttachmentLaunch]',
        -            '[AttachmentDetachAll]', '[AgentTestRun]', '[AgentSetServerName]',
        -            '[AgentRun]', '[AgentLog]', '[AgentEnableDisable]', '[AgentEdit]',
        -            '[AdminTraceConnection]', '[AdminStatisticsConfig]',
        -            '[AdminSendMailTrace]', '[AdminRemoteConsole]',
        -            '[AdminRegisterUser]', '[AdminRegisterServer]',
        -            '[AdminRegisterFromFile]', '[AdminOutgoingMail]',
        -            '[AdminOpenUsersView]', '[AdminOpenStatistics]',
        -            '[AdminOpenServersView]', '[AdminOpenServerLog]',
        -            '[AdminOpenGroupsView]', '[AdminOpenCertLog]', '[AdminOpenCatalog]',
        -            '[AdminOpenAddressBook]', '[AdminNewOrgUnit]',
        -            '[AdminNewOrganization]', '[Administration]',
        -            '[AdminIDFileSetPassword]', '[AdminIDFileExamine]',
        -            '[AdminIDFileClearPassword]', '[AdminDatabaseQuotas]',
        -            '[AdminDatabaseAnalysis]', '[AdminCrossCertifyKey]',
        -            '[AdminCrossCertifyIDFile]', '[AdminCreateGroup]', '[AdminCertify]',
        -            '[AddToIMContactList]', '[AddDatabaseRepID]', '[AddDatabase]',
        -            '[AddBookmark]'
        -            ),
        -        2 => array(
        -            'SELECT', 'FIELD', 'ENVIRONMENT', 'DEFAULT', '@Zone ', '@Yesterday',
        -            '@Yes', '@Year', '@Word', '@Wide', '@While', '@Weekday',
        -            '@WebDbName', '@ViewTitle', '@ViewShowThisUnread', '@Version',
        -            '@VerifyPassword', '@ValidateInternetAddress', '@V4UserAccess',
        -            '@V3UserName', '@V2If', '@UserRoles', '@UserPrivileges',
        -            '@UserNamesList', '@UserNameLanguage', '@UserName', '@UserAccess',
        -            '@UrlQueryString', '@URLOpen', '@URLHistory', '@URLGetHeader',
        -            '@URLEncode', '@URLDecode', '@UpperCase', '@UpdateFormulaContext',
        -            '@Unique', '@UndeleteDocument', '@Unavailable', '@True', '@Trim',
        -            '@Transform', '@ToTime', '@ToNumber', '@Tomorrow', '@Today',
        -            '@TimeZoneToText', '@TimeToTextInZone', '@TimeMerge', '@Time',
        -            '@ThisValue', '@ThisName', '@TextToTime', '@TextToNumber', '@Text',
        -            '@TemplateVersion', '@Tan', '@Sum', '@Success', '@Subset',
        -            '@StatusBar', '@Sqrt', '@Soundex', '@Sort', '@Sin', '@Sign',
        -            '@SetViewInfo', '@SetTargetFrame', '@SetProfileField',
        -            '@SetHTTPHeader', '@SetField', '@SetEnvironment', '@SetDocField',
        -            '@Set', '@ServerName', '@ServerAccess', '@Select', '@Second',
        -            '@Round', '@RightBack', '@Right', '@Return', '@Responses',
        -            '@ReplicaID', '@ReplaceSubstring', '@Replace', '@Repeat',
        -            '@RegQueryValue', '@RefreshECL', '@Random', '@ProperCase',
        -            '@Prompt', '@Power', '@PostedCommand', '@PolicyIsFieldLocked',
        -            '@Platform', '@PickList', '@Pi', '@PasswordQuality', '@Password',
        -            '@OrgDir', '@OptimizeMailAddress', '@OpenInNewWindow', '@Now',
        -            '@Nothing', '@NoteID', '@No', '@NewLine', '@Narrow', '@NameLookup',
        -            '@Name', '@Month', '@Modulo', '@Modified', '@Minute', '@Min',
        -            '@MiddleBack', '@Middle', '@Member', '@Max', '@Matches',
        -            '@MailSignPreference', '@MailSend', '@MailSavePreference',
        -            '@MailEncryptSentPreference', '@MailEncryptSavedPreference',
        -            '@MailDbName', '@LowerCase', '@Log', '@Locale', '@Ln', '@Like',
        -            '@Length', '@LeftBack', '@Left', '@LDAPServer', '@LaunchApp',
        -            '@LanguagePreference', '@Keywords', '@IsVirtualizedDirectory',
        -            '@IsValid', '@IsUsingJavaElement', '@IsUnavailable', '@IsTime',
        -            '@IsText', '@IsResponseDoc', '@IsNumber', '@IsNull', '@IsNotMember',
        -            '@IsNewDoc', '@IsModalHelp', '@IsMember', '@IsExpandable',
        -            '@IsError', '@IsEmbeddedInsideWCT', '@IsDocTruncated',
        -            '@IsDocBeingSaved', '@IsDocBeingRecalculated', '@IsDocBeingMailed',
        -            '@IsDocBeingLoaded', '@IsDocBeingEdited', '@IsDB2', '@IsCategory',
        -            '@IsAvailable', '@IsAppInstalled', '@IsAgentEnabled', '@Integer',
        -            '@InheritedDocumentUniqueID', '@Implode', '@IfError', '@If',
        -            '@Hour', '@HashPassword', '@HardDeleteDocument', '@GetViewInfo',
        -            '@GetProfileField', '@GetPortsList', '@GetIMContactListGroupNames',
        -            '@GetHTTPHeader', '@GetFocusTable', '@GetField', '@GetDocField',
        -            '@GetCurrentTimeZone', '@GetAddressBooks', '@FormLanguage', '@For',
        -            '@FontList', '@FloatEq', '@FileDir', '@False', '@Failure',
        -            '@Explode', '@Exp', '@Eval', '@Error', '@Environment', '@Ends',
        -            '@EnableAlarms', '@Elements', '@EditUserECL', '@EditECL',
        -            '@DoWhile', '@Domain', '@DocumentUniqueID', '@DocSiblings',
        -            '@DocParentNumber', '@DocOmmittedLength', '@DocNumber', '@DocMark',
        -            '@DocLock', '@DocLevel', '@DocLength', '@DocFields',
        -            '@DocDescendants', '@DocChildren', '@Do', '@DialogBox',
        -            '@DeleteField', '@DeleteDocument', '@DDETerminate', '@DDEPoke',
        -            '@DDEInitiate', '@DDEExecute', '@DbTitle', '@DbName', '@DbManager',
        -            '@DbLookup', '@DbExists', '@DbCommand', '@DbColumn', '@DB2Schema',
        -            '@Day', '@Date', '@Created', '@Count', '@Cos', '@Contains',
        -            '@ConfigFile', '@Compare', '@Command', '@ClientType',
        -            '@CheckFormulaSyntax', '@CheckAlarms', '@Char', '@Certificate',
        -            '@BusinessDays', '@BrowserInfo', '@Begins', '@Author',
        -            '@Attachments', '@AttachmentNames', '@AttachmentModifiedTimes',
        -            '@AttachmentLengths', '@ATan2', '@ATan', '@ASin', '@Ascii',
        -            '@AllDescendants', '@AllChildren', '@All', '@AdminECLIsLocked',
        -            '@Adjust', '@AddToFolder', '@ACos', '@Accessed', '@AbstractSimple',
        -            '@Abstract', '@Abs'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #800000;',
        -            2 => 'color: #0000FF;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #FF00FF;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF00FF;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000AA;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 2
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php
        deleted file mode 100644
        index e5a8971f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php
        +++ /dev/null
        @@ -1,189 +0,0 @@
        - 'LotusScript',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array('%REM' => '%END REM'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"' , "|"),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array (
        -            'Yield', 'Year', 'Xor', 'Write', 'With', 'Width', 'While', 'Wend',
        -            'Weekday', 'VarType', 'Variant', 'Val', 'UString', 'UString$',
        -            'UseLSX', 'Use', 'Until', 'Unlock', 'Unicode', 'Uni', 'UChr',
        -            'UChr$', 'UCase', 'UCase$', 'UBound', 'TypeName', 'Type', 'TRUE',
        -            'Trim', 'Trim$', 'Today', 'To', 'TimeValue', 'TimeSerial', 'Timer',
        -            'TimeNumber', 'Time', 'Time$', 'Then', 'Text', 'Tan', 'Tab', 'Sub',
        -            'StrToken', 'StrToken$', 'StrRightBack', 'StrRightBack$',
        -            'StrRight', 'StrRight$', 'StrLeftBack', 'StrLeftBack$', 'StrLeft',
        -            'StrLeft$', 'String', 'String$', 'StrConv', 'StrCompare', 'StrComp',
        -            'Str', 'Str$', 'Stop', 'Step', 'Static', 'Sqr', 'Split', 'Spc',
        -            'Space', 'Space$', 'Sleep', 'Single', 'Sin', 'Shell', 'Shared',
        -            'Sgn', 'SetFileAttr', 'SetAttr', 'Set', 'SendKeys', 'Select',
        -            'Seek', 'Second', 'RTrim', 'RTrim$', 'RSet', 'Round', 'Rnd',
        -            'RmDir', 'RightC', 'RightC$', 'RightBP', 'RightBP$', 'RightB',
        -            'RightB$', 'Right', 'Right$', 'Return', 'Resume', 'Reset',
        -            'Replace', 'Remove', 'Rem', 'ReDim', 'Read', 'Randomize',
        -            'Random', 'Put', 'Public', 'Property', 'Private', 'Print',
        -            'Preserve', 'Pitch', 'PI', 'Output', 'Or', 'Option', 'Open', 'On',
        -            'Oct', 'Oct$', 'NULL', 'Now', 'NOTHING', 'Not', 'NoPitch', 'NoCase',
        -            'Next', 'New', 'Name', 'MsgBox', 'Month', 'Mod', 'MkDir', 'Minute',
        -            'MidC', 'MidC$', 'MidBP', 'MidBP$', 'MidB', 'MidB$', 'Mid', 'Mid$',
        -            'MessageBox', 'Me', 'LTrim', 'LTrim$', 'LSServer', 'LSI_Info',
        -            'LSet', 'Loop', 'Long', 'Log', 'LOF', 'Lock', 'LOC', 'LMBCS',
        -            'ListTag', 'List', 'Line', 'Like', 'Lib', 'Let', 'LenC', 'LenBP',
        -            'LenB', 'Len', 'LeftC', 'LeftC$', 'LeftBP', 'LeftBP$', 'LeftB',
        -            'LeftB$', 'Left', 'Left$', 'LCase', 'LCase$', 'LBound', 'Kill',
        -            'Join', 'IsUnknown', 'IsScalar', 'IsObject', 'IsNumeric', 'IsNull',
        -            'IsList', 'IsEmpty', 'IsElement', 'IsDate', 'IsArray', 'IsA', 'Is',
        -            'Integer', 'Int', 'InStrC', 'InStrBP', 'InStrB', 'InStr', 'InputBP',
        -            'InputBP$', 'InputBox', 'InputBox$', 'InputB', 'InputB$', 'Input',
        -            'Input$', 'In', 'IMSetMode', 'Implode', 'Implode$', 'Imp',
        -            'IMEStatus', 'If', 'Hour', 'Hex', 'Hex$', 'Goto', 'GoSub',
        -            'GetThreadInfo', 'GetFileAttr', 'GetAttr', 'Get', 'Function',
        -            'FullTrim', 'From', 'FreeFile', 'Fraction', 'Format', 'Format$',
        -            'ForAll', 'For', 'Fix', 'FileLen', 'FileDateTime', 'FileCopy',
        -            'FileAttr', 'FALSE', 'Explicit', 'Exp', 'Exit', 'Execute', 'Event',
        -            'Evaluate', 'Error', 'Error$', 'Err', 'Erl', 'Erase', 'Eqv', 'EOF',
        -            'Environ', 'Environ$', 'End', 'ElseIf', 'Else', 'Double', 'DoEvents',
        -            'Do', 'Dir', 'Dir$', 'Dim', 'DestroyLock', 'Delete', 'DefVar',
        -            'DefStr', 'DefSng', 'DefLng', 'DefInt', 'DefDbl', 'DefCur',
        -            'DefByte', 'DefBool', 'Declare', 'Day', 'DateValue', 'DateSerial',
        -            'DateNumber', 'Date', 'Date$', 'DataType', 'CVDate', 'CVar',
        -            'Currency', 'CurDrive', 'CurDrive$', 'CurDir', 'CurDir$', 'CStr',
        -            'CSng', 'CreateLock', 'Cos', 'Const', 'Compare', 'Command',
        -            'Command$', 'CodeUnlock', 'CodeLockCheck', 'CodeLock', 'Close',
        -            'CLng', 'Class', 'CInt', 'Chr', 'Chr$', 'ChDrive', 'ChDir', 'CDbl',
        -            'CDat', 'CCur', 'CByte', 'CBool', 'Case', 'Call', 'ByVal', 'Byte',
        -            'Boolean', 'Bind', 'Binary', 'Bin', 'Bin$', 'Beep', 'Base', 'Atn2',
        -            'Atn', 'ASin', 'Asc', 'As', 'ArrayUnique', 'ArrayReplace',
        -            'ArrayGetIndex', 'ArrayAppend', 'Append', 'AppActivate', 'Any',
        -            'And', 'Alias', 'ActivateApp', 'ACos', 'Access', 'Abs', '%Include',
        -            '%If', '%END', '%ElseIf', '%Else'
        -            ),
        -        2 => array (
        -            'NotesXSLTransformer', 'NotesXMLProcessor', 'NotesViewNavigator',
        -            'NotesViewEntryCollection', 'NotesViewEntry', 'NotesViewColumn',
        -            'NotesView', 'NotesUIWorkspace', 'NotesUIView', 'NotesUIScheduler',
        -            'NotesUIDocument', 'NotesUIDatabase', 'NotesTimer', 'NotesStream',
        -            'NotesSession', 'NotesSAXParser', 'NotesSAXException',
        -            'NotesSAXAttributeList', 'NotesRichTextTable', 'NotesRichTextTab',
        -            'NotesRichTextStyle', 'NotesRichTextSection', 'NotesRichTextRange',
        -            'NotesRichTextParagraphStyle', 'NotesRichTextNavigator',
        -            'NotesRichTextItem', 'NotesRichTextDocLink',
        -            'NotesReplicationEntry', 'NotesReplication', 'NotesRegistration',
        -            'NotesOutlineEntry', 'NotesOutline', 'NotesNoteCollection',
        -            'NotesNewsLetter', 'NotesName', 'NotesMIMEHeader',
        -            'NotesMIMEEntity', 'NotesLog', 'NotesItem', 'NotesInternational',
        -            'NotesForm', 'NotesEmbeddedObject', 'NotesDXLImporter',
        -            'NotesDXLExporter', 'NotesDOMXMLDeclNode', 'NotesDOMTextNode',
        -            'NotesDOMProcessingInstructionNode', 'NotesDOMParser',
        -            'NotesDOMNotationNode', 'NotesDOMNodeList', 'NotesDOMNode',
        -            'NotesDOMNamedNodeMap', 'NotesDOMEntityReferenceNode',
        -            'NotesDOMEntityNode', 'NotesDOMElementNode',
        -            'NotesDOMDocumentTypeNode', 'NotesDOMDocumentNode',
        -            'NotesDOMDocumentFragmentNode', 'NotesDOMCommentNode',
        -            'NotesDOMCharacterDataNote', 'NotesDOMCDATASectionNode',
        -            'NotesDOMAttributeNode', 'NotesDocumentCollection', 'NotesDocument',
        -            'NotesDbDirectory', 'NotesDateTime', 'NotesDateRange',
        -            'NotesDatabase', 'NotesColorObject', 'NotesAgent',
        -            'NotesAdministrationProcess', 'NotesACLEntry', 'NotesACL',
        -            'Navigator', 'Field', 'Button'
        -            )
        -        ) ,
        -    'SYMBOLS' => array(
        -        '(', ')'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #0000EE;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF00FF;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000AA;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #006600;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 2
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php
        deleted file mode 100644
        index acfd18e2..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php
        +++ /dev/null
        @@ -1,385 +0,0 @@
        - 'LScript',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -    //Yes, I'm aware these are out of order,
        -    //I had to rearrange and couldn't be bothered changing the numbers...
        -        7 => array(
        -            '@data', '@define', '@else', '@end', '@fpdepth', '@if', '@include',
        -            '@insert', '@library', '@localipc', '@name', '@save', '@script',
        -            '@sequence', '@version', '@warnings'
        -            ),
        -        1 => array(
        -            'break', 'case', 'continue', 'else', 'end', 'false', 'for',
        -            'foreach', 'if', 'return', 'switch', 'true', 'while',
        -            ),
        -        3 => array(
        -            'active', 'alertlevel', 'alpha', 'alphaprefix', 'animfilename', 'autokeycreate',
        -            'backdroptype', 'blue', 'boxthreshold', 'button',
        -            'channelsvisible', 'childrenvisible', 'compfg', 'compbg', 'compfgalpha',
        -            'coneangles', 'cosine', 'count', 'ctl', 'curFilename', 'curFrame',
        -            'currenttime', 'curTime', 'curType',
        -            'depth', 'diffshade', 'diffuse', 'dimensions', 'displayopts', 'dynamicupdate',
        -            'end', 'eta',
        -            'filename', 'flags', 'fogtype', 'fps', 'frame', 'frameend', 'frameheight',
        -            'framestart', 'framestep', 'framewidth',
        -            'generalopts', 'genus', 'geometry', 'gNorm', 'goal', 'green',
        -            'h', 'hasAlpha', 'height',
        -            'id', 'innerlimit', 'isColor',
        -            'keyCount', 'keys',
        -            'limiteregion', 'locked', 'luminous',
        -            'maxsamplesperpixel', 'minsamplesperpixel', 'mirror', 'motionx', 'motiony',
        -            'name', 'newFilename', 'newFrame', 'newTime', 'newType', 'null', 'numthreads',
        -            'objID', 'oPos', 'outerlimit', 'oXfrm',
        -            'parent', 'pixel', 'pixelaspect', 'point', 'points', 'pointcount', 'polNum',
        -            'polycount', 'polygon', 'polygons', 'postBehavior', 'preBehavior', 'previewend',
        -            'previewstart', 'previewstep',
        -            'range', 'rawblue', 'rawgreen', 'rawred', 'rayLength', 'raySource', 'red',
        -            'reflectblue', 'reflectgreen', 'reflectred', 'recursiondepth', 'renderend',
        -            'renderopts', 'renderstart', 'renderstep', 'rendertype', 'restlength',
        -            'rgbprefix', 'roughness',
        -            'selected', 'setColor', 'setPattern', 'shading', 'shadow', 'shadows',
        -            'shadowtype', 'size', 'source', 'special', 'specshade', 'specular',
        -            'spotsize', 'start', 'sx', 'sy', 'sz',
        -            'target', 'totallayers', 'totalpoints', 'totalpolygons', 'trans', 'transparency',
        -            'type',
        -            'value', 'view', 'visible', 'visibility',
        -            'w', 'width', 'wNorm', 'wPos', 'wXfrm',
        -            'x', 'xoffset',
        -            'y', 'yoffset',
        -            'z'
        -            ),
        -        4 => array(
        -            'addLayer', 'addParticle', 'alphaspot', 'ambient', 'asAsc', 'asBin',
        -            'asInt', 'asNum', 'asStr', 'asVec', 'attach', 'axislocks',
        -            'backdropColor', 'backdropRay', 'backdropSqueeze', 'bone', 'blurLength',
        -            'close', 'color', 'contains', 'copy', 'createKey',
        -            'deleteKey', 'detach', 'drawCircle', 'drawLine', 'drawPoint', 'drawText',
        -            'drawTriangle',
        -            'edit', 'eof', 'event',
        -            'firstChannel', 'firstLayer', 'firstSelect', 'focalLength', 'fogColor',
        -            'fogMaxAmount', 'fogMaxDist', 'fogMinAmount', 'fogMinDist',
        -            'fovAngles', 'fStop', 'firstChild', 'focalDistance',
        -            'get', 'getChannelGroup', 'getEnvelope', 'getForward', 'getKeyBias',
        -            'getKeyContinuity', 'getKeyCurve', 'getKeyHermite', 'getKeyTension',
        -            'getKeyTime', 'getKeyValue', 'getParticle', 'getPivot', 'getPosition',
        -            'getRight', 'getRotation', 'getSelect', 'getScaling', 'getTag', 'getTexture',
        -            'getUp', 'getValue', 'getWorldPosition', 'getWorldForward', 'getWorldRight',
        -            'getWorldRotation', 'getWorldUp', 'globalBlur', 'globalMask', 'globalResolution',
        -            'hasCCEnd', 'hasCCStart',
        -            'illuminate', 'indexOf', 'isAscii', 'isAlnum', 'isAlpha', 'isBone',
        -            'isCamera', 'isChannel', 'isChannelGroup', 'isCntrl', 'isCurve', 'isDigit',
        -            'isEnvelope', 'isImage', 'isInt', 'isLight', 'isLower', 'isMapped', 'isMesh',
        -            'isNil', 'isNum', 'IsOpen', 'isOriginal', 'isPrint', 'isPunct', 'isScene',
        -            'isSpace', 'isStr', 'isUpper', 'isValid', 'isVMap', 'isVec', 'isXDigit',
        -            'keyExists',
        -            'layer', 'layerName', 'layerVisible', 'limits', 'line', 'linecount', 'load', 'luma',
        -            'next', 'nextLayer', 'nextSelect', 'nextChannel', 'nextChild', 'nl',
        -            'offset', 'open',
        -            'pack', 'param', 'parse', 'paste', 'persist', 'polygonCount', 'position',
        -            'rayCast', 'rayTrace', 'read', 'readByte', 'readInt', 'readNumber',
        -            'readDouble', 'readShort', 'readString', 'readVector', 'reduce',
        -            'remParticle', 'renderCamera', 'reopen', 'replace', 'reset', 'restParam',
        -            'rewind', 'rgb', 'rgbambient', 'rgbcolor', 'rgbspot',
        -            'save', 'schemaPosition', 'select', 'set', 'setChannelGroup', 'setKeyBias',
        -            'setKeyContinuity', 'setKeyCurve',
        -            'setKeyHermite', 'setKeyTension', 'setKeyValue', 'setParticle', 'setPoints',
        -            'setTag', 'setValue', 'server', 'serverFlags', 'sortA', 'sortD', 'surface',
        -            'trunc',
        -            'write', 'writeln', 'writeByte', 'writeData', 'writeNumber', 'writeDouble',
        -            'writeShort', 'writeString', 'writeVector',
        -            'vertex', 'vertexCount',
        -            'zoomFactor'
        -            ),
        -        2 => array(
        -            'abs', 'acos', 'angle', 'append', 'ascii', 'asin', 'atan',
        -            'binary',
        -            'ceil', 'center', 'chdir', 'clearimage', 'cloned', 'comringattach',
        -            'comringdecode', 'comringdetach', 'comringencode', 'comringmsg', 'cos',
        -            'cosh', 'cot', 'cross2d', 'cross3d', 'csc', 'ctlstring', 'ctlinteger',
        -            'ctlnumber', 'ctlvector', 'ctldistance', 'ctlchoice', 'ctltext',
        -            'ctlcolor', 'ctlsurface', 'ctlfont', 'ctlpopup', 'ctledit', 'ctlpercent',
        -            'ctlangle', 'ctlrgb', 'ctlhsv', 'ctlcheckbox', 'ctlstate', 'ctlfilename',
        -            'ctlbutton', 'ctllistbox', 'ctlslider', 'ctlminislider', 'ctlsep', 'ctlimage',
        -            'ctltab', 'ctlallitems', 'ctlmeshitems', 'ctlcameraitems', 'ctllightitems',
        -            'ctlboneitems', 'ctlimageitems', 'ctlchannel', 'ctlviewport', 'Control_Management',
        -            'ctlpage', 'ctlgroup', 'ctlposition', 'ctlactive', 'ctlvisible', 'ctlalign',
        -            'ctlrefresh', 'ctlmenu', 'ctlinfo',
        -            'date', 'debug', 'deg', 'dot2d', 'dot3d', 'drawborder', 'drawbox', 'drawcircle',
        -            'drawelipse', 'drawerase', 'drawfillcircle', 'drawfillelipse', 'drawline',
        -            'drawpixel', 'drawtext', 'drawtextwidth', 'drawtextheight', 'dump',
        -            'error', 'exp', 'expose', 'extent',
        -            'fac', 'filecrc', 'filedelete', 'fileexists', 'filefind', 'filerename',
        -            'filestat', 'floor', 'format', 'frac', 'fullpath',
        -            'gamma', 'getdir', 'getenv', 'getfile', 'getfirstitem', 'getsep', 'getvalue',
        -            'globalrecall', 'globalstore',
        -            'hash', 'hex', 'hostBuild', 'hostVersion', 'hypot',
        -            'info', 'integer',
        -            'library', 'licenseId', 'lscriptVersion', 'load', 'loadimage', 'log', 'log10',
        -            'matchdirs', 'matchfiles', 'max', 'min', 'mkdir', 'mod', 'monend', 'moninit', 'monstep',
        -            'nil', 'normalize', 'number',
        -            'octal', 'overlayglyph',
        -            'parse', 'platform', 'pow',
        -            'rad', 'random', 'randu', 'range', 'read', 'readdouble', 'readInt', 'readNumber',
        -            'readShort', 'recall', 'regexp', 'reqabort', 'reqbegin', 'reqend', 'reqisopen',
        -            'reqkeyboard', 'reqopen', 'reqposition', 'reqpost', 'reqredraw',
        -            'reqsize', 'reqresize', 'requpdate', 'rmdir', 'round', 'runningUnder',
        -            'save', 'sec', 'select', 'selector', 'setdesc', 'setvalue', 'sin', 'sinh', 'size',
        -            'sizeof', 'sleep', 'spawn', 'split', 'sqrt', 'step', 'store', 'string', 'strleft',
        -            'strlower', 'strright', 'strsub', 'strupper',
        -            'tan', 'tanh', 'targetobject', 'terminate', 'text', 'time',
        -            'wait', 'warn', 'when', 'write', 'writeDouble', 'writeInt', 'writeNumber', 'writeShort',
        -            'var', 'vector', 'visitnodes', 'vmag',
        -            ),
        -        5 => array(
        -            'addcurve', 'addpoint', 'addpolygon', 'addquad', 'addtriangle', 'alignpols',
        -            'autoflex', 'axisdrill',
        -            'bend', 'bevel', 'boolean', 'boundingbox',
        -            'changepart', 'changesurface', 'close', 'closeall', 'cmdseq', 'copy', 'copysurface',
        -            'createsurface', 'cut',
        -            'deformregion', 'delete',
        -            'editbegin', 'editend', 'exit', 'extrude',
        -            'fixedflex', 'flip', 'fontclear', 'fontcount', 'fontindex', 'fontload',
        -            'fontname', 'fracsubdivide', 'freezecurves',
        -            'getdefaultsurface',
        -            'jitter',
        -            'lathe', 'layerName', 'layerVisible', 'lyrbg', 'lyrdata', 'lyrempty', 'lyremptybg',
        -            'lyremptyfg', 'lyrfg', 'lyrsetbg', 'lyrsetfg', 'lyrswap',
        -            'magnet', 'make4patch', 'makeball', 'makebox', 'makecone', 'makedisc',
        -            'maketesball', 'maketext', 'mergepoints', 'mergepols', 'meshedit', 'mirror',
        -            'morphpols', 'move',
        -            'new', 'nextsurface',
        -            'paste', 'pathclone', 'pathextrude', 'pixel', 'pointcount', 'pointinfo',
        -            'pointmove', 'pole', 'polycount', 'polyinfo', 'polynormal', 'polypointcount',
        -            'polypoints', 'polysurface',
        -            'quantize',
        -            'railclone', 'railextrude', 'redo', 'removepols', 'rempoint', 'rempoly',
        -            'renamesurface', 'revert', 'rotate',
        -            'scale', 'selhide', 'selinvert', 'selmode', 'selpoint', 'selpolygon', 'selunhide',
        -            'selectvmap', 'setlayername', 'setobject', 'setpivot', 'setsurface', 'shapebevel',
        -            'shear', 'skinpols', 'smooth', 'smoothcurves', 'smoothscale', 'smoothshift',
        -            'soliddrill', 'splitpols', 'subdivide', 'swaphidden',
        -            'taper', 'triple', 'toggleCCend', 'toggleCCstart', 'togglepatches', 'twist',
        -            'undo', 'undogroupend', 'undogroupbegin', 'unifypols', 'unweld',
        -            'vortex',
        -            'weldaverage', 'weldpoints'
        -            ),
        -        6 => array(
        -            'About', 'AboutOpenGL', 'AdaptiveSampling', 'AdaptiveThreshold',
        -            'AddAreaLight', 'AddBone', 'AddButton', 'AddCamera', 'AddChildBone',
        -            'AddDistantLight', 'AddEnvelope', 'AddLinearLight', 'AddNull',
        -            'AddPartigon', 'AddPlugins', 'AddPointLight', 'AddPosition',
        -            'AddRotation', 'AddScale', 'AddSpotlight', 'AddToSelection',
        -            'AdjustRegionTool', 'AffectCaustics', 'AffectDiffuse', 'AffectOpenGL',
        -            'AffectSpecular', 'AlertLevel', 'AmbientColor', 'AmbientIntensity',
        -            'Antialiasing', 'ApertureHeight', 'ApplyServer', 'AreaLight',
        -            'AutoConfirm', 'AutoFrameAdvance', 'AutoKey',
        -            'BackdropColor', 'BackView', 'BController', 'BLimits', 'BLurLength', 'BoneActive',
        -            'BoneFalloffType', 'BoneJointComp', 'BoneJointCompAmounts', 'BoneJointCompParent',
        -            'BoneLimitedRange', 'BoneMaxRange', 'BoneMinRange', 'BoneMuscleFlex',
        -            'BoneMuscleFlexAmounts', 'BoneMuscleFlexParent', 'BoneNormalization',
        -            'BoneRestLength', 'BoneRestPosition', 'BoneRestRotation', 'BoneSource',
        -            'BoneStrength', 'BoneStrengthMultiply', 'BoneWeightMapName', 'BoneWeightMapOnly',
        -            'BoneWeightShade', 'BoneXRay', 'BottomView', 'BoundingBoxThreshold',
        -            'BStiffness',
        -            'CacheCaustics', 'CacheRadiosity', 'CacheShadowMap',
        -            'CameraMask', 'CameraView', 'CameraZoomTool', 'CastShadow', 'CausticIntensity',
        -            'CenterItem', 'CenterMouse', 'ChangeTool', 'ClearAllBones', 'ClearAllCameras',
        -            'ClearAllLights', 'ClearAllObjects', 'ClearAudio', 'ClearScene', 'ClearSelected',
        -            'Clone', 'CommandHistory', 'CommandInput', 'Compositing', 'ConeAngleTool',
        -            'ContentDirectory', 'CreateKey',
        -            'DecreaseGrid', 'DeleteKey', 'DepthBufferAA', 'DepthOfField', 'DisplayOptions',
        -            'DistantLight', 'DrawAntialiasing', 'DrawBones', 'DrawChildBones', 'DynamicUpdate',
        -            'EditBones', 'EditCameras', 'EditKeys', 'EditLights',
        -            'EditMenus', 'EditObjects', 'EditPlugins', 'EditServer', 'EnableCaustics',
        -            'EnableDeformations', 'EnableIK', 'EnableLensFlares', 'EnableRadiosity', 'EnableServer',
        -            'EnableShadowMaps', 'EnableVIPER', 'EnableVolumetricLights', 'EnableXH',
        -            'EnableYP', 'EnableZB', 'EnahancedAA', 'ExcludeLight', 'ExcludeObject',
        -            'EyeSeparation',
        -            'FasterBones', 'FirstFrame', 'FirstItem', 'FitAll', 'FitSelected',
        -            'FlareIntensity', 'FlareOptions', 'FocalDistance', 'FogColor', 'FogMaxAmount',
        -            'FogMaxDistance', 'FogMinAmount', 'FogMinDistance', 'FogType', 'FractionalFrames',
        -            'FrameSize', 'FramesPerSecond', 'FrameStep', 'FreePreview', 'FrontView', 'FullTimeIK',
        -            'GeneralOptions', 'Generics', 'GlobalApertureHeight', 'GlobalBlurLength',
        -            'GlobalFrameSize', 'GlobalIllumination', 'GlobalMaskPosition', 'GlobalMotionBlur',
        -            'GlobalParticleBlur', 'GlobalPixelAspect', 'GlobalResolutionMulitplier', 'GoalItem',
        -            'GoalStrength', 'GoToFrame', 'GradientBackdrop', 'GraphEditor', 'GridSize', 'GroundColor',
        -            'HController', 'HideToolbar', 'HideWindows', 'HLimits', 'HStiffness',
        -            'ImageEditor', 'ImageProcessing', 'IncludeLight', 'IncludeObject', 'IncreaseGrid',
        -            'IndirectBounces', 'Item_SetWindowPos', 'ItemActive', 'ItemColor', 'ItemLock',
        -            'ItemProperties', 'ItemVisibilty',
        -            'KeepGoalWithinReach',
        -            'LastFrame', 'LastItem', 'LastPluginInterface', 'Layout_SetWindowPos',
        -            'Layout_SetWindowSize', 'LeftView', 'LensFlare', 'LensFStop', 'LightColor',
        -            'LightConeAngle', 'LightEdgeAngle', 'LightFalloffType', 'LightIntensity',
        -            'LightIntensityTool', 'LightQuality', 'LightRange', 'LightView', 'LimitB',
        -            'LimitDynamicRange', 'LimitedRegion', 'LimitH', 'LimitP', 'LinearLight',
        -            'LoadAudio', 'LoadFromScene', 'LoadMotion', 'LoadObject', 'LoadObjectLayer',
        -            'LoadPreview', 'LoadScene', 'LocalCoordinateSystem',
        -            'MakePreview', 'MaskColor', 'MaskPosition', 'MasterPlugins', 'MatchGoalOrientation',
        -            'MatteColor', 'MatteObject', 'MetaballResolution', 'Model', 'MorphAmount',
        -            'MorphAmountTool', 'MorphMTSE', 'MorphSurfaces', 'MorphTarget', 'MotionBlur',
        -            'MotionBlurDOFPreview', 'MotionOptions', 'MovePathTool', 'MovePivotTool', 'MoveTool',
        -            'NadirColor', 'NetRender', 'NextFrame', 'NextItem', 'NextKey', 'NextSibling',
        -            'NextViewLayout', 'NoiseReduction', 'Numeric',
        -            'ObjectDissolve',
        -            'ParentCoordinateSystem', 'ParentInPlace', 'ParentItem',
        -            'ParticleBlur', 'PathAlignLookAhead', 'PathAlignMaxLookSteps', 'PathAlignReliableDist',
        -            'Pause', 'PController', 'PerspectiveView',
        -            'PivotPosition', 'PivotRotation', 'PixelAspect', 'PlayAudio', 'PlayBackward',
        -            'PlayForward', 'PlayPreview', 'PLimits', 'PointLight', 'PolygonEdgeColor',
        -            'PolygonEdgeFlags', 'PolygonEdgeThickness', 'PolygonEdgeZScale', 'PolygonSize',
        -            'Position', 'Presets', 'PreviewFirstFrame', 'PreviewFrameStep', 'PreviewLastFrame',
        -            'PreviewOptions', 'PreviousFrame', 'PreviousItem', 'PreviousKey', 'PreviousSibling',
        -            'PreviousViewLayout', 'PStiffness',
        -            'Quit',
        -            'RadiosityIntensity', 'RadiosityTolerance', 'RadiosityType', 'RayRecursionLimit',
        -            'RayTraceReflection', 'RayTraceShadows',
        -            'RayTraceTransparency', 'ReceiveShadow', 'RecentContentDirs', 'RecentScenes',
        -            'ReconstructionFilter', 'RecordMaxAngles', 'RecordMinAngles', 'RecordPivotRotation',
        -            'RecordRestPosition', 'Redraw', 'RedrawNow', 'Refresh', 'RefreshNow', 'RegionPosition',
        -            'RemoveEnvelope', 'RemoveFromSelection', 'RemoveServer', 'Rename', 'RenderFrame',
        -            'RenderOptions', 'RenderScene', 'RenderSelected', 'RenderThreads',
        -            'ReplaceObjectLayer', 'ReplaceWithNull', 'ReplaceWithObject', 'Reset',
        -            'ResolutionMultiplier', 'RestLengthTool', 'RightView', 'RotatePivotTool',
        -            'RotateTool', 'Rotation',
        -            'SaveAllObjects', 'SaveCommandList', 'SaveCommandMessages',
        -            'SaveEndomorph', 'SaveLight', 'SaveLWSC1', 'SaveMotion', 'SaveObject', 'SaveObjectCopy',
        -            'SavePreview', 'SaveScene', 'SaveSceneAs', 'SaveSceneCopy', 'SaveTransformed',
        -            'SaveViewLayout', 'Scale', 'Scene_SetWindowPos', 'Scene_SetWindowSize',
        -            'SceneEditor', 'SchematicPosition', 'SchematicView', 'SelectAllBones',
        -            'SelectAllCameras', 'SelectAllLights', 'SelectAllObjects', 'SelectByName',
        -            'SelectChild', 'SelectItem', 'SelectParent', 'SelfShadow', 'ShadowColor',
        -            'ShadowExclusion', 'ShadowMapAngle', 'ShadowMapFitCone', 'ShadowMapFuzziness',
        -            'ShadowMapSize', 'ShadowType', 'ShowCages', 'ShowFieldChart', 'ShowHandles',
        -            'ShowIKChains', 'ShowMotionPaths', 'ShowSafeAreas', 'ShowTargetLines',
        -            'ShrinkEdgesWithDistance', 'SingleView', 'SizeTool', 'SkelegonsToBones', 'SkyColor',
        -            'Spotlight', 'SquashTool', 'Statistics', 'StatusMsg', 'Stereoscopic', 'StretchTool',
        -            'SubdivisionOrder', 'SubPatchLevel', 'SurfaceEditor', 'Synchronize',
        -            'TargetItem', 'TopView',
        -            'UnaffectedByFog', 'UnaffectedByIK', 'Undo', 'UnseenByAlphaChannel', 'UnseenByCamera',
        -            'UnseenByRays', 'UseGlobalResolution', 'UseGlobalBlur', 'UseGlobalMask',
        -            'UseMorphedPositions',
        -            'ViewLayout', 'VIPER', 'VolumetricLighting',
        -            'VolumetricLightingOptions', 'VolumetricRadiosity', 'Volumetrics',
        -            'WorldCoordinateSystem',
        -            'XYView', 'XZView',
        -            'ZenithColor', 'ZoomFactor', 'ZoomIn', 'ZoomInX2', 'ZoomOut', 'ZoomOutX2', 'ZYView',
        -            'Camera', 'Channel', 'ChannelGroup', 'Envelope', 'File', 'Glyph', 'Icon', 'Image',
        -            'Light', 'Mesh', 'Scene', 'Surface', 'VMap'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '<', '>', '+', '-', '*', '/', '!', '%', '&', '@'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #FF6820; font-weight: bold;', //LS_COMMANDS
        -            3 => 'color: #007F7F; font-weight: bold;', //LS_MEMBERS
        -            4 => 'color: #800080; font-weight: bold;', //LS_METHODS
        -            5 => 'color: #51BD95; font-weight: bold;', //LS_MODELER
        -            6 => 'color: #416F85; font-weight: bold;', //LS_GENERAL
        -            7 => 'color: #C92929; font-weight: bold;'  //LS_COMMANDS (cont)
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #7F7F7F;',
        -            'MULTI' => 'color: #7F7F7F;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #0040A0;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #00C800;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #6953AC;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #0040A0;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\.)'
        -                ),
        -            4 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\.)'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php
        deleted file mode 100644
        index 1bbf1c05..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php
        +++ /dev/null
        @@ -1,1276 +0,0 @@
        - 'LSL2',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array( // flow control
        -            'do',
        -            'else',
        -            'for',
        -            'if',
        -            'jump',
        -            'return',
        -            'state',
        -            'while',
        -            ),
        -        2 => array( // manifest constants
        -            'ACTIVE',
        -            'AGENT',
        -            'AGENT_ALWAYS_RUN',
        -            'AGENT_ATTACHMENTS',
        -            'AGENT_AUTOPILOT',
        -            'AGENT_AWAY',
        -            'AGENT_BUSY',
        -            'AGENT_BY_LEGACY_NAME',
        -            'AGENT_BY_USERNAME',
        -            'AGENT_CROUCHING',
        -            'AGENT_FLYING',
        -            'AGENT_IN_AIR',
        -            'AGENT_LIST_PARCEL',
        -            'AGENT_LIST_PARCEL_OWNER',
        -            'AGENT_LIST_REGION',
        -            'AGENT_MOUSELOOK',
        -            'AGENT_ON_OBJECT',
        -            'AGENT_SCRIPTED',
        -            'AGENT_SITTING',
        -            'AGENT_TYPING',
        -            'AGENT_WALKING',
        -            'ALL_SIDES',
        -            'ANIM_ON',
        -            'ATTACH_AVATAR_CENTER',
        -            'ATTACH_BACK',
        -            'ATTACH_BELLY',
        -            'ATTACH_CHEST',
        -            'ATTACH_CHIN',
        -            'ATTACH_HEAD',
        -            'ATTACH_HUD_BOTTOM',
        -            'ATTACH_HUD_BOTTOM_LEFT',
        -            'ATTACH_HUD_BOTTOM_RIGHT',
        -            'ATTACH_HUD_CENTER_1',
        -            'ATTACH_HUD_CENTER_2',
        -            'ATTACH_HUD_TOP_CENTER',
        -            'ATTACH_HUD_TOP_LEFT',
        -            'ATTACH_HUD_TOP_RIGHT',
        -            'ATTACH_LEAR',
        -            'ATTACH_LEFT_PEC',
        -            'ATTACH_LEYE',
        -            'ATTACH_LFOOT',
        -            'ATTACH_LHAND',
        -            'ATTACH_LHIP',
        -            'ATTACH_LLARM',
        -            'ATTACH_LLLEG',
        -            'ATTACH_LSHOULDER',
        -            'ATTACH_LUARM',
        -            'ATTACH_LULEG',
        -            'ATTACH_MOUTH',
        -            'ATTACH_NECK',
        -            'ATTACH_NOSE',
        -            'ATTACH_PELVIS',
        -            'ATTACH_REAR',
        -            'ATTACH_REYE',
        -            'ATTACH_RFOOT',
        -            'ATTACH_RHAND',
        -            'ATTACH_RHIP',
        -            'ATTACH_RIGHT_PEC',
        -            'ATTACH_RLARM',
        -            'ATTACH_RLLEG',
        -            'ATTACH_RSHOULDER',
        -            'ATTACH_RUARM',
        -            'ATTACH_RULEG',
        -            'AVOID_CHARACTERS',
        -            'AVOID_DYNAMIC_OBSTACLES',
        -            'AVOID_NONE',
        -            'CAMERA_ACTIVE',
        -            'CAMERA_BEHINDNESS_ANGLE',
        -            'CAMERA_BEHINDNESS_LAG',
        -            'CAMERA_DISTANCE',
        -            'CAMERA_FOCUS',
        -            'CAMERA_FOCUS_LAG',
        -            'CAMERA_FOCUS_LOCKED',
        -            'CAMERA_FOCUS_OFFSET',
        -            'CAMERA_FOCUS_THRESHOLD',
        -            'CAMERA_PITCH',
        -            'CAMERA_POSITION',
        -            'CAMERA_POSITION_LAG',
        -            'CAMERA_POSITION_LOCKED',
        -            'CAMERA_POSITION_THRESHOLD',
        -            'CHANGED_ALLOWED_DROP',
        -            'CHANGED_COLOR',
        -            'CHANGED_INVENTORY',
        -            'CHANGED_LINK',
        -            'CHANGED_MEDIA',
        -            'CHANGED_OWNER',
        -            'CHANGED_REGION',
        -            'CHANGED_REGION_START',
        -            'CHANGED_SCALE',
        -            'CHANGED_SHAPE',
        -            'CHANGED_TELEPORT',
        -            'CHANGED_TEXTURE',
        -            'CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES',
        -            'CHARACTER_AVOIDANCE_MODE',
        -            'CHARACTER_CMD_JUMP',
        -            'CHARACTER_CMD_SMOOTH_STOP',
        -            'CHARACTER_CMD_STOP',
        -            'CHARACTER_DESIRED_SPEED',
        -            'CHARACTER_DESIRED_TURN_SPEED',
        -            'CHARACTER_LENGTH',
        -            'CHARACTER_MAX_ACCEL',
        -            'CHARACTER_MAX_DECEL',
        -            'CHARACTER_MAX_SPEED',
        -            'CHARACTER_MAX_TURN_RADIUS',
        -            'CHARACTER_ORIENTATION',
        -            'CHARACTER_RADIUS',
        -            'CHARACTER_STAY_WITHIN_PARCEL',
        -            'CHARACTER_TYPE',
        -            'CHARACTER_TYPE_A',
        -            'CHARACTER_TYPE_B',
        -            'CHARACTER_TYPE_C',
        -            'CHARACTER_TYPE_D',
        -            'CHARACTER_TYPE_NONE',
        -            'CLICK_ACTION_BUY',
        -            'CLICK_ACTION_NONE',
        -            'CLICK_ACTION_OPEN',
        -            'CLICK_ACTION_OPEN_MEDIA',
        -            'CLICK_ACTION_PAY',
        -            'CLICK_ACTION_PLAY',
        -            'CLICK_ACTION_SIT',
        -            'CLICK_ACTION_TOUCH',
        -            'CONTENT_TYPE_ATOM',
        -            'CONTENT_TYPE_FORM',
        -            'CONTENT_TYPE_HTML',
        -            'CONTENT_TYPE_JSON',
        -            'CONTENT_TYPE_LLSD',
        -            'CONTENT_TYPE_RSS',
        -            'CONTENT_TYPE_TEXT',
        -            'CONTENT_TYPE_XHTML',
        -            'CONTENT_TYPE_XML',
        -            'CONTROL_BACK',
        -            'CONTROL_DOWN',
        -            'CONTROL_FWD',
        -            'CONTROL_LBUTTON',
        -            'CONTROL_LEFT',
        -            'CONTROL_ML_LBUTTON',
        -            'CONTROL_RIGHT',
        -            'CONTROL_ROT_LEFT',
        -            'CONTROL_ROT_RIGHT',
        -            'CONTROL_UP',
        -            'DATA_BORN',
        -            'DATA_NAME',
        -            'DATA_ONLINE',
        -            'DATA_PAYINFO',
        -            'DATA_SIM_POS',
        -            'DATA_SIM_RATING',
        -            'DATA_SIM_STATUS',
        -            'DEBUG_CHANNEL',
        -            'DEG_TO_RAD',
        -            'DENSITY',
        -            'EOF',
        -            'ERR_GENERIC',
        -            'ERR_MALFORMED_PARAMS',
        -            'ERR_PARCEL_PERMISSIONS',
        -            'ERR_RUNTIME_PERMISSIONS',
        -            'ERR_THROTTLED',
        -            'ESTATE_ACCESS_ALLOWED_AGENT_ADD',
        -            'ESTATE_ACCESS_ALLOWED_AGENT_REMOVE',
        -            'ESTATE_ACCESS_ALLOWED_GROUP_ADD',
        -            'ESTATE_ACCESS_ALLOWED_GROUP_REMOVE',
        -            'ESTATE_ACCESS_BANNED_AGENT_ADD',
        -            'ESTATE_ACCESS_BANNED_AGENT_REMOVE',
        -            'FALSE',
        -            'FORCE_DIRECT_PATH',
        -            'FRICTION',
        -            'GCNP_RADIUS',
        -            'GCNP_STATIC',
        -            'GRAVITY_MULTIPLIER',
        -            'HORIZONTAL',
        -            'HTTP_BODY_MAXLENGTH',
        -            'HTTP_BODY_TRUNCATED',
        -            'HTTP_CUSTOM_HEADER',
        -            'HTTP_METHOD',
        -            'HTTP_MIMETYPE',
        -            'HTTP_PRAGMA_NO_CACHE',
        -            'HTTP_VERBOSE_THROTTLE',
        -            'HTTP_VERIFY_CERT',
        -            'INVENTORY_ALL',
        -            'INVENTORY_ANIMATION',
        -            'INVENTORY_BODYPART',
        -            'INVENTORY_CLOTHING',
        -            'INVENTORY_GESTURE',
        -            'INVENTORY_LANDMARK',
        -            'INVENTORY_NONE',
        -            'INVENTORY_NOTECARD',
        -            'INVENTORY_OBJECT',
        -            'INVENTORY_SCRIPT',
        -            'INVENTORY_SOUND',
        -            'INVENTORY_TEXTURE',
        -            'JSON_APPEND',
        -            'JSON_ARRAY',
        -            'JSON_DELETE',
        -            'JSON_FALSE',
        -            'JSON_INVALID',
        -            'JSON_NULL',
        -            'JSON_NUMBER',
        -            'JSON_OBJECT',
        -            'JSON_STRING',
        -            'JSON_TRUE',
        -            'KFM_CMD_PAUSE',
        -            'KFM_CMD_PLAY',
        -            'KFM_CMD_SET_MODE',
        -            'KFM_CMD_STOP',
        -            'KFM_COMMAND',
        -            'KFM_DATA',
        -            'KFM_FORWARD',
        -            'KFM_LOOP',
        -            'KFM_MODE',
        -            'KFM_PING_PONG',
        -            'KFM_REVERSE',
        -            'KFM_ROTATION',
        -            'KFM_TRANSLATION',
        -            'LAND_LARGE_BRUSH',
        -            'LAND_LEVEL',
        -            'LAND_LOWER',
        -            'LAND_MEDIUM_BRUSH',
        -            'LAND_NOISE',
        -            'LAND_RAISE',
        -            'LAND_REVERT',
        -            'LAND_SMALL_BRUSH',
        -            'LAND_SMOOTH',
        -            'LINK_ALL_CHILDREN',
        -            'LINK_ALL_OTHERS',
        -            'LINK_ROOT',
        -            'LINK_SET',
        -            'LINK_THIS',
        -            'LIST_STAT_GEOMETRIC_MEAN',
        -            'LIST_STAT_MAX',
        -            'LIST_STAT_MEAN',
        -            'LIST_STAT_MEDIAN',
        -            'LIST_STAT_MIN',
        -            'LIST_STAT_NUM_COUNT',
        -            'LIST_STAT_RANGE',
        -            'LIST_STAT_STD_DEV',
        -            'LIST_STAT_SUM',
        -            'LIST_STAT_SUM_SQUARES',
        -            'LOOP',
        -            'MASK_BASE',
        -            'MASK_EVERYONE',
        -            'MASK_GROUP',
        -            'MASK_NEXT',
        -            'MASK_OWNER',
        -            'NULL_KEY',
        -            'OBJECT_ATTACHED_POINT',
        -            'OBJECT_CHARACTER_TIME',
        -            'OBJECT_CREATOR',
        -            'OBJECT_DESC',
        -            'OBJECT_GROUP',
        -            'OBJECT_NAME',
        -            'OBJECT_OWNER',
        -            'OBJECT_PATHFINDING_TYPE',
        -            'OBJECT_PHANTOM',
        -            'OBJECT_PHYSICS',
        -            'OBJECT_PHYSICS_COST',
        -            'OBJECT_POS',
        -            'OBJECT_PRIM_EQUIVALENCE',
        -            'OBJECT_RENDER_WEIGHT',
        -            'OBJECT_RETURN_PARCEL',
        -            'OBJECT_RETURN_PARCEL_OWNER',
        -            'OBJECT_RETURN_REGION',
        -            'OBJECT_ROOT',
        -            'OBJECT_ROT',
        -            'OBJECT_RUNNING_SCRIPT_COUNT',
        -            'OBJECT_SCRIPT_MEMORY',
        -            'OBJECT_SCRIPT_TIME',
        -            'OBJECT_SERVER_COST',
        -            'OBJECT_STREAMING_COST',
        -            'OBJECT_TEMP_ON_REZ',
        -            'OBJECT_TOTAL_SCRIPT_COUNT',
        -            'OBJECT_UNKNOWN_DETAIL',
        -            'OBJECT_VELOCITY',
        -            'OPT_AVATAR',
        -            'OPT_CHARACTER',
        -            'OPT_EXCLUSION_VOLUME',
        -            'OPT_LEGACY_LINKSET',
        -            'OPT_MATERIAL_VOLUME',
        -            'OPT_OTHER',
        -            'OPT_STATIC_OBSTACLE',
        -            'OPT_WALKABLE',
        -            'PARCEL_COUNT_GROUP',
        -            'PARCEL_COUNT_OTHER',
        -            'PARCEL_COUNT_OWNER',
        -            'PARCEL_COUNT_SELECTED',
        -            'PARCEL_COUNT_TEMP',
        -            'PARCEL_COUNT_TOTAL',
        -            'PARCEL_DETAILS_AREA',
        -            'PARCEL_DETAILS_DESC',
        -            'PARCEL_DETAILS_GROUP',
        -            'PARCEL_DETAILS_ID',
        -            'PARCEL_DETAILS_NAME',
        -            'PARCEL_DETAILS_OWNER',
        -            'PARCEL_DETAILS_SEE_AVATARS',
        -            'PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY',
        -            'PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS',
        -            'PARCEL_FLAG_ALLOW_CREATE_OBJECTS',
        -            'PARCEL_FLAG_ALLOW_DAMAGE',
        -            'PARCEL_FLAG_ALLOW_FLY',
        -            'PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY',
        -            'PARCEL_FLAG_ALLOW_GROUP_SCRIPTS',
        -            'PARCEL_FLAG_ALLOW_LANDMARK',
        -            'PARCEL_FLAG_ALLOW_SCRIPTS',
        -            'PARCEL_FLAG_ALLOW_TERRAFORM',
        -            'PARCEL_FLAG_LOCAL_SOUND_ONLY',
        -            'PARCEL_FLAG_RESTRICT_PUSHOBJECT',
        -            'PARCEL_FLAG_USE_ACCESS_GROUP',
        -            'PARCEL_FLAG_USE_ACCESS_LIST',
        -            'PARCEL_FLAG_USE_BAN_LIST',
        -            'PARCEL_FLAG_USE_LAND_PASS_LIST',
        -            'PARCEL_MEDIA_COMMAND_AGENT',
        -            'PARCEL_MEDIA_COMMAND_AUTO_ALIGN',
        -            'PARCEL_MEDIA_COMMAND_DESC',
        -            'PARCEL_MEDIA_COMMAND_LOOP',
        -            'PARCEL_MEDIA_COMMAND_LOOP_SET',
        -            'PARCEL_MEDIA_COMMAND_PAUSE',
        -            'PARCEL_MEDIA_COMMAND_PLAY',
        -            'PARCEL_MEDIA_COMMAND_SIZE',
        -            'PARCEL_MEDIA_COMMAND_STOP',
        -            'PARCEL_MEDIA_COMMAND_TEXTURE',
        -            'PARCEL_MEDIA_COMMAND_TIME',
        -            'PARCEL_MEDIA_COMMAND_TYPE',
        -            'PARCEL_MEDIA_COMMAND_UNLOAD',
        -            'PARCEL_MEDIA_COMMAND_URL',
        -            'PASSIVE',
        -            'PATROL_PAUSE_AT_WAYPOINTS',
        -            'PAYMENT_INFO_ON_FILE',
        -            'PAYMENT_INFO_USED',
        -            'PAY_DEFAULT',
        -            'PAY_HIDE',
        -            'PERMISSION_ATTACH',
        -            'PERMISSION_CHANGE_LINKS',
        -            'PERMISSION_CONTROL_CAMERA',
        -            'PERMISSION_DEBIT',
        -            'PERMISSION_OVERRIDE_ANIMATIONS',
        -            'PERMISSION_RETURN_OBJECTS',
        -            'PERMISSION_SILENT_ESTATE_MANAGEMENT',
        -            'PERMISSION_TAKE_CONTROLS',
        -            'PERMISSION_TELEPORT',
        -            'PERMISSION_TRACK_CAMERA',
        -            'PERMISSION_TRIGGER_ANIMATION',
        -            'PERM_ALL',
        -            'PERM_COPY',
        -            'PERM_MODIFY',
        -            'PERM_MOVE',
        -            'PERM_TRANSFER',
        -            'PI',
        -            'PING_PONG',
        -            'PI_BY_TWO',
        -            'PRIM_BUMP_BARK',
        -            'PRIM_BUMP_BLOBS',
        -            'PRIM_BUMP_BRICKS',
        -            'PRIM_BUMP_BRIGHT',
        -            'PRIM_BUMP_CHECKER',
        -            'PRIM_BUMP_CONCRETE',
        -            'PRIM_BUMP_DARK',
        -            'PRIM_BUMP_DISKS',
        -            'PRIM_BUMP_GRAVEL',
        -            'PRIM_BUMP_LARGETILE',
        -            'PRIM_BUMP_NONE',
        -            'PRIM_BUMP_SHINY',
        -            'PRIM_BUMP_SIDING',
        -            'PRIM_BUMP_STONE',
        -            'PRIM_BUMP_STUCCO',
        -            'PRIM_BUMP_SUCTION',
        -            'PRIM_BUMP_TILE',
        -            'PRIM_BUMP_WEAVE',
        -            'PRIM_BUMP_WOOD',
        -            'PRIM_COLOR',
        -            'PRIM_DESC',
        -            'PRIM_FLEXIBLE',
        -            'PRIM_FULLBRIGHT',
        -            'PRIM_GLOW',
        -            'PRIM_HOLE_CIRCLE',
        -            'PRIM_HOLE_DEFAULT',
        -            'PRIM_HOLE_SQUARE',
        -            'PRIM_HOLE_TRIANGLE',
        -            'PRIM_LINK_TARGET',
        -            'PRIM_MATERIAL',
        -            'PRIM_MATERIAL_FLESH',
        -            'PRIM_MATERIAL_GLASS',
        -            'PRIM_MATERIAL_METAL',
        -            'PRIM_MATERIAL_PLASTIC',
        -            'PRIM_MATERIAL_RUBBER',
        -            'PRIM_MATERIAL_STONE',
        -            'PRIM_MATERIAL_WOOD',
        -            'PRIM_MEDIA_ALT_IMAGE_ENABLE',
        -            'PRIM_MEDIA_AUTO_LOOP',
        -            'PRIM_MEDIA_AUTO_PLAY',
        -            'PRIM_MEDIA_AUTO_SCALE',
        -            'PRIM_MEDIA_AUTO_ZOOM',
        -            'PRIM_MEDIA_CONTROLS',
        -            'PRIM_MEDIA_CONTROLS_MINI',
        -            'PRIM_MEDIA_CONTROLS_STANDARD',
        -            'PRIM_MEDIA_CURRENT_URL',
        -            'PRIM_MEDIA_FIRST_CLICK_INTERACT',
        -            'PRIM_MEDIA_HEIGHT_PIXELS',
        -            'PRIM_MEDIA_HOME_URL',
        -            'PRIM_MEDIA_MAX_HEIGHT_PIXELS',
        -            'PRIM_MEDIA_MAX_URL_LENGTH',
        -            'PRIM_MEDIA_MAX_WHITELIST_COUNT',
        -            'PRIM_MEDIA_MAX_WHITELIST_SIZE',
        -            'PRIM_MEDIA_MAX_WIDTH_PIXELS',
        -            'PRIM_MEDIA_PARAM_MAX',
        -            'PRIM_MEDIA_PERMS_CONTROL',
        -            'PRIM_MEDIA_PERMS_INTERACT',
        -            'PRIM_MEDIA_PERM_ANYONE',
        -            'PRIM_MEDIA_PERM_GROUP',
        -            'PRIM_MEDIA_PERM_NONE',
        -            'PRIM_MEDIA_PERM_OWNER',
        -            'PRIM_MEDIA_WHITELIST',
        -            'PRIM_MEDIA_WHITELIST_ENABLE',
        -            'PRIM_MEDIA_WIDTH_PIXELS',
        -            'PRIM_NAME',
        -            'PRIM_OMEGA',
        -            'PRIM_PHANTOM',
        -            'PRIM_PHYSICS',
        -            'PRIM_PHYSICS_SHAPE_CONVEX',
        -            'PRIM_PHYSICS_SHAPE_NONE',
        -            'PRIM_PHYSICS_SHAPE_PRIM',
        -            'PRIM_PHYSICS_SHAPE_TYPE',
        -            'PRIM_POINT_LIGHT',
        -            'PRIM_POSITION',
        -            'PRIM_POS_LOCAL',
        -            'PRIM_ROTATION',
        -            'PRIM_ROT_LOCAL',
        -            'PRIM_SCULPT_FLAG_INVERT',
        -            'PRIM_SCULPT_FLAG_MIRROR',
        -            'PRIM_SCULPT_TYPE_CYLINDER',
        -            'PRIM_SCULPT_TYPE_MASK',
        -            'PRIM_SCULPT_TYPE_PLANE',
        -            'PRIM_SCULPT_TYPE_SPHERE',
        -            'PRIM_SCULPT_TYPE_TORUS',
        -            'PRIM_SHINY_HIGH',
        -            'PRIM_SHINY_LOW',
        -            'PRIM_SHINY_MEDIUM',
        -            'PRIM_SHINY_NONE',
        -            'PRIM_SIZE',
        -            'PRIM_SLICE',
        -            'PRIM_TEMP_ON_REZ',
        -            'PRIM_TEXGEN',
        -            'PRIM_TEXGEN_DEFAULT',
        -            'PRIM_TEXGEN_PLANAR',
        -            'PRIM_TEXT',
        -            'PRIM_TEXTURE',
        -            'PRIM_TYPE',
        -            'PRIM_TYPE_BOX',
        -            'PRIM_TYPE_CYLINDER',
        -            'PRIM_TYPE_PRISM',
        -            'PRIM_TYPE_RING',
        -            'PRIM_TYPE_SCULPT',
        -            'PRIM_TYPE_SPHERE',
        -            'PRIM_TYPE_TORUS',
        -            'PRIM_TYPE_TUBE',
        -            'PROFILE_NONE',
        -            'PROFILE_SCRIPT_MEMORY',
        -            'PSYS_PART_BF_DEST_COLOR',
        -            'PSYS_PART_BF_ONE',
        -            'PSYS_PART_BF_ONE_MINUS_DEST_COLOR',
        -            'PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA',
        -            'PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR',
        -            'PSYS_PART_BF_SOURCE_ALPHA',
        -            'PSYS_PART_BF_SOURCE_COLOR',
        -            'PSYS_PART_BF_ZERO',
        -            'PSYS_PART_BLEND_FUNC_DEST',
        -            'PSYS_PART_BLEND_FUNC_SOURCE',
        -            'PSYS_PART_BOUNCE_MASK',
        -            'PSYS_PART_EMISSIVE_MASK',
        -            'PSYS_PART_END_ALPHA',
        -            'PSYS_PART_END_COLOR',
        -            'PSYS_PART_END_GLOW',
        -            'PSYS_PART_END_SCALE',
        -            'PSYS_PART_FLAGS',
        -            'PSYS_PART_FOLLOW_SRC_MASK',
        -            'PSYS_PART_FOLLOW_VELOCITY_MASK',
        -            'PSYS_PART_INTERP_COLOR_MASK',
        -            'PSYS_PART_INTERP_SCALE_MASK',
        -            'PSYS_PART_MAX_AGE',
        -            'PSYS_PART_RIBBON_MASK',
        -            'PSYS_PART_START_ALPHA',
        -            'PSYS_PART_START_COLOR',
        -            'PSYS_PART_START_GLOW',
        -            'PSYS_PART_START_SCALE',
        -            'PSYS_PART_TARGET_LINEAR_MASK',
        -            'PSYS_PART_TARGET_POS_MASK',
        -            'PSYS_PART_WIND_MASK',
        -            'PSYS_SRC_ACCEL',
        -            'PSYS_SRC_ANGLE_BEGIN',
        -            'PSYS_SRC_ANGLE_END',
        -            'PSYS_SRC_BURST_PART_COUNT',
        -            'PSYS_SRC_BURST_RADIUS',
        -            'PSYS_SRC_BURST_RATE',
        -            'PSYS_SRC_BURST_SPEED_MAX',
        -            'PSYS_SRC_BURST_SPEED_MIN',
        -            'PSYS_SRC_MAX_AGE',
        -            'PSYS_SRC_OMEGA',
        -            'PSYS_SRC_PATTERN',
        -            'PSYS_SRC_PATTERN_ANGLE',
        -            'PSYS_SRC_PATTERN_ANGLE_CONE',
        -            'PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY',
        -            'PSYS_SRC_PATTERN_DROP',
        -            'PSYS_SRC_PATTERN_EXPLODE',
        -            'PSYS_SRC_TARGET_KEY',
        -            'PSYS_SRC_TEXTURE',
        -            'PUBLIC_CHANNEL',
        -            'PURSUIT_FUZZ_FACTOR',
        -            'PURSUIT_GOAL_TOLERANCE',
        -            'PURSUIT_INTERCEPT',
        -            'PURSUIT_OFFSET',
        -            'PU_EVADE_HIDDEN',
        -            'PU_EVADE_SPOTTED',
        -            'PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED',
        -            'PU_FAILURE_INVALID_GOAL',
        -            'PU_FAILURE_INVALID_START',
        -            'PU_FAILURE_NO_NAVMESH',
        -            'PU_FAILURE_NO_VALID_DESTINATION',
        -            'PU_FAILURE_OTHER',
        -            'PU_FAILURE_PARCEL_UNREACHABLE',
        -            'PU_FAILURE_TARGET_GONE',
        -            'PU_FAILURE_UNREACHABLE',
        -            'PU_GOAL_REACHED',
        -            'PU_SLOWDOWN_DISTANCE_REACHED',
        -            'RAD_TO_DEG',
        -            'RCERR_CAST_TIME_EXCEEDED',
        -            'RCERR_SIM_PERF_LOW',
        -            'RCERR_UNKNOWN',
        -            'RC_DATA_FLAGS',
        -            'RC_DETECT_PHANTOM',
        -            'RC_GET_LINK_NUM',
        -            'RC_GET_NORMAL',
        -            'RC_GET_ROOT_KEY',
        -            'RC_MAX_HITS',
        -            'RC_REJECT_AGENTS',
        -            'RC_REJECT_LAND',
        -            'RC_REJECT_NONPHYSICAL',
        -            'RC_REJECT_PHYSICAL',
        -            'RC_REJECT_TYPES',
        -            'REGION_FLAG_ALLOW_DAMAGE',
        -            'REGION_FLAG_ALLOW_DIRECT_TELEPORT',
        -            'REGION_FLAG_BLOCK_FLY',
        -            'REGION_FLAG_BLOCK_TERRAFORM',
        -            'REGION_FLAG_DISABLE_COLLISIONS',
        -            'REGION_FLAG_DISABLE_PHYSICS',
        -            'REGION_FLAG_FIXED_SUN',
        -            'REGION_FLAG_RESTRICT_PUSHOBJECT',
        -            'REGION_FLAG_SANDBOX',
        -            'REMOTE_DATA_CHANNEL',
        -            'REMOTE_DATA_REPLY',
        -            'REMOTE_DATA_REQUEST',
        -            'REQUIRE_LINE_OF_SIGHT',
        -            'RESTITUTION',
        -            'REVERSE',
        -            'ROTATE',
        -            'SCALE',
        -            'SCRIPTED',
        -            'SIM_STAT_PCT_CHARS_STEPPED',
        -            'SMOOTH',
        -            'SQRT2',
        -            'STATUS_BLOCK_GRAB',
        -            'STATUS_BLOCK_GRAB_OBJECT',
        -            'STATUS_BOUNDS_ERROR',
        -            'STATUS_CAST_SHADOWS',
        -            'STATUS_DIE_AT_EDGE',
        -            'STATUS_INTERNAL_ERROR',
        -            'STATUS_MALFORMED_PARAMS',
        -            'STATUS_NOT_FOUND',
        -            'STATUS_NOT_SUPPORTED',
        -            'STATUS_OK',
        -            'STATUS_PHANTOM',
        -            'STATUS_PHYSICS',
        -            'STATUS_RETURN_AT_EDGE',
        -            'STATUS_ROTATE_X',
        -            'STATUS_ROTATE_Y',
        -            'STATUS_ROTATE_Z',
        -            'STATUS_SANDBOX',
        -            'STATUS_TYPE_MISMATCH',
        -            'STATUS_WHITELIST_FAILED',
        -            'STRING_TRIM',
        -            'STRING_TRIM_HEAD',
        -            'STRING_TRIM_TAIL',
        -            'TEXTURE_BLANK',
        -            'TEXTURE_DEFAULT',
        -            'TEXTURE_MEDIA',
        -            'TEXTURE_PLYWOOD',
        -            'TEXTURE_TRANSPARENT',
        -            'TOUCH_INVALID_FACE',
        -            'TOUCH_INVALID_TEXCOORD',
        -            'TOUCH_INVALID_VECTOR',
        -            'TRAVERSAL_TYPE',
        -            'TRAVERSAL_TYPE_FAST',
        -            'TRAVERSAL_TYPE_NONE',
        -            'TRAVERSAL_TYPE_SLOW',
        -            'TRUE',
        -            'TWO_PI',
        -            'TYPE_FLOAT',
        -            'TYPE_INTEGER',
        -            'TYPE_INVALID',
        -            'TYPE_KEY',
        -            'TYPE_ROTATION',
        -            'TYPE_STRING',
        -            'TYPE_VECTOR',
        -            'URL_REQUEST_DENIED',
        -            'URL_REQUEST_GRANTED',
        -            'VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY',
        -            'VEHICLE_ANGULAR_DEFLECTION_TIMESCALE',
        -            'VEHICLE_ANGULAR_FRICTION_TIMESCALE',
        -            'VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE',
        -            'VEHICLE_ANGULAR_MOTOR_DIRECTION',
        -            'VEHICLE_ANGULAR_MOTOR_TIMESCALE',
        -            'VEHICLE_BANKING_EFFICIENCY',
        -            'VEHICLE_BANKING_MIX',
        -            'VEHICLE_BANKING_TIMESCALE',
        -            'VEHICLE_BUOYANCY',
        -            'VEHICLE_FLAG_CAMERA_DECOUPLED',
        -            'VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT',
        -            'VEHICLE_FLAG_HOVER_TERRAIN_ONLY',
        -            'VEHICLE_FLAG_HOVER_UP_ONLY',
        -            'VEHICLE_FLAG_HOVER_WATER_ONLY',
        -            'VEHICLE_FLAG_LIMIT_MOTOR_UP',
        -            'VEHICLE_FLAG_LIMIT_ROLL_ONLY',
        -            'VEHICLE_FLAG_MOUSELOOK_BANK',
        -            'VEHICLE_FLAG_MOUSELOOK_STEER',
        -            'VEHICLE_FLAG_NO_DEFLECTION_UP',
        -            'VEHICLE_HOVER_EFFICIENCY',
        -            'VEHICLE_HOVER_HEIGHT',
        -            'VEHICLE_HOVER_TIMESCALE',
        -            'VEHICLE_LINEAR_DEFLECTION_EFFICIENCY',
        -            'VEHICLE_LINEAR_DEFLECTION_TIMESCALE',
        -            'VEHICLE_LINEAR_FRICTION_TIMESCALE',
        -            'VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE',
        -            'VEHICLE_LINEAR_MOTOR_DIRECTION',
        -            'VEHICLE_LINEAR_MOTOR_OFFSET',
        -            'VEHICLE_LINEAR_MOTOR_TIMESCALE',
        -            'VEHICLE_REFERENCE_FRAME',
        -            'VEHICLE_TYPE_AIRPLANE',
        -            'VEHICLE_TYPE_BALLOON',
        -            'VEHICLE_TYPE_BOAT',
        -            'VEHICLE_TYPE_CAR',
        -            'VEHICLE_TYPE_NONE',
        -            'VEHICLE_TYPE_SLED',
        -            'VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY',
        -            'VEHICLE_VERTICAL_ATTRACTION_TIMESCALE',
        -            'VERTICAL',
        -            'WANDER_PAUSE_AT_WAYPOINTS',
        -            'ZERO_ROTATION',
        -            'ZERO_VECTOR',
        -            ),
        -        3 => array( // handlers
        -            'at_rot_target',
        -            'at_target',
        -            'attach',
        -            'changed',
        -            'collision',
        -            'collision_end',
        -            'collision_start',
        -            'control',
        -            'dataserver',
        -            'email',
        -            'http_request',
        -            'http_response',
        -            'land_collision',
        -            'land_collision_end',
        -            'land_collision_start',
        -            'link_message',
        -            'listen',
        -            'money',
        -            'moving_end',
        -            'moving_start',
        -            'no_sensor',
        -            'not_at_rot_target',
        -            'not_at_target',
        -            'object_rez',
        -            'on_rez',
        -            'path_update',
        -            'remote_data',
        -            'run_time_permissions',
        -            'sensor',
        -            'state_entry',
        -            'state_exit',
        -            'timer',
        -            'touch',
        -            'touch_end',
        -            'touch_start',
        -            'transaction_result',
        -            ),
        -        4 => array( // data types
        -            'float',
        -            'integer',
        -            'key',
        -            'list',
        -            'quaternion',
        -            'rotation',
        -            'string',
        -            'vector',
        -            ),
        -        5 => array( // library
        -            'default',
        -            'llAbs',
        -            'llAcos',
        -            'llAddToLandBanList',
        -            'llAddToLandPassList',
        -            'llAdjustSoundVolume',
        -            'llAllowInventoryDrop',
        -            'llAngleBetween',
        -            'llApplyImpulse',
        -            'llApplyRotationalImpulse',
        -            'llAsin',
        -            'llAtan2',
        -            'llAttachToAvatar',
        -            'llAttachToAvatarTemp',
        -            'llAvatarOnLinkSitTarget',
        -            'llAvatarOnSitTarget',
        -            'llAxes2Rot',
        -            'llAxisAngle2Rot',
        -            'llBase64ToInteger',
        -            'llBase64ToString',
        -            'llBreakAllLinks',
        -            'llBreakLink',
        -            'llCastRay',
        -            'llCeil',
        -            'llClearCameraParams',
        -            'llClearLinkMedia',
        -            'llClearPrimMedia',
        -            'llCloseRemoteDataChannel',
        -            'llCollisionFilter',
        -            'llCollisionSound',
        -            'llCos',
        -            'llCreateCharacter',
        -            'llCreateLink',
        -            'llCSV2List',
        -            'llDeleteCharacter',
        -            'llDeleteSubList',
        -            'llDeleteSubString',
        -            'llDetachFromAvatar',
        -            'llDetectedGrab',
        -            'llDetectedGroup',
        -            'llDetectedKey',
        -            'llDetectedLinkNumber',
        -            'llDetectedName',
        -            'llDetectedOwner',
        -            'llDetectedPos',
        -            'llDetectedRot',
        -            'llDetectedTouchBinormal',
        -            'llDetectedTouchFace',
        -            'llDetectedTouchNormal',
        -            'llDetectedTouchPos',
        -            'llDetectedTouchST',
        -            'llDetectedTouchUV',
        -            'llDetectedType',
        -            'llDetectedVel',
        -            'llDialog',
        -            'llDie',
        -            'llDumpList2String',
        -            'llEdgeOfWorld',
        -            'llEjectFromLand',
        -            'llEmail',
        -            'llEscapeURL',
        -            'llEuler2Rot',
        -            'llEvade',
        -            'llExecCharacterCmd',
        -            'llFabs',
        -            'llFleeFrom',
        -            'llFloor',
        -            'llForceMouselook',
        -            'llFrand',
        -            'llGenerateKey',
        -            'llGetAccel',
        -            'llGetAgentInfo',
        -            'llGetAgentLanguage',
        -            'llGetAgentList',
        -            'llGetAgentSize',
        -            'llGetAlpha',
        -            'llGetAndResetTime',
        -            'llGetAnimation',
        -            'llGetAnimationList',
        -            'llGetAnimationOverride',
        -            'llGetAttached',
        -            'llGetBoundingBox',
        -            'llGetCameraPos',
        -            'llGetCameraRot',
        -            'llGetCenterOfMass',
        -            'llGetClosestNavPoint',
        -            'llGetColor',
        -            'llGetCreator',
        -            'llGetDate',
        -            'llGetDisplayName',
        -            'llGetEnergy',
        -            'llGetEnv',
        -            'llGetForce',
        -            'llGetFreeMemory',
        -            'llGetFreeURLs',
        -            'llGetGeometricCenter',
        -            'llGetGMTclock',
        -            'llGetHTTPHeader',
        -            'llGetInventoryCreator',
        -            'llGetInventoryKey',
        -            'llGetInventoryName',
        -            'llGetInventoryNumber',
        -            'llGetInventoryPermMask',
        -            'llGetInventoryType',
        -            'llGetKey',
        -            'llGetLandOwnerAt',
        -            'llGetLinkKey',
        -            'llGetLinkMedia',
        -            'llGetLinkName',
        -            'llGetLinkNumber',
        -            'llGetLinkNumberOfSides',
        -            'llGetLinkPrimitiveParams',
        -            'llGetListEntryType',
        -            'llGetListLength',
        -            'llGetLocalPos',
        -            'llGetLocalRot',
        -            'llGetMass',
        -            'llGetMassMKS',
        -            'llGetMaxScaleFactor',
        -            'llGetMemoryLimit',
        -            'llGetMinScaleFactor',
        -            'llGetNextEmail',
        -            'llGetNotecardLine',
        -            'llGetNumberOfNotecardLines',
        -            'llGetNumberOfPrims',
        -            'llGetNumberOfSides',
        -            'llGetObjectDesc',
        -            'llGetObjectDetails',
        -            'llGetObjectMass',
        -            'llGetObjectName',
        -            'llGetObjectPermMask',
        -            'llGetObjectPrimCount',
        -            'llGetOmega',
        -            'llGetOwner',
        -            'llGetOwnerKey',
        -            'llGetParcelDetails',
        -            'llGetParcelFlags',
        -            'llGetParcelMaxPrims',
        -            'llGetParcelMusicURL',
        -            'llGetParcelPrimCount',
        -            'llGetParcelPrimOwners',
        -            'llGetPermissions',
        -            'llGetPermissionsKey',
        -            'llGetPhysicsMaterial',
        -            'llGetPos',
        -            'llGetPrimitiveParams',
        -            'llGetPrimMediaParams',
        -            'llGetRegionAgentCount',
        -            'llGetRegionCorner',
        -            'llGetRegionFlags',
        -            'llGetRegionFPS',
        -            'llGetRegionName',
        -            'llGetRegionTimeDilation',
        -            'llGetRootPosition',
        -            'llGetRootRotation',
        -            'llGetRot',
        -            'llGetScale',
        -            'llGetScriptName',
        -            'llGetScriptState',
        -            'llGetSimStats',
        -            'llGetSimulatorHostname',
        -            'llGetSPMaxMemory',
        -            'llGetStartParameter',
        -            'llGetStaticPath',
        -            'llGetStatus',
        -            'llGetSubString',
        -            'llGetSunDirection',
        -            'llGetTexture',
        -            'llGetTextureOffset',
        -            'llGetTextureRot',
        -            'llGetTextureScale',
        -            'llGetTime',
        -            'llGetTimeOfDay',
        -            'llGetTimestamp',
        -            'llGetTorque',
        -            'llGetUnixTime',
        -            'llGetUsedMemory',
        -            'llGetUsername',
        -            'llGetVel',
        -            'llGetWallclock',
        -            'llGiveInventory',
        -            'llGiveInventoryList',
        -            'llGiveMoney',
        -            'llGround',
        -            'llGroundContour',
        -            'llGroundNormal',
        -            'llGroundRepel',
        -            'llGroundSlope',
        -            'llHTTPRequest',
        -            'llHTTPResponse',
        -            'llInsertString',
        -            'llInstantMessage',
        -            'llIntegerToBase64',
        -            'llJson2List',
        -            'llJsonGetValue',
        -            'llJsonSetValue',
        -            'llJsonValueType',
        -            'llKey2Name',
        -            'llLinkParticleSystem',
        -            'llLinkSitTarget',
        -            'llList2CSV',
        -            'llList2Float',
        -            'llList2Integer',
        -            'llList2Json',
        -            'llList2Key',
        -            'llList2List',
        -            'llList2ListStrided',
        -            'llList2Rot',
        -            'llList2String',
        -            'llList2Vector',
        -            'llListen',
        -            'llListenControl',
        -            'llListenRemove',
        -            'llListFindList',
        -            'llListInsertList',
        -            'llListRandomize',
        -            'llListReplaceList',
        -            'llListSort',
        -            'llListStatistics',
        -            'llLoadURL',
        -            'llLog',
        -            'llLog10',
        -            'llLookAt',
        -            'llLoopSound',
        -            'llLoopSoundMaster',
        -            'llLoopSoundSlave',
        -            'llManageEstateAccess',
        -            'llMapDestination',
        -            'llMD5String',
        -            'llMessageLinked',
        -            'llMinEventDelay',
        -            'llModifyLand',
        -            'llModPow',
        -            'llMoveToTarget',
        -            'llNavigateTo',
        -            'llOffsetTexture',
        -            'llOpenRemoteDataChannel',
        -            'llOverMyLand',
        -            'llOwnerSay',
        -            'llParcelMediaCommandList',
        -            'llParcelMediaQuery',
        -            'llParseString2List',
        -            'llParseStringKeepNulls',
        -            'llParticleSystem',
        -            'llPassCollisions',
        -            'llPassTouches',
        -            'llPatrolPoints',
        -            'llPlaySound',
        -            'llPlaySoundSlave',
        -            'llPow',
        -            'llPreloadSound',
        -            'llPursue',
        -            'llPushObject',
        -            'llRegionSay',
        -            'llRegionSayTo',
        -            'llReleaseControls',
        -            'llReleaseURL',
        -            'llRemoteDataReply',
        -            'llRemoteLoadScriptPin',
        -            'llRemoveFromLandBanList',
        -            'llRemoveFromLandPassList',
        -            'llRemoveInventory',
        -            'llRemoveVehicleFlags',
        -            'llRequestAgentData',
        -            'llRequestDisplayName',
        -            'llRequestInventoryData',
        -            'llRequestPermissions',
        -            'llRequestSecureURL',
        -            'llRequestSimulatorData',
        -            'llRequestURL',
        -            'llRequestUsername',
        -            'llResetAnimationOverride',
        -            'llResetLandBanList',
        -            'llResetLandPassList',
        -            'llResetOtherScript',
        -            'llResetScript',
        -            'llResetTime',
        -            'llReturnObjectsByID',
        -            'llReturnObjectsByOwner',
        -            'llRezAtRoot',
        -            'llRezObject',
        -            'llRot2Angle',
        -            'llRot2Axis',
        -            'llRot2Euler',
        -            'llRot2Fwd',
        -            'llRot2Left',
        -            'llRot2Up',
        -            'llRotateTexture',
        -            'llRotBetween',
        -            'llRotLookAt',
        -            'llRotTarget',
        -            'llRotTargetRemove',
        -            'llRound',
        -            'llSameGroup',
        -            'llSay',
        -            'llScaleByFactor',
        -            'llScaleTexture',
        -            'llScriptDanger',
        -            'llScriptProfiler',
        -            'llSendRemoteData',
        -            'llSensor',
        -            'llSensorRemove',
        -            'llSensorRepeat',
        -            'llSetAlpha',
        -            'llSetAngularVelocity',
        -            'llSetAnimationOverride',
        -            'llSetBuoyancy',
        -            'llSetCameraAtOffset',
        -            'llSetCameraEyeOffset',
        -            'llSetCameraParams',
        -            'llSetClickAction',
        -            'llSetColor',
        -            'llSetContentType',
        -            'llSetDamage',
        -            'llSetForce',
        -            'llSetForceAndTorque',
        -            'llSetHoverHeight',
        -            'llSetKeyframedMotion',
        -            'llSetLinkAlpha',
        -            'llSetLinkCamera',
        -            'llSetLinkColor',
        -            'llSetLinkMedia',
        -            'llSetLinkPrimitiveParams',
        -            'llSetLinkPrimitiveParamsFast',
        -            'llSetLinkTexture',
        -            'llSetLinkTextureAnim',
        -            'llSetLocalRot',
        -            'llSetMemoryLimit',
        -            'llSetObjectDesc',
        -            'llSetObjectName',
        -            'llSetParcelMusicURL',
        -            'llSetPayPrice',
        -            'llSetPhysicsMaterial',
        -            'llSetPos',
        -            'llSetPrimitiveParams',
        -            'llSetPrimMediaParams',
        -            'llSetRegionPos',
        -            'llSetRemoteScriptAccessPin',
        -            'llSetRot',
        -            'llSetScale',
        -            'llSetScriptState',
        -            'llSetSitText',
        -            'llSetSoundQueueing',
        -            'llSetSoundRadius',
        -            'llSetStatus',
        -            'llSetText',
        -            'llSetTexture',
        -            'llSetTextureAnim',
        -            'llSetTimerEvent',
        -            'llSetTorque',
        -            'llSetTouchText',
        -            'llSetVehicleFlags',
        -            'llSetVehicleFloatParam',
        -            'llSetVehicleRotationParam',
        -            'llSetVehicleType',
        -            'llSetVehicleVectorParam',
        -            'llSetVelocity',
        -            'llSHA1String',
        -            'llShout',
        -            'llSin',
        -            'llSitTarget',
        -            'llSleep',
        -            'llSqrt',
        -            'llStartAnimation',
        -            'llStopAnimation',
        -            'llStopHover',
        -            'llStopLookAt',
        -            'llStopMoveToTarget',
        -            'llStopSound',
        -            'llStringLength',
        -            'llStringToBase64',
        -            'llStringTrim',
        -            'llSubStringIndex',
        -            'llTakeControls',
        -            'llTan',
        -            'llTarget',
        -            'llTargetOmega',
        -            'llTargetRemove',
        -            'llTeleportAgent',
        -            'llTeleportAgentGlobalCoords',
        -            'llTeleportAgentHome',
        -            'llTextBox',
        -            'llToLower',
        -            'llToUpper',
        -            'llTransferLindenDollars',
        -            'llTriggerSound',
        -            'llTriggerSoundLimited',
        -            'llUnescapeURL',
        -            'llUnSit',
        -            'llUpdateCharacter',
        -            'llVecDist',
        -            'llVecMag',
        -            'llVecNorm',
        -            'llVolumeDetect',
        -            'llWanderWithin',
        -            'llWater',
        -            'llWhisper',
        -            'llWind',
        -            'llXorBase64',
        -            'print',
        -            ),
        -        6 => array( // deprecated
        -            'ATTACH_LPEC',
        -            'ATTACH_RPEC',
        -            'DATA_RATING',
        -            'PERMISSION_CHANGE_JOINTS',
        -            'PERMISSION_CHANGE_PERMISSIONS',
        -            'PERMISSION_RELEASE_OWNERSHIP',
        -            'PERMISSION_REMAP_CONTROLS',
        -            'PRIM_CAST_SHADOWS',
        -            'PRIM_MATERIAL_LIGHT',
        -            'PSYS_SRC_INNERANGLE',
        -            'PSYS_SRC_OBJ_REL_MASK',
        -            'PSYS_SRC_OUTERANGLE',
        -            'VEHICLE_FLAG_NO_FLY_UP',
        -            'llCloud',
        -            'llMakeExplosion',
        -            'llMakeFire',
        -            'llMakeFountain',
        -            'llMakeSmoke',
        -            'llRemoteDataSetRegion',
        -            'llSound',
        -            'llSoundPreload',
        -            'llXorBase64Strings',
        -            'llXorBase64StringsCorrect',
        -            ),
        -        7 => array( // unimplemented
        -            'event',
        -            'llCollisionSprite',
        -            'llPointAt',
        -            'llRefreshPrimURL',
        -            'llReleaseCamera',
        -            'llRemoteLoadScript',
        -            'llSetPrimURL',
        -            'llStopPointAt',
        -            'llTakeCamera',
        -            ),
        -        8 => array( // God mode
        -            'llGodLikeRezObject',
        -            'llSetInventoryPermMask',
        -            'llSetObjectPermMask',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '{', '}', '(', ')', '[', ']',
        -        '=', '+', '-', '*', '/',
        -        '+=', '-=', '*=', '/=', '%=', '++', '--',
        -        '!', '%', '&', '|', '&&', '||',
        -        '==', '!=', '<', '>', '<=', '>=',
        -        '~', '<<', '>>', '^', ':',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #000080;',
        -            3 => 'color: #008080;',
        -            4 => 'color: #228b22;',
        -            5 => 'color: #b22222;',
        -            6 => 'color: #8b0000; background-color: #ffff00;',
        -            7 => 'color: #8b0000; background-color: #fa8072;',
        -            8 => 'color: #000000; background-color: #ba55d3;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #ff7f50; font-style: italic;',
        -            'MULTI' => 'color: #ff7f50; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #006400;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://wiki.secondlife.com/wiki/{FNAME}',
        -        4 => 'http://wiki.secondlife.com/wiki/{FNAME}',
        -        5 => 'http://wiki.secondlife.com/wiki/{FNAME}',
        -        6 => 'http://wiki.secondlife.com/wiki/{FNAME}',
        -        7 => 'http://wiki.secondlife.com/wiki/{FNAME}',
        -        8 => 'http://wiki.secondlife.com/wiki/{FNAME}',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php
        deleted file mode 100644
        index 9bd67151..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php
        +++ /dev/null
        @@ -1,182 +0,0 @@
        - 'Lua',
        -    'COMMENT_SINGLE' => array(1 => "--"),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        // Multiline comments
        -        2 => '/--\[(=*)\[.*?\]\1\]/s',
        -        // Multi line literal strings (should not interpret escape sequences)
        -        // Here because no STRING_REGEXP
        -        3 => '/(?'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => 'color: #00bbdd;',
        -            1 => 'color: #ddbb00;',
        -            2 => 'color: #339933;',
        -            3 => 'color: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'font-weight: bold; color: black;',
        -            1 => 'color: #7400FF;',
        -            2 => 'color: #7400FF;'
        -            )
        -        ),
        -    'URLS' => array(
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        // xml declaration
        -        0 => array(
        -            GESHI_SEARCH => '(<[\/?|(\?xml)]?[a-z0-9_\-:]*(\?>))',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        // opening tags
        -        1 => array(
        -            GESHI_SEARCH => '(<\/?[a-z]+:[a-z]+)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        // closing tags
        -        2 => array(
        -            GESHI_SEARCH => '(\/?>)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ' '>'
        -            ),
        -        1 => array(
        -            '&' => ';'
        -            ),
        -        2 => array(
        -            //' ']]>'
        -            '' => ''
        -            ),
        -        3 => array(
        -            '<' => '>'
        -            )
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => false,
        -        1 => false,
        -        2 => false,
        -        3 => true
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php
        deleted file mode 100644
        index ff36cdec..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php
        +++ /dev/null
        @@ -1,472 +0,0 @@
        - 'MySQL',
        -    //'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'),    // '--' MUST be folowed by whitespace,not necessarily a space
        -    'COMMENT_SINGLE' => array(
        -        1 =>'-- ',
        -        2 => '#'
        -        ),
        -    'COMMENT_REGEXP' => array(
        -        1 => "/(?:--\s).*?$/",                          // double dash followed by any whitespace
        -        ),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,            // @@@ would be nice if this could be defined per group!
        -    'QUOTEMARKS' => array("'", '"', '`'),
        -    'ESCAPE_CHAR' => '\\',                              // by default only, can be specified
        -    'ESCAPE_REGEXP' => array(
        -        1 => "/[_%]/",                                  // search wildcards
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC |
        -        GESHI_NUMBER_OCT_PREFIX |
        -        GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_SCI_SHORT |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            // Mix: statement keywords and keywords that don't fit in any other
        -            // category, or have multiple usage/meanings
        -            'ACTION','ADD','AFTER','ALGORITHM','ALL','ALTER','ANALYZE','ANY',
        -            'ASC','AS','BDB','BEGIN','BERKELEYDB','BINARY','BTREE','CALL',
        -            'CASCADED','CASCADE','CHAIN','CHANGE','CHECK','COLUMNS','COLUMN',
        -            'COMMENT','COMMIT','COMMITTED','CONSTRAINT','CONTAINS SQL',
        -            'CONSISTENT','CONVERT','CREATE','CROSS','DATA','DATABASES',
        -            'DECLARE','DEFINER','DELAYED','DELETE','DESCRIBE','DESC',
        -            'DETERMINISTIC','DISABLE','DISCARD','DISTINCTROW','DISTINCT','DO',
        -            'DROP','DUMPFILE','DUPLICATE KEY','ENABLE','ENCLOSED BY','ENGINE',
        -            'ERRORS','ESCAPED BY','EXISTS','EXPLAIN','EXTENDED','FIELDS',
        -            'FIRST','FOR EACH ROW','FORCE','FOREIGN KEY','FROM','FULL',
        -            'FUNCTION','GLOBAL','GRANT','GROUP BY','HANDLER','HASH','HAVING',
        -            'HELP','HIGH_PRIORITY','IF NOT EXISTS','IGNORE','IMPORT','INDEX',
        -            'INFILE','INNER','INNODB','INOUT','INTO','INVOKER',
        -            'ISOLATION LEVEL','JOIN','KEYS','KEY','KILL','LANGUAGE SQL','LAST',
        -            'LIMIT','LINES','LOAD','LOCAL','LOCK','LOW_PRIORITY',
        -            'MASTER_SERVER_ID','MATCH','MERGE','MIDDLEINT','MODIFIES SQL DATA',
        -            'MODIFY','MRG_MYISAM','NATURAL','NEXT','NO SQL','NO','ON',
        -            'OPTIMIZE','OPTIONALLY','OPTION','ORDER BY','OUTER','OUTFILE','OUT',
        -            'PARTIAL','PARTITION','PREV','PRIMARY KEY','PRIVILEGES','PROCEDURE',
        -            'PURGE','QUICK','READS SQL DATA','READ','REFERENCES','RELEASE',
        -            'RENAME','REORGANIZE','REPEATABLE','REQUIRE','RESTRICT','RETURNS',
        -            'REVOKE','ROLLBACK','ROUTINE','RTREE','SAVEPOINT','SELECT',
        -            'SERIALIZABLE','SESSION','SET','SHARE MODE','SHOW','SIMPLE',
        -            'SNAPSHOT','SOME','SONAME','SQL SECURITY','SQL_BIG_RESULT',
        -            'SQL_BUFFER_RESULT','SQL_CACHE','SQL_CALC_FOUND_ROWS',
        -            'SQL_NO_CACHE','SQL_SMALL_RESULT','SSL','START','STARTING BY',
        -            'STATUS','STRAIGHT_JOIN','STRIPED','TABLESPACE','TABLES','TABLE',
        -            'TEMPORARY','TEMPTABLE','TERMINATED BY','TO','TRANSACTIONS',
        -            'TRANSACTION','TRIGGER','TYPES','TYPE','UNCOMMITTED','UNDEFINED',
        -            'UNION','UNLOCK_TABLES','UPDATE','USAGE','USE','USER_RESOURCES',
        -            'USING','VALUES','VALUE','VIEW','WARNINGS','WHERE','WITH ROLLUP',
        -            'WITH','WORK','WRITE',
        -            ),
        -        2 => array(     //No ( must follow
        -            // Mix: statement keywords distinguished from functions by the same name
        -            "CURRENT_USER", "DATABASE", "IN", "INSERT", "DEFAULT", "REPLACE", "SCHEMA", "TRUNCATE"
        -            ),
        -        3 => array(
        -            // Values (Constants)
        -            'FALSE','NULL','TRUE',
        -            ),
        -        4 => array(
        -            // Column Data Types
        -            'BIGINT','BIT','BLOB','BOOLEAN','BOOL','CHARACTER VARYING',
        -            'CHAR VARYING','DATETIME','DECIMAL','DEC','DOUBLE PRECISION',
        -            'DOUBLE','ENUM','FIXED','FLOAT','GEOMETRYCOLLECTION','GEOMETRY',
        -            'INTEGER','INT','LINESTRING','LONGBLOB','LONGTEXT','MEDIUMBLOB',
        -            'MEDIUMINT','MEDIUMTEXT','MULTIPOINT','MULTILINESTRING',
        -            'MULTIPOLYGON','NATIONAL CHARACTER','NATIONAL CHARACTER VARYING',
        -            'NATIONAL CHAR VARYING','NATIONAL VARCHAR','NCHAR VARCHAR','NCHAR',
        -            'NUMERIC','POINT','POLYGON','REAL','SERIAL',
        -            'SMALLINT','TEXT','TIMESTAMP','TINYBLOB','TINYINT',
        -            'TINYTEXT','VARBINARY','VARCHARACTER','VARCHAR',
        -            ),
        -        5 => array(     //No ( must follow
        -            // Column data types distinguished from functions by the same name
        -            "CHAR", "DATE", "TIME"
        -            ),
        -        6 => array(
        -            // Table, Column & Index Attributes
        -            'AUTO_INCREMENT','AVG_ROW_LENGTH','BOTH','CHECKSUM','CONNECTION',
        -            'DATA DIRECTORY','DEFAULT NULL','DELAY_KEY_WRITE','FULLTEXT',
        -            'INDEX DIRECTORY','INSERT_METHOD','LEADING','MAX_ROWS','MIN_ROWS',
        -            'NOT NULL','PACK_KEYS','ROW_FORMAT','SERIAL DEFAULT VALUE','SIGNED',
        -            'SPATIAL','TRAILING','UNIQUE','UNSIGNED','ZEROFILL'
        -            ),
        -        7 => array(     //No ( must follow
        -            // Column attribute distinguished from function by the same name
        -            "CHARSET"
        -            ),
        -        8 => array(
        -            // Date and Time Unit Specifiers
        -            'DAY_HOUR','DAY_MICROSECOND','DAY_MINUTE','DAY_SECOND',
        -            'HOUR_MICROSECOND','HOUR_MINUTE','HOUR_SECOND',
        -            'MINUTE_MICROSECOND','MINUTE_SECOND',
        -            'SECOND_MICROSECOND','YEAR_MONTH'
        -            ),
        -        9 => array(     //No ( must follow
        -            // Date-time unit specifiers distinguished from functions by the same name
        -            "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER", "SECOND", "WEEK", "YEAR"
        -            ),
        -        10 => array(
        -            // Operators (see also Symbols)
        -            'AND','BETWEEN','CHARACTER SET','COLLATE','DIV','IS NOT NULL',
        -            'IS NOT','IS NULL','IS','LIKE','NOT','OFFSET','OR','REGEXP','RLIKE',
        -            'SOUNDS LIKE','XOR'
        -            ),
        -        11 => array(     //No ( must follow
        -            // Operator distinghuished from function by the same name
        -            "INTERVAL"
        -            ),
        -        12 => array(
        -            // Control Flow (functions)
        -            'CASE','ELSE','END','IFNULL','IF','NULLIF','THEN','WHEN',
        -            ),
        -        13 => array(
        -            // String Functions
        -            'ASCII','BIN','BIT_LENGTH','CHAR_LENGTH','CHARACTER_LENGTH',
        -            'CONCAT_WS','CONCAT','ELT','EXPORT_SET','FIELD',
        -            'FIND_IN_SET','FORMAT','HEX','INSTR','LCASE','LEFT','LENGTH',
        -            'LOAD_FILE','LOCATE','LOWER','LPAD','LTRIM','MAKE_SET','MID',
        -            'OCTET_LENGTH','ORD','POSITION','QUOTE','REPEAT','REVERSE',
        -            'RIGHT','RPAD','RTRIM','SOUNDEX','SPACE','STRCMP','SUBSTRING_INDEX',
        -            'SUBSTRING','TRIM','UCASE','UNHEX','UPPER',
        -            ),
        -        14 => array(     //A ( must follow
        -            // String functions distinguished from other keywords by the same name
        -            "INSERT", "REPLACE", "CHAR"
        -            ),
        -        15 => array(
        -            // Numeric Functions
        -            'ABS','ACOS','ASIN','ATAN2','ATAN','CEILING','CEIL',
        -            'CONV','COS','COT','CRC32','DEGREES','EXP','FLOOR','LN','LOG10',
        -            'LOG2','LOG','MOD','OCT','PI','POWER','POW','RADIANS','RAND',
        -            'ROUND','SIGN','SIN','SQRT','TAN',
        -            ),
        -        16 => array(     //A ( must follow
        -            // Numeric function distinguished from other keyword by the same name
        -            "TRUNCATE"
        -            ),
        -        17 => array(
        -            // Date and Time Functions
        -            'ADDDATE','ADDTIME','CONVERT_TZ','CURDATE','CURRENT_DATE',
        -            'CURRENT_TIME','CURRENT_TIMESTAMP','CURTIME','DATE_ADD',
        -            'DATE_FORMAT','DATE_SUB','DATEDIFF','DAYNAME','DAYOFMONTH',
        -            'DAYOFWEEK','DAYOFYEAR','EXTRACT','FROM_DAYS','FROM_UNIXTIME',
        -            'GET_FORMAT','LAST_DAY','LOCALTIME','LOCALTIMESTAMP','MAKEDATE',
        -            'MAKETIME','MONTHNAME','NOW','PERIOD_ADD',
        -            'PERIOD_DIFF','SEC_TO_TIME','STR_TO_DATE','SUBDATE','SUBTIME',
        -            'SYSDATE','TIME_FORMAT','TIME_TO_SEC',
        -            'TIMESTAMPADD','TIMESTAMPDIFF','TO_DAYS',
        -            'UNIX_TIMESTAMP','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','WEEKDAY',
        -            'WEEKOFYEAR','YEARWEEK',
        -            ),
        -        18 => array(     //A ( must follow
        -            // Date-time functions distinguished from other keywords by the same name
        -            "DATE", "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER",
        -            "SECOND", "TIME", "WEEK", "YEAR"
        -            ),
        -        19 => array(
        -            // Comparison Functions
        -            'COALESCE','GREATEST','ISNULL','LEAST',
        -            ),
        -        20 => array(     //A ( must follow
        -            // Comparison functions distinguished from other keywords by the same name
        -            "IN", "INTERVAL"
        -            ),
        -        21 => array(
        -            // Encryption and Compression Functions
        -            'AES_DECRYPT','AES_ENCRYPT','COMPRESS','DECODE','DES_DECRYPT',
        -            'DES_ENCRYPT','ENCODE','ENCRYPT','MD5','OLD_PASSWORD','PASSWORD',
        -            'SHA1','SHA','UNCOMPRESS','UNCOMPRESSED_LENGTH',
        -            ),
        -        22 => array(
        -            // GROUP BY (aggregate) Functions
        -            'AVG','BIT_AND','BIT_OR','BIT_XOR','COUNT','GROUP_CONCAT',
        -            'MAX','MIN','STDDEV_POP','STDDEV_SAMP','STDDEV','STD','SUM',
        -            'VAR_POP','VAR_SAMP','VARIANCE',
        -            ),
        -        23 => array(
        -            // Information Functions
        -            'BENCHMARK','COERCIBILITY','COLLATION','CONNECTION_ID',
        -            'FOUND_ROWS','LAST_INSERT_ID','ROW_COUNT',
        -            'SESSION_USER','SYSTEM_USER','USER','VERSION',
        -            ),
        -        24 => array(     //A ( must follow
        -            // Information functions distinguished from other keywords by the same name
        -            "CURRENT_USER", "DATABASE", "SCHEMA", "CHARSET"
        -            ),
        -        25 => array(
        -            // Miscellaneous Functions
        -            'ExtractValue','BIT_COUNT','GET_LOCK','INET_ATON','INET_NTOA',
        -            'IS_FREE_LOCK','IS_USED_LOCK','MASTER_POS_WAIT','NAME_CONST',
        -            'RELEASE_LOCK','SLEEP','UpdateXML','UUID',
        -            ),
        -        26 => array(     //A ( must follow
        -            // Miscellaneous function distinguished from other keyword by the same name
        -            "DEFAULT"
        -            ),
        -        27 => array(
        -            // Geometry Functions
        -            'Area','AsBinary','AsText','AsWKB','AsWKT','Boundary','Buffer',
        -            'Centroid','Contains','ConvexHull','Crosses',
        -            'Difference','Dimension','Disjoint','Distance',
        -            'EndPoint','Envelope','Equals','ExteriorRing',
        -            'GLength','GeomCollFromText','GeomCollFromWKB','GeomFromText',
        -            'GeomFromWKB','GeometryCollectionFromText',
        -            'GeometryCollectionFromWKB','GeometryFromText','GeometryFromWKB',
        -            'GeometryN','GeometryType',
        -            'InteriorRingN','Intersection','Intersects','IsClosed','IsEmpty',
        -            'IsRing','IsSimple',
        -            'LineFromText','LineFromWKB','LineStringFromText',
        -            'LineStringFromWKB',
        -            'MBRContains','MBRDisjoint','MBREqual','MBRIntersects',
        -            'MBROverlaps','MBRTouches','MBRWithin','MLineFromText',
        -            'MLineFromWKB','MPointFromText','MPointFromWKB','MPolyFromText',
        -            'MPolyFromWKB','MultiLineStringFromText','MultiLineStringFromWKB',
        -            'MultiPointFromText','MultiPointFromWKB','MultiPolygonFromText',
        -            'MultiPolygonFromWKB',
        -            'NumGeometries','NumInteriorRings','NumPoints',
        -            'Overlaps',
        -            'PointFromText','PointFromWKB','PointN','PointOnSurface',
        -            'PolyFromText','PolyFromWKB','PolygonFromText','PolygonFromWKB',
        -            'Related','SRID','StartPoint','SymDifference',
        -            'Touches',
        -            'Union',
        -            'Within',
        -            'X',
        -            'Y',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            /* Operators */
        -            '=', ':=',                                      // assignment operators
        -            '||', '&&', '!',                                // locical operators
        -            '=', '<=>', '>=', '>', '<=', '<', '<>', '!=',   // comparison operators
        -            '|', '&', '^', '~', '<<', '>>',                 // bitwise operators
        -            '-', '+', '*', '/', '%',                        // numerical operators
        -            ),
        -        2 => array(
        -            /* Other syntactical symbols */
        -            '(', ')',
        -            ',', ';',
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false,
        -        8 => false,
        -        9 => false,
        -        10 => false,
        -        11 => false,
        -        12 => false,
        -        13 => false,
        -        14 => false,
        -        15 => false,
        -        16 => false,
        -        17 => false,
        -        18 => false,
        -        19 => false,
        -        20 => false,
        -        21 => false,
        -        22 => false,
        -        23 => false,
        -        24 => false,
        -        25 => false,
        -        26 => false,
        -        27 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #990099; font-weight: bold;',      // mix
        -            2 => 'color: #990099; font-weight: bold;',      // mix
        -            3 => 'color: #9900FF; font-weight: bold;',      // constants
        -            4 => 'color: #999900; font-weight: bold;',      // column data types
        -            5 => 'color: #999900; font-weight: bold;',      // column data types
        -            6 => 'color: #FF9900; font-weight: bold;',      // attributes
        -            7 => 'color: #FF9900; font-weight: bold;',      // attributes
        -            8 => 'color: #9900FF; font-weight: bold;',      // date-time units
        -            9 => 'color: #9900FF; font-weight: bold;',      // date-time units
        -
        -            10 => 'color: #CC0099; font-weight: bold;',      // operators
        -            11 => 'color: #CC0099; font-weight: bold;',      // operators
        -
        -            12 => 'color: #009900;',     // control flow (functions)
        -            13 => 'color: #000099;',     // string functions
        -            14 => 'color: #000099;',     // string functions
        -            15 => 'color: #000099;',     // numeric functions
        -            16 => 'color: #000099;',     // numeric functions
        -            17 => 'color: #000099;',     // date-time functions
        -            18 => 'color: #000099;',     // date-time functions
        -            19 => 'color: #000099;',     // comparison functions
        -            20 => 'color: #000099;',     // comparison functions
        -            21 => 'color: #000099;',     // encryption functions
        -            22 => 'color: #000099;',     // aggregate functions
        -            23 => 'color: #000099;',     // information functions
        -            24 => 'color: #000099;',     // information functions
        -            25 => 'color: #000099;',     // miscellaneous functions
        -            26 => 'color: #000099;',     // miscellaneous functions
        -            27 => 'color: #00CC00;',     // geometry functions
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #808000; font-style: italic;',
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #004000; font-weight: bold;',
        -            1 => 'color: #008080; font-weight: bold;'       // search wildcards
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #FF00FF;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #008080;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #CC0099;',         // operators
        -            2 => 'color: #000033;',         // syntax
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        2 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        3 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        4 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        5 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        6 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        7 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        8 => 'http://search.oracle.com/search/search?group=MySQL&q={FNAME}',
        -        9 => 'http://search.oracle.com/search/search?group=MySQL&q={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',
        -
        -        12 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html',
        -        13 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html',
        -        14 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html',
        -        15 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html',
        -        16 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html',
        -        17 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html',
        -        18 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html',
        -        19 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html',
        -        20 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html',
        -        21 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/encryption-functions.html',
        -        22 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html',
        -        23 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html',
        -        24 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html',
        -        25 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html',
        -        26 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html',
        -        27 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/analysing-spatial-information.html',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            2 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -            5 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -            7 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -            9 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -            11 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -
        -            14 => array(
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            16 => array(
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            18 => array(
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            20 => array(
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            24 => array(
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -            26 => array(
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php
        deleted file mode 100644
        index 6dec5dfe..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php
        +++ /dev/null
        @@ -1,223 +0,0 @@
        -
        - * Copyright: (c) 2012 Albéric de Pertat (https://github.com/adepertat/geshi-nagios)
        - * Release Version: 1.0.8.12
        - * Date Started: 2012/01/19
        - *
        - * Nagios language file for GeSHi.
        - *
        - * CHANGES
        - * -------
        - * 2012/01/19 (1.0.0)
        - *  -  First Release
        - *
        - * TODO (updated 2012/01/19)
        - * -------------------------
        - *
        - *************************************************************************************
        - *
        - *     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' => 'Nagios',
        -    'COMMENT_SINGLE' => array(1 => ';', 2 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'HARDQUOTE' => array("'", "'"),
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\'',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'define'
        -            ),
        -        2 => array(
        -            'command', 'contact', 'contactgroup', 'host', 'hostdependency',
        -            'hostescalation', 'hostextinfo', 'hostgroup', 'service',
        -            'servicedependency', 'serviceescalation',
        -            'serviceextinfo', 'servicegroup', 'timeperiod'
        -            ),
        -        3 => array(
        -            'active_checks_enabled', 'passive_checks_enabled', 'alias',
        -            'display_name', 'host_name', 'address', 'hostgroups', 'parents',
        -            'hostgroup_members', 'members', 'service_description',
        -            'servicegroups', 'is_volatile', 'servicegroup_name',
        -            'servicegroup_members', 'contact_name', 'contactgroups', 'email',
        -            'pager', 'can_submit_commands', 'contactgroup_name',
        -            'contactgroup_members', 'host_notifications_enabled',
        -            'service_notifications_enabled', 'host_notification_period',
        -            'service_notification_period', 'host_notification_options',
        -            'service_notification_options', 'host_notification_commands',
        -            'service_notification_commands', 'check_command',
        -            'check_freshness', 'check_interval', 'check_period', 'contacts',
        -            'contact_groups', 'event_handler', 'event_handler_enabled',
        -            'flap_detection_enabled', 'flap_detection_options',
        -            'freshness_threshold', 'initial_state', 'low_flap_threshold',
        -            'high_flap_threshold', 'max_check_attempts',
        -            'notification_interval', 'first_notification_delay',
        -            'notification_period', 'notification_options',
        -            'notifications_enabled', 'stalking_options', 'notes', 'notes_url',
        -            'action_url', 'icon_image', 'icon_image_alt', 'vrml_image',
        -            'statusmap_image', '2d_coords', '3d_coords', 'obsess_over_host',
        -            'obsess_over_hostver_service', 'process_perf_data',
        -            'retain_status_information', 'retain_nonstatus_information',
        -            'retry_interval', 'register', 'use', 'name', 'timeperiod_name',
        -            'exclude', 'command_name', 'command_line', 'dependent_host_name',
        -            'dependent_hostgroup_name', 'dependent_service_description',
        -            'inherits_parent', 'execution_failure_criteria',
        -            'notification_failure_criteria', 'dependency_period',
        -            'first_notification', 'last_notification', 'escalation_period',
        -            'escalation_options'
        -            ),
        -        4 => array(
        -            'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday',
        -            'sunday', 'january', 'february', 'march', 'april', 'may', 'june',
        -            'july', 'august', 'september', 'october', 'november', 'december',
        -            'day'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '{', '}', ',', '+'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'font-weight:bold;color:#FFDCA8;',
        -            2 => 'font-weight:bold;color #FFA858;',
        -            3 => 'font-weight:bold;color:#00C0C0;',
        -            4 => 'font-weight:bold;color:#C0C0FF;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'font-weight:bold;color:#000000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => ''
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #AAAAAA; font-style: italic;',
        -            1 => 'color: #AAAAAA; font-style: italic;',
        -            2 => 'color: #AAAAAA; font-style: italic;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #660066;',
        -            'HARD' => 'color: #660066;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'font-weight:bold;color:#808080;',
        -            1 => 'font-weight:bold;color:#000080;',
        -            2 => 'font-weight:bold;color:red;',
        -            3 => 'font-weight:bold;color:#808000;',
        -            4 => 'font-weight:bold;color:blue;',
        -            5 => 'font-weight:bold;color:#C0FFC0;',
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            )
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '\\'
        -        ),
        -    'REGEXPS' => array(
        -        // Custom macros
        -        0 => array(
        -            GESHI_SEARCH => '(\$[a-zA-Z_]+\$)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            ),
        -        // Custom macro definitions
        -        1 => array(
        -            GESHI_SEARCH => '(\A|\s)(_[a-zA-Z_]+)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '',
        -            ),
        -        // $USERxx$
        -        2 => array(
        -            GESHI_SEARCH => '(\$USER[0-9]+\$)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            ),
        -        // $ARGxx$
        -        3 => array(
        -            GESHI_SEARCH => '(\$ARG[1-9]\$)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            ),
        -        // register 0
        -        4 => array(
        -            GESHI_SEARCH => '(\bregister[\\x20\\t]+[01])',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            ),
        -        // use
        -        5 => array(
        -            GESHI_SEARCH => '(use[\\x20\\t]+[^\\x20\\t]+)([\\x20\\t]*[$;#])',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '',
        -            ),
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => false
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php
        deleted file mode 100644
        index 0ef4be0a..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php
        +++ /dev/null
        @@ -1,161 +0,0 @@
        - 'NetRexx',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'class', 'do', 'exit', 'if', 'import', 'iterate', 'leave',
        -            'loop', 'nop', 'numeric', 'package', 'parse', 'properties',
        -            'return', 'say', 'select', 'signal', 'trace'
        -            ),
        -        2 => array(
        -            'abstract', 'adapter', 'all', 'ask', 'binary', 'case',
        -            'constant', 'dependent', 'deprecated', 'extends', 'final',
        -            'implements', 'inheritable', 'interface', 'label', 'methods',
        -            'native', 'off', 'private', 'protect', 'public', 'results',
        -            'returns', 'shared', 'signals', 'source', 'static',
        -            'transient', 'unused', 'uses', 'version', 'volatile'
        -            ),
        -        3 => array(
        -            'catch', 'else', 'end', 'finally', 'otherwise', 'then', 'when'
        -            ),
        -        4 => array(
        -            'rc', 'result', 'self', 'sigl', 'super'
        -            ),
        -        5 => array(
        -            'placeholderforoorexxdirectives'
        -            ),
        -        6 => array(
        -            'abbrev', 'abs', 'b2x', 'c2d', 'c2x', 'center', 'centre',
        -            'changestr', 'compare', 'copies', 'copyindexed', 'countstr',
        -            'd2c', 'd2x', 'datatype', 'delstr', 'delword', 'exists',
        -            'formword', 'hashcode', 'insert', 'lastpos', 'left', 'lower',
        -            'max', 'min', 'noteq', 'noteqs', 'opadd', 'opand', 'opcc',
        -            'opccblank', 'opdiv', 'opdivi', 'opeq', 'opeqs', 'opgt',
        -            'opgteq', 'opgteqs', 'opgts', 'oplt', 'oplteq', 'oplteqs',
        -            'oplts', 'opminus', 'opmult', 'opnot', 'opor', 'opplus',
        -            'oppow', 'oprem', 'opsub', 'opxor', 'overlay', 'pos position',
        -            'reverse', 'right', 'sequence', 'setdigits', 'setform',
        -            'sign', 'space', 'strip', 'substr', 'subword', 'toboolean',
        -            'tobyte', 'tochar', 'todouble', 'tofloat', 'toint', 'tolong',
        -            'toshort', 'tostring', 'translate', 'trunc', 'upper',
        -            'verify', 'word', 'wordindex', 'wordlength', 'wordpos',
        -            'words', 'x2b', 'x2c', 'x2d'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '<', '>', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':',
        -        '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #ff0000; font-weight: bold;',
        -            3 => 'color: #00ff00; font-weight: bold;',
        -            4 => 'color: #0000ff; font-weight: bold;',
        -            5 => 'color: #880088; font-weight: bold;',
        -            6 => 'color: #888800; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666;',
        -            'MULTI' => 'color: #808080;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php
        deleted file mode 100644
        index 134ccfc5..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php
        +++ /dev/null
        @@ -1,189 +0,0 @@
        - 'newlisp',
        -    'COMMENT_SINGLE' => array(1 => ';', 2 => '#'),
        -    'COMMENT_MULTI' => array('[text]' => '[/text]', '{' => '}'), // also used for strings
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' => GESHI_NUMBER_INT_BASIC |  GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'TAB_WIDTH' => 2,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'NaN?','abort','abs','acos','acosh','add','address','amb','and',
        -            'append','append-file','apply','args','array','array-list','array?',
        -            'asin','asinh','assoc','atan','atan2','atanh','atom?','base64-dec',
        -            'base64-enc','bayes-query','bayes-train','begin','beta','betai',
        -            'bind','binomial','bits','callback','case','catch','ceil',
        -            'change-dir','char','chop','clean','close','command-event','cond',
        -            'cons','constant','context','context?','copy','copy-file','cos',
        -            'cosh','count','cpymem','crc32','crit-chi2','crit-z','current-line',
        -            'curry','date','date-value','debug','dec','def-new','default',
        -            'define','define-macro','delete','delete-file','delete-url',
        -            'destroy','det','device','difference','directory','directory?',
        -            'div','do-until','do-while','doargs','dolist','dostring','dotimes',
        -            'dotree','dump','dup','empty?','encrypt','ends-with','env','erf',
        -            'error-event','estack','eval','eval-string','exec','exists','exit',
        -            'exp','expand','explode','factor','fft','file-info','file?',
        -            'filter','find','find-all','first','flat','float','float?','floor',
        -            'flt','for','for-all','fork','format','fv','gammai','gammaln','gcd',
        -            'get-char','get-float','get-int','get-long','get-string','get-url',
        -            'global','global?','if','if-not','ifft','import','inc','index',
        -            'inf?','int','integer','integer?','intersect','invert','irr','join',
        -            'lambda','lambda?','last','last-error','legal?','length','let',
        -            'letex','letn','list','list?','load','local','log','lookup',
        -            'lower-case','macro?','main-args','make-dir','map','mat','match',
        -            'max','member','min','mod','mul','multiply','name','net-accept',
        -            'net-close','net-connect','net-error','net-eval','net-interface',
        -            'net-listen','net-local','net-lookup','net-peek','net-peer',
        -            'net-ping','net-receive','net-receive-from','net-receive-udp',
        -            'net-select','net-send','net-send-to','net-send-udp','net-service',
        -            'net-sessions','new','nil','nil?','normal','not','now','nper','npv',
        -            'nth','null?','number?','open','or','pack','parse','parse-date',
        -            'peek','pipe','pmt','pop','pop-assoc','post-url','pow',
        -            'pretty-print','primitive?','print','println','prob-chi2','prob-z',
        -            'process','prompt-event','protected?','push','put-url','pv','quote',
        -            'quote?','rand','random','randomize','read-buffer','read-char',
        -            'read-expr','read-file','read-key','read-line','read-utf8',
        -            'real-path','receive','ref','ref-all','regex','regex-comp',
        -            'remove-dir','rename-file','replace','reset','rest','reverse',
        -            'rotate','round','save','search','seed','seek','select','semaphore',
        -            'send','sequence','series','set','set-locale','set-ref',
        -            'set-ref-all','setf','setq','sgn','share','signal','silent','sin',
        -            'sinh','sleep','slice','sort','source','spawn','sqrt','starts-with',
        -            'string','string?','sub','swap','sym','symbol?','symbols','sync',
        -            'sys-error','sys-info','tan','tanh','throw','throw-error','time',
        -            'time-of-day','timer','title-case','trace','trace-highlight',
        -            'transpose','trim','true','true?','unicode','unify','unique',
        -            'unless','unpack','until','upper-case','utf8','utf8len','uuid',
        -            'wait-pid','when','while','write-buffer','write-char','write-file',
        -            'write-line','xfer-event','xml-error','xml-parse','xml-type-tags',
        -            'zero?'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '(', ')','\''
        -            ),
        -        1 => array(
        -            '!','!=','$','%','&','*','+','-','/',':',
        -            '<','<<','<=','=','>','>=','>>','^','|'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000AA;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #00aa00; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #777700;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #AA0000;',
        -            1 => 'color: #0000AA;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #00aa00;',
        -            1 => 'color: #00aa00;',
        -            2 => 'color: #00aa00;',
        -            3 => 'color: #00aa00;',
        -            4 => 'color: #00aa00;',
        -            5 => 'color: #AA0000;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.newlisp.org/downloads/newlisp_manual.html#{FNAME}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(':'),
        -    'REGEXPS' => array(
        -        // tags in newlispdoc
        -        0 => "\s+@\S*?\s+",
        -        // dollar sign symbols
        -        1 => "[\\$]\w*",
        -        // curly-braced string literals
        -        2 => "{[^{}]*?}",
        -        // [text] multi-line strings
        -        3 => "(?s)\[text\].*\[\/text\](?-s)",
        -        // [code] multi-line blocks
        -        4 => "(?s)\[code\].*\[\/code\](?-s)",
        -        // variable references
        -        5 => "'[\w\-]+"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'OOLANG' => array(
        -            'MATCH_AFTER' => '[a-zA-Z][a-zA-Z0-9_\-]*'
        -            ),
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => '(?<=[^\w\-])',
        -            )
        -        ),
        -
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php
        deleted file mode 100644
        index 0d4fe3b4..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php
        +++ /dev/null
        @@ -1,868 +0,0 @@
        - 'nginx',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array( // core module
        -            // http://wiki.nginx.org/CoreModule
        -            // http://nginx.org/en/docs/ngx_core_module.html
        -            'daemon',
        -            'debug_points',
        -            'env',
        -            'error_log',
        -            'events',
        -            'include',
        -            'lock_file',
        -            'master_process',
        -            'pcre_jit',
        -            'pid',
        -            'ssl_engine',
        -            'timer_resolution',
        -            'user',
        -            'worker_cpu_affinity',
        -            'worker_priority',
        -            'worker_processes',
        -            'worker_rlimit_core',
        -            'worker_rlimit_nofile',
        -            'worker_rlimit_sigpending',
        -            'working_directory',
        -            // see EventsModule due to organization of wiki
        -            //'accept_mutex',
        -            //'accept_mutex_delay',
        -            //'debug_connection',
        -            //'multi_accept',
        -            //'use',
        -            //'worker_connections',
        -            ),
        -        2 => array( // events module
        -            // http://wiki.nginx.org/EventsModule
        -            // http://nginx.org/en/docs/ngx_core_module.html
        -            'accept_mutex',
        -            'accept_mutex_delay',
        -            'debug_connection',
        -            'devpoll_changes',
        -            'devpoll_events',
        -            'kqueue_changes',
        -            'kqueue_events',
        -            'epoll_events',
        -            'multi_accept',
        -            'rtsig_signo',
        -            'rtsig_overflow_events',
        -            'rtsig_overflow_test',
        -            'rtsig_overflow_threshold',
        -            'use',
        -            'worker_connections',
        -            ),
        -        3 => array( // http module
        -            // http://wiki.nginx.org/HttpCoreModule
        -            // http://nginx.org/en/docs/http/ngx_http_core_module.html
        -            'aio',
        -            'alias',
        -            'chunked_transfer_encoding',
        -            'client_body_buffer_size',
        -            'client_body_in_file_only',
        -            'client_body_in_single_buffer',
        -            'client_body_temp_path',
        -            'client_body_timeout',
        -            'client_header_buffer_size',
        -            'client_header_timeout',
        -            'client_max_body_size',
        -            'connection_pool_size',
        -            'default_type',
        -            'directio',
        -            'directio_alignment',
        -            'disable_symlinks',
        -            'error_page',
        -            'etag',
        -            'http',
        -            'if_modified_since',
        -            'ignore_invalid_headers',
        -            'internal',
        -            'keepalive_disable',
        -            'keepalive_requests',
        -            'keepalive_timeout',
        -            'large_client_header_buffers',
        -            'limit_except',
        -            'limit_rate',
        -            'limit_rate_after',
        -            'lingering_close',
        -            'lingering_time',
        -            'lingering_timeout',
        -            'listen',
        -            'location',
        -            'log_not_found',
        -            'log_subrequest',
        -            'max_ranges',
        -            'merge_slashes',
        -            'msie_padding',
        -            'msie_refresh',
        -            'open_file_cache',
        -            'open_file_cache_errors',
        -            'open_file_cache_min_uses',
        -            'open_file_cache_valid',
        -            'optimize_server_names',
        -            'port_in_redirect',
        -            'postpone_output',
        -            'read_ahead',
        -            'recursive_error_pages',
        -            'request_pool_size',
        -            'reset_timedout_connection',
        -            'resolver',
        -            'resolver_timeout',
        -            'root',
        -            'satisfy',
        -            'satisfy_any',
        -            'send_lowat',
        -            'send_timeout',
        -            'sendfile',
        -            'sendfile_max_chunk',
        -            'server',
        -            'server_name',
        -            'server_name_in_redirect',
        -            'server_names_hash_bucket_size',
        -            'server_names_hash_max_size',
        -            'server_tokens',
        -            'tcp_nodelay',
        -            'tcp_nopush',
        -            'try_files',
        -            'types',
        -            'types_hash_bucket_size',
        -            'types_hash_max_size',
        -            'underscores_in_headers',
        -            'variables_hash_bucket_size',
        -            'variables_hash_max_size',
        -            ),
        -        4 => array( // upstream module
        -            // http://wiki.nginx.org/HttpUpstreamModule
        -            // http://nginx.org/en/docs/http/ngx_http_upstream_module.html
        -            'ip_hash',
        -            'keepalive',
        -            'least_conn',
        -            // Use the documentation from the core module since every conf will have at least one of those.
        -            //'server',
        -            'upstream',
        -            ),
        -        5 => array( // access module
        -            // http://wiki.nginx.org/HttpAccessModule
        -            // http://nginx.org/en/docs/http/ngx_http_access_module.html
        -            'deny',
        -            'allow',
        -            ),
        -        6 => array( // auth basic module
        -            // http://wiki.nginx.org/HttpAuthBasicModule
        -            // http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
        -            'auth_basic',
        -            'auth_basic_user_file'
        -            ),
        -        7 => array( // auto index module
        -            // http://wiki.nginx.org/HttpAutoindexModule
        -            // http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
        -            'autoindex',
        -            'autoindex_exact_size',
        -            'autoindex_localtime',
        -            ),
        -        8 => array( // browser module
        -            // http://wiki.nginx.org/HttpBrowserModule
        -            // http://nginx.org/en/docs/http/ngx_http_browser_module.html
        -            'ancient_browser',
        -            'ancient_browser_value',
        -            'modern_browser',
        -            'modern_browser_value',
        -            ),
        -        9 => array( // charset module
        -            // http://wiki.nginx.org/HttpCharsetModule
        -            // http://nginx.org/en/docs/http/ngx_http_charset_module.html
        -            'charset',
        -            'charset_map',
        -            'charset_types',
        -            'override_charset',
        -            'source_charset',
        -            ),
        -        10 => array( // empty gif module
        -            // http://wiki.nginx.org/HttpEmptyGifModule
        -            // http://nginx.org/en/docs/http/ngx_http_empty_gif_module.html
        -            'empty_gif',
        -            ),
        -        11 => array( // fastcgi module
        -            // http://wiki.nginx.org/HttpFastcgiModule
        -            // http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
        -            'fastcgi_bind',
        -            'fastcgi_buffer_size',
        -            'fastcgi_buffers',
        -            'fastcgi_busy_buffers_size',
        -            'fastcgi_cache',
        -            'fastcgi_cache_bypass',
        -            'fastcgi_cache_key',
        -            'fastcgi_cache_lock',
        -            'fastcgi_cache_lock_timeout',
        -            'fastcgi_cache_methods',
        -            'fastcgi_cache_min_uses',
        -            'fastcgi_cache_path',
        -            'fastcgi_cache_use_stale',
        -            'fastcgi_cache_valid',
        -            'fastcgi_connect_timeout',
        -            'fastcgi_hide_header',
        -            'fastcgi_ignore_client_abort',
        -            'fastcgi_ignore_headers',
        -            'fastcgi_index',
        -            'fastcgi_intercept_errors',
        -            'fastcgi_keep_conn',
        -            'fastcgi_max_temp_file_size',
        -            'fastcgi_next_upstream',
        -            'fastcgi_no_cache',
        -            'fastcgi_param',
        -            'fastcgi_pass',
        -            'fastcgi_pass_header',
        -            'fastcgi_pass_request_body',
        -            'fastcgi_pass_request_headers',
        -            'fastcgi_read_timeout',
        -            'fastcgi_redirect_errors',
        -            'fastcgi_send_timeout',
        -            'fastcgi_split_path_info',
        -            'fastcgi_store',
        -            'fastcgi_store_access',
        -            'fastcgi_temp_file_write_size',
        -            'fastcgi_temp_path',
        -            ),
        -        12 => array( // geo module
        -            // http://wiki.nginx.org/HttpGeoModule
        -            // http://nginx.org/en/docs/http/ngx_http_geo_module.html
        -            'geo'
        -            ),
        -        13 => array( // gzip module
        -            // http://wiki.nginx.org/HttpGzipModule
        -            // http://nginx.org/en/docs/http/ngx_http_gzip_module.html
        -            'gzip',
        -            'gzip_buffers',
        -            'gzip_comp_level',
        -            'gzip_disable',
        -            'gzip_min_length',
        -            'gzip_http_version',
        -            'gzip_proxied',
        -            'gzip_types',
        -            'gzip_vary',
        -            ),
        -        14 => array( // headers module
        -            // http://wiki.nginx.org/HttpHeadersModule
        -            // http://nginx.org/en/docs/http/ngx_http_headers_module.html
        -            'add_header',
        -            'expires',
        -            ),
        -        15 => array( // index module
        -            // http://wiki.nginx.org/HttpIndexModule
        -            // http://nginx.org/en/docs/http/ngx_http_index_module.html
        -            'index',
        -            ),
        -        16 => array( // limit requests module
        -            // http://wiki.nginx.org/HttpLimitReqModule
        -            // http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
        -            'limit_req',
        -            'limit_req_log_level',
        -            'limit_req_zone',
        -            ),
        -        17 => array( // referer module
        -            // http://wiki.nginx.org/HttpRefererModule
        -            // http://nginx.org/en/docs/http/ngx_http_referer_module.html
        -            'referer_hash_bucket_size',
        -            'referer_hash_max_size',
        -            'valid_referers',
        -            ),
        -        18 => array( // limit zone module
        -            // deprecated in 1.1.8
        -            // http://wiki.nginx.org/HttpLimitZoneModule
        -            'limit_zone',
        -            // Covered by documentation for ngx_http_limit_conn_module
        -            //'limit_conn',
        -            ),
        -        19 => array( // limit connection module
        -            // http://wiki.nginx.org/HttpLimitConnModule
        -            // http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
        -            'limit_conn',
        -            'limit_conn_zone',
        -            'limit_conn_log_level',
        -            ),
        -        20 => array( // log module
        -            // http://wiki.nginx.org/HttpLogModule
        -            // http://nginx.org/en/docs/http/ngx_http_log_module.html
        -            'access_log',
        -            'log_format',
        -            // Appears to be deprecated
        -            'log_format_combined',
        -            'open_log_file_cache',
        -            ),
        -        21 => array( // map module
        -            // http://wiki.nginx.org/HttpMapModule
        -            // http://nginx.org/en/docs/http/ngx_http_map_module.html
        -            'map',
        -            'map_hash_max_size',
        -            'map_hash_bucket_size',
        -            ),
        -        22 => array( // memcached module
        -            // http://wiki.nginx.org/HttpMemcachedModule
        -            // http://nginx.org/en/docs/http/ngx_http_memcached_module.html
        -            'memcached_buffer_size',
        -            'memcached_connect_timeout',
        -            'memcached_next_upstream',
        -            'memcached_pass',
        -            'memcached_read_timeout',
        -            'memcached_send_timeout',
        -            ),
        -        23 => array( // proxy module
        -            // http://wiki.nginx.org/HttpProxyModule
        -            // http://nginx.org/en/docs/http/ngx_http_proxy_module.html
        -            'proxy_bind',
        -            'proxy_buffer_size',
        -            'proxy_buffering',
        -            'proxy_buffers',
        -            'proxy_busy_buffers_size',
        -            'proxy_cache',
        -            'proxy_cache_bypass',
        -            'proxy_cache_key',
        -            'proxy_cache_lock',
        -            'proxy_cache_lock_timeout',
        -            'proxy_cache_methods',
        -            'proxy_cache_min_uses',
        -            'proxy_cache_path',
        -            'proxy_cache_use_stale',
        -            'proxy_cache_valid',
        -            'proxy_connect_timeout',
        -            'proxy_cookie_domain',
        -            'proxy_cookie_path',
        -            'proxy_headers_hash_bucket_size',
        -            'proxy_headers_hash_max_size',
        -            'proxy_hide_header',
        -            'proxy_http_version',
        -            'proxy_ignore_client_abort',
        -            'proxy_ignore_headers',
        -            'proxy_intercept_errors',
        -            'proxy_max_temp_file_size',
        -            'proxy_method',
        -            'proxy_next_upstream',
        -            'proxy_no_cache',
        -            'proxy_pass',
        -            'proxy_pass_header',
        -            'proxy_pass_request_body',
        -            'proxy_pass_request_headers',
        -            'proxy_redirect',
        -            'proxy_read_timeout',
        -            'proxy_redirect_errors',
        -            'proxy_send_lowat',
        -            'proxy_send_timeout',
        -            'proxy_set_body',
        -            'proxy_set_header',
        -            'proxy_ssl_session_reuse',
        -            'proxy_store',
        -            'proxy_store_access',
        -            'proxy_temp_file_write_size',
        -            'proxy_temp_path',
        -            'proxy_upstream_fail_timeout',
        -            'proxy_upstream_max_fails',
        -            ),
        -        24 => array( // rewrite module
        -            // http://wiki.nginx.org/HttpRewriteModule
        -            // http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
        -            'break',
        -            'if',
        -            'return',
        -            'rewrite',
        -            'rewrite_log',
        -            'set',
        -            'uninitialized_variable_warn',
        -            ),
        -        25 => array( // ssi module
        -            // http://wiki.nginx.org/HttpSsiModule
        -            // http://nginx.org/en/docs/http/ngx_http_ssi_module.html
        -            'ssi',
        -            'ssi_silent_errors',
        -            'ssi_types',
        -            'ssi_value_length',
        -            ),
        -        26 => array( // user id module
        -            // http://wiki.nginx.org/HttpUseridModule
        -            // http://nginx.org/en/docs/http/ngx_http_userid_module.html
        -            'userid',
        -            'userid_domain',
        -            'userid_expires',
        -            'userid_name',
        -            'userid_p3p',
        -            'userid_path',
        -            'userid_service',
        -            ),
        -        27 => array( // addition module
        -            // http://wiki.nginx.org/HttpAdditionModule
        -            // http://nginx.org/en/docs/http/ngx_http_addition_module.html
        -            'add_before_body',
        -            'add_after_body',
        -            'addition_types',
        -            ),
        -        28 => array( // embedded Perl module
        -            // http://wiki.nginx.org/HttpPerlModule
        -            // http://nginx.org/en/docs/http/ngx_http_perl_module.html
        -            'perl',
        -            'perl_modules',
        -            'perl_require',
        -            'perl_set',
        -            ),
        -        29 => array( // flash video files module
        -            // http://wiki.nginx.org/HttpFlvModule
        -            // http://nginx.org/en/docs/http/ngx_http_flv_module.html
        -            'flv',
        -            ),
        -        30 => array( // gzip precompression module
        -            // http://wiki.nginx.org/HttpGzipStaticModule
        -            // http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html
        -            'gzip_static',
        -            // Removed to remove duplication with ngx_http_gzip_module
        -            //'gzip_http_version',
        -            //'gzip_proxied',
        -            //'gzip_disable',
        -            //'gzip_vary',
        -            ),
        -        31 => array( // random index module
        -            // http://wiki.nginx.org/HttpRandomIndexModule
        -            // http://nginx.org/en/docs/http/ngx_http_random_index_module.html
        -            'random_index',
        -            ),
        -        32 => array( // real ip module
        -            // http://wiki.nginx.org/HttpRealipModule
        -            // http://nginx.org/en/docs/http/ngx_http_realip_module.html
        -            'set_real_ip_from',
        -            'real_ip_header',
        -            'real_ip_recursive',
        -            ),
        -        33 => array( // https module
        -            // http://wiki.nginx.org/HttpSslModule
        -            // http://nginx.org/en/docs/http/ngx_http_ssl_module.html
        -            'ssl',
        -            'ssl_certificate',
        -            'ssl_certificate_key',
        -            'ssl_ciphers',
        -            'ssl_client_certificate',
        -            'ssl_crl',
        -            'ssl_dhparam',
        -            // Use the documentation for the core module since it links to the
        -            // original properly
        -            //'ssl_engine',
        -            'ssl_prefer_server_ciphers',
        -            'ssl_protocols',
        -            'ssl_session_cache',
        -            'ssl_session_timeout',
        -            'ssl_verify_client',
        -            'ssl_verify_depth',
        -            ),
        -        34 => array( // status module
        -            // http://wiki.nginx.org/HttpStubStatusModule
        -            'stub_status',
        -            ),
        -        35 => array( // substitution module
        -            // http://wiki.nginx.org/HttpSubModule
        -            // http://nginx.org/en/docs/http/ngx_http_sub_module.html
        -            'sub_filter',
        -            'sub_filter_once',
        -            'sub_filter_types',
        -            ),
        -        36 => array( // NginxHttpDavModule
        -            // http://wiki.nginx.org/HttpDavModule
        -            // http://nginx.org/en/docs/http/ngx_http_dav_module.html
        -            'dav_access',
        -            'dav_methods',
        -            'create_full_put_path',
        -            'min_delete_depth',
        -            ),
        -        37 => array( // Google performance tools module
        -            // http://wiki.nginx.org/GooglePerftoolsModule
        -            'google_perftools_profiles',
        -            ),
        -        38 => array( // xslt module
        -            // http://wiki.nginx.org/HttpXsltModule
        -            // http://nginx.org/en/docs/http/ngx_http_xslt_module.html
        -            'xslt_entities',
        -            'xslt_param',
        -            'xslt_string_param',
        -            'xslt_stylesheet',
        -            'xslt_types',
        -            ),
        -        39 => array( // uWSGI module
        -            // http://wiki.nginx.org/HttpUwsgiModule
        -            'uwsgi_bind',
        -            'uwsgi_buffer_size',
        -            'uwsgi_buffering',
        -            'uwsgi_buffers',
        -            'uwsgi_busy_buffers_size',
        -            'uwsgi_cache',
        -            'uwsgi_cache_bypass',
        -            'uwsgi_cache_key',
        -            'uwsgi_cache_lock',
        -            'uwsgi_cache_lock_timeout',
        -            'uwsgi_cache_methods',
        -            'uwsgi_cache_min_uses',
        -            'uwsgi_cache_path',
        -            'uwsgi_cache_use_stale',
        -            'uwsgi_cache_valid',
        -            'uwsgi_connect_timeout',
        -            'uwsgi_hide_header',
        -            'uwsgi_ignore_client_abort',
        -            'uwsgi_ignore_headers',
        -            'uwsgi_intercept_errors',
        -            'uwsgi_max_temp_file_size',
        -            'uwsgi_modifier',
        -            'uwsgi_next_upstream',
        -            'uwsgi_no_cache',
        -            'uwsgi_param',
        -            'uwsgi_pass',
        -            'uwsgi_pass_header',
        -            'uwsgi_pass_request_body',
        -            'uwsgi_pass_request_headers',
        -            'uwsgi_read_timeout',
        -            'uwsgi_send_timeout',
        -            'uwsgi_store',
        -            'uwsgi_store_access',
        -            'uwsgi_string',
        -            'uwsgi_temp_file_write_size',
        -            'uwsgi_temp_path',
        -            ),
        -        40 => array( // SCGI module
        -            // http://wiki.nginx.org/HttpScgiModule
        -            // Note: These directives were pulled from nginx 1.2.3
        -            //       ngx_http_scgi_module.c source file.
        -            'scgi_bind',
        -            'scgi_buffering',
        -            'scgi_buffers',
        -            'scgi_buffer_size',
        -            'scgi_busy_buffers_size',
        -            'scgi_cache',
        -            'scgi_cache_bypass',
        -            'scgi_cache_key',
        -            'scgi_cache_lock',
        -            'scgi_cache_lock_timeout',
        -            'scgi_cache_methods',
        -            'scgi_cache_min_uses',
        -            'scgi_cache_path',
        -            'scgi_cache_use_stale',
        -            'scgi_cache_valid',
        -            'scgi_connect_timeout',
        -            'scgi_hide_header',
        -            'scgi_ignore_client_abort',
        -            'scgi_ignore_headers',
        -            'scgi_intercept_errors',
        -            'scgi_max_temp_file_size',
        -            'scgi_next_upstream',
        -            'scgi_no_cache',
        -            'scgi_param',
        -            'scgi_pass',
        -            'scgi_pass_header',
        -            'scgi_pass_request_body',
        -            'scgi_pass_request_headers',
        -            'scgi_read_timeout',
        -            'scgi_send_timeout',
        -            'scgi_store',
        -            'scgi_store_access',
        -            'scgi_temp_file_write_size',
        -            'scgi_temp_path',
        -            ),
        -        41 => array( // split clients module
        -            // http://wiki.nginx.org/HttpSplitClientsModule
        -            // http://nginx.org/en/docs/http/ngx_http_split_clients_module.html
        -            'split_clients',
        -            ),
        -        42 => array( // X-Accel module
        -            // http://wiki.nginx.org/X-accel
        -            'X-Accel-Redirect',
        -            'X-Accel-Buffering',
        -            'X-Accel-Charset',
        -            'X-Accel-Expires',
        -            'X-Accel-Limit-Rate',
        -            ),
        -        43 => array( // degradation module
        -            // http://wiki.nginx.org/HttpDegradationModule
        -            'degradation',
        -            'degrade',
        -            ),
        -        44 => array( // GeoIP module
        -            // http://wiki.nginx.org/HttpGeoipModule
        -            // http://nginx.org/en/docs/http/ngx_http_geoip_module.html
        -            'geoip_country',
        -            'geoip_city',
        -            'geoip_proxy',
        -            'geoip_proxy_recursive',
        -            ),
        -        45 => array( // Image filter module
        -            // http://wiki.nginx.org/HttpImageFilterModule
        -            // http://nginx.org/en/docs/http/ngx_http_image_filter_module.html
        -            'image_filter',
        -            'image_filter_buffer',
        -            'image_filter_jpeg_quality',
        -            'image_filter_sharpen',
        -            'image_filter_transparency',
        -            ),
        -        46 => array( // MP4 module
        -            // http://wiki.nginx.org/HttpMp4Module
        -            // http://nginx.org/en/docs/http/ngx_http_mp4_module.html
        -            'mp4',
        -            'mp4_buffer_size',
        -            'mp4_max_buffer_size',
        -            ),
        -        47 => array( // Secure Link module
        -            // http://wiki.nginx.org/HttpSecureLinkModule
        -            // http://nginx.org/en/docs/http/ngx_http_secure_link_module.html
        -            'secure_link',
        -            'secure_link_md',
        -            'secure_link_secret',
        -            ),
        -        48 => array( // Mail Core module
        -            // http://wiki.nginx.org/MailCoreModule
        -            'auth',
        -            'imap_capabilities',
        -            'imap_client_buffer',
        -            'pop_auth',
        -            'pop_capabilities',
        -            'protocol',
        -            'smtp_auth',
        -            'smtp_capabilities',
        -            'so_keepalive',
        -            'timeout',
        -            // Removed to prioritize documentation for core module
        -            //'listen',
        -            //'server',
        -            //'server_name',
        -            ),
        -        49 => array( // Mail Auth module
        -            // http://wiki.nginx.org/MailAuthModule
        -            'auth_http',
        -            'auth_http_header',
        -            'auth_http_timeout',
        -            ),
        -        50 => array( // Mail Proxy module
        -            // http://wiki.nginx.org/MailProxyModule
        -            'proxy',
        -            'proxy_buffer',
        -            'proxy_pass_error_message',
        -            'proxy_timeout',
        -            'xclient',
        -            ),
        -        51 => array( // Mail SSL module
        -            // http://wiki.nginx.org/MailSslModule
        -            // Removed to prioritize documentation for http
        -            //'ssl',
        -            //'ssl_certificate',
        -            //'ssl_certificate_key',
        -            //'ssl_ciphers',
        -            //'ssl_prefer_server_ciphers',
        -            //'ssl_protocols',
        -            //'ssl_session_cache',
        -            //'ssl_session_timeout',
        -            'starttls',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '=', '~', ';'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true,
        -        10 => true,
        -        11 => true,
        -        12 => true,
        -        13 => true,
        -        14 => true,
        -        15 => true,
        -        16 => true,
        -        17 => true,
        -        18 => true,
        -        19 => true,
        -        20 => true,
        -        21 => true,
        -        22 => true,
        -        23 => true,
        -        24 => true,
        -        25 => true,
        -        26 => true,
        -        27 => true,
        -        28 => true,
        -        29 => true,
        -        30 => true,
        -        31 => true,
        -        32 => true,
        -        33 => true,
        -        34 => true,
        -        35 => true,
        -        36 => true,
        -        37 => true,
        -        38 => true,
        -        39 => true,
        -        40 => true,
        -        41 => true,
        -        42 => true,
        -        43 => true,
        -        44 => true,
        -        45 => true,
        -        46 => true,
        -        47 => true,
        -        48 => true,
        -        49 => true,
        -        50 => true,
        -        51 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #993333;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000066;',
        -            4 => 'color: #000000; font-weight: bold;',
        -        ),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => 'http://wiki.nginx.org/CoreModule#{FNAME}',
        -        2 => 'http://wiki.nginx.org/NginxHttpEventsModule#{FNAME}',
        -        3 => 'http://wiki.nginx.org/NginxHttpCoreModule#{FNAME}',
        -        4 => 'http://wiki.nginx.org/NginxHttpUpstreamModule#{FNAME}',
        -        5 => 'http://wiki.nginx.org/NginxHttpAccessModule#{FNAME}',
        -        6 => 'http://wiki.nginx.org/NginxHttpAuthBasicModule#{FNAME}',
        -        7 => 'http://wiki.nginx.org/NginxHttpAutoIndexModule#{FNAME}',
        -        8 => 'http://wiki.nginx.org/NginxHttpBrowserModule#{FNAME}',
        -        9 => 'http://wiki.nginx.org/NginxHttpCharsetModule#{FNAME}',
        -        10 => 'http://wiki.nginx.org/NginxHttpEmptyGifModule#{FNAME}',
        -        11 => 'http://wiki.nginx.org/NginxHttpFcgiModule#{FNAME}',
        -        12 => 'http://wiki.nginx.org/NginxHttpGeoModule#{FNAME}',
        -        13 => 'http://wiki.nginx.org/NginxHttpGzipModule#{FNAME}',
        -        14 => 'http://wiki.nginx.org/NginxHttpHeadersModule#{FNAME}',
        -        15 => 'http://wiki.nginx.org/NginxHttpIndexModule#{FNAME}',
        -        16 => 'http://wiki.nginx.org/HttpLimitReqModule#{FNAME}',
        -        17 => 'http://wiki.nginx.org/NginxHttpRefererModule#{FNAME}',
        -        18 => 'http://wiki.nginx.org/NginxHttpLimitZoneModule#{FNAME}',
        -        19 => 'http://wiki.nginx.org/HttpLimitConnModule#{FNAME}',
        -        20 => 'http://wiki.nginx.org/NginxHttpLogModule#{FNAME}',
        -        21 => 'http://wiki.nginx.org/NginxHttpMapModule#{FNAME}',
        -        22 => 'http://wiki.nginx.org/NginxHttpMemcachedModule#{FNAME}',
        -        23 => 'http://wiki.nginx.org/NginxHttpProxyModule#{FNAME}',
        -        24 => 'http://wiki.nginx.org/NginxHttpRewriteModule#{FNAME}',
        -        25 => 'http://wiki.nginx.org/NginxHttpSsiModule#{FNAME}',
        -        26 => 'http://wiki.nginx.org/NginxHttpUserIdModule#{FNAME}',
        -        27 => 'http://wiki.nginx.org/NginxHttpAdditionModule#{FNAME}',
        -        28 => 'http://wiki.nginx.org/NginxHttpEmbeddedPerlModule#{FNAME}',
        -        29 => 'http://wiki.nginx.org/NginxHttpFlvStreamModule#{FNAME}',
        -        30 => 'http://wiki.nginx.org/NginxHttpGzipStaticModule#{FNAME}',
        -        31 => 'http://wiki.nginx.org/NginxHttpRandomIndexModule#{FNAME}',
        -        32 => 'http://wiki.nginx.org/NginxHttpRealIpModule#{FNAME}',
        -        33 => 'http://wiki.nginx.org/NginxHttpSslModule#{FNAME}',
        -        34 => 'http://wiki.nginx.org/NginxHttpStubStatusModule#{FNAME}',
        -        35 => 'http://wiki.nginx.org/NginxHttpSubModule#{FNAME}',
        -        36 => 'http://wiki.nginx.org/NginxHttpDavModule#{FNAME}',
        -        37 => 'http://wiki.nginx.org/NginxHttpGooglePerfToolsModule#{FNAME}',
        -        38 => 'http://wiki.nginx.org/NginxHttpXsltModule#{FNAME}',
        -        39 => 'http://wiki.nginx.org/NginxHttpUwsgiModule#{FNAME}',
        -        40 => 'http://wiki.nginx.org/HttpScgiModule',
        -        41 => 'http://wiki.nginx.org/HttpSplitClientsModule#{FNAME}',
        -        42 => 'http://wiki.nginx.org/X-accel#{FNAME}',
        -        43 => 'http://wiki.nginx.org/HttpDegradationModule#{FNAME}',
        -        44 => 'http://wiki.nginx.org/HttpGeoipModule#{FNAME}',
        -        45 => 'http://wiki.nginx.org/HttpImageFilterModule#{FNAME}',
        -        46 => 'http://wiki.nginx.org/HttpMp4Module#{FNAME}',
        -        47 => 'http://wiki.nginx.org/HttpSecureLinkModule#{FNAME}',
        -        48 => 'http://wiki.nginx.org/MailCoreModule#{FNAME}',
        -        49 => 'http://wiki.nginx.org/MailAuthModule#{FNAME}',
        -        50 => 'http://wiki.nginx.org/MailProxyModule#{FNAME}',
        -        51 => 'http://wiki.nginx.org/MailSslModule#{FNAME}',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
        -        4 => '<[a-zA-Z_][a-zA-Z0-9_]*>',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php
        deleted file mode 100644
        index b288ae09..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php
        +++ /dev/null
        @@ -1,201 +0,0 @@
        - 'Nimrod',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    //Longest quotemarks ALWAYS first
        -    'QUOTEMARKS' => array('"""', '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX_0O | GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F |
        -        GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -
        -        /*
        -        ** Set 1: reserved words
        -        ** http://nimrod-lang.org/manual.html#identifiers-keywords
        -        */
        -        1 => array(
        -            'addr', 'and', 'as', 'asm', 'atomic',
        -            'bind', 'block', 'break',
        -            'case', 'cast', 'const', 'continue', 'converter',
        -            'discard', 'distinct', 'div', 'do',
        -            'elif', 'else', 'end', 'enum', 'except', 'export',
        -            'finally', 'for', 'from',
        -            'generic',
        -            'if', 'import', 'in', 'include', 'interface', 'is', 'isnot', 'iterator',
        -            'lambda', 'let',
        -            'macro', 'method', 'mixin', 'mod',
        -            'nil', 'not', 'notin',
        -            'object', 'of', 'or', 'out',
        -            'proc',
        -            'raise', 'ref', 'return',
        -            'shl', 'shr', 'static',
        -            'template', 'try', 'tuple', 'type',
        -            'using',
        -            'var',
        -            'when', 'while', 'with', 'without',
        -            'xor',
        -            'yield'
        -            ),
        -
        -        2 => array(
        -            'true', 'false'
        -            ),
        -
        -        3 => array(
        -            /* system module */
        -            'abs', 'accumulateResult', 'add', 'addAndFetch', 'addQuitProc',
        -            'alloc', 'alloc0', 'allocCStringArray', 'allocShared',
        -            'allocShared0', 'assert', 'astToStr', 'atomicDec', 'atomicInc',
        -            'card', 'chr', 'clamp', 'close', 'cmp', 'compileOption',
        -            'compiles', 'contains', 'copy', 'copyMem', 'countdown', 'countup',
        -            'create', 'createShared', 'createSharedU', 'createU',
        -            'cstringArrayToSeq', 'currentSourcePath', 'dealloc',
        -            'deallocCStringArray', 'deallocShared', 'debugEcho', 'dec',
        -            'defined', 'definedInScope', 'del', 'delete', 'doAssert', 'each',
        -            'echo', 'endOfFile', 'equalMem', 'excl', 'failedAssertImpl',
        -            'fieldPairs', 'fields', 'fileHandle', 'find', 'finished',
        -            'flushFile', 'free', 'freeShared', 'GC_addCycleRoot', 'GC_disable',
        -            'GC_disableMarkAndSweep', 'GC_enable', 'GC_enableMarkAndSweep',
        -            'GC_fullCollect', 'GC_getStatistics', 'gcInvariant', 'GC_ref',
        -            'GC_setStrategy', 'GC_unref', 'getCurrentException',
        -            'getCurrentExceptionMsg', 'getFilePos', 'getFileSize',
        -            'getFreeMem', 'getOccupiedMem', 'getRefcount', 'getStackTrace',
        -            'getTotalMem', 'getTypeInfo', 'gorge', 'high', 'inc', 'incl',
        -            'insert', 'instantiationInfo', 'internalNew', 'isNil', 'isOnStack',
        -            'isStatic', 'items', 'len', 'likely', 'lines', 'locals', 'low',
        -            'map', 'max', 'min', 'moveMem', 'new', 'newException', 'newSeq',
        -            'newString', 'newStringOfCap', 'newWideCString', 'nimDestroyRange',
        -            'onFailedAssert', 'onRaise', 'open', 'ord', 'pairs', 'pop', 'pred',
        -            'quit', 'raiseAssert', 'rand', 'rawEnv', 'rawProc', 'readAll',
        -            'readBuffer', 'readBytes', 'readChar', 'readChars', 'readFile',
        -            'readLine', 'realloc', 'reallocShared', 'reopen', 'repr', 'reset',
        -            'resize', 'safeAdd', 'setControlCHook', 'setFilePos', 'setLen',
        -            'shallow', 'shallowCopy', 'sizeof', 'slurp', 'staticExec',
        -            'staticRead', 'stdmsg', 'substr', 'succ', 'swap', 'toBiggestFloat',
        -            'toBiggestInt', 'toFloat', 'toInt', 'toU16', 'toU32', 'toU8',
        -            'unlikely', 'unsafeNew', 'write', 'writeBuffer', 'writeBytes',
        -            'writeChars', 'writeFile', 'writeln', 'writeStackTrace', 'ze',
        -            'ze64', 'zeroMem'
        -            ),
        -
        -        4 => array(
        -            'auto', 'pointer', 'ptr', 'void', 'any', 'expr', 'stmt', 'typedesc',
        -            'int', 'int8', 'int16', 'int32', 'int64', 'float', 'float32', 'float64',
        -            'uint', 'uint8', 'uint16', 'uint32', 'uint64',
        -            'bool', 'char', 'range', 'array', 'seq', 'set', 'string', 'TSlice',
        -            'cstring', 'cint', 'clong', 'culong', 'cchar', 'cschar', 'cshort',
        -            'csize', 'clonglong', 'cfloat', 'cdouble', 'clongdouble', 'cuchar',
        -            'cushort', 'cuint', 'culonglong', 'cstringArray'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '*', '/', '%', '\\',
        -        '+', '-', '~', '|',
        -        '&',
        -        '..',
        -        '=', '<', '>', '!',
        -        '@', '?'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #ff7700;font-weight:bold;',    // Reserved
        -            2 => 'color: #008000;',                     // Built-ins + self
        -            3 => 'color: #dc143c;',                     // Standard lib
        -            4 => 'color: #0000cd;'                      // Special methods
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: black;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #483d8b;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff4500;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: black;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php
        deleted file mode 100644
        index 02b1eb27..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php
        +++ /dev/null
        @@ -1,351 +0,0 @@
        - 'NSIS',
        -    'COMMENT_SINGLE' => array(1 => ';', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'",'"','`'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            '!addincludedir', '!addplugindir', '!appendfile', '!cd', '!define', '!delfile', '!echo', '!error',
        -            '!execute', '!finalize', '!getdllversion', '!include', '!insertmacro', '!macro', '!macroend', '!makensis', '!packhdr',
        -            '!searchparse', '!searchreplace', '!system', '!tempfile', '!undef', '!verbose', '!warning'
        -            ),
        -        2 => array(
        -            'AddBrandingImage', 'AllowRootDirInstall', 'AutoCloseWindow', 'BGFont',
        -            'BGGradient', 'BrandingText', 'Caption', 'ChangeUI', 'CheckBitmap', 'CompletedText', 'ComponentText',
        -            'CRCCheck', 'DetailsButtonText', 'DirText', 'DirVar', 'DirVerify', 'FileErrorText',
        -            'Function', 'FunctionEnd', 'Icon', 'InstallButtonText', 'InstallColors', 'InstallDir',
        -            'InstallDirRegKey', 'InstProgressFlags', 'InstType', 'LangString', 'LicenseBkColor',
        -            'LicenseData', 'LicenseForceSelection', 'LicenseLangString', 'LicenseText', 'LoadLanguageFile', 'ManifestDPIAware', 'ManifestSupportedOS',
        -            'MiscButtonText', 'Name', 'OutFile', 'Page', 'PageEx', 'PageExEnd', 'RequestExecutionLevel', 'Section',
        -            'SectionEnd', 'SectionGroup', 'SectionGroupEnd', 'SetCompressor', 'SetFont', 'ShowInstDetails',
        -            'ShowUninstDetails', 'SilentInstall', 'SilentUnInstall', 'SpaceTexts', 'SubCaption', 'SubSection',
        -            'SubSectionEnd', 'Unicode', 'UninstallButtonText', 'UninstallCaption', 'UninstallIcon', 'UninstallSubCaption',
        -            'UninstallText', 'UninstPage', 'Var', 'VIAddVersionKey', 'VIFileVersion', 'VIProductVersion', 'WindowIcon', 'XPStyle'
        -            ),
        -        3 => array(
        -            'AddSize', 'AllowSkipFiles', 'FileBufSize', 'GetInstDirError', 'PageCallbacks',
        -            'SectionIn', 'SetCompress', 'SetCompressorDictSize',
        -            'SetDatablockOptimize', 'SetDateSave', 'SetOverwrite', 'SetPluginUnload'
        -            ),
        -        4 => array(
        -            'Abort', 'BringToFront', 'Call', 'CallInstDLL', 'ClearErrors', 'CopyFiles','CreateDirectory',
        -            'CreateFont', 'CreateShortCut', 'Delete', 'DeleteINISec', 'DeleteINIStr', 'DeleteRegKey',
        -            'DeleteRegValue', 'DetailPrint', 'EnableWindow', 'EnumRegKey', 'EnumRegValue', 'Exch', 'Exec',
        -            'ExecShell', 'ExecWait', 'ExpandEnvStrings', 'File', 'FileClose', 'FileOpen', 'FileRead',
        -            'FileReadByte', 'FileReadUTF16LE', 'FileReadWord', 'FileSeek', 'FileWrite', 'FileWriteByte', 'FileWriteUTF16LE', 'FileWriteWord', 'FindClose', 'FindFirst', 'FindNext',
        -            'FindWindow', 'FlushINI', 'GetCurInstType', 'GetCurrentAddress', 'GetDlgItem', 'GetDLLVersion',
        -            'GetDLLVersionLocal', 'GetErrorLevel', 'GetFileTime', 'GetFileTimeLocal', 'GetFullPathName',
        -            'GetFunctionAddress', 'GetLabelAddress', 'GetTempFileName', 'Goto', 'HideWindow',
        -            'IfAbort', 'IfErrors', 'IfFileExists', 'IfRebootFlag', 'IfSilent', 'InitPluginsDir', 'InstTypeGetText',
        -            'InstTypeSetText', 'IntCmp', 'IntCmpU', 'IntFmt', 'IntOp', 'IsWindow', 'LockWindow', 'LogSet', 'LogText',
        -            'MessageBox', 'Nop', 'Pop', 'Push', 'Quit', 'ReadEnvStr', 'ReadINIStr', 'ReadRegDWORD', 'ReadRegStr',
        -            'Reboot', 'RegDLL', 'Rename', 'ReserveFile', 'Return', 'RMDir', 'SearchPath', 'SectionGetFlags',
        -            'SectionGetInstTypes', 'SectionGetSize', 'SectionGetText', 'SectionSetFlags', 'SectionSetInstTypes',
        -            'SectionSetSize', 'SectionSetText', 'SendMessage', 'SetAutoClose', 'SetBrandingImage', 'SetCtlColors',
        -            'SetCurInstType', 'SetDetailsPrint', 'SetDetailsView', 'SetErrorLevel', 'SetErrors', 'SetFileAttributes',
        -            'SetOutPath', 'SetRebootFlag', 'SetRegView', 'SetShellVarContext', 'SetSilent', 'ShowWindow', 'Sleep', 'StrCmp', 'StrCmpS',
        -            'StrCpy', 'StrLen', 'UnRegDLL', 'WriteINIStr', 'WriteRegBin', 'WriteRegDWORD', 'WriteRegExpandStr',
        -            'WriteRegStr', 'WriteUninstaller'
        -            ),
        -        5 => array(
        -            'all', 'alwaysoff', 'ARCHIVE', 'auto', 'both', 'bzip2', 'checkbox', 'components', 'current',
        -            'custom', 'directory', 'false', 'FILE_ATTRIBUTE_ARCHIVE', 'FILE_ATTRIBUTE_HIDDEN', 'FILE_ATTRIBUTE_NORMAL',
        -            'FILE_ATTRIBUTE_OFFLINE', 'FILE_ATTRIBUTE_READONLY', 'FILE_ATTRIBUTE_SYSTEM,TEMPORARY',
        -            'FILE_ATTRIBUTE_TEMPORARY', 'force', 'HIDDEN', 'hide', 'HKCC', 'HKCR', 'HKCU', 'HKDD', 'HKEY_CLASSES_ROOT',
        -            'HKEY_CURRENT_CONFIG', 'HKEY_CURRENT_USER', 'HKEY_DYN_DATA', 'HKEY_LOCAL_MACHINE', 'HKEY_PERFORMANCE_DATA',
        -            'HKEY_USERS', 'HKLM', 'HKPD', 'HKU', 'IDABORT', 'IDCANCEL', 'IDIGNORE', 'IDNO', 'IDOK', 'IDRETRY', 'IDYES',
        -            'ifdiff', 'ifnewer', 'instfiles', 'lastused', 'leave', 'license', 'listonly', 'lzma', 'manual',
        -            'MB_ABORTRETRYIGNORE', 'MB_DEFBUTTON1', 'MB_DEFBUTTON2', 'MB_DEFBUTTON3', 'MB_DEFBUTTON4',
        -            'MB_ICONEXCLAMATION', 'MB_ICONINFORMATION', 'MB_ICONQUESTION', 'MB_ICONSTOP', 'MB_OK', 'MB_OKCANCEL',
        -            'MB_RETRYCANCEL', 'MB_RIGHT', 'MB_SETFOREGROUND', 'MB_TOPMOST', 'MB_YESNO', 'MB_YESNOCANCEL', 'nevershow',
        -            'none', 'normal', 'off', 'OFFLINE', 'on', 'radiobuttons', 'READONLY', 'RO', 'SHCTX', 'SHELL_CONTEXT', 'show',
        -            'silent', 'silentlog', 'SW_HIDE', 'SW_SHOWMAXIMIZED', 'SW_SHOWMINIMIZED', 'SW_SHOWNORMAL', 'SYSTEM',
        -            'textonly', 'true', 'try', 'uninstConfirm', 'zlib'
        -            ),
        -        6 => array(
        -            '/a', '/components', '/COMPONENTSONLYONCUSTOM', '/CUSTOMSTRING', '/e', '/FILESONLY', '/FINAL', '/gray', '/GLOBAL',
        -            '/ifempty', '/IMGID', '/ITALIC', '/lang', '/NOCUSTOM', '/nonfatal', '/NOUNLOAD', '/oname', '/r', '/REBOOTOK',
        -            '/RESIZETOFIT', '/SOLID', '/SD', '/SHORT', '/silent', '/STRIKE', '/TIMEOUT', '/TRIMCENTER', '/TRIMLEFT',
        -            '/TRIMRIGHT', '/UNDERLINE', '/windows', '/x'
        -            ),
        -        7 => array(
        -            '.onGUIEnd', '.onGUIInit', '.onInit', '.onInstFailed', '.onInstSuccess', '.onMouseOverSection',
        -            '.onRebootFailed', '.onSelChange', '.onUserAbort', '.onVerifyInstDir', 'un.onGUIEnd', 'un.onGUIInit',
        -            'un.onInit', 'un.onRebootFailed', 'un.onUninstFailed', 'un.onUninstSuccess', 'un.onUserAbort'
        -            ),
        -        8 => array(
        -            'MUI.nsh', '"${NSISDIR}\Contrib\Modern UI\System.nsh"', 'MUI_SYSVERSION', 'MUI_ICON', 'MUI_UNICON',
        -            'MUI_HEADERIMAGE', 'MUI_HEADERIMAGE_BITMAP', 'MUI_HEADERIMAGE_BITMAP_NOSTRETCH', 'MUI_HEADERIMAGE_BITMAP_RTL',
        -            'MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_UNBITMAP', 'MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH',
        -            'MUI_HEADERIMAGE_UNBITMAP_RTL', 'MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_RIGHT', 'MUI_BGCOLOR',
        -            'MUI_UI', 'MUI_UI_HEADERIMAGE', 'MUI_UI_HEADERIMAGE_RIGHT', 'MUI_UI_COMPONENTSPAGE_SMALLDESC',
        -            'MUI_UI_COMPONENTSPAGE_NODESC', 'MUI_WELCOMEFINISHPAGE_BITMAP', 'MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH',
        -            'MUI_WELCOMEFINISHPAGE_INI', 'MUI_UNWELCOMEFINISHPAGE_BITMAP', 'MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH',
        -            'MUI_UNWELCOMEFINISHPAGE_INI', 'MUI_LICENSEPAGE_BGCOLOR', 'MUI_COMPONENTSPAGE_CHECKBITMAP',
        -            'MUI_COMPONENTSPAGE_SMALLDESC', 'MUI_COMPONENTSPAGE_NODESC', 'MUI_INSTFILESPAGE_COLORS',
        -            'MUI_INSTFILESPAGE_PROGRESSBAR', 'MUI_FINISHPAGE_NOAUTOCLOSE', 'MUI_UNFINISHPAGE_NOAUTOCLOSE',
        -            'MUI_ABORTWARNING', 'MUI_ABORTWARNING_TEXT', 'MUI_UNABORTWARNING', 'MUI_UNABORTWARNING_TEXT',
        -            'MUI_PAGE_WELCOME', 'MUI_PAGE_LICENSE', 'MUI_PAGE_COMPONENTS', 'MUI_PAGE_DIRECTORY',
        -            'MUI_PAGE_STARTMENU', 'MUI_PAGE_INSTFILES', 'MUI_PAGE_FINISH', 'MUI_UNPAGE_WELCOME',
        -            'MUI_UNPAGE_CONFIRM', 'MUI_UNPAGE_LICENSE', 'MUI_UNPAGE_COMPONENTS', 'MUI_UNPAGE_DIRECTORY',
        -            'MUI_UNPAGE_INSTFILES', 'MUI_UNPAGE_FINISH', 'MUI_PAGE_HEADER_TEXT', 'MUI_PAGE_HEADER_SUBTEXT',
        -            'MUI_WELCOMEPAGE_TITLE', 'MUI_WELCOMEPAGE_TITLE_3LINES', 'MUI_WELCOMEPAGE_TEXT',
        -            'MUI_LICENSEPAGE_TEXT_TOP', 'MUI_LICENSEPAGE_TEXT_BOTTOM', 'MUI_LICENSEPAGE_BUTTON',
        -            'MUI_LICENSEPAGE_CHECKBOX', 'MUI_LICENSEPAGE_CHECKBOX_TEXT', 'MUI_LICENSEPAGE_RADIOBUTTONS',
        -            'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT', 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE',
        -            'MUI_COMPONENTSPAGE_TEXT_TOP', 'MUI_COMPONENTSPAGE_TEXT_COMPLIST', 'MUI_COMPONENTSPAGE_TEXT_INSTTYPE',
        -            'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE', 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO',
        -            'MUI_DIRECTORYPAGE_TEXT_TOP', 'MUI_DIRECTORYPAGE_TEXT_DESTINATION', 'MUI_DIRECTORYPAGE_VARIABLE',
        -            'MUI_DIRECTORYPAGE_VERIFYONLEAVE', 'MUI_STARTMENU_WRITE_BEGIN', 'MUI_STARTMENU_WRITE_END',
        -            'MUI_STARTMENUPAGE_TEXT_TOP', 'MUI_STARTMENUPAGE_TEXT_CHECKBOX', 'MUI_STARTMENUPAGE_DEFAULTFOLDER',
        -            'MUI_STARTMENUPAGE_NODISABLE', 'MUI_STARTMENUPAGE_REGISTRY_ROOT', 'MUI_STARTMENUPAGE_REGISTRY_KEY',
        -            'MUI_STARTMENUPAGE_REGISTRY_VALUENAME', 'MUI_INSTFILESPAGE_FINISHHEADER_TEXT',
        -            'MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT', 'MUI_INSTFILESPAGE_ABORTHEADER_TEXT',
        -            'MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT', 'MUI_FINISHPAGE_TITLE', 'MUI_FINISHPAGE_TITLE_3LINES',
        -            'MUI_FINISHPAGE_TEXT', 'MUI_FINISHPAGE_TEXT_LARGE', 'MUI_FINISHPAGE_BUTTON',
        -            'MUI_FINISHPAGE_TEXT_REBOOT', 'MUI_FINISHPAGE_TEXT_REBOOTNOW', 'MUI_FINISHPAGE_TEXT_REBOOTLATER',
        -            'MUI_FINISHPAGE_RUN', 'MUI_FINISHPAGE_RUN_TEXT', 'MUI_FINISHPAGE_RUN_PARAMETERS',
        -            'MUI_FINISHPAGE_RUN_NOTCHECKED', 'MUI_FINISHPAGE_RUN_FUNCTION', 'MUI_FINISHPAGE_SHOWREADME',
        -            'MUI_FINISHPAGE_SHOWREADME_TEXT', 'MUI_FINISHPAGE_SHOWREADME_NOTCHECKED',
        -            'MUI_FINISHPAGE_SHOWREADME_FUNCTION', 'MUI_FINISHPAGE_LINK', 'MUI_FINISHPAGE_LINK_LOCATION',
        -            'MUI_FINISHPAGE_LINK_COLOR', 'MUI_FINISHPAGE_NOREBOOTSUPPORT', 'MUI_UNCONFIRMPAGE_TEXT_TOP',
        -            'MUI_UNCONFIRMPAGE_TEXT_LOCATION', 'MUI_LANGUAGE', 'MUI_LANGDLL_DISPLAY',
        -            'MUI_LANGDLL_REGISTRY_ROOT', 'MUI_LANGDLL_REGISTRY_KEY', 'MUI_LANGDLL_REGISTRY_VALUENAME',
        -            'MUI_LANGDLL_WINDOWTITLE', 'MUI_LANGDLL_INFO', 'MUI_LANGDLL_ALWAYSSHOW',
        -            'MUI_RESERVEFILE_INSTALLOPTIONS', 'MUI_RESERVEFILE_LANGDLL', 'MUI_FUNCTION_DESCRIPTION_BEGIN',
        -            'MUI_DESCRIPTION_TEXT', 'MUI_FUNCTION_DESCRIPTION_END', 'MUI_INSTALLOPTIONS_EXTRACT',
        -            'MUI_INSTALLOPTIONS_EXTRACT_AS', 'MUI_HEADER_TEXT', 'MUI_INSTALLOPTIONS_DISPLAY',
        -            'MUI_INSTALLOPTIONS_INITDIALOG', 'MUI_INSTALLOPTIONS_SHOW',
        -            'MUI_INSTALLOPTIONS_DISPLAY_RETURN', 'MUI_INSTALLOPTIONS_SHOW_RETURN',
        -            'MUI_INSTALLOPTIONS_READ', 'MUI_INSTALLOPTIONS_WRITE',
        -            'MUI_CUSTOMFUNCTION_GUIINIT', 'MUI_CUSTOMFUNCTION_UNGUIINIT',
        -            'MUI_CUSTOMFUNCTION_ABORT', 'MUI_CUSTOMFUNCTION_UNABORT',
        -            'MUI_PAGE_CUSTOMFUNCTION_PRE', 'MUI_PAGE_CUSTOMFUNCTION_SHOW', 'MUI_PAGE_CUSTOMFUNCTION_LEAVE',
        -            'MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT'
        -            ),
        -        9 => array(
        -            'LogicLib.nsh', '${LOGICLIB}', 'LOGICLIB_STRCMP', 'LOGICLIB_INT64CMP', 'LOGICLIB_SECTIONCMP', '${If}', '${Unless}',
        -            '${ElseIf}', '${ElseUnless}', '${Else}', '${EndIf}', '${EndUnless}', '${AndIf}', '${AndUnless}',
        -            '${OrIf}', '${OrUnless}', '${IfThen}', '${IfCmd}', '${Select}', '${Case2}', '${Case3}',
        -            '${Case4}', '${Case5}', '${CaseElse}', '${Default}', '${EndSelect}', '${Switch}',
        -            '${Case}', '${EndSwitch}', '${Do}', '${DoWhile}', '${UntilWhile}', '${Continue}', '${Break}',
        -            '${Loop}', '${LoopWhile}', '${LoopUntil}', '${While}', '${ExitWhile}', '${EndWhile}', '${For}',
        -            '${ForEach}', '${ExitFor}', '${Next}', '${Abort}', '${Errors}', '${RebootFlag}', '${Silent}',
        -            '${FileExists}', '${Cmd}', '${SectionIsSelected}', '${SectionIsSectionGroup}',
        -            '${SectionIsSectionGroupEnd}', '${SectionIsBold}', '${SectionIsReadOnly}',
        -            '${SectionIsExpanded}', '${SectionIsPartiallySelected}'
        -            ),
        -        10 => array(
        -            'StrFunc.nsh', '${STRFUNC}', '${StrCase}', '${StrClb}', '${StrIOToNSIS}', '${StrLoc}', '${StrNSISToIO}', '${StrRep}',
        -            '${StrSort}', '${StrStr}', '${StrStrAdv}', '${StrTok}', '${StrTrimNewLines}'
        -            ),
        -        11 => array(
        -            'UpgradeDLL.nsh', 'UPGRADEDLL_INCLUDED', 'UpgradeDLL'
        -            ),
        -        12 => array(
        -            'Sections.nsh', 'SECTIONS_INCLUDED', '${SF_SELECTED}', '${SF_SECGRP}', '${SF_SUBSEC}', '${SF_SECGRPEND}',
        -            '${SF_SUBSECEND}', '${SF_BOLD}', '${SF_RO}', '${SF_EXPAND}', '${SF_PSELECTED}', '${SF_TOGGLED}',
        -            '${SF_NAMECHG}', '${SECTION_OFF}', 'SelectSection', 'UnselectSection', 'ReverseSection',
        -            'StartRadioButtons', 'RadioButton', 'EndRadioButtons', '${INSTTYPE_0}', '${INSTTYPE_1}', '${INSTTYPE_2}',
        -            '${INSTTYPE_3}', '${INSTTYPE_4}', '${INSTTYPE_5}', '${INSTTYPE_6}', '${INSTTYPE_7}', '${INSTTYPE_8}',
        -            '${INSTTYPE_9}', '${INSTTYPE_10}', '${INSTTYPE_11}', '${INSTTYPE_12}', '${INSTTYPE_13}', '${INSTTYPE_14}',
        -            '${INSTTYPE_15}', '${INSTTYPE_16}', '${INSTTYPE_17}', '${INSTTYPE_18}', '${INSTTYPE_19}', '${INSTTYPE_20}',
        -            '${INSTTYPE_21}', '${INSTTYPE_22}', '${INSTTYPE_23}', '${INSTTYPE_24}', '${INSTTYPE_25}', '${INSTTYPE_26}',
        -            '${INSTTYPE_27}', '${INSTTYPE_28}', '${INSTTYPE_29}', '${INSTTYPE_30}', '${INSTTYPE_31}', '${INSTTYPE_32}',
        -            'SetSectionInInstType', 'ClearSectionInInstType', 'SetSectionFlag', 'ClearSectionFlag', 'SectionFlagIsSet'
        -            ),
        -        13 => array(
        -            'Colors.nsh', 'WHITE', 'BLACK', 'YELLOW', 'RED', 'GREEN', 'BLUE', 'MAGENTA', 'CYAN', 'rgb2hex'
        -            ),
        -        14 => array(
        -            'FileFunc.nsh', '${Locate}', '${GetSize}', '${DriveSpace}', '${GetDrives}', '${GetTime}', '${GetFileAttributes}', '${GetFileVersion}', '${GetExeName}', '${GetExePath}', '${GetParameters}', '${GetOptions}', '${GetRoot}', '${GetParent}', '${GetFileName}', '${GetBaseName}', '${GetFileExt}', '${BannerTrimPath}', '${DirState}', '${RefreshShellIcons}'
        -            ),
        -        15 => array(
        -            'TextFunc.nsh', '${LineFind}', '${LineRead}', '${FileReadFromEnd}', '${LineSum}', '${FileJoin}', '${TextCompare}', '${ConfigRead}', '${ConfigWrite}', '${FileRecode}', '${TrimNewLines}'
        -            ),
        -        16 => array(
        -            'WordFunc.nsh', '${WordFind}', '${WordFind2X}', '${WordFind3X}', '${WordReplace}', '${WordAdd}', '${WordInsert}', '${StrFilter}', '${VersionCompare}', '${VersionConvert}'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false,
        -        8 => false,
        -        9 => false,
        -        10 => false,
        -        11 => false,
        -        12 => false,
        -        13 => false,
        -        14 => false,
        -        15 => false,
        -        16 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000066; font-weight:bold;',
        -            2 => 'color: #000066;',
        -            3 => 'color: #003366;',
        -            4 => 'color: #000099;',
        -            5 => 'color: #ff6600;',
        -            6 => 'color: #ff6600;',
        -            7 => 'color: #006600;',
        -            8 => 'color: #006600;',
        -            9 => 'color: #006600;',
        -            10 => 'color: #006600;',
        -            11 => 'color: #006600;',
        -            12 => 'color: #006600;',
        -            13 => 'color: #006600;',
        -            14 => 'color: #006600;',
        -            15 => 'color: #006600;',
        -            16 => 'color: #006600;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #660066; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => ''
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #660066;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => ''
        -            ),
        -        'METHODS' => array(
        -            0 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => ''
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #660000;',
        -            1 => 'color: #660000;',
        -            2 => 'color: #660000;',
        -            3 => 'color: #660000;',
        -            4 => 'color: #660000;',
        -            5 => 'color: #660000;',
        -            6 => 'color: #660000;',
        -            7 => 'color: #000099;',
        -            8 => 'color: #003399;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => '',
        -        9 => '',
        -        10 => '',
        -        11 => '',
        -        12 => '',
        -        13 => '',
        -        14 => '',
        -        15 => '',
        -        16 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => '\$\$',
        -        1 => '\$\\r',
        -        2 => '\$\\n',
        -        3 => '\$\\t',
        -        4 => '\$[a-zA-Z0-9_]+',
        -        5 => '\$\{.{1,256}\}',
        -        6 => '\$\\\(.{1,256}\\\)',
        -        7 => array(
        -            GESHI_SEARCH => '([^:\/\\\*\?\"\<\>(?:)\s]*?)(::)([^:\/\\\*\?\"\<\>(?:)\s]*?)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '\\2\\3'
        -            ),
        -        8 => array(
        -            GESHI_SEARCH => '([^:\/\\\*\?\"\<\>(?:)\s]*?)(::)([^:\/\\\*\?\"\<\>(?:)]*?\s)',
        -            GESHI_REPLACE => '\\3',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1\\2',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php
        deleted file mode 100644
        index 30869ff3..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php
        +++ /dev/null
        @@ -1,133 +0,0 @@
        - 'Oberon-2',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('(*' => '*)'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array("''"),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'ARRAY', 'BEGIN', 'BY', 'CASE',
        -            'CONST', 'DIV', 'DO', 'ELSE', 'ELSIF', 'END',
        -            'EXIT', 'FOR', 'IF', 'IMPORT', 'IN', 'IS',
        -            'LOOP', 'MOD', 'MODULE', 'OF',
        -            'OR', 'POINTER', 'PROCEDURE', 'RECORD',
        -            'REPEAT', 'RETURN', 'THEN', 'TO',
        -            'TYPE', 'UNTIL', 'VAR', 'WHILE', 'WITH'
        -            ),
        -        2 => array(
        -            'NIL', 'FALSE', 'TRUE',
        -            ),
        -        3 => array(
        -            'ABS', 'ASH', 'ASSERT', 'CAP', 'CHR', 'COPY', 'DEC',
        -            'ENTIER', 'EXCL', 'HALT', 'INC', 'INCL', 'LEN',
        -            'LONG', 'MAX', 'MIN', 'NEW', 'ODD', 'ORD', 'SHORT', 'SIZE'
        -            ),
        -        4 => array(
        -            'BOOLEAN', 'CHAR', 'SHORTINT', 'LONGINT',
        -            'INTEGER', 'LONGREAL', 'REAL', 'SET', 'PTR'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        ',', ':', '=', '+', '-', '*', '/', '#', '~'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #000066; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            'HARD' => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0066ee;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php
        deleted file mode 100644
        index 4da05b68..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php
        +++ /dev/null
        @@ -1,356 +0,0 @@
        - 'Objective-C',
        -    'COMMENT_SINGLE' => array(
        -        //Compiler directives
        -        1 => '#',
        -        //Single line C-Comments
        -        2 => '//'
        -        ),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline Continuation for single-line comment
        -        2 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Pseudo-Highlighting of the @-sign before strings
        -        3 => "/@(?=\")/"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'"),
        -    'ESCAPE_CHAR' => '\\',
        -
        -    'KEYWORDS' => array(
        -        // Objective-C keywords
        -        1 => array(
        -            'while', 'switch', 'return', 'in', 'if', 'goto', 'foreach', 'for',
        -            'else', 'do', 'default', 'continue', 'case', '@try', '@throw',
        -            '@synthesize', '@synchronized', '@selector', '@public', '@protocol',
        -            '@protected', '@property', '@private', '@interface',
        -            '@implementation', '@finally', '@end', '@encode', '@defs', '@class',
        -            '@catch'
        -            ),
        -        // Macros and constants
        -        2 => array(
        -            'YES', 'USHRT_MAX', 'ULONG_MAX', 'UINT_MAX', 'UCHAR_MAX', 'true',
        -            'TMP_MAX', 'stdout', 'stdin', 'stderr', 'SIGTERM', 'SIGSEGV',
        -            'SIGINT', 'SIGILL', 'SIG_IGN', 'SIGFPE', 'SIG_ERR', 'SIG_DFL',
        -            'SIGABRT', 'SHRT_MIN', 'SHRT_MAX', 'SEEK_SET', 'SEEK_END',
        -            'SEEK_CUR', 'SCHAR_MIN', 'SCHAR_MAX', 'RAND_MAX', 'NULL',
        -            'NO', 'nil', 'Nil', 'L_tmpnam', 'LONG_MIN', 'LONG_MAX',
        -            'LDBL_MIN_EXP', 'LDBL_MIN', 'LDBL_MAX_EXP', 'LDBL_MAX',
        -            'LDBL_MANT_DIG', 'LDBL_EPSILON', 'LDBL_DIG', 'INT_MIN', 'INT_MAX',
        -            'HUGE_VAL', 'FOPEN_MAX', 'FLT_ROUNDS', 'FLT_RADIX', 'FLT_MIN_EXP',
        -            'FLT_MIN', 'FLT_MAX_EXP', 'FLT_MAX', 'FLT_MANT_DIG', 'FLT_EPSILON',
        -            'FLT_DIG', 'FILENAME_MAX', 'false', 'EXIT_SUCCESS', 'EXIT_FAILURE',
        -            'errno', 'ERANGE', 'EOF', 'enum', 'EDOM', 'DBL_MIN_EXP', 'DBL_MIN',
        -            'DBL_MAX_EXP', 'DBL_MAX', 'DBL_MANT_DIG', 'DBL_EPSILON', 'DBL_DIG',
        -            'CLOCKS_PER_SEC', 'CHAR_MIN', 'CHAR_MAX', 'CHAR_BIT', 'BUFSIZ',
        -            'break'
        -            ),
        -        // C standard library functions
        -        3 => array(
        -            'vsprintf', 'vprintf', 'vfprintf', 'va_start', 'va_end', 'va_arg',
        -            'ungetc', 'toupper', 'tolower', 'tmpname', 'tmpfile', 'time',
        -            'tanh', 'tan', 'system', 'strxfrm', 'strtoul', 'strtol', 'strtok',
        -            'strtod', 'strstr', 'strspn', 'strrchr', 'strpbrk', 'strncpy',
        -            'strncmp', 'strncat', 'strlen', 'strftime', 'strerror', 'strcspn',
        -            'strcpy', 'strcoll', 'strcmp', 'strchr', 'strcat', 'sscanf',
        -            'srand', 'sqrt', 'sprintf', 'snprintf', 'sizeof', 'sinh', 'sin',
        -            'setvbuf', 'setjmp', 'setbuf', 'scanf', 'rewind', 'rename',
        -            'remove', 'realloc', 'rand', 'qsort', 'puts', 'putchar', 'putc',
        -            'printf', 'pow', 'perror', 'offsetof', 'modf', 'mktime', 'memset',
        -            'memmove', 'memcpy', 'memcmp', 'memchr', 'malloc', 'longjmp',
        -            'log10', 'log', 'localtime', 'ldiv', 'ldexp', 'labs', 'isxdigit',
        -            'isupper', 'isspace', 'ispunct', 'isprint', 'islower',
        -            'isgraph', 'isdigit', 'iscntrl', 'isalpha', 'isalnum', 'gmtime',
        -            'gets', 'getenv', 'getchar', 'getc', 'fwrite', 'ftell', 'fsetpos',
        -            'fseek', 'fscanf', 'frexp', 'freopen', 'free', 'fread', 'fputs',
        -            'fputc', 'fprintf', 'fopen', 'fmod', 'floor', 'fgets', 'fgetpos',
        -            'fgetc', 'fflush', 'ferror', 'feof', 'fclose', 'fabs', 'exp',
        -            'exit', 'div', 'difftime', 'ctime', 'cosh', 'cos', 'clock',
        -            'clearerr', 'ceil', 'calloc', 'bsearch', 'atol', 'atoi', 'atof',
        -            'atexit', 'atan2', 'atan', 'assert', 'asin', 'asctime', 'acos',
        -            'abs', 'abort'
        -            ),
        -        // Data types (C, Objective-C, Cocoa)
        -        4 => array(
        -            'volatile', 'void', 'va_list', 'unsigned', 'union', 'typedef', 'tm',
        -            'time_t', 'struct', 'string', 'static', 'size_t',
        -            'signed', 'signal', 'short', 'SEL', 'register', 'raise',
        -            'ptrdiff_t', 'NSZone', 'NSRect', 'NSRange', 'NSPoint', 'long',
        -            'ldiv_t', 'jmp_buf', 'int', 'IMP', 'id', 'fpos_t', 'float', 'FILE',
        -            'extern', 'double', 'div_t', 'const', 'clock_t', 'Class', 'char',
        -            'BOOL', 'auto'
        -            ),
        -        // Foundation classes
        -        5 => array(
        -            'NSXMLParser', 'NSXMLNode', 'NSXMLElement', 'NSXMLDTDNode',
        -            'NSXMLDTD', 'NSXMLDocument', 'NSWhoseSpecifier',
        -            'NSValueTransformer', 'NSValue', 'NSUserDefaults', 'NSURLResponse',
        -            'NSURLRequest', 'NSURLProtocol', 'NSURLProtectionSpace',
        -            'NSURLHandle', 'NSURLDownload', 'NSURLCredentialStorage',
        -            'NSURLCredential', 'NSURLConnection', 'NSURLCache',
        -            'NSURLAuthenticationChallenge', 'NSURL', 'NSUniqueIDSpecifier',
        -            'NSUndoManager', 'NSUnarchiver', 'NSTimeZone', 'NSTimer',
        -            'NSThread', 'NSTask', 'NSString', 'NSStream', 'NSSpellServer',
        -            'NSSpecifierTest', 'NSSortDescriptor', 'NSSocketPortNameServer',
        -            'NSSocketPort', 'NSSetCommand', 'NSSet', 'NSSerializer',
        -            'NSScriptWhoseTest', 'NSScriptSuiteRegistry',
        -            'NSScriptObjectSpecifier', 'NSScriptExecutionContext',
        -            'NSScriptCommandDescription', 'NSScriptCommand',
        -            'NSScriptCoercionHandler', 'NSScriptClassDescription', 'NSScanner',
        -            'NSRunLoop', 'NSRelativeSpecifier', 'NSRecursiveLock',
        -            'NSRangeSpecifier', 'NSRandomSpecifier', 'NSQuitCommand', 'NSProxy',
        -            'NSProtocolChecker', 'NSPropertySpecifier',
        -            'NSPropertyListSerialization', 'NSProcessInfo', 'NSPredicate',
        -            'NSPositionalSpecifier', 'NSPortNameServer', 'NSPortMessage',
        -            'NSPortCoder', 'NSPort', 'NSPointerFunctions', 'NSPointerArray',
        -            'NSPipe', 'NSOutputStream', 'NSOperationQueue', 'NSOperation',
        -            'NSObject', 'NSNumberFormatter', 'NSNumber', 'NSNull',
        -            'NSNotificationQueue', 'NSNotificationCenter', 'NSNotification',
        -            'NSNetServiceBrowser', 'NSNetService', 'NSNameSpecifier',
        -            'NSMutableURLRequest', 'NSMutableString', 'NSMutableSet',
        -            'NSMutableIndexSet', 'NSMutableDictionary', 'NSMutableData',
        -            'NSMutableCharacterSet', 'NSMutableAttributedString',
        -            'NSMutableArray', 'NSMoveCommand', 'NSMiddleSpecifier',
        -            'NSMethodSignature', 'NSMetadataQueryResultGroup',
        -            'NSMetadataQueryAttributeValueTuple', 'NSMetadataQuery',
        -            'NSMetadataItem', 'NSMessagePortNameServer', 'NSMessagePort',
        -            'NSMapTable', 'NSMachPort', 'NSMachBootstrapServer',
        -            'NSLogicalTest', 'NSLock', 'NSLocale', 'NSKeyedUnarchiver',
        -            'NSKeyedArchiver', 'NSInvocationOperation', 'NSInvocation',
        -            'NSInputStream', 'NSIndexSpecifier', 'NSIndexSet', 'NSIndexPath',
        -            'NSHTTPURLResponse', 'NSHTTPCookieStorage', 'NSHTTPCookie',
        -            'NSHost', 'NSHashTable', 'NSGetCommand', 'NSGarbageCollector',
        -            'NSFormatter', 'NSFileManager', 'NSFileHandle', 'NSExpression',
        -            'NSExistsCommand', 'NSException', 'NSError', 'NSEnumerator',
        -            'NSDistributedNotificationCenter', 'NSDistributedLock',
        -            'NSDistantObjectRequest', 'NSDistantObject',
        -            'NSDirectoryEnumerator', 'NSDictionary', 'NSDeserializer',
        -            'NSDeleteCommand', 'NSDecimalNumberHandler', 'NSDecimalNumber',
        -            'NSDateFormatter', 'NSDateComponents', 'NSDate', 'NSData',
        -            'NSCreateCommand', 'NSCountedSet', 'NSCountCommand', 'NSConnection',
        -            'NSConditionLock', 'NSCondition', 'NSCompoundPredicate',
        -            'NSComparisonPredicate', 'NSCoder', 'NSCloseCommand',
        -            'NSCloneCommand', 'NSClassDescription', 'NSCharacterSet',
        -            'NSCalendarDate', 'NSCalendar', 'NSCachedURLResponse', 'NSBundle',
        -            'NSAutoreleasePool', 'NSAttributedString', 'NSAssertionHandler',
        -            'NSArray', 'NSArchiver', 'NSAppleScript', 'NSAppleEventManager',
        -            'NSAppleEventDescriptor', 'NSAffineTransform'
        -            ),
        -        // Foundation protocols
        -        6 => array(
        -            'NSURLProtocolClient', 'NSURLHandleClient', 'NSURLClient',
        -            'NSURLAuthenticationChallengeSender', 'NSScriptObjectSpecifiers',
        -            'NSScriptKeyValueCoding', 'NSScriptingComparisonMethods',
        -            'NSObjCTypeSerializationCallBack', 'NSMutableCopying',
        -            'NSLocking', 'NSKeyValueObserving', 'NSKeyValueCoding',
        -            'NSFastEnumeration', 'NSErrorRecoveryAttempting',
        -            'NSDecimalNumberBehaviors', 'NSCopying', 'NSComparisonMethods',
        -            'NSCoding'
        -            ),
        -        // AppKit classes
        -        7 => array(
        -            'NSWorkspace', 'NSWindowController', 'NSWindow', 'NSViewController',
        -            'NSViewAnimation', 'NSView', 'NSUserDefaultsController',
        -            'NSTypesetter', 'NSTreeNode', 'NSTreeController', 'NSTrackingArea',
        -            'NSToolbarItemGroup', 'NSToolbarItem', 'NSToolbar',
        -            'NSTokenFieldCell', 'NSTokenField', 'NSTextView',
        -            'NSTextTableBlock', 'NSTextTable', 'NSTextTab', 'NSTextStorage',
        -            'NSTextList', 'NSTextFieldCell', 'NSTextField', 'NSTextContainer',
        -            'NSTextBlock', 'NSTextAttachmentCell', 'NSTextAttachment', 'NSText',
        -            'NSTabViewItem', 'NSTabView', 'NSTableView', 'NSTableHeaderView',
        -            'NSTableHeaderCell', 'NSTableColumn', 'NSStepperCell', 'NSStepper',
        -            'NSStatusItem', 'NSStatusBar', 'NSSplitView', 'NSSpellChecker',
        -            'NSSpeechSynthesizer', 'NSSpeechRecognizer', 'NSSound',
        -            'NSSliderCell', 'NSSlider', 'NSSimpleHorizontalTypesetter',
        -            'NSShadow', 'NSSegmentedControl', 'NSSegmentedCell',
        -            'NSSecureTextFieldCell', 'NSSecureTextField', 'NSSearchFieldCell',
        -            'NSSearchField', 'NSScrollView', 'NSScroller', 'NSScreen',
        -            'NSSavePanel', 'NSRulerView', 'NSRulerMarker', 'NSRuleEditor',
        -            'NSResponder', 'NSQuickDrawView', 'NSProgressIndicator',
        -            'NSPrintPanel', 'NSPrintOperation', 'NSPrintInfo', 'NSPrinter',
        -            'NSPredicateEditorRowTemplate', 'NSPredicateEditor',
        -            'NSPopUpButtonCell', 'NSPopUpButton', 'NSPICTImageRep',
        -            'NSPersistentDocument', 'NSPDFImageRep', 'NSPathControl',
        -            'NSPathComponentCell', 'NSPathCell', 'NSPasteboard',
        -            'NSParagraphStyle', 'NSPanel', 'NSPageLayout', 'NSOutlineView',
        -            'NSOpenPanel', 'NSOpenGLView', 'NSOpenGLPixelFormat',
        -            'NSOpenGLPixelBuffer', 'NSOpenGLContext', 'NSObjectController',
        -            'NSNibOutletConnector', 'NSNibControlConnector', 'NSNibConnector',
        -            'NSNib', 'NSMutableParagraphStyle', 'NSMovieView', 'NSMovie',
        -            'NSMenuView', 'NSMenuItemCell', 'NSMenuItem', 'NSMenu', 'NSMatrix',
        -            'NSLevelIndicatorCell', 'NSLevelIndicator', 'NSLayoutManager',
        -            'NSInputServer', 'NSInputManager', 'NSImageView', 'NSImageRep',
        -            'NSImageCell', 'NSImage', 'NSHelpManager', 'NSGraphicsContext',
        -            'NSGradient', 'NSGlyphInfo', 'NSGlyphGenerator', 'NSFormCell',
        -            'NSForm', 'NSFontPanel', 'NSFontManager', 'NSFontDescriptor',
        -            'NSFont', 'NSFileWrapper', 'NSEvent', 'NSEPSImageRep', 'NSDrawer',
        -            'NSDocumentController', 'NSDocument', 'NSDockTile',
        -            'NSDictionaryController', 'NSDatePickerCell', 'NSDatePicker',
        -            'NSCustomImageRep', 'NSCursor', 'NSController', 'NSControl',
        -            'NSComboBoxCell', 'NSComboBox', 'NSColorWell', 'NSColorSpace',
        -            'NSColorPicker', 'NSColorPanel', 'NSColorList', 'NSColor',
        -            'NSCollectionViewItem', 'NSCollectionView', 'NSClipView',
        -            'NSCIImageRep', 'NSCell', 'NSCachedImageRep', 'NSButtonCell',
        -            'NSButton', 'NSBrowserCell', 'NSBrowser', 'NSBox',
        -            'NSBitmapImageRep', 'NSBezierPath', 'NSATSTypesetter',
        -            'NSArrayController', 'NSApplication', 'NSAnimationContext',
        -            'NSAnimation', 'NSAlert', 'NSActionCell'
        -            ),
        -        // AppKit protocols
        -        8 => array(
        -            'NSWindowScripting', 'NSValidatedUserInterfaceItem',
        -            'NSUserInterfaceValidations', 'NSToolTipOwner',
        -            'NSToolbarItemValidation', 'NSTextInput',
        -            'NSTableDataSource', 'NSServicesRequests',
        -            'NSPrintPanelAccessorizing', 'NSPlaceholders',
        -            'NSPathControlDelegate', 'NSPathCellDelegate',
        -            'NSOutlineViewDataSource', 'NSNibAwaking', 'NSMenuValidation',
        -            'NSKeyValueBindingCreation', 'NSInputServiceProvider',
        -            'NSInputServerMouseTracker', 'NSIgnoreMisspelledWords',
        -            'NSGlyphStorage', 'NSFontPanelValidation', 'NSEditorRegistration',
        -            'NSEditor', 'NSDraggingSource', 'NSDraggingInfo',
        -            'NSDraggingDestination', 'NSDictionaryControllerKeyValuePair',
        -            'NSComboBoxDataSource', 'NSComboBoxCellDataSource',
        -            'NSColorPickingDefault', 'NSColorPickingCustom', 'NSChangeSpelling',
        -            'NSAnimatablePropertyContainer', 'NSAccessibility'
        -            ),
        -        // CoreData classes
        -        9 => array(
        -            'NSRelationshipDescription', 'NSPropertyMapping',
        -            'NSPropertyDescription', 'NSPersistentStoreCoordinator',
        -            'NSPersistentStore', 'NSMigrationManager', 'NSMappingModel',
        -            'NSManagedObjectModel', 'NSManagedObjectID',
        -            'NSManagedObjectContext', 'NSManagedObject',
        -            'NSFetchRequestExpression', 'NSFetchRequest',
        -            'NSFetchedPropertyDescription', 'NSEntityMigrationPolicy',
        -            'NSEntityMapping', 'NSEntityDescription', 'NSAttributeDescription',
        -            'NSAtomicStoreCacheNode', 'NSAtomicStore'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true
        -        ),
        -    // Define the colors for the groups listed above
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #a61390;', // Objective-C keywords
        -            2 => 'color: #a61390;', // Macros and constants
        -            3 => 'color: #a61390;', // C standard library functions
        -            4 => 'color: #a61390;', // data types
        -            5 => 'color: #400080;', // Foundation classes
        -            6 => 'color: #2a6f76;', // Foundation protocols
        -            7 => 'color: #400080;', // AppKit classes
        -            8 => 'color: #2a6f76;', // AppKit protocols
        -            9 => 'color: #400080;' // CoreData classes
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #6e371a;', // Preprocessor directives
        -            2 => 'color: #11740a; font-style: italic;', // Normal C single-line comments
        -            3 => 'color: #bf1d1a;', // Q-sign in front of Strings
        -            'MULTI' => 'color: #11740a; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #2400d9;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #002200;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #bf1d1a;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #2400d9;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #002200;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html',
        -        4 => '',
        -        5 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/{FNAME}_Class/',
        -        6 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Protocols/{FNAME}_Protocol/',
        -        7 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/{FNAME}_Class/',
        -        8 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/{FNAME}_Protocol/',
        -        9 => 'http://developer.apple.com/documentation/Cocoa/Reference/CoreDataFramework/Classes/{FNAME}_Class/'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php
        deleted file mode 100644
        index 34dd091f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php
        +++ /dev/null
        @@ -1,114 +0,0 @@
        - 'Objeck Programming Language',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array('#~' => '~#'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'virtual', 'if', 'else', 'do', 'while', 'use', 'bundle', 'native',
        -            'static', 'public', 'private', 'class', 'function', 'method',
        -            'select', 'other', 'enum', 'for', 'each', 'label', 'return', 'from'
        -            ),
        -        2 => array(
        -            'Byte', 'Int', 'Nil', 'Float', 'Char', 'Bool', 'String'
        -            ),
        -        3 => array(
        -            'true', 'false'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '%', '=', '<', '>', '&', '|', ':', ';', ',', '+=', '-=', '*=', '/=',
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #b1b100;',
        -            3 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '->'
        -        ),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php
        deleted file mode 100644
        index 84c74bfe..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php
        +++ /dev/null
        @@ -1,110 +0,0 @@
        - 'OCaml (brief)',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('(*' => '*)'),
        -    'CASE_KEYWORDS' => 0,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => "",
        -    'KEYWORDS' => array(
        -        /* main OCaml keywords */
        -        1 => array(
        -            'and', 'as', 'asr', 'begin', 'class', 'closed', 'constraint', 'do', 'done', 'downto', 'else',
        -            'end', 'exception', 'external', 'failwith', 'false', 'flush', 'for', 'fun', 'function', 'functor',
        -            'if', 'in', 'include', 'inherit',  'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor',
        -            'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser',
        -            'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then',
        -            'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with'
        -            )
        -        ),
        -    /* highlighting symbols is really important in OCaml */
        -    'SYMBOLS' => array(
        -        ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+',
        -        '>', '<', '(', ')', '[', ']', '&', '|', '#', "'"
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #06c; font-weight: bold;' /* nice blue */
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #6c6;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #3cb371;' /* nice green */
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #c6c;' /* pink */
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #060;' /* dark green */
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #a52a2a;' /* maroon */
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php
        deleted file mode 100644
        index 364f5567..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php
        +++ /dev/null
        @@ -1,185 +0,0 @@
        - 'OCaml',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('(*' => '*)'),
        -    'COMMENT_REGEXP' => array(1 => '/\(\*(?:(?R)|.)+?\*\)/s'),
        -    'CASE_KEYWORDS' => 0,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => "",
        -    'KEYWORDS' => array(
        -        /* main OCaml keywords */
        -        1 => array(
        -            'and', 'as', 'asr', 'begin', 'class', 'closed', 'constraint', 'do', 'done', 'downto', 'else',
        -            'end', 'exception', 'external', 'failwith', 'false', 'for', 'fun', 'function', 'functor',
        -            'if', 'in', 'include', 'inherit',  'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor',
        -            'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser',
        -            'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then',
        -            'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with'
        -            ),
        -        /* define names of main librarys, so we can link to it */
        -        2 => array(
        -            'Arg', 'Arith_status', 'Array', //'Array1', 'Array2', 'Array3',
        -            'ArrayLabels', 'Big_int', 'Bigarray', 'Buffer', 'Callback',
        -            'CamlinternalLazy', 'CamlinternalMod', 'CamlinternalOO', 'Char',
        -            'Complex', 'Condition', 'Dbm', 'Digest', 'Dynlink', 'Event',
        -            'Filename', 'Format', 'Gc', 'Genlex', 'Graphics', 'GraphicsX11',
        -            'Hashtbl', 'Int32', 'Int64', 'Lazy', 'Lexing', 'List', 'ListLabels',
        -            'Map', 'Marshal', 'MoreLabels', 'Mutex', 'Nativeint', 'Num', 'Obj',
        -            'Oo', 'Parsing', 'Pervasives', 'Printexc', 'Printf', 'Queue',
        -            'Random', 'Scanf', 'Set', 'Sort', 'Stack', 'StdLabels', 'Str',
        -            'Stream', 'String', 'StringLabels', 'Sys', 'Thread', 'ThreadUnix',
        -            'Tk', 'Unix', 'UnixLabels', 'Weak'
        -            ),
        -        /* just link to the Pervasives functions library, cause it's the default opened library when starting OCaml */
        -        3 => array(
        -            'abs', 'abs_float', 'acos', 'asin', 'at_exit', 'atan', 'atan2',
        -            'bool_of_string', 'ceil', 'char_of_int', 'classify_float',
        -            'close_in', 'close_in_noerr', 'close_out', 'close_out_noerr',
        -            'compare', 'cos', 'cosh', 'decr', 'epsilon_float', 'exit', 'exp',
        -            'float', 'float_of_int', 'float_of_string', 'floor', 'flush',
        -            'flush_all', 'format_of_string', 'frexp', 'fst', 'ignore',
        -            'in_channel_length', 'infinity', 'input', 'input_binary_int',
        -            'input_byte', 'input_char', 'input_line', 'input_value',
        -            'int_of_char', 'int_of_float', 'int_of_string', 'invalid_arg',
        -            'ldexp', 'log', 'log10', 'max', 'max_float', 'max_int', 'min',
        -            'min_float', 'min_int', 'mod_float', 'modf', 'nan', 'open_in',
        -            'open_in_bin', 'open_in_gen', 'open_out', 'open_out_bin',
        -            'open_out_gen', 'out_channel_length', 'output', 'output_binary_int',
        -            'output_byte', 'output_char', 'output_string', 'output_value',
        -            'pos_in', 'pos_out',  'pred', 'prerr_char', 'prerr_endline',
        -            'prerr_float', 'prerr_int', 'prerr_newline', 'prerr_string',
        -            'print_char', 'print_endline', 'print_float', 'print_int',
        -            'print_newline', 'print_string', 'read_float', 'read_int',
        -            'read_line', 'really_input', 'seek_in', 'seek_out',
        -            'set_binary_mode_in', 'set_binary_mode_out', 'sin', 'sinh', 'snd',
        -            'sqrt', 'string_of_bool', 'string_of_float', 'string_of_format',
        -            'string_of_int', 'succ', 'tan', 'tanh', 'truncate'
        -            ),
        -        /* here Pervasives Types */
        -        4 => array (
        -            'array','bool','char','exn','file_descr','format','fpclass',
        -            'in_channel','int','int32','int64','list','nativeint','open_flag',
        -            'out_channel','string','Sys_error','unit'
        -            ),
        -        /* finally Pervasives Exceptions */
        -        5 => array (
        -            'Exit', 'Invalid_Argument', 'Failure', 'Division_by_zero'
        -            )
        -        ),
        -    /* highlighting symbols is really important in OCaml */
        -    'SYMBOLS' => array(
        -        '+.', '-.', '*.', '/.', '[<', '>]',
        -        ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+',
        -        '>', '<', '(', ')', '[', ']', '&', '|', '#', "'",
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => true, /* functions name are case sensitive */
        -        3 => true, /* types name too */
        -        4 => true, /* pervasives types */
        -        5 => true  /* pervasives exceptions */
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            2 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            3 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            4 => 'color: #06c; font-weight: bold;', /* nice blue */
        -            5 => 'color: #06c; font-weight: bold;' /* nice blue */
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #5d478b; font-style: italic;', /* light purple */
        -            1 => 'color: #5d478b; font-style: italic;' /* light purple */
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #a52a2a;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #3cb371;' /* nice green */
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #c6c;' /* pink */
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #060;' /* dark green */
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'font-weight:bold; color:#339933;',
        -            2 => 'font-weight:bold; color:#993399;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #a52a2a;' /* maroon */
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        /* some of keywords are Pervasives functions (land, lxor, asr, ...) */
        -        1 => '',
        -        /* link to the wanted library */
        -        2 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/{FNAME}.html',
        -        /* link to Pervasives functions */
        -        3 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#VAL{FNAME}',
        -        /* link to Pervasives type */
        -        4 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#TYPE{FNAME}',
        -        /* link to Pervasives exceptions */
        -        5 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#EXCEPTION{FNAME}'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        1 => '~\w+',
        -        2 => '`(?=(?-i:[a-z]))\w*',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php
        deleted file mode 100644
        index 4f6677f3..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php
        +++ /dev/null
        @@ -1,513 +0,0 @@
        - 'GNU/Octave',
        -    'COMMENT_SINGLE' => array(1 => '#', 2 => '%'),
        -    // we can't use COMMENT_MULTI since start and end of block comments need to
        -    // be alone on the line (optionally, with whitespace). See COMMENT_REGEXP
        -    'COMMENT_MULTI' => array(),
        -    // we can't use QUOTEMARKS, not even HARDQUOTE, see COMMENT_REGEXP
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'COMMENT_REGEXP' => array(
        -        // Single quote strings: we can't use QUOTEMARKS here since new
        -        // lines will break the string. Plus, single quote strings do not even
        -        // allow for continuation markers, only double quote strings allow it.
        -        // Also, to do not misdetect the transpose operator ' as the start of a
        -        // string we assert to not follow a variable name (letters, digits and
        -        // underscores) or a closing bracket (round, square or curly) or a dot
        -        // (to form the array transpose operator ".'" ).
        -        3 => "/(? '/"(.|(\.\.\.|\\\)(\s)*?\n)*?(? "/^\s*?[%#]{\s*?$.*?^\s*?[%#]}\s*?$/ms",
        -        // Packaging system: comes here so that pkg can also be used in the
        -        // function form. The list of pkg commands is optional to the match so
        -        // that at least pkg is highlighted if new commands are implemented
        -        6 => "/\bpkg(?!\s*\()\s+((un)?install|update|(un)?load|list|(global|local)_list|describe|prefix|(re)?build)?\b/",
        -        // Function handles
        -        7 => "/@([a-z_][a-z1-9_]*)?/i",
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC |
        -        GESHI_NUMBER_OCT_PREFIX |
        -        GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'KEYWORDS' => array(
        -        // Reserved words
        -        1 => array(
        -            'break', 'case', 'catch', 'continue', 'do', 'else', 'elseif', 'end',
        -            'end_try_catch', 'end_unwind_protect', 'endfor', 'endfunction',
        -            'endif', 'endparfor', 'endswitch', 'endwhile', 'for', 'function',
        -            'if', 'otherwise', 'parfor', 'return',
        -            'switch', 'try', 'until', 'unwind_protect',
        -            'unwind_protect_cleanup', 'varargin', 'varargout', 'while'
        -            ),
        -        // Storage type
        -        2 => array(
        -            'global', 'persistent', 'static'
        -            ),
        -        // Internal variable
        -        3 => array(
        -            'ans'
        -            ),
        -        // Data types
        -        4 => array(
        -            'cell', 'char', 'double', 'uint8', 'uint16', 'uint32', 'uint64',
        -            'int8','int16', 'int32', 'int64', 'logical', 'single', 'struct'
        -            ),
        -        // Built in
        -        5 => array(
        -            'P_tmpdir', 'abs', 'acos', 'acosh',
        -            'add_input_event_hook', 'addlistener', 'addpath', 'addproperty',
        -            'all', 'allow_noninteger_range_as_index', 'and', 'angle', 'any',
        -            'arg', 'argnames', 'argv', 'asin', 'asinh', 'assignin', 'atan',
        -            'atan2', 'atanh', 'atexit', 'autoload', 'available_graphics_toolkits',
        -            'beep_on_error', 'bitand', 'bitmax', 'bitor', 'bitshift', 'bitxor',
        -            'builtin', 'canonicalize_file_name', 'cat', 'cbrt', 'cd', 'ceil',
        -            'cell2struct', 'cellstr', 'chdir', 'class', 'clc',
        -            'clear', 'columns', 'command_line_path', 'completion_append_char',
        -            'completion_matches', 'complex', 'confirm_recursive_rmdir', 'conj',
        -            'cos', 'cosh', 'cputime', 'crash_dumps_octave_core', 'ctranspose',
        -            'cumprod', 'cumsum', 'dbclear', 'dbcont', 'dbdown', 'dbnext',
        -            'dbquit', 'dbstack', 'dbstatus', 'dbstep', 'dbstop', 'dbtype', 'dbup',
        -            'dbwhere', 'debug_on_error', 'debug_on_interrupt', 'debug_on_warning',
        -            'default_save_options', 'dellistener', 'diag', 'diary', 'diff',
        -            'disp', 'do_braindead_shortcircuit_evaluation', 'do_string_escapes',
        -            'doc_cache_file', 'drawnow', 'dup2', 'echo',
        -            'echo_executing_commands', 'edit_history','eq', 'erf', 'erfc',
        -            'erfcx', 'erfinv', 'errno', 'errno_list', 'error', 'eval', 'evalin',
        -            'exec', 'exist', 'exit', 'exp', 'expm1', 'eye', 'fclear',
        -            'fclose', 'fcntl', 'fdisp', 'feof', 'ferror', 'feval', 'fflush',
        -            'fgetl', 'fgets', 'fieldnames', 'file_in_loadpath', 'file_in_path',
        -            'filemarker', 'filesep', 'find_dir_in_path', 'finite', 'fix',
        -            'fixed_point_format', 'floor', 'fmod', 'fnmatch', 'fopen', 'fork',
        -            'format', 'formula', 'fprintf', 'fputs', 'fread', 'freport',
        -            'frewind', 'fscanf', 'fseek', 'fskipl', 'ftell', 'full', 'func2str',
        -            'functions', 'fwrite', 'gamma', 'gammaln', 'ge', 'genpath', 'get',
        -            'get_help_text', 'get_help_text_from_file', 'getegid', 'getenv',
        -            'geteuid', 'getgid', 'gethostname', 'getpgrp', 'getpid', 'getppid',
        -            'getuid', 'glob', 'gt', 'history', 'history_control', 'history_file',
        -            'history_size', 'history_timestamp_format_string', 'home', 'horzcat',
        -            'hypot', 'ifelse', 'ignore_function_time_stamp', 'imag',
        -            'inferiorto', 'info_file', 'info_program', 'inline', 'input',
        -            'intmax', 'intmin', 'ipermute',
        -            'is_absolute_filename', 'is_dq_string', 'is_function_handle',
        -            'is_rooted_relative_filename', 'is_sq_string', 'isalnum', 'isalpha',
        -            'isargout', 'isascii', 'isbool', 'iscell', 'iscellstr', 'ischar',
        -            'iscntrl', 'iscomplex', 'isdebugmode', 'isdigit', 'isempty',
        -            'isfield', 'isfinite', 'isfloat', 'isglobal', 'isgraph', 'ishandle',
        -            'isieee', 'isindex', 'isinf', 'isinteger', 'iskeyword', 'islogical',
        -            'islower', 'ismatrix', 'ismethod', 'isna', 'isnan', 'isnull',
        -            'isnumeric', 'isobject', 'isprint', 'ispunct', 'isreal', 'issorted',
        -            'isspace', 'issparse', 'isstruct', 'isupper', 'isvarname', 'isxdigit',
        -            'kbhit', 'keyboard', 'kill', 'lasterr', 'lasterror', 'lastwarn',
        -            'ldivide', 'le', 'length', 'lgamma', 'link', 'linspace',
        -            'list_in_columns', 'load', 'loaded_graphics_toolkits', 'log', 'log10',
        -            'log1p', 'log2', 'lower', 'lstat', 'lt',
        -            'make_absolute_filename', 'makeinfo_program', 'max_recursion_depth',
        -            'merge', 'methods', 'mfilename', 'minus', 'mislocked',
        -            'missing_function_hook', 'mkdir', 'mkfifo', 'mkstemp', 'mldivide',
        -            'mlock', 'mod', 'more', 'mpower', 'mrdivide', 'mtimes', 'munlock',
        -            'nargin', 'nargout', 'native_float_format', 'ndims', 'ne',
        -            'nfields', 'nnz', 'norm', 'not', 'nth_element', 'numel', 'nzmax',
        -            'octave_config_info', 'octave_core_file_limit',
        -            'octave_core_file_name', 'octave_core_file_options',
        -            'octave_tmp_file_name', 'onCleanup', 'ones',
        -            'optimize_subsasgn_calls', 'or', 'output_max_field_width',
        -            'output_precision', 'page_output_immediately', 'page_screen_output',
        -            'path', 'pathsep', 'pause', 'pclose', 'permute', 'pipe', 'plus',
        -            'popen', 'popen2', 'power', 'print_empty_dimensions',
        -            'print_struct_array_contents', 'printf', 'prod',
        -            'program_invocation_name', 'program_name', 'putenv', 'puts', 'pwd',
        -            'quit', 'rats', 'rdivide', 're_read_readline_init_file',
        -            'read_readline_init_file', 'readdir', 'readlink', 'real', 'realmax',
        -            'realmin', 'register_graphics_toolkit', 'rehash', 'rem',
        -            'remove_input_event_hook', 'rename', 'repelems', 'reset', 'reshape',
        -            'resize', 'restoredefaultpath', 'rethrow', 'rmdir', 'rmfield',
        -            'rmpath', 'round', 'roundb', 'rows', 'run_history', 'save',
        -            'save_header_format_string', 'save_precision', 'saving_history',
        -            'scanf', 'set', 'setenv', 'sighup_dumps_octave_core', 'sign',
        -            'sigterm_dumps_octave_core', 'silent_functions', 'sin',
        -            'sinh', 'size', 'size_equal', 'sizemax', 'sizeof', 'sleep', 'sort',
        -            'source', 'spalloc', 'sparse', 'sparse_auto_mutate',
        -            'split_long_rows', 'sprintf', 'sqrt', 'squeeze', 'sscanf', 'stat',
        -            'stderr', 'stdin', 'stdout', 'str2func', 'strcmp', 'strcmpi',
        -            'string_fill_char', 'strncmp', 'strncmpi', 'struct2cell',
        -            'struct_levels_to_print', 'strvcat', 'subsasgn', 'subsref', 'sum',
        -            'sumsq', 'superiorto', 'suppress_verbose_help_message', 'symlink',
        -            'system', 'tan', 'tanh', 'terminal_size', 'tic', 'tilde_expand',
        -            'times', 'tmpfile', 'tmpnam', 'toascii', 'toc', 'tolower', 'toupper',
        -            'transpose', 'typeinfo',
        -            'umask', 'uminus', 'uname', 'undo_string_escapes', 'unlink',
        -            'uplus', 'upper', 'usage', 'usleep', 'vec', 'vectorize', 'vertcat',
        -            'waitfor', 'waitpid', 'warning', 'warranty', 'who', 'whos',
        -            'whos_line_format', 'yes_or_no', 'zeros'
        -            ),
        -        // Octave functions
        -        6 => array(
        -            'accumarray', 'accumdim', 'acosd', 'acot', 'acotd', 'acoth', 'acsc',
        -            'acscd', 'acsch', 'addpref', 'addtodate', 'allchild', 'amd',
        -            'ancestor', 'anova', 'arch_fit', 'arch_rnd', 'arch_test',
        -            'area', 'arma_rnd', 'asctime', 'asec', 'asecd', 'asech', 'asind',
        -            'assert', 'atand', 'autoreg_matrix', 'autumn',
        -            'axes', 'axis', 'balance', 'bar', 'barh', 'bartlett', 'bartlett_test',
        -            'base2dec', 'beep', 'bessel', 'besselj', 'beta', 'betacdf',
        -            'betainc', 'betainv', 'betaln', 'betapdf', 'betarnd', 'bicg',
        -            'bicgstab', 'bicubic', 'bin2dec', 'bincoeff', 'binocdf', 'binoinv',
        -            'binopdf', 'binornd', 'bitcmp', 'bitget', 'bitset', 'blackman',
        -            'blanks', 'blkdiag', 'bone', 'box', 'brighten', 'bsxfun',
        -            'bug_report', 'bunzip2', 'bzip2', 'calendar', 'cart2pol', 'cart2sph',
        -            'cast', 'cauchy_cdf', 'cauchy_inv', 'cauchy_pdf', 'cauchy_rnd',
        -            'caxis', 'ccolamd', 'cell2mat', 'celldisp', 'cellfun',
        -            'center', 'cgs', 'chi2cdf', 'chi2inv', 'chi2pdf', 'chi2rnd',
        -            'chisquare_test_homogeneity', 'chisquare_test_independence', 'chol',
        -            'chop', 'circshift', 'cla', 'clabel', 'clf', 'clock',
        -            'cloglog', 'close', 'closereq', 'colamd', 'colloc', 'colon',
        -            'colorbar', 'colormap', 'colperm', 'colstyle', 'comet', 'comet3',
        -            'comma', 'common_size', 'commutation_matrix', 'compan',
        -            'compare_versions', 'compass', 'computer', 'cond', 'condest',
        -            'contour', 'contour3', 'contourc', 'contourf', 'contrast', 'conv',
        -            'conv2', 'convhull', 'convhulln', 'cool', 'copper', 'copyfile',
        -            'cor_test', 'corr', 'cosd', 'cot', 'cotd', 'coth', 'cov',
        -            'cplxpair', 'cross', 'csc', 'cscd', 'csch', 'cstrcat',
        -            'csvread', 'csvwrite', 'ctime', 'cumtrapz', 'curl', 'cylinder',
        -            'daspect', 'daspk', 'dasrt', 'dassl', 'date', 'datenum', 'datestr',
        -            'datetick', 'datevec', 'dblquad', 'deal', 'deblank', 'debug',
        -            'dec2base', 'dec2bin', 'dec2hex', 'deconv', 'del2', 'delaunay',
        -            'delaunay3', 'delaunayn', 'delete', 'demo', 'det', 'detrend',
        -            'diffpara', 'diffuse', 'dir', 'discrete_cdf', 'discrete_inv',
        -            'discrete_pdf', 'discrete_rnd', 'display', 'divergence',
        -            'dlmread', 'dlmwrite', 'dmperm', 'doc', 'dos', 'dot', 'dsearch',
        -            'dsearchn', 'dump_prefs', 'duplication_matrix', 'durbinlevinson',
        -            'edit', 'eig', 'eigs', 'ellipsoid', 'empirical_cdf', 'empirical_inv',
        -            'empirical_pdf', 'empirical_rnd', 'eomday', 'errorbar',
        -            'etime', 'etreeplot', 'example', 'expcdf', 'expinv', 'expm', 'exppdf',
        -            'exprnd', 'ezcontour', 'ezcontourf', 'ezmesh', 'ezmeshc', 'ezplot',
        -            'ezplot3', 'ezpolar', 'ezsurf', 'ezsurfc', 'f_test_regression',
        -            'fact', 'factor', 'factorial', 'fail', 'fcdf', 'feather', 'fft',
        -            'fft2', 'fftconv', 'fftfilt', 'fftn', 'fftshift', 'fftw', 'figure',
        -            'fileattrib', 'fileparts', 'fileread', 'fill', 'filter', 'filter2',
        -            'find', 'findall', 'findobj', 'findstr', 'finv', 'flag', 'flipdim',
        -            'fliplr', 'flipud', 'fminbnd', 'fminunc', 'fpdf', 'fplot',
        -            'fractdiff', 'freqz', 'freqz_plot', 'frnd', 'fsolve',
        -            'fullfile', 'fzero', 'gamcdf', 'gaminv', 'gammainc',
        -            'gampdf', 'gamrnd', 'gca', 'gcbf', 'gcbo', 'gcd', 'gcf',
        -            'gen_doc_cache', 'genvarname', 'geocdf', 'geoinv', 'geopdf', 'geornd',
        -            'get_first_help_sentence', 'getappdata', 'getfield', 'getgrent',
        -            'getpref', 'getpwent', 'getrusage', 'ginput', 'givens', 'glpk',
        -            'gls', 'gmap40', 'gmres', 'gnuplot_binary', 'gplot',
        -            'gradient', 'graphics_toolkit', 'gray', 'gray2ind', 'grid',
        -            'griddata', 'griddata3', 'griddatan', 'gtext', 'guidata',
        -            'guihandles', 'gunzip', 'gzip', 'hadamard', 'hamming', 'hankel',
        -            'hanning', 'help', 'hess', 'hex2dec', 'hex2num', 'hggroup', 'hidden',
        -            'hilb', 'hist', 'histc', 'hold', 'hot', 'hotelling_test',
        -            'hotelling_test_2', 'housh', 'hsv', 'hsv2rgb', 'hurst', 'hygecdf',
        -            'hygeinv', 'hygepdf', 'hygernd', 'idivide', 'ifftshift', 'image',
        -            'imagesc', 'imfinfo', 'imread', 'imshow', 'imwrite', 'ind2gray',
        -            'ind2rgb', 'index', 'info', 'inpolygon', 'inputname', 'int2str',
        -            'interp1', 'interp1q', 'interp2', 'interp3', 'interpft', 'interpn',
        -            'intersect', 'inv', 'invhilb', 'iqr',
        -            'is_leap_year', 'is_valid_file_id',
        -            'isa', 'isappdata', 'iscolumn', 'isdefinite', 'isdeployed', 'isdir',
        -            'isequal', 'isequalwithequalnans', 'isfigure', 'ishermitian',
        -            'ishghandle', 'ishold', 'isletter', 'ismac', 'ismember', 'isocolors',
        -            'isonormals', 'isosurface', 'ispc', 'ispref', 'isprime', 'isprop',
        -            'isrow', 'isscalar', 'issquare', 'isstrprop', 'issymmetric',
        -            'isunix', 'isvector', 'jet', 'kendall', 'kolmogorov_smirnov_cdf',
        -            'kolmogorov_smirnov_test', 'kolmogorov_smirnov_test_2', 'kron',
        -            'kruskal_wallis_test', 'krylov', 'kurtosis', 'laplace_cdf',
        -            'laplace_inv', 'laplace_pdf', 'laplace_rnd', 'lcm', 'legend',
        -            'legendre', 'license', 'lin2mu', 'line', 'linkprop', 'list_primes',
        -            'loadaudio', 'loadobj', 'logistic_cdf', 'logistic_inv',
        -            'logistic_pdf', 'logistic_regression', 'logistic_rnd', 'logit',
        -            'loglog', 'loglogerr', 'logm', 'logncdf', 'logninv', 'lognpdf',
        -            'lognrnd', 'logspace', 'lookfor', 'lookup', 'ls', 'ls_command',
        -            'lsode', 'lsqnonneg', 'lu', 'luinc', 'magic', 'mahalanobis', 'manova',
        -            'mat2str', 'matlabroot', 'matrix_type', 'max', 'mcnemar_test',
        -            'md5sum', 'mean', 'meansq', 'median', 'menu', 'mesh', 'meshc',
        -            'meshgrid', 'meshz', 'mex', 'mexext', 'mgorth', 'mkoctfile', 'mkpp',
        -            'mode', 'moment', 'movefile', 'mpoles', 'mu2lin', 'namelengthmax',
        -            'nargchk', 'narginchk', 'nargoutchk', 'nbincdf', 'nbininv', 'nbinpdf',
        -            'nbinrnd', 'nchoosek', 'ndgrid', 'newplot', 'news', 'nextpow2',
        -            'nonzeros', 'normcdf', 'normest', 'norminv', 'normpdf', 'normrnd',
        -            'now', 'nproc', 'nthargout', 'nthroot', 'ntsc2rgb', 'null', 'num2str',
        -            'ocean', 'ols', 'onenormest', 'optimget', 'optimset', 'orderfields',
        -            'orient', 'orth', 'pack', 'paren', 'pareto', 'parseparams', 'pascal',
        -            'patch', 'pathdef', 'pbaspect', 'pcg', 'pchip', 'pcolor', 'pcr',
        -            'peaks', 'periodogram', 'perl', 'perms', 'pie', 'pie3',
        -            'pink', 'pinv', 'pkg', 'planerot', 'playaudio', 'plot', 'plot3',
        -            'plotmatrix', 'plotyy', 'poisscdf', 'poissinv', 'poisspdf',
        -            'poissrnd', 'pol2cart', 'polar', 'poly', 'polyaffine', 'polyarea',
        -            'polyder', 'polyfit', 'polygcd', 'polyint', 'polyout',
        -            'polyreduce', 'polyval', 'polyvalm', 'postpad', 'pow2', 'powerset',
        -            'ppder', 'ppint', 'ppjumps', 'ppplot', 'ppval', 'pqpnonneg',
        -            'prctile', 'prepad', 'primes', 'print', 'printAllBuiltins',
        -            'print_usage', 'prism', 'probit', 'profexplore', 'profile',
        -            'profshow', 'prop_test_2', 'python', 'qp', 'qqplot', 'qr', 'quad',
        -            'quadcc', 'quadgk', 'quadl', 'quadv', 'quantile', 'quiver', 'quiver3',
        -            'qz', 'qzhess', 'rainbow', 'rand', 'randi', 'range', 'rank', 'ranks',
        -            'rat', 'rcond', 'reallog', 'realpow', 'realsqrt', 'record',
        -            'rectangle', 'rectint', 'recycle', 'refresh', 'refreshdata', 'regexp',
        -            'regexptranslate', 'repmat', 'residue', 'rgb2hsv',
        -            'rgb2ind', 'rgb2ntsc', 'ribbon', 'rindex', 'rmappdata', 'rmpref',
        -            'roots', 'rose', 'rosser', 'rot90', 'rotdim', 'rref', 'run',
        -            'run_count', 'run_test', 'rundemos', 'runlength', 'runtests',
        -            'saveas', 'saveaudio', 'saveobj', 'savepath', 'scatter',
        -            'scatter3', 'schur', 'sec', 'secd', 'sech', 'semicolon', 'semilogx',
        -            'semilogxerr', 'semilogy', 'semilogyerr', 'setappdata', 'setaudio',
        -            'setdiff', 'setfield', 'setpref', 'setxor', 'shading',
        -            'shg', 'shift', 'shiftdim', 'sign_test', 'sinc', 'sind',
        -            'sinetone', 'sinewave', 'skewness', 'slice', 'sombrero', 'sortrows',
        -            'spaugment', 'spconvert', 'spdiags', 'spearman', 'spectral_adf',
        -            'spectral_xdf', 'specular', 'speed', 'spencer', 'speye', 'spfun',
        -            'sph2cart', 'sphere', 'spinmap', 'spline', 'spones', 'spparms',
        -            'sprand', 'sprandn', 'sprandsym', 'spring', 'spstats', 'spy', 'sqp',
        -            'sqrtm', 'stairs', 'statistics', 'std', 'stdnormal_cdf',
        -            'stdnormal_inv', 'stdnormal_pdf', 'stdnormal_rnd', 'stem', 'stem3',
        -            'stft', 'str2double', 'str2num', 'strcat', 'strchr',
        -            'strfind', 'strjust', 'strmatch', 'strread', 'strsplit', 'strtok',
        -            'strtrim', 'strtrunc', 'structfun', 'sub2ind',
        -            'subplot', 'subsindex', 'subspace', 'substr', 'substruct', 'summer',
        -            'surf', 'surface', 'surfc', 'surfl', 'surfnorm', 'svd', 'svds',
        -            'swapbytes', 'syl', 'symbfact', 'symrcm',
        -            'symvar', 'synthesis', 't_test', 't_test_2', 't_test_regression',
        -            'table', 'tand', 'tar', 'tcdf', 'tempdir', 'tempname', 'test', 'text',
        -            'textread', 'textscan', 'time', 'tinv', 'title', 'toeplitz', 'tpdf',
        -            'trace', 'trapz', 'treelayout', 'treeplot', 'tril', 'trimesh',
        -            'triplequad', 'triplot', 'trisurf', 'trnd', 'tsearch', 'tsearchn',
        -            'type', 'typecast', 'u_test', 'uicontextmenu', 'uicontrol',
        -            'uigetdir', 'uigetfile', 'uimenu', 'uipanel', 'uipushtool',
        -            'uiputfile', 'uiresume', 'uitoggletool', 'uitoolbar', 'uiwait',
        -            'unidcdf', 'unidinv', 'unidpdf', 'unidrnd', 'unifcdf', 'unifinv',
        -            'unifpdf', 'unifrnd', 'unimplemented', 'union', 'unique', 'unix',
        -            'unmkpp', 'unpack', 'untabify', 'untar', 'unwrap', 'unzip',
        -            'urlwrite', 'usejava', 'validatestring', 'vander', 'var',
        -            'var_test', 'vech', 'ver', 'version', 'view', 'voronoi', 'voronoin',
        -            'waitbar', 'waitforbuttonpress', 'warning_ids', 'wavread', 'wavwrite',
        -            'wblcdf', 'wblinv', 'wblpdf', 'wblrnd', 'weekday',
        -            'welch_test', 'what', 'which',
        -            'white', 'whitebg', 'wienrnd', 'wilcoxon_test', 'wilkinson', 'winter',
        -            'xlabel', 'xlim', 'xor', 'ylabel', 'ylim', 'yulewalker', 'z_test',
        -            'z_test_2', 'zip', 'zlabel', 'zlim', 'zscore', 'airy', 'arrayfun',
        -            'besselh', 'besseli', 'besselk', 'bessely', 'bitpack', 'bitunpack',
        -            'blkmm', 'cellindexmat', 'cellslices', 'chol2inv', 'choldelete',
        -            'cholinsert', 'cholinv', 'cholshift', 'cholupdate', 'convn',
        -            'csymamd', 'cummax', 'cummin', 'daspk_options', 'dasrt_options',
        -            'dassl_options', 'endgrent', 'endpwent', 'etree', 'getgrgid',
        -            'getgrnam', 'getpwnam', 'getpwuid', 'gmtime', 'gui_mode', 'ifft',
        -            'ifft2', 'ifftn', 'ind2sub', 'inverse', 'localtime', 'lsode_options',
        -            'luupdate', 'mat2cell', 'min', 'mktime', 'mouse_wheel_zoom',
        -            'num2cell', 'num2hex', 'qrdelete', 'qrinsert', 'qrshift', 'qrupdate',
        -            'quad_options', 'rande', 'randg', 'randn', 'randp', 'randperm',
        -            'regexpi', 'regexprep', 'rsf2csf', 'setgrent', 'setpwent', 'sprank',
        -            'strftime', 'strptime', 'strrep', 'svd_driver', 'symamd', 'triu',
        -            'urlread'
        -            ),
        -        // Private builtin
        -        7 => array(
        -            '__accumarray_max__', '__accumarray_min__', '__accumarray_sum__',
        -            '__accumdim_sum__', '__builtins__', '__calc_dimensions__',
        -            '__current_scope__', '__display_tokens__', '__dump_symtab_info__',
        -            '__end__', '__get__', '__go_axes__', '__go_axes_init__',
        -            '__go_delete__', '__go_execute_callback__', '__go_figure__',
        -            '__go_figure_handles__', '__go_handles__', '__go_hggroup__',
        -            '__go_image__', '__go_line__', '__go_patch__', '__go_surface__',
        -            '__go_text__', '__go_uicontextmenu__', '__go_uicontrol__',
        -            '__go_uimenu__', '__go_uipanel__', '__go_uipushtool__',
        -            '__go_uitoggletool__', '__go_uitoolbar__', '__gud_mode__',
        -            '__image_pixel_size__', '__is_handle_visible__', '__isa_parent__',
        -            '__keywords__', '__lexer_debug_flag__', '__list_functions__',
        -            '__operators__', '__parent_classes__', '__parser_debug_flag__',
        -            '__pathorig__', '__profiler_data__', '__profiler_enable__',
        -            '__profiler_reset__', '__request_drawnow__', '__sort_rows_idx__',
        -            '__token_count__', '__varval__', '__version_info__', '__which__'
        -            ),
        -        // Private Octave functions
        -        8 => array(
        -            '__all_opts__', '__contourc__', '__delaunayn__', '__dispatch__',
        -            '__dsearchn__', '__finish__', '__fltk_uigetfile__',
        -            '__glpk__', '__gnuplot_drawnow__', '__init_fltk__',
        -            '__init_gnuplot__', '__lin_interpn__', '__magick_read__',
        -            '__makeinfo__', '__pchip_deriv__', '__plt_get_axis_arg__', '__qp__',
        -            '__voronoi__', '__fltk_maxtime__', '__fltk_redraw__', '__ftp__',
        -            '__ftp_ascii__', '__ftp_binary__', '__ftp_close__', '__ftp_cwd__',
        -            '__ftp_delete__', '__ftp_dir__', '__ftp_mget__', '__ftp_mkdir__',
        -            '__ftp_mode__', '__ftp_mput__', '__ftp_pwd__', '__ftp_rename__',
        -            '__ftp_rmdir__', '__magick_finfo__', '__magick_format_list__',
        -            '__magick_write__'
        -            ),
        -        // Builtin Global Variables
        -        9 => array(
        -            'EDITOR', 'EXEC_PATH', 'F_DUPFD', 'F_GETFD', 'F_GETFL', 'F_SETFD',
        -            'F_SETFL', 'IMAGE_PATH', 'OCTAVE_HOME',
        -            'OCTAVE_VERSION', 'O_APPEND', 'O_ASYNC', 'O_CREAT', 'O_EXCL',
        -            'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_SYNC', 'O_TRUNC', 'O_WRONLY',
        -            'PAGER', 'PAGER_FLAGS', 'PS1', 'PS2', 'PS4', 'SEEK_CUR', 'SEEK_END',
        -            'SEEK_SET', 'SIG', 'S_ISBLK', 'S_ISCHR', 'S_ISDIR', 'S_ISFIFO',
        -            'S_ISLNK', 'S_ISREG', 'S_ISSOCK', 'WCONTINUE', 'WCOREDUMP',
        -            'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED',
        -            'WIFSTOPPED', 'WNOHANG', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED'
        -            ),
        -        // Constant functions
        -        10 => array (
        -            'e', 'eps', 'inf', 'Inf', 'nan', 'NaN', 'NA', 'pi', 'i', 'I', 'j',
        -            'J', 'true', 'false'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        // Comparison & logical
        -        0 => array(
        -            '!', '!=', '&', '&&','|', '||', '~', '~=',
        -            '<', '<=', '==', '>', '>='
        -            ),
        -        // Aritmethical
        -        1 => array(
        -            '*', '**', '+', '++', '-', '--', '/', "\\","'"
        -            ),
        -        // Elementwise arithmetical
        -        2 => array(
        -            '.*', '.**','./', '.^', '^',".\\",".'"
        -            ),
        -        // Arithmetical & assignation
        -        3 => array(
        -            '*=','+=','-=','/=','\=','**=','^=',
        -            '.*=','.+=','.-=','./=','.\=','.**=','.^=','='
        -            ),
        -        // Indexer
        -        4 => array(
        -            ':'
        -            ),
        -        // Delimiters
        -        5 => array(
        -            ',', '...', ';'
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true,
        -        10 => true,
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
        -        5 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
        -        6 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
        -        7 => '',
        -        8 => '',
        -        9 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
        -        10 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        ),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'STYLES' => array(
        -        'COMMENTS' => array(
        -            1 => 'color: #0000FF; font-style: italic;', // comments with #
        -            2 => 'color: #0000FF; font-style: italic;', // comments with %
        -            3 => 'color: #FF00FF; font-style: italic;', // single quote strings
        -            4 => 'color: #FF00FF; font-style: italic;', // double quote strings
        -            5 => 'color: #0000FF; font-style: italic;', // block comments
        -            6 => 'color: #996600; font-weight:bold;',   // packaging system
        -            7 => 'color: #006600; font-weight:bold;',   // function handles
        -            'MULTI' => 'color: #0000FF; font-style: italic;',
        -            ),
        -        'KEYWORDS' => array(
        -            1 => 'color: #990000; font-weight:bold;',   // Reserved words
        -            2 => 'color: #2E8B57;',                     // Storage type
        -            3 => 'color: #0000FF; font-weight:bold;',   // Internal variable
        -            4 => 'color: #2E8B57; font-weight:bold;',   // Data types
        -            5 => 'color: #008A8C; font-weight:bold;',   // Built-in
        -            6 => 'color: #008A8C;',                     // Octave functions
        -            9 => 'color: #000000; font-weight:bold;',   // Builtin Global Variables
        -            10 => 'color: #008A8C; font-weight:bold;',  // Constant functions
        -            ),
        -        'ESCAPE_CHAR' => array(),
        -        'BRACKETS' => array(
        -            0 => 'color: #080;',
        -            ),
        -        'STRINGS' => array(
        -            // strings were specified on the COMMENT_REGEXP section
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            ),
        -        'METHODS' => array(),
        -        'SYMBOLS' => array(
        -            0 => 'color: #FF9696; font-weight:bold;',   // Comparison & logical
        -            1 => 'color: #CC0000; font-weight:bold;',   // Aritmethical
        -            2 => 'color: #993333; font-weight:bold;',   // Elementwise arithmetical
        -            3 => 'color: #FF0000; font-weight:bold;',   // Arithmetical & assignation
        -            4 => 'color: #33F;',                        // Indexer
        -            5 => 'color: #33F;',                        // Delimiters
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array(),
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php
        deleted file mode 100644
        index 4a314df4..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php
        +++ /dev/null
        @@ -1,133 +0,0 @@
        - 'OpenOffice.org Basic',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array(),
        -    //Single-Line comments using REM keyword
        -    'COMMENT_REGEXP' => array(2 => '/\bREM.*?$/i'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'dim','private','public','global','as','if','redim','true','set','byval',
        -            'false','bool','double','integer','long','object','single','variant',
        -            'msgbox','print','inputbox','green','blue','red','qbcolor',
        -            'rgb','open','close','reset','freefile','get','input','line',
        -            'put','write','loc','seek','eof','lof','chdir','chdrive',
        -            'curdir','dir','fileattr','filecopy','filedatetime','fileexists',
        -            'filelen','getattr','kill','mkdir','name','rmdir','setattr',
        -            'dateserial','datevalue','day','month','weekday','year','cdatetoiso',
        -            'cdatefromiso','hour','minute','second','timeserial','timevalue',
        -            'date','now','time','timer','erl','err','error','on','goto','resume',
        -            'and','eqv','imp','not','or','xor','mod','atn','cos','sin','tan','log',
        -            'exp','rnd','randomize','sqr','fix','int','abs','sgn','hex','oct',
        -            'it','then','else','select','case','iif','do','loop','for','next','to',
        -            'while','wend','gosub','return','call','choose','declare',
        -            'end','exit','freelibrary','function','rem','stop','sub','switch','with',
        -            'cbool','cdate','cdbl','cint','clng','const','csng','cstr','defbool',
        -            'defdate','defdbl','defint','deflng','asc','chr','str','val','cbyte',
        -            'space','string','format','lcase','left','lset','ltrim','mid','right',
        -            'rset','rtrim','trim','ucase','split','join','converttourl','convertfromurl',
        -            'instr','len','strcomp','beep','shell','wait','getsystemticks','environ',
        -            'getsolarversion','getguitype','twipsperpixelx','twipsperpixely',
        -            'createunostruct','createunoservice','getprocessservicemanager',
        -            'createunodialog','createunolistener','createunovalue','thiscomponent',
        -            'globalscope'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;',
        -            2 => 'color: #808080;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php
        deleted file mode 100644
        index 7eda35e3..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php
        +++ /dev/null
        @@ -1,169 +0,0 @@
        - 'ooRexx',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'address', 'arg', 'attribute', 'call', 'constant', 'do',
        -            'drop', 'exit', 'if',
        -            'interpret', 'iterate', 'leave', 'loop', 'nop', 'numeric',
        -            'parse', 'procedure', 'pull', 'push', 'queue',
        -            'raise', 'reply', 'return', 'say', 'select', 'signal',
        -            'use'
        -            ),
        -        2 => array(
        -            'abstract', 'any', 'arguments', 'array', 'by',
        -            'continue', 'digits', 'engineering', 'error',
        -            'expose', 'external', 'failure', 'for', 'forever',
        -            'forward', 'get', 'guard', 'guarded', 'halt',
        -            'inherit', 'library', 'lostdigits', 'message',
        -            'metaclass', 'mixinclass', 'name', 'nomethod', 'nostring',
        -            'notready', 'novalue', 'off', 'on', 'options', 'over',
        -            'private', 'protected', 'public', 'scientific', 'set',
        -            'source', 'subclass', 'syntax', 'to', 'unguarded',
        -            'unprotected', 'until', 'user',
        -            'version', 'while', 'with'
        -            ),
        -        3 => array(
        -            'else', 'end', 'otherwise', 'then', 'when'
        -            ),
        -        4 => array(
        -            'rc', 'result', 'self', 'sigl', 'super'
        -            ),
        -        5 => array(
        -            '::attribute', '::class', '::constant', '::method',
        -            '::optins', '::requires', '::routine'
        -            ),
        -        6 => array(
        -            'abbrev', 'abs', 'beep', 'bitand', 'bitor',
        -            'bitxor', 'b2x', 'center', 'centre', 'changestr', 'charin',
        -            'charout', 'chars', 'compare', 'condition', 'copies',
        -            'countstr', 'c2d', 'c2x', 'datatype', 'date', 'delstr',
        -            'delword', 'directory', 'd2c', 'd2x', 'endlocal',
        -            'errortext', 'filespec', 'form', 'format', 'fuzz', 'insert',
        -            'lastpos', 'left', 'length', 'linein', 'lineout', 'lines',
        -            'lower', 'max', 'min', 'overlay', 'pos', 'qualify', 'queued',
        -            'random', 'reverse', 'right', 'rxfuncadd', 'rxfuncdrop',
        -            'rxfuncquery', 'rxqueue', 'setlocal', 'sign', 'sourceline',
        -            'space', 'stream', 'strip', 'substr', 'subword', 'symbol',
        -            'time', 'trace', 'translate', 'trunc', 'upper', 'userid',
        -            'value', 'var', 'verify', 'word', 'wordindex', 'wordlength',
        -            'wordpos', 'words', 'xrange', 'x2b', 'x2c', 'x2d'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '<', '>', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':',
        -        '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #ff0000; font-weight: bold;',
        -            3 => 'color: #00ff00; font-weight: bold;',
        -            4 => 'color: #0000ff; font-weight: bold;',
        -            5 => 'color: #880088; font-weight: bold;',
        -            6 => 'color: #888800; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666;',
        -            'MULTI' => 'color: #808080;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php
        deleted file mode 100644
        index 8681236c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php
        +++ /dev/null
        @@ -1,612 +0,0 @@
        - 'Oracle 11 SQL',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'", '"', '`'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source;
        -//        6 => array(
        -//            ),
        -
        -//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables;
        -//        5 => array(
        -//            ),
        -
        -//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views;
        -//        4 => array(
        -//            ),
        -
        -//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns;
        -//        3 => array(
        -//            ),
        -
        -        //Put ORACLE reserved keywords here (11i).  I like mine uppercase.
        -        1 => array(
        -            'ABS',
        -            'ACCESS',
        -            'ACOS',
        -            'ADD',
        -            'ADD_MONTHS',
        -            'ALL',
        -            'ALTER',
        -            'ANALYZE',
        -            'AND',
        -            'ANY',
        -            'APPENDCHILDXML',
        -            'ARRAY',
        -            'AS',
        -            'ASC',
        -            'ASCII',
        -            'ASCIISTR',
        -            'ASIN',
        -            'ASSOCIATE',
        -            'AT',
        -            'ATAN',
        -            'ATAN2',
        -            'AUDIT',
        -            'AUTHID',
        -            'AVG',
        -            'BEGIN',
        -            'BETWEEN',
        -            'BFILENAME',
        -            'BIN_TO_NUM',
        -            'BINARY_INTEGER',
        -            'BITAND',
        -            'BODY',
        -            'BOOLEAN',
        -            'BULK',
        -            'BY',
        -            'CALL',
        -            'CARDINALITY',
        -            'CASCADE',
        -            'CASE',
        -            'CAST',
        -            'CEIL',
        -            'CHAR',
        -            'CHAR_BASE',
        -            'CHARTOROWID',
        -            'CHECK',
        -            'CHR',
        -            'CLOSE',
        -            'CLUSTER',
        -            'CLUSTER_ID',
        -            'CLUSTER_PROBABILITY',
        -            'CLUSTER_SET',
        -            'COALESCE',
        -            'COLLECT',
        -            'COLUMN',
        -            'COMMENT',
        -            'COMMIT',
        -            'COMPOSE',
        -            'COMPRESS',
        -            'CONCAT',
        -            'CONNECT',
        -            'CONSTANT',
        -            'CONSTRAINT',
        -            'CONSTRAINTS',
        -            'CONTEXT',
        -            'CONTROLFILE',
        -            'CONVERT',
        -            'CORR',
        -            'CORR_K',
        -            'CORR_S',
        -            'COS',
        -            'COSH',
        -            'COST',
        -            'COUNT',
        -            'COVAR_POP',
        -            'COVAR_SAMP',
        -            'CREATE',
        -            'CUBE_TABLE',
        -            'CUME_DIST',
        -            'CURRENT',
        -            'CURRENT_DATE',
        -            'CURRENT_TIMESTAMP',
        -            'CURRVAL',
        -            'CURSOR',
        -            'CV',
        -            'DATABASE',
        -            'DATAOBJ_TO_PARTITION',
        -            'DATE',
        -            'DAY',
        -            'DBTIMEZONE',
        -            'DECIMAL',
        -            'DECLARE',
        -            'DECODE',
        -            'DECOMPOSE',
        -            'DEFAULT',
        -            'DELETE',
        -            'DELETEXML',
        -            'DENSE_RANK',
        -            'DEPTH',
        -            'DEREF',
        -            'DESC',
        -            'DIMENSION',
        -            'DIRECTORY',
        -            'DISASSOCIATE',
        -            'DISTINCT',
        -            'DO',
        -            'DROP',
        -            'DUMP',
        -            'ELSE',
        -            'ELSIF',
        -            'EMPTY_BLOB',
        -            'EMPTY_CLOB',
        -            'END',
        -            'EXCEPTION',
        -            'EXCLUSIVE',
        -            'EXEC',
        -            'EXECUTE',
        -            'EXISTS',
        -            'EXISTSNODE',
        -            'EXIT',
        -            'EXP',
        -            'EXPLAIN',
        -            'EXTENDS',
        -            'EXTRACT',
        -            'EXTRACTVALUE',
        -            'FALSE',
        -            'FEATURE_ID',
        -            'FEATURE_SET',
        -            'FEATURE_VALUE',
        -            'FETCH',
        -            'FILE',
        -            'FIRST',
        -            'FIRST_VALUE',
        -            'FLOAT',
        -            'FLOOR',
        -            'FOR',
        -            'FORALL',
        -            'FROM',
        -            'FROM_TZ',
        -            'FUNCTION',
        -            'GOTO',
        -            'GRANT',
        -            'GREATEST',
        -            'GROUP',
        -            'GROUP_ID',
        -            'GROUPING',
        -            'GROUPING_ID',
        -            'HAVING',
        -            'HEAP',
        -            'HEXTORAW',
        -            'HOUR',
        -            'IDENTIFIED',
        -            'IF',
        -            'IMMEDIATE',
        -            'IN',
        -            'INCREMENT',
        -            'INDEX',
        -            'INDEXTYPE',
        -            'INDICATOR',
        -            'INITCAP',
        -            'INITIAL',
        -            'INSERT',
        -            'INSERTCHILDXML',
        -            'INSERTXMLBEFORE',
        -            'INSTR',
        -            'INSTRB',
        -            'INTEGER',
        -            'INTERFACE',
        -            'INTERSECT',
        -            'INTERVAL',
        -            'INTO',
        -            'IS',
        -            'ISOLATION',
        -            'ITERATION_NUMBER',
        -            'JAVA',
        -            'KEY',
        -            'LAG',
        -            'LAST',
        -            'LAST_DAY',
        -            'LAST_VALUE',
        -            'LEAD',
        -            'LEAST',
        -            'LENGTH',
        -            'LENGTHB',
        -            'LEVEL',
        -            'LIBRARY',
        -            'LIKE',
        -            'LIMITED',
        -            'LINK',
        -            'LN',
        -            'LNNVL',
        -            'LOCALTIMESTAMP',
        -            'LOCK',
        -            'LOG',
        -            'LONG',
        -            'LOOP',
        -            'LOWER',
        -            'LPAD',
        -            'LTRIM',
        -            'MAKE_REF',
        -            'MATERIALIZED',
        -            'MAX',
        -            'MAXEXTENTS',
        -            'MEDIAN',
        -            'MIN',
        -            'MINUS',
        -            'MINUTE',
        -            'MLSLABEL',
        -            'MOD',
        -            'MODE',
        -            'MODIFY',
        -            'MONTH',
        -            'MONTHS_BETWEEN',
        -            'NANVL',
        -            'NATURAL',
        -            'NATURALN',
        -            'NCHR',
        -            'NEW',
        -            'NEW_TIME',
        -            'NEXT_DAY',
        -            'NEXTVAL',
        -            'NLS_CHARSET_DECL_LEN',
        -            'NLS_CHARSET_ID',
        -            'NLS_CHARSET_NAME',
        -            'NLS_INITCAP',
        -            'NLS_LOWER',
        -            'NLS_UPPER',
        -            'NLSSORT',
        -            'NOAUDIT',
        -            'NOCOMPRESS',
        -            'NOCOPY',
        -            'NOT',
        -            'NOWAIT',
        -            'NTILE',
        -            'NULL',
        -            'NULLIF',
        -            'NUMBER',
        -            'NUMBER_BASE',
        -            'NUMTODSINTERVAL',
        -            'NUMTOYMINTERVAL',
        -            'NVL',
        -            'NVL2',
        -            'OCIROWID',
        -            'OF',
        -            'OFFLINE',
        -            'ON',
        -            'ONLINE',
        -            'OPAQUE',
        -            'OPEN',
        -            'OPERATOR',
        -            'OPTION',
        -            'OR',
        -            'ORA_HASH',
        -            'ORDER',
        -            'ORGANIZATION',
        -            'OTHERS',
        -            'OUT',
        -            'OUTLINE',
        -            'PACKAGE',
        -            'PARTITION',
        -            'PATH',
        -            'PCTFREE',
        -            'PERCENT_RANK',
        -            'PERCENTILE_CONT',
        -            'PERCENTILE_DISC',
        -            'PLAN',
        -            'PLS_INTEGER',
        -            'POSITIVE',
        -            'POSITIVEN',
        -            'POWER',
        -            'POWERMULTISET',
        -            'POWERMULTISET_BY_CARDINALITY',
        -            'PRAGMA',
        -            'PREDICTION',
        -            'PREDICTION_BOUNDS',
        -            'PREDICTION_COST',
        -            'PREDICTION_DETAILS',
        -            'PREDICTION_PROBABILITY',
        -            'PREDICTION_SET',
        -            'PRESENTNNV',
        -            'PRESENTV',
        -            'PREVIOUS',
        -            'PRIMARY',
        -            'PRIOR',
        -            'PRIVATE',
        -            'PRIVILEGES',
        -            'PROCEDURE',
        -            'PROFILE',
        -            'PUBLIC',
        -            'RAISE',
        -            'RANGE',
        -            'RANK',
        -            'RATIO_TO_REPORT',
        -            'RAW',
        -            'RAWTOHEX',
        -            'RAWTONHEX',
        -            'REAL',
        -            'RECORD',
        -            'REF',
        -            'REFTOHEX',
        -            'REGEXP_COUNT',
        -            'REGEXP_INSTR',
        -            'REGEXP_REPLACE',
        -            'REGEXP_SUBSTR',
        -            'REGR_AVGX',
        -            'REGR_AVGY',
        -            'REGR_COUNT',
        -            'REGR_INTERCEPT',
        -            'REGR_R2',
        -            'REGR_SLOPE',
        -            'REGR_SXX',
        -            'REGR_SXY',
        -            'REGR_SYY',
        -            'RELEASE',
        -            'REMAINDER',
        -            'RENAME',
        -            'REPLACE',
        -            'RESOURCE',
        -            'RETURN',
        -            'RETURNING',
        -            'REVERSE',
        -            'REVOKE',
        -            'ROLE',
        -            'ROLLBACK',
        -            'ROUND',
        -            'ROW',
        -            'ROW_NUMBER',
        -            'ROWID',
        -            'ROWIDTOCHAR',
        -            'ROWIDTONCHAR',
        -            'ROWNUM',
        -            'ROWS',
        -            'ROWTYPE',
        -            'RPAD',
        -            'RTRIM',
        -            'SAVEPOINT',
        -            'SCHEMA',
        -            'SCN_TO_TIMESTAMP',
        -            'SECOND',
        -            'SEGMENT',
        -            'SELECT',
        -            'SEPERATE',
        -            'SEQUENCE',
        -            'SESSION',
        -            'SESSIONTIMEZONE',
        -            'SET',
        -            'SHARE',
        -            'SIGN',
        -            'SIN',
        -            'SINH',
        -            'SIZE',
        -            'SMALLINT',
        -            'SOUNDEX',
        -            'SPACE',
        -            'SQL',
        -            'SQLCODE',
        -            'SQLERRM',
        -            'SQRT',
        -            'START',
        -            'STATISTICS',
        -            'STATS_BINOMIAL_TEST',
        -            'STATS_CROSSTAB',
        -            'STATS_F_TEST',
        -            'STATS_KS_TEST',
        -            'STATS_MODE',
        -            'STATS_MW_TEST',
        -            'STATS_ONE_WAY_ANOVA',
        -            'STATS_T_TEST_INDEP',
        -            'STATS_T_TEST_INDEPU',
        -            'STATS_T_TEST_ONE',
        -            'STATS_T_TEST_PAIRED',
        -            'STATS_WSR_TEST',
        -            'STDDEV',
        -            'STDDEV_POP',
        -            'STDDEV_SAMP',
        -            'STOP',
        -            'SUBSTR',
        -            'SUBSTRB',
        -            'SUBTYPE',
        -            'SUCCESSFUL',
        -            'SUM',
        -            'SYNONYM',
        -            'SYS_CONNECT_BY_PATH',
        -            'SYS_CONTEXT',
        -            'SYS_DBURIGEN',
        -            'SYS_EXTRACT_UTC',
        -            'SYS_GUID',
        -            'SYS_TYPEID',
        -            'SYS_XMLAGG',
        -            'SYS_XMLGEN',
        -            'SYSDATE',
        -            'SYSTEM',
        -            'SYSTIMESTAMP',
        -            'TABLE',
        -            'TABLESPACE',
        -            'TAN',
        -            'TANH',
        -            'TEMPORARY',
        -            'THEN',
        -            'TIME',
        -            'TIMESTAMP',
        -            'TIMESTAMP_TO_SCN',
        -            'TIMEZONE_ABBR',
        -            'TIMEZONE_HOUR',
        -            'TIMEZONE_MINUTE',
        -            'TIMEZONE_REGION',
        -            'TIMING',
        -            'TO',
        -            'TO_BINARY_DOUBLE',
        -            'TO_BINARY_FLOAT',
        -            'TO_CHAR',
        -            'TO_CLOB',
        -            'TO_DATE',
        -            'TO_DSINTERVAL',
        -            'TO_LOB',
        -            'TO_MULTI_BYTE',
        -            'TO_NCHAR',
        -            'TO_NCLOB',
        -            'TO_NUMBER',
        -            'TO_SINGLE_BYTE',
        -            'TO_TIMESTAMP',
        -            'TO_TIMESTAMP_TZ',
        -            'TO_YMINTERVAL',
        -            'TRANSACTION',
        -            'TRANSLATE',
        -            'TREAT',
        -            'TRIGGER',
        -            'TRIM',
        -            'TRUE',
        -            'TRUNC',
        -            'TRUNCATE',
        -            'TYPE',
        -            'TZ_OFFSET',
        -            'UI',
        -            'UID',
        -            'UNION',
        -            'UNIQUE',
        -            'UNISTR',
        -            'UPDATE',
        -            'UPDATEXML',
        -            'UPPER',
        -            'USE',
        -            'USER',
        -            'USERENV',
        -            'USING',
        -            'VALIDATE',
        -            'VALUE',
        -            'VALUES',
        -            'VAR_POP',
        -            'VAR_SAMP',
        -            'VARCHAR',
        -            'VARCHAR2',
        -            'VARIANCE',
        -            'VIEW',
        -            'VSIZE',
        -            'WHEN',
        -            'WHENEVER',
        -            'WHERE',
        -            'WHILE',
        -            'WIDTH_BUCKET',
        -            'WITH',
        -            'WORK',
        -            'WRITE',
        -            'XMLAGG',
        -            'XMLCAST',
        -            'XMLCDATA',
        -            'XMLCOLATTVAL',
        -            'XMLCOMMENT',
        -            'XMLCONCAT',
        -            'XMLDIFF',
        -            'XMLELEMENT',
        -            'XMLEXISTS',
        -            'XMLFOREST',
        -            'XMLPARSE',
        -            'XMLPATCH',
        -            'XMLPI',
        -            'XMLQUERY',
        -            'XMLROOT',
        -            'XMLSEQUENCE',
        -            'XMLSERIALIZE',
        -            'XMLTABLE',
        -            'XMLTRANSFORM',
        -            'YEAR',
        -            'ZONE'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '=', '<', '>', '|', '+', '-', '*', '/', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -//        3 => false,
        -//        4 => false,
        -//        5 => false,
        -//        6 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #993333; font-weight: bold; text-transform: uppercase;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #ff0000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -//        3 => '',
        -//        4 => '',
        -//        5 => '',
        -//        6 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php
        deleted file mode 100644
        index acf6d994..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php
        +++ /dev/null
        @@ -1,494 +0,0 @@
        - 'Oracle 8 SQL',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'", '"', '`'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source;
        -//        6 => array(
        -//            ),
        -
        -//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables;
        -//        5 => array(
        -//            ),
        -
        -//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views;
        -//        4 => array(
        -//            ),
        -
        -//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns;
        -//        3 => array(
        -//            ),
        -
        -//Put ORACLE reserved keywords here (8.1.7).  I like mine uppercase.
        -        1 => array(
        -            'ABS',
        -            'ACCESS',
        -            'ACOS',
        -            'ADD',
        -            'ADD_MONTHS',
        -            'ALL',
        -            'ALTER',
        -            'ANALYZE',
        -            'AND',
        -            'ANY',
        -            'ARRAY',
        -            'AS',
        -            'ASC',
        -            'ASCII',
        -            'ASIN',
        -            'ASSOCIATE',
        -            'AT',
        -            'ATAN',
        -            'ATAN2',
        -            'AUDIT',
        -            'AUTHID',
        -            'AVG',
        -            'BEGIN',
        -            'BETWEEN',
        -            'BFILENAME',
        -            'BINARY_INTEGER',
        -            'BITAND',
        -            'BODY',
        -            'BOOLEAN',
        -            'BULK',
        -            'BY',
        -            'CALL',
        -            'CASCADE',
        -            'CASE',
        -            'CEIL',
        -            'CHAR',
        -            'CHAR_BASE',
        -            'CHARTOROWID',
        -            'CHECK',
        -            'CHR',
        -            'CLOSE',
        -            'CLUSTER',
        -            'COALESCE',
        -            'COLLECT',
        -            'COLUMN',
        -            'COMMENT',
        -            'COMMIT',
        -            'COMPRESS',
        -            'CONCAT',
        -            'CONNECT',
        -            'CONSTANT',
        -            'CONSTRAINT',
        -            'CONSTRAINTS',
        -            'CONTEXT',
        -            'CONTROLFILE',
        -            'CONVERT',
        -            'CORR',
        -            'COS',
        -            'COSH',
        -            'COST',
        -            'COUNT',
        -            'COVAR_POP',
        -            'COVAR_SAMP',
        -            'CREATE',
        -            'CUME_DIST',
        -            'CURRENT',
        -            'CURRVAL',
        -            'CURSOR',
        -            'DATABASE',
        -            'DATE',
        -            'DAY',
        -            'DECIMAL',
        -            'DECLARE',
        -            'DECODE',
        -            'DEFAULT',
        -            'DELETE',
        -            'DENSE_RANK',
        -            'DEREF',
        -            'DESC',
        -            'DIMENSION',
        -            'DIRECTORY',
        -            'DISASSOCIATE',
        -            'DISTINCT',
        -            'DO',
        -            'DROP',
        -            'DUMP',
        -            'ELSE',
        -            'ELSIF',
        -            'EMPTY_BLOB',
        -            'EMPTY_CLOB',
        -            'END',
        -            'EXCEPTION',
        -            'EXCLUSIVE',
        -            'EXEC',
        -            'EXECUTE',
        -            'EXISTS',
        -            'EXIT',
        -            'EXP',
        -            'EXPLAIN',
        -            'EXTENDS',
        -            'EXTRACT',
        -            'FALSE',
        -            'FETCH',
        -            'FILE',
        -            'FIRST_VALUE',
        -            'FLOAT',
        -            'FLOOR',
        -            'FOR',
        -            'FORALL',
        -            'FROM',
        -            'FUNCTION',
        -            'GOTO',
        -            'GRANT',
        -            'GREATEST',
        -            'GROUP',
        -            'GROUPING',
        -            'HAVING',
        -            'HEAP',
        -            'HEXTORAW',
        -            'HOUR',
        -            'IDENTIFIED',
        -            'IF',
        -            'IMMEDIATE',
        -            'IN',
        -            'INCREMENT',
        -            'INDEX',
        -            'INDEXTYPE',
        -            'INDICATOR',
        -            'INITCAP',
        -            'INITIAL',
        -            'INSERT',
        -            'INSTR',
        -            'INSTRB',
        -            'INTEGER',
        -            'INTERFACE',
        -            'INTERSECT',
        -            'INTERVAL',
        -            'INTO',
        -            'IS',
        -            'ISOLATION',
        -            'JAVA',
        -            'KEY',
        -            'LAG',
        -            'LAST_DAY',
        -            'LAST_VALUE',
        -            'LEAD',
        -            'LEAST',
        -            'LENGTH',
        -            'LENGTHB',
        -            'LEVEL',
        -            'LIBRARY',
        -            'LIKE',
        -            'LIMITED',
        -            'LINK',
        -            'LN',
        -            'LOCK',
        -            'LOG',
        -            'LONG',
        -            'LOOP',
        -            'LOWER',
        -            'LPAD',
        -            'LTRIM',
        -            'MAKE_REF',
        -            'MATERIALIZED',
        -            'MAX',
        -            'MAXEXTENTS',
        -            'MIN',
        -            'MINUS',
        -            'MINUTE',
        -            'MLSLABEL',
        -            'MOD',
        -            'MODE',
        -            'MODIFY',
        -            'MONTH',
        -            'MONTHS_BETWEEN',
        -            'NATURAL',
        -            'NATURALN',
        -            'NEW',
        -            'NEW_TIME',
        -            'NEXT_DAY',
        -            'NEXTVAL',
        -            'NLS_CHARSET_DECL_LEN',
        -            'NLS_CHARSET_ID',
        -            'NLS_CHARSET_NAME',
        -            'NLS_INITCAP',
        -            'NLS_LOWER',
        -            'NLS_UPPER',
        -            'NLSSORT',
        -            'NOAUDIT',
        -            'NOCOMPRESS',
        -            'NOCOPY',
        -            'NOT',
        -            'NOWAIT',
        -            'NTILE',
        -            'NULL',
        -            'NULLIF',
        -            'NUMBER',
        -            'NUMBER_BASE',
        -            'NUMTODSINTERVAL',
        -            'NUMTOYMINTERVAL',
        -            'NVL',
        -            'NVL2',
        -            'OCIROWID',
        -            'OF',
        -            'OFFLINE',
        -            'ON',
        -            'ONLINE',
        -            'OPAQUE',
        -            'OPEN',
        -            'OPERATOR',
        -            'OPTION',
        -            'OR',
        -            'ORDER',
        -            'ORGANIZATION',
        -            'OTHERS',
        -            'OUT',
        -            'OUTLINE',
        -            'PACKAGE',
        -            'PARTITION',
        -            'PCTFREE',
        -            'PERCENT_RANK',
        -            'PLAN',
        -            'PLS_INTEGER',
        -            'POSITIVE',
        -            'POSITIVEN',
        -            'POWER',
        -            'PRAGMA',
        -            'PRIMARY',
        -            'PRIOR',
        -            'PRIVATE',
        -            'PRIVILEGES',
        -            'PROCEDURE',
        -            'PROFILE',
        -            'PUBLIC',
        -            'RAISE',
        -            'RANGE',
        -            'RANK',
        -            'RATIO_TO_REPORT',
        -            'RAW',
        -            'RAWTOHEX',
        -            'REAL',
        -            'RECORD',
        -            'REF',
        -            'REFTOHEX',
        -            'REGR_AVGX',
        -            'REGR_AVGY',
        -            'REGR_COUNT',
        -            'REGR_INTERCEPT',
        -            'REGR_R2',
        -            'REGR_SLOPE',
        -            'REGR_SXX',
        -            'REGR_SXY',
        -            'REGR_SYY',
        -            'RELEASE',
        -            'RENAME',
        -            'REPLACE',
        -            'RESOURCE',
        -            'RETURN',
        -            'RETURNING',
        -            'REVERSE',
        -            'REVOKE',
        -            'ROLE',
        -            'ROLLBACK',
        -            'ROUND',
        -            'ROW',
        -            'ROW_NUMBER',
        -            'ROWID',
        -            'ROWIDTOCHAR',
        -            'ROWNUM',
        -            'ROWS',
        -            'ROWTYPE',
        -            'RPAD',
        -            'RTRIM',
        -            'SAVEPOINT',
        -            'SCHEMA',
        -            'SECOND',
        -            'SEGMENT',
        -            'SELECT',
        -            'SEPERATE',
        -            'SEQUENCE',
        -            'SESSION',
        -            'SET',
        -            'SHARE',
        -            'SIGN',
        -            'SIN',
        -            'SINH',
        -            'SIZE',
        -            'SMALLINT',
        -            'SOUNDEX',
        -            'SPACE',
        -            'SQL',
        -            'SQLCODE',
        -            'SQLERRM',
        -            'SQRT',
        -            'START',
        -            'STATISTICS',
        -            'STDDEV',
        -            'STDDEV_POP',
        -            'STDDEV_SAMP',
        -            'STOP',
        -            'SUBSTR',
        -            'SUBSTRB',
        -            'SUBTYPE',
        -            'SUCCESSFUL',
        -            'SUM',
        -            'SYNONYM',
        -            'SYS_CONTEXT',
        -            'SYS_GUID',
        -            'SYSDATE',
        -            'SYSTEM',
        -            'TABLE',
        -            'TABLESPACE',
        -            'TAN',
        -            'TANH',
        -            'TEMPORARY',
        -            'THEN',
        -            'TIME',
        -            'TIMESTAMP',
        -            'TIMEZONE_ABBR',
        -            'TIMEZONE_HOUR',
        -            'TIMEZONE_MINUTE',
        -            'TIMEZONE_REGION',
        -            'TIMING',
        -            'TO',
        -            'TO_CHAR',
        -            'TO_DATE',
        -            'TO_LOB',
        -            'TO_MULTI_BYTE',
        -            'TO_NUMBER',
        -            'TO_SINGLE_BYTE',
        -            'TRANSACTION',
        -            'TRANSLATE',
        -            'TRIGGER',
        -            'TRIM',
        -            'TRUE',
        -            'TRUNC',
        -            'TRUNCATE',
        -            'TYPE',
        -            'UI',
        -            'UID',
        -            'UNION',
        -            'UNIQUE',
        -            'UPDATE',
        -            'UPPER',
        -            'USE',
        -            'USER',
        -            'USERENV',
        -            'USING',
        -            'VALIDATE',
        -            'VALUE',
        -            'VALUES',
        -            'VAR_POP',
        -            'VAR_SAMP',
        -            'VARCHAR',
        -            'VARCHAR2',
        -            'VARIANCE',
        -            'VIEW',
        -            'VSIZE',
        -            'WHEN',
        -            'WHENEVER',
        -            'WHERE',
        -            'WHILE',
        -            'WITH',
        -            'WORK',
        -            'WRITE',
        -            'YEAR',
        -            'ZONE'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '=', '<', '>', '|', '+', '-', '*', '/', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -//        3 => false,
        -//        4 => false,
        -//        5 => false,
        -//        6 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #993333; font-weight: bold; text-transform: uppercase;'
        -//Add the styles for groups 3-6 here when used
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #ff0000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -//        3 => '',
        -//        4 => '',
        -//        5 => '',
        -//        6 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php
        deleted file mode 100644
        index 2ee1998e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php
        +++ /dev/null
        @@ -1,155 +0,0 @@
        - 'Oxygene',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'),
        -    //Compiler directives
        -    'COMMENT_REGEXP' => array(2 => '/{\\$.*?}|\\(\\*\\$.*?\\*\\)/U'),
        -    'CASE_KEYWORDS' => 0,
        -    'QUOTEMARKS' => array("'"),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'and',   'begin', 'case', 'const',  'div', 'do', 'downto', 'else',
        -            'end',  'for',  'function', 'if', 'in', 'mod', 'not', 'of', 'or',
        -            'procedure', 'repeat', 'record', 'set', 'shl', 'shr', 'then', 'to',
        -            'type', 'until', 'uses', 'var','while', 'with', 'xor', 'exit', 'break',
        -            'class', 'constructor', 'inherited', 'private', 'public', 'protected',
        -            'property', 'As', 'Is', 'Unit', 'Continue', 'Try', 'Except', 'Forward',
        -            'Interface','Implementation', 'nil', 'out', 'loop', 'namespace', 'true',
        -            'false', 'new', 'ensure', 'require', 'on', 'event', 'delegate', 'method',
        -            'raise', 'assembly', 'module', 'using','locking', 'old', 'invariants', 'operator',
        -            'self', 'async', 'finalizer', 'where', 'yield', 'nullable', 'Future',
        -            'From',  'Finally', 'dynamic', 'mapped'
        -            ),
        -        2 => array(
        -            'override', 'virtual', 'External', 'read', 'add', 'remove','final', 'abstract',
        -            'empty', 'global', 'locked', 'sealed', 'reintroduce', 'implements', 'each',
        -            'default', 'partial', 'finalize', 'enum', 'flags', 'result', 'readonly', 'unsafe',
        -            'pinned', 'matching', 'static', 'has', 'step', 'iterator', 'inline', 'nested',
        -            'Implies', 'Select', 'Order', 'By', 'Desc', 'Asc', 'Group', 'Join', 'Take',
        -            'Skip', 'Concat', 'Union', 'Reverse', 'Distinct', 'Into', 'Equals', 'params',
        -            'sequence', 'index', 'notify', 'Parallel', 'create', 'array', 'Queryable', 'Aspect',
        -            'volatile', 'write', 'autoreleasepool', 'await', 'block', 'deprecated', 'extension',
        -            'optional', 'raises', 'selector', 'strong', 'weak', 'tuple', 'unretained'
        -            ),
        -        3 => array(
        -            'chr', 'ord', 'inc', 'dec', 'assert', 'iff', 'assigned','futureAssigned', 'length', 'low', 'high', 'typeOf', 'sizeOf', 'disposeAndNil', 'Coalesce', 'unquote'
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -//        4 => false,
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '[', ']'),
        -        1 => array('.', ',', ':', ';'),
        -        2 => array('@', '^'),
        -        3 => array('=', '+', '-', '*', '/')
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -//            4 => 'color: #000066; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #008000; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #ff0000; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #9ac;',
        -            1 => 'color: #ff0000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;',
        -            1 => 'color: #000066;',
        -            2 => 'color: #000066;',
        -            3 => 'color: #000066;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -//        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        //Hex numbers
        -        0 => '\$[0-9a-fA-F]+',
        -        //Characters
        -        1 => '\#\$?[0-9]{1,3}'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 2
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php
        deleted file mode 100644
        index e31852d9..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php
        +++ /dev/null
        @@ -1,142 +0,0 @@
        - 'OZ',
        -    'COMMENT_SINGLE' => array(1 => '%'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"','\''),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' => array(),
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'declare','local','in','end','proc','fun','functor','require','prepare',
        -            'import','export','define','at','case','then','else','of','elseof',
        -            'elsecase','if','elseif','class','from','prop','attr','feat','meth',
        -            'self','true','false','unit','div','mod','andthen','orelse','cond','or',
        -            'dis','choice','not','thread','try','catch','finally','raise','lock',
        -            'skip','fail','for','do'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true
        -        ),
        -    'SYMBOLS' => array(
        -        '@', '!', '|', '<-', ':=', '<', '>', '=<', '>=', '<=', '#', '~', '.',
        -        '*', '-', '+', '/', '<:', '>:', '=:', '=<:', '>=:', '\\=', '\\=:', ',',
        -        '!!', '...', '==', '::', ':::'
        -        ),
        -    'STYLES' => array(
        -        'REGEXPS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #00a030;',
        -            3 => 'color: #bc8f8f;',
        -            4 => 'color: #0000ff;',
        -            5 => 'color: #a020f0;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #bc8f8f;'
        -            ),
        -        'KEYWORDS' => array(
        -            1 => 'color: #a020f0;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #B22222;',
        -            'MULTI' => 'color: #B22222;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #bc8f8f;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #a020f0;'
        -            ),
        -        'BRACKETS' => array(),
        -        'NUMBERS' => array(),
        -        'METHODS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'REGEXPS' => array(
        -        // function and procedure definition
        -        1 => array(
        -            GESHI_SEARCH => "(proc|fun)([^{}\n\)]*)(\\{)([\$A-Z\300-\326\330-\336][A-Z\300-\326\330-\336a-z\337-\366\370-\3770-9_.]*)",
        -            GESHI_REPLACE => '\4',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1\2\3',
        -            GESHI_AFTER => ''
        -            ),
        -        // class definition
        -        2 => array(
        -            GESHI_SEARCH => "(class)([^A-Z\$]*)([\$A-Z\300-\326\330-\336][A-Z\300-\326\330-\336a-z\337-\366\370-\3770-9_.]*)",
        -            GESHI_REPLACE => '\3\4',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1\2',
        -            GESHI_AFTER => ''
        -            ),
        -        // single character
        -        3 => array(
        -            GESHI_SEARCH => "&.",
        -            GESHI_REPLACE => '\0',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        // method definition
        -        4 => array(
        -            GESHI_SEARCH => "(meth)([^a-zA-Z]+)([a-zA-Z\300-\326\330-\336][A-Z\300-\326\330-\336a-z\337-\366\370-\3770-9]*)",
        -            GESHI_REPLACE => '\3',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1\2',
        -            GESHI_AFTER => ''
        -            ),
        -        // highlight "[]"
        -        // ([] is actually a keyword, but that causes problems in validation; putting it into symbols doesn't work.)
        -        5 => array(
        -            GESHI_SEARCH => "\[\]",
        -            GESHI_REPLACE => '\0',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php
        deleted file mode 100644
        index 98e2ab8e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php
        +++ /dev/null
        @@ -1,128 +0,0 @@
        - 'ParaSail',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('{' => '}'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'all', 'block', 'case', 'continue', 'each',
        -            'else', 'elsif', 'exit', 'for',
        -            'forward', 'if', 'loop', 'return', 'reverse', 'some',
        -            'then', 'until', 'while', 'with'
        -            ),
        -        2 => array(
        -            'abs', 'and','in', 'mod', 'not', 'null', 'or', 'rem', 'xor'
        -            ),
        -        3 => array(
        -            'abstract', 'class',
        -            'concurrent', 'const',
        -            'end', 'extends', 'exports',
        -            'func', 'global', 'implements', 'import',
        -            'interface', 'is', 'lambda', 'locked',
        -            'new', 'of', 'op', 'optional',
        -            'private', 'queued', 'ref',
        -            'separate', 'type', 'var',
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #00007f;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #46aa03; font-weight:bold;',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7f007f;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php
        deleted file mode 100644
        index 1a5d4a73..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php
        +++ /dev/null
        @@ -1,293 +0,0 @@
        - 'PARI/GP',
        -    'COMMENT_SINGLE' => array(1 => '\\\\'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' => array(
        -        # Integers
        -        1 => GESHI_NUMBER_INT_BASIC,
        -        # Reals
        -        2 => GESHI_NUMBER_FLT_SCI_ZERO
        -        ),
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abs','acos','acosh','addhelp','addprimes','agm','alarm','algdep',
        -            'alias','allocatemem','apply','arg','asin','asinh','atan','atanh',
        -            'bernfrac','bernpol','bernreal','bernvec','besselh1','besselh2',
        -            'besseli','besselj','besseljh','besselk','besseln','bestappr',
        -            'bestapprPade','bezout','bezoutres','bigomega','binary','binomial',
        -            'bitand','bitneg','bitnegimply','bitor','bittest','bitxor',
        -            'bnfcertify','bnfcompress','bnfdecodemodule','bnfinit',
        -            'bnfisintnorm','bnfisnorm','bnfisprincipal','bnfissunit',
        -            'bnfisunit','bnfnarrow','bnfsignunit','bnfsunit','bnrclassno',
        -            'bnrclassnolist','bnrconductor','bnrconductorofchar','bnrdisc',
        -            'bnrdisclist','bnrinit','bnrisconductor','bnrisprincipal','bnrL1',
        -            'bnrrootnumber','bnrstark','break','breakpoint','Catalan','ceil',
        -            'centerlift','charpoly','chinese','cmp','Col','component','concat',
        -            'conj','conjvec','content','contfrac','contfracpnqn','core',
        -            'coredisc','cos','cosh','cotan','dbg_down','dbg_err','dbg_up',
        -            'dbg_x','default','denominator','deriv','derivnum','diffop',
        -            'digits','dilog','dirdiv','direuler','dirmul','dirzetak','divisors',
        -            'divrem','eint1','elladd','ellak','ellan','ellanalyticrank','ellap',
        -            'ellbil','ellcard','ellchangecurve','ellchangepoint',
        -            'ellconvertname','elldivpol','elleisnum','elleta','ellffinit',
        -            'ellfromj','ellgenerators','ellglobalred','ellgroup','ellheegner',
        -            'ellheight','ellheightmatrix','ellidentify','ellinit',
        -            'ellisoncurve','ellj','ellL1','elllocalred','elllog','elllseries',
        -            'ellminimalmodel','ellmodulareqn','ellmul','ellneg','ellorder',
        -            'ellordinate','ellpointtoz','ellrootno','ellsearch','ellsigma',
        -            'ellsub','elltaniyama','elltatepairing','elltors','ellweilpairing',
        -            'ellwp','ellzeta','ellztopoint','erfc','errname','error','eta','Euler',
        -            'eulerphi','eval','exp','extern','externstr','factor','factorback',
        -            'factorcantor','factorff','factorial','factorint','factormod',
        -            'factornf','factorpadic','ffgen','ffinit','fflog','ffnbirred',
        -            'fforder','ffprimroot','fibonacci','floor','for','forcomposite','fordiv','forell',
        -            'forprime','forqfvec','forstep','forsubgroup','forvec','frac','galoisexport',
        -            'galoisfixedfield','galoisgetpol','galoisidentify','galoisinit',
        -            'galoisisabelian','galoisisnormal','galoispermtopol',
        -            'galoissubcyclo','galoissubfields','galoissubgroups','gamma',
        -            'gammah','gcd','getenv','getheap','getrand','getstack','gettime',
        -            'global','hammingweight','hilbert','hyperu','I','idealadd',
        -            'idealaddtoone','idealappr','idealchinese','idealcoprime',
        -            'idealdiv','idealfactor','idealfactorback','idealfrobenius',
        -            'idealhnf','idealintersect','idealinv','ideallist','ideallistarch',
        -            'ideallog','idealmin','idealmul','idealnorm','idealnumden',
        -            'idealpow','idealprimedec','idealramgroups','idealred','idealstar',
        -            'idealtwoelt','idealval','if','iferr','iferrname','imag','incgam','incgamc','input',
        -            'install','intcirc','intformal','intfouriercos','intfourierexp',
        -            'intfouriersin','intfuncinit','intlaplaceinv','intmellininv',
        -            'intmellininvshort','intnum','intnuminit','intnuminitgen',
        -            'intnumromb','intnumstep','isfundamental','ispolygonal','ispower','ispowerful',
        -            'isprime','isprimepower','ispseudoprime','issquare','issquarefree','istotient',
        -            'kill','kronecker','lcm','length','lex','lift','lindep','List',
        -            'listcreate','listinsert','listkill','listpop','listput','listsort',
        -            'lngamma','local','log','Mat','matadjoint','matalgtobasis',
        -            'matbasistoalg','matcompanion','matconcat','matcontent','matdet','matdetint',
        -            'matdiagonal','mateigen','matfrobenius','mathess','mathilbert',
        -            'mathnf','mathnfmod','mathnfmodid','matid','matimage',
        -            'matimagecompl','matindexrank','matintersect','matinverseimage',
        -            'matisdiagonal','matker','matkerint','matmuldiagonal',
        -            'matmultodiagonal','matpascal','matrank','matrix','matrixqz',
        -            'matsize','matsnf','matsolve','matsolvemod','matsupplement',
        -            'mattranspose','max','min','minpoly','Mod','modreverse','moebius',
        -            'my','newtonpoly','next','nextprime','nfalgtobasis','nfbasis',
        -            'nfbasistoalg','nfdetint','nfdisc','nfeltadd','nfeltdiv',
        -            'nfeltdiveuc','nfeltdivmodpr','nfeltdivrem','nfeltmod','nfeltmul',
        -            'nfeltmulmodpr','nfeltnorm','nfeltpow','nfeltpowmodpr',
        -            'nfeltreduce','nfeltreducemodpr','nfelttrace','nfeltval','nffactor',
        -            'nffactorback','nffactormod','nfgaloisapply','nfgaloisconj',
        -            'nfhilbert','nfhnf','nfhnfmod','nfinit','nfisideal','nfisincl',
        -            'nfisisom','nfkermodpr','nfmodprinit','nfnewprec','nfroots',
        -            'nfrootsof1','nfsnf','nfsolvemodpr','nfsubfields','norm','norml2',
        -            'numbpart','numdiv','numerator','numtoperm','O','omega','padicappr',
        -            'padicfields','padicprec','partitions','permtonum','Pi','plot',
        -            'plotbox','plotclip','plotcolor','plotcopy','plotcursor','plotdraw',
        -            'ploth','plothraw','plothsizes','plotinit','plotkill','plotlines',
        -            'plotlinetype','plotmove','plotpoints','plotpointsize',
        -            'plotpointtype','plotrbox','plotrecth','plotrecthraw','plotrline',
        -            'plotrmove','plotrpoint','plotscale','plotstring','Pol',
        -            'polchebyshev','polcoeff','polcompositum','polcyclo','polcyclofactors','poldegree',
        -            'poldisc','poldiscreduced','polgalois','polgraeffe','polhensellift',
        -            'polhermite','polinterpolate','poliscyclo','poliscycloprod',
        -            'polisirreducible','pollead','pollegendre','polrecip','polred',
        -            'polredabs','polredbest','polredord','polresultant','Polrev','polroots',
        -            'polrootsff','polrootsmod','polrootspadic','polsturm','polsubcyclo',
        -            'polsylvestermatrix','polsym','poltchebi','poltschirnhaus',
        -            'polylog','polzagier','precision','precprime','prime','primepi',
        -            'primes','print','print1','printf','printsep','printtex','prod','prodeuler',
        -            'prodinf','psdraw','psi','psploth','psplothraw','Qfb','qfbclassno',
        -            'qfbcompraw','qfbhclassno','qfbnucomp','qfbnupow','qfbpowraw',
        -            'qfbprimeform','qfbred','qfbsolve','qfgaussred','qfjacobi','qflll',
        -            'qflllgram','qfminim','qfperfection','qfrep','qfsign',
        -            'quadclassunit','quaddisc','quadgen','quadhilbert','quadpoly',
        -            'quadray','quadregulator','quadunit','quit','random','randomprime','read',
        -            'readvec','real','removeprimes','return','rnfalgtobasis','rnfbasis',
        -            'rnfbasistoalg','rnfcharpoly','rnfconductor','rnfdedekind','rnfdet',
        -            'rnfdisc','rnfeltabstorel','rnfeltdown','rnfeltreltoabs','rnfeltup',
        -            'rnfequation','rnfhnfbasis','rnfidealabstorel','rnfidealdown',
        -            'rnfidealhnf','rnfidealmul','rnfidealnormabs','rnfidealnormrel',
        -            'rnfidealreltoabs','rnfidealtwoelt','rnfidealup','rnfinit',
        -            'rnfisabelian','rnfisfree','rnfisnorm','rnfisnorminit','rnfkummer',
        -            'rnflllgram','rnfnormgroup','rnfpolred','rnfpolredabs',
        -            'rnfpseudobasis','rnfsteinitz','round','select','Ser','serconvol',
        -            'serlaplace','serreverse','Set','setbinop','setintersect',
        -            'setisset','setminus','setrand','setsearch','setunion','shift',
        -            'shiftmul','sigma','sign','simplify','sin','sinh','sizebyte',
        -            'sizedigit','solve','sqr','sqrt','sqrtint','sqrtn','sqrtnint','stirling','Str',
        -            'Strchr','Strexpand','Strprintf','Strtex','subgrouplist','subst',
        -            'substpol','substvec','sum','sumalt','sumdedekind','sumdiv','sumdivmult','sumdigits',
        -            'sumformal','suminf','sumnum','sumnumalt','sumnuminit','sumpos','system','tan',
        -            'tanh','taylor','teichmuller','theta','thetanullk','thue',
        -            'thueinit','trace','trap','truncate','type','until','valuation',
        -            'variable','Vec','vecextract','vecmax','vecmin','Vecrev',
        -            'vecsearch','Vecsmall','vecsort','vector','vectorsmall','vectorv',
        -            'version','warning','weber','whatnow','while','write','write1',
        -            'writebin','writetex','zeta','zetak','zetakinit','zncoppersmith',
        -            'znlog','znorder','znprimroot','znstar'
        -            ),
        -
        -        2 => array(
        -            'void','bool','negbool','small','int',/*'real',*/'mp','var','lg','pol',
        -            'vecsmall','vec','list','str','genstr','gen','typ'
        -            ),
        -
        -        3 => array(
        -            'TeXstyle','breakloop','colors','compatible','datadir','debug',
        -            'debugfiles','debugmem','echo','factor_add_primes','factor_proven',
        -            'format','graphcolormap','graphcolors','help','histfile','histsize',
        -            'lines','linewrap',/*'log',*/'logfile','new_galois_format','output',
        -            'parisize','path','prettyprinter','primelimit','prompt_cont',
        -            'prompt','psfile','readline','realprecision','recover','secure',
        -            'seriesprecision',/*'simplify',*/'sopath','strictmatch','timer'
        -            ),
        -
        -        4 => array(
        -            '"e_ARCH"','"e_BUG"','"e_FILE"','"e_IMPL"','"e_PACKAGE"','"e_DIM"',
        -            '"e_FLAG"','"e_NOTFUNC"','"e_OP"','"e_TYPE"','"e_TYPE2"',
        -            '"e_PRIORITY"','"e_VAR"','"e_DOMAIN"','"e_MAXPRIME"','"e_MEM"',
        -            '"e_OVERFLOW"','"e_PREC"','"e_STACK"','"e_ALARM"','"e_USER"',
        -            '"e_CONSTPOL"','"e_COPRIME"','"e_INV"','"e_IRREDPOL"','"e_MISC"',
        -            '"e_MODULUS"','"e_NEGVAL"','"e_PRIME"','"e_ROOTS0"','"e_SQRTN"'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(',')','{','}','[',']','+','-','*','/','%','=','<','>','!','^','&','|','?',';',':',',','\\','\''
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #e07022;',
        -            3 => 'color: #00d2d2;',
        -            4 => 'color: #00d2d2;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;',
        -            'MULTI' => 'color: #008000;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #111111; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #002222;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #800080;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #666666;',
        -            1 => 'color: #666666;',
        -            2 => 'color: #666666;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #e07022',    # Should be the same as keyword group 2
        -            1 => 'color: #555555',
        -            2 => 'color: #0000ff'     # Should be the same as keyword group 1
        -            ),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        0 => array( # types marked on variables
        -            GESHI_SEARCH => '(? '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '"',
        -            GESHI_AFTER => '"'
        -            ),
        -        1 => array( # literal variables
        -            GESHI_SEARCH => '(? '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => array( # member functions
        -            GESHI_SEARCH => '(?<=[.])(a[1-6]|b[2-8]|c[4-6]|area|bid|bnf|clgp|cyc|diff|disc|[efjp]|fu|gen|index|mod|nf|no|omega|pol|reg|roots|sign|r[12]|t2|tate|tu|zk|zkst)\b',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        2 => array(
        -            '[a-zA-Z][a-zA-Z0-9_]*:' => ''
        -            ),
        -        3 => array(
        -            'default(' => ''
        -            ),
        -        4 => array(
        -            'iferrname(' => ''
        -            ),
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php
        deleted file mode 100644
        index 5b9d986e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php
        +++ /dev/null
        @@ -1,163 +0,0 @@
        - 'Pascal',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'),
        -    //Compiler directives
        -    'COMMENT_REGEXP' => array(2 => '/\\{\\$.*?}|\\(\\*\\$.*?\\*\\)/U'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'"),
        -    'ESCAPE_CHAR' => '',
        -
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'absolute','asm','assembler','begin','break','case','catch','cdecl',
        -            'const','constructor','default','destructor','div','do','downto',
        -            'else','end','except','export','exports','external','far',
        -            'finalization','finally','for','forward','function','goto','if',
        -            'implementation','in','index','inherited','initialization','inline',
        -            'interface','interrupt','label','library','mod','name','not','of',
        -            'or','overload','override','private','procedure','program',
        -            'property','protected','public','published','raise','repeat',
        -            'resourcestring','shl','shr','stdcall','stored','switch','then',
        -            'to','try','type','unit','until','uses','var','while','with','xor'
        -            ),
        -        2 => array(
        -            'nil', 'false', 'true',
        -            ),
        -        3 => array(
        -            'abs','and','arc','arctan','blockread','blockwrite','chr','dispose',
        -            'cos','eof','eoln','exp','get','ln','new','odd','ord','ordinal',
        -            'pred','read','readln','sin','sqrt','succ','write','writeln'
        -            ),
        -        4 => array(
        -            'ansistring','array','boolean','byte','bytebool','char','file',
        -            'integer','longbool','longint','object','packed','pointer','real',
        -            'record','set','shortint','smallint','string','union','word'
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '[', ']'),
        -        1 => array('.', ',', ':', ';'),
        -        2 => array('@', '^'),
        -        3 => array('=', '+', '-', '*', '/')
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #000066; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #008000; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #ff0000; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            //'HARD' => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000cc;',
        -            1 => 'color: #ff0000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;',
        -            1 => 'color: #000066;',
        -            2 => 'color: #000066;',
        -            3 => 'color: #000066;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        //Hex numbers
        -        0 => '\$[0-9a-fA-F]+',
        -        //Characters
        -        1 => '\#(?:\$[0-9a-fA-F]{1,2}|\d{1,3})'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php
        deleted file mode 100644
        index 29bbf472..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php
        +++ /dev/null
        @@ -1,186 +0,0 @@
        - 'PCRE',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(
        -        ),
        -    'COMMENT_REGEXP' => array(
        -        // Non-matching groups
        -        1 => "/(?<=\()\?(?::|(?=\())/",
        -
        -        // Modifier groups
        -        2 => "/(?<=\()\?[cdegimopsuxUX\-]+(?::|(?=\)))/",
        -
        -        // Look-Aheads
        -        3 => "/(?<=\()\?[!=]/",
        -
        -        // Look-Behinds
        -        4 => "/(?<=\()\?<[!=]/",
        -
        -        // Forward Matching
        -        5 => "/(?<=\()\?>/",
        -
        -        // Recursive Matching
        -        6 => "/(?<=\()\?R(?=\))/",
        -
        -        // Named Subpattern
        -        7 => "/(?<=\()\?(?:P?<\w+>|\d+(?=\))|P[=>]\w+(?=\)))/",
        -
        -        // Back Reference
        -        8 => "/\\\\(?:[1-9]\d?|g\d+|g\{(?:-?\d+|\w+)\}|k<\w+>|k'\w+'|k\{\w+\})/",
        -
        -        // Byte sequence: Octal
        -        9 => "/\\\\[0-7]{2,3}/",
        -
        -        // Byte sequence: Hex
        -        10 => "/\\\\x[0-9a-fA-F]{2}/",
        -
        -        // Byte sequence: Hex
        -        11 => "/\\\\u[0-9a-fA-F]{4}/",
        -
        -        // Byte sequence: Hex
        -        12 => "/\\\\U[0-9a-fA-F]{8}/",
        -
        -        // Byte sequence: Unicode
        -        13 => "/\\\\[pP]\{[^}\n]+\}/",
        -
        -        // One-Char Escapes
        -        14 => "/\\\\[abdefnrstvwzABCDGSWXZ\\\\\\.\[\]\(\)\{\}\^\\\$\?\+\*]/",
        -
        -        // Byte sequence: Control-X sequence
        -        15 => "/\\\\c./",
        -
        -        // Quantifier
        -        16 => "/\{(?:\d+,?|\d*,\d+)\}/",
        -
        -        // Comment Subpattern
        -        17 => "/(?<=\()\?#[^\)]*/",
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('.'),
        -        1 => array('(', ')'),
        -        2 => array('[', ']', '|'),
        -        3 => array('^', '$'),
        -        4 => array('?', '+', '*'),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #993333; font-weight: bold;',
        -            2 => 'color: #cc3300; font-weight: bold;',
        -            3 => 'color: #cc0066; font-weight: bold;',
        -            4 => 'color: #cc0066; font-weight: bold;',
        -            5 => 'color: #cc6600; font-weight: bold;',
        -            6 => 'color: #cc00cc; font-weight: bold;',
        -            7 => 'color: #cc9900; font-weight: bold; font-style: italic;',
        -            8 => 'color: #cc9900; font-style: italic;',
        -            9 => 'color: #669933; font-style: italic;',
        -            10 => 'color: #339933; font-style: italic;',
        -            11 => 'color: #339966; font-style: italic;',
        -            12 => 'color: #339999; font-style: italic;',
        -            13 => 'color: #663399; font-style: italic;',
        -            14 => 'color: #999933; font-style: italic;',
        -            15 => 'color: #993399; font-style: italic;',
        -            16 => 'color: #333399; font-style: italic;',
        -            17 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #333399; font-weight: bold;',
        -            1 => 'color: #993333; font-weight: bold;',
        -            2 => 'color: #339933; font-weight: bold;',
        -            3 => 'color: #333399; font-weight: bold;',
        -            4 => 'color: #333399; font-style: italic;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php
        deleted file mode 100644
        index b9117a2b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php
        +++ /dev/null
        @@ -1,300 +0,0 @@
        - 'per',
        -    'COMMENT_SINGLE' => array(1 => '--', 2 => '#'),
        -    'COMMENT_MULTI' => array('{' => '}'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            "ACCELERATOR",
        -            "ACCELERATOR2",
        -            "ACTION",
        -            "ALT",
        -            "AND",
        -            "AUTO",
        -            "AUTONEXT",
        -            "AUTOSCALE",
        -            "BETWEEN",
        -            "BOTH",
        -            "BUTTON",
        -            "BUTTONEDIT",
        -            "BUTTONTEXTHIDDEN",
        -            "BY",
        -            "BYTE",
        -            "CANVAS",
        -            "CENTER",
        -            "CHECKBOX",
        -            "CLASS",
        -            "COLOR",
        -            "COLUMNS",
        -            "COMBOBOX",
        -            "COMMAND",
        -            "COMMENT",
        -            "COMMENTS",
        -            "COMPACT",
        -            "COMPRESS",
        -            "CONFIG",
        -            "CONTROL",
        -            "CURRENT",
        -            "DATABASE",
        -            "DATEEDIT",
        -            "DEC",
        -            "DEFAULT",
        -            "DEFAULTS",
        -            "DELIMITERS",
        -            "DISPLAY",
        -            "DISPLAYONLY",
        -            "DOWNSHIFT",
        -            "DYNAMIC",
        -            "EDIT",
        -            "FIXED",
        -            "FOLDER",
        -            "FONTPITCH",
        -            "FORMAT",
        -            "FORMONLY",
        -            "GRID",
        -            "GRIDCHILDRENINPARENT",
        -            "GROUP",
        -            "HBOX",
        -            "HEIGHT",
        -            "HIDDEN",
        -            "HORIZONTAL",
        -            "INCLUDE",
        -            "INITIAL",
        -            "INITIALIZER",
        -            "INPUT",
        -            "INSTRUCTIONS",
        -            "INTERVAL",
        -            "INVISIBLE",
        -            "IS",
        -            "ITEM",
        -            "ITEMS",
        -            "JUSTIFY",
        -            "KEY",
        -            "KEYS",
        -            "LABEL",
        -            "LEFT",
        -            "LIKE",
        -            "LINES",
        -            "MATCHES",
        -            "NAME",
        -            "NOENTRY",
        -            "NONCOMPRESS",
        -            "NORMAL",
        -            "NOT",
        -            "NOUPDATE",
        -            "OPTIONS",
        -            "OR",
        -            "ORIENTATION",
        -            "PACKED",
        -            "PAGE",
        -            "PICTURE",
        -            "PIXELHEIGHT",
        -            "PIXELS",
        -            "PIXELWIDTH",
        -            "POINTS",
        -            "PROGRAM",
        -            "PROGRESSBAR",
        -            "QUERYCLEAR",
        -            "QUERYEDITABLE",
        -            "RADIOGROUP",
        -            "RECORD",
        -            "REQUIRED",
        -            "REVERSE",
        -            "RIGHT",
        -            "SAMPLE",
        -            "SCREEN",
        -            "SCROLL",
        -            "SCROLLBARS",
        -            "SCROLLGRID",
        -            "SECOND",
        -            "SEPARATOR",
        -            "SHIFT",
        -            "SIZE",
        -            "SIZEPOLICY",
        -            "SMALLFLOAT",
        -            "SMALLINT",
        -            "SPACING",
        -            "STRETCH",
        -            "STYLE",
        -            "TABINDEX",
        -            "TABLE",
        -            "TAG",
        -            "TEXT",
        -            "TEXTEDIT",
        -            "THROUGH",
        -            "THRU",
        -            "TITLE",
        -            "TO",
        -            "TOOLBAR",
        -            "TOPMENU",
        -            "TYPE",
        -            "UNHIDABLE",
        -            "UNHIDABLECOLUMNS",
        -            "UNMOVABLE",
        -            "UNMOVABLECOLUMNS",
        -            "UNSIZABLE",
        -            "UNSIZABLECOLUMNS",
        -            "UNSORTABLE",
        -            "UNSORTABLECOLUMNS",
        -            "UPSHIFT",
        -            "USER",
        -            "VALIDATE",
        -            "VALUECHECKED",
        -            "VALUEMAX",
        -            "VALUEMIN",
        -            "VALUEUNCHECKED",
        -            "VARCHAR",
        -            "VARIABLE",
        -            "VBOX",
        -            "VERIFY",
        -            "VERSION",
        -            "VERTICAL",
        -            "TIMESTAMP",
        -            "WANTCOLUMNSANCHORED", /* to be removed! */
        -            "WANTFIXEDPAGESIZE",
        -            "WANTNORETURNS",
        -            "WANTTABS",
        -            "WHERE",
        -            "WIDGET",
        -            "WIDTH",
        -            "WINDOWSTYLE",
        -            "WITHOUT",
        -            "WORDWRAP",
        -            "X",
        -            "Y",
        -            "ZEROFILL",
        -            "SCHEMA",
        -            "ATTRIBUTES",
        -            "TABLES",
        -            "LAYOUT",
        -            "END"
        -            ),
        -        2 => array(
        -            "YEAR",
        -            "BLACK",
        -            "BLINK",
        -            "BLUE",
        -            "YELLOW",
        -            "WHITE",
        -            "UNDERLINE",
        -            "CENTURY",
        -            "FRACTION",
        -            "CHAR",
        -            "CHARACTER",
        -            "CHARACTERS",
        -            "CYAN",
        -            "DATE",
        -            "DATETIME",
        -            "DAY",
        -            "DECIMAL",
        -            "FALSE",
        -            "FLOAT",
        -            "GREEN",
        -            "HOUR",
        -            "INT",
        -            "INTEGER",
        -            "MAGENTA",
        -            "MINUTE",
        -            "MONEY",
        -            "NONE",
        -            "NULL",
        -            "REAL",
        -            "RED",
        -            "TRUE",
        -            "TODAY",
        -            "MONTH",
        -            "IMAGE"
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':',
        -        '(', ')', '[', ']'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF;',
        -            2 => 'color: #0000FF; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080; font-style: italic;',
        -            2 => 'color: #008080;',
        -            'MULTI' => 'color: green'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #808080;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #0000FF;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php
        deleted file mode 100644
        index 15ab836a..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php
        +++ /dev/null
        @@ -1,211 +0,0 @@
        - 'Perl',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(
        -        '=back' => '=cut',
        -        '=head' => '=cut',
        -        '=item' => '=cut',
        -        '=over' => '=cut',
        -        '=begin' => '=cut',
        -        '=end' => '=cut',
        -        '=for' => '=cut',
        -        '=encoding' => '=cut',
        -        '=pod' => '=cut'
        -        ),
        -    'COMMENT_REGEXP' => array(
        -        //Regular expressions
        -        2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
        -        //Regular expression match variables
        -        3 => '/\$\d+/',
        -        //Heredoc
        -        4 => '/<<\s*?([\'"]?)([a-zA-Z0-9]+)\1;[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
        -        //Predefined variables
        -        5 => '/\$(\^[a-zA-Z]?|[\*\$`\'&_\.,+\-~:;\\\\\/"\|%=\?!@#<>\(\)\[\]])(?!\w)|@[_+\-]|%[!]|\$(?=\{)/',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"','`'),
        -    'HARDQUOTE' => array("'", "'"),            // An optional 2-element array defining the beginning and end of a hard-quoted string
        -    'HARDESCAPE' => array('\\\'',),
        -        // Things that must still be escaped inside a hard-quoted string
        -        // If HARDQUOTE is defined, HARDESCAPE must be defined
        -        // This will not work unless the first character of each element is either in the
        -        // QUOTEMARKS array or is the ESCAPE_CHAR
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'case', 'do', 'else', 'elsif', 'for', 'if', 'then', 'until', 'while', 'foreach', 'my',
        -            'xor', 'or', 'and', 'unless', 'next', 'last', 'redo', 'not', 'our',
        -            'reset', 'continue', 'cmp', 'ne', 'eq', 'lt', 'gt', 'le', 'ge',
        -            ),
        -        2 => array(
        -            'use', 'sub', 'new', '__END__', '__DATA__', '__DIE__', '__WARN__', 'BEGIN',
        -            'STDIN', 'STDOUT', 'STDERR', 'ARGV', 'ARGVOUT'
        -            ),
        -        3 => array(
        -            'abs', 'accept', 'alarm', 'atan2', 'bind', 'binmode', 'bless',
        -            'caller', 'chdir', 'chmod', 'chomp', 'chop', 'chown', 'chr',
        -            'chroot', 'close', 'closedir', 'connect', 'cos',
        -            'crypt', 'dbmclose', 'dbmopen', 'defined', 'delete', 'die',
        -            'dump', 'each', 'endgrent', 'endhostent', 'endnetent', 'endprotoent',
        -            'endpwent', 'endservent', 'eof', 'eval', 'exec', 'exists', 'exit',
        -            'exp', 'fcntl', 'fileno', 'flock', 'fork', 'format', 'formline',
        -            'getc', 'getgrent', 'getgrgid', 'getgrnam', 'gethostbyaddr',
        -            'gethostbyname', 'gethostent', 'getlogin', 'getnetbyaddr', 'getnetbyname',
        -            'getnetent', 'getpeername', 'getpgrp', 'getppid', 'getpriority',
        -            'getprotobyname', 'getprotobynumber', 'getprotoent', 'getpwent',
        -            'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent',
        -            'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep',
        -            'hex', 'import', 'index', 'int', 'ioctl', 'join', 'keys', 'kill',
        -            'lc', 'lcfirst', 'length', 'link', 'listen', 'local',
        -            'localtime', 'log', 'lstat', 'm', 'map', 'mkdir', 'msgctl', 'msgget',
        -            'msgrcv', 'msgsnd', 'no', 'oct', 'open', 'opendir',
        -            'ord', 'pack', 'package', 'pipe', 'pop', 'pos', 'print',
        -            'printf', 'prototype', 'push', 'qq', 'qr', 'quotemeta', 'qw',
        -            'qx', 'q', 'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe',
        -            'recv', 'ref', 'rename', 'require', 'return',
        -            'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'scalar', 'seek',
        -            'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent',
        -            'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent',
        -            'setpwent', 'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget',
        -            'shmread', 'shmwrite', 'shutdown', 'sin', 'sleep', 'socket', 'socketpair',
        -            'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat',
        -            'study', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread',
        -            'sysseek', 'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied',
        -            'time', 'times', 'tr', 'truncate', 'uc', 'ucfirst', 'umask', 'undef',
        -            'unlink', 'unpack', 'unshift', 'untie', 'utime', 'values',
        -            'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'write', 'y'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '<', '>', '=',
        -        '!', '@', '~', '&', '|', '^',
        -        '+','-', '*', '/', '%',
        -        ',', ';', '?', '.', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #009966; font-style: italic;',
        -            3 => 'color: #0000ff;',
        -            4 => 'color: #cc0000; font-style: italic;',
        -            5 => 'color: #0000ff;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            'HARD' => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;',
        -            4 => 'color: #009999;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://perldoc.perl.org/functions/{FNAMEL}.html'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '->',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        //Variable
        -        0 => '(?:\$[\$#]?|\\\\(?:[@%*]?|\\\\*\$|&)|%[$]?|@[$]?|\*[$]?|&[$]?)[a-zA-Z_][a-zA-Z0-9_]*',
        -        //File Descriptor
        -        4 => '<[a-zA-Z_][a-zA-Z0-9_]*>',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'COMMENTS' => array(
        -            'DISALLOWED_BEFORE' => '$'
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php
        deleted file mode 100644
        index 3bd5f0a2..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php
        +++ /dev/null
        @@ -1,195 +0,0 @@
        - 'Perl 6',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array('=begin' => '=end'),
        -    'COMMENT_REGEXP' => array(
        -        //Regular expressions
        -        2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
        -        //Regular expression match variables
        -        3 => '/\$\d+/',
        -        //Heredoc
        -        4 => '/<<\s*?([\'"]?)([a-zA-Z0-9]+)\1;[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
        -        //Beastly hack to finish highlighting each POD block
        -        5 => '((?<==end) .+)'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'HARDQUOTE' => array("'", "'"),            // An optional 2-element array defining the beginning and end of a hard-quoted string
        -    'HARDESCAPE' => array('\\\''),
        -        // Things that must still be escaped inside a hard-quoted string
        -        // If HARDQUOTE is defined, HARDESCAPE must be defined
        -        // This will not work unless the first character of each element is either in the
        -        // QUOTEMARKS array or is the ESCAPE_CHAR
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'do', 'else', 'elsif', 'for', 'if', 'then', 'until',
        -            'while', 'loop', 'repeat', 'my', 'xor', 'or', 'and',
        -            'unless', 'next', 'last', 'redo', 'not', 'our', 'let',
        -            'temp', 'state', 'enum', 'constant', 'continue', 'cmp',
        -            'ne', 'eq', 'lt', 'gt', 'le', 'ge', 'leg', 'div', 'X',
        -            'Z', 'x', 'xx', 'given', 'when', 'default', 'has',
        -            'returns', 'of', 'is', 'does', 'where', 'subset', 'but',
        -            'True', 'False', 'return', 'die', 'fail'
        -            ),
        -        2 => array(
        -            'use', 'sub', 'multi', 'method', 'submethod', 'proto',
        -            'class', 'role', 'grammar', 'regex', 'token', 'rule',
        -            'new', 'BEGIN', 'END', 'CHECK', 'INIT', 'START', 'FIRST',
        -            'ENTER', 'LEAVE', 'KEEP', 'UNDO', 'NEXT', 'LAST', 'PRE',
        -            'POST', 'CATCH', 'CONTROL', 'BUILD'
        -            ),
        -        3 => array(
        -            'all', 'any', 'cat', 'classify', 'defined', 'grep', 'first',
        -            'keys', 'kv', 'join', 'map', 'max', 'min', 'none', 'one', 'pairs',
        -            'print', 'printf', 'roundrobin', 'pick', 'reduce', 'reverse', 'say',
        -            'shape', 'sort', 'srand', 'undefine', 'uri', 'values', 'warn', 'zip',
        -
        -            # Container
        -            'rotate', 'comb', 'end', 'elems', 'delete',
        -            'exists', 'pop', 'push', 'shift', 'splice',
        -            'unshift', 'invert', 'decode',
        -
        -            # Numeric
        -            'succ', 'pred', 'abs', 'exp', 'log',
        -            'log10', 'rand', 'roots', 'cis', 'unpolar', 'i', 'floor',
        -            'ceiling', 'round', 'truncate', 'sign', 'sqrt',
        -            'polar', 're', 'im', 'I', 'atan2', 'nude',
        -            'denominator', 'numerator',
        -
        -            # Str
        -            'p5chop', 'chop', 'p5chomp', 'chomp', 'lc', 'lcfirst',
        -            'uc', 'ucfirst', 'normalize', 'samecase', 'sameaccent',
        -            'capitalize', 'length', 'chars', 'graphs', 'codes',
        -            'bytes', 'encode', 'index', 'pack', 'quotemeta', 'rindex',
        -            'split', 'words', 'flip', 'sprintf', 'fmt',
        -            'substr', 'trim', 'unpack', 'match', 'subst', 'trans'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '<', '>', '=',
        -        '!', '@', '~', '&', '|', '^',
        -        '+','-', '*', '/', '%',
        -        ',', ';', '?', '.', ':',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #009966; font-style: italic;',
        -            3 => 'color: #0000ff;',
        -            4 => 'color: #cc0000; font-style: italic;',
        -            5 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            'HARD' => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        //Variable
        -        0 => '(?:[$@%]|&)(?:(?:[\^:*?!~]|<)?[a-zA-Z_][a-zA-Z0-9_]*|(?=\.))'
        -        # We treat the . twigil specially so the name can be highlighted as an
        -        # object field (via OBJECT_SPLITTERS).
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'COMMENTS' => array(
        -            'DISALLOWED_BEFORE' => '$'
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php
        deleted file mode 100644
        index 37b30fe9..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php
        +++ /dev/null
        @@ -1,176 +0,0 @@
        - 'OpenBSD Packet Filter',
        -    'COMMENT_SINGLE' => array('#'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        1 => "/\\$\\{[^\\n\\}]*?\\}/i",
        -        2 => '/<<-?\s*?(\'?)([a-zA-Z0-9]+)\1\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
        -        3 => "/\\\\['\"]/siU"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array("\'"),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        1 => "#\\\\[nfrtv\\$\\\"\n]#i",
        -        2 => "#\\$[a-z_][a-z0-9_]*#i",
        -        3 => "/\\$\\{[^\\n\\}]*?\\}/i",
        -        4 => "/\\$\\([^\\n\\)]*?\\)/i",
        -        5 => "/`[^`]*`/"
        -        ),
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'pass'
        -        ),
        -        2 => array(
        -            'block'
        -            ),
        -        3 => array(
        -            'quick','keep','state','antispoof','table','persist','file','scrub',
        -            'set','skip','flags','on'
        -            ),
        -        4 => array(
        -            'in','out','proto'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;', '`','='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #009900; font-weight: bold;',
        -            2 => 'color: #990000; font-weight: bold;',
        -            3 => 'color: #7a0874;',
        -            4 => 'color: #336699;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #666666; font-style: italic;',
        -            1 => 'color: #800000;',
        -            2 => 'color: #cc0000; font-style: italic;',
        -            3 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #007800;',
        -            3 => 'color: #007800;',
        -            4 => 'color: #007800;',
        -            5 => 'color: #780078;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #7a0874; font-weight: bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #CC0000;',
        -            'HARD' => 'color: #CC0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff00cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #007800;',
        -            1 => 'color: #007800;',
        -            2 => 'color: #007800;',
        -            4 => 'color: #007800;',
        -            5 => 'color: #660033;',
        -            6 => 'color: #000099; font-weight: bold;',
        -            7 => 'color: #0000ff;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Variables (will be handled by comment_regexps)
        -        0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}",
        -        //Variables without braces
        -        1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*",
        -        //Variable assignment
        -        2 => "(? "\\$[*#\$\\-\\?!]",
        -        //Parameters of commands
        -        5 => "(?<=\s)--?[0-9a-zA-Z\-]+(?=[\s=]|$)",
        -        //IPs
        -        6 => "([0-9]{1,3}\.){3}[0-9]{1,3}",
        -        //Tables
        -        7 => "(<(.*)>)"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'COMMENTS' => array(
        -            'DISALLOWED_BEFORE' => '$'
        -        ),
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?  "(?![\.\-a-zA-Z0-9_%\\/])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php
        deleted file mode 100644
        index 36a960a0..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php
        +++ /dev/null
        @@ -1,220 +0,0 @@
        - 'PHP (brief)',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    //Heredoc and Nowdoc syntax
        -    'COMMENT_REGEXP' => array(3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array("\'"),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC |  GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'include', 'require', 'include_once', 'require_once',
        -            'for', 'as', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', 'endif', 'switch', 'case', 'endswitch',
        -            'return', 'break'
        -            ),
        -        2 => array(
        -            'null', '__LINE__', '__FILE__',
        -            'false', '<?php',
        -            'true', 'var', 'default',
        -            'function', 'class', 'new', '&new', 'public', 'private', 'interface', 'extends',
        -            'const', 'self'
        -            ),
        -        3 => array(
        -            'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined',
        -            'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions',
        -            'extension_loaded', 'get_extension_funcs', 'debug_backtrace',
        -            'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv',
        -            'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime',
        -            'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar',
        -            'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown',
        -            'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate',
        -            'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode',
        -            'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat',
        -            'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from',
        -            'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport',
        -            'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '<%', '<%=', '%>', ''
        -            ),
        -        0 => array(
        -            '(', ')', '[', ']', '{', '}',
        -            '!', '@', '%', '&', '|', '/',
        -            '<', '>',
        -            '=', '-', '+', '*',
        -            '.', ':', ',', ';'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #990000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #666666; font-style: italic;',
        -            3 => 'color: #0000cc; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;',
        -            'HARD' => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #004000;',
        -            2 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            1 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => '',
        -            4 => '',
        -            5 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.php.net/{FNAMEL}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '->',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        //Variables
        -        0 => "[\\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ' '?>'
        -            ),
        -        1 => array(
        -            ' '?>'
        -            ),
        -        2 => array(
        -            '<%' => '%>'
        -            ),
        -        3 => array(
        -            ''
        -            ),
        -        4 => "/(?P<\\?(?>php\b)?)(?:".
        -            "(?>[^\"'?\\/<]+)|".
        -            "\\?(?!>)|".
        -            "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
        -            "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
        -            "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
        -            "\\/\\/(?>.*?$)|".
        -            "\\/(?=[^*\\/])|".
        -            "<(?!<<)|".
        -            "<<<(?P\w+)\s.*?\s\k".
        -            ")*(?P\\?>|\Z)/sm",
        -        5 => "/(?P<%)(?:".
        -            "(?>[^\"'%\\/<]+)|".
        -            "%(?!>)|".
        -            "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
        -            "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
        -            "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
        -            "\\/\\/(?>.*?$)|".
        -            "\\/(?=[^*\\/])|".
        -            "<(?!<<)|".
        -            "<<<(?P\w+)\s.*?\s\k".
        -            ")*(?P%>)/sm"
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php
        deleted file mode 100644
        index fa50ee88..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php
        +++ /dev/null
        @@ -1,1115 +0,0 @@
        - 'PHP',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Heredoc and Nowdoc syntax
        -        3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+?)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
        -        // phpdoc comments
        -        4 => '#/\*\*(?![\*\/]).*\*/#sU',
        -        // Advanced # handling
        -        2 => "/#.*?(?:(?=\?\>)|^)/smi"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{1,2}#i",
        -        //Octal Char Specs
        -        3 => "#\\\\[0-7]{1,3}#",
        -        //String Parsing of Variable Names
        -        4 => "#\\$[a-z0-9_]+(?:\\[[a-z0-9_]+\\]|->[a-z0-9_]+)?|(?:\\{\\$|\\$\\{)[a-z0-9_]+(?:\\[('?)[a-z0-9_]*\\1\\]|->[a-z0-9_]+)*\\}#i",
        -        //Experimental extension supporting cascaded {${$var}} syntax
        -        5 => "#\$[a-z0-9_]+(?:\[[a-z0-9_]+\]|->[a-z0-9_]+)?|(?:\{\$|\$\{)[a-z0-9_]+(?:\[('?)[a-z0-9_]*\\1\]|->[a-z0-9_]+)*\}|\{\$(?R)\}#i",
        -        //Format String support in ""-Strings
        -        6 => "#%(?:%|(?:\d+\\\\\\\$)?\\+?(?:\x20|0|'.)?-?(?:\d+|\\*)?(?:\.\d+)?[bcdefFosuxX])#"
        -        ),
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array("'", "\\"),
        -    'HARDCHAR' => "\\",
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'as','break','case','continue','default','do','else','elseif',
        -            'endfor','endforeach','endif','endswitch','endwhile','for',
        -            'foreach','if','include','include_once','require','require_once',
        -            'return','switch','throw','while', 'yield',
        -
        -            'echo','print'
        -            ),
        -        2 => array(
        -            '&new','</script>','<?php','<script language',
        -            'abstract','class','const','declare','extends','function','global',
        -            'implements', 'interface','namespace','new','private','protected',
        -            'public','self','trait','use','var'
        -            ),
        -        3 => array(
        -            'abs','acos','acosh','addcslashes','addslashes','aggregate',
        -            'aggregate_methods','aggregate_methods_by_list',
        -            'aggregate_methods_by_regexp','aggregate_properties',
        -            'aggregate_properties_by_list','aggregate_properties_by_regexp',
        -            'aggregation_info','apache_child_terminate','apache_get_modules',
        -            'apache_get_version','apache_getenv','apache_lookup_uri',
        -            'apache_note','apache_request_headers','apache_response_headers',
        -            'apache_setenv','array','array_change_key_case','array_chunk',
        -            'array_combine','array_count_values','array_diff',
        -            'array_diff_assoc','array_diff_key','array_diff_uassoc',
        -            'array_diff_ukey','array_fill','array_fill_keys','array_filter',
        -            'array_flip','array_intersect','array_intersect_assoc',
        -            'array_intersect_key','array_intersect_uassoc',
        -            'array_intersect_ukey','array_key_exists','array_keys','array_map',
        -            'array_merge','array_merge_recursive','array_multisort','array_pad',
        -            'array_pop','array_product','array_push','array_rand',
        -            'array_reduce','array_reverse','array_search','array_shift',
        -            'array_slice','array_splice','array_sum','array_udiff',
        -            'array_udiff_assoc','array_udiff_uassoc','array_uintersect',
        -            'array_uintersect_assoc','array_uintersect_uassoc','array_unique',
        -            'array_unshift','array_values','array_walk','array_walk_recursive',
        -            'arsort','asin','asinh','asort','assert','assert_options','atan',
        -            'atan2','atanh','base_convert','base64_decode','base64_encode',
        -            'basename','bcadd','bccomp','bcdiv','bcmod','bcmul',
        -            'bcompiler_load','bcompiler_load_exe','bcompiler_parse_class',
        -            'bcompiler_read','bcompiler_write_class','bcompiler_write_constant',
        -            'bcompiler_write_exe_footer','bcompiler_write_file',
        -            'bcompiler_write_footer','bcompiler_write_function',
        -            'bcompiler_write_functions_from_file','bcompiler_write_header',
        -            'bcompiler_write_included_filename','bcpow','bcpowmod','bcscale',
        -            'bcsqrt','bcsub','bin2hex','bindec','bindtextdomain',
        -            'bind_textdomain_codeset','bitset_empty','bitset_equal',
        -            'bitset_excl','bitset_fill','bitset_from_array','bitset_from_hash',
        -            'bitset_from_string','bitset_in','bitset_incl',
        -            'bitset_intersection','bitset_invert','bitset_is_empty',
        -            'bitset_subset','bitset_to_array','bitset_to_hash',
        -            'bitset_to_string','bitset_union','blenc_encrypt','bzclose',
        -            'bzcompress','bzdecompress','bzerrno','bzerror','bzerrstr',
        -            'bzflush','bzopen','bzread','bzwrite','cal_days_in_month',
        -            'cal_from_jd','cal_info','cal_to_jd','call_user_func',
        -            'call_user_func_array','call_user_method','call_user_method_array',
        -            'ceil','chdir','checkdate','checkdnsrr','chgrp','chmod','chop',
        -            'chown','chr','chunk_split','class_exists','class_implements',
        -            'class_parents','classkit_aggregate_methods',
        -            'classkit_doc_comments','classkit_import','classkit_method_add',
        -            'classkit_method_copy','classkit_method_redefine',
        -            'classkit_method_remove','classkit_method_rename','clearstatcache',
        -            'closedir','closelog','com_create_guid','com_event_sink',
        -            'com_get_active_object','com_load_typelib','com_message_pump',
        -            'com_print_typeinfo','compact','confirm_phpdoc_compiled',
        -            'connection_aborted','connection_status','constant',
        -            'convert_cyr_string','convert_uudecode','convert_uuencode','copy',
        -            'cos','cosh','count','count_chars','cpdf_add_annotation',
        -            'cpdf_add_outline','cpdf_arc','cpdf_begin_text','cpdf_circle',
        -            'cpdf_clip','cpdf_close','cpdf_closepath',
        -            'cpdf_closepath_fill_stroke','cpdf_closepath_stroke',
        -            'cpdf_continue_text','cpdf_curveto','cpdf_end_text','cpdf_fill',
        -            'cpdf_fill_stroke','cpdf_finalize','cpdf_finalize_page',
        -            'cpdf_global_set_document_limits','cpdf_import_jpeg','cpdf_lineto',
        -            'cpdf_moveto','cpdf_newpath','cpdf_open','cpdf_output_buffer',
        -            'cpdf_page_init','cpdf_rect','cpdf_restore','cpdf_rlineto',
        -            'cpdf_rmoveto','cpdf_rotate','cpdf_rotate_text','cpdf_save',
        -            'cpdf_save_to_file','cpdf_scale','cpdf_set_action_url',
        -            'cpdf_set_char_spacing','cpdf_set_creator','cpdf_set_current_page',
        -            'cpdf_set_font','cpdf_set_font_directories',
        -            'cpdf_set_font_map_file','cpdf_set_horiz_scaling',
        -            'cpdf_set_keywords','cpdf_set_leading','cpdf_set_page_animation',
        -            'cpdf_set_subject','cpdf_set_text_matrix','cpdf_set_text_pos',
        -            'cpdf_set_text_rendering','cpdf_set_text_rise','cpdf_set_title',
        -            'cpdf_set_viewer_preferences','cpdf_set_word_spacing',
        -            'cpdf_setdash','cpdf_setflat','cpdf_setgray','cpdf_setgray_fill',
        -            'cpdf_setgray_stroke','cpdf_setlinecap','cpdf_setlinejoin',
        -            'cpdf_setlinewidth','cpdf_setmiterlimit','cpdf_setrgbcolor',
        -            'cpdf_setrgbcolor_fill','cpdf_setrgbcolor_stroke','cpdf_show',
        -            'cpdf_show_xy','cpdf_stringwidth','cpdf_stroke','cpdf_text',
        -            'cpdf_translate','crack_check','crack_closedict',
        -            'crack_getlastmessage','crack_opendict','crc32','create_function',
        -            'crypt','ctype_alnum','ctype_alpha','ctype_cntrl','ctype_digit',
        -            'ctype_graph','ctype_lower','ctype_print','ctype_punct',
        -            'ctype_space','ctype_upper','ctype_xdigit','curl_close',
        -            'curl_copy_handle','curl_errno','curl_error','curl_exec',
        -            'curl_getinfo','curl_init','curl_multi_add_handle',
        -            'curl_multi_close','curl_multi_exec','curl_multi_getcontent',
        -            'curl_multi_info_read','curl_multi_init','curl_multi_remove_handle',
        -            'curl_multi_select','curl_setopt','curl_setopt_array',
        -            'curl_version','current','cvsclient_connect','cvsclient_log',
        -            'cvsclient_login','cvsclient_retrieve','date','date_create',
        -            'date_date_set','date_default_timezone_get',
        -            'date_default_timezone_set','date_format','date_isodate_set',
        -            'date_modify','date_offset_get','date_parse','date_sun_info',
        -            'date_sunrise','date_sunset','date_time_set','date_timezone_get',
        -            'date_timezone_set','db_id_list','dba_close','dba_delete',
        -            'dba_exists','dba_fetch','dba_firstkey','dba_handlers','dba_insert',
        -            'dba_key_split','dba_list','dba_nextkey','dba_open','dba_optimize',
        -            'dba_popen','dba_replace','dba_sync','dbase_add_record',
        -            'dbase_close','dbase_create','dbase_delete_record',
        -            'dbase_get_header_info','dbase_get_record',
        -            'dbase_get_record_with_names','dbase_numfields','dbase_numrecords',
        -            'dbase_open','dbase_pack','dbase_replace_record',
        -            'dbg_get_all_contexts','dbg_get_all_module_names',
        -            'dbg_get_all_source_lines','dbg_get_context_name',
        -            'dbg_get_module_name','dbg_get_profiler_results',
        -            'dbg_get_source_context','dblist','dbmclose','dbmdelete',
        -            'dbmexists','dbmfetch','dbmfirstkey','dbminsert','dbmnextkey',
        -            'dbmopen','dbmreplace','dbx_close','dbx_compare','dbx_connect',
        -            'dbx_error','dbx_escape_string','dbx_fetch_row','dbx_query',
        -            'dbx_sort','dcgettext','dcngettext','deaggregate','debug_backtrace',
        -            'debug_zval_dump','debugbreak','decbin','dechex','decoct','define',
        -            'defined','define_syslog_variables','deg2rad','dgettext','die',
        -            'dio_close','dio_open','dio_read','dio_seek','dio_stat','dio_write',
        -            'dir','dirname','disk_free_space','disk_total_space',
        -            'diskfreespace','dl','dngettext','docblock_token_name',
        -            'docblock_tokenize','dom_import_simplexml','domxml_add_root',
        -            'domxml_attributes','domxml_children','domxml_doc_add_root',
        -            'domxml_doc_document_element','domxml_doc_get_element_by_id',
        -            'domxml_doc_get_elements_by_tagname','domxml_doc_get_root',
        -            'domxml_doc_set_root','domxml_doc_validate','domxml_doc_xinclude',
        -            'domxml_dump_mem','domxml_dump_mem_file','domxml_dump_node',
        -            'domxml_dumpmem','domxml_elem_get_attribute',
        -            'domxml_elem_set_attribute','domxml_get_attribute','domxml_getattr',
        -            'domxml_html_dump_mem','domxml_new_child','domxml_new_doc',
        -            'domxml_new_xmldoc','domxml_node','domxml_node_add_namespace',
        -            'domxml_node_attributes','domxml_node_children',
        -            'domxml_node_get_content','domxml_node_has_attributes',
        -            'domxml_node_new_child','domxml_node_set_content',
        -            'domxml_node_set_namespace','domxml_node_unlink_node',
        -            'domxml_open_file','domxml_open_mem','domxml_parser',
        -            'domxml_parser_add_chunk','domxml_parser_cdata_section',
        -            'domxml_parser_characters','domxml_parser_comment',
        -            'domxml_parser_end','domxml_parser_end_document',
        -            'domxml_parser_end_element','domxml_parser_entity_reference',
        -            'domxml_parser_get_document','domxml_parser_namespace_decl',
        -            'domxml_parser_processing_instruction',
        -            'domxml_parser_start_document','domxml_parser_start_element',
        -            'domxml_root','domxml_set_attribute','domxml_setattr',
        -            'domxml_substitute_entities_default','domxml_unlink_node',
        -            'domxml_version','domxml_xmltree','doubleval','each','easter_date',
        -            'easter_days','empty','end','ereg','ereg_replace','eregi',
        -            'eregi_replace','error_get_last','error_log','error_reporting',
        -            'escapeshellarg','escapeshellcmd','eval','event_deschedule',
        -            'event_dispatch','event_free','event_handle_signal',
        -            'event_have_events','event_init','event_new','event_pending',
        -            'event_priority_set','event_schedule','event_set','event_timeout',
        -            'exec','exif_imagetype','exif_read_data','exif_tagname',
        -            'exif_thumbnail','exit','exp','explode','expm1','extension_loaded',
        -            'extract','ezmlm_hash','fbird_add_user','fbird_affected_rows',
        -            'fbird_backup','fbird_blob_add','fbird_blob_cancel',
        -            'fbird_blob_close','fbird_blob_create','fbird_blob_echo',
        -            'fbird_blob_get','fbird_blob_import','fbird_blob_info',
        -            'fbird_blob_open','fbird_close','fbird_commit','fbird_commit_ret',
        -            'fbird_connect','fbird_db_info','fbird_delete_user','fbird_drop_db',
        -            'fbird_errcode','fbird_errmsg','fbird_execute','fbird_fetch_assoc',
        -            'fbird_fetch_object','fbird_fetch_row','fbird_field_info',
        -            'fbird_free_event_handler','fbird_free_query','fbird_free_result',
        -            'fbird_gen_id','fbird_maintain_db','fbird_modify_user',
        -            'fbird_name_result','fbird_num_fields','fbird_num_params',
        -            'fbird_param_info','fbird_pconnect','fbird_prepare','fbird_query',
        -            'fbird_restore','fbird_rollback','fbird_rollback_ret',
        -            'fbird_server_info','fbird_service_attach','fbird_service_detach',
        -            'fbird_set_event_handler','fbird_trans','fbird_wait_event','fclose',
        -            'fdf_add_doc_javascript','fdf_add_template','fdf_close',
        -            'fdf_create','fdf_enum_values','fdf_errno','fdf_error','fdf_get_ap',
        -            'fdf_get_attachment','fdf_get_encoding','fdf_get_file',
        -            'fdf_get_flags','fdf_get_opt','fdf_get_status','fdf_get_value',
        -            'fdf_get_version','fdf_header','fdf_next_field_name','fdf_open',
        -            'fdf_open_string','fdf_remove_item','fdf_save','fdf_save_string',
        -            'fdf_set_ap','fdf_set_encoding','fdf_set_file','fdf_set_flags',
        -            'fdf_set_javascript_action','fdf_set_on_import_javascript',
        -            'fdf_set_opt','fdf_set_status','fdf_set_submit_form_action',
        -            'fdf_set_target_frame','fdf_set_value','fdf_set_version','feof',
        -            'fflush','fgetc','fgetcsv','fgets','fgetss','file','file_exists',
        -            'file_get_contents','file_put_contents','fileatime','filectime',
        -            'filegroup','fileinode','filemtime','fileowner','fileperms',
        -            'filepro','filepro_fieldcount','filepro_fieldname',
        -            'filepro_fieldtype','filepro_fieldwidth','filepro_retrieve',
        -            'filepro_rowcount','filesize','filetype','filter_has_var',
        -            'filter_id','filter_input','filter_input_array','filter_list',
        -            'filter_var','filter_var_array','finfo_buffer','finfo_close',
        -            'finfo_file','finfo_open','finfo_set_flags','floatval','flock',
        -            'floor','flush','fmod','fnmatch','fopen','fpassthru','fprintf',
        -            'fputcsv','fputs','fread','frenchtojd','fribidi_charset_info',
        -            'fribidi_get_charsets','fribidi_log2vis','fscanf','fseek',
        -            'fsockopen','fstat','ftell','ftok','ftp_alloc','ftp_cdup',
        -            'ftp_chdir','ftp_chmod','ftp_close','ftp_connect','ftp_delete',
        -            'ftp_exec','ftp_fget','ftp_fput','ftp_get','ftp_get_option',
        -            'ftp_login','ftp_mdtm','ftp_mkdir','ftp_nb_continue','ftp_nb_fget',
        -            'ftp_nb_fput','ftp_nb_get','ftp_nb_put','ftp_nlist','ftp_pasv',
        -            'ftp_put','ftp_pwd','ftp_quit','ftp_raw','ftp_rawlist','ftp_rename',
        -            'ftp_rmdir','ftp_set_option','ftp_site','ftp_size',
        -            'ftp_ssl_connect','ftp_systype','ftruncate','function_exists',
        -            'func_get_arg','func_get_args','func_num_args','fwrite','gd_info',
        -            'getallheaders','getcwd','getdate','getenv','gethostbyaddr',
        -            'gethostbyname','gethostbynamel','getimagesize','getlastmod',
        -            'getmxrr','getmygid','getmyinode','getmypid','getmyuid','getopt',
        -            'getprotobyname','getprotobynumber','getrandmax','getrusage',
        -            'getservbyname','getservbyport','gettext','gettimeofday','gettype',
        -            'get_browser','get_cfg_var','get_class','get_class_methods',
        -            'get_class_vars','get_current_user','get_declared_classes',
        -            'get_defined_constants','get_defined_functions','get_defined_vars',
        -            'get_extension_funcs','get_headers','get_html_translation_table',
        -            'get_included_files','get_include_path','get_loaded_extensions',
        -            'get_magic_quotes_gpc','get_magic_quotes_runtime','get_meta_tags',
        -            'get_object_vars','get_parent_class','get_required_files',
        -            'get_resource_type','glob','gmdate','gmmktime','gmp_abs','gmp_add',
        -            'gmp_and','gmp_clrbit','gmp_cmp','gmp_com','gmp_div','gmp_div_q',
        -            'gmp_div_qr','gmp_div_r','gmp_divexact','gmp_fact','gmp_gcd',
        -            'gmp_gcdext','gmp_hamdist','gmp_init','gmp_intval','gmp_invert',
        -            'gmp_jacobi','gmp_legendre','gmp_mod','gmp_mul','gmp_neg',
        -            'gmp_nextprime','gmp_or','gmp_perfect_square','gmp_popcount',
        -            'gmp_pow','gmp_powm','gmp_prob_prime','gmp_random','gmp_scan0',
        -            'gmp_scan1','gmp_setbit','gmp_sign','gmp_sqrt','gmp_sqrtrem',
        -            'gmp_strval','gmp_sub','gmp_xor','gmstrftime','gopher_parsedir',
        -            'gregoriantojd','gzclose','gzcompress','gzdeflate','gzencode',
        -            'gzeof','gzfile','gzgetc','gzgets','gzgetss','gzinflate','gzopen',
        -            'gzpassthru','gzputs','gzread','gzrewind','gzseek','gztell',
        -            'gzuncompress','gzwrite','hash','hash_algos','hash_file',
        -            'hash_final','hash_hmac','hash_hmac_file','hash_init','hash_update',
        -            'hash_update_file','hash_update_stream','header','headers_list',
        -            'headers_sent','hebrev','hebrevc','hexdec','highlight_file',
        -            'highlight_string','html_doc','html_doc_file','html_entity_decode',
        -            'htmlentities','htmlspecialchars','htmlspecialchars_decode',
        -            'http_build_cookie','http_build_query','http_build_str',
        -            'http_build_url','http_cache_etag','http_cache_last_modified',
        -            'http_chunked_decode','http_date','http_deflate','http_get',
        -            'http_get_request_body','http_get_request_body_stream',
        -            'http_get_request_headers','http_head','http_inflate',
        -            'http_match_etag','http_match_modified','http_match_request_header',
        -            'http_negotiate_charset','http_negotiate_content_type',
        -            'http_negotiate_language','http_parse_cookie','http_parse_headers',
        -            'http_parse_message','http_parse_params',
        -            'http_persistent_handles_clean','http_persistent_handles_count',
        -            'http_persistent_handles_ident','http_post_data','http_post_fields',
        -            'http_put_data','http_put_file','http_put_stream','http_redirect',
        -            'http_request','http_request_body_encode',
        -            'http_request_method_exists','http_request_method_name',
        -            'http_request_method_register','http_request_method_unregister',
        -            'http_send_content_disposition','http_send_content_type',
        -            'http_send_data','http_send_file','http_send_last_modified',
        -            'http_send_status','http_send_stream','http_support',
        -            'http_throttle','hypot','i18n_convert','i18n_discover_encoding',
        -            'i18n_http_input','i18n_http_output','i18n_internal_encoding',
        -            'i18n_ja_jp_hantozen','i18n_mime_header_decode',
        -            'i18n_mime_header_encode','ibase_add_user','ibase_affected_rows',
        -            'ibase_backup','ibase_blob_add','ibase_blob_cancel',
        -            'ibase_blob_close','ibase_blob_create','ibase_blob_echo',
        -            'ibase_blob_get','ibase_blob_import','ibase_blob_info',
        -            'ibase_blob_open','ibase_close','ibase_commit','ibase_commit_ret',
        -            'ibase_connect','ibase_db_info','ibase_delete_user','ibase_drop_db',
        -            'ibase_errcode','ibase_errmsg','ibase_execute','ibase_fetch_assoc',
        -            'ibase_fetch_object','ibase_fetch_row','ibase_field_info',
        -            'ibase_free_event_handler','ibase_free_query','ibase_free_result',
        -            'ibase_gen_id','ibase_maintain_db','ibase_modify_user',
        -            'ibase_name_result','ibase_num_fields','ibase_num_params',
        -            'ibase_param_info','ibase_pconnect','ibase_prepare','ibase_query',
        -            'ibase_restore','ibase_rollback','ibase_rollback_ret',
        -            'ibase_server_info','ibase_service_attach','ibase_service_detach',
        -            'ibase_set_event_handler','ibase_trans','ibase_wait_event','iconv',
        -            'iconv_get_encoding','iconv_mime_decode',
        -            'iconv_mime_decode_headers','iconv_mime_encode',
        -            'iconv_set_encoding','iconv_strlen','iconv_strpos','iconv_strrpos',
        -            'iconv_substr','id3_get_frame_long_name','id3_get_frame_short_name',
        -            'id3_get_genre_id','id3_get_genre_list','id3_get_genre_name',
        -            'id3_get_tag','id3_get_version','id3_remove_tag','id3_set_tag',
        -            'idate','ignore_user_abort','image_type_to_extension',
        -            'image_type_to_mime_type','image2wbmp','imagealphablending',
        -            'imageantialias','imagearc','imagechar','imagecharup',
        -            'imagecolorallocate','imagecolorallocatealpha','imagecolorat',
        -            'imagecolorclosest','imagecolorclosestalpha','imagecolordeallocate',
        -            'imagecolorexact','imagecolorexactalpha','imagecolormatch',
        -            'imagecolorresolve','imagecolorresolvealpha','imagecolorset',
        -            'imagecolorsforindex','imagecolorstotal','imagecolortransparent',
        -            'imageconvolution','imagecopy','imagecopymerge',
        -            'imagecopymergegray','imagecopyresampled','imagecopyresized',
        -            'imagecreate','imagecreatefromgd','imagecreatefromgd2',
        -            'imagecreatefromgd2part','imagecreatefromgif','imagecreatefromjpeg',
        -            'imagecreatefrompng','imagecreatefromstring','imagecreatefromwbmp',
        -            'imagecreatefromxbm','imagecreatetruecolor','imagedashedline',
        -            'imagedestroy','imageellipse','imagefill','imagefilledarc',
        -            'imagefilledellipse','imagefilledpolygon','imagefilledrectangle',
        -            'imagefilltoborder','imagefilter','imagefontheight',
        -            'imagefontwidth','imageftbbox','imagefttext','imagegammacorrect',
        -            'imagegd','imagegd2','imagegif','imagegrabscreen','imagegrabwindow',
        -            'imageinterlace','imageistruecolor','imagejpeg','imagelayereffect',
        -            'imageline','imageloadfont','imagepalettecopy','imagepng',
        -            'imagepolygon','imagepsbbox','imagepsencodefont',
        -            'imagepsextendfont','imagepsfreefont','imagepsloadfont',
        -            'imagepsslantfont','imagepstext','imagerectangle','imagerotate',
        -            'imagesavealpha','imagesetbrush','imagesetpixel','imagesetstyle',
        -            'imagesetthickness','imagesettile','imagestring','imagestringup',
        -            'imagesx','imagesy','imagetruecolortopalette','imagettfbbox',
        -            'imagettftext','imagetypes','imagewbmp','imagexbm','imap_8bit',
        -            'imap_alerts','imap_append','imap_base64','imap_binary','imap_body',
        -            'imap_bodystruct','imap_check','imap_clearflag_full','imap_close',
        -            'imap_create','imap_createmailbox','imap_delete',
        -            'imap_deletemailbox','imap_errors','imap_expunge',
        -            'imap_fetch_overview','imap_fetchbody','imap_fetchheader',
        -            'imap_fetchstructure','imap_fetchtext','imap_get_quota',
        -            'imap_get_quotaroot','imap_getacl','imap_getmailboxes',
        -            'imap_getsubscribed','imap_header','imap_headerinfo','imap_headers',
        -            'imap_last_error','imap_list','imap_listmailbox',
        -            'imap_listsubscribed','imap_lsub','imap_mail','imap_mail_compose',
        -            'imap_mail_copy','imap_mail_move','imap_mailboxmsginfo',
        -            'imap_mime_header_decode','imap_msgno','imap_num_msg',
        -            'imap_num_recent','imap_open','imap_ping','imap_qprint',
        -            'imap_rename','imap_renamemailbox','imap_reopen',
        -            'imap_rfc822_parse_adrlist','imap_rfc822_parse_headers',
        -            'imap_rfc822_write_address','imap_savebody','imap_scan',
        -            'imap_scanmailbox','imap_search','imap_set_quota','imap_setacl',
        -            'imap_setflag_full','imap_sort','imap_status','imap_subscribe',
        -            'imap_thread','imap_timeout','imap_uid','imap_undelete',
        -            'imap_unsubscribe','imap_utf7_decode','imap_utf7_encode',
        -            'imap_utf8','implode','import_request_variables','in_array',
        -            'ini_alter','ini_get','ini_get_all','ini_restore','ini_set',
        -            'intval','ip2long','iptcembed','iptcparse','isset','is_a',
        -            'is_array','is_bool','is_callable','is_dir','is_double',
        -            'is_executable','is_file','is_finite','is_float','is_infinite',
        -            'is_int','is_integer','is_link','is_long','is_nan','is_null',
        -            'is_numeric','is_object','is_readable','is_real','is_resource',
        -            'is_scalar','is_soap_fault','is_string','is_subclass_of',
        -            'is_uploaded_file','is_writable','is_writeable','iterator_apply',
        -            'iterator_count','iterator_to_array','java_last_exception_clear',
        -            'java_last_exception_get','jddayofweek','jdmonthname','jdtofrench',
        -            'jdtogregorian','jdtojewish','jdtojulian','jdtounix','jewishtojd',
        -            'join','jpeg2wbmp','json_decode','json_encode','juliantojd','key',
        -            'key_exists','krsort','ksort','lcg_value','ldap_add','ldap_bind',
        -            'ldap_close','ldap_compare','ldap_connect','ldap_count_entries',
        -            'ldap_delete','ldap_dn2ufn','ldap_err2str','ldap_errno',
        -            'ldap_error','ldap_explode_dn','ldap_first_attribute',
        -            'ldap_first_entry','ldap_first_reference','ldap_free_result',
        -            'ldap_get_attributes','ldap_get_dn','ldap_get_entries',
        -            'ldap_get_option','ldap_get_values','ldap_get_values_len',
        -            'ldap_list','ldap_mod_add','ldap_mod_del','ldap_mod_replace',
        -            'ldap_modify','ldap_next_attribute','ldap_next_entry',
        -            'ldap_next_reference','ldap_parse_reference','ldap_parse_result',
        -            'ldap_read','ldap_rename','ldap_search','ldap_set_option',
        -            'ldap_sort','ldap_start_tls','ldap_unbind','levenshtein',
        -            'libxml_clear_errors','libxml_get_errors','libxml_get_last_error',
        -            'libxml_set_streams_context','libxml_use_internal_errors','link',
        -            'linkinfo','list','localeconv','localtime','log','log1p','log10',
        -            'long2ip','lstat','ltrim','lzf_compress','lzf_decompress',
        -            'lzf_optimized_for','magic_quotes_runtime','mail','max','mbereg',
        -            'mberegi','mberegi_replace','mbereg_match','mbereg_replace',
        -            'mbereg_search','mbereg_search_getpos','mbereg_search_getregs',
        -            'mbereg_search_init','mbereg_search_pos','mbereg_search_regs',
        -            'mbereg_search_setpos','mbregex_encoding','mbsplit','mbstrcut',
        -            'mbstrlen','mbstrpos','mbstrrpos','mbsubstr','mb_check_encoding',
        -            'mb_convert_case','mb_convert_encoding','mb_convert_kana',
        -            'mb_convert_variables','mb_decode_mimeheader',
        -            'mb_decode_numericentity','mb_detect_encoding','mb_detect_order',
        -            'mb_encode_mimeheader','mb_encode_numericentity','mb_ereg',
        -            'mb_eregi','mb_eregi_replace','mb_ereg_match','mb_ereg_replace',
        -            'mb_ereg_search','mb_ereg_search_getpos','mb_ereg_search_getregs',
        -            'mb_ereg_search_init','mb_ereg_search_pos','mb_ereg_search_regs',
        -            'mb_ereg_search_setpos','mb_get_info','mb_http_input',
        -            'mb_http_output','mb_internal_encoding','mb_language',
        -            'mb_list_encodings','mb_output_handler','mb_parse_str',
        -            'mb_preferred_mime_name','mb_regex_encoding','mb_regex_set_options',
        -            'mb_send_mail','mb_split','mb_strcut','mb_strimwidth','mb_stripos',
        -            'mb_stristr','mb_strlen','mb_strpos','mb_strrchr','mb_strrichr',
        -            'mb_strripos','mb_strrpos','mb_strstr','mb_strtolower',
        -            'mb_strtoupper','mb_strwidth','mb_substitute_character','mb_substr',
        -            'mb_substr_count','mcrypt_cbc','mcrypt_cfb','mcrypt_create_iv',
        -            'mcrypt_decrypt','mcrypt_ecb','mcrypt_enc_get_algorithms_name',
        -            'mcrypt_enc_get_block_size','mcrypt_enc_get_iv_size',
        -            'mcrypt_enc_get_key_size','mcrypt_enc_get_modes_name',
        -            'mcrypt_enc_get_supported_key_sizes',
        -            'mcrypt_enc_is_block_algorithm',
        -            'mcrypt_enc_is_block_algorithm_mode','mcrypt_enc_is_block_mode',
        -            'mcrypt_enc_self_test','mcrypt_encrypt','mcrypt_generic',
        -            'mcrypt_generic_deinit','mcrypt_generic_end','mcrypt_generic_init',
        -            'mcrypt_get_block_size','mcrypt_get_cipher_name',
        -            'mcrypt_get_iv_size','mcrypt_get_key_size','mcrypt_list_algorithms',
        -            'mcrypt_list_modes','mcrypt_module_close',
        -            'mcrypt_module_get_algo_block_size',
        -            'mcrypt_module_get_algo_key_size',
        -            'mcrypt_module_get_supported_key_sizes',
        -            'mcrypt_module_is_block_algorithm',
        -            'mcrypt_module_is_block_algorithm_mode',
        -            'mcrypt_module_is_block_mode','mcrypt_module_open',
        -            'mcrypt_module_self_test','mcrypt_ofb','md5','md5_file',
        -            'mdecrypt_generic','memcache_add','memcache_add_server',
        -            'memcache_close','memcache_connect','memcache_debug',
        -            'memcache_decrement','memcache_delete','memcache_flush',
        -            'memcache_get','memcache_get_extended_stats',
        -            'memcache_get_server_status','memcache_get_stats',
        -            'memcache_get_version','memcache_increment','memcache_pconnect',
        -            'memcache_replace','memcache_set','memcache_set_compress_threshold',
        -            'memcache_set_server_params','memory_get_peak_usage',
        -            'memory_get_usage','metaphone','mhash','mhash_count',
        -            'mhash_get_block_size','mhash_get_hash_name','mhash_keygen_s2k',
        -            'method_exists','microtime','mime_content_type','min',
        -            'ming_keypress','ming_setcubicthreshold','ming_setscale',
        -            'ming_useconstants','ming_useswfversion','mkdir','mktime',
        -            'money_format','move_uploaded_file','msql','msql_affected_rows',
        -            'msql_close','msql_connect','msql_create_db','msql_createdb',
        -            'msql_data_seek','msql_db_query','msql_dbname','msql_drop_db',
        -            'msql_dropdb','msql_error','msql_fetch_array','msql_fetch_field',
        -            'msql_fetch_object','msql_fetch_row','msql_field_flags',
        -            'msql_field_len','msql_field_name','msql_field_seek',
        -            'msql_field_table','msql_field_type','msql_fieldflags',
        -            'msql_fieldlen','msql_fieldname','msql_fieldtable','msql_fieldtype',
        -            'msql_free_result','msql_freeresult','msql_list_dbs',
        -            'msql_list_fields','msql_list_tables','msql_listdbs',
        -            'msql_listfields','msql_listtables','msql_num_fields',
        -            'msql_num_rows','msql_numfields','msql_numrows','msql_pconnect',
        -            'msql_query','msql_regcase','msql_result','msql_select_db',
        -            'msql_selectdb','msql_tablename','mssql_bind','mssql_close',
        -            'mssql_connect','mssql_data_seek','mssql_execute',
        -            'mssql_fetch_array','mssql_fetch_assoc','mssql_fetch_batch',
        -            'mssql_fetch_field','mssql_fetch_object','mssql_fetch_row',
        -            'mssql_field_length','mssql_field_name','mssql_field_seek',
        -            'mssql_field_type','mssql_free_result','mssql_free_statement',
        -            'mssql_get_last_message','mssql_guid_string','mssql_init',
        -            'mssql_min_error_severity','mssql_min_message_severity',
        -            'mssql_next_result','mssql_num_fields','mssql_num_rows',
        -            'mssql_pconnect','mssql_query','mssql_result','mssql_rows_affected',
        -            'mssql_select_db','mt_getrandmax','mt_rand','mt_srand','mysql',
        -            'mysql_affected_rows','mysql_client_encoding','mysql_close',
        -            'mysql_connect','mysql_createdb','mysql_create_db',
        -            'mysql_data_seek','mysql_dbname','mysql_db_name','mysql_db_query',
        -            'mysql_dropdb','mysql_drop_db','mysql_errno','mysql_error',
        -            'mysql_escape_string','mysql_fetch_array','mysql_fetch_assoc',
        -            'mysql_fetch_field','mysql_fetch_lengths','mysql_fetch_object',
        -            'mysql_fetch_row','mysql_fieldflags','mysql_fieldlen',
        -            'mysql_fieldname','mysql_fieldtable','mysql_fieldtype',
        -            'mysql_field_flags','mysql_field_len','mysql_field_name',
        -            'mysql_field_seek','mysql_field_table','mysql_field_type',
        -            'mysql_freeresult','mysql_free_result','mysql_get_client_info',
        -            'mysql_get_host_info','mysql_get_proto_info',
        -            'mysql_get_server_info','mysql_info','mysql_insert_id',
        -            'mysql_listdbs','mysql_listfields','mysql_listtables',
        -            'mysql_list_dbs','mysql_list_fields','mysql_list_processes',
        -            'mysql_list_tables','mysql_numfields','mysql_numrows',
        -            'mysql_num_fields','mysql_num_rows','mysql_pconnect','mysql_ping',
        -            'mysql_query','mysql_real_escape_string','mysql_result',
        -            'mysql_selectdb','mysql_select_db','mysql_set_charset','mysql_stat',
        -            'mysql_tablename','mysql_table_name','mysql_thread_id',
        -            'mysql_unbuffered_query','mysqli_affected_rows','mysqli_autocommit',
        -            'mysqli_bind_param','mysqli_bind_result','mysqli_change_user',
        -            'mysqli_character_set_name','mysqli_client_encoding','mysqli_close',
        -            'mysqli_commit','mysqli_connect','mysqli_connect_errno',
        -            'mysqli_connect_error','mysqli_data_seek','mysqli_debug',
        -            'mysqli_disable_reads_from_master','mysqli_disable_rpl_parse',
        -            'mysqli_dump_debug_info','mysqli_embedded_server_end',
        -            'mysqli_embedded_server_start','mysqli_enable_reads_from_master',
        -            'mysqli_enable_rpl_parse','mysqli_errno','mysqli_error',
        -            'mysqli_escape_string','mysqli_execute','mysqli_fetch',
        -            'mysqli_fetch_array','mysqli_fetch_assoc','mysqli_fetch_field',
        -            'mysqli_fetch_field_direct','mysqli_fetch_fields',
        -            'mysqli_fetch_lengths','mysqli_fetch_object','mysqli_fetch_row',
        -            'mysqli_field_count','mysqli_field_seek','mysqli_field_tell',
        -            'mysqli_free_result','mysqli_get_charset','mysqli_get_client_info',
        -            'mysqli_get_client_version','mysqli_get_host_info',
        -            'mysqli_get_metadata','mysqli_get_proto_info',
        -            'mysqli_get_server_info','mysqli_get_server_version',
        -            'mysqli_get_warnings','mysqli_info','mysqli_init',
        -            'mysqli_insert_id','mysqli_kill','mysqli_master_query',
        -            'mysqli_more_results','mysqli_multi_query','mysqli_next_result',
        -            'mysqli_num_fields','mysqli_num_rows','mysqli_options',
        -            'mysqli_param_count','mysqli_ping','mysqli_prepare','mysqli_query',
        -            'mysqli_real_connect','mysqli_real_escape_string',
        -            'mysqli_real_query','mysqli_report','mysqli_rollback',
        -            'mysqli_rpl_parse_enabled','mysqli_rpl_probe',
        -            'mysqli_rpl_query_type','mysqli_select_db','mysqli_send_long_data',
        -            'mysqli_send_query','mysqli_set_charset',
        -            'mysqli_set_local_infile_default','mysqli_set_local_infile_handler',
        -            'mysqli_set_opt','mysqli_slave_query','mysqli_sqlstate',
        -            'mysqli_ssl_set','mysqli_stat','mysqli_stmt_affected_rows',
        -            'mysqli_stmt_attr_get','mysqli_stmt_attr_set',
        -            'mysqli_stmt_bind_param','mysqli_stmt_bind_result',
        -            'mysqli_stmt_close','mysqli_stmt_data_seek','mysqli_stmt_errno',
        -            'mysqli_stmt_error','mysqli_stmt_execute','mysqli_stmt_fetch',
        -            'mysqli_stmt_field_count','mysqli_stmt_free_result',
        -            'mysqli_stmt_get_warnings','mysqli_stmt_init',
        -            'mysqli_stmt_insert_id','mysqli_stmt_num_rows',
        -            'mysqli_stmt_param_count','mysqli_stmt_prepare','mysqli_stmt_reset',
        -            'mysqli_stmt_result_metadata','mysqli_stmt_send_long_data',
        -            'mysqli_stmt_sqlstate','mysqli_stmt_store_result',
        -            'mysqli_store_result','mysqli_thread_id','mysqli_thread_safe',
        -            'mysqli_use_result','mysqli_warning_count','natcasesort','natsort',
        -            'new_xmldoc','next','ngettext','nl2br','nl_langinfo',
        -            'ntuser_getdomaincontroller','ntuser_getusergroups',
        -            'ntuser_getuserinfo','ntuser_getuserlist','number_format',
        -            'ob_clean','ob_deflatehandler','ob_end_clean','ob_end_flush',
        -            'ob_etaghandler','ob_flush','ob_get_clean','ob_get_contents',
        -            'ob_get_flush','ob_get_length','ob_get_level','ob_get_status',
        -            'ob_gzhandler','ob_iconv_handler','ob_implicit_flush',
        -            'ob_inflatehandler','ob_list_handlers','ob_start','ob_tidyhandler',
        -            'octdec','odbc_autocommit','odbc_binmode','odbc_close',
        -            'odbc_close_all','odbc_columnprivileges','odbc_columns',
        -            'odbc_commit','odbc_connect','odbc_cursor','odbc_data_source',
        -            'odbc_do','odbc_error','odbc_errormsg','odbc_exec','odbc_execute',
        -            'odbc_fetch_array','odbc_fetch_into','odbc_fetch_object',
        -            'odbc_fetch_row','odbc_field_len','odbc_field_name',
        -            'odbc_field_num','odbc_field_precision','odbc_field_scale',
        -            'odbc_field_type','odbc_foreignkeys','odbc_free_result',
        -            'odbc_gettypeinfo','odbc_longreadlen','odbc_next_result',
        -            'odbc_num_fields','odbc_num_rows','odbc_pconnect','odbc_prepare',
        -            'odbc_primarykeys','odbc_procedurecolumns','odbc_procedures',
        -            'odbc_result','odbc_result_all','odbc_rollback','odbc_setoption',
        -            'odbc_specialcolumns','odbc_statistics','odbc_tableprivileges',
        -            'odbc_tables','opendir','openlog','openssl_csr_export',
        -            'openssl_csr_export_to_file','openssl_csr_get_public_key',
        -            'openssl_csr_get_subject','openssl_csr_new','openssl_csr_sign',
        -            'openssl_error_string','openssl_free_key','openssl_get_privatekey',
        -            'openssl_get_publickey','openssl_open','openssl_pkcs12_export',
        -            'openssl_pkcs12_export_to_file','openssl_pkcs12_read',
        -            'openssl_pkcs7_decrypt','openssl_pkcs7_encrypt',
        -            'openssl_pkcs7_sign','openssl_pkcs7_verify','openssl_pkey_export',
        -            'openssl_pkey_export_to_file','openssl_pkey_free',
        -            'openssl_pkey_get_details','openssl_pkey_get_private',
        -            'openssl_pkey_get_public','openssl_pkey_new',
        -            'openssl_private_decrypt','openssl_private_encrypt',
        -            'openssl_public_decrypt','openssl_public_encrypt','openssl_seal',
        -            'openssl_sign','openssl_verify','openssl_x509_checkpurpose',
        -            'openssl_x509_check_private_key','openssl_x509_export',
        -            'openssl_x509_export_to_file','openssl_x509_free',
        -            'openssl_x509_parse','openssl_x509_read','ord',
        -            'output_add_rewrite_var','output_reset_rewrite_vars','overload',
        -            'outputdebugstring','pack','parse_ini_file','parse_str','parse_url',
        -            'parsekit_compile_file','parsekit_compile_string',
        -            'parsekit_func_arginfo','parsekit_opcode_flags',
        -            'parsekit_opcode_name','passthru','pathinfo','pclose',
        -            'pdf_add_bookmark','pdf_add_launchlink','pdf_add_locallink',
        -            'pdf_add_nameddest','pdf_add_note','pdf_add_pdflink',
        -            'pdf_add_thumbnail','pdf_add_weblink','pdf_arc','pdf_arcn',
        -            'pdf_attach_file','pdf_begin_font','pdf_begin_glyph',
        -            'pdf_begin_page','pdf_begin_pattern','pdf_begin_template',
        -            'pdf_circle','pdf_clip','pdf_close','pdf_close_image',
        -            'pdf_close_pdi','pdf_close_pdi_page','pdf_closepath',
        -            'pdf_closepath_fill_stroke','pdf_closepath_stroke','pdf_concat',
        -            'pdf_continue_text','pdf_create_gstate','pdf_create_pvf',
        -            'pdf_curveto','pdf_delete','pdf_delete_pvf','pdf_encoding_set_char',
        -            'pdf_end_font','pdf_end_glyph','pdf_end_page','pdf_end_pattern',
        -            'pdf_end_template','pdf_endpath','pdf_fill','pdf_fill_imageblock',
        -            'pdf_fill_pdfblock','pdf_fill_stroke','pdf_fill_textblock',
        -            'pdf_findfont','pdf_fit_image','pdf_fit_pdi_page',
        -            'pdf_fit_textline','pdf_get_apiname','pdf_get_buffer',
        -            'pdf_get_errmsg','pdf_get_errnum','pdf_get_parameter',
        -            'pdf_get_pdi_parameter','pdf_get_pdi_value','pdf_get_value',
        -            'pdf_initgraphics','pdf_lineto','pdf_load_font',
        -            'pdf_load_iccprofile','pdf_load_image','pdf_makespotcolor',
        -            'pdf_moveto','pdf_new','pdf_open_ccitt','pdf_open_file',
        -            'pdf_open_image','pdf_open_image_file','pdf_open_pdi',
        -            'pdf_open_pdi_page','pdf_place_image','pdf_place_pdi_page',
        -            'pdf_process_pdi','pdf_rect','pdf_restore','pdf_rotate','pdf_save',
        -            'pdf_scale','pdf_set_border_color','pdf_set_border_dash',
        -            'pdf_set_border_style','pdf_set_gstate','pdf_set_info',
        -            'pdf_set_parameter','pdf_set_text_pos','pdf_set_value',
        -            'pdf_setcolor','pdf_setdash','pdf_setdashpattern','pdf_setflat',
        -            'pdf_setfont','pdf_setlinecap','pdf_setlinejoin','pdf_setlinewidth',
        -            'pdf_setmatrix','pdf_setmiterlimit','pdf_setpolydash','pdf_shading',
        -            'pdf_shading_pattern','pdf_shfill','pdf_show','pdf_show_boxed',
        -            'pdf_show_xy','pdf_skew','pdf_stringwidth','pdf_stroke',
        -            'pdf_translate','pdo_drivers','pfsockopen','pg_affected_rows',
        -            'pg_cancel_query','pg_clientencoding','pg_client_encoding',
        -            'pg_close','pg_cmdtuples','pg_connect','pg_connection_busy',
        -            'pg_connection_reset','pg_connection_status','pg_convert',
        -            'pg_copy_from','pg_copy_to','pg_dbname','pg_delete','pg_end_copy',
        -            'pg_errormessage','pg_escape_bytea','pg_escape_string','pg_exec',
        -            'pg_execute','pg_fetch_all','pg_fetch_all_columns','pg_fetch_array',
        -            'pg_fetch_assoc','pg_fetch_object','pg_fetch_result','pg_fetch_row',
        -            'pg_fieldisnull','pg_fieldname','pg_fieldnum','pg_fieldprtlen',
        -            'pg_fieldsize','pg_fieldtype','pg_field_is_null','pg_field_name',
        -            'pg_field_num','pg_field_prtlen','pg_field_size','pg_field_table',
        -            'pg_field_type','pg_field_type_oid','pg_free_result',
        -            'pg_freeresult','pg_get_notify','pg_get_pid','pg_get_result',
        -            'pg_getlastoid','pg_host','pg_insert','pg_last_error',
        -            'pg_last_notice','pg_last_oid','pg_loclose','pg_locreate',
        -            'pg_loexport','pg_loimport','pg_loopen','pg_loread','pg_loreadall',
        -            'pg_lounlink','pg_lowrite','pg_lo_close','pg_lo_create',
        -            'pg_lo_export','pg_lo_import','pg_lo_open','pg_lo_read',
        -            'pg_lo_read_all','pg_lo_seek','pg_lo_tell','pg_lo_unlink',
        -            'pg_lo_write','pg_meta_data','pg_numfields','pg_numrows',
        -            'pg_num_fields','pg_num_rows','pg_options','pg_parameter_status',
        -            'pg_pconnect','pg_ping','pg_port','pg_prepare','pg_put_line',
        -            'pg_query','pg_query_params','pg_result','pg_result_error',
        -            'pg_result_error_field','pg_result_seek','pg_result_status',
        -            'pg_select','pg_send_execute','pg_send_prepare','pg_send_query',
        -            'pg_send_query_params','pg_set_client_encoding',
        -            'pg_set_error_verbosity','pg_setclientencoding','pg_trace',
        -            'pg_transaction_status','pg_tty','pg_unescape_bytea','pg_untrace',
        -            'pg_update','pg_version','php_egg_logo_guid','php_ini_loaded_file',
        -            'php_ini_scanned_files','php_logo_guid','php_real_logo_guid',
        -            'php_sapi_name','php_strip_whitespace','php_uname','phpcredits',
        -            'phpdoc_xml_from_string','phpinfo','phpversion','pi','png2wbmp',
        -            'pop3_close','pop3_delete_message','pop3_get_account_size',
        -            'pop3_get_message','pop3_get_message_count',
        -            'pop3_get_message_header','pop3_get_message_ids',
        -            'pop3_get_message_size','pop3_get_message_sizes','pop3_open',
        -            'pop3_undelete','popen','pos','posix_ctermid','posix_errno',
        -            'posix_getcwd','posix_getegid','posix_geteuid','posix_getgid',
        -            'posix_getgrgid','posix_getgrnam','posix_getgroups',
        -            'posix_getlogin','posix_getpgid','posix_getpgrp','posix_getpid',
        -            'posix_getppid','posix_getpwnam','posix_getpwuid','posix_getrlimit',
        -            'posix_getsid','posix_getuid','posix_get_last_error','posix_isatty',
        -            'posix_kill','posix_mkfifo','posix_setegid','posix_seteuid',
        -            'posix_setgid','posix_setpgid','posix_setsid','posix_setuid',
        -            'posix_strerror','posix_times','posix_ttyname','posix_uname','pow',
        -            'preg_grep','preg_last_error','preg_match','preg_match_all',
        -            'preg_quote','preg_replace','preg_replace_callback','preg_split',
        -            'prev','print_r','printf','proc_close','proc_get_status',
        -            'proc_open','proc_terminate','putenv','quoted_printable_decode',
        -            'quotemeta','rad2deg','radius_acct_open','radius_add_server',
        -            'radius_auth_open','radius_close','radius_config',
        -            'radius_create_request','radius_cvt_addr','radius_cvt_int',
        -            'radius_cvt_string','radius_demangle','radius_demangle_mppe_key',
        -            'radius_get_attr','radius_get_vendor_attr','radius_put_addr',
        -            'radius_put_attr','radius_put_int','radius_put_string',
        -            'radius_put_vendor_addr','radius_put_vendor_attr',
        -            'radius_put_vendor_int','radius_put_vendor_string',
        -            'radius_request_authenticator','radius_send_request',
        -            'radius_server_secret','radius_strerror','rand','range',
        -            'rawurldecode','rawurlencode','read_exif_data','readdir','readfile',
        -            'readgzfile','readlink','realpath','reg_close_key','reg_create_key',
        -            'reg_enum_key','reg_enum_value','reg_get_value','reg_open_key',
        -            'reg_set_value','register_shutdown_function',
        -            'register_tick_function','rename','res_close','res_get','res_list',
        -            'res_list_type','res_open','res_set','reset',
        -            'restore_error_handler','restore_include_path','rewind','rewinddir',
        -            'rmdir','round','rsort','rtrim','runkit_class_adopt',
        -            'runkit_class_emancipate','runkit_constant_add',
        -            'runkit_constant_redefine','runkit_constant_remove',
        -            'runkit_default_property_add','runkit_function_add',
        -            'runkit_function_copy','runkit_function_redefine',
        -            'runkit_function_remove','runkit_function_rename','runkit_import',
        -            'runkit_lint','runkit_lint_file','runkit_method_add',
        -            'runkit_method_copy','runkit_method_redefine',
        -            'runkit_method_remove','runkit_method_rename','runkit_object_id',
        -            'runkit_return_value_used','runkit_sandbox_output_handler',
        -            'runkit_superglobals','runkit_zval_inspect','scandir','sem_acquire',
        -            'sem_get','sem_release','sem_remove','serialize',
        -            'session_cache_expire','session_cache_limiter','session_commit',
        -            'session_decode','session_destroy','session_encode',
        -            'session_get_cookie_params','session_id','session_is_registered',
        -            'session_module_name','session_name','session_regenerate_id',
        -            'session_register','session_save_path','session_set_cookie_params',
        -            'session_set_save_handler','session_start','session_unregister',
        -            'session_unset','session_write_close','set_content',
        -            'set_error_handler','set_file_buffer','set_include_path',
        -            'set_magic_quotes_runtime','set_socket_blocking','set_time_limit',
        -            'setcookie','setlocale','setrawcookie','settype','sha1','sha1_file',
        -            'shell_exec','shmop_close','shmop_delete','shmop_open','shmop_read',
        -            'shmop_size','shmop_write','shm_attach','shm_detach','shm_get_var',
        -            'shm_put_var','shm_remove','shm_remove_var','show_source','shuffle',
        -            'similar_text','simplexml_import_dom','simplexml_load_file',
        -            'simplexml_load_string','sin','sinh','sizeof','sleep','smtp_close',
        -            'smtp_cmd_data','smtp_cmd_mail','smtp_cmd_rcpt','smtp_connect',
        -            'snmp_get_quick_print','snmp_get_valueretrieval','snmp_read_mib',
        -            'snmp_set_quick_print','snmp_set_valueretrieval','snmp2_get',
        -            'snmp2_getnext','snmp2_real_walk','snmp2_set','snmp2_walk',
        -            'snmp3_get','snmp3_getnext','snmp3_real_walk','snmp3_set',
        -            'snmp3_walk','snmpget','snmpgetnext','snmprealwalk','snmpset',
        -            'snmpwalk','snmpwalkoid','socket_accept','socket_bind',
        -            'socket_clear_error','socket_close','socket_connect',
        -            'socket_create','socket_create_listen','socket_create_pair',
        -            'socket_getopt','socket_getpeername','socket_getsockname',
        -            'socket_get_option','socket_get_status','socket_iovec_add',
        -            'socket_iovec_alloc','socket_iovec_delete','socket_iovec_fetch',
        -            'socket_iovec_free','socket_iovec_set','socket_last_error',
        -            'socket_listen','socket_read','socket_readv','socket_recv',
        -            'socket_recvfrom','socket_recvmsg','socket_select','socket_send',
        -            'socket_sendmsg','socket_sendto','socket_setopt','socket_set_block',
        -            'socket_set_blocking','socket_set_nonblock','socket_set_option',
        -            'socket_set_timeout','socket_shutdown','socket_strerror',
        -            'socket_write','socket_writev','sort','soundex','spl_autoload',
        -            'spl_autoload_call','spl_autoload_extensions',
        -            'spl_autoload_functions','spl_autoload_register',
        -            'spl_autoload_unregister','spl_classes','spl_object_hash','split',
        -            'spliti','sprintf','sql_regcase','sqlite_array_query',
        -            'sqlite_busy_timeout','sqlite_changes','sqlite_close',
        -            'sqlite_column','sqlite_create_aggregate','sqlite_create_function',
        -            'sqlite_current','sqlite_error_string','sqlite_escape_string',
        -            'sqlite_exec','sqlite_factory','sqlite_fetch_all',
        -            'sqlite_fetch_array','sqlite_fetch_column_types',
        -            'sqlite_fetch_object','sqlite_fetch_single','sqlite_fetch_string',
        -            'sqlite_field_name','sqlite_has_more','sqlite_has_prev',
        -            'sqlite_last_error','sqlite_last_insert_rowid','sqlite_libencoding',
        -            'sqlite_libversion','sqlite_next','sqlite_num_fields',
        -            'sqlite_num_rows','sqlite_open','sqlite_popen','sqlite_prev',
        -            'sqlite_query','sqlite_rewind','sqlite_seek','sqlite_single_query',
        -            'sqlite_udf_decode_binary','sqlite_udf_encode_binary',
        -            'sqlite_unbuffered_query','sqlite_valid','sqrt','srand','sscanf',
        -            'ssh2_auth_hostbased_file','ssh2_auth_none','ssh2_auth_password',
        -            'ssh2_auth_pubkey_file','ssh2_connect','ssh2_exec',
        -            'ssh2_fetch_stream','ssh2_fingerprint','ssh2_forward_accept',
        -            'ssh2_forward_listen','ssh2_methods_negotiated','ssh2_poll',
        -            'ssh2_publickey_add','ssh2_publickey_init','ssh2_publickey_list',
        -            'ssh2_publickey_remove','ssh2_scp_recv','ssh2_scp_send','ssh2_sftp',
        -            'ssh2_sftp_lstat','ssh2_sftp_mkdir','ssh2_sftp_readlink',
        -            'ssh2_sftp_realpath','ssh2_sftp_rename','ssh2_sftp_rmdir',
        -            'ssh2_sftp_stat','ssh2_sftp_symlink','ssh2_sftp_unlink',
        -            'ssh2_shell','ssh2_tunnel','stat','stats_absolute_deviation',
        -            'stats_cdf_beta','stats_cdf_binomial','stats_cdf_cauchy',
        -            'stats_cdf_chisquare','stats_cdf_exponential','stats_cdf_f',
        -            'stats_cdf_gamma','stats_cdf_laplace','stats_cdf_logistic',
        -            'stats_cdf_negative_binomial','stats_cdf_noncentral_chisquare',
        -            'stats_cdf_noncentral_f','stats_cdf_noncentral_t',
        -            'stats_cdf_normal','stats_cdf_poisson','stats_cdf_t',
        -            'stats_cdf_uniform','stats_cdf_weibull','stats_covariance',
        -            'stats_dens_beta','stats_dens_cauchy','stats_dens_chisquare',
        -            'stats_dens_exponential','stats_dens_f','stats_dens_gamma',
        -            'stats_dens_laplace','stats_dens_logistic','stats_dens_normal',
        -            'stats_dens_pmf_binomial','stats_dens_pmf_hypergeometric',
        -            'stats_dens_pmf_negative_binomial','stats_dens_pmf_poisson',
        -            'stats_dens_t','stats_dens_uniform','stats_dens_weibull',
        -            'stats_harmonic_mean','stats_kurtosis','stats_rand_gen_beta',
        -            'stats_rand_gen_chisquare','stats_rand_gen_exponential',
        -            'stats_rand_gen_f','stats_rand_gen_funiform','stats_rand_gen_gamma',
        -            'stats_rand_gen_ipoisson','stats_rand_gen_iuniform',
        -            'stats_rand_gen_noncenral_f','stats_rand_gen_noncentral_chisquare',
        -            'stats_rand_gen_noncentral_t','stats_rand_gen_normal',
        -            'stats_rand_gen_t','stats_rand_getsd','stats_rand_ibinomial',
        -            'stats_rand_ibinomial_negative','stats_rand_ignlgi',
        -            'stats_rand_phrase_to_seeds','stats_rand_ranf','stats_rand_setall',
        -            'stats_skew','stats_standard_deviation','stats_stat_binomial_coef',
        -            'stats_stat_correlation','stats_stat_factorial',
        -            'stats_stat_independent_t','stats_stat_innerproduct',
        -            'stats_stat_paired_t','stats_stat_percentile','stats_stat_powersum',
        -            'stats_variance','strcasecmp','strchr','strcmp','strcoll','strcspn',
        -            'stream_bucket_append','stream_bucket_make_writeable',
        -            'stream_bucket_new','stream_bucket_prepend','stream_context_create',
        -            'stream_context_get_default','stream_context_get_options',
        -            'stream_context_set_default','stream_context_set_option',
        -            'stream_context_set_params','stream_copy_to_stream',
        -            'stream_encoding','stream_filter_append','stream_filter_prepend',
        -            'stream_filter_register','stream_filter_remove',
        -            'stream_get_contents','stream_get_filters','stream_get_line',
        -            'stream_get_meta_data','stream_get_transports',
        -            'stream_get_wrappers','stream_is_local',
        -            'stream_notification_callback','stream_register_wrapper',
        -            'stream_resolve_include_path','stream_select','stream_set_blocking',
        -            'stream_set_timeout','stream_set_write_buffer',
        -            'stream_socket_accept','stream_socket_client',
        -            'stream_socket_enable_crypto','stream_socket_get_name',
        -            'stream_socket_pair','stream_socket_recvfrom',
        -            'stream_socket_sendto','stream_socket_server',
        -            'stream_socket_shutdown','stream_supports_lock',
        -            'stream_wrapper_register','stream_wrapper_restore',
        -            'stream_wrapper_unregister','strftime','stripcslashes','stripos',
        -            'stripslashes','strip_tags','stristr','strlen','strnatcasecmp',
        -            'strnatcmp','strpbrk','strncasecmp','strncmp','strpos','strrchr',
        -            'strrev','strripos','strrpos','strspn','strstr','strtok',
        -            'strtolower','strtotime','strtoupper','strtr','strval',
        -            'str_ireplace','str_pad','str_repeat','str_replace','str_rot13',
        -            'str_split','str_shuffle','str_word_count','substr',
        -            'substr_compare','substr_count','substr_replace','svn_add',
        -            'svn_auth_get_parameter','svn_auth_set_parameter','svn_cat',
        -            'svn_checkout','svn_cleanup','svn_client_version','svn_commit',
        -            'svn_diff','svn_export','svn_fs_abort_txn','svn_fs_apply_text',
        -            'svn_fs_begin_txn2','svn_fs_change_node_prop','svn_fs_check_path',
        -            'svn_fs_contents_changed','svn_fs_copy','svn_fs_delete',
        -            'svn_fs_dir_entries','svn_fs_file_contents','svn_fs_file_length',
        -            'svn_fs_is_dir','svn_fs_is_file','svn_fs_make_dir',
        -            'svn_fs_make_file','svn_fs_node_created_rev','svn_fs_node_prop',
        -            'svn_fs_props_changed','svn_fs_revision_prop',
        -            'svn_fs_revision_root','svn_fs_txn_root','svn_fs_youngest_rev',
        -            'svn_import','svn_info','svn_log','svn_ls','svn_repos_create',
        -            'svn_repos_fs','svn_repos_fs_begin_txn_for_commit',
        -            'svn_repos_fs_commit_txn','svn_repos_hotcopy','svn_repos_open',
        -            'svn_repos_recover','svn_status','svn_update','symlink',
        -            'sys_get_temp_dir','syslog','system','tan','tanh','tempnam',
        -            'textdomain','thread_get','thread_include','thread_lock',
        -            'thread_lock_try','thread_mutex_destroy','thread_mutex_init',
        -            'thread_set','thread_start','thread_unlock','tidy_access_count',
        -            'tidy_clean_repair','tidy_config_count','tidy_diagnose',
        -            'tidy_error_count','tidy_get_body','tidy_get_config',
        -            'tidy_get_error_buffer','tidy_get_head','tidy_get_html',
        -            'tidy_get_html_ver','tidy_get_output','tidy_get_release',
        -            'tidy_get_root','tidy_get_status','tidy_getopt','tidy_is_xhtml',
        -            'tidy_is_xml','tidy_parse_file','tidy_parse_string',
        -            'tidy_repair_file','tidy_repair_string','tidy_warning_count','time',
        -            'timezone_abbreviations_list','timezone_identifiers_list',
        -            'timezone_name_from_abbr','timezone_name_get','timezone_offset_get',
        -            'timezone_open','timezone_transitions_get','tmpfile',
        -            'token_get_all','token_name','touch','trigger_error',
        -            'transliterate','transliterate_filters_get','trim','uasort',
        -            'ucfirst','ucwords','uksort','umask','uniqid','unixtojd','unlink',
        -            'unpack','unregister_tick_function','unserialize','unset',
        -            'urldecode','urlencode','user_error','use_soap_error_handler',
        -            'usleep','usort','utf8_decode','utf8_encode','var_dump',
        -            'var_export','variant_abs','variant_add','variant_and',
        -            'variant_cast','variant_cat','variant_cmp',
        -            'variant_date_from_timestamp','variant_date_to_timestamp',
        -            'variant_div','variant_eqv','variant_fix','variant_get_type',
        -            'variant_idiv','variant_imp','variant_int','variant_mod',
        -            'variant_mul','variant_neg','variant_not','variant_or',
        -            'variant_pow','variant_round','variant_set','variant_set_type',
        -            'variant_sub','variant_xor','version_compare','virtual','vfprintf',
        -            'vprintf','vsprintf','wddx_add_vars','wddx_deserialize',
        -            'wddx_packet_end','wddx_packet_start','wddx_serialize_value',
        -            'wddx_serialize_vars','win_beep','win_browse_file',
        -            'win_browse_folder','win_create_link','win_message_box',
        -            'win_play_wav','win_shell_execute','win32_create_service',
        -            'win32_delete_service','win32_get_last_control_message',
        -            'win32_ps_list_procs','win32_ps_stat_mem','win32_ps_stat_proc',
        -            'win32_query_service_status','win32_scheduler_delete_task',
        -            'win32_scheduler_enum_tasks','win32_scheduler_get_task_info',
        -            'win32_scheduler_run','win32_scheduler_set_task_info',
        -            'win32_set_service_status','win32_start_service',
        -            'win32_start_service_ctrl_dispatcher','win32_stop_service',
        -            'wordwrap','xml_error_string','xml_get_current_byte_index',
        -            'xml_get_current_column_number','xml_get_current_line_number',
        -            'xml_get_error_code','xml_parse','xml_parser_create',
        -            'xml_parser_create_ns','xml_parser_free','xml_parser_get_option',
        -            'xml_parser_set_option','xml_parse_into_struct',
        -            'xml_set_character_data_handler','xml_set_default_handler',
        -            'xml_set_element_handler','xml_set_end_namespace_decl_handler',
        -            'xml_set_external_entity_ref_handler',
        -            'xml_set_notation_decl_handler','xml_set_object',
        -            'xml_set_processing_instruction_handler',
        -            'xml_set_start_namespace_decl_handler',
        -            'xml_set_unparsed_entity_decl_handler','xmldoc','xmldocfile',
        -            'xmlrpc_decode','xmlrpc_decode_request','xmlrpc_encode',
        -            'xmlrpc_encode_request','xmlrpc_get_type','xmlrpc_is_fault',
        -            'xmlrpc_parse_method_descriptions',
        -            'xmlrpc_server_add_introspection_data','xmlrpc_server_call_method',
        -            'xmlrpc_server_create','xmlrpc_server_destroy',
        -            'xmlrpc_server_register_introspection_callback',
        -            'xmlrpc_server_register_method','xmlrpc_set_type','xmltree',
        -            'xmlwriter_end_attribute','xmlwriter_end_cdata',
        -            'xmlwriter_end_comment','xmlwriter_end_document',
        -            'xmlwriter_end_dtd','xmlwriter_end_dtd_attlist',
        -            'xmlwriter_end_dtd_element','xmlwriter_end_dtd_entity',
        -            'xmlwriter_end_element','xmlwriter_end_pi','xmlwriter_flush',
        -            'xmlwriter_full_end_element','xmlwriter_open_memory',
        -            'xmlwriter_open_uri','xmlwriter_output_memory',
        -            'xmlwriter_set_indent','xmlwriter_set_indent_string',
        -            'xmlwriter_start_attribute','xmlwriter_start_attribute_ns',
        -            'xmlwriter_start_cdata','xmlwriter_start_comment',
        -            'xmlwriter_start_document','xmlwriter_start_dtd',
        -            'xmlwriter_start_dtd_attlist','xmlwriter_start_dtd_element',
        -            'xmlwriter_start_dtd_entity','xmlwriter_start_element',
        -            'xmlwriter_start_element_ns','xmlwriter_start_pi','xmlwriter_text',
        -            'xmlwriter_write_attribute','xmlwriter_write_attribute_ns',
        -            'xmlwriter_write_cdata','xmlwriter_write_comment',
        -            'xmlwriter_write_dtd','xmlwriter_write_dtd_attlist',
        -            'xmlwriter_write_dtd_element','xmlwriter_write_dtd_entity',
        -            'xmlwriter_write_element','xmlwriter_write_element_ns',
        -            'xmlwriter_write_pi','xmlwriter_write_raw','xpath_eval',
        -            'xpath_eval_expression','xpath_new_context','xpath_register_ns',
        -            'xpath_register_ns_auto','xptr_eval','xptr_new_context','yp_all',
        -            'yp_cat','yp_errno','yp_err_string','yp_first',
        -            'yp_get_default_domain','yp_master','yp_match','yp_next','yp_order',
        -            'zend_current_obfuscation_level','zend_get_cfg_var','zend_get_id',
        -            'zend_loader_current_file','zend_loader_enabled',
        -            'zend_loader_file_encoded','zend_loader_file_licensed',
        -            'zend_loader_install_license','zend_loader_version',
        -            'zend_logo_guid','zend_match_hostmasks','zend_obfuscate_class_name',
        -            'zend_obfuscate_function_name','zend_optimizer_version',
        -            'zend_runtime_obfuscate','zend_version','zip_close',
        -            'zip_entry_close','zip_entry_compressedsize',
        -            'zip_entry_compressionmethod','zip_entry_filesize','zip_entry_name',
        -            'zip_entry_open','zip_entry_read','zip_open','zip_read',
        -            'zlib_get_coding_type'
        -            ),
        -        4 => array(
        -            'DEFAULT_INCLUDE_PATH', 'DIRECTORY_SEPARATOR', 'E_ALL',
        -            'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_CORE_ERROR',
        -            'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', 'E_STRICT',
        -            'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', 'E_WARNING',
        -            'ENT_COMPAT','ENT_QUOTES','ENT_NOQUOTES',
        -            'false', 'null', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR',
        -            'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR',
        -            'PHP_EXTENSION_DIR', 'PHP_LIBDIR',
        -            'PHP_LOCALSTATEDIR', 'PHP_OS',
        -            'PHP_OUTPUT_HANDLER_CONT', 'PHP_OUTPUT_HANDLER_END',
        -            'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR',
        -            'PHP_VERSION', 'true', '__CLASS__', '__FILE__', '__FUNCTION__',
        -            '__LINE__', '__METHOD__'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '<'.'%', '<'.'%=', '%'.'>', '<'.'?', '<'.'?=', '?'.'>'
        -            ),
        -        0 => array(
        -            '(', ')', '[', ']', '{', '}',
        -            '!', '@', '%', '&', '|', '/',
        -            '<', '>',
        -            '=', '-', '+', '*',
        -            '.', ':', ',', ';'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #990000;',
        -            4 => 'color: #009900; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #666666; font-style: italic;',
        -            3 => 'color: #0000cc; font-style: italic;',
        -            4 => 'color: #009933; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #006699; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold; font-style: italic;',
        -            6 => 'color: #009933; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;',
        -            'HARD' => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #004000;',
        -            2 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            1 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000088;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => '',
        -            4 => '',
        -            5 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.php.net/{FNAMEL}',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '->',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        //Variables
        -        0 => "[\\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            '<'.'?php' => '?'.'>'
        -            ),
        -        1 => array(
        -            '<'.'?' => '?'.'>'
        -            ),
        -        2 => array(
        -            '<'.'%' => '%'.'>'
        -            ),
        -        3 => array(
        -            ''
        -            ),
        -        4 => "/(?P<\\?(?>php\b)?)(?:".
        -            "(?>[^\"'?\\/<]+)|".
        -            "\\?(?!>)|".
        -            "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
        -            "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
        -            "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
        -            "\\/\\/(?>.*?(?:\\?>|$))|".
        -            "#(?>.*?(?:\\?>|$))|".
        -            "\\/(?=[^*\\/])|".
        -            "<(?!<<)|".
        -            "<<<(?P\w+)\s.*?\s\k".
        -            ")*?(?P\\?>|\Z)/sm",
        -        5 => "/(?P<%)(?:".
        -            "(?>[^\"'%\\/<]+)|".
        -            "%(?!>)|".
        -            "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
        -            "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
        -            "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
        -            "\\/\\/(?>.*?(?:%>|$))|".
        -            "#(?>.*?(?:%>|$))|".
        -            "\\/(?=[^*\\/])|".
        -            "<(?!<<)|".
        -            "<<<(?P\w+)\s.*?\s\k".
        -            ")*?(?P%>|\Z)/sm",
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php
        deleted file mode 100644
        index 9058a868..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php
        +++ /dev/null
        @@ -1,139 +0,0 @@
        - 'PIC16',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        /*Instructions*/
        -        1 => array(
        -            'addcf','adddcf','addlw','addwf','andlw','andwf','bc','bcf','bdc',
        -            'bnc','bndc','bnz','bsf','btfsc','btfss','bz','call','clrc','clrdc',
        -            'clrf','clrw','clrwdt','clrz','comf','decf','goto','incf','incfsz',
        -            'iorlw','iorwf','lcall','lgoto','movf','movfw','movlw','movwf',
        -            'option','negf','nop','retfie','retlw','return','rlf','rrf','setc',
        -            'setdc','setz','skpc','skpdc','skpnc','skpndc','skpnz','skpz',
        -            'sleep','subcf','subdcf','sublw','subwf','swapf','tris','tstf',
        -            'xorlw','xorwf'
        -            ),
        -        /*Registers*/
        -        2 => array(
        -            'INDF','TMR0','OPTION','PCL','STATUS','FSR','PORTA','PORTB','PORTC',
        -            'PORTD','PORTE','PORTF','TRISA','TRISB','TRISC','TRISD','TRISE',
        -            'TRISF','PCLATH','INTCON','PIR1','PIE1','PCON','CMCON','VRCON',
        -            'F','W'
        -            ),
        -        /*Directives*/
        -        3 => array(
        -            '_BADRAM','BANKISEL','BANKSEL','CBLOCK','CODE','_CONFIG','CONSTANT',
        -            'DA','DATA','DB','DE','#DEFINE','DT','DW','ELSE','END','ENDC',
        -            'ENDIF','ENDM','ENDW','EQU','ERROR','ERRORLEVEL','EXITM','EXPAND',
        -            'EXTERN','FILL','GLOBAL','IDATA','_IDLOCS','IF','IFDEF','IFNDEF',
        -            'INCLUDE','#INCLUDE','LIST','LOCAL','MACRO','_MAXRAM','MESSG',
        -            'NOEXPAND','NOLIST','ORG','PAGE','PAGESEL','PROCESSOR','RADIX',
        -            'RES','SET','SPACE','SUBTITLE','TITLE','UDATA','UDATA_ACS',
        -            'UDATA_OVR','UDATA_SHR','#UNDEFINE','VARIABLE','WHILE',
        -            'D','H','O','B','A'
        -            ),
        -        ),
        -    'SYMBOLS' => array('=','.',',',':'),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000a0; font-weight: bold;',
        -            2 => 'color: #aa3300; font-weight: bold;',
        -            3 => 'color: #0000ff;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #00a000;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff7700;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff7700;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #7777ff;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC |
        -        GESHI_NUMBER_BIN_SUFFIX |
        -        GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_HEX_SUFFIX,
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#>|^",
        -            'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%"
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php
        deleted file mode 100644
        index f5cc9050..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php
        +++ /dev/null
        @@ -1,101 +0,0 @@
        - 'Pike',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'goto', 'break', 'continue', 'return', 'case', 'default', 'if',
        -            'else', 'switch', 'while', 'foreach', 'do', 'for', 'gauge',
        -            'destruct', 'lambda', 'inherit', 'import', 'typeof', 'catch',
        -            'inline', 'nomask', 'private', 'protected', 'public', 'static'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '%', '=', '!', '&', '|', '?', ';'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(1 => ''),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(1 => '.'),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php
        deleted file mode 100644
        index 45afc173..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php
        +++ /dev/null
        @@ -1,173 +0,0 @@
        - 'Pixel Bender 1.0',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'languageVersion', 'kernel'
        -            ),
        -        2 => array(
        -            'import', 'parameter', 'dependent', 'const', 'input', 'output',
        -            'evaluatePixel', 'evaluateDependents', 'needed', 'changed', 'generated'
        -            ),
        -        3 => array(
        -            'bool', 'bool2', 'bool3', 'bool4', 'int', 'int2', 'int3', 'int4',
        -            'float', 'float2', 'float3', 'float4', 'float2x2', 'float3x3', 'float4x4',
        -            'pixel2', 'pixel3', 'pixel4', 'region', 'image1', 'image2', 'image3', 'image4',
        -            'imageRef', 'void'
        -            ),
        -        4 => array(
        -            'in', 'out', 'inout', 'if', 'else', 'for', 'while', 'do', 'break',
        -            'continue', 'return'
        -            ),
        -        5 => array(
        -            'radians', 'degrees', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'pow',
        -            'exp', 'exp2', 'log', 'log2', 'sqrt', 'inverseSqrt', 'abs', 'sign', 'floor',
        -            'ceil', 'fract', 'mod', 'min', 'max', 'step', 'clamp', 'mix', 'smoothStep',
        -            'length', 'distance', 'dot', 'cross', 'normalize', 'matrixCompMult', 'lessThan',
        -            'lessThanEqual', 'greaterThan', 'greaterThanEqual', 'equal', 'notEqual', 'any',
        -            'all', 'not', 'nowhere', 'everywhere', 'transform', 'union', 'intersect',
        -            'outset', 'inset', 'bounds', 'isEmpty', 'sample', 'sampleLinear', 'sampleNearest',
        -            'outCoord', 'dod', 'pixelSize', 'pixelAspectRatio'
        -            ),
        -        6 => array(
        -            'namespace', 'vendor', 'version', 'minValue', 'maxValue', 'defaultValue', 'description'
        -            ),
        -        7 => array(
        -            '#if', '#endif', '#ifdef', '#elif', 'defined', '#define',
        -            'AIF_ATI', 'AIF_NVIDIA', 'AIF_FLASH_TARGET'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '!', '%', '&', '|', '+', '-', '*', '/', '=', '<', '>', '?', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0033ff;',
        -            2 => 'color: #0033ff; font-weight: bold;',
        -            3 => 'color: #0033ff;',
        -            4 => 'color: #9900cc; font-weight: bold;',
        -            5 => 'color: #333333;',
        -            6 => 'color: #666666;',
        -            7 => 'color: #990000;',
        -        ),
        -        'COMMENTS' => array(
        -            1 => 'color: #009900;',
        -            'MULTI' => 'color: #3f5fbf;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #990000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000000; font-weight:bold;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #000000;',
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array('.'),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php
        deleted file mode 100644
        index 32a0cb75..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php
        +++ /dev/null
        @@ -1,198 +0,0 @@
        - 'PL/I',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '\''),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abnormal', 'abs', 'acos', 'acosf', 'add', 'addbuff', 'addr',
        -            'addrdata', 'alias', 'aligned', 'all', 'alloc', 'allocate',
        -            'allocation', 'allocn', 'allocsize', 'any', 'anycondition', 'area',
        -            'ascii', 'asin', 'asinf', 'asm', 'asmtdli', 'assembler',
        -            'assignable', 'atan', 'atand', 'atanf', 'atanh', 'attach',
        -            'attention', 'attn', 'auto', 'automatic', 'availablearea',
        -            'backwards', 'based', 'begin', 'bigendian', 'bin', 'binary',
        -            'binaryvalue', 'bind', 'binvalue', 'bit', 'bitloc', 'bitlocation',
        -            'bkwd', 'blksize', 'bool', 'buf', 'buffered', 'buffers', 'bufnd',
        -            'bufni', 'bufoff', 'bufsp', 'builtin', 'bx', 'by', 'byaddr', 'byte',
        -            'byvalue', 'b4', 'call', 'cast', 'cds', 'ceil', 'center',
        -            'centerleft', 'centerright', 'centre', 'centreleft', 'centreright',
        -            'char', 'character', 'charg', 'chargraphic', 'charval', 'check',
        -            'checkstg', 'close', 'cmpat', 'cobol', 'col', 'collate', 'column',
        -            'comment', 'compare', 'compiledate', 'compiletime', 'completion',
        -            'complex', 'cond', 'condition', 'conjg', 'conn', 'connected',
        -            'consecutive', 'controlled', 'conv', 'conversion', 'copy', 'cos',
        -            'cosd', 'cosf', 'cosh', 'count', 'counter', 'cpln', 'cplx', 'cs',
        -            'cstg', 'ctl', 'ctlasa', 'ctl360', 'currentsize', 'currentstorage',
        -            'data', 'datafield', 'date', 'datetime', 'days', 'daystodate',
        -            'daystosecs', 'db', 'dcl', 'dec', 'decimal', 'declare', 'def',
        -            'default', 'define', 'defined', 'delay', 'delete', 'descriptor',
        -            'descriptors', 'detach', 'dft', 'dim', 'dimacross', 'dimension',
        -            'direct', 'display', 'divide', 'do', 'downthru', 'edit', 'else',
        -            'empty', 'end', 'endfile', 'endpage', 'entry', 'entryaddr', 'env',
        -            'environment', 'epsilon', 'erf', 'erfc', 'error', 'event', 'excl',
        -            'exclusive', 'exit', 'exp', 'expf', 'exponent', 'exports', 'ext',
        -            'external', 'fb', 'fbs', 'fetch', 'file', 'fileddint', 'fileddtest',
        -            'fileddword', 'fileid', 'fileopen', 'fileread', 'fileseek',
        -            'filetell', 'filewrite', 'finish', 'first', 'fixed', 'fixedbin',
        -            'fixeddec', 'fixedoverflow', 'float', 'floatbin', 'floatdec',
        -            'floor', 'flush', 'fofl', 'format', 'fortran', 'free', 'from',
        -            'fromalien', 'fs', 'gamma', 'generic', 'genkey', 'get', 'getenv',
        -            'go', 'goto', 'graphic', 'gx', 'handle', 'hbound', 'hex', 'hexadec',
        -            'heximage', 'high', 'huge', 'iand', 'ieee', 'ieor', 'if', 'ignore',
        -            'imag', 'in', 'index', 'indexarea', 'indexed', 'init', 'initial',
        -            'inline', 'inonly', 'inot', 'inout', 'input', 'int', 'inter',
        -            'internal', 'into', 'invalidop', 'ior', 'irred', 'irreducible',
        -            'isfinite', 'isigned', 'isinf', 'isll', 'ismain', 'isnan',
        -            'isnormal', 'isrl', 'iszero', 'iunsigned', 'key', 'keyed',
        -            'keyfrom', 'keylength', 'keyloc', 'keyto', 'label', 'last',
        -            'lbound', 'leave', 'left', 'length', 'like', 'limited', 'line',
        -            'lineno', 'linesize', 'linkage', 'list', 'littleendian', 'loc',
        -            'locate', 'location', 'log', 'logf', 'loggamma', 'log10', 'log10f',
        -            'log2', 'low', 'lowercase', 'lower2', 'maccol', 'maclmar',
        -            'macname', 'macrmar', 'main', 'max', 'maxexp', 'maxlength',
        -            'memconvert', 'memcu12', 'memcu14', 'memcu21', 'memcu24', 'memcu41',
        -            'memcu42', 'memindex', 'memsearch', 'memsearchr', 'memverify',
        -            'memverifyr', 'min', 'minexp', 'mod', 'mpstr', 'multiply', 'name',
        -            'native', 'ncp', 'new', 'nocharg', 'nochargraphic', 'nocheck',
        -            'nocmpat', 'noconv', 'noconversion', 'nodescriptor', 'noexecops',
        -            'nofixedoverflow', 'nofofl', 'noinline', 'nolock', 'nomap',
        -            'nomapin', 'nomapout', 'nonasgn', 'nonassignable', 'nonconnected',
        -            'nonnative', 'noofl', 'nooverflow', 'norescan', 'normal', 'nosize',
        -            'nostrg', 'nostringrange', 'nostringsize', 'nostrz', 'nosubrg',
        -            'nosubscriptrange', 'noufl', 'nounderflow', 'nowrite', 'nozdiv',
        -            'nozerodivide', 'null', 'offset', 'offsetadd', 'offsetdiff',
        -            'offsetsubtract', 'offsetvalue', 'ofl', 'omitted', 'on', 'onarea',
        -            'onchar', 'oncode', 'oncondcond', 'oncondid', 'oncount', 'onfile',
        -            'ongsource', 'onkey', 'online', 'onloc', 'onoffset', 'onsource',
        -            'onsubcode', 'onwchar', 'onwsource', 'open', 'optional', 'options',
        -            'order', 'ordinal', 'ordinalname', 'ordinalpred', 'ordinalsucc',
        -            'other', 'otherwise', 'outonly', 'output', 'overflow', 'package',
        -            'packagename', 'page', 'pageno', 'pagesize', 'parameter', 'parmset',
        -            'password', 'pending', 'pic', 'picspec', 'picture', 'places',
        -            'pliascii', 'plicanc', 'plickpt', 'plidelete', 'plidump',
        -            'pliebcdic', 'plifill', 'plifree', 'plimove', 'pliover', 'plirest',
        -            'pliretc', 'pliretv', 'plisaxa', 'plisaxb', 'plisaxc', 'plisaxd',
        -            'plisrta', 'plisrtb', 'plisrtc', 'plisrtd', 'plitdli', 'plitran11',
        -            'plitran12', 'plitran21', 'plitran22', 'pointer', 'pointeradd',
        -            'pointerdiff', 'pointersubtract', 'pointervalue', 'poly', 'pos',
        -            'position', 'prec', 'precision', 'pred', 'present', 'print',
        -            'priority', 'proc', 'procedure', 'procedurename', 'procname',
        -            'prod', 'ptr', 'ptradd', 'ptrdiff', 'ptrsubtract', 'ptrvalue',
        -            'put', 'putenv', 'quote', 'radix', 'raise2', 'random', 'range',
        -            'rank', 'read', 'real', 'record', 'recsize', 'recursive', 'red',
        -            'reducible', 'reentrant', 'refer', 'regional', 'reg12', 'release',
        -            'rem', 'reorder', 'repattern', 'repeat', 'replaceby2', 'reply',
        -            'reread', 'rescan', 'reserved', 'reserves', 'resignal', 'respec',
        -            'retcode', 'return', 'returns', 'reuse', 'reverse', 'revert',
        -            'rewrite', 'right', 'round', 'rounddec', 'samekey', 'scalarvarying',
        -            'scale', 'search', 'searchr', 'secs', 'secstodate', 'secstodays',
        -            'select', 'seql', 'sequential', 'serialize4', 'set', 'sign',
        -            'signal', 'signed', 'sin', 'sind', 'sinf', 'sinh', 'sis', 'size',
        -            'skip', 'snap', 'sourcefile', 'sourceline', 'sqrt', 'sqrtf',
        -            'stackaddr', 'statement', 'static', 'status', 'stg', 'stmt', 'stop',
        -            'storage', 'stream', 'strg', 'string', 'stringrange', 'stringsize',
        -            'structure', 'strz', 'subrg', 'subscriptrange', 'substr',
        -            'subtract', 'succ', 'sum', 'suppress', 'sysin', 'sysnull',
        -            'sysparm', 'sysprint', 'system', 'sysversion', 'tally', 'tan',
        -            'tand', 'tanf', 'tanh', 'task', 'then', 'thread', 'threadid',
        -            'time', 'tiny', 'title', 'to', 'total', 'tpk', 'tpm', 'transient',
        -            'translate', 'transmit', 'trim', 'trkofl', 'trunc', 'type', 'ufl',
        -            'ulength', 'ulength16', 'ulength8', 'unal', 'unaligned',
        -            'unallocated', 'unbuf', 'unbuffered', 'undefinedfile', 'underflow',
        -            'undf', 'unlock', 'unsigned', 'unspec', 'until', 'update', 'upos',
        -            'uppercase', 'upthru', 'usubstr', 'usurrogate', 'uvalid', 'uwidth',
        -            'valid', 'validdate', 'value', 'var', 'varglist', 'vargsize',
        -            'variable', 'varying', 'varyingz', 'vb', 'vbs', 'verify', 'verifyr',
        -            'vs', 'vsam', 'wait', 'wchar', 'wcharval', 'weekday', 'when',
        -            'whigh', 'while', 'widechar', 'wlow', 'write', 'xmlchar', 'y4date',
        -            'y4julian', 'y4year', 'zdiv', 'zerodivide'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '+', '-', '*', '/', '=', '<', '>', '&', '^', '|', ':', '(', ')', ';', ','
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(1 => ''),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(1 => '.'),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php
        deleted file mode 100644
        index 1a9edea7..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php
        +++ /dev/null
        @@ -1,254 +0,0 @@
        -
        - * Copyright: (c) 2006 Victor Engmark (http://l0b0.net/)
        - * Release Version: 1.0.8.12
        - * Date Started: 2006/10/26
        - *
        - * Oracle 9.2 PL/SQL language file for GeSHi.
        - * Formatting is based on the default setup of TOAD 8.6.
        - *
        - * CHANGES
        - * -------
        - * 2006/10/27 (1.0.0)
        - *    -    First Release
        - *
        - * TODO (updated 2006/10/27)
        - * -------------------------
        - * * Add < and > to brackets
        - * * Remove symbols which are also comment delimiters / quote marks?
        - *
        - *************************************************************************************
        - *
        - *         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' => 'PL/SQL',
        -    'COMMENT_SINGLE' => array(1 =>'--'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2930
        -    'COMMENT_MULTI' => array('/*' => '*/'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2950
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'", '"'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        //PL/SQL reserved keywords (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/f_words.htm#LNPLS019)
        -        1 => array('ZONE', 'YEAR', 'WRITE', 'WORK', 'WITH', 'WHILE', 'WHERE',
        -        'WHENEVER', 'WHEN', 'VIEW', 'VARCHAR2', 'VARCHAR', 'VALUES',
        -        'VALIDATE', 'USE', 'UPDATE', 'UNIQUE', 'UNION', 'TYPE', 'TRUE',
        -        'TRIGGER', 'TO', 'TIMEZONE_REGION', 'TIMEZONE_MINUTE', 'TIMEZONE_HOUR',
        -        'TIMEZONE_ABBR', 'TIMESTAMP', 'TIME', 'THEN', 'TABLE', 'SYNONYM',
        -        'SUCCESSFUL', 'SUBTYPE', 'START', 'SQLERRM', 'SQLCODE', 'SQL', 'SPACE',
        -        'SMALLINT', 'SHARE', 'SET', 'SEPARATE', 'SELECT', 'SECOND',
        -        'SAVEPOINT', 'ROWTYPE', 'ROWNUM', 'ROWID', 'ROW', 'ROLLBACK',
        -        'REVERSE', 'RETURN', 'RELEASE', 'RECORD', 'REAL', 'RAW', 'RANGE',
        -        'RAISE', 'PUBLIC', 'PROCEDURE', 'PRIVATE', 'PRIOR', 'PRAGMA',
        -        'POSITIVEN', 'POSITIVE', 'PLS_INTEGER', 'PCTFREE', 'PARTITION',
        -        'PACKAGE', 'OUT', 'OTHERS', 'ORGANIZATION', 'ORDER', 'OR', 'OPTION',
        -        'OPERATOR', 'OPEN', 'OPAQUE', 'ON', 'OF', 'OCIROWID', 'NUMBER_BASE',
        -        'NUMBER', 'NULL', 'NOWAIT', 'NOT', 'NOCOPY', 'NEXTVAL', 'NEW',
        -        'NATURALN', 'NATURAL', 'MONTH', 'MODE', 'MLSLABEL', 'MINUTE', 'MINUS',
        -        'LOOP', 'LONG', 'LOCK', 'LIMITED', 'LIKE', 'LEVEL', 'JAVA',
        -        'ISOLATION', 'IS', 'INTO', 'INTERVAL', 'INTERSECT', 'INTERFACE',
        -        'INTEGER', 'INSERT', 'INDICATOR', 'INDEX', 'IN', 'IMMEDIATE', 'IF',
        -        'HOUR', 'HEAP', 'HAVING', 'GROUP', 'GOTO', 'FUNCTION', 'FROM',
        -        'FORALL', 'FOR', 'FLOAT', 'FETCH', 'FALSE', 'EXTENDS', 'EXIT',
        -        'EXISTS', 'EXECUTE', 'EXCLUSIVE', 'EXCEPTION', 'END', 'ELSIF', 'ELSE',
        -        'DROP', 'DO', 'DISTINCT', 'DESC', 'DELETE', 'DEFAULT', 'DECLARE',
        -        'DECIMAL', 'DAY', 'DATE', 'CURSOR', 'CURRVAL', 'CURRENT', 'CREATE',
        -        'CONSTANT', 'CONNECT', 'COMPRESS', 'COMMIT', 'COMMENT', 'COLLECT',
        -        'CLUSTER', 'CLOSE', 'CHECK', 'CHAR_BASE', 'CHAR', 'CASE', 'BY', 'BULK',
        -        'BOOLEAN', 'BODY', 'BINARY_INTEGER', 'BETWEEN', 'BEGIN', 'AUTHID',
        -        'AT', 'ASC', 'AS', 'ARRAY', 'ANY', 'AND', 'ALTER', 'ALL'),
        -        //SQL functions (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/toc.htm & http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/functions101a.htm#85925)
        -        2 => array('XMLTRANSFORM', 'XMLSEQUENCE', 'XMLFOREST', 'XMLELEMENT',
        -        'XMLCONCAT', 'XMLCOLATTVAL', 'XMLAGG', 'WIDTH_BUCKET', 'VSIZE',
        -        'VARIANCE', 'VAR_SAMP', 'VAR_POP', 'VALUE', 'USERENV', 'USER', 'UPPER',
        -        'UPDATEXML', 'UNISTR', 'UID', 'TZ_OFFSET', 'TRUNC', 'TRIM', 'TREAT',
        -        'TRANSLATE', 'TO_YMINTERVAL', 'TO_TIMESTAMP_TZ', 'TO_TIMESTAMP',
        -        'TO_SINGLE_BYTE', 'TO_NUMBER', 'TO_NCLOB', 'TO_NCHAR', 'TO_MULTI_BYTE',
        -        'TO_LOB', 'TO_DSINTERVAL', 'TO_DATE', 'TO_CLOB', 'TO_CHAR', 'TANH',
        -        'TAN', 'SYSTIMESTAMP', 'SYSDATE', 'SYS_XMLGEN', 'SYS_XMLAGG',
        -        'SYS_TYPEID', 'SYS_GUID', 'SYS_EXTRACT_UTC', 'SYS_DBURIGEN',
        -        'SYS_CONTEXT', 'SYS_CONNECT_BY_PATH', 'SUM', 'SUBSTR', 'STDDEV_SAMP',
        -        'STDDEV_POP', 'STDDEV', 'SQRT', 'SOUNDEX', 'SINH', 'SIN', 'SIGN',
        -        'SESSIONTIMEZONE', 'RTRIM', 'RPAD', 'ROWIDTONCHAR', 'ROWIDTOCHAR',
        -        'ROW_NUMBER', 'ROUND', 'REPLACE', 'REGR_SYY', 'REGR_SXY', 'REGR_SXX',
        -        'REGR_SLOPE', 'REGR_R2', 'REGR_INTERCEPT', 'REGR_COUNT', 'REGR_AVGY',
        -        'REGR_AVGX', 'REFTOHEX', 'REF', 'RAWTONHEX', 'RAWTOHEX',
        -        'RATIO_TO_REPORT', 'RANK', 'POWER', 'PERCENTILE_DISC',
        -        'PERCENTILE_CONT', 'PERCENT_RANK', 'PATH', 'NVL2', 'NVL',
        -        'NUMTOYMINTERVAL', 'NUMTODSINTERVAL', 'NULLIF', 'NTILE', 'NLSSORT',
        -        'NLS_UPPER', 'NLS_LOWER', 'NLS_INITCAP', 'NLS_CHARSET_NAME',
        -        'NLS_CHARSET_ID', 'NLS_CHARSET_DECL_LEN', 'NEXT_DAY', 'NEW_TIME',
        -        'NCHR', 'MONTHS_BETWEEN', 'MOD', 'MIN', 'MAX', 'MAKE_REF', 'LTRIM',
        -        'LPAD', 'LOWER', 'LOG', 'LOCALTIMESTAMP', 'LN', 'LENGTH', 'LEAST',
        -        'LEAD', 'LAST_VALUE', 'LAST_DAY', 'LAST', 'LAG', 'INSTR', 'INITCAP',
        -        'HEXTORAW', 'GROUPING_ID', 'GROUPING', 'GROUP_ID', 'GREATEST',
        -        'FROM_TZ', 'FLOOR', 'FIRST_VALUE', 'FIRST', 'EXTRACTVALUE', 'EXTRACT',
        -        'EXP', 'EXISTSNODE', 'EMPTY_CLOB', 'EMPTY_BLOB', 'DUMP', 'DEREF',
        -        'DEPTH', 'DENSE_RANK', 'DECOMPOSE', 'DECODE', 'DBTIMEZONE',
        -        'CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CUME_DIST', 'COVAR_SAMP',
        -        'COVAR_POP', 'COUNT', 'COSH', 'COS', 'CORR', 'CONVERT', 'CONCAT',
        -        'COMPOSE', 'COALESCE', 'CHR', 'CHARTOROWID', 'CEIL', 'CAST', 'BITAND',
        -        'BIN_TO_NUM', 'BFILENAME', 'AVG', 'ATAN2', 'ATAN', 'ASIN', 'ASCIISTR',
        -        'ASCII', 'ADD_MONTHS', 'ACOS', 'ABS'),
        -        //PL/SQL packages (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/intro2.htm#1025672)
        -        3 => array('UTL_URL', 'UTL_TCP', 'UTL_SMTP', 'UTL_REF', 'UTL_RAW',
        -        'UTL_PG', 'UTL_INADDR', 'UTL_HTTP', 'UTL_FILE', 'UTL_ENCODE',
        -        'UTL_COLL', 'SDO_UTIL', 'SDO_TUNE', 'SDO_MIGRATE', 'SDO_LRS',
        -        'SDO_GEOM', 'SDO_CS', 'DMBS_XMLQUERY', 'DMBS_FLASHBACK',
        -        'DMBS_DEFER_SYS', 'DEBUG_EXTPROC', 'DBMS_XSLPROCESSOR', 'DBMS_XPLAN',
        -        'DBMS_XMLSCHEMA', 'DBMS_XMLSAVE', 'DBMS_XMLPARSER', 'DBMS_XMLGEN',
        -        'DBMS_XMLDOM', 'DBMS_XDBT', 'DBMS_XDB_VERSION', 'DBMS_XDB', 'DBMS_WM',
        -        'DBMS_UTILITY', 'DBMS_TYPES', 'DBMS_TTS', 'DBMS_TRANSFORM',
        -        'DBMS_TRANSACTION', 'DBMS_TRACE', 'DBMS_STRM_A', 'DBMS_STRM',
        -        'DBMS_STORAGE_MAP', 'DBMS_STATS', 'DBMS_SQL', 'DBMS_SPACE_ADMIN',
        -        'DBMS_SPACE', 'DBMS_SHARED_POOL', 'DBMS_SESSION', 'DBMS_RULE_ADM',
        -        'DBMS_RULE', 'DBMS_ROWID', 'DBMS_RLS', 'DBMS_RESUMABLE',
        -        'DBMS_RESOURCE_MANAGER_PRIVS', 'DBMS_RESOURCE_MANAGER', 'DBMS_REPUTIL',
        -        'DBMS_REPCAT_RGT', 'DBMS_REPCAT_INSTATIATE', 'DBMS_REPCAT_ADMIN',
        -        'DBMS_REPCAT', 'DBMS_REPAIR', 'DBMS_REFRESH', 'DBMS_REDEFINITION',
        -        'DBMS_RECTIFIER_DIFF', 'DBMS_RANDOM', 'DBMS_PROPAGATION_ADM',
        -        'DBMS_PROFILER', 'DBMS_PIPE', 'DBMS_PCLXUTIL', 'DBMS_OUTPUT',
        -        'DBMS_OUTLN_EDIT', 'DBMS_OUTLN', 'DBMS_ORACLE_TRACE_USER',
        -        'DBMS_ORACLE_TRACE_AGENT', 'DBMS_OLAP', 'DBMS_OFFLINE_SNAPSHOT',
        -        'DBMS_OFFLINE_OG', 'DBMS_ODCI', 'DBMS_OBFUSCATION_TOOLKIT',
        -        'DBMS_MVIEW', 'DBMS_MGWMSG', 'DBMS_MGWADM', 'DBMS_METADATA',
        -        'DBMS_LOGSTDBY', 'DBMS_LOGMNR_D', 'DBMS_LOGMNR_CDC_SUBSCRIBE',
        -        'DBMS_LOGMNR_CDC_PUBLISH', 'DBMS_LOGMNR', 'DBMS_LOCK', 'DBMS_LOB',
        -        'DBMS_LIBCACHE', 'DBMS_LDAP', 'DBMS_JOB', 'DBMS_IOT',
        -        'DBMS_HS_PASSTHROUGH', 'DBMS_FGA', 'DBMS_DISTRIBUTED_TRUST_ADMIN',
        -        'DBMS_DESCRIBE', 'DBMS_DEFER_QUERY', 'DBMS_DEFER', 'DBMS_DEBUG',
        -        'DBMS_DDL', 'DBMS_CAPTURE_ADM', 'DBMS_AW', 'DBMS_AQELM', 'DBMS_AQADM',
        -        'DBMS_AQ', 'DBMS_APPLY_ADM', 'DBMS_APPLICATION_INFO', 'DBMS_ALERT',
        -        'CWM2_OLAP_AW_ACCESS'),
        -        //PL/SQL predefined exceptions (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm#784)
        -        4 => array('ZERO_DIVIDE', 'VALUE_ERROR', 'TOO_MANY_ROWS',
        -        'TIMEOUT_ON_RESOURCE', 'SYS_INVALID_ROWID', 'SUBSCRIPT_OUTSIDE_LIMIT',
        -        'SUBSCRIPT_BEYOND_COUNT', 'STORAGE_ERROR', 'SELF_IS_NULL',
        -        'ROWTYPE_MISMATCH', 'PROGRAM_ERROR', 'NOT_LOGGED_ON', 'NO_DATA_FOUND',
        -        'LOGIN_DENIED', 'INVALID_NUMBER', 'INVALID_CURSOR', 'DUP_VAL_ON_INDEX',
        -        'CURSOR_ALREADY_OPEN', 'COLLECTION_IS_NULL', 'CASE_NOT_FOUND',
        -        'ACCESS_INTO_NULL'),
        -        //Static data dictionary views (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96536/ch2.htm)
        -        5 => array('USER_REPSITES', 'USER_REPSCHEMA',
        -        'USER_REPRESOLUTION_STATISTICS', 'USER_REPRESOLUTION_METHOD',
        -        'USER_REPRESOLUTION', 'USER_REPRESOL_STATS_CONTROL', 'USER_REPPROP',
        -        'USER_REPPRIORITY_GROUP', 'USER_REPPRIORITY',
        -        'USER_REPPARAMETER_COLUMN', 'USER_REPOBJECT', 'USER_REPKEY_COLUMNS',
        -        'USER_REPGROUPED_COLUMN', 'USER_REPGROUP_PRIVILEGES', 'USER_REPGROUP',
        -        'USER_REPGENOBJECTS', 'USER_REPGENERATED', 'USER_REPFLAVORS',
        -        'USER_REPFLAVOR_OBJECTS', 'USER_REPFLAVOR_COLUMNS', 'USER_REPDDL',
        -        'USER_REPCONFLICT', 'USER_REPCOLUMN_GROUP', 'USER_REPCOLUMN',
        -        'USER_REPCATLOG', 'USER_REPCAT_USER_PARM_VALUES',
        -        'USER_REPCAT_USER_AUTHORIZATIONS', 'USER_REPCAT_TEMPLATE_SITES',
        -        'USER_REPCAT_TEMPLATE_PARMS', 'USER_REPCAT_TEMPLATE_OBJECTS',
        -        'USER_REPCAT_REFRESH_TEMPLATES', 'USER_REPCAT', 'USER_REPAUDIT_COLUMN',
        -        'USER_REPAUDIT_ATTRIBUTE', 'DBA_REPSITES_NEW', 'DBA_REPSITES',
        -        'DBA_REPSCHEMA', 'DBA_REPRESOLUTION_STATISTICS',
        -        'DBA_REPRESOLUTION_METHOD', 'DBA_REPRESOLUTION',
        -        'DBA_REPRESOL_STATS_CONTROL', 'DBA_REPPROP', 'DBA_REPPRIORITY_GROUP',
        -        'DBA_REPPRIORITY', 'DBA_REPPARAMETER_COLUMN', 'DBA_REPOBJECT',
        -        'DBA_REPKEY_COLUMNS', 'DBA_REPGROUPED_COLUMN',
        -        'DBA_REPGROUP_PRIVILEGES', 'DBA_REPGROUP', 'DBA_REPGENOBJECTS',
        -        'DBA_REPGENERATED', 'DBA_REPFLAVORS', 'DBA_REPFLAVOR_OBJECTS',
        -        'DBA_REPFLAVOR_COLUMNS', 'DBA_REPEXTENSIONS', 'DBA_REPDDL',
        -        'DBA_REPCONFLICT', 'DBA_REPCOLUMN_GROUP', 'DBA_REPCOLUMN',
        -        'DBA_REPCATLOG', 'DBA_REPCAT_USER_PARM_VALUES',
        -        'DBA_REPCAT_USER_AUTHORIZATIONS', 'DBA_REPCAT_TEMPLATE_SITES',
        -        'DBA_REPCAT_TEMPLATE_PARMS', 'DBA_REPCAT_TEMPLATE_OBJECTS',
        -        'DBA_REPCAT_REFRESH_TEMPLATES', 'DBA_REPCAT_EXCEPTIONS', 'DBA_REPCAT',
        -        'DBA_REPAUDIT_COLUMN', 'DBA_REPAUDIT_ATTRIBUTE', 'ALL_REPSITES',
        -        'ALL_REPSCHEMA', 'ALL_REPRESOLUTION_STATISTICS',
        -        'ALL_REPRESOLUTION_METHOD', 'ALL_REPRESOLUTION',
        -        'ALL_REPRESOL_STATS_CONTROL', 'ALL_REPPROP', 'ALL_REPPRIORITY_GROUP',
        -        'ALL_REPPRIORITY', 'ALL_REPPARAMETER_COLUMN', 'ALL_REPOBJECT',
        -        'ALL_REPKEY_COLUMNS', 'ALL_REPGROUPED_COLUMN',
        -        'ALL_REPGROUP_PRIVILEGES', 'ALL_REPGROUP', 'ALL_REPGENOBJECTS',
        -        'ALL_REPGENERATED', 'ALL_REPFLAVORS', 'ALL_REPFLAVOR_OBJECTS',
        -        'ALL_REPFLAVOR_COLUMNS', 'ALL_REPDDL', 'ALL_REPCONFLICT',
        -        'ALL_REPCOLUMN_GROUP', 'ALL_REPCOLUMN', 'ALL_REPCATLOG',
        -        'ALL_REPCAT_USER_PARM_VALUES', 'ALL_REPCAT_USER_AUTHORIZATIONS',
        -        'ALL_REPCAT_TEMPLATE_SITES', 'ALL_REPCAT_TEMPLATE_PARMS',
        -        'ALL_REPCAT_TEMPLATE_OBJECTS', 'ALL_REPCAT_REFRESH_TEMPLATES',
        -        'ALL_REPCAT', 'ALL_REPAUDIT_COLUMN', 'ALL_REPAUDIT_ATTRIBUTE')
        -        ),
        -    'SYMBOLS' => array(
        -        //PL/SQL delimiters (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2732)
        -        '+', '%', "'", '.', '/', '(', ')', ':', ',', '*', '"', '=', '<', '>', '@', ';', '-', ':=', '=>', '||', '**', '<<', '>>', '/*', '*/', '..', '<>', '!=', '~=', '^=', '<=', '>='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #00F;',
        -            2 => 'color: #000;',
        -            3 => 'color: #00F;',
        -            4 => 'color: #F00;',
        -            5 => 'color: #800;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #080; font-style: italic;',
        -            'MULTI' => 'color: #080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #00F;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #F00;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #800;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #0F0;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #00F;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => 'color: #0F0;'
        -            )
        -        ),
        -        'URLS' => array(
        -            1 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
        -            2 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
        -            3 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
        -            4 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
        -            5 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}'
        -            ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php
        deleted file mode 100644
        index 1f9d9e57..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php
        +++ /dev/null
        @@ -1,285 +0,0 @@
        - 2010-05-03
        - * Copyright: (c) 2007 Christophe Chauvet (http://kryskool.org/), Nigel McNie (http://qbnz.com/highlighter)
        - * Release Version: 1.0.8.12
        - * Date Started: 2007/07/20
        - *
        - * PostgreSQL language file for GeSHi.
        - *
        - * CHANGES
        - * -------
        - * 2007/07/20 (1.0.0)
        - *  -  First Release
        - *
        - * TODO (updated 2007/07/20)
        - * -------------------------
        - *
        - *************************************************************************************
        - *
        - *     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' => 'PostgreSQL',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"', '`'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        //Put PostgreSQL reserved keywords here.  I like mine uppercase.
        -        1 => array(
        -            'ABORT','ABSOLUTE','ACCESS','ACTION','ADD','ADMIN','AFTER',
        -            'AGGREGATE','ALL','ALSO','ALTER','ALWAYS','ANALYSE','ANALYZE','AND',
        -            'ANY','AS','ASC,','ASSERTION','ASSIGNMENT','ASYMMETRIC','AT',
        -            'AUTHORIZATION','BACKWARD','BEFORE','BEGIN','BETWEEN','BOTH','BY',
        -            'CACHE','CALLED','CASCADE','CASCADED','CASE','CAST','CATALOG',
        -            'CHAIN','CHARACTERISTICS','CHECK','CHECKPOINT','CLASS','CLOSE',
        -            'CLUSTER','COALESCE','COLLATE','COLUMN','COMMENT','COMMIT',
        -            'COMMITTED','CONCURRENTLY','CONFIGURATION','CONNECTION',
        -            'CONSTRAINT','CONSTRAINTS','CONTENT','CONTINUE','CONVERSION','COPY',
        -            'COST','CREATE','CREATEDB','CREATEROLE','CREATEUSER','CROSS','CSV',
        -            'CURRENT','CURRENT_CATALOG','CURRENT_DATE','CURRENT_ROLE',
        -            'CURRENT_SCHEMA','CURRENT_TIME','CURRENT_TIMESTAMP','CURRENT_USER',
        -            'CURSOR','CYCLE','DATA','DATABASE','DAY','DEALLOCATE','DEC',
        -            'DECLARE','DEFAULT','DEFAULTS','DEFERRABLE','DEFERRED','DEFINER',
        -            'DELETE','DELIMITER','DELIMITERS','DESC','DICTIONARY','DISABLE',
        -            'DISCARD','DISTINCT','DO','DOCUMENT','DOMAIN','DOUBLE','DROP',
        -            'EACH','ELSE','ENABLE','ENCODING','ENCRYPTED','END','ESCAPE',
        -            'EXCEPT','EXCLUDING','EXCLUSIVE','EXECUTE','EXISTS','EXPLAIN',
        -            'EXTERNAL','EXTRACT','FALSE','FAMILY','FETCH','FIRST','FOLLOWING',
        -            'FOR','FORCE','FOREIGN','FORWARD','FREEZE','FROM','FULL','FUNCTION',
        -            'GLOBAL','GRANT','GRANTED','GREATEST','GROUP','HANDLER','HAVING',
        -            'HEADER','HOLD','HOUR','IDENTITY','IF','ILIKE','IMMEDIATE',
        -            'IMMUTABLE','IMPLICIT','IN','INCLUDING','INCREMENT','INDEX',
        -            'INDEXES','INHERIT','INHERITS','INITIALLY','INNER','INOUT','INPUT',
        -            'INSENSITIVE','INSERT','INSTEAD','INTERSECT','INTO','INVOKER','IS',
        -            'ISNULL','ISOLATION','JOIN','KEY','LANCOMPILER','LANGUAGE','LARGE',
        -            'LAST','LC_COLLATE','LC_CTYPE','LEADING','LEAST','LEFT','LEVEL',
        -            'LIKE','LIMIT','LISTEN','LOAD','LOCAL','LOCALTIME','LOCALTIMESTAMP',
        -            'LOCATION','LOCK','LOGIN','LOOP','MAPPING','MATCH','MAXVALUE',
        -            'MINUTE','MINVALUE','MODE','MONTH','MOVE','NAME','NAMES','NATIONAL',
        -            'NATURAL','NEW','NEXT','NO','NOCREATEDB','NOCREATEROLE',
        -            'NOCREATEUSER','NOINHERIT','NOLOGIN','NONE','NOSUPERUSER','NOT',
        -            'NOTHING','NOTIFY','NOTNULL','NOWAIT','NULL','NULLIF','NULLS',
        -            'NUMERIC','OBJECT','OF','OFF','OFFSET','OIDS','OLD','ON','ONLY',
        -            'OPERATOR','OPTION','OPTIONS','OR','ORDER','OUT','OUTER','OVER',
        -            'OVERLAPS','OVERLAY','OWNED','OWNER','PARSER','PARTIAL','PARTITION',
        -            'PASSWORD','PLACING','PLANS','POSITION','PRECEDING','PRECISION',
        -            'PREPARE','PREPARED','PRESERVE','PRIMARY','PRIOR','PRIVILEGES',
        -            'PROCEDURAL','PROCEDURE','QUOTE','RANGE','READ','REASSIGN',
        -            'RECHECK','RECURSIVE','REFERENCES','REINDEX','RELATIVE','RELEASE',
        -            'RENAME','REPEATABLE','REPLACE','REPLICA','RESET','RESTART',
        -            'RESTRICT','RETURN','RETURNING','RETURNS','REVOKE','RIGHT','ROLE',
        -            'ROLLBACK','ROW','ROWS','RULE','SAVEPOINT','SCHEMA','SCROLL',
        -            'SEARCH','SECOND',
        -            'SECURITY','SELECT','SEQUENCE','SERIALIZABLE','SERVER','SESSION',
        -            'SESSION_USER','SET','SETOF','SHARE','SHOW','SIMILAR','SIMPLE',
        -            'SOME','STABLE','STANDALONE','START','STATEMENT','STATISTICS',
        -            'STDIN','STDOUT','STORAGE','STRICT','STRIP','SUPERUSER',
        -            'SYMMETRIC','SYSID','SYSTEM','TABLE','TABLESPACE','TEMP','TEMPLATE',
        -            'TEMPORARY','THEN','TO','TRAILING','TRANSACTION','TREAT','TRIGGER',
        -            'TRUE','TRUNCATE','TRUSTED','TYPE','UNBOUNDED','UNCOMMITTED',
        -            'UNENCRYPTED','UNION','UNIQUE','UNKNOWN','UNLISTEN','UNTIL',
        -            'UPDATE','USER','USING','VACUUM','VALID','VALIDATOR','VALUE',
        -            'VALUES','VARIADIC','VERBOSE','VERSION','VIEW','VOLATILE','WHEN',
        -            'WHERE','WHILE','WHITESPACE','WINDOW','WITH','WITHOUT','WORK','WRAPPER',
        -            'WRITE','XMLATTRIBUTES','XMLCONCAT','XMLELEMENT','XMLFOREST',
        -            'XMLPARSE','XMLPI','XMLROOT','XMLSERIALIZE','YEAR','YES','ZONE'
        -            ),
        -
        -        //Put functions here
        -        3 => array(
        -            // mathematical functions
        -            'ABS','CBRT','CEIL','CEILING','DEGREES','DIV','EXP','FLOOR','LN',
        -            'LOG','MOD','PI','POWER','RADIANS','RANDOM','ROUND','SETSEED',
        -            'SIGN','SQRT','TRUNC','WIDTH_BUCKET',
        -            // trigonometric functions
        -            'ACOS','ASIN','ATAN','ATAN2','COS','COT','SIN','TAN',
        -            // string functions
        -            'BIT_LENGTH','CHAR_LENGTH','CHARACTER_LENGTH','LOWER',
        -            'OCTET_LENGTH','POSITION','SUBSTRING','TRIM','UPPER',
        -            // other string functions
        -            'ASCII','BTRIM','CHR','CONVERT','CONVERT_FROM','CONVERT_TO',
        -            'DECODE','ENCODE','INITCAP','LENGTH','LPAD','LTRIM','MD5',
        -            'PG_CLIENT_ENCODING','QUOTE_IDENT','QUOTE_LITERAL','QUOTE_NULLABLE',
        -            'REGEXP_MATCHES','REGEXP_REPLACE','REGEXP_SPLIT_TO_ARRAY',
        -            'REGEXP_SPLIT_TO_TABLE','REPEAT','RPAD','RTRIM','SPLIT_PART',
        -            'STRPOS','SUBSTR','TO_ASCII','TO_HEX','TRANSLATE',
        -            // binary string functions
        -            'GET_BIT','GET_BYTE','SET_BIT','SET_BYTE',
        -            // data type formatting functions
        -            'TO_CHAR','TO_DATE','TO_NUMBER','TO_TIMESTAMP',
        -            // date/time functions
        -            'AGE','CLOCK_TIMESTAMP','DATE_PART','DATE_TRUNC','EXTRACT',
        -            'ISFINITE','JUSTIFY_DAYS','JUSTIFY_HOURS','JUSTIFY_INTERVAL','NOW',
        -            'STATEMENT_TIMESTAMP','TIMEOFDAY','TRANSACTION_TIMESTAMP',
        -            // enum support functions
        -            'ENUM_FIRST','ENUM_LAST','ENUM_RANGE',
        -            // geometric functions
        -            'AREA','CENTER','DIAMETER','HEIGHT','ISCLOSED','ISOPEN','NPOINTS',
        -            'PCLOSE','POPEN','RADIUS','WIDTH',
        -            'BOX','CIRCLE','LSEG','PATH','POINT','POLYGON',
        -            // cidr and inet functions
        -            'ABBREV','BROADCAST','FAMILY','HOST','HOSTMASK','MASKLEN','NETMASK',
        -            'NETWORK','SET_MASKLEN',
        -            // text search functions
        -            'TO_TSVECTOR','SETWEIGHT','STRIP','TO_TSQUERY','PLAINTO_TSQUERY',
        -            'NUMNODE','QUERYTREE','TS_RANK','TS_RANK_CD','TS_HEADLINE',
        -            'TS_REWRITE','GET_CURRENT_TS_CONFIG','TSVECTOR_UPDATE_TRIGGER',
        -            'TSVECTOR_UPDATE_TRIGGER_COLUMN',
        -            'TS_DEBUG','TS_LEXISE','TS_PARSE','TS_TOKEN_TYPE','TS_STAT',
        -            // XML functions
        -            'XMLCOMMENT','XMLCONCAT','XMLELEMENT','XMLFOREST','XMLPI','XMLROOT',
        -            'XMLAGG','XPATH','TABLE_TO_XMLSCHEMA','QUERY_TO_XMLSCHEMA',
        -            'CURSOR_TO_XMLSCHEMA','TABLE_TO_XML_AND_XMLSCHEMA',
        -            'QUERY_TO_XML_AND_XMLSCHEMA','SCHEMA_TO_XML','SCHEMA_TO_XMLSCHEMA',
        -            'SCHEMA_TO_XML_AND_XMLSCHEMA','DATABASE_TO_XML',
        -            'DATABASE_TO_XMLSCHEMA','DATABASE_TO_XML_AND_XMLSCHEMA',
        -            // sequence manipulating functions
        -            'CURRVAL','LASTVAL','NEXTVAL','SETVAL',
        -            // conditional expressions
        -            'COALESCE','NULLIF','GREATEST','LEAST',
        -            // array functions
        -            'ARRAY_APPEND','ARRAY_CAT','ARRAY_NDIMS','ARRAY_DIMS','ARRAY_FILL',
        -            'ARRAY_LENGTH','ARRAY_LOWER','ARRAY_PREPEND','ARRAY_TO_STRING',
        -            'ARRAY_UPPER','STRING_TO_ARRAY','UNNEST',
        -            // aggregate functions
        -            'ARRAY_AGG','AVG','BIT_AND','BIT_OR','BOOL_AND','BOOL_OR','COUNT',
        -            'EVERY','MAX','MIN','STRING_AGG','SUM',
        -            // statistic aggregate functions
        -            'CORR','COVAR_POP','COVAR_SAMP','REGR_AVGX','REGR_AVGY',
        -            'REGR_COUNT','REGR_INTERCEPT','REGR_R2','REGR_SLOPE','REGR_SXX',
        -            'REGR_SXY','REGR_SYY','STDDEV','STDDEV_POP','STDDEV_SAMP',
        -            'VARIANCE','VAR_POP','VAR_SAMP',
        -            // window functions
        -            'ROW_NUMBER','RANK','DENSE_RANK','PERCENT_RANK','CUME_DIST','NTILE',
        -            'LAG','LEAD','FIRST_VALUE','LAST_VALUE','NTH_VALUE',
        -            // set returning functions
        -            'GENERATE_SERIES','GENERATE_SUBSCRIPTS'
        -            // system information functions not currently included
        -            ),
        -
        -        //Put your postgresql var
        -        4 => array(
        -            'client_encoding',
        -            'standard_conforming_strings'
        -            ),
        -
        -        //Put your data types here
        -        5 => array(
        -            'ARRAY','ABSTIME','BIGINT','BIGSERIAL','BINARY','BIT','BIT VARYING',
        -            'BOOLEAN','BOX','BYTEA','CHAR','CHARACTER','CHARACTER VARYING',
        -            'CIDR','CIRCLE','DATE','DECIMAL','DOUBLE PRECISION','ENUM','FLOAT',
        -            'INET','INT','INTEGER','INTERVAL','NCHAR','REAL','SMALLINT','TEXT',
        -            'TIME','TIMESTAMP','VARCHAR','XML',
        -            ),
        -
        -        //        //Put your package names here
        -        //        6 => array(
        -        //            ),
        -
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '=', '<', '>', '|'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            // regular keywords
        -            1 => 'color: #000000; font-weight: bold; text-transform: uppercase;',
        -            // inbuilt functions
        -            3 => 'color: #333399; font-weight: bold; text-transform: uppercase;',
        -            // postgresql var(?)
        -            4 => 'color: #993333; font-weight: bold; text-transform: uppercase;',
        -            // data types
        -            5 => 'color: #993333; font-weight: bold; text-transform: uppercase;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #ff0000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        3 => '',
        -        4 => 'http://paste.postgresql.fr/wiki/desc.php?def={FNAME}',
        -        5 => '',
        -        ),
        -
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            1 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -
        -            3 => array(
        -                'DISALLOWED_AFTER' => '(?=\()'
        -                ),
        -
        -            4 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -
        -            5 => array(
        -                'DISALLOWED_AFTER' => '(?![\(\w])'
        -                ),
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php
        deleted file mode 100644
        index cbd10f68..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php
        +++ /dev/null
        @@ -1,217 +0,0 @@
        - 'PostScript',
        -    'COMMENT_SINGLE' => array(0 => '%'),
        -    'COMMENT_MULTI' => array(), //array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        // Strings
        -        1 => "/\((?:\\\\[0-7]{3}|\\\\.|(?R)|[^)])*\)/s",
        -        // Hex Strings
        -        2 => "/<(?!<)[0-9a-f\s]*>/si",
        -        // ASCII-85 Strings
        -        3 => "/<~.*~>/si",
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        ),
        -    'NUMBERS' => array(
        -        0 => GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -        1 => "\d+#[0-9a-zA-Z]+"
        -        ),
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'countexecstack', 'def', 'dup', 'exch', 'exec', 'execstack', 'exit',
        -            'for', 'if', 'ifelse', 'loop', 'pop', 'repeat',
        -
        -            'abs', 'add', 'atan', 'ceiling', 'cos', 'div', 'exp', 'floor',
        -            'idiv', 'ln', 'log', 'mul', 'mod', 'neg', 'rand', 'round', 'rrand',
        -            'sin', 'sqrt', 'srand', 'sub', 'truncate',
        -
        -            'and', 'bitshift', 'eq', 'ge', 'gt', 'le', 'lt', 'ne', 'not', 'or', 'xor',
        -            ),
        -        2 => array(
        -            'false', 'null', 'true', 'version'
        -            ),
        -        3 => array(
        -            'quit', 'start', 'stop', 'stopped',
        -
        -            'clear', 'cleartomark', 'copy', 'count', 'counttomark', 'index', 'roll',
        -
        -            'aload', 'astore', 'begin', 'countdictstack', 'currentdict',
        -            'dictstack', 'end', 'errordict', 'forall', 'get',
        -            'getinterval', 'known', 'length', 'load', 'maxlength', 'put',
        -            'putinterval', 'store', 'systemdict', 'userdict', 'where',
        -
        -            'anchorsearch', 'search', 'token',
        -
        -            'cvi', 'cvlit', 'cvn', 'cvr', 'cvrs', 'cvs', 'cvx', 'executeonly',
        -            'noaccess', 'rcheck', 'readonly', 'type', 'wcheck', 'xcheck',
        -
        -            'bytesavailable', 'closefile', 'currentfile', 'echo', 'file',
        -            'flush', 'flushfile', 'print', 'prompt', 'pstack', 'read',
        -            'readhexstring', 'readline', 'readstring', 'resetfile', 'restore',
        -            'run', 'save', 'stack', 'status', 'vmstatus', 'write',
        -            'writehexstring', 'writestring',
        -
        -            'bind', 'usertime',
        -
        -            'currentdash', 'currentflat', 'currentgray', 'currenthsbcolor',
        -            'currentlinecap', 'currentlinejoin', 'currentlinewidth',
        -            'currentmiterlimit', 'currentrgbcolor', 'currentscreen',
        -            'currenttransfer', 'grestore', 'grestoreall', 'gsave',
        -            'initgraphics', 'proc', 'setdash', 'setflat', 'setgray',
        -            'sethsbcolor', 'setlinecap', 'setlinejoin', 'setlinewidth',
        -            'setmiterlimit', 'setrgbcolor', 'setscreen', 'settransfer',
        -
        -            'concat', 'concatmatrix', 'currentmatrix', 'defaultmatrix',
        -            'dtransform', 'identmatrix', 'idtransform', 'initmatrix',
        -            'invertmatrix', 'itransform', 'rotate', 'scale', 'setmatrix',
        -            'transform', 'translate',
        -
        -            'arc', 'arcn', 'arcto', 'charpath', 'clip', 'clippath', 'closepath',
        -            'currentpoint', 'curveto', 'eoclip', 'eofill', 'erasepage', 'fill',
        -            'flattenpath', 'image', 'imagemask', 'initclip', 'lineto', 'moveto',
        -            'newpath', 'pathbbox', 'pathforall', 'rcurveto', 'reversepath',
        -            'rlineto', 'rmoveto', 'stroke', 'strokepath',
        -
        -            'banddevice', 'copypage', 'framedevice', 'nulldevice', 'renderbands',
        -            'showpage',
        -
        -            'ashow', 'awidthshow', 'currentfont', 'definefont', 'findfont',
        -            'fontdict', 'kshow', 'makefont', 'scalefont', 'setfont', 'show',
        -            'stringwidth', 'widthshow', 'FontDirectory', 'StandardEncoding',
        -
        -            'cachestatus', 'setcachedevice', 'setcachelimit', 'setcharwidth',
        -
        -            'dictfull', 'dictstackoverflow', 'dictstackunderflow',
        -            'execstackoverflow', 'handleerror', 'interrupt', 'invalidaccess',
        -            'invalidexit', 'invalidfileaccess', 'invalidfont', 'invalidrestore',
        -            'ioerror', 'limitcheck', 'nocurrentpoint', 'rangecheck',
        -            'stackoverflow', 'stackunderflow', 'syntaxerror', 'timeout',
        -            'typecheck', 'undefined', 'undefinedfilename', 'undefinedresult',
        -            'unmatchedmark', 'unregistered', 'VMerror'
        -            ),
        -        4 => array(
        -            'array', 'dict', 'mark', 'matrix', 'string'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('==', '=', '/', '//'),
        -        1 => array('[', ']'),
        -        2 => array('{', '}'),
        -        3 => array('<<', '>>')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000066; font-weight: bold;',
        -            2 => 'color: #0000ff; font-weight: bold;',
        -            3 => 'color: #000000; font-weight: bold;',
        -            4 => 'color: #993333; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #333333; font-style: italic;',
        -            1 => 'color: #339933;',
        -            2 => 'color: #006600;',
        -            3 => 'color: #666666;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            'HARD' => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            1 => 'color: #009900;',
        -            2 => 'color: #009900;',
        -            3 => 'color: #009900;'
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        1 => "#(?<=\\x2F)[\\w-]+#"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php
        deleted file mode 100644
        index 19d6c38e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php
        +++ /dev/null
        @@ -1,198 +0,0 @@
        - 'POVRAY',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'yes', 'wrinkles', 'wood', 'width', 'waves', 'water_level', 'warp', 'vturbulence',
        -            'vstr', 'vrotate', 'vnormalize', 'vlength', 'vcross', 'vaxis_rotate', 'variance', 'v_steps',
        -            'uv_mapping', 'utf8', 'use_index', 'use_colour', 'use_color', 'use_alpha', 'up', 'undef',
        -            'ultra_wide_angle', 'u_steps', 'type', 'turbulence', 'turb_depth', 'ttf', 'true', 'triangle_wave',
        -            'translate', 'transform', 'trace', 'toroidal', 'tolerance', 'tiles', 'tile2', 'tightness',
        -            'tiff', 'threshold', 'thickness', 'tga', 'texture_map', 'target', 'sys', 'sum',
        -            'substr', 'sturm', 'strupr', 'strlwr', 'strength', 'str', 'statistics', 'sqr',
        -            'spotted', 'spotlight', 'split_union', 'spline', 'spiral2', 'spiral1', 'spherical', 'specular',
        -            'spacing', 'solid', 'smooth', 'slope', 'slice', 'sky', 'size', 'sine_wave',
        -            'shadowless', 'scattering', 'scallop_wave', 'scale', 'save_file', 'samples', 'roughness', 'rotate',
        -            'ripples', 'right', 'rgbt', 'rgbft', 'rgbf', 'rgb', 'repeat', 'render',
        -            'refraction', 'reflection_exponent', 'recursion_limit', 'reciprocal', 'ratio', 'ramp_wave', 'radius', 'radial',
        -            'quilted', 'quick_colour', 'quick_color', 'quaternion', 'quadratic_spline', 'pwr', 'projected_through', 'prod',
        -            'pretrace_start', 'pretrace_end', 'precompute', 'precision', 'ppm', 'pow', 'pot', 'poly_wave',
        -            'point_at', 'png', 'planar', 'pigment_pattern', 'pi', 'phong_size', 'phong', 'phase',
        -            'pgm', 'perspective', 'pattern', 'pass_through', 'parallel', 'panoramic', 'orthographic', 'orientation',
        -            'orient', 'open', 'onion', 'once', 'on', 'omnimax', 'omega', 'offset',
        -            'off', 'octaves', 'number_of_waves', 'noise_generator', 'no_shadow', 'no_reflection', 'no_image', 'no_bump_scale',
        -            'no', 'nearest_count', 'natural_spline', 'mortar', 'minimum_reuse', 'min_extent', 'metric', 'method',
        -            'metallic', 'media_interaction', 'media_attenuation', 'media', 'max_trace_level', 'max_trace', 'max_sample', 'max_iteration',
        -            'max_intersections', 'max_gradient', 'max_extent', 'matrix', 'material_map', 'marble', 'map_type', 'mandel',
        -            'major_radius', 'magnet', 'low_error_factor', 'look_at', 'location', 'load_file', 'linear_sweep', 'linear_spline',
        -            'leopard', 'lambda', 'julia', 'jpeg', 'jitter', 'irid_wavelength', 'ior', 'inverse',
        -            'intervals', 'interpolate', 'internal', 'inside_vector', 'inside', 'initial_frame', 'initial_clock', 'image_width',
        -            'image_pattern', 'image_height', 'iff', 'hypercomplex', 'hollow', 'hierarchy', 'hf_gray_16', 'hexagon',
        -            'gray_threshold', 'granite', 'gradient', 'global_lights', 'gif', 'gather', 'fresnel', 'frequency',
        -            'frame_number', 'form', 'fog_type', 'fog_offset', 'fog_alt', 'focal_point', 'flip', 'flatness',
        -            'fisheye', 'final_frame', 'final_clock', 'false', 'falloff_angle', 'falloff', 'fade_power', 'fade_distance',
        -            'fade_colour', 'fade_color', 'facets', 'extinction', 'exterior', 'exponent', 'expand_thresholds', 'evaluate',
        -            'error_bound', 'emission', 'eccentricity', 'double_illuminate', 'distance', 'dist_exp', 'dispersion_samples', 'dispersion',
        -            'direction', 'diffuse', 'df3', 'dents', 'density_map', 'density_file', 'density', 'cylindrical',
        -            'cutaway_textures', 'cubic_wave', 'cubic_spline', 'cube', 'crand', 'crackle', 'count', 'coords',
        -            'control1', 'control0', 'conserve_energy', 'conic_sweep', 'confidence', 'concat', 'composite', 'component',
        -            'colour_map', 'colour', 'color', 'collect', 'clock_on', 'clock_delta', 'clock', 'circular',
        -            'chr', 'checker', 'charset', 'cells', 'caustics', 'bumps', 'bump_size', 'brilliance',
        -            'brightness', 'brick_size', 'brick', 'bozo', 'boxed', 'blur_samples', 'black_hole', 'bezier_spline',
        -            'b_spline', 'average', 'autostop', 'assumed_gamma', 'ascii', 'array', 'area_light', 'arc_angle',
        -            'append', 'aperture', 'angle', 'ambient_light', 'ambient', 'always_sample', 'altitude', 'alpha',
        -            'all_intersections', 'all', 'agate_turb', 'agate', 'adc_bailout', 'adaptive', 'accuracy', 'absorption',
        -            'aa_threshold', 'aa_level', 'reflection'
        -            ),
        -        2 => array(
        -            'abs', 'acos', 'acosh', 'asc', 'asin', 'asinh', 'atan', 'atanh',
        -            'atan2', 'ceil', 'cos', 'cosh', 'defined', 'degrees', 'dimensions', 'dimension_size',
        -            'div', 'exp', 'file_exists', 'floor', 'int', 'ln', 'log', 'max',
        -            'min', 'mod', 'pov', 'radians', 'rand', 'seed', 'select', 'sin',
        -            'sinh', 'sqrt', 'strcmp', 'strlen', 'tan', 'tanh', 'val', 'vdot',
        -            'vlenght',
        -            ),
        -        3 => array (
        -            'x', 'y', 'z', 't', 'u', 'v', 'red', 'blue',
        -            'green', 'filter', 'transmit', 'gray', 'e',
        -            ),
        -        4 => array (
        -            'camera', 'background', 'fog', 'sky_sphere', 'rainbow', 'global_settings', 'radiosity', 'photon',
        -            'object', 'blob', 'sphere', 'cylinder', 'box', 'cone', 'height_field', 'julia_fractal',
        -            'lathe', 'prism', 'sphere_sweep', 'superellipsoid', 'sor', 'text', 'torus', 'bicubic_patch',
        -            'disc', 'mesh', 'triangle', 'smooth_triangle', 'mesh2', 'vertex_vectors', 'normal_vectors', 'uv_vectors',
        -            'texture_list', 'face_indices', 'normal_indices', 'uv_indices', 'texture', 'polygon', 'plane', 'poly',
        -            'cubic', 'quartic', 'quadric', 'isosurface', 'function', 'contained_by', 'parametric', 'pigment',
        -            'union', 'intersection', 'difference', 'merge', 'light_source', 'looks_like', 'light_group', 'clipped_by',
        -            'bounded_by', 'interior', 'material', 'interior_texture', 'normal', 'finish', 'color_map', 'pigment_map',
        -            'image_map', 'bump_map', 'slope_map', 'normal_map', 'irid', 'photons',
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '!',
        -        '@', '%', '&', '*', '|', '/', '<',
        -        '>', '+', '-', '.', '=', '<=', '>=',
        -        '!=',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #a63123;',
        -            2 => 'color: #2312bc;',
        -            3 => 'color: #cc1122; font-weight: bold;',
        -            4 => 'color: #116688; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -//            2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66aa;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #6666cc; font-weight: bold;',
        -            1 => 'color: #66cc66; font-weight: bold;',
        -            2 => 'color: #66cc66; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        # normal hash lines
        -        0 => '\#(?!(include|declare|local|fopen|fclose|read|write|default|version|if|else|end|ifdef|ifndef|switch|case|range|break|while|debug|error|warning|macro) )[[:word:]]*',
        -        # syntax functions hash thingis
        -        1 => "\#(include|declare|local|fopen|fclose|read|write|default|version|if|else|end|ifdef|ifndef|switch|case|range|break|while|debug|error|warning|macro)",
        -        2 => array(
        -            GESHI_SEARCH  => "([a-zA-Z]+)(\n)(.*)(\n)(\\1;?)",
        -            GESHI_REPLACE => '\3',
        -            GESHI_BEFORE => '\1\2',
        -            GESHI_AFTER => '\4\5',
        -            GESHI_MODIFIERS => 'siU'
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true,
        -        2 => true,
        -        3 => true
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php
        deleted file mode 100644
        index 7b5c4fd8..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php
        +++ /dev/null
        @@ -1,416 +0,0 @@
        - 'PowerBuilder',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '~',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'alias', 'and', 'autoinstantiate', 'call',
        -            'case', 'catch', 'choose', 'close', 'commit', 'connect',
        -            'constant', 'continue', 'create', 'cursor', 'declare',
        -            'delete', 'describe', 'descriptor', 'destroy', 'disconnect',
        -            'do', 'dynamic', 'else', 'elseif', 'end', 'enumerated',
        -            'event', 'execute', 'exit', 'external', 'false', 'fetch',
        -            'first', 'for', 'forward', 'from', 'function', 'global',
        -            'goto', 'halt', 'if', 'immediate', 'indirect', 'insert',
        -            'into', 'intrinsic', 'is', 'last', 'library', 'loop', 'next',
        -            'not', 'of', 'on', 'open', 'or', 'parent', 'post', 'prepare',
        -            'prior', 'private', 'privateread', 'privatewrite', 'procedure',
        -            'protected', 'protectedread', 'protectedwrite', 'prototypes',
        -            'public', 'readonly', 'ref', 'return', 'rollback', 'rpcfunc',
        -            'select', 'selectblob', 'shared', 'static', 'step', 'subroutine',
        -            'super', 'system', 'systemread', 'systemwrite', 'then', 'this',
        -            'to', 'trigger', 'true', 'try', 'type', 'until', 'update', 'updateblob',
        -            'using', 'variables', 'where', 'while', 'with', 'within'
        -            ),
        -        2 => array (
        -            'blob', 'boolean', 'char', 'character', 'date', 'datetime',
        -            'dec', 'decimal',
        -            'double', 'int', 'integer', 'long', 'real', 'string', 'time',
        -            'uint', 'ulong', 'unsignedint', 'unsignedinteger', 'unsignedlong'
        -            ),
        -        3 => array (
        -            'abortretryignore!', 'actbegin!', 'acterror!', 'actesql!',
        -            'actgarbagecollect!', 'activate!', 'activatemanually!',
        -            'activateondoubleclick!',
        -            'activateongetfocus!', 'actline!', 'actobjectcreate!', 'actobjectdestroy!',
        -            'actprofile!', 'actroutine!', 'acttrace!', 'actual!',
        -            'actuser!', 'adoresultset!', 'adtdate!', 'adtdatetime!',
        -            'adtdefault!', 'adtdouble!', 'adttext!', 'adttime!',
        -            'aix!', 'alignatbottom!', 'alignatleft!', 'alignatright!',
        -            'alignattop!', 'all!', 'allowpartialchanges!', 'alpha!',
        -            'ansi!', 'any!', 'anycase!', 'anyfont!',
        -            'append!', 'application!', 'arabiccharset!', 'area3d!',
        -            'areagraph!', 'arraybounds!', 'arrow!', 'ascending!',
        -            'asstatement!', 'atbottom!', 'atleft!', 'atright!',
        -            'attop!', 'autosize!', 'background!', 'balticcharset!',
        -            'bar3dgraph!', 'bar3dobjgraph!', 'bargraph!', 'barstack3dobjgraph!',
        -            'barstackgraph!', 'bdiagonal!', 'beam!', 'begin!',
        -            'begindrag!', 'beginlabeledit!', 'beginrightdrag!', 'behind!',
        -            'blob!', 'bold!', 'boolean!', 'bottom!',
        -            'boundedarray!', 'box!', 'byreferenceargument!', 'byvalueargument!',
        -            'cancel!', 'cascade!', 'cascaded!', 'category!',
        -            'center!', 'character!', 'charsetansi!', 'charsetansiarabic!',
        -            'charsetansihebrew!', 'charsetdbcsjapanese!', 'charsetunicode!', 'checkbox!',
        -            'child!', 'childtreeitem!', 'chinesebig5!', 'classdefinition!',
        -            'classdefinitionobject!', 'classorstructuretype!', 'clicked!', 'clip!',
        -            'clipboard!', 'clipformatbitmap!', 'clipformatdib!', 'clipformatdif!',
        -            'clipformatenhmetafile!', 'clipformathdrop!', 'clipformatlocale!',
        -            'clipformatmetafilepict!',
        -            'clipformatoemtext!', 'clipformatpalette!', 'clipformatpendata!', 'clipformatriff!',
        -            'clipformatsylk!', 'clipformattext!', 'clipformattiff!', 'clipformatunicodetext!',
        -            'clipformatwave!', 'clock!', 'close!', 'closequery!',
        -            'col3dgraph!', 'col3dobjgraph!', 'colgraph!',
        -            'colstack3dobjgraph!', 'colstackgraph!', 'columnclick!', 'commandbutton!',
        -            'connection!', 'connectioninfo!', 'connectobject!', 'connectprivilege!',
        -            'connectwithadminprivilege!', 'constructor!', 'containsany!', 'containsembeddedonly!',
        -            'containslinkedonly!', 'contextinformation!', 'contextkeyword!', 'continuous!',
        -            'corbaobject!', 'corbaunion!', 'cplusplus!', 'cross!',
        -            'csv!', 'cumulative!', 'cumulativepercent!', 'currenttreeitem!',
        -            'customvisual!', 'dash!', 'dashdot!', 'dashdotdot!',
        -            'data!', 'datachange!', 'datamodified!', 'datastore!',
        -            'datawindow!', 'datawindowchild!', 'date!', 'datemask!',
        -            'datetime!', 'datetimemask!', 'dbase2!', 'dbase3!',
        -            'dberror!', 'deactivate!', 'decimal!', 'decimalmask!',
        -            'decorative!', 'default!', 'defaultcharset!', 'delete!',
        -            'deleteallitems!', 'deleteitem!', 'descending!', 'desktop!',
        -            'destructor!', 'detail!', 'diamond!', 'dif!',
        -            'dirall!', 'dirapplication!', 'dirdatawindow!', 'directionall!',
        -            'directiondown!', 'directionleft!', 'directionright!', 'directionup!',
        -            'dirfunction!', 'dirmenu!', 'dirpipeline!', 'dirproject!',
        -            'dirquery!', 'dirstructure!', 'diruserobject!', 'dirwindow!',
        -            'displayasactivexdocument!', 'displayascontent!', 'displayasicon!', 'dot!',
        -            'double!', 'doubleclicked!', 'dragdrop!', 'dragenter!',
        -            'dragleave!', 'dragobject!', 'dragwithin!', 'drawobject!',
        -            'dropdownlistbox!', 'dropdownpicturelistbox!', 'drophighlighttreeitem!', 'dwobject!',
        -            'dynamicdescriptionarea!', 'dynamicstagingarea!', 'easteuropecharset!', 'editchanged!',
        -            'editmask!', 'editmenu!', 'end!', 'endlabeledit!',
        -            'enterprise!', 'enterpriseonlyfeature!', 'enumeratedtype!', 'enumerationdefinition!',
        -            'enumerationitemdefinition!', 'environment!', 'error!', 'errorlogging!',
        -            'eventnotexisterror!', 'eventwrongprototypeerror!', 'excel!', 'excel5!',
        -            'exceptionfail!', 'exceptionignore!', 'exceptionretry!',
        -            'exceptionsubstitutereturnvalue!',
        -            'exclamation!', 'exclude!', 'exportapplication!', 'exportdatawindow!',
        -            'exportfunction!', 'exportmenu!', 'exportpipeline!', 'exportproject!',
        -            'exportquery!', 'exportstructure!', 'exportuserobject!', 'exportwindow!',
        -            'externalvisual!', 'extobject!', 'failonanyconflict!', 'fdiagonal!',
        -            'featurenotsupportederror!', 'filealreadyopenerror!', 'filecloseerror!',
        -            'fileexists!',
        -            'fileinvalidformaterror!', 'filemenu!', 'filenotopenerror!', 'filenotseterror!',
        -            'filereaderror!', 'filetyperichtext!', 'filetypetext!', 'filewriteerror!',
        -            'filter!', 'first!', 'firstvisibletreeitem!', 'fixed!',
        -            'floating!', 'focusrect!', 'footer!', 'foreground!',
        -            'frombeginning!', 'fromcurrent!', 'fromend!', 'functionobject!',
        -            'gb231charset!', 'getfocus!', 'graph!', 'graphicobject!',
        -            'graxis!', 'grdispattr!', 'greekcharset!', 'groupbox!',
        -            'hand!', 'hangeul!', 'header!', 'hebrewcharset!',
        -            'helpmenu!', 'hide!', 'horizontal!', 'hotlinkalarm!',
        -            'hourglass!', 'hppa!', 'hprogressbar!', 'hpux!',
        -            'hscrollbar!', 'hticksonboth!', 'hticksonbottom!', 'hticksonneither!',
        -            'hticksontop!', 'htmltable!', 'htrackbar!', 'i286!',
        -            'i386!', 'i486!', 'icon!', 'icons!',
        -            'idle!', 'importdatawindow!', 'indent!', 'index!',
        -            'inet!', 'information!', 'inplace!', 'inputfieldselected!',
        -            'insertitem!', 'inside!', 'integer!', 'internetresult!',
        -            'italic!', 'itemchanged!', 'itemchanging!', 'itemcollapsed!',
        -            'itemcollapsing!', 'itemerror!', 'itemexpanded!', 'itemexpanding!',
        -            'itemfocuschanged!', 'itempopulate!', 'jaguarorb!', 'johabcharset!',
        -            'justify!', 'key!', 'key0!', 'key1!',
        -            'key2!', 'key3!', 'key4!', 'key5!',
        -            'key6!', 'key7!', 'key8!', 'key9!',
        -            'keya!', 'keyadd!', 'keyalt!', 'keyapps!',
        -            'keyb!', 'keyback!', 'keybackquote!', 'keybackslash!',
        -            'keyc!', 'keycapslock!', 'keycomma!', 'keycontrol!',
        -            'keyd!', 'keydash!', 'keydecimal!', 'keydelete!',
        -            'keydivide!', 'keydownarrow!', 'keye!', 'keyend!',
        -            'keyenter!', 'keyequal!', 'keyescape!', 'keyf!',
        -            'keyf1!', 'keyf10!', 'keyf11!', 'keyf12!',
        -            'keyf2!', 'keyf3!', 'keyf4!', 'keyf5!',
        -            'keyf6!', 'keyf7!', 'keyf8!', 'keyf9!',
        -            'keyg!', 'keyh!', 'keyhome!', 'keyi!',
        -            'keyinsert!', 'keyj!', 'keyk!', 'keyl!',
        -            'keyleftarrow!', 'keyleftbracket!', 'keyleftbutton!', 'keyleftwindows!',
        -            'keym!', 'keymiddlebutton!', 'keymultiply!', 'keyn!',
        -            'keynull!', 'keynumlock!', 'keynumpad0!', 'keynumpad1!',
        -            'keynumpad2!', 'keynumpad3!', 'keynumpad4!', 'keynumpad5!',
        -            'keynumpad6!', 'keynumpad7!', 'keynumpad8!', 'keynumpad9!',
        -            'keyo!', 'keyp!', 'keypagedown!', 'keypageup!',
        -            'keypause!', 'keyperiod!', 'keyprintscreen!', 'keyq!',
        -            'keyquote!', 'keyr!', 'keyrightarrow!', 'keyrightbracket!',
        -            'keyrightbutton!', 'keyrightwindows!', 'keys!', 'keyscrolllock!',
        -            'keysemicolon!', 'keyshift!', 'keyslash!', 'keyspacebar!',
        -            'keysubtract!', 'keyt!', 'keytab!', 'keyu!',
        -            'keyuparrow!', 'keyv!', 'keyw!', 'keyword!',
        -            'keyx!', 'keyy!', 'keyz!', 'languageafrikaans!',
        -            'languagealbanian!', 'languagearabicalgeria!', 'languagearabicbahrain!',
        -            'languagearabicegypt!',
        -            'languagearabiciraq!', 'languagearabicjordan!', 'languagearabickuwait!',
        -            'languagearabiclebanon!',
        -            'languagearabiclibya!', 'languagearabicmorocco!', 'languagearabicoman!',
        -            'languagearabicqatar!',
        -            'languagearabicsaudiarabia!', 'languagearabicsyria!', 'languagearabictunisia!',
        -            'languagearabicuae!',
        -            'languagearabicyemen!', 'languagebasque!', 'languagebulgarian!', 'languagebyelorussian!',
        -            'languagecatalan!', 'languagechinese!', 'languagechinesehongkong!', 'languagechinesesimplified!',
        -            'languagechinesesingapore!', 'languagechinesetraditional!', 'languagecroatian!', 'languageczech!',
        -            'languagedanish!', 'languagedutch!', 'languagedutchbelgian!', 'languagedutchneutral!',
        -            'languageenglish!', 'languageenglishaustralian!', 'languageenglishcanadian!',
        -            'languageenglishirish!',
        -            'languageenglishnewzealand!', 'languageenglishsouthafrica!', 'languageenglishuk!',
        -            'languageenglishus!',
        -            'languageestonian!', 'languagefaeroese!', 'languagefarsi!', 'languagefinnish!',
        -            'languagefrench!', 'languagefrenchbelgian!', 'languagefrenchcanadian!', 'languagefrenchluxembourg!',
        -            'languagefrenchneutral!', 'languagefrenchswiss!', 'languagegerman!', 'languagegermanaustrian!',
        -            'languagegermanliechtenstein!', 'languagegermanluxembourg!', 'languagegermanneutral!',
        -            'languagegermanswiss!',
        -            'languagegreek!', 'languagehebrew!', 'languagehindi!', 'languagehungarian!',
        -            'languageicelandic!', 'languageindonesian!', 'languageitalian!', 'languageitalianneutral!',
        -            'languageitalianswiss!', 'languagejapanese!', 'languagekorean!', 'languagekoreanjohab!',
        -            'languagelatvian!', 'languagelithuanian!', 'languagemacedonian!', 'languagemaltese!',
        -            'languageneutral!', 'languagenorwegian!', 'languagenorwegianbokmal!', 'languagenorwegiannynorsk!',
        -            'languagepolish!', 'languageportuguese!', 'languageportuguese_brazilian!',
        -            'languageportugueseneutral!',
        -            'languagerhaetoromanic!', 'languageromanian!', 'languageromanianmoldavia!', 'languagerussian!',
        -            'languagerussianmoldavia!', 'languagesami!', 'languageserbian!', 'languageslovak!',
        -            'languageslovenian!', 'languagesorbian!', 'languagesortnative!', 'languagesortunicode!',
        -            'languagespanish!', 'languagespanishcastilian!', 'languagespanishmexican!', 'languagespanishmodern!',
        -            'languagesutu!', 'languageswedish!', 'languagesystemdefault!', 'languagethai!',
        -            'languagetsonga!', 'languagetswana!', 'languageturkish!', 'languageukrainian!',
        -            'languageurdu!', 'languageuserdefault!', 'languagevenda!', 'languagexhosa!',
        -            'languagezulu!', 'last!', 'layer!', 'layered!',
        -            'Left!', 'leftmargin!', 'line!', 'line3d!',
        -            'linear!', 'linecolor!', 'linedown!', 'linegraph!',
        -            'lineleft!', 'linemode!', 'lineright!', 'lineup!',
        -            'linkupdateautomatic!', 'linkupdatemanual!', 'listbox!', 'listview!',
        -            'listviewitem!', 'listviewlargeicon!', 'listviewlist!', 'listviewreport!',
        -            'listviewsmallicon!', 'lockread!', 'lockreadwrite!', 'lockwrite!',
        -            'log10!', 'loge!', 'long!', 'losefocus!',
        -            'lower!', 'lowered!', 'm68000!', 'm68020!',
        -            'm68030!', 'm68040!', 'maccharset!', 'macintosh!',
        -            'mailattach!', 'mailbcc!', 'mailbodyasfile!', 'mailcc!',
        -            'maildownload!', 'mailentiremessage!', 'mailenvelopeonly!', 'mailfiledescription!',
        -            'mailmessage!', 'mailnewsession!', 'mailnewsessionwithdownload!', 'mailole!',
        -            'mailolestatic!', 'mailoriginator!', 'mailrecipient!', 'mailreturnaccessdenied!',
        -            'mailreturnattachmentnotfound!', 'mailreturnattachmentopenfailure!',
        -            'mailreturnattachmentwritefailure!', 'mailreturndiskfull!',
        -            'mailreturnfailure!', 'mailreturninsufficientmemory!', 'mailreturninvalidmessage!',
        -            'mailreturnloginfailure!',
        -            'mailreturnmessageinuse!', 'mailreturnnomessages!', 'mailreturnsuccess!', 'mailreturntexttoolarge!',
        -            'mailreturntoomanyfiles!', 'mailreturntoomanyrecipients!', 'mailreturntoomanysessions!',
        -            'mailreturnunknownrecipient!',
        -            'mailreturnuserabort!', 'mailsession!', 'mailsuppressattachments!', 'mailto!',
        -            'main!', 'maximized!', 'mdi!', 'mdiclient!',
        -            'mdihelp!', 'menu!', 'menucascade!', 'menuitemtypeabout!',
        -            'menuitemtypeexit!', 'menuitemtypehelp!', 'menuitemtypenormal!', 'merge!',
        -            'message!', 'minimized!', 'mips!', 'modelexistserror!',
        -            'modelnotexistserror!', 'modern!', 'modified!', 'mousedown!',
        -            'mousemove!', 'mouseup!', 'moved!', 'multiline!',
        -            'multilineedit!', 'mutexcreateerror!', 'new!', 'newmodified!',
        -            'next!', 'nexttreeitem!', 'nextvisibletreeitem!', 'noborder!',
        -            'noconnectprivilege!', 'nolegend!', 'none!', 'nonvisualobject!',
        -            'normal!', 'nosymbol!', 'notic!', 'notmodified!',
        -            'notopmost!', 'notype!', 'numericmask!', 'objhandle!',
        -            'oem!', 'off!', 'offsite!', 'ok!',
        -            'okcancel!', 'olecontrol!', 'olecustomcontrol!', 'oleobject!',
        -            'olestorage!', 'olestream!', 'oletxnobject!', 'omcontrol!',
        -            'omcustomcontrol!', 'omembeddedcontrol!', 'omobject!', 'omstorage!',
        -            'omstream!', 'open!', 'orb!', 'original!',
        -            'osf1!', 'other!', 'outside!', 'oval!',
        -            'pagedown!', 'pageleft!', 'pageright!', 'pageup!',
        -            'parenttreeitem!', 'pbtocppobject!', 'pentium!', 'percentage!',
        -            'picture!', 'picturebutton!', 'picturehyperlink!', 'picturelistbox!',
        -            'pictureselected!', 'pie3d!', 'piegraph!', 'pipeend!',
        -            'pipeline!', 'pipemeter!', 'pipestart!', 'popup!',
        -            'powerobject!', 'powerpc!', 'powerrs!', 'ppc601!',
        -            'ppc603!', 'ppc604!', 'previewdelete!', 'previewfunctionreselectrow!',
        -            'previewfunctionretrieve!', 'previewfunctionupdate!', 'previewinsert!', 'previewselect!',
        -            'previewupdate!', 'previoustreeitem!', 'previousvisibletreeitem!', 'primary!',
        -            'printend!', 'printfooter!', 'printheader!', 'printpage!',
        -            'printstart!', 'prior!', 'private!', 'process!',
        -            'profilecall!', 'profileclass!', 'profileline!', 'profileroutine!',
        -            'profiling!', 'protected!', 'psreport!', 'public!',
        -            'question!', 'radiobutton!', 'raised!', 'rbuttondown!',
        -            'rbuttonup!', 'read!', 'readonlyargument!', 'real!',
        -            'rectangle!', 'regbinary!', 'regexpandstring!', 'reglink!',
        -            'regmultistring!', 'regstring!', 'regulong!', 'regulongbigendian!',
        -            'remoteexec!', 'remotehotlinkstart!', 'remotehotlinkstop!', 'remoteobject!',
        -            'remoterequest!', 'remotesend!', 'rename!', 'replace!',
        -            'resize!', 'resizeborder!', 'response!', 'resultset!',
        -            'resultsets!', 'retrieveend!', 'retrieverow!', 'retrievestart!',
        -            'retrycancel!', 'richtextedit!', 'Right!', 'rightclicked!',
        -            'rightdoubleclicked!', 'rightmargin!', 'rnddays!', 'rnddefault!',
        -            'rndhours!', 'rndmicroseconds!', 'rndminutes!', 'rndmonths!',
        -            'rndnumber!', 'rndseconds!', 'rndyears!', 'roman!',
        -            'roottreeitem!', 'roundrectangle!', 'routineesql!', 'routineevent!',
        -            'routinefunction!', 'routinegarbagecollection!', 'routineobjectcreation!',
        -            'routineobjectdestruction!',
        -            'routineroot!', 'rowfocuschanged!', 'russiancharset!', 'save!',
        -            'scalartype!', 'scattergraph!', 'script!', 'scriptdefinition!',
        -            'scriptevent!', 'scriptfunction!', 'scrollhorizontal!', 'scrollvertical!',
        -            'selected!', 'selectionchanged!', 'selectionchanging!', 'series!',
        -            'service!', 'shade!', 'shadowbox!', 'shared!',
        -            'sharedobjectcreateinstanceerror!', 'sharedobjectcreatepbsessionerror!',
        -            'sharedobjectexistserror!', 'sharedobjectnotexistserror!',
        -            'shiftjis!', 'show!', 'simpletype!', 'simpletypedefinition!',
        -            'singlelineedit!', 'size!', 'sizenesw!', 'sizens!',
        -            'sizenwse!', 'sizewe!', 'sol2!', 'solid!',
        -            'sort!', 'sourcepblerror!', 'spacing1!', 'spacing15!',
        -            'spacing2!', 'sparc!', 'sqlinsert!', 'sqlpreview!',
        -            'square!', 'sslcallback!', 'sslserviceprovider!', 'statichyperlink!',
        -            'statictext!', 'stgdenynone!', 'stgdenyread!', 'stgdenywrite!',
        -            'stgexclusive!', 'stgread!', 'stgreadwrite!', 'stgwrite!',
        -            'stopsign!', 'straddle!', 'streammode!', 'stretch!',
        -            'strikeout!', 'string!', 'stringmask!', 'structure!',
        -            'stylebox!', 'stylelowered!', 'styleraised!', 'styleshadowbox!',
        -            'subscript!', 'success!', 'superscript!', 'swiss!',
        -            'sylk!', 'symbol!', 'symbolhollowbox!', 'symbolhollowcircle!',
        -            'symbolhollowdiamond!', 'symbolhollowdownarrow!', 'symbolhollowuparrow!', 'symbolplus!',
        -            'symbolsolidbox!', 'symbolsolidcircle!', 'symbolsoliddiamond!', 'symbolsoliddownarrow!',
        -            'symbolsoliduparrow!', 'symbolstar!', 'symbolx!', 'system!',
        -            'systemerror!', 'systemfunctions!', 'systemkey!', 'tab!',
        -            'tabsonbottom!', 'tabsonbottomandtop!', 'tabsonleft!', 'tabsonleftandright!',
        -            'tabsonright!', 'tabsonrightandleft!', 'tabsontop!', 'tabsontopandbottom!',
        -            'text!', 'thaicharset!', 'thread!', 'tile!',
        -            'tilehorizontal!', 'time!', 'timemask!', 'timer!',
        -            'timernone!', 'timing!', 'tobottom!', 'toolbarmoved!',
        -            'top!', 'topic!', 'topmost!', 'totop!',
        -            'traceactivitynode!', 'traceatomic!', 'tracebeginend!', 'traceerror!',
        -            'traceesql!', 'tracefile!', 'tracegarbagecollect!', 'tracegeneralerror!',
        -            'tracein!', 'traceline!', 'tracenomorenodes!', 'tracenotstartederror!',
        -            'traceobject!', 'traceout!', 'traceroutine!', 'tracestartederror!',
        -            'tracetree!', 'tracetreeerror!', 'tracetreeesql!', 'tracetreegarbagecollect!',
        -            'tracetreeline!', 'tracetreenode!', 'tracetreeobject!', 'tracetreeroutine!',
        -            'tracetreeuser!', 'traceuser!', 'transaction!', 'transactionserver!',
        -            'transparent!', 'transport!', 'treeview!', 'treeviewitem!',
        -            'turkishcharset!', 'typeboolean!', 'typecategory!', 'typecategoryaxis!',
        -            'typecategorylabel!', 'typedata!', 'typedate!', 'typedatetime!',
        -            'typedecimal!', 'typedefinition!', 'typedouble!', 'typegraph!',
        -            'typeinteger!', 'typelegend!', 'typelong!', 'typereal!',
        -            'typeseries!', 'typeseriesaxis!', 'typeserieslabel!', 'typestring!',
        -            'typetime!', 'typetitle!', 'typeuint!', 'typeulong!',
        -            'typeunknown!', 'typevalueaxis!', 'typevaluelabel!', 'ultrasparc!',
        -            'unboundedarray!', 'underline!', 'underlined!', 'unsignedinteger!',
        -            'unsignedlong!', 'unsorted!', 'uparrow!', 'updateend!',
        -            'updatestart!', 'upper!', 'userdefinedsort!', 'userobject!',
        -            'variable!', 'variableargument!', 'variablecardinalitydefinition!', 'variabledefinition!',
        -            'variableglobal!', 'variableinstance!', 'variablelocal!', 'variableshared!',
        -            'varlistargument!', 'vbxvisual!', 'vcenter!', 'vertical!',
        -            'vietnamesecharset!', 'viewchange!', 'vprogressbar!', 'vscrollbar!',
        -            'vticksonboth!', 'vticksonleft!', 'vticksonneither!', 'vticksonright!',
        -            'vtrackbar!', 'window!', 'windowmenu!', 'windowobject!',
        -            'windows!', 'windowsnt!', 'wk1!', 'wks!',
        -            'wmf!', 'write!', 'xpixelstounits!', 'xunitstopixels!',
        -            'xvalue!', 'yesno!', 'yesnocancel!', 'ypixelstounits!',
        -            'yunitstopixels!',
        -            'yvalue!',
        -            'zoom!'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -            0 => array('(', ')', '[', ']', '{', '}'),
        -            1 => array('|'),
        -            2 => array('+', '-', '*', '/'),
        -            3 => array('=', '<', '>', '^')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #008000; font-weight: bold;',
        -            2 => 'color: #990099; font-weight: bold;',
        -            3 => 'color: #330099; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #0000ff; font-weight: bold;',
        -            'MULTI' => 'color: #0000ff; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #800000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #330099; font-weight: bold;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;',
        -            1 => 'color: #ffff00; background-color:#993300; font-weight: bold',
        -            2 => 'color: #000000;',
        -            3 => 'color: #000000;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #800000; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php
        deleted file mode 100644
        index 2900abd4..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php
        +++ /dev/null
        @@ -1,275 +0,0 @@
        - 'PowerShell',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array('<#' => '#>'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '`',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            // Cmdlets
        -            'Add-Content', 'Add-History', 'Add-Member', 'Add-PSSnapin', 'Clear-Content', 'Clear-Item',
        -            'Clear-ItemProperty', 'Clear-Variable', 'Compare-Object', 'ConvertFrom-SecureString',
        -            'Convert-Path', 'ConvertTo-Html', 'ConvertTo-SecureString', 'Copy-Item', 'Copy-ItemProperty',
        -            'Export-Alias', 'Export-Clixml', 'Export-Console', 'Export-Csv', 'ForEach-Object',
        -            'Format-Custom', 'Format-List', 'Format-Table', 'Format-Wide', 'Get-Acl', 'Get-Alias',
        -            'Get-AuthenticodeSignature', 'Get-ChildItem', 'Get-Command', 'Get-Content', 'Get-Credential',
        -            'Get-Culture', 'Get-Date', 'Get-EventLog', 'Get-ExecutionPolicy', 'Get-Help', 'Get-History',
        -            'Get-Host', 'Get-Item', 'Get-ItemProperty', 'Get-Location', 'Get-Member',
        -            'Get-PfxCertificate', 'Get-Process', 'Get-PSDrive', 'Get-PSProvider', 'Get-PSSnapin',
        -            'Get-Service', 'Get-TraceSource', 'Get-UICulture', 'Get-Unique', 'Get-Variable',
        -            'Get-WmiObject', 'Group-Object', 'Import-Alias', 'Import-Clixml', 'Import-Csv',
        -            'Invoke-Expression', 'Invoke-History', 'Invoke-Item', 'Join-Path', 'Measure-Command',
        -            'Measure-Object', 'Move-Item', 'Move-ItemProperty', 'New-Alias', 'New-Item',
        -            'New-ItemProperty', 'New-Object', 'New-PSDrive', 'New-Service', 'New-TimeSpan',
        -            'New-Variable', 'Out-Default', 'Out-File', 'Out-Host', 'Out-Null', 'Out-Printer',
        -            'Out-String', 'Pop-Location', 'Push-Location', 'Read-Host', 'Remove-Item',
        -            'Remove-ItemProperty', 'Remove-PSDrive', 'Remove-PSSnapin', 'Remove-Variable', 'Rename-Item',
        -            'Rename-ItemProperty', 'Resolve-Path', 'Restart-Service', 'Resume-Service', 'Select-Object',
        -            'Select-String', 'Set-Acl', 'Set-Alias', 'Set-AuthenticodeSignature', 'Set-Content',
        -            'Set-Date', 'Set-ExecutionPolicy', 'Set-Item', 'Set-ItemProperty', 'Set-Location',
        -            'Set-PSDebug', 'Set-Service', 'Set-TraceSource', 'Set-Variable', 'Sort-Object', 'Split-Path',
        -            'Start-Service', 'Start-Sleep', 'Start-Transcript', 'Stop-Process', 'Stop-Service',
        -            'Stop-Transcript', 'Suspend-Service', 'Tee-Object', 'Test-Path', 'Trace-Command',
        -            'Update-FormatData', 'Update-TypeData', 'Where-Object', 'Write-Debug', 'Write-Error',
        -            'Write-Host', 'Write-Output', 'Write-Progress', 'Write-Verbose', 'Write-Warning'
        -            ),
        -        2 => array(
        -            // Aliases
        -            'ac', 'asnp', 'clc', 'cli', 'clp', 'clv', 'cpi', 'cpp', 'cvpa', 'diff', 'epal', 'epcsv', 'fc',
        -            'fl', 'ft', 'fw', 'gal', 'gc', 'gci', 'gcm', 'gdr', 'ghy', 'gi', 'gl', 'gm',
        -            'gp', 'gps', 'group', 'gsv', 'gsnp', 'gu', 'gv', 'gwmi', 'iex', 'ihy', 'ii', 'ipal', 'ipcsv',
        -            'mi', 'mp', 'nal', 'ndr', 'ni', 'nv', 'oh', 'rdr', 'ri', 'rni', 'rnp', 'rp', 'rsnp', 'rv',
        -            'rvpa', 'sal', 'sasv', 'sc', 'select', 'si', 'sl', 'sleep', 'sort', 'sp', 'spps', 'spsv', 'sv',
        -            'tee', 'write', 'cat', 'cd', 'clear', 'cp', 'h', 'history', 'kill', 'lp', 'ls',
        -            'mount', 'mv', 'popd', 'ps', 'pushd', 'pwd', 'r', 'rm', 'rmdir', 'echo', 'cls', 'chdir',
        -            'copy', 'del', 'dir', 'erase', 'move', 'rd', 'ren', 'set', 'type'
        -            ),
        -        3 => array(
        -            // Reserved words
        -            'break', 'continue', 'do', 'for', 'foreach', 'while', 'if', 'switch', 'until', 'where',
        -            'function', 'filter', 'else', 'elseif', 'in', 'return', 'param', 'throw', 'trap'
        -            ),
        -        4 => array(
        -            // Operators
        -            '-eq', '-ne', '-gt', '-ge', '-lt', '-le', '-ieq', '-ine', '-igt', '-ige', '-ilt', '-ile',
        -            '-ceq', '-cne', '-cgt', '-cge', '-clt', '-cle', '-like', '-notlike', '-match', '-notmatch',
        -            '-ilike', '-inotlike', '-imatch', '-inotmatch', '-clike', '-cnotlike', '-cmatch', '-cnotmatch',
        -            '-contains', '-notcontains', '-icontains', '-inotcontains', '-ccontains', '-cnotcontains',
        -            '-isnot', '-is', '-as', '-replace', '-ireplace', '-creplace', '-and', '-or', '-band', '-bor',
        -            '-not', '-bnot', '-f', '-casesensitive', '-exact', '-file', '-regex', '-wildcard'
        -            ),
        -        5 => array(
        -            // Options
        -            '-Year', '-Wrap', '-Word', '-Width', '-WhatIf', '-Wait', '-View', '-Verbose', '-Verb',
        -            '-Variable', '-ValueOnly', '-Value', '-Unique', '-UFormat', '-TypeName', '-Trace', '-TotalCount',
        -            '-Title', '-TimestampServer', '-TargetObject', '-Syntax', '-SyncWindow', '-Sum', '-String',
        -            '-Strict', '-Stream', '-Step', '-Status', '-Static', '-StartupType', '-Start', '-StackName',
        -            '-Stack', '-SourceId', '-SimpleMatch', '-ShowError', '-Separator', '-SecureString', '-SecureKey',
        -            '-SecondValue', '-SecondsRemaining', '-Seconds', '-Second', '-Scope', '-Root', '-Role',
        -            '-Resolve', '-RemoveListener', '-RemoveFileListener', '-Registered', '-ReferenceObject',
        -            '-Recurse', '-RecommendedAction', '-ReadCount', '-Quiet', '-Query', '-Qualifier', '-PSSnapin',
        -            '-PSProvider', '-PSHost', '-PSDrive', '-PropertyType', '-Property', '-Prompt', '-Process',
        -            '-PrependPath', '-PercentComplete', '-Pattern', '-PathType', '-Path', '-PassThru', '-ParentId',
        -            '-Parent', '-Parameter', '-Paging', '-OutVariable', '-OutBuffer', '-Option', '-OnType', '-Off',
        -            '-Object', '-Noun', '-NoTypeInformation', '-NoQualifier', '-NoNewline', '-NoElement',
        -            '-NoClobber', '-NewName', '-Newest', '-Namespace', '-Name', '-Month', '-Minutes', '-Minute',
        -            '-Minimum', '-Milliseconds', '-Message', '-MemberType', '-Maximum', '-LogName', '-LiteralPath',
        -            '-LiteralName', '-ListenerOption', '-List', '-Line', '-Leaf', '-Last', '-Key', '-ItemType',
        -            '-IsValid', '-IsAbsolute', '-InputObject', '-IncludeEqual', '-IncludeChain', '-Include',
        -            '-IgnoreWhiteSpace', '-Id', '-Hours', '-Hour', '-HideTableHeaders', '-Head', '-GroupBy',
        -            '-Functionality', '-Full', '-Format', '-ForegroundColor', '-Force', '-First', '-FilterScript',
        -            '-Filter', '-FilePath', '-Expression', '-ExpandProperty', '-Expand', '-ExecutionPolicy',
        -            '-ExcludeProperty', '-ExcludeDifferent', '-Exclude', '-Exception', '-Examples', '-ErrorVariable',
        -            '-ErrorRecord', '-ErrorId', '-ErrorAction', '-End', '-Encoding', '-DisplayName', '-DisplayHint',
        -            '-DisplayError', '-DifferenceObject', '-Detailed', '-Destination', '-Description', '-Descending',
        -            '-Depth', '-DependsOn', '-Delimiter', '-Debugger', '-Debug', '-Days', '-Day', '-Date',
        -            '-CurrentOperation', '-Culture', '-Credential', '-Count', '-Container', '-Confirm',
        -            '-ComputerName', '-Component', '-Completed', '-ComObject', '-CommandType', '-Command',
        -            '-Column', '-Class', '-ChildPath', '-Character', '-Certificate', '-CategoryTargetType',
        -            '-CategoryTargetName', '-CategoryReason', '-CategoryActivity', '-Category', '-CaseSensitive',
        -            '-Body', '-BinaryPathName', '-Begin', '-BackgroundColor', '-Average', '-AutoSize', '-Audit',
        -            '-AsString', '-AsSecureString', '-AsPlainText', '-As', '-ArgumentList', '-AppendPath', '-Append',
        -            '-Adjust', '-Activity', '-AclObject'
        -            ),
        -        6 => array(
        -            '_','args','DebugPreference','Error','ErrorActionPreference',
        -            'foreach','Home','Host','Input','LASTEXITCODE','MaximumAliasCount',
        -            'MaximumDriveCount','MaximumFunctionCount','MaximumHistoryCount',
        -            'MaximumVariableCount','OFS','PsHome',
        -            'ReportErrorShowExceptionClass','ReportErrorShowInnerException',
        -            'ReportErrorShowSource','ReportErrorShowStackTrace',
        -            'ShouldProcessPreference','ShouldProcessReturnPreference',
        -            'StackTrace','VerbosePreference','WarningPreference','PWD'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '=', '<', '>', '@', '|', '&', ',', '?',
        -        '+=', '-=', '*=', '/=', '%=', '*', '/', '%', '!', '+', '-', '++', '--'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #008080; font-weight: bold;',
        -            2 => 'color: #008080; font-weight: bold;',
        -            3 => 'color: #0000FF;',
        -            4 => 'color: #FF0000;',
        -            5 => 'color: #008080; font-style: italic;',
        -            6 => 'color: #000080;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;',
        -            'MULTI' => 'color: #008000;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #800000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #804000;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: pink;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: pink;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #800080;',
        -            3 => 'color: #008080;',
        -            4 => 'color: #008080;',
        -            5 => 'color: #800000;',
        -            6 => 'color: #000080;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => 'about:blank',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        // special after pipe
        -        3 => array(
        -            GESHI_SEARCH => '(\[)(int|long|string|char|bool|byte|double|decimal|float|single|regex|array|xml|scriptblock|switch|hashtable|type|ref|psobject|wmi|wmisearcher|wmiclass|object)((\[.*\])?\])',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => 'si',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => '\3'
        -            ),
        -        // Classes
        -        4 => array(
        -            GESHI_SEARCH => '(\[)(System\.Reflection\.Assembly|System\.Net\.CredentialCache|Microsoft\.SharePoint\.SPFileLevel|Microsoft\.SharePoint\.Publishing\.PublishingWeb|Microsoft\.SharePoint\.Publishing|Microsoft\.SharePoint\.SPWeb)(\])',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => '\3'
        -            ),
        -        // Members
        -        // There's about a hundred million of these, add the ones you need as you need them
        -        5 => array (
        -            GESHI_SEARCH => '(::)(ReflectionOnlyLoadFrom|ReflectionOnlyLoad|ReferenceEquals|LoadWithPartialName|LoadFrom|LoadFile|Load|GetExecutingAssembly|GetEntryAssembly|GetCallingAssembly|GetAssembly|Equals|DefaultNetworkCredentials|DefaultCredentials|CreateQualifiedName|Checkout|Draft|Published|IsPublishingWeb)',
        -            GESHI_REPLACE => '\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\1',
        -            GESHI_AFTER => ''
        -            ),
        -        // Special variables
        -        6 => array(
        -            GESHI_SEARCH => '(\$)(\$[_\^]?|\?)(?!\w)',
        -            GESHI_REPLACE => '\1\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        // variables
        -        //BenBE: Please note that changes here and in Keyword group 6 have to be synchronized in order to work properly.
        -        //This Regexp must only match, if keyword group 6 doesn't. If this assumption fails
        -        //Highlighting of the keywords will be incomplete or incorrect!
        -        0 => "(?)[\\\$](\w+)(?=[^|\w])",
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            4 => array(
        -                'DISALLOWED_AFTER' => '(?![a-zA-Z])',
        -                'DISALLOWED_BEFORE' => ''
        -                ),
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?)\$'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php
        deleted file mode 100644
        index 0668eec9..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php
        +++ /dev/null
        @@ -1,372 +0,0 @@
        - 'ProFTPd configuration',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        /*keywords*/
        -        1 => array(
        -            //mod_auth
        -            'AccessDenyMsg', 'AccessGrantMsg', 'AnonRejectePasswords',
        -            'AnonRequirePassword', 'AuthAliasOnly', 'AuthUsingAlias',
        -            'CreateHome', 'DefaultChdir', 'DefaultRoot', 'GroupPassword',
        -            'LoginPasswordPrompt', 'MaxClients', 'MaxClientsPerClass',
        -            'MaxClientsPerHost', 'MaxClientsPerUser', 'MaxConnectionsPerHost',
        -            'MaxHostsPerUser', 'MaxLoginAttempts', 'RequireValidShell',
        -            'RootLogin', 'RootRevoke', 'TimeoutLogin', 'TimeoutSession',
        -            'UseFtpUsers', 'UserAlias', 'UserDirRoot', 'UserPassword',
        -
        -            //mod_auth_file
        -            'AuthGroupFile', 'AuthUserFile',
        -
        -            //mod_auth_pam
        -            'AuthPAM', 'AuthPAMConfig',
        -
        -            //mod_auth_unix
        -            'PersistentPasswd',
        -
        -            //mod_ban
        -            'BanControlsACLs', 'BanEngine', 'BanLog', 'BanMessage', 'BanOnEvent',
        -            'BanTable',
        -
        -            //mod_cap
        -            'CapabilitiesEngine', 'CapabilitiesSet',
        -
        -            //mod_core
        -            'Allow', 'AllowAll', 'AllowClass', 'AllowFilter',
        -            'AllowForeignAddress', 'AllowGroup', 'AllowOverride',
        -            'AllowRetrieveRestart', 'AllowStoreRestart', 'AllowUser',
        -            'AnonymousGroup', 'AuthOrder', 'Bind', 'CDPath', 'Class', 'Classes',
        -            'CommandBufferSize', 'DebugLevel', 'DefaultAddress',
        -            'DefaultServer', 'DefaultTransferMode', 'DeferWelcome', 'Define',
        -            'Deny', 'DenyAll', 'DenyClass', 'DenyFilter', 'DenyGroup',
        -            'DenyUser', 'DisplayChdir', 'DisplayConnect', 'DisplayFirstChdir',
        -            'DisplayGoAway', 'DisplayLogin', 'DisplayQuit', 'From', 'Group',
        -            'GroupOwner', 'HideFiles', 'HideGroup', 'HideNoAccess', 'HideUser',
        -            'IdentLookups', 'IgnoreHidden', 'Include', 'MasqueradeAddress',
        -            'MaxConnectionRate', 'MaxInstances', 'MultilineRFC2228', 'Order',
        -            'PassivePorts', 'PathAllowFilter', 'PathDenyFilter', 'PidFile',
        -            'Port', 'RLimitCPU', 'RLimitMemory', 'RLimitOpenFiles', 'Satisfy',
        -            'ScoreboardFile', 'ServerAdmin', 'ServerIdent', 'ServerName',
        -            'ServerType', 'SetEnv', 'SocketBindTight', 'SocketOptions',
        -            'SyslogFacility', 'SyslogLevel', 'tcpBackLog', 'tcpNoDelay',
        -            'TimeoutIdle', 'TimeoutLinger', 'TimesGMT', 'TransferLog', 'Umask',
        -            'UnsetEnv', 'UseIPv6', 'User', 'UseReverseDNS', 'UserOwner',
        -            'UseUTF8', 'WtmpLog',
        -
        -            //mod_ctrls_admin
        -            'AdminControlsACLs', 'AdminControlsEngine',
        -
        -            //mod_delay
        -            'DelayEngine', 'DelayTable',
        -
        -            //mod_dynmasq
        -            'DynMasqRefresh',
        -
        -            //mod_exec
        -            'ExecBeforeCommand', 'ExecEngine', 'ExecEnviron', 'ExecLog',
        -            'ExecOnCommand', 'ExecOnConnect', 'ExecOnError', 'ExecOnEvent',
        -            'ExecOnExit', 'ExecOnRestart', 'ExecOptions', 'ExecTimeout',
        -
        -            //mod_ldap
        -            'LDAPAliasDereference', 'LDAPAttr', 'LDAPAuthBinds',
        -            'LDAPDefaultAuthScheme', 'LDAPDefaultGID', 'LDAPDefaultUID',
        -            'LDAPDNInfo', 'LDAPDoAuth', 'LDAPDoGIDLookups',
        -            'LDAPDoQuotaLookups', 'LDAPDoUIDLookups',
        -            'LDAPForceGeneratedHomedir', 'LDAPForceHomedirOnDemand',
        -            'LDAPGenerateHomedir', 'LDAPGenerateHomedirPrefix',
        -            'LDAPGenerateHomedirPrefixNoUsername', 'LDAPHomedirOnDemand',
        -            'LDAPHomedirOnDemandPrefix', 'LDAPHomedirOnDemandPrefixNoUsername',
        -            'LDAPHomedirOnDemandSuffix', 'LDAPNegativeCache',
        -            'LDAPProtocolVersion', 'LDAPQueryTimeout', 'LDAPSearchScope',
        -            'LDAPServer',
        -
        -            //mod_load
        -            'MaxLoad',
        -
        -            //mod_log
        -            'AllowLogSymlinks', 'ExtendedLog', 'LogFormat', 'ServerLog',
        -            'SystemLog',
        -
        -            //mod_ls'
        -            'DirFakeGroup', 'DirFakeMode', 'DirFakeUser', 'ListOptions',
        -            'ShowSymlinks', 'UseGlobbing',
        -
        -            //mod_quotatab
        -            'QuotaDirectoryTally', 'QuotaDisplayUnits', 'QuotaEngine',
        -            'QuotaExcludeFilter', 'QuotaLimitTable', 'QuotaLock', 'QuotaLog',
        -            'QuotaOptions', 'QuotaShowQuotas', 'QuotaTallyTable',
        -
        -            //mod_quotatab_file
        -
        -            //mod_quotatab_ldap
        -
        -            //mod_quotatab_sql
        -
        -            //mod_radius
        -            'RadiusAcctServer', 'RadiusAuthServer', 'RadiusEngine',
        -            'RadiusGroupInfo', 'RadiusLog', 'RadiusNASIdentifier',
        -            'RadiusQuotaInfo', 'RadiusRealm', 'RadiusUserInfo', 'RadiusVendor',
        -
        -            //mod_ratio
        -            'AnonRatio', 'ByteRatioErrMsg', 'CwdRatioMsg', 'FileRatioErrMsg',
        -            'GroupRatio', 'HostRatio', 'LeechRatioMsg', 'RatioFile', 'Ratios',
        -            'RatioTempFile', 'SaveRatios', 'UserRatio',
        -
        -            //mod_readme
        -            'DisplayReadme',
        -
        -            //mod_rewrite
        -            'RewriteCondition', 'RewriteEngine', 'RewriteLock', 'RewriteLog',
        -            'RewriteMap', 'RewriteRule',
        -
        -            //mod_sftp
        -            'SFTPAcceptEnv', 'SFTPAuthMethods', 'SFTPAuthorizedHostKeys',
        -            'SFTPAuthorizedUserKeys', 'SFTPCiphers', 'SFTPClientMatch',
        -            'SFTPCompression', 'SFTPCryptoDevice', 'SFTPDHParamFile',
        -            'SFTPDigests', 'SFTPDisplayBanner', 'SFTPEngine', 'SFTPExtensions',
        -            'SFTPHostKey', 'SFTPKeyBlacklist', 'SFTPKeyExchanges', 'SFTPLog',
        -            'SFTPMaxChannels', 'SFTPOptions', 'SFTPPassPhraseProvider',
        -            'SFTPRekey', 'SFTPTrafficPolicy',
        -
        -            //mod_sftp_pam
        -            'SFTPPAMEngine', 'SFTPPAMOptions', 'SFTPPAMServiceName',
        -
        -            //mod_sftp_sql
        -
        -            //mod_shaper
        -            'ShaperAll', 'ShaperControlsACLs', 'ShaperEngine', 'ShaperLog',
        -            'ShaperSession', 'ShaperTable',
        -
        -            //mod_sql
        -            'SQLAuthenticate', 'SQLAuthTypes', 'SQLBackend', 'SQLConnectInfo',
        -            'SQLDefaultGID', 'SQLDefaultHomedir', 'SQLDefaultUID', 'SQLEngine',
        -            'SQLGroupInfo', 'SQLGroupWhereClause', 'SQLHomedirOnDemand',
        -            'SQLLog', 'SQLLogFile', 'SQLMinID', 'SQLMinUserGID',
        -            'SQLMinUserUID', 'SQLNamedQuery', 'SQLNegativeCache', 'SQLOptions',
        -            'SQLRatios', 'SQLRatioStats', 'SQLShowInfo', 'SQLUserInfo',
        -            'SQLUserWhereClause',
        -
        -            //mod_sql_passwd
        -            'SQLPasswordEncoding', 'SQLPasswordEngine', 'SQLPasswordSaltFile',
        -            'SQLPasswordUserSalt',
        -
        -            //mod_tls
        -            'TLSCACertificateFile', 'TLSCACertificatePath',
        -            'TLSCARevocationFile', 'TLSCARevocationPath',
        -            'TLSCertificateChainFile', 'TLSCipherSuite', 'TLSControlsACLs',
        -            'TLSCryptoDevice', 'TLSDHParamFile', 'TLSDSACertificateFile',
        -            'TLSDSACertificateKeyFile', 'TLSEngine', 'TLSLog', 'TLSOptions',
        -            'TLSPKCS12File', 'TLSPassPhraseProvider', 'TLSProtocol',
        -            'TLSRandomSeed', 'TLSRenegotiate', 'TLSRequired',
        -            'TLSRSACertificateFile', 'TLSRSACertificateKeyFile',
        -            'TLSSessionCache', 'TLSTimeoutHandshake', 'TLSVerifyClient',
        -            'TLSVerifyDepth', 'TLSVerifyOrder',
        -
        -            //mod_tls_shmcache
        -
        -            //mod_unique_id
        -            'UniqueIDEngine',
        -
        -            //mod_wrap
        -            'TCPAccessFiles', 'TCPAccessSyslogLevels', 'TCPGroupAccessFiles',
        -            'TCPServiceName', 'TCPUserAccessFiles',
        -
        -            //mod_wrap2
        -            'WrapAllowMsg', 'WrapDenyMsg', 'WrapEngine', 'WrapGroupTables',
        -            'WrapLog', 'WrapServiceName', 'WrapTables', 'WrapUserTables',
        -
        -            //mod_wrap2_file
        -
        -            //mod_wrap2_sql
        -
        -            //mod_xfer
        -            'AllowOverwrite', 'DeleteAbortedStores', 'DisplayFileTransfer',
        -            'HiddenStor', 'HiddenStores', 'MaxRetrieveFileSize',
        -            'MaxStoreFileSize', 'StoreUniquePrefix', 'TimeoutNoTransfer',
        -            'TimeoutStalled', 'TransferRate', 'UseSendfile',
        -
        -            //unknown
        -            'ScoreboardPath', 'ScoreboardScrub'
        -            ),
        -        /*keywords 3*/
        -        3 => array(
        -            //mod_core
        -            'Anonymous',
        -            'Class',
        -            'Directory',
        -            'IfDefine',
        -            'IfModule',
        -            'Limit',
        -            'VirtualHost',
        -
        -            //mod_ifsession
        -            'IfClass', 'IfGroup', 'IfUser',
        -
        -            //mod_version
        -            'IfVersion'
        -            ),
        -        /*permissions*/
        -        4 => array(
        -            //mod_core
        -            'ALL',
        -            'CDUP',
        -            'CMD',
        -            'CWD',
        -            'DELE',
        -            'DIRS',
        -            'LOGIN',
        -            'MKD',
        -            'READ',
        -            'RETR',
        -            'RMD',
        -            'RNFR',
        -            'RNTO',
        -            'STOR',
        -            'WRITE',
        -            'XCWD',
        -            'XMKD',
        -            'XRMD',
        -
        -            //mod_copy
        -            'SITE_CPFR', 'SITE_CPTO',
        -
        -            //mod_quotatab
        -            'SITE_QUOTA',
        -
        -            //mod_site
        -            'SITE_HELP', 'SITE_CHMOD', 'SITE_CHGRP',
        -
        -            //mod_site_misc
        -            'SITE_MKDIR', 'SITE_RMDIR', 'SITE_SYMLINK', 'SITE_UTIME',
        -            ),
        -        /*keywords 2*/
        -        2 => array(
        -            'all','on','off','yes','no',
        -            'standalone', 'inetd',
        -            'default', 'auth', 'write',
        -            'internet', 'local', 'limit', 'ip',
        -            'from'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #00007f;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #000000; font-weight:bold;',
        -            4 => 'color: #000080; font-weight:bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7f007f;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.google.com/search?hl=en&q={FNAMEL}+site:www.proftpd.org+inurl:docs&btnI=I%27m%20Feeling%20Lucky',
        -        2 => '',
        -        3 => 'http://www.google.com/search?hl=en&q={FNAMEL}+site:www.proftpd.org+inurl:docs&btnI=I%27m%20Feeling%20Lucky',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'SYMBOLS' => GESHI_NEVER
        -            ),
        -        'KEYWORDS' => array(
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\s)(? '(?!\+)(?!\w)',
        -                ),
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(?<=<|<\/)',
        -                'DISALLOWED_AFTER' => '(?=\s|\/|>)',
        -                ),
        -            4 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\s)(? '(?!\+)(?=\/|(?:\s+\w+)*\s*>)',
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php
        deleted file mode 100644
        index dc99dbf4..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php
        +++ /dev/null
        @@ -1,483 +0,0 @@
        - 'Progress',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array (
        -        1 => array(
        -            'ACCUMULATE','APPLY','ASSIGN','BELL','QUERY',
        -            'BUFFER-COMPARE','BUFFER-COPY','CALL','CASE',
        -            'CHOOSE','CLASS','CLOSE QUERY','each','WHERE',
        -            'CLOSE STORED-PROCEDURE','COLOR','COMPILE','CONNECT',
        -            'CONSTRUCTOR','COPY-LOB','CREATE','CREATE ALIAS',
        -            'CREATE BROWSE','CREATE BUFFER','CREATE CALL','CREATE CLIENT-PRINCIPAL',
        -            'CREATE DATABASE','CREATE DATASET','CREATE DATA-SOURCE','CREATE QUERY',
        -            'CREATE SAX-attributeS','CREATE SAX-READER','CREATE SAX-WRITER','CREATE SERVER',
        -            'CREATE SERVER-SOCKET','CREATE SOAP-HEADER','CREATE SOAP-HEADER-ENTRYREF','CREATE SOCKET',
        -            'CREATE TEMP-TABLE','CREATE WIDGET','CREATE widget-POOL','CREATE X-DOCUMENT',
        -            'CREATE X-NODEREF','CURRENT-LANGUAGE','CURRENT-VALUE','DDE ADVISE',
        -            'DDE EXECUTE','DDE GET','DDE INITIATE','DDE REQUEST',
        -            'DDE SEND','DDE TERMINATE','DEFINE BROWSE','DEFINE BUFFER','DEFINE',
        -            'DEFINE BUTTON','DEFINE DATASET','DEFINE DATA-SOURCE','DEFINE FRAME','DEF','VAR',
        -            'DEFINE IMAGE','DEFINE MENU','DEFINE PARAMETER','DEFINE property','PARAM',
        -            'DEFINE QUERY','DEFINE RECTANGLE','DEFINE STREAM','DEFINE SUB-MENU',
        -            'DEFINE TEMP-TABLE','DEFINE WORKFILE','DEFINE WORK-TABLE',
        -            'DELETE','DELETE ALIAS','DELETE object','DELETE PROCEDURE',
        -            'DELETE widget','DELETE widget-POOL','DESTRUCTOR','DICTIONARY',
        -            'DISABLE','DISABLE TRIGGERS','DISCONNECT','DISPLAY',
        -            'DO','DOS','DOWN','DYNAMIC-CURRENT-VALUE',
        -            'ELSE','EMPTY TEMP-TABLE','ENABLE','END',
        -            'ENTRY','FIND','AND',
        -            'FIX-CODEPAGE','FOR','FORM','FRAME-VALUE',
        -            'GET','GET-KEY-VALUE','HIDE','IF',
        -            'IMPORT','INPUT CLEAR','INPUT CLOSE','INPUT FROM','input',
        -            'INPUT THROUGH','INPUT-OUTPUT CLOSE','INPUT-OUTPUT THROUGH',
        -            'INTERFACE','LEAVE','BREAK',
        -            'LOAD-PICTURE','MESSAGE','method','NEXT','prev',
        -            'NEXT-PROMPT','ON','OPEN QUERY','OS-APPEND',
        -            'OS-COMMAND','OS-COPY','OS-CREATE-DIR','OS-DELETE',
        -            'OS-RENAME','OUTPUT CLOSE','OUTPUT THROUGH','OUTPUT TO',
        -            'OVERLAY','PAGE','PAUSE','PROCEDURE',
        -            'PROCESS EVENTS','PROMPT-FOR','PROMSGS','PROPATH',
        -            'PUBLISH','PUT','PUT CURSOR','PUT SCREEN',
        -            'PUT-BITS','PUT-BYTE','PUT-BYTES','PUT-DOUBLE',
        -            'PUT-FLOAT','PUT-INT64','PUT-KEY-VALUE','PUT-LONG',
        -            'PUT-SHORT','PUT-STRING','PUT-UNSIGNED-LONG','PUT-UNSIGNED-SHORT',
        -            'QUIT','RAW-TRANSFER','READKEY','RELEASE',
        -            'RELEASE EXTERNAL','RELEASE object','REPEAT','REPOSITION',
        -            'RUN','RUN STORED-PROCEDURE','RUN SUPER',
        -            'SAVE CACHE','SCROLL','SEEK','SET',
        -            'SET-BYTE-ORDER','SET-POINTER-VALUE','SET-SIZE','SHOW-STATS',
        -            'STATUS','STOP','SUBSCRIBE','SUBSTRING',
        -            'system-DIALOG COLOR','system-DIALOG FONT','system-DIALOG GET-DIR','system-DIALOG GET-FILE',
        -            'system-DIALOG PRINTER-SETUP','system-HELP','THEN','THIS-object',
        -            'TRANSACTION-MODE AUTOMATIC','TRIGGER PROCEDURE','UNDERLINE','UNDO',
        -            'UNIX','UNLOAD','UNSUBSCRIBE','UP','STRING',
        -            'UPDATE','USE','USING','substr','SKIP','CLOSE',
        -            'VIEW','WAIT-FOR','MODULO','NE','AVAIL',
        -            'NOT','OR','&GLOBAL-DEFINE','&IF','UNFORMATTED','NO-PAUSE',
        -            '&THEN','&ELSEIF','&ELSE','&ENDIF','OPEN','NO-WAIT',
        -            '&MESSAGE','&SCOPED-DEFINE','&UNDEFINE','DEFINED',
        -            'BROWSE','BUTTON','COMBO-BOX','CONTROL-FRAME',
        -            'DIALOG-BOX','EDITOR','FIELD-GROUP','FILL-IN',
        -            'FRAME','IMAGE','LITERAL','MENU',
        -            'MENU-ITEM','RADIO-SET','RECTANGLE','SELECTION-LIST',
        -            'SLIDER','SUB-MENU','TEXT','TOGGLE-BOX',
        -            'WINDOW','WITH','AT','OF','EDITING','ON ENDKEY','output',
        -            'ON ERROR','ON QUIT','ON STOP','PRESELECT',
        -            'QUERY-TUNING','SIZE','Trigger','VIEW-AS','ALERT-BOX',
        -            'Buffer','Data-relation','ProDataSet','SAX-attributes',
        -            'SAX-reader','SAX-writer','Server socket','SOAP-fault',
        -            'SOAP-header','SOAP-header-entryref','Socket','Temp-table',
        -            'X-noderef','Height','Left','Top','TO',
        -            'Width','ACTIVE-WINDOW','AUDIT-CONTROL','FIRST','LAST',
        -            'AUDIT-POLICY','CLIPBOARD','CODEBASE-LOCATOR','COLOR-TABLE',
        -            'COMPILER','COM-SELF','DEBUGGER','DEFAULT-WINDOW',
        -            'ERROR-STATUS','FILE-INFO','FOCUS','FONT-TABLE',
        -            'LAST-EVENT','LOG-MANAGER','RCODE-INFO','SECURITY-POLICY',
        -            'SELF','SESSION','SOURCE-PROCEDURE','TARGET-PROCEDURE','NO-LOCK','NO-error',
        -            'THIS-PROCEDURE','WEB-CONTEXT','FUNCTION','RETURNS','NO-UNDO'
        -            ),
        -        2 => array(
        -            'ACCEPT-CHANGES','ACCEPT-ROW-CHANGES','ADD-BUFFER','ADD-CALC-COLUMN',
        -            'ADD-COLUMNS-FROM','ADD-EVENTS-PROCEDURE','ADD-FIELDS-FROM','ADD-FIRST',
        -            'ADD-HEADER-ENTRY','ADD-INDEX-FIELD','ADD-LAST','ADD-LIKE-COLUMN',
        -            'ADD-LIKE-FIELD','ADD-LIKE-INDEX','ADD-NEW-FIELD','ADD-NEW-INDEX',
        -            'ADD-RELATION','ADD-SCHEMA-LOCATION','ADD-SOURCE-BUFFER','ADD-SUPER-PROCEDURE',
        -            'APPEND-CHILD','APPLY-CALLBACK','ATTACH-DATA-SOURCE','AUTHENTICATION-FAILED',
        -            'BEGIN-EVENT-GROUP','BUFFER-CREATE',
        -            'BUFFER-DELETE','BUFFER-RELEASE','BUFFER-VALIDATE',
        -            'CANCEL-BREAK','CANCEL-REQUESTS','CLEAR','CLEAR-APPL-CONTEXT',
        -            'CLEAR-LOG','CLEAR-SELECTION','CLEAR-SORT-ARROWS','CLONE-NODE',
        -            'CLOSE-LOG','CONNECTED','CONVERT-TO-OFFSET',
        -            'COPY-DATASET','COPY-SAX-attributeS','COPY-TEMP-TABLE','CREATE-LIKE',
        -            'CREATE-NODE','CREATE-NODE-NAMESPACE','CREATE-RESULT-LIST-ENTRY','DEBUG',
        -            'DECLARE-NAMESPACE','DELETE-CHAR','DELETE-CURRENT-ROW',
        -            'DELETE-HEADER-ENTRY','DELETE-LINE','DELETE-NODE','DELETE-RESULT-LIST-ENTRY',
        -            'DELETE-SELECTED-ROW','DELETE-SELECTED-ROWS','DESELECT-FOCUSED-ROW','DESELECT-ROWS',
        -            'DESELECT-SELECTED-ROW','DETACH-DATA-SOURCE','DISABLE-CONNECTIONS',
        -            'DISABLE-DUMP-TRIGGERS','DISABLE-LOAD-TRIGGERS','DISPLAY-MESSAGE',
        -            'DUMP-LOGGING-NOW','EDIT-CLEAR','EDIT-COPY','EDIT-CUT',
        -            'EDIT-PASTE','EDIT-UNDO','EMPTY-DATASET','EMPTY-TEMP-TABLE',
        -            'ENABLE-CONNECTIONS','ENABLE-EVENTS','ENCRYPT-AUDIT-MAC-KEY',
        -            'END-DOCUMENT','END-ELEMENT','END-EVENT-GROUP','END-FILE-DROP',
        -            'EXPORT','EXPORT-PRINCIPAL','FETCH-SELECTED-ROW',
        -            'FILL','FIND-BY-ROWID','FIND-CURRENT','FIND-FIRST',
        -            'FIND-LAST','FIND-UNIQUE','GET-attribute','GET-attribute-NODE',
        -            'GET-BINARY-DATA','GET-BLUE-VALUE','GET-BROWSE-COLUMN','GET-BUFFER-HANDLE',
        -            'GET-BYTES-AVAILABLE','GET-CALLBACK-PROC-CONTEXT','GET-CALLBACK-PROC-NAME','GET-CGI-LIST',
        -            'GET-CGI-LONG-VALUE','GET-CGI-VALUE','GET-CHANGES','GET-CHILD',
        -            'GET-CHILD-RELATION','GET-CONFIG-VALUE','GET-CURRENT','GET-DATASET-BUFFER',
        -            'GET-DOCUMENT-ELEMENT','GET-DROPPED-FILE','GET-DYNAMIC','GET-ERROR-COLUMN ',
        -            'GET-ERROR-ROW ','GET-FILE-NAME ','GET-FILE-OFFSET ','GET-FIRST',
        -            'GET-GREEN-VALUE','GET-HEADER-ENTRY','GET-INDEX-BY-NAMESPACE-NAME','GET-INDEX-BY-QNAME',
        -            'GET-ITERATION','GET-LAST','GET-LOCALNAME-BY-INDEX','GET-MESSAGE',
        -            'GET-NEXT','GET-NODE','GET-NUMBER','GET-PARENT',
        -            'GET-PREV','GET-PRINTERS','GET-property','GET-QNAME-BY-INDEX',
        -            'GET-RED-VALUE','GET-RELATION','GET-REPOSITIONED-ROW','GET-RGB-VALUE',
        -            'GET-SELECTED-widget','GET-SERIALIZED','GET-SIGNATURE','GET-SOCKET-OPTION',
        -            'GET-SOURCE-BUFFER','GET-TAB-ITEM','GET-TEXT-HEIGHT-CHARS','GET-TEXT-HEIGHT-PIXELS',
        -            'GET-TEXT-WIDTH-CHARS','GET-TEXT-WIDTH-PIXELS','GET-TOP-BUFFER','GET-TYPE-BY-INDEX',
        -            'GET-TYPE-BY-NAMESPACE-NAME','GET-TYPE-BY-QNAME','GET-URI-BY-INDEX','GET-VALUE-BY-INDEX',
        -            'GET-VALUE-BY-NAMESPACE-NAME','GET-VALUE-BY-QNAME','GET-WAIT-STATE','IMPORT-NODE',
        -            'IMPORT-PRINCIPAL','INCREMENT-EXCLUSIVE-ID','INITIALIZE-DOCUMENT-TYPE',
        -            'INITIATE','INSERT','INSERT-attribute','INSERT-BACKTAB',
        -            'INSERT-BEFORE','INSERT-FILE','INSERT-ROW','INSERT-STRING',
        -            'INSERT-TAB','INVOKE','IS-ROW-SELECTED','IS-SELECTED',
        -            'LIST-property-NAMES','LOAD','LoadControls','LOAD-DOMAINS',
        -            'LOAD-ICON','LOAD-IMAGE','LOAD-IMAGE-DOWN','LOAD-IMAGE-INSENSITIVE',
        -            'LOAD-IMAGE-UP','LOAD-MOUSE-POINTER','LOAD-SMALL-ICON','LOCK-REGISTRATION',
        -            'LOG-AUDIT-EVENT','LOGOUT','LONGCHAR-TO-NODE-VALUE','LOOKUP',
        -            'MEMPTR-TO-NODE-VALUE','MERGE-CHANGES','MERGE-ROW-CHANGES','MOVE-AFTER-TAB-ITEM',
        -            'MOVE-BEFORE-TAB-ITEM','MOVE-COLUMN','MOVE-TO-BOTTOM','MOVE-TO-EOF',
        -            'MOVE-TO-TOP','NODE-VALUE-TO-LONGCHAR','NODE-VALUE-TO-MEMPTR','NORMALIZE',
        -            'QUERY-CLOSE','QUERY-OPEN','QUERY-PREPARE',
        -            'READ','READ-FILE','READ-XML','READ-XMLSCHEMA',
        -            'REFRESH','REFRESH-AUDIT-POLICY','REGISTER-DOMAIN','REJECT-CHANGES',
        -            'REJECT-ROW-CHANGES','REMOVE-attribute','REMOVE-CHILD','REMOVE-EVENTS-PROCEDURE',
        -            'REMOVE-SUPER-PROCEDURE','REPLACE','REPLACE-CHILD','REPLACE-SELECTION-TEXT',
        -            'REPOSITION-BACKWARD','REPOSITION-FORWARD','REPOSITION-TO-ROW','REPOSITION-TO-ROWID',
        -            'RESET','SAVE','SAVE-FILE','SAVE-ROW-CHANGES',
        -            'SAX-PARSE','SAX-PARSE-FIRST','SAX-PARSE-NEXT','SCROLL-TO-CURRENT-ROW',
        -            'SCROLL-TO-ITEM','SCROLL-TO-SELECTED-ROW','SEAL','SEARCH',
        -            'SELECT-ALL','SELECT-FOCUSED-ROW','SELECT-NEXT-ROW','SELECT-PREV-ROW',
        -            'SELECT-ROW','SET-ACTOR','SET-APPL-CONTEXT','SET-attribute',
        -            'SET-attribute-NODE','SET-BLUE-VALUE','SET-BREAK','SET-BUFFERS',
        -            'SET-CALLBACK','SET-CALLBACK-PROCEDURE','SET-CLIENT','SET-COMMIT',
        -            'SET-CONNECT-PROCEDURE','SET-DYNAMIC','SET-GREEN-VALUE','SET-INPUT-SOURCE',
        -            'SET-MUST-UNDERSTAND','SET-NODE','SET-NUMERIC-FORMAT','SET-OUTPUT-DESTINATION',
        -            'SET-PARAMETER','SET-property','SET-READ-RESPONSE-PROCEDURE','SET-RED-VALUE',
        -            'SET-REPOSITIONED-ROW','SET-RGB-VALUE','SET-ROLLBACK','SET-SELECTION',
        -            'SET-SERIALIZED','SET-SOCKET-OPTION','SET-SORT-ARROW','SET-WAIT-STATE',
        -            'START-DOCUMENT','START-ELEMENT','STOP-PARSING','SYNCHRONIZE',
        -            'TEMP-TABLE-PREPARE','UPDATE-attribute','URL-DECODE','URL-ENCODE',
        -            'VALIDATE','VALIDATE-SEAL','WRITE','WRITE-CDATA','USE-INDEX',
        -            'WRITE-CHARACTERS','WRITE-COMMENT','WRITE-DATA-ELEMENT','WRITE-EMPTY-ELEMENT',
        -            'WRITE-ENTITY-REF','WRITE-EXTERNAL-DTD','WRITE-FRAGMENT','WRITE-MESSAGE',
        -            'WRITE-PROCESSING-INSTRUCTION','WRITE-XML','WRITE-XMLSCHEMA','FALSE','true'
        -            ),
        -        3 => array(
        -            'ABSOLUTE','ACCUM','ADD-INTERVAL','ALIAS','mod',
        -            'AMBIGUOUS','ASC','AUDIT-ENABLED','AVAILABLE',
        -            'BASE64-DECODE','BASE64-ENCODE','CAN-DO','CAN-FIND',
        -            'CAN-QUERY','CAN-SET','CAPS','CAST','OS-DIR',
        -            'CHR','CODEPAGE-CONVERT','COMPARE',
        -            'COUNT-OF','CURRENT-CHANGED','CURRENT-RESULT-ROW','DATASERVERS',
        -            'DATA-SOURCE-MODIFIED','DATETIME','DATETIME-TZ',
        -            'DAY','DBCODEPAGE','DBCOLLATION','DBNAME',
        -            'DBPARAM','DBRESTRICTIONS','DBTASKID','DBTYPE',
        -            'DBVERSION','DECIMAL','DECRYPT','DYNAMIC-function',
        -            'DYNAMIC-NEXT-VALUE','ENCODE','ENCRYPT','ENTERED',
        -            'ERROR','ETIME','EXP','ENDKEY','END-error',
        -            'FIRST-OF','FRAME-DB','FRAME-DOWN',
        -            'FRAME-FIELD','FRAME-FILE','FRAME-INDEX','FRAME-LINE',
        -            'GATEWAYS','GENERATE-PBE-KEY','GENERATE-PBE-SALT','GENERATE-RANDOM-KEY',
        -            'GENERATE-UUID','GET-BITS','GET-BYTE','GET-BYTE-ORDER',
        -            'GET-BYTES','GET-CODEPAGE','GET-CODEPAGES','GET-COLLATION',
        -            'GET-COLLATIONS','GET-DOUBLE','GET-FLOAT','GET-INT64',
        -            'GET-LONG','GET-POINTER-VALUE','GET-SHORT','GET-SIZE',
        -            'GET-STRING','GET-UNSIGNED-LONG','GET-UNSIGNED-SHORT','GO-PENDING',
        -            'GUID','HEX-DECODE','INDEX',
        -            'INT64','INTEGER','INTERVAL','IS-ATTR-SPACE',
        -            'IS-CODEPAGE-FIXED','IS-COLUMN-CODEPAGE','IS-LEAD-BYTE','ISO-DATE',
        -            'KBLABEL','KEYCODE','KEYFUNCTION','KEYLABEL',
        -            'KEYWORD','KEYWORD-ALL','LASTKEY',
        -            'LAST-OF','LC','LDBNAME','LEFT-TRIM',
        -            'LIBRARY','LINE-COUNTER','LIST-EVENTS','LIST-QUERY-ATTRS',
        -            'LIST-SET-ATTRS','LIST-widgetS','LOCKED',
        -            'LOGICAL','MAXIMUM','MD5-DIGEST',
        -            'MEMBER','MESSAGE-LINES','MINIMUM','MONTH',
        -            'MTIME','NEW','NEXT-VALUE','SHARED',
        -            'NOT ENTERED','NOW','NUM-ALIASES','NUM-DBS',
        -            'NUM-ENTRIES','NUM-RESULTS','OPSYS','OS-DRIVES',
        -            'OS-ERROR','OS-GETENV','PAGE-NUMBER','PAGE-SIZE',
        -            'PDBNAME','PROC-HANDLE','PROC-STATUS','PROGRAM-NAME',
        -            'PROGRESS','PROVERSION','QUERY-OFF-END','QUOTER',
        -            'RANDOM','RAW','RECID','REJECTED',
        -            'RETRY','RETURN-VALUE','RGB-VALUE',
        -            'RIGHT-TRIM','R-INDEX','ROUND','ROWID','LENGTH',
        -            'SDBNAME','SET-DB-CLIENT','SETUSERID',
        -            'SHA1-DIGEST','SQRT','SUBSTITUTE','VARIABLE',
        -            'SUPER','TERMINAL','TIME','TIMEZONE','external',
        -            'TODAY','TO-ROWID','TRIM','TRUNCATE','return',
        -            'TYPE-OF','USERID','VALID-EVENT','VALID-HANDLE',
        -            'VALID-object','WEEKDAY','YEAR','BEGINS','VALUE',
        -            'EQ','GE','GT','LE','LT','MATCHES','AS','BY','LIKE'
        -            ),
        -        4 => array(
        -            'ACCELERATOR','ACTIVE','ACTOR','ADM-DATA',
        -            'AFTER-BUFFER','AFTER-ROWID','AFTER-TABLE','ALLOW-COLUMN-SEARCHING',
        -            'ALWAYS-ON-TOP','APPL-ALERT-BOXES','APPL-CONTEXT-ID','APPSERVER-INFO',
        -            'APPSERVER-PASSWORD','APPSERVER-USERID','ASYNCHRONOUS','ASYNC-REQUEST-COUNT',
        -            'ASYNC-REQUEST-HANDLE','ATTACHED-PAIRLIST','attribute-NAMES','ATTR-SPACE',
        -            'AUDIT-EVENT-CONTEXT','AUTO-COMPLETION','AUTO-DELETE','AUTO-DELETE-XML',
        -            'AUTO-END-KEY','AUTO-GO','AUTO-INDENT','AUTO-RESIZE',
        -            'AUTO-RETURN','AUTO-SYNCHRONIZE','AUTO-VALIDATE','AUTO-ZAP',
        -            'AVAILABLE-FORMATS','BACKGROUND','BASE-ADE','BASIC-LOGGING',
        -            'BATCH-MODE','BATCH-SIZE','BEFORE-BUFFER','BEFORE-ROWID',
        -            'BEFORE-TABLE','BGCOLOR','BLANK','BLOCK-ITERATION-DISPLAY',
        -            'BORDER-BOTTOM-CHARS','BORDER-BOTTOM-PIXELS','BORDER-LEFT-CHARS','BORDER-LEFT-PIXELS',
        -            'BORDER-RIGHT-CHARS','BORDER-RIGHT-PIXELS','BORDER-TOP-CHARS','BORDER-TOP-PIXELS',
        -            'BOX','BOX-SELECTABLE','BUFFER-CHARS','BUFFER-FIELD',
        -            'BUFFER-HANDLE','BUFFER-LINES','BUFFER-NAME','BUFFER-VALUE',
        -            'BYTES-READ','BYTES-WRITTEN','CACHE','CALL-NAME',
        -            'CALL-TYPE','CANCEL-BUTTON','CANCELLED','CAN-CREATE',
        -            'CAN-DELETE','CAN-READ','CAN-WRITE','CAREFUL-PAINT',
        -            'CASE-SENSITIVE','CENTERED','CHARSET','CHECKED',
        -            'CHILD-BUFFER','CHILD-NUM','CLASS-TYPE','CLIENT-CONNECTION-ID',
        -            'CLIENT-TTY','CLIENT-TYPE','CLIENT-WORKSTATION','CODE',
        -            'CODEPAGE','COLUMN','COLUMN-BGCOLOR','COLUMN-DCOLOR',
        -            'COLUMN-FGCOLOR','COLUMN-FONT','COLUMN-LABEL','COLUMN-MOVABLE',
        -            'COLUMN-PFCOLOR','COLUMN-READ-ONLY','COLUMN-RESIZABLE','COLUMN-SCROLLING',
        -            'COM-HANDLE','COMPLETE','CONFIG-NAME','CONTEXT-HELP',
        -            'CONTEXT-HELP-FILE','CONTEXT-HELP-ID','CONTROL-BOX','CONVERT-3D-COLORS',
        -            'CPCASE','CPCOLL','CPINTERNAL','CPLOG',
        -            'CPPRINT','CPRCODEIN','CPRCODEOUT','CPSTREAM',
        -            'CPTERM','CRC-VALUE','CURRENT-COLUMN','CURRENT-ENVIRONMENT',
        -            'CURRENT-ITERATION','CURRENT-ROW-MODIFIED','CURRENT-WINDOW','CURSOR-CHAR',
        -            'CURSOR-LINE','CURSOR-OFFSET','DATA-ENTRY-RETURN','DATASET',
        -            'DATA-SOURCE','DATA-SOURCE-COMPLETE-MAP','DATA-TYPE','DATE-FORMAT',
        -            'DB-REFERENCES','DCOLOR','DDE-ERROR','DDE-ID',
        -            'DDE-ITEM','DDE-NAME','DDE-TOPIC','DEBLANK',
        -            'DEBUG-ALERT','DECIMALS','DEFAULT','DEFAULT-BUFFER-HANDLE',
        -            'DEFAULT-BUTTON','DEFAULT-COMMIT','DELIMITER','DISABLE-AUTO-ZAP',
        -            'DISPLAY-TIMEZONE','DISPLAY-TYPE','DOMAIN-DESCRIPTION','DOMAIN-NAME',
        -            'DOMAIN-TYPE','DRAG-ENABLED','DROP-TARGET','DYNAMIC',
        -            'EDGE-CHARS','EDGE-PIXELS','EDIT-CAN-PASTE','EDIT-CAN-UNDO',
        -            'EMPTY','ENCODING','ENCRYPTION-SALT','END-USER-PROMPT',
        -            'ENTRY-TYPES-LIST','ERROR-COLUMN','ERROR-object-DETAIL','ERROR-ROW',
        -            'ERROR-STRING','EVENT-GROUP-ID','EVENT-PROCEDURE','EVENT-PROCEDURE-CONTEXT',
        -            'EVENT-TYPE','EXCLUSIVE-ID','EXECUTION-LOG','EXPAND',
        -            'EXPANDABLE','FGCOLOR','FILE-CREATE-DATE','FILE-CREATE-TIME',
        -            'FILE-MOD-DATE','FILE-MOD-TIME','FILE-NAME','FILE-OFFSET',
        -            'FILE-SIZE','FILE-TYPE','FILLED','FILL-MODE',
        -            'FILL-WHERE-STRING','FIRST-ASYNC-REQUEST','FIRST-BUFFER','FIRST-CHILD',
        -            'FIRST-COLUMN','FIRST-DATASET','FIRST-DATA-SOURCE','FIRST-object',
        -            'FIRST-PROCEDURE','FIRST-QUERY','FIRST-SERVER','FIRST-SERVER-SOCKET',
        -            'FIRST-SOCKET','FIRST-TAB-ITEM','FIT-LAST-COLUMN','FLAT-BUTTON',
        -            'FOCUSED-ROW','FOCUSED-ROW-SELECTED','FONT','FOREGROUND',
        -            'FORMAT','FORMATTED','FORM-INPUT','FORM-LONG-INPUT',
        -            'FORWARD-ONLY','FRAGMENT','FRAME-COL','FRAME-NAME',
        -            'FRAME-ROW','FRAME-SPACING','FRAME-X','FRAME-Y',
        -            'FREQUENCY','FULL-HEIGHT-CHARS','FULL-HEIGHT-PIXELS','FULL-PATHNAME',
        -            'FULL-WIDTH-CHARS','FULL-WIDTH-PIXELS','GRAPHIC-EDGE',
        -            'GRID-FACTOR-HORIZONTAL','GRID-FACTOR-VERTICAL','GRID-SNAP','GRID-UNIT-HEIGHT-CHARS',
        -            'GRID-UNIT-HEIGHT-PIXELS','GRID-UNIT-WIDTH-CHARS','GRID-UNIT-WIDTH-PIXELS','GRID-VISIBLE',
        -            'GROUP-BOX','HANDLE','HANDLER','HAS-LOBS',
        -            'HAS-RECORDS','HEIGHT-CHARS','HEIGHT-PIXELS','HELP',
        -            'HIDDEN','HORIZONTAL','HTML-CHARSET','HTML-END-OF-LINE',
        -            'HTML-END-OF-PAGE','HTML-FRAME-BEGIN','HTML-FRAME-END','HTML-HEADER-BEGIN',
        -            'HTML-HEADER-END','HTML-TITLE-BEGIN','HTML-TITLE-END','HWND',
        -            'ICFPARAMETER','ICON','IGNORE-CURRENT-MODIFIED','IMAGE-DOWN',
        -            'IMAGE-INSENSITIVE','IMAGE-UP','IMMEDIATE-DISPLAY','INDEX-INFORMATION',
        -            'IN-HANDLE','INHERIT-BGCOLOR','INHERIT-FGCOLOR','INITIAL','INIT',
        -            'INNER-CHARS','INNER-LINES','INPUT-VALUE','INSTANTIATING-PROCEDURE',
        -            'INTERNAL-ENTRIES','IS-CLASS','IS-OPEN','IS-PARAMETER-SET',
        -            'IS-XML','ITEMS-PER-ROW','KEEP-CONNECTION-OPEN','KEEP-FRAME-Z-ORDER',
        -            'KEEP-SECURITY-CACHE','KEY','KEYS','LABEL',
        -            'LABEL-BGCOLOR','LABEL-DCOLOR','LABEL-FGCOLOR','LABEL-FONT',
        -            'LABELS','LANGUAGES','LARGE','LARGE-TO-SMALL',
        -            'LAST-ASYNC-REQUEST','LAST-BATCH','LAST-CHILD','LAST-object',
        -            'LAST-PROCEDURE','LAST-SERVER','LAST-SERVER-SOCKET','LAST-SOCKET',
        -            'LAST-TAB-ITEM','LINE','LIST-ITEM-PAIRS','LIST-ITEMS',
        -            'LITERAL-QUESTION','LOCAL-HOST','LOCAL-NAME','LOCAL-PORT',
        -            'LOCATOR-COLUMN-NUMBER','LOCATOR-LINE-NUMBER','LOCATOR-PUBLIC-ID','LOCATOR-system-ID',
        -            'LOCATOR-TYPE','LOG-ENTRY-TYPES','LOGFILE-NAME','LOGGING-LEVEL',
        -            'LOGIN-EXPIRATION-TIMESTAMP','LOGIN-HOST','LOGIN-STATE','LOG-THRESHOLD',
        -            'MANDATORY','MANUAL-HIGHLIGHT','MAX-BUTTON','MAX-CHARS',
        -            'MAX-DATA-GUESS','MAX-HEIGHT-CHARS','MAX-HEIGHT-PIXELS','MAX-VALUE',
        -            'MAX-WIDTH-CHARS','MAX-WIDTH-PIXELS','MD5-VALUE','MENU-BAR',
        -            'MENU-KEY','MENU-MOUSE','MERGE-BY-FIELD','MESSAGE-AREA',
        -            'MESSAGE-AREA-FONT','MIN-BUTTON','MIN-COLUMN-WIDTH-CHARS','MIN-COLUMN-WIDTH-PIXELS',
        -            'MIN-HEIGHT-CHARS','MIN-HEIGHT-PIXELS','MIN-SCHEMA-MARSHAL','MIN-VALUE',
        -            'MIN-WIDTH-CHARS','MIN-WIDTH-PIXELS','MODIFIED','MOUSE-POINTER',
        -            'MOVABLE','MULTI-COMPILE','MULTIPLE','MULTITASKING-INTERVAL',
        -            'MUST-UNDERSTAND','NAME','NAMESPACE-PREFIX','NAMESPACE-URI',
        -            'NEEDS-APPSERVER-PROMPT','NEEDS-PROMPT','NESTED','NEW-ROW',
        -            'NEXT-COLUMN','NEXT-ROWID','NEXT-SIBLING','NEXT-TAB-ITEM', 'NO-BOX',
        -            'NO-CURRENT-VALUE','NODE-VALUE','NO-EMPTY-SPACE','NO-FOCUS',
        -            'NONAMESPACE-SCHEMA-LOCATION','NO-SCHEMA-MARSHAL','NO-VALIDATE','NUM-BUFFERS',
        -            'NUM-BUTTONS','NUM-CHILD-RELATIONS','NUM-CHILDREN','NUM-COLUMNS',
        -            'NUM-DROPPED-FILES','NUMERIC-DECIMAL-POINT','NUMERIC-FORMAT','NUMERIC-SEPARATOR',
        -            'NUM-FIELDS','NUM-FORMATS','NUM-HEADER-ENTRIES','NUM-ITEMS',
        -            'NUM-ITERATIONS','NUM-LINES','NUM-LOCKED-COLUMNS','NUM-LOG-FILES',
        -            'NUM-MESSAGES','NUM-PARAMETERS','NUM-REFERENCES','NUM-RELATIONS',
        -            'NUM-REPLACED','NUM-SELECTED-ROWS','NUM-SELECTED-WIDGETS','NUM-SOURCE-BUFFERS',
        -            'NUM-TABS','NUM-TOP-BUFFERS','NUM-TO-RETAIN','NUM-VISIBLE-COLUMNS',
        -            'ON-FRAME-BORDER','ORIGIN-HANDLE','ORIGIN-ROWID','OWNER',
        -            'OWNER-DOCUMENT','PAGE-BOTTOM','PAGE-TOP','PARAMETER',
        -            'PARENT','PARENT-BUFFER','PARENT-RELATION','PARSE-STATUS',
        -            'PASSWORD-FIELD','PATHNAME','PBE-HASH-ALGORITHM','PBE-KEY-ROUNDS',
        -            'PERSISTENT','PERSISTENT-CACHE-DISABLED','PERSISTENT-PROCEDURE','PFCOLOR',
        -            'PIXELS-PER-COLUMN','PIXELS-PER-ROW','POPUP-MENU','POPUP-ONLY',
        -            'POSITION','PREFER-DATASET','PREPARED','PREPARE-STRING',
        -            'PREV-COLUMN','PREV-SIBLING','PREV-TAB-ITEM','PRIMARY',
        -            'PRINTER-CONTROL-HANDLE','PRINTER-HDC','PRINTER-NAME','PRINTER-PORT',
        -            'PRIVATE-DATA','PROCEDURE-NAME','PROGRESS-SOURCE','PROXY',
        -            'PROXY-PASSWORD','PROXY-USERID','PUBLIC-ID','PUBLISHED-EVENTS',
        -            'RADIO-BUTTONS','READ-ONLY','RECORD-LENGTH',
        -            'REFRESHABLE','RELATION-FIELDS','RELATIONS-ACTIVE','REMOTE',
        -            'REMOTE-HOST','REMOTE-PORT','RESIZABLE','RESIZE',
        -            'RESTART-ROWID','RETAIN-SHAPE','RETURN-INSERTED','RETURN-VALUE-DATA-TYPE',
        -            'ROLES','ROUNDED','COL','ROW','ROW-HEIGHT-CHARS',
        -            'ROW-HEIGHT-PIXELS','ROW-MARKERS','ROW-RESIZABLE','ROW-STATE',
        -            'SAVE-WHERE-STRING','SCHEMA-CHANGE','SCHEMA-LOCATION','SCHEMA-MARSHAL',
        -            'SCHEMA-PATH','SCREEN-LINES','SCREEN-VALUE','SCROLLABLE',
        -            'SCROLLBAR-HORIZONTAL','SCROLL-BARS','SCROLLBAR-VERTICAL','SEAL-TIMESTAMP',
        -            'SELECTABLE','SELECTED','SELECTION-END','SELECTION-START',
        -            'SELECTION-TEXT','SENSITIVE','SEPARATOR-FGCOLOR','SEPARATORS',
        -            'SERVER','SERVER-CONNECTION-BOUND','SERVER-CONNECTION-BOUND-REQUEST','SERVER-CONNECTION-CONTEXT',
        -            'SERVER-CONNECTION-ID','SERVER-OPERATING-MODE','SESSION-END','SESSION-ID',
        -            'SHOW-IN-TASKBAR','SIDE-LABEL-HANDLE','SIDE-LABELS','SKIP-DELETED-RECORD',
        -            'SMALL-ICON','SMALL-TITLE','SOAP-FAULT-ACTOR','SOAP-FAULT-CODE',
        -            'SOAP-FAULT-DETAIL','SOAP-FAULT-STRING','SORT','SORT-ASCENDING',
        -            'SORT-NUMBER','SSL-SERVER-NAME','STANDALONE','STARTUP-PARAMETERS',
        -            'STATE-DETAIL','STATUS-AREA','STATUS-AREA-FONT','STOPPED',
        -            'STREAM','STRETCH-TO-FIT','STRICT','STRING-VALUE',
        -            'SUBTYPE','SUPER-PROCEDURES','SUPPRESS-NAMESPACE-PROCESSING','SUPPRESS-WARNINGS',
        -            'SYMMETRIC-ENCRYPTION-ALGORITHM','SYMMETRIC-ENCRYPTION-IV','SYMMETRIC-ENCRYPTION-KEY','SYMMETRIC-SUPPORT',
        -            'system-ALERT-BOXES','system-ID','TABLE','TABLE-CRC-LIST',
        -            'TABLE-HANDLE','TABLE-LIST','TABLE-NUMBER','TAB-POSITION',
        -            'TAB-STOP','TEMP-DIRECTORY','TEXT-SELECTED','THREE-D',
        -            'TIC-MARKS','TIME-SOURCE','TITLE','TITLE-BGCOLOR','FIELD',
        -            'TITLE-DCOLOR','TITLE-FGCOLOR','TITLE-FONT','TOOLTIP',
        -            'TOOLTIPS','TOP-ONLY','TRACKING-CHANGES','TRANSACTION',
        -            'TRANS-INIT-PROCEDURE','TRANSPARENT','TYPE','UNIQUE-ID',
        -            'UNIQUE-MATCH','URL','URL-PASSWORD','URL-USERID','EXTENT',
        -            'USER-ID','V6DISPLAY','VALIDATE-EXPRESSION','VALIDATE-MESSAGE',
        -            'VALIDATE-XML','VALIDATION-ENABLED','VIEW-FIRST-COLUMN-ON-REOPEN',
        -            'VIRTUAL-HEIGHT-CHARS','VIRTUAL-HEIGHT-PIXELS','VIRTUAL-WIDTH-CHARS','VIRTUAL-WIDTH-PIXELS',
        -            'VISIBLE','WARNING','WHERE-STRING','widget-ENTER','DATE',
        -            'widget-LEAVE','WIDTH-CHARS','WIDTH-PIXELS','WINDOW-STATE',
        -            'WINDOW-system','WORD-WRAP','WORK-AREA-HEIGHT-PIXELS','WORK-AREA-WIDTH-PIXELS',
        -            'WORK-AREA-X','WORK-AREA-Y','WRITE-STATUS','X','widget-Handle',
        -            'X-DOCUMENT','XML-DATA-TYPE','XML-NODE-TYPE','XML-SCHEMA-PATH',
        -            'XML-SUPPRESS-NAMESPACE-PROCESSING','Y','YEAR-OFFSET','CHARACTER',
        -            'LONGCHAR','MEMPTR','CHAR','DEC','INT','LOG','DECI','INTE','LOGI','long'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}',
        -        '<', '>', '=',
        -        '+', '-', '*', '/',
        -        '!', '@', '%', '|', '$',
        -        ':', '.', ';', ',',
        -        '?', '<=','<>','>=', '\\'
        -        ),
        -    'CASE_SENSITIVE' => array (
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array (
        -        'KEYWORDS' => array (
        -            1 => 'color: #0000ff; font-weight: bold;',
        -            2 => 'color: #1D16B2;',
        -            3 => 'color: #993333;',
        -            4 => 'color: #0000ff;'
        -            ),
        -        'COMMENTS' => array (
        -//            1 => 'color: #808080; font-style: italic;',
        -//            2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array (
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array (
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array (
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array (
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array (
        -            0 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array (
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array (
        -            ),
        -        'SCRIPT' => array (
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        0 => ':'
        -        ),
        -    'REGEXPS' => array (
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array (
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array (
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?  "(?![\-a-zA-Z0-9_%])",
        -            1 => array(
        -                'SPACE_AS_WHITESPACE' => true
        -                ),
        -            2 => array(
        -                'SPACE_AS_WHITESPACE' => true
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php
        deleted file mode 100644
        index e8b5df09..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php
        +++ /dev/null
        @@ -1,141 +0,0 @@
        - 'Prolog',
        -    'COMMENT_SINGLE' => array(1 => '%'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array("\'"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abolish','abs','arg','asserta','assertz','at_end_of_stream','atan',
        -            'atom','atom_chars','atom_codes','atom_concat','atom_length',
        -            'atomic','bagof','call','catch','ceiling','char_code',
        -            'char_conversion','clause','close','compound','consult','copy_term',
        -            'cos','current_char_conversion','current_input','current_op',
        -            'current_output','current_predicate','current_prolog_flag',
        -            'discontiguous','dynamic','ensure_loaded','exp','fail','findall',
        -            'float','float_fractional_part','float_integer_part','floor',
        -            'flush_output','functor','get_byte','get_char','get_code','halt',
        -            'include','initialization','integer','is','listing','log','mod',
        -            'multifile','nl','nonvar','notrace','number','number_chars',
        -            'number_codes','once','op','open','peek_byte','peek_char',
        -            'peek_code','put_byte','put_char','put_code','read','read_term',
        -            'rem','repeat','retract','round','set_input','set_output',
        -            'set_prolog_flag','set_stream_position','setof','sign','sin','sqrt',
        -            'stream_property','sub_atom','throw','trace','true','truncate',
        -            'unify_with_occurs_check','univ','var','write','write_canonical',
        -            'write_term','writeq'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '[', ']', '{', '}',),
        -        1 => array('?-', ':-', '=:='),
        -        2 => array('\-', '\+', '\*', '\/'),
        -        3 => array('-', '+', '*', '/'),
        -        4 => array('.', ':', ',', ';'),
        -        5 => array('!', '@', '&', '|'),
        -        6 => array('<', '>', '=')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #990000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;',
        -            'HARD' => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #800080;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;',
        -            1 => 'color: #339933;',
        -            2 => 'color: #339933;',
        -            3 => 'color: #339933;',
        -            4 => 'color: #339933;',
        -            5 => 'color: #339933;',
        -            6 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #008080;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://pauillac.inria.fr/~deransar/prolog/bips.html'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Variables
        -        0 => "(? GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php
        deleted file mode 100644
        index b7160183..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php
        +++ /dev/null
        @@ -1,125 +0,0 @@
        - 'PROPERTIES',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        /* Common used variables */
        -        1 => array(
        -            '${user.home}'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; 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: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000080; font-weight:bold;',
        -            1 => 'color: #008000; font-weight:bold;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Entry names
        -        0 => array(
        -            GESHI_SEARCH => '^(\s*)([.a-zA-Z0-9_\-]+)(\s*=)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        //Entry values
        -        1 => array(
        -            // Evil hackery to get around GeSHi bug: <>" and ; are added so s can be matched
        -            // Explicit match on variable names because if a comment is before the first < of the span
        -            // gets chewed up...
        -            GESHI_SEARCH => '([<>";a-zA-Z0-9_]+\s*)=(.*)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1=',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php
        deleted file mode 100644
        index e2ab4a56..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php
        +++ /dev/null
        @@ -1,297 +0,0 @@
        - 'ProvideX',
        -    'COMMENT_SINGLE' => array(1 => '!'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        // Single-Line Comments using REM command
        -        2 => "/\bREM\b.*?$/i"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            // Directives
        -            '*break', '*continue', '*end', '*escape', '*next', '*proceed',
        -            '*retry', '*return', '*same', 'accept', 'add index', 'addr',
        -            'auto', 'begin', 'break', 'button', 'bye', 'call', 'case',
        -            'chart', 'check_box', 'class', 'clear', 'clip_board', 'close',
        -            'continue', 'control', 'create required', 'create table',
        -            'cwdir', 'data', 'day_format', 'def', 'default', 'defctl',
        -            'defprt', 'deftty', 'delete required', 'dictionary', 'dim', 'direct',
        -            'directory', 'disable', 'drop', 'drop_box', 'dump', 'edit',
        -            'else', 'enable', 'end switch', 'end', 'end_if', 'endtrace',
        -            'enter', 'erase', 'error_handler', 'escape', 'event', 'execute',
        -            'exit', 'exitto', 'extract', 'file', 'find', 'floating point',
        -            'for', 'function', 'get_file_box', 'gosub', 'goto', 'grid',
        -            'h_scrollbar', 'hide', 'if', 'index', 'indexed', 'input',
        -            'insert', 'invoke', 'iolist', 'keyed', 'let', 'like',
        -            'line_switch', 'list', 'list_box', 'load', 'local', 'lock',
        -            'long_form', 'menu_bar', 'merge', 'message_lib', 'mnemonic',
        -            'msgbox', 'multi_line', 'multi_media', 'next', 'object', 'obtain',
        -            'on', 'open', 'password', 'perform', 'pop', 'popup_menu',
        -            'precision', 'prefix', 'preinput', 'print', 'process', 'program',
        -            'property', 'purge', 'quit', 'radio_button', 'randomize',
        -            'read', 'record', 'redim', 'refile', 'release', 'rem', 'remove',
        -            'rename', 'renumber', 'repeat', 'reset', 'restore', 'retry',
        -            'return', 'round', 'run', 'save', 'select', 'serial', 'server',
        -            'set_focus', 'set_nbf', 'set_param', 'setctl', 'setday', 'setdev',
        -            'setdrive', 'seterr', 'setesc', 'setfid', 'setmouse', 'settime',
        -            'settrace', 'short_form', 'show', 'sort', 'start', 'static',
        -            'step', 'stop', 'switch', 'system_help', 'system_jrnl', 'table',
        -            'then', 'to', 'translate', 'tristate_box', 'unlock', 'until',
        -            'update', 'user_lex', 'v_scrollbar', 'vardrop_box', 'varlist_box',
        -            'via', 'video_palette', 'wait', 'wend', 'while', 'winprt_setup',
        -            'with', 'write'
        -            ),
        -        2 => array(
        -            // System Functions
        -            '@x', '@y', 'abs', 'acs', 'and', 'arg', 'asc', 'asn', 'ath',
        -            'atn', 'bin', 'bsz', 'chg', 'chr', 'cmp', 'cos', 'cpl',
        -            'crc', 'cse', 'ctl', 'cvs', 'dec', 'dir', 'dll', 'dsk',
        -            'dte', 'env', 'ept', 'err', 'evn', 'evs', 'exp', 'ffn',
        -            'fib', 'fid', 'fin', 'fpt', 'gap', 'gbl', 'gep', 'hsa',
        -            'hsh', 'hta', 'hwn', 'i3e', 'ind', 'int', 'iol', 'ior',
        -            'jul', 'jst', 'kec', 'kef', 'kel', 'ken', 'kep', 'key',
        -            'kgn', 'lcs', 'len', 'lno', 'log', 'lrc', 'lst', 'max',
        -            'mem', 'mid', 'min', 'mnm', 'mod', 'msg', 'msk', 'mxc',
        -            'mxl', 'new', 'not', 'nul', 'num', 'obj', 'opt', 'pad',
        -            'pck', 'pfx', 'pgm', 'pos', 'prc', 'prm', 'pth', 'pub',
        -            'rcd', 'rdx', 'rec', 'ref', 'rnd', 'rno', 'sep', 'sgn',
        -            'sin', 'sqr', 'srt', 'ssz', 'stk', 'stp', 'str', 'sub',
        -            'swp', 'sys', 'tan', 'tbl', 'tcb', 'tmr', 'trx', 'tsk',
        -            'txh', 'txw', 'ucp', 'ucs', 'upk', 'vin', 'vis', 'xeq',
        -            'xfa', 'xor', '_obj'
        -            ),
        -        3 => array(
        -            // System Variables
        -            // Vars that are duplicates of functions
        -            // 'ctl', 'err', 'pfx', 'prm', 'rnd', 'sep', 'sys',
        -            'bkg', 'chn', 'day', 'dlm', 'dsz', 'eom', 'ers', 'esc',
        -            'gfn', 'gid', 'hfn', 'hlp', 'hwd', 'lfa', 'lfo', 'lip',
        -            'lpg', 'lwd', 'mse', 'msl', 'nar', 'nid', 'pgn', 'psz',
        -            'quo', 'ret', 'sid', 'ssn', 'tim', 'tme', 'tms', 'tsm',
        -            'uid', 'unt', 'who'
        -
        -            ),
        -        4 => array(
        -            // Nomads Variables
        -            '%Flmaint_Lib$', '%Flmaint_Msg$', '%Nomads_Activation_Ok',
        -            '%Nomads_Auto_Qry', '%Nomads_Disable_Debug',
        -            '%Nomads_Disable_Trace', '%Nomads_Fkey_Handler$',
        -            '%Nomads_Fkey_Tbl$', '%Nomads_Notest', '%Nomads_Onexit$',
        -            '%Nomads_Post_Display', '%Nomads_Pre_Display$',
        -            '%Nomads_Process$', '%Nomads_Trace_File$',
        -            '%Nomad_Actv_Folder_Colors$', '%Nomad_Automation_Enabled',
        -            '%Nomad_Auto_Close', '%Nomad_Center_Wdw', '%Nomad_Concurrent_Wdw',
        -            '%Nomad_Custom_Define', '%Nomad_Custom_Dir$',
        -            '%Nomad_Custom_Genmtc', '%Nomad_Custom_Skip_Definition',
        -            '%Nomad_Def_Sfx$', '%Nomad_Enter_Tab', '%Nomad_Esc_Sel',
        -            '%Nomad_Isjavx', '%Nomad_Iswindx', '%Nomad_Iswindx$',
        -            '%Nomad_Menu$', '%Nomad_Menu_Leftedge_Clr$',
        -            '%Nomad_Menu_Textbackground_Clr$', '%Nomad_Mln_Sep$',
        -            '%Nomad_Msgmnt$', '%Nomad_Noplusw', '%Nomad_No_Customize',
        -            '%Nomad_Object_Persistence', '%Nomad_Object_Resize',
        -            '%Nomad_Open_Load', '%Nomad_Override_Font$',
        -            '%Nomad_Palette_Loaded', '%Nomad_Panel_Info_Force',
        -            '%Nomad_Panel_Info_Prog$', '%Nomad_Pnl_Def_Colour$',
        -            '%Nomad_Pnl_Def_Font$', '%Nomad_Prg_Cache', '%Nomad_Qry_Attr$',
        -            '%Nomad_Qry_Btn$', '%Nomad_Qry_Clear_Start', '%Nomad_Qry_Tip$',
        -            '%Nomad_Qry_Wide', '%Nomad_Query_Clear_Status', '%Nomad_Query_Kno',
        -            '%Nomad_Query_No_Gray', '%Nomad_Query_Odb_Ignore',
        -            '%Nomad_Query_Retkno', '%Nomad_Query_Sbar_Max',
        -            '%Nomad_Relative_Wdw', '%Nomad_Save_Qry_Path', '%Nomad_Script_Fn',
        -            '%Nomad_Script_Log', '%Nomad_Script_Wdw',
        -            '%Nomad_Skip_Change_Logic', '%Nomad_Skip_Onselect_Logic',
        -            '%Nomad_Stk$', '%Nomad_Tab_Dir', '%Nomad_Timeout',
        -            '%Nomad_Turbo_Off', '%Nomad_Visual_Effect',
        -            '%Nomad_Visual_Override', '%Nomad_Win_Ver', '%Nomad_Xchar',
        -            '%Nomad_Xmax', '%Nomad_Ychar', '%Nomad_Ymax', '%Scr_Def_Attr$',
        -            '%Scr_Def_H_Fl$', '%Scr_Def_H_Id$', '%Scr_Lib', '%Scr_Lib$',
        -            '%Z__Usr_Sec$', 'Alternate_Panel$', 'Alternate_Panel_Type$',
        -            'Arg_1$', 'Arg_10$', 'Arg_11$', 'Arg_12$', 'Arg_13$', 'Arg_14$',
        -            'Arg_15$', 'Arg_16$', 'Arg_17$', 'Arg_18$', 'Arg_19$', 'Arg_2$',
        -            'Arg_20$', 'Arg_3$', 'Arg_4$', 'Arg_5$', 'Arg_6$', 'Arg_7$',
        -            'Arg_8$', 'Arg_9$', 'Change_Flg', 'Cmd_Str$', 'Default_Prog$',
        -            'Disp_Cmd$', 'Entire_Record$', 'Exit_Cmd$', 'Fldr_Default_Prog$',
        -            'Folder_Id$', 'Id', 'Id$', 'Ignore_Exit', 'Initialize_Flg',
        -            'Init_Text$', 'Init_Val$', 'Main_Scrn_K$', 'Mnu_Ln$',
        -            'Next_Folder', 'Next_Id', 'Next_Id$', 'No_Flush', 'Prime_Key$',
        -            'Prior_Val', 'Prior_Val$', 'Qry_Val$', 'Refresh_Flg',
        -            'Replacement_Folder$', 'Replacement_Lib$', 'Replacement_Scrn$',
        -            'Scrn_Id$', 'Scrn_K$', 'Scrn_Lib$', 'Tab_Table$', '_Eom$'
        -            ),
        -        5 => array(
        -            // Mnemonics
        -            "'!w'", "'*c'", "'*h'", "'*i'", "'*o'", "'*r'", "'*x'",
        -            "'+b'", "'+d'", "'+e'", "'+f'", "'+i'", "'+n'",
        -            "'+p'", "'+s'", "'+t'", "'+u'", "'+v'", "'+w'", "'+x'",
        -            "'+z'", "'-b'", "'-d'", "'-e'", "'-f'", "'-i'",
        -            "'-n'", "'-p'", "'-s'", "'-t'", "'-u'", "'-v'", "'-w'",
        -            "'-x'", "'-z'", "'2d'", "'3d'", "'4d'", "'@@'", "'ab'",
        -            "'arc'", "'at'", "'backgr'", "'bb'", "'be'", "'beep'",
        -            "'bg'", "'bi'", "'bj'", "'bk'", "'black'", "'blue'",
        -            "'bm'", "'bo'", "'box'", "'br'", "'bs'", "'bt'", "'bu'",
        -            "'bw'", "'bx'", "'caption'", "'ce'", "'cf'", "'ch'",
        -            "'ci'", "'circle'", "'cl'", "'colour'", "'cp'", "'cpi'",
        -            "'cr'", "'cs'", "'cursor'", "'cyan''_cyan'", "'dc'",
        -            "'default'", "'df'", "'dialogue'", "'dn'", "'do'",
        -            "'drop'", "'eb'", "'ee'", "'ef'", "'eg'", "'ei'", "'ej'",
        -            "'el'", "'em'", "'eo'", "'ep'", "'er'", "'es'", "'et'",
        -            "'eu'", "'ew'", "'ff'", "'fill'", "'fl'", "'font'",
        -            "'frame'", "'gd'", "'ge'", "'gf'", "'goto'", "'green'",
        -            "'gs'", "'hide'", "'ic'", "'image'", "'jc'",
        -            "'jd'", "'jl'", "'jn'", "'jr'", "'js'", "'l6'", "'l8'",
        -            "'lc'", "'ld'", "'lf'", "'li'", "'line'", "'lm'",
        -            "'lpi'", "'lt'", "'magenta'", "'maxsize'", "'me'",
        -            "'message'", "'minsize'", "'mn'", "'mode'",
        -            "'move'", "'mp'", "'ms'", "'ni'", "'offset'", "'option'",
        -            "'pe'", "'pen'", "'picture'", "'pie'", "'pm'", "'polygon'",
        -            "'pop'", "'ps'", "'push'", "'rb'", "'rc'", "'rectangle'",
        -            "'red'", "'rl'", "'rm'", "'rp'", "'rs'", "'rt'", "'sb'",
        -            "'scroll'", "'sd'", "'se'", "'sf'", "'show'", "'size'",
        -            "'sl'", "'sn'", "'sp'", "'sr'", "'swap'", "'sx'", "'text'",
        -            "'textwdw'", "'tr'", "'tw'", "'uc'", "'up'", "'vt'", "'wa'",
        -            "'wc'", "'wd'", "'wg'", "'white'", "'window'", "'wm'",
        -            "'wp'", "'wr'", "'wrap'", "'ws'", "'wx'", "'xp'", "'yellow'",
        -            "'zx'", "'_black'", "'_blue'", "'_colour'", "'_green'",
        -            "'_magenta'", "'_red'", "'_white'", "'_yellow'"
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('+', '-', '*', '/', '^', '|'),
        -        1 => array('++', '--', '+=', '-=', '*=', '/=', '^=', '|='),
        -        2 => array('<', '>', '='),
        -        3 => array('(', ')', '[', ']', '{', '}'),
        -        4 => array(',', '@', ';', '\\')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: navy;', // Directives
        -            2 => 'color: blue;', // System Functions
        -            3 => 'color: blue;', // System Variables
        -            4 => 'color: #6A5ACD; font-style: italic;', // Nomads Global Variables
        -            5 => 'color: #BDB76B;', // Mnemonics
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080; font-style: italic;',
        -            2 => 'color: #008080;',
        -            'MULTI' => 'color: #008080; font-style: italic;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: green;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #00008B;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;',
        -            1 => 'color: #000099;',
        -            2 => 'color: #000099;',
        -            3 => 'color: #0000C9;',
        -            4 => 'color: #000099;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #006400; font-weight: bold',
        -            2 => 'color: #6A5ACD;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.allbasic.info./wiki/index.php/PX:Directive_{FNAME}',
        -        2 => 'http://www.allbasic.info./wiki/index.php/PX:System_function_{FNAME}',
        -        3 => 'http://www.allbasic.info./wiki/index.php/PX:System_variable_{FNAME}',
        -        4 => 'http://www.allbasic.info./wiki/index.php/PX:Nomads_{FNAME}',
        -        5 => 'http://www.allbasic.info./wiki/index.php/PX:Mnemonic_{FNAMEU}'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => "'"
        -        ),
        -    'REGEXPS' => array(
        -        1 => array(
        -            // Line Labels
        -            GESHI_SEARCH => '([[:space:]])([a-zA-Z_][a-zA-Z0-9_]+)(:)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        2 => array(
        -            // Global String Variables
        -            GESHI_SEARCH => '(\%)([a-zA-Z_][a-zA-Z0-9_]+)(\$)',
        -            GESHI_REPLACE => '\\1\\2\\3',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php
        deleted file mode 100644
        index f685dd0e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php
        +++ /dev/null
        @@ -1,301 +0,0 @@
        - 'PureBasic',
        -    'COMMENT_SINGLE' => array( 1 => ";"  ),
        -    'COMMENT_MULTI' => array( ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            // Keywords
        -            'And', 'As', 'Break', 'CallDebugger', 'Case', 'CompilerCase', 'CompilerDefault', 'CompilerElse', 'CompilerEndIf', 'CompilerEndSelect',
        -            'CompilerError', 'CompilerIf', 'CompilerSelect', 'Continue', 'Data', 'DataSection', 'EndDataSection', 'Debug', 'DebugLevel', 'Declare',
        -            'DeclareCDLL', 'DeclareDLL', 'Default', 'Define', 'Dim', 'DisableASM', 'DisableDebugger', 'DisableExplicit', 'Else', 'ElseIf', 'EnableASM',
        -            'EnableDebugger', 'EnableExplicit', 'End', 'EndEnumeration', 'EndIf', 'EndImport', 'EndInterface', 'EndMacro', 'EndProcedure',
        -            'EndSelect', 'EndStructure', 'EndStructureUnion', 'EndWith', 'Enumeration', 'Extends', 'FakeReturn', 'For', 'Next', 'ForEach',
        -            'ForEver', 'Global', 'Gosub', 'Goto', 'If', 'Import', 'ImportC', 'IncludeBinary', 'IncludeFile', 'IncludePath', 'Interface', 'Macro',
        -            'NewList', 'Not', 'Or', 'Procedure', 'ProcedureC', 'ProcedureCDLL', 'ProcedureDLL', 'ProcedureReturn', 'Protected', 'Prototype',
        -            'PrototypeC', 'Read', 'ReDim', 'Repeat', 'Until', 'Restore', 'Return', 'Select', 'Shared', 'Static', 'Step', 'Structure', 'StructureUnion',
        -            'Swap', 'To', 'Wend', 'While', 'With', 'XIncludeFile', 'XOr'
        -            ),
        -        2 => array(
        -            // All Functions
        -            'Abs', 'ACos', 'Add3DArchive', 'AddBillboard', 'AddDate', 'AddElement', 'AddGadgetColumn', 'AddGadgetItem',
        -            'AddKeyboardShortcut', 'AddMaterialLayer', 'AddPackFile', 'AddPackMemory', 'AddStatusBarField', 'AddSysTrayIcon',
        -            'AllocateMemory', 'AmbientColor', 'AnimateEntity', 'Asc', 'ASin', 'ATan', 'AudioCDLength', 'AudioCDName', 'AudioCDStatus',
        -            'AudioCDTrackLength', 'AudioCDTracks', 'AudioCDTrackSeconds', 'AvailableProgramOutput', 'AvailableScreenMemory',
        -            'BackColor', 'Base64Decoder', 'Base64Encoder', 'BillboardGroupLocate', 'BillboardGroupMaterial', 'BillboardGroupX',
        -            'BillboardGroupY', 'BillboardGroupZ', 'BillboardHeight', 'BillboardLocate', 'BillboardWidth', 'BillboardX', 'BillboardY', 'BillboardZ',
        -            'Bin', 'BinQ', 'Blue', 'Box', 'ButtonGadget', 'ButtonImageGadget', 'CalendarGadget', 'CallCFunction', 'CallCFunctionFast',
        -            'CallFunction', 'CallFunctionFast', 'CameraBackColor', 'CameraFOV', 'CameraLocate', 'CameraLookAt', 'CameraProjection',
        -            'CameraRange', 'CameraRenderMode', 'CameraX', 'CameraY', 'CameraZ', 'CatchImage', 'CatchSound', 'CatchSprite',
        -            'CatchXML', 'ChangeAlphaIntensity', 'ChangeCurrentElement', 'ChangeGamma', 'ChangeListIconGadgetDisplay',
        -            'ChangeSysTrayIcon', 'CheckBoxGadget', 'CheckEntityCollision', 'CheckFilename', 'ChildXMLNode', 'Chr', 'Circle',
        -            'ClearBillboards', 'ClearClipboard', 'ClearConsole', 'ClearError', 'ClearGadgetItemList', 'ClearList', 'ClearScreen', 'ClipSprite',
        -            'CloseConsole', 'CloseDatabase', 'CloseFile', 'CloseGadgetList', 'CloseHelp', 'CloseLibrary', 'CloseNetworkConnection',
        -            'CloseNetworkServer', 'ClosePack', 'ClosePreferences', 'CloseProgram', 'CloseScreen', 'CloseSubMenu', 'CloseWindow',
        -            'ColorRequester', 'ComboBoxGadget', 'CompareMemory', 'CompareMemoryString', 'ConnectionID', 'ConsoleColor',
        -            'ConsoleCursor', 'ConsoleError', 'ConsoleLocate', 'ConsoleTitle', 'ContainerGadget', 'CopyDirectory', 'CopyEntity',
        -            'CopyFile', 'CopyImage', 'CopyLight', 'CopyMaterial', 'CopyMemory', 'CopyMemoryString', 'CopyMesh', 'CopySprite',
        -            'CopyTexture', 'CopyXMLNode', 'Cos', 'CountBillboards', 'CountGadgetItems', 'CountLibraryFunctions', 'CountList',
        -            'CountMaterialLayers', 'CountProgramParameters', 'CountRenderedTriangles', 'CountString', 'CRC32Fingerprint',
        -            'CreateBillboardGroup', 'CreateCamera', 'CreateDirectory', 'CreateEntity', 'CreateFile', 'CreateGadgetList',
        -            'CreateImage', 'CreateLight', 'CreateMaterial', 'CreateMenu', 'CreateMesh', 'CreateMutex', 'CreateNetworkServer',
        -            'CreatePack', 'CreatePalette', 'CreateParticleEmitter', 'CreatePopupMenu', 'CreatePreferences', 'CreateSprite',
        -            'CreateSprite3D', 'CreateStatusBar', 'CreateTerrain', 'CreateTexture', 'CreateThread', 'CreateToolBar', 'CreateXML',
        -            'CreateXMLNode', 'DatabaseColumnName', 'DatabaseColumns', 'DatabaseColumnType', 'DatabaseDriverDescription',
        -            'DatabaseDriverName', 'DatabaseError', 'DatabaseQuery', 'DatabaseUpdate', 'Date', 'DateGadget', 'Day', 'DayOfWeek',
        -            'DayOfYear', 'DefaultPrinter', 'Defined', 'Delay', 'DeleteDirectory', 'DeleteElement', 'DeleteFile', 'DeleteXMLNode',
        -            'DESFingerprint', 'DesktopDepth', 'DesktopFrequency', 'DesktopHeight', 'DesktopMouseX', 'DesktopMouseY', 'DesktopName',
        -            'DesktopWidth', 'DirectoryEntryAttributes', 'DirectoryEntryDate', 'DirectoryEntryName', 'DirectoryEntrySize',
        -            'DirectoryEntryType', 'DisableGadget', 'DisableMaterialLighting', 'DisableMenuItem', 'DisableToolBarButton', 'DisableWindow',
        -            'DisASMCommand', 'DisplayAlphaSprite', 'DisplayPalette', 'DisplayPopupMenu', 'DisplayRGBFilter', 'DisplayShadowSprite',
        -            'DisplaySolidSprite', 'DisplaySprite', 'DisplaySprite3D', 'DisplayTranslucentSprite', 'DisplayTransparentSprite', 'DragFiles',
        -            'DragImage', 'DragOSFormats', 'DragPrivate', 'DragText', 'DrawAlphaImage', 'DrawImage', 'DrawingBuffer',
        -            'DrawingBufferPitch', 'DrawingBufferPixelFormat', 'DrawingFont', 'DrawingMode', 'DrawText', 'EditorGadget',
        -            'egrid_AddColumn', 'egrid_AddRows', 'egrid_AppendCells', 'egrid_ClearRows', 'egrid_CopyCells',
        -            'egrid_CreateCellCallback', 'egrid_CreateGrid', 'egrid_DeleteCells', 'egrid_FastDeleteCells', 'egrid_FreeGrid',
        -            'egrid_GetCellSelection', 'egrid_GetCellText', 'egrid_GetColumnOrderArray', 'egrid_HasSelectedCellChanged', 'egrid_Height',
        -            'egrid_HideEdit', 'egrid_HideGrid', 'egrid_MakeCellVisible', 'egrid_NumberOfColumns', 'egrid_NumberOfRows',
        -            'egrid_PasteCells', 'egrid_Register', 'egrid_RemoveCellCallback', 'egrid_RemoveColumn', 'egrid_RemoveRow', 'egrid_Resize',
        -            'egrid_SelectCell', 'egrid_SelectedColumn', 'egrid_SelectedRow', 'egrid_SetCellSelection', 'egrid_SetCellText',
        -            'egrid_SetColumnOrderArray', 'egrid_SetHeaderFont', 'egrid_SetHeaderHeight', 'egrid_SetOption', 'egrid_Width', 'egrid_x',
        -            'egrid_y', 'EjectAudioCD', 'ElapsedMilliseconds', 'Ellipse', 'EnableGadgetDrop', 'EnableGraphicalConsole',
        -            'EnableWindowDrop', 'EnableWorldCollisions', 'EnableWorldPhysics', 'Engine3DFrameRate', 'EntityAngleX',
        -            'EntityAnimationLength', 'EntityLocate', 'EntityMaterial', 'EntityMesh', 'EntityPhysicBody', 'EntityRenderMode',
        -            'EntityX', 'EntityY', 'EntityZ', 'EnvironmentVariableName', 'EnvironmentVariableValue', 'Eof', 'EventClient',
        -            'EventDropAction', 'EventDropBuffer', 'EventDropFiles', 'EventDropImage', 'EventDropPrivate', 'EventDropSize',
        -            'EventDropText', 'EventDropType', 'EventDropX', 'EventDropY', 'EventGadget', 'EventlParam', 'EventMenu', 'EventServer',
        -            'EventType', 'EventWindow', 'EventwParam', 'ExamineDatabaseDrivers', 'ExamineDesktops', 'ExamineDirectory',
        -            'ExamineEnvironmentVariables', 'ExamineIPAddresses', 'ExamineJoystick', 'ExamineKeyboard', 'ExamineLibraryFunctions',
        -            'ExamineMouse', 'ExaminePreferenceGroups', 'ExaminePreferenceKeys', 'ExamineScreenModes', 'ExamineWorldCollisions',
        -            'ExamineXMLAttributes', 'ExplorerComboGadget', 'ExplorerListGadget', 'ExplorerTreeGadget', 'ExportXML',
        -            'ExportXMLSize', 'FileBuffersSize', 'FileID', 'FileSeek', 'FileSize', 'FillArea', 'FindString', 'FinishDirectory',
        -            'FirstDatabaseRow', 'FirstElement', 'FirstWorldCollisionEntity', 'FlipBuffers', 'FlushFileBuffers', 'Fog', 'FontID',
        -            'FontRequester', 'FormatDate', 'FormatXML', 'Frame3DGadget', 'FreeBillboardGroup', 'FreeCamera', 'FreeEntity',
        -            'FreeFont', 'FreeGadget', 'FreeImage', 'FreeLight', 'FreeMaterial', 'FreeMemory', 'FreeMenu', 'FreeMesh',
        -            'FreeModule', 'FreeMovie', 'FreeMutex', 'FreePalette', 'FreeParticleEmitter', 'FreeSound', 'FreeSprite',
        -            'FreeSprite3D', 'FreeStatusBar', 'FreeTexture', 'FreeToolBar', 'FreeXML', 'FrontColor', 'GadgetHeight', 'GadgetID',
        -            'GadgetItemID', 'GadgetToolTip', 'GadgetType', 'GadgetWidth', 'GadgetX', 'GadgetY', 'GetActiveGadget',
        -            'GetActiveWindow', 'GetClientIP', 'GetClientPort', 'GetClipboardImage', 'GetClipboardText', 'GetCurrentDirectory',
        -            'GetCurrentEIP', 'GetDatabaseDouble', 'GetDatabaseFloat', 'GetDatabaseLong', 'GetDatabaseQuad', 'GetDatabaseString',
        -            'GetDisASMString', 'GetEntityAnimationTime', 'GetEntityFriction', 'GetEntityMass', 'GetEnvironmentVariable',
        -            'GetErrorAddress', 'GetErrorCounter', 'GetErrorDescription', 'GetErrorDLL', 'GetErrorLineNR', 'GetErrorModuleName',
        -            'GetErrorNumber', 'GetErrorRegister', 'GetExtensionPart', 'GetFileAttributes', 'GetFileDate', 'GetFilePart', 'GetFunction',
        -            'GetFunctionEntry', 'GetGadgetAttribute', 'GetGadgetColor', 'GetGadgetData', 'GetGadgetFont',
        -            'GetGadgetItemAttribute', 'GetGadgetItemColor', 'GetGadgetItemData', 'GetGadgetItemState', 'GetGadgetItemText',
        -            'GetGadgetState', 'GetGadgetText', 'GetHomeDirectory', 'GetMenuItemState', 'GetMenuItemText', 'GetMenuTitleText',
        -            'GetModulePosition', 'GetModuleRow', 'GetPaletteColor', 'GetPathPart', 'GetTemporaryDirectory',
        -            'GetToolBarButtonState', 'GetWindowColor', 'GetWindowState', 'GetWindowTitle', 'GetXMLAttribute', 'GetXMLEncoding',
        -            'GetXMLNodeName', 'GetXMLNodeOffset', 'GetXMLNodeText', 'GetXMLStandalone', 'GoToEIP', 'GrabImage', 'GrabSprite',
        -            'Green', 'Hex', 'HexQ', 'HideBillboardGroup', 'HideEntity', 'HideGadget', 'HideLight', 'HideMenu', 'HideParticleEmitter',
        -            'HideWindow', 'Hostname', 'Hour', 'HyperLinkGadget', 'ImageDepth', 'ImageGadget', 'ImageHeight', 'ImageID',
        -            'ImageOutput', 'ImageWidth', 'InitAudioCD', 'InitEngine3D', 'InitJoystick', 'InitKeyboard', 'InitMouse', 'InitMovie',
        -            'InitNetwork', 'InitPalette', 'InitScintilla', 'InitSound', 'InitSprite', 'InitSprite3D', 'Inkey', 'Input', 'InputRequester',
        -            'InsertElement', 'Int', 'IntQ', 'IPAddressField', 'IPAddressGadget', 'IPString', 'IsBillboardGroup', 'IsCamera', 'IsDatabase',
        -            'IsDirectory', 'IsEntity', 'IsFile', 'IsFont', 'IsGadget', 'IsImage', 'IsLibrary', 'IsLight', 'IsMaterial', 'IsMenu', 'IsMesh',
        -            'IsModule', 'IsMovie', 'IsPalette', 'IsParticleEmitter', 'IsProgram', 'IsScreenActive', 'IsSound', 'IsSprite', 'IsSprite3D',
        -            'IsStatusBar', 'IsSysTrayIcon', 'IsTexture', 'IsThread', 'IsToolBar', 'IsWindow', 'IsXML', 'JoystickAxisX', 'JoystickAxisY',
        -            'JoystickButton', 'KeyboardInkey', 'KeyboardMode', 'KeyboardPushed', 'KeyboardReleased', 'KillProgram', 'KillThread',
        -            'LastElement', 'LCase', 'Left', 'Len', 'LibraryFunctionAddress', 'LibraryFunctionName', 'LibraryID', 'LightColor',
        -            'LightLocate', 'LightSpecularColor', 'Line', 'LineXY', 'ListIconGadget', 'ListIndex', 'ListViewGadget', 'LoadFont',
        -            'LoadImage', 'LoadMesh', 'LoadModule', 'LoadMovie', 'LoadPalette', 'LoadSound', 'LoadSprite', 'LoadTexture',
        -            'LoadWorld', 'LoadXML', 'Loc', 'LockMutex', 'Lof', 'Log', 'Log10', 'LSet', 'LTrim', 'MainXMLNode', 'MakeIPAddress',
        -            'MaterialAmbientColor', 'MaterialBlendingMode', 'MaterialDiffuseColor', 'MaterialFilteringMode', 'MaterialID',
        -            'MaterialShadingMode', 'MaterialSpecularColor', 'MD5FileFingerprint', 'MD5Fingerprint', 'MDIGadget', 'MemorySize',
        -            'MemoryStringLength', 'MenuBar', 'MenuHeight', 'MenuID', 'MenuItem', 'MenuTitle', 'MeshID', 'MessageRequester',
        -            'Mid', 'Minute', 'ModuleVolume', 'Month', 'MouseButton', 'MouseDeltaX', 'MouseDeltaY', 'MouseLocate', 'MouseWheel',
        -            'MouseX', 'MouseY', 'MoveBillboard', 'MoveBillboardGroup', 'MoveCamera', 'MoveEntity', 'MoveLight', 'MoveMemory',
        -            'MoveParticleEmitter', 'MoveXMLNode', 'MovieAudio', 'MovieHeight', 'MovieInfo', 'MovieLength', 'MovieSeek',
        -            'MovieStatus', 'MovieWidth', 'NetworkClientEvent', 'NetworkServerEvent', 'NewPrinterPage', 'NextDatabaseDriver',
        -            'NextDatabaseRow', 'NextDirectoryEntry', 'NextElement', 'NextEnvironmentVariable', 'NextIPAddress',
        -            'NextLibraryFunction', 'NextPackFile', 'NextPreferenceGroup', 'NextPreferenceKey', 'NextScreenMode',
        -            'NextSelectedFileName', 'NextWorldCollision', 'NextXMLAttribute', 'NextXMLNode', 'OffsetOf', 'OnErrorExit',
        -            'OnErrorGosub', 'OnErrorGoto', 'OnErrorResume', 'OpenComPort', 'OpenConsole', 'OpenDatabase',
        -            'OpenDatabaseRequester', 'OpenFile', 'OpenFileRequester', 'OpenGadgetList', 'OpenHelp', 'OpenLibrary',
        -            'OpenNetworkConnection', 'OpenPack', 'OpenPreferences', 'OpenScreen', 'OpenSubMenu', 'OpenWindow',
        -            'OpenWindowedScreen', 'OptionGadget', 'OSVersion', 'PackerCallback', 'PackFileSize', 'PackMemory', 'PanelGadget',
        -            'ParentXMLNode', 'Parse3DScripts', 'ParseDate', 'ParticleColorFader', 'ParticleColorRange', 'ParticleEmissionRate',
        -            'ParticleEmitterDirection', 'ParticleEmitterLocate', 'ParticleEmitterX', 'ParticleEmitterY', 'ParticleEmitterZ',
        -            'ParticleMaterial', 'ParticleSize', 'ParticleTimeToLive', 'ParticleVelocity', 'PathRequester', 'PauseAudioCD',
        -            'PauseMovie', 'PauseThread', 'PeekB', 'PeekC', 'PeekD', 'PeekF', 'PeekL', 'PeekQ', 'PeekS', 'PeekW', 'PlayAudioCD',
        -            'PlayModule', 'PlayMovie', 'PlaySound', 'Plot', 'Point', 'PokeB', 'PokeC', 'PokeD', 'PokeF', 'PokeL', 'PokeQ', 'PokeS',
        -            'PokeW', 'Pow', 'PreferenceComment', 'PreferenceGroup', 'PreferenceGroupName', 'PreferenceKeyName',
        -            'PreferenceKeyValue', 'PreviousDatabaseRow', 'PreviousElement', 'PreviousXMLNode', 'Print', 'PrinterOutput',
        -            'PrinterPageHeight', 'PrinterPageWidth', 'PrintN', 'PrintRequester', 'ProgramExitCode', 'ProgramFilename',
        -            'ProgramID', 'ProgramParameter', 'ProgramRunning', 'ProgressBarGadget', 'Random', 'RandomSeed', 'RawKey',
        -            'ReadByte', 'ReadCharacter', 'ReadConsoleData', 'ReadData', 'ReadDouble', 'ReadFile', 'ReadFloat', 'ReadLong',
        -            'ReadPreferenceDouble', 'ReadPreferenceFloat', 'ReadPreferenceLong', 'ReadPreferenceQuad',
        -            'ReadPreferenceString', 'ReadProgramData', 'ReadProgramError', 'ReadProgramString', 'ReadQuad', 'ReadString',
        -            'ReadStringFormat', 'ReadWord', 'ReAllocateMemory', 'ReceiveNetworkData', 'ReceiveNetworkFile', 'Red',
        -            'Reg_DeleteEmptyKey', 'Reg_DeleteKey', 'Reg_DeleteValue', 'Reg_GetErrorMsg', 'Reg_GetErrorNr',
        -            'Reg_GetValueTyp', 'Reg_ListSubKey', 'Reg_ListSubValue', 'Reg_ReadBinary', 'Reg_ReadExpandString',
        -            'Reg_ReadLong', 'Reg_ReadMultiLineString', 'Reg_ReadQuad', 'Reg_ReadString', 'Reg_WriteBinary',
        -            'Reg_WriteExpandString', 'Reg_WriteLong', 'Reg_WriteMultiLineString', 'Reg_WriteQuad', 'Reg_WriteString',
        -            'ReleaseMouse', 'RemoveBillboard', 'RemoveEnvironmentVariable', 'RemoveGadgetColumn', 'RemoveGadgetItem',
        -            'RemoveKeyboardShortcut', 'RemoveMaterialLayer', 'RemovePreferenceGroup', 'RemovePreferenceKey',
        -            'RemoveString', 'RemoveSysTrayIcon', 'RemoveXMLAttribute', 'RenameFile', 'RenderMovieFrame', 'RenderWorld',
        -            'ReplaceString', 'ResetList', 'ResizeBillboard', 'ResizeEntity', 'ResizeGadget', 'ResizeImage', 'ResizeMovie',
        -            'ResizeParticleEmitter', 'ResizeWindow', 'ResolveXMLAttributeName', 'ResolveXMLNodeName', 'ResumeAudioCD',
        -            'ResumeMovie', 'ResumeThread', 'RGB', 'Right', 'RootXMLNode', 'RotateBillboardGroup', 'RotateCamera',
        -            'RotateEntity', 'RotateMaterial', 'RotateSprite3D', 'Round', 'RSet', 'RTrim', 'RunProgram', 'SaveFileRequester',
        -            'SaveImage', 'SaveSprite', 'SaveXML', 'ScaleEntity', 'ScaleMaterial', 'ScintillaGadget', 'ScintillaSendMessage',
        -            'ScreenID', 'ScreenModeDepth', 'ScreenModeHeight', 'ScreenModeRefreshRate', 'ScreenModeWidth',
        -            'ScreenOutput', 'ScrollAreaGadget', 'ScrollBarGadget', 'ScrollMaterial', 'Second', 'SecondWorldCollisionEntity',
        -            'SelectedFilePattern', 'SelectedFontColor', 'SelectedFontName', 'SelectedFontSize', 'SelectedFontStyle',
        -            'SelectElement', 'SendNetworkData', 'SendNetworkFile', 'SendNetworkString', 'SetActiveGadget',
        -            'SetActiveWindow', 'SetClipboardImage', 'SetClipboardText', 'SetCurrentDirectory', 'SetDragCallback',
        -            'SetDropCallback', 'SetEntityAnimationTime', 'SetEntityFriction', 'SetEntityMass', 'SetEnvironmentVariable',
        -            'SetErrorNumber', 'SetFileAttributes', 'SetFileDate', 'SetFrameRate', 'SetGadgetAttribute', 'SetGadgetColor',
        -            'SetGadgetData', 'SetGadgetFont', 'SetGadgetItemAttribute', 'SetGadgetItemColor', 'SetGadgetItemData',
        -            'SetGadgetItemState', 'SetGadgetItemText', 'SetGadgetState', 'SetGadgetText', 'SetMenuItemState',
        -            'SetMenuItemText', 'SetMenuTitleText', 'SetMeshData', 'SetModulePosition', 'SetPaletteColor', 'SetRefreshRate',
        -            'SetToolBarButtonState', 'SetWindowCallback', 'SetWindowColor', 'SetWindowState', 'SetWindowTitle',
        -            'SetXMLAttribute', 'SetXMLEncoding', 'SetXMLNodeName', 'SetXMLNodeOffset', 'SetXMLNodeText',
        -            'SetXMLStandalone', 'Sin', 'SizeOf', 'SkyBox', 'SkyDome', 'SmartWindowRefresh', 'SortArray', 'SortList',
        -            'SortStructuredArray', 'SortStructuredList', 'SoundFrequency', 'SoundPan', 'SoundVolume', 'Space',
        -            'SpinGadget', 'SplitterGadget', 'Sprite3DBlendingMode', 'Sprite3DQuality', 'SpriteCollision', 'SpriteDepth',
        -            'SpriteHeight', 'SpriteID', 'SpriteOutput', 'SpritePixelCollision', 'SpriteWidth', 'Sqr', 'Start3D', 'StartDrawing',
        -            'StartPrinting', 'StartSpecialFX', 'StatusBarHeight', 'StatusBarIcon', 'StatusBarID', 'StatusBarText',
        -            'StickyWindow', 'Stop3D', 'StopAudioCD', 'StopDrawing', 'StopModule', 'StopMovie', 'StopPrinting',
        -            'StopSound', 'StopSpecialFX', 'Str', 'StrD', 'StrF', 'StringByteLength', 'StringField', 'StringGadget', 'StrQ',
        -            'StrU', 'Subsystem', 'SwapElements', 'SysTrayIconToolTip', 'Tan', 'TerrainHeight', 'TextGadget', 'TextHeight',
        -            'TextureHeight', 'TextureID', 'TextureOutput', 'TextureWidth', 'TextWidth', 'ThreadID', 'ThreadPriority',
        -            'ToolBarHeight', 'ToolBarID', 'ToolBarImageButton', 'ToolBarSeparator', 'ToolBarStandardButton',
        -            'ToolBarToolTip', 'TrackBarGadget', 'TransformSprite3D', 'TransparentSpriteColor', 'TreeGadget', 'Trim',
        -            'TruncateFile', 'TryLockMutex', 'UCase', 'UnlockMutex', 'UnpackMemory', 'UseAudioCD', 'UseBuffer',
        -            'UseGadgetList', 'UseJPEGImageDecoder', 'UseJPEGImageEncoder', 'UseODBCDatabase', 'UseOGGSoundDecoder',
        -            'UsePNGImageDecoder', 'UsePNGImageEncoder', 'UseTGAImageDecoder', 'UseTIFFImageDecoder', 'Val', 'ValD',
        -            'ValF', 'ValQ', 'WaitProgram', 'WaitThread', 'WaitWindowEvent', 'WebGadget', 'WebGadgetPath', 'WindowEvent',
        -            'WindowHeight', 'WindowID', 'WindowMouseX', 'WindowMouseY', 'WindowOutput', 'WindowWidth', 'WindowX',
        -            'WindowY', 'WorldGravity', 'WorldShadows', 'WriteByte', 'WriteCharacter', 'WriteConsoleData', 'WriteData',
        -            'WriteDouble', 'WriteFloat', 'WriteLong', 'WritePreferenceDouble', 'WritePreferenceFloat', 'WritePreferenceLong',
        -            'WritePreferenceQuad', 'WritePreferenceString', 'WriteProgramData', 'WriteProgramString', 'WriteProgramStringN',
        -            'WriteQuad', 'WriteString', 'WriteStringFormat', 'WriteStringN', 'WriteWord', 'XMLAttributeName', 'XMLAttributeValue',
        -            'XMLChildCount', 'XMLError', 'XMLErrorLine', 'XMLErrorPosition', 'XMLNodeFromID', 'XMLNodeFromPath', 'XMLNodePath',
        -            'XMLNodeType', 'XMLStatus', 'Year', 'ZoomSprite3D'
        -            ),
        -        3 => array(
        -            // some ASM instructions
        -            'AAA', 'AAD', 'AAM', 'AAS', 'ADC', 'ADD', 'AND', 'ARPL', 'BOUND', 'BSF', 'BSR', 'BSWAP', 'BT', 'BTC', 'BTR',
        -            'BTS', 'CALL', 'CBW', 'CDQ', 'CLC', 'CLD', 'CLI', 'CLTS', 'CMC', 'CMP', 'CMPS', 'CMPXCHG', 'CWD', 'CWDE',
        -            'DAA', 'DAS', 'DB', 'DD', 'DEC', 'DIV', 'DW', 'ENTER', 'ESC', 'F2XM1', 'FABS', 'FADD', 'FCHS', 'FCLEX',
        -            'FCOM', 'FDIV', 'FDIVR', 'FFREE', 'FINCSTP', 'FINIT', 'FLD', 'FLD1', 'FLDCW', 'FMUL', 'FNOP', 'FPATAN',
        -            'FPREM', 'FRNDINT', 'FSAVE', 'FSCALE', 'FSETPM', 'FSIN', 'FSQRT', 'FST', 'FSTENV', 'FSTSW', 'FSUB',
        -            'FSUBR', 'FTST', 'FUCOM', 'FWAIT', 'FXAM', 'FXCH', 'FXTRACT', 'FYL2X', 'FYL2XP1', 'HLT', 'IDIV', 'IMUL',
        -            'IN', 'INC', 'INS', 'INT', 'INTO', 'INVLPG', 'IRET', 'IRETD', 'JA', 'JAE', 'JB', 'JBE', 'JC', 'JCXZ', 'JE', 'JECXZ',
        -            'JG', 'JGE', 'JL', 'JLE', 'JMP', 'JNA', 'JNAE', 'JNB', 'JNBE', 'JNC', 'JNE', 'JNG', 'JNGE', 'JNL', 'JNLE', 'JNO', 'JNP',
        -            'JNS', 'JNZ', 'JO', 'JP', 'JPE', 'JPO', 'JS', 'JZ', 'LAHF', 'LAR', 'LDS', 'LEA', 'LEAVE', 'LES', 'LFS', 'LGDT', 'LGS',
        -            'LIDT', 'LLDT', 'LMSW', 'LOCK', 'LODS', 'LOOP', 'LOOPE', 'LOOPNE', 'LOOPNZ', 'LOOPZ', 'LSL', 'LSS', 'LTR',
        -            'MOV', 'MOVS', 'MOVSX', 'MOVZX', 'MUL', 'NEG', 'NOP', 'NOT', 'OR', 'OUT', 'OUTS', 'POP', 'POPA', 'POPAD',
        -            'POPF', 'POPFD', 'PUSH', 'PUSHA', 'PUSHAD', 'PUSHF', 'PUSHFD', 'RCL', 'RCR', 'REP', 'REPE', 'REPNE',
        -            'REPNZ', 'REPZ', 'RET', 'RETF', 'ROL', 'ROR', 'SAHF', 'SAL', 'SAR', 'SBB', 'SCAS', 'SETAE', 'SETB', 'SETBE',
        -            'SETC', 'SETE', 'SETG', 'SETGE', 'SETL', 'SETLE', 'SETNA', 'SETNAE', 'SETNB', 'SETNC', 'SETNE', 'SETNG',
        -            'SETNGE', 'SETNL', 'SETNLE', 'SETNO', 'SETNP', 'SETNS', 'SETNZ', 'SETO', 'SETP', 'SETPE', 'SETPO',
        -            'SETS', 'SETZ', 'SGDT', 'SHL', 'SHLD', 'SHR', 'SHRD', 'SIDT', 'SLDT', 'SMSW', 'STC', 'STD', 'STI',
        -            'STOS', 'STR', 'SUB', 'TEST', 'VERR', 'VERW', 'WAIT', 'WBINVD', 'XCHG', 'XLAT', 'XLATB', 'XOR'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '+', '-', '*', '/', '\\', '>', '<', '=', '<=', '>=', '&', '|', '!', '~', '<>', '>>', '<<', '%'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000066; font-weight: bold;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #000fff;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #ff0000; font-style: italic;',
        -            'MULTI' => 'color: #ff0000; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #CC0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '\\'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => false,
        -        1 => false
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php
        deleted file mode 100644
        index f6fd44be..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php
        +++ /dev/null
        @@ -1,62 +0,0 @@
        ->>).*?$(?:\n\.\.\..*?$)*($)/m';
        -$language_data['HIGHLIGHT_STRICT_BLOCK'][-1] = true;
        -
        -$language_data['STYLES']['SCRIPT'][-1] = 'color: #222222;';
        -
        -if(!isset($language_data['COMMENT_REGEXP'])) {
        -    $language_data['COMMENT_REGEXP'] = array();
        -}
        -
        -$language_data['COMMENT_REGEXP'][-1] = '/(?:^|\A\s)(?:>>>|\.\.\.)/m';
        -$language_data['STYLES']['COMMENTS'][-1] = 'color: #444444;';
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php
        deleted file mode 100644
        index 9b83c747..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php
        +++ /dev/null
        @@ -1,271 +0,0 @@
        - 'Python for S60',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'", '"""',"'''",'""','""'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -
        -        /*
        -         ** Set 1: reserved words
        -         ** http://python.org/doc/current/ref/keywords.html
        -         */
        -        1 => array(
        -            'and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', 'lambda', 'return', 'break',
        -            'else', 'global', 'not', 'try', 'class', 'except', 'if', 'or', 'while', 'continue', 'exec',
        -            'import', 'pass', 'yield', 'def', 'finally', 'in', 'print', "<<", ">>", "as"
        -            ),
        -
        -        /*
        -         ** Set 2: builtins
        -         ** http://python.org/doc/current/lib/built-in-funcs.html
        -         */
        -        2 => array(
        -            '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp',
        -            'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile',
        -            'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
        -            'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals',
        -            'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range',
        -            'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',
        -            'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode',
        -            'vars', 'xrange', 'zip',
        -            // Built-in constants: http://python.org/doc/current/lib/node35.html
        -            'False', 'True', 'None', 'NotImplemented', 'Ellipsis',
        -            // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html
        -            'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError',
        -            'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError',
        -            'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError',
        -            'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError',
        -            'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError',
        -            'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError',
        -            'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning',
        -            'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning',
        -            'RuntimeWarning', 'FutureWarning',
        -            //Symbian Errors
        -            "SymbianError", "KernelError",
        -            // self: this is a common python convention (but not a reserved word)
        -            'self'
        -            ),
        -
        -        /*
        -         ** Set 3: standard library
        -         ** http://python.org/doc/current/lib/modindex.html
        -         */
        -        3 => array(
        -            '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm',
        -            'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer',
        -            'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi',
        -            'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop',
        -            'collections', 'colorsys', 'commands', 'compileall', 'compiler',
        -            'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt',
        -            'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE',
        -            'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm',
        -            'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl',
        -            'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl',
        -            'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob',
        -            'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib',
        -            'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect',
        -            'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap',
        -            'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify',
        -            'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator',
        -            'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes',
        -            'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile',
        -            'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random',
        -            're', 'readline', 'resource', 'rexec', 'rgbimg', 'rlcompleter',
        -            'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve',
        -            'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd',
        -            'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string',
        -            'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev',
        -            'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios',
        -            'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token',
        -            'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2',
        -            'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings',
        -            'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml',
        -            'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib', "os.path", "sys.path",
        -
        -            //PythonS60 Standard Library
        -            //http://pys60.garage.maemo.org/doc/s60/
        -            //These are the standard modules in the archive
        -
        -            "appuifw", "globalui","e32", "telephone", "aosocket", "btsocket",
        -            "sysinfo","camera","graphics","keycapture","key_codes","topwindow", "gles",
        -            "glcanvas","sensor", "audio","messaging", "inbox","location","positioning",
        -            "contacts", "e32calendar", "e32db","e32dbm","logs","scriptext",
        -            "series60_console",
        -
        -            //These are external but very often usable modules
        -
        -            "appuifw2","ArchetypeUI","elementtree","lightblue",
        -            "activaprofile","Adjustor","akntextutils","aosocketnativenew",
        -            "appreciation","applicationmanager","appswitch","atextit","bt_teror","btconsole",
        -            "btswitch","cElementTree","cenrep","cerealizer","cl_gui","clipboard",
        -            "clipboard_CHN","debugger","decompile2",
        -            "dir_iter","download","easydb","ECenrep","Edit_find","efeature","elocation","envy",
        -            "EProfile","erestart","error","esyagent","Execwap","exprofile","fastcamera",
        -            "feature","fgimage","filebrowser","firmware","fold","fonts","fraction","FTP",
        -            "ftplibnew","fy_manager","fy_menu","gles_utils","gps_location","hack",
        -            "HTML2TXT","iapconnect","icon_image","image_decoder",
        -            "ini","interactive_console","inting","key_modifiers","key_tricks","keypress",
        -            "landmarks","lite_fm","locationacq","locationrequestor",
        -            "logo","markupbase","mbm","mbm2","minidb","miniinfo","MISC",
        -            "misty","Msg","ntpath","odict","Paintbox","pathinfo","pexif","pickcolor",
        -            "powlite_fm","powlite_fm2","powlite_fm3","powlite_fme","prgbar","prodb",
        -            "profileengine","progressbar","progressbartw","progressnotes",
        -            "ProgressBarTW2","proshivka","py_upload","pyConnection","PyFileMan",
        -            "pykeylock","PyPyc","pyqq","pys60crypto","pys60usb","rfc822",
        -            "RUSOS","scmk","scrollpage","SISFIELDS","SISFIELD","sisfile",
        -            "SISINFO","sisreader","Sistools","smidi","smsreject","speechy","sre_compile",
        -            "sre_constants","sre_parse","sre","sysagent","syslang","TextMan",
        -            "textrenderer","TextWrap","topwind","tsocket","uikludge","uikludges","uitricks",
        -            "walkfile","wallpaper","wfm_lite",
        -            "wif_keys","wif","window","wlanmgmt","wlantools","wt_color","wt_requesters",
        -            "zhkey",
        -
        -            //These are recent additions
        -            "miffile"
        -            ),
        -
        -        /*
        -         ** Set 4: special methods
        -         ** http://python.org/doc/current/ref/specialnames.html
        -         */
        -        4 => array(
        -            ///*
        -            //// Iterator types: http://python.org/doc/current/lib/typeiter.html
        -            //'__iter__', 'next',
        -            //// String types: http://python.org/doc/current/lib/string-methods.html
        -            //'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
        -            //'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle',
        -            //'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust',
        -            //'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
        -            //'translate', 'upper', 'zfill',
        -            // */
        -
        -            // Basic customization: http://python.org/doc/current/ref/customization.html
        -            '__new__', '__init__', '__del__', '__repr__', '__str__',
        -            '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__',
        -            '__hash__', '__nonzero__', '__unicode__', '__dict__',
        -            // Attribute access: http://python.org/doc/current/ref/attribute-access.html
        -            '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__',
        -            '__delete__', '__slots__',
        -            // Class creation, callable objects
        -            '__metaclass__', '__call__',
        -            // Container types: http://python.org/doc/current/ref/sequence-types.html
        -            '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__',
        -            '__getslice__', '__setslice__', '__delslice__',
        -            // Numeric types: http://python.org/doc/current/ref/numeric-types.html
        -            '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__',
        -            '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__',
        -            '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__',
        -            '__long__','__lshift__',
        -            '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__',
        -            '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__',
        -            '__rshift__','__rsub__','__rmul__','__rand__','__rxor__','__ror__',
        -            '__sub__','__xor__'
        -            )
        -
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '`'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #006000;font-weight:bold;',   // Reserved
        -            2 => 'color: #800950;font-size:105%',                  // Built-ins + self
        -            3 => 'color: #003399;font-size:106%',                  // Standard lib
        -            4 => 'color: #0000cd;'                  // Special methods
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style:italic;font-size:92%',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #930; font-weight: bold;font-size:105%'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: maroon;font-size:102%;padding:2px'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #666;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #2356F8;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: navy;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66ccFF;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php
        deleted file mode 100644
        index 2c524848..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php
        +++ /dev/null
        @@ -1,242 +0,0 @@
        - 'Python',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    //Longest quotemarks ALWAYS first
        -    'QUOTEMARKS' => array('"""', "'''", '"', "'"),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX_0O | GESHI_NUMBER_HEX_PREFIX |
        -        GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F |
        -        GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -
        -        /*
        -        ** Set 1: reserved words
        -        ** http://python.org/doc/current/ref/keywords.html
        -        */
        -        1 => array(
        -            'and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', 'lambda', 'return', 'break',
        -            'else', 'global', 'not', 'try', 'class', 'except', 'if', 'or', 'while', 'continue', 'exec',
        -            'import', 'pass', 'yield', 'def', 'finally', 'in', 'print', 'with', 'as', 'nonlocal'
        -            ),
        -
        -        /*
        -        ** Set 2: builtins
        -        ** http://python.org/doc/current/lib/built-in-funcs.html
        -        */
        -        2 => array(
        -            '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp',
        -            'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile',
        -            'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
        -            'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals',
        -            'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range',
        -            'raw_input', 'reduce', 'reload', 'reversed', 'round', 'set', 'setattr', 'slice',
        -            'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode',
        -            'vars', 'xrange', 'zip',
        -            // Built-in constants: http://python.org/doc/current/lib/node35.html
        -            'False', 'True', 'None', 'NotImplemented', 'Ellipsis',
        -            // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html
        -            'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError',
        -            'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError',
        -            'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError',
        -            'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError',
        -            'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError',
        -            'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError',
        -            'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning',
        -            'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning',
        -            'RuntimeWarning', 'FutureWarning',
        -            // self: this is a common python convention (but not a reserved word)
        -            'self',
        -            // other
        -            'any', 'all'
        -            ),
        -
        -        /*
        -        ** Set 3: standard library
        -        ** http://python.org/doc/current/lib/modindex.html
        -        */
        -        3 => array(
        -            '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm',
        -            'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer',
        -            'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi',
        -            'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop',
        -            'collections', 'colorsys', 'commands', 'compileall', 'compiler',
        -            'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt',
        -            'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE',
        -            'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm',
        -            'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl',
        -            'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl',
        -            'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob',
        -            'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib',
        -            'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect',
        -            'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap',
        -            'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify',
        -            'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator',
        -            'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes',
        -            'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile',
        -            'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random',
        -            're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter',
        -            'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve',
        -            'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd',
        -            'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string',
        -            'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev',
        -            'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios',
        -            'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token',
        -            'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2',
        -            'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings',
        -            'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml',
        -            'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib',
        -            // Python 3.0
        -            'bytes', 'bytearray'
        -            ),
        -
        -        /*
        -        ** Set 4: special methods
        -        ** http://python.org/doc/current/ref/specialnames.html
        -        */
        -        4 => array(
        -            /*
        -            // Iterator types: http://python.org/doc/current/lib/typeiter.html
        -            '__iter__', 'next',
        -            // String types: http://python.org/doc/current/lib/string-methods.html
        -            'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
        -            'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle',
        -            'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust',
        -            'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
        -            'translate', 'upper', 'zfill',
        -            */
        -            // Basic customization: http://python.org/doc/current/ref/customization.html
        -            '__new__', '__init__', '__del__', '__repr__', '__str__',
        -            '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__',
        -            '__hash__', '__nonzero__', '__unicode__', '__dict__',
        -            // Attribute access: http://python.org/doc/current/ref/attribute-access.html
        -            '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__',
        -            '__delete__', '__slots__',
        -            // Class creation, callable objects
        -            '__metaclass__', '__call__',
        -            // Container types: http://python.org/doc/current/ref/sequence-types.html
        -            '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__',
        -            '__getslice__', '__setslice__', '__delslice__',
        -            // Numeric types: http://python.org/doc/current/ref/numeric-types.html
        -            '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__',
        -            '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__',
        -            '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__',
        -            '__long__','__lshift__',
        -            '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__',
        -            '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__',
        -            '__rshift__','__rsub__','__rmul__','__rand__','__rxor__','__ror__',
        -            '__sub__','__xor__'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '<', '>', '=', '!', '<=', '>=',             //·comparison·operators
        -        '~', '@',                                   //·unary·operators
        -        ';', ','                                    //·statement·separator
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #ff7700;font-weight:bold;',    // Reserved
        -            2 => 'color: #008000;',                        // Built-ins + self
        -            3 => 'color: #dc143c;',                        // Standard lib
        -            4 => 'color: #0000cd;'                        // Special methods
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: black;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #483d8b;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff4500;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: black;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php
        deleted file mode 100644
        index 5840b58c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php
        +++ /dev/null
        @@ -1,147 +0,0 @@
        -)
        - * -------------------------
        - *  - Fix the handling of single line comments
        - *
        - *************************************************************************************
        - *
        - *     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'                 => 'q/kdb+',
        -    'COMMENT_SINGLE'            => array(1 => '//'),
        -    'COMMENT_MULTI'             => array(),
        -    'COMMENT_REGEXP'            => array(
        -        2 => '/ \s\/.*/',         # This needs to get fixed up, since it won't catch some instances
        -        # Multi line comments (Moved from REGEXPS)
        -        3 => '/^\/\s*?\n.*?\n\\\s*?\n/smi'
        -        ),
        -    'CASE_KEYWORDS'             => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS'                => array('"'),
        -    'ESCAPE_CHAR'               => '\\',
        -    'OOLANG'                    => false,
        -    'OBJECT_SPLITTERS'          => array(),
        -    'STRICT_MODE_APPLIES'       => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS'         => array(),
        -    'HIGHLIGHT_STRICT_BLOCK'    => array(),
        -    'TAB_WIDTH'                 => 4,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abs', 'acos', 'all', 'and', 'any', 'asc', 'asin', 'asof', 'atan', 'attr', 'avg', 'avgs', 'bin', 'ceiling',
        -            'cols', 'cor', 'cos', 'count', 'cov', 'cross', 'cut', 'deltas', 'desc', 'dev', 'differ', 'distinct',
        -            'div', 'each', 'enlist', 'eval', 'except', 'exec', 'exit', 'exp', 'fills', 'first', 'flip', 'floor',
        -            'fkeys', 'get', 'getenv', 'group', 'gtime', 'hclose', 'hcount', 'hdel', 'hopen', 'hsym', 'iasc', 'idesc',
        -            'in', 'insert', 'inter', 'inv', 'joins', 'key', 'keys', 'last', 'like', 'load', 'log', 'lower',
        -            'lsq', 'ltime', 'ltrim', 'mavg', 'max', 'maxs', 'mcount', 'md5', 'mdev', 'med', 'meta', 'min', 'mins',
        -            'mmax', 'mmin', 'mmu', 'mod', 'msum', 'neg', 'next', 'not', 'null', 'or', 'over', 'parse', 'peach',
        -            'plist', 'prd', 'prds', 'prev', 'rand', 'rank', 'ratios', 'raze', 'read0', 'read1', 'reciprocal',
        -            'reverse', 'rload', 'rotate', 'rsave', 'rtrim', 'save', 'scan', 'set', 'setenv', 'show', 'signum',
        -            'sin', 'sqrt', 'ss', 'ssr', 'string', 'sublist', 'sum', 'sums', 'sv', 'system', 'tables', 'tan', 'til', 'trim',
        -            'txf', 'type', 'ungroup', 'union', 'upper', 'upsert', 'value', 'var', 'view', 'views', 'vs',
        -            'wavg', 'within', 'wsum', 'xasc', 'xbar', 'xcol', 'xcols', 'xdesc', 'xexp', 'xgroup', 'xkey',
        -            'xlog', 'xprev', 'xrank'
        -            ),
        -        # kdb database template keywords
        -        2 => array(
        -            'aj', 'by', 'delete', 'fby', 'from', 'ij', 'lj', 'pj', 'select', 'uj', 'update', 'where', 'wj',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '?', '#', ',', '_', '@', '.', '^', '~', '$', '!', '\\', '\\', '/:', '\:', "'", "':", '::', '+', '-', '%', '*'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #009900; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #666666; font-style: italic;',
        -            3 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #990000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            2   => 'color: #999900;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'REGEXPS' => array(
        -        # Symbols
        -        2 => '`[^\s"]*',
        -        ),
        -    'URLS'  => array(
        -        1   => '',
        -        2   => '',
        -        ),
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php
        deleted file mode 100644
        index f4f898ea..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php
        +++ /dev/null
        @@ -1,160 +0,0 @@
        - 'QBasic/QuickBASIC',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        //Single-Line Comments using REM command
        -        2 => "/\bREM.*?$/i",
        -        //Line numbers
        -        3 => "/^\s*\d+/im"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT |
        -        GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'DO', 'LOOP', 'WHILE', 'WEND', 'THEN', 'ELSE', 'ELSEIF', 'IF',
        -            'FOR', 'TO', 'NEXT', 'STEP', 'GOTO', 'GOSUB', 'CALL', 'CALLS',
        -            'SUB', 'FUNCTION', 'RETURN', 'RESUME', 'SELECT', 'CASE', 'UNTIL'
        -            ),
        -        3 => array(
        -            'ABS', 'ABSOLUTE', 'ACCESS', 'ALIAS', 'AND', 'ANY', 'APPEND', 'AS', 'ASC', 'ATN',
        -            'BASE', 'BEEP', 'BINARY', 'BLOAD', 'BSAVE', 'BYVAL',
        -            'CDBL', 'CDECL', 'CHAIN', 'CHDIR', 'CHR$', 'CINT', 'CIRCLE', 'CLEAR',
        -            'CLNG', 'CLOSE', 'CLS', 'COM', 'COMMAND$', 'COMMON', 'CONST', 'COS', 'CSNG',
        -            'CSRLIN', 'CVD', 'CVDMBF', 'CVI', 'CVL', 'CVS', 'CVSMDF', 'DATA', 'DATE$',
        -            'DECLARE', 'DEF', 'FN', 'SEG', 'DEFDBL', 'DEFINT', 'DEFLNG', 'DEFSNG', 'DEFSTR',
        -            'DIM', 'DOUBLE', 'DRAW', 'END', 'ENVIRON', 'ENVIRON$', 'EOF', 'EQV', 'ERASE',
        -            'ERDEV', 'ERDEV$', 'ERL', 'ERR', 'ERROR', 'EXIT', 'EXP', 'FIELD', 'FILEATTR',
        -            'FILES', 'FIX', 'FRE', 'FREEFILE', 'GET', 'HEX$', 'IMP', 'INKEY$',
        -            'INP', 'INPUT', 'INPUT$', 'INSTR', 'INT', 'INTEGER', 'IOCTL', 'IOCTL$', 'IS',
        -            'KEY', 'KILL', 'LBOUND', 'LCASE$', 'LEFT$', 'LEN', 'LET', 'LINE', 'LIST', 'LOC',
        -            'LOCAL', 'LOCATE', 'LOCK', 'LOF', 'LOG', 'LONG', 'LPOS', 'LPRINT',
        -            'LSET', 'LTRIM$', 'MID$', 'MKD$', 'MKDIR', 'MKDMBF$', 'MKI$', 'MKL$',
        -            'MKS$', 'MKSMBF$', 'MOD', 'NAME', 'NOT', 'OCT$', 'OFF', 'ON', 'PEN', 'PLAY',
        -            'OPEN', 'OPTION', 'OR', 'OUT', 'OUTPUT',
        -            'PAINT', 'PALETTE', 'PCOPY', 'PEEK', 'PMAP', 'POINT', 'POKE', 'POS', 'PRESET',
        -            'PRINT', 'PSET', 'PUT', 'RANDOM', 'RANDOMIZE', 'READ', 'REDIM', 'RESET',
        -            'RESTORE', 'RIGHT$', 'RMDIR', 'RND', 'RSET', 'RTRIM$', 'RUN', 'SADD', 'SCREEN',
        -            'SEEK', 'SETMEM', 'SGN', 'SHARED', 'SHELL', 'SIGNAL', 'SIN', 'SINGLE', 'SLEEP',
        -            'SOUND', 'SPACE$', 'SPC', 'SQR', 'STATIC', 'STICK', 'STOP', 'STR$', 'STRIG',
        -            'STRING', 'STRING$', 'SWAP', 'SYSTEM', 'TAB', 'TAN', 'TIME$', 'TIMER',
        -            'TROFF', 'TRON', 'TYPE', 'UBOUND', 'UCASE$', 'UEVENT', 'UNLOCK', 'USING', 'VAL',
        -            'VARPTR', 'VARPTR$', 'VARSEG', 'VIEW', 'WAIT', 'WIDTH', 'WINDOW', 'WRITE', 'XOR'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', ',', '+', '-', '*', '/', '=', '<', '>', '^'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #a1a100;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;',
        -            2 => 'color: #808080;',
        -            3 => 'color: #8080C0;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #cc66cc;',
        -            2 => 'color: #339933;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        3 => 'http://www.qbasicnews.com/qboho/qck{FNAMEL}.shtml'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        1 => '&(?:H[0-9a-fA-F]+|O[0-7]+)(?!\w)',
        -        2 => '#[0-9]+(?!\w)'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 8
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php
        deleted file mode 100644
        index 1805f341..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php
        +++ /dev/null
        @@ -1,351 +0,0 @@
        -
        - * Copyright: (c) 2012-2014 J-P Nurmi 
        - * Release Version: 1.0.8.12
        - * Date Started: 2012/08/19
        - *
        - * QML language file for GeSHi.
        - *
        - * CHANGES
        - * -------
        - * 2014/06/29 (1.0.8.12)
        - *  - Synced QML types from Qt 5.3:
        - *    http://qt-project.org/doc/qt-5/modules-qml.html
        - * 2012/08/19
        - *  - First version based on Qt 4
        - *
        - * TODO (updated 2014/06/29)
        - * -------------------------
        - *
        - *************************************************************************************
        - *
        - *     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' => 'QML',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        // comments
        -        2 => "/(?<=[\\s^])(s|tr|y)\\/(?!\*)(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])+(? "/([a-z][\\w\\.]+)(?=:)/",
        -        // TODO: property name (fixed length lookbehind assertion?)
        -        4 => "/(?<=property\\s+\\w+\\s+)(\\w+)/"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'as','break','case','catch','continue','const','debugger',
        -            'default','delete','do','else','finally','for','function',
        -            'if','import','in','instanceof','new','on','public','property',
        -            'readonly','return','signal','switch','this','throw','try',
        -            'typeof','while','with'
        -            ),
        -        2 => array(
        -            'action','bool','color','date','double','enumeration','font',
        -            'int','list','matrix4x4','point','quaternion','real','rect',
        -            'size','string','time','url','var','variant','vector2d',
        -            'vector3d','vector4d','void'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtbluetooth-qmlmodule.html
        -        3 => array(
        -            'BluetoothDiscoveryModel','BluetoothService','BluetoothSocket'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtgraphicaleffects-qmlmodule.html
        -        4 => array(
        -            'Blend','BrightnessContrast','ColorOverlay','Colorize',
        -            'ConicalGradient','Desaturate','DirectionalBlur','Displace',
        -            'DropShadow','FastBlur','GammaAdjust','GaussianBlur','Glow',
        -            'HueSaturation','InnerShadow','LevelAdjust','LinearGradient',
        -            'MaskedBlur','OpacityMask','RadialBlur','RadialGradient',
        -            'RectangularGlow','RecursiveBlur','ThresholdMask','ZoomBlur'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtaudioengine-qmlmodule.html
        -        5 => array(
        -            'AttenuationModelLinear','AttenuationModelInverse','AudioCategory',
        -            'AudioEngine','AudioListener','AudioSample','PlayVariation',
        -            'Sound','SoundInstance'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtmultimedia-qmlmodule.html
        -        6 => array(
        -            'Video','Audio','MediaPlayer','Camera','CameraCapture',
        -            'CameraExposure','CameraFlash','CameraFocus','CameraImageProcessing',
        -            'CameraRecorder','Radio','RadioData','Torch','SoundEffect','VideoOutput'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtnfc-qmlmodule.html
        -        7 => array(
        -            'NdefFilter','NdefMimeRecord','NdefTextRecord','NdefUriRecord',
        -            'NearField','NdefRecord'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtpositioning-qmlmodule.html
        -        8 => array(
        -            'QtPositioning','CoordinateAnimation','Position','PositionSource',
        -            'Address','Location'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtqml-models-qmlmodule.html
        -        9 => array(
        -            'DelegateModel','DelegateModelGroup','ListModel','ListElement','ObjectModel'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtqml-qmlmodule.html
        -        10 => array(
        -            'Binding','Component','Connections','Date','Instantiator',
        -            'Locale','Number','Qt','QtObject','String','Timer'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qt-labs-folderlistmodel-qmlmodule.html
        -        11 => array(
        -            'FolderListModel'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-localstorage-qmlmodule.html
        -        12 => array(
        -            'openDatabaseSync'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qt-labs-settings-qmlmodule.html
        -        13 => array(
        -            'Settings'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-window-qmlmodule.html
        -        14 => array(
        -            'Screen','Window','CloseEvent'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-xmllistmodel-qmlmodule.html
        -        15 => array(
        -            'XmlRole','XmlListModel'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-particles-qmlmodule.html
        -        16 => array(
        -            'Age','AngleDirection','CumulativeDirection','CustomParticle',
        -            'Direction','EllipseShape','Friction','Gravity','GroupGoal',
        -            'ImageParticle','ItemParticle','LineShape','MaskShape','Affector',
        -            'Emitter','Shape','ParticleGroup','ParticlePainter','ParticleSystem',
        -            'Attractor','PointDirection','RectangleShape','SpriteGoal',
        -            'TargetDirection','TrailEmitter','Turbulence','Particle','Wander'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qttest-qmlmodule.html
        -        17 => array(
        -            'SignalSpy','TestCase'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-qmltypereference.html
        -        18 => array(
        -            'Item','Rectangle','Image','BorderImage','AnimatedImage','AnimatedSprite',
        -            'SpriteSequence','Text','Accessible','Gradient','GradientStop','SystemPalette',
        -            'Sprite','FontLoader','Repeater','Loader','Visual Item Transformations','Transform',
        -            'Scale','Rotation','Translate','MouseArea','Keys','KeyNavigation','FocusScope',
        -            'Flickable','PinchArea','MultiPointTouchArea','Drag','DropArea','TextInput',
        -            'TextEdit','IntValidator','DoubleValidator','RegExpValidator','TouchPoint',
        -            'PinchEvent','WheelEvent','MouseEvent','KeyEvent','DragEvent','Positioner',
        -            'Column','Row','Grid','Flow','LayoutMirroring','State','PropertyChanges',
        -            'StateGroup','StateChangeScript','ParentChange','AnchorChanges','Transition',
        -            'ViewTransition','SequentialAnimation','ParallelAnimation','Behavior','PropertyAction',
        -            'PauseAnimation','SmoothedAnimation','SpringAnimation','ScriptAction','PropertyAnimation',
        -            'NumberAnimation','Vector3dAnimation','ColorAnimation','RotationAnimation','ParentAnimation',
        -            'AnchorAnimation','PathAnimation','XAnimator','YAnimator','ScaleAnimator','RotationAnimator',
        -            'OpacityAnimator','UniformAnimator','Lower-level Animation Types','PathInterpolator',
        -            'AnimationController','Path','PathLine','PathQuad','PathCubic','PathArc','PathCurve',
        -            'PathSvg','PathAttribute','PathPercent','VisualItemModel','VisualDataModel','VisualDataGroup',
        -            'ListView','GridView','PathView','Package','Flipable','ShaderEffect','ShaderEffectSource',
        -            'GridMesh','WorkerScript','Canvas','Context2D','CanvasGradient','CanvasPixelArray',
        -            'CanvasImageData','TextMetrics',
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-controls-qmlmodule.html
        -        19 => array(
        -            'ApplicationWindow','BusyIndicator','Button','Calendar',
        -            'CheckBox','ComboBox','GroupBox','Label','Menu','MenuBar',
        -            'ProgressBar','RadioButton','ScrollView','Slider','SpinBox',
        -            'SplitView','StackView','StackViewDelegate','StatusBar',
        -            'Switch','Tab','TabView','TableView','TableViewColumn',
        -            'TextArea','TextField','ToolBar','ToolButton','Action',
        -            'ExclusiveGroup','MenuSeparator','MenuItem','Stack'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-dialogs-qmlmodule.html
        -        20 => array(
        -            'Dialog','ColorDialog','FileDialog','FontDialog','MessageDialog'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtquick-layouts-qmlmodule.html
        -        21 => array(
        -            'Layout','RowLayout','ColumnLayout','GridLayout'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtsensors-qmlmodule.html
        -        22 => array(
        -            'Accelerometer','AccelerometerReading','Altimeter','AltimeterReading',
        -            'AmbientLightReading','AmbientLightSensor','AmbientTemperatureReading',
        -            'AmbientTemperatureSensor','Compass','CompassReading','Gyroscope',
        -            'GyroscopeReading','HolsterReading','HolsterSensor','IRProximityReading',
        -            'IRProximitySensor','LightReading','LightSensor','Magnetometer',
        -            'MagnetometerReading','OrientationReading','OrientationSensor',
        -            'PressureReading','PressureSensor','ProximityReading','ProximitySensor',
        -            'RotationReading','RotationSensor','SensorGesture','SensorGlobal',
        -            'SensorReading','TapReading','TapSensor','TiltReading','TiltSensor'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtwinextras-qmlmodule.html
        -        23 => array(
        -            'JumpListDestination','JumpListLink','JumpListSeparator','DwmFeatures',
        -            'JumpList','JumpListCategory','TaskbarButton','ThumbnailToolBar','ThumbnailToolButton'
        -            ),
        -        // http://qt-project.org/doc/qt-5/qtwebkit-qmlmodule.html
        -        24 => array(
        -            'WebView','WebLoadRequest'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}',
        -        '+', '-', '*', '/', '%',
        -        '!', '@', '&', '|', '^',
        -        '<', '>', '=',
        -        ',', ';', '?', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true,
        -        10 => true,
        -        11 => true,
        -        12 => true,
        -        13 => true,
        -        14 => true,
        -        15 => true,
        -        16 => true,
        -        17 => true,
        -        18 => true,
        -        19 => true,
        -        20 => true,
        -        21 => true,
        -        22 => true,
        -        23 => true,
        -        24 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #808041;',
        -            2 => 'color: #808041;',
        -            3 => 'color: #800780;',
        -            4 => 'color: #800780;',
        -            5 => 'color: #800780;',
        -            6 => 'color: #800780;',
        -            7 => 'color: #800780;',
        -            8 => 'color: #800780;',
        -            9 => 'color: #800780;',
        -            10 => 'color: #800780;',
        -            11 => 'color: #800780;',
        -            12 => 'color: #800780;',
        -            13 => 'color: #800780;',
        -            14 => 'color: #800780;',
        -            15 => 'color: #800780;',
        -            16 => 'color: #800780;',
        -            17 => 'color: #800780;',
        -            18 => 'color: #800780;',
        -            19 => 'color: #800780;',
        -            20 => 'color: #800780;',
        -            21 => 'color: #800780;',
        -            22 => 'color: #800780;',
        -            23 => 'color: #800780;',
        -            24 => 'color: #800780;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008025;',
        -            2 => 'color: #008025;',
        -            3 => 'color: #970009;',
        -            4 => 'color: #970009;',
        -            'MULTI' => 'color: #008025;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #008025;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #000000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://qt-project.org/doc/qt-5/qml-qtbluetooth-{FNAMEL}.html',
        -        4 => 'http://qt-project.org/doc/qt-5/qml-qtgraphicaleffects-{FNAMEL}.html',
        -        5 => 'http://qt-project.org/doc/qt-5/qml-qtaudioengine-{FNAMEL}.html',
        -        6 => 'http://qt-project.org/doc/qt-5/qml-qtmultimedia-{FNAMEL}.html',
        -        7 => 'http://qt-project.org/doc/qt-5/qml-qtnfc-{FNAMEL}.html',
        -        8 => 'http://qt-project.org/doc/qt-5/qml-qtpositioning-{FNAMEL}.html',
        -        9 => 'http://qt-project.org/doc/qt-5/qml-qtqml-models-{FNAMEL}.html',
        -        10 => 'http://qt-project.org/doc/qt-5/qml-qtqml-{FNAMEL}.html',
        -        11 => 'http://qt-project.org/doc/qt-5/qml-qt-labs-folderlistmodel-{FNAMEL}.html',
        -        12 => 'http://qt-project.org/doc/qt-5/qtquick-localstorage-qmlmodule.html',
        -        13 => 'http://qt-project.org/doc/qt-5/qml-qt-labs-settings-{FNAMEL}.html',
        -        14 => 'http://qt-project.org/doc/qt-5/qml-qtquick-window-{FNAMEL}.html',
        -        15 => 'http://qt-project.org/doc/qt-5/qml-qtquick-xmllistmodel-{FNAMEL}.html',
        -        16 => 'http://qt-project.org/doc/qt-5/qml-qtquick-particles-{FNAMEL}.html',
        -        17 => 'http://qt-project.org/doc/qt-5/qml-qttest-{FNAMEL}.html',
        -        18 => 'http://qt-project.org/doc/qt-5/qml-qtquick-{FNAMEL}.html',
        -        19 => 'http://qt-project.org/doc/qt-5/qml-qtquick-controls-{FNAMEL}.html',
        -        20 => 'http://qt-project.org/doc/qt-5/qml-qtquick-dialogs-{FNAMEL}.html',
        -        21 => 'http://qt-project.org/doc/qt-5/qml-qtquick-layouts-{FNAMEL}.html',
        -        22 => 'http://qt-project.org/doc/qt-5/qml-qtsensors-{FNAMEL}.html',
        -        23 => 'http://qt-project.org/doc/qt-5/qml-qtwinextras-{FNAMEL}.html',
        -        24 => 'http://qt-project.org/doc/qt-5/qml-qtwebkit-{FNAMEL}.html'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ''
        -            ),
        -        1 => array(
        -            ''
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php
        deleted file mode 100644
        index 09d6bb88..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php
        +++ /dev/null
        @@ -1,964 +0,0 @@
        - 'Racket',
        -    'COMMENT_SINGLE' => array(
        -        1 => ';',
        -        ),
        -    'COMMENT_MULTI' => array(
        -        '#|' => '|#',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"',
        -        ),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abort-current-continuation', 'abs', 'absolute-path?', 'acos', 'add1',
        -            'alarm-evt', 'always-evt', 'andmap', 'angle', 'append',
        -            'arithmetic-shift', 'arity-at-least-value', 'arity-at-least?',
        -            'asin', 'assf', 'assoc', 'assq', 'assv', 'atan', 'banner',
        -            'bitwise-and', 'bitwise-bit-field', 'bitwise-bit-set?',
        -            'bitwise-ior', 'bitwise-not', 'bitwise-xor', 'boolean?',
        -            'bound-identifier=?', 'box', 'box-cas!', 'box-immutable', 'box?',
        -            'break-enabled', 'break-thread', 'build-list', 'build-path',
        -            'build-path/convention-type', 'build-string', 'build-vector',
        -            'byte-pregexp', 'byte-pregexp?', 'byte-ready?', 'byte-regexp',
        -            'byte-regexp?', 'byte?', 'bytes', 'bytes>?', 'bytes<?',
        -            'bytes->immutable-bytes', 'bytes->list', 'bytes->path',
        -            'bytes->path-element', 'bytes->string/latin-1',
        -            'bytes->string/locale', 'bytes->string/utf-8',
        -            'bytes-append', 'bytes-close-converter', 'bytes-convert',
        -            'bytes-convert-end', 'bytes-converter?', 'bytes-copy',
        -            'bytes-copy!', 'bytes-fill!', 'bytes-length',
        -            'bytes-open-converter', 'bytes-ref', 'bytes-set!',
        -            'bytes-utf-8-index', 'bytes-utf-8-length', 'bytes-utf-8-ref',
        -            'bytes=?', 'bytes?', 'caaaar', 'caaadr', 'caaar', 'caadar',
        -            'caaddr', 'caadr', 'caar', 'cadaar', 'cadadr', 'cadar', 'caddar',
        -            'cadddr', 'caddr', 'cadr', 'call-in-nested-thread',
        -            'call-with-break-parameterization',
        -            'call-with-composable-continuation',
        -            'call-with-continuation-barrier', 'call-with-continuation-prompt',
        -            'call-with-current-continuation', 'call-with-escape-continuation',
        -            'call-with-exception-handler',
        -            'call-with-immediate-continuation-mark',
        -            'call-with-parameterization', 'call-with-semaphore',
        -            'call-with-semaphore/enable-break', 'call-with-values', 'call/cc',
        -            'call/ec', 'car', 'cdaaar', 'cdaadr', 'cdaar', 'cdadar', 'cdaddr',
        -            'cdadr', 'cdar', 'cddaar', 'cddadr', 'cddar', 'cdddar', 'cddddr',
        -            'cdddr', 'cddr', 'cdr', 'ceiling', 'channel-get', 'channel-put',
        -            'channel-put-evt', 'channel-put-evt?', 'channel-try-get',
        -            'channel?', 'chaperone-box', 'chaperone-continuation-mark-key',
        -            'chaperone-evt', 'chaperone-hash', 'chaperone-of?',
        -            'chaperone-procedure', 'chaperone-prompt-tag', 'chaperone-struct',
        -            'chaperone-struct-type', 'chaperone-vector', 'chaperone?',
        -            'char>=?', 'char>?', 'char<=?', 'char<?',
        -            'char->integer', 'char-alphabetic?', 'char-blank?',
        -            'char-ci>=?', 'char-ci>?', 'char-ci<=?', 'char-ci<?',
        -            'char-ci=?', 'char-downcase', 'char-foldcase',
        -            'char-general-category', 'char-graphic?', 'char-iso-control?',
        -            'char-lower-case?', 'char-numeric?', 'char-punctuation?',
        -            'char-ready?', 'char-symbolic?', 'char-title-case?',
        -            'char-titlecase', 'char-upcase', 'char-upper-case?',
        -            'char-utf-8-length', 'char-whitespace?', 'char=?', 'char?',
        -            'check-duplicate-identifier',
        -            'checked-procedure-check-and-extract', 'choice-evt',
        -            'cleanse-path', 'close-input-port', 'close-output-port',
        -            'collect-garbage', 'collection-file-path', 'collection-path',
        -            'compile', 'compile-allow-set!-undefined',
        -            'compile-context-preservation-enabled',
        -            'compile-enforce-module-constants', 'compile-syntax',
        -            'compiled-expression?', 'compiled-module-expression?',
        -            'complete-path?', 'complex?', 'compose', 'compose1', 'cons',
        -            'continuation-mark-key?', 'continuation-mark-set->context',
        -            'continuation-mark-set->list',
        -            'continuation-mark-set->list*', 'continuation-mark-set-first',
        -            'continuation-mark-set?', 'continuation-marks',
        -            'continuation-prompt-available?', 'continuation-prompt-tag?',
        -            'continuation?', 'copy-file', 'cos',
        -            'current-break-parameterization', 'current-code-inspector',
        -            'current-command-line-arguments', 'current-compile',
        -            'current-compiled-file-roots', 'current-continuation-marks',
        -            'current-custodian', 'current-directory', 'current-drive',
        -            'current-error-port', 'current-eval',
        -            'current-evt-pseudo-random-generator', 'current-gc-milliseconds',
        -            'current-get-interaction-input-port',
        -            'current-inexact-milliseconds', 'current-input-port',
        -            'current-inspector', 'current-library-collection-paths',
        -            'current-load', 'current-load-extension',
        -            'current-load-relative-directory', 'current-load/use-compiled',
        -            'current-locale', 'current-logger', 'current-memory-use',
        -            'current-milliseconds', 'current-module-declare-name',
        -            'current-module-declare-source', 'current-module-name-resolver',
        -            'current-namespace', 'current-output-port',
        -            'current-parameterization', 'current-preserved-thread-cell-values',
        -            'current-print', 'current-process-milliseconds',
        -            'current-prompt-read', 'current-pseudo-random-generator',
        -            'current-read-interaction', 'current-reader-guard',
        -            'current-readtable', 'current-seconds', 'current-security-guard',
        -            'current-subprocess-custodian-mode', 'current-thread',
        -            'current-thread-group', 'current-thread-initial-stack-size',
        -            'current-write-relative-directory', 'custodian-box-value',
        -            'custodian-box?', 'custodian-limit-memory',
        -            'custodian-managed-list', 'custodian-memory-accounting-available?',
        -            'custodian-require-memory', 'custodian-shutdown-all', 'custodian?',
        -            'custom-print-quotable-accessor', 'custom-print-quotable?',
        -            'custom-write-accessor', 'custom-write?', 'date*-nanosecond',
        -            'date*-time-zone-name', 'date*?', 'date-day', 'date-dst?',
        -            'date-hour', 'date-minute', 'date-month', 'date-second',
        -            'date-time-zone-offset', 'date-week-day', 'date-year',
        -            'date-year-day', 'date?', 'datum->syntax',
        -            'datum-intern-literal', 'default-continuation-prompt-tag',
        -            'delete-directory', 'delete-file', 'denominator',
        -            'directory-exists?', 'directory-list', 'display', 'displayln',
        -            'double-flonum?', 'dump-memory-stats', 'dynamic-require',
        -            'dynamic-require-for-syntax', 'dynamic-wind', 'eof', 'eof-object?',
        -            'ephemeron-value', 'ephemeron?', 'eprintf', 'eq-hash-code', 'eq?',
        -            'equal-hash-code', 'equal-secondary-hash-code', 'equal?',
        -            'equal?/recur', 'eqv-hash-code', 'eqv?', 'error',
        -            'error-display-handler', 'error-escape-handler',
        -            'error-print-context-length', 'error-print-source-location',
        -            'error-print-width', 'error-value->string-handler', 'eval',
        -            'eval-jit-enabled', 'eval-syntax', 'even?', 'evt?',
        -            'exact->inexact', 'exact-integer?',
        -            'exact-nonnegative-integer?', 'exact-positive-integer?', 'exact?',
        -            'executable-yield-handler', 'exit', 'exit-handler',
        -            'exn-continuation-marks', 'exn-message', 'exn:break-continuation',
        -            'exn:break:hang-up?', 'exn:break:terminate?', 'exn:break?',
        -            'exn:fail:contract:arity?', 'exn:fail:contract:continuation?',
        -            'exn:fail:contract:divide-by-zero?',
        -            'exn:fail:contract:non-fixnum-result?',
        -            'exn:fail:contract:variable-id', 'exn:fail:contract:variable?',
        -            'exn:fail:contract?', 'exn:fail:filesystem:errno-errno',
        -            'exn:fail:filesystem:errno?', 'exn:fail:filesystem:exists?',
        -            'exn:fail:filesystem:version?', 'exn:fail:filesystem?',
        -            'exn:fail:network:errno-errno', 'exn:fail:network:errno?',
        -            'exn:fail:network?', 'exn:fail:out-of-memory?',
        -            'exn:fail:read-srclocs', 'exn:fail:read:eof?',
        -            'exn:fail:read:non-char?', 'exn:fail:read?',
        -            'exn:fail:syntax-exprs', 'exn:fail:syntax:unbound?',
        -            'exn:fail:syntax?', 'exn:fail:unsupported?', 'exn:fail:user?',
        -            'exn:fail?', 'exn:srclocs-accessor', 'exn:srclocs?', 'exn?', 'exp',
        -            'expand', 'expand-once', 'expand-syntax', 'expand-syntax-once',
        -            'expand-syntax-to-top-form', 'expand-to-top-form',
        -            'expand-user-path', 'expt', 'file-exists?',
        -            'file-or-directory-identity', 'file-or-directory-modify-seconds',
        -            'file-or-directory-permissions', 'file-position', 'file-position*',
        -            'file-size', 'file-stream-buffer-mode', 'file-stream-port?',
        -            'filesystem-root-list', 'filter', 'find-executable-path',
        -            'find-library-collection-paths', 'find-system-path', 'findf',
        -            'fixnum?', 'floating-point-bytes->real', 'flonum?', 'floor',
        -            'flush-output', 'foldl', 'foldr', 'for-each', 'format', 'fprintf',
        -            'free-identifier=?', 'free-label-identifier=?',
        -            'free-template-identifier=?', 'free-transformer-identifier=?',
        -            'gcd', 'generate-temporaries', 'gensym', 'get-output-bytes',
        -            'get-output-string', 'getenv', 'global-port-print-handler',
        -            'guard-evt', 'handle-evt', 'handle-evt?', 'hash', 'hash->list',
        -            'hash-copy', 'hash-count', 'hash-eq?', 'hash-equal?', 'hash-eqv?',
        -            'hash-for-each', 'hash-has-key?', 'hash-iterate-first',
        -            'hash-iterate-key', 'hash-iterate-next', 'hash-iterate-value',
        -            'hash-keys', 'hash-map', 'hash-placeholder?', 'hash-ref',
        -            'hash-ref!', 'hash-remove', 'hash-remove!', 'hash-set',
        -            'hash-set!', 'hash-set*', 'hash-set*!', 'hash-update',
        -            'hash-update!', 'hash-values', 'hash-weak?', 'hash?', 'hasheq',
        -            'hasheqv', 'identifier-binding', 'identifier-label-binding',
        -            'identifier-prune-lexical-context',
        -            'identifier-prune-to-source-module',
        -            'identifier-remove-from-definition-context',
        -            'identifier-template-binding', 'identifier-transformer-binding',
        -            'identifier?', 'imag-part', 'immutable?', 'impersonate-box',
        -            'impersonate-continuation-mark-key', 'impersonate-hash',
        -            'impersonate-procedure', 'impersonate-prompt-tag',
        -            'impersonate-struct', 'impersonate-vector', 'impersonator-of?',
        -            'impersonator-prop:application-mark',
        -            'impersonator-property-accessor-procedure?',
        -            'impersonator-property?', 'impersonator?', 'in-cycle',
        -            'in-directory', 'in-hash', 'in-hash-keys', 'in-hash-pairs',
        -            'in-hash-values', 'in-parallel', 'in-sequences',
        -            'in-values*-sequence', 'in-values-sequence', 'inexact->exact',
        -            'inexact-real?', 'inexact?', 'input-port?', 'inspector?',
        -            'integer->char', 'integer->integer-bytes',
        -            'integer-bytes->integer', 'integer-length', 'integer-sqrt',
        -            'integer-sqrt/remainder', 'integer?',
        -            'internal-definition-context-seal', 'internal-definition-context?',
        -            'keyword<?', 'keyword->string', 'keyword-apply', 'keyword?',
        -            'kill-thread', 'lcm', 'length', 'liberal-define-context?',
        -            'link-exists?', 'list', 'list*', 'list->bytes',
        -            'list->string', 'list->vector', 'list-ref', 'list-tail',
        -            'list?', 'load', 'load-extension', 'load-on-demand-enabled',
        -            'load-relative', 'load-relative-extension', 'load/cd',
        -            'load/use-compiled', 'local-expand', 'local-expand/capture-lifts',
        -            'local-transformer-expand',
        -            'local-transformer-expand/capture-lifts', 'locale-string-encoding',
        -            'log', 'log-level?', 'log-max-level', 'log-message',
        -            'log-receiver?', 'logger-name', 'logger?', 'magnitude',
        -            'make-arity-at-least', 'make-base-empty-namespace',
        -            'make-base-namespace', 'make-bytes', 'make-channel',
        -            'make-continuation-mark-key', 'make-continuation-prompt-tag',
        -            'make-custodian', 'make-custodian-box', 'make-date', 'make-date*',
        -            'make-derived-parameter', 'make-directory', 'make-do-sequence',
        -            'make-empty-namespace', 'make-ephemeron', 'make-exn',
        -            'make-exn:break', 'make-exn:break:hang-up',
        -            'make-exn:break:terminate', 'make-exn:fail',
        -            'make-exn:fail:contract', 'make-exn:fail:contract:arity',
        -            'make-exn:fail:contract:continuation',
        -            'make-exn:fail:contract:divide-by-zero',
        -            'make-exn:fail:contract:non-fixnum-result',
        -            'make-exn:fail:contract:variable', 'make-exn:fail:filesystem',
        -            'make-exn:fail:filesystem:errno',
        -            'make-exn:fail:filesystem:exists',
        -            'make-exn:fail:filesystem:version', 'make-exn:fail:network',
        -            'make-exn:fail:network:errno', 'make-exn:fail:out-of-memory',
        -            'make-exn:fail:read', 'make-exn:fail:read:eof',
        -            'make-exn:fail:read:non-char', 'make-exn:fail:syntax',
        -            'make-exn:fail:syntax:unbound', 'make-exn:fail:unsupported',
        -            'make-exn:fail:user', 'make-file-or-directory-link', 'make-hash',
        -            'make-hash-placeholder', 'make-hasheq', 'make-hasheq-placeholder',
        -            'make-hasheqv', 'make-hasheqv-placeholder', 'make-immutable-hash',
        -            'make-immutable-hasheq', 'make-immutable-hasheqv',
        -            'make-impersonator-property', 'make-input-port', 'make-inspector',
        -            'make-keyword-procedure', 'make-known-char-range-list',
        -            'make-log-receiver', 'make-logger', 'make-output-port',
        -            'make-parameter', 'make-phantom-bytes', 'make-pipe',
        -            'make-placeholder', 'make-polar', 'make-prefab-struct',
        -            'make-pseudo-random-generator', 'make-reader-graph',
        -            'make-readtable', 'make-rectangular', 'make-rename-transformer',
        -            'make-resolved-module-path', 'make-security-guard',
        -            'make-semaphore', 'make-set!-transformer', 'make-shared-bytes',
        -            'make-sibling-inspector', 'make-special-comment', 'make-srcloc',
        -            'make-string', 'make-struct-field-accessor',
        -            'make-struct-field-mutator', 'make-struct-type',
        -            'make-struct-type-property', 'make-syntax-delta-introducer',
        -            'make-syntax-introducer', 'make-thread-cell', 'make-thread-group',
        -            'make-vector', 'make-weak-box', 'make-weak-hash',
        -            'make-weak-hasheq', 'make-weak-hasheqv', 'make-will-executor',
        -            'map', 'max', 'mcar', 'mcdr', 'mcons', 'member', 'memf', 'memq',
        -            'memv', 'min', 'module->exports', 'module->imports',
        -            'module->language-info', 'module->namespace',
        -            'module-compiled-exports', 'module-compiled-imports',
        -            'module-compiled-language-info', 'module-compiled-name',
        -            'module-compiled-submodules', 'module-declared?',
        -            'module-path-index-join', 'module-path-index-resolve',
        -            'module-path-index-split', 'module-path-index-submodule',
        -            'module-path-index?', 'module-path?', 'module-predefined?',
        -            'module-provide-protected?', 'modulo', 'mpair?', 'nack-guard-evt',
        -            'namespace-anchor->empty-namespace',
        -            'namespace-anchor->namespace', 'namespace-anchor?',
        -            'namespace-attach-module', 'namespace-attach-module-declaration',
        -            'namespace-base-phase', 'namespace-mapped-symbols',
        -            'namespace-module-identifier', 'namespace-module-registry',
        -            'namespace-require', 'namespace-require/constant',
        -            'namespace-require/copy', 'namespace-require/expansion-time',
        -            'namespace-set-variable-value!', 'namespace-symbol->identifier',
        -            'namespace-syntax-introduce', 'namespace-undefine-variable!',
        -            'namespace-unprotect-module', 'namespace-variable-value',
        -            'namespace?', 'negative?', 'never-evt', 'newline',
        -            'normal-case-path', 'not', 'null', 'null?', 'number->string',
        -            'number?', 'numerator', 'object-name', 'odd?', 'open-input-bytes',
        -            'open-input-string', 'open-output-bytes', 'open-output-string',
        -            'ormap', 'output-port?', 'pair?', 'parameter-procedure=?',
        -            'parameter?', 'parameterization?', 'path->bytes',
        -            'path->complete-path', 'path->directory-path',
        -            'path->string', 'path-add-suffix', 'path-convention-type',
        -            'path-element->bytes', 'path-element->string',
        -            'path-for-some-system?', 'path-list-string->path-list',
        -            'path-replace-suffix', 'path-string?', 'path?', 'peek-byte',
        -            'peek-byte-or-special', 'peek-bytes', 'peek-bytes!',
        -            'peek-bytes-avail!', 'peek-bytes-avail!*',
        -            'peek-bytes-avail!/enable-break', 'peek-char',
        -            'peek-char-or-special', 'peek-string', 'peek-string!',
        -            'phantom-bytes?', 'pipe-content-length', 'placeholder-get',
        -            'placeholder-set!', 'placeholder?', 'poll-guard-evt',
        -            'port-closed-evt', 'port-closed?', 'port-commit-peeked',
        -            'port-count-lines!', 'port-count-lines-enabled',
        -            'port-display-handler', 'port-file-identity', 'port-file-unlock',
        -            'port-next-location', 'port-print-handler', 'port-progress-evt',
        -            'port-provides-progress-evts?', 'port-read-handler',
        -            'port-try-file-lock?', 'port-write-handler', 'port-writes-atomic?',
        -            'port-writes-special?', 'port?', 'positive?',
        -            'prefab-key->struct-type', 'prefab-key?', 'prefab-struct-key',
        -            'pregexp', 'pregexp?', 'primitive-closure?',
        -            'primitive-result-arity', 'primitive?', 'print',
        -            'print-as-expression', 'print-boolean-long-form', 'print-box',
        -            'print-graph', 'print-hash-table', 'print-mpair-curly-braces',
        -            'print-pair-curly-braces', 'print-reader-abbreviations',
        -            'print-struct', 'print-syntax-width', 'print-unreadable',
        -            'print-vector-length', 'printf', 'procedure->method',
        -            'procedure-arity', 'procedure-arity-includes?', 'procedure-arity?',
        -            'procedure-closure-contents-eq?', 'procedure-extract-target',
        -            'procedure-keywords', 'procedure-reduce-arity',
        -            'procedure-reduce-keyword-arity', 'procedure-rename',
        -            'procedure-struct-type?', 'procedure?', 'progress-evt?',
        -            'prop:arity-string', 'prop:checked-procedure',
        -            'prop:custom-print-quotable', 'prop:custom-write',
        -            'prop:equal+hash', 'prop:evt', 'prop:exn:srclocs',
        -            'prop:impersonator-of', 'prop:input-port',
        -            'prop:liberal-define-context', 'prop:output-port',
        -            'prop:procedure', 'prop:rename-transformer', 'prop:sequence',
        -            'prop:set!-transformer', 'pseudo-random-generator->vector',
        -            'pseudo-random-generator-vector?', 'pseudo-random-generator?',
        -            'putenv', 'quotient', 'quotient/remainder', 'raise',
        -            'raise-argument-error', 'raise-arguments-error',
        -            'raise-arity-error', 'raise-mismatch-error', 'raise-range-error',
        -            'raise-result-error', 'raise-syntax-error', 'raise-type-error',
        -            'raise-user-error', 'random', 'random-seed', 'rational?',
        -            'rationalize', 'read', 'read-accept-bar-quote', 'read-accept-box',
        -            'read-accept-compiled', 'read-accept-dot', 'read-accept-graph',
        -            'read-accept-infix-dot', 'read-accept-lang',
        -            'read-accept-quasiquote', 'read-accept-reader', 'read-byte',
        -            'read-byte-or-special', 'read-bytes', 'read-bytes!',
        -            'read-bytes-avail!', 'read-bytes-avail!*',
        -            'read-bytes-avail!/enable-break', 'read-bytes-line',
        -            'read-case-sensitive', 'read-char', 'read-char-or-special',
        -            'read-curly-brace-as-paren', 'read-decimal-as-inexact',
        -            'read-eval-print-loop', 'read-language', 'read-line',
        -            'read-on-demand-source', 'read-square-bracket-as-paren',
        -            'read-string', 'read-string!', 'read-syntax',
        -            'read-syntax/recursive', 'read/recursive', 'readtable-mapping',
        -            'readtable?', 'real->decimal-string', 'real->double-flonum',
        -            'real->floating-point-bytes', 'real->single-flonum',
        -            'real-part', 'real?', 'regexp', 'regexp-match',
        -            'regexp-match-exact?', 'regexp-match-peek',
        -            'regexp-match-peek-immediate', 'regexp-match-peek-positions',
        -            'regexp-match-peek-positions-immediate',
        -            'regexp-match-peek-positions-immediate/end',
        -            'regexp-match-peek-positions/end', 'regexp-match-positions',
        -            'regexp-match-positions/end', 'regexp-match/end', 'regexp-match?',
        -            'regexp-max-lookbehind', 'regexp-quote', 'regexp-replace',
        -            'regexp-replace*', 'regexp-replace-quote', 'regexp-replaces',
        -            'regexp-split', 'regexp-try-match', 'regexp?', 'relative-path?',
        -            'remainder', 'remove', 'remove*', 'remq', 'remq*', 'remv', 'remv*',
        -            'rename-file-or-directory', 'rename-transformer-target',
        -            'rename-transformer?', 'reroot-path', 'resolve-path',
        -            'resolved-module-path-name', 'resolved-module-path?', 'reverse',
        -            'round', 'seconds->date', 'security-guard?',
        -            'semaphore-peek-evt', 'semaphore-peek-evt?', 'semaphore-post',
        -            'semaphore-try-wait?', 'semaphore-wait',
        -            'semaphore-wait/enable-break', 'semaphore?', 'sequence->stream',
        -            'sequence-generate', 'sequence-generate*', 'sequence?',
        -            'set!-transformer-procedure', 'set!-transformer?', 'set-box!',
        -            'set-mcar!', 'set-mcdr!', 'set-phantom-bytes!',
        -            'set-port-next-location!', 'shared-bytes', 'shell-execute',
        -            'simplify-path', 'sin', 'single-flonum?', 'sleep',
        -            'special-comment-value', 'special-comment?', 'split-path', 'sqrt',
        -            'srcloc-column', 'srcloc-line', 'srcloc-position', 'srcloc-source',
        -            'srcloc-span', 'srcloc?', 'stop-after', 'stop-before', 'string',
        -            'string>=?', 'string>?', 'string<=?', 'string<?',
        -            'string->bytes/latin-1', 'string->bytes/locale',
        -            'string->bytes/utf-8', 'string->immutable-string',
        -            'string->keyword', 'string->list', 'string->number',
        -            'string->path', 'string->path-element', 'string->symbol',
        -            'string->uninterned-symbol', 'string->unreadable-symbol',
        -            'string-append', 'string-ci>=?', 'string-ci>?',
        -            'string-ci<=?', 'string-ci<?', 'string-ci=?', 'string-copy',
        -            'string-copy!', 'string-downcase', 'string-fill!',
        -            'string-foldcase', 'string-length', 'string-locale>?',
        -            'string-locale<?', 'string-locale-ci>?',
        -            'string-locale-ci<?', 'string-locale-ci=?',
        -            'string-locale-downcase', 'string-locale-upcase',
        -            'string-locale=?', 'string-normalize-nfc', 'string-normalize-nfd',
        -            'string-normalize-nfkc', 'string-normalize-nfkd', 'string-ref',
        -            'string-set!', 'string-titlecase', 'string-upcase',
        -            'string-utf-8-length', 'string=?', 'string?', 'struct->vector',
        -            'struct-accessor-procedure?', 'struct-constructor-procedure?',
        -            'struct-info', 'struct-mutator-procedure?',
        -            'struct-predicate-procedure?', 'struct-type-info',
        -            'struct-type-make-constructor', 'struct-type-make-predicate',
        -            'struct-type-property-accessor-procedure?',
        -            'struct-type-property?', 'struct-type?', 'struct:arity-at-least',
        -            'struct:date', 'struct:date*', 'struct:exn', 'struct:exn:break',
        -            'struct:exn:break:hang-up', 'struct:exn:break:terminate',
        -            'struct:exn:fail', 'struct:exn:fail:contract',
        -            'struct:exn:fail:contract:arity',
        -            'struct:exn:fail:contract:continuation',
        -            'struct:exn:fail:contract:divide-by-zero',
        -            'struct:exn:fail:contract:non-fixnum-result',
        -            'struct:exn:fail:contract:variable', 'struct:exn:fail:filesystem',
        -            'struct:exn:fail:filesystem:errno',
        -            'struct:exn:fail:filesystem:exists',
        -            'struct:exn:fail:filesystem:version', 'struct:exn:fail:network',
        -            'struct:exn:fail:network:errno', 'struct:exn:fail:out-of-memory',
        -            'struct:exn:fail:read', 'struct:exn:fail:read:eof',
        -            'struct:exn:fail:read:non-char', 'struct:exn:fail:syntax',
        -            'struct:exn:fail:syntax:unbound', 'struct:exn:fail:unsupported',
        -            'struct:exn:fail:user', 'struct:srcloc', 'struct?', 'sub1',
        -            'subbytes', 'subprocess', 'subprocess-group-enabled',
        -            'subprocess-kill', 'subprocess-pid', 'subprocess-status',
        -            'subprocess-wait', 'subprocess?', 'substring', 'symbol->string',
        -            'symbol-interned?', 'symbol-unreadable?', 'symbol?', 'sync',
        -            'sync/enable-break', 'sync/timeout', 'sync/timeout/enable-break',
        -            'syntax->datum', 'syntax->list', 'syntax-arm',
        -            'syntax-column', 'syntax-disarm', 'syntax-e', 'syntax-line',
        -            'syntax-local-bind-syntaxes', 'syntax-local-certifier',
        -            'syntax-local-context', 'syntax-local-expand-expression',
        -            'syntax-local-get-shadower', 'syntax-local-introduce',
        -            'syntax-local-lift-context', 'syntax-local-lift-expression',
        -            'syntax-local-lift-module-end-declaration',
        -            'syntax-local-lift-provide', 'syntax-local-lift-require',
        -            'syntax-local-lift-values-expression',
        -            'syntax-local-make-definition-context',
        -            'syntax-local-make-delta-introducer',
        -            'syntax-local-module-defined-identifiers',
        -            'syntax-local-module-exports',
        -            'syntax-local-module-required-identifiers', 'syntax-local-name',
        -            'syntax-local-phase-level', 'syntax-local-submodules',
        -            'syntax-local-transforming-module-provides?', 'syntax-local-value',
        -            'syntax-local-value/immediate', 'syntax-original?',
        -            'syntax-position', 'syntax-property',
        -            'syntax-property-symbol-keys', 'syntax-protect', 'syntax-rearm',
        -            'syntax-recertify', 'syntax-shift-phase-level', 'syntax-source',
        -            'syntax-source-module', 'syntax-span', 'syntax-taint',
        -            'syntax-tainted?', 'syntax-track-origin',
        -            'syntax-transforming-module-expression?', 'syntax-transforming?',
        -            'syntax?', 'system-big-endian?', 'system-idle-evt',
        -            'system-language+country', 'system-library-subpath',
        -            'system-path-convention-type', 'system-type', 'tan',
        -            'terminal-port?', 'thread', 'thread-cell-ref', 'thread-cell-set!',
        -            'thread-cell-values?', 'thread-cell?', 'thread-dead-evt',
        -            'thread-dead?', 'thread-group?', 'thread-receive',
        -            'thread-receive-evt', 'thread-resume', 'thread-resume-evt',
        -            'thread-rewind-receive', 'thread-running?', 'thread-send',
        -            'thread-suspend', 'thread-suspend-evt', 'thread-try-receive',
        -            'thread-wait', 'thread/suspend-to-kill', 'thread?', 'time-apply',
        -            'truncate', 'unbox', 'uncaught-exception-handler',
        -            'use-collection-link-paths', 'use-compiled-file-paths',
        -            'use-user-specific-search-paths', 'values',
        -            'variable-reference->empty-namespace',
        -            'variable-reference->module-base-phase',
        -            'variable-reference->module-declaration-inspector',
        -            'variable-reference->module-path-index',
        -            'variable-reference->module-source',
        -            'variable-reference->namespace', 'variable-reference->phase',
        -            'variable-reference->resolved-module-path',
        -            'variable-reference-constant?', 'variable-reference?', 'vector',
        -            'vector->immutable-vector', 'vector->list',
        -            'vector->pseudo-random-generator',
        -            'vector->pseudo-random-generator!', 'vector->values',
        -            'vector-copy!', 'vector-fill!', 'vector-immutable',
        -            'vector-length', 'vector-ref', 'vector-set!',
        -            'vector-set-performance-stats!', 'vector?', 'version', 'void',
        -            'void?', 'weak-box-value', 'weak-box?', 'will-execute',
        -            'will-executor?', 'will-register', 'will-try-execute', 'wrap-evt',
        -            'write', 'write-byte', 'write-bytes', 'write-bytes-avail',
        -            'write-bytes-avail*', 'write-bytes-avail-evt',
        -            'write-bytes-avail/enable-break', 'write-char', 'write-special',
        -            'write-special-avail*', 'write-special-evt', 'write-string',
        -            'zero?',
        -            ),
        -
        -        2 => array(
        -            '#%app', '#%datum', '#%expression', '#%module-begin', '#%plain-app',
        -            '#%plain-lambda', '#%plain-module-begin', '#%provide', '#%require',
        -            '#%stratified-body', '#%top', '#%top-interaction',
        -            '#%variable-reference', ':do-in', 'all-defined-out',
        -            'all-from-out', 'and', 'apply', 'arity-at-least', 'begin',
        -            'begin-for-syntax', 'begin0', 'call-with-input-file',
        -            'call-with-input-file*', 'call-with-output-file',
        -            'call-with-output-file*', 'case', 'case-lambda', 'combine-in',
        -            'combine-out', 'cond', 'date', 'date*', 'define',
        -            'define-for-syntax', 'define-logger', 'define-namespace-anchor',
        -            'define-sequence-syntax', 'define-struct', 'define-struct/derived',
        -            'define-syntax', 'define-syntax-rule', 'define-syntaxes',
        -            'define-values', 'define-values-for-syntax', 'do', 'else',
        -            'except-in', 'except-out', 'exn', 'exn:break', 'exn:break:hang-up',
        -            'exn:break:terminate', 'exn:fail', 'exn:fail:contract',
        -            'exn:fail:contract:arity', 'exn:fail:contract:continuation',
        -            'exn:fail:contract:divide-by-zero',
        -            'exn:fail:contract:non-fixnum-result',
        -            'exn:fail:contract:variable', 'exn:fail:filesystem',
        -            'exn:fail:filesystem:errno', 'exn:fail:filesystem:exists',
        -            'exn:fail:filesystem:version', 'exn:fail:network',
        -            'exn:fail:network:errno', 'exn:fail:out-of-memory',
        -            'exn:fail:read', 'exn:fail:read:eof', 'exn:fail:read:non-char',
        -            'exn:fail:syntax', 'exn:fail:syntax:unbound',
        -            'exn:fail:unsupported', 'exn:fail:user', 'file', 'for', 'for*',
        -            'for*/and', 'for*/first', 'for*/fold', 'for*/fold/derived',
        -            'for*/hash', 'for*/hasheq', 'for*/hasheqv', 'for*/last',
        -            'for*/list', 'for*/lists', 'for*/or', 'for*/product', 'for*/sum',
        -            'for*/vector', 'for-label', 'for-meta', 'for-syntax',
        -            'for-template', 'for/and', 'for/first', 'for/fold',
        -            'for/fold/derived', 'for/hash', 'for/hasheq', 'for/hasheqv',
        -            'for/last', 'for/list', 'for/lists', 'for/or', 'for/product',
        -            'for/sum', 'for/vector', 'gen:custom-write', 'gen:equal+hash',
        -            'if', 'in-bytes', 'in-bytes-lines', 'in-indexed',
        -            'in-input-port-bytes', 'in-input-port-chars', 'in-lines',
        -            'in-list', 'in-mlist', 'in-naturals', 'in-port', 'in-producer',
        -            'in-range', 'in-string', 'in-value', 'in-vector', 'lambda', 'let',
        -            'let*', 'let*-values', 'let-syntax', 'let-syntaxes', 'let-values',
        -            'let/cc', 'let/ec', 'letrec', 'letrec-syntax', 'letrec-syntaxes',
        -            'letrec-syntaxes+values', 'letrec-values', 'lib', 'local-require',
        -            'log-debug', 'log-error', 'log-fatal', 'log-info', 'log-warning',
        -            'module', 'module*', 'module+', 'only-in', 'only-meta-in',
        -            'open-input-file', 'open-input-output-file', 'open-output-file',
        -            'or', 'parameterize', 'parameterize*', 'parameterize-break',
        -            'planet', 'prefix-in', 'prefix-out', 'protect-out', 'provide',
        -            'quasiquote', 'quasisyntax', 'quasisyntax/loc', 'quote',
        -            'quote-syntax', 'quote-syntax/prune', 'regexp-match*',
        -            'regexp-match-peek-positions*', 'regexp-match-positions*',
        -            'relative-in', 'rename-in', 'rename-out', 'require', 'set!',
        -            'set!-values', 'sort', 'srcloc', 'struct', 'struct-copy',
        -            'struct-field-index', 'struct-out', 'submod', 'syntax',
        -            'syntax-case', 'syntax-case*', 'syntax-id-rules', 'syntax-rules',
        -            'syntax/loc', 'time', 'unless', 'unquote', 'unquote-splicing',
        -            'unsyntax', 'unsyntax-splicing', 'when', 'with-continuation-mark',
        -            'with-handlers', 'with-handlers*', 'with-input-from-file',
        -            'with-output-to-file', 'with-syntax', 'λ',
        -            ),
        -
        -        3 => array(
        -            '>/c', '</c', 'append*', 'append-map', 'argmax', 'argmin',
        -            'bad-number-of-results', 'base->-doms/c', 'base->-rngs/c',
        -            'base->?', 'blame-add-unknown-context', 'blame-context',
        -            'blame-contract', 'blame-fmt->-string', 'blame-negative',
        -            'blame-original?', 'blame-positive', 'blame-replace-negative',
        -            'blame-source', 'blame-swap', 'blame-swapped?', 'blame-value',
        -            'blame?', 'boolean=?', 'build-chaperone-contract-property',
        -            'build-compound-type-name', 'build-contract-property',
        -            'build-flat-contract-property', 'bytes-append*', 'bytes-join',
        -            'bytes-no-nuls?', 'call-with-input-bytes',
        -            'call-with-input-string', 'call-with-output-bytes',
        -            'call-with-output-string', 'chaperone-contract-property?',
        -            'chaperone-contract?', 'class->interface', 'class-info',
        -            'class?', 'coerce-chaperone-contract',
        -            'coerce-chaperone-contracts', 'coerce-contract',
        -            'coerce-contract/f', 'coerce-contracts', 'coerce-flat-contract',
        -            'coerce-flat-contracts', 'conjugate', 'cons?', 'const',
        -            'contract-first-order', 'contract-first-order-passes?',
        -            'contract-name', 'contract-proc', 'contract-projection',
        -            'contract-property?', 'contract-random-generate',
        -            'contract-stronger?', 'contract-struct-exercise',
        -            'contract-struct-generate', 'contract?', 'convert-stream',
        -            'copy-directory/files', 'copy-port', 'cosh', 'count',
        -            'current-blame-format', 'current-future', 'curry', 'curryr',
        -            'degrees->radians', 'delete-directory/files',
        -            'deserialize-info:set-v0', 'dict-iter-contract',
        -            'dict-key-contract', 'dict-value-contract', 'drop', 'drop-right',
        -            'dup-input-port', 'dup-output-port', 'dynamic-get-field',
        -            'dynamic-send', 'dynamic-set-field!', 'eighth', 'empty',
        -            'empty-sequence', 'empty-stream', 'empty?', 'env-stash',
        -            'eq-contract-val', 'eq-contract?', 'equal<%>',
        -            'equal-contract-val', 'equal-contract?', 'exact-ceiling',
        -            'exact-floor', 'exact-round', 'exact-truncate',
        -            'exn:fail:contract:blame-object', 'exn:fail:contract:blame?',
        -            'exn:fail:object?', 'exn:misc:match?', 'explode-path',
        -            'externalizable<%>', 'false', 'false/c', 'false?',
        -            'field-names', 'fifth', 'file-name-from-path',
        -            'filename-extension', 'filter-map', 'filter-not',
        -            'filter-read-input-port', 'find-files', 'first', 'flat-contract',
        -            'flat-contract-predicate', 'flat-contract-property?',
        -            'flat-contract?', 'flat-named-contract', 'flatten', 'fold-files',
        -            'force', 'fourth', 'fsemaphore-count', 'fsemaphore-post',
        -            'fsemaphore-try-wait?', 'fsemaphore-wait', 'fsemaphore?', 'future',
        -            'future?', 'futures-enabled?', 'generate-ctc-fail?',
        -            'generate-env', 'generate-member-key', 'generate/choose',
        -            'generate/direct', 'generic?', 'group-execute-bit',
        -            'group-read-bit', 'group-write-bit', 'has-contract?', 'identity',
        -            'impersonator-contract?', 'impersonator-prop:contracted',
        -            'implementation?', 'implementation?/c', 'in-dict', 'in-dict-keys',
        -            'in-dict-pairs', 'in-dict-values', 'infinite?',
        -            'input-port-append', 'instanceof/c', 'interface->method-names',
        -            'interface-extension?', 'interface?', 'is-a?', 'is-a?/c', 'last',
        -            'last-pair', 'list->set', 'list->seteq', 'list->seteqv',
        -            'make-chaperone-contract', 'make-contract', 'make-custom-hash',
        -            'make-directory*', 'make-exn:fail:contract:blame',
        -            'make-exn:fail:object', 'make-flat-contract', 'make-fsemaphore',
        -            'make-generate-ctc-fail', 'make-generic',
        -            'make-immutable-custom-hash', 'make-input-port/read-to-peek',
        -            'make-limited-input-port', 'make-list', 'make-lock-file-name',
        -            'make-mixin-contract', 'make-none/c', 'make-pipe-with-specials',
        -            'make-primitive-class', 'make-proj-contract',
        -            'make-tentative-pretty-print-output-port', 'make-weak-custom-hash',
        -            'match-equality-test', 'matches-arity-exactly?',
        -            'member-name-key-hash-code', 'member-name-key=?',
        -            'member-name-key?', 'merge-input', 'method-in-interface?',
        -            'mixin-contract', 'n->th', 'nan?', 'natural-number/c', 'negate',
        -            'new-∀/c', 'new-∃/c', 'ninth', 'normalize-path', 'object%',
        -            'object->vector', 'object-info', 'object-interface',
        -            'object-method-arity-includes?', 'object=?', 'object?',
        -            'open-output-nowhere', 'order-of-magnitude', 'other-execute-bit',
        -            'other-read-bit', 'other-write-bit', 'parse-command-line',
        -            'partition', 'path-element?', 'path-only', 'pathlist-closure',
        -            'pi', 'pi.f', 'place-break', 'place-channel', 'place-channel-get',
        -            'place-channel-put', 'place-channel-put/get', 'place-channel?',
        -            'place-dead-evt', 'place-enabled?', 'place-kill',
        -            'place-message-allowed?', 'place-sleep', 'place-wait', 'place?',
        -            'port->bytes', 'port->list', 'port->string',
        -            'predicate/c', 'preferences-lock-file-mode', 'pretty-display',
        -            'pretty-format', 'pretty-print',
        -            'pretty-print-.-symbol-without-bars',
        -            'pretty-print-abbreviate-read-macros', 'pretty-print-columns',
        -            'pretty-print-current-style-table', 'pretty-print-depth',
        -            'pretty-print-exact-as-decimal', 'pretty-print-extend-style-table',
        -            'pretty-print-handler', 'pretty-print-newline',
        -            'pretty-print-post-print-hook', 'pretty-print-pre-print-hook',
        -            'pretty-print-print-hook', 'pretty-print-print-line',
        -            'pretty-print-remap-stylable', 'pretty-print-show-inexactness',
        -            'pretty-print-size-hook', 'pretty-print-style-table?',
        -            'pretty-printing', 'pretty-write', 'printable<%>',
        -            'printable/c', 'process', 'process*', 'process*/ports',
        -            'process/ports', 'processor-count', 'promise-forced?',
        -            'promise-running?', 'promise?', 'prop:chaperone-contract',
        -            'prop:contract', 'prop:contracted', 'prop:dict',
        -            'prop:flat-contract', 'prop:opt-chaperone-contract',
        -            'prop:opt-chaperone-contract-get-test',
        -            'prop:opt-chaperone-contract?', 'prop:stream', 'proper-subset?',
        -            'put-preferences', 'radians->degrees', 'raise-blame-error',
        -            'raise-contract-error', 'range', 'reencode-input-port',
        -            'reencode-output-port', 'relocate-input-port',
        -            'relocate-output-port', 'rest', 'second', 'sequence->list',
        -            'sequence-add-between', 'sequence-andmap', 'sequence-append',
        -            'sequence-count', 'sequence-filter', 'sequence-fold',
        -            'sequence-for-each', 'sequence-length', 'sequence-map',
        -            'sequence-ormap', 'sequence-ref', 'sequence-tail', 'set',
        -            'set->list', 'set-add', 'set-count', 'set-empty?', 'set-eq?',
        -            'set-equal?', 'set-eqv?', 'set-first', 'set-for-each',
        -            'set-intersect', 'set-map', 'set-member?', 'set-remove',
        -            'set-rest', 'set-subtract', 'set-symmetric-difference',
        -            'set-union', 'set/c', 'set=?', 'set?', 'seteq', 'seteqv',
        -            'seventh', 'sgn', 'shuffle', 'simple-form-path', 'sinh', 'sixth',
        -            'skip-projection-wrapper?', 'some-system-path->string',
        -            'special-filter-input-port', 'split-at', 'split-at-right', 'sqr',
        -            'stream->list', 'stream-add-between', 'stream-andmap',
        -            'stream-append', 'stream-count', 'stream-empty?', 'stream-filter',
        -            'stream-first', 'stream-fold', 'stream-for-each', 'stream-length',
        -            'stream-map', 'stream-ormap', 'stream-ref', 'stream-rest',
        -            'stream-tail', 'stream?', 'string->some-system-path',
        -            'string-append*', 'string-no-nuls?', 'struct-type-property/c',
        -            'struct:exn:fail:contract:blame', 'struct:exn:fail:object',
        -            'subclass?', 'subclass?/c', 'subset?', 'symbol=?', 'system',
        -            'system*', 'system*/exit-code', 'system/exit-code', 'take',
        -            'take-right', 'tanh', 'tcp-abandon-port', 'tcp-accept',
        -            'tcp-accept-evt', 'tcp-accept-ready?', 'tcp-accept/enable-break',
        -            'tcp-addresses', 'tcp-close', 'tcp-connect',
        -            'tcp-connect/enable-break', 'tcp-listen', 'tcp-listener?',
        -            'tcp-port?', 'tentative-pretty-print-port-cancel',
        -            'tentative-pretty-print-port-transfer', 'tenth',
        -            'the-unsupplied-arg', 'third', 'touch', 'transplant-input-port',
        -            'transplant-output-port', 'true', 'udp-addresses', 'udp-bind!',
        -            'udp-bound?', 'udp-close', 'udp-connect!', 'udp-connected?',
        -            'udp-open-socket', 'udp-receive!', 'udp-receive!*',
        -            'udp-receive!-evt', 'udp-receive!/enable-break',
        -            'udp-receive-ready-evt', 'udp-send', 'udp-send*', 'udp-send-evt',
        -            'udp-send-ready-evt', 'udp-send-to', 'udp-send-to*',
        -            'udp-send-to-evt', 'udp-send-to/enable-break',
        -            'udp-send/enable-break', 'udp?', 'unit?', 'unsupplied-arg?',
        -            'user-execute-bit', 'user-read-bit', 'user-write-bit',
        -            'value-contract', 'vector-append', 'vector-argmax',
        -            'vector-argmin', 'vector-copy', 'vector-count', 'vector-drop',
        -            'vector-drop-right', 'vector-filter', 'vector-filter-not',
        -            'vector-map', 'vector-map!', 'vector-member', 'vector-memq',
        -            'vector-memv', 'vector-set*!', 'vector-split-at',
        -            'vector-split-at-right', 'vector-take', 'vector-take-right',
        -            'with-input-from-bytes', 'with-input-from-string',
        -            'with-output-to-bytes', 'with-output-to-string', 'would-be-future',
        -            'writable<%>', 'xor',
        -            ),
        -        4 => array(
        -            '>=/c', '<=/c', '->*m', '->d', '->dm', '->i', '->m',
        -            '=/c', 'absent', 'abstract', 'add-between', 'and/c', 'any',
        -            'any/c', 'augment', 'augment*', 'augment-final', 'augment-final*',
        -            'augride', 'augride*', 'between/c', 'blame-add-context',
        -            'box-immutable/c', 'box/c', 'call-with-file-lock/timeout',
        -            'case->', 'case->m', 'class', 'class*',
        -            'class-field-accessor', 'class-field-mutator', 'class/c',
        -            'class/derived', 'command-line', 'compound-unit',
        -            'compound-unit/infer', 'cons/c', 'continuation-mark-key/c',
        -            'contract', 'contract-out', 'contract-struct', 'contracted',
        -            'current-contract-region', 'define-compound-unit',
        -            'define-compound-unit/infer', 'define-contract-struct',
        -            'define-local-member-name', 'define-match-expander',
        -            'define-member-name', 'define-opt/c', 'define-serializable-class',
        -            'define-serializable-class*', 'define-signature',
        -            'define-signature-form', 'define-struct/contract', 'define-unit',
        -            'define-unit-binding', 'define-unit-from-context',
        -            'define-unit/contract', 'define-unit/new-import-export',
        -            'define-unit/s', 'define-values-for-export',
        -            'define-values/invoke-unit', 'define-values/invoke-unit/infer',
        -            'define/augment', 'define/augment-final', 'define/augride',
        -            'define/contract', 'define/final-prop', 'define/match',
        -            'define/overment', 'define/override', 'define/override-final',
        -            'define/private', 'define/public', 'define/public-final',
        -            'define/pubment', 'define/subexpression-pos-prop', 'delay',
        -            'delay/idle', 'delay/name', 'delay/strict', 'delay/sync',
        -            'delay/thread', 'dict->list', 'dict-can-functional-set?',
        -            'dict-can-remove-keys?', 'dict-count', 'dict-for-each',
        -            'dict-has-key?', 'dict-iterate-first', 'dict-iterate-key',
        -            'dict-iterate-next', 'dict-iterate-value', 'dict-keys', 'dict-map',
        -            'dict-mutable?', 'dict-ref', 'dict-ref!', 'dict-remove',
        -            'dict-remove!', 'dict-set', 'dict-set!', 'dict-set*', 'dict-set*!',
        -            'dict-update', 'dict-update!', 'dict-values', 'dict?',
        -            'display-lines', 'display-lines-to-file', 'display-to-file',
        -            'dynamic-place', 'dynamic-place*', 'eof-evt', 'except',
        -            'exn:fail:contract:blame', 'exn:fail:object', 'export', 'extends',
        -            'field', 'field-bound?', 'file->bytes', 'file->bytes-lines',
        -            'file->lines', 'file->list', 'file->string',
        -            'file->value', 'find-relative-path', 'flat-murec-contract',
        -            'flat-rec-contract', 'for*/set', 'for*/seteq', 'for*/seteqv',
        -            'for/set', 'for/seteq', 'for/seteqv', 'gen:dict', 'gen:stream',
        -            'generic', 'get-field', 'get-preference', 'hash/c', 'implies',
        -            'import', 'in-set', 'in-stream', 'include',
        -            'include-at/relative-to', 'include-at/relative-to/reader',
        -            'include/reader', 'inherit', 'inherit-field', 'inherit/inner',
        -            'inherit/super', 'init', 'init-depend', 'init-field', 'init-rest',
        -            'inner', 'inspect', 'instantiate', 'integer-in', 'interface',
        -            'interface*', 'invoke-unit', 'invoke-unit/infer', 'lazy', 'link',
        -            'list/c', 'listof', 'local', 'make-handle-get-preference-locked',
        -            'make-object', 'make-temporary-file', 'match', 'match*',
        -            'match*/derived', 'match-define', 'match-define-values',
        -            'match-lambda', 'match-lambda*', 'match-lambda**', 'match-let',
        -            'match-let*', 'match-let*-values', 'match-let-values',
        -            'match-letrec', 'match/derived', 'match/values', 'member-name-key',
        -            'method-contract?', 'mixin', 'nand', 'new', 'non-empty-listof',
        -            'none/c', 'nor', 'not/c', 'object-contract', 'object/c',
        -            'one-of/c', 'only', 'open', 'opt/c', 'or/c', 'overment',
        -            'overment*', 'override', 'override*', 'override-final',
        -            'override-final*', 'parameter/c', 'parametric->/c',
        -            'peek-bytes!-evt', 'peek-bytes-avail!-evt', 'peek-bytes-evt',
        -            'peek-string!-evt', 'peek-string-evt', 'peeking-input-port',
        -            'place', 'place*', 'port->bytes-lines', 'port->lines',
        -            'prefix', 'private', 'private*', 'procedure-arity-includes/c',
        -            'promise/c', 'prompt-tag/c', 'prop:dict/contract',
        -            'provide-signature-elements', 'provide/contract', 'public',
        -            'public*', 'public-final', 'public-final*', 'pubment', 'pubment*',
        -            'read-bytes!-evt', 'read-bytes-avail!-evt', 'read-bytes-evt',
        -            'read-bytes-line-evt', 'read-line-evt', 'read-string!-evt',
        -            'read-string-evt', 'real-in', 'recursive-contract',
        -            'regexp-match-evt', 'remove-duplicates', 'rename', 'rename-inner',
        -            'rename-super', 'send', 'send*', 'send+', 'send-generic',
        -            'send/apply', 'send/keyword-apply', 'set-field!', 'shared',
        -            'stream', 'stream-cons', 'string-join', 'string-len/c',
        -            'string-normalize-spaces', 'string-replace', 'string-split',
        -            'string-trim', 'struct*', 'struct/c', 'struct/ctc', 'struct/dc',
        -            'super', 'super-instantiate', 'super-make-object', 'super-new',
        -            'symbols', 'syntax/c', 'tag', 'this', 'this%', 'thunk', 'thunk*',
        -            'unconstrained-domain->', 'unit', 'unit-from-context', 'unit/c',
        -            'unit/new-import-export', 'unit/s', 'vector-immutable/c',
        -            'vector-immutableof', 'vector/c', 'vectorof', 'with-contract',
        -            'with-method', 'write-to-file', '~.a', '~.s', '~.v', '~a', '~e',
        -            '~r', '~s', '~v',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '>', '>=', '<', '<=', '*', '+', '-', '->', '->*', '...', '/',
        -            '=', '=>', '==', '_', '#fl', '#fx', '#s', '#', '#f', '#F',
        -            '#false', '#t', '#T', '#true', '#lang', '#reader', '.', '\'', '#`',
        -            '#,@', '#,', '#\'', '`', '@', ',', '#%', '#$', '#&', '#~', '#rx',
        -            '#px', '#<<', '#;', '#hash', '#',
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'NUMBERS' => array(
        -        1 => '(((#x#e)|(#e#x)|(#x#i)|(#i#x)|(#x))((((((((((((-)|(\+)))?(((('.
        -            '(([0-9])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)'.
        -            '(\.)?(#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))('.
        -            '([sl]((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan'.
        -            '\.))[0f])))))?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-9a-fA-F])+'.
        -            '(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?(#)*))|(((([0-9a-fA-F])+(#'.
        -            ')*)\\/(([0-9a-fA-F])+(#)*))))(([sl]((((-)|(\+)))?([0-9])+)))?'.
        -            '))|((((inf\.)|(nan\.))[0f])))i))|((((((((-)|(\+)))?(((((([0-9'.
        -            '])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?('.
        -            '#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))(([sl]('.
        -            '(((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0'.
        -            'f]))))@((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-9a-fA-F])+(#)'.
        -            '*)))|(((([0-9a-fA-F])+(#)*)(\.)?(#)*))|(((([0-9a-fA-F])+(#)*)'.
        -            '\\/(([0-9a-fA-F])+(#)*))))(([sl]((((-)|(\+)))?([0-9])+)))?)))'.
        -            '|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|((((((-)|(\+)))?('.
        -            '([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9])+)i))|((((('.
        -            '-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)))?(((((([0-9'.
        -            '])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?('.
        -            '#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))(([sl]('.
        -            '(((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0'.
        -            'f])))))|(((((-)|(\+)))?([0-9])+))))',
        -        2 => '(((#o#e)|(#e#o)|(#o#i)|(#i#o)|(#o))((((((((((((-)|(\+)))?(((('.
        -            '(([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?(#)*))|'.
        -            '(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))((((-)|'.
        -            '(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))'.
        -            ')?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])'.
        -            '+(#)*)(\.)?(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl'.
        -            '])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf\.)|(nan\.))[0'.
        -            'f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-7])+(#)*)'.
        -            '))|(((([0-7])+(#)*)(\.)?(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#'.
        -            ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|'.
        -            '(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))?(((((([0-9])+'.
        -            ')?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?(#)*))|(((([0-7]'.
        -            ')+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?(['.
        -            '0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|(((('.
        -            '((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9'.
        -            '])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)'.
        -            '))?(((((([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?'.
        -            '(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))'.
        -            '((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))['.
        -            '0f])))))|(((((-)|(\+)))?([0-9])+))))',
        -        3 => '(((#b#e)|(#e#b)|(#b#i)|(#i#b)|(#b))((((((((((((-)|(\+)))?(((('.
        -            '(([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?(#)*))|'.
        -            '(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))((((-)|'.
        -            '(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))'.
        -            ')?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])'.
        -            '+(#)*)(\.)?(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl'.
        -            '])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf\.)|(nan\.))[0'.
        -            'f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-1])+(#)*)'.
        -            '))|(((([0-1])+(#)*)(\.)?(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#'.
        -            ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|'.
        -            '(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))?(((((([0-9])+'.
        -            ')?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?(#)*))|(((([0-1]'.
        -            ')+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?(['.
        -            '0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|(((('.
        -            '((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9'.
        -            '])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)'.
        -            '))?(((((([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?'.
        -            '(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))'.
        -            '((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))['.
        -            '0f])))))|(((((-)|(\+)))?([0-9])+))))',
        -        4 => '((((#d#e)|(#e#d)|(#d#i)|(#i#d)|(#e)|(#i)|(#d)))?((((((((((((-'.
        -            ')|(\+)))?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-9])+(#)*'.
        -            ')(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((([sl])|(['.
        -            'def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(na'.
        -            'n\.))[0f])))))?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-9])+(#)*)'.
        -            '))|(((([0-9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#'.
        -            ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf'.
        -            '\.)|(nan\.))[0f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?'.
        -            '(([0-9])+(#)*)))|(((([0-9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)'.
        -            '\\/(([0-9])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)'.
        -            '))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))'.
        -            '?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-9])+(#)*)(\.)?(#'.
        -            ')*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((([sl])|([def]))(('.
        -            '((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f'.
        -            ']))))))))|((((((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))((['.
        -            '0-9])+\\/([0-9])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|'.
        -            '(((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-'.
        -            '9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((('.
        -            '[sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((in'.
        -            'f\.)|(nan\.))[0f])))))|(((((-)|(\+)))?([0-9])+))))',
        -            ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: blue;',
        -            2 => 'color: rgb(34, 34, 139);',
        -            3 => 'color: blue;',
        -            4 => 'color: rgb(34, 34, 139);',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: rgb(194, 116, 31);',
        -            'MULTI' => 'color: rgb(194, 116, 31);',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: rgb(132, 60,36);',
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: rgb(34, 139, 34);',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: rgb(34, 139, 34);',
        -            1 => 'color: rgb(34, 139, 34);',
        -            2 => 'color: rgb(34, 139, 34);',
        -            3 => 'color: rgb(34, 139, 34);',
        -            4 => 'color: rgb(34, 139, 34);',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #202020;',
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: rgb(132, 60,36);',
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: rgb(34, 139, 34);',
        -            2 => 'color: rgb(132, 60,36);',
        -            3 => 'color: rgb(34, 139, 34);',
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        ),
        -    'URLS' => array(
        -        1 => 'http://docs.racket-lang.org/reference/',
        -        2 => 'http://docs.racket-lang.org/reference/',
        -        3 => 'http://docs.racket-lang.org/reference/',
        -        4 => 'http://docs.racket-lang.org/reference/',
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        1 => '#\\\\(nul|null|backspace|tab|newline|linefeed|vtab|page|retur'.
        -            'n|space|rubout|([0-7]{1,3})|(u[[:xdigit:]]{1,4})|(U[[:xdigit:'.
        -            ']]{1,6})|[a-z])',
        -        2 => '#:[^[:space:]()[\\]{}",\']+',
        -        3 => '\'((\\\\ )|([^[:space:]()[\\]{}",\']))+',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => '[[:space:]()[\\]{}",\']',
        -            ),
        -        'ENABLE_FLAGS' => array(
        -            'SYMBOLS' => GESHI_MAYBE,
        -            'BRACKETS' => GESHI_MAYBE,
        -            'REGEXPS' => GESHI_MAYBE,
        -            'ESCAPE_CHAR' => GESHI_MAYBE,
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php
        deleted file mode 100644
        index 2838719c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php
        +++ /dev/null
        @@ -1,404 +0,0 @@
        - 'Rails',
        -    'COMMENT_SINGLE' => array(1 => "#"),
        -    'COMMENT_MULTI' => array("=begin" => "=end"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '`','\''),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'alias', 'and', 'begin', 'break', 'case', 'class',
        -            'def', 'defined', 'do', 'else', 'elsif', 'end',
        -            'ensure', 'for', 'if', 'in', 'module', 'while',
        -            'next', 'not', 'or', 'redo', 'rescue', 'yield',
        -            'retry', 'super', 'then', 'undef', 'unless',
        -            'until', 'when', 'BEGIN', 'END', 'include'
        -            ),
        -        2 => array(
        -            '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true',
        -            'return'
        -            ),
        -        3 => array(
        -            'Array', 'Float', 'Integer', 'String', 'at_exit',
        -            'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!',
        -            'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail',
        -            'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!',
        -            'iterator?', 'lambda', 'load', 'local_variables', 'loop',
        -            'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts',
        -            'raise', 'rand', 'readline', 'readlines', 'require', 'select',
        -            'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall',
        -            'system', 'trace_var', 'trap', 'untrace_var'
        -            ),
        -        4 => array(
        -            'Abbrev', 'ArgumentError', 'Base64', 'Benchmark',
        -            'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie',
        -            'CGI::HtmlExtension', 'CGI::QueryExtension',
        -            'CGI::Session', 'CGI::Session::FileStore',
        -            'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex',
        -            'ConditionVariable', 'Continuation', 'Data',
        -            'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB',
        -            'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno',
        -            'Exception', 'FalseClass', 'File',
        -            'File::Constants', 'File::Stat', 'FileTest', 'FileUtils',
        -            'FileUtils::DryRun', 'FileUtils::NoWrite',
        -            'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find',
        -            'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator',
        -            'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary',
        -            'Iconv::Failure', 'Iconv::IllegalSequence',
        -            'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding',
        -            'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel',
        -            'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application',
        -            'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice',
        -            'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity',
        -            'Logger::ShiftingError', 'Marshal', 'MatchData',
        -            'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError',
        -            'NameError::message', 'NilClass', 'NoMemoryError',
        -            'NoMethodError', 'NotImplementedError', 'Numeric', 'Object',
        -            'ObjectSpace', 'Observable', 'PStore', 'PStore::Error',
        -            'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID',
        -            'Process::Status', 'Process::Sys', 'Process::UID', 'Queue',
        -            'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError',
        -            'RuntimeError', 'ScriptError', 'SecurityError', 'Set',
        -            'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator',
        -            'SingleForwardable', 'Singleton', 'SingletonClassMethods',
        -            'SizedQueue', 'SortedSet', 'StandardError', 'StringIO',
        -            'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol',
        -            'SyncEnumerator', 'SyntaxError', 'SystemCallError',
        -            'SystemExit', 'SystemStackError', 'Tempfile',
        -            'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread',
        -            'ThreadError', 'ThreadGroup',
        -            'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI',
        -            'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP',
        -            'URI::Generic', 'URI::HTTP', 'URI::HTTPS',
        -            'URI::InvalidComponentError', 'URI::InvalidURIError',
        -            'URI::LDAP', 'URI::MailTo', 'URI::REGEXP',
        -            'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML',
        -            'ZeroDivisionError', 'Zlib',
        -            'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate',
        -            'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError',
        -            'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError',
        -            'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader',
        -            'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError',
        -            'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError',
        -            'Zlib::VersionError',
        -            'Zlib::ZStream',
        -            'ActionController::AbstractRequest',
        -            'ActionController::Assertions::DomAssertions',
        -            'ActionController::Assertions::ModelAssertions',
        -            'ActionController::Assertions::ResponseAssertions',
        -            'ActionController::Assertions::RoutingAssertions',
        -            'ActionController::Assertions::SelectorAssertions',
        -            'ActionController::Assertions::TagAssertions',
        -            'ActionController::Base',
        -            'ActionController::Benchmarking::ClassMethods',
        -            'ActionController::Caching',
        -            'ActionController::Caching::Actions',
        -            'ActionController::Caching::Actions::ActionCachePath',
        -            'ActionController::Caching::Fragments',
        -            'ActionController::Caching::Pages',
        -            'ActionController::Caching::Pages::ClassMethods',
        -            'ActionController::Caching::Sweeping',
        -            'ActionController::Components',
        -            'ActionController::Components::ClassMethods',
        -            'ActionController::Components::InstanceMethods',
        -            'ActionController::Cookies',
        -            'ActionController::Filters::ClassMethods',
        -            'ActionController::Flash',
        -            'ActionController::Flash::FlashHash',
        -            'ActionController::Helpers::ClassMethods',
        -            'ActionController::Integration::Session',
        -            'ActionController::IntegrationTest',
        -            'ActionController::Layout::ClassMethods',
        -            'ActionController::Macros',
        -            'ActionController::Macros::AutoComplete::ClassMethods',
        -            'ActionController::Macros::InPlaceEditing::ClassMethods',
        -            'ActionController::MimeResponds::InstanceMethods',
        -            'ActionController::Pagination',
        -            'ActionController::Pagination::ClassMethods',
        -            'ActionController::Pagination::Paginator',
        -            'ActionController::Pagination::Paginator::Page',
        -            'ActionController::Pagination::Paginator::Window',
        -            'ActionController::Rescue', 'ActionController::Resources',
        -            'ActionController::Routing',
        -            'ActionController::Scaffolding::ClassMethods',
        -            'ActionController::SessionManagement::ClassMethods',
        -            'ActionController::Streaming', 'ActionController::TestProcess',
        -            'ActionController::TestUploadedFile',
        -            'ActionController::UrlWriter',
        -            'ActionController::Verification::ClassMethods',
        -            'ActionMailer::Base', 'ActionView::Base',
        -            'ActionView::Helpers::ActiveRecordHelper',
        -            'ActionView::Helpers::AssetTagHelper',
        -            'ActionView::Helpers::BenchmarkHelper',
        -            'ActionView::Helpers::CacheHelper',
        -            'ActionView::Helpers::CaptureHelper',
        -            'ActionView::Helpers::DateHelper',
        -            'ActionView::Helpers::DebugHelper',
        -            'ActionView::Helpers::FormHelper',
        -            'ActionView::Helpers::FormOptionsHelper',
        -            'ActionView::Helpers::FormTagHelper',
        -            'ActionView::Helpers::JavaScriptHelper',
        -            'ActionView::Helpers::JavaScriptMacrosHelper',
        -            'ActionView::Helpers::NumberHelper',
        -            'ActionView::Helpers::PaginationHelper',
        -            'ActionView::Helpers::PrototypeHelper',
        -            'ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods',
        -            'ActionView::Helpers::ScriptaculousHelper',
        -            'ActionView::Helpers::TagHelper',
        -            'ActionView::Helpers::TextHelper',
        -            'ActionView::Helpers::UrlHelper', 'ActionView::Partials',
        -            'ActionWebService::API::Method', 'ActionWebService::Base',
        -            'ActionWebService::Client::Soap',
        -            'ActionWebService::Client::XmlRpc',
        -            'ActionWebService::Container::ActionController::ClassMethods',
        -            'ActionWebService::Container::Delegated::ClassMethods',
        -            'ActionWebService::Container::Direct::ClassMethods',
        -            'ActionWebService::Invocation::ClassMethods',
        -            'ActionWebService::Scaffolding::ClassMethods',
        -            'ActionWebService::SignatureTypes', 'ActionWebService::Struct',
        -            'ActiveRecord::Acts::List::ClassMethods',
        -            'ActiveRecord::Acts::List::InstanceMethods',
        -            'ActiveRecord::Acts::NestedSet::ClassMethods',
        -            'ActiveRecord::Acts::NestedSet::InstanceMethods',
        -            'ActiveRecord::Acts::Tree::ClassMethods',
        -            'ActiveRecord::Acts::Tree::InstanceMethods',
        -            'ActiveRecord::Aggregations::ClassMethods',
        -            'ActiveRecord::Associations::ClassMethods',
        -            'ActiveRecord::AttributeMethods::ClassMethods',
        -            'ActiveRecord::Base',
        -            'ActiveRecord::Calculations::ClassMethods',
        -            'ActiveRecord::Callbacks',
        -            'ActiveRecord::ConnectionAdapters::AbstractAdapter',
        -            'ActiveRecord::ConnectionAdapters::Column',
        -            'ActiveRecord::ConnectionAdapters::DB2Adapter',
        -            'ActiveRecord::ConnectionAdapters::DatabaseStatements',
        -            'ActiveRecord::ConnectionAdapters::FirebirdAdapter',
        -            'ActiveRecord::ConnectionAdapters::FrontBaseAdapter',
        -            'ActiveRecord::ConnectionAdapters::MysqlAdapter',
        -            'ActiveRecord::ConnectionAdapters::OpenBaseAdapter',
        -            'ActiveRecord::ConnectionAdapters::OracleAdapter',
        -            'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter',
        -            'ActiveRecord::ConnectionAdapters::Quoting',
        -            'ActiveRecord::ConnectionAdapters::SQLServerAdapter',
        -            'ActiveRecord::ConnectionAdapters::SQLiteAdapter',
        -            'ActiveRecord::ConnectionAdapters::SchemaStatements',
        -            'ActiveRecord::ConnectionAdapters::SybaseAdapter::ColumnWithIdentity',
        -            'ActiveRecord::ConnectionAdapters::SybaseAdapterContext',
        -            'ActiveRecord::ConnectionAdapters::TableDefinition',
        -            'ActiveRecord::Errors', 'ActiveRecord::Locking',
        -            'ActiveRecord::Locking::Optimistic',
        -            'ActiveRecord::Locking::Optimistic::ClassMethods',
        -            'ActiveRecord::Locking::Pessimistic',
        -            'ActiveRecord::Migration', 'ActiveRecord::Observer',
        -            'ActiveRecord::Observing::ClassMethods',
        -            'ActiveRecord::Reflection::ClassMethods',
        -            'ActiveRecord::Reflection::MacroReflection',
        -            'ActiveRecord::Schema', 'ActiveRecord::Timestamp',
        -            'ActiveRecord::Transactions::ClassMethods',
        -            'ActiveRecord::Validations',
        -            'ActiveRecord::Validations::ClassMethods',
        -            'ActiveRecord::XmlSerialization',
        -            'ActiveSupport::CachingTools::HashCaching',
        -            'ActiveSupport::CoreExtensions::Array::Conversions',
        -            'ActiveSupport::CoreExtensions::Array::Grouping',
        -            'ActiveSupport::CoreExtensions::Date::Conversions',
        -            'ActiveSupport::CoreExtensions::Hash::Conversions',
        -            'ActiveSupport::CoreExtensions::Hash::Conversions::ClassMethods',
        -            'ActiveSupport::CoreExtensions::Hash::Diff',
        -            'ActiveSupport::CoreExtensions::Hash::Keys',
        -            'ActiveSupport::CoreExtensions::Hash::ReverseMerge',
        -            'ActiveSupport::CoreExtensions::Integer::EvenOdd',
        -            'ActiveSupport::CoreExtensions::Integer::Inflections',
        -            'ActiveSupport::CoreExtensions::Numeric::Bytes',
        -            'ActiveSupport::CoreExtensions::Numeric::Time',
        -            'ActiveSupport::CoreExtensions::Pathname::CleanWithin',
        -            'ActiveSupport::CoreExtensions::Range::Conversions',
        -            'ActiveSupport::CoreExtensions::String::Access',
        -            'ActiveSupport::CoreExtensions::String::Conversions',
        -            'ActiveSupport::CoreExtensions::String::Inflections',
        -            'ActiveSupport::CoreExtensions::String::Iterators',
        -            'ActiveSupport::CoreExtensions::String::StartsEndsWith',
        -            'ActiveSupport::CoreExtensions::String::Unicode',
        -            'ActiveSupport::CoreExtensions::Time::Calculations',
        -            'ActiveSupport::CoreExtensions::Time::Calculations::ClassMethods',
        -            'ActiveSupport::CoreExtensions::Time::Conversions',
        -            'ActiveSupport::Multibyte::Chars',
        -            'ActiveSupport::Multibyte::Handlers::UTF8Handler',
        -            'Breakpoint', 'Builder::BlankSlate', 'Builder::XmlMarkup',
        -            'Fixtures',
        -            'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector',
        -            'Inflector::Inflections', 'Mime', 'Mime::Type',
        -            'OCI8AutoRecover', 'TimeZone', 'XmlSimple'
        -            ),
        -        5 => array(
        -            'image_tag', 'link_to', 'link_to_remote', 'javascript_include_tag',
        -            'assert_equal', 'assert_not_equal', 'before_filter',
        -            'after_filter', 'render', 'redirect_to', 'hide_action',
        -            'render_to_string', 'url_for', 'controller_name',
        -            'controller_class_name', 'controller_path', 'session',
        -            'render_component', 'render_component_as_string', 'cookie',
        -            'layout', 'flash', 'auto_complete_for', 'in_place_editor_for',
        -            'respond_to', 'paginate', 'current_page', 'each', 'first',
        -            'first_page', 'last_page', 'last', 'length', 'new', 'page_count',
        -            'previous', 'scaffold', 'send_data',
        -            'send_file', 'deliver', 'receive', 'error_messages_for',
        -            'error_message_on', 'form', 'input', 'stylesheet_link_tag',
        -            'stylesheet_path', 'content_for', 'select_date', 'ago',
        -            'month', 'day', 'check_box', 'fields_for', 'file_field',
        -            'form_for', 'hidden_field', 'text_area', 'password_field',
        -            'collection_select', 'options_for_select',
        -            'options_from_collection_for_select', 'file_field_tag',
        -            'form_for_tag', 'hidden_field_tag', 'text_area_tag',
        -            'password_field_tag', 'link_to_function', 'javascript_tag',
        -            'human_size', 'number_to_currency', 'pagination_links',
        -            'form_remote_tag', 'form_remote_for',
        -            'submit_to_remote', 'remote_function', 'observe_form',
        -            'observe_field', 'remote_form_for', 'options_for_ajax', 'alert',
        -            'call', 'assign', 'show', 'hide', 'insert_html', 'sortable',
        -            'toggle', 'visual_effect', 'replace', 'replace_html', 'remove',
        -            'save', 'save!', 'draggable', 'drop_receiving', 'literal',
        -            'draggable_element', 'drop_receiving_element', 'sortable_element',
        -            'content_tag', 'tag', 'link_to_image', 'link_to_if',
        -            'link_to_unless', 'mail_to', 'link_image_to', 'button_to',
        -            'current_page?', 'act_as_list', 'act_as_nested', 'act_as_tree',
        -            'has_many', 'has_one', 'belongs_to', 'has_many_and_belogns_to',
        -            'delete', 'destroy', 'destroy_all', 'clone', 'deep_clone', 'copy',
        -            'update', 'table_name', 'primary_key', 'sum', 'maximun', 'minimum',
        -            'count', 'size', 'after_save', 'after_create', 'before_save',
        -            'before_create', 'add_to_base', 'errors', 'add', 'validate',
        -            'validates_presence_of', 'validates_numericality_of',
        -            'validates_uniqueness_of', 'validates_length_of',
        -            'validates_format_of', 'validates_size_of', 'to_a', 'to_s',
        -            'to_xml', 'to_i'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
        -        '+', '-', '=>', '<<'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color:#9966CC; font-weight:bold;',
        -            2 => 'color:#0000FF; font-weight:bold;',
        -            3 => 'color:#CC0066; font-weight:bold;',
        -            4 => 'color:#CC00FF; font-weight:bold;',
        -            5 => 'color:#5A0A0A; font-weight:bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color:#008000; font-style:italic;',
        -                    'MULTI' => 'color:#000080; font-style:italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color:#000099;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color:#006600; font-weight:bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color:#996600;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color:#006666;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color:#9900CC;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color:#006600; font-weight:bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color:#ff6633; font-weight:bold;',
        -            1 => 'color:#0066ff; font-weight:bold;',
        -            2 => 'color:#6666ff; font-weight:bold;',
        -            3 => 'color:#ff3333; font-weight:bold;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(
        -            GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        1 => array(
        -            GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*", //Static OOP References
        -        3 => array(
        -            GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            '<%' => '%>'
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php
        deleted file mode 100644
        index 02c2fcfa..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php
        +++ /dev/null
        @@ -1,224 +0,0 @@
        - 'RBScript',
        -    'COMMENT_SINGLE' => array( 1 => '//', 2 => "'" ),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        3 => '/REM\s.*$/im',
        -        4 => '/&b[01]+/',
        -        5 => '/&o[0-7]+/',
        -        6 => '/&h[a-f0-9]+/i',
        -        7 => '/&c[a-f0-9]+/i',
        -        8 => '/&u[a-f0-9]+/i',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'Uint32', 'Uint64', 'Byte', 'Integer',
        -            'Single', 'Double', 'Boolean', 'String', 'Color', 'Object', 'Variant'
        -            ),
        -        2 => array(
        -            'Private', 'Public', 'Protected',
        -            'Sub', 'Function', 'Delegate', 'Exception',
        -            ),
        -        3 => array(
        -            'IsA',
        -            'And', 'Or', 'Not', 'Xor',
        -            'If', 'Then', 'Else', 'ElseIf',
        -            'Select', 'Case',
        -            'For', 'Each', 'In', 'To', 'Step', 'Next',
        -            'Do', 'Loop', 'Until',
        -            'While', 'Wend',
        -            'Continue', 'Exit', 'Goto', 'End',
        -            ),
        -        4 => array(
        -            'Const', 'Static',
        -            'Dim', 'As', 'Redim',
        -            'Me', 'Self', 'Super', 'Extends', 'Implements',
        -            'ByRef', 'ByVal', 'Assigns', 'ParamArray',
        -            'Mod',
        -            'Raise',
        -            ),
        -        5 => array(
        -            'False', 'True', 'Nil'
        -            ),
        -        6 => array(
        -            'Abs',
        -            'Acos',
        -            'Asc',
        -            'AscB',
        -            'Asin',
        -            'Atan',
        -            'Atan2',
        -            'CDbl',
        -            'Ceil',
        -            'Chr',
        -            'ChrB',
        -            'CMY',
        -            'Cos',
        -            'CountFields',
        -            'CStr',
        -            'Exp',
        -            'Floor',
        -            'Format',
        -            'Hex',
        -            'HSV',
        -            'InStr',
        -            'InStrB',
        -            'Left',
        -            'LeftB',
        -            'Len',
        -            'LenB',
        -            'Log',
        -            'Lowercase',
        -            'LTrim',
        -            'Max',
        -            'Microseconds',
        -            'Mid',
        -            'MidB',
        -            'Min',
        -            'NthField',
        -            'Oct',
        -            'Pow',
        -            'Replace',
        -            'ReplaceB',
        -            'ReplaceAll',
        -            'ReplaceAllB',
        -            'RGB',
        -            'Right',
        -            'RightB',
        -            'Rnd',
        -            'Round',
        -            'RTrim',
        -            'Sin',
        -            'Sqrt',
        -            'Str',
        -            'StrComp',
        -            'Tan',
        -            'Ticks',
        -            'Titlecase',
        -            'Trim',
        -            'UBound',
        -            'Uppercase',
        -            'Val',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -            '+', '-', '*', '/', '\\', '^', '<', '>', '=', '<>', '&'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #F660AB; font-weight: bold;',
        -            2 => 'color: #E56717; font-weight: bold;',
        -            3 => 'color: #8D38C9; font-weight: bold;',
        -            4 => 'color: #151B8D; font-weight: bold;',
        -            5 => 'color: #00C2FF; font-weight: bold;',
        -            6 => 'color: #3EA99F; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;',
        -            2 => 'color: #008000;',
        -            3 => 'color: #008000;',
        -
        -            4 => 'color: #800000;',
        -            5 => 'color: #800000;',
        -            6 => 'color: #800000;',
        -            7 => 'color: #800000;',
        -            8 => 'color: #800000;',
        -            ),
        -        'BRACKETS' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #800000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #800000; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'SYMBOLS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php
        deleted file mode 100644
        index 7acb736a..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php
        +++ /dev/null
        @@ -1,194 +0,0 @@
        - 'REBOL',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array('rebol [' => ']', 'comment [' => ']'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'binary!','block!','char!','date!','decimal!','email!','file!',
        -            'hash!','integer!','issue!','list!','logic!','money!','none!',
        -            'object!','paren!','pair!','path!','string!','tag!','time!',
        -            'tuple!','url!',
        -            ),
        -        2 => array(
        -            'all','any','attempt','break','catch','compose','disarm','dispatch',
        -            'do','do-events','does','either','else','exit','for','forall',
        -            'foreach','forever','forskip','func','function','halt','has','if',
        -            'launch','loop','next','quit','reduce','remove-each','repeat',
        -            'return','secure','switch','throw','try','until','wait','while',
        -            ),
        -        3 => array(
        -            'about','abs','absolute','add','alert','alias','alter','and',
        -            'any-block?','any-function?','any-string?','any-type?','any-word?',
        -            'append','arccosine','arcsine','arctangent','array','as-pair',
        -            'ask','at','back','binary?','bind','bitset?','block?','brightness?',
        -            'browse','build-tag','caret-to-offset','center-face','change',
        -            'change-dir','char?','charset','checksum','choose','clean-path',
        -            'clear','clear-fields','close','comment','complement','component?',
        -            'compress','confirm','connected?','construct','context','copy',
        -            'cosine','datatype?','date?','debase','decimal?','decode-cgi',
        -            'decompress','dehex','delete','detab','difference','dir?','dirize',
        -            'divide','dump-face','dump-obj','echo','email?','empty?','enbase',
        -            'entab','equal?','error?','even?','event?','exclude','exists?',
        -            'exp','extract','fifth','file?','find','first','flash','focus',
        -            'form','found?','fourth','free','function?','get','get-modes',
        -            'get-word?','greater-or-equal?','greater?','hash?','head','head?',
        -            'help','hide','hide-popup','image?','import-email','in',
        -            'in-window?','index?','info?','inform','input','input?','insert',
        -            'integer?','intersect','issue?','join','last','layout','length?',
        -            'lesser-or-equal?','lesser?','library?','license','link?',
        -            'list-dir','list?','lit-path?','lit-word?','load','load-image',
        -            'log-10','log-2','log-e','logic?','lowercase','make','make-dir',
        -            'make-face','max','maximum','maximum-of','min','minimum',
        -            'minimum-of','modified?','mold','money?','multiply','native?',
        -            'negate','negative?','none?','not','not-equal?','now','number?',
        -            'object?','odd?','offset-to-caret','offset?','op?','open','or',
        -            'pair?','paren?','parse','parse-xml','path?','pick','poke','port?',
        -            'positive?','power','prin','print','probe','protect',
        -            'protect-system','query','random','read','read-io','recycle',
        -            'refinement?','reform','rejoin','remainder','remold','remove',
        -            'rename',
        -            //'repeat',
        -            'repend','replace','request','request-color','request-date',
        -            'request-download','request-file','request-list','request-pass',
        -            'request-text','resend','reverse','routine?','same?','save',
        -            'script?','second','select','send','series?','set','set-modes',
        -            'set-net','set-path?','set-word?','show','show-popup','sign?',
        -            'sine','size-text','size?','skip','sort','source','span?',
        -            'split-path','square-root','strict-equal?','strict-not-equal?',
        -            'string?','struct?','stylize','subtract','suffix?','tag?','tail',
        -            'tail?','tangent','third','time?','to','to-binary','to-bitset',
        -            'to-block','to-char','to-date','to-decimal','to-email','to-file',
        -            'to-get-word','to-hash','to-hex','to-idate','to-image','to-integer',
        -            'to-issue','to-list','to-lit-path','to-lit-word','to-local-file',
        -            'to-logic','to-money','to-pair','to-paren','to-path',
        -            'to-rebol-file','to-refinement','to-set-path','to-set-word',
        -            'to-string','to-tag','to-time','to-tuple','to-url','to-word',
        -            'trace','trim','tuple?','type?','unfocus','union','unique',
        -            'unprotect','unset','unset?','unview','update','upgrade',
        -            'uppercase','url?','usage','use','value?','view','viewed?','what',
        -            'what-dir','within?','word?','write','write-io','xor','zero?',
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -//            2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -//        2 => 'includes/dico_rebol.php?word={FNAME}',
        -//        3 => 'includes/dico_rebol.php?word={FNAME}'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*",
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php
        deleted file mode 100644
        index f2978397..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php
        +++ /dev/null
        @@ -1,231 +0,0 @@
        - 'Microsoft Registry',
        -    'COMMENT_SINGLE' => array(1 =>';'),
        -    'COMMENT_MULTI' => array( ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -//        1 => array(),
        -//        2 => array(),
        -        /* Registry Key Constants Not Used */
        -        3 => array(
        -            'HKEY_LOCAL_MACHINE',
        -            'HKEY_CLASSES_ROOT',
        -            'HKEY_CURRENT_USER',
        -            'HKEY_USERS',
        -            'HKEY_CURRENT_CONFIG',
        -            'HKEY_DYN_DATA',
        -            'HKLM', 'HKCR', 'HKCU', 'HKU', 'HKCC', 'HKDD'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -//        1 => false,
        -//        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -//            1 => 'color: #00CCFF;',
        -//            2 => 'color: #0000FF;',
        -            3 => 'color: #800000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #009900;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #00CCFF;',
        -            1 => 'color: #0000FF;',
        -            2 => '',
        -            3 => 'color: #0000FF;',
        -            4 => 'color: #0000FF;',
        -            5 => '',
        -            6 => '',
        -            7 => '',
        -            8 => 'color: #FF6600;',
        -            )
        -        ),
        -    'URLS' => array(
        -//        1 => '',
        -//        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        // Highlight Key Delimiters
        -        0 => array(
        -            GESHI_SEARCH => '((^|\\n)\\s*)(\\\\\\[(.*)\\\\\\])(\\s*(\\n|$))',
        -            GESHI_REPLACE => '\\3',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\5'
        -//            GESHI_CLASS => 'kw1'
        -            ),
        -        // Highlight File Format Header Version 5
        -        1 => array(
        -            GESHI_SEARCH => '(^\s*)(Windows Registry Editor Version \d+\.\d+)(\s*$)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3',
        -            GESHI_CLASS => 'geshi_registry_header'
        -            ),
        -        // Highlight File Format Header Version 4
        -        2 => array(
        -            GESHI_SEARCH => '(^\\s*)(REGEDIT\s?\d+)(\s*$)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3',
        -            GESHI_CLASS => 'geshi_registry_header'
        -            ),
        -        // Highlight dword: 32 bit integer values
        -        3 => array(
        -            GESHI_SEARCH => '(=\s*)(dword:[0-9a-fA-F]{8})(\s*$)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -//            GESHI_CLASS => 'kw2'
        -            ),
        -        // Highlight variable names
        -        4 => array(
        -            GESHI_SEARCH => '(^\s*)(\".*?\")(\s*=)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3',
        -            GESHI_CLASS => 'geshi_variable'
        -            ),
        -        // Highlight String Values
        -        5 => array(
        -            GESHI_SEARCH => '(=\s*)(\".*?\")(\s*$)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3',
        -            GESHI_CLASS => 'st0'
        -            ),
        -        // Highlight Hexadecimal Values (Single-Line and Multi-Line)
        -        6 => array(
        -            GESHI_SEARCH => '(=\s*\n?\s*)(hex:[0-9a-fA-F]{2}(,(\\\s*\n\s*)?[0-9a-fA-F]{2})*)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '',
        -            GESHI_CLASS => 'kw2'
        -            ),
        -        // Highlight Default Variable
        -        7 => array(
        -            GESHI_SEARCH => '(^\s*)(@)(\s*=)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'm',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3',
        -            GESHI_CLASS => 'geshi_variable'
        -            ),
        -        // Highlight GUID's found anywhere.
        -        8 => array(
        -            GESHI_SEARCH => '(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\})',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            GESHI_CLASS => 'geshi_guid'
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'NUMBERS' => GESHI_NEVER,
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php
        deleted file mode 100644
        index 86f44a22..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php
        +++ /dev/null
        @@ -1,160 +0,0 @@
        - 'rexx',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'address', 'arg', 'attribute', 'call', 'constant', 'do',
        -            'drop', 'exit', 'forward', 'if',
        -            'interpret', 'iterate', 'leave', 'loop', 'nop', 'numeric',
        -            'options', 'parse', 'procedure', 'pull', 'push', 'queue',
        -            'raise', 'return', 'say', 'select', 'signal', 'trace'
        -            ),
        -        2 => array(
        -            'by', 'digits', 'engineering', 'error', 'expose',
        -            'failure', 'for', 'forever', 'form', 'fuzz', 'halt',
        -            'name', 'novalue', 'off', 'on', 'over', 'scientific', 'source',
        -            'syntax', 'to', 'until', 'upper', 'version',
        -            'while', 'with'
        -            ),
        -        3 => array(
        -            'else', 'end', 'otherwise', 'then', 'when'
        -            ),
        -        4 => array(
        -            'rc', 'result', 'sigl'
        -            ),
        -        5 => array(
        -            'placeholderforoorexxdirectives'
        -            ),
        -        6 => array(
        -            'abbrev', 'abs', 'beep', 'bitand', 'bitor',
        -            'bitxor', 'b2x', 'center', 'centre', 'changestr', 'charin',
        -            'charout', 'chars', 'compare', 'condition', 'copies',
        -            'countstr', 'c2d', 'c2x', 'datatype', 'date', 'delstr',
        -            'delword', 'directory', 'd2c', 'd2x', 'endlocal',
        -            'errortext', 'filespec', 'format', 'insert',
        -            'lastpos', 'left', 'length', 'linein', 'lineout', 'lines',
        -            'lower', 'max', 'min', 'overlay', 'pos', 'queued', 'random',
        -            'reverse', 'right', 'rxfuncadd', 'rxfuncdrop', 'rxfuncquery',
        -            'rxqueue', 'setlocal', 'sign', 'sourceline', 'space',
        -            'stream', 'strip', 'substr', 'subword', 'symbol', 'time',
        -            'translate', 'trunc', 'userid', 'value',
        -            'var', 'verify', 'word', 'wordindex', 'wordlength', 'wordpos',
        -            'words', 'xrange', 'x2b', 'x2c', 'x2d'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '<', '>', '=', '+', '-', '*', '**', '/', '|', '%', '^', '&', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #ff0000; font-weight: bold;',
        -            3 => 'color: #00ff00; font-weight: bold;',
        -            4 => 'color: #0000ff; font-weight: bold;',
        -            5 => 'color: #880088; font-weight: bold;',
        -            6 => 'color: #888800; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666;',
        -            'MULTI' => 'color: #808080;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php
        deleted file mode 100644
        index 8b1fb234..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php
        +++ /dev/null
        @@ -1,98 +0,0 @@
        - 'robots.txt',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(1 => "/^Comment:.*?/m"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'Allow', 'Crawl-delay', 'Disallow', 'Request-rate', 'Robot-version',
        -            'Sitemap', 'User-agent', 'Visit-time'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.robotstxt.org/wc/norobots.html'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php
        deleted file mode 100644
        index 3ef70e6e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php
        +++ /dev/null
        @@ -1,131 +0,0 @@
        - 'RPM Specification File',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'QUOTEMARKS' => array('"','`'),
        -    'ESCAPE_CHAR' => '\\',
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        ),
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        '<', '>', '=',
        -        '!', '@', '~', '&', '|', '^',
        -        '+','-', '*', '/', '%',
        -        ',', ';', '?', '.', ':'
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #009999;',
        -            3 => 'color: #000000; font-weight: bold;',
        -            4 => 'color: #ff6600; font-style: italic;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'REGEXPS' => array(
        -        1 => array(
        -            // search for generic macros
        -            GESHI_SEARCH => '(%{?[a-zA-Z0-9_]+}?)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            ),
        -        2 => array(
        -            // search for special macros
        -            GESHI_SEARCH => '(%(?:define|patch\d*|mklibname|mkrel|configure\S+|makeinstall\S+|make_session|make|defattr|config|doc|setup))',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            ),
        -        3 => array (
        -            // special definitions
        -            GESHI_SEARCH => '((?:summary|license|buildroot|buildrequires|provides|version|release|source\d*|group|buildarch|autoreqprov|provides|obsoletes|vendor|distribution|suggests|autoreq|autoprov|conflicts|name|url|requires|patch\d*):)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '',
        -            ),
        -        4 => array (
        -            // section delimiting words
        -            GESHI_SEARCH => '(%(?:description|package|prep|build|install|clean|postun|preun|post|pre|files|changelog))',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            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/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php
        deleted file mode 100644
        index 7b15f517..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php
        +++ /dev/null
        @@ -1,481 +0,0 @@
        - 'R / S+',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', "'"),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'else','global','in', 'otherwise','persistent',
        -            ),
        -        2 => array( // base package
        -            '$.package_version', '$<-', '$<-.data.frame', 'abbreviate', 'abs', 'acos', 'acosh', 'addNA', 'addTaskCallback',
        -            'agrep', 'alist', 'all', 'all.equal', 'all.equal.character', 'all.equal.default', 'all.equal.factor',
        -            'all.equal.formula', 'all.equal.language', 'all.equal.list', 'all.equal.numeric', 'all.equal.POSIXct',
        -            'all.equal.raw', 'all.names', 'all.vars', 'any', 'aperm', 'append', 'apply', 'Arg', 'args', 'array', 'as.array',
        -            'as.array.default', 'as.call', 'as.character', 'as.character.condition', 'as.character.Date', 'as.character.default',
        -            'as.character.error', 'as.character.factor', 'as.character.hexmode', 'as.character.numeric_version', 'as.character.octmode',
        -            'as.character.POSIXt', 'as.character.srcref', 'as.complex', 'as.data.frame', 'as.data.frame.array', 'as.data.frame.AsIs',
        -            'as.data.frame.character', 'as.data.frame.complex', 'as.data.frame.data.frame', 'as.data.frame.Date', 'as.data.frame.default',
        -            'as.data.frame.difftime', 'as.data.frame.factor', 'as.data.frame.integer', 'as.data.frame.list', 'as.data.frame.logical',
        -            'as.data.frame.matrix', 'as.data.frame.model.matrix', 'as.data.frame.numeric', 'as.data.frame.numeric_version',
        -            'as.data.frame.ordered', 'as.data.frame.POSIXct', 'as.data.frame.POSIXlt', 'as.data.frame.raw', 'as.data.frame.table',
        -            'as.data.frame.ts', 'as.data.frame.vector', 'as.Date', 'as.Date.character', 'as.Date.date', 'as.Date.dates',
        -            'as.Date.default', 'as.Date.factor', 'as.Date.numeric', 'as.Date.POSIXct', 'as.Date.POSIXlt', 'as.difftime', 'as.double',
        -            'as.double.difftime', 'as.double.POSIXlt', 'as.environment', 'as.expression', 'as.expression.default', 'as.factor',
        -            'as.function', 'as.function.default', 'as.hexmode', 'as.integer', 'as.list', 'as.list.data.frame', 'as.list.default',
        -            'as.list.environment', 'as.list.factor', 'as.list.function', 'as.list.numeric_version', 'as.logical', 'as.matrix',
        -            'as.matrix.data.frame', 'as.matrix.default', 'as.matrix.noquote', 'as.matrix.POSIXlt', 'as.name', 'as.null', 'as.null.default',
        -            'as.numeric', 'as.numeric_version', 'as.octmode', 'as.ordered', 'as.package_version', 'as.pairlist', 'as.POSIXct',
        -            'as.POSIXct.date', 'as.POSIXct.Date', 'as.POSIXct.dates', 'as.POSIXct.default', 'as.POSIXct.numeric', 'as.POSIXct.POSIXlt',
        -            'as.POSIXlt', 'as.POSIXlt.character', 'as.POSIXlt.date', 'as.POSIXlt.Date', 'as.POSIXlt.dates', 'as.POSIXlt.default',
        -            'as.POSIXlt.factor', 'as.POSIXlt.numeric', 'as.POSIXlt.POSIXct', 'as.qr', 'as.raw', 'as.real', 'as.single',
        -            'as.single.default', 'as.symbol', 'as.table', 'as.table.default', 'as.vector', 'as.vector.factor', 'asin', 'asinh',
        -            'asNamespace', 'asS4', 'assign', 'atan', 'atan2', 'atanh', 'attach', 'attachNamespace', 'attr', 'attr.all.equal',
        -            'attr<-', 'attributes', 'attributes<-', 'autoload', 'autoloader', 'backsolve', 'baseenv', 'basename', 'besselI',
        -            'besselJ', 'besselK', 'besselY', 'beta', 'bindingIsActive', 'bindingIsLocked', 'bindtextdomain', 'body', 'body<-',
        -            'bquote', 'break', 'browser', 'builtins', 'by', 'by.data.frame', 'by.default', 'bzfile', 'c', 'c.Date', 'c.noquote',
        -            'c.numeric_version', 'c.POSIXct', 'c.POSIXlt', 'call', 'callCC', 'capabilities', 'casefold', 'cat', 'category',
        -            'cbind', 'cbind.data.frame', 'ceiling', 'char.expand', 'character', 'charmatch', 'charToRaw', 'chartr', 'check_tzones',
        -            'chol', 'chol.default', 'chol2inv', 'choose', 'class', 'class<-', 'close', 'close.connection', 'close.srcfile',
        -            'closeAllConnections', 'codes', 'codes.factor', 'codes.ordered', 'codes<-', 'col', 'colMeans', 'colnames',
        -            'colnames<-', 'colSums', 'commandArgs', 'comment', 'comment<-', 'complex', 'computeRestarts', 'conditionCall',
        -            'conditionCall.condition', 'conditionMessage', 'conditionMessage.condition', 'conflicts', 'Conj', 'contributors',
        -            'cos', 'cosh', 'crossprod', 'Cstack_info', 'cummax', 'cummin', 'cumprod', 'cumsum', 'cut', 'cut.Date', 'cut.default',
        -            'cut.POSIXt', 'data.class', 'data.frame', 'data.matrix', 'date', 'debug', 'default.stringsAsFactors', 'delay',
        -            'delayedAssign', 'deparse', 'det', 'detach', 'determinant', 'determinant.matrix', 'dget', 'diag', 'diag<-', 'diff',
        -            'diff.Date', 'diff.default', 'diff.POSIXt', 'difftime', 'digamma', 'dim', 'dim.data.frame', 'dim<-', 'dimnames',
        -            'dimnames.data.frame', 'dimnames<-', 'dimnames<-.data.frame', 'dir', 'dir.create', 'dirname', 'do.call', 'double',
        -            'dput', 'dQuote', 'drop', 'dump', 'duplicated', 'duplicated.array', 'duplicated.data.frame', 'duplicated.default',
        -            'duplicated.matrix', 'duplicated.numeric_version', 'duplicated.POSIXlt', 'dyn.load', 'dyn.unload', 'eapply', 'eigen',
        -            'emptyenv', 'encodeString', 'Encoding', 'Encoding<-', 'env.profile', 'environment', 'environment<-', 'environmentIsLocked',
        -            'environmentName', 'eval', 'eval.parent', 'evalq', 'exists', 'exp', 'expand.grid', 'expm1', 'expression', 'F', 'factor',
        -            'factorial', 'fifo', 'file', 'file.access', 'file.append', 'file.choose', 'file.copy', 'file.create', 'file.exists',
        -            'file.info', 'file.path', 'file.remove', 'file.rename', 'file.show', 'file.symlink', 'Filter', 'Find', 'findInterval',
        -            'findPackageEnv', 'findRestart', 'floor', 'flush', 'flush.connection', 'for', 'force', 'formals', 'formals<-',
        -            'format', 'format.AsIs', 'format.char', 'format.data.frame', 'format.Date', 'format.default', 'format.difftime',
        -            'format.factor', 'format.hexmode', 'format.info', 'format.octmode', 'format.POSIXct', 'format.POSIXlt',
        -            'format.pval', 'formatC', 'formatDL', 'forwardsolve', 'function', 'gamma', 'gammaCody', 'gc', 'gc.time',
        -            'gcinfo', 'gctorture', 'get', 'getAllConnections', 'getCallingDLL', 'getCallingDLLe', 'getCConverterDescriptions',
        -            'getCConverterStatus', 'getConnection', 'getDLLRegisteredRoutines', 'getDLLRegisteredRoutines.character',
        -            'getDLLRegisteredRoutines.DLLInfo', 'getenv', 'geterrmessage', 'getExportedValue', 'getHook', 'getLoadedDLLs',
        -            'getNamespace', 'getNamespaceExports', 'getNamespaceImports', 'getNamespaceInfo', 'getNamespaceName',
        -            'getNamespaceUsers', 'getNamespaceVersion', 'getNativeSymbolInfo', 'getNumCConverters', 'getOption', 'getRversion',
        -            'getSrcLines', 'getTaskCallbackNames', 'gettext', 'gettextf', 'getwd', 'gl', 'globalenv', 'gregexpr', 'grep',
        -            'grepl', 'gsub', 'gzcon', 'gzfile', 'httpclient', 'I', 'iconv', 'iconvlist', 'icuSetCollate', 'identical', 'identity',
        -            'if', 'ifelse', 'Im', 'importIntoEnv', 'inherits', 'integer', 'interaction', 'interactive', 'intersect', 'intToBits',
        -            'intToUtf8', 'inverse.rle', 'invisible', 'invokeRestart', 'invokeRestartInteractively', 'is.array', 'is.atomic',
        -            'is.call', 'is.character', 'is.complex', 'is.data.frame', 'is.double', 'is.element', 'is.environment',
        -            'is.expression', 'is.factor', 'is.finite', 'is.function', 'is.infinite', 'is.integer', 'is.language',
        -            'is.list', 'is.loaded', 'is.logical', 'is.matrix', 'is.na', 'is.na.data.frame', 'is.na.POSIXlt', 'is.na<-',
        -            'is.na<-.default', 'is.na<-.factor', 'is.name', 'is.nan', 'is.null', 'is.numeric', 'is.numeric_version',
        -            'is.numeric.Date', 'is.numeric.POSIXt', 'is.object', 'is.ordered', 'is.package_version', 'is.pairlist', 'is.primitive',
        -            'is.qr', 'is.R', 'is.raw', 'is.real', 'is.recursive', 'is.single', 'is.symbol', 'is.table', 'is.unsorted', 'is.vector',
        -            'isBaseNamespace', 'isdebugged', 'isIncomplete', 'isNamespace', 'ISOdate', 'ISOdatetime', 'isOpen', 'isRestart', 'isS4',
        -            'isSeekable', 'isSymmetric', 'isSymmetric.matrix', 'isTRUE', 'jitter', 'julian', 'julian.Date', 'julian.POSIXt', 'kappa',
        -            'kappa.default', 'kappa.lm', 'kappa.qr', 'kappa.tri', 'kronecker', 'l10n_info', 'La.chol', 'La.chol2inv', 'La.eigen',
        -            'La.svd', 'labels', 'labels.default', 'lapply', 'lazyLoad', 'lazyLoadDBfetch', 'lbeta', 'lchoose', 'length', 'length<-',
        -            'length<-.factor', 'letters', 'LETTERS', 'levels', 'levels.default', 'levels<-', 'levels<-.factor', 'lfactorial', 'lgamma',
        -            'library', 'library.dynam', 'library.dynam.unload', 'licence', 'license', 'list', 'list.files', 'load', 'loadedNamespaces',
        -            'loadingNamespaceInfo', 'loadNamespace', 'loadURL', 'local', 'lockBinding', 'lockEnvironment', 'log', 'log10', 'log1p', 'log2',
        -            'logb', 'logical', 'lower.tri', 'ls', 'machine', 'Machine', 'make.names', 'make.unique', 'makeActiveBinding', 'manglePackageName',
        -            'Map', 'mapply', 'margin.table', 'mat.or.vec', 'match', 'match.arg', 'match.call', 'match.fun', 'Math.data.frame', 'Math.Date',
        -            'Math.difftime', 'Math.factor', 'Math.POSIXt', 'matrix', 'max', 'max.col', 'mean', 'mean.data.frame', 'mean.Date', 'mean.default',
        -            'mean.difftime', 'mean.POSIXct', 'mean.POSIXlt', 'mem.limits', 'memory.profile', 'merge', 'merge.data.frame', 'merge.default',
        -            'message', 'mget', 'min', 'missing', 'Mod', 'mode', 'mode<-', 'month.abb', 'month.name', 'months', 'months.Date',
        -            'months.POSIXt', 'mostattributes<-', 'names', 'names<-', 'namespaceExport', 'namespaceImport', 'namespaceImportClasses',
        -            'namespaceImportFrom', 'namespaceImportMethods', 'nargs', 'nchar', 'ncol', 'NCOL', 'Negate', 'new.env', 'next', 'NextMethod',
        -            'ngettext', 'nlevels', 'noquote', 'nrow', 'NROW', 'numeric', 'numeric_version', 'nzchar', 'objects', 'oldClass',
        -            'oldClass<-', 'on.exit', 'open', 'open.connection', 'open.srcfile', 'open.srcfilecopy', 'Ops.data.frame', 'Ops.Date',
        -            'Ops.difftime', 'Ops.factor', 'Ops.numeric_version', 'Ops.ordered', 'Ops.POSIXt', 'options', 'order', 'ordered',
        -            'outer', 'package_version', 'package.description', 'packageEvent', 'packageHasNamespace', 'packageStartupMessage',
        -            'packBits', 'pairlist', 'parent.env', 'parent.env<-', 'parent.frame', 'parse', 'parse.dcf', 'parseNamespaceFile',
        -            'paste', 'path.expand', 'pentagamma', 'pi', 'pipe', 'Platform', 'pmatch', 'pmax', 'pmax.int', 'pmin', 'pmin.int',
        -            'polyroot', 'pos.to.env', 'Position', 'pretty', 'prettyNum', 'print', 'print.AsIs', 'print.atomic', 'print.by',
        -            'print.condition', 'print.connection', 'print.data.frame', 'print.Date', 'print.default', 'print.difftime',
        -            'print.DLLInfo', 'print.DLLInfoList', 'print.DLLRegisteredRoutines', 'print.factor', 'print.hexmode', 'print.libraryIQR',
        -            'print.listof', 'print.NativeRoutineList', 'print.noquote', 'print.numeric_version', 'print.octmode', 'print.packageInfo',
        -            'print.POSIXct', 'print.POSIXlt', 'print.proc_time', 'print.restart', 'print.rle', 'print.simple.list',
        -            'print.srcfile', 'print.srcref', 'print.summary.table', 'print.table', 'print.warnings', 'printNoClass',
        -            'prmatrix', 'proc.time', 'prod', 'prop.table', 'provide', 'psigamma', 'pushBack', 'pushBackLength', 'q', 'qr',
        -            'qr.coef', 'qr.default', 'qr.fitted', 'qr.Q', 'qr.qty', 'qr.qy', 'qr.R', 'qr.resid', 'qr.solve', 'qr.X', 'quarters',
        -            'quarters.Date', 'quarters.POSIXt', 'quit', 'quote', 'R_system_version', 'R.home', 'R.version', 'R.Version',
        -            'R.version.string', 'range', 'range.default', 'rank', 'rapply', 'raw', 'rawConnection', 'rawConnectionValue',
        -            'rawShift', 'rawToBits', 'rawToChar', 'rbind', 'rbind.data.frame', 'rcond', 'Re', 'read.dcf', 'read.table.url',
        -            'readBin', 'readChar', 'readline', 'readLines', 'real', 'Recall', 'Reduce', 'reg.finalizer', 'regexpr',
        -            'registerS3method', 'registerS3methods', 'remove', 'removeCConverter', 'removeTaskCallback', 'rep', 'rep.Date',
        -            'rep.factor', 'rep.int', 'rep.numeric_version', 'rep.POSIXct', 'rep.POSIXlt', 'repeat', 'replace', 'replicate',
        -            'require', 'restart', 'restartDescription', 'restartFormals', 'retracemem', 'return', 'rev', 'rev.default', 'rle',
        -            'rm', 'RNGkind', 'RNGversion', 'round', 'round.Date', 'round.difftime', 'round.POSIXt', 'row', 'row.names',
        -            'row.names.data.frame', 'row.names.default', 'row.names<-', 'row.names<-.data.frame', 'row.names<-.default',
        -            'rowMeans', 'rownames', 'rownames<-', 'rowsum', 'rowsum.data.frame', 'rowsum.default', 'rowSums', 'sample',
        -            'sample.int', 'sapply', 'save', 'save.image', 'saveNamespaceImage', 'scale', 'scale.default', 'scan', 'scan.url',
        -            'search', 'searchpaths', 'seek', 'seek.connection', 'seq', 'seq_along', 'seq_len', 'seq.Date', 'seq.default',
        -            'seq.int', 'seq.POSIXt', 'sequence', 'serialize', 'set.seed', 'setCConverterStatus', 'setdiff', 'setequal',
        -            'setHook', 'setNamespaceInfo', 'setSessionTimeLimit', 'setTimeLimit', 'setwd', 'showConnections', 'shQuote',
        -            'sign', 'signalCondition', 'signif', 'simpleCondition', 'simpleError', 'simpleMessage', 'simpleWarning', 'sin',
        -            'single', 'sinh', 'sink', 'sink.number', 'slice.index', 'socketConnection', 'socketSelect', 'solve', 'solve.default',
        -            'solve.qr', 'sort', 'sort.default', 'sort.int', 'sort.list', 'sort.POSIXlt', 'source', 'source.url', 'split',
        -            'split.data.frame', 'split.Date', 'split.default', 'split.POSIXct', 'split<-', 'split<-.data.frame', 'split<-.default',
        -            'sprintf', 'sqrt', 'sQuote', 'srcfile', 'srcfilecopy', 'srcref', 'standardGeneric', 'stderr', 'stdin', 'stdout',
        -            'stop', 'stopifnot', 'storage.mode', 'storage.mode<-', 'strftime', 'strptime', 'strsplit', 'strtrim', 'structure',
        -            'strwrap', 'sub', 'subset', 'subset.data.frame', 'subset.default', 'subset.matrix', 'substitute', 'substr',
        -            'substr<-', 'substring', 'substring<-', 'sum', 'summary', 'summary.connection', 'summary.data.frame',
        -            'Summary.data.frame', 'summary.Date', 'Summary.Date', 'summary.default', 'Summary.difftime',
        -            'summary.factor', 'Summary.factor', 'summary.matrix', 'Summary.numeric_version', 'summary.POSIXct',
        -            'Summary.POSIXct', 'summary.POSIXlt', 'Summary.POSIXlt', 'summary.table', 'suppressMessages',
        -            'suppressPackageStartupMessages', 'suppressWarnings', 'svd', 'sweep', 'switch', 'symbol.C',
        -            'symbol.For', 'sys.call', 'sys.calls', 'Sys.chmod', 'Sys.Date', 'sys.frame', 'sys.frames',
        -            'sys.function', 'Sys.getenv', 'Sys.getlocale', 'Sys.getpid', 'Sys.glob', 'Sys.info', 'sys.load.image',
        -            'Sys.localeconv', 'sys.nframe', 'sys.on.exit', 'sys.parent', 'sys.parents', 'Sys.putenv',
        -            'sys.save.image', 'Sys.setenv', 'Sys.setlocale', 'Sys.sleep', 'sys.source', 'sys.status',
        -            'Sys.time', 'Sys.timezone', 'Sys.umask', 'Sys.unsetenv', 'Sys.which', 'system', 'system.file',
        -            'system.time', 't', 'T', 't.data.frame', 't.default', 'table', 'tabulate', 'tan', 'tanh', 'tapply',
        -            'taskCallbackManager', 'tcrossprod', 'tempdir', 'tempfile', 'testPlatformEquivalence', 'tetragamma',
        -            'textConnection', 'textConnectionValue', 'tolower', 'topenv', 'toString', 'toString.default', 'toupper',
        -            'trace', 'traceback', 'tracemem', 'tracingState', 'transform', 'transform.data.frame', 'transform.default',
        -            'trigamma', 'trunc', 'trunc.Date', 'trunc.POSIXt', 'truncate', 'truncate.connection', 'try', 'tryCatch',
        -            'typeof', 'unclass', 'undebug', 'union', 'unique', 'unique.array', 'unique.data.frame', 'unique.default',
        -            'unique.matrix', 'unique.numeric_version', 'unique.POSIXlt', 'units', 'units.difftime', 'units<-',
        -            'units<-.difftime', 'unix', 'unix.time', 'unlink', 'unlist', 'unloadNamespace', 'unlockBinding',
        -            'unname', 'unserialize', 'unsplit', 'untrace', 'untracemem', 'unz', 'upper.tri', 'url', 'UseMethod',
        -            'utf8ToInt', 'vector', 'Vectorize', 'version', 'Version', 'warning', 'warnings', 'weekdays',
        -            'weekdays.Date', 'weekdays.POSIXt', 'which', 'which.max', 'which.min', 'while', 'with',
        -            'with.default', 'withCallingHandlers', 'within', 'within.data.frame', 'within.list', 'withRestarts',
        -            'withVisible', 'write', 'write.dcf', 'write.table0', 'writeBin', 'writeChar', 'writeLines', 'xor',
        -            'xpdrows.data.frame', 'xtfrm', 'xtfrm.Date', 'xtfrm.default', 'xtfrm.factor', 'xtfrm.numeric_version',
        -            'xtfrm.POSIXct', 'xtfrm.POSIXlt', 'xtfrm.Surv', 'zapsmall',
        -            ),
        -        3 => array( // Datasets
        -            'ability.cov', 'airmiles', 'AirPassengers', 'airquality',
        -            'anscombe', 'attenu', 'attitude', 'austres', 'beaver1',
        -            'beaver2', 'BJsales', 'BJsales.lead', 'BOD', 'cars',
        -            'ChickWeight', 'chickwts', 'co2', 'crimtab',
        -            'discoveries', 'DNase', 'esoph', 'euro', 'euro.cross',
        -            'eurodist', 'EuStockMarkets', 'faithful', 'fdeaths',
        -            'Formaldehyde', 'freeny', 'freeny.x', 'freeny.y',
        -            'HairEyeColor', 'Harman23.cor', 'Harman74.cor', 'Indometh',
        -            'infert', 'InsectSprays', 'iris', 'iris3', 'islands',
        -            'JohnsonJohnson', 'LakeHuron', 'ldeaths', 'lh', 'LifeCycleSavings',
        -            'Loblolly', 'longley', 'lynx', 'mdeaths', 'morley', 'mtcars',
        -            'nhtemp', 'Nile', 'nottem', 'occupationalStatus', 'Orange',
        -            'OrchardSprays', 'PlantGrowth', 'precip', 'presidents',
        -            'pressure', 'Puromycin', 'quakes', 'randu', 'rivers', 'rock',
        -            'Seatbelts', 'sleep', 'stack.loss', 'stack.x', 'stackloss',
        -            'state.abb', 'state.area', 'state.center', 'state.division',
        -            'state.name', 'state.region', 'state.x77', 'sunspot.month',
        -            'sunspot.year', 'sunspots', 'swiss', 'Theoph', 'Titanic', 'ToothGrowth',
        -            'treering', 'trees', 'UCBAdmissions', 'UKDriverDeaths', 'UKgas',
        -            'USAccDeaths', 'USArrests', 'USJudgeRatings', 'USPersonalExpenditure',
        -            'uspop', 'VADeaths', 'volcano', 'warpbreaks', 'women', 'WorldPhones',
        -            'WWWusage',
        -            ),
        -        4 => array( // graphics package
        -            'abline', 'arrows', 'assocplot', 'axis', 'Axis', 'axis.Date', 'axis.POSIXct',
        -            'axTicks', 'barplot', 'barplot.default', 'box', 'boxplot', 'boxplot.default',
        -            'boxplot.matrix', 'bxp', 'cdplot', 'clip', 'close.screen', 'co.intervals',
        -            'contour', 'contour.default', 'coplot', 'curve', 'dotchart', 'erase.screen',
        -            'filled.contour', 'fourfoldplot', 'frame', 'grconvertX', 'grconvertY', 'grid',
        -            'hist', 'hist.default', 'identify', 'image', 'image.default', 'layout',
        -            'layout.show', 'lcm', 'legend', 'lines', 'lines.default', 'locator', 'matlines',
        -            'matplot', 'matpoints', 'mosaicplot', 'mtext', 'pairs', 'pairs.default',
        -            'panel.smooth', 'par', 'persp', 'pie', 'piechart', 'plot', 'plot.default',
        -            'plot.design', 'plot.new', 'plot.window', 'plot.xy', 'points', 'points.default',
        -            'polygon', 'rect', 'rug', 'screen', 'segments', 'smoothScatter', 'spineplot',
        -            'split.screen', 'stars', 'stem', 'strheight', 'stripchart', 'strwidth', 'sunflowerplot',
        -            'symbols', 'text', 'text.default', 'title', 'xinch', 'xspline', 'xyinch', 'yinch',
        -            ),
        -        5 => array( // grDevices pkg
        -            'as.graphicsAnnot', 'bitmap', 'blues9', 'bmp', 'boxplot.stats', 'cairo_pdf', 'cairo_ps', 'check.options',
        -            'chull', 'CIDFont', 'cm', 'cm.colors', 'col2rgb', 'colorConverter', 'colorRamp', 'colorRampPalette',
        -            'colors', 'colorspaces', 'colours', 'contourLines', 'convertColor', 'densCols', 'dev.control', 'dev.copy',
        -            'dev.copy2eps', 'dev.copy2pdf', 'dev.cur', 'dev.interactive', 'dev.list', 'dev.new', 'dev.next', 'dev.off',
        -            'dev.prev', 'dev.print', 'dev.set', 'dev.size', 'dev2bitmap', 'devAskNewPage', 'deviceIsInteractive',
        -            'embedFonts', 'extendrange', 'getGraphicsEvent', 'graphics.off', 'gray', 'gray.colors', 'grey', 'grey.colors',
        -            'hcl', 'heat.colors', 'Hershey', 'hsv', 'jpeg', 'make.rgb', 'n2mfrow', 'nclass.FD', 'nclass.scott',
        -            'nclass.Sturges', 'palette', 'pdf', 'pdf.options', 'pdfFonts', 'pictex', 'png', 'postscript', 'postscriptFont',
        -            'postscriptFonts', 'ps.options', 'quartz', 'quartz.options', 'quartzFont', 'quartzFonts', 'rainbow',
        -            'recordGraphics', 'recordPlot', 'replayPlot', 'rgb', 'rgb2hsv', 'savePlot', 'setEPS', 'setPS', 'svg',
        -            'terrain.colors', 'tiff', 'topo.colors', 'trans3d', 'Type1Font', 'x11', 'X11', 'X11.options', 'X11Font',
        -            'X11Fonts', 'xfig', 'xy.coords', 'xyTable', 'xyz.coords',
        -            ),
        -        6 => array( // methods package
        -            'addNextMethod', 'allGenerics', 'allNames', 'Arith', 'as', 'as<-',
        -            'asMethodDefinition', 'assignClassDef', 'assignMethodsMetaData', 'balanceMethodsList',
        -            'cacheGenericsMetaData', 'cacheMetaData', 'cacheMethod', 'callGeneric',
        -            'callNextMethod', 'canCoerce', 'cbind2', 'checkSlotAssignment', 'classesToAM',
        -            'classMetaName', 'coerce', 'coerce<-', 'Compare', 'completeClassDefinition',
        -            'completeExtends', 'completeSubclasses', 'Complex', 'conformMethod', 'defaultDumpName',
        -            'defaultPrototype', 'doPrimitiveMethod', 'dumpMethod', 'dumpMethods', 'el', 'el<-',
        -            'elNamed', 'elNamed<-', 'empty.dump', 'emptyMethodsList', 'existsFunction', 'existsMethod',
        -            'extends', 'finalDefaultMethod', 'findClass', 'findFunction', 'findMethod', 'findMethods',
        -            'findMethodSignatures', 'findUnique', 'fixPre1.8', 'formalArgs', 'functionBody',
        -            'functionBody<-', 'generic.skeleton', 'getAccess', 'getAllMethods', 'getAllSuperClasses',
        -            'getClass', 'getClassDef', 'getClasses', 'getClassName', 'getClassPackage', 'getDataPart',
        -            'getExtends', 'getFunction', 'getGeneric', 'getGenerics', 'getGroup', 'getGroupMembers',
        -            'getMethod', 'getMethods', 'getMethodsForDispatch', 'getMethodsMetaData', 'getPackageName',
        -            'getProperties', 'getPrototype', 'getSlots', 'getSubclasses', 'getValidity', 'getVirtual',
        -            'hasArg', 'hasMethod', 'hasMethods', 'implicitGeneric', 'initialize', 'insertMethod', 'is',
        -            'isClass', 'isClassDef', 'isClassUnion', 'isGeneric', 'isGrammarSymbol', 'isGroup',
        -            'isSealedClass', 'isSealedMethod', 'isVirtualClass', 'isXS3Class', 'languageEl', 'languageEl<-',
        -            'linearizeMlist', 'listFromMethods', 'listFromMlist', 'loadMethod', 'Logic',
        -            'makeClassRepresentation', 'makeExtends', 'makeGeneric', 'makeMethodsList',
        -            'makePrototypeFromClassDef', 'makeStandardGeneric', 'matchSignature', 'Math', 'Math2', 'mergeMethods',
        -            'metaNameUndo', 'method.skeleton', 'MethodAddCoerce', 'methodSignatureMatrix', 'MethodsList',
        -            'MethodsListSelect', 'methodsPackageMetaName', 'missingArg', 'mlistMetaName', 'new', 'newBasic',
        -            'newClassRepresentation', 'newEmptyObject', 'Ops', 'packageSlot', 'packageSlot<-', 'possibleExtends',
        -            'prohibitGeneric', 'promptClass', 'promptMethods', 'prototype', 'Quote', 'rbind2',
        -            'reconcilePropertiesAndPrototype', 'registerImplicitGenerics', 'rematchDefinition',
        -            'removeClass', 'removeGeneric', 'removeMethod', 'removeMethods', 'removeMethodsObject', 'representation',
        -            'requireMethods', 'resetClass', 'resetGeneric', 'S3Class', 'S3Class<-', 'S3Part', 'S3Part<-', 'sealClass',
        -            'seemsS4Object', 'selectMethod', 'selectSuperClasses', 'sessionData', 'setAs', 'setClass', 'setClassUnion',
        -            'setDataPart', 'setGeneric', 'setGenericImplicit', 'setGroupGeneric', 'setIs', 'setMethod', 'setOldClass',
        -            'setPackageName', 'setPrimitiveMethods', 'setReplaceMethod', 'setValidity', 'show', 'showClass', 'showDefault',
        -            'showExtends', 'showMethods', 'showMlist', 'signature', 'SignatureMethod', 'sigToEnv', 'slot', 'slot<-',
        -            'slotNames', 'slotsFromS3', 'substituteDirect', 'substituteFunctionArgs', 'Summary', 'superClassDepth',
        -            'testInheritedMethods', 'testVirtual', 'traceOff', 'traceOn', 'tryNew', 'trySilent', 'unRematchDefinition',
        -            'validObject', 'validSlotNames',
        -            ),
        -        7 => array( // stats pkg
        -            'acf', 'acf2AR', 'add.scope', 'add1', 'addmargins', 'aggregate',
        -            'aggregate.data.frame', 'aggregate.default', 'aggregate.ts', 'AIC',
        -            'alias', 'anova', 'anova.glm', 'anova.glmlist', 'anova.lm', 'anova.lmlist',
        -            'anova.mlm', 'anovalist.lm', 'ansari.test', 'aov', 'approx', 'approxfun',
        -            'ar', 'ar.burg', 'ar.mle', 'ar.ols', 'ar.yw', 'arima', 'arima.sim',
        -            'arima0', 'arima0.diag', 'ARMAacf', 'ARMAtoMA', 'as.dendrogram', 'as.dist',
        -            'as.formula', 'as.hclust', 'as.stepfun', 'as.ts', 'asOneSidedFormula', 'ave',
        -            'bandwidth.kernel', 'bartlett.test', 'binom.test', 'binomial', 'biplot',
        -            'Box.test', 'bw.bcv', 'bw.nrd', 'bw.nrd0', 'bw.SJ', 'bw.ucv', 'C', 'cancor',
        -            'case.names', 'ccf', 'chisq.test', 'clearNames', 'cmdscale', 'coef', 'coefficients',
        -            'complete.cases', 'confint', 'confint.default', 'constrOptim', 'contr.helmert',
        -            'contr.poly', 'contr.SAS', 'contr.sum', 'contr.treatment', 'contrasts', 'contrasts<-',
        -            'convolve', 'cooks.distance', 'cophenetic', 'cor', 'cor.test', 'cov', 'cov.wt',
        -            'cov2cor', 'covratio', 'cpgram', 'cutree', 'cycle', 'D', 'dbeta', 'dbinom', 'dcauchy',
        -            'dchisq', 'decompose', 'delete.response', 'deltat', 'dendrapply', 'density', 'density.default',
        -            'deriv', 'deriv.default', 'deriv.formula', 'deriv3', 'deriv3.default', 'deriv3.formula',
        -            'deviance', 'dexp', 'df', 'df.kernel', 'df.residual', 'dfbeta', 'dfbetas', 'dffits',
        -            'dgamma', 'dgeom', 'dhyper', 'diff.ts', 'diffinv', 'dist', 'dlnorm', 'dlogis',
        -            'dmultinom', 'dnbinom', 'dnorm', 'dpois', 'drop.scope', 'drop.terms', 'drop1',
        -            'dsignrank', 'dt', 'dummy.coef', 'dunif', 'dweibull', 'dwilcox', 'ecdf', 'eff.aovlist',
        -            'effects', 'embed', 'end', 'estVar', 'expand.model.frame', 'extractAIC', 'factanal',
        -            'factor.scope', 'family', 'fft', 'filter', 'fisher.test', 'fitted', 'fitted.values',
        -            'fivenum', 'fligner.test', 'formula', 'frequency', 'friedman.test', 'ftable', 'Gamma',
        -            'gaussian', 'get_all_vars', 'getInitial', 'glm', 'glm.control', 'glm.fit', 'glm.fit.null',
        -            'hasTsp', 'hat', 'hatvalues', 'hatvalues.lm', 'hclust', 'heatmap', 'HoltWinters', 'influence',
        -            'influence.measures', 'integrate', 'interaction.plot', 'inverse.gaussian', 'IQR',
        -            'is.empty.model', 'is.leaf', 'is.mts', 'is.stepfun', 'is.ts', 'is.tskernel', 'isoreg',
        -            'KalmanForecast', 'KalmanLike', 'KalmanRun', 'KalmanSmooth', 'kernapply', 'kernel', 'kmeans',
        -            'knots', 'kruskal.test', 'ks.test', 'ksmooth', 'lag', 'lag.plot', 'line', 'lines.ts', 'lm',
        -            'lm.fit', 'lm.fit.null', 'lm.influence', 'lm.wfit', 'lm.wfit.null', 'loadings', 'loess',
        -            'loess.control', 'loess.smooth', 'logLik', 'loglin', 'lowess', 'ls.diag', 'ls.print', 'lsfit',
        -            'mad', 'mahalanobis', 'make.link', 'makeARIMA', 'makepredictcall', 'manova', 'mantelhaen.test',
        -            'mauchley.test', 'mauchly.test', 'mcnemar.test', 'median', 'median.default', 'medpolish',
        -            'model.extract', 'model.frame', 'model.frame.aovlist', 'model.frame.default', 'model.frame.glm',
        -            'model.frame.lm', 'model.matrix', 'model.matrix.default', 'model.matrix.lm', 'model.offset',
        -            'model.response', 'model.tables', 'model.weights', 'monthplot', 'mood.test', 'mvfft', 'na.action',
        -            'na.contiguous', 'na.exclude', 'na.fail', 'na.omit', 'na.pass', 'napredict', 'naprint', 'naresid',
        -            'nextn', 'nlm', 'nlminb', 'nls', 'nls.control', 'NLSstAsymptotic', 'NLSstClosestX', 'NLSstLfAsymptote',
        -            'NLSstRtAsymptote', 'numericDeriv', 'offset', 'oneway.test', 'optim', 'optimise', 'optimize',
        -            'order.dendrogram', 'p.adjust', 'p.adjust.methods', 'pacf', 'pairwise.prop.test', 'pairwise.t.test',
        -            'pairwise.table', 'pairwise.wilcox.test', 'pbeta', 'pbinom', 'pbirthday', 'pcauchy', 'pchisq', 'pexp',
        -            'pf', 'pgamma', 'pgeom', 'phyper', 'plclust', 'plnorm', 'plogis', 'plot.density', 'plot.ecdf', 'plot.lm',
        -            'plot.mlm', 'plot.spec', 'plot.spec.coherency', 'plot.spec.phase', 'plot.stepfun', 'plot.ts', 'plot.TukeyHSD',
        -            'pnbinom', 'pnorm', 'poisson', 'poisson.test', 'poly', 'polym', 'power', 'power.anova.test', 'power.prop.test',
        -            'power.t.test', 'PP.test', 'ppoints', 'ppois', 'ppr', 'prcomp', 'predict', 'predict.glm', 'predict.lm',
        -            'predict.mlm', 'predict.poly', 'preplot', 'princomp', 'print.anova', 'print.coefmat', 'print.density',
        -            'print.family', 'print.formula', 'print.ftable', 'print.glm', 'print.infl', 'print.integrate', 'print.lm',
        -            'print.logLik', 'print.terms', 'print.ts', 'printCoefmat', 'profile', 'proj', 'promax', 'prop.test',
        -            'prop.trend.test', 'psignrank', 'pt', 'ptukey', 'punif', 'pweibull', 'pwilcox', 'qbeta', 'qbinom',
        -            'qbirthday', 'qcauchy', 'qchisq', 'qexp', 'qf', 'qgamma', 'qgeom', 'qhyper', 'qlnorm', 'qlogis',
        -            'qnbinom', 'qnorm', 'qpois', 'qqline', 'qqnorm', 'qqnorm.default', 'qqplot', 'qsignrank', 'qt',
        -            'qtukey', 'quade.test', 'quantile', 'quantile.default', 'quasi', 'quasibinomial', 'quasipoisson',
        -            'qunif', 'qweibull', 'qwilcox', 'r2dtable', 'rbeta', 'rbinom', 'rcauchy', 'rchisq', 'read.ftable',
        -            'rect.hclust', 'reformulate', 'relevel', 'reorder', 'replications', 'reshape', 'reshapeLong', 'reshapeWide',
        -            'resid', 'residuals', 'residuals.default', 'residuals.glm', 'residuals.lm', 'rexp', 'rf', 'rgamma', 'rgeom',
        -            'rhyper', 'rlnorm', 'rlogis', 'rmultinom', 'rnbinom', 'rnorm', 'rpois', 'rsignrank', 'rstandard', 'rstandard.glm',
        -            'rstandard.lm', 'rstudent', 'rstudent.glm', 'rstudent.lm', 'rt', 'runif', 'runmed', 'rweibull', 'rwilcox',
        -            'scatter.smooth', 'screeplot', 'sd', 'se.contrast', 'selfStart', 'setNames', 'shapiro.test', 'simulate',
        -            'smooth', 'smooth.spline', 'smoothEnds', 'sortedXyData', 'spec.ar', 'spec.pgram', 'spec.taper', 'spectrum',
        -            'spline', 'splinefun', 'splinefunH', 'SSasymp', 'SSasympOff', 'SSasympOrig', 'SSbiexp', 'SSD', 'SSfol',
        -            'SSfpl', 'SSgompertz', 'SSlogis', 'SSmicmen', 'SSweibull', 'start', 'stat.anova', 'step', 'stepfun', 'stl',
        -            'StructTS', 'summary.aov', 'summary.aovlist', 'summary.glm', 'summary.infl', 'summary.lm', 'summary.manova',
        -            'summary.mlm', 'summary.stepfun', 'supsmu', 'symnum', 't.test', 'termplot', 'terms', 'terms.aovlist',
        -            'terms.default', 'terms.formula', 'terms.terms', 'time', 'toeplitz', 'ts', 'ts.intersect', 'ts.plot',
        -            'ts.union', 'tsdiag', 'tsp', 'tsp<-', 'tsSmooth', 'TukeyHSD', 'TukeyHSD.aov', 'uniroot', 'update',
        -            'update.default', 'update.formula', 'var', 'var.test', 'variable.names', 'varimax', 'vcov', 'weighted.mean',
        -            'weighted.residuals', 'weights', 'wilcox.test', 'window', 'window<-', 'write.ftable', 'xtabs',
        -            ),
        -        8 => array( // utils pkg
        -            'alarm', 'apropos', 'argsAnywhere', 'as.person', 'as.personList', 'as.relistable', 'as.roman',
        -            'assignInNamespace', 'available.packages', 'browseEnv', 'browseURL', 'browseVignettes', 'bug.report',
        -            'capture.output', 'checkCRAN', 'chooseCRANmirror', 'citation', 'citEntry', 'citFooter', 'citHeader',
        -            'close.socket', 'combn', 'compareVersion', 'contrib.url', 'count.fields', 'CRAN.packages', 'data',
        -            'data.entry', 'dataentry', 'de', 'de.ncols', 'de.restore', 'de.setup', 'debugger', 'demo', 'download.file',
        -            'download.packages', 'dump.frames', 'edit', 'emacs', 'example', 'file_test', 'file.edit', 'find', 'fix',
        -            'fixInNamespace', 'flush.console', 'formatOL', 'formatUL', 'getAnywhere', 'getCRANmirrors', 'getFromNamespace',
        -            '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',
        -            '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',
        -            'read.delim2', 'read.DIF', 'read.fortran', 'read.fwf', 'read.socket', 'read.table', 'readCitationFile', 'recover',
        -            'relist', 'remove.packages', 'Rprof', 'Rprofmem', 'RShowDoc', 'RSiteSearch', 'rtags', 'Rtangle', 'RtangleSetup',
        -            'RtangleWritedoc', 'RweaveChunkPrefix', 'RweaveEvalWithOpt', 'RweaveLatex', 'RweaveLatexFinish', 'RweaveLatexOptions',
        -            'RweaveLatexSetup', 'RweaveLatexWritedoc', 'RweaveTryStop', 'savehistory', 'select.list', 'sessionInfo',
        -            'setRepositories', 'setTxtProgressBar', 'stack', 'Stangle', 'str', 'strOptions', 'summaryRprof', 'Sweave',
        -            'SweaveHooks', 'SweaveSyntaxLatex', 'SweaveSyntaxNoweb', 'SweaveSyntConv', 'tail', 'tail.matrix', 'timestamp',
        -            'toBibtex', 'toLatex', 'txtProgressBar', 'type.convert', 'unstack', 'unzip', 'update.packages', 'update.packageStatus',
        -            'upgrade', 'url.show', 'URLdecode', 'URLencode', 'vi', 'View', 'vignette', 'write.csv', 'write.csv2', 'write.socket',
        -            'write.table', 'wsbrowser', 'xedit', 'xemacs', 'zip.file.extract',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|','<-','->',
        -        '^', '-', ':', '::', ':::', '!', '!=', '*', '?',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF; font-weight: bold;',
        -            2 => 'color: #0000FF; font-weight: bold;',
        -            3 => 'color: #CC9900; font-weight: bold;',
        -            4 => 'color: #0000FF; font-weight: bold;',
        -            5 => 'color: #0000FF; font-weight: bold;',
        -            6 => 'color: #0000FF; font-weight: bold;',
        -            7 => 'color: #0000FF; font-weight: bold;',
        -            8 => 'color: #0000FF; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #228B22;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #080;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => '',
        -            2 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #080;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color:#A020F0;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => 'http://stat.ethz.ch/R-manual/R-devel/library/base/html/{FNAME}.html', // Base Package
        -        3 => 'http://stat.ethz.ch/R-manual/R-devel/library/datasets/html/{FNAME}.html', // Datasets
        -        4 => 'http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/{FNAME}.html', // Graphics Package
        -        5 => 'http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/{FNAME}.html', // grDevices
        -        6 => 'http://stat.ethz.ch/R-manual/R-devel/library/methods/html/{FNAME}.html', // methods
        -        7 => 'http://stat.ethz.ch/R-manual/R-devel/library/stats/html/{FNAME}.html', // stats
        -        8 => 'http://stat.ethz.ch/R-manual/R-devel/library/utils/html/{FNAME}.html' // utils
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(
        -            GESHI_SEARCH => "([^\w])'([^\\n\\r']*)'",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => "\\1'",
        -            GESHI_AFTER => "'"
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?|^&\\.])(? "(?![a-zA-Z0-9_\|%\\-&;\\.])"
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php
        deleted file mode 100644
        index 8c96a239..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php
        +++ /dev/null
        @@ -1,229 +0,0 @@
        - 'Ruby',
        -    'COMMENT_SINGLE' => array(1 => "#"),
        -    'COMMENT_MULTI' => array("=begin" => "=end"),
        -    'COMMENT_REGEXP' => array(
        -        //Heredoc
        -        4 => '/<<\s*?(\w+)\\n.*?\\n\\1(?![a-zA-Z0-9])/si',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '`','\''),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -                'alias', 'and', 'begin', 'break', 'case', 'class',
        -                'def', 'defined', 'do', 'else', 'elsif', 'end',
        -                'ensure', 'for', 'if', 'in', 'module', 'while',
        -                'next', 'not', 'or', 'redo', 'rescue', 'yield',
        -                'retry', 'super', 'then', 'undef', 'unless',
        -                'until', 'when', 'include'
        -            ),
        -        2 => array(
        -                '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true',
        -                'return'
        -            ),
        -        3 => array(
        -                'Array', 'Float', 'Integer', 'String', 'at_exit',
        -                'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!',
        -                'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail',
        -                'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!',
        -                'iterator?', 'lambda', 'load', 'local_variables', 'loop',
        -                'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts',
        -                'raise', 'rand', 'readline', 'readlines', 'require', 'select',
        -                'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall',
        -                'system', 'trace_var', 'trap', 'untrace_var'
        -            ),
        -        4 => array(
        -                'Abbrev', 'ArgumentError', 'Base64', 'Benchmark',
        -                'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie',
        -                'CGI::HtmlExtension', 'CGI::QueryExtension',
        -                'CGI::Session', 'CGI::Session::FileStore',
        -                'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex',
        -                'ConditionVariable', 'Continuation', 'Data',
        -                'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB',
        -                'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno',
        -                'Exception', 'FalseClass', 'File',
        -                'File::Constants', 'File::Stat', 'FileTest', 'FileUtils',
        -                'FileUtils::DryRun', 'FileUtils::NoWrite',
        -                'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find',
        -                'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator',
        -                'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary',
        -                'Iconv::Failure', 'Iconv::IllegalSequence',
        -                'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding',
        -                'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel',
        -                'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application',
        -                'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice',
        -                'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity',
        -                'Logger::ShiftingError', 'Marshal', 'MatchData',
        -                'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError',
        -                'NameError::message', 'NilClass', 'NoMemoryError',
        -                'NoMethodError', 'NotImplementedError', 'Numeric', 'Object',
        -                'ObjectSpace', 'Observable', 'PStore', 'PStore::Error',
        -                'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID',
        -                'Process::Status', 'Process::Sys', 'Process::UID', 'Queue',
        -                'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError',
        -                'RuntimeError', 'ScriptError', 'SecurityError', 'Set',
        -                'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator',
        -                'SingleForwardable', 'Singleton', 'SingletonClassMethods',
        -                'SizedQueue', 'SortedSet', 'StandardError', 'StringIO',
        -                'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol',
        -                'SyncEnumerator', 'SyntaxError', 'SystemCallError',
        -                'SystemExit', 'SystemStackError', 'Tempfile',
        -                'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread',
        -                'ThreadError', 'ThreadGroup',
        -                'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI',
        -                'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP',
        -                'URI::Generic', 'URI::HTTP', 'URI::HTTPS',
        -                'URI::InvalidComponentError', 'URI::InvalidURIError',
        -                'URI::LDAP', 'URI::MailTo', 'URI::REGEXP',
        -                'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML',
        -                'ZeroDivisionError', 'Zlib',
        -                'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate',
        -                'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError',
        -                'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError',
        -                'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader',
        -                'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError',
        -                'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError',
        -                'Zlib::VersionError',
        -                'Zlib::ZStream',
        -                'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector',
        -                'Inflector::Inflections', 'Mime', 'Mime::Type',
        -                'OCI8AutoRecover', 'TimeZone', 'XmlSimple'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
        -        '+', '-', '=>', '<<'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color:#9966CC; font-weight:bold;',
        -            2 => 'color:#0000FF; font-weight:bold;',
        -            3 => 'color:#CC0066; font-weight:bold;',
        -            4 => 'color:#CC00FF; font-weight:bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color:#008000; font-style:italic;',
        -            4 => 'color: #cc0000; font-style: italic;',
        -            'MULTI' => 'color:#000080; font-style:italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color:#000099;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color:#006600; font-weight:bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color:#996600;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color:#006666;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color:#9900CC;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color:#006600; font-weight:bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color:#ff6633; font-weight:bold;',
        -            1 => 'color:#0066ff; font-weight:bold;',
        -            2 => 'color:#6666ff; font-weight:bold;',
        -            3 => 'color:#ff3333; font-weight:bold;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(//Variables
        -            GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        1 => array(//Arrays
        -            GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*",//Static OOP symbols
        -        3 => array(
        -            GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            '<%' => '%>'
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        ),
        -    'TAB_WIDTH' => 2
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php
        deleted file mode 100644
        index c213ab43..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php
        +++ /dev/null
        @@ -1,235 +0,0 @@
        - 'Rust',
        -
        -    'COMMENT_SINGLE' => array('//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        // Raw strings
        -        1 => '/\\br(\\#*)".*?"\\1/'
        -        ),
        -
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\nrt\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -
        -    'KEYWORDS' => array(
        -        // Keywords
        -        1 => array(
        -            'alt', 'as', 'assert', 'break', 'const', 'continue', 'copy', 'do',
        -            'else', 'enum', 'extern', 'fn', 'for', 'if',
        -            'impl', 'in', 'let', 'log', 'loop', 'match', 'mod', 'mut', 'of',
        -            'priv', 'pub', 'ref', 'return', 'self', 'static', 'struct', 'super',
        -            'to', 'trait', 'type', 'unsafe', 'use', 'with', 'while'
        -            ),
        -        // Boolean values
        -        2 => array( 'true', 'false' ),
        -        // Structs and built-in types
        -        3 => array(
        -            'u8', 'i8',
        -            'u16', 'i16',
        -            'u32', 'i32',
        -            'u64', 'i64',
        -            'f32', 'f64',
        -            'int', 'uint',
        -            'float',
        -            'bool',
        -            'str', 'char',
        -            'Argument', 'AsyncWatcher', 'BorrowRecord', 'BufReader',
        -            'BufWriter', 'BufferedReader', 'BufferedStream', 'BufferedWriter',
        -            'ByRef', 'ByteIterator', 'CFile', 'CString', 'CStringIterator',
        -            'Cell', 'Chain', 'Chan', 'ChanOne', 'CharIterator',
        -            'CharOffsetIterator', 'CharRange', 'CharSplitIterator',
        -            'CharSplitNIterator', 'ChunkIter', 'Condition', 'ConnectRequest',
        -            'Coroutine', 'Counter', 'CrateMap', 'Cycle', 'DeflateWriter',
        -            'Display', 'ElementSwaps', 'Enumerate', 'Exp', 'Exp1', 'FileDesc',
        -            'FileReader', 'FileStat', 'FileStream', 'FileWriter', 'Filter',
        -            'FilterMap', 'FlatMap', 'FormatSpec', 'Formatter', 'FsRequest',
        -            'Fuse', 'GarbageCollector', 'GetAddrInfoRequest', 'Handle',
        -            'HashMap', 'HashMapIterator', 'HashMapMoveIterator',
        -            'HashMapMutIterator', 'HashSet', 'HashSetIterator',
        -            'HashSetMoveIterator', 'Hint', 'IdleWatcher', 'InflateReader',
        -            'Info', 'Inspect', 'Invert', 'IoError', 'Isaac64Rng', 'IsaacRng',
        -            'LineBufferedWriter', 'Listener', 'LocalHeap', 'LocalStorage',
        -            'Loop', 'Map', 'MatchesIndexIterator', 'MemReader', 'MemWriter',
        -            'MemoryMap', 'ModEntry', 'MoveIterator', 'MovePtrAdaptor',
        -            'MoveRevIterator', 'NoOpRunnable', 'NonCopyable', 'Normal',
        -            'OSRng', 'OptionIterator', 'Parser', 'Path', 'Peekable',
        -            'Permutations', 'Pipe', 'PipeStream', 'PluralArm', 'Port',
        -            'PortOne', 'Process', 'ProcessConfig', 'ProcessOptions',
        -            'ProcessOutput', 'RC', 'RSplitIterator', 'RandSample', 'Range',
        -            'RangeInclusive', 'RangeStep', 'RangeStepInclusive', 'Rc', 'RcMut',
        -            'ReaderRng', 'Repeat', 'ReprVisitor', 'RequestData',
        -            'ReseedWithDefault', 'ReseedingRng', 'Scan', 'SchedOpts',
        -            'SelectArm', 'SharedChan', 'SharedPort', 'SignalWatcher',
        -            'SipState', 'Skip', 'SkipWhile', 'SocketAddr', 'SplitIterator',
        -            'StackPool', 'StackSegment', 'StandardNormal', 'StdErrLogger',
        -            'StdIn', 'StdOut', 'StdReader', 'StdRng', 'StdWriter',
        -            'StrSplitIterator', 'StreamWatcher', 'TTY', 'Take', 'TakeWhile',
        -            'Task', 'TaskBuilder', 'TaskOpts', 'TcpAcceptor', 'TcpListener',
        -            'TcpStream', 'TcpWatcher', 'Timer', 'TimerWatcher', 'TrieMap',
        -            'TrieMapIterator', 'TrieSet', 'TrieSetIterator', 'Tube',
        -            'UdpSendRequest', 'UdpSocket', 'UdpStream', 'UdpWatcher', 'Unfold',
        -            'UnixAcceptor', 'UnixListener', 'UnixStream', 'Unwinder',
        -            'UvAddrInfo', 'UvError', 'UvEventLoop', 'UvFileStream',
        -            'UvIoFactory', 'UvPausibleIdleCallback', 'UvPipeStream',
        -            'UvProcess', 'UvRemoteCallback', 'UvSignal', 'UvTTY',
        -            'UvTcpAcceptor', 'UvTcpListener', 'UvTcpStream', 'UvTimer',
        -            'UvUdpSocket', 'UvUnboundPipe', 'UvUnixAcceptor', 'UvUnixListener',
        -            'VecIterator', 'VecMutIterator', 'Weighted', 'WeightedChoice',
        -            'WindowIter', 'WriteRequest', 'XorShiftRng', 'Zip', 'addrinfo',
        -            'uv_buf_t', 'uv_err_data', 'uv_process_options_t', 'uv_stat_t',
        -            'uv_stdio_container_t', 'uv_timespec_t'
        -            ),
        -        // Enums
        -        4 => array(
        -            'Alignment', 'Count', 'Either', 'ExponentFormat', 'FPCategory',
        -            'FileAccess', 'FileMode', 'Flag', 'IoErrorKind', 'IpAddr',
        -            'KeyValue', 'MapError', 'MapOption', 'MemoryMapKind', 'Method',
        -            'NullByteResolution', 'Option', 'Ordering', 'PathPrefix', 'Piece',
        -            'PluralKeyword', 'Position', 'Protocol', 'Result', 'SchedHome',
        -            'SchedMode', 'SeekStyle', 'SendStr', 'SignFormat',
        -            'SignificantDigits', 'Signum', 'SocketType', 'StdioContainer',
        -            'TaskResult', 'TaskType', 'UvSocketAddr', 'Void', 'uv_handle_type',
        -            'uv_membership', 'uv_req_type'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']',
        -        '+', '-', '*', '/', '%',
        -        '&', '|', '^', '!', '<', '>', '~', '@',
        -        ':',
        -        ';', ',',
        -        '='
        -        ),
        -
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true
        -        ),
        -
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #708;',
        -            2 => 'color: #219;',
        -            3 => 'color: #05a;',
        -            4 => 'color: #800;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #a50; font-style: italic;',
        -            1 => 'color: #a11;',
        -            'MULTI' => 'color: #a50; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => ''
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #a11;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'BRACKETS' => array(''),
        -        'METHODS' => array(
        -            1 => 'color: #164;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php
        deleted file mode 100644
        index a5f463cf..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php
        +++ /dev/null
        @@ -1,288 +0,0 @@
        - 'SAS',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('/*' => '*/', '*' => ';'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            '_ALL_','_CHARACTER_','_INFILE_','_N_','_NULL_','_NUMERIC_',
        -            '_WEBOUT_'
        -            ),
        -        2 => array(
        -            '%BQUOTE','%CMPRES','%COMPSTOR','%DATATYP','%DISPLAY','%DO','%ELSE',
        -            '%END','%EVAL','%GLOBAL','%GOTO','%IF','%INDEX','%INPUT','%KEYDEF',
        -            '%LABEL','%LEFT','%LENGTH','%LET','%LOCAL','%LOWCASE','%MACRO',
        -            '%MEND','%NRBQUOTE','%NRQUOTE','%NRSTR','%PUT','%QCMPRES','%QLEFT',
        -            '%QLOWCASE','%QSCAN','%QSUBSTR','%QSYSFUNC','%QTRIM','%QUOTE',
        -            '%QUPCASE','%SCAN','%STR','%SUBSTR','%SUPERQ','%SYSCALL',
        -            '%SYSEVALF','%SYSEXEC','%SYSFUNC','%SYSGET','%SYSLPUT','%SYSPROD',
        -            '%SYSRC','%SYSRPUT','%THEN','%TO','%TRIM','%UNQUOTE','%UNTIL',
        -            '%UPCASE','%VERIFY','%WHILE','%WINDOW'
        -            ),
        -        3 => array(
        -            'ABS','ADDR','AIRY','ARCOS','ARSIN','ATAN','ATTRC','ATTRN','BAND',
        -            'BETAINV','BLSHIFT','BNOT','BOR','BRSHIFT','BXOR','BYTE','CDF',
        -            'CEIL','CEXIST','CINV','CLOSE','CNONCT','COLLATE','COMPBL',
        -            'COMPOUND','COMPRESS','COSH','COS','CSS','CUROBS','CV','DACCDBSL',
        -            'DACCDB','DACCSL','DACCSYD','DACCTAB','DAIRY','DATETIME','DATEJUL',
        -            'DATEPART','DATE','DAY','DCLOSE','DEPDBSL','DEPDB','DEPSL','DEPSYD',
        -            'DEPTAB','DEQUOTE','DHMS','DIF','DIGAMMA','DIM','DINFO','DNUM',
        -            'DOPEN','DOPTNAME','DOPTNUM','DREAD','DROPNOTE','DSNAME','ERFC',
        -            'ERF','EXIST','EXP','FAPPEND','FCLOSE','FCOL','FDELETE','FETCHOBS',
        -            'FETCH','FEXIST','FGET','FILEEXIST','FILENAME','FILEREF','FINFO',
        -            'FINV','FIPNAMEL','FIPNAME','FIPSTATE','FLOOR','FNONCT','FNOTE',
        -            'FOPEN','FOPTNAME','FOPTNUM','FPOINT','FPOS','FPUT','FREAD',
        -            'FREWIND','FRLEN','FSEP','FUZZ','FWRITE','GAMINV','GAMMA',
        -            'GETOPTION','GETVARC','GETVARN','HBOUND','HMS','HOSTHELP','HOUR',
        -            'IBESSEL','INDEXW','INDEXC','INDEX','INPUTN','INPUTC','INPUT',
        -            'INTRR','INTCK','INTNX','INT','IRR','JBESSEL','JULDATE','KURTOSIS',
        -            'LAG','LBOUND','LEFT','LENGTH','LGAMMA','LIBNAME','LIBREF','LOG10',
        -            'LOG2','LOGPDF','LOGPMF','LOGSDF','LOG','LOWCASE','MAX','MDY',
        -            'MEAN','MINUTE','MIN','MOD','MONTH','MOPEN','MORT','NETPV','NMISS',
        -            'NORMAL','NPV','N','OPEN','ORDINAL','PATHNAME','PDF','PEEKC','PEEK',
        -            'PMF','POINT','POISSON','POKE','PROBBETA','PROBBNML','PROBCHI',
        -            'PROBF','PROBGAM','PROBHYPR','PROBIT','PROBNEGB','PROBNORM','PROBT',
        -            'PUTN','PUTC','PUT','QTR','QUOTE','RANBIN','RANCAU','RANEXP',
        -            'RANGAM','RANGE','RANK','RANNOR','RANPOI','RANTBL','RANTRI',
        -            'RANUNI','REPEAT','RESOLVE','REVERSE','REWIND','RIGHT','ROUND',
        -            'SAVING','SCAN','SDF','SECOND','SIGN','SINH','SIN','SKEWNESS',
        -            'SOUNDEX','SPEDIS','SQRT','STDERR','STD','STFIPS','STNAME',
        -            'STNAMEL','SUBSTR','SUM','SYMGET','SYSGET','SYSMSG','SYSPROD',
        -            'SYSRC','SYSTEM','TANH','TAN','TIMEPART','TIME','TINV','TNONCT',
        -            'TODAY','TRANSLATE','TRANWRD','TRIGAMMA','TRIMN','TRIM','TRUNC',
        -            'UNIFORM','UPCASE','USS','VARFMT','VARINFMT','VARLABEL','VARLEN',
        -            'VARNAME','VARNUM','VARRAYX','VARRAY','VARTYPE','VAR','VERIFY',
        -            'VFORMATX','VFORMATDX','VFORMATD','VFORMATNX','VFORMATN',
        -            'VFORMATWX','VFORMATW','VFORMAT','VINARRAYX','VINARRAY',
        -            'VINFORMATX','VINFORMATDX','VINFORMATD','VINFORMATNX','VINFORMATN',
        -            'VINFORMATWX','VINFORMATW','VINFORMAT','VLABELX','VLABEL',
        -            'VLENGTHX','VLENGTH','VNAMEX','VNAME','VTYPEX','VTYPE','WEEKDAY',
        -            'YEAR','YYQ','ZIPFIPS','ZIPNAME','ZIPNAMEL','ZIPSTATE'
        -            ),
        -        4 => array(
        -            'ABORT','ADD','ALTER','AND','ARRAY','AS','ATTRIB','BY','CALL',
        -            'CARDS4','CASCADE','CATNAME','CHECK','CONTINUE','CREATE',
        -            'DATALINES4','DELETE','DESCRIBE','DISPLAY','DISTINCT','DM','DROP',
        -            'ENDSAS','FILE','FOOTNOTE','FOREIGN','FORMAT','FROM',
        -            'GOTO','GROUP','HAVING','IN','INFILE','INFORMAT',
        -            'INSERT','INTO','KEEP','KEY','LABEL','LEAVE',
        -            'LIKE','LINK','LIST','LOSTCARD','MERGE','MESSAGE','MISSING',
        -            'MODIFY','MSGTYPE','NOT','NULL','ON','OPTIONS','OR','ORDER',
        -            'OUTPUT','PAGE','PRIMARY','REDIRECT','REFERENCES','REMOVE',
        -            'RENAME','REPLACE','RESET','RESTRICT','RETAIN','RETURN','SELECT',
        -            'SET','SKIP','STARTSAS','STOP','SYSTASK','TABLE','TITLE','UNIQUE',
        -            'UPDATE','VALIDATE','VIEW','WAITSAS','WHERE','WINDOW','X'
        -            ),
        -        5 => array(
        -            'DO','ELSE','END','IF','THEN','UNTIL','WHILE'
        -            ),
        -        6 => array(
        -            'RUN','QUIT','DATA'
        -            ),
        -        7 => array(
        -            'ERROR'
        -            ),
        -        8 => array(
        -            'WARNING'
        -            ),
        -        9 => array(
        -            'NOTE'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false,
        -        8 => false,
        -        9 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #0000ff;',
        -            4 => 'color: #0000ff;',
        -            5 => 'color: #0000ff;',
        -            6 => 'color: #000080; font-weight: bold;',
        -            7 => 'color: #ff0000;',
        -            8 => 'color: #00ff00;',
        -            9 => 'color: #0000ff;'
        -            ),
        -        'COMMENTS' => array(
        -//            1 => 'color: #006400; font-style: italic;',
        -            'MULTI' => 'color: #006400; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #a020f0;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #2e8b57; font-weight: bold;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff; font-weight: bold;',
        -            1 => 'color: #000080; font-weight: bold;',
        -            2 => 'color: #006400; font-style: italic;',
        -            3 => 'color: #006400; font-style: italic;',
        -            4 => 'color: #006400; font-style: italic;',
        -            5 => 'color: #ff0000; font-weight: bold;',
        -            6 => 'color: #00ff00; font-style: italic;',
        -            7 => 'color: #0000ff; font-style: normal;',
        -            8 => 'color: #b218b2; font-weight: bold;',
        -            9 => 'color: #b218b2; font-weight: bold;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => '',
        -        9 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => "&[a-zA-Z_][a-zA-Z0-9_]*",
        -        1 => array(//Procedures
        -            GESHI_SEARCH => '(^\\s*)(PROC \\w+)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => array(
        -            GESHI_SEARCH => '(^\\s*)(\\*.*;)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        3 => array(
        -            GESHI_SEARCH => '(.*;\\s*)(\\*.*;)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        4 => array(
        -            GESHI_SEARCH => '(^\\s*)(%\\*.*;)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        5 => array(//Error messages
        -            GESHI_SEARCH => '(^ERROR.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        6 => array(//Warning messages
        -            GESHI_SEARCH => '(^WARNING.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        7 => array(//Notice messages
        -            GESHI_SEARCH => '(^NOTE.*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'im',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        8 => array(
        -            GESHI_SEARCH => '(^\\s*)(CARDS.*)(^\\s*;\\s*$)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'sim',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -        9 => array(
        -            GESHI_SEARCH => '(^\\s*)(DATALINES.*)(^\\s*;\\s*$)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'sim',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php
        deleted file mode 100644
        index dcfb2775..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php
        +++ /dev/null
        @@ -1,136 +0,0 @@
        - 'Scala',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(2 => "/\\'(?!\w\\'|\\\\)\w+(?=\s)/"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'",'"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{1,2}#i",
        -        //Hexadecimal Char Specs (unicode)
        -        3 => "#\\\\u[\da-fA-F]{1,4}#",
        -        //Hexadecimal Char Specs (Extended Unicode)
        -        4 => "#\\\\U[\da-fA-F]{1,8}#",
        -        ),
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abstract', 'case', 'catch', 'class', 'def',
        -            'do', 'else', 'extends', 'false', 'final',
        -            'finally', 'for', 'forSome', 'if', 'implicit',
        -            'import', 'match', 'new', 'null', 'object',
        -            'override', 'package', 'private', 'protected', 'requires',
        -            'return', 'sealed', 'super', 'this', 'throw',
        -            'trait', 'try', 'true', 'type', 'val',
        -            'var', 'while', 'with', 'yield'
        -            ),
        -        2 => array(
        -            'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?',
        -        '_', ':', '=', '=>', '<<:',
        -        '<%', '>:', '#', '@'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff; font-weight: bold;',
        -            2 => 'color: #9999cc; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000; font-style: italic;',
        -            2 => 'color: #CC66FF;',
        -            'MULTI' => 'color: #00ff00; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #6666ff; font-weight: bold;',
        -            1 => 'color: #6666ff; font-weight: bold;',
        -            2 => 'color: #5555ff; font-weight: bold;',
        -            3 => 'color: #4444ff; font-weight: bold;',
        -            4 => 'color: #3333ff; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #F78811;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #6666FF;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #F78811;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #000000;',
        -            2 => 'color: #000000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000080;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://scala-lang.org',
        -        2 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php
        deleted file mode 100644
        index 2a6c972f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php
        +++ /dev/null
        @@ -1,168 +0,0 @@
        - 'Scheme',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array('#|' => '|#'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'abs', 'acos', 'and', 'angle', 'append', 'appply', 'approximate',
        -            'asin', 'assoc', 'assq', 'assv', 'atan',
        -
        -            'begin', 'boolean?', 'bound-identifier=?',
        -
        -            'caar', 'caddr', 'cadr', 'call-with-current-continuation',
        -            'call-with-input-file', 'call-with-output-file', 'call/cc', 'car',
        -            'case', 'catch', 'cdddar', 'cddddr', 'cdr', 'ceiling', 'char->integer',
        -            'char-alphabetic?', 'char-ci<=?', 'char-ci=?',
        -            'char-ci>?', 'char-ci=?', 'char-downcase', 'char-lower-case?',
        -            'char-numeric', 'char-ready', 'char-ready?', 'char-upcase',
        -            'char-upper-case?', 'char-whitespace?', 'char<=?', 'char=?', 'char>?', 'char?', 'close-input-port', 'close-output-port',
        -            'complex?', 'cond', 'cons', 'construct-identifier', 'cos',
        -            'current-input-port', 'current-output-port',
        -
        -            'd', 'define', 'define-syntax', 'delay', 'denominator', 'display', 'do',
        -
        -            'e', 'eof-object?', 'eq?', 'equal?', 'eqv?', 'even?', 'exact->inexact',
        -            'exact?', 'exp', 'expt', 'else',
        -
        -            'f', 'floor', 'for-each', 'force', 'free-identifer=?',
        -
        -            'gcd', 'gen-counter', 'gen-loser', 'generate-identifier',
        -
        -            'identifier->symbol', 'identifier', 'if', 'imag-part', 'inexact->exact',
        -            'inexact?', 'input-port?', 'integer->char', 'integer?', 'integrate-system',
        -
        -            'l', 'lambda', 'last-pair', 'lcm', 'length', 'let', 'let*', 'letrec',
        -            'list', 'list->string', 'list->vector', 'list-ref', 'list-tail', 'list?',
        -            'load', 'log',
        -
        -            'magnitude', 'make-polar', 'make-promise', 'make-rectangular',
        -            'make-string', 'make-vector', 'map', 'map-streams', 'max', 'member',
        -            'memq', 'memv', 'min', 'modulo',
        -
        -            'negative', 'newline', 'nil', 'not', 'null?', 'number->string', 'number?',
        -            'numerator',
        -
        -            'odd?', 'open-input-file', 'open-output-file', 'or', 'output-port',
        -
        -            'pair?', 'peek-char', 'positive?', 'procedure?',
        -
        -            'quasiquote', 'quote', 'quotient',
        -
        -            'rational', 'rationalize', 'read', 'read-char', 'real-part', 'real?',
        -            'remainder', 'return', 'reverse',
        -
        -            's', 'sequence', 'set!', 'set-char!', 'set-cdr!', 'sin', 'sqrt', 'string',
        -            'string->list', 'string->number', 'string->symbol', 'string-append',
        -            'string-ci<=?', 'string-ci=?',
        -            'string-ci>?', 'string-copy', 'string-fill!', 'string-length',
        -            'string-ref', 'string-set!', 'string<=?', 'string=?', 'string>?', 'string?', 'substring', 'symbol->string',
        -            'symbol?', 'syntax', 'syntax-rules',
        -
        -            't', 'tan', 'template', 'transcript-off', 'transcript-on', 'truncate',
        -
        -            'unquote', 'unquote-splicing', 'unwrap-syntax',
        -
        -            'vector', 'vector->list', 'vector-fill!', 'vector-length', 'vector-ref',
        -            'vector-set!', 'vector?',
        -
        -            'with-input-from-file', 'with-output-to-file', 'write', 'write-char',
        -
        -            'zero?'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php
        deleted file mode 100644
        index b0951d95..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php
        +++ /dev/null
        @@ -1,293 +0,0 @@
        - 'SciLab',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        2 => "/(?<=\)|\]|\w)'/"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'HARDQUOTE' => array("'", "'"),
        -    'HARDESCAPE' => array(),
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'if', 'else', 'elseif', 'end', 'select', 'case', 'for', 'while', 'break'
        -            ),
        -        2 => array(
        -            'STDIN', 'STDOUT', 'STDERR',
        -            '%i', '%pi', '%e', '%eps', '%nan', '%inf', '%s', '%t', '%f',
        -            'usual', 'polynomial', 'boolean', 'character', 'function', 'rational', 'state-space',
        -            'sparse', 'boolean sparse', 'list', 'tlist', 'library', 'endfunction'
        -            ),
        -        3 => array(
        -            '%asn', '%helps', '%k', '%sn', 'abcd', 'abinv', 'abort', 'about', 'About_M2SCI_tools',
        -            'abs', 'acos', 'acosh', 'acoshm', 'acosm', 'AdCommunications', 'add_demo', 'add_edge',
        -            'add_help_chapter', 'add_node', 'add_palette', 'addcolor', 'addf', 'addinter', 'addmenu',
        -            'adj_lists', 'adj2sp', 'aff2ab', 'alufunctions', 'amell', 'analpf', 'analyze', 'and',
        -            'ans', 'apropos', 'arc_graph', 'arc_number', 'arc_properties', 'argn', 'arhnk', 'arl2',
        -            'arma', 'arma2p', 'armac', 'armax', 'armax1', 'arsimul', 'artest', 'articul', 'ascii',
        -            'asciimat', 'asin', 'asinh', 'asinhm', 'asinm', 'assignation', 'atan', 'atanh', 'atanhm',
        -            'atanm', 'augment', 'auread', 'auwrite', 'axes_properties', 'axis_properties', 'backslash',
        -            'balanc', 'balreal', 'bandwr', 'banner','bar', 'barh', 'barhomogenize', 'basename', 'bdiag',
        -            'beep', 'besselh', 'besseli', 'besselj', 'besselk', 'bessely', 'best_match', 'beta','bezout',
        -            'bifish', 'bilin', 'binomial', 'black', 'bloc2exp', 'bloc2ss', 'bode', 'bool2s',
        -            'boucle', 'brackets', 'browsevar', 'bsplin3val', 'bstap', 'buttmag', 'buttondialog',
        -            'bvode', 'bvodeS', 'c_link', 'cainv', 'calendar', 'calerf', 'calfrq', 'call', 'canon', 'casc',
        -            'cat', 'catch', 'ccontrg', 'cd', 'cdfbet', 'cdfbin', 'cdfchi', 'cdfchn', 'cdff', 'cdffnc',
        -            'cdfgam', 'cdfnbn', 'cdfnor', 'cdfpoi', 'cdft', 'ceil', 'cell', 'cell2mat', 'cellstr', 'center',
        -            'cepstrum', 'chain_struct', 'chaintest', 'champ', 'champ_properties', 'champ1', 'char', 'chart',
        -            'chartooem', 'chdir', 'cheb1mag', 'cheb2mag', 'check_graph', 'chepol', 'chfact', 'chol', 'chsolve',
        -            'circuit', 'classmarkov', 'clc', 'clean', 'clear', 'clear_pixmap', 'clearfun', 'clearglobal','clf',
        -            'clipboard', 'close', 'cls2dls', 'cmb_lin', 'cmndred', 'cmoment', 'code2str', 'coeff', 'coff', 'coffg',
        -            'colcomp', 'colcompr', 'colinout', 'colon', 'color', 'color_list', 'colorbar', 'colordef', 'colormap',
        -            'colregul', 'comma', 'comments', 'comp', 'companion', 'comparison', 'Compound_properties', 'con_nodes',
        -            'cond', 'config', 'configure_msvc', 'conj', 'connex', 'console', 'cont_frm', 'cont_mat', 'Contents',
        -            'continue', 'contour', 'contour2d', 'contour2di', 'contourf', 'contr', 'contract_edge', 'contrss',
        -            'convex_hull', 'convol', 'convstr', 'copfac', 'copy', 'corr', 'correl', 'cos', 'cosh', 'coshm',
        -            'cosm', 'cotg', 'coth', 'cothm', 'covar', 'create_palette', 'cshep2d', 'csim', 'cspect', 'Cste',
        -            'ctr_gram', 'cumprod', 'cumsum', 'cycle_basis', 'czt', 'dasrt', 'dassl', 'datafit', 'date', 'datenum',
        -            'datevec', 'dbphi', 'dcf', 'ddp', 'debug', 'dec2hex', 'deff', 'definedfields', 'degree', 'delbpt',
        -            'delete', 'delete_arcs', 'delete_nodes', 'delip', 'delmenu', 'demoplay', 'denom', 'derivat', 'derivative',
        -            'des2ss', 'des2tf', 'det', 'determ', 'detr', 'detrend', 'dft', 'dhinf', 'dhnorm', 'diag', 'diary',
        -            'diff', 'diophant', 'dir', 'dirname', 'disp', 'dispbpt', 'dispfiles', 'dlgamma', 'dnaupd', 'do', 'dot',
        -            'double', 'dragrect', 'draw', 'drawaxis', 'drawlater', 'drawnow', 'driver', 'dsaupd', 'dscr',
        -            'dsearch', 'dsimul', 'dt_ility', 'dtsi', 'edge_number', 'edit', 'edit_curv', 'edit_error',
        -            'edit_graph', 'edit_graph_menus', 'editvar', 'eigenmarkov', 'ell1mag',
        -            'empty', 'emptystr', 'eqfir', 'eqiir', 'equal', 'Equal', 'equil', 'equil1',
        -            'ereduc', 'erf', 'erfc', 'erfcx', 'errbar', 'errcatch', 'errclear', 'error', 'error_table', 'etime',
        -            'eval', 'eval_cshep2d', 'eval3d', 'eval3dp', 'evans', 'evstr', 'excel2sci', 'exec', 'execstr', 'exists',
        -            'exit', 'exp', 'expm', 'external', 'extraction', 'eye', 'fac3d', 'factorial', 'factors', 'faurre', 'fchamp',
        -            'fcontour', 'fcontour2d', 'fec', 'fec_properties', 'feedback', 'feval', 'ffilt', 'fft', 'fft2', 'fftshift',
        -            'fgrayplot', 'figure', 'figure_properties', 'figure_style', 'file', 'fileinfo', 'fileparts', 'filter', 'find',
        -            'find_freq', 'find_path', 'findABCD', 'findAC', 'findBD', 'findBDK', 'findm', 'findmsvccompiler', 'findobj',
        -            'findR', 'findx0BD', 'firstnonsingleton', 'fit_dat', 'fix', 'floor', 'flts', 'foo', 'format',
        -            'formatman', 'fort', 'fourplan', 'fplot2d', 'fplot3d', 'fplot3d1', 'fprintf', 'fprintfMat', 'frep2tf',
        -            'freq', 'freson', 'frexp', 'frfit', 'frmag', 'fscanf', 'fscanfMat', 'fsfirlin', 'fsolve', 'fspecg',
        -            'fstabst', 'fstair', 'ftest', 'ftuneq', 'full', 'fullfile', 'fullrf', 'fullrfk', 'fun2string', 'Funcall',
        -            'funcprot', 'functions', 'funptr', 'fusee', 'G_make', 'g_margin', 'gainplot', 'gamitg',
        -            'gamma', 'gammaln', 'gca', 'gcare', 'gcd', 'gce', 'gcf', 'gda', 'gdf', 'gen_net', 'genfac3d', 'genlib',
        -            'genmarkov', 'geom3d', 'geomean', 'get', 'get_contents_infer', 'get_function_path', 'getcolor', 'getcwd',
        -            'getd', 'getdate', 'getenv', 'getf', 'getfield', 'getfont', 'gethistory', 'getio', 'getlinestyle',
        -            'getlongpathname', 'getmark', 'getmemory', 'getos', 'getpid', 'getscilabkeywords', 'getshell',
        -            'getshortpathname', 'getsymbol', 'getvalue', 'getversion', 'gfare', 'gfrancis', 'girth', 'givens',
        -            'glever', 'glist', 'global', 'GlobalProperty', 'glue', 'gmres', 'gpeche', 'gr_menu', 'graduate', 'grand',
        -            'graph_2_mat', 'graph_center', 'graph_complement', 'graph_diameter', 'graph_power', 'graph_simp', 'graph_sum',
        -            'graph_union', 'graphic', 'Graphics', 'graphics_entities', 'graph-list', 'graycolormap', 'grayplot',
        -            'grayplot_properties', 'graypolarplot', 'great', 'grep', 'group', 'gschur', 'gsort', 'gspec', 'gstacksize',
        -            'gtild', 'h_cl', 'h_inf', 'h_inf_st', 'h_norm', 'h2norm', 'halt', 'hamilton', 'hank', 'hankelsv', 'harmean',
        -            'hat', 'havewindow', 'head_comments', 'help', 'help_skeleton', 'hermit', 'hess', 'hex2dec', 'hilb', 'hinf',
        -            'hist3d', 'histplot', 'horner', 'host', 'hotcolormap', 'householder', 'hrmt', 'hsv2rgb', 'hsvcolormap',
        -            'htrianr', 'hypermat', 'hypermatrices', 'iconvert', 'ieee', 'ifft', 'iir', 'iirgroup', 'iirlp',
        -            'ilib_build', 'ilib_compile', 'ilib_for_link', 'ilib_gen_gateway', 'ilib_gen_loader', 'ilib_gen_Make',
        -            'im_inv', 'imag', 'impl', 'imrep2ss', 'imult', 'ind2sub', 'Infer', 'inistate', 'input', 'insertion', 'int',
        -            'int16', 'int2d', 'int32', 'int3d', 'int8', 'intc', 'intdec', 'integrate', 'interp', 'interp1', 'interp2d',
        -            'interp3d', 'interpln', 'intersci', 'intersect', 'intg', 'intl', 'intppty', 'intsplin', 'inttrap', 'inttype',
        -            'inv', 'inv_coeff', 'invr', 'invsyslin', 'iqr', 'is_connex', 'iscellstr', 'isdef', 'isdir', 'isempty',
        -            'isequal', 'isequalbitwise', 'iserror', 'isglobal', 'isinf', 'isnan', 'isoview', 'isreal', 'javasci',
        -            'jetcolormap', 'jmat', 'justify', 'kalm', 'karmarkar', 'kernel', 'keyboard', 'knapsack', 'kpure', 'krac2',
        -            'kron', 'kroneck', 'label_properties', 'labostat', 'LANGUAGE', 'lasterror', 'lattn', 'lattp', 'lcf', 'lcm',
        -            'lcmdiag', 'ldiv', 'ldivf', 'leastsq', 'left', 'legend', 'legend_properties', 'legendre', 'legends', 'length',
        -            'leqr', 'less', 'lev', 'levin', 'lex_sort', 'lft', 'lgfft', 'lib', 'lin', 'lin2mu', 'lindquist',
        -            'line_graph', 'linear_interpn', 'lines', 'LineSpec', 'linf', 'linfn', 'link', 'linmeq', 'linpro', 'linsolve',
        -            'linspace', 'listfiles', 'listvarinfile', 'lmisolver', 'lmitool', 'load', 'load_graph', 'loadhistory',
        -            'loadmatfile', 'loadplots', 'loadwave', 'locate', 'log', 'log10', 'log1p', 'log2', 'logm', 'logspace',
        -            'lotest', 'lqe', 'lqg', 'lqg_ltr', 'lqg2stan', 'lqr', 'ls', 'lsq', 'lsq_splin', 'lsqrsolve', 'lsslist',
        -            'lstcat', 'lstsize', 'ltitr', 'lu', 'ludel', 'lufact', 'luget', 'lusolve', 'lyap', 'm_circle', 'm2scideclare',
        -            'macglov', 'macr2lst', 'macr2tree', 'macro', 'macrovar', 'mad', 'make_graph', 'make_index', 'makecell', 'man',
        -            'manedit', 'mapsound', 'markp2ss', 'mat_2_graph', 'matfile2sci', 'Matlab-Scilab_character_strings', 'Matplot',
        -            'Matplot_properties', 'Matplot1', 'matrices', 'matrix', 'max', 'max_cap_path', 'max_clique', 'max_flow',
        -            'maxi', 'mcisendstring', 'mclearerr', 'mclose', 'mdelete', 'mean', 'meanf', 'median', 'menus', 'meof',
        -            'merror', 'mese', 'mesh', 'mesh2d', 'meshgrid', 'mfft', 'mfile2sci', 'mfprintf', 'mfscanf', 'mget', 'mgeti',
        -            'mgetl', 'mgetstr', 'milk_drop', 'min', 'min_lcost_cflow', 'min_lcost_flow1', 'min_lcost_flow2',
        -            'min_qcost_flow', 'min_weight_tree', 'mine', 'mini', 'minreal', 'minss', 'minus', 'mkdir', 'mlist', 'mode',
        -            'modulo', 'moment', 'mopen', 'move', 'mprintf', 'mps2linpro', 'mput', 'mputl', 'mputstr', 'mrfit', 'mscanf',
        -            'msd', 'mseek', 'msprintf', 'msscanf', 'mstr2sci', 'mtell', 'mtlb_0', 'mtlb_a', 'mtlb_all', 'mtlb_any',
        -            'mtlb_axis', 'mtlb_beta', 'mtlb_box', 'mtlb_close', 'mtlb_colordef', 'mtlb_conv', 'mtlb_cumprod', 'mtlb_cumsum',
        -            'mtlb_dec2hex', 'mtlb_delete', 'mtlb_diag', 'mtlb_diff', 'mtlb_dir', 'mtlb_double', 'mtlb_e', 'mtlb_echo',
        -            'mtlb_eig', 'mtlb_eval', 'mtlb_exist', 'mtlb_eye', 'mtlb_false', 'mtlb_fft', 'mtlb_fftshift', 'mtlb_find',
        -            'mtlb_findstr', 'mtlb_fliplr', 'mtlb_fopen', 'mtlb_format', 'mtlb_fprintf', 'mtlb_fread', 'mtlb_fscanf',
        -            'mtlb_full', 'mtlb_fwrite', 'mtlb_grid', 'mtlb_hold', 'mtlb_i', 'mtlb_ifft', 'mtlb_imp', 'mtlb_int16',
        -            'mtlb_int32', 'mtlb_int8', 'mtlb_is', 'mtlb_isa', 'mtlb_isfield', 'mtlb_isletter', 'mtlb_isspace', 'mtlb_l',
        -            'mtlb_legendre', 'mtlb_linspace', 'mtlb_load', 'mtlb_logic', 'mtlb_logical', 'mtlb_lower', 'mtlb_max',
        -            'mtlb_min', 'mtlb_mode', 'mtlb_more', 'mtlb_num2str', 'mtlb_ones', 'mtlb_plot', 'mtlb_prod', 'mtlb_rand',
        -            'mtlb_randn', 'mtlb_rcond', 'mtlb_realmax', 'mtlb_realmin', 'mtlb_repmat', 'mtlb_s', 'mtlb_save',
        -            'mtlb_setstr', 'mtlb_size', 'mtlb_sort', 'mtlb_sparse', 'mtlb_strcmp', 'mtlb_strcmpi', 'mtlb_strfind',
        -            'mtlb_strrep', 'mtlb_sum', 'mtlb_t', 'mtlb_toeplitz', 'mtlb_tril', 'mtlb_triu', 'mtlb_true', 'mtlb_uint16',
        -            'mtlb_uint32', 'mtlb_uint8', 'mtlb_upper', 'mtlb_zeros', 'mu2lin', 'mucomp', 'mulf', 'mvvacov', 'name2rgb',
        -            'names', 'nancumsum', 'nand2mean', 'nanmax', 'nanmean', 'nanmeanf', 'nanmedian', 'nanmin', 'nanstdev',
        -            'nansum', 'narsimul', 'NDcost', 'ndgrid', 'ndims', 'nearfloat', 'nehari', 'neighbors', 'netclose', 'netwindow',
        -            'netwindows', 'new', 'newaxes', 'newest', 'newfun', 'nextpow2', 'nf3d', 'nfreq', 'nlev', 'nnz', 'node_number',
        -            'nodes_2_path', 'nodes_degrees', 'noisegen', 'norm', 'not', 'null', 'number_properties', 'numdiff', 'numer',
        -            'nyquist', 'object_editor', 'obs_gram', 'obscont', 'obscont1', 'observer', 'obsv_mat', 'obsvss', 'ode',
        -            'ode_discrete', 'ode_optional_output', 'ode_root', 'odedc', 'odeoptions', 'oemtochar', 'old_style',
        -            'oldbesseli', 'oldbesselj', 'oldbesselk', 'oldbessely', 'oldload', 'oldplot', 'oldsave', 'ones',
        -            'Operation', 'optim', 'or', 'orth', 'overloading', 'p_margin', 'param3d', 'param3d_properties',
        -            'param3d1', 'paramfplot2d', 'parents', 'parrot', 'part', 'path_2_nodes', 'pathconvert', 'pause', 'pbig',
        -            'pca', 'pcg', 'pdiv', 'pen2ea', 'pencan', 'penlaur', 'percent', 'perctl', 'perfect_match', 'perl',
        -            'perms', 'permute', 'pertrans', 'pfss', 'phasemag', 'phc', 'pie', 'pinv', 'pipe_network', 'playsnd', 'plot',
        -            'plot_graph', 'plot2d', 'plot2d_old_version', 'plot2d1', 'plot2d2', 'plot2d3', 'plot2d4', 'plot3d',
        -            'plot3d_old_version', 'plot3d1', 'plot3d2', 'plot3d3', 'plotframe', 'plotprofile', 'plus', 'plzr',
        -            'pmodulo', 'pol2des', 'pol2str', 'pol2tex', 'polar', 'polarplot', 'polfact', 'poly', 'polyline_properties',
        -            'portr3d', 'portrait', 'power', 'ppol', 'prbs_a', 'predecessors', 'predef', 'print', 'printf',
        -            'printf_conversion', 'printing', 'printsetupbox', 'prod', 'profile', 'progressionbar', 'proj', 'projsl',
        -            'projspec', 'psmall', 'pspect', 'pvm', 'pvm_addhosts', 'pvm_barrier', 'pvm_bcast', 'pvm_bufinfo', 'pvm_config',
        -            'pvm_delhosts', 'pvm_error', 'pvm_exit', 'pvm_f772sci', 'pvm_get_timer', 'pvm_getinst', 'pvm_gettid',
        -            'pvm_gsize', 'pvm_halt', 'pvm_joingroup', 'pvm_kill', 'pvm_lvgroup', 'pvm_mytid', 'pvm_parent', 'pvm_probe',
        -            'pvm_recv', 'pvm_reduce', 'pvm_sci2f77', 'pvm_send', 'pvm_set_timer', 'pvm_spawn', 'pvm_spawn_independent',
        -            'pvm_start', 'pvm_tasks', 'pvm_tidtohost', 'pvmd3', 'pwd', 'qassign', 'qld', 'qmr', 'qr', 'quapro', 'quart',
        -            'quaskro', 'quit', 'quote', 'rand', 'randpencil', 'range', 'rank', 'rankqr', 'rat',  'rcond',
        -            'rdivf', 'read', 'read4b', 'readb', 'readc_', 'readmps', 'readxls', 'real', 'realtime', 'realtimeinit',
        -            'rectangle_properties', 'recur', 'reglin', 'regress', 'remez', 'remezb', 'repfreq', 'replot', 'resethistory',
        -            'residu', 'resume', 'return', 'rgb2name', 'ric_desc', 'ricc', 'riccati', 'rlist', 'rmdir', 'roots', 'rotate',
        -            'round', 'routh_t', 'rowcomp', 'rowcompr', 'rowinout', 'rowregul', 'rowshuff', 'rpem', 'rref', 'rtitr',
        -            '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',
        -            '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',
        -            'show_pixmap', 'showprofile', 'sident', 'sign', 'Signal', 'signm', 'simp', 'simp_mode', 'sin', 'sinc',
        -            'sincd', 'sinh', 'sinhm', 'sinm', 'size', 'slash', 'sleep', 'sm2des', 'sm2ss', 'smooth', 'solve',
        -            'sorder', 'sort', 'sound', 'soundsec', 'sp2adj', 'spaninter', 'spanplus', 'spantwo', 'spchol',
        -            'spcompack', 'spec', 'specfact', 'speye', 'spget', 'splin', 'splin2d', 'splin3d', 'split_edge', 'spones',
        -            'sprand', 'sprintf', 'spzeros', 'sqroot', 'sqrt', 'sqrtm', 'square', 'squarewave', 'srfaur', 'srkf', 'ss2des',
        -            'ss2ss', 'ss2tf', 'sscanf', 'sskf', 'ssprint', 'ssrand', 'st_deviation', 'st_ility', 'stabil', 'stacksize',
        -            'star', 'startup', 'stdev', 'stdevf', 'str2code', 'strange', 'strcat', 'strindex', 'string', 'stringbox',
        -            'strings', 'stripblanks', 'strong_con_nodes', 'strong_connex', 'strsplit', 'strsubst', 'struct', 'sub2ind',
        -            'subf', 'subgraph', 'subplot', 'successors', 'sum', 'supernode', 'surf', 'surface_properties', 'sva',
        -            'svd', 'svplot', 'sylm', 'sylv', 'symbols', 'sysconv', 'sysdiag', 'sysfact', 'syslin', 'syssize', 'system',
        -            'systems', 'systmat', 'tabul', 'tan', 'tangent', 'tanh', 'tanhm', 'tanm', 'TCL_CreateSlave', 'TCL_DeleteInterp',
        -            'TCL_EvalFile', 'TCL_EvalStr', 'TCL_ExistInterp', 'TCL_ExistVar', 'TCL_GetVar', 'TCL_GetVersion', 'TCL_SetVar',
        -            'TCL_UnsetVar', 'TCL_UpVar', 'tdinit', 'testmatrix', 'texprint', 'text_properties', 'tf2des', 'tf2ss', 'then',
        -            'thrownan', 'tic', 'tilda', 'time_id', 'timer', 'title', 'titlepage', 'TK_EvalFile', 'TK_EvalStr', 'tk_getdir',
        -            'tk_getfile', 'TK_GetVar', 'tk_savefile', 'TK_SetVar',  'toc', 'toeplitz', 'tohome', 'tokenpos',
        -            'tokens', 'toolbar', 'toprint', 'trace', 'trans', 'trans_closure', 'translatepaths', 'tree2code', 'trfmod',
        -            'trianfml', 'tril', 'trimmean', 'trisolve', 'triu', 'try', 'trzeros', 'twinkle', 'type', 'Type', 'typename',
        -            'typeof', 'ui_observer', 'uicontrol', 'uimenu', 'uint16', 'uint32', 'uint8', 'ulink', 'unglue', 'union',
        -            'unique', 'unix', 'unix_g', 'unix_s', 'unix_w', 'unix_x', 'unobs', 'unsetmenu', 'unzoom', 'user', 'varargin',
        -            'varargout', 'Variable', 'variance', 'variancef', 'varn', 'vectorfind', 'waitbar', 'warning', 'wavread',
        -            'wavwrite', 'wcenter', 'wfir', 'what', 'where', 'whereami', 'whereis', 'who', 'who_user', 'whos',
        -            'wiener', 'wigner', 'winclose', 'window', 'winlist', 'winopen', 'winqueryreg', 'winsid', 'with_atlas',
        -            'with_gtk', 'with_javasci', 'with_pvm', 'with_texmacs', 'with_tk', 'writb', 'write', 'write4b', 'x_choices',
        -            'x_choose', 'x_dialog', 'x_matrix', 'x_mdialog', 'x_message', 'x_message_modeless', 'xarc', 'xarcs', 'xarrows',
        -            'xaxis', 'xbasc', 'xbasimp', 'xbasr', 'xchange', 'xclea', 'xclear', 'xclick', 'xclip', 'xdel', 'xend',
        -            'xfarc', 'xfarcs', 'xfpoly', 'xfpolys', 'xfrect', 'xget', 'xgetech', 'xgetfile', 'xgetmouse', 'xgraduate',
        -            'xgrid', 'xinfo', 'xinit', 'xlfont', 'xload', 'xls_open', 'xls_read', 'xmltohtml', 'xname', 'xnumb', 'xpause',
        -            'xpoly', 'xpolys', 'xrect', 'xrects', 'xrpoly', 'xs2bmp', 'xs2emf', 'xs2eps', 'xs2fig', 'xs2gif', 'xs2ppm',
        -            'xs2ps', 'xsave', 'xsegs', 'xselect', 'xset', 'xsetech', 'xsetm', 'xstring', 'xstringb', 'xstringl', 'xtape',
        -            'xtitle', 'yulewalk', 'zeropen', 'zeros', 'zgrid', 'zoom_rect', 'zpbutt', 'zpch1', 'zpch2', 'zpell'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '<', '>', '=',
        -        '!', '@', '~', '&', '|',
        -        '+','-', '*', '/', '%',
        -        ',', ';', '?', ':', "'"
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => '',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            'HARD' => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;',
        -            2 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;',
        -            4 => 'color: #009999;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm',
        -        2 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm',
        -        3 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '->',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        //Variable
        -        0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
        -        //File Descriptor
        -        4 => '<[a-zA-Z_][a-zA-Z0-9_]*>',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php
        deleted file mode 100644
        index 1401dcd2..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php
        +++ /dev/null
        @@ -1,148 +0,0 @@
        -
        - * ---------------------------------
        - * Author: Leonhard Hösch (leonhard.hoesch@siemens.com)
        - * Copyright: (c) 2008 by Leonhard Hösch (siemens.de)
        - * Release Version: 1.0.8.12
        - * Date Started: 2012/09/25
        - *
        - * SCL language file for GeSHi.
        - *
        - * A SCL langauge file.
        - *
        - * CHANGES
        - * -------
        - *  ()
        - *  -  First Release
        - *
        - * TODO (updated )
        - * -------------------------
        - * 
        - *
        - *************************************************************************************
        - *
        - *     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' => 'SCL',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('(*' => '*)'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array("'"),
        -    'ESCAPE_CHAR' => '$',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'AND','ANY','ARRAY','AT','BEGIN','BLOCK_DB','BLOCK_FB','BLOCK_FC','BLOCK_SDB',
        -            'BLOCK_SFB','BLOCK_SFC','BOOL','BY','BYTE','CASE','CHAR','CONST','CONTINUE','COUNTER',
        -            'DATA_BLOCK','DATE','DATE_AND_TIME','DINT','DIV','DO','DT','DWORD','ELSE','ELSIF',
        -            'EN','END_CASE','END_CONST','END_DATA_BLOCK','END_FOR','END_FUNCTION',
        -            'END_FUNCTION_BLOCK','END_IF','END_LABEL','END_TYPE','END_ORGANIZATION_BLOCK',
        -            'END_REPEAT','END_STRUCT','END_VAR','END_WHILE','ENO','EXIT','FALSE','FOR','FUNCTION',
        -            'FUNCTION_BLOCK','GOTO','IF','INT','LABEL','MOD','NIL','NOT','OF','OK','OR',
        -            'ORGANIZATION_BLOCK','POINTER','PROGRAM','REAL','REPEAT','RETURN','S5TIME','STRING',
        -            'STRUCT','THEN','TIME','TIMER','TIME_OF_DAY','TO','TOD','TRUE','TYPE','VAR',
        -            'VAR_TEMP','UNTIL','VAR_INPUT','VAR_IN_OUT','VAR_OUTPUT','VOID','WHILE','WORD','XOR'
        -            ),
        -        2 =>array(
        -            'UBLKMOV','FILL','CREAT_DB','DEL_DB','TEST_DB','COMPRESS','REPL_VAL','CREA_DBL','READ_DBL',
        -            'WRIT_DBL','CREA_DB','RE_TRIGR','STP','WAIT','MP_ALM','CiR','PROTECT','SET_CLK','READ_CLK',
        -            'SNC_RTCB','SET_CLKS','RTM','SET_RTM','CTRL_RTM','READ_RTM','TIME_TCK','RD_DPARM',
        -            'RD_DPARA','WR_PARM','WR_DPARM','PARM_MOD','WR_REC','RD_REC','RD_DPAR','RDREC','WRREC','RALRM',
        -            'SALRM','RCVREC','PRVREC','SET_TINT','CAN_TINT','ACT_TINT','QRY_TINT','SRT_DINT','QRY_DINT',
        -            'CAN_DINT','MSK_FLT','DMSK_FLT','READ_ERR','DIS_IRT','EN_IRT','DIS_AIRT','EN_AIRT','RD_SINFO',
        -            'RDSYSST','WR_USMSG','OB_RT','C_DIAG','DP_TOPOL','UPDAT_PI','UPDAT_PO','SYNC_PI','SYNC_PO',
        -            'SET','RSET','DRUM','GADR_LGC','LGC_GADR','RD_LGADR','GEO_LOG','LOG_GEO','DP_PRAL','DPSYC_FR',
        -            'D_ACT_DP','DPNRM_DG','DPRD_DAT','DPWR_DAT','PN_IN','PN_OUT','PN_DP','WWW','IP_CONF','GETIO',
        -            'SETIO','GETIO_PART','SETIO_PART','GD_SND','GD_RCV','USEND','URCV','BSEND','BRCV','PUT','GET',
        -            'PRINT','START','STOP','RESUME','STATUS','USTATUS','CONTROL','C_CNTRL','X_SEND','X_RCV',
        -            'X_GET','X_PUT','X_ABORT','I_GET','I_PUT','I_ABORT','TCON','TDISCON','TSEND','TRCV','TUSEND',
        -            'TURCV','NOTIFY','NOTIFY_8P','ALARM','ALARM_8P','ALARM_8','AR_SEND','DIS_MSG','EN_MSG',
        -            'ALARM_SQ','ALARM_S','ALARM_SC','ALARM_DQ','LARM_D','READ_SI','DEL_SI','TP','TON','TOF','CTU',
        -            'CTD','CTUD','CONT_C','CONT_S','PULSEGEN','Analog','DIGITAL','COUNT','FREQUENC','PULSE',
        -            'SEND_PTP','RECV_PTP','RES_RECV','SEND_RK','FETCH_RK','SERVE_RK','H_CTRL','state'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '.', '"', '|', ';', ',', '=>', '>=', '<=', ':=', '=', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #ff6f00;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #009600; font-style: italic;',
        -            'MULTI' => 'color: #009600; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'NUMBERS' => GESHI_NUMBER_INT_BASIC,
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            ' '!!11?>'
        -            ),
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => false,
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php
        deleted file mode 100644
        index 90b06abe..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php
        +++ /dev/null
        @@ -1,163 +0,0 @@
        - 'sdlBasic',
        -    'COMMENT_SINGLE' => array(1 => "'", 2 => "rem", 3 => "!", 4 => "#"),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'const', 'option', 'explicit', 'qbasic', 'include', 'argc',
        -            'argv', 'command', 'command$', 'run', 'shell', 'os', 'declare',
        -            'sub', 'function', 'return', 'while', 'wend', 'exit', 'end',
        -            'continue', 'if', 'then', 'else', 'elseif',
        -            'select', 'case', 'for', 'each', 'step',
        -            'next', 'to', 'dim', 'shared', 'common', 'lbound', 'bound',
        -            'erase', 'asc', 'chr', 'chr$', 'insert', 'insert$', 'instr', 'lcase',
        -            'lcase$', 'left', 'left$', 'len', 'length', 'ltrim', 'ltrim$', 'mid',
        -            'mid$', 'replace', 'replace$', 'replacesubstr', 'replacesubstr$',
        -            'reverse', 'reverse$', 'right', 'right$', 'rinstr', 'rtrim', 'rtrim$',
        -            'space', 'space$', 'str', 'str$', 'strf', 'strf$', 'string', 'string$',
        -            'tally', 'trim', 'trim$', 'typeof', 'typeof$', 'ucase', 'ucase$', 'val',
        -            'abs', 'acos', 'andbit', 'asin', 'atan', 'bitwiseand', 'bitwiseor',
        -            'bitwisexor', 'cos', 'exp', 'fix', 'floor', 'frac', 'hex', 'hex$', 'int',
        -            'log', 'min', 'max', 'orbit', 'randomize', 'rnd', 'round', 'sgn', 'sin',
        -            'sqr', 'tan', 'xorbit', 'open', 'as', 'file', 'input', 'close', 'output',
        -            'append', 'eof', 'fileexists', 'filecopy', 'filemove', 'filerename',
        -            'freefile', 'kill', 'loc', 'lof', 'readbyte', 'rename', 'seek',
        -            'writebyte', 'chdir', 'dir', 'dir$', 'direxists', 'dirfirst', 'dirnext',
        -            'mkdir', 'rmdir', 'print', 'date', 'date$', 'time', 'time$', 'ticks',
        -            'data', 'read', 'reservebank', 'freebank', 'copybank', 'loadbank',
        -            'savebank', 'setbank', 'sizebank', 'poke', 'doke', 'loke', 'peek', 'deek',
        -            'leek', 'memcopy', 'setdisplay', 'setcaption', 'caption', 'displaywidth',
        -            'displayheight', 'displaybpp', 'screen', 'directscreen', 'screenopen',
        -            'screenclose', 'screenclone', 'screencopy', 'screenfade', 'screenfadein',
        -            'screencrossfade', 'screenalpha', 'screenlock', 'screenunlock',
        -            'screenrect', 'xscreenrect', 'yscreenrect', 'wscreenrect', 'hscreenrect',
        -            'flagscreenrect', 'screenwidth', 'screenheight', 'offset', 'xoffset',
        -            'yoffset', 'cls', 'screenswap', 'autoback', 'setautoback',
        -            'dualplayfield', 'waitvbl', 'fps', 'rgb', 'enablepalette', 'color',
        -            'palette', 'colorcycling', 'ink', 'point', 'dot', 'plot', 'line', 'box',
        -            'bar', 'circle', 'fillcircle', 'ellipse', 'fillellipse', 'paint',
        -            'loadimage', 'saveimage', 'loadsound', 'savesound', 'loadmusic',
        -            'hotspot', 'setcolorkey', 'imageexists', 'imagewidth', 'imageheight',
        -            'deleteimage', 'copyimage', 'setalpha', 'zoomimage', 'rotateimage',
        -            'rotozoomimage', 'blt', 'pastebob', 'pasteicon', 'grab', 'spriteclip',
        -            'sprite', 'deletesprite', 'xsprite', 'ysprite', 'spritewidth',
        -            'spriteheight', 'frsprite', 'livesprite', 'spritehit', 'autoupdatesprite',
        -            'updatesprite', 'setbob', 'bob', 'deletebob', 'xbob', 'ybob', 'bobwidth',
        -            'bobheight', 'frbob', 'livebob', 'bobhit', 'autoupdatebob', 'updatebob',
        -            'text', 'setfont', 'textrender', 'pen', 'paper', 'prints', 'locate',
        -            'atx', 'aty', 'curson', 'cursoff', 'inputs', 'zoneinputs',
        -            'isenabledsound', 'soundexists', 'deletesound', 'copysound',
        -            'musicexists', 'playsound', 'volumesound', 'stopsound', 'pausesound',
        -            'resumesound', 'vumetersound', 'positionsound', 'soundchannels',
        -            'playmusic', 'positionmusic', 'stopmusic', 'fademusic', 'pausemusic',
        -            'resumemusic', 'rewindmusic', 'volumemusic', 'speedmusic', 'numdrivescd',
        -            'namecd', 'getfreecd', 'opencd', 'indrivecd', 'trackscd', 'curtrackcd',
        -            'curframecd', 'playcd', 'playtrackscd',
        -            'pausecd', 'resumecd', 'stopcd', 'ejectcd', 'closecd', 'tracktypecd',
        -            'tracklengthcd', 'trackoffsetcd', 'key', 'inkey', 'waitkey', 'xmouse',
        -            'ymouse', 'xmousescreen', 'ymousescreen', 'bmouse', 'changemouse',
        -            'locatemouse', 'mouseshow', 'mousehide', 'mousezone', 'numjoysticks',
        -            'namejoystick', 'numaxesjoystick', 'numballsjoystick', 'numhatsjoystick',
        -            'numbuttonsjoystick', 'getaxisjoystick', 'gethatjoystick',
        -            'getbuttonjoystick', 'xgetballjoystick', 'ygetballjoystick', 'joy',
        -            'bjoy', 'wait', 'timer', 'isenabledsock', 'getfreesock', 'opensock',
        -            'acceptsock', 'isserverready', 'connectsock', 'connectionreadysock',
        -            'isclientready', 'losesock', 'peeksock', 'readsock', 'readbytesock',
        -            'readlinesock', 'writesock', 'writebytesock', 'writelinesock',
        -            'getremoteip', 'getremoteport', 'getlocalip'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;',
        -            2 => 'color: #808080;',
        -            3 => 'color: #808080;',
        -            4 => 'color: #808080;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php
        deleted file mode 100644
        index bd6b4044..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php
        +++ /dev/null
        @@ -1,152 +0,0 @@
        - 'Smalltalk',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('"' => '"'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'"),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'self','super','true','false','nil'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '=' , ':=', '(', ')', '#'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #7f007f;'
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #007f00; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => ''
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7f0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #7f0000;'
        -            ),
        -        'METHODS' => array(
        -            0 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066; font-weight:bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;',
        -            1 => 'color: #7f0000;',
        -            2 => 'color: #7f0000;',
        -            3 => 'color: #00007f;',
        -            5 => 'color: #00007f;',
        -            6 => 'color: #00007f;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(
        -            GESHI_SEARCH => '([^a-zA-Z0-9_#<])([A-Z]+[a-zA-Z0-9_]*)(?!>)', //class names
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        1 => array(
        -            GESHI_SEARCH => '(#+)([a-zA-Z0-9_]+)', //symbols
        -            GESHI_REPLACE => '\\1\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => array(
        -            GESHI_SEARCH => '(#\s*\([^)]*\))', //array symbols
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        3 => array(
        -            GESHI_SEARCH => '([a-zA-Z0-9_\s]+)', //temporary variables
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '|',
        -            GESHI_AFTER => '|'
        -            ),
        -        5 => array(
        -            GESHI_SEARCH => '([:(,=[.*\/+-]\s*(?!\d+\/))([a-zA-Z0-9_]+)', //message parameters, message receivers
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 's',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        6 => array(
        -            GESHI_SEARCH => '([a-zA-Z0-9_]+)(\s*:=)', //assignment targets
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '\\2'
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php
        deleted file mode 100644
        index 5c22415b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php
        +++ /dev/null
        @@ -1,190 +0,0 @@
        - 'Smarty',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('{*' => '*}'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            '$smarty', 'now', 'const', 'capture', 'config', 'section', 'foreach', 'template', 'version', 'ldelim', 'rdelim',
        -            'foreachelse', 'include', 'include_php', 'insert', 'if', 'elseif', 'else', 'php',
        -            'sectionelse', 'is_cached',
        -            ),
        -        2 => array(
        -            'capitalize', 'count_characters', 'cat', 'count_paragraphs', 'count_sentences', 'count_words', 'date_format',
        -            'default', 'escape', 'indent', 'lower', 'nl2br', 'regex_replace', 'replace', 'spacify', 'string_format',
        -            'strip', 'strip_tags', 'truncate', 'upper', 'wordwrap',
        -            ),
        -        3 => array(
        -            'counter', 'cycle', 'debug', 'eval', 'html_checkboxes', 'html_image', 'html_options',
        -            'html_radios', 'html_select_date', 'html_select_time', 'html_table', 'math', 'mailto', 'popup_init',
        -            'popup', 'textformat'
        -            ),
        -        4 => array(
        -            '$template_dir', '$compile_dir', '$config_dir', '$plugins_dir', '$debugging', '$debug_tpl',
        -            '$debugging_ctrl', '$autoload_filters', '$compile_check', '$force_compile', '$caching', '$cache_dir',
        -            '$cache_lifetime', '$cache_handler_func', '$cache_modified_check', '$config_overwrite',
        -            '$config_booleanize', '$config_read_hidden', '$config_fix_newlines', '$default_template_handler_func',
        -            '$php_handling', '$security', '$secure_dir', '$security_settings', '$trusted_dir', '$left_delimiter',
        -            '$right_delimiter', '$compiler_class', '$request_vars_order', '$request_use_auto_globals',
        -            '$error_reporting', '$compile_id', '$use_sub_dirs', '$default_modifiers', '$default_resource_type'
        -            ),
        -        5 => array(
        -            'append', 'append_by_ref', 'assign', 'assign_by_ref', 'clear_all_assign', 'clear_all_cache',
        -            'clear_assign', 'clear_cache', 'clear_compiled_tpl', 'clear_config', 'config_load', 'display',
        -            'fetch', 'get_config_vars', 'get_registered_object', 'get_template_vars',
        -            'load_filter', 'register_block', 'register_compiler_function', 'register_function',
        -            'register_modifier', 'register_object', 'register_outputfilter', 'register_postfilter',
        -            'register_prefilter', 'register_resource', 'trigger_error', 'template_exists', 'unregister_block',
        -            'unregister_compiler_function', 'unregister_function', 'unregister_modifier', 'unregister_object',
        -            'unregister_outputfilter', 'unregister_postfilter', 'unregister_prefilter', 'unregister_resource'
        -            ),
        -        6 => array(
        -            'name', 'file', 'scope', 'global', 'key', 'once', 'script',
        -            'loop', 'start', 'step', 'max', 'show', 'values', 'value', 'from', 'item'
        -            ),
        -        7 => array(
        -            'eq', 'neq', 'ne', 'lte', 'gte', 'ge', 'le', 'not', 'mod'
        -            ),
        -        8 => array(
        -            // some common php functions
        -            'isset', 'is_array', 'empty', 'count', 'sizeof'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '/', '=', '==', '!=', '>', '<', '>=', '<=', '!', '%'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false,
        -        8 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF;',        //Functions
        -            2 => 'color: #008000;',        //Modifiers
        -            3 => 'color: #0600FF;',        //Custom Functions
        -            4 => 'color: #804040;',        //Variables
        -            5 => 'color: #008000;',        //Methods
        -            6 => 'color: #6A0A0A;',        //Attributes
        -            7 => 'color: #D36900;',        //Text-based symbols
        -            8 => 'color: #0600FF;'        //php functions
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #008080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #D36900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #D36900;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #009000;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #00aaff;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://smarty.php.net/{FNAMEL}',
        -        2 => 'http://smarty.php.net/{FNAMEL}',
        -        3 => 'http://smarty.php.net/{FNAMEL}',
        -        4 => 'http://smarty.php.net/{FNAMEL}',
        -        5 => 'http://smarty.php.net/{FNAMEL}',
        -        6 => '',
        -        7 => 'http://smarty.php.net/{FNAMEL}',
        -        8 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        // variables
        -        0 => '\$[a-zA-Z][a-zA-Z0-9_]*'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            '{' => '}'
        -            ),
        -        1 => array(
        -            '',
        -        ),
        -        2 => array(
        -            '<' => '>'
        -            )
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => false,
        -        2 => false
        -    ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?|^])",
        -            'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-&])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php
        deleted file mode 100644
        index 4999e788..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php
        +++ /dev/null
        @@ -1,127 +0,0 @@
        - 'SPARK',
        -    'COMMENT_SINGLE' => array(1 => '--', 2 => '--#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'begin', 'declare', 'do', 'else', 'elsif', 'exception', 'for', 'if',
        -            'is', 'loop', 'while', 'then', 'end', 'select', 'case', 'until',
        -            'goto', 'return'
        -            ),
        -        2 => array(
        -            'abs', 'and', 'at', 'mod', 'not', 'or', 'rem', 'xor'
        -            ),
        -        3 => array(
        -            'abort', 'abstract', 'accept', 'access', 'aliased', 'all', 'array',
        -            'body', 'constant', 'delay', 'delta', 'digits', 'entry', 'exit',
        -            'function', 'generic', 'in', 'interface', 'limited', 'new', 'null',
        -            'of', 'others', 'out', 'overriding', 'package', 'pragma', 'private',
        -            'procedure', 'protected', 'raise', 'range', 'record', 'renames',
        -            'requeue', 'reverse', 'separate', 'subtype', 'synchronized',
        -            'tagged', 'task', 'terminate', 'type', 'use', 'when', 'with'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #00007f;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #46aa03; font-weight:bold;',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -            2 => 'color: #adadad; font-style: italic; font-weight: bold;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7f007f;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php
        deleted file mode 100644
        index feb1f983..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php
        +++ /dev/null
        @@ -1,153 +0,0 @@
        - 'SPARQL',
        -    'COMMENT_SINGLE' => array('#'),
        -    'COMMENT_MULTI' => array('/*' => '*/' ),
        -    'COMMENT_REGEXP' => array(
        -        //IRI (it's not a comment ;)
        -        1 => "/<[^> ]*>/i"
        -        ),
        -    'CASE_KEYWORDS' => 1,
        -    'QUOTEMARKS' => array("'", '"', '`'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'BASE','PREFIX','SELECT','DISTINCT','REDUCED','CONSTRUCT','DESCRIBE','ASK','FROM',
        -            'NAMED','WHERE','ORDER','BY','ASC','DESC','LIMIT','OFFSET','OPTIONAL','GRAPH',
        -            'UNION','FILTER','STR','LANG','LANGMATCHES','DATATYPE','BOUND','SAMETERM',
        -            'ISIRI','ISURI','ISBLANK',
        -            'ISLITERAL','REGEX','SUBSTR','TRUE',
        -            'FALSE','LOAD','CLEAR',
        -            'DROP','ADD','MOVE','COPY',
        -            'CREATE','DELETE','INSERT',
        -            'USING','SILENT','DEFAULT','ALL',
        -            'DATA','WITH','INTO','TO',
        -            'AS','GROUP','HAVING','UNDEF',
        -            'BINDINGS','SERVICE','BIND','MINUS_KEYWORD',
        -            'IRI','URI', 'BNODE',
        -            'RAND','ABS','CEIL','FLOOR','ROUND',
        -            'CONCAT','STRLEN',
        -            'UCASE','LCASE','ENCODE_FOR_URI',
        -            'CONTAINS','STRSTARTS',
        -            'STRENDS','STRBEFORE',
        -            'STRAFTER','REPLACE',
        -            'YEAR','MONTH',
        -            'DAY','HOURS',
        -            'MINUTES','SECONDS',
        -            'TIMEZONE','TZ',
        -            'NOW','MD5',
        -            'SHA1','SHA224',
        -            'SHA256','SHA384',
        -            'SHA512','COALESCE',
        -            'IF','STRLANG','STRDT',
        -            'ISNUMERIC','COUNT',
        -            'SUM','MIN',
        -            'MAX','AVG','SAMPLE',
        -            'GROUP_CONCAT ','NOT',
        -            'IN','EXISTS','SEPARATOR'
        -            )
        -        ),
        -    'REGEXPS' => array(
        -        //Variables without braces
        -        1 => "\\?[a-zA-Z_][a-zA-Z0-9_]*",
        -        //prefix
        -        2 => "[a-zA-Z_.\\-0-9]*:",
        -        //tag lang
        -        3 => "@[^ .)}]*",
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '{', '}' , '.', ';'
        -            ),
        -        1 => array(
        -            '^^',
        -            '<=','>=','!=','=','<','>','|',
        -            '&&','||',
        -            '(',')','[', ']',
        -            '+','-','*','!','/'
        -            ),
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #993333; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #808080; font-style: italic;',
        -            1 => 'color: #000078;',
        -            //2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF63C3;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #0000FF;',
        -            1 => 'color: #FF8000; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(),
        -        'REGEXPS' => array(
        -            1 => 'color: #007800;',
        -            2 => 'color: #780078;',
        -            3 => 'color: #005078;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php
        deleted file mode 100644
        index 47c50328..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php
        +++ /dev/null
        @@ -1,168 +0,0 @@
        - 'SQL',
        -    'COMMENT_SINGLE' => array(1 =>'--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => 1,
        -    'QUOTEMARKS' => array("'", '"', '`'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'ADD', 'ALL', 'ALTER', 'AND', 'AS', 'ASC', 'AUTO_INCREMENT',
        -            'BEFORE', 'BEGIN', 'BETWEEN', 'BIGINT', 'BINARY', 'BLOB', 'BOOLEAN', 'BOTH', 'BY',
        -            'CALL', 'CASE', 'CAST', 'CEIL', 'CEILING', 'CHANGE', 'CHAR', 'CHAR_LENGTH', 'CHARACTER',
        -            'CHARACTER_LENGTH', 'CHECK', 'CLOB', 'COALESCE', 'COLLATE', 'COLUMN', 'COLUMNS',
        -            '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',
        -            'DOMAIN', 'DROP',
        -            'ELSE', 'ENCLOSED', 'END', 'ESCAPED', 'EXCEPT', 'EXEC', 'EXECUTE', 'EXISTS', 'EXP',
        -            'EXPLAIN', 'EXTRACT',
        -            'FALSE', 'FIELD', 'FIELDS', 'FILTER', 'FIRST', 'FLOAT', 'FLOOR', 'FLUSH', 'FOR',
        -            'FOREIGN', 'FROM', 'FULL', 'FUNCTION',
        -            'GET', 'GROUP', 'GROUPING', 'GO', 'GOTO', 'GRANT', 'GRANTED',
        -            'HAVING', 'HOUR',
        -            'IDENTIFIED', 'IDENTITY', 'IF', 'IGNORE', 'IN', 'INCREMENT', 'INDEX', 'INFILE', 'INNER',
        -            'INOUT', 'INPUT', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERSECTION', 'INTERVAL',
        -            'INTO', 'IS',
        -            'JOIN',
        -            'KEY', 'KEYS', 'KILL',
        -            'LANGUAGE', 'LARGE', 'LAST', 'LEADING', 'LEFT', 'LENGTH', 'LIKE', 'LIMIT', 'LINES', 'LOAD',
        -            'LOCAL', 'LOCK', 'LOW_PRIORITY', 'LOWER',
        -            'MATCH', 'MAX', 'MERGE', 'MIN', 'MINUTE', 'MOD', 'MODIFIES', 'MODIFY', 'MONTH',
        -            'NATIONAL', 'NATURAL', 'NCHAR', 'NEW', 'NEXT', 'NEXTVAL', 'NONE', 'NOT',
        -            'NULL', 'NULLABLE', 'NULLIF', 'NULLS', 'NUMBER', 'NUMERIC',
        -            'OF', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPTIMIZE', 'OPTION',
        -            'OPTIONALLY', 'OR', 'ORDER', 'OUT', 'OUTER', 'OUTFILE', 'OVER',
        -            'POSITION', 'POWER', 'PRECISION', 'PREPARE', 'PRIMARY', 'PROCEDURAL', 'PROCEDURE',
        -            'READ', 'REAL', 'REF', 'REFERENCES', 'REFERENCING', 'REGEXP', 'RENAME', 'REPLACE',
        -            'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'RLIKE', 'ROLLBACK', 'ROW',
        -            'ROW_NUMBER', 'ROWS', 'RESTRICT', 'ROLE', 'ROUTINE', 'ROW_COUNT',
        -            'SAVEPOINT', 'SEARCH', 'SECOND', 'SECTION', 'SELECT', 'SELF', 'SEQUENCE',
        -            'SESSION', 'SET', 'SETVAL', 'SHOW', 'SIMILAR', 'SIZE', 'SMALLINT', 'SOME',
        -            'SONAME', 'SOURCE', 'SPACE', 'SQL', 'SQRT', 'START', 'STATUS',
        -            'STRAIGHT_JOIN', 'STRUCTURE', 'STYLE', 'SUBSTRING', 'SUM',
        -            'TABLE', 'TABLE_NAME', 'TABLES', 'TERMINATED', 'TEMPORARY', 'THEN', 'TIME',
        -            'TIMESTAMP', 'TO', 'TRAILING', 'TRANSACTION', 'TRIGGER', 'TRIM', 'TRUE', 'TRUNCATE',
        -            'TRUSTED', 'TYPE',
        -            'UNDER', 'UNION', 'UNIQUE', 'UNKNOWN', 'UNLOCK', 'UNSIGNED',
        -            'UPDATE', 'UPPER', 'USE', 'USER', 'USING',
        -            'VALUE', 'VALUES', 'VARCHAR', 'VARIABLES', 'VARYING', 'VIEW',
        -            'WHEN', 'WHERE', 'WITH', 'WITHIN', 'WITHOUT', 'WORK', 'WRITE',
        -            'XOR',
        -            'YEAR',
        -            'ZEROFILL'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '=', '<', '>', '|', ',', '.', '+', '-', '*', '/'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #993333; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            //2 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array( //'
        -            'DISALLOWED_BEFORE' => "(? 'StandardML',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array('(*' => '*)'),
        -    'COMMENT_REGEXP' => array(1 => '/\(\*(?:(?R)|.)+?\*\)/s'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'NUMBERS' =>
        -        array(
        -            /* integer dec */
        -            0 => GESHI_NUMBER_INT_BASIC,
        -            /* integer hex */
        -            1 => GESHI_NUMBER_HEX_PREFIX,
        -            /* real */
        -            2 => GESHI_NUMBER_FLT_SCI_ZERO,
        -            /* word dec */
        -            3 => '(? '(? array(
        -        /* main SML keywords */
        -        1 => array(
        -            /* deprecated: SML90 */
        -            'abstype',
        -
        -            'and', 'andalso', 'as', 'begin', 'case', 'datatype', 'else',
        -            'end', 'exception', 'fn', 'fun', 'functor',
        -            'if', 'in', 'infix', 'infixr', 'include', 'let', 'local', 'nonfix',
        -            'of', 'op', 'open', 'orelse',
        -            'rec', 'raise', 'sharing', 'sig', 'signature', 'struct', 'structure', 'then',
        -            'type', 'val', 'while', 'where', 'with', 'withtype'
        -            ),
        -        /* Top-level type and constructors */
        -        2 => array(
        -            'unit', 'int', 'word', 'real', 'char', 'string', 'substring', 'exn',
        -            'array', 'vector', 'bool', 'option',
        -            'list'
        -            ),
        -        /* standard structures/signatures/functors provided by Basis library */
        -        3 => array(
        -            'ARRAY', 'Array', 'Array2', 'ARRAY2', 'ArraySlice', 'ARRAY_SLICE',
        -            'BinIO', 'BIT_FLAGS', 'Bool', 'BOOL', 'Byte', 'CHAR', 'Char',
        -            'CommandLine', 'Date', 'General', 'GenericSock', 'IEEEReal', 'IMPERATIVE_IO',
        -            'ImperativeIO', 'INetSock', 'INTEGER', 'Int', 'IntInf', 'IO', 'List', 'ListPair',
        -            'MATH', 'MONO_ARRAY', 'MONO_ARRAY2', 'MONO_ARRAY_SLICE', 'MONO_VECTOR',
        -            'MONO_VECTOR_SLICE', 'NetHostDB', 'NetProtDB', 'NetServDB', 'Option',
        -            'OS', 'OS.FileSys', 'OS.IO', 'OS.Path', 'OS.Process', 'PACK_REAL', 'PACK_WORD',
        -            'Posix', 'Posix.Error', 'Posix.FileSys', 'Posix.IO', 'Posix.ProcEnv', 'Posix.Process',
        -            'Posix.Signal', 'Posix.SysDB', 'Posix.TTY', 'PRIM_IO', 'PrimIO', 'REAL', 'Real', 'Socket',
        -            'STREAM_IO', 'StreamIO', 'STRING', 'String', 'StringCvt', 'SUBSTRING', 'Substring', 'TEXT', 'TEXT_IO',
        -            'TEXT_STREAM_IO', 'Time', 'Timer', 'Unix', 'UnixSock', 'VECTOR', 'Vector', 'VECTOR_SLICE',
        -            'Windows', 'WORD', 'Word'
        -            ),
        -        /* Top-level value identifiers / constructors */
        -        4 => array(
        -            'app', 'before', 'ceil', 'chr', 'concat', 'exnMessage', 'exnName', 'explode',
        -            'floor', 'foldl', 'foldr', 'getOpt', 'hd', 'ignore', 'implode', 'isSome', 'length', 'map', 'not',
        -            'null', 'o', 'ord', 'print', 'rev', 'round', 'size', 'str', 'tl', 'trunc',
        -            'use', 'valOf',
        -            /* constructors */
        -            'ref', 'true', 'false', 'NONE', 'SOME', 'LESS', 'EQUAL', 'GREATER', 'nil',
        -            /* overloaded identifiers */
        -            'div', 'mod', 'abs'
        -            ),
        -        /* standard exceptions */
        -        5 => array (
        -            'Bind', 'Chr', 'Div', 'Domain', 'Empty', 'Fail', 'Match', 'Overflow', 'Size', 'Span', 'Subscript'
        -            ),
        -        /* implementation dependent keyword (not be sorted) */
        -        6 => array (
        -            /** SML/NJ */
        -            /* functor signature > http://www.smlnj.org/doc/features.html */
        -            'funsig',
        -            /* lazy evaluation */
        -            'lazy',
        -            /** SML# */
        -            /* binding to C function */
        -            '_import',
        -            /* read other source */
        -            '_require',
        -            /* export aggregated interface files */
        -            'include',
        -            /* integrated sql */
        -            '_sqlserver', '_sql', 'from', 'where', '_sqleval', '_sqlexec',
        -            'select', 'insert', 'update', 'begin', 'commit', 'rollback',
        -            'values', 'delete'
        -            )
        -        ),
        -    /* highlighting symbols */
        -    'SYMBOLS' => array(
        -        0 => array('=', ':', ':>', '=>', '(', ')', '|', '_', '==', ';', '.'),
        -        1 => array('!', ':=', '@', '^'),
        -        2 => array('[', ']', '::', '{', '}'),
        -        /* overloaded identifiers */
        -        3 => array('+', '-', '*', '/', '~', '<', '>', '<=', '>=')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true, /* keywords */
        -        2 => true, /* top level types */
        -        3 => true, /* structures */
        -        4 => true, /* top level identifiers */
        -        5 => true, /* top level exceptions */
        -        6 => true  /* implementation dependent keyword */
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #557cde; font-weight: bold;',
        -            2 => 'color: #8dda4a; font-weight: bold;',
        -            3 => 'color: #0066cc; font-weight: bold;',
        -            4 => 'color: #5c8cbb;',
        -            5 => 'color: #f33e64; font-weight: bold;',
        -            6 => 'color: #f33e64;'
        -            ),
        -        'COMMENTS' => array(
        -            'MULTI' => 'color: #5d478b; font-style: italic;', /* light purple */
        -            1 => 'color: #5d478b; font-style: italic;' /* light purple */
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #79c200;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #488614;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #fb7600;',
        -            1 => 'color: #fb7600;',
        -            2 => 'color: #fb7600;',
        -            3 => 'color: #fb7600;',
        -            4 => 'color: #fb7600;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0066cc;'
        -            ),
        -        'REGEXPS' => array(
        -            1 => 'font-style:italic; color:#9f7eff;',
        -            2 => 'font-weight:bold; color:#8dda4a;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #ff4bcf;',
        -            1 => 'color: #ff4bcf; font-weight: bold;', // pink
        -            2 => 'color: #90f963;', // orange
        -            3 => 'color: #fa5bf8;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => 'http://www.standardml.org/Basis/top-level-chapter.html',
        -        3 => '',
        -        4 => '',
        -        5 => 'http://www.standardml.org/Basis/top-level-chapter.html#section:2',
        -        6 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        1 => '(? '(?:(? GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php
        deleted file mode 100644
        index e1697d88..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php
        +++ /dev/null
        @@ -1,305 +0,0 @@
        - 'StoneScript',
        -    'COMMENT_SINGLE' => array(1 => "--"),
        -    'COMMENT_MULTI' => array("--[[" => "]]"),
        -    'COMMENT_REGEXP' => array(
        -        4 => '/<<\s*?(\w+)\\n.*?\\n\\1(?![a-zA-Z0-9])/si',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '`','\''),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        // Blue - General Keywords
        -        1 => array(
        -                'and', 'begin', 'break', 'do', 'else', 'elseif', 'end',
        -                'for', 'if', 'in', 'while', 'next', 'not', 'or', 'redo',
        -                'then', 'unless', 'until', 'when', 'false', 'nil', 'self',
        -                'true', 'local', 'this', 'return',
        -            ),
        -        // Dark Blue - Main API names
        -        2 => array(
        -                'animation', 'application', 'cache', 'camera', 'debug',
        -                'dynamics', 'group', 'hashtable', 'hud', 'input', 'light',
        -                'log', 'math', 'mesh', 'microphone', 'music', 'navigation',
        -                'network', 'object', 'pixelmap', 'projector', 'scene',
        -                'sensor', 'server', 'session', 'sfx', 'shape', 'sound',
        -                'string', 'system', 'table', 'user', 'video', 'xml',
        -                // Plugin API names
        -                'plasma', 'watersim',
        -                'winDirectories',
        -                'ActionSheet', 'Alert', 'Mail', 'Picker', 'StatusBar',
        -            ),
        -        // Constants
        -        // Can be commented out if performance is crucial -> then these keywords will appear in a slightly lighter color
        -        3 => array(
        -                //Animation
        -                'kPlaybackModeLoop', 'kPlaybackModeLoopMirrored', 'kPlaybackModeLoopReversed',
        -                'kPlaybackModeOnce', 'kPlaybackModeOnceReversed',
        -                //Application - Environment
        -                'kStatusLoading', 'kStatusReady', 'kStatusSaving', // 'kStatusNone'
        -                //Application - Options
        -                'kOptionAudioMasterVolume', 'kOptionAutomaticVirtualKeyboard', 'kOptionDynamicShadowsBufferCount',
        -                'kOptionDynamicShadowsBufferSize', 'kOptionDynamicShadowsConstantSampling', 'kOptionDynamicShadowsPCFSampleCount',
        -                'kOptionDynamicShadowsQuality', 'kOptionDynamicShadowsScreenSpaceBlur', 'kOptionFullscreen',
        -                'kOptionFullscreenHeight', 'kOptionFullscreenWidth', 'kOptionHardwareOcclusion',
        -                'kOptionMaxEventBouncesPerFrame', 'kOptionNetworkStreams', 'kOptionNetworkStreamsUseBrowser',
        -                'kOptionPrioritizeEventBounces', 'kOptionRenderingEnabled', 'kOptionShadersQuality',
        -                'kOptionSwapInterval', 'kOptionTerrainsQuality', 'kOptionTexturesAnisotropyLevel',
        -                'kOptionTexturesMipmapBias', 'kOptionTexturesQuality', 'kOptionViewportRotation',
        -                //Application - Resource Types
        -                'kResourceTypeAnimBank', 'kResourceTypeFont', 'kResourceTypeHUD',
        -                'kResourceTypeMaterial', 'kResourceTypeMesh', 'kResourceTypeParticle',
        -                'kResourceTypePixelMap', 'kResourceTypeSoundBank', 'kResourceTypeTexture',
        -                'kResourceTypeTextureClip', 'kResourceTypeTrail',
        -                //Cache
        -                'kPropertyHeight', 'kPropertySize', 'kPropertyWidth',
        -                //Dynamics
        -                'kAxisX', 'kAxisY', 'kAxisZ',
        -                'kTypeBox', 'kTypeCapsule', 'kTypeSphere',
        -                //HUD
        -                'kAddressingModeClamp', 'kAddressingModeRepeat', 'kAlignCenter', 'kAlignJustify','kAlignLeft', 'kAlignRight',
        -                'kAlignTop', 'kBlendModeAdd', 'kBlendModeDefault', 'kBlendModeModulate', 'kCaseFixed', 'kCaseVariable',
        -                'kCommandTypeCallAction', 'kCommandTypeCopyCheckStateToRegister', 'kCommandTypeCopyEditTextToRegister',
        -                'kCommandTypeCopyListItemTextToRegister', 'kCommandTypeCopyListLastSelectedItemToRegister',
        -                'kCommandTypeCopyProgressValueToRegister', 'kCommandTypeCopySliderValueToRegister', 'kCommandTypeCopyTagToRegister',
        -                'kCommandTypeEnterModalMode', 'kCommandTypeInterpolateBackgroundColor', 'kCommandTypeInterpolateBorderColor',
        -                'kCommandTypeInterpolateForegroundColor', 'kCommandTypeInterpolateHeight', 'kCommandTypeInterpolateOpacity',
        -                'kCommandTypeInterpolatePosition', 'kCommandTypeInterpolateProgressValue', 'kCommandTypeInterpolateRotation',
        -                'kCommandTypeInterpolateSize', 'kCommandTypeInterpolateWidth', 'kCommandTypeLeaveModalMode',
        -                'kCommandTypeMatchScreenSpaceBottomLeftCorner', 'kCommandTypeMatchScreenSpaceBottomRightCorner',
        -                'kCommandTypeMatchScreenSpaceCenter', 'kCommandTypeMatchScreenSpaceHeight', 'kCommandTypeMatchScreenSpaceTopLeftCorner',
        -                'kCommandTypeMatchScreenSpaceTopRightCorner', 'kCommandTypeMatchScreenSpaceWidth', 'kCommandTypePauseMovie',
        -                'kCommandTypePauseSound', 'kCommandTypePauseTimer', 'kCommandTypePlayMovie', 'kCommandTypePlaySound',
        -                'kCommandTypePlaySoundLoop', 'kCommandTypeResumeSound', 'kCommandTypeSendEventToUser', 'kCommandTypeSetActive',
        -                'kCommandTypeSetBackgroundColor', 'kCommandTypeSetBackgroundImage', 'kCommandTypeSetBackgroundImageUVOffset',
        -                'kCommandTypeSetBackgroundImageUVScale', 'kCommandTypeSetBorderColor', 'kCommandTypeSetButtonText',
        -                'kCommandTypeSetCheckState', 'kCommandTypeSetCheckText', 'kCommandTypeSetCursorPosition', 'kCommandTypeSetCursorVisible',
        -                'kCommandTypeSetEditText', 'kCommandTypeSetFocus', 'kCommandTypeSetForegroundColor', 'kCommandTypeSetHeight',
        -                'kCommandTypeSetLabelText', 'kCommandTypeSetOpacity', 'kCommandTypeSetPosition', 'kCommandTypeSetRotation',
        -                'kCommandTypeSetSize', 'kCommandTypeSetVisible', 'kCommandTypeSetWidth', 'kCommandTypeSleep', 'kCommandTypeStartTimer',
        -                'kCommandTypeStopAction', 'kCommandTypeStopMovie', 'kCommandTypeStopSound', 'kCommandTypeStopTimer',
        -                'kComponentTypeButton', 'kComponentTypeCheck', 'kComponentTypeContainer', 'kComponentTypeEdit', 'kComponentTypeLabel',
        -                'kComponentTypeList', 'kComponentTypeMovie', 'kComponentTypePicture', 'kComponentTypePixelMap', 'kComponentTypeProgress',
        -                'kComponentTypeRenderMap', 'kComponentTypeSlider', 'kCursorShapeCross', 'kCursorShapeDefault', 'kCursorShapeHandPointing',
        -                'kCursorShapeIBeam', 'kCursorShapeNone', 'kCursorShapeWaiting', 'kDirectionLeftToRight', 'kDirectionRightToLeft',
        -                'kEncodingASCII', 'kEncodingUTF8', 'kEventTypeGainFocus', 'kEventTypeLooseFocus', 'kEventTypeMouseEnter',
        -                'kEventTypeMouseLeave', 'kFillModeSolid', 'kInterpolatorTypeLinear', 'kInterpolatorTypePower2', 'kInterpolatorTypePower3',
        -                'kInterpolatorTypePower4', 'kInterpolatorTypeRoot2', 'kInterpolatorTypeRoot3', 'kInterpolatorTypeRoot4',
        -                'kInterpolatorTypeSpring1', 'kInterpolatorTypeSpring2', 'kInterpolatorTypeSpring3', 'kInterpolatorTypeSpring4',
        -                'kInterpolatorTypeSpring5', 'kInterpolatorTypeSpring6',
        -                'kOriginBottom', 'kOriginBottomLeft', 'kOriginBottomRight', 'kOriginCenter', 'kOriginLeft', 'kOriginRight',
        -                'kOriginTop', 'kOriginTopLeft', 'kOriginTopRight', 'kProgressTypeBottomToTop', 'kProgressTypeLeftToRight',
        -                'kProgressTypeRightToLeft', 'kProgressTypeTopToBottom', 'kRuntimeValueCallArgument0', 'kRuntimeValueCallArgument1',
        -                'kRuntimeValueCallArgument2', 'kRuntimeValueCallArgument3', 'kRuntimeValueCurrentUser', 'kRuntimeValueCurrentUserMainCamera',
        -                'kRuntimeValueRegister0', 'kRuntimeValueRegister1', 'kRuntimeValueRegister2', 'kRuntimeValueRegister3',
        -                'kShapeTypeEllipsoid', 'kShapeTypeRectangle', 'kShapeTypeRoundRectangle', 'kSliderTypeBottomToTop',
        -                'kSliderTypeLeftToRight', 'kSliderTypeRightToLeft', 'kSliderTypeTopToBottom', 'kWaveTypeConstant',
        -                'kWaveTypeSawtooth', 'kWaveTypeSawtoothInv', 'kWaveTypeSinus', 'kWaveTypeSinusNoise', 'kWaveTypeSquare', 'kWaveTypeTriangle',
        -                //Input
        -                'kJoypadTypeIPhone', 'kJoypadTypeNone', 'kJoypadTypePhone', 'kJoypadTypeStandard', 'kJoypadTypeWiimote',
        -                'kKey0', 'kKey1', 'kKey2', 'kKey3', 'kKey4', 'kKey5', 'kKey6', 'kKey7', 'kKey8', 'kKey9', 'kKeyA', 'kKeyB',
        -                'kKeyBackspace', 'kKeyC', 'kKeyD', 'kKeyDelete', 'kKeyDown', 'kKeyE', 'kKeyEnd', 'kKeyEscape', 'kKeyF',
        -                'kKeyF1', 'kKeyF10', 'kKeyF11', 'kKeyF12', 'kKeyF2', 'kKeyF3', 'kKeyF4', 'kKeyF5', 'kKeyF6', 'kKeyF7',
        -                'kKeyF8', 'kKeyF9', 'kKeyG', 'kKeyH', 'kKeyHome', 'kKeyI', 'kKeyInsert', 'kKeyJ', 'kKeyK', 'kKeyL',
        -                'kKeyLAlt', 'kKeyLControl', 'kKeyLeft', 'kKeyLShift', 'kKeyM', 'kKeyN', 'kKeyO', 'kKeyP', 'kKeyPageDown',
        -                'kKeyPageUp', 'kKeyQ', 'kKeyR', 'kKeyRAlt', 'kKeyRControl', 'kKeyReturn', 'kKeyRight', 'kKeyRShift',
        -                'kKeyS', 'kKeySpace', 'kKeyT', 'kKeyTab', 'kKeyU', 'kKeyUp', 'kKeyV', 'kKeyW', 'kKeyX', 'kKeyY',
        -                'kKeyZ', 'kJoypadButtonPSPCircle', 'kJoypadButtonPSPCross', 'kJoypadButtonPSPDown', 'kJoypadButtonPSPL',
        -                'kJoypadButtonPSPLeft', 'kJoypadButtonPSPR', 'kJoypadButtonPSPRight', 'kJoypadButtonPSPSelect',
        -                'kJoypadButtonPSPSquare', 'kJoypadButtonPSPStart', 'kJoypadButtonPSPTriangle', 'kJoypadButtonPSPUp',
        -                'kJoypadTypePSP', 'kJoypadButtonWiimoteA', 'kJoypadButtonWiimoteB', 'kJoypadButtonWiimoteC',
        -                'kJoypadButtonWiimoteDown', 'kJoypadButtonWiimoteHome', 'kJoypadButtonWiimoteLeft',
        -                'kJoypadButtonWiimoteMinus', 'kJoypadButtonWiimoteOne', 'kJoypadButtonWiimotePlus',
        -                'kJoypadButtonWiimoteRight', 'kJoypadButtonWiimoteTwo', 'kJoypadButtonWiimoteUp', 'kJoypadButtonWiimoteZ',
        -                //Light
        -                'kTypeDirectional', 'kTypePoint',
        -                //Math
        -                'kEpsilon', 'kInfinity', 'kPi',
        -                //Mesh
        -                'kLockModeRead', 'kLockModeWrite', 'kLockReadWrite',
        -                //Network
        -                'kBluetoothServerPort', 'kDefaultServerPort', 'kStatusAuthenticated', 'kStatusSearchFinished', // 'kStatusNone', 'kStatusPending',
        -                //Object
        -                'kControllerTypeAI', 'kControllerTypeAnimation', 'kControllerTypeAny', 'kControllerTypeDynamics',
        -                'kControllerTypeNavigation', 'kControllerTypeSound', 'kGlobalSpace', 'kLocalSpace', 'kParentSpace',
        -                'kTransformOptionInheritsParentRotation', 'kTransformOptionInheritsParentScale', 'kTransformOptionInheritsParentTranslation',
        -                'kTransformOptionTranslationAffectedByParentRotation', 'kTransformOptionTranslationAffectedByParentScale', 'kTypeCamera',
        -                'kTypeCollider', 'kTypeDummy', 'kTypeGroup', 'kTypeLight', 'kTypeOccluder', 'kTypeProjector', 'kTypeReflector',
        -                'kTypeSensor', 'kTypeSfx', 'kTypeShape',
        -                //Pixelmap
        -                'kBlendModeDecal', 'kBlendModeReplace', 'kFillModeBrush', 'kFillModeNone', 'kPenModeBrush', // 'kFillModeSolid',
        -                'kPenModeNone', 'kPenModeSolid',
        -                //Projector
        -                'kMapTypeMovie', 'kMapTypePixelMap', 'kMapTypeRenderMap', 'kMapTypeTexture', 'kMapTypeTextureClip',
        -                //Scene
        -                'kFilteringModeBilinear', 'kFilteringModeNearest', 'kFilteringModeTrilinear', // 'kAddressingModeClamp', 'kAddressingModeRepeat',
        -                'kSkyBoxFaceBack', 'kSkyBoxFaceBottom', 'kSkyBoxFaceFront', 'kSkyBoxFaceLeft', 'kSkyBoxFaceRight', 'kSkyBoxFaceTop',
        -                //Sensor
        -                'kShapeTypeBox', 'kShapeTypeSphere',
        -                //Server
        -                'kStatusConnected', 'kStatusNone', 'kStatusPending',
        -                //Session - duplicate keywords
        -                //'kStatusConnected', 'kStatusNone', 'kStatusPending',
        -                //Shape
        -                'kMapTypeUnknown', 'kCurveTypeBezier', 'kCurveTypeBSpline', 'kCurveTypeCatmullRom', 'kCurveTypePolyLine',
        -                // 'kMapTypeMovie', 'kMapTypePixelMap', 'kMapTypeRenderMap', 'kMapTypeTexture',  'kMapTypeTextureClip',
        -
        -                //System
        -                'kOSType3DS', 'kOSTypeBada', 'kOSTypeBrew', 'kOSTypePalm', 'kOSTypePS3',
        -                'kClientTypeEditor', 'kClientTypeEmbedded', 'kClientTypeStandalone',
        -                'kGPUCapabilityBloomFilterSupport', 'kGPUCapabilityContrastFilterSupport', 'kGPUCapabilityDepthBlurFilterSupport',
        -                'kGPUCapabilityDistortionFilterSupport', 'kGPUCapabilityDynamicShadowsSupport', 'kGPUCapabilityHardwareOcclusionSupport',
        -                'kGPUCapabilityHardwareRenderingSupport', 'kGPUCapabilityMonochromeFilterSupport', 'kGPUCapabilityMotionBlurFilterSupport',
        -                'kGPUCapabilityPixelShaderSupport', 'kGPUCapabilityVelocityBlurFilterSupport', 'kGPUCapabilityVertexShaderSupport',
        -                'kLanguageAlbanian', 'kLanguageArabic', 'kLanguageBulgarian', 'kLanguageCatalan', 'kLanguageCzech', 'kLanguageDanish',
        -                'kLanguageDutch', 'kLanguageEnglish', 'kLanguageFinnish', 'kLanguageFrench', 'kLanguageGerman', 'kLanguageGreek',
        -                'kLanguageHebrew', 'kLanguageHungarian', 'kLanguageIcelandic', 'kLanguageItalian', 'kLanguageJapanese', 'kLanguageKorean',
        -                'kLanguageNorwegian', 'kLanguagePolish', 'kLanguagePortuguese', 'kLanguageRomanian', 'kLanguageRussian',
        -                'kLanguageSerboCroatian', 'kLanguageSlovak', 'kLanguageSpanish', 'kLanguageSwedish', 'kLanguageThai',
        -                'kLanguageTurkish', 'kLanguageUnknown', 'kLanguageUrdu', 'kOSTypeAndroid', 'kOSTypeAngstrom', 'kOSTypeIPhone',
        -                'kOSTypeLinux', 'kOSTypeMac', 'kOSTypePSP', 'kOSTypeSymbian', 'kOSTypeWii', 'kOSTypeWindows', 'kOSTypeWindowsCE',
        -            ),
        -        // Not used yet
        -        4 => array(
        -                'dummycommand',
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
        -        '+', '-', '=>', '<<'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color:#0000FF; font-weight:bold;',
        -            2 => 'color:#000088; font-weight:bold;',
        -            3 => 'color:#C088C0; font-weight:bold;',
        -            4 => 'color:#00FEFE; font-weight:bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color:#008000; font-style:italic;',
        -            4 => 'color: #cc0000; font-style: italic;',
        -            'MULTI' => 'color:#008000; font-style:italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color:#000099;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color:#000000; font-weight:bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color:#888800;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color:#AA0000;'
        -            ),
        -        // names after "."
        -        'METHODS' => array(
        -            1 => 'color:#FF00FF; font-weight:bold;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color:#000000; font-weight:bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color:#ff6633; font-weight:bold;',
        -            1 => 'color:#0066ff; font-weight:bold;',
        -            2 => 'color:#6666ff; font-weight:bold;',
        -            3 => 'color:#ff3333; font-weight:bold;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(//Variables
        -            GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        1 => array(//Arrays
        -            GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*",//Static OOP symbols
        -        3 => array(
        -            GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => array(
        -            '<%' => '%>'
        -            )
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        ),
        -    'TAB_WIDTH' => 2
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php
        deleted file mode 100644
        index 125b8c16..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php
        +++ /dev/null
        @@ -1,315 +0,0 @@
        -.
        - *
        - ************************************************************************
        - * Title:        SystemVerilog Language Keywords File for GeSHi
        - * Description:  This file contains the SV keywords defined in the
        - *               IEEE1800-2009 Draft Standard in the format expected by
        - *               GeSHi.
        - *
        - * Original Author: Sean O'Boyle
        - * Contact:         seanoboyle@intelligentdv.com
        - * Company:         Intelligent Design Verification
        - * Company URL:     http://intelligentdv.com
        - *
        - * Download the most recent version here:
        - *                  http://intelligentdv.com/downloads
        - *
        - * File Bugs Here:  http://bugs.intelligentdv.com
        - *        Project:  SyntaxFiles
        - *
        - * File: systemverilog.php
        - * $LastChangedBy$
        - * $LastChangedDate$
        - * $LastChangedRevision$
        - *
        - ************************************************************************/
        -
        -$language_data = array (
        -    'LANG_NAME' => 'SystemVerilog',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        // system tasks
        -        1 => array(
        -            'acos','acosh','asin','asinh','assertfailoff','assertfailon',
        -            'assertkill','assertnonvacuouson','assertoff','asserton',
        -            'assertpassoff','assertpasson','assertvacuousoff','async$and$array',
        -            'async$and$plane','async$nand$array','async$nand$plane',
        -            'async$nor$array','async$nor$plane','async$or$array',
        -            'async$or$plane','atan','atan2','atanh','bits','bitstoreal',
        -            'bitstoshortreal','cast','ceil','changed','changed_gclk',
        -            'changing_gclk','clog2','cos','cosh','countones','coverage_control',
        -            'coverage_get','coverage_get_max','coverage_merge','coverage_save',
        -            'dimensions','display','displayb','displayh','displayo',
        -            'dist_chi_square','dist_erlang','dist_exponential','dist_normal',
        -            'dist_poisson','dist_t','dist_uniform','dumpall','dumpfile',
        -            'dumpflush','dumplimit','dumpoff','dumpon','dumpports',
        -            'dumpportsall','dumpportsflush','dumpportslimit','dumpportsoff',
        -            'dumpportson','dumpvars','error','exit','exp','falling_gclk',
        -            'fclose','fdisplay','fdisplayb','fdisplayh','fdisplayo','fell',
        -            'fell_gclk','feof','ferror','fflush','fgetc','fgets','finish',
        -            'floor','fmonitor','fmonitorb','fmonitorh','fmonitoro','fopen',
        -            'fread','fscanf','fseek','fstrobe','fstrobeb','fstrobeh','fstrobeo',
        -            'ftell','future_gclk','fwrite','fwriteb','fwriteh','fwriteo',
        -            'get_coverage','high','hypot','increment','info','isunbounded',
        -            'isunknown','itor','left','ln','load_coverage_db','log10','low',
        -            'monitor','monitorb','monitorh','monitoro','monitoroff','monitoron',
        -            'onehot','onehot0','past','past_gclk','pow','printtimescale',
        -            'q_add','q_exam','q_full','q_initialize','q_remove','random',
        -            'readmemb','readmemh','realtime','realtobits','rewind','right',
        -            'rising_gclk','rose','rose_gclk','rtoi','sampled',
        -            'set_coverage_db_name','sformat','sformatf','shortrealtobits',
        -            'signed','sin','sinh','size','sqrt','sscanf','stable','stable_gclk',
        -            'steady_gclk','stime','stop','strobe','strobeb','strobeh','strobeo',
        -            'swrite','swriteb','swriteh','swriteo','sync$and$array',
        -            'sync$and$plane','sync$nand$array','sync$nand$plane',
        -            'sync$nor$array','sync$nor$plane','sync$or$array','sync$or$plane',
        -            'system','tan','tanh','test$plusargs','time','timeformat',
        -            'typename','ungetc','unpacked_dimensions','unsigned',
        -            'value$plusargs','warning','write','writeb','writeh','writememb',
        -            'writememh','writeo',
        -            ),
        -        // compiler directives
        -        2 => array(
        -            '`__FILE__', '`__LINE__', '`begin_keywords', '`case', '`celldefine',
        -            '`endcelldefine', '`default_nettype', '`define', '`default', '`else',
        -            '`elsif', '`end_keywords', '`endfor', '`endif',
        -            '`endprotect', '`endswitch', '`endwhile', '`for', '`format',
        -            '`if', '`ifdef', '`ifndef', '`include', '`let',
        -            '`line', '`nounconnected_drive', '`pragma', '`protect', '`resetall',
        -            '`switch', '`timescale', '`unconnected_drive', '`undef', '`undefineall',
        -            '`while'
        -            ),
        -        // keywords
        -        3 => array(
        -            'assert', 'assume', 'cover', 'expect', 'disable',
        -            'iff', 'binsof', 'intersect', 'first_match', 'throughout',
        -            'within', 'coverpoint', 'cross', 'wildcard', 'bins',
        -            'ignore_bins', 'illegal_bins', 'genvar', 'if', 'else',
        -            'unique', 'priority', 'matches', 'default', 'forever',
        -            'repeat', 'while', 'for', 'do', 'foreach',
        -            'break', 'continue', 'return', 'pulsestyle_onevent', 'pulsestyle_ondetect',
        -            'noshowcancelled', 'showcancelled', 'ifnone', 'posedge', 'negedge',
        -            'edge', 'wait', 'wait_order', 'timeunit', 'timeprecision',
        -            's', 'ms', 'us', 'ns',
        -            'ps', 'fs', 'step', 'new', 'extends',
        -            'this', 'super', 'protected', 'local', 'rand',
        -            'randc', 'bind', 'constraint', 'solve', 'before',
        -            'dist', 'inside', 'with', 'virtual', 'extern',
        -            'pure', 'forkjoin', 'design', 'instance', 'cell',
        -            'liblist', 'use', 'library', 'incdir', 'include',
        -            'modport', 'sync_accept_on', 'reject_on', 'accept_on',
        -            'sync_reject_on', 'restrict', 'let', 'until', 'until_with',
        -            'unique0', 'eventually', 's_until', 's_always', 's_eventually',
        -            's_nexttime', 's_until_with', 'global', 'untyped', 'implies',
        -            'weak', 'strong', 'nexttime'
        -            ),
        -        // block keywords
        -        4 => array(
        -            'begin', 'end', 'package', 'endpackage', 'macromodule',
        -            'module', 'endmodule', 'generate', 'endgenerate', 'program',
        -            'endprogram', 'class', 'endclass', 'function', 'endfunction',
        -            'case', 'casex', 'casez', 'randcase', 'endcase',
        -            'interface', 'endinterface', 'clocking', 'endclocking', 'task',
        -            'endtask', 'primitive', 'endprimitive', 'fork', 'join',
        -            'join_any', 'join_none', 'covergroup', 'endgroup', 'checker',
        -            'endchecker', 'property', 'endproperty', 'randsequence', 'sequence',
        -            'endsequence', 'specify', 'endspecify', 'config', 'endconfig',
        -            'table', 'endtable', 'initial', 'final', 'always',
        -            'always_comb', 'always_ff', 'always_latch', 'alias', 'assign',
        -            'force', 'release'
        -            ),
        -
        -        // types
        -        5 => array(
        -            'parameter', 'localparam', 'specparam', 'input', 'output',
        -            'inout', 'ref', 'byte', 'shortint', 'int',
        -            'integer', 'longint', 'time', 'bit', 'logic',
        -            'reg', 'supply0', 'supply1', 'tri', 'triand',
        -            'trior', 'trireg', 'tri0', 'tri1', 'wire',
        -            'uwire', 'wand', 'wor', 'signed', 'unsigned',
        -            'shortreal', 'real', 'realtime', 'type', 'void',
        -            'struct', 'union', 'tagged', 'const', 'var',
        -            'automatic', 'static', 'packed', 'vectored', 'scalared',
        -            'typedef', 'enum', 'string', 'chandle', 'event',
        -            'null', 'pullup', 'pulldown', 'cmos', 'rcmos',
        -            'nmos', 'pmos', 'rnmos', 'rpmos', 'and',
        -            'nand', 'or', 'nor', 'xor', 'xnor',
        -            'not', 'buf', 'tran', 'rtran', 'tranif0',
        -            'tranif1', 'rtranif0', 'rtranif1', 'bufif0', 'bufif1',
        -            'notif0', 'notif1', 'strong0', 'strong1', 'pull0',
        -            'pull1', 'weak0', 'weak1', 'highz0', 'highz1',
        -            'small', 'medium', 'large'
        -            ),
        -
        -        // DPI
        -        6 => array(
        -            'DPI', 'DPI-C', 'import', 'export', 'context'
        -            ),
        -
        -        // stdlib
        -        7 => array(
        -            'randomize', 'mailbox', 'semaphore', 'put', 'get',
        -            'try_put', 'try_get', 'peek', 'try_peek', 'process',
        -            'state', 'self', 'status', 'kill', 'await',
        -            'suspend', 'resume', 'size', 'delete', 'insert',
        -            'num', 'first', 'last', 'next', 'prev',
        -            'pop_front', 'pop_back', 'push_front', 'push_back', 'find',
        -            'find_index', 'find_first', 'find_last', 'find_last_index', 'min',
        -            'max', 'unique_index', 'reverse', 'sort', 'rsort',
        -            'shuffle', 'sum', 'product', 'List', 'List_Iterator',
        -            'neq', 'eq', 'data', 'empty', 'front',
        -            'back', 'start', 'finish', 'insert_range', 'erase',
        -            'erase_range', 'set', 'swap', 'clear', 'purge'
        -            ),
        -
        -        // key_deprecated
        -        8 => array(
        -            'defparam', 'deassign', 'TODO'
        -        ),
        -
        -        ),
        -    'SYMBOLS' => array(
        -            '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%',
        -            '^', '&', '|', '~',
        -            '?', ':',
        -            '#', '<<', '<<<',
        -            '>', '<', '>=', '<=',
        -            '@', ';', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #996666; font-weight: bold;',
        -            2 => 'color: #336600; font-weight: bold;',
        -            3 => 'color: #996600; font-weight: bold;',
        -            4 => 'color: #000033; font-weight: bold;',
        -            5 => 'color: #330033; font-weight: bold;',
        -            6 => 'color: #996600; font-weight: bold;',
        -            7 => 'color: #CC9900; font-weight: bold;',
        -            8 => 'color: #990000; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #00008B; font-style: italic;',
        -            'MULTI' => 'color: #00008B; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #9F79EE'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #9F79EE;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #FF00FF;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff0055;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #5D478B;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #ff0055;',
        -            1 => 'color: #ff0055;',
        -            2 => 'color: #ff0055;',
        -            3 => 'color: #ff0055;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => ''
        -        ),
        -    'REGEXPS' => array(
        -        // integer
        -        0 => "\d'[bdh][0-9_a-fA-FxXzZ]+",
        -        // realtime
        -        1 => "\d*\.\d+[munpf]?s",
        -        // time s, ms, us, ns, ps, of fs
        -        2 => "\d+[munpf]?s",
        -        // real
        -        3 => "\d*\.\d+"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        0 => ''
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true
        -        ),
        -    'TAB_WIDTH' => 3,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            1 => array(
        -                'DISALLOWED_BEFORE' => '(?<=$)'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php
        deleted file mode 100644
        index 697411fe..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php
        +++ /dev/null
        @@ -1,192 +0,0 @@
        - 'TCL',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        1 => '/(?:^|(?<=\{|;))\s*#(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //2 => '/{[^}\n]+}/'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        /*
        -         * Set 1: reserved words
        -         * http://python.org/doc/current/ref/keywords.html
        -         */
        -        1 => array(
        -            'proc', 'global', 'upvar', 'if', 'then', 'else', 'elseif', 'for', 'foreach',
        -            'break', 'continue', 'while', 'set', 'eval', 'case', 'in', 'switch',
        -            'default', 'exit', 'error', 'return', 'uplevel', 'loop',
        -            'for_array_keys', 'for_recursive_glob', 'for_file', 'unwind_protect',
        -            'expr', 'catch', 'namespace', 'rename', 'variable',
        -            // itcl
        -            'method', 'itcl_class', 'public', 'protected'),
        -
        -        /*
        -         * Set 2: builtins
        -         * http://asps.activatestate.com/ASPN/docs/ActiveTcl/8.4/tcl/tcl_2_contents.htm
        -         */
        -        2 => array(
        -            // string handling
        -            'append', 'binary', 'format', 're_syntax', 'regexp', 'regsub',
        -            'scan', 'string', 'subst',
        -            // list handling
        -            'concat', 'join', 'lappend', 'lindex', 'list', 'llength', 'lrange',
        -            'lreplace', 'lsearch', 'lset', 'lsort', 'split',
        -            // procedures and output
        -            'incr', 'close', 'eof', 'fblocked', 'fconfigure', 'fcopy', 'file',
        -            'fileevent', 'flush', 'gets', 'open', 'puts', 'read', 'seek',
        -            'socket', 'tell',
        -            // packages and source files
        -            'load', 'loadTk', 'package', 'pgk::create', 'pgk_mkIndex', 'source',
        -            // interpreter routines
        -            'bgerror', 'history', 'info', 'interp', 'memory', 'unknown',
        -            // library routines
        -            'enconding', 'http', 'msgcat',
        -            // system related
        -            'cd', 'clock', 'exec', 'glob', 'pid', 'pwd', 'time',
        -            // platform specified
        -            'dde', 'registry', 'resource',
        -            // special variables
        -            '$argc', '$argv', '$errorCode', '$errorInfo', '$argv0',
        -            '$auto_index', '$auto_oldpath', '$auto_path', '$env',
        -            '$tcl_interactive', '$tcl_libpath', '$tcl_library',
        -            '$tcl_pkgPath', '$tcl_platform', '$tcl_precision', '$tcl_traceExec',
        -            ),
        -
        -        /*
        -         * Set 3: standard library
        -         */
        -        3 => array(
        -            'comment', 'filename', 'library', 'packagens', 'tcltest', 'tclvars',
        -            ),
        -
        -        /*
        -         * Set 4: special methods
        -         */
        -//        4 => array(
        -//            )
        -
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '$', '*', '&', '%', '!', ';', '<', '>', '?'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -//        4 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #ff7700;font-weight:bold;',    // Reserved
        -            2 => 'color: #008000;',                        // Built-ins + self
        -            3 => 'color: #dc143c;',                        // Standard lib
        -//            4 => 'color: #0000cd;'                        // Special methods
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -//            2 => 'color: #483d8b;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: black;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #483d8b;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff4500;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: black;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #ff3333;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -//        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        //Special variables
        -        0 => '[\\$]+[a-zA-Z_][a-zA-Z0-9_]*',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'COMMENTS' => array(
        -            'DISALLOWED_BEFORE' => '\\'
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php
        deleted file mode 100644
        index 2a4b412c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php
        +++ /dev/null
        @@ -1,352 +0,0 @@
        - 'Tera Term Macro',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        /* Commands */
        -        1 => array(
        -            'Beep',
        -            'BplusRecv',
        -            'BplusSend',
        -            'Break',
        -            'Call',
        -            'CallMenu',
        -            'ChangeDir',
        -            'ClearScreen',
        -            'Clipb2Var',
        -            'ClosesBox',
        -            'CloseTT',
        -            'Code2Str',
        -            'Connect',
        -            'CRC32',
        -            'CRC32File',
        -            'CygConnect',
        -            'DelPassword',
        -            'Disconnect',
        -            'DispStr',
        -            'Do',
        -            'Else',
        -            'ElseIf',
        -            'EnableKeyb',
        -            'End',
        -            'EndIf',
        -            'EndUntil',
        -            'EndWhile',
        -            'Exec',
        -            'ExecCmnd',
        -            'Exit',
        -            'FileClose',
        -            'FileConcat',
        -            'FileCopy',
        -            'FileCreate',
        -            'FileDelete',
        -            'FileMarkPtr',
        -            'FileNameBox',
        -            'FileOpen',
        -            'FileRead',
        -            'FileReadln',
        -            'FileRename',
        -            'FileSearch',
        -            'FileSeek',
        -            'FileSeekBack',
        -            'FileStat',
        -            'FileStrSeek',
        -            'FileStrSeek2',
        -            'FileTruncate',
        -            'FileWrite',
        -            'FileWriteLn',
        -            'FindClose',
        -            'FindFirst',
        -            'FindNext',
        -            'FlushRecv',
        -            'For',
        -            'GetDate',
        -            'GetDir',
        -            'GetEnv',
        -            'GetHostname',
        -            'GetPassword',
        -            'GetTime',
        -            'GetTitle',
        -            'GetTTDir',
        -            'Getver',
        -            'GoTo',
        -            'If',
        -            'IfDefined',
        -            'Include',
        -            'InputBox',
        -            'Int2Str',
        -            'KmtFinish',
        -            'KmtGet',
        -            'KmtRecv',
        -            'KmtSend',
        -            'LoadKeymap',
        -            'LogClose',
        -            'LogOpen',
        -            'LogPause',
        -            'LogStart',
        -            'LogWrite',
        -            'Loop',
        -            'MakePath',
        -            'MessageBox',
        -            'MPause',
        -            'Next',
        -            'PasswordBox',
        -            'Pause',
        -            'QuickVANRecv',
        -            'QuickVANSend',
        -            'Random',
        -            'RecvLn',
        -            'RestoreSetup',
        -            'Return',
        -            'RotateLeft',
        -            'RotateRight',
        -            'ScpRecv',
        -            'ScpSend',
        -            'Send',
        -            'SendBreak',
        -            'SendBroadcast',
        -            'SendFile',
        -            'SendKCode',
        -            'SendLn',
        -            'SendLnBroadcast',
        -            'SendMulticast',
        -            'SetBaud',
        -            'SetDate',
        -            'SetDebug',
        -            'SetDir',
        -            'SetDlgPos',
        -            'SetDTR',
        -            'SetEcho',
        -            'SetEnv',
        -            'SetExitCode',
        -            'SetMulticastName',
        -            'SetRTS',
        -            'SetSync',
        -            'SetTime',
        -            'SetTitle',
        -            'Show',
        -            'ShowTT',
        -            'SPrintF',
        -            'SPrintF2',
        -            'StatusBox',
        -            'Str2Code',
        -            'Str2Int',
        -            'StrCompare',
        -            'StrConcat',
        -            'StrCopy',
        -            'StrInsert',
        -            'StrJoin',
        -            'StrLen',
        -            'StrMatch',
        -            'StrRemove',
        -            'StrReplace',
        -            'StrScan',
        -            'StrSpecial',
        -            'StrSplit',
        -            'StrTrim',
        -            'TestLink',
        -            'Then',
        -            'ToLower',
        -            'ToUpper',
        -            'UnLink',
        -            'Until',
        -            'Var2Clipb',
        -            'Wait',
        -            'Wait4All',
        -            'WaitEvent',
        -            'WaitLn',
        -            'WaitN',
        -            'WaitRecv',
        -            'WaitRegEx',
        -            'While',
        -            'XmodemRecv',
        -            'XmodemSend',
        -            'YesNoBox',
        -            'YmodemRecv',
        -            'YmodemSend',
        -            'ZmodemRecv',
        -            'ZmodemSend'
        -            ),
        -        /* System Variables */
        -        2 => array(
        -            'groupmatchstr1',
        -            'groupmatchstr2',
        -            'groupmatchstr3',
        -            'groupmatchstr4',
        -            'groupmatchstr5',
        -            'groupmatchstr6',
        -            'groupmatchstr7',
        -            'groupmatchstr8',
        -            'groupmatchstr9',
        -            'inputstr',
        -            'matchstr',
        -            'mtimeout',
        -            'param2',
        -            'param3',
        -            'param4',
        -            'param5',
        -            'param6',
        -            'param7',
        -            'param8',
        -            'param9',
        -            'result',
        -            'timeout'
        -            ),
        -        /* LogMeTT Key Words */
        -        3 => array(
        -            '$[1]',
        -            '$[2]',
        -            '$[3]',
        -            '$[4]',
        -            '$[5]',
        -            '$[6]',
        -            '$[7]',
        -            '$[8]',
        -            '$[9]',
        -            '$branch$',
        -            '$computername$',
        -            '$connection$',
        -            '$email$',
        -            '$logdir$',
        -            '$logfilename$',
        -            '$lttfilename$',
        -            '$mobile$',
        -            '$name$',
        -            '$pager$',
        -            '$parent$',
        -            '$phone$',
        -            '$snippet$',
        -            '$ttdir$',
        -            '$user$',
        -            '$windir$',
        -        ),
        -        /* Keyword Symbols */
        -        4 => array(
        -            'and',
        -            'not',
        -            'or',
        -            'xor'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}',
        -        '+', '-', '*', '/', '%',
        -        '!', '&', '|', '^',
        -        '<', '>', '=',
        -        '?', ':', ';',
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000080; font-weight: bold!important;',
        -            2 => 'color: #808000; font-weight: bold;',  // System Variables
        -            3 => 'color: #ff0000; font-weight: bold;',  // LogMeTT Key Words
        -            4 => 'color: #ff00ff; font-weight: bold;'   // Keyword Symbols
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(),
        -        'BRACKETS' => array(
        -            0 => 'color: #ff00ff; font-weight: bold;'
        -        ),
        -        'STRINGS' => array(
        -            0 => 'color: #800080;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #008080;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #ff00ff; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff; font-weight: bold;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        0 => array (
        -            GESHI_SEARCH => '(\:[_a-zA-Z][_a-zA-Z0-9]+)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php
        deleted file mode 100644
        index dbb97a3b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php
        +++ /dev/null
        @@ -1,82 +0,0 @@
        - 'Text',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(),
        -    'SYMBOLS' => array(),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(),
        -        'COMMENTS' => array(),
        -        'ESCAPE_CHAR' => array(),
        -        'BRACKETS' => array(),
        -        'STRINGS' => array(),
        -        'NUMBERS' => array(),
        -        'METHODS' => array(),
        -        'SYMBOLS' => array(),
        -        'SCRIPT' => array(),
        -        'REGEXPS' => array()
        -        ),
        -    'URLS' => array(),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'ALL' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php
        deleted file mode 100644
        index 0783b315..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php
        +++ /dev/null
        @@ -1,866 +0,0 @@
        - 'thinBasic',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'XOR','XML_TREETOSTRING','XML_PARSEFILE','XML_PARSE','XML_PARENT','XML_NODETYPE','XML_NODETOSTRING','XML_NEXTSIBLING',
        -            'XML_LASTERROR','XML_GETTAG','XML_FREE','XML_FINDNODE','XML_DECODEPARAM','XML_CHILDDATA','XML_CHILD','XML_ATTRIBVALUE',
        -            'XML_ATTRIBNAME','XML_ATTRIBCOUNT','WORD','WITH','WIN_SHOW','WIN_SETTITLE','WIN_SETFOREGROUND','WIN_ISZOOMED',
        -            'WIN_ISVISIBLE','WIN_ISICONIC','WIN_GETTITLE','WIN_GETFOREGROUND','WIN_GETCLASS','WIN_GETACTIVE','WIN_FLASH','WIN_FINDBYTITLE',
        -            'WIN_FINDBYCLASS','WHILE','WEND','VERIFY','VARPTR','VARIANTVT$','VARIANTVT','VARIANT',
        -            'VARIABLE_GETINFO','VARIABLE_EXISTS','VARIABLE_EXIST','VALUE','VAL','USING$','USING','USES',
        -            'USER','UNTIL','UNITS','UNION','UNICODE2ASCII','UDP_SEND','UDP_RECV','UDP_OPENSERVER',
        -            'UDP_OPEN','UDP_FREEFILE','UDP_CLOSE','UCODE$','UCASE$','UBOUND','TYPE','TRIMFULL$',
        -            'TRIM$','TOOLTIP','TOKENIZER_MOVETOEOL','TOKENIZER_KEYSETUSERSTRING','TOKENIZER_KEYSETUSERNUMBER','TOKENIZER_KEYGETUSERSTRING','TOKENIZER_KEYGETUSERNUMBER','TOKENIZER_KEYGETSUBTYPE',
        -            'TOKENIZER_KEYGETNAME','TOKENIZER_KEYGETMAINTYPE','TOKENIZER_KEYFIND','TOKENIZER_KEYADD','TOKENIZER_GETNEXTTOKEN','TOKENIZER_DEFAULT_SET','TOKENIZER_DEFAULT_GET','TOKENIZER_DEFAULT_CODE',
        -            'TOKENIZER_DEFAULT_CHAR','TO','TIMER','TIME$','THEN','TEXTBOX','TEXT','TCP_SEND',
        -            'TCP_RECV','TCP_PRINT','TCP_OPEN','TCP_LINEINPUT','TCP_FREEFILE','TCP_CLOSE','TB_IMGCTX_SETIMAGEADJUSTMENT','TB_IMGCTX_LOADIMAGE',
        -            'TB_IMGCTX_GETIMAGEADJUSTMENT','TBGL_VIEWPORT','TBGL_VERTEX','TBGL_USETEXTUREFLAG','TBGL_USETEXTURE','TBGL_USELINESTIPPLEFLAG','TBGL_USELINESTIPPLE','TBGL_USELIGHTSOURCEFLAG',
        -            'TBGL_USELIGHTSOURCE','TBGL_USELIGHTINGFLAG','TBGL_USELIGHTING','TBGL_USEFOGFLAG','TBGL_USEFOG','TBGL_USEDEPTHMASK','TBGL_USEDEPTHFLAG','TBGL_USEDEPTH',
        -            'TBGL_USECLIPPLANEFLAG','TBGL_USECLIPPLANE','TBGL_USEBLENDFLAG','TBGL_USEBLEND','TBGL_USEALPHATEST','TBGL_TRANSLATE','TBGL_TORUS','TBGL_TEXCOORD2D',
        -            'TBGL_SPHERE','TBGL_SHOWWINDOW','TBGL_SHOWCURSOR','TBGL_SETWINDOWTITLE','TBGL_SETUPLIGHTSOURCE','TBGL_SETUPFOG','TBGL_SETUPCLIPPLANE','TBGL_SETPRIMITIVEQUALITY',
        -            'TBGL_SETLIGHTPARAMETER','TBGL_SETDRAWDISTANCE','TBGL_SCALE','TBGL_SAVESCREENSHOT','TBGL_ROTATEXYZ','TBGL_ROTATE','TBGL_RESETMATRIX','TBGL_RENDERTOTEXTURE',
        -            'TBGL_RENDERMATRIX3D','TBGL_RENDERMATRIX2D','TBGL_PUSHMATRIX','TBGL_PRINTFONT','TBGL_PRINTBMP','TBGL_PRINT','TBGL_POS3DTOPOS2D','TBGL_POPMATRIX',
        -            'TBGL_POLYGONLOOK','TBGL_POINTSIZE','TBGL_POINTINSIDE3D','TBGL_NORMAL','TBGL_NEWLIST','TBGL_MOUSEGETWHEELDELTA','TBGL_MOUSEGETRBUTTON','TBGL_MOUSEGETPOSY',
        -            'TBGL_MOUSEGETPOSX','TBGL_MOUSEGETMBUTTON','TBGL_MOUSEGETLBUTTON','TBGL_M15SETVERTEXZ','TBGL_M15SETVERTEXY','TBGL_M15SETVERTEXXYZ','TBGL_M15SETVERTEXX','TBGL_M15SETVERTEXTEXY',
        -            'TBGL_M15SETVERTEXTEXXY','TBGL_M15SETVERTEXTEXX','TBGL_M15SETVERTEXTEXN','TBGL_M15SETVERTEXRGB','TBGL_M15SETVERTEXR','TBGL_M15SETVERTEXPSTOP','TBGL_M15SETVERTEXPARAM','TBGL_M15SETVERTEXLAYER',
        -            'TBGL_M15SETVERTEXG','TBGL_M15SETVERTEXB','TBGL_M15SETMODELVERTEXCOUNT','TBGL_M15SETBONECHILD','TBGL_M15ROTBONEZ','TBGL_M15ROTBONEY','TBGL_M15ROTBONEX','TBGL_M15ROTBONE',
        -            'TBGL_M15RESETBONES','TBGL_M15RECALCNORMALS','TBGL_M15LOADMODEL','TBGL_M15INITMODELBUFFERS','TBGL_M15GETVERTEXZ','TBGL_M15GETVERTEXY','TBGL_M15GETVERTEXXYZ','TBGL_M15GETVERTEXX',
        -            'TBGL_M15GETVERTEXTEXY','TBGL_M15GETVERTEXTEXXY','TBGL_M15GETVERTEXTEXX','TBGL_M15GETVERTEXTEXN','TBGL_M15GETVERTEXRGB','TBGL_M15GETVERTEXR','TBGL_M15GETVERTEXPSTOP','TBGL_M15GETVERTEXPARAM',
        -            'TBGL_M15GETVERTEXLAYER','TBGL_M15GETVERTEXG','TBGL_M15GETVERTEXB','TBGL_M15GETMODELVERTEXCOUNT','TBGL_M15GETMODELPOLYCOUNT','TBGL_M15ERASECHILDBONES','TBGL_M15DRAWMODEL','TBGL_M15DEFBONERESET',
        -            'TBGL_M15DEFBONELAYER','TBGL_M15DEFBONEBOX','TBGL_M15DEFBONEANCHOR','TBGL_M15DEFBONEADDVERTEX','TBGL_M15CLEARMODEL','TBGL_M15APPLYBONES','TBGL_M15ADDBONETREEITEM','TBGL_LOADTEXTURE',
        -            'TBGL_LOADFONT','TBGL_LOADBMPFONT','TBGL_LINEWIDTH','TBGL_LINESTIPPLE','TBGL_KILLFONT','TBGL_ISWINDOW','TBGL_ISPOINTVISIBLE','TBGL_ISPOINTBEHINDVIEW',
        -            'TBGL_GETWINDOWMULTIKEYSTATE','TBGL_GETWINDOWKEYSTATE','TBGL_GETWINDOWKEYONCE','TBGL_GETWINDOWCLIENT','TBGL_GETTEXTURENAME','TBGL_GETTEXTURELIST','TBGL_GETPIXELINFO','TBGL_GETMULTIASYNCKEYSTATE',
        -            'TBGL_GETLASTGLERROR','TBGL_GETFRAMERATE','TBGL_GETDESKTOPINFO','TBGL_GETASYNCKEYSTATE','TBGL_ERRORMESSAGES','TBGL_ENDPOLY','TBGL_ENDLIST','TBGL_DRAWFRAME',
        -            'TBGL_DESTROYWINDOW','TBGL_DELETELIST','TBGL_CYLINDER','TBGL_CREATEWINDOWEX','TBGL_CREATEWINDOW','TBGL_COLORALPHA','TBGL_COLOR','TBGL_CLEARFRAME',
        -            'TBGL_CAMERA','TBGL_CALLLIST','TBGL_BUILDFONT','TBGL_BOX','TBGL_BLENDFUNC','TBGL_BINDTEXTURE','TBGL_BEGINPOLY','TBGL_BACKCOLOR',
        -            'TBGL_ALPHAFUNC','TBDI_JOYZ','TBDI_JOYY','TBDI_JOYX','TBDI_JOYSTOPEFFECT','TBDI_JOYSLIDER','TBDI_JOYSETRANGEZ','TBDI_JOYSETRANGEY',
        -            'TBDI_JOYSETRANGEXYZ','TBDI_JOYSETRANGEX','TBDI_JOYSETDEADZONEZ','TBDI_JOYSETDEADZONEY','TBDI_JOYSETDEADZONEXYZ','TBDI_JOYSETDEADZONEX','TBDI_JOYSETAUTOCENTER','TBDI_JOYRZ',
        -            'TBDI_JOYRY','TBDI_JOYRX','TBDI_JOYPOV','TBDI_JOYPLAYEFFECT','TBDI_JOYLOADEFFECT','TBDI_JOYHASFF','TBDI_JOYHASEFFECT','TBDI_JOYGETEFFECTNAME',
        -            'TBDI_JOYGETEFFECTGUID','TBDI_JOYCREATEEFFECT','TBDI_JOYCOUNTPOV','TBDI_JOYCOUNTEFFECTS','TBDI_JOYCOUNTBTN','TBDI_JOYCOUNTAXES','TBDI_JOYBUTTON','TBDI_JOYAVAIL',
        -            'TBDI_INIT','TBASS_STREAMFREE','TBASS_STREAMCREATEFILE','TBASS_SETVOLUME','TBASS_SETEAXPRESET','TBASS_SETEAXPARAMETERS','TBASS_SETCONFIG','TBASS_SET3DPOSITION',
        -            'TBASS_SET3DFACTORS','TBASS_SAMPLELOAD','TBASS_SAMPLEGETCHANNEL','TBASS_MUSICLOAD','TBASS_MUSICFREE','TBASS_INIT','TBASS_GETVOLUME','TBASS_GETVERSION',
        -            'TBASS_GETCONFIG','TBASS_FREE','TBASS_ERRORGETCODE','TBASS_CHANNELSTOP','TBASS_CHANNELSETPOSITION','TBASS_CHANNELSETATTRIBUTES','TBASS_CHANNELSET3DPOSITION','TBASS_CHANNELPLAY',
        -            'TBASS_CHANNELPAUSE','TBASS_CHANNELISACTIVE','TBASS_CHANNELGETPOSITION','TBASS_CHANNELGETLENGTH','TBASS_CHANNELGETATTRIBUTES','TBASS_APPLY3D','TANH','TANGENT',
        -            'TAN','TALLY','TABCTRL_ONNOTIFY','TABCTRL_INSERTITEM','TABCTRL_GETCURSEL','SWAP','SUB','STRZIP$',
        -            'STRUNZIP$','STRREVERSE$','STRPTRLEN','STRPTR','STRINSERT$','STRING$','STRING','STRDELETE$',
        -            'STR$','STOP','STEP','STDOUT','STDIN','STAT_SUM','STAT_STDERROR','STAT_STDDEVIATION',
        -            'STAT_RANDOM','STAT_PRODUCT','STAT_MIN','STAT_MEDIAN','STAT_MEANHARMONIC','STAT_MEANGEOMETRIC','STAT_MEANARITHMETIC','STAT_MAX',
        -            'STAT_INVERSESUM','STAT_HISTOGRAM','STAT_FILLARRAY','STAT_COUNT','STAT_COPYARRAY','STAT_CLONEARRAY','STAT_CHISQUARE','STATIC',
        -            'STATE','SQR','SPLIT','SORT','SMTP_STATISTICS','SMTP_SETOPTION','SMTP_SETLOGFILE','SMTP_SENDHTML',
        -            'SMTP_SENDEMAIL','SMTP_GETERROR','SMTP_FINISHED','SMTP_DEBUG','SMTP_CONNECT','SMTP_CLOSE','SLEEP','SIZEOF',
        -            'SIZE','SINH','SINGLE','SIN','SIGNED','SHOW','SHIFT','SHAPETOBMP',
        -            'SGN','SETAT','SET','SENDMESSAGE','SENDKEYSBULK','SENDKEYS','SEND','SELECTEXPRESSION',
        -            'SELECT','SECH','SEC','SCAN','SAPI_SPEAK','SAPI_SETVOLUME','SAPI_SETRATE','SAPI_MODULELOADED',
        -            'SAPI_GETVOLUME','SAPI_GETRATE','RTRIM$','RTF_SETTEXT','RTF_SETFONTSIZE','RTF_SETFONTNAME','RTF_SETFGCOLOR','RTF_SETEFFECT',
        -            'RTF_SETBGCOLOR','RTF_SETALIGN','RTF_SAVETOFILE','RTF_LOADFROMFILE','RTF_GETTEXT','RTF_GETFONTSIZE','RTF_GETFONTNAME','RTF_GETEFFECT',
        -            'RTF_GETCLASS','RTF_APPENDTEXT','RSET$','ROUND','RNDF','RND','RIGHT$','RIGHT',
        -            'RGB','RESOURCE','RESIZE','RESET','REPLACE$','REPEAT$','REMOVE$','REM',
        -            'REGISTRY_SETVALUE','REGISTRY_SETTXTNUM','REGISTRY_SETTXTBOOL','REGISTRY_SETDWORD','REGISTRY_GETVALUE','REGISTRY_GETTXTNUM','REGISTRY_GETTXTBOOL','REGISTRY_GETDWORD',
        -            'REGISTRY_GETALLKEYS','REGISTRY_DELVALUE','REGISTRY_DELKEY','REFERENCE','REF','REDRAW','REDIM','RAS_SETPARAMS',
        -            'RAS_OPENDIALUPDIALOG','RAS_LOADENTRIES','RAS_HANGUPALL','RAS_HANGUP','RAS_GETENTRY','RAS_BEGINDIAL','RANDOMIZE','RADTODEG',
        -            'QUERYPERFORMANCEFREQUENCY','QUERYPERFORMANCECOUNTER','QUAD','PTR','PRESERVE','POST','POPUP','POKE$',
        -            'POKE','PIXELS','PI','PERMUTATIONS','PEEKMESSAGE','PEEK$','PEEK','PC_SYSTEMUPFROM',
        -            'PC_SUSPENDSTATE','PC_SHUTDOWN','PC_SHOWCARET','PC_SETCARETBLINKTIME','PC_RESTARTDIALOG','PC_PREVENTSHUTDOWN','PC_LOCK','PC_INSERTCD',
        -            'PC_HIDECARET','PC_GETSTATEONOFF','PC_GETSCROLLLOCKKEYSTATE','PC_GETNUMLOCKKEYSTATE','PC_GETCARETBLINKTIME','PC_GETCAPSLOCKKEYSTATE','PC_EMPTYBIN','PC_EJECTCD',
        -            'PC_DECODECDERROR','PCT','PARSESET$','PARSECOUNT','PARSE$','PARSE','PARAMETERS','OUTSIDE',
        -            'OS_WINVERSIONTEXT','OS_WINGETVERSIONTIMELINE','OS_SHELLEXECUTE','OS_SHELLABOUT','OS_SHELL','OS_SETLASTCALLDLLERROR','OS_SERVICESTOP','OS_SERVICESTATUSDESCRIPTION',
        -            'OS_SERVICESTARTTYPEDESCRIPTION','OS_SERVICESTART','OS_SERVICESETSTARTTYPE','OS_SERVICEQUERY','OS_SERVICEGETSTARTTYPE','OS_SERVICEGETLIST','OS_PROCESSKILLBYNAME','OS_PROCESSKILLBYID',
        -            'OS_PROCESSISRUNNING','OS_PROCESSGETLIST','OS_PROCESSGETID','OS_PROCESSARERUNNING','OS_MESSAGEBEEP','OS_ISWOW64','OS_ISFEATUREPRESENT','OS_IEVERSION',
        -            'OS_GETWINDOWSDIR','OS_GETUSERNAME','OS_GETTEMPDIR','OS_GETSYSTEMDIR','OS_GETSPECIALFOLDER','OS_GETLASTCALLDLLSTATUS','OS_GETLASTCALLDLLERROR','OS_GETCURRENTTHREADID',
        -            'OS_GETCURRENTPROCESSID','OS_GETCOMPUTERNAME','OS_GETCOMMANDS','OS_GETCOMMAND','OS_FLASHWINDOW','OS_FATALAPPEXIT','OS_ENVIRON','OS_CALLDLL',
        -            'OR','OPTIONAL','OPTION','OPT','ONCE','ON','OFF','NUMBER',
        -            'NOT','NEXT','NEW','MSGBOX','MOUSEPTR','MODULE','MODELESS','MODAL',
        -            'MOD','MKWRD$','MKS$','MKQ$','MKL$','MKI$','MKE$','MKDWD$',
        -            'MKD$','MKCUX$','MKCUR$','MKBYT$','MIN$','MIN','MID$','MENU',
        -            'MDI_CREATE','MCASE$','MAX$','MAX','MAKWRD','MAKLNG','MAKINT','MAKDWR',
        -            'LTRIM$','LSET$','LOWRD','LOOP','LONG','LOINT','LOG_WRITE','LOGB',
        -            'LOG2','LOG10','LOG','LOCAL','LOC','LL_UPDATEBYNAME','LL_UPDATE','LL_TOSTRING',
        -            'LL_TOFILE','LL_NAME','LL_GETITEM','LL_GETBYNUMBER','LL_FROMFILE','LL_FREE','LL_FINDLAST','LL_FINDBYNAME',
        -            'LL_FINDBYDATA','LL_DELETELIKE','LL_DELETEBYNAME','LL_DELETE','LL_DATABYNAME','LL_DATA','LL_COUNT','LL_ADD',
        -            'LISTBOX','LINE','LIBRARY_EXISTS','LIB','LEN','LEFT$','LEFT','LCASE$',
        -            'LBOUND','LABEL','KILL','JOIN$','ITERATE','ISWINDOW','ISUNICODE','ISTRUE',
        -            'ISODD','ISLIKE','ISFALSE','ISEVEN','IP_TOSTRING','IP_ADDR','INTERNALINFO','INTEGER',
        -            'INT','INSTR','INSIDE','INPUTBOX$','INI_SETKEY','INI_GETSECTIONSLIST','INI_GETSECTIONKEYLIST','INI_GETKEY',
        -            'INET_URLDOWNLOAD','INET_PING','INET_OPENDIALUPDIALOG','INET_GETSTATE','INET_GETREMOTEMACADDRESS','INET_GETIP','INET_GETCONNECTIONMODE','INCR',
        -            'IN','IMAGE','IIF$','IIF','IF','ICRYPTO_TESTSHA1','ICRYPTO_TESTMD5','ICRYPTO_TESTCRC32',
        -            'ICRYPTO_TESTCRC16','ICRYPTO_STRING2ASCII','ICRYPTO_SHA1','ICRYPTO_MD5','ICRYPTO_ENCRYPTRIJNDAEL','ICRYPTO_ENCRYPTRC4','ICRYPTO_DECRYPTRIJNDAEL','ICRYPTO_DECRYPTRC4',
        -            'ICRYPTO_CRC32','ICRYPTO_CRC16','ICRYPTO_BYTEXOR','ICRYPTO_BIN2ASCII','ICRYPTO_ASCII2STRING','ICRYPTO_ASCII2BIN','HOST_ADDR','HOSTNAME_TOIP',
        -            'HOSTIP_TONAME','HIWRD','HIINT','HEX$','HASH','HANDLE','GUIDTXT$','GUID$',
        -            'GRAPHIC','GLVOID','GLUSHORT','GLUINT','GLUBYTE','GLSIZEI','GLSHORT','GLOBAL',
        -            'GLINT','GLFLOAT','GLENUM','GLDOUBLE','GLCLAMPF','GLCLAMPD','GLBYTE','GLBOOLEAN',
        -            'GLBITFIELD','GETWINDOWMULTIKEYSTATE','GETWINDOWKEYSTATE','GETTICKCOUNT','GETS','GETMULTIASYNCKEYSTATE','GETMESSAGE','GETCURRENTINSTANCE',
        -            'GETAT','GETASYNCKEYSTATE','GET','FUNCTION_NPARAMS','FUNCTION_EXISTS','FUNCTION_CPARAMS','FUNCTION','FTP_SETSTRING',
        -            'FTP_SETSERVERDIR','FTP_SETNUMBER','FTP_SETMODE','FTP_SETLOGFILE','FTP_SETLOCALDIR','FTP_QUIT','FTP_PUTFILE','FTP_GETSTRING',
        -            'FTP_GETSERVERDIR','FTP_GETNUMBER','FTP_GETLOCALDIR','FTP_GETLIST','FTP_GETFILE','FTP_GETERRORSTRING','FTP_GETERRORNUMBER','FTP_FINISHED',
        -            'FTP_EXTRACT','FTP_DELFILE','FTP_CONNECT','FTP_COMMAND','FRAME','FRAC','FORMAT$','FOR',
        -            'FONT_LIST','FONT_CREATE','FONT','FOCUS','FLUSH','FIX','FILE_SIZE','FILE_SHELLDELETE',
        -            'FILE_SHELLCOPY','FILE_SETDATETIME','FILE_SEEK','FILE_SAVE','FILE_RENAME','FILE_PUT','FILE_PATHSPLIT','FILE_OPEN',
        -            'FILE_LOF','FILE_LOAD','FILE_LINEPRINT','FILE_LINEINPUT','FILE_KILL','FILE_GETVERSIONSTRING','FILE_GETVERSION','FILE_GETTIME',
        -            'FILE_GETDATETIMESTAMP','FILE_GETDATETIME','FILE_GETDATE','FILE_GET','FILE_EXISTS','FILE_EOF','FILE_COPY','FILE_CLOSE',
        -            'FILE_CHANGED','FILE_APPEND','FACTORIAL','EXTRACT$','EXT','EXPORT','EXP2','EXP10',
        -            'EXP','EXIT','EVAL_STRING','EVAL_SETSTRING','EVAL_SETNUMBER','EVAL_MATH','EVAL_LINKEXT','EVAL_GETSTRING',
        -            'EVAL_GETNUMBER','EVAL_ERRORGETTOKEN','EVAL_ERRORDESCRIPTION','EVAL_ERRORCLEAR','EVAL','ERRCLEAR','ERR','ENGINE_GETCURRENTTOKEN',
        -            'ENDIF','END','ENABLE','ELSEIF','ELSE','ECHO','DWORD','DT_YEAR',
        -            'DT_TIMETOSEC','DT_TIMESUBSECONDS','DT_TIMEFORMAT','DT_TIMEADDSECONDS','DT_SETTIMESEPARATOR','DT_SETDATESEPARATOR','DT_SETDATECENTURY','DT_SECTOTIME',
        -            'DT_SECTODATE','DT_SECOND','DT_MONTH','DT_MINUTE','DT_LASTDAYOFMONTH','DT_ISVALIDDATE','DT_ISLEAPYEAR','DT_HOUR',
        -            'DT_GETWEEKDAYNAME','DT_GETWEEKDAY','DT_GETTIMESTAMP','DT_GETTIMESEPARATOR','DT_GETMONTHNAME','DT_GETDATESEPARATOR','DT_GETDATECENTURY','DT_DAY',
        -            'DT_DATETOSEC','DT_DATETIMESUBSECONDS','DT_DATETIMEADDSECONDS','DT_DATESUBDAYS','DT_DATEFORMAT','DT_DATEDIFF','DT_DATEADDDAYS','DT_COOKIEDATE',
        -            'DRAW','DOUBLE','DOEVENTS','DO','DISABLE','DIR_REMOVE','DIR_MAKEALL','DIR_MAKE',
        -            'DIR_LISTARRAY','DIR_LIST','DIR_ISEMPTY','DIR_ISDIR','DIR_GETCURRENT','DIR_EXISTS','DIR_CHANGEDRIVE','DIR_CHANGE',
        -            'DIM','DICTIONARY_MEMINFO','DICTIONARY_LISTKEYS','DICTIONARY_FREE','DICTIONARY_FIND','DICTIONARY_EXISTS','DICTIONARY_CREATE','DICTIONARY_COUNT',
        -            'DICTIONARY_ADD','DIALOG_STOPEVENTS','DIALOG_SAVEFILE','DIALOG_OPENFILE','DIALOG_GETCONTROL','DIALOG_CHOOSECOLOR','DIALOG_BROWSEFORFOLDER','DIALOG',
        -            'DESKTOP','DESCENDING','DESCEND','DELETEOBJECT','DELETE','DEGTORAD','DECR','DECLARE',
        -            'DATE$','CVWRD','CVS','CVQ','CVL','CVI','CVE','CVDWD',
        -            'CVD','CVCUX','CVCUR','CVBYT','CURRENCY','CUR','CSET$','CSCH',
        -            'CSC','CRYPTO_GETPROVIDERTYPESCOUNT','CRYPTO_GETPROVIDERSCOUNT','CRYPTO_GETDEFAULTPROVIDER','CRYPTO_GENRANDOMSTRING','CRYPTO_ENUMPROVIDERTYPES','CRYPTO_ENUMPROVIDERS','CRYPTO_ENCRYPT',
        -            'CRYPTO_DECRYPT','CREATEFONT','COTH','COTAN','COSH','COS','CONTROL_SETTEXT','CONTROL_GETTEXT',
        -            'CONTROL_GETNUMBER','CONTROL','CONST','CONSOLE_WRITELINE','CONSOLE_WRITE','CONSOLE_WAITKEY','CONSOLE_SHOWWINDOW','CONSOLE_SHOWCURSOR',
        -            'CONSOLE_SETTITLE','CONSOLE_SETTEXTATTRIBUTE','CONSOLE_SETSTDHANDLE','CONSOLE_SETSCREENBUFFERSIZE','CONSOLE_SETPROGRESSBARCHAR','CONSOLE_SETOUTPUTMODE','CONSOLE_SETOUTPUTCP','CONSOLE_SETINPUTMODE',
        -            'CONSOLE_SETFILEAPISTOOEM','CONSOLE_SETFILEAPISTOANSI','CONSOLE_SETCURSORSIZE','CONSOLE_SETCURSORPOSITION','CONSOLE_SETCP','CONSOLE_SETACTIVESCREENBUFFER','CONSOLE_SCROLLWINDOW','CONSOLE_SCROLLBUFFERONEROW',
        -            'CONSOLE_SCROLLBUFFER','CONSOLE_SAVESCREEN','CONSOLE_RESTORESCREEN','CONSOLE_READLINE','CONSOLE_READ','CONSOLE_PROGRESSBAR','CONSOLE_PRINTLINE','CONSOLE_PRINTAT',
        -            'CONSOLE_PRINT','CONSOLE_NORMALSCREEN','CONSOLE_LINE','CONSOLE_INKEYB','CONSOLE_INKEY','CONSOLE_HIDECURSOR','CONSOLE_GETTITLE','CONSOLE_GETTEXTATTRIBUTE',
        -            'CONSOLE_GETSTDHANDLE','CONSOLE_GETSIZEY','CONSOLE_GETSIZEX','CONSOLE_GETPROGRESSBARCHAR','CONSOLE_GETOUTPUTMODE','CONSOLE_GETOUTPUTCP','CONSOLE_GETNUMBEROFMOUSEBUTTONS','CONSOLE_GETINPUTMODE',
        -            'CONSOLE_GETCURSORY','CONSOLE_GETCURSORX','CONSOLE_GETCURSORSIZE','CONSOLE_GETCURRENTFONTINDEX','CONSOLE_GETCP','CONSOLE_GENERATECTRLEVENT','CONSOLE_FULLSCREEN','CONSOLE_FREE',
        -            'CONSOLE_FOREGROUNDRGB','CONSOLE_ENABLECTRLC','CONSOLE_DISABLECTRLC','CONSOLE_CREATESCREENBUFFER','CONSOLE_COLORAT','CONSOLE_CLS','CONSOLE_BOX','CONSOLE_BACKGROUNDRGB',
        -            'CONSOLE_ATTACH','CONSOLE_AREFILEAPISANSI','CONSOLE_ALLOC','COM_VARIANTINIT','COM_VARIANTCOPY','COM_VARIANTCLEAR','COM_SUCCEEDED','COM_STRINGFROMCLSID',
        -            'COM_RELEASE','COM_QUERYINTERFACE','COM_PROGIDFROMCLSID','COM_ISEQUALIID','COM_ISEQUALGUID','COM_ISEQUALCLSID','COM_GETOBJECT','COM_GETENGINEGUID',
        -            'COM_EXECUTE','COM_DISPLAYERROR','COM_CREATEOBJECT','COM_CLSIDFROMSTRING','COM_CLSIDFROMPROGID','COM_BUILDVARIANT','COMBOBOX','COMBINATIONS',
        -            'COLOR','CLIPBOARD_SETTEXT','CLIPBOARD_GETTEXT','CLIENT','CLEARMESSAGES','CHR$','CHOOSE$','CHOOSE',
        -            'CHECKBOX','CHECK3STATE','CHECK','CGI_WRITELOGFILE','CGI_WRITE','CGI_URLDECODESTRING','CGI_UPLOADFILESTIME','CGI_UPLOADFILESNUMBER',
        -            'CGI_UPLOADFILESIZE','CGI_STARTSESSION','CGI_SETSESSIONVARIABLE','CGI_RESETDEFAULTSETTINGS','CGI_REMOVESPECIALCHARSPREFIX','CGI_REMOVEQUOTE','CGI_READ','CGI_LOADCONFIGFILE',
        -            'CGI_HEADER','CGI_GETSESSIONVARIABLE','CGI_GETREQUESTMETHOD','CGI_GETQUERYVALUE','CGI_GETCURRENTSESSION','CGI_GETCURRENTGUID','CGI_ENVIRON','CGI_CFGSETOPTION',
        -            'CGI_CFGGETOPTION','CGI_ADDSPECIALCHARSPREFIX','CGI_ADDQUOTE','CEIL','CASE','CALL','BYVAL','BYTE',
        -            'BYREF','BYCMD','BUTTON','BUNDLE_SETSCRIPTPARAMETERS','BUNDLE_SETSCRIPTNAME','BUNDLE_SETFLAGOBFUSCATEMAINSCRIPT','BUNDLE_SETFLAGDELETEAFTERRUN','BUNDLE_SETFLAGCOMPRESSALLFILES',
        -            'BUNDLE_SETFLAGASKBEFOREEXTRACT','BUNDLE_SETEXTRACTIONFOLDER','BUNDLE_SETCREATIONFOLDER','BUNDLE_SETBUNDLENAME','BUNDLE_RESET','BUNDLE_MAKE','BUNDLE_BUILDER','BUNDLE_ADDFOLDER',
        -            'BUNDLE_ADDFILE','BOUNDCHECK','BIN$','BIFF_WRITETEXT','BIFF_WRITENUMBER','BIFF_WRITEDATE','BIFF_SETROWHEIGHT','BIFF_SETCOLWIDTH',
        -            'BIFF_SETBUFFER','BIFF_CREATEFILE','BIFF_CLOSEFILE','BETWEEN','BEEP','BAR','ATTACH','ATN',
        -            'AT','ASSIGN','ASCIZ','ASCIIZ','ASCII2UNICODE','ASCENDING','ASCEND','ASC',
        -            'AS','ARRAY','ARCTANH','ARCSINH','ARCSIN','ARCSECH','ARCSEC','ARCCSCH',
        -            'ARCCSC','ARCCOTH','ARCCOT','ARCCOSH','ARCCOS','APP_TIMER','APP_SOURCEPATH','APP_SOURCENAME',
        -            'APP_SOURCEFULLNAME','APP_PATH','APP_NAME','APP_LISTVARIABLES','APP_LISTKEYWORDS','APP_LISTFUNCTIONS','APP_LISTEQUATES','APP_INCLUDEPATH',
        -            'APP_GETMODULEFULLPATH','APP_COUNTER','APPEND','ANY','ANIMATE_STOP','ANIMATE_PLAY','ANIMATE_OPEN','AND',
        -            'ALIAS','ALERT','ADD','ACODE$','ABS','%DEF','#MINVERSION','#IF',
        -            '#ENDIF','#ELSEIF','#ELSE','#DEFAULT','#DEF','SQLWRITEPRIVATEPROFILESTRING','SQLWRITEFILEDSN','SQLWRITEDSNTOINI',
        -            'SQLVALIDDSN','SQLTRANSACT','SQLTABLES','SQLTABLEPRIVILEGES','SQLSTATISTICS','SQLSPECIALCOLUMNS','SQLSETSTMTOPTION','SQLSETSTMTATTR',
        -            'SQLSETSCROLLOPTIONS','SQLSETPOS','SQLSETPARAM','SQLSETENVATTR','SQLSETDESCREC','SQLSETDESCFIELD','SQLSETCURSORNAME','SQLSETCONNECTOPTION',
        -            'SQLSETCONNECTATTR','SQLSETCONFIGMODE','SQLROWCOUNT','SQLREMOVETRANSLATOR','SQLREMOVEDSNFROMINI','SQLREMOVEDRIVERMANAGER','SQLREMOVEDRIVER','SQLREADFILEDSN',
        -            'SQLPUTDATA','SQLPROCEDURES','SQLPROCEDURECOLUMNS','SQLPRIMARYKEYS','SQLPREPARE','SQLPOSTINSTALLERERROR','SQLPARAMOPTIONS','SQLPARAMDATA',
        -            'SQLNUMRESULTCOLS','SQLNUMPARAMS','SQLNATIVESQL','SQLMORERESULTS','SQLMANAGEDATASOURCES','SQLINSTALLTRANSLATOREX','SQLINSTALLERERROR','SQLINSTALLDRIVERMANAGER',
        -            'SQLINSTALLDRIVEREX','SQLGETTYPEINFO','SQLGETTRANSLATOR','SQLGETSTMTOPTION','SQLGETSTMTATTR','SQLGETPRIVATEPROFILESTRING','SQLGETINSTALLEDDRIVERS','SQLGETINFO',
        -            'SQLGETFUNCTIONS','SQLGETENVATTR','SQLGETDIAGREC','SQLGETDIAGFIELD','SQLGETDESCREC','SQLGETDESCFIELD','SQLGETDATA','SQLGETCURSORNAME',
        -            'SQLGETCONNECTOPTION','SQLGETCONNECTATTR','SQLGETCONFIGMODE','SQLFREESTMT','SQLFREEHANDLE','SQLFREEENV','SQLFREECONNECT','SQLFOREIGNKEYS',
        -            'SQLFETCHSCROLL','SQLFETCH','SQLEXTENDEDFETCH','SQLEXECUTE','SQLEXECDIRECT','SQLERROR','SQLENDTRAN','SQLDRIVERS',
        -            'SQLDRIVERCONNECT','SQLDISCONNECT','SQLDESCRIBEPARAM','SQLDESCRIBECOL','SQLDATASOURCES','SQLCREATEDATASOURCE','SQLCOPYDESC','SQLCONNECT',
        -            'SQLCONFIGDRIVER','SQLCONFIGDATASOURCE','SQLCOLUMNS','SQLCOLUMNPRIVILEGES','SQLCOLATTRIBUTES','SQLCOLATTRIBUTE','SQLCLOSECURSOR','SQLCANCEL',
        -            'SQLBULKOPERATIONS','SQLBROWSECONNECT','SQLBINDPARAMETER','SQLBINDPARAM','SQLBINDCOL','SQLALLOCSTMT','SQLALLOCHANDLE','SQLALLOCENV',
        -            'SQLALLOCCONNECT','ODBCWRONGDRIVER','ODBCWRITEPRIVATEPROFILESTRING','ODBCWRITEFILEDSN','ODBCWRITEDSNTOINI','ODBCVALIDDSN','ODBCUPDATERECORD','ODBCUPDATEBYBOOKMARK',
        -            'ODBCUNLOCKRECORD','ODBCUNBINDCOLUMNS','ODBCUNBINDCOL','ODBCTABLESCOUNT','ODBCTABLES','ODBCTABLEPRIVILEGESCOUNT','ODBCTABLEPRIVILEGES','ODBCSUPPORTS',
        -            'ODBCSTATTABLESCHEMANAME','ODBCSTATTABLEPAGES','ODBCSTATTABLECATALOGNAME','ODBCSTATTABLECARDINALITY','ODBCSTATISTICSCOUNT','ODBCSTATISTICS','ODBCSTATINDEXSORTSEQUENCE','ODBCSTATINDEXSCHEMANAME',
        -            'ODBCSTATINDEXQUALIFIER','ODBCSTATINDEXPAGES','ODBCSTATINDEXFILTERCONDITION','ODBCSTATINDEXCOLUMNORDINALPOSITION','ODBCSTATINDEXCOLUMNNAME','ODBCSTATINDEXCATALOGNAME','ODBCSTATINDEXCARDINALITY','ODBCSTATINDEXALLOWDUPLICATES',
        -            'ODBCSPECIALCOLUMNSCOUNT','ODBCSPECIALCOLUMNS','ODBCSETTXNISOLATION','ODBCSETTRANSLATELIB','ODBCSETTRACEFILE','ODBCSETTRACE','ODBCSETSTMTUSEBOOKMARKS','ODBCSETSTMTSIMULATECURSOR',
        -            'ODBCSETSTMTROWSTATUSPTR','ODBCSETSTMTROWSFETCHEDPTR','ODBCSETSTMTROWOPERATIONPTR','ODBCSETSTMTROWBINDTYPE','ODBCSETSTMTROWBINDOFFSETPTR','ODBCSETSTMTROWARRAYSIZE','ODBCSETSTMTRETRIEVEDATA','ODBCSETSTMTQUERYTIMEOUT',
        -            'ODBCSETSTMTPARAMSTATUSPTR','ODBCSETSTMTPARAMSPROCESSEDPTR','ODBCSETSTMTPARAMSETSIZE','ODBCSETSTMTPARAMOPERATIONPTR','ODBCSETSTMTPARAMBINDTYPE','ODBCSETSTMTPARAMBINDOFFSETPTR','ODBCSETSTMTNOSCAN','ODBCSETSTMTMETADATAID',
        -            'ODBCSETSTMTMAXROWS','ODBCSETSTMTMAXLENGTH','ODBCSETSTMTKEYSETSIZE','ODBCSETSTMTFETCHBOOKMARKPTR','ODBCSETSTMTENABLEAUTOIPD','ODBCSETSTMTCURSORTYPE','ODBCSETSTMTCURSORSENSITIVITY','ODBCSETSTMTCURSORSCROLLABLE',
        -            'ODBCSETSTMTCONCURRENCY','ODBCSETSTMTATTR','ODBCSETSTMTASYNCENABLE','ODBCSETSTMTAPPROWDESC','ODBCSETSTMTAPPPARAMDESC','ODBCSETSTATICCURSOR','ODBCSETROWVERCONCURRENCY','ODBCSETRESULT',
        -            'ODBCSETRELATIVEPOSITION','ODBCSETREADONLYCONCURRENCY','ODBCSETQUIETMODE','ODBCSETPOSITION','ODBCSETPOS','ODBCSETPACKETMODE','ODBCSETOPTIMISTICCONCURRENCY','ODBCSETODBCCURSORS',
        -            'ODBCSETMULTIUSERKEYSETCURSOR','ODBCSETMETADATAID','ODBCSETLOGINTIMEOUT','ODBCSETLOCKCONCURRENCY','ODBCSETKEYSETDRIVENCURSOR','ODBCSETFORWARDONLYCURSOR','ODBCSETENVOUTPUTNTS','ODBCSETENVODBCVERSION',
        -            'ODBCSETENVCPMATCH','ODBCSETENVCONNECTIONPOOLING','ODBCSETENVATTR','ODBCSETDYNAMICCURSOR','ODBCSETDESCREC','ODBCSETDESCFIELD','ODBCSETCURSORTYPE','ODBCSETCURSORSENSITIVITY',
        -            'ODBCSETCURSORSCROLLABILITY','ODBCSETCURSORNAME','ODBCSETCURSORLOCKTYPE','ODBCSETCURSORKEYSETSIZE','ODBCSETCURSORCONCURRENCY','ODBCSETCURRENTCATALOG','ODBCSETCONNECTIONTIMEOUT','ODBCSETCONNECTATTR',
        -            'ODBCSETCONFIGMODE','ODBCSETCONCURVALUESCONCURRENCY','ODBCSETAUTOCOMMITON','ODBCSETAUTOCOMMITOFF','ODBCSETAUTOCOMMIT','ODBCSETASYNCENABLE','ODBCSETACCESSMODE','ODBCSETABSOLUTEPOSITION',
        -            'ODBCROWCOUNT','ODBCROLLBACKTRAN','ODBCROLLBACKENVTRAN','ODBCROLLBACKDBCTRAN','ODBCRESULT','ODBCRESETPARAMS','ODBCREMOVETRANSLATOR','ODBCREMOVEDSNFROMINI',
        -            'ODBCREMOVEDRIVERMANAGER','ODBCREMOVEDRIVER','ODBCREFRESHRECORD','ODBCRECORDCOUNT','ODBCREADFILEDSN','ODBCQUOTEDIDENTIFIERCASE','ODBCPUTDATA','ODBCPROCEDURESCOUNT',
        -            'ODBCPROCEDURES','ODBCPROCEDURECOLUMNSCOUNT','ODBCPROCEDURECOLUMNS','ODBCPRIMARYKEYSCOUNT','ODBCPRIMARYKEYS','ODBCPREPARE','ODBCPOSTINSTALLERERROR','ODBCPARAMDATA',
        -            'ODBCOPENSTMT','ODBCOPENCONNECTION','ODBCNUMRESULTCOLS','ODBCNUMPARAMS','ODBCNATIVESQL','ODBCMOVEPREVIOUS','ODBCMOVENEXT','ODBCMOVELAST',
        -            'ODBCMOVEFIRST','ODBCMOVE','ODBCMORERESULTS','ODBCMANAGEDATASOURCES','ODBCLOCKRECORD','ODBCINSTALLTRANSLATOREX','ODBCINSTALLERERROR','ODBCINSTALLDRIVERMANAGER',
        -            'ODBCINSTALLDRIVEREX','ODBCGETXOPENCLIYEAR','ODBCGETUSERNAME','ODBCGETUNION','ODBCGETTYPEINFOCOUNT','ODBCGETTYPEINFO','ODBCGETTXNISOLATIONOPTION','ODBCGETTXNISOLATION',
        -            'ODBCGETTXNCAPABLE','ODBCGETTRANSLATOR','ODBCGETTRANSLATELIB','ODBCGETTRACEFILE','ODBCGETTRACE','ODBCGETTIMEDATEFUNCTIONS','ODBCGETTIMEDATEDIFFINTERVALS','ODBCGETTIMEDATEADDINTERVALS',
        -            'ODBCGETTABLETERM','ODBCGETSYSTEMFUNCTIONS','ODBCGETSUBQUERIES','ODBCGETSTRINGFUNCTIONS','ODBCGETSTMTUSEBOOKMARKS','ODBCGETSTMTSQLSTATE','ODBCGETSTMTSIMULATECURSOR','ODBCGETSTMTROWSTATUSPTR',
        -            'ODBCGETSTMTROWSFETCHEDPTR','ODBCGETSTMTROWOPERATIONPTR','ODBCGETSTMTROWNUMBER','ODBCGETSTMTROWBINDTYPE','ODBCGETSTMTROWBINDOFFSETPTR','ODBCGETSTMTROWARRAYSIZE','ODBCGETSTMTRETRIEVEDATA','ODBCGETSTMTQUERYTIMEOUT',
        -            'ODBCGETSTMTPARAMSTATUSPTR','ODBCGETSTMTPARAMSPROCESSEDPTR','ODBCGETSTMTPARAMSETSIZE','ODBCGETSTMTPARAMOPERATIONPTR','ODBCGETSTMTPARAMBINDTYPE','ODBCGETSTMTPARAMBINDOFFSETPTR','ODBCGETSTMTNOSCAN','ODBCGETSTMTMETADATAID',
        -            'ODBCGETSTMTMAXROWS','ODBCGETSTMTMAXLENGTH','ODBCGETSTMTKEYSETSIZE','ODBCGETSTMTIMPROWDESC','ODBCGETSTMTIMPPARAMDESC','ODBCGETSTMTFETCHBOOKMARKPTR','ODBCGETSTMTERRORINFO','ODBCGETSTMTENABLEAUTOIPD',
        -            'ODBCGETSTMTCURSORTYPE','ODBCGETSTMTCURSORSENSITIVITY','ODBCGETSTMTCURSORSCROLLABLE','ODBCGETSTMTCONCURRENCY','ODBCGETSTMTATTR','ODBCGETSTMTASYNCENABLE','ODBCGETSTMTAPPROWDESC','ODBCGETSTMTAPPPARAMDESC',
        -            'ODBCGETSTATICCURSORATTRIBUTES2','ODBCGETSTATICCURSORATTRIBUTES1','ODBCGETSTATEMENTSQLSTATE','ODBCGETSTATEMENTERRORINFO','ODBCGETSTANDARDCLICONFORMANCE','ODBCGETSQLSTATE','ODBCGETSQLCONFORMANCE','ODBCGETSQL92VALUEEXPRESSIONS',
        -            'ODBCGETSQL92STRINGFUNCTIONS','ODBCGETSQL92ROWVALUECONSTRUCTOR','ODBCGETSQL92REVOKE','ODBCGETSQL92RELATIONALJOINOPERATORS','ODBCGETSQL92PREDICATES','ODBCGETSQL92NUMERICVALUEFUNCTIONS','ODBCGETSQL92GRANT','ODBCGETSQL92FOREIGNKEYUPDATERULE',
        -            'ODBCGETSQL92FOREIGNKEYDELETERULE','ODBCGETSQL92DATETIMEFUNCTIONS','ODBCGETSPECIALCHARACTERS','ODBCGETSERVERNAME','ODBCGETSEARCHPATTERNESCAPE','ODBCGETSCROLLOPTIONS','ODBCGETSCHEMAUSAGE','ODBCGETSCHEMATERM',
        -            'ODBCGETROWUPDATES','ODBCGETQUIETMODE','ODBCGETPROCEDURETERM','ODBCGETPROCEDURESSUPPORT','ODBCGETPRIVATEPROFILESTRING','ODBCGETPOSOPERATIONS','ODBCGETPARAMARRAYSELECTS','ODBCGETPARAMARRAYROWCOUNTS',
        -            'ODBCGETPACKETMODE','ODBCGETOUTERJOINS','ODBCGETORDERBYCOLUMNSINSELECT','ODBCGETOJCAPABILITIES','ODBCGETODBCVER','ODBCGETODBCINTERFACECONFORMANCE','ODBCGETODBCCURSORS','ODBCGETNUMERICFUNCTIONS',
        -            'ODBCGETNULLCOLLATION','ODBCGETNONNULLABLECOLUMNS','ODBCGETNEEDLONGDATALEN','ODBCGETMULTRESULTSETS','ODBCGETMULTIPLEACTIVETXN','ODBCGETMETADATAID','ODBCGETMAXUSERNAMELEN','ODBCGETMAXTABLESINSELECT',
        -            'ODBCGETMAXTABLENAMELEN','ODBCGETMAXSTATEMENTLEN','ODBCGETMAXSCHEMANAMELEN','ODBCGETMAXROWSIZEINCLUDESLONG','ODBCGETMAXROWSIZE','ODBCGETMAXPROCEDURENAMELEN','ODBCGETMAXINDEXSIZE','ODBCGETMAXIDENTIFIERLEN',
        -            'ODBCGETMAXDRIVERCONNECTIONS','ODBCGETMAXCURSORNAMELEN','ODBCGETMAXCONCURRENTACTIVITIES','ODBCGETMAXCOLUMNSINTABLE','ODBCGETMAXCOLUMNSINSELECT','ODBCGETMAXCOLUMNSINORDERBY','ODBCGETMAXCOLUMNSININDEX','ODBCGETMAXCOLUMNSINGROUPBY',
        -            'ODBCGETMAXCOLUMNNAMELEN','ODBCGETMAXCHARLITERALLEN','ODBCGETMAXCATALOGNAMELEN','ODBCGETMAXBINARYLITERALLEN','ODBCGETMAXASYNCCONCURRENTSTATEMENTS','ODBCGETLONGVARCHARDATABYCOLNAME','ODBCGETLONGVARCHARDATA','ODBCGETLOGINTIMEOUT',
        -            'ODBCGETLIKEESCAPECLAUSE','ODBCGETKEYWORDS','ODBCGETKEYSETCURSORATTRIBUTES2','ODBCGETKEYSETCURSORATTRIBUTES1','ODBCGETINTEGRITY','ODBCGETINSTALLERERRORMESSAGE','ODBCGETINSTALLERERRORCODE','ODBCGETINSTALLEDDRIVERS',
        -            'ODBCGETINSERTSTATEMENT','ODBCGETINFOSTR','ODBCGETINFOSCHEMAVIEWS','ODBCGETINFOLONG','ODBCGETINFOINT','ODBCGETINFO','ODBCGETINDEXKEYWORDS','ODBCGETIMPROWDESCREC',
        -            'ODBCGETIMPROWDESCFIELDTYPE','ODBCGETIMPROWDESCFIELDSCALE','ODBCGETIMPROWDESCFIELDPRECISION','ODBCGETIMPROWDESCFIELDOCTETLENGTH','ODBCGETIMPROWDESCFIELDNULLABLE','ODBCGETIMPROWDESCFIELDNAME','ODBCGETIMPROWDESCFIELD','ODBCGETIMPPARAMDESCREC',
        -            'ODBCGETIMPPARAMDESCFIELDTYPE','ODBCGETIMPPARAMDESCFIELDSCALE','ODBCGETIMPPARAMDESCFIELDPRECISION','ODBCGETIMPPARAMDESCFIELDOCTETLENGTH','ODBCGETIMPPARAMDESCFIELDNULLABLE','ODBCGETIMPPARAMDESCFIELDNAME','ODBCGETIMPPARAMDESCFIELD','ODBCGETIDENTIFIERQUOTECHAR',
        -            'ODBCGETIDENTIFIERCASE','ODBCGETGROUPBY','ODBCGETFUNCTIONS','ODBCGETFORWARDONLYCURSORATTRIBUTES2','ODBCGETFORWARDONLYCURSORATTRIBUTES1','ODBCGETFILEUSAGE','ODBCGETEXPRESSIONSINORDERBY','ODBCGETERRORINFO',
        -            'ODBCGETENVSQLSTATE','ODBCGETENVOUTPUTNTS','ODBCGETENVODBCVERSION','ODBCGETENVIRONMENTSQLSTATE','ODBCGETENVIRONMENTERRORINFO','ODBCGETENVERRORINFO','ODBCGETENVCPMATCH','ODBCGETENVCONNECTIONPOOLING',
        -            'ODBCGETENVATTR','ODBCGETDYNAMICCURSORATTRIBUTES2','ODBCGETDYNAMICCURSORATTRIBUTES1','ODBCGETDROPVIEW','ODBCGETDROPTRANSLATION','ODBCGETDROPTABLE','ODBCGETDROPSCHEMA','ODBCGETDROPDOMAIN',
        -            'ODBCGETDROPCOLLATION','ODBCGETDROPCHARACTERSET','ODBCGETDROPASSERTION','ODBCGETDRIVERVER','ODBCGETDRIVERODBCVER','ODBCGETDRIVERNAME','ODBCGETDRIVERMANAGERINSTALLPATH','ODBCGETDRIVERHLIB',
        -            'ODBCGETDRIVERHENV','ODBCGETDRIVERHDBC','ODBCGETDMVERMINOR','ODBCGETDMVERMAJOR','ODBCGETDMVER','ODBCGETDIAGREC','ODBCGETDIAGFIELD','ODBCGETDESCSQLSTATE',
        -            'ODBCGETDESCRIPTORSQLSTATE','ODBCGETDESCRIPTORERRORINFO','ODBCGETDESCRIBEPARAMETER','ODBCGETDESCREC','ODBCGETDESCFIELD','ODBCGETDESCERRORINFO','ODBCGETDEFAULTTXNISOLATION','ODBCGETDDLINDEX',
        -            'ODBCGETDBMSVER','ODBCGETDBMSNAME','ODBCGETDBCSQLSTATE','ODBCGETDBCERRORINFO','ODBCGETDATETIMELITERALS','ODBCGETDATASTRINGBYCOLNAME','ODBCGETDATASTRING','ODBCGETDATASOURCEREADONLY',
        -            'ODBCGETDATASOURCENAME','ODBCGETDATAEXTENSIONS','ODBCGETDATABASENAME','ODBCGETDATA','ODBCGETCURSORTYPE','ODBCGETCURSORSENSITIVITYSUPPORT','ODBCGETCURSORSENSITIVITY','ODBCGETCURSORSCROLLABILITY',
        -            'ODBCGETCURSORROLLBACKBEHAVIOR','ODBCGETCURSORNAME','ODBCGETCURSORLOCKTYPE','ODBCGETCURSORKEYSETSIZE','ODBCGETCURSORCONCURRENCY','ODBCGETCURSORCOMMITBEHAVIOR','ODBCGETCURRENTCATALOG','ODBCGETCREATEVIEW',
        -            'ODBCGETCREATETRANSLATION','ODBCGETCREATETABLE','ODBCGETCREATESCHEMA','ODBCGETCREATEDOMAIN','ODBCGETCREATECOLLATION','ODBCGETCREATECHARACTERSET','ODBCGETCREATEASSERTION','ODBCGETCORRELATIONNAME',
        -            'ODBCGETCONVERTVARCHAR','ODBCGETCONVERTVARBINARY','ODBCGETCONVERTTINYINT','ODBCGETCONVERTTIMESTAMP','ODBCGETCONVERTTIME','ODBCGETCONVERTSMALLINT','ODBCGETCONVERTREAL','ODBCGETCONVERTNUMERIC',
        -            'ODBCGETCONVERTLONGVARCHAR','ODBCGETCONVERTLONGVARBINARY','ODBCGETCONVERTINTERVALYEARMONTH','ODBCGETCONVERTINTERVALDAYTIME','ODBCGETCONVERTINTEGER','ODBCGETCONVERTFUNCTIONS','ODBCGETCONVERTFLOAT','ODBCGETCONVERTDOUBLE',
        -            'ODBCGETCONVERTDECIMAL','ODBCGETCONVERTDATE','ODBCGETCONVERTCHAR','ODBCGETCONVERTBIT','ODBCGETCONVERTBINARY','ODBCGETCONVERTBIGINT','ODBCGETCONNECTIONTIMEOUT','ODBCGETCONNECTIONSQLSTATE',
        -            'ODBCGETCONNECTIONERRORINFO','ODBCGETCONNECTIONDEAD','ODBCGETCONNECTATTR','ODBCGETCONFIGMODE','ODBCGETCONCATNULLBEHAVIOR','ODBCGETCOLUMNALIAS','ODBCGETCOLLATIONSEQ','ODBCGETCATALOGUSAGE',
        -            'ODBCGETCATALOGTERM','ODBCGETCATALOGNAMESEPARATOR','ODBCGETCATALOGNAME','ODBCGETCATALOGLOCATION','ODBCGETBOOKMARKPERSISTENCE','ODBCGETBATCHSUPPORT','ODBCGETBATCHROWCOUNT','ODBCGETAUTOIPD',
        -            'ODBCGETAUTOCOMMIT','ODBCGETASYNCMODE','ODBCGETASYNCENABLE','ODBCGETALTERTABLE','ODBCGETALTERDOMAIN','ODBCGETAGGREGATEFUNCTIONS','ODBCGETACTIVEENVIRONMENTS','ODBCGETACCESSMODE',
        -            'ODBCGETACCESSIBLETABLES','ODBCGETACCESSIBLEPROCEDURES','ODBCFREESTMT','ODBCFREEHANDLE','ODBCFREEENV','ODBCFREEDESC','ODBCFREEDBC','ODBCFREECONNECT',
        -            'ODBCFOREIGNKEYSCOUNT','ODBCFOREIGNKEYS','ODBCFETCHSCROLL','ODBCFETCHBYBOOKMARK','ODBCFETCH','ODBCEXTENDEDFETCH','ODBCEXECUTE','ODBCEXECDIRECT',
        -            'ODBCERROR','ODBCEOF','ODBCENDTRAN','ODBCDRIVERSCOUNT','ODBCDRIVERS','ODBCDRIVERCONNECT','ODBCDISCONNECT','ODBCDESCRIBEPARAM',
        -            'ODBCDESCRIBECOL','ODBCDELETERECORD','ODBCDELETEBYBOOKMARK','ODBCDATASOURCES','ODBCCREATEDATASOURCE','ODBCCOPYDESC','ODBCCONNECTIONISDEAD','ODBCCONNECTIONISALIVE',
        -            'ODBCCONNECT','ODBCCONFIGDRIVER','ODBCCONFIGDATASOURCE','ODBCCOMMITTRAN','ODBCCOMMITENVTRAN','ODBCCOMMITDBCTRAN','ODBCCOLUPDATABLE','ODBCCOLUNSIGNED',
        -            'ODBCCOLUNNAMED','ODBCCOLUMNSCOUNT','ODBCCOLUMNS','ODBCCOLUMNPRIVILEGESCOUNT','ODBCCOLUMNPRIVILEGES','ODBCCOLUMN','ODBCCOLTYPENAME','ODBCCOLTYPE',
        -            'ODBCCOLTABLENAME','ODBCCOLSEARCHABLE','ODBCCOLSCHEMANAME','ODBCCOLSCALE','ODBCCOLPRECISION','ODBCCOLOCTETLENGTH','ODBCCOLNUMPRECRADIX','ODBCCOLNULLABLE',
        -            'ODBCCOLNAME','ODBCCOLLOCALTYPENAME','ODBCCOLLITERALSUFFIX','ODBCCOLLITERALPREFIX','ODBCCOLLENGTH','ODBCCOLLABEL','ODBCCOLISNULL','ODBCCOLFIXEDPRECSCALE',
        -            'ODBCCOLDISPLAYSIZE','ODBCCOLCOUNT','ODBCCOLCONCISETYPE','ODBCCOLCATALOGNAME','ODBCCOLCASESENSITIVE','ODBCCOLBASETABLENAME','ODBCCOLBASECOLUMNNAME','ODBCCOLAUTOUNIQUEVALUE',
        -            'ODBCCOLATTRIBUTE','ODBCCLOSESTMTCURSOR','ODBCCLOSESTMT','ODBCCLOSECURSOR','ODBCCLOSECONNECTION','ODBCCLEARRESULT','ODBCCANCEL','ODBCBULKOPERATIONS',
        -            'ODBCBROWSECONNECT','ODBCBINDPARAMETER','ODBCBINDCOLTOWORD','ODBCBINDCOLTOTIMESTAMP','ODBCBINDCOLTOTIME','ODBCBINDCOLTOSTRING','ODBCBINDCOLTOSINGLE','ODBCBINDCOLTOQUAD',
        -            'ODBCBINDCOLTONUMERIC','ODBCBINDCOLTOLONG','ODBCBINDCOLTOINTEGER','ODBCBINDCOLTODWORD','ODBCBINDCOLTODOUBLE','ODBCBINDCOLTODECIMAL','ODBCBINDCOLTODATE','ODBCBINDCOLTOCURRENCY',
        -            'ODBCBINDCOLTOBYTE','ODBCBINDCOLTOBIT','ODBCBINDCOLTOBINARY','ODBCBINDCOL','ODBCALLOCSTMT','ODBCALLOCHANDLE','ODBCALLOCENV','ODBCALLOCDESC',
        -            'ODBCALLOCDBC','ODBCALLOCCONNECT','ODBCADDRECORD','GLVIEWPORT','GLVERTEXPOINTER','GLVERTEX4SV','GLVERTEX4S','GLVERTEX4IV',
        -            'GLVERTEX4I','GLVERTEX4FV','GLVERTEX4F','GLVERTEX4DV','GLVERTEX4D','GLVERTEX3SV','GLVERTEX3S','GLVERTEX3IV',
        -            'GLVERTEX3I','GLVERTEX3FV','GLVERTEX3F','GLVERTEX3DV','GLVERTEX3D','GLVERTEX2SV','GLVERTEX2S','GLVERTEX2IV',
        -            'GLVERTEX2I','GLVERTEX2FV','GLVERTEX2F','GLVERTEX2DV','GLVERTEX2D','GLUUNPROJECT','GLUTESSVERTEX','GLUTESSPROPERTY',
        -            'GLUTESSNORMAL','GLUTESSENDPOLYGON','GLUTESSENDCONTOUR','GLUTESSCALLBACK','GLUTESSBEGINPOLYGON','GLUTESSBEGINCONTOUR','GLUSPHERE','GLUSCALEIMAGE',
        -            'GLUQUADRICTEXTURE','GLUQUADRICORIENTATION','GLUQUADRICNORMALS','GLUQUADRICDRAWSTYLE','GLUQUADRICCALLBACK','GLUPWLCURVE','GLUPROJECT','GLUPICKMATRIX',
        -            'GLUPERSPECTIVE','GLUPARTIALDISK','GLUORTHO2D','GLUNURBSSURFACE','GLUNURBSPROPERTY','GLUNURBSCURVE','GLUNURBSCALLBACK','GLUNEXTCONTOUR',
        -            'GLUNEWTESS','GLUNEWQUADRIC','GLUNEWNURBSRENDERER','GLULOOKAT','GLULOADSAMPLINGMATRICES','GLUGETTESSPROPERTY','GLUGETSTRING','GLUGETNURBSPROPERTY',
        -            'GLUERRORSTRING','GLUENDTRIM','GLUENDSURFACE','GLUENDPOLYGON','GLUENDCURVE','GLUDISK','GLUDELETETESS','GLUDELETEQUADRIC',
        -            'GLUDELETENURBSRENDERER','GLUCYLINDER','GLUBUILD2DMIPMAPS','GLUBUILD1DMIPMAPS','GLUBEGINTRIM','GLUBEGINSURFACE','GLUBEGINPOLYGON','GLUBEGINCURVE',
        -            'GLTRANSLATEF','GLTRANSLATED','GLTEXSUBIMAGE2D','GLTEXSUBIMAGE1D','GLTEXPARAMETERIV','GLTEXPARAMETERI','GLTEXPARAMETERFV','GLTEXPARAMETERF',
        -            'GLTEXIMAGE2D','GLTEXIMAGE1D','GLTEXGENIV','GLTEXGENI','GLTEXGENFV','GLTEXGENF','GLTEXGENDV','GLTEXGEND',
        -            'GLTEXENVIV','GLTEXENVI','GLTEXENVFV','GLTEXENVF','GLTEXCOORDPOINTER','GLTEXCOORD4SV','GLTEXCOORD4S','GLTEXCOORD4IV',
        -            'GLTEXCOORD4I','GLTEXCOORD4FV','GLTEXCOORD4F','GLTEXCOORD4DV','GLTEXCOORD4D','GLTEXCOORD3SV','GLTEXCOORD3S','GLTEXCOORD3IV',
        -            'GLTEXCOORD3I','GLTEXCOORD3FV','GLTEXCOORD3F','GLTEXCOORD3DV','GLTEXCOORD3D','GLTEXCOORD2SV','GLTEXCOORD2S','GLTEXCOORD2IV',
        -            'GLTEXCOORD2I','GLTEXCOORD2FV','GLTEXCOORD2F','GLTEXCOORD2DV','GLTEXCOORD2D','GLTEXCOORD1SV','GLTEXCOORD1S','GLTEXCOORD1IV',
        -            'GLTEXCOORD1I','GLTEXCOORD1FV','GLTEXCOORD1F','GLTEXCOORD1DV','GLTEXCOORD1D','GLSTENCILOP','GLSTENCILMASK','GLSTENCILFUNC',
        -            'GLSHADEMODEL','GLSELECTBUFFER','GLSCISSOR','GLSCALEF','GLSCALED','GLROTATEF','GLROTATED','GLRENDERMODE',
        -            'GLRECTSV','GLRECTS','GLRECTIV','GLRECTI','GLRECTFV','GLRECTF','GLRECTDV','GLRECTD',
        -            'GLREADPIXELS','GLREADBUFFER','GLRASTERPOS4SV','GLRASTERPOS4S','GLRASTERPOS4IV','GLRASTERPOS4I','GLRASTERPOS4FV','GLRASTERPOS4F',
        -            'GLRASTERPOS4DV','GLRASTERPOS4D','GLRASTERPOS3SV','GLRASTERPOS3S','GLRASTERPOS3IV','GLRASTERPOS3I','GLRASTERPOS3FV','GLRASTERPOS3F',
        -            'GLRASTERPOS3DV','GLRASTERPOS3D','GLRASTERPOS2SV','GLRASTERPOS2S','GLRASTERPOS2IV','GLRASTERPOS2I','GLRASTERPOS2FV','GLRASTERPOS2F',
        -            'GLRASTERPOS2DV','GLRASTERPOS2D','GLPUSHNAME','GLPUSHMATRIX','GLPUSHCLIENTATTRIB','GLPUSHATTRIB','GLPRIORITIZETEXTURES','GLPOPNAME',
        -            'GLPOPMATRIX','GLPOPCLIENTATTRIB','GLPOPATTRIB','GLPOLYGONSTIPPLE','GLPOLYGONOFFSET','GLPOLYGONMODE','GLPOINTSIZE','GLPIXELZOOM',
        -            'GLPIXELTRANSFERI','GLPIXELTRANSFERF','GLPIXELSTOREI','GLPIXELSTOREF','GLPIXELMAPUSV','GLPIXELMAPUIV','GLPIXELMAPFV','GLPASSTHROUGH',
        -            'GLORTHO','GLNORMALPOINTER','GLNORMAL3SV','GLNORMAL3S','GLNORMAL3IV','GLNORMAL3I','GLNORMAL3FV','GLNORMAL3F',
        -            'GLNORMAL3DV','GLNORMAL3D','GLNORMAL3BV','GLNORMAL3B','GLNEWLIST','GLMULTMATRIXF','GLMULTMATRIXD','GLMATRIXMODE',
        -            'GLMATERIALIV','GLMATERIALI','GLMATERIALFV','GLMATERIALF','GLMAPGRID2F','GLMAPGRID2D','GLMAPGRID1F','GLMAPGRID1D',
        -            'GLMAP2F','GLMAP2D','GLMAP1F','GLMAP1D','GLLOGICOP','GLLOADNAME','GLLOADMATRIXF','GLLOADMATRIXD',
        -            'GLLOADIDENTITY','GLLISTBASE','GLLINEWIDTH','GLLINESTIPPLE','GLLIGHTMODELIV','GLLIGHTMODELI','GLLIGHTMODELFV','GLLIGHTMODELF',
        -            'GLLIGHTIV','GLLIGHTI','GLLIGHTFV','GLLIGHTF','GLISTEXTURE','GLISLIST','GLISENABLED','GLINTERLEAVEDARRAYS',
        -            'GLINITNAMES','GLINDEXUBV','GLINDEXUB','GLINDEXSV','GLINDEXS','GLINDEXPOINTER','GLINDEXMASK','GLINDEXIV',
        -            'GLINDEXI','GLINDEXFV','GLINDEXF','GLINDEXDV','GLINDEXD','GLHINT','GLGETTEXPARAMETERIV','GLGETTEXPARAMETERFV',
        -            'GLGETTEXLEVELPARAMETERIV','GLGETTEXLEVELPARAMETERFV','GLGETTEXIMAGE','GLGETTEXGENIV','GLGETTEXGENFV','GLGETTEXGENDV','GLGETTEXENVIV','GLGETTEXENVFV',
        -            'GLGETSTRING','GLGETPOLYGONSTIPPLE','GLGETPOINTERV','GLGETPIXELMAPUSV','GLGETPIXELMAPUIV','GLGETPIXELMAPFV','GLGETMATERIALIV','GLGETMATERIALFV',
        -            'GLGETMAPIV','GLGETMAPFV','GLGETMAPDV','GLGETLIGHTIV','GLGETLIGHTFV','GLGETINTEGERV','GLGETFLOATV','GLGETERROR',
        -            'GLGETDOUBLEV','GLGETCLIPPLANE','GLGETBOOLEANV','GLGENTEXTURES','GLGENLISTS','GLFRUSTUM','GLFRONTFACE','GLFOGIV',
        -            'GLFOGI','GLFOGFV','GLFOGF','GLFLUSH','GLFINISH','GLFEEDBACKBUFFER','GLEVALPOINT2','GLEVALPOINT1',
        -            'GLEVALMESH2','GLEVALMESH1','GLEVALCOORD2FV','GLEVALCOORD2F','GLEVALCOORD2DV','GLEVALCOORD2D','GLEVALCOORD1FV','GLEVALCOORD1F',
        -            'GLEVALCOORD1DV','GLEVALCOORD1D','GLENDLIST','GLEND','GLENABLECLIENTSTATE','GLENABLE','GLEDGEFLAGV','GLEDGEFLAGPOINTER',
        -            'GLEDGEFLAG','GLDRAWPIXELS','GLDRAWELEMENTS','GLDRAWBUFFER','GLDRAWARRAYS','GLDISABLECLIENTSTATE','GLDISABLE','GLDEPTHRANGE',
        -            'GLDEPTHMASK','GLDEPTHFUNC','GLDELETETEXTURES','GLDELETELISTS','GLCULLFACE','GLCOPYTEXSUBIMAGE2D','GLCOPYTEXSUBIMAGE1D','GLCOPYTEXIMAGE2D',
        -            'GLCOPYTEXIMAGE1D','GLCOPYPIXELS','GLCOLORPOINTER','GLCOLORMATERIAL','GLCOLORMASK','GLCOLOR4USV','GLCOLOR4US','GLCOLOR4UIV',
        -            'GLCOLOR4UI','GLCOLOR4UBV','GLCOLOR4UB','GLCOLOR4SV','GLCOLOR4S','GLCOLOR4IV','GLCOLOR4I','GLCOLOR4FV',
        -            'GLCOLOR4F','GLCOLOR4DV','GLCOLOR4D','GLCOLOR4BV','GLCOLOR4B','GLCOLOR3USV','GLCOLOR3US','GLCOLOR3UIV',
        -            'GLCOLOR3UI','GLCOLOR3UBV','GLCOLOR3UB','GLCOLOR3SV','GLCOLOR3S','GLCOLOR3IV','GLCOLOR3I','GLCOLOR3FV',
        -            'GLCOLOR3F','GLCOLOR3DV','GLCOLOR3D','GLCOLOR3BV','GLCOLOR3B','GLCLIPPLANE','GLCLEARSTENCIL','GLCLEARINDEX',
        -            'GLCLEARDEPTH','GLCLEARCOLOR','GLCLEARACCUM','GLCLEAR','GLCALLLISTS','GLCALLLIST','GLBLENDFUNC','GLBITMAP',
        -            'GLBINDTEXTURE','GLBEGIN','GLARRAYELEMENT','GLARETEXTURESRESIDENT','GLALPHAFUNC','GLACCUM'),
        -        2 => array(
        -            '$BEL','$BS','$CR','$CRLF','$DQ','$DT_DATE_SEPARATOR','$DT_LANGUAGE','$DT_TIME_SEPARATOR',
        -            '$ESC','$FF','$LF','$NUL','$PC_SD_MY_PC','$SPC','$SQL_OPT_TRACE_FILE_DEFAULT','$SQL_SPEC_STRING',
        -            '$TAB','$TRACKBAR_CLASS','$VT','%ACM_OPEN','%ACM_OPENW','%ACM_PLAY','%ACM_STOP','%ACN_START',
        -            '%ACN_STOP','%ACS_AUTOPLAY','%ACS_CENTER','%ACS_TIMER','%ACS_TRANSPARENT','%APP_COUNTER_FUNLOOKUP','%APP_COUNTER_KEYLOOKUP','%APP_COUNTER_LOOKUP',
        -            '%APP_COUNTER_TESTALPHA','%APP_COUNTER_UDTLOOKUP','%APP_COUNTER_VARLOOKUP','%APP_TIMER_EXECTOTAL','%APP_TIMER_INIT','%APP_TIMER_LOAD','%APP_TIMER_PREPROCESSOR','%AW_ACTIVATE',
        -            '%AW_BLEND','%AW_CENTER','%AW_HIDE','%AW_HOR_NEGATIVE','%AW_HOR_POSITIVE','%AW_SLIDE','%AW_VER_NEGATIVE','%AW_VER_POSITIVE',
        -            '%BCM_FIRST','%BLACK','%BLUE','%BM_GETCHECK','%BM_SETCHECK','%BST_CHECKED','%BST_UNCHECKED','%BS_AUTOCHECKBOX',
        -            '%BS_BOTTOM','%BS_CENTER','%BS_DEFAULT','%BS_DEFPUSHBUTTON','%BS_FLAT','%BS_LEFT','%BS_LEFTTEXT','%BS_MULTILINE',
        -            '%BS_NOTIFY','%BS_OWNERDRAW','%BS_PUSHLIKE','%BS_RIGHT','%BS_TOP','%BS_VCENTER','%BUNDLE_BUILDER_CANCELLED','%CBM_FIRST',
        -            '%CBN_CLOSEUP','%CBN_DBLCLK','%CBN_DROPDOWN','%CBN_EDITCHANGE','%CBN_EDITUPDATE','%CBN_ERRSPACE','%CBN_KILLFOCUS','%CBN_SELCANCEL',
        -            '%CBN_SELCHANGE','%CBN_SELENDCANCEL','%CBN_SELENDOK','%CBN_SETFOCUS','%CBS_AUTOHSCROLL','%CBS_DISABLENOSCROLL','%CBS_DROPDOWN','%CBS_DROPDOWNLIST',
        -            '%CBS_HASSTRINGS','%CBS_LOWERCASE','%CBS_NOINTEGRALHEIGHT','%CBS_SIMPLE','%CBS_SORT','%CBS_UPPERCASE','%CB_SELECTSTRING','%CCM_FIRST',
        -            '%CC_ANYCOLOR','%CC_ENABLEHOOK','%CC_ENABLETEMPLATE','%CC_ENABLETEMPLATEHANDLE','%CC_FULLOPEN','%CC_PREVENTFULLOPEN','%CC_RGBINIT','%CC_SHOWHELP',
        -            '%CC_SOLIDCOLOR','%CFE_BOLD','%CFE_ITALIC','%CFE_LINK','%CFE_PROTECTED','%CFE_STRIKEOUT','%CFE_UNDERLINE','%CFM_ANIMATION',
        -            '%CFM_BACKCOLOR','%CFM_BOLD','%CFM_CHARSET','%CFM_COLOR','%CFM_FACE','%CFM_ITALIC','%CFM_KERNING','%CFM_LCID',
        -            '%CFM_LINK','%CFM_OFFSET','%CFM_PROTECTED','%CFM_REVAUTHOR','%CFM_SIZE','%CFM_SPACING','%CFM_STRIKEOUT','%CFM_STYLE',
        -            '%CFM_UNDERLINE','%CFM_UNDERLINETYPE','%CFM_WEIGHT','%CGI_ACCEPT_FILE_UPLOAD','%CGI_AUTO_ADD_SPECIAL_CHARS_PREFIX','%CGI_AUTO_CREATE_VARS','%CGI_BUFFERIZE_OUTPUT','%CGI_DOUBLE_QUOTE',
        -            '%CGI_FILE_UPLOAD_BASEPATH','%CGI_FORCE_SESSION_VALIDATION','%CGI_MAX_BYTE_FROM_STD_IN','%CGI_REQUEST_METHOD_GET','%CGI_REQUEST_METHOD_POST','%CGI_SESSION_FILE_BASEPATH','%CGI_SINGLE_QUOTE','%CGI_SPECIAL_CHARS_PREFIX',
        -            '%CGI_TEMPORARY_UPLOAD_PATH','%CGI_UPLOAD_CAN_OVERWRITE','%CGI_WRITE_LOG_FILE','%CGI_WRITE_VARS_INTO_LOG_FILE','%CONOLE_ATTACH_PARENT_PROCESS','%CONSOLE_BACKGROUND_BLUE','%CONSOLE_BACKGROUND_GREEN','%CONSOLE_BACKGROUND_INTENSITY',
        -            '%CONSOLE_BACKGROUND_RED','%CONSOLE_BOX_FLAG_3DOFF','%CONSOLE_BOX_FLAG_3DON','%CONSOLE_BOX_FLAG_SHADOW','%CONSOLE_COMMON_LVB_GRID_HORIZONTAL','%CONSOLE_COMMON_LVB_GRID_LVERTICAL','%CONSOLE_COMMON_LVB_GRID_RVERTICAL','%CONSOLE_COMMON_LVB_LEADING_BYTE',
        -            '%CONSOLE_COMMON_LVB_REVERSE_VIDEO','%CONSOLE_COMMON_LVB_TRAILING_BYTE','%CONSOLE_COMMON_LVB_UNDERSCORE','%CONSOLE_CTRL_BREAK_EVENT','%CONSOLE_CTRL_C_EVENT','%CONSOLE_DOUBLE_CLICK','%CONSOLE_ENABLE_AUTO_POSITION','%CONSOLE_ENABLE_ECHO_INPUT',
        -            '%CONSOLE_ENABLE_EXTENDED_FLAGS','%CONSOLE_ENABLE_INSERT_MODE','%CONSOLE_ENABLE_LINE_INPUT','%CONSOLE_ENABLE_MOUSE_INPUT','%CONSOLE_ENABLE_PROCESSED_INPUT','%CONSOLE_ENABLE_PROCESSED_OUTPUT','%CONSOLE_ENABLE_QUICK_EDIT_MODE','%CONSOLE_ENABLE_WINDOW_INPUT',
        -            '%CONSOLE_ENABLE_WRAP_AT_EOL_OUTPUT','%CONSOLE_FOREGROUND_BLUE','%CONSOLE_FOREGROUND_GREEN','%CONSOLE_FOREGROUND_INTENSITY','%CONSOLE_FOREGROUND_RED','%CONSOLE_LBUTTON','%CONSOLE_LINE_HORIZONTAL','%CONSOLE_LINE_VERTICAL',
        -            '%CONSOLE_MBUTTON','%CONSOLE_MOUSE_MOVED','%CONSOLE_MOUSE_WHEELED','%CONSOLE_RBUTTON','%CONSOLE_SCROLLBUF_DOWN','%CONSOLE_SCROLLBUF_UP','%CONSOLE_SCROLLWND_ABSOLUTE','%CONSOLE_SCROLLWND_RELATIVE',
        -            '%CONSOLE_STD_ERROR_HANDLE','%CONSOLE_STD_INPUT_HANDLE','%CONSOLE_STD_OUTPUT_HANDLE','%CONSOLE_SW_FORCEMINIMIZE','%CONSOLE_SW_HIDE','%CONSOLE_SW_MAXIMIZE','%CONSOLE_SW_MINIMIZE','%CONSOLE_SW_RESTORE',
        -            '%CONSOLE_SW_SHOW','%CONSOLE_SW_SHOWDEFAULT','%CONSOLE_SW_SHOWMAXIMIZED','%CONSOLE_SW_SHOWMINIMIZED','%CONSOLE_SW_SHOWMINNOACTIVE','%CONSOLE_SW_SHOWNA','%CONSOLE_SW_SHOWNOACTIVATE','%CONSOLE_SW_SHOWNORMAL',
        -            '%CONSOLE_UNAVAILABLE','%CRYPTO_CALG_DES','%CRYPTO_CALG_RC2','%CRYPTO_CALG_RC4','%CRYPTO_PROV_DH_SCHANNEL','%CRYPTO_PROV_DSS','%CRYPTO_PROV_DSS_DH','%CRYPTO_PROV_FORTEZZA',
        -            '%CRYPTO_PROV_MS_EXCHANGE','%CRYPTO_PROV_RSA_FULL','%CRYPTO_PROV_RSA_SCHANNEL','%CRYPTO_PROV_RSA_SIG','%CRYPTO_PROV_SSL','%CSIDL_ADMINTOOLS','%CSIDL_ALTSTARTUP','%CSIDL_APPDATA',
        -            '%CSIDL_BITBUCKET','%CSIDL_CDBURN_AREA','%CSIDL_COMMON_ADMINTOOLS','%CSIDL_COMMON_ALTSTARTUP','%CSIDL_COMMON_APPDATA','%CSIDL_COMMON_DESKTOPDIRECTORY','%CSIDL_COMMON_DOCUMENTS','%CSIDL_COMMON_FAVORITES',
        -            '%CSIDL_COMMON_MUSIC','%CSIDL_COMMON_PICTURES','%CSIDL_COMMON_PROGRAMS','%CSIDL_COMMON_STARTMENU','%CSIDL_COMMON_STARTUP','%CSIDL_COMMON_TEMPLATES','%CSIDL_COMMON_VIDEO','%CSIDL_CONTROLS',
        -            '%CSIDL_COOKIES','%CSIDL_DESKTOP','%CSIDL_DESKTOPDIRECTORY','%CSIDL_DRIVES','%CSIDL_FAVORITES','%CSIDL_FLAG_CREATE','%CSIDL_FONTS','%CSIDL_HISTORY',
        -            '%CSIDL_INTERNET','%CSIDL_INTERNET_CACHE','%CSIDL_LOCAL_APPDATA','%CSIDL_MYDOCUMENTS','%CSIDL_MYMUSIC','%CSIDL_MYPICTURES','%CSIDL_MYVIDEO','%CSIDL_NETHOOD',
        -            '%CSIDL_NETWORK','%CSIDL_PERSONAL','%CSIDL_PRINTERS','%CSIDL_PRINTHOOD','%CSIDL_PROFILE','%CSIDL_PROGRAMS','%CSIDL_PROGRAM_FILES','%CSIDL_PROGRAM_FILES_COMMON',
        -            '%CSIDL_RECENT','%CSIDL_SENDTO','%CSIDL_STARTMENU','%CSIDL_STARTUP','%CSIDL_SYSTEM','%CSIDL_TEMPLATES','%CSIDL_WINDOWS','%CW_USEDEFAULT',
        -            '%CYAN','%DATE_TIME_FILE_CREATION','%DATE_TIME_LAST_FILE_ACCESS','%DATE_TIME_LAST_FILE_WRITE','%DICTIONARY_MEMINFO_DATA','%DICTIONARY_MEMINFO_KEYS','%DICTIONARY_MEMINFO_TOTAL','%DICTIONARY_SORTDESCENDING',
        -            '%DICTIONARY_SORTKEYS','%DSCAPS_CERTIFIED','%DSCAPS_CONTINUOUSRATE','%DSCAPS_EMULDRIVER','%DSCAPS_SECONDARY16BIT','%DSCAPS_SECONDARY8BIT','%DSCAPS_SECONDARYMONO','%DSCAPS_SECONDARYSTEREO',
        -            '%DSCCAPS_CERTIFIED','%DSCCAPS_EMULDRIVER','%DS_3DLOOK','%DS_ABSALIGN','%DS_CENTER','%DS_CENTERMOUSE','%DS_CONTEXTHELP','%DS_CONTROL',
        -            '%DS_MODALFRAME','%DS_NOFAILCREATE','%DS_SETFONT','%DS_SETFOREGROUND','%DS_SYSMODAL','%DTM_FIRST','%DTM_GETMCCOLOR','%DTM_GETMCFONT',
        -            '%DTM_GETMONTHCAL','%DTM_GETRANGE','%DTM_GETSYSTEMTIME','%DTM_SETFORMAT','%DTM_SETFORMATW','%DTM_SETMCCOLOR','%DTM_SETMCFONT','%DTM_SETRANGE',
        -            '%DTM_SETSYSTEMTIME','%DTN_CLOSEUP','%DTN_DATETIMECHANGE','%DTN_DROPDOWN','%DTN_FORMAT','%DTN_FORMATQUERY','%DTN_FORMATQUERYW','%DTN_FORMATW',
        -            '%DTN_USERSTRING','%DTN_USERSTRINGW','%DTN_WMKEYDOWN','%DTN_WMKEYDOWNW','%DTS_APPCANPARSE','%DTS_LONGDATEFORMAT','%DTS_RIGHTALIGN','%DTS_SHORTDATECENTURYFORMAT',
        -            '%DTS_SHORTDATEFORMAT','%DTS_SHOWNONE','%DTS_TIMEFORMAT','%DTS_UPDOWN','%DT_DATE_CENTURY','%DT_DATE_OK','%DT_DAY_IN_YEAR','%DT_DIFF_IN_DAYS',
        -            '%DT_DIFF_IN_HOURS','%DT_DIFF_IN_MINUTES','%DT_DIFF_IN_SECONDS','%DT_HOURS_IN_DAY','%DT_MINUTES_IN_HOUR','%DT_SECONDS_IN_DAY','%DT_SECONDS_IN_HOUR','%DT_SECONDS_IN_MINUTE',
        -            '%DT_SECONDS_IN_YEAR','%DT_USE_LONG_FORM','%DT_USE_SHORT_FORM','%DT_WRONG_DATE','%DT_WRONG_DAY','%DT_WRONG_MONTH','%ECM_FIRST','%ECOOP_AND',
        -            '%ECOOP_OR','%ECOOP_SET','%ECOOP_XOR','%ECO_AUTOHSCROLL','%ECO_AUTOVSCROLL','%ECO_AUTOWORDSELECTION','%ECO_NOHIDESEL','%ECO_READONLY',
        -            '%ECO_SELECTIONBAR','%ECO_WANTRETURN','%EM_AUTOURLDETECT','%EM_CANPASTE','%EM_CANREDO','%EM_CANUNDO','%EM_CHARFROMPOS','%EM_DISPLAYBAND',
        -            '%EM_EMPTYUNDOBUFFER','%EM_EXGETSEL','%EM_EXLIMITTEXT','%EM_EXLINEFROMCHAR','%EM_EXSETSEL','%EM_FINDTEXT','%EM_FINDTEXTEX','%EM_FINDWORDBREAK',
        -            '%EM_FMTLINES','%EM_FORMATRANGE','%EM_GETAUTOURLDETECT','%EM_GETCHARFORMAT','%EM_GETEDITSTYLE','%EM_GETEVENTMASK','%EM_GETFIRSTVISIBLELINE','%EM_GETHANDLE',
        -            '%EM_GETIMESTATUS','%EM_GETLIMITTEXT','%EM_GETLINE','%EM_GETLINECOUNT','%EM_GETMARGINS','%EM_GETMODIFY','%EM_GETOLEINTERFACE','%EM_GETOPTIONS',
        -            '%EM_GETPARAFORMAT','%EM_GETPASSWORDCHAR','%EM_GETRECT','%EM_GETREDONAME','%EM_GETSCROLLPOS','%EM_GETSEL','%EM_GETSELTEXT','%EM_GETTEXTMODE',
        -            '%EM_GETTEXTRANGE','%EM_GETTHUMB','%EM_GETUNDONAME','%EM_GETWORDBREAKPROC','%EM_GETWORDBREAKPROCEX','%EM_HIDESELECTION','%EM_LIMITTEXT','%EM_LINEFROMCHAR',
        -            '%EM_LINEINDEX','%EM_LINELENGTH','%EM_LINESCROLL','%EM_PASTESPECIAL','%EM_POSFROMCHAR','%EM_REDO','%EM_REPLACESEL','%EM_REQUESTRESIZE',
        -            '%EM_SCROLL','%EM_SCROLLCARET','%EM_SELECTIONTYPE','%EM_SETBKGNDCOLOR','%EM_SETCHARFORMAT','%EM_SETEDITSTYLE','%EM_SETEVENTMASK','%EM_SETHANDLE',
        -            '%EM_SETIMESTATUS','%EM_SETLIMITTEXT','%EM_SETMARGINS','%EM_SETMODIFY','%EM_SETOLECALLBACK','%EM_SETOPTIONS','%EM_SETPARAFORMAT','%EM_SETPASSWORDCHAR',
        -            '%EM_SETREADONLY','%EM_SETRECT','%EM_SETRECTNP','%EM_SETSCROLLPOS','%EM_SETSEL','%EM_SETTABSTOPS','%EM_SETTARGETDEVICE','%EM_SETTEXTMODE',
        -            '%EM_SETUNDOLIMIT','%EM_SETWORDBREAKPROC','%EM_SETWORDBREAKPROCEX','%EM_SETWORDWRAPMODE','%EM_SETZOOM','%EM_STOPGROUPTYPING','%EM_STREAMIN','%EM_STREAMOUT',
        -            '%EM_UNDO','%ENM_CHANGE','%ENM_CORRECTTEXT','%ENM_DRAGDROPDONE','%ENM_DROPFILES','%ENM_KEYEVENTS','%ENM_MOUSEEVENTS','%ENM_NONE',
        -            '%ENM_PARAGRAPHEXPANDED','%ENM_PROTECTED','%ENM_REQUESTRESIZE','%ENM_SCROLL','%ENM_SCROLLEVENTS','%ENM_SELCHANGE','%ENM_UPDATE','%EN_CHANGE',
        -            '%EN_MSGFILTER','%EN_SELCHANGE','%EN_UPDATE','%ES_AUTOHSCROLL','%ES_AUTOVSCROLL','%ES_CENTER','%ES_DISABLENOSCROLL','%ES_EX_NOCALLOLEINIT',
        -            '%ES_LEFT','%ES_LOWERCASE','%ES_MULTILINE','%ES_NOHIDESEL','%ES_NOOLEDRAGDROP','%ES_NUMBER','%ES_OEMCONVERT','%ES_PASSWORD',
        -            '%ES_READONLY','%ES_RIGHT','%ES_SAVESEL','%ES_SELECTIONBAR','%ES_SUNKEN','%ES_UPPERCASE','%ES_WANTRETURN','%EVAL_EXEC_STRING',
        -            '%FALSE','%FILE_ADDPATH','%FILE_ARCHIVE','%FILE_BUILDVERSION','%FILE_HIDDEN','%FILE_MAJORVERSION','%FILE_MINORVERSION','%FILE_NORMAL',
        -            '%FILE_READONLY','%FILE_REVISIONVERSION','%FILE_SUBDIR','%FILE_SYSTEM','%FILE_VLABEL','%FTP_GET_CONNECT_STATUS','%FTP_GET_FILE_BYTES_RCVD','%FTP_GET_FILE_BYTES_SENT',
        -            '%FTP_GET_LAST_RESPONSE','%FTP_GET_LOCAL_IP','%FTP_GET_SERVER_IP','%FTP_GET_TOTAL_BYTES_RCVD','%FTP_GET_TOTAL_BYTES_SENT','%FTP_LIST_FULLLIST','%FTP_LIST_FULLLISTDIR','%FTP_LIST_FULLLISTFILE',
        -            '%FTP_SET_ASYNC','%FTP_SET_CONNECT_WAIT','%FTP_SET_MAX_LISTEN_WAIT','%FTP_SET_MAX_RESPONSE_WAIT','%FTP_SET_PASSIVE','%FTP_SET_SYNC','%FW_BLACK','%FW_BOLD',
        -            '%FW_DEMIBOLD','%FW_DONTCARE','%FW_EXTRABOLD','%FW_EXTRALIGHT','%FW_HEAVY','%FW_LIGHT','%FW_MEDIUM','%FW_NORMAL',
        -            '%FW_REGULAR','%FW_SEMIBOLD','%FW_THIN','%FW_ULTRABOLD','%FW_ULTRALIGHT','%GDTR_MAX','%GDTR_MIN','%GLU_AUTO_LOAD_MATRIX',
        -            '%GLU_BEGIN','%GLU_CCW','%GLU_CULLING','%GLU_CW','%GLU_DISPLAY_MODE','%GLU_DOMAIN_DISTANCE','%GLU_EDGE_FLAG','%GLU_END',
        -            '%GLU_ERROR','%GLU_EXTENSIONS','%GLU_EXTERIOR','%GLU_FALSE','%GLU_FILL','%GLU_FLAT','%GLU_INCOMPATIBLE_GL_VERSION','%GLU_INSIDE',
        -            '%GLU_INTERIOR','%GLU_INVALID_ENUM','%GLU_INVALID_VALUE','%GLU_LINE','%GLU_MAP1_TRIM_2','%GLU_MAP1_TRIM_3','%GLU_NONE','%GLU_NURBS_ERROR1',
        -            '%GLU_NURBS_ERROR10','%GLU_NURBS_ERROR11','%GLU_NURBS_ERROR12','%GLU_NURBS_ERROR13','%GLU_NURBS_ERROR14','%GLU_NURBS_ERROR15','%GLU_NURBS_ERROR16','%GLU_NURBS_ERROR17',
        -            '%GLU_NURBS_ERROR18','%GLU_NURBS_ERROR19','%GLU_NURBS_ERROR2','%GLU_NURBS_ERROR20','%GLU_NURBS_ERROR21','%GLU_NURBS_ERROR22','%GLU_NURBS_ERROR23','%GLU_NURBS_ERROR24',
        -            '%GLU_NURBS_ERROR25','%GLU_NURBS_ERROR26','%GLU_NURBS_ERROR27','%GLU_NURBS_ERROR28','%GLU_NURBS_ERROR29','%GLU_NURBS_ERROR3','%GLU_NURBS_ERROR30','%GLU_NURBS_ERROR31',
        -            '%GLU_NURBS_ERROR32','%GLU_NURBS_ERROR33','%GLU_NURBS_ERROR34','%GLU_NURBS_ERROR35','%GLU_NURBS_ERROR36','%GLU_NURBS_ERROR37','%GLU_NURBS_ERROR4','%GLU_NURBS_ERROR5',
        -            '%GLU_NURBS_ERROR6','%GLU_NURBS_ERROR7','%GLU_NURBS_ERROR8','%GLU_NURBS_ERROR9','%GLU_OUTLINE_PATCH','%GLU_OUTLINE_POLYGON','%GLU_OUTSIDE','%GLU_OUT_OF_MEMORY',
        -            '%GLU_PARAMETRIC_ERROR','%GLU_PARAMETRIC_TOLERANCE','%GLU_PATH_LENGTH','%GLU_POINT','%GLU_SAMPLING_METHOD','%GLU_SAMPLING_TOLERANCE','%GLU_SILHOUETTE','%GLU_SMOOTH',
        -            '%GLU_TESS_BEGIN','%GLU_TESS_BEGIN_DATA','%GLU_TESS_BOUNDARY_ONLY','%GLU_TESS_COMBINE','%GLU_TESS_COMBINE_DATA','%GLU_TESS_COORD_TOO_LARGE','%GLU_TESS_EDGE_FLAG','%GLU_TESS_EDGE_FLAG_DATA',
        -            '%GLU_TESS_END','%GLU_TESS_END_DATA','%GLU_TESS_ERROR','%GLU_TESS_ERROR1','%GLU_TESS_ERROR2','%GLU_TESS_ERROR3','%GLU_TESS_ERROR4','%GLU_TESS_ERROR5',
        -            '%GLU_TESS_ERROR6','%GLU_TESS_ERROR7','%GLU_TESS_ERROR8','%GLU_TESS_ERROR_DATA','%GLU_TESS_MISSING_BEGIN_CONTOUR','%GLU_TESS_MISSING_BEGIN_POLYGON','%GLU_TESS_MISSING_END_CONTOUR','%GLU_TESS_MISSING_END_POLYGON',
        -            '%GLU_TESS_NEED_COMBINE_CALLBACK','%GLU_TESS_TOLERANCE','%GLU_TESS_VERTEX','%GLU_TESS_VERTEX_DATA','%GLU_TESS_WINDING_ABS_GEQ_TWO','%GLU_TESS_WINDING_NEGATIVE','%GLU_TESS_WINDING_NONZERO','%GLU_TESS_WINDING_ODD',
        -            '%GLU_TESS_WINDING_POSITIVE','%GLU_TESS_WINDING_RULE','%GLU_TRUE','%GLU_UNKNOWN','%GLU_U_STEP','%GLU_VERSION','%GLU_VERSION_1_1','%GLU_VERSION_1_2',
        -            '%GLU_VERTEX','%GLU_V_STEP','%GL_2D','%GL_2_BYTES','%GL_3D','%GL_3D_COLOR','%GL_3D_COLOR_TEXTURE','%GL_3_BYTES',
        -            '%GL_4D_COLOR_TEXTURE','%GL_4_BYTES','%GL_ABGR_EXT','%GL_ACCUM','%GL_ACCUM_ALPHA_BITS','%GL_ACCUM_BLUE_BITS','%GL_ACCUM_BUFFER_BIT','%GL_ACCUM_CLEAR_VALUE',
        -            '%GL_ACCUM_GREEN_BITS','%GL_ACCUM_RED_BITS','%GL_ADD','%GL_ALL_ATTRIB_BITS','%GL_ALPHA','%GL_ALPHA12','%GL_ALPHA16','%GL_ALPHA4',
        -            '%GL_ALPHA8','%GL_ALPHA_BIAS','%GL_ALPHA_BITS','%GL_ALPHA_SCALE','%GL_ALPHA_TEST','%GL_ALPHA_TEST_FUNC','%GL_ALPHA_TEST_REF','%GL_ALWAYS',
        -            '%GL_AMBIENT','%GL_AMBIENT_AND_DIFFUSE','%GL_AND','%GL_AND_INVERTED','%GL_AND_REVERSE','%GL_ARRAY_ELEMENT_LOCK_COUNT_EXT','%GL_ARRAY_ELEMENT_LOCK_FIRST_EXT','%GL_ATTRIB_STACK_DEPTH',
        -            '%GL_AUTO_NORMAL','%GL_AUX0','%GL_AUX1','%GL_AUX2','%GL_AUX3','%GL_AUX_BUFFERS','%GL_BACK','%GL_BACK_LEFT',
        -            '%GL_BACK_RIGHT','%GL_BGRA_EXT','%GL_BGR_EXT','%GL_BITMAP','%GL_BITMAP_TOKEN','%GL_BLEND','%GL_BLEND_COLOR_EXT','%GL_BLEND_DST',
        -            '%GL_BLEND_EQUATION_EXT','%GL_BLEND_SRC','%GL_BLUE','%GL_BLUE_BIAS','%GL_BLUE_BITS','%GL_BLUE_SCALE','%GL_BYTE','%GL_C3F_V3F',
        -            '%GL_C4F_N3F_V3F','%GL_C4UB_V2F','%GL_C4UB_V3F','%GL_CCW','%GL_CLAMP','%GL_CLEAR','%GL_CLIENT_ALL_ATTRIB_BITS','%GL_CLIENT_ATTRIB_STACK_DEPTH',
        -            '%GL_CLIENT_PIXEL_STORE_BIT','%GL_CLIENT_VERTEX_ARRAY_BIT','%GL_CLIP_PLANE0','%GL_CLIP_PLANE1','%GL_CLIP_PLANE2','%GL_CLIP_PLANE3','%GL_CLIP_PLANE4','%GL_CLIP_PLANE5',
        -            '%GL_CLIP_VOLUME_CLIPPING_HINT_EXT','%GL_COEFF','%GL_COLOR','%GL_COLOR_ARRAY','%GL_COLOR_ARRAY_COUNT_EXT','%GL_COLOR_ARRAY_EXT','%GL_COLOR_ARRAY_POINTER','%GL_COLOR_ARRAY_POINTER_EXT',
        -            '%GL_COLOR_ARRAY_SIZE','%GL_COLOR_ARRAY_SIZE_EXT','%GL_COLOR_ARRAY_STRIDE','%GL_COLOR_ARRAY_STRIDE_EXT','%GL_COLOR_ARRAY_TYPE','%GL_COLOR_ARRAY_TYPE_EXT','%GL_COLOR_BUFFER_BIT','%GL_COLOR_CLEAR_VALUE',
        -            '%GL_COLOR_INDEX','%GL_COLOR_INDEX12_EXT','%GL_COLOR_INDEX16_EXT','%GL_COLOR_INDEX1_EXT','%GL_COLOR_INDEX2_EXT','%GL_COLOR_INDEX4_EXT','%GL_COLOR_INDEX8_EXT','%GL_COLOR_INDEXES',
        -            '%GL_COLOR_LOGIC_OP','%GL_COLOR_MATERIAL','%GL_COLOR_MATERIAL_FACE','%GL_COLOR_MATERIAL_PARAMETER','%GL_COLOR_SUM_EXT','%GL_COLOR_TABLE_ALPHA_SIZE_EXT','%GL_COLOR_TABLE_BIAS_EXT','%GL_COLOR_TABLE_BLUE_SIZE_EXT',
        -            '%GL_COLOR_TABLE_EXT','%GL_COLOR_TABLE_FORMAT_EXT','%GL_COLOR_TABLE_GREEN_SIZE_EXT','%GL_COLOR_TABLE_INTENSITY_SIZE_EXT','%GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','%GL_COLOR_TABLE_RED_SIZE_EXT','%GL_COLOR_TABLE_SCALE_EXT','%GL_COLOR_TABLE_WIDTH_EXT',
        -            '%GL_COLOR_WRITEMASK','%GL_COMPILE','%GL_COMPILE_AND_EXECUTE','%GL_CONSTANT_ALPHA_EXT','%GL_CONSTANT_ATTENUATION','%GL_CONSTANT_COLOR_EXT','%GL_CONVOLUTION_1D_EXT','%GL_CONVOLUTION_2D_EXT',
        -            '%GL_CONVOLUTION_BORDER_MODE_EXT','%GL_CONVOLUTION_FILTER_BIAS_EXT','%GL_CONVOLUTION_FILTER_SCALE_EXT','%GL_CONVOLUTION_FORMAT_EXT','%GL_CONVOLUTION_HEIGHT_EXT','%GL_CONVOLUTION_WIDTH_EXT','%GL_COPY','%GL_COPY_INVERTED',
        -            '%GL_COPY_PIXEL_TOKEN','%GL_CULL_FACE','%GL_CULL_FACE_MODE','%GL_CULL_VERTEX_EXT','%GL_CULL_VERTEX_EYE_POSITION_EXT','%GL_CULL_VERTEX_OBJECT_POSITION_EXT','%GL_CURRENT_BIT','%GL_CURRENT_COLOR',
        -            '%GL_CURRENT_INDEX','%GL_CURRENT_NORMAL','%GL_CURRENT_RASTER_COLOR','%GL_CURRENT_RASTER_DISTANCE','%GL_CURRENT_RASTER_INDEX','%GL_CURRENT_RASTER_POSITION','%GL_CURRENT_RASTER_POSITION_VALID','%GL_CURRENT_RASTER_TEXTURE_COORDS',
        -            '%GL_CURRENT_SECONDARY_COLOR_EXT','%GL_CURRENT_TEXTURE_COORDS','%GL_CW','%GL_DECAL','%GL_DECR','%GL_DEPTH','%GL_DEPTH_BIAS','%GL_DEPTH_BITS',
        -            '%GL_DEPTH_BUFFER_BIT','%GL_DEPTH_CLEAR_VALUE','%GL_DEPTH_COMPONENT','%GL_DEPTH_FUNC','%GL_DEPTH_RANGE','%GL_DEPTH_SCALE','%GL_DEPTH_TEST','%GL_DEPTH_WRITEMASK',
        -            '%GL_DIFFUSE','%GL_DITHER','%GL_DOMAIN','%GL_DONT_CARE','%GL_DOUBLE','%GL_DOUBLEBUFFER','%GL_DOUBLE_EXT','%GL_DRAW_BUFFER',
        -            '%GL_DRAW_PIXEL_TOKEN','%GL_DST_ALPHA','%GL_DST_COLOR','%GL_EDGE_FLAG','%GL_EDGE_FLAG_ARRAY','%GL_EDGE_FLAG_ARRAY_COUNT_EXT','%GL_EDGE_FLAG_ARRAY_EXT','%GL_EDGE_FLAG_ARRAY_POINTER',
        -            '%GL_EDGE_FLAG_ARRAY_POINTER_EXT','%GL_EDGE_FLAG_ARRAY_STRIDE','%GL_EDGE_FLAG_ARRAY_STRIDE_EXT','%GL_EMISSION','%GL_ENABLE_BIT','%GL_EQUAL','%GL_EQUIV','%GL_EVAL_BIT',
        -            '%GL_EXP','%GL_EXP2','%GL_EXTENSIONS','%GL_EXT_ABGR','%GL_EXT_BGRA','%GL_EXT_BLEND_COLOR','%GL_EXT_BLEND_MINMAX','%GL_EXT_BLEND_SUBTRACT',
        -            '%GL_EXT_CLIP_VOLUME_HINT','%GL_EXT_COLOR_TABLE','%GL_EXT_COMPILED_VERTEX_ARRAY','%GL_EXT_CONVOLUTION','%GL_EXT_CULL_VERTEX','%GL_EXT_HISTOGRAM','%GL_EXT_PACKED_PIXELS','%GL_EXT_PALETTED_TEXTURE',
        -            '%GL_EXT_POLYGON_OFFSET','%GL_EXT_SECONDARY_COLOR','%GL_EXT_SEPARATE_SPECULAR_COLOR','%GL_EXT_VERTEX_ARRAY','%GL_EYE_LINEAR','%GL_EYE_PLANE','%GL_FALSE','%GL_FASTEST',
        -            '%GL_FEEDBACK','%GL_FEEDBACK_BUFFER_POINTER','%GL_FEEDBACK_BUFFER_SIZE','%GL_FEEDBACK_BUFFER_TYPE','%GL_FILL','%GL_FLAT','%GL_FLOAT','%GL_FOG',
        -            '%GL_FOG_BIT','%GL_FOG_COLOR','%GL_FOG_DENSITY','%GL_FOG_END','%GL_FOG_HINT','%GL_FOG_INDEX','%GL_FOG_MODE','%GL_FOG_START',
        -            '%GL_FRONT','%GL_FRONT_AND_BACK','%GL_FRONT_FACE','%GL_FRONT_LEFT','%GL_FRONT_RIGHT','%GL_FUNC_ADD_EXT','%GL_FUNC_REVERSE_SUBTRACT_EXT','%GL_FUNC_SUBTRACT_EXT',
        -            '%GL_GEQUAL','%GL_GREATER','%GL_GREEN','%GL_GREEN_BIAS','%GL_GREEN_BITS','%GL_GREEN_SCALE','%GL_HINT_BIT','%GL_HISTOGRAM_ALPHA_SIZE_EXT',
        -            '%GL_HISTOGRAM_BLUE_SIZE_EXT','%GL_HISTOGRAM_EXT','%GL_HISTOGRAM_FORMAT_EXT','%GL_HISTOGRAM_GREEN_SIZE_EXT','%GL_HISTOGRAM_LUMINANCE_SIZE_EXT','%GL_HISTOGRAM_RED_SIZE_EXT','%GL_HISTOGRAM_SINK_EXT','%GL_HISTOGRAM_WIDTH_EXT',
        -            '%GL_INCR','%GL_INDEX_ARRAY','%GL_INDEX_ARRAY_COUNT_EXT','%GL_INDEX_ARRAY_EXT','%GL_INDEX_ARRAY_POINTER','%GL_INDEX_ARRAY_POINTER_EXT','%GL_INDEX_ARRAY_STRIDE','%GL_INDEX_ARRAY_STRIDE_EXT',
        -            '%GL_INDEX_ARRAY_TYPE','%GL_INDEX_ARRAY_TYPE_EXT','%GL_INDEX_BITS','%GL_INDEX_CLEAR_VALUE','%GL_INDEX_LOGIC_OP','%GL_INDEX_MODE','%GL_INDEX_OFFSET','%GL_INDEX_SHIFT',
        -            '%GL_INDEX_WRITEMASK','%GL_INT','%GL_INTENSITY','%GL_INTENSITY12','%GL_INTENSITY16','%GL_INTENSITY4','%GL_INTENSITY8','%GL_INVALID_ENUM',
        -            '%GL_INVALID_OPERATION','%GL_INVALID_VALUE','%GL_INVERT','%GL_KEEP','%GL_LEFT','%GL_LEQUAL','%GL_LESS','%GL_LIGHT0',
        -            '%GL_LIGHT1','%GL_LIGHT2','%GL_LIGHT3','%GL_LIGHT4','%GL_LIGHT5','%GL_LIGHT6','%GL_LIGHT7','%GL_LIGHTING',
        -            '%GL_LIGHTING_BIT','%GL_LIGHT_MODEL_AMBIENT','%GL_LIGHT_MODEL_COLOR_CONTROL_EXT','%GL_LIGHT_MODEL_LOCAL_VIEWER','%GL_LIGHT_MODEL_TWO_SIDE','%GL_LINE','%GL_LINEAR','%GL_LINEAR_ATTENUATION',
        -            '%GL_LINEAR_MIPMAP_LINEAR','%GL_LINEAR_MIPMAP_NEAREST','%GL_LINES','%GL_LINE_BIT','%GL_LINE_LOOP','%GL_LINE_RESET_TOKEN','%GL_LINE_SMOOTH','%GL_LINE_SMOOTH_HINT',
        -            '%GL_LINE_STIPPLE','%GL_LINE_STIPPLE_PATTERN','%GL_LINE_STIPPLE_REPEAT','%GL_LINE_STRIP','%GL_LINE_TOKEN','%GL_LINE_WIDTH','%GL_LINE_WIDTH_GRANULARITY','%GL_LINE_WIDTH_RANGE',
        -            '%GL_LIST_BASE','%GL_LIST_BIT','%GL_LIST_INDEX','%GL_LIST_MODE','%GL_LOAD','%GL_LOGIC_OP','%GL_LOGIC_OP_MODE','%GL_LUMINANCE',
        -            '%GL_LUMINANCE12','%GL_LUMINANCE12_ALPHA12','%GL_LUMINANCE12_ALPHA4','%GL_LUMINANCE16','%GL_LUMINANCE16_ALPHA16','%GL_LUMINANCE4','%GL_LUMINANCE4_ALPHA4','%GL_LUMINANCE6_ALPHA2',
        -            '%GL_LUMINANCE8','%GL_LUMINANCE8_ALPHA8','%GL_LUMINANCE_ALPHA','%GL_MAP1_COLOR_4','%GL_MAP1_GRID_DOMAIN','%GL_MAP1_GRID_SEGMENTS','%GL_MAP1_INDEX','%GL_MAP1_NORMAL',
        -            '%GL_MAP1_TEXTURE_COORD_1','%GL_MAP1_TEXTURE_COORD_2','%GL_MAP1_TEXTURE_COORD_3','%GL_MAP1_TEXTURE_COORD_4','%GL_MAP1_VERTEX_3','%GL_MAP1_VERTEX_4','%GL_MAP2_COLOR_4','%GL_MAP2_GRID_DOMAIN',
        -            '%GL_MAP2_GRID_SEGMENTS','%GL_MAP2_INDEX','%GL_MAP2_NORMAL','%GL_MAP2_TEXTURE_COORD_1','%GL_MAP2_TEXTURE_COORD_2','%GL_MAP2_TEXTURE_COORD_3','%GL_MAP2_TEXTURE_COORD_4','%GL_MAP2_VERTEX_3',
        -            '%GL_MAP2_VERTEX_4','%GL_MAP_COLOR','%GL_MAP_STENCIL','%GL_MATRIX_MODE','%GL_MAX_ATTRIB_STACK_DEPTH','%GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','%GL_MAX_CLIP_PLANES','%GL_MAX_CONVOLUTION_HEIGHT_EXT',
        -            '%GL_MAX_CONVOLUTION_WIDTH_EXT','%GL_MAX_EVAL_ORDER','%GL_MAX_EXT','%GL_MAX_LIGHTS','%GL_MAX_LIST_NESTING','%GL_MAX_MODELVIEW_STACK_DEPTH','%GL_MAX_NAME_STACK_DEPTH','%GL_MAX_PIXEL_MAP_TABLE',
        -            '%GL_MAX_PROJECTION_STACK_DEPTH','%GL_MAX_TEXTURE_SIZE','%GL_MAX_TEXTURE_STACK_DEPTH','%GL_MAX_VIEWPORT_DIMS','%GL_MINMAX_EXT','%GL_MINMAX_FORMAT_EXT','%GL_MINMAX_SINK_EXT','%GL_MIN_EXT',
        -            '%GL_MODELVIEW','%GL_MODELVIEW_MATRIX','%GL_MODELVIEW_STACK_DEPTH','%GL_MODULATE','%GL_MULT','%GL_N3F_V3F','%GL_NAME_STACK_DEPTH','%GL_NAND',
        -            '%GL_NEAREST','%GL_NEAREST_MIPMAP_LINEAR','%GL_NEAREST_MIPMAP_NEAREST','%GL_NEVER','%GL_NICEST','%GL_NONE','%GL_NOOP','%GL_NOR',
        -            '%GL_NORMALIZE','%GL_NORMAL_ARRAY','%GL_NORMAL_ARRAY_COUNT_EXT','%GL_NORMAL_ARRAY_EXT','%GL_NORMAL_ARRAY_POINTER','%GL_NORMAL_ARRAY_POINTER_EXT','%GL_NORMAL_ARRAY_STRIDE','%GL_NORMAL_ARRAY_STRIDE_EXT',
        -            '%GL_NORMAL_ARRAY_TYPE','%GL_NORMAL_ARRAY_TYPE_EXT','%GL_NOTEQUAL','%GL_NO_ERROR','%GL_OBJECT_LINEAR','%GL_OBJECT_PLANE','%GL_ONE','%GL_ONE_MINUS_CONSTANT_ALPHA_EXT',
        -            '%GL_ONE_MINUS_CONSTANT_COLOR_EXT','%GL_ONE_MINUS_DST_ALPHA','%GL_ONE_MINUS_DST_COLOR','%GL_ONE_MINUS_SRC_ALPHA','%GL_ONE_MINUS_SRC_COLOR','%GL_OR','%GL_ORDER','%GL_OR_INVERTED',
        -            '%GL_OR_REVERSE','%GL_OUT_OF_MEMORY','%GL_PACK_ALIGNMENT','%GL_PACK_LSB_FIRST','%GL_PACK_ROW_LENGTH','%GL_PACK_SKIP_PIXELS','%GL_PACK_SKIP_ROWS','%GL_PACK_SWAP_BYTES',
        -            '%GL_PASS_THROUGH_TOKEN','%GL_PERSPECTIVE_CORRECTION_HINT','%GL_PIXEL_MAP_A_TO_A','%GL_PIXEL_MAP_A_TO_A_SIZE','%GL_PIXEL_MAP_B_TO_B','%GL_PIXEL_MAP_B_TO_B_SIZE','%GL_PIXEL_MAP_G_TO_G','%GL_PIXEL_MAP_G_TO_G_SIZE',
        -            '%GL_PIXEL_MAP_I_TO_A','%GL_PIXEL_MAP_I_TO_A_SIZE','%GL_PIXEL_MAP_I_TO_B','%GL_PIXEL_MAP_I_TO_B_SIZE','%GL_PIXEL_MAP_I_TO_G','%GL_PIXEL_MAP_I_TO_G_SIZE','%GL_PIXEL_MAP_I_TO_I','%GL_PIXEL_MAP_I_TO_I_SIZE',
        -            '%GL_PIXEL_MAP_I_TO_R','%GL_PIXEL_MAP_I_TO_R_SIZE','%GL_PIXEL_MAP_R_TO_R','%GL_PIXEL_MAP_R_TO_R_SIZE','%GL_PIXEL_MAP_S_TO_S','%GL_PIXEL_MAP_S_TO_S_SIZE','%GL_PIXEL_MODE_BIT','%GL_POINT',
        -            '%GL_POINTS','%GL_POINT_BIT','%GL_POINT_SIZE','%GL_POINT_SIZE_GRANULARITY','%GL_POINT_SIZE_RANGE','%GL_POINT_SMOOTH','%GL_POINT_SMOOTH_HINT','%GL_POINT_TOKEN',
        -            '%GL_POLYGON','%GL_POLYGON_BIT','%GL_POLYGON_MODE','%GL_POLYGON_OFFSET_BIAS_EXT','%GL_POLYGON_OFFSET_EXT','%GL_POLYGON_OFFSET_FACTOR','%GL_POLYGON_OFFSET_FACTOR_EXT','%GL_POLYGON_OFFSET_FILL',
        -            '%GL_POLYGON_OFFSET_LINE','%GL_POLYGON_OFFSET_POINT','%GL_POLYGON_OFFSET_UNITS','%GL_POLYGON_SMOOTH','%GL_POLYGON_SMOOTH_HINT','%GL_POLYGON_STIPPLE','%GL_POLYGON_STIPPLE_BIT','%GL_POLYGON_TOKEN',
        -            '%GL_POSITION','%GL_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_ALPHA_BIAS_EXT','%GL_POST_CONVOLUTION_ALPHA_SCALE_EXT','%GL_POST_CONVOLUTION_BLUE_BIAS_EXT','%GL_POST_CONVOLUTION_BLUE_SCALE_EXT','%GL_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_GREEN_BIAS_EXT',
        -            '%GL_POST_CONVOLUTION_GREEN_SCALE_EXT','%GL_POST_CONVOLUTION_RED_BIAS_EXT','%GL_POST_CONVOLUTION_RED_SCALE_EXT','%GL_PROJECTION','%GL_PROJECTION_MATRIX','%GL_PROJECTION_STACK_DEPTH','%GL_PROXY_COLOR_TABLE_EXT','%GL_PROXY_HISTOGRAM_EXT',
        -            '%GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_PROXY_TEXTURE_1D','%GL_PROXY_TEXTURE_2D','%GL_Q','%GL_QUADRATIC_ATTENUATION','%GL_QUADS','%GL_QUAD_STRIP',
        -            '%GL_R','%GL_R3_G3_B2','%GL_READ_BUFFER','%GL_RED','%GL_REDUCE_EXT','%GL_RED_BIAS','%GL_RED_BITS','%GL_RED_SCALE',
        -            '%GL_RENDER','%GL_RENDERER','%GL_RENDER_MODE','%GL_REPEAT','%GL_REPLACE','%GL_RETURN','%GL_RGB','%GL_RGB10',
        -            '%GL_RGB10_A2','%GL_RGB12','%GL_RGB16','%GL_RGB4','%GL_RGB5','%GL_RGB5_A1','%GL_RGB8','%GL_RGBA',
        -            '%GL_RGBA12','%GL_RGBA16','%GL_RGBA2','%GL_RGBA4','%GL_RGBA8','%GL_RGBA_MODE','%GL_RIGHT','%GL_S',
        -            '%GL_SCISSOR_BIT','%GL_SCISSOR_BOX','%GL_SCISSOR_TEST','%GL_SECONDARY_COLOR_ARRAY_EXT','%GL_SECONDARY_COLOR_ARRAY_POINTER_EXT','%GL_SECONDARY_COLOR_ARRAY_SIZE_EXT','%GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT','%GL_SECONDARY_COLOR_ARRAY_TYPE_EXT',
        -            '%GL_SELECT','%GL_SELECTION_BUFFER_POINTER','%GL_SELECTION_BUFFER_SIZE','%GL_SEPARABLE_2D_EXT','%GL_SEPARATE_SPECULAR_COLOR_EXT','%GL_SET','%GL_SHADE_MODEL','%GL_SHININESS',
        -            '%GL_SHORT','%GL_SINGLE_COLOR_EXT','%GL_SMOOTH','%GL_SPECULAR','%GL_SPHERE_MAP','%GL_SPOT_CUTOFF','%GL_SPOT_DIRECTION','%GL_SPOT_EXPONENT',
        -            '%GL_SRC_ALPHA','%GL_SRC_ALPHA_SATURATE','%GL_SRC_COLOR','%GL_STACK_OVERFLOW','%GL_STACK_UNDERFLOW','%GL_STENCIL','%GL_STENCIL_BITS','%GL_STENCIL_BUFFER_BIT',
        -            '%GL_STENCIL_CLEAR_VALUE','%GL_STENCIL_FAIL','%GL_STENCIL_FUNC','%GL_STENCIL_INDEX','%GL_STENCIL_PASS_DEPTH_FAIL','%GL_STENCIL_PASS_DEPTH_PASS','%GL_STENCIL_REF','%GL_STENCIL_TEST',
        -            '%GL_STENCIL_VALUE_MASK','%GL_STENCIL_WRITEMASK','%GL_STEREO','%GL_SUBPIXEL_BITS','%GL_T','%GL_T2F_C3F_V3F','%GL_T2F_C4F_N3F_V3F','%GL_T2F_C4UB_V3F',
        -            '%GL_T2F_N3F_V3F','%GL_T2F_V3F','%GL_T4F_C4F_N3F_V4F','%GL_T4F_V4F','%GL_TABLE_TOO_LARGE_EXT','%GL_TEXTURE','%GL_TEXTURE_1D','%GL_TEXTURE_2D',
        -            '%GL_TEXTURE_ALPHA_SIZE','%GL_TEXTURE_BINDING_1D','%GL_TEXTURE_BINDING_2D','%GL_TEXTURE_BIT','%GL_TEXTURE_BLUE_SIZE','%GL_TEXTURE_BORDER','%GL_TEXTURE_BORDER_COLOR','%GL_TEXTURE_COMPONENTS',
        -            '%GL_TEXTURE_COORD_ARRAY','%GL_TEXTURE_COORD_ARRAY_COUNT_EXT','%GL_TEXTURE_COORD_ARRAY_EXT','%GL_TEXTURE_COORD_ARRAY_POINTER','%GL_TEXTURE_COORD_ARRAY_POINTER_EXT','%GL_TEXTURE_COORD_ARRAY_SIZE','%GL_TEXTURE_COORD_ARRAY_SIZE_EXT','%GL_TEXTURE_COORD_ARRAY_STRIDE',
        -            '%GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','%GL_TEXTURE_COORD_ARRAY_TYPE','%GL_TEXTURE_COORD_ARRAY_TYPE_EXT','%GL_TEXTURE_ENV','%GL_TEXTURE_ENV_COLOR','%GL_TEXTURE_ENV_MODE','%GL_TEXTURE_GEN_MODE','%GL_TEXTURE_GEN_Q',
        -            '%GL_TEXTURE_GEN_R','%GL_TEXTURE_GEN_S','%GL_TEXTURE_GEN_T','%GL_TEXTURE_GREEN_SIZE','%GL_TEXTURE_HEIGHT','%GL_TEXTURE_INTENSITY_SIZE','%GL_TEXTURE_INTERNAL_FORMAT','%GL_TEXTURE_LUMINANCE_SIZE',
        -            '%GL_TEXTURE_MAG_FILTER','%GL_TEXTURE_MATRIX','%GL_TEXTURE_MIN_FILTER','%GL_TEXTURE_PRIORITY','%GL_TEXTURE_RED_SIZE','%GL_TEXTURE_RESIDENT','%GL_TEXTURE_STACK_DEPTH','%GL_TEXTURE_WIDTH',
        -            '%GL_TEXTURE_WRAP_S','%GL_TEXTURE_WRAP_T','%GL_TRANSFORM_BIT','%GL_TRIANGLES','%GL_TRIANGLE_FAN','%GL_TRIANGLE_STRIP','%GL_TRUE','%GL_UNPACK_ALIGNMENT',
        -            '%GL_UNPACK_LSB_FIRST','%GL_UNPACK_ROW_LENGTH','%GL_UNPACK_SKIP_PIXELS','%GL_UNPACK_SKIP_ROWS','%GL_UNPACK_SWAP_BYTES','%GL_UNSIGNED_BYTE','%GL_UNSIGNED_BYTE_3_3_2_EXT','%GL_UNSIGNED_INT',
        -            '%GL_UNSIGNED_INT_10_10_10_2_EXT','%GL_UNSIGNED_INT_8_8_8_8_EXT','%GL_UNSIGNED_SHORT','%GL_UNSIGNED_SHORT_4_4_4_4_EXT','%GL_UNSIGNED_SHORT_5_5_5_1_EXT','%GL_V2F','%GL_V3F','%GL_VENDOR',
        -            '%GL_VERSION','%GL_VERSION_1_1','%GL_VERTEX_ARRAY','%GL_VERTEX_ARRAY_COUNT_EXT','%GL_VERTEX_ARRAY_EXT','%GL_VERTEX_ARRAY_POINTER','%GL_VERTEX_ARRAY_POINTER_EXT','%GL_VERTEX_ARRAY_SIZE',
        -            '%GL_VERTEX_ARRAY_SIZE_EXT','%GL_VERTEX_ARRAY_STRIDE','%GL_VERTEX_ARRAY_STRIDE_EXT','%GL_VERTEX_ARRAY_TYPE','%GL_VERTEX_ARRAY_TYPE_EXT','%GL_VIEWPORT','%GL_VIEWPORT_BIT','%GL_WIN_SWAP_HINT',
        -            '%GL_XOR','%GL_ZERO','%GL_ZOOM_X','%GL_ZOOM_Y','%GRAY','%GREEN','%GWLP_HINSTANCE','%GWLP_HWNDPARENT',
        -            '%GWLP_ID','%GWLP_USERDATA','%GWLP_WNDPROC','%GWL_EXSTYLE','%GWL_HINSTANCE','%GWL_HWNDPARENT','%GWL_ID','%GWL_STYLE',
        -            '%GWL_USERDATA','%GWL_WNDPROC','%HDM_FIRST','%HTCAPTION','%HWND_BOTTOM','%HWND_DESKTOP','%HWND_MESSAGE','%HWND_NOTOPMOST',
        -            '%HWND_TOP','%HWND_TOPMOST','%ICRYPTO_XOR_DECREASE','%ICRYPTO_XOR_INCREASE','%ICRYPTO_XOR_NORMAL','%IDABORT','%IDCANCEL','%IDCONTINUE',
        -            '%IDIGNORE','%IDNO','%IDOK','%IDRETRY','%IDTIMEOUT','%IDTRYAGAIN','%IDYES','%INTERNET_CONNECTION_CONFIGURED',
        -            '%INTERNET_CONNECTION_LAN','%INTERNET_CONNECTION_MODEM','%INTERNET_CONNECTION_MODEM_BUSY','%INTERNET_CONNECTION_OFFLINE','%INTERNET_CONNECTION_PROXY','%INTERNET_RAS_INSTALLED','%LBN_DBLCLK','%LBN_KILLFOCUS',
        -            '%LBN_SELCANCEL','%LBN_SELCHANGE','%LBN_SETFOCUS','%LBS_DISABLENOSCROLL','%LBS_EXTENDEDSEL','%LBS_MULTICOLUMN','%LBS_MULTIPLESEL','%LBS_NOINTEGRALHEIGHT',
        -            '%LBS_NOSEL','%LBS_NOTIFY','%LBS_SORT','%LBS_STANDARD','%LBS_USETABSTOPS','%LB_ADDFILE','%LB_ADDSTRING','%LB_DELETESTRING',
        -            '%LB_DIR','%LB_FINDSTRING','%LB_FINDSTRINGEXACT','%LB_GETANCHORINDEX','%LB_GETCARETINDEX','%LB_GETCOUNT','%LB_GETCURSEL','%LB_GETHORIZONTALEXTENT',
        -            '%LB_GETITEMDATA','%LB_GETITEMHEIGHT','%LB_GETITEMRECT','%LB_GETLISTBOXINFO','%LB_GETLOCALE','%LB_GETSEL','%LB_GETSELCOUNT','%LB_GETSELITEMS',
        -            '%LB_GETTEXT','%LB_GETTEXTLEN','%LB_GETTOPINDEX','%LB_INITSTORAGE','%LB_INSERTSTRING','%LB_ITEMFROMPOINT','%LB_MULTIPLEADDSTRING','%LB_RESETCONTENT',
        -            '%LB_SELECTSTRING','%LB_SELITEMRANGE','%LB_SELITEMRANGEEX','%LB_SETANCHORINDEX','%LB_SETCARETINDEX','%LB_SETCOLUMNWIDTH','%LB_SETCOUNT','%LB_SETCURSEL',
        -            '%LB_SETHORIZONTALEXTENT','%LB_SETITEMDATA','%LB_SETITEMHEIGHT','%LB_SETLOCALE','%LB_SETSEL','%LB_SETTABSTOPS','%LB_SETTOPINDEX','%LF_FACESIZE',
        -            '%LTGRAY','%LVM_FIRST','%LWA_ALPHA','%LWA_COLORKEY','%MAGENTA','%MAXBYTE','%MAXCHAR','%MAXDWORD',
        -            '%MAXSHORT','%MAXWORD','%MAX_PATH','%MB_ABORTRETRYIGNORE','%MB_APPLMODAL','%MB_CANCELTRYCONTINUE','%MB_DEFBUTTON1','%MB_DEFBUTTON2',
        -            '%MB_DEFBUTTON3','%MB_HELP','%MB_ICONASTERISK','%MB_ICONERROR','%MB_ICONEXCLAMATION','%MB_ICONHAND','%MB_ICONINFORMATION','%MB_ICONQUESTION',
        -            '%MB_ICONSTOP','%MB_ICONWARNING','%MB_OK','%MB_OKCANCEL','%MB_RETRYCANCEL','%MB_SIMPLE','%MB_SYSTEMMODAL','%MB_TOPMOST',
        -            '%MB_YESNO','%MB_YESNOCANCEL','%MF_CHECKED','%MF_DISABLED','%MF_ENABLED','%MF_GRAYED','%MF_SEPARATOR','%MF_UNCHECKED',
        -            '%MINCHAR','%MINLONG','%MINSHORT','%NULL','%ODBC352_INC','%ODBCVER','%ODBC_ADD_DSN','%ODBC_ADD_SYS_DSN',
        -            '%ODBC_BOTH_DSN','%ODBC_CONFIG_DRIVER','%ODBC_CONFIG_DRIVER_MAX','%ODBC_CONFIG_DSN','%ODBC_CONFIG_SYS_DSN','%ODBC_DRIVER_VERSION','%ODBC_ERROR_COMPONENT_NOT_FOUND','%ODBC_ERROR_CREATE_DSN_FAILED',
        -            '%ODBC_ERROR_GENERAL_ERR','%ODBC_ERROR_INVALID_BUFF_LEN','%ODBC_ERROR_INVALID_DSN','%ODBC_ERROR_INVALID_HWND','%ODBC_ERROR_INVALID_INF','%ODBC_ERROR_INVALID_KEYWORD_VALUE','%ODBC_ERROR_INVALID_LOG_FILE','%ODBC_ERROR_INVALID_NAME',
        -            '%ODBC_ERROR_INVALID_PARAM_SEQUENCE','%ODBC_ERROR_INVALID_PATH','%ODBC_ERROR_INVALID_REQUEST_TYPE','%ODBC_ERROR_INVALID_STR','%ODBC_ERROR_LOAD_LIB_FAILED','%ODBC_ERROR_OUTPUT_STRING_TRUNCATED','%ODBC_ERROR_OUT_OF_MEM','%ODBC_ERROR_REMOVE_DSN_FAILED',
        -            '%ODBC_ERROR_REQUEST_FAILED','%ODBC_ERROR_USAGE_UPDATE_FAILED','%ODBC_ERROR_USER_CANCELED','%ODBC_ERROR_WRITING_SYSINFO_FAILED','%ODBC_INSTALL_COMPLETE','%ODBC_INSTALL_DRIVER','%ODBC_INSTALL_INQUIRY','%ODBC_REMOVE_DEFAULT_DSN',
        -            '%ODBC_REMOVE_DRIVER','%ODBC_REMOVE_DSN','%ODBC_REMOVE_SYS_DSN','%ODBC_SYSTEM_DSN','%ODBC_USER_DSN','%OFN_ALLOWMULTISELECT','%OFN_CREATEPROMPT','%OFN_ENABLEHOOK',
        -            '%OFN_ENABLEINCLUDENOTIFY','%OFN_ENABLESIZING','%OFN_ENABLETEMPLATE','%OFN_ENABLETEMPLATEHANDLE','%OFN_EXPLORER','%OFN_EXTENSIONDIFFERENT','%OFN_FILEMUSTEXIST','%OFN_HIDEREADONLY',
        -            '%OFN_LONGNAMES','%OFN_NOCHANGEDIR','%OFN_NODEREFERENCELINKS','%OFN_NOLONGNAMES','%OFN_NONETWORKBUTTON','%OFN_NOREADONLYRETURN','%OFN_NOTESTFILECREATE','%OFN_NOVALIDATE',
        -            '%OFN_OVERWRITEPROMPT','%OFN_PATHMUSTEXIST','%OFN_READONLY','%OFN_SHAREAWARE','%OFN_SHOWHELP','%OS_ERROR_CALLFUNCTION','%OS_ERROR_EMPTYSTRING','%OS_ERROR_LOADLIBRARY',
        -            '%OS_ERROR_SUCCESS','%OS_ERROR_WRONGPARAMETER','%OS_SHELL_ASYNC','%OS_SHELL_SYNC','%OS_WINDOWS_2K','%OS_WINDOWS_95','%OS_WINDOWS_95_OSR2','%OS_WINDOWS_98',
        -            '%OS_WINDOWS_98_SE','%OS_WINDOWS_ME','%OS_WINDOWS_NT','%OS_WINDOWS_SERVER_2003','%OS_WINDOWS_SERVER_LONGHORN','%OS_WINDOWS_SERVER_LONGHORN_DC','%OS_WINDOWS_VISTA','%OS_WINDOWS_XP',
        -            '%OS_WNDSTYLE_HIDE','%OS_WNDSTYLE_MAXIMIZED','%OS_WNDSTYLE_MINIMIZED','%OS_WNDSTYLE_MINIMIZEDNOFOCUS','%OS_WNDSTYLE_NORMAL','%OS_WNDSTYLE_NORMALNOFOCUS','%PATH_EXT','%PATH_FILE',
        -            '%PATH_FILEEXT','%PATH_ROOT','%PATH_ROOTPATH','%PATH_ROOTPATHPROG','%PATH_ROOTPATHPROGEXT','%PBM_DELTAPOS','%PBM_GETPOS','%PBM_GETRANGE',
        -            '%PBM_SETBARCOLOR','%PBM_SETBKCOLOR','%PBM_SETPOS','%PBM_SETRANGE','%PBM_SETRANGE32','%PBM_SETSTEP','%PBM_STEPIT','%PBS_SMOOTH',
        -            '%PBS_VERTICAL','%PC_DISABLEWAKEEVENT_OFF','%PC_DISABLEWAKEEVENT_ON','%PC_EB_NOCONFIRMATION','%PC_EB_NOPROGRESSUI','%PC_EB_NORMAL','%PC_EB_NOSOUND','%PC_FORCECRITICAL_OFF',
        -            '%PC_FORCECRITICAL_ON','%PC_HIBERNATE_OFF','%PC_HIBERNATE_ON','%PC_RD_FORCE','%PC_RD_FORCEIFHUNG','%PC_RD_LOGOFF','%PC_RD_POWEROFF','%PC_RD_REBOOT',
        -            '%PC_RD_SHUTDOWN','%PC_SD_DONOT_FORCE','%PC_SD_DONOT_REBOOT','%PC_SD_FORCE','%PC_SD_REBOOT','%PFA_CENTER','%PFA_LEFT','%PFA_RIGHT',
        -            '%PF_3DNOW_INSTRUCTIONS_AVAILABLE','%PF_CHANNELS_ENABLED','%PF_COMPARE64_EXCHANGE128','%PF_COMPARE_EXCHANGE128','%PF_COMPARE_EXCHANGE_DOUBLE','%PF_FLOATING_POINT_EMULATED','%PF_FLOATING_POINT_PRECISION_ERRATA','%PF_MMX_INSTRUCTIONS_AVAILABLE',
        -            '%PF_NX_ENABLED','%PF_PAE_ENABLED','%PF_RDTSC_INSTRUCTION_AVAILABLE','%PF_SSE3_INSTRUCTIONS_AVAILABLE','%PF_XMMI64_INSTRUCTIONS_AVAILABLE','%PF_XMMI_INSTRUCTIONS_AVAILABLE','%PGM_FIRST','%RED',
        -            '%RTF_UBB','%SAPI_SVSFDEFAULT','%SAPI_SVSFISFILENAME','%SAPI_SVSFISNOTXML','%SAPI_SVSFISXML','%SAPI_SVSFLAGSASYNC','%SAPI_SVSFNLPMASK','%SAPI_SVSFNLPSPEAKPUNC',
        -            '%SAPI_SVSFPERSISTXML','%SAPI_SVSFPURGEBEFORESPEAK','%SAPI_SVSFUNUSEDFLAGS','%SAPI_SVSFVOICEMASK','%SBS_SIZEGRIP','%SB_BOTTOM','%SB_ENDSCROLL','%SB_LEFT',
        -            '%SB_LINEDOWN','%SB_LINELEFT','%SB_LINERIGHT','%SB_LINEUP','%SB_PAGEDOWN','%SB_PAGELEFT','%SB_PAGERIGHT','%SB_PAGEUP',
        -            '%SB_RIGHT','%SB_SETPARTS','%SB_SETTEXT','%SB_THUMBPOSITION','%SB_THUMBTRACK','%SB_TOP','%SCF_ALL','%SCF_ASSOCIATEFONT',
        -            '%SCF_DEFAULT','%SCF_NOKBUPDATE','%SCF_SELECTION','%SCF_USEUIRULES','%SCF_WORD','%SC_CLOSE','%SC_CONTEXTHELP','%SC_HOTKEY',
        -            '%SC_HSCROLL','%SC_KEYMENU','%SC_MAXIMIZE','%SC_MINIMIZE','%SC_MONITORPOWER','%SC_MOUSEMENU','%SC_MOVE','%SC_NEXTWINDOW',
        -            '%SC_PREVWINDOW','%SC_RESTORE','%SC_SCREENSAVE','%SC_SIZE','%SC_TASKLIST','%SC_VSCROLL','%SERVICE_ACTIVE','%SERVICE_AUTO_START',
        -            '%SERVICE_BOOT_START','%SERVICE_CONTINUE_PENDING','%SERVICE_DEMAND_START','%SERVICE_DISABLED','%SERVICE_DRIVER','%SERVICE_INACTIVE','%SERVICE_INFO_DISPLAY_NAME','%SERVICE_INFO_NAME',
        -            '%SERVICE_PAUSED','%SERVICE_PAUSE_PENDING','%SERVICE_RUNNING','%SERVICE_START_PENDING','%SERVICE_STATE_ALL','%SERVICE_STOPPED','%SERVICE_STOP_PENDING','%SERVICE_SYSTEM_START',
        -            '%SERVICE_TYPE_ALL','%SERVICE_WIN32','%SES_ALLOWBEEPS','%SES_BEEPONMAXTEXT','%SES_BIDI','%SES_EMULATE10','%SES_EMULATESYSEDIT','%SES_EXTENDBACKCOLOR',
        -            '%SES_LOWERCASE','%SES_MAPCPS','%SES_NOIME','%SES_NOINPUTSEQUENCECHK','%SES_SCROLLONKILLFOCUS','%SES_UPPERCASE','%SES_USEAIMM','%SES_USECRLF',
        -            '%SES_XLTCRCRLFTOCR','%SF_RTF','%SF_TEXT','%SMTP_SET_ATTACH_CONTENT_TYPE','%SMTP_SET_CONTENT_TYPE_PREFIX','%SQL_AA_FALSE','%SQL_AA_TRUE','%SQL_ACCESSIBLE_PROCEDURES',
        -            '%SQL_ACCESSIBLE_TABLES','%SQL_ACCESS_MODE','%SQL_ACTIVE_CONNECTIONS','%SQL_ACTIVE_ENVIRONMENTS','%SQL_ACTIVE_STATEMENTS','%SQL_ADD','%SQL_AD_ADD_CONSTRAINT_DEFERRABLE','%SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED',
        -            '%SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE','%SQL_AD_ADD_DOMAIN_CONSTRAINT','%SQL_AD_ADD_DOMAIN_DEFAULT','%SQL_AD_CONSTRAINT_NAME_DEFINITION','%SQL_AD_DROP_DOMAIN_CONSTRAINT','%SQL_AD_DROP_DOMAIN_DEFAULT','%SQL_AF_ALL',
        -            '%SQL_AF_AVG','%SQL_AF_COUNT','%SQL_AF_DISTINCT','%SQL_AF_MAX','%SQL_AF_MIN','%SQL_AF_SUM','%SQL_AGGREGATE_FUNCTIONS','%SQL_ALL_EXCEPT_LIKE',
        -            '%SQL_ALL_TYPES','%SQL_ALTER_DOMAIN','%SQL_ALTER_TABLE','%SQL_AM_CONNECTION','%SQL_AM_NONE','%SQL_AM_STATEMENT','%SQL_API_ALL_FUNCTIONS','%SQL_API_LOADBYORDINAL',
        -            '%SQL_API_ODBC3_ALL_FUNCTIONS','%SQL_API_ODBC3_ALL_FUNCTIONS_SIZE','%SQL_API_SQLALLOCCONNECT','%SQL_API_SQLALLOCENV','%SQL_API_SQLALLOCHANDLE','%SQL_API_SQLALLOCHANDLESTD','%SQL_API_SQLALLOCSTMT','%SQL_API_SQLBINDCOL',
        -            '%SQL_API_SQLBINDPARAM','%SQL_API_SQLBINDPARAMETER','%SQL_API_SQLBROWSECONNECT','%SQL_API_SQLBULKOPERATIONS','%SQL_API_SQLCANCEL','%SQL_API_SQLCLOSECURSOR','%SQL_API_SQLCOLATTRIBUTE','%SQL_API_SQLCOLATTRIBUTES',
        -            '%SQL_API_SQLCOLUMNPRIVILEGES','%SQL_API_SQLCOLUMNS','%SQL_API_SQLCONNECT','%SQL_API_SQLCOPYDESC','%SQL_API_SQLDATASOURCES','%SQL_API_SQLDESCRIBECOL','%SQL_API_SQLDESCRIBEPARAM','%SQL_API_SQLDISCONNECT',
        -            '%SQL_API_SQLDRIVERCONNECT','%SQL_API_SQLDRIVERS','%SQL_API_SQLENDTRAN','%SQL_API_SQLERROR','%SQL_API_SQLEXECDIRECT','%SQL_API_SQLEXECUTE','%SQL_API_SQLEXTENDEDFETCH','%SQL_API_SQLFETCH',
        -            '%SQL_API_SQLFETCHSCROLL','%SQL_API_SQLFOREIGNKEYS','%SQL_API_SQLFREECONNECT','%SQL_API_SQLFREEENV','%SQL_API_SQLFREEHANDLE','%SQL_API_SQLFREESTMT','%SQL_API_SQLGETCONNECTATTR','%SQL_API_SQLGETCONNECTOPTION',
        -            '%SQL_API_SQLGETCURSORNAME','%SQL_API_SQLGETDATA','%SQL_API_SQLGETDESCFIELD','%SQL_API_SQLGETDESCREC','%SQL_API_SQLGETDIAGFIELD','%SQL_API_SQLGETDIAGREC','%SQL_API_SQLGETENVATTR','%SQL_API_SQLGETFUNCTIONS',
        -            '%SQL_API_SQLGETINFO','%SQL_API_SQLGETSTMTATTR','%SQL_API_SQLGETSTMTOPTION','%SQL_API_SQLGETTYPEINFO','%SQL_API_SQLMORERESULTS','%SQL_API_SQLNATIVESQL','%SQL_API_SQLNUMPARAMS','%SQL_API_SQLNUMRESULTCOLS',
        -            '%SQL_API_SQLPARAMDATA','%SQL_API_SQLPARAMOPTIONS','%SQL_API_SQLPREPARE','%SQL_API_SQLPRIMARYKEYS','%SQL_API_SQLPROCEDURECOLUMNS','%SQL_API_SQLPROCEDURES','%SQL_API_SQLPUTDATA','%SQL_API_SQLROWCOUNT',
        -            '%SQL_API_SQLSETCONNECTATTR','%SQL_API_SQLSETCONNECTOPTION','%SQL_API_SQLSETCURSORNAME','%SQL_API_SQLSETDESCFIELD','%SQL_API_SQLSETDESCREC','%SQL_API_SQLSETENVATTR','%SQL_API_SQLSETPARAM','%SQL_API_SQLSETPOS',
        -            '%SQL_API_SQLSETSCROLLOPTIONS','%SQL_API_SQLSETSTMTATTR','%SQL_API_SQLSETSTMTOPTION','%SQL_API_SQLSPECIALCOLUMNS','%SQL_API_SQLSTATISTICS','%SQL_API_SQLTABLEPRIVILEGES','%SQL_API_SQLTABLES','%SQL_API_SQLTRANSACT',
        -            '%SQL_ARD_TYPE','%SQL_ASYNC_ENABLE','%SQL_ASYNC_ENABLE_DEFAULT','%SQL_ASYNC_ENABLE_OFF','%SQL_ASYNC_ENABLE_ON','%SQL_ASYNC_MODE','%SQL_ATTR_ACCESS_MODE','%SQL_ATTR_ANSI_APP',
        -            '%SQL_ATTR_APP_PARAM_DESC','%SQL_ATTR_APP_ROW_DESC','%SQL_ATTR_ASYNC_ENABLE','%SQL_ATTR_AUTOCOMMIT','%SQL_ATTR_AUTO_IPD','%SQL_ATTR_CONCURRENCY','%SQL_ATTR_CONNECTION_DEAD','%SQL_ATTR_CONNECTION_POOLING',
        -            '%SQL_ATTR_CONNECTION_TIMEOUT','%SQL_ATTR_CP_MATCH','%SQL_ATTR_CURRENT_CATALOG','%SQL_ATTR_CURSOR_SCROLLABLE','%SQL_ATTR_CURSOR_SENSITIVITY','%SQL_ATTR_CURSOR_TYPE','%SQL_ATTR_DISCONNECT_BEHAVIOR','%SQL_ATTR_ENABLE_AUTO_IPD',
        -            '%SQL_ATTR_ENLIST_IN_DTC','%SQL_ATTR_ENLIST_IN_XA','%SQL_ATTR_FETCH_BOOKMARK_PTR','%SQL_ATTR_IMP_PARAM_DESC','%SQL_ATTR_IMP_ROW_DESC','%SQL_ATTR_KEYSET_SIZE','%SQL_ATTR_LOGIN_TIMEOUT','%SQL_ATTR_MAX_LENGTH',
        -            '%SQL_ATTR_MAX_ROWS','%SQL_ATTR_METADATA_ID','%SQL_ATTR_NOSCAN','%SQL_ATTR_ODBC_CURSORS','%SQL_ATTR_ODBC_VERSION','%SQL_ATTR_OUTPUT_NTS','%SQL_ATTR_PACKET_SIZE','%SQL_ATTR_PARAMSET_SIZE',
        -            '%SQL_ATTR_PARAMS_PROCESSED_PTR','%SQL_ATTR_PARAM_BIND_OFFSET_PTR','%SQL_ATTR_PARAM_BIND_TYPE','%SQL_ATTR_PARAM_OPERATION_PTR','%SQL_ATTR_PARAM_STATUS_PTR','%SQL_ATTR_QUERY_TIMEOUT','%SQL_ATTR_QUIET_MODE','%SQL_ATTR_READONLY',
        -            '%SQL_ATTR_READWRITE_UNKNOWN','%SQL_ATTR_RETRIEVE_DATA','%SQL_ATTR_ROWS_FETCHED_PTR','%SQL_ATTR_ROW_ARRAY_SIZE','%SQL_ATTR_ROW_BIND_OFFSET_PTR','%SQL_ATTR_ROW_BIND_TYPE','%SQL_ATTR_ROW_NUMBER','%SQL_ATTR_ROW_OPERATION_PTR',
        -            '%SQL_ATTR_ROW_STATUS_PTR','%SQL_ATTR_SIMULATE_CURSOR','%SQL_ATTR_TRACE','%SQL_ATTR_TRACEFILE','%SQL_ATTR_TRANSLATE_LIB','%SQL_ATTR_TRANSLATE_OPTION','%SQL_ATTR_TXN_ISOLATION','%SQL_ATTR_USE_BOOKMARKS',
        -            '%SQL_ATTR_WRITE','%SQL_AT_ADD_COLUMN','%SQL_AT_ADD_COLUMN_COLLATION','%SQL_AT_ADD_COLUMN_DEFAULT','%SQL_AT_ADD_COLUMN_SINGLE','%SQL_AT_ADD_CONSTRAINT','%SQL_AT_ADD_TABLE_CONSTRAINT','%SQL_AT_CONSTRAINT_DEFERRABLE',
        -            '%SQL_AT_CONSTRAINT_INITIALLY_DEFERRED','%SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AT_CONSTRAINT_NAME_DEFINITION','%SQL_AT_CONSTRAINT_NON_DEFERRABLE','%SQL_AT_DROP_COLUMN','%SQL_AT_DROP_COLUMN_CASCADE','%SQL_AT_DROP_COLUMN_DEFAULT','%SQL_AT_DROP_COLUMN_RESTRICT',
        -            '%SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE','%SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT','%SQL_AT_SET_COLUMN_DEFAULT','%SQL_AUTOCOMMIT','%SQL_AUTOCOMMIT_DEFAULT','%SQL_AUTOCOMMIT_OFF','%SQL_AUTOCOMMIT_ON','%SQL_BATCH_ROW_COUNT',
        -            '%SQL_BATCH_SUPPORT','%SQL_BEST_ROWID','%SQL_BIGINT','%SQL_BINARY','%SQL_BIND_BY_COLUMN','%SQL_BIND_TYPE','%SQL_BIND_TYPE_DEFAULT','%SQL_BIT',
        -            '%SQL_BOOKMARK_PERSISTENCE','%SQL_BP_CLOSE','%SQL_BP_DELETE','%SQL_BP_DROP','%SQL_BP_OTHER_HSTMT','%SQL_BP_SCROLL','%SQL_BP_TRANSACTION','%SQL_BP_UPDATE',
        -            '%SQL_BRC_EXPLICIT','%SQL_BRC_PROCEDURES','%SQL_BRC_ROLLED_UP','%SQL_BS_ROW_COUNT_EXPLICIT','%SQL_BS_ROW_COUNT_PROC','%SQL_BS_SELECT_EXPLICIT','%SQL_BS_SELECT_PROC','%SQL_CA1_ABSOLUTE',
        -            '%SQL_CA1_BOOKMARK','%SQL_CA1_BULK_ADD','%SQL_CA1_BULK_DELETE_BY_BOOKMARK','%SQL_CA1_BULK_FETCH_BY_BOOKMARK','%SQL_CA1_BULK_UPDATE_BY_BOOKMARK','%SQL_CA1_LOCK_EXCLUSIVE','%SQL_CA1_LOCK_NO_CHANGE','%SQL_CA1_LOCK_UNLOCK',
        -            '%SQL_CA1_NEXT','%SQL_CA1_POSITIONED_DELETE','%SQL_CA1_POSITIONED_UPDATE','%SQL_CA1_POS_DELETE','%SQL_CA1_POS_POSITION','%SQL_CA1_POS_REFRESH','%SQL_CA1_POS_UPDATE','%SQL_CA1_RELATIVE',
        -            '%SQL_CA1_SELECT_FOR_UPDATE','%SQL_CA2_CRC_APPROXIMATE','%SQL_CA2_CRC_EXACT','%SQL_CA2_LOCK_CONCURRENCY','%SQL_CA2_MAX_ROWS_AFFECTS_ALL','%SQL_CA2_MAX_ROWS_CATALOG','%SQL_CA2_MAX_ROWS_DELETE','%SQL_CA2_MAX_ROWS_INSERT',
        -            '%SQL_CA2_MAX_ROWS_SELECT','%SQL_CA2_MAX_ROWS_UPDATE','%SQL_CA2_OPT_ROWVER_CONCURRENCY','%SQL_CA2_OPT_VALUES_CONCURRENCY','%SQL_CA2_READ_ONLY_CONCURRENCY','%SQL_CA2_SENSITIVITY_ADDITIONS','%SQL_CA2_SENSITIVITY_DELETIONS','%SQL_CA2_SENSITIVITY_UPDATES',
        -            '%SQL_CA2_SIMULATE_NON_UNIQUE','%SQL_CA2_SIMULATE_TRY_UNIQUE','%SQL_CA2_SIMULATE_UNIQUE','%SQL_CASCADE','%SQL_CATALOG_LOCATION','%SQL_CATALOG_NAME','%SQL_CATALOG_NAME_SEPARATOR','%SQL_CATALOG_TERM',
        -            '%SQL_CATALOG_USAGE','%SQL_CA_CONSTRAINT_DEFERRABLE','%SQL_CA_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CA_CONSTRAINT_NON_DEFERRABLE','%SQL_CA_CREATE_ASSERTION','%SQL_CB_CLOSE','%SQL_CB_DELETE',
        -            '%SQL_CB_NON_NULL','%SQL_CB_NULL','%SQL_CB_PRESERVE','%SQL_CCOL_CREATE_COLLATION','%SQL_CCS_COLLATE_CLAUSE','%SQL_CCS_CREATE_CHARACTER_SET','%SQL_CCS_LIMITED_COLLATION','%SQL_CC_CLOSE',
        -            '%SQL_CC_DELETE','%SQL_CC_PRESERVE','%SQL_CDO_COLLATION','%SQL_CDO_CONSTRAINT','%SQL_CDO_CONSTRAINT_DEFERRABLE','%SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CDO_CONSTRAINT_NAME_DEFINITION',
        -            '%SQL_CDO_CONSTRAINT_NON_DEFERRABLE','%SQL_CDO_CREATE_DOMAIN','%SQL_CDO_DEFAULT','%SQL_CD_FALSE','%SQL_CD_TRUE','%SQL_CHAR','%SQL_CLOSE','%SQL_CL_END',
        -            '%SQL_CL_START','%SQL_CN_ANY','%SQL_CN_DIFFERENT','%SQL_CN_NONE','%SQL_CODE_DATE','%SQL_CODE_DAY','%SQL_CODE_DAY_TO_HOUR','%SQL_CODE_DAY_TO_MINUTE',
        -            '%SQL_CODE_DAY_TO_SECOND','%SQL_CODE_HOUR','%SQL_CODE_HOUR_TO_MINUTE','%SQL_CODE_HOUR_TO_SECOND','%SQL_CODE_MINUTE','%SQL_CODE_MINUTE_TO_SECOND','%SQL_CODE_MONTH','%SQL_CODE_SECOND',
        -            '%SQL_CODE_TIME','%SQL_CODE_TIMESTAMP','%SQL_CODE_YEAR','%SQL_CODE_YEAR_TO_MONTH','%SQL_COLATT_OPT_MAX','%SQL_COLATT_OPT_MIN','%SQL_COLLATION_SEQ','%SQL_COLUMN_ALIAS',
        -            '%SQL_COLUMN_AUTO_INCREMENT','%SQL_COLUMN_CASE_SENSITIVE','%SQL_COLUMN_COUNT','%SQL_COLUMN_DISPLAY_SIZE','%SQL_COLUMN_IGNORE','%SQL_COLUMN_LABEL','%SQL_COLUMN_LENGTH','%SQL_COLUMN_MONEY',
        -            '%SQL_COLUMN_NAME','%SQL_COLUMN_NULLABLE','%SQL_COLUMN_NUMBER_UNKNOWN','%SQL_COLUMN_OWNER_NAME','%SQL_COLUMN_PRECISION','%SQL_COLUMN_QUALIFIER_NAME','%SQL_COLUMN_SCALE','%SQL_COLUMN_SEARCHABLE',
        -            '%SQL_COLUMN_TABLE_NAME','%SQL_COLUMN_TYPE','%SQL_COLUMN_TYPE_NAME','%SQL_COLUMN_UNSIGNED','%SQL_COLUMN_UPDATABLE','%SQL_COL_PRED_BASIC','%SQL_COL_PRED_CHAR','%SQL_COMMIT',
        -            '%SQL_CONCAT_NULL_BEHAVIOR','%SQL_CONCURRENCY','%SQL_CONCUR_DEFAULT','%SQL_CONCUR_LOCK','%SQL_CONCUR_READ_ONLY','%SQL_CONCUR_ROWVER','%SQL_CONCUR_TIMESTAMP','%SQL_CONCUR_VALUES',
        -            '%SQL_CONVERT_BIGINT','%SQL_CONVERT_BINARY','%SQL_CONVERT_BIT','%SQL_CONVERT_CHAR','%SQL_CONVERT_DATE','%SQL_CONVERT_DECIMAL','%SQL_CONVERT_DOUBLE','%SQL_CONVERT_FLOAT',
        -            '%SQL_CONVERT_FUNCTIONS','%SQL_CONVERT_GUID','%SQL_CONVERT_INTEGER','%SQL_CONVERT_INTERVAL_DAY_TIME','%SQL_CONVERT_INTERVAL_YEAR_MONTH','%SQL_CONVERT_LONGVARBINARY','%SQL_CONVERT_LONGVARCHAR','%SQL_CONVERT_NUMERIC',
        -            '%SQL_CONVERT_REAL','%SQL_CONVERT_SMALLINT','%SQL_CONVERT_TIME','%SQL_CONVERT_TIMESTAMP','%SQL_CONVERT_TINYINT','%SQL_CONVERT_VARBINARY','%SQL_CONVERT_VARCHAR','%SQL_CONVERT_WCHAR',
        -            '%SQL_CONVERT_WLONGVARCHAR','%SQL_CONVERT_WVARCHAR','%SQL_CORRELATION_NAME','%SQL_CP_DEFAULT','%SQL_CP_MATCH_DEFAULT','%SQL_CP_OFF','%SQL_CP_ONE_PER_DRIVER','%SQL_CP_ONE_PER_HENV',
        -            '%SQL_CP_RELAXED_MATCH','%SQL_CP_STRICT_MATCH','%SQL_CREATE_ASSERTION','%SQL_CREATE_CHARACTER_SET','%SQL_CREATE_COLLATION','%SQL_CREATE_DOMAIN','%SQL_CREATE_SCHEMA','%SQL_CREATE_TABLE',
        -            '%SQL_CREATE_TRANSLATION','%SQL_CREATE_VIEW','%SQL_CR_CLOSE','%SQL_CR_DELETE','%SQL_CR_PRESERVE','%SQL_CS_AUTHORIZATION','%SQL_CS_CREATE_SCHEMA','%SQL_CS_DEFAULT_CHARACTER_SET',
        -            '%SQL_CTR_CREATE_TRANSLATION','%SQL_CT_COLUMN_COLLATION','%SQL_CT_COLUMN_CONSTRAINT','%SQL_CT_COLUMN_DEFAULT','%SQL_CT_COMMIT_DELETE','%SQL_CT_COMMIT_PRESERVE','%SQL_CT_CONSTRAINT_DEFERRABLE','%SQL_CT_CONSTRAINT_INITIALLY_DEFERRED',
        -            '%SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CT_CONSTRAINT_NAME_DEFINITION','%SQL_CT_CONSTRAINT_NON_DEFERRABLE','%SQL_CT_CREATE_TABLE','%SQL_CT_GLOBAL_TEMPORARY','%SQL_CT_LOCAL_TEMPORARY','%SQL_CT_TABLE_CONSTRAINT','%SQL_CURRENT_QUALIFIER',
        -            '%SQL_CURSOR_COMMIT_BEHAVIOR','%SQL_CURSOR_DYNAMIC','%SQL_CURSOR_FORWARD_ONLY','%SQL_CURSOR_KEYSET_DRIVEN','%SQL_CURSOR_ROLLBACK_BEHAVIOR','%SQL_CURSOR_SENSITIVITY','%SQL_CURSOR_STATIC','%SQL_CURSOR_TYPE',
        -            '%SQL_CURSOR_TYPE_DEFAULT','%SQL_CUR_DEFAULT','%SQL_CUR_USE_DRIVER','%SQL_CUR_USE_IF_NEEDED','%SQL_CUR_USE_ODBC','%SQL_CU_DML_STATEMENTS','%SQL_CU_INDEX_DEFINITION','%SQL_CU_PRIVILEGE_DEFINITION',
        -            '%SQL_CU_PROCEDURE_INVOCATION','%SQL_CU_TABLE_DEFINITION','%SQL_CVT_BIGINT','%SQL_CVT_BINARY','%SQL_CVT_BIT','%SQL_CVT_CHAR','%SQL_CVT_DATE','%SQL_CVT_DECIMAL',
        -            '%SQL_CVT_DOUBLE','%SQL_CVT_FLOAT','%SQL_CVT_GUID','%SQL_CVT_INTEGER','%SQL_CVT_INTERVAL_DAY_TIME','%SQL_CVT_INTERVAL_YEAR_MONTH','%SQL_CVT_LONGVARBINARY','%SQL_CVT_LONGVARCHAR',
        -            '%SQL_CVT_NUMERIC','%SQL_CVT_REAL','%SQL_CVT_SMALLINT','%SQL_CVT_TIME','%SQL_CVT_TIMESTAMP','%SQL_CVT_TINYINT','%SQL_CVT_VARBINARY','%SQL_CVT_VARCHAR',
        -            '%SQL_CVT_WCHAR','%SQL_CVT_WLONGVARCHAR','%SQL_CVT_WVARCHAR','%SQL_CV_CASCADED','%SQL_CV_CHECK_OPTION','%SQL_CV_CREATE_VIEW','%SQL_CV_LOCAL','%SQL_C_BINARY',
        -            '%SQL_C_BIT','%SQL_C_BOOKMARK','%SQL_C_CHAR','%SQL_C_DATE','%SQL_C_DEFAULT','%SQL_C_DOUBLE','%SQL_C_FLOAT','%SQL_C_GUID',
        -            '%SQL_C_INTERVAL_DAY','%SQL_C_INTERVAL_DAY_TO_HOUR','%SQL_C_INTERVAL_DAY_TO_MINUTE','%SQL_C_INTERVAL_DAY_TO_SECOND','%SQL_C_INTERVAL_HOUR','%SQL_C_INTERVAL_HOUR_TO_MINUTE','%SQL_C_INTERVAL_HOUR_TO_SECOND','%SQL_C_INTERVAL_MINUTE',
        -            '%SQL_C_INTERVAL_MINUTE_TO_SECOND','%SQL_C_INTERVAL_MONTH','%SQL_C_INTERVAL_SECOND','%SQL_C_INTERVAL_YEAR','%SQL_C_INTERVAL_YEAR_TO_MONTH','%SQL_C_LONG','%SQL_C_NUMERIC','%SQL_C_SBIGINT',
        -            '%SQL_C_SHORT','%SQL_C_SLONG','%SQL_C_SSHORT','%SQL_C_STINYINT','%SQL_C_TIME','%SQL_C_TIMESTAMP','%SQL_C_TINYINT','%SQL_C_TYPE_DATE',
        -            '%SQL_C_TYPE_TIME','%SQL_C_TYPE_TIMESTAMP','%SQL_C_UBIGINT','%SQL_C_ULONG','%SQL_C_USHORT','%SQL_C_UTINYINT','%SQL_C_VARBOOKMARK','%SQL_DATABASE_NAME',
        -            '%SQL_DATA_AT_EXEC','%SQL_DATA_SOURCE_NAME','%SQL_DATA_SOURCE_READ_ONLY','%SQL_DATE','%SQL_DATETIME','%SQL_DATETIME_LITERALS','%SQL_DATE_LEN','%SQL_DAY',
        -            '%SQL_DAY_TO_HOUR','%SQL_DAY_TO_MINUTE','%SQL_DAY_TO_SECOND','%SQL_DA_DROP_ASSERTION','%SQL_DBMS_NAME','%SQL_DBMS_VER','%SQL_DB_DEFAULT','%SQL_DB_DISCONNECT',
        -            '%SQL_DB_RETURN_TO_POOL','%SQL_DCS_DROP_CHARACTER_SET','%SQL_DC_DROP_COLLATION','%SQL_DDL_INDEX','%SQL_DD_CASCADE','%SQL_DD_DROP_DOMAIN','%SQL_DD_RESTRICT','%SQL_DECIMAL',
        -            '%SQL_DEFAULT','%SQL_DEFAULT_PARAM','%SQL_DEFAULT_TXN_ISOLATION','%SQL_DELETE','%SQL_DELETE_BY_BOOKMARK','%SQL_DESCRIBE_PARAMETER','%SQL_DESC_ALLOC_AUTO','%SQL_DESC_ALLOC_TYPE',
        -            '%SQL_DESC_ALLOC_USER','%SQL_DESC_ARRAY_SIZE','%SQL_DESC_ARRAY_STATUS_PTR','%SQL_DESC_AUTO_UNIQUE_VALUE','%SQL_DESC_BASE_COLUMN_NAME','%SQL_DESC_BASE_TABLE_NAME','%SQL_DESC_BIND_OFFSET_PTR','%SQL_DESC_BIND_TYPE',
        -            '%SQL_DESC_CASE_SENSITIVE','%SQL_DESC_CATALOG_NAME','%SQL_DESC_CONCISE_TYPE','%SQL_DESC_COUNT','%SQL_DESC_DATA_PTR','%SQL_DESC_DATETIME_INTERVAL_CODE','%SQL_DESC_DATETIME_INTERVAL_PRECISION','%SQL_DESC_DISPLAY_SIZE',
        -            '%SQL_DESC_FIXED_PREC_SCALE','%SQL_DESC_INDICATOR_PTR','%SQL_DESC_LABEL','%SQL_DESC_LENGTH','%SQL_DESC_LITERAL_PREFIX','%SQL_DESC_LITERAL_SUFFIX','%SQL_DESC_LOCAL_TYPE_NAME','%SQL_DESC_MAXIMUM_SCALE',
        -            '%SQL_DESC_MINIMUM_SCALE','%SQL_DESC_NAME','%SQL_DESC_NULLABLE','%SQL_DESC_NUM_PREC_RADIX','%SQL_DESC_OCTET_LENGTH','%SQL_DESC_OCTET_LENGTH_PTR','%SQL_DESC_PARAMETER_TYPE','%SQL_DESC_PRECISION',
        -            '%SQL_DESC_ROWS_PROCESSED_PTR','%SQL_DESC_SCALE','%SQL_DESC_SCHEMA_NAME','%SQL_DESC_SEARCHABLE','%SQL_DESC_TABLE_NAME','%SQL_DESC_TYPE','%SQL_DESC_TYPE_NAME','%SQL_DESC_UNNAMED',
        -            '%SQL_DESC_UNSIGNED','%SQL_DESC_UPDATABLE','%SQL_DIAG_ALTER_TABLE','%SQL_DIAG_CALL','%SQL_DIAG_CLASS_ORIGIN','%SQL_DIAG_COLUMN_NUMBER','%SQL_DIAG_CONNECTION_NAME','%SQL_DIAG_CREATE_INDEX',
        -            '%SQL_DIAG_CREATE_TABLE','%SQL_DIAG_CREATE_VIEW','%SQL_DIAG_CURSOR_ROW_COUNT','%SQL_DIAG_DELETE_WHERE','%SQL_DIAG_DROP_INDEX','%SQL_DIAG_DROP_TABLE','%SQL_DIAG_DROP_VIEW','%SQL_DIAG_DYNAMIC_DELETE_CURSOR',
        -            '%SQL_DIAG_DYNAMIC_FUNCTION','%SQL_DIAG_DYNAMIC_FUNCTION_CODE','%SQL_DIAG_DYNAMIC_UPDATE_CURSOR','%SQL_DIAG_GRANT','%SQL_DIAG_INSERT','%SQL_DIAG_MESSAGE_TEXT','%SQL_DIAG_NATIVE','%SQL_DIAG_NUMBER',
        -            '%SQL_DIAG_RETURNCODE','%SQL_DIAG_REVOKE','%SQL_DIAG_ROW_COUNT','%SQL_DIAG_ROW_NUMBER','%SQL_DIAG_SELECT_CURSOR','%SQL_DIAG_SERVER_NAME','%SQL_DIAG_SQLSTATE','%SQL_DIAG_SUBCLASS_ORIGIN',
        -            '%SQL_DIAG_UNKNOWN_STATEMENT','%SQL_DIAG_UPDATE_WHERE','%SQL_DI_CREATE_INDEX','%SQL_DI_DROP_INDEX','%SQL_DL_SQL92_DATE','%SQL_DL_SQL92_INTERVAL_DAY','%SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR','%SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE',
        -            '%SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND','%SQL_DL_SQL92_INTERVAL_HOUR','%SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE','%SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MINUTE','%SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MONTH','%SQL_DL_SQL92_INTERVAL_SECOND',
        -            '%SQL_DL_SQL92_INTERVAL_YEAR','%SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH','%SQL_DL_SQL92_TIME','%SQL_DL_SQL92_TIMESTAMP','%SQL_DM_VER','%SQL_DOUBLE','%SQL_DRIVER_COMPLETE','%SQL_DRIVER_COMPLETE_REQUIRED',
        -            '%SQL_DRIVER_HDBC','%SQL_DRIVER_HDESC','%SQL_DRIVER_HENV','%SQL_DRIVER_HLIB','%SQL_DRIVER_HSTMT','%SQL_DRIVER_NAME','%SQL_DRIVER_NOPROMPT','%SQL_DRIVER_ODBC_VER',
        -            '%SQL_DRIVER_PROMPT','%SQL_DRIVER_VER','%SQL_DROP','%SQL_DROP_ASSERTION','%SQL_DROP_CHARACTER_SET','%SQL_DROP_COLLATION','%SQL_DROP_DOMAIN','%SQL_DROP_SCHEMA',
        -            '%SQL_DROP_TABLE','%SQL_DROP_TRANSLATION','%SQL_DROP_VIEW','%SQL_DS_CASCADE','%SQL_DS_DROP_SCHEMA','%SQL_DS_RESTRICT','%SQL_DTC_DONE','%SQL_DTC_ENLIST_EXPENSIVE',
        -            '%SQL_DTC_TRANSITION_COST','%SQL_DTC_UNENLIST_EXPENSIVE','%SQL_DTR_DROP_TRANSLATION','%SQL_DT_CASCADE','%SQL_DT_DROP_TABLE','%SQL_DT_RESTRICT','%SQL_DV_CASCADE','%SQL_DV_DROP_VIEW',
        -            '%SQL_DV_RESTRICT','%SQL_DYNAMIC_CURSOR_ATTRIBUTES1','%SQL_DYNAMIC_CURSOR_ATTRIBUTES2','%SQL_ENSURE','%SQL_ENTIRE_ROWSET','%SQL_ERROR','%SQL_EXPRESSIONS_IN_ORDERBY','%SQL_FALSE',
        -            '%SQL_FD_FETCH_ABSOLUTE','%SQL_FD_FETCH_BOOKMARK','%SQL_FD_FETCH_FIRST','%SQL_FD_FETCH_LAST','%SQL_FD_FETCH_NEXT','%SQL_FD_FETCH_PREV','%SQL_FD_FETCH_PRIOR','%SQL_FD_FETCH_RELATIVE',
        -            '%SQL_FETCH_ABSOLUTE','%SQL_FETCH_BOOKMARK','%SQL_FETCH_BY_BOOKMARK','%SQL_FETCH_DIRECTION','%SQL_FETCH_FIRST','%SQL_FETCH_FIRST_SYSTEM','%SQL_FETCH_FIRST_USER','%SQL_FETCH_LAST',
        -            '%SQL_FETCH_NEXT','%SQL_FETCH_PREV','%SQL_FETCH_PRIOR','%SQL_FETCH_RELATIVE','%SQL_FILE_CATALOG','%SQL_FILE_NOT_SUPPORTED','%SQL_FILE_QUALIFIER','%SQL_FILE_TABLE',
        -            '%SQL_FILE_USAGE','%SQL_FLOAT','%SQL_FN_CVT_CAST','%SQL_FN_CVT_CONVERT','%SQL_FN_NUM_ABS','%SQL_FN_NUM_ACOS','%SQL_FN_NUM_ASIN','%SQL_FN_NUM_ATAN',
        -            '%SQL_FN_NUM_ATAN2','%SQL_FN_NUM_CEILING','%SQL_FN_NUM_COS','%SQL_FN_NUM_COT','%SQL_FN_NUM_DEGREES','%SQL_FN_NUM_EXP','%SQL_FN_NUM_FLOOR','%SQL_FN_NUM_LOG',
        -            '%SQL_FN_NUM_LOG10','%SQL_FN_NUM_MOD','%SQL_FN_NUM_PI','%SQL_FN_NUM_POWER','%SQL_FN_NUM_RADIANS','%SQL_FN_NUM_RAND','%SQL_FN_NUM_ROUND','%SQL_FN_NUM_SIGN',
        -            '%SQL_FN_NUM_SIN','%SQL_FN_NUM_SQRT','%SQL_FN_NUM_TAN','%SQL_FN_NUM_TRUNCATE','%SQL_FN_STR_ASCII','%SQL_FN_STR_BIT_LENGTH','%SQL_FN_STR_CHAR','%SQL_FN_STR_CHARACTER_LENGTH',
        -            '%SQL_FN_STR_CHAR_LENGTH','%SQL_FN_STR_CONCAT','%SQL_FN_STR_DIFFERENCE','%SQL_FN_STR_INSERT','%SQL_FN_STR_LCASE','%SQL_FN_STR_LEFT','%SQL_FN_STR_LENGTH','%SQL_FN_STR_LOCATE',
        -            '%SQL_FN_STR_LOCATE_2','%SQL_FN_STR_LTRIM','%SQL_FN_STR_OCTET_LENGTH','%SQL_FN_STR_POSITION','%SQL_FN_STR_REPEAT','%SQL_FN_STR_REPLACE','%SQL_FN_STR_RIGHT','%SQL_FN_STR_RTRIM',
        -            '%SQL_FN_STR_SOUNDEX','%SQL_FN_STR_SPACE','%SQL_FN_STR_SUBSTRING','%SQL_FN_STR_UCASE','%SQL_FN_SYS_DBNAME','%SQL_FN_SYS_IFNULL','%SQL_FN_SYS_USERNAME','%SQL_FN_TD_CURDATE',
        -            '%SQL_FN_TD_CURRENT_DATE','%SQL_FN_TD_CURRENT_TIME','%SQL_FN_TD_CURRENT_TIMESTAMP','%SQL_FN_TD_CURTIME','%SQL_FN_TD_DAYNAME','%SQL_FN_TD_DAYOFMONTH','%SQL_FN_TD_DAYOFWEEK','%SQL_FN_TD_DAYOFYEAR',
        -            '%SQL_FN_TD_EXTRACT','%SQL_FN_TD_HOUR','%SQL_FN_TD_MINUTE','%SQL_FN_TD_MONTH','%SQL_FN_TD_MONTHNAME','%SQL_FN_TD_NOW','%SQL_FN_TD_QUARTER','%SQL_FN_TD_SECOND',
        -            '%SQL_FN_TD_TIMESTAMPADD','%SQL_FN_TD_TIMESTAMPDIFF','%SQL_FN_TD_WEEK','%SQL_FN_TD_YEAR','%SQL_FN_TSI_DAY','%SQL_FN_TSI_FRAC_SECOND','%SQL_FN_TSI_HOUR','%SQL_FN_TSI_MINUTE',
        -            '%SQL_FN_TSI_MONTH','%SQL_FN_TSI_QUARTER','%SQL_FN_TSI_SECOND','%SQL_FN_TSI_WEEK','%SQL_FN_TSI_YEAR','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2','%SQL_GB_COLLATE',
        -            '%SQL_GB_GROUP_BY_CONTAINS_SELECT','%SQL_GB_GROUP_BY_EQUALS_SELECT','%SQL_GB_NOT_SUPPORTED','%SQL_GB_NO_RELATION','%SQL_GD_ANY_COLUMN','%SQL_GD_ANY_ORDER','%SQL_GD_BLOCK','%SQL_GD_BOUND',
        -            '%SQL_GETDATA_EXTENSIONS','%SQL_GET_BOOKMARK','%SQL_GROUP_BY','%SQL_GUID','%SQL_HANDLE_DBC','%SQL_HANDLE_DESC','%SQL_HANDLE_ENV','%SQL_HANDLE_SENV',
        -            '%SQL_HANDLE_STMT','%SQL_HOUR','%SQL_HOUR_TO_MINUTE','%SQL_HOUR_TO_SECOND','%SQL_IC_LOWER','%SQL_IC_MIXED','%SQL_IC_SENSITIVE','%SQL_IC_UPPER',
        -            '%SQL_IDENTIFIER_CASE','%SQL_IDENTIFIER_QUOTE_CHAR','%SQL_IGNORE','%SQL_IK_ALL','%SQL_IK_ASC','%SQL_IK_DESC','%SQL_IK_NONE','%SQL_INDEX_ALL',
        -            '%SQL_INDEX_CLUSTERED','%SQL_INDEX_HASHED','%SQL_INDEX_KEYWORDS','%SQL_INDEX_OTHER','%SQL_INDEX_UNIQUE','%SQL_INFO_FIRST','%SQL_INFO_SCHEMA_VIEWS','%SQL_INITIALLY_DEFERRED',
        -            '%SQL_INITIALLY_IMMEDIATE','%SQL_INSENSITIVE','%SQL_INSERT_STATEMENT','%SQL_INTEGER','%SQL_INTEGRITY','%SQL_INTERVAL','%SQL_INTERVAL_DAY','%SQL_INTERVAL_DAY_TO_HOUR',
        -            '%SQL_INTERVAL_DAY_TO_MINUTE','%SQL_INTERVAL_DAY_TO_SECOND','%SQL_INTERVAL_HOUR','%SQL_INTERVAL_HOUR_TO_MINUTE','%SQL_INTERVAL_HOUR_TO_SECOND','%SQL_INTERVAL_MINUTE','%SQL_INTERVAL_MINUTE_TO_SECOND','%SQL_INTERVAL_MONTH',
        -            '%SQL_INTERVAL_SECOND','%SQL_INTERVAL_YEAR','%SQL_INTERVAL_YEAR_TO_MONTH','%SQL_INVALID_HANDLE','%SQL_ISV_ASSERTIONS','%SQL_ISV_CHARACTER_SETS','%SQL_ISV_CHECK_CONSTRAINTS','%SQL_ISV_COLLATIONS',
        -            '%SQL_ISV_COLUMNS','%SQL_ISV_COLUMN_DOMAIN_USAGE','%SQL_ISV_COLUMN_PRIVILEGES','%SQL_ISV_CONSTRAINT_COLUMN_USAGE','%SQL_ISV_CONSTRAINT_TABLE_USAGE','%SQL_ISV_DOMAINS','%SQL_ISV_DOMAIN_CONSTRAINTS','%SQL_ISV_KEY_COLUMN_USAGE',
        -            '%SQL_ISV_REFERENTIAL_CONSTRAINTS','%SQL_ISV_SCHEMATA','%SQL_ISV_SQL_LANGUAGES','%SQL_ISV_TABLES','%SQL_ISV_TABLE_CONSTRAINTS','%SQL_ISV_TABLE_PRIVILEGES','%SQL_ISV_TRANSLATIONS','%SQL_ISV_USAGE_PRIVILEGES',
        -            '%SQL_ISV_VIEWS','%SQL_ISV_VIEW_COLUMN_USAGE','%SQL_ISV_VIEW_TABLE_USAGE','%SQL_IS_DAY','%SQL_IS_DAY_TO_HOUR','%SQL_IS_DAY_TO_MINUTE','%SQL_IS_DAY_TO_SECOND','%SQL_IS_HOUR',
        -            '%SQL_IS_HOUR_TO_MINUTE','%SQL_IS_HOUR_TO_SECOND','%SQL_IS_INSERT_LITERALS','%SQL_IS_INSERT_SEARCHED','%SQL_IS_INTEGER','%SQL_IS_MINUTE','%SQL_IS_MINUTE_TO_SECOND','%SQL_IS_MONTH',
        -            '%SQL_IS_POINTER','%SQL_IS_SECOND','%SQL_IS_SELECT_INTO','%SQL_IS_SMALLINT','%SQL_IS_UINTEGER','%SQL_IS_USMALLINT','%SQL_IS_YEAR','%SQL_IS_YEAR_TO_MONTH',
        -            '%SQL_KEYSET_CURSOR_ATTRIBUTES1','%SQL_KEYSET_CURSOR_ATTRIBUTES2','%SQL_KEYSET_SIZE','%SQL_KEYSET_SIZE_DEFAULT','%SQL_KEYWORDS','%SQL_LCK_EXCLUSIVE','%SQL_LCK_NO_CHANGE','%SQL_LCK_UNLOCK',
        -            '%SQL_LEN_BINARY_ATTR_OFFSET','%SQL_LEN_DATA_AT_EXEC_OFFSET','%SQL_LIKE_ESCAPE_CLAUSE','%SQL_LIKE_ONLY','%SQL_LOCK_EXCLUSIVE','%SQL_LOCK_NO_CHANGE','%SQL_LOCK_TYPES','%SQL_LOCK_UNLOCK',
        -            '%SQL_LOGIN_TIMEOUT','%SQL_LOGIN_TIMEOUT_DEFAULT','%SQL_LONGVARBINARY','%SQL_LONGVARCHAR','%SQL_MAXIMUM_CATALOG_NAME_LENGTH','%SQL_MAXIMUM_COLUMNS_IN_GROUP_BY','%SQL_MAXIMUM_COLUMNS_IN_INDEX','%SQL_MAXIMUM_COLUMNS_IN_ORDER_BY',
        -            '%SQL_MAXIMUM_COLUMNS_IN_SELECT','%SQL_MAXIMUM_COLUMN_NAME_LENGTH','%SQL_MAXIMUM_CONCURRENT_ACTIVITIES','%SQL_MAXIMUM_CURSOR_NAME_LENGTH','%SQL_MAXIMUM_DRIVER_CONNECTIONS','%SQL_MAXIMUM_IDENTIFIER_LENGTH','%SQL_MAXIMUM_INDEX_SIZE','%SQL_MAXIMUM_ROW_SIZE',
        -            '%SQL_MAXIMUM_SCHEMA_NAME_LENGTH','%SQL_MAXIMUM_STATEMENT_LENGTH','%SQL_MAXIMUM_TABLES_IN_SELECT','%SQL_MAXIMUM_USER_NAME_LENGTH','%SQL_MAX_ASYNC_CONCURRENT_STATEMENTS','%SQL_MAX_BINARY_LITERAL_LEN','%SQL_MAX_CATALOG_NAME_LEN','%SQL_MAX_CHAR_LITERAL_LEN',
        -            '%SQL_MAX_COLUMNS_IN_GROUP_BY','%SQL_MAX_COLUMNS_IN_INDEX','%SQL_MAX_COLUMNS_IN_ORDER_BY','%SQL_MAX_COLUMNS_IN_SELECT','%SQL_MAX_COLUMNS_IN_TABLE','%SQL_MAX_COLUMN_NAME_LEN','%SQL_MAX_CONCURRENT_ACTIVITIES','%SQL_MAX_CURSOR_NAME_LEN',
        -            '%SQL_MAX_DRIVER_CONNECTIONS','%SQL_MAX_DSN_LENGTH','%SQL_MAX_IDENTIFIER_LEN','%SQL_MAX_INDEX_SIZE','%SQL_MAX_LENGTH','%SQL_MAX_LENGTH_DEFAULT','%SQL_MAX_MESSAGE_LENGTH','%SQL_MAX_NUMERIC_LEN',
        -            '%SQL_MAX_OPTION_STRING_LENGTH','%SQL_MAX_OWNER_NAME_LEN','%SQL_MAX_PROCEDURE_NAME_LEN','%SQL_MAX_QUALIFIER_NAME_LEN','%SQL_MAX_ROWS','%SQL_MAX_ROWS_DEFAULT','%SQL_MAX_ROW_SIZE','%SQL_MAX_ROW_SIZE_INCLUDES_LONG',
        -            '%SQL_MAX_SCHEMA_NAME_LEN','%SQL_MAX_STATEMENT_LEN','%SQL_MAX_TABLES_IN_SELECT','%SQL_MAX_TABLE_NAME_LEN','%SQL_MAX_USER_NAME_LEN','%SQL_MINUTE','%SQL_MINUTE_TO_SECOND','%SQL_MODE_DEFAULT',
        -            '%SQL_MODE_READ_ONLY','%SQL_MODE_READ_WRITE','%SQL_MONTH','%SQL_MULTIPLE_ACTIVE_TXN','%SQL_MULT_RESULT_SETS','%SQL_NAMED','%SQL_NC_END','%SQL_NC_HIGH',
        -            '%SQL_NC_LOW','%SQL_NC_START','%SQL_NEED_DATA','%SQL_NEED_LONG_DATA_LEN','%SQL_NNC_NON_NULL','%SQL_NNC_NULL','%SQL_NONSCROLLABLE','%SQL_NON_NULLABLE_COLUMNS',
        -            '%SQL_NOSCAN','%SQL_NOSCAN_DEFAULT','%SQL_NOSCAN_OFF','%SQL_NOSCAN_ON','%SQL_NOT_DEFERRABLE','%SQL_NO_ACTION','%SQL_NO_COLUMN_NUMBER','%SQL_NO_DATA',
        -            '%SQL_NO_DATA_FOUND','%SQL_NO_NULLS','%SQL_NO_ROW_NUMBER','%SQL_NO_TOTAL','%SQL_NTS','%SQL_NTSL','%SQL_NULLABLE','%SQL_NULLABLE_UNKNOWN',
        -            '%SQL_NULL_COLLATION','%SQL_NULL_DATA','%SQL_NULL_HANDLE','%SQL_NULL_HDBC','%SQL_NULL_HDESC','%SQL_NULL_HENV','%SQL_NULL_HSTMT','%SQL_NUMERIC',
        -            '%SQL_NUMERIC_FUNCTIONS','%SQL_OAC_LEVEL1','%SQL_OAC_LEVEL2','%SQL_OAC_NONE','%SQL_ODBC_API_CONFORMANCE','%SQL_ODBC_CURSORS','%SQL_ODBC_INTERFACE_CONFORMANCE','%SQL_ODBC_SAG_CLI_CONFORMANCE',
        -            '%SQL_ODBC_SQL_CONFORMANCE','%SQL_ODBC_SQL_OPT_IEF','%SQL_ODBC_VER','%SQL_OIC_CORE','%SQL_OIC_LEVEL1','%SQL_OIC_LEVEL2','%SQL_OJ_ALL_COMPARISON_OPS','%SQL_OJ_CAPABILITIES',
        -            '%SQL_OJ_FULL','%SQL_OJ_INNER','%SQL_OJ_LEFT','%SQL_OJ_NESTED','%SQL_OJ_NOT_ORDERED','%SQL_OJ_RIGHT','%SQL_OPT_TRACE','%SQL_OPT_TRACEFILE',
        -            '%SQL_OPT_TRACE_DEFAULT','%SQL_OPT_TRACE_OFF','%SQL_OPT_TRACE_ON','%SQL_ORDER_BY_COLUMNS_IN_SELECT','%SQL_OSCC_COMPLIANT','%SQL_OSCC_NOT_COMPLIANT','%SQL_OSC_CORE','%SQL_OSC_EXTENDED',
        -            '%SQL_OSC_MINIMUM','%SQL_OUTER_JOINS','%SQL_OUTER_JOIN_CAPABILITIES','%SQL_OU_DML_STATEMENTS','%SQL_OU_INDEX_DEFINITION','%SQL_OU_PRIVILEGE_DEFINITION','%SQL_OU_PROCEDURE_INVOCATION','%SQL_OU_TABLE_DEFINITION',
        -            '%SQL_OV_ODBC2','%SQL_OV_ODBC3','%SQL_OWNER_TERM','%SQL_OWNER_USAGE','%SQL_PACKET_SIZE','%SQL_PARAM_ARRAY_ROW_COUNTS','%SQL_PARAM_ARRAY_SELECTS','%SQL_PARAM_BIND_BY_COLUMN',
        -            '%SQL_PARAM_BIND_TYPE_DEFAULT','%SQL_PARAM_DIAG_UNAVAILABLE','%SQL_PARAM_ERROR','%SQL_PARAM_IGNORE','%SQL_PARAM_INPUT','%SQL_PARAM_INPUT_OUTPUT','%SQL_PARAM_OUTPUT','%SQL_PARAM_PROCEED',
        -            '%SQL_PARAM_SUCCESS','%SQL_PARAM_SUCCESS_WITH_INFO','%SQL_PARAM_TYPE_DEFAULT','%SQL_PARAM_TYPE_UNKNOWN','%SQL_PARAM_UNUSED','%SQL_PARC_BATCH','%SQL_PARC_NO_BATCH','%SQL_PAS_BATCH',
        -            '%SQL_PAS_NO_BATCH','%SQL_PAS_NO_SELECT','%SQL_PC_NON_PSEUDO','%SQL_PC_NOT_PSEUDO','%SQL_PC_PSEUDO','%SQL_PC_UNKNOWN','%SQL_POSITION','%SQL_POSITIONED_STATEMENTS',
        -            '%SQL_POS_ADD','%SQL_POS_DELETE','%SQL_POS_OPERATIONS','%SQL_POS_POSITION','%SQL_POS_REFRESH','%SQL_POS_UPDATE','%SQL_PRED_BASIC','%SQL_PRED_CHAR',
        -            '%SQL_PRED_NONE','%SQL_PRED_SEARCHABLE','%SQL_PROCEDURES','%SQL_PROCEDURE_TERM','%SQL_PS_POSITIONED_DELETE','%SQL_PS_POSITIONED_UPDATE','%SQL_PS_SELECT_FOR_UPDATE','%SQL_PT_FUNCTION',
        -            '%SQL_PT_PROCEDURE','%SQL_PT_UNKNOWN','%SQL_QL_END','%SQL_QL_START','%SQL_QUALIFIER_LOCATION','%SQL_QUALIFIER_NAME_SEPARATOR','%SQL_QUALIFIER_TERM','%SQL_QUALIFIER_USAGE',
        -            '%SQL_QUERY_TIMEOUT','%SQL_QUERY_TIMEOUT_DEFAULT','%SQL_QUICK','%SQL_QUIET_MODE','%SQL_QUOTED_IDENTIFIER_CASE','%SQL_QU_DML_STATEMENTS','%SQL_QU_INDEX_DEFINITION','%SQL_QU_PRIVILEGE_DEFINITION',
        -            '%SQL_QU_PROCEDURE_INVOCATION','%SQL_QU_TABLE_DEFINITION','%SQL_RD_DEFAULT','%SQL_RD_OFF','%SQL_RD_ON','%SQL_REAL','%SQL_REFRESH','%SQL_RESET_PARAMS',
        -            '%SQL_RESTRICT','%SQL_RESULT_COL','%SQL_RETRIEVE_DATA','%SQL_RETURN_VALUE','%SQL_ROLLBACK','%SQL_ROWSET_SIZE','%SQL_ROWSET_SIZE_DEFAULT','%SQL_ROWVER',
        -            '%SQL_ROW_ADDED','%SQL_ROW_DELETED','%SQL_ROW_ERROR','%SQL_ROW_IDENTIFIER','%SQL_ROW_IGNORE','%SQL_ROW_NOROW','%SQL_ROW_NUMBER','%SQL_ROW_NUMBER_UNKNOWN',
        -            '%SQL_ROW_PROCEED','%SQL_ROW_SUCCESS','%SQL_ROW_SUCCESS_WITH_INFO','%SQL_ROW_UPDATED','%SQL_ROW_UPDATES','%SQL_SCCO_LOCK','%SQL_SCCO_OPT_ROWVER','%SQL_SCCO_OPT_TIMESTAMP',
        -            '%SQL_SCCO_OPT_VALUES','%SQL_SCCO_READ_ONLY','%SQL_SCC_ISO92_CLI','%SQL_SCC_XOPEN_CLI_VERSION1','%SQL_SCHEMA_TERM','%SQL_SCHEMA_USAGE','%SQL_SCOPE_CURROW','%SQL_SCOPE_SESSION',
        -            '%SQL_SCOPE_TRANSACTION','%SQL_SCROLLABLE','%SQL_SCROLL_CONCURRENCY','%SQL_SCROLL_DYNAMIC','%SQL_SCROLL_FORWARD_ONLY','%SQL_SCROLL_KEYSET_DRIVEN','%SQL_SCROLL_OPTIONS','%SQL_SCROLL_STATIC',
        -            '%SQL_SC_FIPS127_2_TRANSITIONAL','%SQL_SC_NON_UNIQUE','%SQL_SC_SQL92_ENTRY','%SQL_SC_SQL92_FULL','%SQL_SC_SQL92_INTERMEDIATE','%SQL_SC_TRY_UNIQUE','%SQL_SC_UNIQUE','%SQL_SDF_CURRENT_DATE',
        -            '%SQL_SDF_CURRENT_TIME','%SQL_SDF_CURRENT_TIMESTAMP','%SQL_SEARCHABLE','%SQL_SEARCH_PATTERN_ESCAPE','%SQL_SECOND','%SQL_SENSITIVE','%SQL_SERVER_NAME','%SQL_SETPARAM_VALUE_MAX',
        -            '%SQL_SETPOS_MAX_LOCK_VALUE','%SQL_SETPOS_MAX_OPTION_VALUE','%SQL_SET_DEFAULT','%SQL_SET_NULL','%SQL_SFKD_CASCADE','%SQL_SFKD_NO_ACTION','%SQL_SFKD_SET_DEFAULT','%SQL_SFKD_SET_NULL',
        -            '%SQL_SFKU_CASCADE','%SQL_SFKU_NO_ACTION','%SQL_SFKU_SET_DEFAULT','%SQL_SFKU_SET_NULL','%SQL_SG_DELETE_TABLE','%SQL_SG_INSERT_COLUMN','%SQL_SG_INSERT_TABLE','%SQL_SG_REFERENCES_COLUMN',
        -            '%SQL_SG_REFERENCES_TABLE','%SQL_SG_SELECT_TABLE','%SQL_SG_UPDATE_COLUMN','%SQL_SG_UPDATE_TABLE','%SQL_SG_USAGE_ON_CHARACTER_SET','%SQL_SG_USAGE_ON_COLLATION','%SQL_SG_USAGE_ON_DOMAIN','%SQL_SG_USAGE_ON_TRANSLATION',
        -            '%SQL_SG_WITH_GRANT_OPTION','%SQL_SIGNED_OFFSET','%SQL_SIMULATE_CURSOR','%SQL_SMALLINT','%SQL_SNVF_BIT_LENGTH','%SQL_SNVF_CHARACTER_LENGTH','%SQL_SNVF_CHAR_LENGTH','%SQL_SNVF_EXTRACT',
        -            '%SQL_SNVF_OCTET_LENGTH','%SQL_SNVF_POSITION','%SQL_SO_DYNAMIC','%SQL_SO_FORWARD_ONLY','%SQL_SO_KEYSET_DRIVEN','%SQL_SO_MIXED','%SQL_SO_STATIC','%SQL_SPECIAL_CHARACTERS',
        -            '%SQL_SPEC_MAJOR','%SQL_SPEC_MINOR','%SQL_SP_BETWEEN','%SQL_SP_COMPARISON','%SQL_SP_EXISTS','%SQL_SP_IN','%SQL_SP_ISNOTNULL','%SQL_SP_ISNULL',
        -            '%SQL_SP_LIKE','%SQL_SP_MATCH_FULL','%SQL_SP_MATCH_PARTIAL','%SQL_SP_MATCH_UNIQUE_FULL','%SQL_SP_MATCH_UNIQUE_PARTIAL','%SQL_SP_OVERLAPS','%SQL_SP_QUANTIFIED_COMPARISON','%SQL_SP_UNIQUE',
        -            '%SQL_SQL92_DATETIME_FUNCTIONS','%SQL_SQL92_FOREIGN_KEY_DELETE_RULE','%SQL_SQL92_FOREIGN_KEY_UPDATE_RULE','%SQL_SQL92_GRANT','%SQL_SQL92_NUMERIC_VALUE_FUNCTIONS','%SQL_SQL92_PREDICATES','%SQL_SQL92_RELATIONAL_JOIN_OPERATORS','%SQL_SQL92_REVOKE',
        -            '%SQL_SQL92_ROW_VALUE_CONSTRUCTOR','%SQL_SQL92_STRING_FUNCTIONS','%SQL_SQL92_VALUE_EXPRESSIONS','%SQL_SQLSTATE_SIZE','%SQL_SQL_CONFORMANCE','%SQL_SQ_COMPARISON','%SQL_SQ_CORRELATED_SUBQUERIES','%SQL_SQ_EXISTS',
        -            '%SQL_SQ_IN','%SQL_SQ_QUANTIFIED','%SQL_SRJO_CORRESPONDING_CLAUSE','%SQL_SRJO_CROSS_JOIN','%SQL_SRJO_EXCEPT_JOIN','%SQL_SRJO_FULL_OUTER_JOIN','%SQL_SRJO_INNER_JOIN','%SQL_SRJO_INTERSECT_JOIN',
        -            '%SQL_SRJO_LEFT_OUTER_JOIN','%SQL_SRJO_NATURAL_JOIN','%SQL_SRJO_RIGHT_OUTER_JOIN','%SQL_SRJO_UNION_JOIN','%SQL_SRVC_DEFAULT','%SQL_SRVC_NULL','%SQL_SRVC_ROW_SUBQUERY','%SQL_SRVC_VALUE_EXPRESSION',
        -            '%SQL_SR_CASCADE','%SQL_SR_DELETE_TABLE','%SQL_SR_GRANT_OPTION_FOR','%SQL_SR_INSERT_COLUMN','%SQL_SR_INSERT_TABLE','%SQL_SR_REFERENCES_COLUMN','%SQL_SR_REFERENCES_TABLE','%SQL_SR_RESTRICT',
        -            '%SQL_SR_SELECT_TABLE','%SQL_SR_UPDATE_COLUMN','%SQL_SR_UPDATE_TABLE','%SQL_SR_USAGE_ON_CHARACTER_SET','%SQL_SR_USAGE_ON_COLLATION','%SQL_SR_USAGE_ON_DOMAIN','%SQL_SR_USAGE_ON_TRANSLATION','%SQL_SSF_CONVERT',
        -            '%SQL_SSF_LOWER','%SQL_SSF_SUBSTRING','%SQL_SSF_TRANSLATE','%SQL_SSF_TRIM_BOTH','%SQL_SSF_TRIM_LEADING','%SQL_SSF_TRIM_TRAILING','%SQL_SSF_UPPER','%SQL_SS_ADDITIONS',
        -            '%SQL_SS_DELETIONS','%SQL_SS_UPDATES','%SQL_STANDARD_CLI_CONFORMANCE','%SQL_STATIC_CURSOR_ATTRIBUTES1','%SQL_STATIC_CURSOR_ATTRIBUTES2','%SQL_STATIC_SENSITIVITY','%SQL_STILL_EXECUTING','%SQL_STRING_FUNCTIONS',
        -            '%SQL_SUBQUERIES','%SQL_SUCCESS','%SQL_SUCCESS_WITH_INFO','%SQL_SU_DML_STATEMENTS','%SQL_SU_INDEX_DEFINITION','%SQL_SU_PRIVILEGE_DEFINITION','%SQL_SU_PROCEDURE_INVOCATION','%SQL_SU_TABLE_DEFINITION',
        -            '%SQL_SVE_CASE','%SQL_SVE_CAST','%SQL_SVE_COALESCE','%SQL_SVE_NULLIF','%SQL_SYSTEM_FUNCTIONS','%SQL_TABLE_STAT','%SQL_TABLE_TERM','%SQL_TC_ALL',
        -            '%SQL_TC_DDL_COMMIT','%SQL_TC_DDL_IGNORE','%SQL_TC_DML','%SQL_TC_NONE','%SQL_TIME','%SQL_TIMEDATE_ADD_INTERVALS','%SQL_TIMEDATE_DIFF_INTERVALS','%SQL_TIMEDATE_FUNCTIONS',
        -            '%SQL_TIMESTAMP','%SQL_TIMESTAMP_LEN','%SQL_TIME_LEN','%SQL_TINYINT','%SQL_TRANSACTION_CAPABLE','%SQL_TRANSACTION_ISOLATION_OPTION','%SQL_TRANSACTION_READ_COMMITTED','%SQL_TRANSACTION_READ_UNCOMMITTED',
        -            '%SQL_TRANSACTION_REPEATABLE_READ','%SQL_TRANSACTION_SERIALIZABLE','%SQL_TRANSLATE_DLL','%SQL_TRANSLATE_OPTION','%SQL_TRUE','%SQL_TXN_CAPABLE','%SQL_TXN_ISOLATION','%SQL_TXN_ISOLATION_OPTION',
        -            '%SQL_TXN_READ_COMMITTED','%SQL_TXN_READ_UNCOMMITTED','%SQL_TXN_REPEATABLE_READ','%SQL_TXN_SERIALIZABLE','%SQL_TYPE_DATE','%SQL_TYPE_NULL','%SQL_TYPE_TIME','%SQL_TYPE_TIMESTAMP',
        -            '%SQL_UB_DEFAULT','%SQL_UB_FIXED','%SQL_UB_OFF','%SQL_UB_ON','%SQL_UB_VARIABLE','%SQL_UNBIND','%SQL_UNICODE','%SQL_UNICODE_CHAR',
        -            '%SQL_UNICODE_LONGVARCHAR','%SQL_UNICODE_VARCHAR','%SQL_UNION','%SQL_UNION_STATEMENT','%SQL_UNKNOWN_TYPE','%SQL_UNNAMED','%SQL_UNSEARCHABLE','%SQL_UNSIGNED_OFFSET',
        -            '%SQL_UNSPECIFIED','%SQL_UPDATE','%SQL_UPDATE_BY_BOOKMARK','%SQL_USER_NAME','%SQL_USE_BOOKMARKS','%SQL_US_UNION','%SQL_US_UNION_ALL','%SQL_U_UNION',
        -            '%SQL_U_UNION_ALL','%SQL_VARBINARY','%SQL_VARCHAR','%SQL_XOPEN_CLI_YEAR','%SQL_YEAR','%SQL_YEAR_TO_MONTH','%SRCCOPY','%SS_BITMAP',
        -            '%SS_BLACKFRAME','%SS_BLACKRECT','%SS_CENTER','%SS_CENTERIMAGE','%SS_ENDELLIPSIS','%SS_ETCHEDFRAME','%SS_ETCHEDHORZ','%SS_ETCHEDVERT',
        -            '%SS_GRAYFRAME','%SS_GRAYRECT','%SS_LEFT','%SS_NOPREFIX','%SS_NOTIFY','%SS_NOWORDWRAP','%SS_PATHELLIPSIS','%SS_RIGHT',
        -            '%SS_RIGHTJUST','%SS_SIMPLE','%SS_SUNKEN','%SS_WHITEFRAME','%SS_WHITERECT','%SS_WORDELLIPSIS','%STAT_FILL_FROM_MEMORY','%STAT_FILL_NATURAL',
        -            '%STAT_FILL_NATURAL_ERASTONE','%STAT_FILL_NATURAL_EVEN','%STAT_FILL_NATURAL_FIBONACCI','%STAT_FILL_NATURAL_ODD','%STAT_FILL_WITH_NUMBER','%STAT_MINMAX_INDEX','%STAT_MINMAX_VALUE','%STAT_TYPE_BYTE',
        -            '%STAT_TYPE_CURRENCY','%STAT_TYPE_DOUBLE','%STAT_TYPE_DWORD','%STAT_TYPE_EXT','%STAT_TYPE_INTEGER','%STAT_TYPE_LONG','%STAT_TYPE_QUAD','%STAT_TYPE_SINGLE',
        -            '%STAT_TYPE_WORD','%SWP_ASYNCWINDOWPOS','%SWP_DEFERERASE','%SWP_DRAWFRAME','%SWP_FRAMECHANGED','%SWP_HIDEWINDOW','%SWP_NOACTIVATE','%SWP_NOCOPYBITS',
        -            '%SWP_NOMOVE','%SWP_NOOWNERZORDER','%SWP_NOREDRAW','%SWP_NOREPOSITION','%SWP_NOSENDCHANGING','%SWP_NOSIZE','%SWP_NOZORDER','%SWP_SHOWWINDOW',
        -            '%SW_FORCEMINIMIZE','%SW_HIDE','%SW_MAXIMIZE','%SW_MINIMIZE','%SW_NORMAL','%SW_RESTORE','%SW_SHOW','%SW_SHOWDEFAULT',
        -            '%SW_SHOWMAXIMIZED','%SW_SHOWMINIMIZED','%SW_SHOWMINNOACTIVE','%SW_SHOWNA','%SW_SHOWNOACTIVATE','%SW_SHOWNORMAL','%TBASS_3DALG_DEFAULT','%TBASS_3DALG_FULL',
        -            '%TBASS_3DALG_LIGHT','%TBASS_3DALG_OFF','%TBASS_3DMODE_NORMAL','%TBASS_3DMODE_OFF','%TBASS_3DMODE_RELATIVE','%TBASS_ACTIVE_PAUSED','%TBASS_ACTIVE_PLAYING','%TBASS_ACTIVE_STALLED',
        -            '%TBASS_ACTIVE_STOPPED','%TBASS_CONFIG_3DALGORITHM','%TBASS_CONFIG_BUFFER','%TBASS_CONFIG_CURVE_PAN','%TBASS_CONFIG_CURVE_VOL','%TBASS_CONFIG_FLOATDSP','%TBASS_CONFIG_GVOL_MUSIC','%TBASS_CONFIG_GVOL_SAMPLE',
        -            '%TBASS_CONFIG_GVOL_STREAM','%TBASS_CONFIG_MAXVOL','%TBASS_CONFIG_MP3_CODEC','%TBASS_CONFIG_NET_AGENT','%TBASS_CONFIG_NET_BUFFER','%TBASS_CONFIG_NET_PASSIVE','%TBASS_CONFIG_NET_PREBUF','%TBASS_CONFIG_NET_PROXY',
        -            '%TBASS_CONFIG_NET_TIMEOUT','%TBASS_CONFIG_PAUSE_NOPLAY','%TBASS_CONFIG_UPDATEPERIOD','%TBASS_CTYPE_MUSIC_IT','%TBASS_CTYPE_MUSIC_MO3','%TBASS_CTYPE_MUSIC_MOD','%TBASS_CTYPE_MUSIC_MTM','%TBASS_CTYPE_MUSIC_S3M',
        -            '%TBASS_CTYPE_MUSIC_XM','%TBASS_CTYPE_RECORD','%TBASS_CTYPE_SAMPLE','%TBASS_CTYPE_STREAM','%TBASS_CTYPE_STREAM_AIFF','%TBASS_CTYPE_STREAM_MP1','%TBASS_CTYPE_STREAM_MP2','%TBASS_CTYPE_STREAM_MP3',
        -            '%TBASS_CTYPE_STREAM_OGG','%TBASS_CTYPE_STREAM_WAV','%TBASS_CTYPE_STREAM_WAV_FLOAT','%TBASS_CTYPE_STREAM_WAV_PCM','%TBASS_DATA_AVAILABLE','%TBASS_DATA_FFT1024','%TBASS_DATA_FFT2048','%TBASS_DATA_FFT4096',
        -            '%TBASS_DATA_FFT512','%TBASS_DATA_FFT_INDIVIDUAL','%TBASS_DATA_FFT_NOWINDOW','%TBASS_DATA_FLOAT','%TBASS_DEVICE_3D','%TBASS_DEVICE_8BITS','%TBASS_DEVICE_LATENCY','%TBASS_DEVICE_MONO',
        -            '%TBASS_DEVICE_NOSPEAKER','%TBASS_DEVICE_SPEAKERS','%TBASS_EAX_ENVIRONMENT_ALLEY','%TBASS_EAX_ENVIRONMENT_ARENA','%TBASS_EAX_ENVIRONMENT_AUDITORIUM','%TBASS_EAX_ENVIRONMENT_BATHROOM','%TBASS_EAX_ENVIRONMENT_CARPETEDHALLWAY','%TBASS_EAX_ENVIRONMENT_CAVE',
        -            '%TBASS_EAX_ENVIRONMENT_CITY','%TBASS_EAX_ENVIRONMENT_CONCERTHALL','%TBASS_EAX_ENVIRONMENT_COUNT','%TBASS_EAX_ENVIRONMENT_DIZZY','%TBASS_EAX_ENVIRONMENT_DRUGGED','%TBASS_EAX_ENVIRONMENT_FOREST','%TBASS_EAX_ENVIRONMENT_GENERIC','%TBASS_EAX_ENVIRONMENT_HALLWAY',
        -            '%TBASS_EAX_ENVIRONMENT_HANGAR','%TBASS_EAX_ENVIRONMENT_LIVINGROOM','%TBASS_EAX_ENVIRONMENT_MOUNTAINS','%TBASS_EAX_ENVIRONMENT_PADDEDCELL','%TBASS_EAX_ENVIRONMENT_PARKINGLOT','%TBASS_EAX_ENVIRONMENT_PLAIN','%TBASS_EAX_ENVIRONMENT_PSYCHOTIC','%TBASS_EAX_ENVIRONMENT_QUARRY',
        -            '%TBASS_EAX_ENVIRONMENT_ROOM','%TBASS_EAX_ENVIRONMENT_SEWERPIPE','%TBASS_EAX_ENVIRONMENT_STONECORRIDOR','%TBASS_EAX_ENVIRONMENT_STONEROOM','%TBASS_EAX_ENVIRONMENT_UNDERWATER','%TBASS_ERROR_ALREADY','%TBASS_ERROR_BUFLOST','%TBASS_ERROR_CODEC',
        -            '%TBASS_ERROR_CREATE','%TBASS_ERROR_DECODE','%TBASS_ERROR_DEVICE','%TBASS_ERROR_DRIVER','%TBASS_ERROR_DX','%TBASS_ERROR_EMPTY','%TBASS_ERROR_FILEFORM','%TBASS_ERROR_FILEOPEN',
        -            '%TBASS_ERROR_FORMAT','%TBASS_ERROR_FREQ','%TBASS_ERROR_HANDLE','%TBASS_ERROR_ILLPARAM','%TBASS_ERROR_ILLTYPE','%TBASS_ERROR_INIT','%TBASS_ERROR_MEM','%TBASS_ERROR_NO3D',
        -            '%TBASS_ERROR_NOCHAN','%TBASS_ERROR_NOEAX','%TBASS_ERROR_NOFX','%TBASS_ERROR_NOHW','%TBASS_ERROR_NONET','%TBASS_ERROR_NOPAUSE','%TBASS_ERROR_NOPLAY','%TBASS_ERROR_NOTAVAIL',
        -            '%TBASS_ERROR_NOTFILE','%TBASS_ERROR_PLAYING','%TBASS_ERROR_POSITION','%TBASS_ERROR_SPEAKER','%TBASS_ERROR_START','%TBASS_ERROR_TIMEOUT','%TBASS_ERROR_UNKNOWN','%TBASS_ERROR_VERSION',
        -            '%TBASS_FALSE','%TBASS_FILEPOS_CURRENT','%TBASS_FILEPOS_DECODE','%TBASS_FILEPOS_DOWNLOAD','%TBASS_FILEPOS_END','%TBASS_FILEPOS_START','%TBASS_FILE_CLOSE','%TBASS_FILE_LEN',
        -            '%TBASS_FILE_READ','%TBASS_FILE_SEEK','%TBASS_FX_CHORUS','%TBASS_FX_COMPRESSOR','%TBASS_FX_DISTORTION','%TBASS_FX_ECHO','%TBASS_FX_FLANGER','%TBASS_FX_GARGLE',
        -            '%TBASS_FX_I3DL2REVERB','%TBASS_FX_PARAMEQ','%TBASS_FX_PHASE_180','%TBASS_FX_PHASE_90','%TBASS_FX_PHASE_NEG_180','%TBASS_FX_PHASE_NEG_90','%TBASS_FX_PHASE_ZERO','%TBASS_FX_REVERB',
        -            '%TBASS_INPUT_LEVEL','%TBASS_INPUT_OFF','%TBASS_INPUT_ON','%TBASS_INPUT_TYPE_ANALOG','%TBASS_INPUT_TYPE_AUX','%TBASS_INPUT_TYPE_CD','%TBASS_INPUT_TYPE_DIGITAL','%TBASS_INPUT_TYPE_LINE',
        -            '%TBASS_INPUT_TYPE_MASK','%TBASS_INPUT_TYPE_MIC','%TBASS_INPUT_TYPE_PHONE','%TBASS_INPUT_TYPE_SPEAKER','%TBASS_INPUT_TYPE_SYNTH','%TBASS_INPUT_TYPE_UNDEF','%TBASS_INPUT_TYPE_WAVE','%TBASS_MP3_SETPOS',
        -            '%TBASS_MUSIC_3D','%TBASS_MUSIC_ATTRIB_AMPLIFY','%TBASS_MUSIC_ATTRIB_BPM','%TBASS_MUSIC_ATTRIB_PANSEP','%TBASS_MUSIC_ATTRIB_PSCALER','%TBASS_MUSIC_ATTRIB_SPEED','%TBASS_MUSIC_ATTRIB_VOL_CHAN','%TBASS_MUSIC_ATTRIB_VOL_GLOBAL',
        -            '%TBASS_MUSIC_ATTRIB_VOL_INST','%TBASS_MUSIC_AUTOFREE','%TBASS_MUSIC_CALCLEN','%TBASS_MUSIC_DECODE','%TBASS_MUSIC_FLOAT','%TBASS_MUSIC_FT2MOD','%TBASS_MUSIC_FX','%TBASS_MUSIC_LOOP',
        -            '%TBASS_MUSIC_MONO','%TBASS_MUSIC_NONINTER','%TBASS_MUSIC_NOSAMPLE','%TBASS_MUSIC_POSRESET','%TBASS_MUSIC_POSRESETEX','%TBASS_MUSIC_PRESCAN','%TBASS_MUSIC_PT1MOD','%TBASS_MUSIC_RAMP',
        -            '%TBASS_MUSIC_RAMPS','%TBASS_MUSIC_STOPBACK','%TBASS_MUSIC_SURROUND','%TBASS_MUSIC_SURROUND2','%TBASS_OBJECT_DS','%TBASS_OBJECT_DS3DL','%TBASS_OK','%TBASS_RECORD_PAUSE',
        -            '%TBASS_SAMPLE_3D','%TBASS_SAMPLE_8BITS','%TBASS_SAMPLE_FLOAT','%TBASS_SAMPLE_FX','%TBASS_SAMPLE_LOOP','%TBASS_SAMPLE_MONO','%TBASS_SAMPLE_MUTEMAX','%TBASS_SAMPLE_OVER_DIST',
        -            '%TBASS_SAMPLE_OVER_POS','%TBASS_SAMPLE_OVER_VOL','%TBASS_SAMPLE_SOFTWARE','%TBASS_SAMPLE_VAM','%TBASS_SLIDE_FREQ','%TBASS_SLIDE_PAN','%TBASS_SLIDE_VOL','%TBASS_SPEAKER_CENLFE',
        -            '%TBASS_SPEAKER_CENTER','%TBASS_SPEAKER_FRONT','%TBASS_SPEAKER_FRONTLEFT','%TBASS_SPEAKER_FRONTRIGHT','%TBASS_SPEAKER_LEFT','%TBASS_SPEAKER_LFE','%TBASS_SPEAKER_REAR','%TBASS_SPEAKER_REAR2',
        -            '%TBASS_SPEAKER_REAR2LEFT','%TBASS_SPEAKER_REAR2RIGHT','%TBASS_SPEAKER_REARLEFT','%TBASS_SPEAKER_REARRIGHT','%TBASS_SPEAKER_RIGHT','%TBASS_STREAMPROC_END','%TBASS_STREAM_AUTOFREE','%TBASS_STREAM_BLOCK',
        -            '%TBASS_STREAM_DECODE','%TBASS_STREAM_PRESCAN','%TBASS_STREAM_RESTRATE','%TBASS_STREAM_STATUS','%TBASS_SYNC_DOWNLOAD','%TBASS_SYNC_END','%TBASS_SYNC_FREE','%TBASS_SYNC_MESSAGE',
        -            '%TBASS_SYNC_META','%TBASS_SYNC_MIXTIME','%TBASS_SYNC_MUSICFX','%TBASS_SYNC_MUSICINST','%TBASS_SYNC_MUSICPOS','%TBASS_SYNC_ONETIME','%TBASS_SYNC_POS','%TBASS_SYNC_SLIDE',
        -            '%TBASS_SYNC_STALL','%TBASS_TAG_HTTP','%TBASS_TAG_ICY','%TBASS_TAG_ID3','%TBASS_TAG_ID3V2','%TBASS_TAG_META','%TBASS_TAG_MUSIC_INST','%TBASS_TAG_MUSIC_MESSAGE',
        -            '%TBASS_TAG_MUSIC_NAME','%TBASS_TAG_MUSIC_SAMPLE','%TBASS_TAG_OGG','%TBASS_TAG_RIFF_INFO','%TBASS_TAG_VENDOR','%TBASS_TRUE','%TBASS_UNICODE','%TBASS_VAM_HARDWARE',
        -            '%TBASS_VAM_SOFTWARE','%TBASS_VAM_TERM_DIST','%TBASS_VAM_TERM_PRIO','%TBASS_VAM_TERM_TIME','%TBASS_VERSION','%TBCD_CHANNEL','%TBCD_THUMB','%TBCD_TICS',
        -            '%TBGL_ALIGN_CENTER','%TBGL_ALIGN_CENTER_CENTER','%TBGL_ALIGN_CENTER_DOWN','%TBGL_ALIGN_CENTER_UP','%TBGL_ALIGN_LEFT','%TBGL_ALIGN_LEFT_CENTER','%TBGL_ALIGN_LEFT_DOWN','%TBGL_ALIGN_LEFT_UP',
        -            '%TBGL_ALIGN_RIGHT','%TBGL_ALIGN_RIGHT_CENTER','%TBGL_ALIGN_RIGHT_DOWN','%TBGL_ALIGN_RIGHT_UP','%TBGL_ALWAYS','%TBGL_EQUAL','%TBGL_ERROR_FILE','%TBGL_ERROR_MSGBOX',
        -            '%TBGL_ERROR_NONE','%TBGL_GEQUAL','%TBGL_GREATER','%TBGL_LEQUAL','%TBGL_LESS','%TBGL_LIGHT_AMBIENT','%TBGL_LIGHT_CONSTANT_ATTENUATION','%TBGL_LIGHT_DIFFUSE',
        -            '%TBGL_LIGHT_LINEAR_ATTENUATION','%TBGL_LIGHT_POSITION','%TBGL_LIGHT_QUADRATIC_ATTENUATION','%TBGL_LIGHT_SPECULAR','%TBGL_LIGHT_SPOT_CUTOFF','%TBGL_LIGHT_SPOT_DIRECTION','%TBGL_LIGHT_SPOT_EXPONENT','%TBGL_M15B',
        -            '%TBGL_M15G','%TBGL_M15LAYER','%TBGL_M15PSTOP','%TBGL_M15R','%TBGL_M15TEXN','%TBGL_M15TEXX','%TBGL_M15TEXY','%TBGL_M15X',
        -            '%TBGL_M15Y','%TBGL_M15Z','%TBGL_NEVER','%TBGL_NORMAL_NONE','%TBGL_NORMAL_PRECISE','%TBGL_NORMAL_SMOOTH','%TBGL_NOTEQUAL','%TBGL_OBJ_CUBE',
        -            '%TBGL_OBJ_CUBE3','%TBGL_OBJ_CYLINDER','%TBGL_OBJ_SPHERE','%TBGL_PINFO_RGB','%TBGL_PINFO_XYZ','%TBGL_TEX_LINEAR','%TBGL_TEX_MIPMAP','%TBGL_TEX_NEAREST',
        -            '%TBM_CLEARSEL','%TBM_CLEARTICS','%TBM_GETBUDDY','%TBM_GETCHANNELRECT','%TBM_GETLINESIZE','%TBM_GETNUMTICS','%TBM_GETPAGESIZE','%TBM_GETPOS',
        -            '%TBM_GETPTICS','%TBM_GETRANGEMAX','%TBM_GETRANGEMIN','%TBM_GETSELEND','%TBM_GETSELSTART','%TBM_GETTHUMBLENGTH','%TBM_GETTHUMBRECT','%TBM_GETTIC',
        -            '%TBM_GETTICPOS','%TBM_GETTOOLTIPS','%TBM_GETUNICODEFORMAT','%TBM_SETBUDDY','%TBM_SETLINESIZE','%TBM_SETPAGESIZE','%TBM_SETPOS','%TBM_SETRANGE',
        -            '%TBM_SETRANGEMAX','%TBM_SETRANGEMIN','%TBM_SETSEL','%TBM_SETSELEND','%TBM_SETSELSTART','%TBM_SETTHUMBLENGTH','%TBM_SETTIC','%TBM_SETTICFREQ',
        -            '%TBM_SETTIPSIDE','%TBM_SETTOOLTIPS','%TBM_SETUNICODEFORMAT','%TBS_AUTOTICKS','%TBS_BOTH','%TBS_BOTTOM','%TBS_DOWNISLEFT','%TBS_ENABLESELRANGE',
        -            '%TBS_FIXEDLENGTH','%TBS_HORZ','%TBS_LEFT','%TBS_NOTHUMB','%TBS_NOTICKS','%TBS_REVERSED','%TBS_RIGHT','%TBS_TOOLTIPS',
        -            '%TBS_TOP','%TBS_VERT','%TBTS_BOTTOM','%TBTS_LEFT','%TBTS_RIGHT','%TBTS_TOP','%TB_%VT_BSTR','%TB_%VT_CY',
        -            '%TB_%VT_DATE','%TB_%VT_EMPTY','%TB_%VT_I2','%TB_%VT_I4','%TB_%VT_NULL','%TB_%VT_R4','%TB_%VT_R8','%TB_BOTTOM',
        -            '%TB_CLASS_E_NOAGGREGATION','%TB_CO_E_CLASSSTRING','%TB_DISPATCH_METHOD','%TB_DISPATCH_PROPERTYGET','%TB_DISPATCH_PROPERTYPUT','%TB_DISPATCH_PROPERTYPUTREF','%TB_ENDTRACK','%TB_E_INVALIDARG',
        -            '%TB_E_NOINTERFACE','%TB_E_OUTOFMEMORY','%TB_IMGCTX_ACTUALSIZE','%TB_IMGCTX_AUTOSIZE','%TB_IMGCTX_FITTOHEIGHT','%TB_IMGCTX_FITTOWIDTH','%TB_IMGCTX_STRETCH','%TB_LINEDOWN',
        -            '%TB_LINEUP','%TB_MK_E_CONNECTMANUALLY','%TB_MK_E_EXCEEDEDDEADLINE','%TB_MK_E_INTERMEDIATEINTERFACENOTSUPPORTED','%TB_MK_E_NOOBJECT','%TB_MK_E_SYNTAX','%TB_PAGEDOWN','%TB_PAGEUP',
        -            '%TB_REGDB_E_CLASSNOTREG','%TB_REGDB_E_WRITEREGDB','%TB_SIZEOF_TBVARIANT','%TB_S_FALSE','%TB_S_OK','%TB_THUMBPOSITION','%TB_THUMBTRACK','%TB_TOP',
        -            '%TCM_FIRST','%TCM_GETCURSEL','%TCN_FOCUSCHANGE','%TCN_GETOBJECT','%TCN_SELCHANGE','%TCN_SELCHANGING','%TCS_BOTTOM','%TCS_BUTTONS',
        -            '%TCS_EX_FLATSEPARATORS','%TCS_EX_REGISTERDROP','%TCS_FIXEDWIDTH','%TCS_FLATBUTTONS','%TCS_FOCUSNEVER','%TCS_FOCUSONBUTTONDOWN','%TCS_FORCEICONLEFT','%TCS_FORCELABELLEFT',
        -            '%TCS_HOTTRACK','%TCS_MULTILINE','%TCS_MULTISELECT','%TCS_OWNERDRAWFIXED','%TCS_RAGGEDRIGHT','%TCS_RIGHT','%TCS_RIGHTJUSTIFY','%TCS_SCROLLOPPOSITE',
        -            '%TCS_SINGLELINE','%TCS_TABS','%TCS_TOOLTIPS','%TCS_VERTICAL','%TM_PLAINTEXT','%TM_RICHTEXT','%TOKENIZER_DEFAULT_ALPHA','%TOKENIZER_DEFAULT_DELIM',
        -            '%TOKENIZER_DEFAULT_DQUOTE','%TOKENIZER_DEFAULT_NEWLINE','%TOKENIZER_DEFAULT_NUMERIC','%TOKENIZER_DEFAULT_SPACE','%TOKENIZER_DELIMITER','%TOKENIZER_EOL','%TOKENIZER_ERROR','%TOKENIZER_FINISHED',
        -            '%TOKENIZER_NUMBER','%TOKENIZER_QUOTE','%TOKENIZER_STRING','%TOKENIZER_UNDEFTOK','%TRUE','%TV_FIRST','%UDM_GETACCEL','%UDM_GETBASE',
        -            '%UDM_GETBUDDY','%UDM_GETPOS','%UDM_GETPOS32','%UDM_GETRANGE','%UDM_GETRANGE32','%UDM_GETUNICODEFORMAT','%UDM_SETACCEL','%UDM_SETBASE',
        -            '%UDM_SETBUDDY','%UDM_SETPOS','%UDM_SETPOS32','%UDM_SETRANGE','%UDM_SETRANGE32','%UDM_SETUNICODEFORMAT','%UDS_ALIGNLEFT','%UDS_ALIGNRIGHT',
        -            '%UDS_ARROWKEYS','%UDS_AUTOBUDDY','%UDS_HORZ','%UDS_HOTTRACK','%UDS_NOTHOUSANDS','%UDS_SETBUDDYINT','%UDS_WRAP','%UD_MAXVAL',
        -            '%UD_MINVAL','%VK_0','%VK_1','%VK_2','%VK_3','%VK_4','%VK_5','%VK_6',
        -            '%VK_7','%VK_8','%VK_9','%VK_A','%VK_ACCEPT','%VK_ADD','%VK_APPS','%VK_B',
        -            '%VK_BACK','%VK_C','%VK_CANCEL','%VK_CAPITAL','%VK_CLEAR','%VK_CONTROL','%VK_CONVERT','%VK_D',
        -            '%VK_DECIMAL','%VK_DELETE','%VK_DIVIDE','%VK_DOWN','%VK_E','%VK_END','%VK_ESCAPE','%VK_EXECUTE',
        -            '%VK_F','%VK_F1','%VK_F10','%VK_F11','%VK_F12','%VK_F13','%VK_F14','%VK_F15',
        -            '%VK_F16','%VK_F17','%VK_F18','%VK_F19','%VK_F2','%VK_F20','%VK_F21','%VK_F22',
        -            '%VK_F23','%VK_F24','%VK_F3','%VK_F4','%VK_F5','%VK_F6','%VK_F7','%VK_F8',
        -            '%VK_F9','%VK_FINAL','%VK_G','%VK_H','%VK_HANGEUL','%VK_HANGUL','%VK_HANJA','%VK_HELP',
        -            '%VK_HOME','%VK_I','%VK_INSERT','%VK_J','%VK_JUNJA','%VK_K','%VK_KANA','%VK_KANJI',
        -            '%VK_L','%VK_LBUTTON','%VK_LEFT','%VK_LINEFEED','%VK_LWIN','%VK_M','%VK_MBUTTON','%VK_MENU',
        -            '%VK_MODECHANGE','%VK_MULTIPLY','%VK_N','%VK_NEXT','%VK_NONCONVERT','%VK_NUMLOCK','%VK_NUMPAD0','%VK_NUMPAD1',
        -            '%VK_NUMPAD2','%VK_NUMPAD3','%VK_NUMPAD4','%VK_NUMPAD5','%VK_NUMPAD6','%VK_NUMPAD7','%VK_NUMPAD8','%VK_NUMPAD9',
        -            '%VK_O','%VK_P','%VK_PAUSE','%VK_PGDN','%VK_PGUP','%VK_PRINT','%VK_PRIOR','%VK_Q',
        -            '%VK_R','%VK_RBUTTON','%VK_RETURN','%VK_RIGHT','%VK_RWIN','%VK_S','%VK_SCROLL','%VK_SELECT',
        -            '%VK_SEPARATOR','%VK_SHIFT','%VK_SLEEP','%VK_SNAPSHOT','%VK_SPACE','%VK_SUBTRACT','%VK_T','%VK_TAB',
        -            '%VK_U','%VK_UP','%VK_V','%VK_W','%VK_X','%VK_XBUTTON1','%VK_XBUTTON2','%VK_Y',
        -            '%VK_Z','%VT_ARRAY','%VT_BLOB','%VT_BLOB_OBJECT','%VT_BOOL','%VT_BSTR','%VT_BYREF','%VT_CARRAY',
        -            '%VT_CF','%VT_CLSID','%VT_CY','%VT_DATE','%VT_DISPATCH','%VT_EMPTY','%VT_ERROR','%VT_FILETIME',
        -            '%VT_HRESULT','%VT_I1','%VT_I2','%VT_I4','%VT_I8','%VT_INT','%VT_LPSTR','%VT_LPWSTR',
        -            '%VT_NULL','%VT_PTR','%VT_R4','%VT_R8','%VT_RECORD','%VT_RESERVED','%VT_SAFEARRAY','%VT_STORAGE',
        -            '%VT_STORED_OBJECT','%VT_STREAM','%VT_STREAMED_OBJECT','%VT_UI1','%VT_UI2','%VT_UI4','%VT_UI8','%VT_UINT',
        -            '%VT_UNKNOWN','%VT_USERDEFINED','%VT_VARIANT','%VT_VECTOR','%VT_VOID','%WAVE_FORMAT_1M08','%WAVE_FORMAT_1M16','%WAVE_FORMAT_1S08',
        -            '%WAVE_FORMAT_1S16','%WAVE_FORMAT_2M08','%WAVE_FORMAT_2M16','%WAVE_FORMAT_2S08','%WAVE_FORMAT_2S16','%WAVE_FORMAT_4M08','%WAVE_FORMAT_4M16','%WAVE_FORMAT_4S08',
        -            '%WAVE_FORMAT_4S16','%WBF_CUSTOM','%WBF_LEVEL1','%WBF_LEVEL2','%WBF_OVERFLOW','%WBF_WORDBREAK','%WBF_WORDWRAP','%WHITE',
        -            '%WIN_FINDTITLECONTAIN','%WIN_FINDTITLEEND','%WIN_FINDTITLEEQUAL','%WIN_FINDTITLESTART','%WM_ACTIVATE','%WM_ACTIVATEAPP','%WM_CAPTURECHANGED','%WM_CHAR',
        -            '%WM_CLOSE','%WM_COMMAND','%WM_DESTROY','%WM_DROPFILES','%WM_ERASEBKGND','%WM_GETTEXTLENGTH','%WM_HOTKEY','%WM_HSCROLL',
        -            '%WM_IDLE','%WM_INITDIALOG','%WM_KEYDOWN','%WM_KEYUP','%WM_KILLFOCUS','%WM_LBUTTONDBLCLK','%WM_LBUTTONDOWN','%WM_LBUTTONUP',
        -            '%WM_MBUTTONDBLCLK','%WM_MBUTTONDOWN','%WM_MBUTTONUP','%WM_MOUSEFIRST','%WM_MOUSEMOVE','%WM_MOUSEWHEEL','%WM_MOVE','%WM_MOVING',
        -            '%WM_NCLBUTTONDOWN','%WM_NCRBUTTONDOWN','%WM_NEXTDLGCTL','%WM_NOTIFY','%WM_PAINT','%WM_QUIT','%WM_RBUTTONDBLCLK','%WM_RBUTTONDOWN',
        -            '%WM_RBUTTONUP','%WM_SETFOCUS','%WM_SETFONT','%WM_SETTEXT','%WM_SIZE','%WM_SIZING','%WM_SYSCOMMAND','%WM_TIMER',
        -            '%WM_USER','%WM_VSCROLL','%WS_BORDER','%WS_CAPTION','%WS_CHILD','%WS_CLIPCHILDREN','%WS_CLIPSIBLINGS','%WS_DISABLED',
        -            '%WS_DLGFRAME','%WS_EX_ACCEPTFILES','%WS_EX_APPWINDOW','%WS_EX_CLIENTEDGE','%WS_EX_CONTEXTHELP','%WS_EX_CONTROLPARENT','%WS_EX_LAYERED','%WS_EX_LEFT',
        -            '%WS_EX_LEFTSCROLLBAR','%WS_EX_LTRREADING','%WS_EX_MDICHILD','%WS_EX_NOPARENTNOTIFY','%WS_EX_OVERLAPPEDWINDOW','%WS_EX_PALETTEWINDOW','%WS_EX_RIGHT','%WS_EX_RIGHTSCROLLBAR',
        -            '%WS_EX_RTLREADING','%WS_EX_STATICEDGE','%WS_EX_TOOLWINDOW','%WS_EX_TOPMOST','%WS_EX_TRANSPARENT','%WS_EX_WINDOWEDGE','%WS_GROUP','%WS_HSCROLL',
        -            '%WS_ICONIC','%WS_MAXIMIZE','%WS_MAXIMIZEBOX','%WS_MINIMIZE','%WS_MINIMIZEBOX','%WS_OVERLAPPEDWINDOW','%WS_POPUP','%WS_POPUPWINDOW',
        -            '%WS_SYSMENU','%WS_TABSTOP','%WS_THICKFRAME','%WS_VISIBLE','%WS_VSCROLL','%YELLOW','%ZERO','CRLF',
        -            'FALSE','M_E','M_PI','NULL','TAB','TRUE'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF; font-weight: bold;',
        -            2 => 'color: #993333; font-style: italic; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #333333;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #800080;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #CC0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #66cc66;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #333333;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '_'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php
        deleted file mode 100644
        index a990018f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php
        +++ /dev/null
        @@ -1,379 +0,0 @@
        - 'T-SQL',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            // Datatypes
        -            'bigint', 'tinyint', 'money',
        -            'smallmoney', 'datetime', 'smalldatetime',
        -            'text', 'nvarchar', 'ntext', 'varbinary', 'image',
        -            'sql_variant', 'uniqueidentifier',
        -
        -            // Keywords
        -            'ABSOLUTE', 'ACTION', 'ADD', 'ADMIN', 'AFTER', 'AGGREGATE', 'ALIAS', 'ALLOCATE', 'ALTER', 'ARE', 'ARRAY', 'AS',
        -            'ASC', 'ASSERTION', 'AT', 'AUTHORIZATION', 'BACKUP', 'BEFORE', 'BEGIN', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'BOTH', 'BREADTH',
        -            'BREAK', 'BROWSE', 'BULK', 'BY', 'CALL', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CATCH', 'CHAR', 'CHARACTER', 'CHECK', 'CHECKPOINT',
        -            'CLASS', 'CLOB', 'CLOSE', 'CLUSTERED', 'COALESCE', 'COLLATE', 'COLLATION', 'COLUMN', 'COMMIT', 'COMPLETION', 'COMPUTE', 'CONNECT',
        -            'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRUCTOR', 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CORRESPONDING', 'CREATE',
        -            'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
        -            'CURSOR', 'CYCLE', 'DATA', 'DATABASE', 'DATE', 'DAY', 'DBCC', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFERRABLE',
        -            'DEFERRED', 'DELETE', 'DENY', 'DEPTH', 'DEREF', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC',
        -            'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOMAIN', 'DOUBLE', 'DROP', 'DUMMY', 'DUMP', 'DYNAMIC',
        -            'EACH', 'ELSE', 'END', 'END-EXEC', 'EQUALS', 'ERRLVL', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXCEPTION', 'EXEC', 'EXECUTE', 'EXIT',
        -            'EXTERNAL', 'FALSE', 'FETCH', 'FILE', 'FILLFACTOR', 'FIRST', 'FLOAT', 'FOR', 'FOREIGN', 'FOUND', 'FREE', 'FREETEXT', 'FREETEXTTABLE',
        -            'FROM', 'FULL', 'FUNCTION', 'GENERAL', 'GET', 'GLOBAL', 'GOTO', 'GRANT', 'GROUP', 'GROUPING', 'HAVING', 'HOLDLOCK', 'HOST', 'HOUR',
        -            'IDENTITY', 'IDENTITY_INSERT', 'IDENTITYCOL', 'IF', 'IGNORE', 'IMMEDIATE', 'INDEX', 'INDICATOR', 'INITIALIZE', 'INITIALLY',
        -            'INNER', 'INOUT', 'INPUT', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISOLATION', 'ITERATE', 'KEY',
        -            'KILL', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LEFT', 'LESS', 'LEVEL', 'LIMIT', 'LINENO', 'LOAD', 'LOCAL',
        -            'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'MAP', 'MATCH', 'MINUTE', 'MODIFIES', 'MODIFY', 'MODULE', 'MONTH', 'NAMES', 'NATIONAL',
        -            'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEXT', 'NO', 'NOCHECK', 'NONCLUSTERED', 'NONE', 'NULLIF', 'NUMERIC', 'OBJECT', 'OF',
        -            'OFF', 'OFFSETS', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPERATION', 'OPTION',
        -            'ORDER', 'ORDINALITY', 'OUT', 'OUTPUT', 'OVER', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARTIAL', 'PATH', 'PERCENT', 'PLAN',
        -            'POSTFIX', 'PRECISION', 'PREFIX', 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRINT', 'PRIOR', 'PRIVILEGES', 'PROC', 'PROCEDURE',
        -            'PUBLIC', 'RAISERROR', 'READ', 'READS', 'READTEXT', 'REAL', 'RECONFIGURE', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'RELATIVE',
        -            'REPLICATION', 'RESTORE', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE', 'ROW',
        -            'ROWGUIDCOL', 'ROWS', 'RULE', 'SAVE', 'SAVEPOINT', 'SCHEMA', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SELECT',
        -            'SEQUENCE', 'SESSION', 'SESSION_USER', 'SET', 'SETS', 'SETUSER', 'SHUTDOWN', 'SIZE', 'SMALLINT', 'SPACE', 'SPECIFIC',
        -            'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STRUCTURE',
        -            'SYSTEM_USER', 'TABLE', 'TEMPORARY', 'TERMINATE', 'TEXTSIZE', 'THAN', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE',
        -            'TO', 'TOP', 'TRAILING', 'TRAN', 'TRANSACTION', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRUE', 'TRUNCATE', 'TRY', 'TSEQUAL', 'UNDER', 'UNION',
        -            'UNIQUE', 'UNKNOWN', 'UNNEST', 'UPDATE', 'UPDATETEXT', 'USAGE', 'USE', 'USER', 'USING', 'VALUE', 'VALUES', 'VARCHAR', 'VARIABLE',
        -            'VARYING', 'VIEW', 'WAITFOR', 'WHEN', 'WHENEVER', 'WHERE', 'WHILE', 'WITH', 'WITHOUT', 'WORK', 'WRITE', 'WRITETEXT', 'YEAR', 'ZONE',
        -            'UNCOMMITTED', 'NOCOUNT',
        -            ),
        -        2 => array(
        -            /*
        -                Built-in functions
        -                Highlighted in pink.
        -            */
        -
        -            //Configuration Functions
        -            '@@DATEFIRST','@@OPTIONS','@@DBTS','@@REMSERVER','@@LANGID','@@SERVERNAME',
        -            '@@LANGUAGE','@@SERVICENAME','@@LOCK_TIMEOUT','@@SPID','@@MAX_CONNECTIONS',
        -            '@@TEXTSIZE','@@MAX_PRECISION','@@VERSION','@@NESTLEVEL',
        -
        -            //Cursor Functions
        -            '@@CURSOR_ROWS','@@FETCH_STATUS',
        -
        -            //Date and Time Functions
        -            'DATEADD','DATEDIFF','DATENAME','DATEPART','GETDATE','GETUTCDATE',
        -
        -            //Mathematical Functions
        -            'ABS','DEGREES','RAND','ACOS','EXP','ROUND','ASIN','FLOOR','SIGN',
        -            'ATAN','LOG','SIN','ATN2','LOG10','SQUARE','CEILING','PI','SQRT','COS',
        -            'POWER','TAN','COT','RADIANS',
        -
        -            //Meta Data Functions
        -            'COL_LENGTH','COL_NAME','FULLTEXTCATALOGPROPERTY',
        -            'COLUMNPROPERTY','FULLTEXTSERVICEPROPERTY','DATABASEPROPERTY','INDEX_COL',
        -            'DATABASEPROPERTYEX','INDEXKEY_PROPERTY','DB_ID','INDEXPROPERTY','DB_NAME',
        -            'OBJECT_ID','FILE_ID','OBJECT_NAME','FILE_NAME','OBJECTPROPERTY','FILEGROUP_ID',
        -            '@@PROCID','FILEGROUP_NAME','SQL_VARIANT_PROPERTY','FILEGROUPPROPERTY',
        -            'TYPEPROPERTY','FILEPROPERTY',
        -
        -            //Security Functions
        -            'IS_SRVROLEMEMBER','SUSER_SID','SUSER_SNAME','USER_ID',
        -            'HAS_DBACCESS','IS_MEMBER',
        -
        -            //String Functions
        -            'ASCII','SOUNDEX','PATINDEX','CHARINDEX','REPLACE','STR',
        -            'DIFFERENCE','QUOTENAME','STUFF','REPLICATE','SUBSTRING','LEN',
        -            'REVERSE','UNICODE','LOWER','UPPER','LTRIM','RTRIM',
        -
        -            //System Functions
        -            'APP_NAME','COLLATIONPROPERTY','@@ERROR','FORMATMESSAGE',
        -            'GETANSINULL','HOST_ID','HOST_NAME','IDENT_CURRENT','IDENT_INCR',
        -            'IDENT_SEED','@@IDENTITY','ISDATE','ISNUMERIC','PARSENAME','PERMISSIONS',
        -            '@@ROWCOUNT','ROWCOUNT_BIG','SCOPE_IDENTITY','SERVERPROPERTY','SESSIONPROPERTY',
        -            'STATS_DATE','@@TRANCOUNT','USER_NAME',
        -
        -            //System Statistical Functions
        -            '@@CONNECTIONS','@@PACK_RECEIVED','@@CPU_BUSY','@@PACK_SENT',
        -            '@@TIMETICKS','@@IDLE','@@TOTAL_ERRORS','@@IO_BUSY',
        -            '@@TOTAL_READ','@@PACKET_ERRORS','@@TOTAL_WRITE',
        -
        -            //Text and Image Functions
        -            'TEXTPTR','TEXTVALID',
        -
        -            //Aggregate functions
        -            'AVG', 'MAX', 'BINARY_CHECKSUM', 'MIN', 'CHECKSUM', 'SUM', 'CHECKSUM_AGG',
        -            'STDEV', 'COUNT', 'STDEVP', 'COUNT_BIG', 'VAR', 'VARP'
        -            ),
        -        3 => array(
        -            /*
        -                System stored procedures
        -                Higlighted dark brown
        -            */
        -
        -            //Active Directory Procedures
        -            'sp_ActiveDirectory_Obj', 'sp_ActiveDirectory_SCP',
        -
        -            //Catalog Procedures
        -            'sp_column_privileges', 'sp_special_columns', 'sp_columns', 'sp_sproc_columns',
        -            'sp_databases', 'sp_statistics', 'sp_fkeys', 'sp_stored_procedures', 'sp_pkeys',
        -            'sp_table_privileges', 'sp_server_info', 'sp_tables',
        -
        -            //Cursor Procedures
        -            'sp_cursor_list', 'sp_describe_cursor_columns', 'sp_describe_cursor', 'sp_describe_cursor_tables',
        -
        -            //Database Maintenance Plan Procedures
        -            'sp_add_maintenance_plan', 'sp_delete_maintenance_plan_db', 'sp_add_maintenance_plan_db',
        -            'sp_delete_maintenance_plan_job', 'sp_add_maintenance_plan_job', 'sp_help_maintenance_plan',
        -            'sp_delete_maintenance_plan',
        -
        -            //Distributed Queries Procedures
        -            'sp_addlinkedserver', 'sp_indexes', 'sp_addlinkedsrvlogin', 'sp_linkedservers', 'sp_catalogs',
        -            'sp_primarykeys', 'sp_column_privileges_ex', 'sp_columns_ex',
        -            'sp_table_privileges_ex', 'sp_tables_ex', 'sp_foreignkeys',
        -
        -            //Full-Text Search Procedures
        -            'sp_fulltext_catalog', 'sp_help_fulltext_catalogs_cursor', 'sp_fulltext_column',
        -            'sp_help_fulltext_columns', 'sp_fulltext_database', 'sp_help_fulltext_columns_cursor',
        -            'sp_fulltext_service', 'sp_help_fulltext_tables', 'sp_fulltext_table',
        -            'sp_help_fulltext_tables_cursor', 'sp_help_fulltext_catalogs',
        -
        -            //Log Shipping Procedures
        -            'sp_add_log_shipping_database', 'sp_delete_log_shipping_database', 'sp_add_log_shipping_plan',
        -            'sp_delete_log_shipping_plan', 'sp_add_log_shipping_plan_database',
        -            'sp_delete_log_shipping_plan_database', 'sp_add_log_shipping_primary',
        -            'sp_delete_log_shipping_primary', 'sp_add_log_shipping_secondary',
        -            'sp_delete_log_shipping_secondary', 'sp_can_tlog_be_applied', 'sp_get_log_shipping_monitor_info',
        -            'sp_change_monitor_role', 'sp_remove_log_shipping_monitor', 'sp_change_primary_role',
        -            'sp_resolve_logins', 'sp_change_secondary_role', 'sp_update_log_shipping_monitor_info',
        -            'sp_create_log_shipping_monitor_account', 'sp_update_log_shipping_plan',
        -            'sp_define_log_shipping_monitor', 'sp_update_log_shipping_plan_database',
        -
        -            //OLE Automation Extended Stored Procedures
        -            'sp_OACreate', 'sp_OAMethod', 'sp_OADestroy', 'sp_OASetProperty', 'sp_OAGetErrorInfo',
        -            'sp_OAStop', 'sp_OAGetProperty',
        -
        -            //Replication Procedures
        -            'sp_add_agent_parameter', 'sp_enableagentoffload', 'sp_add_agent_profile',
        -            'sp_enumcustomresolvers', 'sp_addarticle', 'sp_enumdsn', 'sp_adddistpublisher',
        -            'sp_enumfullsubscribers', 'sp_adddistributiondb', 'sp_expired_subscription_cleanup',
        -            'sp_adddistributor', 'sp_generatefilters', 'sp_addmergealternatepublisher',
        -            'sp_getagentoffloadinfo', 'sp_addmergearticle', 'sp_getmergedeletetype', 'sp_addmergefilter',
        -            'sp_get_distributor', 'sp_addmergepublication', 'sp_getqueuedrows', 'sp_addmergepullsubscription',
        -            'sp_getsubscriptiondtspackagename', 'sp_addmergepullsubscription_agent', 'sp_grant_publication_access',
        -            'sp_addmergesubscription', 'sp_help_agent_default', 'sp_addpublication', 'sp_help_agent_parameter',
        -            'sp_addpublication_snapshot', 'sp_help_agent_profile', 'sp_addpublisher70', 'sp_helparticle',
        -            'sp_addpullsubscription', 'sp_helparticlecolumns', 'sp_addpullsubscription_agent', 'sp_helparticledts',
        -            'sp_addscriptexec', 'sp_helpdistpublisher', 'sp_addsubscriber', 'sp_helpdistributiondb',
        -            'sp_addsubscriber_schedule', 'sp_helpdistributor', 'sp_addsubscription', 'sp_helpmergealternatepublisher',
        -            'sp_addsynctriggers', 'sp_helpmergearticle', 'sp_addtabletocontents', 'sp_helpmergearticlecolumn',
        -            'sp_adjustpublisheridentityrange', 'sp_helpmergearticleconflicts', 'sp_article_validation',
        -            'sp_helpmergeconflictrows', 'sp_articlecolumn', 'sp_helpmergedeleteconflictrows', 'sp_articlefilter',
        -            'sp_helpmergefilter', 'sp_articlesynctranprocs', 'sp_helpmergepublication', 'sp_articleview',
        -            'sp_helpmergepullsubscription', 'sp_attachsubscription', 'sp_helpmergesubscription', 'sp_browsesnapshotfolder',
        -            'sp_helppublication', 'sp_browsemergesnapshotfolder', 'sp_help_publication_access', 'sp_browsereplcmds',
        -            'sp_helppullsubscription', 'sp_change_agent_parameter', 'sp_helpreplfailovermode', 'sp_change_agent_profile',
        -            'sp_helpreplicationdboption', 'sp_changearticle', 'sp_helpreplicationoption', 'sp_changedistpublisher',
        -            'sp_helpsubscriberinfo', 'sp_changedistributiondb', 'sp_helpsubscription', 'sp_changedistributor_password',
        -            'sp_ivindexhasnullcols', 'sp_changedistributor_property', 'sp_helpsubscription_properties', 'sp_changemergearticle',
        -            'sp_link_publication', 'sp_changemergefilter', 'sp_marksubscriptionvalidation', 'sp_changemergepublication',
        -            'sp_mergearticlecolumn', 'sp_changemergepullsubscription', 'sp_mergecleanupmetadata', 'sp_changemergesubscription',
        -            'sp_mergedummyupdate', 'sp_changepublication', 'sp_mergesubscription_cleanup', 'sp_changesubscriber',
        -            'sp_publication_validation', 'sp_changesubscriber_schedule', 'sp_refreshsubscriptions', 'sp_changesubscriptiondtsinfo',
        -            'sp_reinitmergepullsubscription', 'sp_changesubstatus', 'sp_reinitmergesubscription', 'sp_change_subscription_properties',
        -            'sp_reinitpullsubscription', 'sp_check_for_sync_trigger', 'sp_reinitsubscription', 'sp_copymergesnapshot',
        -            'sp_removedbreplication', 'sp_copysnapshot', 'sp_repladdcolumn', 'sp_copysubscription', 'sp_replcmds',
        -            'sp_deletemergeconflictrow', 'sp_replcounters', 'sp_disableagentoffload', 'sp_repldone', 'sp_drop_agent_parameter',
        -            'sp_repldropcolumn', 'sp_drop_agent_profile', 'sp_replflush', 'sp_droparticle', 'sp_replicationdboption',
        -            'sp_dropanonymouseagent', 'sp_replication_agent_checkup', 'sp_dropdistpublisher', 'sp_replqueuemonitor',
        -            'sp_dropdistributiondb', 'sp_replsetoriginator', 'sp_dropmergealternatepublisher', 'sp_replshowcmds',
        -            'sp_dropdistributor', 'sp_repltrans', 'sp_dropmergearticle', 'sp_restoredbreplication', 'sp_dropmergefilter',
        -            'sp_revoke_publication_access', 'sp_scriptsubconflicttable', 'sp_dropmergepublication', 'sp_script_synctran_commands',
        -            'sp_dropmergepullsubscription', 'sp_setreplfailovermode', 'sp_showrowreplicainfo', 'sp_dropmergesubscription',
        -            'sp_subscription_cleanup', 'sp_droppublication', 'sp_table_validation', 'sp_droppullsubscription',
        -            'sp_update_agent_profile', 'sp_dropsubscriber', 'sp_validatemergepublication', 'sp_dropsubscription',
        -            'sp_validatemergesubscription', 'sp_dsninfo', 'sp_vupgrade_replication', 'sp_dumpparamcmd',
        -
        -            //Security Procedures
        -            'sp_addalias', 'sp_droprolemember', 'sp_addapprole', 'sp_dropserver', 'sp_addgroup', 'sp_dropsrvrolemember',
        -            'sp_dropuser', 'sp_addlogin', 'sp_grantdbaccess', 'sp_addremotelogin',
        -            'sp_grantlogin', 'sp_addrole', 'sp_helpdbfixedrole', 'sp_addrolemember', 'sp_helpgroup',
        -            'sp_addserver', 'sp_helplinkedsrvlogin', 'sp_addsrvrolemember', 'sp_helplogins', 'sp_adduser',
        -            'sp_helpntgroup', 'sp_approlepassword', 'sp_helpremotelogin', 'sp_changedbowner', 'sp_helprole',
        -            'sp_changegroup', 'sp_helprolemember', 'sp_changeobjectowner', 'sp_helprotect', 'sp_change_users_login',
        -            'sp_helpsrvrole', 'sp_dbfixedrolepermission', 'sp_helpsrvrolemember', 'sp_defaultdb', 'sp_helpuser',
        -            'sp_defaultlanguage', 'sp_MShasdbaccess', 'sp_denylogin', 'sp_password', 'sp_dropalias', 'sp_remoteoption',
        -            'sp_dropapprole', 'sp_revokedbaccess', 'sp_dropgroup', 'sp_revokelogin', 'sp_droplinkedsrvlogin',
        -            'sp_setapprole', 'sp_droplogin', 'sp_srvrolepermission', 'sp_dropremotelogin', 'sp_validatelogins', 'sp_droprole',
        -
        -            //SQL Mail Procedures
        -            'sp_processmail', 'xp_sendmail', 'xp_deletemail', 'xp_startmail', 'xp_findnextmsg', 'xp_stopmail', 'xp_readmail',
        -
        -            //SQL Profiler Procedures
        -            'sp_trace_create', 'sp_trace_setfilter', 'sp_trace_generateevent', 'sp_trace_setstatus', 'sp_trace_setevent',
        -
        -            //SQL Server Agent Procedures
        -            'sp_add_alert', 'sp_help_jobhistory', 'sp_add_category', 'sp_help_jobschedule', 'sp_add_job',
        -            'sp_help_jobserver', 'sp_add_jobschedule', 'sp_help_jobstep', 'sp_add_jobserver', 'sp_help_notification',
        -            'sp_add_jobstep', 'sp_help_operator', 'sp_add_notification', 'sp_help_targetserver',
        -            'sp_add_operator', 'sp_help_targetservergroup', 'sp_add_targetservergroup', 'sp_helptask',
        -            'sp_add_targetsvrgrp_member', 'sp_manage_jobs_by_login', 'sp_addtask', 'sp_msx_defect',
        -            'sp_apply_job_to_targets', 'sp_msx_enlist', 'sp_delete_alert', 'sp_post_msx_operation',
        -            'sp_delete_category', 'sp_purgehistory', 'sp_delete_job', 'sp_purge_jobhistory', 'sp_delete_jobschedule',
        -            'sp_reassigntask', 'sp_delete_jobserver', 'sp_remove_job_from_targets', 'sp_delete_jobstep',
        -            'sp_resync_targetserver', 'sp_delete_notification', 'sp_start_job', 'sp_delete_operator',
        -            'sp_stop_job', 'sp_delete_targetserver', 'sp_update_alert', 'sp_delete_targetservergroup',
        -            'sp_update_category', 'sp_delete_targetsvrgrp_member', 'sp_update_job', 'sp_droptask',
        -            'sp_update_jobschedule', 'sp_help_alert', 'sp_update_jobstep', 'sp_help_category',
        -            'sp_update_notification', 'sp_help_downloadlist', 'sp_update_operator', 'sp_helphistory',
        -            'sp_update_targetservergroup', 'sp_help_job', 'sp_updatetask', 'xp_sqlagent_proxy_account',
        -
        -            //System Procedures
        -            'sp_add_data_file_recover_suspect_db', 'sp_helpconstraint', 'sp_addextendedproc',
        -            'sp_helpdb', 'sp_addextendedproperty', 'sp_helpdevice', 'sp_add_log_file_recover_suspect_db',
        -            'sp_helpextendedproc', 'sp_addmessage', 'sp_helpfile', 'sp_addtype', 'sp_helpfilegroup',
        -            'sp_addumpdevice', 'sp_helpindex', 'sp_altermessage', 'sp_helplanguage', 'sp_autostats',
        -            'sp_helpserver', 'sp_attach_db', 'sp_helpsort', 'sp_attach_single_file_db', 'sp_helpstats',
        -            'sp_bindefault', 'sp_helptext', 'sp_bindrule', 'sp_helptrigger', 'sp_bindsession',
        -            'sp_indexoption', 'sp_certify_removable', 'sp_invalidate_textptr', 'sp_configure',
        -            'sp_lock', 'sp_create_removable', 'sp_monitor', 'sp_createstats', 'sp_procoption',
        -            'sp_cycle_errorlog', 'sp_recompile', 'sp_datatype_info', 'sp_refreshview', 'sp_dbcmptlevel',
        -            'sp_releaseapplock', 'sp_dboption', 'sp_rename', 'sp_dbremove', 'sp_renamedb',
        -            'sp_delete_backuphistory', 'sp_resetstatus', 'sp_depends', 'sp_serveroption', 'sp_detach_db',
        -            'sp_setnetname', 'sp_dropdevice', 'sp_settriggerorder', 'sp_dropextendedproc', 'sp_spaceused',
        -            'sp_dropextendedproperty', 'sp_tableoption', 'sp_dropmessage', 'sp_unbindefault', 'sp_droptype',
        -            'sp_unbindrule', 'sp_executesql', 'sp_updateextendedproperty', 'sp_getapplock', 'sp_updatestats',
        -            'sp_getbindtoken', 'sp_validname', 'sp_help', 'sp_who',
        -
        -            //Web Assistant Procedures
        -            'sp_dropwebtask', 'sp_makewebtask', 'sp_enumcodepages', 'sp_runwebtask',
        -
        -            //XML Procedures
        -            'sp_xml_preparedocument', 'sp_xml_removedocument',
        -
        -            //General Extended Procedures
        -            'xp_cmdshellxp_logininfo', 'xp_enumgroups', 'xp_msver', 'xp_findnextmsgxp_revokelogin',
        -            'xp_grantlogin', 'xp_sprintf', 'xp_logevent', 'xp_sqlmaint', 'xp_loginconfig', 'xp_sscanf',
        -
        -            //API System Stored Procedures
        -            'sp_cursor', 'sp_cursorclose', 'sp_cursorexecute', 'sp_cursorfetch', 'sp_cursoropen',
        -            'sp_cursoroption', 'sp_cursorprepare', 'sp_cursorunprepare', 'sp_execute', 'sp_prepare', 'sp_unprepare',
        -
        -            //Misc
        -            'sp_createorphan', 'sp_droporphans', 'sp_reset_connection', 'sp_sdidebug'
        -            ),
        -        4 => array(
        -            //Function/sp's higlighted brown.
        -            'fn_helpcollations', 'fn_listextendedproperty ', 'fn_servershareddrives',
        -            'fn_trace_geteventinfo', 'fn_trace_getfilterinfo', 'fn_trace_getinfo',
        -            'fn_trace_gettable', 'fn_virtualfilestats','fn_listextendedproperty',
        -            ),
        -        5 => array(
        -            'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS', 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL',
        -            'OR', 'OUTER', 'SOME',
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '!', '!=', '%', '&', '&&', '(', ')', '*', '+', '-', '/', '<', '<<', '<=',
        -        '<=>', '<>', '=', '>', '>=', '>>', '^', '|', '||', '~'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #FF00FF;',
        -            3 => 'color: #AF0000;',
        -            4 => 'color: #AF0000;',
        -            5 => 'color: #808080;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080;',
        -            'MULTI' => 'color: #008080;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #808080;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #808080;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php
        deleted file mode 100644
        index c5488661..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php
        +++ /dev/null
        @@ -1,298 +0,0 @@
        - Complete rewrite
        - * 2005/07/29 (1.0.0)
        - *  -  First Release
        - *
        - * TODO (updated 2004/07/14)
        - * -------------------------
        - * 
        - *
        - *************************************************************************************
        - *
        - *     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' => 'TypoScript',
        -    'COMMENT_SINGLE' => array(1  => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(2 => '/(? GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        // Conditions: http://documentation.typo3.org/documentation/tsref/conditions/
        -        1 => array(
        -            'browser', 'compatVersion', 'dayofmonth', 'dayofweek', 'device',
        -            'globalString', 'globalVars', 'hostname', 'hour',
        -            'ip', 'language', 'loginUser', 'loginuser', 'minute',
        -            'month', 'PIDinRootline', 'PIDupinRootline',
        -            'system', 'treelevel', 'useragent', 'userFunc',
        -            'usergroup', 'version'
        -            ),
        -
        -        // Functions: http://documentation.typo3.org/documentation/tsref/functions/
        -        2 => array(
        -            'addParams', 'encapsLines', 'filelink', 'HTMLparser',
        -            'HTMLparser_tags', 'if', 'imageLinkWrap',
        -            'imgResource', 'makelinks', 'numRows', 'parseFunc',
        -            'select', 'split', 'stdWrap', 'tableStyle', 'tags',
        -            'textStyle', 'typolink'
        -            ),
        -
        -        // Toplevel objects: http://documentation.typo3.org/documentation/tsref/tlo-objects/
        -        3 => array(
        -            'CARRAY', 'CONFIG', 'CONSTANTS', 'FE_DATA', 'FE_TABLE', 'FRAME',
        -            'FRAMESET', 'META', 'PAGE', 'plugin'
        -            ),
        -
        -        // Content Objects (cObject) : http://documentation.typo3.org/documentation/tsref/cobjects/
        -        4 => array(
        -            'CASE', 'CLEARGIF', 'COA', 'COA_INT', 'COBJ_ARRAY', 'COLUMNS',
        -            'CONTENT', 'CTABLE', 'EDITPANEL', 'FILE', 'FORM',
        -            'HMENU', 'HRULER', 'HTML', 'IMAGE', 'IMGTEXT',
        -            'IMG_RESOURCE', 'LOAD_REGISTER', 'MULTIMEDIA',
        -            'OTABLE', 'PHP_SCRIPT', 'PHP_SCRIPT_EXT',
        -            'PHP_SCRIPT_INT', 'RECORDS', 'RESTORE_REGISTER',
        -            'SEARCHRESULT', 'TEMPLATE', 'TEXT', 'USER',
        -            'USER_INT'
        -            ),
        -
        -        // GIFBUILDER toplevel link: http://documentation.typo3.org/documentation/tsref/gifbuilder/
        -        5 => array(
        -            'GIFBUILDER',
        -            ),
        -
        -        // GIFBUILDER: http://documentation.typo3.org/documentation/tsref/gifbuilder/
        -        // skipped fields: IMAGE, TEXT
        -        // NOTE! the IMAGE and TEXT field already are linked in group 4, they
        -        // cannot be linked twice . . . . unfortunately
        -        6 => array(
        -            'ADJUST', 'BOX', 'CROP', 'EFFECT', 'EMBOSS',
        -            'IMGMAP', 'OUTLINE', 'SCALE', 'SHADOW',
        -            'WORKAREA'
        -            ),
        -
        -        // MENU Objects: http://documentation.typo3.org/documentation/tsref/menu/
        -        7 => array(
        -            'GMENU', 'GMENU_FOLDOUT', 'GMENU_LAYERS', 'IMGMENU',
        -            'IMGMENUITEM', 'JSMENU', 'JSMENUITEM', 'TMENU',
        -            'TMENUITEM', 'TMENU_LAYERS'
        -            ),
        -
        -        // MENU common properties: http://documentation.typo3.org/documentation/tsref/menu/common-properties/
        -        8 => array(
        -            'alternativeSortingField', 'begin', 'debugItemConf',
        -            'imgNameNotRandom', 'imgNamePrefix',
        -            'itemArrayProcFunc', 'JSWindow', 'maxItems',
        -            'minItems', 'overrideId', 'sectionIndex',
        -            'showAccessRestrictedPages', 'submenuObjSuffixes'
        -            ),
        -
        -        // MENU item states: http://documentation.typo3.org/documentation/tsref/menu/item-states/
        -        9 => array(
        -            'ACT', 'ACTIFSUB', 'ACTIFSUBRO', 'ACTRO', 'CUR', 'CURIFSUB',
        -            'CURIFSUBRO', 'CURRO', 'IFSUB', 'IFSUBRO', 'NO',
        -            'SPC', 'USERDEF1', 'USERDEF1RO', 'USERDEF2',
        -            'USERDEF2RO', 'USR', 'USRRO'
        -            ),
        -        ),
        -
        -    // Does not include '-' because of stuff like htmlTag_langKey = en-GB and
        -    // lib.nav-sub
        -    'SYMBOLS' => array(
        -        0 => array(
        -            '|',
        -            '+', '*', '/', '%',
        -            '!', '&&', '^',
        -            '<', '>', '=',
        -            '?', ':',
        -            '.'
        -            ),
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true,
        -        9 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #ed7d14;',
        -            2 => 'font-weight: bold;',
        -            3 => 'color: #990000; font-weight: bold;',
        -            4 => 'color: #990000; font-weight: bold;',
        -            5 => 'color: #990000; font-weight: bold;',
        -            6 => 'color: #990000; font-weight: bold;',
        -            7 => 'color: #990000; font-weight: bold;',
        -            8 => 'font-weight: bold;',
        -            9 => 'color: #990000; font-weight: bold;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #aaa; font-style: italic;',
        -            2 => 'color: #aaa; font-style: italic;',
        -            'MULTI' => 'color: #aaa; font-style: italic;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ac14aa;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000e0; font-weight: bold;',
        -            2 => 'color: #0000e0; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933; font-weight: bold;',
        -                // Set this to the same value as brackets above
        -            1 => 'color: #009900; font-weight: bold;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #009900;',
        -            1 => 'color: #009900; font-weight: bold;',
        -            2 => 'color: #3366CC;',
        -            3 => 'color: #000066; font-weight: bold;',
        -            4 => 'color: #ed7d14;',
        -            5 => 'color: #000066; font-weight: bold;',
        -            6 => 'color: #009900;',
        -            7 => 'color: #3366CC;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => 'http://documentation.typo3.org/documentation/tsref/conditions/{FNAME}/',
        -        2 => 'http://documentation.typo3.org/documentation/tsref/functions/{FNAME}/',
        -        3 => 'http://documentation.typo3.org/documentation/tsref/tlo-objects/{FNAME}/',
        -        4 => 'http://documentation.typo3.org/documentation/tsref/cobjects/{FNAME}/',
        -        5 => 'http://documentation.typo3.org/documentation/tsref/gifbuilder/',
        -        6 => 'http://documentation.typo3.org/documentation/tsref/gifbuilder/{FNAME}/',
        -        7 => 'http://documentation.typo3.org/documentation/tsref/menu/{FNAME}/',
        -        8 => 'http://documentation.typo3.org/documentation/tsref/menu/common-properties/',
        -        9 => 'http://documentation.typo3.org/documentation/tsref/menu/item-states/'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -            // xhtml tag
        -        2 => array(
        -            GESHI_SEARCH => '(<)([a-zA-Z\\/][^\\/\\\x7C]*?)(>)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 's',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -
        -            // Constant
        -        0 => array(
        -            GESHI_SEARCH => '(\{)(\$[a-zA-Z_\.]+[a-zA-Z0-9_\.]*)(\})',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => '\\3'
        -            ),
        -
        -            // Constant dollar sign
        -        1 => array(
        -            GESHI_SEARCH => '(\$)([a-zA-Z_\.]+[a-zA-Z0-9_\.]*)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '\\2'
        -            ),
        -
        -            // extension keys / tables: (static|user|ttx|tx|tt|fe)_something[_something]
        -        3 => array(
        -            GESHI_SEARCH => '(plugin\.|[^\.]\b)((?:static|user|ttx|tx|tt|fe)(?:_[0-9A-Za-z_]+?)\b)',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -
        -            // conditions and controls
        -        4 => array(
        -            GESHI_SEARCH => '(\[)(globalVar|global|end)\b',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -
        -            // lowlevel setup and constant objects
        -        5 => array(
        -            GESHI_SEARCH => '([^\.\$-\{]\b)(cObj|field|config|content|file|frameset|includeLibs|lib|page|plugin|register|resources|sitemap|sitetitle|styles|temp|tt_content|tt_news|types|xmlnews)\b',
        -            GESHI_REPLACE => '\\2',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '\\1',
        -            GESHI_AFTER => ''
        -            ),
        -
        -            // markers
        -        6 => array(
        -            GESHI_SEARCH => '(###[^#]+###)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -
        -            // hex color codes
        -        7 => array(
        -            GESHI_SEARCH => '(#[a-fA-F0-9]{6}\b|#[a-fA-F0-9]{3}\b)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => '',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php
        deleted file mode 100644
        index 7bc377bd..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php
        +++ /dev/null
        @@ -1,208 +0,0 @@
        - 'Unicon (Unified Extended Dialect of Icon)',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '\''),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'break', 'case', 'class', 'continue', 'create', 'default', 'do',
        -            'else', 'end', 'every', 'fail', 'for', 'if', 'import', 'initial', 'initially',
        -            'invocable', 'link', 'method', 'next', 'not', 'of', 'package', 'procedure', 'record',
        -            'repeat', 'return', 'switch', 'suspend', 'then', 'to', 'until', 'while'
        -            ),
        -        2 => array(
        -            'global', 'local', 'static'
        -            ),
        -        3 => array(
        -            'allocated', 'ascii', 'clock', 'collections',
        -            'column', 'cset', 'current', 'date', 'dateline', 'digits',
        -            'dump', 'e', 'error', 'errornumber', 'errortext',
        -            'errorvalue', 'errout', 'eventcode', 'eventsource', 'eventvalue',
        -            'fail', 'features', 'file', 'host', 'input', 'lcase',
        -            'letters', 'level', 'line', 'main', 'now', 'null',
        -            'output', 'phi', 'pi', 'pos', 'progname', 'random',
        -            'regions', 'source', 'storage', 'subject', 'syserr', 'time',
        -            'trace', 'ucase', 'version', 'col', 'control', 'interval',
        -            'ldrag', 'lpress', 'lrelease', 'mdrag', 'meta', 'mpress',
        -            'mrelease', 'rdrag', 'resize', 'row', 'rpress', 'rrelease',
        -            'shift', 'window', 'x', 'y'
        -            ),
        -        4 => array(
        -            'abs', 'acos', 'any', 'args', 'asin', 'atan', 'bal', 'center', 'char',
        -            'chmod', 'close', 'cofail', 'collect', 'copy', 'cos', 'cset', 'ctime', 'dbcolumns',
        -            'dbdriver', 'dbkeys', 'dblimits', 'dbproduction', 'dbtables', 'delay', 'delete', 'detab',
        -            'display', 'dtor', 'entab', 'errorclear', 'event', 'eventmask', 'EvGet', 'exit', 'exp',
        -            'fetch', 'fieldnames', 'find', 'flock', 'flush', 'function', 'get', 'getch', 'getche',
        -            'getenv', 'gettimeofday', 'globalnames', 'gtime', 'iand', 'icom', 'image', 'insert',
        -            'integer', 'ior', 'ishift', 'ixor', 'key', 'left', 'list', 'load', 'loadfunc',
        -            'localnames', 'log', 'many', 'map', 'match', 'member', 'mkdir', 'move', 'name', 'numeric',
        -            'open', 'opmask', 'ord', 'paramnames', 'parent', 'pipe', 'pop', 'pos', 'proc', 'pull',
        -            'push', 'put', 'read', 'reads', 'real', 'receive', 'remove', 'rename', 'repl', 'reverse',
        -            'right', 'rmdir', 'rtod', 'runerr', 'seek', 'select', 'send', 'seq', 'serial', 'set',
        -            'setenv', 'sort', 'sortf', 'sql', 'sqrt', 'stat', 'staticnames', 'stop', 'string', 'system', 'tab',
        -            'table', 'tan', 'trap', 'trim', 'truncate', 'type', 'upto', 'utime', 'variable', 'where',
        -            'write', 'writes'
        -            ),
        -        5 => array(
        -            'Active', 'Alert', 'Bg', 'Clip', 'Clone', 'Color', 'ColorValue',
        -            'CopyArea', 'Couple', 'DrawArc', 'DrawCircle', 'DrawCurve', 'DrawCylinder', 'DrawDisk',
        -            'DrawImage', 'DrawLine', 'DrawPoint', 'DrawPolygon', 'DrawRectangle', 'DrawSegment',
        -            'DrawSphere', 'DrawString', 'DrawTorus', 'EraseArea', 'Event', 'Fg', 'FillArc',
        -            'FillCircle', 'FillPolygon', 'FillRectangle', 'Font', 'FreeColor', 'GotoRC', 'GotoXY',
        -            'IdentifyMatrix', 'Lower', 'MatrixMode', 'NewColor', 'PaletteChars', 'PaletteColor',
        -            'PaletteKey', 'Pattern', 'Pending', 'Pixel', 'PopMatrix', 'PushMatrix', 'PushRotate',
        -            'PushScale', 'PushTranslate', 'QueryPointer', 'Raise', 'ReadImage', 'Refresh', 'Rotate',
        -            'Scale', 'Texcoord', 'TextWidth', 'Texture', 'Translate', 'Uncouple', 'WAttrib',
        -            'WDefault', 'WFlush', 'WindowContents', 'WriteImage', 'WSync'
        -            ),
        -        6 => array(
        -            'define', 'include', 'ifdef', 'ifndef', 'else', 'endif', 'error',
        -            'line', 'undef'
        -            ),
        -        7 => array(
        -            '_V9', '_AMIGA', '_ACORN', '_CMS', '_MACINTOSH', '_MSDOS_386',
        -            '_MS_WINDOWS_NT', '_MSDOS', '_MVS', '_OS2', '_POR', 'T', '_UNIX', '_POSIX', '_DBM',
        -            '_VMS', '_ASCII', '_EBCDIC', '_CO_EXPRESSIONS', '_CONSOLE_WINDOW', '_DYNAMIC_LOADING',
        -            '_EVENT_MONITOR', '_EXTERNAL_FUNCTIONS', '_KEYBOARD_FUNCTIONS', '_LARGE_INTEGERS',
        -            '_MULTITASKING', '_PIPES', '_RECORD_IO', '_SYSTEM_FUNCTION', '_MESSAGING', '_GRAPHICS',
        -            '_X_WINDOW_SYSTEM', '_MS_WINDOWS', '_WIN32', '_PRESENTATION_MGR', '_ARM_FUNCTIONS',
        -            '_DOS_FUNCTIONS'
        -            ),
        -        8 => array(
        -            'line')
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '\\', '%', '=', '<', '>', '!', '^',
        -            '&', '|', '?', ':', ';', ',', '.', '~', '@'
        -            ),
        -        2 => array(
        -            '$(', '$)', '$<', '$>'
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        5 => true,
        -        6 => true,
        -        7 => true,
        -        8 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #b1b100;',
        -            3 => 'color: #b1b100;',
        -            4 => 'color: #b1b100;',
        -            5 => 'color: #b1b100;',
        -            6 => 'color: #b1b100;',
        -            7 => 'color: #b1b100;',
        -            8 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(1 => '.'),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            3 => array(
        -                'DISALLOWED_BEFORE' => '(?<=&)'
        -                ),
        -            4 => array(
        -                'DISALLOWED_BEFORE' => "(? "(?![a-zA-Z0-9_\"\'])"
        -                ),
        -            6 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\$)'
        -                ),
        -            8 => array(
        -                'DISALLOWED_BEFORE' => '(?<=#)'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php
        deleted file mode 100644
        index b1e873ef..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php
        +++ /dev/null
        @@ -1,268 +0,0 @@
        - 'UPC',
        -    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#"
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'if', 'return', 'while', 'case', 'continue', 'default',
        -            'do', 'else', 'for', 'switch', 'goto',
        -
        -            'upc_forall', 'upc_barrier', 'upc_notify', 'upc_wait', 'upc_fence'
        -            ),
        -        2 => array(
        -            'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline'
        -            ),
        -        3 => array(
        -            // assert.h
        -            'assert',
        -
        -            //complex.h
        -            'cabs', 'cacos', 'cacosh', 'carg', 'casin', 'casinh', 'catan',
        -            'catanh', 'ccos', 'ccosh', 'cexp', 'cimag', 'cis', 'clog', 'conj',
        -            'cpow', 'cproj', 'creal', 'csin', 'csinh', 'csqrt', 'ctan', 'ctanh',
        -
        -            //ctype.h
        -            'digittoint', 'isalnum', 'isalpha', 'isascii', 'isblank', 'iscntrl',
        -            'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
        -            'isupper', 'isxdigit', 'toascii', 'tolower', 'toupper',
        -
        -            //inttypes.h
        -            'imaxabs', 'imaxdiv', 'strtoimax', 'strtoumax', 'wcstoimax',
        -            'wcstoumax',
        -
        -            //locale.h
        -            'localeconv', 'setlocale',
        -
        -            //math.h
        -            'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'exp',
        -            'fabs', 'floor', 'frexp', 'ldexp', 'log', 'log10', 'modf', 'pow',
        -            'sin', 'sinh', 'sqrt', 'tan', 'tanh',
        -
        -            //setjmp.h
        -            'longjmp', 'setjmp',
        -
        -            //signal.h
        -            'raise',
        -
        -            //stdarg.h
        -            'va_arg', 'va_copy', 'va_end', 'va_start',
        -
        -            //stddef.h
        -            'offsetof',
        -
        -            //stdio.h
        -            'clearerr', 'fclose', 'fdopen', 'feof', 'ferror', 'fflush', 'fgetc',
        -            'fgetpos', 'fgets', 'fopen', 'fprintf', 'fputc', 'fputchar',
        -            'fputs', 'fread', 'freopen', 'fscanf', 'fseek', 'fsetpos', 'ftell',
        -            'fwrite', 'getc', 'getch', 'getchar', 'gets', 'perror', 'printf',
        -            'putc', 'putchar', 'puts', 'remove', 'rename', 'rewind', 'scanf',
        -            'setbuf', 'setvbuf', 'snprintf', 'sprintf', 'sscanf', 'tmpfile',
        -            'tmpnam', 'ungetc', 'vfprintf', 'vfscanf', 'vprintf', 'vscanf',
        -            'vsprintf', 'vsscanf',
        -
        -            //stdlib.h
        -            'abort', 'abs', 'atexit', 'atof', 'atoi', 'atol', 'bsearch',
        -            'calloc', 'div', 'exit', 'free', 'getenv', 'itoa', 'labs', 'ldiv',
        -            'ltoa', 'malloc', 'qsort', 'rand', 'realloc', 'srand', 'strtod',
        -            'strtol', 'strtoul', 'system',
        -
        -            //string.h
        -            'memchr', 'memcmp', 'memcpy', 'memmove', 'memset', 'strcat',
        -            'strchr', 'strcmp', 'strcoll', 'strcpy', 'strcspn', 'strerror',
        -            'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', 'strrchr',
        -            'strspn', 'strstr', 'strtok', 'strxfrm',
        -
        -            //time.h
        -            'asctime', 'clock', 'ctime', 'difftime', 'gmtime', 'localtime',
        -            'mktime', 'strftime', 'time',
        -
        -            //wchar.h
        -            'btowc', 'fgetwc', 'fgetws', 'fputwc', 'fputws', 'fwide',
        -            'fwprintf', 'fwscanf', 'getwc', 'getwchar', 'mbrlen', 'mbrtowc',
        -            'mbsinit', 'mbsrtowcs', 'putwc', 'putwchar', 'swprintf', 'swscanf',
        -            'ungetwc', 'vfwprintf', 'vswprintf', 'vwprintf', 'wcrtomb',
        -            'wcscat', 'wcschr', 'wcscmp', 'wcscoll', 'wcscpy', 'wcscspn',
        -            'wcsftime', 'wcslen', 'wcsncat', 'wcsncmp', 'wcsncpy', 'wcspbrk',
        -            'wcsrchr', 'wcsrtombs', 'wcsspn', 'wcsstr', 'wcstod', 'wcstok',
        -            'wcstol', 'wcstoul', 'wcsxfrm', 'wctob', 'wmemchr', 'wmemcmp',
        -            'wmemcpy', 'wmemmove', 'wmemset', 'wprintf', 'wscanf',
        -
        -            //wctype.h
        -            'iswalnum', 'iswalpha', 'iswcntrl', 'iswctype', 'iswdigit',
        -            'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace',
        -            'iswupper', 'iswxdigit', 'towctrans', 'towlower', 'towupper',
        -            'wctrans', 'wctype'
        -            ),
        -        4 => array(
        -            'auto', 'char', 'const', 'double',  'float', 'int', 'long',
        -            'register', 'short', 'signed', 'sizeof', 'static', 'struct',
        -            'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t',
        -
        -            'int8', 'int16', 'int32', 'int64',
        -            'uint8', 'uint16', 'uint32', 'uint64',
        -
        -            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
        -            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
        -
        -            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
        -            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
        -
        -            'int8_t', 'int16_t', 'int32_t', 'int64_t',
        -            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
        -
        -            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t',
        -            'size_t', 'off_t',
        -
        -            'upc_lock_t', 'shared', 'strict', 'relaxed', 'upc_blocksizeof',
        -            'upc_localsizeof', 'upc_elemsizeof'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']',
        -        '+', '-', '*', '/', '%',
        -        '=', '<', '>',
        -        '!', '^', '&', '|',
        -        '?', ':',
        -        ';', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #993333;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #339933;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            1 => 'color: #000099; font-weight: bold;',
        -            2 => 'color: #660099; font-weight: bold;',
        -            3 => 'color: #660099; font-weight: bold;',
        -            4 => 'color: #660099; font-weight: bold;',
        -            5 => 'color: #006699; font-weight: bold;',
        -            'HARD' => '',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;',
        -            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
        -            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
        -            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
        -            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
        -            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php
        deleted file mode 100644
        index ec2aec49..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php
        +++ /dev/null
        @@ -1,198 +0,0 @@
        - 'Urbi',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Multiline-continued single-line comments
        -        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        //Multiline-continued preprocessor define
        -        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        // Urbi warning.
        -        3 => "#\[[0-9a-f]{8}:warning\].*#",
        -        // Urbi message from echo.
        -        4 => '#\[[0-9a-f]{8}\] \*\*\*.*#',
        -        // Urbi error message.
        -        6 => '#\[[0-9a-f]{8}:error\].*#',
        -        // Urbi system message.
        -        5 => '#\[00.*\].*#',
        -        // Nested comment. Max depth 4.
        -        7 => '#\/\*(.|\n)*\/\*(.|\n)*\*\/(.|\n)*\*\/#',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(
        -        0 => '"',
        -        1 => '\'',
        -        ),
        -    // For Urbi, disable escape char is better.
        -    'ESCAPE_CHAR' => '\\',
        -    'ESCAPE_REGEXP' => array(
        -        //Simple Single Char Escapes
        -        1 => "#\\\\[abfnrtv\\\'\"?\n]#",
        -        //Hexadecimal Char Specs
        -        2 => "#\\\\x[\da-fA-F]{2}#",
        -        //Hexadecimal Char Specs
        -        3 => "#\\\\u[\da-fA-F]{4}#",
        -        //Hexadecimal Char Specs
        -        4 => "#\\\\U[\da-fA-F]{8}#",
        -        //Octal Char Specs
        -        5 => "#\\\\[0-7]{1,3}#",
        -        ),
        -    'NUMBERS' =>
        -        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
        -        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
        -        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
        -    'KEYWORDS' => array(
        -        // Condition keywords.
        -        1 => array(
        -            'at', 'at;', 'at|', 'at&', 'at,', 'break', 'call', 'case', 'catch', 'continue',
        -            'do', 'else', 'every', 'every&', 'every,', 'every;', 'every|', 'for', 'for&',
        -            'for,', 'for;', 'foreach', 'for|', 'freezeif', 'goto', 'if', 'in', 'loop',
        -            'loop&', 'loop,', 'loop;', 'loop|', 'or_eq', 'stopif', 'switch', 'try',
        -            'waituntil', 'when', 'whenever', 'while', 'while&', 'while,', 'while;',
        -            'while|', 'throw', 'onleave', 'watch', 'return', 'and_eq', 'default', 'finally',
        -            'timeout', 'xor_eq'
        -            ),
        -        // Type.
        -        2 => array(
        -            'virtual', 'using', 'namespace', 'inline', 'protected', 'private', 'public',
        -            'typename', 'typeid', 'class', 'const_cast', 'dynamic_cast', 'friend',
        -            'template', 'enum', 'static_cast', 'reinterpret_cast', 'mutable', 'explicit'
        -            ),
        -        // Standard function.
        -        3 => array(
        -            'this', 'sizeof', 'delete', 'assert', 'isdef', 'compl', 'detach',
        -            'disown', '__HERE__', 'asm'
        -            ),
        -        // Type.
        -        4 => array(
        -            'char', 'const', 'double', 'int', 'long', 'typedef', 'union',
        -            'unsigned', 'var', 'short', 'wchar_t', 'volatile', 'signed', 'bool',
        -            'float', 'struct', 'auto', 'register', 'static', 'extern', 'function',
        -            'export', 'external', 'internal', 'closure', 'BIN'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        0 => array('(', ')', '{', '}', '[', ']'),
        -        1 => array('<', '>','=', '!=', '==', '==='),
        -        2 => array('+', '-', '*', '/', '%', 'bitand', 'bitor', 'xor'),
        -        3 => array('!', '^', '&', '|'),
        -        4 => array('?', ':', ';')
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #0000dd;',
        -            4 => 'color: #0000ff;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666;',
        -            2 => 'color: #339900;',
        -            3 => 'color: #d46b0f;',
        -            4 => 'color: #20b537;',
        -            5 => 'color: #73776f;',
        -            6 => 'color: #a71616;',
        -            7 => 'color: #666666;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #ff0000;',
        -            1 => 'color: #ff0000;',
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #7a0874; font-weight: bold;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;',
        -            1 => 'color: #007788;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000dd;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #007788;',
        -            2 => 'color: #007788;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;',
        -            1 => 'color: #0000f8;',
        -            2 => 'color: #000040;',
        -            3 => 'color: #000040; font-weight: bold;',
        -            4 => 'color: #008080;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000dd',
        -            1 => 'color: #0000dd;',
        -            2 => 'color: #0000dd;',
        -            3 => 'color: #0000dd;',
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::',
        -        // FIXME: add -> splitter.
        -        ),
        -    'REGEXPS' => array(
        -        0 => '0x[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])*',
        -        1 => '[0-9]([0-9_]*[0-9])*(e|E)(-|\+)?[0-9]([0-9_]*[0-9])*',
        -        2 => '[0-9]([0-9_]*[0-9])*(min|s|ms|h|d)',
        -        3 => '[0-9]+_([0-9_])*[0-9]',
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php
        deleted file mode 100644
        index f76a2dc7..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php
        +++ /dev/null
        @@ -1,297 +0,0 @@
        - 'Unreal Script',
        -    'COMMENT_SINGLE' => array(
        -            1 => '//',
        -            2 => '#'
        -            ),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(        //declaration keywords
        -            'simulated', 'state', 'class', 'function', 'event', 'var', 'local',
        -            'ignores', 'globalconfig', 'config', 'abstract', 'nativereplication', 'native',
        -            'auto', 'coerce', 'const', 'default',
        -            'defaultproperties',
        -            'enum', 'extends', 'expands', 'final', 'guid', 'latent', 'localized',
        -            'new', 'noexport', 'operator', 'preoperator', 'optional', 'out',
        -            'private', 'public', 'protected', 'reliable', 'replication',
        -            'singular', 'static', 'struct', 'transient', 'unreliable',
        -            'hidedropdown', 'cacheexempt', 'exec', 'delegate', 'import', 'placeable', 'exportstructs'
        -            ),
        -        2 => array(        //control flow keywords
        -            'for', 'while', 'do', 'if', 'else', 'switch', 'case', 'return', 'break', 'continue',
        -            'begin', 'loop', 'assert',
        -            'foreach', 'AllActors', 'DynamicActors', 'ChildActors', 'BasedActors', 'TouchingActors',
        -            'TraceActors', 'RadiusActors', 'VisibleActors', 'CollidingActors', 'VisibleCollidingActors'
        -            ),
        -        3 => array(        //global (object) functions
        -            'log', 'warn', 'rot', 'vect', 'Rand', 'Min', 'Max', 'Clamp', 'Abs', 'Sin', 'ASin',
        -            'Cos', 'ACos', 'Tan', 'ATan', 'Exp', 'Loge', 'Sqrt', 'Square', 'FRand', 'FMin', 'FMax', 'FClamp',
        -            'Lerp', 'Smerp', 'Ceil', 'Round', 'VSize', 'Normal', 'Invert', 'VRand', 'MirrorVectorByNormal',
        -            'GetAxes', 'GetUnAxes', 'RotRand', 'OrthoRotation', 'Normalize', 'ClockwiseFrom',
        -            'Len', 'InStr', 'Mid', 'Left', 'Right', 'Caps', 'Chr', 'Asc', 'Locs',
        -            'Divide', 'Split', 'StrCmp', 'Repl', 'Eval',
        -            'InterpCurveEval', 'InterpCurveGetOutputRange', 'InterpCurveGetInputDomain',
        -            'QuatProduct', 'QuatInvert', 'QuatRotateVector', 'QuatFindBetween', 'QuatFromAxisAndAngle',
        -            'QuatFromRotator', 'QuatToRotator', 'QuatSlerp',
        -            'Localize', 'GotoState', 'IsInState', 'GetStateName',
        -            'ClassIsChildOf', 'IsA', 'Enable', 'Disable',
        -            'GetPropertyText', 'SetPropertyText', 'GetEnum', 'DynamicLoadObject', 'FindObject',
        -            'SaveConfig', 'ClearConfig', 'StaticSaveConfig', 'ResetConfig', 'StaticClearConfig',
        -            'GetPerObjectNames', 'RandRange', 'StopWatch', 'IsOnConsole', 'IsSoaking',
        -            'PlatformIsMacOS', 'PlatformIsUnix', 'PlatformIsWindows', 'PlatformIs64Bit',
        -            'BeginState', 'EndState', 'Created', 'AllObjects', 'GetReferencers', 'GetItemName',
        -            'ReplaceText', 'EatStr'
        -            ),
        -        4 => array(        //common almost-global (actor) functions
        -            'ClientMessage', 'ConsoleCommand', 'CopyObjectToClipboard', 'TextToSpeech',
        -            'Error', 'Sleep', 'SetCollision', 'SetCollisionSize', 'SetDrawScale', 'SetDrawScale3D',
        -            'SetStaticMesh', 'SetDrawType', 'Move', 'SetLocation', 'SetRotation',
        -            'SetRelativeLocation', 'SetRelativeRotation', 'MoveSmooth', 'AutonomousPhysics',
        -            'SetBase', 'SetOwner', 'IsJoinedTo', 'GetMeshName', 'PlayAnim', 'LoopAnim', 'TweenAnim',
        -            'IsAnimating', 'FinishAnim', 'HasAnim', 'StopAnimating', 'FreezeFrameAt', 'SetAnimFrame',
        -            'IsTweening', 'AnimStopLooping', 'AnimEnd', 'LinkSkelAnim', 'LinkMesh', 'BoneRefresh',
        -            'GetBoneCoords', 'GetBoneRotation', 'GetRootLocation', 'GetRootRotation', 'AttachToBone',
        -            'DetachFromBone', 'SetBoneScale', 'UpdateURL', 'GetURLOption', 'SetPhysics', 'KAddImpulse',
        -            'KImpact', 'KApplyForce', 'Clock', 'UnClock', 'Destroyed', 'GainedChild', 'LostChild',
        -            'Tick', 'PostNetReceive', 'ClientTrigger', 'Trigger', 'UnTrigger', 'BeginEvent', 'EndEvent',
        -            'Timer', 'HitWall', 'Falling', 'Landed', 'ZoneChange', 'PhysicsVolumeChange', 'Touch',
        -            'PostTouch', 'UnTouch', 'Bump', 'BaseChange', 'Attach', 'Detach', 'SpecialHandling',
        -            'EncroachingOn', 'EncroachedBy', 'RanInto', 'FinishedInterpolation', 'EndedRotation',
        -            'UsedBy', 'FellOutOfWorld', 'KilledBy', 'TakeDamage', 'HealDamage', 'Trace', 'FastTrace',
        -            'TraceThisActor', 'spawn', 'Destroy', 'TornOff', 'SetTimer', 'PlaySound', 'PlayOwnedSound',
        -            'GetSoundDuration', 'MakeNoise', 'BeginPlay', 'GetAllInt', 'RenderOverlays', 'RenderTexture',
        -            'PreBeginPlay', 'PostBeginPlay', 'PostNetBeginPlay', 'HurtRadius', 'Reset', 'Crash'
        -            ),
        -        5 => array(        //data types
        -            'none', 'null',
        -            'float', 'int', 'bool', 'byte', 'char', 'double', 'iterator', 'name', 'string',    //primitive
        -            'plane', 'rotator', 'vector', 'spline',    'coords', 'Quat', 'Range', 'RangeVector', //structs
        -            'Scale', 'Color', 'Box', 'IntBox', 'FloatBox', 'BoundingVolume', 'Matrix', 'InterpCurvePoint',
        -            'InterpCurve', 'CompressedPosition', 'TMultiMap', 'PointRegion',
        -            'KRigidBodyState', 'KSimParams', 'AnimRep', 'FireProperties',
        -            'lodmesh', 'skeletalmesh', 'mesh', 'StaticMesh', 'MeshInstance',    //3d resources
        -            'sound',    //sound resources
        -            'material', 'texture', 'combiner', 'modifier', 'ColorModifier', 'FinalBlend',    //2d resources
        -            'MaterialSequence', 'MaterialSwitch', 'OpacityModifier', 'TexModifier', 'TexEnvMap',
        -            'TexCoordSource', 'TexMatrix', 'TexOscillator', 'TexPanner', 'TexRotator', 'TexScaler',
        -            'RenderedMaterial', 'BitmapMaterial', 'ScriptedTexture', 'ShadowBitmapMaterial', 'Cubemap',
        -            'FractalTexture', 'FireTexture', 'IceTexture', 'WaterTexture', 'FluidTexture', 'WaveTexture',
        -            'WetTexture', 'ConstantMaterial', 'ConstantColor', 'FadeColor', 'ParticleMaterial',
        -            'ProjectorMaterial', 'Shader', 'TerrainMaterial', 'VertexColor'
        -            ),
        -        6 => array(        //misc keywords
        -            'false', 'true', 'self', 'super', 'MaxInt', 'Pi'
        -            ),
        -        7 => array(        //common actor enums & variables
        -            'DT_None', 'DT_Sprite', 'DT_Mesh', 'DT_Brush', 'DT_RopeSprite',
        -            'DT_VerticalSprite', 'DT_TerraForm', 'DT_SpriteAnimOnce', 'DT_StaticMesh', 'DT_DrawType',
        -            'DT_Particle', 'DT_AntiPortal', 'DT_FluidSurface',
        -            'PHYS_None', 'PHYS_Walking', 'PHYS_Falling', 'PHYS_Swimming', 'PHYS_Flying',
        -            'PHYS_Rotating', 'PHYS_Projectile', 'PHYS_Interpolating', 'PHYS_MovingBrush', 'PHYS_Spider',
        -            'PHYS_Trailer', 'PHYS_Ladder', 'PHYS_RootMotion', 'PHYS_Karma', 'PHYS_KarmaRagDoll',
        -            'PHYS_Hovering', 'PHYS_CinMotion',
        -            'ROLE_None', 'ROLE_DumbProxy', 'ROLE_SimulatedProxy',
        -            'ROLE_AutonomousProxy', 'ROLE_Authority',
        -            'STY_None', 'STY_Normal', 'STY_Masked', 'STY_Translucent', 'STY_Modulated', 'STY_Alpha',
        -            'STY_Additive', 'STY_Subtractive', 'STY_Particle', 'STY_AlphaZ',
        -            'OCCLUSION_None', 'OCCLUSION_BSP', 'OCCLUSION_Default', 'OCCLUSION_StaticMeshes',
        -            'SLOT_None', 'SLOT_Misc', 'SLOT_Pain', 'SLOT_Interact', 'SLOT_Ambient', 'SLOT_Talk',
        -            'SLOT_Interface', 'MTRAN_None', 'MTRAN_Instant', 'MTRAN_Segue', 'MTRAN_Fade',
        -            'MTRAN_FastFade', 'MTRAN_SlowFade',
        -
        -            'DrawType', 'Physics', 'Owner', 'Base', 'Level', 'Game', 'Instigator', 'RemoteRole', 'Role',
        -            'LifeSpan', 'Tag', 'Event', 'Location', 'Rotation', 'Velocity', 'Acceleration',
        -            'RelativeLocation', 'RelativeRotation', 'DrawScale', 'DrawScale3D', 'Skins', 'Style',
        -            'SoundVolume', 'SoundPitch', 'SoundRadius', 'TransientSoundVolume', 'TransientSoundRadius',
        -            'CollisionRadius', 'CollisionHeight', 'Mass', 'Buoyancy', 'RotationRate', 'DesiredRotation'
        -            ),
        -        8 => array(        //common non-actor uscript classes
        -            'Object',
        -            'CacheManager', 'CameraEffect', 'Canvas', 'CheatManager', 'Commandlet', 'DecoText', 'GUI',
        -            'InteractionMaster', 'Interactions', 'Interaction', 'KarmaParamsCollision', 'KarmaParamsRBFull',
        -            'KarmaParamsSkel', 'KarmaParams', 'LevelSummary', 'Locale', 'Manifest', 'MaterialFactory',
        -            'MeshObject', 'ObjectPool', 'Pallete',
        -            'ParticleEmitter', 'MeshEmitter', 'BeamEmitter', 'SpriteEmitter', 'SparkEmitter', 'TrailEmitter',
        -            'Player', 'PlayerInput', 'PlayInfo', 'ReachSpec', 'Resource', 'LatentScriptedAction', 'ScriptedAction',
        -            'speciesType', 'StreamBase', 'Stream', 'EditorEngine', 'Engine', 'Time', 'WeaponFire',
        -            'WebApplication', 'WebRequest', 'WebResponse', 'WebSkin', 'xPawnGibGroup', 'xPawnSoundGroup',
        -            'xUtil'
        -            ),
        -        9 => array(        //common actor-based uscript classes
        -            'Actor',
        -            'Controller', 'AIController', 'ScriptedController', 'Bot', 'xBot',
        -            'PlayerController', 'UnrealPlayer', 'xPlayer',
        -            'DamageType', 'WeaponDamageType', 'Effects', 'Emitter', 'NetworkEmitter',
        -            'Gib', 'HUD', 'HudBase', 'Info', 'FluidSurfaceInfo', 'Combo',
        -            'GameInfo', 'UnrealMPGameInfo', 'DeathMatch', 'TeamGame', 'CTFGame',
        -            'xCTFGame', 'xBombingRun', 'xDoubleDom', 'xTeamGame',
        -            'ASGameInfo', 'Invasion', 'ONSOnslaughtGame', 'xDeathmatch',
        -            'Mutator', 'Inventory', 'Ammunition', 'KeyInventory', 'Powerups', 'Armor', 'Weapon',
        -            'InventoryAttachment', 'WeaponAttachment',
        -            'KActor', 'KConstraint', 'KBSJoint', 'KCarWheelJoint', 'KConeLimit', 'KHinge', 'KTire',
        -            'KVehicleFactory', 'Keypoint', 'AIScript', 'ScriptedSequence', 'ScriptedTrigger',
        -            'AmbientSound', 'Light', 'SpotLight', 'SunLight', 'TriggerLight',
        -            'MeshEffect', 'NavigationPoint', 'GameObjective', 'DestroyableObjective',
        -            'PathNode', 'FlyingPathNode', 'RoadPathNode', 'InventorySpot', 'PlayerStart',
        -            'Pawn', 'Vehicle', 'UnrealPawn', 'xPawn', 'Monster', 'ASVehicle', 'KVehicle', 'KCar',
        -            'ONSWeaponPawn', 'SVehicle', 'ONSVehicle', 'ONSChopperCraft', 'ONSHoverCraft',
        -            'ONSPlaneCraft', 'ONSTreadCraft', 'ONSWheeledCraft',
        -            'Pickup', 'Ammo', 'UTAmmoPickup', 'ArmorPickup', 'KeyPickup', 'TournamentPickup',
        -            'Projectile', 'Projector', 'DynamicProjector', 'ShadowProjector', 'xScorch',
        -            'xEmitter', 'xPickupBase', 'xProcMesh', 'xWeatherEffect', 'PhysicsVolume', 'Volume'
        -            ),
        -        10 => array(    //symbol-like operators
        -            'dot','cross'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '+','-','=','/','*','-','%','>','<','&','^','!','|','`','(',')','[',']','{','}',
        -        '<<','>>','$','@'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false,
        -        7 => false,
        -        8 => false,
        -        9 => false,
        -        10 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #0000FF;',
        -            3 => 'color: #0066AA;',
        -            4 => 'color: #0088FF;',
        -            5 => 'color: #E000E0;',
        -            6 => 'color: #900000;',
        -            7 => 'color: #888800;',
        -            8 => 'color: #AA6600;',
        -            9 => 'color: #FF8800;',
        -            10 => 'color: #0000FF;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080; font-style: italic;',
        -            2 => 'color: #000000; font-weight: bold;',
        -            'MULTI' => 'color: #008080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #999999;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #669966;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #E000E0;',
        -            1 => 'color: #E000E0;'
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => '',
        -        7 => '',
        -        8 => 'http://wiki.beyondunreal.com/wiki?search={FNAME}',
        -        9 => 'http://wiki.beyondunreal.com/wiki?search={FNAME}',
        -        10 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array('.'),
        -    'REGEXPS' => array(            //handle template-style variable definitions
        -        0 => array(
        -            GESHI_SEARCH => '(class\s*)<(\s*(\w+)\s*)>',
        -            GESHI_REPLACE => "\${1}",
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => "< \${3} >"
        -            ),
        -        1 => array(
        -            GESHI_SEARCH => '(array\s*)<(\s*(\w+)\s*)>',
        -            GESHI_REPLACE => "\${1}",
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => "< \${3} >"
        -            )
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            10 => array(
        -                'DISALLOWED_BEFORE' => '(?)'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php
        deleted file mode 100644
        index a823dbfd..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php
        +++ /dev/null
        @@ -1,149 +0,0 @@
        - 'Vala',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        //Using and Namespace directives (basic support)
        -        //Please note that the alias syntax for using is not supported
        -        3 => '/(?:(?<=using[\\n\\s])|(?<=namespace[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*[a-zA-Z0-9_]+[\n\s]*(?=[;=])/i'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'HARDQUOTE' => array('"""'),
        -    'HARDESCAPE' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'as', 'abstract', 'base', 'break', 'case', 'catch', 'const',
        -            'construct', 'continue', 'default', 'delete', 'dynamic', 'do',
        -            'else', 'ensures', 'extern', 'false', 'finally', 'for', 'foreach',
        -            'get', 'if', 'in', 'inline', 'internal', 'lock', 'namespace',
        -            'null', 'out', 'override', 'private', 'protected', 'public', 'ref',
        -            'requires', 'return', 'set', 'static', 'switch', 'this', 'throw',
        -            'throws', 'true', 'try', 'using', 'value', 'var', 'virtual',
        -            'volatile', 'void', 'yield', 'yields', 'while'
        -            ),
        -        2 => array(
        -            '#elif', '#endif', '#else', '#if'
        -            ),
        -        3 => array(
        -            'is', 'new', 'owned', 'sizeof', 'typeof', 'unchecked', 'unowned', 'weak'
        -            ),
        -        4 => array(
        -            'bool', 'char', 'class', 'delegate', 'double', 'enum',
        -            'errordomain', 'float', 'int', 'int8', 'int16', 'int32', 'int64',
        -            'interface', 'long', 'short', 'signal', 'size_t', 'ssize_t',
        -            'string', 'struct', 'uchar', 'uint', 'uint8', 'uint16', 'uint32',
        -            'ulong', 'unichar', 'ushort'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', ':', ';',
        -        '(', ')', '{', '}', '[', ']', '|'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true,
        -        4 => true,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0600FF;',
        -            2 => 'color: #FF8000; font-weight: bold;',
        -            3 => 'color: #008000;',
        -            4 => 'color: #FF0000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008080; font-style: italic;',
        -            3 => 'color: #008080;',
        -            'MULTI' => 'color: #008080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080; font-weight: bold;',
        -            'HARD' => 'color: #008080; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #666666;',
        -            'HARD' => 'color: #666666;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #FF0000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #0000FF;',
        -            2 => 'color: #0000FF;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'DISALLOWED_BEFORE' => "(?|^])",
        -            'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php
        deleted file mode 100644
        index bcfe614c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php
        +++ /dev/null
        @@ -1,155 +0,0 @@
        - 'Visual Basic',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        // Comments (either single or multiline with _
        -        1 => '/\'.*(? GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'Binary', 'Boolean', 'Byte', 'Currency', 'Date', 'Decimal', 'Double',
        -            'String', 'Enum', 'Integer', 'Long', 'Object', 'Single', 'Variant'
        -            ),
        -        2 => array(
        -            'CreateObject', 'GetObject', 'New', 'Option', 'Function',
        -            'Call', 'Private', 'Public', 'Sub', 'Explicit', 'Compare', 'Exit'
        -            ),
        -        3 => array(
        -            'And', 'Case', 'Do', 'Each', 'Else', 'ElseIf', 'End', 'For', 'GoSub',
        -            'Goto', 'If', 'Is', 'Loop', 'Next', 'Not', 'Or', 'Resume', 'Select',
        -            'Step', 'Then', 'To', 'Until', 'While', 'With', 'Xor', 'WithEvents',
        -            'DoEvents', 'Close', 'Like', 'In'
        -            ),
        -        4 => array(
        -            'As', 'Dim', 'Get', 'Set', 'ReDim', 'Error',
        -            'Declare', 'Let', 'ByRef', 'ByVal',
        -            'Optional', 'Property', 'Control', 'UBound', 'Mod',
        -            'Implements', 'Input', 'LBound', 'Static', 'Stop',
        -            'Type', 'TypeOf', 'On', 'Open', 'Output', 'ParamArray',
        -            'Preserve', 'Print', 'RaiseEvent', 'Random', 'Line'
        -            ),
        -        5 => array(
        -            'Nothing', 'False', 'True', 'Null', 'Empty'
        -            ),
        -        6 => array(
        -            'ErrorHandler','ExitProc', 'PublishReport'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        6 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #F660AB; font-weight: bold;',
        -            2 => 'color: #E56717; font-weight: bold;',
        -            3 => 'color: #8D38C9; font-weight: bold;',
        -            4 => 'color: #151B8D; font-weight: bold;',
        -            5 => 'color: #00C2FF; font-weight: bold;',
        -            6 => 'color: #3EA99F; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;'
        -            ),
        -        'BRACKETS' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #800000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #800000; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => '',
        -        6 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'SYMBOLS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php
        deleted file mode 100644
        index e4d1464c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php
        +++ /dev/null
        @@ -1,180 +0,0 @@
        - 'vb.net',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        //Keywords
        -        1 => array(
        -            'AddHandler', 'AddressOf', 'Alias', 'And', 'AndAlso', 'As', 'ByRef', 'ByVal',
        -            'Call', 'Case', 'Catch', 'Char', 'Class', 'Const', 'Continue',
        -            'Declare', 'Default',
        -            'Delegate', 'Dim', 'DirectCast', 'Do', 'Each', 'Else', 'ElseIf', 'End', 'EndIf',
        -            'Enum', 'Erase', 'Error', 'Event', 'Exit', 'False', 'Finally', 'For', 'Friend', 'Function',
        -            'Get', 'GetType', 'GetXMLNamespace', 'Global', 'GoSub', 'GoTo', 'Handles', 'If', 'Implements',
        -            'Imports', 'In', 'Inherits', 'Interface', 'Is', 'IsNot', 'Let', 'Lib', 'Like', 'Loop', 'Me',
        -            'Mod', 'Module', 'Module Statement', 'MustInherit', 'MustOverride', 'MyBase', 'MyClass', 'Namespace',
        -            'Narrowing', 'New', 'Next', 'Not', 'Nothing', 'NotInheritable', 'NotOverridable', 'Of', 'On',
        -            'Operator', 'Option', 'Optional', 'Or', 'OrElse', 'Out', 'Overloads', 'Overridable', 'Overrides',
        -            'ParamArray', 'Partial', 'Private', 'Property', 'Protected', 'Public', 'RaiseEvent', 'ReadOnly', 'ReDim',
        -            'REM', 'RemoveHandler', 'Resume', 'Return', 'Select','Set', 'Shadows', 'Shared', 'Static', 'Step',
        -            'Stop', 'Structure', 'Sub', 'SyncLock', 'Then', 'Throw', 'To', 'True', 'Try', 'TryCast', 'TypeOf',
        -            'Using', 'Wend', 'When', 'While', 'Widening', 'With', 'WithEvents', 'WriteOnly', 'Xor'
        -            ),
        -        //Data Types
        -        2 => array(
        -            'Boolean', 'Byte', 'Date', 'Decimal', 'Double', 'Integer', 'Long', 'Object',
        -            'SByte', 'Short', 'Single', 'String', 'UInteger', 'ULong', 'UShort'
        -            ),
        -        //Compiler Directives
        -        3 => array(
        -            '#Const', '#Else', '#ElseIf', '#End', '#If'
        -            ),
        -        //Constants
        -        4 => array(
        -            'CBool', 'CByte', 'CChar', 'CChr', 'CDate', 'CDbl', 'CDec','CInt', 'CLng', 'CLng8', 'CObj', 'CSByte', 'CShort',
        -            'CSng', 'CStr', 'CType', 'CUInt', 'CULng', 'CUShort'
        -            ),
        -        //Linq
        -        5 => array(
        -            'By','From','Group','Where'
        -            ),
        -        //Built-in functions
        -        7 => array(
        -            'ABS', 'ARRAY', 'ASC', 'ASCB', 'ASCW', 'CALLBYNAME', 'CHOOSE', 'CHR', 'CHR$', 'CHRB', 'CHRB$', 'CHRW',
        -            'CLOSE', 'COMMAND', 'COMMAND$', 'CONVERSION',
        -            'COS', 'CREATEOBJECT', 'CURDIR', 'CVDATE', 'DATEADD',
        -            'DATEDIFF', 'DATEPART', 'DATESERIAL', 'DATEVALUE', 'DAY', 'DDB', 'DIR', 'DIR$',
        -            'EOF', 'ERROR$', 'EXP', 'FILEATTR', 'FILECOPY', 'FILEDATATIME', 'FILELEN', 'FILTER',
        -            'FIX', 'FORMAT', 'FORMAT$', 'FORMATCURRENCY', 'FORMATDATETIME', 'FORMATNUMBER',
        -            'FORMATPERCENT', 'FREEFILE', 'FV', 'GETALLSETTINGS', 'GETATTRGETOBJECT', 'GETSETTING',
        -            'HEX', 'HEX$', 'HOUR', 'IIF', 'IMESTATUS', 'INPUT$', 'INPUTB', 'INPUTB$', 'INPUTBOX',
        -            'INSTR', 'INSTRB', 'INSTRREV', 'INT', 'IPMT', 'IRR', 'ISARRAY', 'ISDATE', 'ISEMPTY',
        -            'ISERROR', 'ISNULL', 'ISNUMERIC', 'ISOBJECT', 'JOIN', 'LBOUND', 'LCASE', 'LCASE$',
        -            'LEFT', 'LEFT$', 'LEFTB', 'LEFTB$', 'LENB', 'LINEINPUT', 'LOC', 'LOF', 'LOG', 'LTRIM',
        -            'LTRIM$', 'MID$', 'MIDB', 'MIDB$', 'MINUTE', 'MIRR', 'MKDIR', 'MONTH', 'MONTHNAME',
        -            'MSGBOX', 'NOW', 'NPER', 'NPV', 'OCT', 'OCT$', 'PARTITION', 'PMT', 'PPMT', 'PV',
        -            'RATE', 'REPLACE', 'RIGHT', 'RIGHT$', 'RIGHTB', 'RIGHTB$', 'RMDIR', 'RND', 'RTRIM',
        -            'RTRIM$', 'SECOND', 'SIN', 'SLN', 'SPACE', 'SPACE$', 'SPC', 'SPLIT', 'SQRT', 'STR', 'STR$',
        -            'STRCOMP', 'STRCONV', 'STRING$', 'STRREVERSE', 'SYD', 'TAB', 'TAN', 'TIMEOFDAY',
        -            'TIMER', 'TIMESERIAL', 'TIMEVALUE', 'TODAY', 'TRIM', 'TRIM$', 'TYPENAME', 'UBOUND',
        -            'UCASE', 'UCASE$', 'VAL', 'WEEKDAY', 'WEEKDAYNAME', 'YEAR'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!',
        -        '(', ')', '{', '}', '.'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false,
        -        7 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF; font-weight: bold;',  //Keywords
        -            2 => 'color: #6a5acd;',                     //primitive Data Types
        -            3 => 'color: #6a5acd; font-weight: bold;',  //preprocessor-commands
        -            4 => 'color: #cd6a5a;',                     //Constants
        -            5 => 'color: #cd6a5a; font-weight: bold;',  //LinQ
        -            7 => 'color: #000066;',                     //Built-in functions
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000; font-style: italic;',
        -            'MULTI' => 'color: #008000; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #a52a2a; back-color: #fffacd;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #a52a2a; back-color: #fffacd;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #000000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.google.com/search?q={FNAMEU}+site:msdn.microsoft.com',
        -        4 => '',
        -        5 => '',
        -        7 => 'http://www.google.com/search?q={FNAMEU}+site:msdn.microsoft.com'
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 =>'.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            7 => array(
        -                'DISALLOWED_AFTER' => '(?!\w)(?=\s*\()'
        -                )
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php
        deleted file mode 100644
        index 6db3bbd3..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php
        +++ /dev/null
        @@ -1,153 +0,0 @@
        - 'VBScript',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        // Comments (either single or multiline with _
        -        1 => '/\'.*(? GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'Empty', 'Nothing', 'Null', 'vbArray', 'vbBoolean', 'vbByte',
        -            'vbCr', 'vbCrLf', 'vbCurrency', 'vbDate', 'vbDouble', 'vbEmpty',
        -            'vbError', 'vbFirstFourDays', 'vbFirstFullWeek', 'vbFirstJan1',
        -            'vbFormFeed', 'vbFriday', 'vbInteger', 'vbLf', 'vbLong', 'vbMonday',
        -            'vbNewLine', 'vbNull', 'vbNullChar', 'vbNullString', 'vbObject',
        -            'vbSaturday', 'vbSingle', 'vbString', 'vbSunday', 'vbTab',
        -            'vbThursday', 'vbTuesday', 'vbUseSystem', 'vbUseSystemDayOfWeek',
        -            'vbVariant', 'vbWednesday', 'FALSE', 'TRUE'
        -            ),
        -        2 => array(
        -            'bs', 'Array', 'Asc', 'Atn', 'CBool', 'CByte', 'CDate', 'CDbl', 'Chr',
        -            'CInt', 'CLng', 'Cos', 'CreateObject', 'CSng', 'CStr', 'Date', 'DateAdd',
        -            'DateDiff', 'DatePart', 'DateSerial', 'DateValue', 'Day', 'Eval', 'Exp',
        -            'Filter', 'Fix', 'FormatDateTime', 'FormatNumber', 'FormatPercent',
        -            'GetObject', 'Hex', 'Hour', 'InputBox', 'InStr', 'InstrRev', 'Int',
        -            'IsArray', 'IsDate', 'IsEmpty', 'IsNull', 'IsNumeric', 'IsObject', 'Join',
        -            'LBound', 'LCase', 'Left', 'Len', 'Log', 'LTrim', 'Mid', 'Minute', 'Month',
        -            'MonthName', 'MsgBox', 'Now', 'Oct', 'Replace', 'RGB', 'Right', 'Rnd',
        -            'Round', 'RTrim', 'ScriptEngine', 'ScriptEngineBuildVersion',
        -            'ScriptEngineMajorVersion', 'ScriptEngineMinorVersion', 'Second',
        -            'Sgn', 'Sin', 'Space', 'Split', 'Sqr', 'StrComp', 'String', 'StrReverse',
        -            'Tan', 'Time', 'TimeSerial', 'TimeValue', 'Trim', 'TypeName', 'UBound',
        -            'UCase', 'VarType', 'Weekday', 'WeekdayName', 'Year'
        -            ),
        -        3 => array(
        -            'Call', 'Case', 'Const', 'Dim', 'Do', 'Each', 'Else', 'End', 'Erase',
        -            'Execute', 'Exit', 'For', 'Function', 'Gosub', 'Goto', 'If', 'Loop',
        -            'Next', 'On Error', 'Option Explicit', 'Private', 'Public',
        -            'Randomize', 'ReDim', 'Rem', 'Resume', 'Select', 'Set', 'Sub', 'Then',
        -            'Wend', 'While', 'With', 'In', 'To', 'Step'
        -            ),
        -        4 => array(
        -            'And', 'Eqv', 'Imp', 'Is', 'Mod', 'Not', 'Or', 'Xor'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '-', '&', '*', '/', '\\', '^', '+', '<', '<=', '<>', '=', '>', '>='
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #F660AB; font-weight: bold;',
        -            2 => 'color: #E56717; font-weight: bold;',
        -            3 => 'color: #8D38C9; font-weight: bold;',
        -            4 => 'color: #151B8D; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000;'
        -            ),
        -        'BRACKETS' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #800000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #800000; font-weight: bold;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            'SPACE_AS_WHITESPACE' => true
        -            ),
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php
        deleted file mode 100644
        index 72f4b535..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php
        +++ /dev/null
        @@ -1,101 +0,0 @@
        - 'Vedit macro language',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"', '\''),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'break', 'breakout', 'break_out', 'continue', 'do', 'else', 'for',
        -            'goto', 'if', 'repeat', 'return', 'while'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array(
        -            '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '%',
        -            '=', '<', '>', '!', '^', '&', '|', '?', ':', ';', ','
        -            )
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;',
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #004000;'
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: #339933;'
        -            ),
        -        'REGEXPS' => array(),
        -        'SCRIPT' => array()
        -        ),
        -    'URLS' => array(1 => ''),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php
        deleted file mode 100644
        index 77e5927d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php
        +++ /dev/null
        @@ -1,193 +0,0 @@
        -
        - * Copyright: (C) 2008 Günter Dannoritzer
        - * Release Version: 1.0.8.12
        - * Date Started: 2008/05/28
        - *
        - * Verilog language file for GeSHi.
        - *
        - * CHANGES
        - * -------
        - * 2008/05/29
        - *   -  added regular expression to find numbers of the form 4'b001xz
        - *   -  added regular expression to find values for `timescale command
        - *   -  extended macro keywords
        - *
        - * TODO (updated 2008/05/29)
        - * -------------------------
        - *
        - * 2013/01/08
        - *   -  extended keywords to include system keywords
        - *
        - *************************************************************************************
        - *
        - *     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' => 'Verilog',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        // keywords
        -        1 => array(
        -            'accept_on','alias',
        -            'always','always_comb','always_ff','always_latch','and','assert',
        -            'assign','assume','automatic','before','begin','bind','bins','binsof',
        -            'bit','break','buf','bufif0','bufif1','byte','case','casex','casez',
        -            'cell','chandle','checker','class','clocking','cmos','config','const',
        -            'constraint','context','continue','cover','covergroup','coverpoint','cross',
        -            'deassign','default','defparam','design','disable','dist','do','edge','else',
        -            'end','endcase','endchecker','endclass','endclocking','endconfig',
        -            'endfunction','endgenerate','endgroup','endinterface','endmodule',
        -            'endpackage','endprimitive','endprogram','endproperty','endspecify',
        -            'endsequence','endtable','endtask','enum','event','eventually','expect',
        -            'export','extends','extern','final','first_match','for','force','foreach',
        -            'forever','fork','forkjoin','function','generate','genvar','global',
        -            'highz0','highz1','if','iff','ifnone','ignore_bins','illegal_bins',
        -            'implies','import','incdir','include','initial','inout','input','inside',
        -            'instance','int','integer','interface','intersect','join','join_any',
        -            'join_none','large','let','liblist','library','local','localparam',
        -            'logic','longint','macromodule','matches','medium','modport','module','nand',
        -            'negedge','new','nexttime','nmos','nor','noshowcancelled','not','notif0',
        -            'notif1','null','or','output','package','packed','parameter','pmos','posedge',
        -            'primitive','priority','program','property','protected','pull0','pull1',
        -            'pulldown','pullup','pulsestyle_ondetect','pulsestyle_onevent','pure',
        -            'rand','randc','randcase','randsequence','rcmos','real','realtime','ref',
        -            'reg','reject_on','release','repeat','restrict','return','rnmos','rpmos',
        -            'rtran','rtranif0','rtranif1','s_always','s_eventually','s_nexttime',
        -            's_until','s_until_with','scalared','sequence','shortint','shortreal',
        -            'showcancelled','signed','small','solve','specify','specparam','static',
        -            'string','strong','strong0','strong1','struct','super','supply0','supply1',
        -            'sync_accept_on','sync_reject_on','table','tagged','task','this','throughout',
        -            'time','timeprecision','timeunit','tran','tranif0','tranif1','tri','tri0',
        -            'tri1','triand','trior','trireg','type','typedef','union','unique','unique0',
        -            'unsigned','until','until_with','untyped','use','uwire','var','vectored',
        -            'virtual','void','wait','wait_order','wand','weak','weak0','weak1','while',
        -            'wildcard','wire','with','within','wor','xnor','xor'
        -            ),
        -        // system tasks
        -        2 => array(
        -            '$display', '$monitor',
        -            '$dumpall', '$dumpfile', '$dumpflush', '$dumplimit', '$dumpoff',
        -            '$dumpon', '$dumpvars',
        -            '$fclose', '$fdisplay', '$fopen',
        -            '$finish', '$fmonitor', '$fstrobe', '$fwrite',
        -            '$fgetc', '$ungetc', '$fgets', '$fscanf', '$fread', '$ftell',
        -            '$fseek', '$frewind', '$ferror', '$fflush', '$feof',
        -            '$random',
        -            '$readmemb', '$readmemh', '$readmemx',
        -            '$signed', '$stime', '$stop',
        -            '$strobe', '$time', '$unsigned', '$write'
        -            ),
        -        // macros
        -        3 => array(
        -            '`default-net', '`define',
        -            '`celldefine', '`default_nettype', '`else', '`elsif', '`endcelldefine',
        -            '`endif', '`ifdef', '`ifndef', '`include', '`line', '`nounconnected_drive',
        -            '`resetall', '`timescale', '`unconnected_drive', '`undef'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%',
        -        '^', '&', '|', '~',
        -        '?', ':',
        -        '#', '<<', '<<<',
        -        '>', '<', '>=', '<=',
        -        '@', ';', ','
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #A52A2A; font-weight: bold;',
        -            2 => 'color: #9932CC;',
        -            3 => 'color: #008800;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #00008B; font-style: italic;',
        -            'MULTI' => 'color: #00008B; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #9F79EE'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #9F79EE;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #FF00FF;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff0055;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #202020;',
        -            2 => 'color: #202020;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #5D478B;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #ff0055;',
        -            1 => 'color: #ff0055;',
        -            ),
        -        'SCRIPT' => array(
        -            0 => '',
        -            1 => '',
        -            2 => '',
        -            3 => ''
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => ''
        -        ),
        -    'REGEXPS' => array(
        -        // numbers
        -        0 => "\d'[bdh][0-9_a-fA-FxXzZ]+",
        -        // time -> 1, 10, or 100; s, ms, us, ns, ps, of fs
        -        1 => "1[0]{0,2}[munpf]?s"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        1 => ''
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        0 => true,
        -        1 => true,
        -        2 => true,
        -        3 => true
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php
        deleted file mode 100644
        index c89a098e..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php
        +++ /dev/null
        @@ -1,181 +0,0 @@
        - 'VHDL',
        -    'COMMENT_SINGLE' => array(1 => '--'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'COMMENT_REGEXP' => array(
        -        // PSL adds C-preprocessor support
        -        1 => '/(?<=\s)#(?:\\\\\\\\|\\\\\\n|.)*$/m',
        -        // PSL metacomments (single-line only for now)
        -        2 => '/--\s*@?psl(?:.)*?;$/m',
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        /*keywords*/
        -        1 => array(
        -            'access','after','alias','all','attribute','architecture','array','begin',
        -            'block','body','buffer','bus','case','case?','component','configuration','constant','context',
        -            'disconnect','downto','else','elsif','end','entity','exit','file','for','force',
        -            'function','generate','generic','group','guarded','if','impure','in',
        -            'inertial','inout','is','label','library','linkage','literal','loop',
        -            'map','new','next','null','of','on','open','others','out','package',
        -            'port','postponed','procedure','process','protected','pure','range','record','register',
        -            'reject','release','report','return','select','severity','shared','signal','subtype',
        -            'then','to','transport','type','unaffected','units','until','use','variable',
        -            'wait','when','while','with'
        -            ),
        -        /*types and standard libs*/
        -        2 => array(
        -            'bit','bit_vector','character','boolean','integer','real','time','delay_length','string',
        -            'severity_level','positive','natural','signed','unsigned','line','text',
        -            'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector',
        -            'sfixed','ufixed','float','float32','float64','float128',
        -            'work','ieee','std_logic_1164','math_real','math_complex','textio',
        -            'numeric_std','numeric_std_signed','numeric_std_unsigned','numeric_bit'
        -            ),
        -        /*operators*/
        -        3 => array(
        -            'abs','and','mod','nor','not','or','rem','rol','ror','sla','sll','sra','srl','xnor','xor'
        -            ),
        -        /*psl*/
        -        4 => array(
        -            'assert','assume','assume_guarantee','clock','const','countones','cover','default',
        -            'endpoint','fairness','fell','forall','inf','inherit','isunknown','onehot','onehot0','property',
        -            'prev','restrict','restrict_guarantee','rose','sequence','stable','strong','union','vmode','vprop','vunit'
        -            ),
        -        /*psl operators*/
        -        5 => array(
        -            'abort','always','before','before!','before!_','before_','eventually!','never',
        -            'next!','next_a','next_a!','next_e','next_e!','next_event','next_event!','next_event_a','next_event_a!',
        -            'next_event_e','next_event_e!','until!','until!_','until_','within'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '(', ')',
        -        ';',':',
        -        '<','>','=','+','-','*','/','&','|','?'
        -    ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000080; font-weight: bold;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #000066;',
        -            4 => 'color: #000080; font-weight: bold;',
        -            5 => 'color: #000066;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000; font-style: italic;',
        -            2 => 'color: #ff0000; font-weight: bold;',
        -            'MULTI' => 'color: #008000; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7f007f;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000066;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #ff0000;',
        -            //1 => 'color: #ff0000;',
        -            2 => 'color: #ee82ee;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Based literals, scientific notation, and time units
        -        0 => '(\b\d+#[[:xdigit:]_]+#)|'.
        -            '(\b[\d_]+(\.[\d_]+)?[eE][+\-]?[\d_]+)|'.
        -            '(\b(hr|min|sec|ms|us|ns|ps|fs)\b)',
        -        //Character literals
        -        /* GeSHi won't match this pattern for some reason and QUOTEMARKS
        -         * can't be used because it interferes with attribute parsing */
        -        /*1 => "\b'.'\b",*/
        -        //Attributes
        -        2 => "'\w+(?!')"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php
        deleted file mode 100644
        index 43539435..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php
        +++ /dev/null
        @@ -1,418 +0,0 @@
        -  ...   ... works event if they aren't surround by space.
        - *
        - *************************************************************************************
        - *
        - *     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' => 'Vim Script',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_REGEXP' => array(
        -        1 => "/\s*\"[^\"]*?$/m",
        -        //Regular expressions (Ported from perl.php)
        -//        2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
        -        ),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'au', 'augroup', 'autocmd', 'brea', 'break', 'bufadd',
        -            'bufcreate', 'bufdelete', 'bufenter', 'buffilepost',
        -            'buffilepre', 'bufleave', 'bufnew', 'bufnewfile',
        -            'bufread', 'bufreadcmd', 'bufreadpost', 'bufreadpre',
        -            'bufunload', 'bufwinenter', 'bufwinleave', 'bufwipeout',
        -            'bufwrite', 'bufwritecmd', 'bufwritepost', 'bufwritepre',
        -            'call', 'cat', 'catc', 'catch', 'cmd-event', 'cmdwinenter',
        -            'cmdwinleave', 'colorscheme', 'con', 'confirm', 'cont', 'conti',
        -            'contin', 'continu', 'continue', 'cursorhold', 'cursorholdi',
        -            'cursormoved', 'cursormovedi', 'ec', 'echo', 'echoe',
        -            'echoer', 'echoerr', 'echoh', 'echohl', 'echom', 'echoms',
        -            'echomsg', 'echon', 'el', 'els', 'else', 'elsei', 'elseif',
        -            'en', 'encodingchanged', 'end', 'endfo', 'endfor', 'endi',
        -            'endif', 'endt', 'endtr', 'endtry', 'endw', 'endwh', 'endwhi',
        -            'endwhil', 'endwhile', 'exe', 'exec', 'execu', 'execut',
        -            'execute', 'fileappendcmd', 'fileappendpost', 'fileappendpre',
        -            'filechangedro', 'filechangedshell', 'filechangedshellpost',
        -            'filereadcmd', 'filereadpost', 'filereadpre',
        -            'filetype', 'filewritecmd', 'filewritepost', 'filewritepre',
        -            'filterreadpost', 'filterreadpre', 'filterwritepost',
        -            'filterwritepre', 'fina', 'final', 'finall', 'finally',
        -            'finish', 'focusgained', 'focuslost', 'for', 'fun', 'func',
        -            'funct', 'functi', 'functio', 'function', 'funcundefined',
        -            'guienter', 'guifailed', 'hi', 'highlight', 'if', 'in',
        -            'insertchange', 'insertenter', 'insertleave', 'let', 'lockv',
        -            'lockva', 'lockvar', 'map', 'match', 'menupopup', 'nnoremap',
        -            'quickfixcmdpost', 'quickfixcmdpre', 'remotereply', 'retu',
        -            'retur', 'return', 'sessionloadpost', 'set', 'setlocal',
        -            'shellcmdpost', 'shellfilterpost', 'sourcecmd', 'sourcepre',
        -            'spellfilemissing', 'stdinreadpost', 'stdinreadpre',
        -            'swapexists', 'syntax', 'tabenter', 'tableave', 'termchanged',
        -            'termresponse', 'th', 'thr', 'thro', 'throw', 'tr', 'try', 'unl',
        -            'unle', 'unlet', 'unlo', 'unloc', 'unlock', 'unlockv',
        -            'unlockva', 'unlockvar', 'user', 'usergettingbored',
        -            'vimenter', 'vimleave', 'vimleavepre', 'vimresized', 'wh',
        -            'whi', 'whil', 'while', 'winenter', 'winleave'
        -            ),
        -        2 => array(
        -            '<CR>', '<Esc>', '<F1>', '<F10>',
        -            '<F11>', '<F12>', '<F2>', '<F3>',
        -            '<F4>', '<F5>', '<F6>', '<F7>',
        -            '<F8>', '<F9>', '<cr>', '<silent>',
        -            '-nargs', 'acd', 'ai', 'akm', 'al', 'aleph',
        -            'allowrevins', 'altkeymap', 'ambiwidth', 'ambw',
        -            'anti', 'antialias', 'ar', 'arab', 'arabic',
        -            'arabicshape', 'ari', 'arshape', 'autochdir',
        -            'autoindent', 'autoread', 'autowrite', 'autowriteall',
        -            'aw', 'awa', 'background', 'backspace', 'backup',
        -            'backupcopy', 'backupdir', 'backupext',
        -            'backupskip', 'balloondelay', 'ballooneval', 'balloonexpr',
        -            'bdir', 'bdlay', 'beval', 'bex', 'bexpr', 'bg',
        -            'bh', 'bin', 'binary', 'biosk', 'bioskey',
        -            'bk', 'bkc', 'bl', 'bomb', 'breakat', 'brk',
        -            'bs', 'bsdir', 'bsk', 'bt', 'bufhidden',
        -            'buftype', 'casemap', 'cb',
        -            'ccv', 'cd', 'cdpath', 'cedit', 'cf', 'cfu', 'ch',
        -            'charconvert', 'ci', 'cin', 'cink',
        -            'cinkeys', 'cino', 'cinoptions', 'cinw', 'cinwords',
        -            'clipboard', 'cmdheight', 'cmdwinheight',
        -            'cmp', 'cms', 'co', 'columns', 'com',
        -            'comc', 'comcl', 'comcle', 'comclea', 'comclear', 'comm',
        -            'comma', 'comman', 'command', 'comments', 'commentstring',
        -            'compatible', 'completefunc', 'completeopt',
        -            'consk', 'conskey', 'copyindent',
        -            'cot', 'cp', 'cpo', 'cpoptions', 'cpt',
        -            'cscopepathcomp', 'cscopeprg', 'cscopequickfix', 'cscopetag',
        -            'cscopetagorder', 'cscopeverbose',
        -            'cspc', 'csprg', 'csqf', 'cst', 'csto', 'csverb', 'cuc',
        -            'cul', 'cursorcolumn', 'cursorline', 'cwh', 'debug',
        -            'deco', 'def', 'define', 'delc', 'delco', 'delcom',
        -            'delcombine', 'delcomm', 'delcomman', 'delcommand', 'dex',
        -            'dg', 'dict', 'dictionary', 'diff', 'diffexpr',
        -            'diffopt', 'digraph', 'dip', 'dir', 'directory', 'display',
        -            'dlcomma', 'dy', 'ea', 'ead', 'eadirection',
        -            'eb', 'ed', 'edcompatible', 'ef', 'efm',
        -            'ei', 'ek', 'enc', 'encoding', 'endfun', 'endofline',
        -            'eol', 'ep', 'equalalways', 'equalprg', 'errorbells',
        -            'errorfile', 'errorformat', 'esckeys', 'et',
        -            'eventignore', 'ex', 'expandtab', 'exrc', 'fcl',
        -            'fcs', 'fdc', 'fde', 'fdi', 'fdl', 'fdls', 'fdm',
        -            'fdn', 'fdo', 'fdt', 'fen', 'fenc', 'fencs', 'fex',
        -            'ff', 'ffs', 'fileencoding', 'fileencodings', 'fileformat',
        -            'fileformats', /*'filetype',*/ 'fillchars', 'fk',
        -            'fkmap', 'flp', 'fml', 'fmr', 'fo', 'foldclose',
        -            'foldcolumn', 'foldenable', 'foldexpr', 'foldignore',
        -            'foldlevelstart', 'foldmarker', 'foldmethod', 'foldminlines',
        -            'foldnestmax', 'foldopen', 'formatexpr', 'formatlistpat',
        -            'formatoptions', 'formatprg', 'fp', 'fs', 'fsync', 'ft',
        -            'gcr', 'gd', 'gdefault', 'gfm', 'gfn', 'gfs', 'gfw',
        -            'ghr', 'go', 'gp', 'grepformat', 'grepprg', 'gtl',
        -            'gtt', 'guicursor', 'guifont', 'guifontset',
        -            'guifontwide', 'guiheadroom', 'guioptions', 'guipty',
        -            'guitablabel', 'guitabtooltip', 'helpfile',
        -            'helpheight', 'helplang', 'hf', 'hh', 'hid', 'hidden',
        -            'history', 'hk', 'hkmap', 'hkmapp', 'hkp', 'hl',
        -            'hlg', 'hls', 'hlsearch', 'ic', 'icon', 'iconstring',
        -            'ignorecase', 'im', 'imactivatekey', 'imak', 'imc',
        -            'imcmdline', 'imd', 'imdisable', 'imi', 'iminsert', 'ims',
        -            'imsearch', 'inc', 'include', 'includeexpr',
        -            'incsearch', 'inde', 'indentexpr', 'indentkeys',
        -            'indk', 'inex', 'inf', 'infercase', 'insertmode', 'is', 'isf',
        -            'isfname', 'isi', 'isident', 'isk', 'iskeyword',
        -            'isp', 'isprint', 'joinspaces', 'js', 'key',
        -            'keymap', 'keymodel', 'keywordprg', 'km', 'kmp', 'kp',
        -            'langmap', 'langmenu', 'laststatus', 'lazyredraw', 'lbr',
        -            'lcs', 'linebreak', 'lines', 'linespace', 'lisp',
        -            'lispwords', 'list', 'listchars', 'lm', 'lmap',
        -            'loadplugins', 'lpl', 'ls', 'lsp', 'lw', 'lz', 'ma',
        -            'macatsui', 'magic', 'makeef', 'makeprg', 'mat',
        -            'matchpairs', 'matchtime', 'maxcombine', 'maxfuncdepth',
        -            'maxmapdepth', 'maxmem', 'maxmempattern',
        -            'maxmemtot', 'mco', 'mef', 'menuitems', 'mfd', 'mh',
        -            'mis', 'mkspellmem', 'ml', 'mls', 'mm', 'mmd', 'mmp',
        -            'mmt', 'mod', 'modeline', 'modelines', 'modifiable',
        -            'modified', 'more', 'mouse', 'mousef', 'mousefocus',
        -            'mousehide', 'mousem', 'mousemodel', 'mouses',
        -            'mouseshape', 'mouset', 'mousetime', 'mp', 'mps', 'msm',
        -            'mzq', 'mzquantum', 'nf', 'noacd', 'noai', 'noakm',
        -            'noallowrevins', 'noaltkeymap', 'noanti', 'noantialias',
        -            'noar', 'noarab', 'noarabic', 'noarabicshape', 'noari',
        -            'noarshape', 'noautochdir', 'noautoindent', 'noautoread',
        -            'noautowrite', 'noautowriteall', 'noaw', 'noawa', 'nobackup',
        -            'noballooneval', 'nobeval', 'nobin', 'nobinary', 'nobiosk',
        -            'nobioskey', 'nobk', 'nobl', 'nobomb', 'nobuflisted', 'nocf',
        -            'noci', 'nocin', 'nocindent', 'nocompatible', 'noconfirm',
        -            'noconsk', 'noconskey', 'nocopyindent', 'nocp', 'nocscopetag',
        -            'nocscopeverbose', 'nocst', 'nocsverb', 'nocuc', 'nocul',
        -            'nocursorcolumn', 'nocursorline', 'nodeco', 'nodelcombine',
        -            'nodg', 'nodiff', 'nodigraph', 'nodisable', 'noea', 'noeb',
        -            'noed', 'noedcompatible', 'noek', 'noendofline', 'noeol',
        -            'noequalalways', 'noerrorbells', 'noesckeys', 'noet',
        -            'noex', 'noexpandtab', 'noexrc', 'nofen', 'nofk', 'nofkmap',
        -            'nofoldenable', 'nogd', 'nogdefault', 'noguipty', 'nohid',
        -            'nohidden', 'nohk', 'nohkmap', 'nohkmapp', 'nohkp', 'nohls',
        -            'nohlsearch', 'noic', 'noicon', 'noignorecase', 'noim',
        -            'noimc', 'noimcmdline', 'noimd', 'noincsearch', 'noinf',
        -            'noinfercase', 'noinsertmode', 'nois', 'nojoinspaces',
        -            'nojs', 'nolazyredraw', 'nolbr', 'nolinebreak', 'nolisp',
        -            'nolist', 'noloadplugins', 'nolpl', 'nolz', 'noma',
        -            'nomacatsui', 'nomagic', 'nomh', 'noml', 'nomod',
        -            'nomodeline', 'nomodifiable', 'nomodified', 'nomore',
        -            'nomousef', 'nomousefocus', 'nomousehide', 'nonu',
        -            'nonumber', 'noodev', 'noopendevice', 'nopaste', 'nopi',
        -            'nopreserveindent', 'nopreviewwindow', 'noprompt', 'nopvw',
        -            'noreadonly', 'noremap', 'norestorescreen', 'norevins',
        -            'nori', 'norightleft', 'norightleftcmd', 'norl', 'norlc',
        -            'noro', 'nors', 'noru', 'noruler', 'nosb', 'nosc', 'noscb',
        -            'noscrollbind', 'noscs', 'nosecure', 'nosft', 'noshellslash',
        -            'noshelltemp', 'noshiftround', 'noshortname', 'noshowcmd',
        -            'noshowfulltag', 'noshowmatch', 'noshowmode', 'nosi', 'nosm',
        -            'nosmartcase', 'nosmartindent', 'nosmarttab', 'nosmd',
        -            'nosn', 'nosol', 'nospell', 'nosplitbelow', 'nosplitright',
        -            'nospr', 'nosr', 'nossl', 'nosta', 'nostartofline',
        -            'nostmp', 'noswapfile', 'noswf', 'nota', 'notagbsearch',
        -            'notagrelative', 'notagstack', 'notbi', 'notbidi', 'notbs',
        -            'notermbidi', 'noterse', 'notextauto', 'notextmode',
        -            'notf', 'notgst', 'notildeop', 'notimeout', 'notitle',
        -            'noto', 'notop', 'notr', 'nottimeout', 'nottybuiltin',
        -            'nottyfast', 'notx', 'novb', 'novisualbell', 'nowa',
        -            'nowarn', 'nowb', 'noweirdinvert', 'nowfh', 'nowfw',
        -            'nowildmenu', 'nowinfixheight', 'nowinfixwidth', 'nowiv',
        -            'nowmnu', 'nowrap', 'nowrapscan', 'nowrite', 'nowriteany',
        -            'nowritebackup', 'nows', 'nrformats', 'nu', 'number',
        -            'numberwidth', 'nuw', 'odev', 'oft', 'ofu',
        -            'omnifunc', 'opendevice', 'operatorfunc', 'opfunc',
        -            'osfiletype', 'pa', 'para', 'paragraphs',
        -            'paste', 'pastetoggle', 'patchexpr',
        -            'patchmode', 'path', 'pdev', 'penc', 'pex', 'pexpr',
        -            'pfn', 'ph', 'pheader', 'pi', 'pm', 'pmbcs',
        -            'pmbfn', 'popt', 'preserveindent', 'previewheight',
        -            'previewwindow', 'printdevice', 'printencoding', 'printexpr',
        -            'printfont', 'printheader', 'printmbcharset',
        -            'printmbfont', 'printoptions', 'prompt', 'pt', 'pumheight',
        -            'pvh', 'pvw', 'qe', 'quoteescape', 'rdt',
        -            'readonly', 'redrawtime', 'remap', 'report',
        -            'restorescreen', 'revins', 'ri', 'rightleft', 'rightleftcmd',
        -            'rl', 'rlc', 'ro', 'rs', 'rtp', 'ru',
        -            'ruf', 'ruler', 'rulerformat', 'runtimepath', 'sb', 'sbo',
        -            'sbr', 'sc', 'scb', 'scr', 'scroll', 'scrollbind',
        -            'scrolljump', 'scrolloff', 'scrollopt',
        -            'scs', 'sect', 'sections', 'secure', 'sel',
        -            'selection', 'selectmode', 'sessionoptions', 'sft',
        -            'sh', 'shcf', 'shell', 'shellcmdflag', 'shellpipe',
        -            'shellquote', 'shellredir', 'shellslash',
        -            'shelltemp', 'shelltype', 'shellxquote', 'shiftround',
        -            'shiftwidth', 'shm', 'shortmess', 'shortname',
        -            'showbreak', 'showcmd', 'showfulltag', 'showmatch',
        -            'showmode', 'showtabline', 'shq', 'si', 'sidescroll',
        -            'sidescrolloff', 'siso', 'sj', 'slm', 'sm', 'smartcase',
        -            'smartindent', 'smarttab', 'smc', 'smd', 'sn',
        -            'so', 'softtabstop', 'sol', 'sp', 'spc', 'spell',
        -            'spellcapcheck', 'spellfile', 'spelllang',
        -            'spf', 'spl', 'splitbelow', 'splitright', 'spr',
        -            'sps', 'sr', 'srr', 'ss', 'ssl', 'ssop', 'st', 'sta',
        -            'stal', 'startofline', 'statusline', 'stl', 'stmp',
        -            'sts', 'su', 'sua', 'suffixes', 'suffixesadd', 'sw',
        -            'swapfile', 'swapsync', 'swb', 'swf', 'switchbuf',
        -            'sws', 'sxq', 'syn', 'synmaxcol', 'ta',
        -            'tabline', 'tabpagemax', 'tabstop', 'tag',
        -            'tagbsearch', 'taglength', 'tagrelative', 'tags', 'tagstack',
        -            'tal', 'tb', 'tbi', 'tbidi', 'tbis', 'tbs',
        -            'tenc', 'term', 'termbidi', 'termencoding', 'terse',
        -            'textauto', 'textmode', 'textwidth', 'tf', 'tgst',
        -            'thesaurus', 'tildeop', 'timeout', 'timeoutlen',
        -            'title', 'titlelen', 'titleold', 'titlestring',
        -            'tl', 'tm', 'to', 'toolbar', 'toolbariconsize', 'top',
        -            'tpm', 'ts', 'tsl', 'tsr', 'ttimeout',
        -            'ttimeoutlen', 'ttm', 'tty', 'ttybuiltin', 'ttyfast', 'ttym',
        -            'ttymouse', 'ttyscroll', 'ttytype', 'tw', 'tx', 'uc',
        -            'ul', 'undolevels', 'updatecount', 'updatetime', 'ut',
        -            'vb', 'vbs', 'vdir', 've', 'verbose', 'verbosefile',
        -            'vfile', 'vi', 'viewdir', 'viewoptions', 'viminfo',
        -            'virtualedit', 'visualbell', 'vop', 'wa', 'wak',
        -            'warn', 'wb', 'wc', 'wcm', 'wd', 'weirdinvert', 'wfh',
        -            'wfw', /*'wh',*/ 'whichwrap', 'wi', 'wig', 'wildchar',
        -            'wildcharm', 'wildignore', 'wildmenu',
        -            'wildmode', 'wildoptions', 'wim', 'winaltkeys', 'window',
        -            'winfixheight', 'winfixwidth', 'winheight',
        -            'winminheight', 'winminwidth', 'winwidth', 'wiv',
        -            'wiw', 'wm', 'wmh', 'wmnu', 'wmw', 'wop', 'wrap',
        -            'wrapmargin', 'wrapscan', 'write', 'writeany',
        -            'writebackup', 'writedelay', 'ws', 'ww'
        -            ),
        -        3 => array(
        -            'BufAdd', 'BufCreate', 'BufDelete', 'BufEnter', 'BufFilePost',
        -            'BufFilePre', 'BufHidden', 'BufLeave', 'BufNew', 'BufNewFile',
        -            'BufRead', 'BufReadCmd', 'BufReadPost', 'BufReadPre',
        -            'BufUnload', 'BufWinEnter', 'BufWinLeave', 'BufWipeout',
        -            'BufWrite', 'BufWriteCmd', 'BufWritePost', 'BufWritePre',
        -            'Cmd-event', 'CmdwinEnter', 'CmdwinLeave', 'ColorScheme',
        -            'CursorHold', 'CursorHoldI', 'CursorMoved', 'CursorMovedI',
        -            'EncodingChanged', 'FileAppendCmd', 'FileAppendPost',
        -            'FileAppendPre', 'FileChangedRO', 'FileChangedShell',
        -            'FileChangedShellPost', 'FileEncoding', 'FileReadCmd',
        -            'FileReadPost', 'FileReadPre', 'FileType',
        -            'FileWriteCmd', 'FileWritePost', 'FileWritePre',
        -            'FilterReadPost', 'FilterReadPre', 'FilterWritePost',
        -            'FilterWritePre', 'FocusGained', 'FocusLost', 'FuncUndefined',
        -            'GUIEnter', 'GUIFailed', 'InsertChange', 'InsertEnter',
        -            'InsertLeave', 'MenuPopup', 'QuickFixCmdPost',
        -            'QuickFixCmdPre', 'RemoteReply', 'SessionLoadPost',
        -            'ShellCmdPost', 'ShellFilterPost', 'SourceCmd',
        -            'SourcePre', 'SpellFileMissing', 'StdinReadPost',
        -            'StdinReadPre', 'SwapExists', 'Syntax', 'TabEnter',
        -            'TabLeave', 'TermChanged', 'TermResponse', 'User',
        -            'UserGettingBored', 'VimEnter', 'VimLeave', 'VimLeavePre',
        -            'VimResized', 'WinEnter', 'WinLeave', 'abs', 'add', 'append',
        -            'argc', 'argidx', 'argv', 'atan', 'browse', 'browsedir',
        -            'bufexists', 'buflisted', 'bufloaded', 'bufname', 'bufnr',
        -            'bufwinnr', 'byte2line', 'byteidx', 'ceil', 'changenr',
        -            'char2nr', 'cindent', 'clearmatches', 'col', 'complete',
        -            'complete_add', 'complete_check', 'copy',
        -            'cos', 'count', 'cscope_connection', 'cursor', 'deepcopy',
        -            'delete', 'did_filetype', 'diff_filler', 'diff_hlID',
        -            'empty', 'escape', 'eval', 'eventhandler', 'executable',
        -            'exists', 'expand', 'extend', 'feedkeys', 'filereadable',
        -            'filewritable', 'filter', 'finddir', 'findfile', 'float2nr',
        -            'floor', 'fnameescape', 'fnamemodify', 'foldclosed',
        -            'foldclosedend', 'foldlevel', 'foldtext', 'foldtextresult',
        -            'foreground', 'garbagecollect', 'get', 'getbufline',
        -            'getbufvar', 'getchar', 'getcharmod', 'getcmdline',
        -            'getcmdpos', 'getcmdtype', 'getcwd', 'getfontname',
        -            'getfperm', 'getfsize', 'getftime', 'getftype', 'getline',
        -            'getloclist', 'getmatches', 'getpid', 'getpos', 'getqflist',
        -            'getreg', 'getregtype', 'gettabwinvar', 'getwinposx',
        -            'getwinposy', 'getwinvar', 'glob', 'globpath', 'has',
        -            'has_key', 'haslocaldir', 'hasmapto', 'histadd', 'histdel',
        -            'histget', 'histnr', 'hlID', 'hlexists', 'hostname', 'iconv',
        -            'indent', 'index', 'input', 'inputdialog', 'inputlist',
        -            'inputrestore', 'inputsave', 'inputsecret', 'insert',
        -            'isdirectory', 'islocked', 'items', 'join', 'keys', 'len',
        -            'libcall', 'libcallnr', 'line', 'line2byte', 'lispindent',
        -            'localtime', 'log10', 'maparg', 'mapcheck', 'matchadd',
        -            'matcharg', 'matchdelete', 'matchend', 'matchlist',
        -            'matchstr', 'max', 'min', 'mkdir', 'mode', 'nextnonblank',
        -            'nr2char', 'off', 'on', 'pathshorten', 'plugin', 'pow',
        -            'prevnonblank', 'printf', 'pumvisible', 'range', 'readfile',
        -            'reltime', 'reltimestr', 'remote_expr', 'remote_foreground',
        -            'remote_peek', 'remote_read', 'remote_send', 'remove',
        -            'rename', 'repeat', 'resolve', 'reverse', 'round', 'search',
        -            'searchdecl', 'searchpair', 'searchpairpos', 'searchpos',
        -            'server2client', 'serverlist', 'setbufvar', 'setcmdpos',
        -            'setline', 'setloclist', 'setmatches', 'setpos', 'setqflist',
        -            'setreg', 'settabwinvar', 'setwinvar', 'shellescape',
        -            'simplify', 'sin', 'sort', 'soundfold', 'spellbadword',
        -            'spellsuggest', 'split', 'sqrt', 'str2float', 'str2nr',
        -            'strftime', 'stridx', 'string', 'strlen', 'strpart',
        -            'strridx', 'strtrans', 'submatch', 'substitute',
        -            'synID', 'synIDattr', 'synIDtrans', 'synstack', 'system',
        -            'tabpagebuflist', 'tabpagenr', 'tabpagewinnr', 'tagfiles',
        -            'taglist', 'tempname', 'tolower', 'toupper', 'trunc',
        -            'type', 'values', 'virtcol', 'visualmode', 'winbufnr',
        -            'wincol', 'winline', 'winnr', 'winrestcmd',
        -            'winrestview', 'winsaveview', 'writefile'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '!', '%', '&', '*', '|', '/', '<', '>',
        -        '^', '-', '+', '~', '?', ':', '$', '@', '.'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => true,
        -        2 => true,
        -        3 => true
        -        ),
        -    'STYLES' => array(
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -//            2 => 'color: #009966; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => ''
        -            ),
        -        'KEYWORDS' => array(
        -            1 => 'color: #804040;',
        -            2 => 'color: #668080;',
        -            3 => 'color: #25BB4D;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #000000;',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000000; font-weight:bold;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #C5A22D;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;'
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false, //Save some time as OO identifiers aren't used
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php
        deleted file mode 100644
        index e3cd748f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php
        +++ /dev/null
        @@ -1,454 +0,0 @@
        - 'Visual Fox Pro',
        -    'COMMENT_SINGLE' => array(1 => "//", 2 => "\n*"),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'Case', 'Else', '#Else', 'Then',
        -            'Endcase', 'Enddefine', 'Enddo', 'Endfor', 'Endfunc', 'Endif', 'Endprintjob',
        -            'Endproc', 'Endscan', 'Endtext', 'Endwith', '#Endif',
        -            '#Elif','#Define','#If','#Include',
        -            '#Itsexpression','#Readclauses','#Region','#Section','#Undef','#Wname',
        -            'Define','Do',
        -            'For','Function','Hidden',
        -            'If','Local','Lparameter','Lparameters','Next','Otherwise',
        -            'Parameters','Printjob','Procedure','Protected','Public','Scan',
        -            'Text','While','With','Abs','Accept','Access','Aclass','Acopy',
        -            'Acos','Adatabases','Adbobjects','Addbs','Addrelationtoenv','Addtabletoenv',
        -            'Adel','Adir','Aelement','Aerror','Afields','Afont',
        -            'Agetclass','Agetfileversion','Ains','Ainstance','Alen','Align',
        -            'Alines','Alltrim','Alter','Amembers','Amouseobj','Anetresources',
        -            'Ansitooem','Append','Aprinters','Ascan','Aselobj','Asin',
        -            'Asort','Assert','Asserts','Assist','Asubscript','Asynchronous',
        -            'At_c','Atan','Atc','Atcc','Atcline','Atline',
        -            'Atn2','Aused','Autoform','Autoreport','Avcxclasses','Average',
        -            'BarCount','BarPrompt','BatchMode','BatchUpdateCount','Begin','BellSound',
        -            'BinToC','Bitand','Bitclear','Bitlshift','Bitnot',
        -            'Bitor','Bitrshift','Bitset','Bittest','Bitxor','Bof',
        -            'Browse','BrowseRefresh','Buffering','BuilderLock','COMArray','COMReturnError',
        -            'CToBin','Calculate','Call','Capslock','Cd','Cdow',
        -            'Ceiling','Central','Change','Char','Chdir','Chr',
        -            'Chrsaw','Chrtran','Chrtranc','Close','Cmonth','Cntbar',
        -            'Cntpad','Col','Comclassinfo','CommandTargetQuery','Compile','Completed',
        -            'Compobj','Compute','Concat','ConnectBusy','ConnectHandle','ConnectName',
        -            'ConnectString','ConnectTimeOut','ContainerReleaseType','Continue','Copy','Cos',
        -            'Cot','Count','Coverage','Cpconvert','Cpcurrent','Cpdbf',
        -            'Cpnotrans','Create','CreateBinary','Createobject','Createobjectex','Createoffline',
        -            'CrsBuffering','CrsFetchMemo','CrsFetchSize','CrsMaxRows','CrsMethodUsed','CrsNumBatch',
        -            'CrsShareConnection','CrsUseMemoSize','CrsWhereClause','Ctod','Ctot',
        -            'Curdate','Curdir','CurrLeft','CurrSymbol','CursorGetProp','CursorSetProp',
        -            'Curtime','Curval','DBGetProp','DBSetProp','DB_BufLockRow','DB_BufLockTable',
        -            'DB_BufOff','DB_BufOptRow','DB_BufOptTable','DB_Complette','DB_DeleteInsert','DB_KeyAndModified',
        -            'DB_KeyAndTimestamp','DB_KeyAndUpdatable','DB_LocalSQL','DB_NoPrompt','DB_Prompt','DB_RemoteSQL',
        -            'DB_TransAuto','DB_TransManual','DB_TransNone','DB_Update','Datetime','Day',
        -            'Dayname','Dayofmonth','Dayofweek','Dayofyear','Dbalias','Dbused',
        -            'Ddeaborttrans','Ddeadvise','Ddeenabled','Ddeexecute','Ddeinitiate','Ddelasterror',
        -            'Ddepoke','Dderequest','Ddesetoption','Ddesetservice','Ddesettopic','Ddeterminate',
        -            'Debugout','Declare','DefOLELCid','DefaultValue','Defaultext','Degrees',
        -            'DeleteTrigger','Desc','Description','Difference','Dimension','Dir',
        -            'Directory','Diskspace','DispLogin','DispWarnings','Display','Dll',
        -            'Dmy','DoDefault','DoEvents','Doc','Dow',
        -            'Drivetype','Drop','Dropoffline','Dtoc','Dtor','Dtos',
        -            'Dtot','DynamicInputMask','Each','Edit','Eject','Elif',
        -            'End','Eof','Erase','Evaluate','Event','Eventtracking',
        -            'Exclude','Exclusive','Exit','Exp','Export','External',
        -            'FDate','FTime','Fchsize','Fclose','Fcount','Fcreate',
        -            'Feof','Ferror','FetchMemo','FetchSize','Fflush','Fgets',
        -            'Filer','Filetostr','Find','Fklabel','Fkmax','Fldlist',
        -            'Flock','Floor','Flush','Fontmetric','Fopen','Forceext',
        -            'Forcepath','FormSetClass','FormSetLib','FormsClass','FormsLib','Found',
        -            'FoxPro','Foxcode','Foxdoc','Foxgen','Foxgraph','Foxview',
        -            'Fputs','Fread','French','Fseek','Fsize','Fv',
        -            'Fwrite','Gather','German','GetPem','Getbar','Getcolor',
        -            'Getcp','Getdir','Getenv','Getexpr','Getfile','Getfldstate',
        -            'Getfont','Gethost','Getnextmodified','Getobject','Getpad','Getpict',
        -            'Getprinter','Go','Gomonth','Goto','Graph','GridHorz',
        -            'GridShow','GridShowPos','GridSnap','GridVert','Help','HelpOn',
        -            'HelpTo','HighLightRow','Home','Hour','IMEStatus','IdleTimeOut',
        -            'Idxcollate','Ifdef','Ifndef','Iif','Import','Include',
        -            'Indbc','Index','Indexseek','Inkey','Inlist','Input',
        -            'Insert','InsertTrigger','Insmode','IsBlank','IsFLocked','IsLeadByte',
        -            'IsMouse','IsNull','IsRLocked','Isalpha','Iscolor','Isdigit',
        -            'IsExclusive','Ishosted','IsLower','IsReadOnly',
        -            'IsUpper','Italian','Japan','Join','Justdrive','Justext',
        -            'Justfname','Justpath','Juststem','KeyField','KeyFieldList','Keyboard'
        -            ),
        -        2 => array('Keymatch','LastProject','Lastkey','Lcase','Leftc','Len',
        -            'Lenc','Length','Likec','Lineno','LoadPicture',
        -            'Locate','Locfile','Log','Log10','Logout','Lookup',
        -            'Loop','Lower','Ltrim','Lupdate','Mail','MaxRecords',
        -            'Mcol','Md','Mdown','Mdx','Mdy','Memlines',
        -            'Menu','Messagebox','Minute','Mkdir','Mline','Modify',
        -            'Month','Monthname','Mouse','Mrkbar','Mrkpad','Mrow',
        -            'Mtdll','Mton','Mwindow','Native','Ndx','Network',
        -            'NoFilter','Nodefault','Normalize','Note','Now','Ntom',
        -            'NullString','Numlock','Nvl','ODBChdbc','ODBChstmt','OLEDropTextInsertion',
        -            'OLELCid','Objnum','Objref','Objtoclient','Objvar','Occurs',
        -            'Oemtoansi','Oldval','OlePublic','Olereturnerror','On','Open',
        -            'Oracle','Order','Os','Outer','PCount','Pack',
        -            'PacketSize','Padc','Padl','Padr','Payment','Pcol',
        -            'PemStatus','Pi','Pivot','Play','Pop','Popup',
        -            'Power','PrimaryKey','Printstatus','Private','Prmbar','Prmpad',
        -            'ProjectClick','Proper','Prow','Prtinfo','Push','Putfile',
        -            'Pv','Qpr','Quater','QueryTimeOut','Quit','Radians',
        -            'Rand','Rat','Ratc','Ratline','Rd','Rdlevel',
        -            'Read','Readkey','Recall','Reccount','RecentlyUsedFiles','Recno',
        -            'Recsize','Regional','Reindex','RelatedChild','RelatedTable','RelatedTag',
        -            'Remove','Rename','Repeat','Replace','Replicate','Report',
        -            'ResHeight','ResWidth','ResourceOn','ResourceTo','Resources','Restore',
        -            'Resume','Retry','Return','Revertoffline','Rgbscheme','Rightc',
        -            'Rlock','Rmdir','Rollback','Round','Rtod','Rtrim',
        -            'RuleExpression','RuleText','Run','Runscript','Rview','SQLAsynchronous',
        -            'SQLBatchMode','SQLCancel','SQLColumns','SQLConnect','SQLConnectTimeOut','SQLDisconnect',
        -            'SQLDispLogin','SQLDispWarnings','SQLExec','SQLGetProp','SQLIdleTimeOut','SQLMoreResults',
        -            'SQLPrepare','SQLQueryTimeOut','SQLSetProp','SQLTables','SQLTransactions','SQLWaitTime',
        -            'Save','SavePicture','ScaleUnits','Scatter','Scols',
        -            'Scroll','Sec','Second','Seek','Select','SendUpdates',
        -            'Set','SetDefault','Setfldstate','Setup','ShareConnection','ShowOLEControls',
        -            'ShowOLEInsertable','ShowVCXs','Sign','Sin','Size','SizeBox',
        -            'Skpbar','Skppad','Sort','Soundex','SourceName','Sqlcommit',
        -            'Sqll','Sqlrollback','Sqlstringconnect','Sqrt','Srows','StatusBar',
        -            'Store','Str','Strconv','Strtofile','Strtran','Stuff',
        -            'Stuffc','Substr','Substrc','Substring','Sum','Suspend',
        -            'Sys','Sysmetric','TabOrdering','Table','TableRefresh','Tablerevert',
        -            'Tableupdate','TagCount','TagNo','Tan','Target','This',
        -            'Thisform','Thisformset','Timestamp','Timestampdiff','Total','Transactions',
        -            'Transform','Trim','Truncate','Ttoc','Ttod','Txnlevel',
        -            'Txtwidth','Type','Ucase','Undefine','Unlock','Unpack',
        -            'Updatable','UpdatableFieldList','Update','UpdateName','UpdateNameList','UpdateTrigger',
        -            'UpdateType','Updated','Upper','Upsizing','Usa','Use',
        -            'UseMemoSize','Used','Val','Validate','Varread','Vartype',
        -            'Version','VersionLanguage','Wait','WaitTime','Wborder','Wchild',
        -            'Wcols','Week','Wexist','Wfont','WhereType','Windcmd',
        -            'Windhelp','Windmemo','Windmenu','Windmodify','Windquery','Windscreen',
        -            'Windsnip','Windstproc','WizardPrompt','Wlast','Wlcol','Wlrow',
        -            'Wmaximum','Wminimum','Wontop','Woutput','Wparent','Wread',
        -            'Wrows','Wtitle','Wvisible','Year','Zap','_Alignment',
        -            '_Asciicols','_Asciirows','_Assist','_Beautify','_Box','_Browser',
        -            '_Builder','_Calcmem','_Calcvalue','_Cliptext','_Converter','_Coverage',
        -            '_Curobj','_Dblclick','_Diarydate','_Dos','_Foxdoc','_Foxgraph',
        -            '_Gallery','_Gengraph','_Genhtml','_Genmenu','_Genpd','_Genscrn',
        -            '_Genxtab','_Getexpr','_Include','_Indent','_Lmargin','_Mac',
        -            '_Mbr_appnd','_Mbr_cpart','_Mbr_delet','_Mbr_font','_Mbr_goto','_Mbr_grid',
        -            '_Mbr_link','_Mbr_mode','_Mbr_mvfld','_Mbr_mvprt','_Mbr_seek','_Mbr_sp100',
        -            '_Mbr_sp200','_Mbr_szfld','_Mbrowse','_Mda_appnd','_Mda_avg','_Mda_brow',
        -            '_Mda_calc','_Mda_copy','_Mda_count','_Mda_label','_Mda_pack','_Mda_reprt',
        -            '_Mda_rindx','_Mda_setup','_Mda_sort','_Mda_sp100','_Mda_sp200','_Mda_sp300',
        -            '_Mda_sum','_Mda_total','_Mdata','_Mdiary','_Med_clear','_Med_copy',
        -            '_Med_cut','_Med_cvtst','_Med_find','_Med_finda','_Med_goto','_Med_insob',
        -            '_Med_link','_Med_obj','_Med_paste','_Med_pref','_Med_pstlk','_Med_redo',
        -            '_Med_repl','_Med_repla','_Med_slcta','_Med_sp100','_Med_sp200','_Med_sp300',
        -            '_Med_sp400','_Med_sp500','_Med_undo','_Medit','_Mfi_clall','_Mfi_close',
        -            '_Mfi_export','_Mfi_import','_Mfi_new','_Mfi_open','_Mfi_pgset','_Mfi_prevu',
        -            '_Mfi_print','_Mfi_quit','_Mfi_revrt','_Mfi_savas','_Mfi_save','_Mfi_send',
        -            '_Mfi_setup','_Mfi_sp100','_Mfi_sp200','_Mfi_sp300','_Mfi_sp400','_Mfile',
        -            '_Mfiler','_Mfirst','_Mlabel','_Mlast','_Mline','_Mmacro',
        -            '_Mmbldr','_Mpr_beaut','_Mpr_cancl','_Mpr_compl','_Mpr_do','_Mpr_docum',
        -            '_Mpr_formwz','_Mpr_gener','_Mpr_graph','_Mpr_resum','_Mpr_sp100','_Mpr_sp200',
        -            '_Mpr_sp300','_Mpr_suspend','_Mprog','_Mproj','_Mrc_appnd','_Mrc_chnge',
        -            '_Mrc_cont','_Mrc_delet','_Mrc_goto','_Mrc_locat','_Mrc_recal','_Mrc_repl',
        -            '_Mrc_seek','_Mrc_sp100','_Mrc_sp200','_Mrecord','_Mreport','_Mrqbe',
        -            '_Mscreen','_Msm_data','_Msm_edit','_Msm_file','_Msm_format','_Msm_prog',
        -            '_Msm_recrd','_Msm_systm','_Msm_text','_Msm_tools','_Msm_view','_Msm_windo',
        -            '_Mst_about','_Mst_ascii','_Mst_calcu','_Mst_captr','_Mst_dbase','_Mst_diary',
        -            '_Mst_filer','_Mst_help','_Mst_hphow','_Mst_hpsch','_Mst_macro','_Mst_office',
        -            '_Mst_puzzl','_Mst_sp100','_Mst_sp200','_Mst_sp300','_Mst_specl','_Msysmenu',
        -            '_Msystem','_Mtable','_Mtb_appnd','_Mtb_cpart','_Mtb_delet','_Mtb_delrc',
        -            '_Mtb_goto','_Mtb_link','_Mtb_mvfld','_Mtb_mvprt','_Mtb_props','_Mtb_recal',
        -            '_Mtb_sp100','_Mtb_sp200','_Mtb_sp300','_Mtb_sp400','_Mtb_szfld','_Mwi_arran',
        -            '_Mwi_clear','_Mwi_cmd','_Mwi_color','_Mwi_debug','_Mwi_hide','_Mwi_hidea',
        -            '_Mwi_min','_Mwi_move','_Mwi_rotat','_Mwi_showa','_Mwi_size','_Mwi_sp100',
        -            '_Mwi_sp200','_Mwi_toolb','_Mwi_trace','_Mwi_view','_Mwi_zoom','_Mwindow',
        -            '_Mwizards','_Mwz_all','_Mwz_form','_Mwz_foxdoc','_Mwz_import','_Mwz_label',
        -            '_Mwz_mail','_Mwz_pivot','_Mwz_query','_Mwz_reprt','_Mwz_setup','_Mwz_table',
        -            '_Mwz_upsizing','_Netware','_Oracle','_Padvance','_Pageno','_Pbpage',
        -            '_Pcolno','_Pcopies','_Pdparms','_Pdriver','_Pdsetup','_Pecode',
        -            '_Peject','_Pepage','_Pform','_Plength','_Plineno','_Ploffset',
        -            '_Ppitch','_Pquality','_Pretext','_Pscode','_Pspacing','_Pwait',
        -            '_Rmargin','_Runactivedoc','_Samples','_Screen','_Shell','_Spellchk',
        -            '_Sqlserver','_Startup','_Tabs','_Tally','_Text','_Throttle',
        -            '_Transport','_Triggerlevel','_Unix','_WebDevOnly','_WebMenu','_WebMsftHomePage',
        -            '_WebVFPHomePage','_WebVfpOnlineSupport','_Windows','_Wizard','_Wrap','_scctext',
        -            '_vfp','Additive','After','Again','Aindent','Alignright',
        -            'All','Alt','Alternate','And','Ansi','Any',
        -            'Aplabout','App','Array','As','Asc','Ascending',
        -            'Ascii','At','Attributes','Automatic','Autosave','Avg',
        -            'Bar','Before','Bell','Between','Bitmap','Blank',
        -            'Blink','Blocksize','Border','Bottom','Brstatus','Bucket',
        -            'Buffers','By','Candidate','Carry','Cascade','Catalog',
        -            'Cdx','Center','Century','Cga','Character','Check',
        -            'Classlib','Clock','Cnt','Codepage','Collate','Color',
        -            'Com1','Com2','Command','Compact','Compatible','Compress',
        -            'Confirm','Connection','Connections','Connstring','Console','Copies',
        -            'Cpcompile','Cpdialog','Csv','Currency','Cycle','Databases',
        -            'Datasource','Date','Db4','Dbc','Dbf','Dbmemo3',
        -            'Debug','Decimals','Defaultsource','Deletetables','Delimited','Delimiters',
        -            'Descending','Design','Development','Device','Dif','Disabled',
        -            'Distinct','Dlls','Dohistory','Dos','Dosmem','Double',
        -            'Driver','Duplex','Echo','Editwork','Ega25','Ega43',
        -            'Ems','Ems64','Encrypt','Encryption','Environment','Escape',
        -            'Events','Exact','Except','Exe','Exists','Expression',
        -            'Extended','F','Fdow','Fetch','Field','Fields',
        -            'File','Files','Fill','Fixed','Float','Foldconst',
        -            'Font','Footer','Force','Foreign','Fox2x','Foxplus',
        -            'Free','Freeze','From','Fullpath','Fw2','Fweek',
        -            'Get','Gets','Global','Group','Grow','Halfheight',
        -            'Having','Heading','Headings','Helpfilter','History','Hmemory',
        -            'Hours','Id','In','Indexes','Information','Instruct',
        -            'Int','Integer','Intensity','Intersect','Into','Is',
        -            'Isometric','Key','Keycolumns','Keycomp','Keyset','Last',
        -            'Ledit','Level','Library','Like','Linked','Lock',
        -            'Logerrors','Long','Lpartition','Mac','Macdesktop','Machelp',
        -            'Mackey','Macros','Mark','Master','Max','Maxmem',
        -            'Mdi','Memlimit','Memory','Memos','Memowidth','Memvar',
        -            'Menus','Messages','Middle','Min','Minimize','Minus',
        -            'Mod','Modal','Module','Mono43','Movers','Multilocks',
        -            'Mvarsiz','Mvcount','N','Near','Negotiate','Noalias',
        -            'Noappend','Noclear','Noclose','Noconsole','Nocptrans','Nodata',
        -            'Nodebug','Nodelete','Nodup','Noedit','Noeject','Noenvironment',
        -            'Nofloat','Nofollow','Nogrow','Noinit','Nolgrid','Nolink',
        -            'Nolock','Nomargin','Nomdi','Nomenu','Nominimize','Nomodify'
        -            ),
        -        3 => array('Nomouse','None','Nooptimize','Nooverwrite','Noprojecthook','Noprompt',
        -            'Noread','Norefresh','Norequery','Norgrid','Norm','Normal',
        -            'Nosave','Noshadow','Noshow','Nospace','Not','Notab',
        -            'Notify','Noupdate','Novalidate','Noverify','Nowait','Nowindow',
        -            'Nowrap','Nozoom','Npv','Null','Number','Objects',
        -            'Odometer','Of','Off','Oleobjects','Only','Optimize',
        -            'Or','Orientation','Output','Outshow','Overlay','Overwrite',
        -            'Pad','Palette','Paperlength','Papersize','Paperwidth','Password',
        -            'Path','Pattern','Pause','Pdox','Pdsetup','Pen',
        -            'Pfs','Pixels','Plain','Popups','Precision','Preference',
        -            'Preview','Primary','Printer','Printquality','Procedures','Production',
        -            'Program','Progwork','Project','Prompt','Query','Random',
        -            'Range','Readborder','Readerror','Record','Recover','Redit',
        -            'Reference','References','Relative','Remote','Reprocess','Resource',
        -            'Rest','Restrict','Rgb','Right','Row','Rowset',
        -            'Rpd','Runtime','Safety','Same','Sample','Say',
        -            'Scale','Scheme','Scoreboard','Screen','Sdf','Seconds',
        -            'Selection','Shadows','Shared','Sheet','Shell','Shift',
        -            'Shutdown','Single','Some','Sortwork','Space','Sql',
        -            'Standalone','Status','Std','Step','Sticky','String',
        -            'Structure','Subclass','Summary','Sylk','Sysformats','Sysmenus',
        -            'System','T','Tab','Tables','Talk','Tedit',
        -            'Textmerge','Time','Timeout','Titles','Tmpfiles','To',
        -            'Topic','Transaction','Trap','Trbetween','Trigger','Ttoption',
        -            'Typeahead','Udfparms','Union','Unique','Userid','Users',
        -            'Values','Var','Verb','Vga25','Vga50','Views',
        -            'Volume','Where','Windows','Wk1','Wk3','Wks',
        -            'Workarea','Wp','Wr1','Wrap','Wrk','Xcmdfile',
        -            'Xl5','Xl8','Xls','Y','Yresolution','Zoom',
        -            'Activate','ActivateCell','Add','AddColumn','AddItem','AddListItem',
        -            'AddObject','AddProperty','AddToSCC','AfterBuild','AfterCloseTables','AfterDock',
        -            'AfterRowColChange','BeforeBuild','BeforeDock','BeforeOpenTables','BeforeRowColChange','Box',
        -            'Build','CheckIn','CheckOut','Circle','Clear','ClearData',
        -            'Cleanup','Click','CloneObject','CloseEditor','CloseTables','Cls',
        -            'CommandTargetExec','CommandTargetQueryStas','ContainerRelease','DataToClip','DblClick','Deactivate',
        -            'Delete','DeleteColumn','Deleted','Destroy','DoCmd','Dock',
        -            'DoScroll','DoVerb','DownClick','Drag','DragDrop','DragOver',
        -            'DropDown','Draw','EnterFocus','Error','ErrorMessage','Eval',
        -            'ExitFocus','FormatChange','GetData','GetFormat','GetLatestVersion','GoBack',
        -            'GotFocus','GoForward','GridHitTest','Hide','HideDoc','IndexToItemId',
        -            'Init','InteractiveChange','Item','ItemIdToIndex','KeyPress','Line',
        -            'Load','LostFocus','Message','MiddleClick','MouseDown','MouseMove',
        -            'MouseUp','MouseWheel','Move','Moved','NavigateTo','Newobject',
        -            'OLECompleteDrag','OLEDrag','OLEDragDrop','OLEDragOver','OLEGiveFeedback','OLESetData',
        -            'OLEStartDrag','OpenEditor','OpenTables','Paint','Point','Print',
        -            'ProgrammaticChange','PSet','QueryAddFile','QueryModifyFile','QueryRemoveFile','QueryRunFile',
        -            'QueryUnload','RangeHigh','RangeLow','ReadActivate','ReadExpression','ReadDeactivate',
        -            'ReadMethod','ReadShow','ReadValid','ReadWhen','Refresh','Release',
        -            'RemoveFromSCC','RemoveItem','RemoveListItem','RemoveObject','Requery','RequestData',
        -            'Reset','ResetToDefault','Resize','RightClick','SaveAs','SaveAsClass',
        -            'Scrolled','SetAll','SetData','SetFocus','SetFormat','SetMain',
        -            'SetVar','SetViewPort','ShowDoc','ShowWhatsThis','TextHeight','TextWidth',
        -            'Timer','UIEnable','UnDock','UndoCheckOut','Unload','UpClick',
        -            'Valid','WhatsThisMode','When','WriteExpression','WriteMethod','ZOrder',
        -            'ATGetColors','ATListColors','Accelerate','ActiveColumn','ActiveControl','ActiveForm',
        -            'ActiveObjectId','ActivePage','ActiveProject','ActiveRow','AddLineFeeds','Alias',
        -            'Alignment','AllowAddNew','AllowHeaderSizing','AllowResize','AllowRowSizing','AllowTabs',
        -            'AlwaysOnTop','Application','AutoActivate','AutoCenter','AutoCloseTables','AutoIncrement',
        -            'AutoOpenTables','AutoRelease','AutoSize','AutoVerbMenu','AutoYield','AvailNum',
        -            'BackColor','BackStyle','BaseClass','BorderColor','BorderStyle','BorderWidth',
        -            'Bound','BoundColumn','BoundTo','BrowseAlignment','BrowseCellMarg','BrowseDestWidth',
        -            'BufferMode','BufferModeOverride','BuildDateTime','ButtonCount','ButtonIndex','Buttons',
        -            'CLSID','CanAccelerate','CanGetFocus','CanLoseFocus','Cancel','Caption',
        -            'ChildAlias','ChildOrder','Class','ClassLibrary','ClipControls','ClipRect',
        -            'Closable','ColorScheme','ColorSource','ColumnCount','ColumnHeaders','ColumnLines',
        -            'ColumnOrder','ColumnWidths','Columns','Comment','ContinuousScroll','ControlBox',
        -            'ControlCount','ControlIndex','ControlSource','Controls','CurrentControl','CurrentX',
        -            'CurrentY','CursorSource','Curvature','DataSession','DataSessionId','DataSourceObj',
        -            'DataType','Database','DateFormat','DateMark','DefButton','DefButtonOrig',
        -            'DefHeight','DefLeft','DefTop','DefWidth','Default','DefaultFilePath',
        -            'DefineWindows','DeleteMark','Desktop','Dirty','DisabledBackColor','DisabledByEOF',
        -            'DisabledForeColor','DisabledItemBackColor','DisabledItemForeColor','DisabledPicture','DispPageHeight','DispPageWidth',
        -            'DisplayCount','DisplayValue','DoCreate','DockPosition','Docked','DocumentFile',
        -            'DownPicture','DragIcon','DragMode','DragState','DrawMode','DrawStyle',
        -            'DrawWidth','DynamicAlignment','DynamicBackColor','DynamicCurrentControl','DynamicFontBold','DynamicFontItalic',
        -            'DynamicFontName','DynamicFontOutline','DynamicFontShadow','DynamicFontSize','DynamicFontStrikethru','DynamicFontUnderline',
        -            'DynamicForeColor','EditFlags','Enabled','EnabledByReadLock','Encrypted','EnvLevel',
        -            'ErasePage','FileClass','FileClassLibrary','FillColor','FillStyle','Filter',
        -            'FirstElement','FontBold','FontItalic','FontName','FontOutline','FontShadow',
        -            'FontSize','FontStrikethru','FontUnderline','ForceFocus','ForeColor','FormCount',
        -            'FormIndex','FormPageCount','FormPageIndex','Format','Forms','FoxFont',
        -            'FullName','GoFirst','GoLast','GridLineColor','GridLineWidth','GridLines'
        -            ),
        -        4 => array('HPROJ','HWnd','HalfHeightCaption','HasClip','HeaderGap','HeaderHeight',
        -            'Height','HelpContextID','HideSelection','Highlight','HomeDir','HostName',
        -            'HotKey','HscrollSmallChange','IMEMode','Icon','IgnoreInsert','InResize',
        -            'Increment','IncrementalSearch','InitialSelectedAlias','InputMask','Instancing','IntegralHeight',
        -            'Interval','ItemBackColor','ItemData','ItemForeColor','ItemIDData','ItemTips',
        -            'JustReadLocked','KeyPreview','KeyboardHighValue','KeyboardLowValue','LastModified','Left',
        -            'LeftColumn','LineSlant','LinkMaster','List','ListCount','ListIndex',
        -            'ListItem','ListItemId','LockDataSource','LockScreen','MDIForm','MainClass',
        -            'MainFile','Margin','MaxButton','MaxHeight','MaxLeft','MaxLength',
        -            'MaxTop','MaxWidth','MemoWindow','MinButton','MinHeight','MinWidth',
        -            'MouseIcon','MousePointer','Movable','MoverBars','MultiSelect','Name',
        -            'NapTime','NewIndex','NewItemId','NoDataOnLoad','NoDefine','NotifyContainer',
        -            'NullDisplay','NumberOfElements','OLEDragMode','OLEDragPicture','OLEDropEffects','OLEDropHasData',
        -            'OLEDropMode','OLERequestPendingTimeOut','OLEServerBusyRaiseError','OLEServerBusyTimeOut','OLETypeAllowed','OleClass',
        -            'OleClassId','OleControlContainer','OleIDispInValue','OleIDispOutValue','OleIDispatchIncoming','OleIDispatchOutgoing',
        -            'OnResize','OneToMany','OpenViews','OpenWindow','PageCount','PageHeight',
        -            'PageOrder','PageWidth','Pages','Panel','PanelLink','Parent',
        -            'ParentAlias','ParentClass','Partition','PasswordChar','Picture','ProcessID',
        -            'ProgID','ProjectHookClass','ProjectHookLibrary','Projects','ReadColors','ReadCycle',
        -            'ReadFiller','ReadLock','ReadMouse','ReadOnly','ReadSave','ReadSize',
        -            'ReadTimeout','RecordMark','RecordSource','RecordSourceType','Rect','RelationalExpr',
        -            'RelativeColumn','RelativeRow','ReleaseErase','ReleaseType','ReleaseWindows','Resizable',
        -            'RightToLeft','RowHeight','RowSource','RowSourceType','SCCProvider','SCCStatus',
        -            'SDIForm','ScaleMode','ScrollBars','SelLength','SelStart','SelText',
        -            'SelectOnEntry','Selected','SelectedBackColor','SelectedForeColor','SelectedID','SelectedItemBackColor',
        -            'SelectedItemForeColor','SelfEdit','ServerClass','ServerClassLibrary','ServerHelpFile','ServerName',
        -            'ServerProject','ShowTips','ShowWindow','Sizable','Size','Size',
        -            'Size','Skip','SkipForm','Sorted','SourceType','Sparse',
        -            'SpecialEffect','SpinnerHighValue','SpinnerLowValue','SplitBar','StartMode','StatusBarText',
        -            'Stretch','StrictDateEntry','Style','SystemRefCount','TabIndex','TabStop',
        -            'TabStretch','TabStyle','Tabhit','Tabs','Tag','TerminateRead',
        -            'ThreadID','TitleBar','ToolTipText','Top','TopIndex','TopItemId',
        -            'TypeLibCLSID','TypeLibDesc','TypeLibName','UnlockDataSource','Value','ValueDirty',
        -            'VersionComments','VersionCompany','VersionCopyright','VersionDescription','VersionNumber','VersionProduct',
        -            'VersionTrademarks','View','ViewPortHeight','ViewPortLeft','ViewPortTop','ViewPortWidth',
        -            'Visible','VscrollSmallChange','WasActive','WasOpen','WhatsThisButton','WhatsThisHelp',
        -            'WhatsThisHelpID','Width','WindowList','WindowNTIList','WindowState','WindowType',
        -            'WordWrap','ZOrderSet','ActiveDoc','Checkbox','Column','ComboBox',
        -            'CommandButton','CommandGroup','Container','Control','Cursor','Custom',
        -            'DataEnvironment','EditBox','Empty','FontClass','Form','Formset',
        -            'General','Grid','Header','HyperLink','Image','Label',
        -            'ListBox','Memo','OleBaseControl','OleBoundControl','OleClassIDispOut','OleControl',
        -            'OptionButton','OptionGroup','Page','PageFrame','ProjectHook','RectClass',
        -            'Relation','Session','Shape','Spinner','TextBox' ,'Toolbar'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        "!", "@", "$", "%",
        -        "(", ")", "{", "}", "[", "]",
        -        "-", "+", "*", "/",
        -        "=", "<", ">",
        -        ":", ";", ",", ".", "&",
        -        "?", "??", "???"
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: blue;',
        -            2 => 'color: blue;',
        -            3 => 'color: blue;',
        -            4 => 'color: blue;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: green; font-style: italic;',
        -            2 => 'color: green; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: blue;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: blue;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php
        deleted file mode 100644
        index 1a05e75a..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php
        +++ /dev/null
        @@ -1,127 +0,0 @@
        - 'Visual Prolog',
        -    'COMMENT_SINGLE' => array(1 => '%'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'HARDQUOTE' => array('@"', '"'),
        -    'HARDESCAPE' => array('""'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'clauses','constants','constructors','delegate','domains','facts',
        -            'goal','guards','inherits','monitor','namespace','open',
        -            'predicates','properties','resolve','supports'
        -            ),
        -        2 => array(
        -            'align','and','anyflow','as','bitsize','catch','determ','digits',
        -            'div','do','else','elseif','erroneous','externally','failure',
        -            'finally','from','language','mod','multi','nondeterm','or',
        -            'procedure','quot','rem','single','then','to'
        -            ),
        -        3 => array(
        -            '#bininclude','#else','#elseif','#endif','#error','#export',
        -            '#externally','#if','#import','#include','#message','#options',
        -            '#orrequires','#requires','#then','#warning'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '+', '-', '*', '?', '=', '/', '>', '<', '^', '!', ':', '(', ')', '{', '}', '[', ']'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => true,
        -        1 => true,
        -        2 => true,
        -        3 => true
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #808000;',
        -            2 => 'color: #333399;',
        -            3 => 'color: #800080;',
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #AA77BD',
        -            'MULTI' => 'color: #AA77BD'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #008080;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #00B7B7;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #0000FF;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #008000;',
        -            1 => 'color: #808000;',
        -            2 => 'color: #333399;',
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => ':',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        0 => "(?)[A-Z_]\w*(?!\w)",
        -        1 => "\\b(end\\s+)?(implement|class|interface)\\b",
        -        2 => "\\b(end\\s+)?(foreach|if|try)\\b",
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php
        deleted file mode 100644
        index 4a6957b5..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php
        +++ /dev/null
        @@ -1,119 +0,0 @@
        - 'Whitespace',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        3 => "/[^\n\x20\x09]+/s"
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        'COMMENTS' => array(
        -            3 => 'color: #666666; font-style: italic;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            2 => 'background-color: #FF9999;',
        -            3 => 'background-color: #9999FF;'
        -            )
        -        ),
        -    'URLS' => array(
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        2 => array(
        -            GESHI_SEARCH => "(? " ",
        -            GESHI_MODIFIERS => 's',
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            ),
        -        3 => array(
        -            GESHI_SEARCH => "\x09",
        -            GESHI_REPLACE => "	",
        -            GESHI_MODIFIERS => 's',
        -            GESHI_BEFORE => "",
        -            GESHI_AFTER => ""
        -            ),
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'KEYWORDS' => GESHI_NEVER,
        -            'SYMBOLS' => GESHI_NEVER,
        -            'STRINGS' => GESHI_NEVER,
        -//            'REGEXPS' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php
        deleted file mode 100644
        index 0eebde20..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php
        +++ /dev/null
        @@ -1,178 +0,0 @@
        - 'Whois (RPSL format)',
        -    'COMMENT_SINGLE' => array(1 => '% ', 2 => '%ERROR:'),
        -    'COMMENT_MULTI' => array(),
        -    'COMMENT_REGEXP' => array(
        -        //Description
        -        3 => '/(?:(?<=^remarks:)|(?<=^descr:))(.|\n\s)*$/mi',
        -
        -        //Contact Details
        -        4 => '/(?<=^address:)(.|\n\s)*$/mi',
        -        5 => '/\+\d+(?:(?:\s\(\d+(\s\d+)*\))?(?:\s\d+)+|-\d+-\d+)/',
        -        6 => '/\b(?!-|\.)[\w\-\.]+(?!-|\.)@((?!-)[\w\-]+\.)+\w+\b/',
        -
        -        //IP, Networks and AS information\links
        -        7 => '/\b(? '/\bAS\d+\b/'
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array(),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array( //Object Types
        -            'as-block','as-set','aut-num','domain','filter-set','inet-rtr',
        -            'inet6num','inetnum','irt','key-cert','limerick','mntner',
        -            'organisation','peering-set','person','poem','role','route-set',
        -            'route','route6','rtr-set'
        -            ),
        -        2 => array( //Field Types
        -            'abuse-mailbox','address','admin-c','aggr-bndry','aggr-mtd','alias',
        -            'as-block','as-name','as-set','aut-num','auth','author','certif',
        -            'changed','components','country','default','descr','dom-net',
        -            'domain','ds-rdata','e-mail','encryption','export','export-comps',
        -            'fax-no','filter','filter-set','fingerpr','form','holes','ifaddr',
        -            'import','inet-rtr','inet6num','inetnum','inject','interface','irt',
        -            'irt-nfy','key-cert','limerick','local-as','mbrs-by-ref',
        -            'member-of','members','method','mnt-by','mnt-domains','mnt-irt',
        -            'mnt-lower','mnt-nfy','mnt-ref','mnt-routes','mntner','mp-default',
        -            'mp-export','mp-filter','mp-import','mp-members','mp-peer',
        -            'mp-peering','netname','nic-hdl','notify','nserver','org',
        -            'org-name','org-type','organisation','origin','owner','peer',
        -            'peering','peering-set','person','phone','poem','ref-nfy','refer',
        -            'referral-by','remarks','rev-srv','role','route','route-set',
        -            'route6','rtr-set','signature','source','status','sub-dom','tech-c',
        -            'text','upd-to','zone-c'
        -            ),
        -        3 => array( //RPSL reserved
        -            'accept','action','and','announce','any','as-any','at','atomic',
        -            'except','from','inbound','into','networks','not','or','outbound',
        -            'peeras','refine','rs-any','to'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        ':'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000FF; font-weight: bold;',
        -            2 => 'color: #000080; font-weight: bold;',
        -            3 => 'color: #990000; font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #666666; font-style: italic;',
        -            2 => 'color: #666666; font-style: italic;',
        -            3 => 'color: #404080;',
        -            4 => 'color: #408040;',
        -            5 => 'color: #408040;',
        -            6 => 'color: #408040;',
        -            7 => 'color: #804040;',
        -            8 => 'color: #804040;',
        -            'MULTI' => 'color: #666666; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;',
        -            'HARD' => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #009900;'
        -            ),
        -        'STRINGS' => array(
        -            0 => '',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000080;',
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #0000FF;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000088;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.irr.net/docs/rpsl.html'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Variables
        -        0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4,
        -    'PARSER_CONTROL' => array(
        -        'KEYWORDS' => array(
        -            1 => array(
        -                'DISALLOWED_BEFORE' => '(?<=\A |\A \n(?m:^)|\n\n(?m:^))'
        -                ),
        -            2 => array(
        -                'DISALLOWED_BEFORE' => '(?m:^)'
        -                )
        -            ),
        -        'ENABLE_FLAGS' => array(
        -            'BRACKETS' => GESHI_NEVER,
        -            'SYMBOLS' => GESHI_NEVER,
        -            'STRINGS' => GESHI_NEVER,
        -            'ESCAPE_CHAR' => GESHI_NEVER,
        -            'NUMBERS' => GESHI_NEVER,
        -            'METHODS' => GESHI_NEVER,
        -            'SCRIPT' => GESHI_NEVER
        -            )
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php
        deleted file mode 100644
        index bae96a0c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php
        +++ /dev/null
        @@ -1,367 +0,0 @@
        - 'Winbatch',
        -    'COMMENT_SINGLE' => array(1 => ';', 2 => ':'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"', '`'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'While', 'To', 'Then', 'Switch', 'Select', 'Return', 'Next', 'IntControl', 'Include', 'In', 'If',
        -            'Goto', 'GoSub', 'ForEach', 'For', 'Exit', 'Execute', 'ErrorMode', 'EndWhile', 'EndSwitch', '#EndSubRoutine',
        -            'EndSelect', 'EndIf', '#EEndFunction', 'EndFor', 'End', 'Else', 'DropWild', 'Drop', '#DefineSubRoutine',
        -            '#DefineFunction', 'Debug', 'Continue', 'Case', 'CallExt', 'Call', 'By', 'BreakPoint', 'Break'
        -            ),
        -        2 => array(
        -            'ZOOMED', 'YES', 'WORD4', 'WORD2', 'WORD1', 'WHOLESECTION', 'WAIT', 'UNSORTED', 'UNCHECK', 'TRUE', 'TILE',
        -            'TAB', 'STRING', 'STACK', 'SPC2NET', 'SORTED', 'SOK', 'SNET2PC', 'SINGLE', 'SHIFT', 'SERVER', 'SERRWINSOCK',
        -            'SERRVOICE', 'SERRSOCKET', 'SERRSERVICE', 'SERRSELECT', 'SERRPARAM', 'SERROUTOFMEM', 'SERRNOTFOUND', 'SERRNOCONN',
        -            'SERRNOANSWER', 'SERRMUSTWAIT', 'SERRIPADDR', 'SERRHOSTNAME', 'SERRFAILURE', 'SERRBUSY', 'SCROLLLOCK', 'SCANCEL',
        -            'SAVE', 'SALREADY', 'ROWS', 'REGUSERS', 'REGROOT', 'REGMACHINE', 'REGCURRENT', 'REGCLASSES', 'RDBLCLICK', 'RCLICK',
        -            'RBUTTON', 'RAD2DEG', 'QSUCCESSINFO', 'QSUCCESS', 'QSTILLEX', 'QROLLBACK', 'QNULL', 'QNODATA', 'QNEXT', 'QNEEDDATA',
        -            'QFIRST', 'QCOMMIT', 'QBADHANDLE', 'PRINTER', 'PLANCKJOULES', 'PLANCKERGS', 'PI', 'PARSEONLY', 'PARSEC', 'P3ERRREPLY',
        -            'OPEN', 'ON', 'OFF', 'NUMLOCK', 'NOWAIT', 'NOTIFY', 'NORMAL', 'NORESIZE', 'NONE', 'NO', 'NCSAFORMAT', 'MULTIPLE',
        -            'MSFORMAT', 'MPLAYRDBLCK', 'MPLAYRCLK', 'MPLAYRBUTTON', 'MPLAYMDBLCK', 'MPLAYMCLK', 'MPLAYMBUTTON', 'MPLAYLDBLCK',
        -            'MPLAYLCLK', 'MPLAYLBUTTON', 'MINOR', 'MDBLCLICK', 'MCLICK', 'MBYESNO', 'MBUTTON', 'MBOKCANCEL', 'MAJOR', 'MAGFIELD',
        -            'LOCALGROUP', 'LIGHTMTPS', 'LIGHTMPS', 'LF', 'LDBLCLICK', 'LCLICK', 'LBUTTON', 'LAFFDBERROR', 'ICON', 'HTTPS', 'HTTP',
        -            'HNOHEADER', 'HMETHODPOST', 'HMETHODGET', 'HIDDEN', 'HHEADERONLY', 'HHEADER', 'GRAVITATION', 'GOPHER', 'GOLDENRATIO',
        -            'GMTSEC', 'GLOBALGROUP', 'GFTSEC', 'GETPROCID', 'GETEXITCODE', 'FWDSCAN', 'FTPPASSIVE', 'FTP', 'FLOAT8', 'FARADAY',
        -            'FALSE', 'EXTENDED', 'EULERS', 'ENABLE', 'ELECTRIC', 'DRIVE', 'DISABLE', 'DESCENDING', 'DEG2RAD', 'DEFAULT', 'CTRL',
        -            'CRLF', 'CR', 'COMMONFORMAT', 'COLUMNS', 'CHECK', 'CAPSLOCK', 'CANCEL', 'BOLTZMANN', 'BACKSCAN', 'AVOGADRO', 'ATTR_X',
        -            'ATTR_T', 'ATTR_SY', 'ATTR_SH', 'ATTR_RO', 'ATTR_RI', 'ATTR_P', 'ATTR_IC', 'ATTR_H', 'ATTR_DM', 'ATTR_DI', 'ATTR_DC',
        -            'ATTR_CI', 'ATTR_A', 'ASCENDING', 'ARRANGE', 'AMC', 'ACC_WRITE', 'ACC_READ_NT', 'ACC_READ_95', 'ACC_READ', 'ACC_PRINT_NT',
        -            'ACC_PMANG_NT', 'ACC_PFULL_NT', 'ACC_LIST', 'ACC_FULL_NT', 'ACC_FULL_95', 'ACC_DELETE', 'ACC_CREATE', 'ACC_CONTROL',
        -            'ACC_CHNG_NT', 'ACC_ATTRIB', 'ABOVEICONS'
        -            ),
        -        3 => array(
        -            'Yields', 'Yield', 'WinZoom', 'WinWaitExist', 'WinWaitClose', 'WinWaitChild', 'WinVersion', 'WinTitle', 'WinSysInfo',
        -            'WinState', 'WinShow', 'WinResources', 'WinPositionChild', 'WinPosition', 'WinPlaceSet', 'WinPlaceGet', 'WinPlaceChild',
        -            'WinPlace', 'WinParmSet', 'WinParmGet', 'WinName', 'WinMetrics', 'WinItemProcId', 'WinItemNameId', 'WinItemizeEx',
        -            'WinItemize', 'WinItemChild', 'WinIsDos', 'WinIdGet', 'WinIconize', 'WinHide', 'WinHelp', 'WinGetactive', 'WinExistchild',
        -            'WinExist', 'WinExename', 'WinConfig', 'WinClosenot', 'WinClose', 'WinArrange', 'WinActivechild', 'WinActivchild',
        -            'WinActivate', 'WebVerifyCard', 'WebSetTimeout', 'WebParamSize', 'WebParamNames', 'WebParamFile', 'WebParamData',
        -            'WebParamBuf', 'WebOutFile', 'WebOutBinary', 'WebOut', 'WebDumpError', 'WebDatData', 'WebCounter', 'WebConSize', 'WebConData',
        -            'WebConBuf', 'WebCmdData', 'WebBaseConv', 'Wallpaper', 'WaitForKeyEX', 'WaitForKey', 'VersionDLL', 'Version', 'VarType',
        -            'TimeYmdHms', 'TimeWait', 'TimeSubtract', 'TimeJulToYmd', 'TimeJulianDay', 'TimeDiffSecs', 'TimeDiffDays', 'TimeDiff', 'TimeDelay',
        -            'TimeDate', 'TimeAdd', 'TextSelect', 'TextBoxSort', 'TextBox', 'Terminate', 'Tanh', 'Tan', 'SysParamInfo', 'SvcWaitForCmd',
        -            'SvcSetState', 'SvcSetAccept', 'StrUpper', 'StrTrim', 'StrSubWild', 'StrSub', 'StrScan', 'StrReplace', 'StrLower', 'StrLenWild',
        -            'StrLen', 'StrIndexWild', 'StrIndexNC', 'StrIndex', 'StriCmp', 'StrFixLeft', 'StrFixCharsL', 'StrFixChars', 'StrFix', 'StrFill',
        -            'StrCnt', 'StrCmp', 'StrClean', 'StrCharCount', 'StrCat', 'StrByteCount', 'Sqrt', 'SoundVolume', 'Sounds', 'Snapshot', 'Sinh', 'Sin',
        -            'ShortCutMake', 'ShortCutInfo', 'ShortCutExtra', 'ShortCutEdit', 'ShortCutDir', 'ShellExecute', 'SendMenusToEx', 'SendMenusTo',
        -            'SendKeysTo', 'SendKeysChild', 'SendKey', 'RunZoomWait', 'RunZoom', 'RunWithLogon', 'RunWait', 'RunShell', 'RunIconWait',
        -            'RunIcon', 'RunHideWait', 'RunHide', 'RunExit', 'RunEnviron', 'Run', 'RtStatus', 'Reload', 'RegUnloadHive', 'RegSetValue',
        -            'RegSetQword', 'RegSetMulSz', 'RegSetExpSz', 'RegSetEx', 'RegSetDword', 'RegSetBin', 'RegQueryValue', 'RegQueryStr',
        -            'RegQueryQword', 'RegQueryMulSz', 'RegQueryKeys', 'RegQueryKeyLastWriteTime', 'RegQueryKey', 'RegQueryItem', 'RegQueryExpSz',
        -            'RegQueryEx', 'RegQueryDword', 'RegQueryBin', 'RegOpenKeyEx', 'RegOpenKey', 'RegOpenFlags', 'RegLoadHive', 'RegExistValue',
        -            'RegExistKey', 'RegEntryType', 'RegDelValue', 'RegDeleteKey', 'RegCreateKey', 'RegConnect', 'RegCloseKey', 'RegApp', 'Random',
        -            'PtrPersistent', 'PtrGlobalDefine', 'PtrGlobal', 'Print', 'PlayWaveform', 'PlayMidi', 'PlayMedia', 'PipeServerWrite', 'PipeServerRead',
        -            'PipeServerCreate', 'PipeServerClose', 'PipeInfo', 'PipeClientSendRecvData', 'PipeClientOpen', 'PipeClientClose', 'Pause',
        -            'ParseData', 'ObjectTypeGet', 'ObjectType', 'ObjectOpen', 'ObjectGet', 'ObjectEventRemove', 'ObjectEventAdd',
        -            'ObjectCreate', 'ObjectConstToArray', 'ObjectConstantsGet', 'ObjectCollectionOpen', 'ObjectCollectionNext',
        -            'ObjectCollectionClose', 'ObjectClose', 'ObjectAccess', 'Num2Char', 'NetInfo', 'MsgTextGet', 'MousePlay', 'MouseMove', 'MouseInfo',
        -            'MouseDrag', 'MouseCoords', 'MouseClickBtn', 'MouseClick', 'mod', 'Min', 'Message', 'Max', 'Loge', 'LogDisk', 'Log10', 'LastError',
        -            'KeyToggleSet', 'KeyToggleGet', 'ItemSortNc', 'ItemSort', 'ItemSelect', 'ItemReplace', 'ItemRemove', 'ItemLocate', 'ItemInsert',
        -            'ItemExtractCSV', 'ItemExtract', 'ItemCountCSV', 'ItemCount', 'IsNumber', 'IsLicensed', 'IsKeyDown', 'IsInt', 'IsFloat', 'IsDefined',
        -            'Int', 'InstallFile', 'IniWritePvt', 'IniWrite', 'IniReadPvt', 'IniRead', 'IniItemizePvt', 'IniItemize', 'IniDeletePvt', 'IniDelete',
        -            'IgnoreInput', 'IconReplace', 'IconInfo', 'IconExtract', 'IconArrange', 'GetTickCount', 'GetObject', 'GetExactTime', 'Floor',
        -            'FindWindow', 'FileYmdHms', 'FileWrite', 'FileVerInfo', 'FileTimeTouch', 'FileTimeSetEx', 'FileTimeSet', 'FileTimeGetEx',
        -            'FileTimeGet', 'FileTimeCode', 'FileSizeEx', 'FileSize', 'FileRoot', 'FileRename', 'FileRead', 'FilePutW', 'FilePut', 'FilePath',
        -            'FileOpen', 'FileNameShort', 'FileNameLong', 'FileNameEval2', 'FileNameEval1', 'FileMoveAttr', 'FileMove', 'FileMapName',
        -            'FileLocate', 'FileItemPath', 'FileItemize', 'FileInfoToArray', 'FileGetW', 'FileGet', 'FileFullname', 'FileExtension', 'FileExist',
        -            'FileDelete', 'FileCreateTemp', 'FileCopyAttr', 'FileCopy', 'FileCompare', 'FileClose', 'FileBaseName', 'FileAttrSetEx',
        -            'FileAttrSet', 'FileAttrGetEx', 'FileAttrGet', 'FileAppend', 'Fabs', 'ExtractAttachedFile', 'Exp', 'ExeTypeInfo', 'Exclusive',
        -            'EnvItemize', 'EnvironSet', 'Environment', 'EndSession', 'DosVersion', 'DllLoad', 'DllLastError', 'DllHwnd', 'DllHinst',
        -            'DllFree', 'DllCallCDecl', 'DllCall', 'Display', 'DiskVolinfo', 'DiskSize', 'DiskScan', 'DiskInfo', 'DiskFree', 'DiskExist',
        -            'DirWindows', 'DirSize', 'DirScript', 'DirRename', 'DirRemove', 'DirMake', 'DirItemize', 'DirInfoToArray', 'DirHome', 'DirGet',
        -            'DirExist', 'DirChange', 'DirAttrSetEx', 'DirAttrSet', 'DirAttrGetEx', 'DirAttrGet', 'DialogProcOptions', 'DialogObject',
        -            'DialogControlState', 'DialogControlSet', 'DialogControlGet', 'DialogBox', 'Dialog', 'Delay', 'Decimals', 'DebugTrace',
        -            'DebugData', 'DDETimeout', 'DDETerminate', 'DDERequest', 'DDEPoke', 'DDEInitiate', 'DDEExecute', 'DateTime', 'CurrFilepath',
        -            'CurrentPath', 'CurrentFile', 'CreateObject', 'Cosh', 'Cos', 'ClipPut', 'ClipHasFormat', 'ClipGetEx', 'ClipGet', 'ClipAppend',
        -            'ChrUnicodeToString', 'ChrUnicodeToHex', 'ChrStringToUnicode', 'ChrSetCodepage', 'ChrHexToUnicode', 'ChrGetCodepage',
        -            'Char2Num', 'Ceiling', 'ButtonNames', 'BoxUpdates', 'BoxTitle', 'BoxTextFont', 'BoxTextColor', 'BoxText', 'BoxShut', 'BoxPen',
        -            'BoxOpen', 'BoxNew', 'BoxMapmode', 'BoxesUp', 'BoxDrawText', 'BoxDrawRect', 'BoxDrawLine', 'BoxDrawCircle', 'BoxDestroy',
        -            'BoxDataTag', 'BoxDataClear', 'BoxColor', 'BoxCaption', 'BoxButtonWait', 'BoxButtonStat', 'BoxButtonKill', 'BoxButtonDraw',
        -            'BoxBitMap', 'BinaryXor', 'BinaryXlate', 'BinaryWriteEx', 'BinaryWrite', 'BinaryTagRepl', 'BinaryTagLen', 'BinaryTagInit',
        -            'BinaryTagIndex', 'BinaryTagFind', 'BinaryTagExtr', 'BinaryStrCnt', 'BinarySort', 'BinaryReplace', 'BinaryReadEx',
        -            'BinaryRead', 'BinaryPokeStrW', 'BinaryPokeStr', 'BinaryPokeHex', 'BinaryPokeFlt', 'BinaryPoke4', 'BinaryPoke2', 'BinaryPoke',
        -            'BinaryPeekStrW', 'BinaryPeekStr', 'BinaryPeekHex', 'BinaryPeekFlt', 'BinaryPeek4', 'BinaryPeek2', 'BinaryPeek', 'BinaryOr',
        -            'BinaryOleType', 'BinaryIndexNc', 'BinaryIndexEx', 'BinaryIndexBin', 'BinaryIndex', 'BinaryIncrFlt', 'BinaryIncr4',
        -            'BinaryIncr2', 'BinaryIncr', 'BinaryHashRec', 'BinaryFree', 'BinaryEodSet', 'BinaryEodGet', 'BinaryCopy', 'BinaryConvert',
        -            'BinaryCompare', 'BinaryClipPut', 'BinaryClipGet', 'BinaryChecksum', 'BinaryBufInfo', 'BinaryAnd', 'BinaryAllocArray',
        -            'BinaryAlloc', 'Beep', 'Average', 'Atan', 'AskYesNo', 'AskTextbox', 'AskPassword', 'AskLine', 'AskItemlist', 'AskFont',
        -            'AskFiletext', 'AskFilename', 'AskDirectory', 'AskColor', 'Asin', 'ArrInitialize', 'ArrInfo', 'ArrDimension',
        -            'Arrayize', 'ArrayFilePutCSV', 'ArrayFilePut', 'ArrayFileGetCSV', 'ArrayFileGet', 'AppWaitClose', 'AppExist', 'AddExtender',
        -            'Acos', 'Abs', 'About'
        -            ),
        -        4 => array(
        -            'zZipFiles', 'zVersionInfo', 'zVersion', 'zUnZipFiles', 'zSetPortBit', 'zRPortShift', 'zPortOut', 'zPortIn', 'zNotPortBit',
        -            'zLPortShift', 'zGetPortBit', 'zClrPortBit', 'xVerifyCCard', 'xSendMessage', 'xMessageBox', 'xMemCompact', 'xHex', 'xGetElapsed',
        -            'xGetChildHwnd', 'xExtenderInfo', 'xEnumStreams', 'xEjectMedia', 'xDriveReady', 'xDiskLabelGet', 'xCursorSet', 'xBaseConvert',
        -            'wxPing', 'wxParmSet', 'wxParmGet', 'wxMsgSetHdr', 'wxMsgGetHdr', 'wxMsgGetBody', 'wxHost2Addr', 'wxGetLastErr', 'wxGetInfo',
        -            'wxGetErrDesc', 'wxAddr2Host', 'wtsWaitSystemEvent', 'wtsVersion', 'wtsTerminateProcess', 'wtsShutdownSystem', 'wtsSendMessage',
        -            'wtsQuerySessionInfo', 'wtsProcIdToSessId', 'wtsLogoffSession', 'wtsLastErrMsg', 'wtsIsTSEnabled', 'wtsIsCitrixEnabled',
        -            'wtsGetActiveConsoleSessId', 'wtsEnumSessions', 'wtsEnumProcesses', 'wtsDisconnectSession', 'wnWrkGroups', 'wnVersion', 'wntWtsUserSet',
        -            'wntWtsUserGet', 'wntVersion', 'wntUserSidChk', 'wntUserSetDat', 'wntUserRename', 'wntUserProps', 'wntUserList', 'wntUserInfo',
        -            'wntUserGetDat', 'wntUserFiles', 'wntUserExist', 'wntUserDel', 'wntUserAddDat', 'wntUserAdd', 'wntSvcStatus', 'wntSvcStart',
        -            'wntSvcList', 'wntSvcDelete', 'wntSvcCreate', 'wntSvcControl', 'wntSvcCfgSet', 'wntSvcCfgGet', 'wntShutdown', 'wntShareUsers',
        -            'wntShareSet', 'wntShareList', 'wntShareInfo', 'wntShareDel', 'wntShareAdd', 'wntServiceInf', 'wntServiceAt', 'wntServerType',
        -            'wntServerList', 'wntServerInfo', 'wntSecurityGet', 'wntRunAsUser', 'wntResources2', 'wntResources', 'wntRemoteTime', 'wntRasUserSet',
        -            'wntRasUserGet', 'wntProfileInfo', 'wntProfileDel', 'wntPrivUsers', 'wntPrivList', 'wntPrivGet', 'wntPrivDel', 'wntPrivAdd',
        -            'wntOwnerSet', 'wntOwnerGet', 'wntMemberSet', 'wntMemberLst2', 'wntMemberList', 'wntMemberGrps', 'wntMemberGet', 'wntMemberDel',
        -            'wntLsaPolSet', 'wntLsaPolGet', 'wntListGroups', 'wntLastErrMsg', 'wntGroupRen', 'wntGroupInfo', 'wntGroupEdit', 'wntGroupDel',
        -            'wntGroupAdd', 'wntGetUser', 'wntGetDrive', 'wntGetDc', 'wntGetCon', 'wntFileUsers', 'wntFilesOpen', 'wntFileClose', 'wntEventWrite',
        -            'wntEventLog', 'wntDomainSync', 'wntDirDialog', 'wntDfsList', 'wntDfsGetInfo', 'wntCurrUsers', 'wntChgPswd', 'wntCancelCon',
        -            'wntAuditMod', 'wntAuditList', 'wntAuditGet', 'wntAuditDel', 'wntAuditAdd2', 'wntAuditAdd', 'wntAddPrinter', 'wntAddDrive',
        -            'wntAcctPolSet', 'wntAcctPolGet', 'wntAcctList', 'wntAcctInfo', 'wntAccessMod', 'wntAccessList', 'wntAccessGet', 'wntAccessDel',
        -            'wntaccessadd2', 'wntAccessAdd', 'wnShares', 'wnSharePath', 'wnShareName', 'wnShareCnt', 'wnServers', 'wnRestore', 'wnNetNames',
        -            'wnGetUser', 'wnGetCon', 'wnGetCaps', 'wnDlgShare', 'wnDlgNoShare', 'wnDlgDiscon', 'wnDlgCon4', 'wnDlgCon3', 'wnDlgCon2', 'wnDlgCon',
        -            'wnDlgBrowse', 'wnDialog', 'wnCmptrInfo', 'wnCancelCon', 'wnAddCon', 'WaitSRQ', 'w9xVersion', 'w9xUserSetDat', 'w9xUserRename',
        -            'w9xUserprops', 'w9xUserList', 'w9xUserinfo', 'w9xUserGetDat', 'w9xUserExist', 'w9xUserDel', 'w9xUserAddDat', 'w9xUserAdd', 'w9xShareSet',
        -            'w9xShareInfo', 'w9xShareDel', 'w9xShareAdd', 'w9xServiceAt', 'w9xServerList', 'w9xRemoteTime', 'w9xOwnerGet', 'w9xMemberSet',
        -            'w9xMemberList', 'w9xMemberGrps', 'w9xMemberGet', 'w9xMemberDel', 'w9xListGroups', 'w9xGroupInfo', 'w9xGroupDel', 'w9xGroupAdd',
        -            'w9xGetDC', 'w9xFileUsers', 'w9xAccessList', 'w9xAccessGet', 'w9xAccessDel', 'w9xAccessAdd', 'w95Version', 'w95ShareUsers',
        -            'w95ShareSet', 'w95ShareList', 'w95ShareInfo', 'w95ShareDel', 'w95ShareAdd', 'w95ServiceInf', 'w95ServiceAt', 'w95ServerType',
        -            'w95ServerInfo', 'w95Resources', 'w95GetUser', 'w95GetDrive', 'w95GetCon', 'w95FileUsers', 'w95FileClose', 'w95DirDialog',
        -            'w95CancelCon', 'w95AddPrinter', 'w95AddDrive', 'w95AccessDel', 'w95AccessAdd', 'w3Version', 'w3PrtBrowse', 'w3NetGetUser',
        -            'w3NetDialog', 'w3GetCon', 'w3GetCaps', 'w3DirBrowse', 'w3CancelCon', 'w3AddCon', 'urlGetScheme', 'urlEncode', 'urlDecode',
        -            'tVersion', 'tSetPriority', 'TriggerList', 'Trigger', 'tRemoteConn', 'tOpenProc', 'tListProc', 'tListMod', 'tKillProc', 'tGetProcInfo',
        -            'tGetPriority', 'tGetModInfo', 'tGetLastError', 'tGetData', 'TestSys', 'TestSRQ', 'tCountProc', 'tCompatible', 'tCloseProc',
        -            'tBrowseCntrs', 'sSendString', 'sSendNum', 'sSendLine', 'sSendBinary', 'sRecvNum', 'sRecvLine', 'sRecvBinary', 'SrchVersion',
        -            'SrchNext', 'SrchInit', 'SrchFree', 'sOpen', 'sOK2Send', 'sOK2Recv', 'smtpSendText', 'smtpSendFile', 'sListen', 'SetRWLS',
        -            'SendSetup', 'SendLLO', 'SendList', 'SendIFC', 'SendDataBytes', 'SendCmds', 'Send', 'sConnect', 'sClose', 'SByteOrder32',
        -            'sByteOrder16', 'sAccept', 'rRegVersion', 'rRegSearch', 'ResetSys', 'ReceiveSetup', 'Receive', 'ReadStsByte', 'RcvRespMsg',
        -            'RasVersion', 'RasTypeSize', 'RasRename', 'RasNumCons', 'RasNameValid', 'RasListActCon', 'RasItemize', 'RasHangUp', 'RasGetLastErr',
        -            'RasGetConStat', 'RasEntrySet', 'RasEntryInfo', 'RasEntryExist', 'RasEntryDel', 'RasEntryAdd', 'RasDialInfo', 'RasDial',
        -            'RasCopy', 'RasConStatus', 'qVersionInfo', 'qTransact', 'qTables', 'qSpecial', 'qSetConnOpt', 'qNumRsltCol', 'qNativeSql', 'qLastCode',
        -            'qGetData', 'qFreeStmt', 'qFreeEnv', 'qFreeConnect', 'qFetch', 'qExecDirect', 'qError', 'qDriverList', 'qDriverCon', 'qDisconnect',
        -            'qDataSources', 'qConnect', 'qConfigError', 'qConfigData', 'qColumns', 'qBindCol', 'qAllocStmt', 'qAllocEnv', 'qAllocConnect',
        -            'pWaitFor', 'pVersionInfo', 'pTimeout', 'pSetPublish', 'pSetPrtInfo', 'pSetPrtAttrib', 'pSetDefPrtEx', 'pSetDefPrt', 'pSendFile',
        -            'pRecvFile', 'pPutString', 'pPutLine', 'pPutChar', 'pPutByte', 'pPutBinary', 'PPollUnconfig', 'PPollConfig', 'PPoll', 'pPeekChar',
        -            'pPeekByte', 'pPaperSizes', 'pPaperBins', 'pModemSReg', 'pModemParams', 'pModemInit', 'pModemHangUp', 'pModemDial', 'pModemControl',
        -            'pModemConnect', 'pModemCommand', 'pModemAnsRing', 'pModemAnsCall', 'pMediaTypes', 'pGetString', 'pGetPublish', 'pGetPrtList',
        -            'pGetPrtInfo', 'pGetPrtAttrib', 'pGetLine', 'pGetLastError', 'pGetErrorMsg', 'pGetErrorCode', 'pGetDefPrtInf', 'pGetChar',
        -            'pGetByte', 'pGetBinary', 'pDelPrtConn', 'pDelPrinter', 'pComOpen', 'pComModify', 'pComInfo', 'pComControl', 'pComClose',
        -            'pCheckSum', 'pCheckBinary', 'pCaptureOn', 'pCaptureOff', 'pCaptureLog', 'PassControl', 'pAddPrtConn', 'pAddPrinter', 'p3RecvText',
        -            'p3RecvFile', 'p3Peek', 'p3Open', 'p3GetReply', 'p3Delete', 'p3Count', 'p3Close', 'nwWhoAmI', 'nwVfyPassword', 'nwVersion',
        -            'nwSrvShutdown', 'nwSrvNLMMgr', 'nwSrvGenGUID', 'nwSrvExecNCF', 'nwSetVolLimit', 'nwSetSrvParam', 'nwSetSrvInfo', 'nwSetPrimServ',
        -            'nwSetPassword', 'nwSetOptions', 'nwSetFileInfo', 'nwSetDirLimit', 'nwSetDirInfo', 'nwSetContext', 'nwSetBcastMode', 'nwServerList',
        -            'nwSendBcastMsg', 'nwSearchObjects', 'nwSearchFilter', 'nwRenameObject', 'nwRemoveObject', 'nwReceiveBcastMsg', 'nwNameConvert',
        -            'nwMutateObject', 'nwMoveObject', 'nwModifyObject', 'nwMapDelete', 'nwMap', 'nwLogout', 'nwLogin', 'nwListUserGroups',
        -            'nwListObjects', 'nwListGroupMembers', 'nwLastErrMsg', 'nwIsUserInGroup', 'nwGetVolLimit', 'nwGetSrvStats', 'nwGetSrvParam',
        -            'nwGetSrvInfo', 'nwGetSrvCfg', 'nwGetOptions', 'nwGetObjValue', 'nwGetObjInfo', 'nwGetNLMInfo', 'nwGetMapped', 'nwGetFileInfo',
        -            'nwGetDirLimit', 'nwGetDirInfo', 'nwGetContext', 'nwGetConnInfo', 'nwGetCapture', 'nwGetBcastMode', 'nwGetAttrInfo',
        -            'nwDriveStatus', 'nwDrivePath', 'nwDetachFromServer', 'nwDelUserFromGroup', 'nwDelConnNum', 'nwCompareObject', 'nwClientInfo',
        -            'nwChgPassword', 'nwAttachToServer', 'nwAddUserToGroup', 'nwAddObject', 'netVersion', 'netResources', 'netGetUser', 'netGetCon',
        -            'netDirDialog', 'netCancelCon', 'netAddPrinter', 'netAddDrive', 'n4Version', 'n4UserGroups', 'n4UserGroupEx', 'n4SetPrimServ',
        -            'n4SetOptions', 'n4SetContextG', 'n4SetContext', 'n4ServerList', 'n4ServerInfo', 'n4ObjSearch', 'n4ObjRename', 'n4ObjOptions',
        -            'n4ObjMove', 'n4ObjGetVal', 'n4ObjectProps', 'n4ObjectList', 'n4ObjectInfo', 'n4ObjDelete', 'n4NameConvert', 'n4MsgsEndAll',
        -            'n4MsgsEnd', 'n4MemberSet', 'n4MemberGet', 'n4MemberDel', 'n4MapRoot', 'n4MapDir', 'n4MapDelete', 'n4Map', 'n4LogoutTree',
        -            'n4Logout', 'n4Login', 'n4GetUserName', 'n4GetUserId', 'n4GetUser', 'n4GetNetAddr', 'n4GetMapped', 'n4GetContext',
        -            'n4GetConnNum', 'n4FileUsers', 'n4FileTimeGet', 'n4FileAttrSet', 'n4FileAttrGet', 'n4DriveStatus', 'n4DrivePath', 'n4DirTimeGet',
        -            'n4DirAttrSet', 'n4DirAttrGet', 'n4Detach', 'n4ChgPassword', 'n4CapturePrt', 'n4CaptureGet', 'n4CaptureEnd', 'n4Attach',
        -            'n3Version', 'n3UserGroups', 'n3ServerList', 'n3ServerInfo', 'n3MsgsEndAll', 'n3MsgsEnd', 'n3MemberSet', 'n3MemberGet',
        -            'n3MemberDel', 'n3Maproot', 'n3Mapdir', 'n3Mapdelete', 'n3Map', 'n3Logout', 'n3GetUserId', 'n3GetUser', 'n3GetNetAddr',
        -            'n3GetMapped', 'n3GetConnNum', 'n3FileTimeGet', 'n3FileAttrSet', 'n3FileAttrGet', 'n3DriveStatus', 'n3DrivePath',
        -            'n3DirTimeGet', 'n3DirAttrSet', 'n3DirAttrGet', 'n3Detach', 'n3ChgPassword', 'n3CapturePrt', 'n3CaptureGet',
        -            'n3CaptureEnd', 'n3Attach', 'mVersion', 'mSyncMail', 'mSendMailEx', 'mSendMail', 'mrecvmail', 'mReadNextMsg', 'mLogOn',
        -            'mLogOff', 'mFindNext', 'mError', 'mCompatible', 'kVerInfo', 'kStatusInfo', 'kSendText', 'kSendFile', 'kManageImap4',
        -            'kInit', 'kGetMail', 'kExtra', 'kDest', 'kDeletePop3', 'iWriteDataBuf', 'iWriteData', 'iVersion', 'IUrlOpen', 'iUrlEncode',
        -            'iUrlDecode', 'iReadDataBuf', 'iReadData', 'ipVersion', 'ipPing', 'iPing', 'ipHost2Addr', 'ipGetLastErr', 'ipGetAddress',
        -            'iParseURL', 'ipAddr2Host', 'iOptionSet', 'iOptionGet', 'ImgWave', 'ImgVersion', 'ImgUnsharpMask', 'ImgThreshold', 'ImgSwirl',
        -            'ImgSpread', 'ImgSolarize', 'ImgShear', 'ImgSharpen', 'ImgShade', 'ImgScale', 'ImgSample', 'ImgRotate', 'ImgResize',
        -            'ImgReduceNoise', 'ImgRaise', 'ImgOilPaint', 'ImgNormalize', 'ImgNegate', 'ImgMotionBlur', 'ImgModulate', 'ImgMinify',
        -            'ImgMedianFilter', 'ImgMagnify', 'ImgLevel', 'ImgIsValid', 'ImgIsPalette', 'ImgIsMono', 'ImgIsGray', 'ImgInfo', 'ImgImplode',
        -            'ImgGetImageType', 'ImgGetColorCount', 'ImgGaussianBlur', 'ImgGamma', 'ImgFrame', 'ImgFlop', 'ImgFlip', 'ImgEqualize',
        -            'ImgEnhance', 'ImgEmboss', 'ImgCrop', 'ImgConvert', 'ImgContrast', 'ImgCompare', 'ImgColorize', 'ImgChop', 'ImgCharcoal',
        -            'ImgBorder', 'ImgBlur', 'ImgAddNoise', 'iLocFindNext', 'iLocFindInit', 'iHttpOpen', 'iHttpInit', 'iHttpHeaders', 'iHttpAccept',
        -            'iHostConnect', 'iHost2Addr', 'iGetResponse', 'iGetLastError', 'iGetIEVer', 'iGetConStatEx', 'iGetConState', 'iFtpRename',
        -            'iFtpPut', 'iFtpOpen', 'iFtpGet', 'iFtpFindNext', 'iFtpFindInit', 'iFtpDirRemove', 'iFtpDirMake', 'iFtpDirGet', 'iFtpDirChange',
        -            'iFtpDialog', 'iFtpDelete', 'iFtpCmd', 'iErrorDialog', 'iDialItemize', 'iDialHangUp', 'iDial', 'iCookieSet', 'iCookieGet',
        -            'iContentURL', 'iContentFile', 'iContentData', 'iClose', 'ibWrtf', 'ibWrt', 'ibWait', 'ibVersion', 'ibUnlock', 'ibTrg',
        -            'ibTmo', 'ibStop', 'ibStatus', 'ibSta', 'ibSre', 'ibSic', 'ibSad', 'ibRsv', 'ibRsp', 'ibRsc', 'ibRpp', 'ibRdf', 'ibRd',
        -            'ibPpc', 'ibPoke', 'ibPct', 'ibPad', 'ibOnl', 'ibMakeAddr', 'ibLock', 'ibLoc', 'ibLn', 'ibLines', 'ibIst', 'ibInit',
        -            'ibGts', 'ibGetSad', 'ibGetPad', 'ibFind', 'ibEvent', 'ibErr', 'ibEot', 'ibEos', 'iBegin', 'ibDma', 'ibDev', 'ibConfig',
        -            'ibCntl', 'ibCnt', 'ibCmda', 'ibCmd', 'ibClr', 'ibCac', 'ibBna', 'ibAsk', 'iAddr2Host', 'huge_Thousands', 'huge_Subtract',
        -            'huge_SetOptions', 'huge_Multiply', 'huge_GetLastError', 'huge_ExtenderInfo', 'huge_Divide', 'huge_Decimal', 'huge_Add',
        -            'httpStripHTML', 'httpRecvTextF', 'httpRecvText', 'httpRecvQuery', 'httpRecvQryF', 'httpRecvFile', 'httpGetServer',
        -            'httpGetQuery', 'httpGetPath', 'httpGetFile', 'httpGetDir', 'httpGetAnchor', 'httpFullPath', 'httpFirewall', 'httpAuth',
        -            'ftpRename', 'ftpQuote', 'ftpPut', 'ftpOpen', 'ftpList', 'ftpGet', 'ftpFirewall', 'ftpDelete', 'ftpClose', 'ftpChDir',
        -            'FindRQS', 'FindLstn', 'EnvSetVar', 'EnvPathDel', 'EnvPathChk', 'EnvPathAdd', 'EnvListVars', 'EnvGetVar', 'EnvGetInfo',
        -            'EnableRemote', 'EnableLocal', 'ehllapiWait', 'ehllapiVersion', 'ehllapiUninit', 'ehllapiStopKeyIntercept', 'ehllapiStopHostNotify',
        -            'ehllapiStopCloseIntercept', 'ehllapiStartKeyIntercept', 'ehllapiStartHostNotify', 'ehllapiStartCloseIntercept',
        -            'ehllapiSetWindowStatus', 'ehllapiSetSessionParams', 'ehllapiSetPSWindowName', 'ehllapiSetCursorLoc', 'ehllapiSendKey',
        -            'ehllapiSendFile', 'ehllapiSearchPS', 'ehllapiSearchField', 'ehllapiRunProfile', 'ehllapiResetSystem', 'ehllapiReserve',
        -            'ehllapiRelease', 'ehllapiReceiveFile', 'ehllapiQuerySystem', 'ehllapiQueryPSStatus', 'ehllapiQueryHostNotify',
        -            'ehllapiQueryFieldAttr', 'ehllapiQueryCursorLoc', 'ehllapiQueryCloseIntercept', 'ehllapiPostInterceptStatus',
        -            'ehllapiPause', 'ehllapiLastErrMsg', 'ehllapiInit', 'ehllapiGetWindowStatus', 'ehllapiGetPSHWND', 'ehllapiGetKey',
        -            'ehllapiFindFieldPos', 'ehllapiFindFieldLen', 'ehllapiDisconnectPS', 'ehllapiCvtRCToPos', 'ehllapiCvtPosToRC',
        -            'ehllapiCopyTextToPS', 'ehllapiCopyTextToField', 'ehllapiCopyTextFromPS', 'ehllapiCopyTextFromField', 'ehllapiCopyOIA',
        -            'ehllapiConnectPS', 'dunItemize', 'dunDisconnect', 'dunConnectEx', 'dunConnect', 'dsTestParam', 'dsSIDtoHexStr', 'dsSetSecProp',
        -            'dsSetProperty', 'dsSetPassword', 'dsSetObj', 'dsSetCredentX', 'dsSetCredent', 'dsRemFromGrp', 'dsRelSecObj', 'dsMoveObj',
        -            'dsIsObject', 'dsIsMemberGrp', 'dsIsContainer', 'dsGetUsersGrps', 'dsGetSecProp', 'dsGetPropName', 'dsGetProperty',
        -            'dsGetPrntPath', 'dsGetPrimGrp', 'dsGetMemGrp', 'dsGetInfo', 'dsGetClass', 'dsGetChldPath', 'dsFindPath', 'dsDeleteObj',
        -            'dsCreatSecObj', 'dsCreateObj', 'dsCopySecObj', 'dsAddToGrp', 'dsAclRemAce', 'dsAclOrderAce', 'dsAclGetAces', 'dsAclAddAce',
        -            'DevClearList', 'DevClear', 'dbTest', 'dbSwapColumns', 'dbSort', 'dbSetRecordField', 'dbSetOptions', 'dbSetErrorReporting',
        -            'dbSetEntireRecord', 'dbSetDelimiter', 'dbSave', 'dbOpen', 'dbNameColumn', 'dbMakeNewItem', 'dbInsertColumn', 'dbGetVersion',
        -            'dbGetSaveStatus', 'dbGetRecordField', 'dbGetRecordCount', 'dbGetNextItem', 'dbGetLastError', 'dbGetEntireRecord',
        -            'dbGetColumnType', 'dbGetColumnNumber', 'dbGetColumnName', 'dbGetColumnCount', 'dbFindRecord', 'dbExist', 'dbEasterEgg',
        -            'dbDeleteRecord', 'dbDeleteColumn', 'dbDebug', 'dbCookDatabases', 'dbClose', 'dbCloneRecord', 'dbBindCol', 'cWndState',
        -            'cWndinfo', 'cWndGetWndSpecName', 'cWndGetWndSpec', 'cWndexist', 'cWndByWndSpecName', 'cWndByWndSpec', 'cWndbyseq',
        -            'cWndbyname', 'cWndbyid', 'cWndbyclass', 'cWinIDConvert', 'cVersionInfo', 'cVendorId', 'cSetWndText', 'cSetUpDownPos',
        -            'cSetTvItem', 'cSetTrackPos', 'cSetTabItem', 'cSetLvItem', 'cSetLbItemEx', 'cSetLbItem', 'cSetIpAddr', 'cSetFocus',
        -            'cSetEditText', 'cSetDtpDate', 'cSetCbItem', 'cSetCalDate', 'cSendMessage', 'cRadioButton', 'cPostMessage', 'cPostButton',
        -            'cMemStat', 'cGetWndCursor', 'cGetUpDownPos', 'cGetUpDownMin', 'cGetUpDownMax', 'cGetTVItem', 'cGetTrackPos', 'cGetTrackMin',
        -            'cGetTrackMax', 'cGetTbText', 'cGetSbText', 'cGetLvText', 'cGetLvSelText', 'cGetLvFocText', 'cGetLvDdtText', 'cGetLvColText',
        -            'cGetLbText', 'cGetLbSelText', 'cGetLbCount', 'cGetIpAddr', 'cGetInfo', 'cGetHrText', 'cGetFocus', 'cGetEditText', 'cGetDtpDate',
        -            'cGetControlImageCRC', 'cGetCBText', 'cGetCbCount', 'cGetCalDate', 'cFindByName', 'cFindByClass', 'cEnablestate', 'cDblClickItem',
        -            'cCpuSupt', 'cCpuSpeed', 'cCpuIdExt', 'cCpuId', 'cCpuFeat', 'cCpuBenchmark', 'cCloneCheck', 'cClickToolbar', 'cClickButton',
        -            'cClearTvItem', 'cClearLvItem', 'cClearLbAll', 'cCheckbox', 'aVersion', 'aStatusbar', 'aShellFolder', 'aMsgTimeout', 'AllSPoll',
        -            'aGetLastError', 'aFileRename', 'aFileMove', 'aFileDelete', 'aFileCopy'
        -            ),
        -        5 => array(
        -            'wWordRight', 'wWordLeft', 'wWinTile', 'wWinRestore', 'wWinNext', 'wWinMinimize', 'wWinMaximize', 'wWinCloseAll', 'wWinClose',
        -            'wWinCascade', 'wWinArricons', 'wViewOutput', 'wViewOptions', 'wViewHtml', 'wUpperCase', 'wUpline', 'wUndo', 'wTopOfFile', 'wToggleIns',
        -            'wTab', 'wStatusMsg', 'wStartSel', 'wSpellcheck', 'wSetProject', 'wSetPrefs', 'wSetColblk', 'wSetBookmark', 'wSelWordRight',
        -            'wSelWordLeft', 'wSelUp', 'wSelTop', 'wSelRight', 'wSelPgUp', 'wSelPgDn', 'wSelLeft', 'wSelInfo', 'wSelHome', 'wSelEnd', 'wSelectAll',
        -            'wSelDown', 'wSelBottom', 'wRunRebuild', 'wRunMake', 'wRunExecute', 'wRunDebug', 'wRunConfig', 'wRunCompile', 'wRunCommand', 'wRight',
        -            'wRepeat', 'wRedo', 'wRecord', 'wProperties', 'wPrintDirect', 'wPrinSetup', 'wPrevError', 'wPaste', 'wPageUp', 'wPageDown', 'wNextError',
        -            'wNewLine', 'wLowerCase', 'wLineCount', 'wLeft', 'wInvertCase', 'wInsString', 'wInsLine', 'wHome', 'wHelpKeyword', 'wHelpKeybrd',
        -            'wHelpIndex', 'wHelpHelp', 'wHelpCmds', 'wHelpAbout', 'wGotoLine', 'wGotoCol', 'wGetWrap', 'wGetWord', 'wGetUndo', 'wGetSelstate',
        -            'wGetRedo', 'wGetOutput', 'wGetModified', 'wGetLineNo', 'wGetIns', 'wGetFilename', 'wGetColNo', 'wGetChar', 'wFtpOpen', 'wFindNext',
        -            'wFindInFiles', 'wFind', 'wFileSaveAs', 'wFileSave', 'wFileRevert', 'wFilePrint', 'wFilePgSetup', 'wFileOpen', 'wFileNew', 'wFileMerge',
        -            'wFileList', 'wFileExit', 'wEndSel', 'wEndOfFile', 'wEnd', 'wEdWrap', 'wEdWordRight', 'wEdWordLeft', 'wEdUpLine', 'wEdUndo', 'wEdTopOfFile',
        -            'wEdToggleIns', 'wEdTab', 'wEdStartSel', 'wEdSetColBlk', 'wEdSelectAll', 'wEdRight', 'wEdRedo', 'wEdPaste', 'wEdPageUp', 'wEdPageDown',
        -            'wEdNewLine', 'wEdLeft', 'wEdInsString', 'wEdHome', 'wEdGoToLine', 'wEdGoToCol', 'wEdGetWord', 'wEdEndSel', 'wEdEndOfFile', 'wEdEnd',
        -            'wEdDownLine', 'wEdDelete', 'wEdCutLine', 'wEdCut', 'wEdCopyLine', 'wEdCopy', 'wEdClearSel', 'wEdBackTab', 'wEdBackspace', 'wDownLine',
        -            'wDelete', 'wDelButton', 'wCutMarked', 'wCutLine', 'wCutAppend', 'wCut', 'wCopyMarked', 'wCopyLine', 'wCopyAppend', 'wCopy', 'wCompile',
        -            'wClearSel', 'wChange', 'wCallMacro', 'wBackTab', 'wBackspace', 'wAutoIndent', 'wAddButton', 'edWindowTile', 'edWindowRestore',
        -            'edWindowNext', 'edWindowMinimize', 'edWindowMaximize', 'edWindowCloseall', 'edWindowClose', 'edWindowCascade', 'edWindowArrangeIcons',
        -            'edStatusMsg', 'edSearchViewOutput', 'edSearchRepeat', 'edSearchPrevError', 'edSearchNextError', 'edSearchFind', 'edSearchChange',
        -            'edRunRebuild', 'edRunMake', 'edRunExecute', 'edRunDebug', 'edRunConfigure', 'edRunCompile', 'edRunCommand', 'edRecord', 'edHelpProcedures',
        -            'edHelpKeyword', 'edHelpKeyboard', 'edHelpIndex', 'edHelpHelp', 'edHelpCommands', 'edHelpAbout', 'edGetWordWrapState', 'edGetWindowName',
        -            'edGetUndoState', 'edGetSelectionState', 'edGetRedoState', 'edGetModifiedStatus', 'edGetLineNumber', 'edGetInsertState', 'edGetColumnNumber',
        -            'edGetChar', 'edFileSetPreferences', 'edFileSaveAs', 'edFileSave', 'edFilePrinterSetup', 'edFilePrint', 'edFilePageSetup', 'edFileOpen',
        -            'edFileNew', 'edFileMerge', 'edFileList', 'edFileExit', 'edEditWrap', 'edEditWordRight', 'edEditWordLeft', 'edEditUpLine', 'edEditUndo',
        -            'edEditToggleIns', 'edEditTab', 'edEditStartSelection', 'edEditSetColumnBlock', 'edEditSetBookmark', 'edEditSelectAll', 'edEditRight',
        -            'edEditRedo', 'edEditPaste', 'edEditPageUp', 'edEditPageDown', 'edEditLeft', 'edEditInsertString', 'edEditGoToLine', 'edEditGoToColumn',
        -            'edEditGoToBookmark', 'edEditGetCurrentWord', 'edEditEndSelection', 'edEditEndOfLine', 'edEditEndOfFile', 'edEditDownline', 'edEditDelete',
        -            'edEditCutline', 'edEditCut', 'edEditCopyline', 'edEditCopy', 'edEditClearSelection', 'edEditBeginningOfLine', 'edEditBeginningOfFile',
        -            'edEditBackTab', 'edEditBackspace', 'edDeleteButton', 'edAddButton'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '{', '}', '!', '+', '-', '~', '$', '^', '?', '@', '%', '#', '&', '*', '|', '/', '<', '>'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false,
        -        5 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #800080;',
        -            2 => 'color: #0080FF; font-weight: bold;',
        -            3 => 'color: #0000FF;',
        -            4 => 'color: #FF00FF;',
        -            5 => 'color: #008000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #008000; font-style: italic;',
        -            2 => 'color: #FF1010; font-weight: bold;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #006600;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => '',
        -        5 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(//Variable names
        -        0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php
        deleted file mode 100644
        index 4f9cd800..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php
        +++ /dev/null
        @@ -1,141 +0,0 @@
        - 'XBasic',
        -    'COMMENT_SINGLE' => array(1 => "'"),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'WHILE', 'UNTIL', 'TRUE', 'TO', 'THEN', 'SUB', 'STOP', 'STEP',
        -            'SELECT', 'RETURN', 'PROGRAM', 'NEXT', 'LOOP', 'IFZ',
        -            'IFT', 'IFF', 'IF', 'GOTO', 'GOSUB', 'FOR', 'FALSE', 'EXIT',
        -            'ENDIF', 'END', 'ELSE', 'DO', 'CASE', 'ALL'
        -            ),
        -        2 => array(
        -            'XMAKE', 'XLONGAT', 'XLONG', 'WRITE', 'VOID', 'VERSION$', 'VERSION',
        -            'USHORTAT', 'USHORT', 'UNION', 'ULONGAT', 'ULONG', 'UCASE$',
        -            'UBYTEAT', 'UBYTE', 'UBOUND', 'TYPE','TRIM$', 'TAB', 'SWAP',
        -            'SUBADDRESS', 'SUBADDR', 'STUFF$', 'STRING', 'STRING$', 'STR$',
        -            'STATIC', 'SSHORTAT', 'SSHORT', 'SPACE$', 'SMAKE', 'SLONGAT', 'SLONG',
        -            'SIZE', 'SINGLEAT', 'SINGLE', 'SIGNED$', 'SIGN', 'SHELL', 'SHARED',
        -            'SGN', 'SFUNCTION', 'SET', 'SEEK', 'SCOMPLEX', 'SBYTEAT', 'SBYTE',
        -            'RTRIM$', 'ROTATER', 'ROTATEL', 'RJUST$', 'RINSTRI', 'RINSTR',
        -            'RINCHRI', 'RINCHR', 'RIGHT$', 'REDIM', 'READ', 'RCLIP$', 'QUIT',
        -            'PROGRAM$', 'PRINT', 'POF', 'OPEN', 'OCTO$', 'OCT$', 'NULL$', 'MIN',
        -            'MID$', 'MAX', 'MAKE', 'LTRIM$', 'LOF', 'LJUST$', 'LIBRARY', 'LEN',
        -            'LEFT$', 'LCLIP$', 'LCASE$', 'INTERNAL', 'INT', 'INSTRI', 'INSTR',
        -            'INLINE$', 'INFILE$', 'INCHRI', 'INCHR', 'INC', 'IMPORT', 'HIGH1',
        -            'HIGH0', 'HEXX$', 'HEX$', 'GOADDRESS', 'GOADDR', 'GMAKE', 'GLOW',
        -            'GIANTAT', 'GIANT', 'GHIGH', 'FUNCTION', 'FUNCADDRESS', 'FUNCADDR',
        -            'FORMAT$', 'FIX', 'EXTU', 'EXTS', 'EXTERNAL', 'ERROR', 'ERROR$',
        -            'EOF', 'DOUBLEAT', 'DOUBLE', 'DMAKE', 'DLOW', 'DIM', 'DHIGH',
        -            'DECLARE', 'DEC', 'DCOMPLEX', 'CSTRING$', 'CSIZE', 'CSIZE$', 'CLR',
        -            'CLOSE', 'CLEAR', 'CJUST$', 'CHR$', 'CFUNCTION', 'BITFIELD', 'BINB$',
        -            'BIN$', 'AUTOX', 'AUTOS', 'AUTO', 'ATTACH', 'ASC', 'ABS'
        -            ),
        -        3 => array(
        -            'XOR', 'OR', 'NOT', 'MOD', 'AND'
        -            ),
        -        4 => array(
        -            'TANH', 'TAN', 'SQRT', 'SINH', 'SIN', 'SECH', 'SEC', 'POWER',
        -            'LOG10', 'LOG', 'EXP10', 'EXP', 'CSCH', 'CSC', 'COTH', 'COT', 'COSH',
        -            'COS', 'ATANH', 'ATAN', 'ASINH', 'ASIN', 'ASECH', 'ASEC', 'ACSCH',
        -            'ACSC', 'ACOSH', 'ACOS'
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>',
        -        '=','+','-'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #00a1a1;font-weight: bold',
        -            2 => 'color: #000066;font-weight: bold',
        -            3 => 'color: #00a166;font-weight: bold',
        -            4 => 'color: #0066a1;font-weight: bold'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => 'http://www.xbasic.org',
        -        4 => 'http://www.xbasic.org'
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php
        deleted file mode 100644
        index b7a416e1..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php
        +++ /dev/null
        @@ -1,155 +0,0 @@
        - 'XML',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            ),
        -        'COMMENTS' => array(
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SCRIPT' => array(
        -            -1 => 'color: #808080; font-style: italic;', // comments
        -            0 => 'color: #00bbdd;',
        -            1 => 'color: #ddbb00;',
        -            2 => 'color: #339933;',
        -            3 => 'color: #009900;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #000066;',
        -            1 => 'color: #000000; font-weight: bold;',
        -            2 => 'color: #000000; font-weight: bold;'
        -            )
        -        ),
        -    'URLS' => array(
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        0 => array(//attribute names
        -            GESHI_SEARCH => '([a-z_:][\w\-\.:]*)(=)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => '\\2'
        -            ),
        -        1 => array(//Initial header line
        -            GESHI_SEARCH => '(<[\/?|(\?xml)]?[a-z_:][\w\-\.:]*(\??>)?)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        2 => array(//Tag end markers
        -            GESHI_SEARCH => '(([\/|\?])?>)',
        -            GESHI_REPLACE => '\\1',
        -            GESHI_MODIFIERS => 'i',
        -            GESHI_BEFORE => '',
        -            GESHI_AFTER => ''
        -            ),
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
        -    'SCRIPT_DELIMITERS' => array(
        -        -1 => array(
        -            ''
        -            ),
        -        0 => array(
        -            ' '>'
        -            ),
        -        1 => array(
        -            '&' => ';'
        -            ),
        -        2 => array(
        -            ' ']]>'
        -            ),
        -        3 => array(
        -            '<' => '>'
        -            )
        -    ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        -1 => false,
        -        0 => false,
        -        1 => false,
        -        2 => false,
        -        3 => true
        -        ),
        -    'TAB_WIDTH' => 2,
        -    'PARSER_CONTROL' => array(
        -        'ENABLE_FLAGS' => array(
        -            'NUMBERS' => GESHI_NEVER
        -        )
        -    )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php
        deleted file mode 100644
        index 35718beb..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php
        +++ /dev/null
        @@ -1,122 +0,0 @@
        - 'Xorg configuration',
        -    'COMMENT_SINGLE' => array(1 => '#'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        // sections
        -        1 => array(
        -            'Section', 'EndSection', 'SubSection', 'EndSubSection'
        -            ),
        -        2 => array(
        -            // see http://www.x.org/archive/X11R6.9.0/doc/html/xorg.conf.5.html
        -            'BiosBase', 'Black', 'Boardname', 'BusID', 'ChipID', 'ChipRev',
        -            'Chipset', 'ClockChip', 'Clocks', 'DacSpeed',
        -            'DefaultDepth', 'DefaultFbBpp', 'Depth', 'Device',
        -            'DisplaySize', 'Driver', 'FbBpp', 'Gamma',
        -            'HorizSync', 'IOBase', 'Identifier', 'InputDevice',
        -            'Load', 'MemBase', 'Mode', 'Modeline', 'Modelname',
        -            'Modes', 'Monitor', 'Option', 'Ramdac', 'RgbPath',
        -            'Screen', 'TextClockFreq', 'UseModes', 'VendorName',
        -            'VertRefresh', 'VideoAdaptor', 'VideoRam',
        -            'ViewPort', 'Virtual', 'Visual', 'Weight', 'White'
        -            ),
        -        3 => array(
        -            // some sub-keywords
        -            // screen position
        -            'Above', 'Absolute', 'Below', 'LeftOf', 'Relative', 'RightOf',
        -            // modes
        -            'DotClock', 'Flags', 'HSkew', 'HTimings', 'VScan', 'VTimings'
        -            ),
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'SYMBOLS' => array(
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #b1b100;',
        -            2 => 'color: #990000;',
        -            3 => 'color: #550000;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #0000ff;',
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #cc66cc;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 4
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php
        deleted file mode 100644
        index 4ea5e227..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php
        +++ /dev/null
        @@ -1,434 +0,0 @@
        -
        - *
        - * CHANGES
        - * -------
        - * 2007/02/28 (1.0.0)
        - *  -  First Release
        - *
        - * TODO (updated 2007/02/27)
        - * -------------------------
        - *
        - *************************************************************************************
        - *
        - *     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' => 'X++',
        -    'COMMENT_SINGLE' => array(1 => '//'),
        -    'COMMENT_MULTI' => array('/*' => '*/'),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array( // Primitive types
        -            'void',
        -            'str',
        -            'real',
        -            'int64',
        -            'int',
        -            'date',
        -            'container',
        -            'boolean',
        -            'anytype'
        -            ),
        -        2 => array( // Keywords
        -            'window',
        -            'while',
        -            'try',
        -            'true',
        -            'throw',
        -            'switch',
        -            'super',
        -            'static',
        -            'server',
        -            'right',
        -            'return',
        -            'retry',
        -            'public',
        -            'protected',
        -            'private',
        -            'print',
        -            'pause',
        -            'null',
        -            'new',
        -            'mod',
        -            'left',
        -            'interface',
        -            'implements',
        -            'if',
        -            'for',
        -            'final',
        -            'false',
        -            'extends',
        -            'else',
        -            'edit',
        -            'do',
        -            'div',
        -            'display',
        -            'default',
        -            'continue',
        -            'client',
        -            'class',
        -            'changeCompany',
        -            'case',
        -            'breakpoint',
        -            'break',
        -            'at',
        -            'abstract'
        -            ),
        -        3 => array( // Functions within the Axapta kernel
        -            'year',
        -            'wkofyr',
        -            'webwebpartstr',
        -            'webstaticfilestr',
        -            'websitetempstr',
        -            'websitedefstr',
        -            'webreportstr',
        -            'webpagedefstr',
        -            'weboutputcontentitemstr',
        -            'webmenustr',
        -            'webletitemstr',
        -            'webformstr',
        -            'webdisplaycontentitemstr',
        -            'webactionitemstr',
        -            'varstr',
        -            'utilmoyr',
        -            'uint2str',
        -            'typeof',
        -            'typeid',
        -            'trunc',
        -            'today',
        -            'timenow',
        -            'time2str',
        -            'term',
        -            'tanh',
        -            'tan',
        -            'tablestr',
        -            'tablestaticmethodstr',
        -            'tablepname',
        -            'tablenum',
        -            'tablename2id',
        -            'tablemethodstr',
        -            'tableid2pname',
        -            'tableid2name',
        -            'tablefieldgroupstr',
        -            'tablecollectionstr',
        -            'systemdateset',
        -            'systemdateget',
        -            'syd',
        -            'substr',
        -            'strupr',
        -            'strscan',
        -            'strrtrim',
        -            'strrep',
        -            'strrem',
        -            'strprompt',
        -            'strpoke',
        -            'strnfind',
        -            'strlwr',
        -            'strltrim',
        -            'strline',
        -            'strlen',
        -            'strkeep',
        -            'strins',
        -            'strfmt',
        -            'strfind',
        -            'strdel',
        -            'strcolseq',
        -            'strcmp',
        -            'stralpha',
        -            'str2time',
        -            'str2num',
        -            'str2int64',
        -            'str2int',
        -            'str2guid',
        -            'str2enum',
        -            'str2date',
        -            'staticmethodstr',
        -            'sln',
        -            'sleep',
        -            'sinh',
        -            'sin',
        -            'setprefix',
        -            'sessionid',
        -            'securitykeystr',
        -            'securitykeynum',
        -            'runbuf',
        -            'runas',
        -            'round',
        -            'resourcestr',
        -            'reportstr',
        -            'refprintall',
        -            'rate',
        -            'querystr',
        -            'pv',
        -            'pt',
        -            'prmisdefault',
        -            'primoyr',
        -            'prevyr',
        -            'prevqtr',
        -            'prevmth',
        -            'power',
        -            'pmt',
        -            'num2str',
        -            'num2date',
        -            'num2char',
        -            'nextyr',
        -            'nextqtr',
        -            'nextmth',
        -            'newguid',
        -            'mthofyr',
        -            'mthname',
        -            'mkdate',
        -            'minint',
        -            'min',
        -            'methodstr',
        -            'menustr',
        -            'menuitemoutputstr',
        -            'menuitemdisplaystr',
        -            'menuitemactionstr',
        -            'maxint',
        -            'maxdate',
        -            'max',
        -            'match',
        -            'logn',
        -            'log10',
        -            'literalstr',
        -            'licensecodestr',
        -            'licensecodenum',
        -            'intvnorm',
        -            'intvno',
        -            'intvname',
        -            'intvmax',
        -            'int64str',
        -            'indexstr',
        -            'indexnum',
        -            'indexname2id',
        -            'indexid2name',
        -            'idg',
        -            'identifierstr',
        -            'helpfilestr',
        -            'helpdevstr',
        -            'helpapplstr',
        -            'guid2str',
        -            'getprefix',
        -            'getCurrentUTCTime',
        -            'fv',
        -            'funcname',
        -            'frac',
        -            'formstr',
        -            'fieldstr',
        -            'fieldpname',
        -            'fieldnum',
        -            'fieldname2id',
        -            'fieldid2pname',
        -            'fieldid2name',
        -            'extendedTypeStr',
        -            'extendedTypeNum',
        -            'exp10',
        -            'exp',
        -            'evalbuf',
        -            'enumstr',
        -            'enumnum',
        -            'enumcnt',
        -            'enum2str',
        -            'endmth',
        -            'dimof',
        -            'dg',
        -            'decround',
        -            'ddb',
        -            'dayofyr',
        -            'dayofwk',
        -            'dayofmth',
        -            'dayname',
        -            'date2str',
        -            'date2num',
        -            'curuserid',
        -            'curext',
        -            'cterm',
        -            'cosh',
        -            'cos',
        -            'corrflagset',
        -            'corrflagget',
        -            'convertUTCTimeToLocalTime',
        -            'convertUTCDateToLocalDate',
        -            'conpoke',
        -            'conpeek',
        -            'connull',
        -            'conlen',
        -            'conins',
        -            'confind',
        -            'configurationkeystr',
        -            'configurationkeynum',
        -            'condel',
        -            'classstr',
        -            'classnum',
        -            'classidget',
        -            'char2num',
        -            'beep',
        -            'atan',
        -            'asin',
        -            'ascii2ansi',
        -            'any2str',
        -            'any2real',
        -            'any2int64',
        -            'any2int',
        -            'any2guid',
        -            'any2enum',
        -            'any2date',
        -            'ansi2ascii',
        -            'acos',
        -            'abs'
        -            ),
        -        4 => array( // X++ SQL stuff
        -            'where',
        -            'update_recordset',
        -            'ttsCommit',
        -            'ttsBegin',
        -            'ttsAbort',
        -            'sum',
        -            'setting',
        -            'select',
        -            'reverse',
        -            'pessimisticLock',
        -            'outer',
        -            'order by',
        -            'optimisticLock',
        -            'notExists',
        -            'noFetch',
        -            'next',
        -            'minof',
        -            'maxof',
        -            'like',
        -            'join',
        -            'insert_recordset',
        -            'index hint',
        -            'index',
        -            'group by',
        -            'from',
        -            'forUpdate',
        -            'forceSelectOrder',
        -            'forcePlaceholders',
        -            'forceNestedLoop',
        -            'forceLiterals',
        -            'flush',
        -            'firstOnly',
        -            'firstFast',
        -            'exists',
        -            'desc',
        -            'delete_from',
        -            'count',
        -            'avg',
        -            'asc'
        -            )
        -        ),
        -    'SYMBOLS' => array( // X++ symbols
        -        '!',
        -        '&',
        -        '(',
        -        ')',
        -        '*',
        -        '^',
        -        '|',
        -        '~',
        -        '+',
        -        ',',
        -        '-',
        -        '/',
        -        ':',
        -        '<',
        -        '=',
        -        '>',
        -        '?',
        -        '[',
        -        ']',
        -        '{',
        -        '}'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #0000ff;',
        -            4 => 'color: #0000ff;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #007f00;',
        -            'MULTI' => 'color: #007f00; font-style: italic;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #ff0000;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #000000;'
        -            ),
        -        'METHODS' => array(
        -            1 => 'color: #000000;',
        -            2 => 'color: #000000;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #00007f;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.',
        -        2 => '::'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php
        deleted file mode 100644
        index 7e640386..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php
        +++ /dev/null
        @@ -1,148 +0,0 @@
        -: since PHP offers no variable-width lookbehind,
        - *      these blocks will still be highlighted even when commented out. As it happens,
        - *      any line ending with | or > could result in the unintentional highlighting of
        - *      all remaining lines in the file, just because I couldn't check for this regex
        - *      as a lookbehind:  '/:(\s+)(!!(\w+)(\s+))?/'
        - *      If there is a workaround for that, it needs implemented.
        - *   *  I may be missing some operators. I deliberately omitted inline array notation
        - *      as, in general, it's ugly and tends to conflict with plain-text. Ensuring all
        - *      highlighted list delimiters are not plain text would be as simple as checking
        - *      that they follow a colon directly. Alas, without variable-length lookbehinds,
        - *      if there is a way to do so in GeSHi I am unaware of it.
        - *   *  I kind of whored the comment regexp array. It seemed like a safe bet, so it's
        - *      where I crammed everything. Some of it may need moved elsewhere for neatness.
        - *   *  The !!typename highlight needs not to interfere with ": |" and ": >": Pairing
        - *      key: !!type | value is perfectly legal, but again due to lookbehind issues, I
        - *      can't add a case for that. Also, it is likely that multiple spaces can be put
        - *      between the colon and pipe symbol, which would also break it.
        - *
        - *************************************************************************************
        - *
        - *     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' => 'YAML',
        -    'COMMENT_SINGLE' => array(),
        -    'COMMENT_MULTI' => array(),
        -    //Keys
        -    'COMMENT_REGEXP' => array( // ENTRY ZERO  SHOULD CHECK FOR (\n(\s*)([^#%]+?):(\s+)(!!(\w+)(\s+))?) AS A LOOKBEHIND, BUT IT CAN'T.
        -        0 => '/(?<=\s[\|>]\n)(\s+)(.*)((?=[\n$])(([\n^](\1(.*)|(?=[\n$])))*)|$)/', // Pipe blocks and > blocks.
        -        1 => '/#(.*)/', // Blue # comments
        -        2 => '/%(.*)/', // Red % comments
        -        3 => '/(^|\n)([^#%^\n]+?)(?=: )/',  // Key-value names
        -        4 => '/(^|\n)([^#%^\n]+?)(?=:\n)/',// Key-group names
        -        5 => '/(?<=^---)(\s*)!(\S+)/',    // Comments after ---
        -        6 => '/(?<=: )(\s*)\&(\S+)/',    // References
        -        7 => '/(?<=: )(\s*)\*(\S+)/',   // Dereferences
        -        8 => '/!!(\w+)/',              // Types
        -        //9 => '/(?<=\n)(\s*)-(?!-)/',       // List items: This needs to search within comments 3 and 4, but I don't know how.
        -        ),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            'all','any','none', "yes", "no"
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        1 => array('---', '...'),
        -        2 => array(': ', ">\n", "|\n", '<<:', ":\n") // It'd be nice if I could specify that the colon must
        -        //                                              follow comment 3 or 4 to be considered, and the > and |
        -        //                                              must follow such a colon.
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'font-weight: bold;'
        -            ),
        -        'COMMENTS' => array(
        -            0 => 'color: #303050;background-color: #F5F5F5',
        -            1 => 'color: blue;',
        -            2 => 'font-weight: bold; color: red;',
        -            3 => 'color: green;',
        -            4 => 'color: #007F45;',
        -            5 => 'color: #7f7fFF;',
        -            6 => 'color: #FF7000;',
        -            7 => 'color: #FF45C0;',
        -            8 => 'font-weight: bold; color: #005F5F;',
        -            //9 => 'font-weight: bold; color: #000000;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            ),
        -        'BRACKETS' => array(
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #CF00CF;'
        -            ),
        -        'NUMBERS' => array(
        -            // 0 => 'color: #33f;' // Don't highlight numbers, really...
        -            ),
        -        'METHODS' => array(
        -            1 => '',
        -            2 => ''
        -            ),
        -        'SYMBOLS' => array(
        -            1 => 'color: cyan;',
        -            2 => 'font-weight: bold; color: brown;'
        -            ),
        -        'REGEXPS' => array(
        -            ),
        -        'SCRIPT' => array(
        -            0 => ''
        -            )
        -        ),
        -    'URLS' => array(1 => ''),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(),
        -    'REGEXPS' => array(),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(),
        -    'HIGHLIGHT_STRICT_BLOCK' => array()
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php
        deleted file mode 100644
        index 07df46d0..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php
        +++ /dev/null
        @@ -1,142 +0,0 @@
        - 'ZiLOG Z80 Assembler',
        -    'COMMENT_SINGLE' => array(1 => ';'),
        -    'COMMENT_MULTI' => array(),
        -    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array("'", '"'),
        -    'ESCAPE_CHAR' => '',
        -    'KEYWORDS' => array(
        -        /*CPU*/
        -        1 => array(
        -            'adc','add','and','bit','call','ccf','cp','cpd','cpdr','cpir','cpi',
        -            'cpl','daa','dec','di','djnz','ei','ex','exx','halt','im','in',
        -            'in0','inc','ind','indr','inir','ini','jp','jr','ld','ldd','lddr',
        -            'ldir','ldi','mlt','neg','nop','or','otdm','otdmr','otdr','otim',
        -            'otimr','otir','out','out0','outd','outi','pop','push','res','ret',
        -            'reti','retn','rl','rla','rlc','rlca','rld','rr','rra','rrc','rrca',
        -            'rrd','rst','sbc','scf','set','sla','sl1','sll','slp','sra','srl',
        -            'sub','tst','tstio','xor'
        -            ),
        -        /*registers*/
        -        2 => array(
        -            'a','b','c','d','e','h','l',
        -            'af','bc','de','hl','ix','iy','sp',
        -            'af\'','ixh','ixl','iyh','iyl'
        -            ),
        -        /*Directive*/
        -        3 => array(
        -            '#define','#endif','#else','#ifdef','#ifndef','#include','#undef',
        -            '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ'
        -            ),
        -        ),
        -    'SYMBOLS' => array(
        -        '[', ']', '(', ')', '?', '+', '-', '*', '/', '%', '$'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #0000ff; font-weight:bold;',
        -            2 => 'color: #0000ff;',
        -            3 => 'color: #46aa03; font-weight:bold;'
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #adadad; font-style: italic;',
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099; font-weight: bold;'
        -            ),
        -        'BRACKETS' => array(
        -            0 => 'color: #0000ff;'
        -            ),
        -        'STRINGS' => array(
        -            0 => 'color: #7f007f;'
        -            ),
        -        'NUMBERS' => array(
        -            0 => 'color: #dd22dd;'
        -            ),
        -        'METHODS' => array(
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #008000;'
        -            ),
        -        'REGEXPS' => array(
        -            0 => 'color: #22bbff;',
        -            1 => 'color: #22bbff;',
        -            2 => 'color: #993333;'
        -            ),
        -        'SCRIPT' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => ''
        -        ),
        -    'OOLANG' => false,
        -    'OBJECT_SPLITTERS' => array(
        -        ),
        -    'REGEXPS' => array(
        -        //Hex numbers
        -        0 => '0[0-9a-fA-F]{1,32}[hH]',
        -        //Binary numbers
        -        1 => '\%[01]{1,64}|[01]{1,64}[bB]?(?![^<]*>)',
        -        //Labels
        -        2 => '^[_a-zA-Z][_a-zA-Z0-9]?\:'
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        ),
        -    'TAB_WIDTH' => 8
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php
        deleted file mode 100644
        index 1017678d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php
        +++ /dev/null
        @@ -1,148 +0,0 @@
        - 'ZXBasic',
        -    'COMMENT_SINGLE' => array(
        -        1 => "'",
        -        2 => '#',
        -        3 => 'REM'
        -        ),
        -    'COMMENT_MULTI' => array("/'" => "'/"),
        -    'CASE_KEYWORDS' => GESHI_CAPS_UPPER, //GESHI_CAPS_NO_CHANGE,
        -    'QUOTEMARKS' => array('"'),
        -    'ESCAPE_CHAR' => '\\',
        -    'KEYWORDS' => array(
        -        1 => array(
        -            "ASM", "BEEP", "BOLD", "BORDER", "BRIGHT", "ByRef", "ByVal", "CAST",
        -            "CIRCLE", "CLS", "CONST", "CONTINUE", "DECLARE", "DIM", "DO",
        -            "DRAW", "ELSE", "ELSEIF", "END", "EXIT", "FastCall", "FLASH", "FOR",
        -            "FUNCTION", "GOTO", "GOSUB", "GO", "IF", "INK", "INVERSE", "ITALIC",
        -            "LET", "LOAD", "LOOP", "NEXT", "OVER", "PAPER", "PAUSE", "PI",
        -            "PLOT", "POKE", "PRINT", "RANDOMIZE", "REM", "RETURN", "SAVE",
        -            "StdCall", "Sub", "THEN", "TO", "UNTIL", "VERIFY", "WEND", "WHILE",
        -            ),
        -
        -        // types
        -        2 => array(
        -            'byte', 'ubyte', 'integer', 'uinteger', 'long', 'ulong', 'fixed',
        -            'float', 'string'
        -            ),
        -
        -        // Functions
        -        3 => array(
        -            "ABS", "ACS", "ASN", "ATN", "CHR", "CODE", "COS", "CSRLIN", "EXP",
        -            "HEX", "HEX16", "INKEY", "INT", "LEN", "LN", "PEEK", "POS", "RND",
        -            "SCREEN$", "SGN", "SIN", "SQR", "STR", "TAN", "VAL",
        -            ),
        -
        -        // Operators and modifiers
        -        4 => array(
        -            "AT", "AS", "AND", "MOD", "NOT", "OR", "SHL", "SHR", "STEP", "XOR"
        -            )
        -        ),
        -    'SYMBOLS' => array(
        -        '(', ')'
        -        ),
        -    'CASE_SENSITIVE' => array(
        -        GESHI_COMMENTS => false,
        -        1 => false,
        -        2 => false,
        -        3 => false,
        -        4 => false
        -        ),
        -    'STYLES' => array(
        -        'KEYWORDS' => array(
        -            1 => 'color: #000080; font-weight: bold;', // Commands
        -            2 => 'color: #800080; font-weight: bold;', // Types
        -            3 => 'color: #006000; font-weight: bold;', // Functions
        -            4 => 'color: #801010; font-weight: bold;'  // Operators and Modifiers
        -            ),
        -        'COMMENTS' => array(
        -            1 => 'color: #808080; font-style: italic;',
        -            2 => 'color: #339933;',
        -            3 => 'color: #808080; font-style: italic;',
        -            'MULTI' => 'color: #808080; font-style: italic;'
        -            ),
        -        'BRACKETS' => array(
        -            //0 => 'color: #66cc66;'
        -            0 => 'color: #007676;'
        -            ),
        -        'STRINGS' => array(
        -            //0 => 'color: #ff0000;'
        -            0 => 'color: #A00000; font-style: italic;'
        -            ),
        -        'NUMBERS' => array(
        -            //0 => 'color: #cc66cc;'
        -            0 => 'color: #b05103;'// font-weight: bold;'
        -            ),
        -        'METHODS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'SYMBOLS' => array(
        -            0 => 'color: #66cc66;'
        -            ),
        -        'ESCAPE_CHAR' => array(
        -            0 => 'color: #000099;'
        -            ),
        -        'SCRIPT' => array(
        -            ),
        -        'REGEXPS' => array(
        -            )
        -        ),
        -    'URLS' => array(
        -        1 => '',
        -        2 => '',
        -        3 => '',
        -        4 => ''
        -        ),
        -    'OOLANG' => true,
        -    'OBJECT_SPLITTERS' => array(
        -        1 => '.'
        -        ),
        -    'REGEXPS' => array(
        -        ),
        -    'STRICT_MODE_APPLIES' => GESHI_NEVER,
        -    'SCRIPT_DELIMITERS' => array(
        -        ),
        -    'HIGHLIGHT_STRICT_BLOCK' => array(
        -        )
        -);
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ady-cyrl.json b/extensions/SyntaxHighlight_GeSHi/i18n/ady-cyrl.json
        new file mode 100644
        index 00000000..9ec3c24d
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ady-cyrl.json
        @@ -0,0 +1,10 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"GR44 Luc",
        +			"TheRossatron"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Код",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "БзÑ"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/af.json b/extensions/SyntaxHighlight_GeSHi/i18n/af.json
        index 5239fc0a..2b6f1a9d 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/af.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/af.json
        @@ -3,11 +3,10 @@
         		"authors": [
         			"Naudefj",
         			"SPQRobin",
        -			"පසිඳු කà·à·€à·’න්ද"
        +			"පසිඳු කà·à·€à·’න්ද",
        +			"Oesjaar"
         		]
         	},
        -	"syntaxhighlight-specify": "U moet 'n taal as volg spesifiseer:",
        -	"syntaxhighlight-supported": "Ondersteunde tale vir accentuering:",
        -	"syntaxhighlight-err-loading": "(fout met die laai van die lys van ondersteunde tale)",
        -	"syntaxhighlight-err-language": "Ongeldige taal."
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Wys lyn nommers.",
        +	"syntaxhighlight-error-unknown-language": "Onbekende taal  \"$1\""
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/an.json b/extensions/SyntaxHighlight_GeSHi/i18n/an.json
        index 77898f70..0cc17957 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/an.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/an.json
        @@ -4,10 +4,5 @@
         			"Juanpabl"
         		]
         	},
        -	"syntaxhighlight-desc": "Premite o resalte sintactico <syntaxhighlight> usando [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Ha d'endicar un lenguache asinas:",
        -	"syntaxhighlight-supported": "Lenguaches suportatos ta o resalte sintactico:",
        -	"syntaxhighlight-err-loading": "(error en cargar a lista de luengaches suportatos)",
        -	"syntaxhighlight-err-language": "Luengache invalido.",
        -	"geshi.css": "/* Iste codigo CSS s'aplicará ta destacar a sintaxi GeSHi*/"
        +	"syntaxhighlight-desc": "Premite o resalte sintactico <syntaxhighlight> usando [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ar.json b/extensions/SyntaxHighlight_GeSHi/i18n/ar.json
        index 9e218de7..3c5ef487 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ar.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ar.json
        @@ -4,10 +4,5 @@
         			"Meno25"
         		]
         	},
        -	"syntaxhighlight-desc": "يوÙر تعليم النص <syntaxhighlight> باستخدام [http://qbnz.com/highlighter/ معلم GeSHi]",
        -	"syntaxhighlight-specify": "يجب عليك تحديد لغة مثل هذه:",
        -	"syntaxhighlight-supported": "اللغات المدعومة لتظليل الصياغة:",
        -	"syntaxhighlight-err-loading": "(خطأ ÙÙŠ تحميل قائمة اللغات المدعومة)",
        -	"syntaxhighlight-err-language": "لغة غير صحيحة.",
        -	"geshi.css": "/* الأنماط المتراصة CSS المعروضة هنا ستطبق على تظليل صياغة GeSHi */"
        +	"syntaxhighlight-desc": "يوÙر تعليم النص <syntaxhighlight> باستخدام [http://pygments.org/ معلم GeSHi]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/arz.json b/extensions/SyntaxHighlight_GeSHi/i18n/arz.json
        index dce550f1..daaf98cd 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/arz.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/arz.json
        @@ -5,10 +5,5 @@
         			"Ramsis II"
         		]
         	},
        -	"syntaxhighlight-desc": "بيوÙر تظليل السينتاكس <syntaxhighlight> باستعمال [http://qbnz.com/highlighter/ GeSHi مظلل]",
        -	"syntaxhighlight-specify": "انت لازم تحدد لغة زى كدا:",
        -	"syntaxhighlight-supported": "اللغات المدعومة لتظليل السينتاكس:",
        -	"syntaxhighlight-err-loading": "(غلط ÙÙ‰ تحميل لستة اللغات المدعومة)",
        -	"syntaxhighlight-err-language": "لغة مش صحيحة",
        -	"geshi.css": "/* CSS المحطوطة هنا ح تتطبق على تظليل سينتاكس الGeSHi */"
        +	"syntaxhighlight-desc": "بيوÙر تظليل السينتاكس <syntaxhighlight> باستعمال [http://pygments.org/ GeSHi مظلل]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/as.json b/extensions/SyntaxHighlight_GeSHi/i18n/as.json
        deleted file mode 100644
        index ca743135..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/as.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Bishnu Saikia"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "অবৈধ ভাষা।"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ast.json b/extensions/SyntaxHighlight_GeSHi/i18n/ast.json
        index dcba773f..7e67265d 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ast.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ast.json
        @@ -1,13 +1,19 @@
         {
         	"@metadata": {
         		"authors": [
        -			"Esbardu"
        +			"Esbardu",
        +			"Xuacu"
         		]
         	},
        -	"syntaxhighlight-desc": "Proporciona resaltáu de sintaxis <syntaxhighlight> usando [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Necesites conseñar una llingua como esta:",
        -	"syntaxhighlight-supported": "Llingües sofitaes pa la sintaxis en colores:",
        -	"syntaxhighlight-err-loading": "(error al cargar la llista de llingües sofitaes)",
        -	"syntaxhighlight-err-language": "Llingua non válida.",
        -	"geshi.css": "/* El códigu CSS allugáu equí va ser aplicáu por GeSHi pa la sintaxis en colores */"
        +	"syntaxhighlight-desc": "Proporciona resaltáu de sintaxis <syntaxhighlight> usando [http://pygments.org/ Pygments - Resaltador de sintaxis en Python]",
        +	"syntaxhighlight-error-category": "Páxines con errores de resaltáu de sintaxis",
        +	"syntaxhighlight-error-category-desc": "Hebo un error al intentar resaltar el códigu incluyíu na páxina.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Códigu",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Llingua",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(nengún)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Amosar númberos de llinia",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Bloque de códigu",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Fallu al llamar a Pygments",
        +	"syntaxhighlight-error-unknown-language": "Llingua «$1» desconocida",
        +	"syntaxhighlight-error-exceeds-size-limit": "El tamañu del códigu $1 {{PLURAL:$1|bytes}} supera'l máximu permitíu de $2 {{PLURAL:$2|bytes}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/az.json b/extensions/SyntaxHighlight_GeSHi/i18n/az.json
        new file mode 100644
        index 00000000..b1bbcb63
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/az.json
        @@ -0,0 +1,8 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Wertuose"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(heç biri)"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ba.json b/extensions/SyntaxHighlight_GeSHi/i18n/ba.json
        index 687b3f87..c9154482 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ba.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ba.json
        @@ -4,10 +4,5 @@
         			"Assele"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi Highlighter] Ñрҙамында ÑинтакÑиÑÑ‚Ñ‹ айырып күрһәтеү Ó©Ñөн <syntaxhighlight> билдәһен ҡулланыу мөмкинлеген бирә",
        -	"syntaxhighlight-specify": "Һеҙ телде түбәндәгеÑÓ™ күрһәтергә тейешһегеҙ:",
        -	"syntaxhighlight-supported": "СинтакÑиÑÑ‚Ñ‹ айырып күрһәтеү мөмкин булған телдәр:",
        -	"syntaxhighlight-err-loading": "(телдәр иÑемлеген Ñығарыу хатаһы)",
        -	"syntaxhighlight-err-language": "Тел дөрөҫ түгел.",
        -	"geshi.css": "/* Бында ҡуйылған CSS-код ÑиÑтанкÑиÑÑ‚Ñ‹ GeSHi Ñрҙамында айырып күрһәтеү Ó©Ñөн ҡулланылаÑаҡ */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ Pygments] Ñрҙамында ÑинтакÑиÑÑ‚Ñ‹ айырып күрһәтеү Ó©Ñөн <syntaxhighlight> билдәһен ҡулланыу мөмкинлеген бирә"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/bcc.json b/extensions/SyntaxHighlight_GeSHi/i18n/bcc.json
        index 7d454e0d..adff460e 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/bcc.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/bcc.json
        @@ -4,10 +4,5 @@
         			"Mostafadaneshvar"
         		]
         	},
        -	"syntaxhighlight-desc": "ساختار پررنگی آریت <syntaxhighlight> گون استÙاده Ú†Ù‡[http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "لازمنت شما یک زبانی په داب شی مشخض کنیت:",
        -	"syntaxhighlight-supported": "حمایتی زبانان په ساختار پررنگی:",
        -	"syntaxhighlight-err-loading": "(حطا ته بار کتن لیست زبان داشتگین)",
        -	"syntaxhighlight-err-language": "نامعتبرین زبان",
        -	"geshi.css": "/* CSS که ادان هستن ته ساختار جی شی پررنگ کتن کارمرز بین */"
        +	"syntaxhighlight-desc": "ساختار پررنگی آریت <syntaxhighlight> گون استÙاده Ú†Ù‡[http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/be-tarask.json b/extensions/SyntaxHighlight_GeSHi/i18n/be-tarask.json
        index 35abcf60..97b991be 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/be-tarask.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/be-tarask.json
        @@ -5,10 +5,5 @@
         			"Jim-by"
         		]
         	},
        -	"syntaxhighlight-desc": "ДазвалÑе выкарыÑтоўваць Ñ‚Ñг  <syntaxhighlight> Ð´Ð»Ñ Ð¿Ð°Ð´Ñьветкі ÑынтакÑÑ–Ñу з дапамогай [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Вам неабходна пазначыць мову наÑтупным чынам:",
        -	"syntaxhighlight-supported": "Мовы, ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†Ñ†Ð° Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²ÐµÑ€ÐºÑ– ÑынтакÑÑ–Ñу:",
        -	"syntaxhighlight-err-loading": "(памылка загрузкі ÑьпіÑу моваў)",
        -	"syntaxhighlight-err-language": "Мова не падтрымліваецца.",
        -	"geshi.css": "/* CSS, разьмешчаны тут, будзе выкарыÑтоўвацца Ð´Ð»Ñ Ð¿Ð°Ð´Ñьветкі ÑынтакÑÑ–Ñу GeSHi */"
        +	"syntaxhighlight-desc": "ДазвалÑе выкарыÑтоўваць Ñ‚Ñг  <syntaxhighlight> Ð´Ð»Ñ Ð¿Ð°Ð´Ñьветкі ÑынтакÑÑ–Ñу з дапамогай [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/bg.json b/extensions/SyntaxHighlight_GeSHi/i18n/bg.json
        index ee9cfb7e..97662fed 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/bg.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/bg.json
        @@ -6,10 +6,5 @@
         			"Turin"
         		]
         	},
        -	"syntaxhighlight-desc": "ОÑигурÑва Ñинтактично оÑветÑване на <syntaxhighlight> чрез [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Ðужно е да укажете език по ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð¸Ð½:",
        -	"syntaxhighlight-supported": "Поддържани езици за Ñинтактично откроÑване:",
        -	"syntaxhighlight-err-loading": "(грешка при зареждането на ÑпиÑъка на поддържаните езици)",
        -	"syntaxhighlight-err-language": "Ðевалиден език.",
        -	"geshi.css": "/* Евентуален код на CSS, поÑтавен тук, ще бъде използван за Ñинтактичното откроÑване чрез GeSHi */"
        +	"syntaxhighlight-desc": "ОÑигурÑва Ñинтактично оÑветÑване на <syntaxhighlight> чрез [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/bn.json b/extensions/SyntaxHighlight_GeSHi/i18n/bn.json
        index c24911ec..a6417f32 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/bn.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/bn.json
        @@ -1,13 +1,15 @@
         {
         	"@metadata": {
         		"authors": [
        -			"Zaheen"
        +			"Zaheen",
        +			"Aftabuzzaman",
        +			"Jim Carter",
        +			"Sayma Jahan"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi হাইলাইটার] বà§à¦¯à¦¬à¦¹à¦¾à¦° করে <syntaxhighlight> সিনটà§à¦¯à¦¾à¦•à§à¦¸ হাইলাইটিং-à¦à¦° কà§à¦·à¦®à¦¤à¦¾ দেয়",
        -	"syntaxhighlight-specify": "আপনাকে à¦à¦­à¦¾à¦¬à§‡ à¦à¦•à¦Ÿà¦¿ ভাষা নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করতে হবে:",
        -	"syntaxhighlight-supported": "যেসব ভাষার জনà§à¦¯ সিনটà§à¦¯à¦¾à¦•à§à¦¸ হাইলাইটিং সমরà§à¦¥à¦¿à¦¤:",
        -	"syntaxhighlight-err-loading": "(সমরà§à¦¥à¦¿à¦¤ ভাষার তালিকা আনতে তà§à¦°à§à¦Ÿà¦¿)",
        -	"syntaxhighlight-err-language": "অবৈধ ভাষা।",
        -	"geshi.css": "/* à¦à¦–ানে সà§à¦¥à¦¾à¦ªà¦¿à¦¤ CSS কোড GeSHi সিনটà§à¦¯à¦¾à¦•à§à¦¸ হাইলাইটিং-ঠবà§à¦¯à¦¬à¦¹à¦¾à¦° করা হবে */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ Pygments - পাইথন সিনটà§à¦¯à¦¾à¦•à§à¦¸ হাইলাইটার] বà§à¦¯à¦¬à¦¹à¦¾à¦° করে <syntaxhighlight> সিনটà§à¦¯à¦¾à¦•à§à¦¸ আলোকপাতের কà§à¦·à¦®à¦¤à¦¾ দেয়",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "কোড",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "ভাষা",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "সারির নমà§à¦¬à¦° পà§à¦°à¦¦à¦°à§à¦¶à¦¨",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "কোড বà§à¦²à¦•"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/br.json b/extensions/SyntaxHighlight_GeSHi/i18n/br.json
        index 27c3fb81..64137653 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/br.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/br.json
        @@ -4,10 +4,5 @@
         			"Fulup"
         		]
         	},
        -	"syntaxhighlight-desc": "Talvezout a ra da lakaat an ereadur war wel dre ar valizenn <syntaxhighlight> en ur ober gant [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Ret eo deoc'h spisaat ur yezh evel-henn :",
        -	"syntaxhighlight-supported": "Yezhoù skoret evit al livadur ereadurel :",
        -	"syntaxhighlight-err-loading": "(fazi en ur gargañ roll ar yezhoù skoret)",
        -	"syntaxhighlight-err-language": "Yezh direizh.",
        -	"geshi.css": "/* Talvezout a raio ar c'hod CSS lakaet amañ d'al livadur ereadurel GeSHi */"
        +	"syntaxhighlight-desc": "Talvezout a ra da lakaat an ereadur war wel dre ar valizenn <syntaxhighlight> en ur ober gant [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/bs.json b/extensions/SyntaxHighlight_GeSHi/i18n/bs.json
        index d115436d..4173a613 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/bs.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/bs.json
        @@ -1,13 +1,11 @@
         {
         	"@metadata": {
         		"authors": [
        -			"CERminator"
        +			"CERminator",
        +			"Semso98",
        +			"Srdjan m"
         		]
         	},
        -	"syntaxhighlight-desc": "Omogućava isticanje sintakse <syntaxhighlight> uz pomoć [http://qbnz.com/highlighter/ GeSHi Highlightera]",
        -	"syntaxhighlight-specify": "Potrebno je da specificirate jezik ovako:",
        -	"syntaxhighlight-supported": "Podržani jezici za isticanje sintakse:",
        -	"syntaxhighlight-err-loading": "(greška pri korištenju spiska podržanih jezika)",
        -	"syntaxhighlight-err-language": "Pogrešan jezik.",
        -	"geshi.css": "/* CSS koji se ovdje postavi će biti korišten za isticanje GeSHi sintakse */"
        +	"syntaxhighlight-desc": "Omogućava isticanje sintakse <source> uz pomoć [http://pygments.org/ Pygments - Python syntax highlighter]",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Prikaži brojeve redova"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ca.json b/extensions/SyntaxHighlight_GeSHi/i18n/ca.json
        index dadf9b41..a195b710 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ca.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ca.json
        @@ -2,13 +2,15 @@
         	"@metadata": {
         		"authors": [
         			"SMP",
        -			"Solde"
        +			"Solde",
        +			"Macofe",
        +			"Annamerida",
        +			"Vriullop"
         		]
         	},
        -	"syntaxhighlight-desc": "Proveeix de ressaltat sintàctic amb l'etiqueta <syntaxhighlight> usant el programa [http://qbnz.com/highlighter/ GeSHi]",
        -	"syntaxhighlight-specify": "Heu d'especificar un dels llenguatges:",
        -	"syntaxhighlight-supported": "Llenguatges admesos per al ressaltament sintàctic:",
        -	"syntaxhighlight-err-loading": "(error en carregar la llista de llenguatges)",
        -	"syntaxhighlight-err-language": "Llenguatge invàlid.",
        -	"geshi.css": "/* El CSS ubicat aquí serà aplicat al ressaltat de sintaxi de GeSHi */"
        +	"syntaxhighlight-desc": "Proveeix de ressaltat sintàctic amb l'etiqueta <syntaxhighlight> usant el programa [http://pygments.org/ GeSHi]",
        +	"syntaxhighlight-error-category": "Pàgines amb errors de marcatge de sintaxi",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Codi",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Mostra els números de línia",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Bloc de codi"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ce.json b/extensions/SyntaxHighlight_GeSHi/i18n/ce.json
        index 05106801..5fcea208 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ce.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ce.json
        @@ -5,7 +5,9 @@
         			"Умар"
         		]
         	},
        -	"syntaxhighlight-desc": "Таро хуьлуьйту тег <syntaxhighlight> лело [http://qbnz.com/highlighter/ GeSHi Highlighter] гӀоьнца ÑинтакÑиÑан Ð±Ð¾Ñ Ñ…Ð¸Ð»Ð¸Ð¹Ñ‚Ð°",
        -	"syntaxhighlight-supported": "Ловш долу меттанаш:",
        -	"geshi.css": "/* CSS-код, кху чу Ñ…lоттайахь, оцо болх бийра бу Ñизашдо беÑнашна Ñ…lокхуньца GeSHI */"
        +	"syntaxhighlight-desc": "Таро хуьлуьйту тег <syntaxhighlight> лело [http://pygments.org/ Pygments] гӀоьнца ÑинтакÑиÑан Ð±Ð¾Ñ Ñ…Ð¸Ð»Ð¸Ð¹Ñ‚Ð°",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Код",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Мотт",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Кодан блок",
        +	"syntaxhighlight-error-unknown-language": "Боьвзуш боцу мотт \"$1\""
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ckb.json b/extensions/SyntaxHighlight_GeSHi/i18n/ckb.json
        new file mode 100644
        index 00000000..8404e518
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ckb.json
        @@ -0,0 +1,8 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Pirehelokan"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "ژمارەی دێڕەکان پیشان بدە"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/cs.json b/extensions/SyntaxHighlight_GeSHi/i18n/cs.json
        index 0f27c381..3fa2f0da 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/cs.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/cs.json
        @@ -2,13 +2,19 @@
         	"@metadata": {
         		"authors": [
         			"Li-sung",
        -			"Matěj Grabovský"
        +			"Matěj Grabovský",
        +			"Mormegil",
        +			"Matěj Suchánek"
         		]
         	},
        -	"syntaxhighlight-desc": "Poskytuje zvýrazňování syntaxe <syntaxhighlight> pomocí [http://qnbz.com/higlighter zvýrazňovaÄe GeSHi]",
        -	"syntaxhighlight-specify": "Musíte urÄit jazyk tímto způsobem:",
        -	"syntaxhighlight-supported": "Seznam jazyků, u kterých je podporováno zvýrazňování syntaxe:",
        -	"syntaxhighlight-err-loading": "(chyba pÅ™i naÄítání seznamu podporovaných jazyků)",
        -	"syntaxhighlight-err-language": "Neplatný jazyk.",
        -	"geshi.css": "/* Zde uvedené CSS bude ovlivňovat zvýrazňování syntaxe GeSHi */"
        +	"syntaxhighlight-desc": "Poskytuje zvýrazňování syntaxe <syntaxhighlight> pomocí [http://pygments.org Pygments – zvýrazňovaÄe syntaxe v Pythonu]",
        +	"syntaxhighlight-error-category": "Stránky s chybami ve zvýrazňování kódu",
        +	"syntaxhighlight-error-category-desc": "Při pokusu o zvýraznění kódu na stránce došlo k chybě.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kód",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Jazyk",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Zobrazit Äísla řádků",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Blok kódu",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Nepodařilo se zavolat Pygments",
        +	"syntaxhighlight-error-unknown-language": "Neznámý jazyk „$1â€",
        +	"syntaxhighlight-error-exceeds-size-limit": "Kód o velikosti $1 {{PLURAL:$1|bajt|bajty|bajtů}} přesahuje dovolené maximum $2 {{PLURAL:$2|bajt|bajty|bajtů}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/da.json b/extensions/SyntaxHighlight_GeSHi/i18n/da.json
        index 033edce6..262c4d37 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/da.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/da.json
        @@ -5,10 +5,5 @@
         			"Sarrus"
         		]
         	},
        -	"syntaxhighlight-desc": "Giver syntaksfremhævning <syntaxhighlight> ved brug af [http://qbnz.com/highlighter/ GeSHi - Generic Syntax Highlighter]",
        -	"syntaxhighlight-specify": "Du skal angive et sprog, sådan her:",
        -	"syntaxhighlight-supported": "Understøttede sprog for syntaksfremhævning:",
        -	"syntaxhighlight-err-loading": "(fejl ved indlæsning af listen af understøttede sprog)",
        -	"syntaxhighlight-err-language": "Ugyldigt sprog.",
        -	"geshi.css": "/* CSS placeret her vil blive anvendt til GeSHi syntaksfremhævning */"
        +	"syntaxhighlight-desc": "Giver syntaksfremhævning <syntaxhighlight> ved brug af [http://pygments.org/ GeSHi - Generic Syntax Highlighter]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/de.json b/extensions/SyntaxHighlight_GeSHi/i18n/de.json
        index 92d8752e..887adb8a 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/de.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/de.json
        @@ -2,13 +2,19 @@
         	"@metadata": {
         		"authors": [
         			"Kghbln",
        -			"Raimond Spekking"
        +			"Raimond Spekking",
        +			"Metalhead64"
         		]
         	},
        -	"syntaxhighlight-desc": "Ergänzt das Tag <syntaxhighlight> zur Syntaxhervorhebung mit Hilfe des [http://qbnz.com/highlighter/ Generic Syntax Highlighter (GeSHi)]",
        -	"syntaxhighlight-specify": "Die gewünschte Sprache muss wie folgt definiert werden:",
        -	"syntaxhighlight-supported": "Unterstützte Sprachen für die Syntaxhervorhebung:",
        -	"syntaxhighlight-err-loading": "(Fehler beim Laden der Sprachenliste)",
        -	"syntaxhighlight-err-language": "Ungültige Sprache.",
        -	"geshi.css": "/* CSS in dieser MediaWiki-Systemnachricht wird auf die GeSHi-Syntaxhervorhebung angewendet */"
        +	"syntaxhighlight-desc": "Ergänzt das Tag <syntaxhighlight> zur Syntaxhervorhebung mit Hilfe des [http://pygments.org/ Python-Syntax-Highlighters „Pygments“]",
        +	"syntaxhighlight-error-category": "Seiten mit Syntaxhervorhebungsfehlern",
        +	"syntaxhighlight-error-category-desc": "Es gab einen Fehler beim Versuch, Code in der Seite hervorzuheben.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Code",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Sprache",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Keine)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Zeilennummern anzeigen",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Code-Block",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Fehler beim Aufrufen von Pygments",
        +	"syntaxhighlight-error-unknown-language": "Unbekannte Sprache „$1“",
        +	"syntaxhighlight-error-exceeds-size-limit": "Die Codegröße von {{PLURAL:$1|einem Byte|$1 Bytes}} überschreitet das erlaubte Maximum von {{PLURAL:$2|einem Byte|$2 Bytes}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/diq.json b/extensions/SyntaxHighlight_GeSHi/i18n/diq.json
        index 6f3e6c55..2783a20f 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/diq.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/diq.json
        @@ -5,10 +5,5 @@
         			"Mirzali"
         		]
         	},
        -	"syntaxhighlight-desc": "pê şuxulnayişê [http://qbnz.com/highlighter/ GeSHi Highlighter] i rêza <syntaxhighlight> i işaret beno",
        -	"syntaxhighlight-specify": "zey ıni yew zıwan bıvıcinê:",
        -	"syntaxhighlight-supported": "Zıwanê ke rêzerêzê desteg benê:",
        -	"syntaxhighlight-err-loading": "(lista zıwananê ke xetaya barkerdışi desteg gêna)",
        -	"syntaxhighlight-err-language": "zıwano nemeqbul",
        -	"geshi.css": "CSS o ke tiya /* de yo, işaretê rêzvateyê GeSHi tetbiq beno */"
        +	"syntaxhighlight-desc": "pê şuxulnayişê [http://pygments.org/ Pygments] i rêza <syntaxhighlight> i işaret beno"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/dsb.json b/extensions/SyntaxHighlight_GeSHi/i18n/dsb.json
        index cc999716..f9f1c542 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/dsb.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/dsb.json
        @@ -4,10 +4,5 @@
         			"Michawiki"
         		]
         	},
        -	"syntaxhighlight-desc": "Zmóžnja syntaksowe wuzwignjenje <syntaxhighlight> z pomocu [http://qbnz.com/highlighter/ rěda GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Musyš rěc kaž slědujo pódaś:",
        -	"syntaxhighlight-supported": "Pódpěrane rěcy za syntaksowe wuzwignjenje:",
        -	"syntaxhighlight-err-loading": "(zmólka pśi zacytowanju lisćiny pódpěranych rěcow)",
        -	"syntaxhighlight-err-language": "Njepłaśiwa rěc.",
        -	"geshi.css": "/* How pódaty CSS nałožujo se na syntaksowe wuzwignjenje GeSHi */"
        +	"syntaxhighlight-desc": "Zmóžnja syntaksowe wuzwignjenje <syntaxhighlight> z pomocu [http://pygments.org/ rěda Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/el.json b/extensions/SyntaxHighlight_GeSHi/i18n/el.json
        index 3c142274..89f6254f 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/el.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/el.json
        @@ -4,13 +4,10 @@
         			"Badseed",
         			"Consta",
         			"Dead3y3",
        -			"ZaDiak"
        +			"ZaDiak",
        +			"Stam.nikos"
         		]
         	},
        -	"syntaxhighlight-desc": "ΠαÏέχει έμφαση σÏνταξης <syntaxhighlight> χÏησιμοποιώντας το [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "ΠÏέπει να επιλέξετε μια γλώσσα σαν κι αυτήν:",
        -	"syntaxhighlight-supported": "ΥποστηÏιζόμενες γλώσσες για επισημάνσεις συντακτικοÏ",
        -	"syntaxhighlight-err-loading": "(λάθος στη φόÏτωση της λίστας των υποστηÏιζόμενων γλωσσών)",
        -	"syntaxhighlight-err-language": "ΆκυÏη γλώσσα.",
        -	"geshi.css": "/* Το CSS τοποθετημένο εδώ θα εφαÏμοστεί στo GeSHi syntax highlighting */"
        +	"syntaxhighlight-desc": "ΠαÏέχει έμφαση σÏνταξης <syntaxhighlight> χÏησιμοποιώντας το [http://pygments.org/ Pygments]",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Γλώσσα"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/en.json b/extensions/SyntaxHighlight_GeSHi/i18n/en.json
        index 4d1f4fc2..170cb6c0 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/en.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/en.json
        @@ -1,13 +1,19 @@
         {
             "@metadata": {
                 "authors": [
        -            "Brion Vibber"
        +            "Brion Vibber",
        +            "Ed Sanders"
                 ]
             },
        -    "syntaxhighlight-desc": "Provides syntax highlighting <syntaxhighlight> using [http://qbnz.com/highlighter/ GeSHi - Generic Syntax Highlighter]",
        -    "syntaxhighlight-specify": "You need to specify a language like this:",
        -    "syntaxhighlight-supported": "Supported languages for syntax highlighting:",
        -    "syntaxhighlight-err-loading": "(error loading supported language list)",
        -    "syntaxhighlight-err-language": "Invalid language.",
        -    "geshi.css": "/* CSS placed here will be applied to GeSHi syntax highlighting */"
        -}
        \ No newline at end of file
        +    "syntaxhighlight-desc": "Provides syntax highlighting <syntaxhighlight> using [http://pygments.org/ Pygments - Python syntax highlighter]",
        +    "syntaxhighlight-error-category": "Pages with syntax highlighting errors",
        +    "syntaxhighlight-error-category-desc": "There was an error when attempting to highlight code included on the page.",
        +    "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Code",
        +    "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Language",
        +    "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(None)",
        +    "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Show line numbers",
        +    "syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Code block",
        +    "syntaxhighlight-error-pygments-invocation-failure": "Failed to invoke Pygments",
        +    "syntaxhighlight-error-unknown-language": "Unknown language \"$1\"",
        +    "syntaxhighlight-error-exceeds-size-limit": "Code size of $1 {{PLURAL:$1|bytes}} exceeds allowed maximum of $2 {{PLURAL:$2|bytes}}"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/eo.json b/extensions/SyntaxHighlight_GeSHi/i18n/eo.json
        index 5f4fd7b1..908f5347 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/eo.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/eo.json
        @@ -5,10 +5,5 @@
         			"Yekrats"
         		]
         	},
        -	"syntaxhighlight-desc": "Provizas kolorigado de sintakso <syntaxhighlight> per [http://qbnz.com/highlighter/ GeSHi Kolorigilo de Sintakso]",
        -	"syntaxhighlight-specify": "Vi nepre specifu lingvon kiel ĉi tiu:",
        -	"syntaxhighlight-supported": "Subtenaj lingvoj por sintaksa emfazo",
        -	"syntaxhighlight-err-loading": "(eraro ÅarÄante subtenitan lingvo-liston)",
        -	"syntaxhighlight-err-language": "Malvalida lingvo.",
        -	"geshi.css": "/* CSS enigita ĉi tie estos sintakse emfazita de GeSHi */"
        +	"syntaxhighlight-desc": "Provizas kolorigado de sintakso <syntaxhighlight> per [http://pygments.org/ GeSHi Kolorigilo de Sintakso]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/es.json b/extensions/SyntaxHighlight_GeSHi/i18n/es.json
        index de668c45..6de3c029 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/es.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/es.json
        @@ -4,13 +4,20 @@
         			"Crazymadlover",
         			"Muro de Aguas",
         			"Remember the dot",
        -			"Sanbec"
        +			"Sanbec",
        +			"Macofe",
        +			"Chris TR"
         		]
         	},
        -	"syntaxhighlight-desc": "Permite resaltar el código fuente usando la etiqueta <syntaxhighlight>. Esta extensión usa [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Necesita especificar un idioma como esto:",
        -	"syntaxhighlight-supported": "lenguajes soportados para sintaxis remarcada:",
        -	"syntaxhighlight-err-loading": "(error cargando lista de lenguajes soportados)",
        -	"syntaxhighlight-err-language": "Idioma no válido.",
        -	"geshi.css": "/* El código CSS situado aquí afectará al resaltado de sintaxis de GeSHi */"
        +	"syntaxhighlight-desc": "Permite resaltar el código fuente usando la etiqueta <syntaxhighlight>. Esta extensión usa [http://pygments.org/ Pygments - Resaltador de sintaxis en Python]",
        +	"syntaxhighlight-error-category": "Páginas con errores de resaltado de sintaxis",
        +	"syntaxhighlight-error-category-desc": "Hubo un error al intentar resaltar el código que se incluye en la página.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Código",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Lenguaje",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Ninguno)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Mostrar números de línea",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Segmento de código",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Error al invocar Pygments",
        +	"syntaxhighlight-error-unknown-language": "Lenguaje desconocido \"$1\"",
        +	"syntaxhighlight-error-exceeds-size-limit": "El tamaño del código ($1 {{PLURAL:$1|bytes}}) supera el máximo permitido ($2 {{PLURAL:$2|bytes}})"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/et.json b/extensions/SyntaxHighlight_GeSHi/i18n/et.json
        index 9a48f7fb..bc89c313 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/et.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/et.json
        @@ -5,10 +5,14 @@
         			"[[et:Kasutaja:M2s17]]"
         		]
         	},
        -	"syntaxhighlight-desc": "Võimaldab [http://qbnz.com/highlighter/ GeSHi] abil <syntaxhighlight>-silti kasutades süntaksit esile tõsta.",
        -	"syntaxhighlight-specify": "Sa pead täpsustama keelt nõnda:",
        -	"syntaxhighlight-supported": "Süntaksi esiletõstu toetavad keeled:",
        -	"syntaxhighlight-err-loading": "(toetatud keelte loetelu laadimisel esines viga)",
        -	"syntaxhighlight-err-language": "Vigane keel.",
        -	"geshi.css": "/* CSS mis on asetatud siia, määrab GeSHi süntaksi esiletoomise stiili */"
        +	"syntaxhighlight-desc": "Võimaldab [http://pygments.org/ Pygmentsi] (Pythoni süntaksi esiletõstja) abil <syntaxhighlight>-silti kasutades süntaksit esile tõsta.",
        +	"syntaxhighlight-error-category": "Süntaksi esiletõstu tõrgetega leheküljed",
        +	"syntaxhighlight-error-category-desc": "Leheküljel prooviti koodi esile tõsta, kuid esines tõrge.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kood",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Keel",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Näita reanumbreid",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Koodiplokk",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Teeki Pygments ei õnnestunud käivitada.",
        +	"syntaxhighlight-error-unknown-language": "Tundmatu keel \"$1\"",
        +	"syntaxhighlight-error-exceeds-size-limit": "Koodi suurus $1 {{PLURAL:$1|bait|baiti}} ületab lubatud $2 {{PLURAL:$2|baidist}} ülemmäära."
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/eu.json b/extensions/SyntaxHighlight_GeSHi/i18n/eu.json
        index de91c733..4fd51247 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/eu.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/eu.json
        @@ -1,9 +1,11 @@
         {
         	"@metadata": {
         		"authors": [
        -			"An13sa"
        +			"An13sa",
        +			"Sator"
         		]
         	},
        -	"syntaxhighlight-specify": "Hizkuntza bat zehaztu behar duzu honela:",
        -	"syntaxhighlight-err-language": "Baliogabeko hizkuntza."
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kodea",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Hizkuntza",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Bat ere ez)"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/fa.json b/extensions/SyntaxHighlight_GeSHi/i18n/fa.json
        index 4a22dcb3..bcef607d 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/fa.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/fa.json
        @@ -2,13 +2,12 @@
         	"@metadata": {
         		"authors": [
         			"Ebraminio",
        -			"Huji"
        +			"Huji",
        +			"Reza1615"
         		]
         	},
        -	"syntaxhighlight-desc": "امکان رنگین کردن دستورات <syntaxhighlight> با استÙاده از [http://qbnz.com/highlighter/ GeSHi Highlighter] را Ùراهم می‌آورد",
        -	"syntaxhighlight-specify": "شما باید به این شکل زبانی را مشخص کنید:",
        -	"syntaxhighlight-supported": "زبان‌های پشتیبانی‌شده برای رنگین‌کردن دستورات:",
        -	"syntaxhighlight-err-loading": "(خطا در بارگذاری Ùهرست زبان‌های پشتیبانی‌شده)",
        -	"syntaxhighlight-err-language": "زبان نامجاز.",
        -	"geshi.css": "/* دستورات CSS اینجا توسط سامانه رنگین‌کردن دستورات GeSHi به کار گرÙته می‌شوند */"
        +	"syntaxhighlight-desc": "امکان رنگین کردن دستورات <syntaxhighlight> با استÙاده از [http://pygments.org/ Pygments] را Ùراهم می‌آورد",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "کد",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "زبان",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "نشان‌دادن شماره خطوط"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/fi.json b/extensions/SyntaxHighlight_GeSHi/i18n/fi.json
        index 56bcdc27..8384d344 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/fi.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/fi.json
        @@ -2,13 +2,14 @@
         	"@metadata": {
         		"authors": [
         			"Crt",
        -			"Nike"
        +			"Nike",
        +			"Stryn"
         		]
         	},
        -	"syntaxhighlight-desc": "Mahdollistaa syntaksin korostuksen [http://qbnz.com/highlighter/ GeSHillä] <syntaxhighlight>-elementtiä käyttämällä.",
        -	"syntaxhighlight-specify": "Kieli pitää määritellä seuraavasti:",
        -	"syntaxhighlight-supported": "Syntaksinkorostus on mahdollista seuraaville kielille:",
        -	"syntaxhighlight-err-loading": "(tuettujen kielten luettelon lataaminen epäonnistui)",
        -	"syntaxhighlight-err-language": "Kelpaamaton kieli.",
        -	"geshi.css": "/* Tänne lisätty CSS vaikuttaa GeSHi-syntaksinkorostukseen */"
        +	"syntaxhighlight-desc": "Mahdollistaa syntaksin korostuksen [http://pygments.org/ Pygments - Python -syntaksin korostimella]",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Koodi",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Kieli",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Näytä rivinumerot",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Koodipätkä",
        +	"syntaxhighlight-error-unknown-language": "Tuntematon kieli: \"$1\""
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/fr.json b/extensions/SyntaxHighlight_GeSHi/i18n/fr.json
        index 119b9f57..e6ca3799 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/fr.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/fr.json
        @@ -3,13 +3,23 @@
         		"authors": [
         			"Grondin",
         			"Sherbrooke",
        -			"Verdy p"
        +			"Verdy p",
        +			"Macofe",
        +			"Mattho69",
        +			"Dcausse",
        +			"Orlodrim",
        +			"Wladek92"
         		]
         	},
        -	"syntaxhighlight-desc": "Fournit la mise en relief de la syntaxe par la balise <syntaxhighlight> en utilisant [http://qbnz.com/highlighter/ la coloration syntaxique GeSHi]",
        -	"syntaxhighlight-specify": "Vous devez spécifier un langage comme ceci :",
        -	"syntaxhighlight-supported": "Langages supportés pour la coloration syntaxique :",
        -	"syntaxhighlight-err-loading": "(erreur en chargeant la liste des langages supportés)",
        -	"syntaxhighlight-err-language": "Langage invalide",
        -	"geshi.css": "/* Le code CSS inséré ici sera appliqué à la coloration syntaxique GeSHi. */"
        +	"syntaxhighlight-desc": "Fournit la mise en valeur de la syntaxe par la balise <syntaxhighlight> en utilisant [http://pygments.org/ Pygments - coloration syntaxique Python]",
        +	"syntaxhighlight-error-category": "Pages avec des erreurs de coloration syntaxique",
        +	"syntaxhighlight-error-category-desc": "Il y a eu une erreur lors de la tentative de mise en valeur du code inclus sur la page.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Code",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Langage",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(aucun)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Afficher les numéros de ligne",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Bloc de code",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Impossible d'appeler Pygments",
        +	"syntaxhighlight-error-unknown-language": "Langue inconnue \"$1\"",
        +	"syntaxhighlight-error-exceeds-size-limit": "Code de taille $1 {{PLURAL:$1|octets}} qui dépasse le  maximum autorisé $2 {{PLURAL:$2|octets}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/frp.json b/extensions/SyntaxHighlight_GeSHi/i18n/frp.json
        index 79326aea..a0f5611e 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/frp.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/frp.json
        @@ -4,10 +4,5 @@
         			"ChrisPtDe"
         		]
         	},
        -	"syntaxhighlight-desc": "Balye la misa en èvidence de la sintaxa per la balisa <syntaxhighlight> en utilisent [http://qbnz.com/highlighter/ la coloracion sintaxica GeSHi].",
        -	"syntaxhighlight-specify": "Vos dête spècefiar un lengâjo d’ense :",
        -	"syntaxhighlight-supported": "Lengâjos recognus por la coloracion sintaxica :",
        -	"syntaxhighlight-err-loading": "(èrror en chargient la lista des lengâjos recognus)",
        -	"syntaxhighlight-err-language": "Lengâjo envalido.",
        -	"geshi.css": "/* Lo code CSS betâ ique serat aplicâ a la coloracion sintaxica GeSHi. */"
        +	"syntaxhighlight-desc": "Balye la misa en èvidence de la sintaxa per la balisa <syntaxhighlight> en utilisent [http://pygments.org/ la coloracion sintaxica GeSHi]."
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/fur.json b/extensions/SyntaxHighlight_GeSHi/i18n/fur.json
        deleted file mode 100644
        index 8f5b4cad..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/fur.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Klenje"
        -		]
        -	},
        -	"syntaxhighlight-supported": "Lengaç par cui si pues colorâ la sintassi:"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ga.json b/extensions/SyntaxHighlight_GeSHi/i18n/ga.json
        deleted file mode 100644
        index 96a5e4eb..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ga.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Alison"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Teanga neamhbhailí."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/gl.json b/extensions/SyntaxHighlight_GeSHi/i18n/gl.json
        index 3f8a6709..84cb055a 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/gl.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/gl.json
        @@ -2,13 +2,20 @@
         	"@metadata": {
         		"authors": [
         			"Toliño",
        -			"Xosé"
        +			"Xosé",
        +			"Elisardojm",
        +			"Banjo"
         		]
         	},
        -	"syntaxhighlight-desc": "Proporciona unha sintaxe resaltada <syntaxhighlight> usando [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Ten que especificar unha lingua, así:",
        -	"syntaxhighlight-supported": "Linguas soportadas para resaltar a sintaxe:",
        -	"syntaxhighlight-err-loading": "(erro ao cargar a lista de linguas soportadas)",
        -	"syntaxhighlight-err-language": "A lingua non é válida.",
        -	"geshi.css": "/* O CSS colocado aquí será aplicado ao resalte da sintaxe de GeSHi */"
        +	"syntaxhighlight-desc": "Proporciona unha sintaxe resaltada <syntaxhighlight> usando [http://pygments.org/ Pygments - Resaltador de sintaxe en Python]",
        +	"syntaxhighlight-error-category": "Páxinas con erros de sintaxe resaltados",
        +	"syntaxhighlight-error-category-desc": "Houbo un erro ó intentar resaltar o código incluído na páxina.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Código",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Lingua",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(ningún)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Mostrar números de liña",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Segmento de código",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Erro ó invocar Pygments",
        +	"syntaxhighlight-error-unknown-language": "Lingua descoñecida \"$1\"",
        +	"syntaxhighlight-error-exceeds-size-limit": "O tamaño de código $1 {{PLURAL:$1|bytes}} supera o máximo permitido de $2 {{PLURAL:$2|bytes}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/gom-deva.json b/extensions/SyntaxHighlight_GeSHi/i18n/gom-deva.json
        new file mode 100644
        index 00000000..a48938ad
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/gom-deva.json
        @@ -0,0 +1,11 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Vaishali Parab"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "कोड",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "भास",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "कोड बà¥à¤²à¥‰à¤•",
        +	"syntaxhighlight-error-unknown-language": "अनवळखी भास \"$1\""
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/gom-latn.json b/extensions/SyntaxHighlight_GeSHi/i18n/gom-latn.json
        new file mode 100644
        index 00000000..ab2ab696
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/gom-latn.json
        @@ -0,0 +1,11 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"The Discoverer"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Code",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Bhas",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Code blok",
        +	"syntaxhighlight-error-unknown-language": "Onollkhi bhas \"$1\""
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/grc.json b/extensions/SyntaxHighlight_GeSHi/i18n/grc.json
        deleted file mode 100644
        index 5f13414f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/grc.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Omnipaedista"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "ἌκυÏος γλῶττα."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/gsw.json b/extensions/SyntaxHighlight_GeSHi/i18n/gsw.json
        index 9971b082..97127fa2 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/gsw.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/gsw.json
        @@ -4,10 +4,5 @@
         			"Als-Holder"
         		]
         	},
        -	"syntaxhighlight-desc": "Syntax firihebe <syntaxhighlight> mit Hilf vum [http://qbnz.com/highlighter/ GeSHi-Highlighter]",
        -	"syntaxhighlight-specify": "Di gwinscht Sproch muess eso definiert wäre:",
        -	"syntaxhighlight-supported": "Unterstitzti Sproche fir s Fiirihebe vu dr Syntax:",
        -	"syntaxhighlight-err-loading": "(Fehler bim Lade vu dr Sprochelischt)",
        -	"syntaxhighlight-err-language": "Nit giltigi Sproch.",
        -	"geshi.css": "/* CSS in däre MediaWiki-Syschtemnochricht wird uf s GeSHi-Syntax-Firihebe aagwändet */"
        +	"syntaxhighlight-desc": "Syntax firihebe <syntaxhighlight> mit Hilf vum [http://pygments.org/ GeSHi-Highlighter]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/gu.json b/extensions/SyntaxHighlight_GeSHi/i18n/gu.json
        deleted file mode 100644
        index 45b7332d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/gu.json
        +++ /dev/null
        @@ -1,10 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Ashok modhvadia"
        -		]
        -	},
        -	"syntaxhighlight-supported": "વાકà«àª¯àª°àªšàª¨àª¾ સà«àªªàª·à«àªŸà«€àª•àª°àª£ માટે સહાયક ભાષાઓ:",
        -	"syntaxhighlight-err-loading": "(સહાયક ભાષા યાદી લાદણમાં તà«àª°à«àªŸàª¿)",
        -	"syntaxhighlight-err-language": "અમાનà«àª¯ ભાષા."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/he.json b/extensions/SyntaxHighlight_GeSHi/i18n/he.json
        index 8d90a5c5..50d761a0 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/he.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/he.json
        @@ -2,13 +2,19 @@
         	"@metadata": {
         		"authors": [
         			"Guycn2",
        -			"Rotem Liss"
        +			"Rotem Liss",
        +			"Amire80"
         		]
         	},
        -	"syntaxhighlight-desc": "×פשרות לסימון קוד מקור ×‘×¦×‘×¢×™× ×¢× ×”×ª×’×™×ª <syntaxhighlight> ב×מצעות [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "יש לציין שפה ב×ופן הב×:",
        -	"syntaxhighlight-supported": "שפות נתמכות:",
        -	"syntaxhighlight-err-loading": "(שגי××” בטעינת הרשימה של השפות הנתמכות)",
        -	"syntaxhighlight-err-language": "שפה שגויה.",
        -	"geshi.css": "/* סגנונות CSS שייכתבו ×›×ן יפעלו על התגית source */"
        +	"syntaxhighlight-desc": "×פשרות לסימון קוד מקור ×‘×¦×‘×¢×™× ×¢× ×”×ª×’×™×ª <syntaxhighlight> ב×מצעות [http://pygments.org/ Pygments – צובע קוד בשפת Python]",
        +	"syntaxhighlight-error-category": "×“×¤×™× ×¢× ×©×’×™×ות בצביעת קוד",
        +	"syntaxhighlight-error-category-desc": "×ירעה שגי××” בעת ניסיון לצבוע קוד שכלול בדף.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "קוד",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "שפה",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(×ין)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "להציג מספרי שורות",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "גוש קוד",
        +	"syntaxhighlight-error-pygments-invocation-failure": "הרצת Pygments ×œ× ×¢×‘×“×”",
        +	"syntaxhighlight-error-unknown-language": "השפה \"$1\" ××™× ×” ידועה",
        +	"syntaxhighlight-error-exceeds-size-limit": "גודל קוד של {{PLURAL:$1|בית ×חד|$1 בתי×}} עובר ×ת המגבלה של {{PLURAL:$2|בית ×חד|$2 בתי×}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/hi.json b/extensions/SyntaxHighlight_GeSHi/i18n/hi.json
        index 1edb325f..672948f0 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/hi.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/hi.json
        @@ -6,10 +6,5 @@
         			"Siddhartha Ghai"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi - Generic Syntax Highlighter] पà¥à¤°à¤¯à¥‹à¤— दà¥à¤µà¤¾à¤°à¤¾ <syntaxhighlight> सिंटेकà¥à¤¸ हाइलाइट करने का सà¥à¤µà¤°à¥‚पण पà¥à¤°à¤¦à¤¾à¤¨ करता है",
        -	"syntaxhighlight-specify": "इस पà¥à¤°à¤•à¤¾à¤° भाषा निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करना आवशà¥à¤¯à¤• है:",
        -	"syntaxhighlight-supported": "सिंटेकà¥à¤¸ हायलायटिंग निमà¥à¤¨à¤²à¤¿à¤–ित भाषाओं के लिये उपलबà¥à¤§ है:",
        -	"syntaxhighlight-err-loading": "(समरà¥à¤¥à¤¿à¤¤ भाषाओं की सूची लोड करने में तà¥à¤°à¥à¤Ÿà¤¿)",
        -	"syntaxhighlight-err-language": "अमानà¥à¤¯ भाषा।",
        -	"geshi.css": "/* यहाठपर उपसà¥à¤¥à¤¿à¤¤ सी॰à¤à¤¸à¥°à¤à¤¸ GeSHi सिंटेकà¥à¤¸ सà¥à¤µà¤°à¥‚पण पर लागू होगी */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ GeSHi - Generic Syntax Highlighter] पà¥à¤°à¤¯à¥‹à¤— दà¥à¤µà¤¾à¤°à¤¾ <syntaxhighlight> सिंटेकà¥à¤¸ हाइलाइट करने का सà¥à¤µà¤°à¥‚पण पà¥à¤°à¤¦à¤¾à¤¨ करता है"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/hr.json b/extensions/SyntaxHighlight_GeSHi/i18n/hr.json
        index 5e1eb406..74a2f1f7 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/hr.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/hr.json
        @@ -3,13 +3,11 @@
         		"authors": [
         			"Dalibor Bosits",
         			"Roberta F.",
        -			"SpeedyGonsales"
        +			"SpeedyGonsales",
        +			"MaGa"
         		]
         	},
        -	"syntaxhighlight-desc": "Omogućava bojanje sintakse <syntaxhighlight> korištenjem [http://qbnz.com/highlighter/ GeSHi Highlighter-a]",
        -	"syntaxhighlight-specify": "Molimo navedite jezik na slijedeći naÄin:",
        -	"syntaxhighlight-supported": "Jezici podržani za bojanje sintakse:",
        -	"syntaxhighlight-err-loading": "(pogrjeÅ¡ka pri uÄitavanju popisa podržanih jezika)",
        -	"syntaxhighlight-err-language": "Nevaljani jezik.",
        -	"geshi.css": "/* CSS kod napisan ovdje će biti primijenjen na GeSHi bojanje sintakse */"
        +	"syntaxhighlight-desc": "Omogućava bojanje sintakse <syntaxhighlight> korištenjem [http://pygments.org/ Pygments-a]",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kôd",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Jezik"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/hsb.json b/extensions/SyntaxHighlight_GeSHi/i18n/hsb.json
        index 490eb922..b85463de 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/hsb.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/hsb.json
        @@ -4,10 +4,5 @@
         			"Michawiki"
         		]
         	},
        -	"syntaxhighlight-desc": "Syntaksowe wuzběhnjenje <syntaxhighlight> z pomocu rozšěrjenja [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "DyrbiÅ¡ rÄ›Ä takle definować:",
        -	"syntaxhighlight-supported": "PodpÄ›rowane rÄ›Äe za syntaksowe wuzbÄ›hnjenje:",
        -	"syntaxhighlight-err-loading": "(Zmylk pÅ™i zaÄitanju lisćiny rÄ›Äow)",
        -	"syntaxhighlight-err-language": "NjepÅ‚aćiwa rÄ›Ä.",
        -	"geshi.css": "/* CSS w tutej zdźělence so na syntaksowe wuzběhnjenje GeSHi nałoži */"
        +	"syntaxhighlight-desc": "Syntaksowe wuzběhnjenje <syntaxhighlight> z pomocu rozšěrjenja [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ht.json b/extensions/SyntaxHighlight_GeSHi/i18n/ht.json
        new file mode 100644
        index 00000000..26c44617
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ht.json
        @@ -0,0 +1,11 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Bfpage"
        +		]
        +	},
        +	"syntaxhighlight-desc": "Ofri sentaks eklèrsisaj <syntaxhighlight> using [http://pygments.org/ Pygments - Python syntax highlighter]",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kòd",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Lang",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Kòd blòk"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/hu.json b/extensions/SyntaxHighlight_GeSHi/i18n/hu.json
        index d22cf7eb..38d6ef94 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/hu.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/hu.json
        @@ -1,13 +1,18 @@
         {
         	"@metadata": {
         		"authors": [
        -			"Dani"
        +			"Dani",
        +			"Tacsipacsi"
         		]
         	},
        -	"syntaxhighlight-desc": "Lehetőséget nyújt szintaxiskiemelésre a <syntaxhighlight> tag-gel, a [http://qbnz.com/highlighter/ GeSHi Highlighter] használatával",
        -	"syntaxhighlight-specify": "Meg kell adnod egy nyelvet az alábbi módon:",
        -	"syntaxhighlight-supported": "Támogatott programozási nyelvek:",
        -	"syntaxhighlight-err-loading": "(hiba történt a támogatott nyelvek listájának betöltése közben)",
        -	"syntaxhighlight-err-language": "Érvénytelen nyelv.",
        -	"geshi.css": "/* Az itt elhelyezett CSS-t fogja alkalmazni a GeSHi szintaxiskiemelő */"
        +	"syntaxhighlight-desc": "Lehetőséget nyújt szintaxiskiemelésre a <syntaxhighlight> tag-gel, a [http://pygments.org/ Pygments - Python kódkiemelő] használatával",
        +	"syntaxhighlight-error-category": "Lapok kódkiemelési hibákkal",
        +	"syntaxhighlight-error-category-desc": "Hiba történt a lapon található kód kiemelése közben.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kód",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Nyelv",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Mutassa a sorszámozást",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Kódblokk",
        +	"syntaxhighlight-error-pygments-invocation-failure": "A Pygments meghívása sikertelen",
        +	"syntaxhighlight-error-unknown-language": "Ismeretlen „$1†nyelv",
        +	"syntaxhighlight-error-exceeds-size-limit": "A kód mérete $1 bájt, ami meghaladja az engedélyezett maximális $2 bájtot"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ia.json b/extensions/SyntaxHighlight_GeSHi/i18n/ia.json
        index 4c47793f..5bdaae53 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ia.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ia.json
        @@ -4,10 +4,5 @@
         			"McDutchie"
         		]
         	},
        -	"syntaxhighlight-desc": "Forni le coloration syntactic in <syntaxhighlight> per medio de [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Tu debe specificar un linguage in iste modo:",
        -	"syntaxhighlight-supported": "Linguages supportate pro le coloration syntactic:",
        -	"syntaxhighlight-err-loading": "(error durante le cargamento del lista de linguages supportate)",
        -	"syntaxhighlight-err-language": "Linguage invalide.",
        -	"geshi.css": "/* Omne CSS inserite hic se applicara al coloration syntactic con GeSHi */"
        +	"syntaxhighlight-desc": "Forni le coloration syntactic in <syntaxhighlight> per medio de [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/id.json b/extensions/SyntaxHighlight_GeSHi/i18n/id.json
        index 8e17d931..1fbd4825 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/id.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/id.json
        @@ -4,10 +4,5 @@
         			"IvanLanin"
         		]
         	},
        -	"syntaxhighlight-desc": "Memberikan penyorotan sintaks <syntaxhighlight> menggunakan [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Anda harus menentukan suatu bahasa seperti ini:",
        -	"syntaxhighlight-supported": "Bahasa-bahasa yang didukung oleh pewarnaan sintaks:",
        -	"syntaxhighlight-err-loading": "(kesalahan pemuatan daftar bahasa yang didukung)",
        -	"syntaxhighlight-err-language": "Bahasa tak sah.",
        -	"geshi.css": "/* CSS di sini akan diterapkan untuk penyorotan sintaks GeSHi */"
        +	"syntaxhighlight-desc": "Memberikan penyorotan sintaks <syntaxhighlight> menggunakan [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ie.json b/extensions/SyntaxHighlight_GeSHi/i18n/ie.json
        index bc461e95..68dd3058 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ie.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ie.json
        @@ -4,8 +4,5 @@
         			"Renan"
         		]
         	},
        -	"syntaxhighlight-desc": "Provide superation de sintaxe de li code fonte, che li element <syntaxhighlight>, usant li [http://qbnz.com/highlighter/ GeSHi - Generic Syntax Highlighter]",
        -	"syntaxhighlight-specify": "Vu besona specificar li lingue quam ti:",
        -	"syntaxhighlight-supported": "Lingues suportat por superation de sintaxe:",
        -	"syntaxhighlight-err-language": "Lingue ínvalid."
        +	"syntaxhighlight-desc": "Provide superation de sintaxe de li code fonte, che li element <syntaxhighlight>, usant li [http://pygments.org/ GeSHi - Generic Syntax Highlighter]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ig.json b/extensions/SyntaxHighlight_GeSHi/i18n/ig.json
        deleted file mode 100644
        index 52e5ad27..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ig.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Ukabia"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Asụsụ ámághị."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ilo.json b/extensions/SyntaxHighlight_GeSHi/i18n/ilo.json
        index 12886232..bac555d9 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ilo.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ilo.json
        @@ -4,10 +4,5 @@
         			"Lam-ang"
         		]
         	},
        -	"syntaxhighlight-desc": "Mangited ti panangimaris ti eskritu <syntaxhighlight> nga agus-usar iti [http://qbnz.com/highlighter/ GeSHi - Generic Syntax Highlighter]",
        -	"syntaxhighlight-specify": "Nasken nga inaganan ti pagsasao a kasla daytoy:",
        -	"syntaxhighlight-supported": "Dagiti nasuportaran a pagsasao para iti panangimaris ti eskritu:",
        -	"syntaxhighlight-err-loading": "(biddut ti panangikarga ti listaan ti nasuportaran a pagsasao)",
        -	"syntaxhighlight-err-language": "Imbalido a pagsasao.",
        -	"geshi.css": "/* Ti CSS a maikabil ditoy ket maipakatto iti panangimaris ti eskritu ti GeSHi */"
        +	"syntaxhighlight-desc": "Mangited ti panangimaris ti eskritu <syntaxhighlight> nga agus-usar iti [http://pygments.org/ GeSHi - Generic Syntax Highlighter]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/io.json b/extensions/SyntaxHighlight_GeSHi/i18n/io.json
        deleted file mode 100644
        index 39cf6db5..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/io.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Malafaya"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Ne-valida linguo."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/it.json b/extensions/SyntaxHighlight_GeSHi/i18n/it.json
        index 383709f1..ace233a7 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/it.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/it.json
        @@ -1,13 +1,12 @@
         {
         	"@metadata": {
         		"authors": [
        -			"BrokenArrow"
        +			"BrokenArrow",
        +			"Macofe",
        +			"Beta16"
         		]
         	},
        -	"syntaxhighlight-desc": "Evidenzia la sintassi dei linguaggi di programmazione <syntaxhighlight> tramite [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "È necessario specificare un linguaggio in questo modo:",
        -	"syntaxhighlight-supported": "Linguaggi di cui è possibile evidenziare la sintassi in colore:",
        -	"syntaxhighlight-err-loading": "(errore nel caricamento dell'elenco dei linguaggi supportati)",
        -	"syntaxhighlight-err-language": "Linguaggio non riconosciuto.",
        -	"geshi.css": "/* Gli stili CSS inseriti qui si applicano all'evidenziazione di sintassi con GeSHi */"
        +	"syntaxhighlight-desc": "Evidenzia la sintassi dei linguaggi di programmazione <syntaxhighlight> tramite [http://pygments.org/ Pygments - evidenziatore della sintassi Python]",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Codice",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Lingua"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ja.json b/extensions/SyntaxHighlight_GeSHi/i18n/ja.json
        index 6ce846fc..16d795ff 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ja.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ja.json
        @@ -4,13 +4,13 @@
         			"Aotake",
         			"Fryed-peach",
         			"JtFuruhata",
        -			"Shirayuki"
        +			"Shirayuki",
        +			"Sujiniku",
        +			"Runequest77"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi 構文ãƒã‚¤ãƒ©ã‚¤ãƒˆæ©Ÿèƒ½] を利用ã—ãŸã‚¿ã‚° <syntaxhighlight> ã‚’æä¾›ã™ã‚‹",
        -	"syntaxhighlight-specify": "以下ã®ã‚ˆã†ã«è¨€èªžã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™:",
        -	"syntaxhighlight-supported": "構文ãƒã‚¤ãƒ©ã‚¤ãƒˆæ©Ÿèƒ½ã«å¯¾å¿œã—ã¦ã„る言語ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™:",
        -	"syntaxhighlight-err-loading": "(対応言語一覧ã®èª­ã¿è¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ)",
        -	"syntaxhighlight-err-language": "無効ãªè¨€èªžã§ã™ã€‚",
        -	"geshi.css": "/* ã“ã“ã«è¨˜è¿°ã—ãŸCSSã¯GeSHi構文ãƒã‚¤ãƒ©ã‚¤ãƒˆæ©Ÿèƒ½ã«é©ç”¨ã•ã‚Œã¾ã™ */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ Pygments - Python 構文ãƒã‚¤ãƒ©ã‚¤ãƒˆæ©Ÿèƒ½] を利用ã—ãŸã‚¿ã‚° <syntaxhighlight> ã‚’æä¾›ã™ã‚‹",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "コード",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(ãªã—)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "行番å·ã‚’表示"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/jut.json b/extensions/SyntaxHighlight_GeSHi/i18n/jut.json
        index efbac6a9..c9d7ad51 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/jut.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/jut.json
        @@ -5,10 +5,5 @@
         			"Ælsån"
         		]
         	},
        -	"syntaxhighlight-desc": "Gäv syntaks highlighting <syntaxhighlight> via [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Du nødst til spæsifiær en språg als dette:",
        -	"syntaxhighlight-supported": "Understønde språg før syntaks highlighting:",
        -	"syntaxhighlight-err-loading": "(fejl lægende understønde språg liste)",
        -	"syntaxhighlight-err-language": "Fejl språg.",
        -	"geshi.css": "/* CSS platsk her hvil være appliærn til GeSHi syntaks highlighting */"
        +	"syntaxhighlight-desc": "Gäv syntaks highlighting <syntaxhighlight> via [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/jv.json b/extensions/SyntaxHighlight_GeSHi/i18n/jv.json
        index 16d51a31..7ba459f0 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/jv.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/jv.json
        @@ -4,10 +4,5 @@
         			"Meursault2004"
         		]
         	},
        -	"syntaxhighlight-desc": "Mènèhaké panyorotan sintaksis <syntaxhighlight> nganggo [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Panjenengan kudu nentokaké sawijining basa kaya iki:",
        -	"syntaxhighlight-supported": "Basa-basa sing disengkuyung déning panandhan werna sintaksis:",
        -	"syntaxhighlight-err-loading": "(ana kaluputan ngunggahaké daftar basa sing disengkuyung)",
        -	"syntaxhighlight-err-language": "Basané ora absah.",
        -	"geshi.css": "/* CSS ing kéné bakal ditrapaké kanggo panyorotan sintaksis GeSHi */"
        +	"syntaxhighlight-desc": "Mènèhaké panyorotan sintaksis <syntaxhighlight> nganggo [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ka.json b/extensions/SyntaxHighlight_GeSHi/i18n/ka.json
        index ef8e25cf..1cdd7cf6 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ka.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ka.json
        @@ -4,10 +4,5 @@
         			"გიáƒáƒ áƒ’იმელáƒ"
         		]
         	},
        -	"syntaxhighlight-desc": "გáƒáƒ«áƒšáƒ”ვთ ნებáƒáƒ áƒ—ვáƒáƒ¡ ფáƒáƒ›áƒáƒ˜áƒ§áƒ”ნáƒáƒ— თეგი <syntaxhighlight> სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ გáƒáƒ¡áƒáƒœáƒáƒ—ებლáƒáƒ“[http://qbnz.com/highlighter/ GeSHi Highlighter-ის] მეშვეáƒáƒ‘ით",
        -	"syntaxhighlight-specify": "თქვენ უნდრწáƒáƒ áƒáƒ“გინáƒáƒ— სáƒáƒ®áƒ”ლი შემდეგი სáƒáƒ®áƒ˜áƒ—:",
        -	"syntaxhighlight-supported": "მხáƒáƒ áƒ“áƒáƒ›áƒ­áƒ”რი áƒáƒ®áƒ”ლები",
        -	"syntaxhighlight-err-loading": "(შეუძებელირმხáƒáƒ áƒ“áƒáƒ›áƒ­áƒ”რი ენების სიის áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ)",
        -	"syntaxhighlight-err-language": "მáƒáƒ—ხáƒáƒ•áƒœáƒ˜áƒšáƒ˜áƒ მხáƒáƒ áƒ“áƒáƒ­áƒ”რის áƒáƒ áƒ›áƒ¥áƒáƒœáƒ” ენáƒ",
        -	"geshi.css": "/* áƒáƒ¥ წáƒáƒ áƒ›áƒáƒ“გენილი CSS-კáƒáƒ“ი, გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებრGeSHI სნტáƒáƒ¥áƒ¡áƒ˜áƒ¡ გáƒáƒ¡áƒáƒœáƒáƒ—ებლáƒáƒ“*/"
        +	"syntaxhighlight-desc": "გáƒáƒ«áƒšáƒ”ვთ ნებáƒáƒ áƒ—ვáƒáƒ¡ ფáƒáƒ›áƒáƒ˜áƒ§áƒ”ნáƒáƒ— თეგი <syntaxhighlight> სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ გáƒáƒ¡áƒáƒœáƒáƒ—ებლáƒáƒ“[http://pygments.org/ Pygments-ის] მეშვეáƒáƒ‘ით"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/kk-arab.json b/extensions/SyntaxHighlight_GeSHi/i18n/kk-arab.json
        deleted file mode 100644
        index 6f7b65ff..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/kk-arab.json
        +++ /dev/null
        @@ -1,12 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"AlefZet"
        -		]
        -	},
        -	"syntaxhighlight-specify": "ٴتىلدى بىلايشا كورسەتۋىڭىز قاجەت:",
        -	"syntaxhighlight-supported": "سىينتاكسىيسى كومەسكى جارىقتالاتىن سۇيەمەلدەنگەن تىلدەر:",
        -	"syntaxhighlight-err-loading": "(سۇيەمەلدەنگەن تىلدەر ٴتىزىمىن جۇكتەۋ قاتەسى)",
        -	"syntaxhighlight-err-language": "جارامسىز ٴتىل.",
        -	"geshi.css": "/* مىنداعى CSS امىرلەرى GeSHi سىينتاكسىيستى كومەسكى جارىقتاۋعا قولدانىلادى */"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/kk-cyrl.json b/extensions/SyntaxHighlight_GeSHi/i18n/kk-cyrl.json
        deleted file mode 100644
        index 8f154993..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/kk-cyrl.json
        +++ /dev/null
        @@ -1,12 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"AlefZet"
        -		]
        -	},
        -	"syntaxhighlight-specify": "Тілді былайша көрÑетуіңіз қажет:",
        -	"syntaxhighlight-supported": "СинтакÑиÑÑ– көмеÑкі жарықталатын Ñүйемелденген тілдер:",
        -	"syntaxhighlight-err-loading": "(Ñүйемелденген тілдер тізімін жүктеу қатеÑÑ–)",
        -	"syntaxhighlight-err-language": "ЖарамÑыз тіл.",
        -	"geshi.css": "/* Мындағы CSS әмірлері GeSHi ÑинтакÑиÑÑ‚Ñ– көмеÑкі жарықтауға қолданылады */"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/kk-latn.json b/extensions/SyntaxHighlight_GeSHi/i18n/kk-latn.json
        deleted file mode 100644
        index f0db1c99..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/kk-latn.json
        +++ /dev/null
        @@ -1,12 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"AlefZet"
        -		]
        -	},
        -	"syntaxhighlight-specify": "Tildi bılaýşa körsetwiñiz qajet:",
        -	"syntaxhighlight-supported": "Sïntaksïsi kömeski jarıqtalatın süýemeldengen tilder:",
        -	"syntaxhighlight-err-loading": "(süýemeldengen tilder tizimin jüktew qatesi)",
        -	"syntaxhighlight-err-language": "Jaramsız til.",
        -	"geshi.css": "/* Mındağı CSS ämirleri GeSHi sïntaksïsti kömeski jarıqtawğa qoldanıladı */"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/km.json b/extensions/SyntaxHighlight_GeSHi/i18n/km.json
        index 355b8d3f..a9a6b325 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/km.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/km.json
        @@ -5,7 +5,5 @@
         			"គីមស៊្រុន"
         		]
         	},
        -	"syntaxhighlight-specify": "អ្នកចាំបាច់ សំដៅ មួយភាសា ដូច áž“áŸáŸ‡ ៖",
        -	"syntaxhighlight-err-loading": "(បញ្ហាក្នុងការរៀបចំបញ្ជីភាសាដែលប្រើបាន)",
        -	"syntaxhighlight-err-language": "ភាសា គ្មានសុពលភាព ។"
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "កន្សោមកូដ"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/kn.json b/extensions/SyntaxHighlight_GeSHi/i18n/kn.json
        new file mode 100644
        index 00000000..445dd3cc
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/kn.json
        @@ -0,0 +1,8 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Ananth subray"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "ಸಾಲಿನ ಸಂಖà³à²¯à³†à²—ಳನà³à²¨à³ ತೋರಿಸಿ"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ko.json b/extensions/SyntaxHighlight_GeSHi/i18n/ko.json
        index 0ec43f56..d8d4b236 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ko.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ko.json
        @@ -6,10 +6,14 @@
         			"ì•„ë¼"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi Highlighter]를 사용해 <syntaxhighlight>로 문법 강조를 제공합니다",
        -	"syntaxhighlight-specify": "다ìŒê³¼ ê°™ì´ ì–¸ì–´ë¥¼ 지정해야 합니다:",
        -	"syntaxhighlight-supported": "문법 ê°•ì¡°ê°€ 지ì›ë˜ëŠ” 언어 목ë¡:",
        -	"syntaxhighlight-err-loading": "(지ì›ë˜ëŠ” 언어 목ë¡ì„ 불러오는 중 오류)",
        -	"syntaxhighlight-err-language": "ìž˜ëª»ëœ ì–¸ì–´ìž…ë‹ˆë‹¤.",
        -	"geshi.css": "/* 여기ì—ì„œ 설정한 CSS는 GeSHi 구문 ê°•ì¡°ì— ì ìš©ë©ë‹ˆë‹¤ */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ Pygments - Python 구문 ê°•ì¡° 기능]ì„ ì‚¬ìš©í•´ <syntaxhighlight>ë¡œ 구문 강조를 제공합니다",
        +	"syntaxhighlight-error-category": "구문 ê°•ì¡°ì— ì˜¤ë¥˜ê°€ 있는 문서",
        +	"syntaxhighlight-error-category-desc": "ë¬¸ì„œì— í¬í•¨ëœ 코드를 강조하기 위해 ì‹œë„하는 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "코드",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "언어",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "줄 번호 ë³´ì´ê¸°",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "코드 ìƒìž",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Pygments를 호출하는 ë° ì‹¤íŒ¨",
        +	"syntaxhighlight-error-unknown-language": "알 수 없는 언어 \"$1\"",
        +	"syntaxhighlight-error-exceeds-size-limit": "$1{{PLURAL:$1|ë°”ì´íŠ¸}}ì˜ ì½”ë“œ í¬ê¸°ê°€ $2{{PLURAL:$2|ë°”ì´íŠ¸}}ì˜ í—ˆìš©ëœ ìµœëŒ€ê°’ì„ ì´ˆê³¼í•©ë‹ˆë‹¤"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json b/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json
        index 252f1d64..37900095 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json
        @@ -4,10 +4,15 @@
         			"Purodha"
         		]
         	},
        -	"syntaxhighlight-desc": "Deijt — en <syntaxhighlight>-Affschnedde — de Syntax fon beshtemmpte Computer-Shprooche makeere. Bruch dobei dä [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Mer moss en Schprohch aanjävve, esu en dä Aat wi heh:",
        -	"syntaxhighlight-supported": "Di Shprooche, dänne ier Syntax mer makeere könne, sin:",
        -	"syntaxhighlight-err-loading": "(Enne Fääler es opjetrodde, wi mer di Leß met de Schprohche lahde wullte)",
        -	"syntaxhighlight-err-language": "Di Schprohch känne mer nit.",
        -	"geshi.css": "/* Dat es dat CCS för de Afschnedde med däm GeSHi syntax highlighting */"
        +	"syntaxhighlight-desc": "Deijt — en „<syntaxhighlight>“-Affschnedde — de Sünntax fon beschtemmpte Kompjuhter_Schprohche schöhn makehre. Bruch dobei dä [http://pygments.org/ GeSHi - Python Syntax Highlighter]",
        +	"syntaxhighlight-error-category": "Sigge met Fähler beim bunt Mohle vun de Süntax",
        +	"syntaxhighlight-error-category-desc": "Ene Fähler es opjetrodde beim Versohch, dä Kohd op dä Sigg bunt ze mohle.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kohd",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Schprohch",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(keijn)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Nommer för de Reihje aanzeije",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Kaste met Projramm_Kohde udder ähnlesch",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Mer kunnte Pygments nit oprohfe.",
        +	"syntaxhighlight-error-unknown-language": "Di Projrammehr_Schprohch $1 es onbikannt.",
        +	"syntaxhighlight-error-exceeds-size-limit": "Dä Kohd es {{PLURAL:$1|eij Byte|$1 Bytes|keij Byte}} lang un dat es mih wi {{PLURAL:$2|dat zohjelhße eijne Byte| de zohjelohße $2 Bytes|de zohjelohße Noll Bytes}}."
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ku-latn.json b/extensions/SyntaxHighlight_GeSHi/i18n/ku-latn.json
        new file mode 100644
        index 00000000..f3c7d7ab
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ku-latn.json
        @@ -0,0 +1,9 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"George Animal"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kod",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Ziman"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/lb.json b/extensions/SyntaxHighlight_GeSHi/i18n/lb.json
        index dfeb6563..d719aacb 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/lb.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/lb.json
        @@ -6,10 +6,10 @@
         			"Soued031"
         		]
         	},
        -	"syntaxhighlight-desc": "Syntax-Ervirhiewung <syntaxhighlight> mat Hëllef vu [http://qbnz.com/highlighter/ 'GeSHi Highlighter']",
        -	"syntaxhighlight-specify": "Déi gewënscht Sprooch muss sou definéiert ginn:",
        -	"syntaxhighlight-supported": "Ënnerstëtzte Sprooche fir d'Syntax faarweg ze markéieren",
        -	"syntaxhighlight-err-loading": "(Feeler beim Luede vun der Lëscht vun den ënnerstëtzte Sproochen)",
        -	"syntaxhighlight-err-language": "Net valabel Sprooch.",
        -	"geshi.css": "/* Den CSS deen hei steet gëtt benotzt fir d'GeSHi Syntax faarweg ze markéieren. /*"
        +	"syntaxhighlight-desc": "Syntax-Ervirhiewung <syntaxhighlight> mat Hëllef vu [http://pygments.org/ 'Pygments']",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Code",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Sprooch",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Keng)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Nummere vun den Zeile weisen",
        +	"syntaxhighlight-error-unknown-language": "Onbekannt Sprooch \"$1\""
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/li.json b/extensions/SyntaxHighlight_GeSHi/i18n/li.json
        index f9fd50d1..1467db63 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/li.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/li.json
        @@ -4,10 +4,5 @@
         			"Ooswesthoesbes"
         		]
         	},
        -	"syntaxhighlight-desc": "Guf syntaxismarkering <syntaxhighlight> gebroekende [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Gaef 'ne taal es volg op:",
        -	"syntaxhighlight-supported": "Óngersteunde täöl veur syntaxismarkering:",
        -	"syntaxhighlight-err-loading": "(fout bie 't laje vanne lies mit óngersteunde täöl)",
        -	"syntaxhighlight-err-language": "Ónzjuuste taal.",
        -	"geshi.css": "/* Hiej geplaatste CBBS wuuertj toegepas op GeSHo syntax markering */"
        +	"syntaxhighlight-desc": "Guf syntaxismarkering <syntaxhighlight> gebroekende [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/lrc.json b/extensions/SyntaxHighlight_GeSHi/i18n/lrc.json
        new file mode 100644
        index 00000000..d3aa0040
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/lrc.json
        @@ -0,0 +1,9 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Mogoeilor"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "رازینە",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "زوٙن"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/lt.json b/extensions/SyntaxHighlight_GeSHi/i18n/lt.json
        index f85449b4..43959339 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/lt.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/lt.json
        @@ -6,10 +6,5 @@
         			"Matasg"
         		]
         	},
        -	"syntaxhighlight-desc": "Teikia sintaksės paryškinimus <syntaxhighlight> naudojant [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Jums reikia nurodyti kalbÄ… kaip Äia:",
        -	"syntaxhighlight-supported": "Palaikomos kalbos sintaksės paryškinimui:",
        -	"syntaxhighlight-err-loading": "(klaida įkeliant palaikomų kalbų sąrašą)",
        -	"syntaxhighlight-err-language": "Neleistina kalba.",
        -	"geshi.css": "/* Čia pateiktas CSS bus taikomas GeSHi sintaksės paryškinimams */"
        +	"syntaxhighlight-desc": "Teikia sintaksės paryškinimus <syntaxhighlight> naudojant [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/lv.json b/extensions/SyntaxHighlight_GeSHi/i18n/lv.json
        index c61942df..616faeaa 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/lv.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/lv.json
        @@ -4,5 +4,5 @@
         			"Papuass"
         		]
         	},
        -	"syntaxhighlight-err-language": "Nederīga valoda."
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "RÄdÄ«t rindu numurus"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/mg.json b/extensions/SyntaxHighlight_GeSHi/i18n/mg.json
        deleted file mode 100644
        index eaf4b65c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/mg.json
        +++ /dev/null
        @@ -1,9 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Jagwar"
        -		]
        -	},
        -	"syntaxhighlight-err-loading": "(nisy zavadiso tamin'ilay fampiasan'ny fiteny voazaha)",
        -	"syntaxhighlight-err-language": "Diso fiteny"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/mk.json b/extensions/SyntaxHighlight_GeSHi/i18n/mk.json
        index c94c83e5..da842be5 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/mk.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/mk.json
        @@ -4,10 +4,15 @@
         			"Bjankuloski06"
         		]
         	},
        -	"syntaxhighlight-desc": "Овозможува потцртување на ÑинтакÑа <syntaxhighlight> Ñо помош на [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Треба да наведете јазик на Ñледниов начин:",
        -	"syntaxhighlight-supported": "Поддржани јазици за ÑинтакÑно потцртување:",
        -	"syntaxhighlight-err-loading": "(грешка при вчитувањето на ÑпиÑокот на поддржани јазици)",
        -	"syntaxhighlight-err-language": "Ðеважечки јазик.",
        -	"geshi.css": "/* Тука поÑтавениот CSS-код ќе биде применет во GeSHi потцртување на ÑинтакÑата */"
        +	"syntaxhighlight-desc": "Овозможува потцртување на ÑинтакÑа <syntaxhighlight> Ñо помош на [http://pygments.org/ Pygments — подвлекувач на Python-ÑинтакÑа]",
        +	"syntaxhighlight-error-category": "Страници Ñо грешки при подвлекување на ÑинтакÑата",
        +	"syntaxhighlight-error-category-desc": "Се појави грешка при обидот да Ñе подвлече кодот вклучен во Ñтраницава.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Код",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Јазик",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(ниеден)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Прикажувај броеви на редовите",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Коден блок",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Ðе уÑпеав да го повикам Pygments",
        +	"syntaxhighlight-error-unknown-language": "Ðепознат јазик „$1“",
        +	"syntaxhighlight-error-exceeds-size-limit": "Големината на кодот од {{PLURAL:$1|еден бајт|$1 бајти}} ја надминува горната граница од  {{PLURAL:$2|еден бајт|$2 бајти}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ml.json b/extensions/SyntaxHighlight_GeSHi/i18n/ml.json
        index a21afeb0..b59b6862 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ml.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ml.json
        @@ -5,10 +5,5 @@
         			"Shijualex"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi à´ªàµà´°à´®àµà´–മാകàµà´•àµ½ ഉപകരണമàµà´ªà´¯àµ‹à´—à´¿à´šàµà´šàµ] <syntaxhighlight> വിനàµà´¯à´¾à´¸à´‚ à´ªàµà´°à´®àµà´–മാകàµà´•à´¿à´•àµà´•à´¾à´Ÿàµà´Ÿà´¾àµ» സഹായികàµà´•àµà´¨àµà´¨àµ",
        -	"syntaxhighlight-specify": "താങàµà´•àµ¾ ഇപàµà´°à´•à´¾à´°à´‚ ഒരൠഭാഷ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•à´£à´‚:",
        -	"syntaxhighlight-supported": "സിറàµà´±à´¾à´•àµà´¸àµ ഹൈലൈറàµà´±à´¿à´™àµà´™àµ à´…à´¨àµà´•àµ‚ലികàµà´•àµà´¨àµà´¨ ഭാഷകൾ:",
        -	"syntaxhighlight-err-loading": "(പിനàµà´¤àµà´£à´¯àµà´³àµà´³ ഭാഷകളàµà´Ÿàµ† പടàµà´Ÿà´¿à´• ശേഖരികàµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പിഴവàµ)",
        -	"syntaxhighlight-err-language": "അസാധàµà´µà´¾à´¯ ഭാഷ.",
        -	"geshi.css": "/* ഇവിടെ നൽകàµà´¨àµà´¨ സി.à´Žà´¸àµ.à´Žà´¸àµ.  GeSHi വിനàµà´¯à´¾à´¸à´‚ à´ªàµà´°à´®àµà´–മാകàµà´•à´¿à´•àµà´•à´¾à´Ÿàµà´Ÿà´²à´¿à´¨àµ ബാധകമായിതàµà´¤àµ€à´°àµà´‚ */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ GeSHi à´ªàµà´°à´®àµà´–മാകàµà´•àµ½ ഉപകരണമàµà´ªà´¯àµ‹à´—à´¿à´šàµà´šàµ] <syntaxhighlight> വിനàµà´¯à´¾à´¸à´‚ à´ªàµà´°à´®àµà´–മാകàµà´•à´¿à´•àµà´•à´¾à´Ÿàµà´Ÿà´¾àµ» സഹായികàµà´•àµà´¨àµà´¨àµ"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/mr.json b/extensions/SyntaxHighlight_GeSHi/i18n/mr.json
        index 588368f8..72ac2337 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/mr.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/mr.json
        @@ -6,10 +6,5 @@
         			"Shantanoo"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi हायलायटर] वापरून सिनà¥à¤Ÿà¥…कà¥à¤¸ हायलाईट करा <syntaxhighlight>",
        -	"syntaxhighlight-specify": "तà¥à¤®à¥à¤¹à¥€ यापà¥à¤°à¤®à¤¾à¤£à¥‡ भाषा देणे गरजेचे आहे:",
        -	"syntaxhighlight-supported": "सिनà¥à¤Ÿà¥…कà¥à¤¸ हायलायटींग खालील भाषांवर वापरता येते:",
        -	"syntaxhighlight-err-loading": "(साहायà¥à¤¯ देणाऱà¥à¤¯à¤¾ भाषांची यादी दाखविणà¥à¤¯à¤¾à¤¸ असमरà¥à¤¥)",
        -	"syntaxhighlight-err-language": "गैरलागू भाषा",
        -	"geshi.css": "/* इथे लिहिलेले CSS GeSHi सिनà¥à¤Ÿà¥…कà¥à¤¸ हायलायटींग साठी वापरले जाईल */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ GeSHi हायलायटर] वापरून सिनà¥à¤Ÿà¥…कà¥à¤¸ हायलाईट करा <syntaxhighlight>"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ms.json b/extensions/SyntaxHighlight_GeSHi/i18n/ms.json
        index 71e51dda..af7f30f5 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ms.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ms.json
        @@ -4,10 +4,5 @@
         			"Aviator"
         		]
         	},
        -	"syntaxhighlight-desc": "Menyediakan tag <syntaxhighlight> untuk penonjolan sintaks menggunakan [http://qbnz.com/highlighter/ GeSHi]",
        -	"syntaxhighlight-specify": "Anda hendaklah menyatakan bahasa seperti ini:",
        -	"syntaxhighlight-supported": "Bahasa-bahasa yang disokong untuk penonjolan sintaks:",
        -	"syntaxhighlight-err-loading": "(berlaku ralat ketika memuat senarai bahasa yang disokong)",
        -	"syntaxhighlight-err-language": "Bahasa tidak sah.",
        -	"geshi.css": "/* CSS yang diletakkan di sini akan dikenakan kepada penonjolan sintaks GeSHi */"
        +	"syntaxhighlight-desc": "Menyediakan tag <syntaxhighlight> untuk penonjolan sintaks menggunakan [http://pygments.org/ GeSHi]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/nah.json b/extensions/SyntaxHighlight_GeSHi/i18n/nah.json
        deleted file mode 100644
        index e1fc439f..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/nah.json
        +++ /dev/null
        @@ -1,9 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Fluence",
        -			"Teòtlalili"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Âmò kualli tlâtòlli"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/nb.json b/extensions/SyntaxHighlight_GeSHi/i18n/nb.json
        index 6bc89ac9..070cb4b2 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/nb.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/nb.json
        @@ -1,9 +1,4 @@
         {
         	"@metadata": [],
        -	"syntaxhighlight-desc": "Gir syntaks som framhever <syntaxhighlight> ved hjelp av [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Du må angi et språk slik:",
        -	"syntaxhighlight-supported": "Støttede språk for syntaksutheving:",
        -	"syntaxhighlight-err-loading": "(feil under last av liste over støttede språk)",
        -	"syntaxhighlight-err-language": "Ugyldig språk.",
        -	"geshi.css": "/* CSS plassert her gjelder GeSHi syntaksutheving */"
        +	"syntaxhighlight-desc": "Gir syntaks som framhever <syntaxhighlight> ved hjelp av [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/nds-nl.json b/extensions/SyntaxHighlight_GeSHi/i18n/nds-nl.json
        deleted file mode 100644
        index 333d5c3b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/nds-nl.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Servien"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Niet de juuste taal."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/nds.json b/extensions/SyntaxHighlight_GeSHi/i18n/nds.json
        index 27ffe999..60f0504f 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/nds.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/nds.json
        @@ -4,10 +4,5 @@
         			"Slomox"
         		]
         	},
        -	"syntaxhighlight-desc": "Syntax-Rutheven <syntaxhighlight> mit Help vun’n [http://qbnz.com/highlighter/ GeSHi-Highlighter]",
        -	"syntaxhighlight-specify": "Du musst op disse Wies en Spraak angeven:",
        -	"syntaxhighlight-supported": "Ünnerstütt Spraken för dat Syntax-Rutheven:",
        -	"syntaxhighlight-err-loading": "(Fehler bi dat Laden vun de Sprakenlist)",
        -	"syntaxhighlight-err-language": "Spraak gellt nich.",
        -	"geshi.css": "/* CSS in disse MediaWiki-Systemnaricht warrt för dat GeSHi-Syntaxrutheven bruukt */"
        +	"syntaxhighlight-desc": "Syntax-Rutheven <syntaxhighlight> mit Help vun’n [http://pygments.org/ GeSHi-Highlighter]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/nl.json b/extensions/SyntaxHighlight_GeSHi/i18n/nl.json
        index 0bfe580a..45ce38e9 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/nl.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/nl.json
        @@ -2,13 +2,10 @@
         	"@metadata": {
         		"authors": [
         			"Siebrand",
        -			"Tvdm"
        +			"Tvdm",
        +			"Romaine"
         		]
         	},
        -	"syntaxhighlight-desc": "Voorziet in het markeren van syntaxis voor <syntaxhighlight> met [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Geef een taal als volgt op:",
        -	"syntaxhighlight-supported": "Ondersteunde talen voor syntaxismarkering:",
        -	"syntaxhighlight-err-loading": "(fout tijdens het laden van de lijst met ondersteunde talen)",
        -	"syntaxhighlight-err-language": "Ongeldige taal.",
        -	"geshi.css": "/* Hier geplaatste CSS wordt toegepast op GeSHi Syntax Highlighting */"
        +	"syntaxhighlight-desc": "Voorziet in het markeren van syntaxis voor <syntaxhighlight> met [http://pygments.org/ Pygments]",
        +	"syntaxhighlight-error-category": "Pagina's met fouten in de syntaxmarkering"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/nn.json b/extensions/SyntaxHighlight_GeSHi/i18n/nn.json
        index 886c2418..4c91c89e 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/nn.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/nn.json
        @@ -4,10 +4,5 @@
         			"Frokor"
         		]
         	},
        -	"syntaxhighlight-desc": "Gjev syntaks som framhevar <syntaxhighlight> ved hjelp av [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Du må gje eit språk slik:",
        -	"syntaxhighlight-supported": "Støtta språk for syntaksutheving:",
        -	"syntaxhighlight-err-loading": "(feil under lasting av liste over støtta språk)",
        -	"syntaxhighlight-err-language": "Ugyldig språk.",
        -	"geshi.css": "/* CSS plassert her gjeld GeSHi syntaksutheving */"
        +	"syntaxhighlight-desc": "Gjev syntaks som framhevar <syntaxhighlight> ved hjelp av [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/oc.json b/extensions/SyntaxHighlight_GeSHi/i18n/oc.json
        index 095c8cf1..7a592523 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/oc.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/oc.json
        @@ -4,10 +4,5 @@
         			"Cedric31"
         		]
         	},
        -	"syntaxhighlight-desc": "Provesís la mesa en relèu de la sintaxi per la balisa <syntaxhighlight> en utilizant [http://qbnz.com/highlighter/ la coloracion sintaxica GeSHi]",
        -	"syntaxhighlight-specify": "Vos cal especificar un lengatge coma aquò :",
        -	"syntaxhighlight-supported": "Lengatges suportats per la coloracion sintaxica :",
        -	"syntaxhighlight-err-loading": "(error en cargant la lista dels lengatges suportats)",
        -	"syntaxhighlight-err-language": "Lengatge invalid.",
        -	"geshi.css": "/* Lo còde CSS inserit aicí serà aplicat per GeSHi per la coloracion sintaxica. */"
        +	"syntaxhighlight-desc": "Provesís la mesa en relèu de la sintaxi per la balisa <syntaxhighlight> en utilizant [http://pygments.org/ la coloracion sintaxica GeSHi]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/olo.json b/extensions/SyntaxHighlight_GeSHi/i18n/olo.json
        new file mode 100644
        index 00000000..6e158526
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/olo.json
        @@ -0,0 +1,8 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Mashoi7"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Nimidä)"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/om.json b/extensions/SyntaxHighlight_GeSHi/i18n/om.json
        new file mode 100644
        index 00000000..9bc20cc0
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/om.json
        @@ -0,0 +1,8 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Tumsaa"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Afaan"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/os.json b/extensions/SyntaxHighlight_GeSHi/i18n/os.json
        deleted file mode 100644
        index f3512639..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/os.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Amikeco"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "РаÑÑ‚ æвзаг нæу."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pam.json b/extensions/SyntaxHighlight_GeSHi/i18n/pam.json
        new file mode 100644
        index 00000000..c13b7bb8
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/pam.json
        @@ -0,0 +1,9 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Leeheonjin"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kodigu",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Amanu/Pamyalita"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pdc.json b/extensions/SyntaxHighlight_GeSHi/i18n/pdc.json
        deleted file mode 100644
        index 1406dd4c..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/pdc.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Xqt"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Falsch Schprooch"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pfl.json b/extensions/SyntaxHighlight_GeSHi/i18n/pfl.json
        deleted file mode 100644
        index 4f5e438b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/pfl.json
        +++ /dev/null
        @@ -1,9 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Manuae"
        -		]
        -	},
        -	"syntaxhighlight-specify": "Do mugschd ä Schbrooch feschdleesche:",
        -	"syntaxhighlight-err-language": "Ugildischi Schbrooch"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pl.json b/extensions/SyntaxHighlight_GeSHi/i18n/pl.json
        index 87a34e68..a552931a 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/pl.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/pl.json
        @@ -2,13 +2,19 @@
         	"@metadata": {
         		"authors": [
         			"Derbeth",
        -			"Sp5uhe"
        +			"Sp5uhe",
        +			"Chrumps",
        +			"PiotrAntosz"
         		]
         	},
        -	"syntaxhighlight-desc": "Zapewnia kolorowanie składni dla znacznika <syntaxhighlight> wykorzystując [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Musisz wybrać język w następujący sposób:",
        -	"syntaxhighlight-supported": "Języki obsługiwane w podświetlaniu składni:",
        -	"syntaxhighlight-err-loading": "(błąd przy wczytywaniu listy obsługiwanych języków)",
        -	"syntaxhighlight-err-language": "Niepoprawny język.",
        -	"geshi.css": "/* CSS umieszczony tutaj zostanie użyty do kolorowania składni GeSHi  */"
        +	"syntaxhighlight-desc": "Zapewnia kolorowanie składni dla znacznika <syntaxhighlight> wykorzystując [http://pygments.org/ Pygments]",
        +	"syntaxhighlight-error-category": "Strony z podświetlaniem składni błędów",
        +	"syntaxhighlight-error-category-desc": "Wystąpił błąd podczas próby podświetlenia kodu zawartego na stronie.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Kod",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Język",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Brak)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Pokaż numery linii",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Blok kodu",
        +	"syntaxhighlight-error-unknown-language": "Nierozpoznany jÄ™zyk „$1â€",
        +	"syntaxhighlight-error-exceeds-size-limit": "Rozmiar kodu równy $1 {{PLURAL:$1|bajt|bajtów}} przekracza dozwolone maksimum $2 {{PLURAL:$2|bajt|bajtów}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pms.json b/extensions/SyntaxHighlight_GeSHi/i18n/pms.json
        index db4df6b7..fdf2690e 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/pms.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/pms.json
        @@ -5,10 +5,5 @@
         			"Dragonòt"
         		]
         	},
        -	"syntaxhighlight-desc": "A evidensia la sintassi <syntaxhighlight>an dovrand [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "A venta specifiché na lenga coma:",
        -	"syntaxhighlight-supported": "Lenghe dont as peul fé l'evidensiassion dla sintassi:",
        -	"syntaxhighlight-err-loading": "(eror ën cariand la lista dle lenghe dont sintassi as peul evidensié)",
        -	"syntaxhighlight-err-language": "Lenga nen bon-a",
        -	"geshi.css": "/* ël CSS piassà ambelessì a sarà aplicà a l'evidensiassion ëd sintassi GeSHi */"
        +	"syntaxhighlight-desc": "A evidensia la sintassi <syntaxhighlight>an dovrand [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ps.json b/extensions/SyntaxHighlight_GeSHi/i18n/ps.json
        index ce26f883..aac92039 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ps.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ps.json
        @@ -4,6 +4,7 @@
         			"Ahmed-Najib-Biabani-Ibrahimkhel"
         		]
         	},
        -	"syntaxhighlight-specify": "بايد ØªØ§Ø³Û ÙŠÙˆÙ‡ ژبه په Ø¯Û ØªÙˆÚ¯Ù‡ ÚØ§Ù†Ú¯Ú“Û Ú©Ú“Û:",
        -	"syntaxhighlight-err-language": "ناسمه ژبه."
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Ú©ÙˆÚ‰",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "ژبه",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Ù‡ÛÚ…)"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json b/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json
        index e07cc553..a76468fe 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json
        @@ -5,10 +5,5 @@
         			"He7d3r"
         		]
         	},
        -	"syntaxhighlight-desc": "Providencia realce de sintaxe <syntaxhighlight> através do [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Você precisa especificar uma linguagem, tal como:",
        -	"syntaxhighlight-supported": "Linguagens suportadas no realce de sintaxe:",
        -	"syntaxhighlight-err-loading": "(erro ao carregar a lista de linguagens suportadas)",
        -	"syntaxhighlight-err-language": "Linguagem inválida.",
        -	"geshi.css": "/* O código CSS aqui colocado será aplicado ao realce de sintaxe GeSHi */"
        +	"syntaxhighlight-desc": "Providencia realce de sintaxe <syntaxhighlight> através do [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pt.json b/extensions/SyntaxHighlight_GeSHi/i18n/pt.json
        index ef3c6c2c..d6187352 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/pt.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/pt.json
        @@ -2,13 +2,16 @@
         	"@metadata": {
         		"authors": [
         			"Hamilton Abreu",
        -			"Malafaya"
        +			"Malafaya",
        +			"Vitorvicentevalente",
        +			"He7d3r"
         		]
         	},
        -	"syntaxhighlight-desc": "Permite o realce sintáctico de código fonte, através do elemento <syntaxhighlight>, usando o [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Precisa de especificar uma linguagem assim:",
        -	"syntaxhighlight-supported": "Linguagens suportadas no realce de sintaxe:",
        -	"syntaxhighlight-err-loading": "(erro ao carregar a lista de linguagens suportadas)",
        -	"syntaxhighlight-err-language": "Linguagem inválida.",
        -	"geshi.css": "/* O código CSS aqui colocado será aplicado ao realce de sintaxe GeSHi */"
        +	"syntaxhighlight-desc": "Permite o realce sintático de código fonte, através do elemento <syntaxhighlight>, usando o [http://pygments.org/ Pygments]",
        +	"syntaxhighlight-error-category": "Páginas com erros no destaque de sintaxe",
        +	"syntaxhighlight-error-category-desc": "Ocorreu um erro ao tentar realçar o código incluído na página.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Código",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Idioma",
        +	"syntaxhighlight-error-unknown-language": "Idioma \"$1\" desconhecido",
        +	"syntaxhighlight-error-exceeds-size-limit": "O tamanho do código de $1 {{PLURAL:$1|bytes}} excede o máximo permitido de $2 {{PLURAL:$2|bytes}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json b/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json
        index ccec7924..2091efdc 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json
        @@ -5,9 +5,20 @@
         			"Shirayuki",
         			"The Evil IP address",
         			"Legoktm",
        -			"Umherirrender"
        +			"Umherirrender",
        +			"Liuxinyu970226",
        +			"Robby"
         		]
         	},
         	"syntaxhighlight-desc": "{{desc|name=Syntax Highlight GeSHi|url=https://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi}}",
        -	"geshi.css": "CSS comment"
        +	"syntaxhighlight-error-category": "Tracking category for pages with syntax highlighting errors",
        +	"syntaxhighlight-error-category-desc": "Description on [[Special:TrackingCategories]] for the {{msg-mw|syntaxhighlight-error-category}} tracking category.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Label for the code input field\n{{Identical|Code}}",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Label for the language field\n{{Identical|Language}}",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "Label of the 'None' option in the language dropdown field\n{{Identical|None}}",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Label for the checkbox to show line numbers",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Title for the VisualEditor syntax highlighter inspector, above the text area for the code",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Error message shown when the syntax highlighting library failed with an unspecified error",
        +	"syntaxhighlight-error-unknown-language": "Error message shown when the programming language name was not recognized by the syntax highlighting library. Parameters:\n* $1 - the language name",
        +	"syntaxhighlight-error-exceeds-size-limit": "Error message shown when the block of code to be highlighted exceeds the size limit. Parameters:\n* $1 - the size of the code block, in bytes\n* $2 - the maximum size allowed."
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/qu.json b/extensions/SyntaxHighlight_GeSHi/i18n/qu.json
        deleted file mode 100644
        index 2a6a1e37..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/qu.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"AlimanRuna"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Nisqayki rimayqa manam kanchu."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ro.json b/extensions/SyntaxHighlight_GeSHi/i18n/ro.json
        index d3ce585f..f22c08d8 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ro.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ro.json
        @@ -3,13 +3,18 @@
         		"authors": [
         			"AdiJapan",
         			"KlaudiuMihaila",
        -			"Stelistcristi"
        +			"Stelistcristi",
        +			"Minisarm"
         		]
         	},
        -	"syntaxhighlight-desc": "Produce evidențierea sintaxei prin baliza <syntaxhighlight> folosind [http://qbnz.com/highlighter/ GeSHi - Generic Syntax Highlighter]",
        -	"syntaxhighlight-specify": "Trebuie să specificați o limbă în acest mod:",
        -	"syntaxhighlight-supported": "Limbile suportate pentru evidențierea sintaxei:",
        -	"syntaxhighlight-err-loading": "(eroare la încărcarea listei cu limbile suportate)",
        -	"syntaxhighlight-err-language": "Limbă incorectă.",
        -	"geshi.css": "/* Codul CSS inserat aici se va aplica la evidențierea sintaxei prin GeSHi. */"
        +	"syntaxhighlight-desc": "Produce evidențierea sintaxei prin eticheta <syntaxhighlight> folosind [http://pygments.org/ Pygments - evidențiere Python de sintaxă]",
        +	"syntaxhighlight-error-category": "Pagini cu erori de evidențiere a sintaxei",
        +	"syntaxhighlight-error-category-desc": "A apărut o eroare în încercarea de a evidenția codul inclus în această pagină.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Cod",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Limbă",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Arată numărul de linii",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Bloc cod sursă",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Imposibil de apelat Pygments",
        +	"syntaxhighlight-error-unknown-language": "Limba „$1†necunoscută",
        +	"syntaxhighlight-error-exceeds-size-limit": "Dimensiunea codului de $1 {{PLURAL:$1|octet|octeți|de octeți}} depășește maximul permis de $2 {{PLURAL:$1|octet|octeți|de octeți}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/roa-tara.json b/extensions/SyntaxHighlight_GeSHi/i18n/roa-tara.json
        index e89ffe00..249c0a08 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/roa-tara.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/roa-tara.json
        @@ -4,10 +4,8 @@
         			"Joetaras"
         		]
         	},
        -	"syntaxhighlight-desc": "Dè 'na sindasse evidenziate <syntaxhighlight> ausanne [http://qbnz.com/highlighter/ GeSHi l'Evidenziatore]",
        -	"syntaxhighlight-specify": "Tu, abbesogne de 'na lènga specifiche cumme a queste:",
        -	"syntaxhighlight-supported": "Linguagge supportate pa sindasse evidenziate:",
        -	"syntaxhighlight-err-loading": "(errore carecanne 'a liste de linguagge supportate)",
        -	"syntaxhighlight-err-language": "Lénghe invalide.",
        -	"geshi.css": "/* CSS mise aqquà avène applicate 'a sindasse GeSHi evidenziate */"
        +	"syntaxhighlight-desc": "Dèje 'na sindasse evidenziate <syntaxhighlight> ausanne [http://pygments.org/ Pygments - l'Evidenziatore de sindasse de Python]",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Codece",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Lènghe",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Blocche de codece"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ru.json b/extensions/SyntaxHighlight_GeSHi/i18n/ru.json
        index 50e758c0..37f08490 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ru.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/ru.json
        @@ -1,13 +1,9 @@
         {
         	"@metadata": {
         		"authors": [
        -			"ÐлекÑандр Сигачёв"
        +			"ÐлекÑандр Сигачёв",
        +			"Okras"
         		]
         	},
        -	"syntaxhighlight-desc": "ПозволÑет иÑпользовать тег <syntaxhighlight> Ð´Ð»Ñ Ð¿Ð¾Ð´Ñветки ÑинтакÑиÑа Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Ð’Ñ‹ должны указать Ñзык Ñледующим образом:",
        -	"syntaxhighlight-supported": "Поддерживаемые Ñзыки:",
        -	"syntaxhighlight-err-loading": "(невозможно загрузить ÑпиÑок Ñзыков)",
        -	"syntaxhighlight-err-language": "Указан неподдерживаемый Ñзык.",
        -	"geshi.css": "/* CSS-код, размещённый здеÑÑŒ, будет применён Ð´Ð»Ñ Ð¿Ð¾Ð´Ñветки ÑинтакÑиÑа GeSHI */"
        +	"syntaxhighlight-desc": "ОбеÑпечивает подÑветки ÑинтакÑиÑа <syntaxhighlight> Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ [http://pygments.org/ Pygments — ÑредÑтва подÑветки ÑинтакÑиÑа Ð´Ð»Ñ Python]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/rue.json b/extensions/SyntaxHighlight_GeSHi/i18n/rue.json
        index c4ad8d44..afab81d1 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/rue.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/rue.json
        @@ -4,10 +4,5 @@
         			"Gazeb"
         		]
         	},
        -	"syntaxhighlight-desc": "Додавать звыразнїна ÑінтакÑÑ–Ñ <syntaxhighlight> за помочі [http://qnbz.com/higlighter звыразнёвача GeSHi]",
        -	"syntaxhighlight-specify": "МуÑите Ñтановити Ñзык тым ÑпоÑобом:",
        -	"syntaxhighlight-supported": "СпиÑок Ñзыків, у котрый Ñ” підпороване Ð·Ð²Ñ‹Ñ€Ð°Ð·Ð½Ñ‘Ð²Ð°Ð½Ñ ÑінтакÑÑ–Ñ:",
        -	"syntaxhighlight-err-loading": "(хыба при начітаню ÑпиÑка підпорованых Ñзыків)",
        -	"syntaxhighlight-err-language": "Ðеправилный Ñзык.",
        -	"geshi.css": "/* Гев зазначене CSS буде овпливнёвати Ð·Ð²Ñ‹Ñ€Ð°Ð·Ð½Ñ‘Ð²Ð°Ð½Ñ ÑінтакÑÑ–Ñу GeSHi */"
        +	"syntaxhighlight-desc": "Додавать звыразнїна ÑінтакÑÑ–Ñ <syntaxhighlight> за помочі [http://qnbz.com/higlighter звыразнёвача GeSHi]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/sah.json b/extensions/SyntaxHighlight_GeSHi/i18n/sah.json
        index 1d0cfe37..5e5dae0f 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/sah.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/sah.json
        @@ -4,10 +4,5 @@
         			"HalanTul"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi Highlighter] көмөтүнÑн ÑинтакÑÐ¸Ñ Ð¿Ð¾Ð´Ñветкатын холбуурга <syntaxhighlight> тиÑги туһанар кыах биÑÑ€ÑÑ€.",
        -	"syntaxhighlight-specify": "Омугун тылын маннык ыйыахтааххын:",
        -	"syntaxhighlight-supported": "ӨйөнүллÑÑ€ тыллара:",
        -	"syntaxhighlight-err-loading": "(тылларын иÑпииһÑÐ³Ñ ÐºÑ‹Ð°Ð¹Ð°Ð½ көрдөрүллүбÑÑ‚Ñ)",
        -	"syntaxhighlight-err-language": "ӨйөнүллүбÑÑ‚ тыл Ñбит.",
        -	"geshi.css": "/* манна баар CSS-куод GeSHI ÑинтакÑииһын Ñырдатарга туттуллуо */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ Pygments] көмөтүнÑн ÑинтакÑÐ¸Ñ Ð¿Ð¾Ð´Ñветкатын холбуурга <syntaxhighlight> тиÑги туһанар кыах биÑÑ€ÑÑ€."
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/shn.json b/extensions/SyntaxHighlight_GeSHi/i18n/shn.json
        new file mode 100644
        index 00000000..6f8e927f
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/shn.json
        @@ -0,0 +1,8 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Saosukham"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "á¼á‚„ပá¼á€º ထႅá€á€º မá¢á‚†á¼á€•á€ºá‚‰"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/si.json b/extensions/SyntaxHighlight_GeSHi/i18n/si.json
        deleted file mode 100644
        index a5ef0b2d..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/si.json
        +++ /dev/null
        @@ -1,13 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Calcey",
        -			"පසිඳු කà·à·€à·’න්ද"
        -		]
        -	},
        -	"syntaxhighlight-specify": "ඔබට මෙවà·à¶±à·’ භà·à·‚à·à·€à¶šà·Š විà·à·šà·‚ණය කල යුතු වේ:",
        -	"syntaxhighlight-supported": "à·€à·à¶œà·Š රීති උද්දීපනය කිරීම සඳහ෠සහà·à¶º දක්වන භà·à·‚à·:",
        -	"syntaxhighlight-err-loading": "(සහය දක්වන භà·à·‚෠ලà·à¶ºà·’ස්තුව පූරණය වීමේ දà·à·‚ය)",
        -	"syntaxhighlight-err-language": "අවලංගු භà·à·‚à·à·€.",
        -	"geshi.css": "/* මෙහි යොදන CSS GeSHi කà·à¶»à¶šà¶»à·“ති තීවâ€à·Šâ€à¶»à·à¶½à·à¶šà¶º සඳහ෠යෙදේ */"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/sk.json b/extensions/SyntaxHighlight_GeSHi/i18n/sk.json
        index 08af65b3..e935096b 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/sk.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/sk.json
        @@ -4,10 +4,5 @@
         			"Helix84"
         		]
         	},
        -	"syntaxhighlight-desc": "Poskytuje zvýazňovanie syntaxe <syntaxhighlight> pomocou [http://qbnz.com/highlighter/ zvýrazňovaÄa GeSHi]",
        -	"syntaxhighlight-specify": "Musíte uviesť jazyk takto:",
        -	"syntaxhighlight-supported": "Jazyky, pre ktoré je zvýrazňovanie syntaxe podporované:",
        -	"syntaxhighlight-err-loading": "(chyba pri naÄítaní zoznamu podporovaných jazykov)",
        -	"syntaxhighlight-err-language": "Neplatný jazyk.",
        -	"geshi.css": "/* Tu umiestnené CSS sa použije pre zvýrazňovanie syntaxe GeSHi */"
        +	"syntaxhighlight-desc": "Poskytuje zvýazňovanie syntaxe <syntaxhighlight> pomocou [http://pygments.org/ zvýrazňovaÄa GeSHi]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/sl.json b/extensions/SyntaxHighlight_GeSHi/i18n/sl.json
        index 639e40c9..0078bd53 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/sl.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/sl.json
        @@ -5,10 +5,5 @@
         			"Yerpo"
         		]
         	},
        -	"syntaxhighlight-desc": "Nudi oznaÄevanje skladnje <syntaxhighlight> z uporabo [http://qbnz.com/highlighter/ oznaÄevalnika GeSHi]",
        -	"syntaxhighlight-specify": "Morate navesti jezik tako:",
        -	"syntaxhighlight-supported": "Jeziki, ki jih podpira funkcija za oznaÄevanje sintakse:",
        -	"syntaxhighlight-err-loading": "(napaka pri nalaganju podprtih jezikov)",
        -	"syntaxhighlight-err-language": "Neveljaven jezik.",
        -	"geshi.css": "/* CSS placed here will be applied to GeSHi syntax highlighting */"
        +	"syntaxhighlight-desc": "Nudi oznaÄevanje skladnje <syntaxhighlight> z uporabo [http://pygments.org/ Pygments – oznaÄevalnika skladnje Python]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/sr-ec.json b/extensions/SyntaxHighlight_GeSHi/i18n/sr-ec.json
        index 2644774b..7551c323 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/sr-ec.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/sr-ec.json
        @@ -6,10 +6,5 @@
         			"Sasa Stefanovic"
         		]
         	},
        -	"syntaxhighlight-desc": "Омогућава визуелно означавање ÑинтакÑе <syntaxhighlight> коришћењем [http://qbnz.com/highlighter/ GeSHi хајлајтера].",
        -	"syntaxhighlight-specify": "Потребно је одредити језик као овај:",
        -	"syntaxhighlight-supported": "Подржани језици у визуелом означавању ÑинтакÑе:",
        -	"syntaxhighlight-err-loading": "(грешка при учитавању подржаних језика)",
        -	"syntaxhighlight-err-language": "ÐеиÑправан језик.",
        -	"geshi.css": "/* CSS поÑтављен овде биће примењен на визуелно означавање ÑинткÑе GeSHi */"
        +	"syntaxhighlight-desc": "Омогућава визуелно означавање ÑинтакÑе <syntaxhighlight> коришћењем [http://pygments.org/ GeSHi хајлајтера]."
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/sr-el.json b/extensions/SyntaxHighlight_GeSHi/i18n/sr-el.json
        index bb041bd7..0159744d 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/sr-el.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/sr-el.json
        @@ -5,10 +5,5 @@
         			"Michaello"
         		]
         	},
        -	"syntaxhighlight-desc": "Omogućava vizuelno oznaÄavanje sintakse <syntaxhighlight> korišćenjem [http://qbnz.com/highlighter/ GeSHi hajlajtera].",
        -	"syntaxhighlight-specify": "Potrebno je odrediti jezik kao ovaj:",
        -	"syntaxhighlight-supported": "Podržani jezici u vizuelom oznaÄavanju sintakse:",
        -	"syntaxhighlight-err-loading": "(greÅ¡ka pri uÄitavanju podržanih jezika)",
        -	"syntaxhighlight-err-language": "Nepodoban jezik",
        -	"geshi.css": "/* CSS postavljen ovde biće primenjen na vizuelno oznaÄavanje sintkse GeSHi */"
        +	"syntaxhighlight-desc": "Omogućava vizuelno oznaÄavanje sintakse <syntaxhighlight> korišćenjem [http://pygments.org/ GeSHi hajlajtera]."
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/stq.json b/extensions/SyntaxHighlight_GeSHi/i18n/stq.json
        index 2a11da9e..ee3ec2de 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/stq.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/stq.json
        @@ -4,10 +4,5 @@
         			"Pyt"
         		]
         	},
        -	"syntaxhighlight-desc": "Syntax-Apljuchtenge <syntaxhighlight> mäd Hälpe fon dän [http://qbnz.com/highlighter/ GeSHi-Apljuchter]",
        -	"syntaxhighlight-specify": "Ju wonskede Sproake mout as foulget definierd wäide:",
        -	"syntaxhighlight-supported": "Unnerstöände Sproaken foar ju Syntax-Betoonenge:",
        -	"syntaxhighlight-err-loading": "(Failer bie dät Leeden fon ju Sproakenlieste)",
        -	"syntaxhighlight-err-language": "Uungultige Sproake.",
        -	"geshi.css": "/* CSS in disse MediaWiki-Systemättergjucht wäd ap ju GeSHi-Syntaxbetoonenge anwoand */"
        +	"syntaxhighlight-desc": "Syntax-Apljuchtenge <syntaxhighlight> mäd Hälpe fon dän [http://pygments.org/ GeSHi-Apljuchter]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/su.json b/extensions/SyntaxHighlight_GeSHi/i18n/su.json
        index ae50a0cf..1b6f7449 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/su.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/su.json
        @@ -4,10 +4,5 @@
         			"Kandar"
         		]
         	},
        -	"syntaxhighlight-desc": "Nyadiakeun sorotan rumpaka <syntaxhighlight> migunakeun [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Anjeun kudu milih basa kawas kieu:",
        -	"syntaxhighlight-supported": "Basa nu dirojong ku sorotan rumpaka:",
        -	"syntaxhighlight-err-loading": "(éror ngamuat daptar basa nu dirojong)",
        -	"syntaxhighlight-err-language": "Basana teu sah.",
        -	"geshi.css": "/* CSS nu diperenahkeun di dieu bakal dilarapkeun ka sorotan rumpaka GeSHi */"
        +	"syntaxhighlight-desc": "Nyadiakeun sorotan rumpaka <syntaxhighlight> migunakeun [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/sv.json b/extensions/SyntaxHighlight_GeSHi/i18n/sv.json
        index 659b3056..527e7f74 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/sv.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/sv.json
        @@ -2,13 +2,10 @@
         	"@metadata": {
         		"authors": [
         			"Lejonel",
        -			"Lokal Profil"
        +			"Lokal Profil",
        +			"WikiPhoenix"
         		]
         	},
        -	"syntaxhighlight-desc": "Ger syntaxmarkering med [http://qbnz.com/highlighter/ GeSHi Highlighter] inuti <syntaxhighlight>-taggar",
        -	"syntaxhighlight-specify": "Du måste ange vilket språk som används, så här:",
        -	"syntaxhighlight-supported": "Stödda språk för syntaxmarkering:",
        -	"syntaxhighlight-err-loading": "(fel vid laddning av listan över stödda språk)",
        -	"syntaxhighlight-err-language": "Ogiltigt språk.",
        -	"geshi.css": "/* CSS som skrivs här används för syntaxmarkering med GeSHI */"
        +	"syntaxhighlight-desc": "Ger syntaxmarkering med [http://pygments.org/ Pygments] inuti <syntaxhighlight>-taggar",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Ingen)"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ta.json b/extensions/SyntaxHighlight_GeSHi/i18n/ta.json
        deleted file mode 100644
        index ca985cc5..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ta.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"மதனாஹரனà¯"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "செலà¯à®²à®¾à®¤ மொழி."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/te.json b/extensions/SyntaxHighlight_GeSHi/i18n/te.json
        index 9e5364d7..88cbd34b 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/te.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/te.json
        @@ -2,11 +2,10 @@
         	"@metadata": {
         		"authors": [
         			"Chaduvari",
        -			"Veeven"
        +			"Veeven",
        +			"Praveen Illa"
         		]
         	},
        -	"syntaxhighlight-specify": "భాషని à°ˆ విధంగా ఇవà±à°µà°¾à°²à°¿:",
        -	"syntaxhighlight-supported": "ఛందసà±à°¸à± ఉదà±à°¦à±€à°ªà°¨à°•à°¿ తోడà±à°ªà°¾à°Ÿà± ఉనà±à°¨ భాషలà±:",
        -	"syntaxhighlight-err-loading": "(తోడà±à°ªà°¾à°Ÿà±à°¨à±à°¨ భాషల జాబితా లోడింగà±à°²à±‹ లోపం జరిగింది)",
        -	"syntaxhighlight-err-language": "చెలà±à°²à°¨à°¿ భాష."
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "భాష",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "కోడౠబà±à°²à°¾à°•à±"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/tg-cyrl.json b/extensions/SyntaxHighlight_GeSHi/i18n/tg-cyrl.json
        index be3d5c13..0e7251fe 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/tg-cyrl.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/tg-cyrl.json
        @@ -4,10 +4,5 @@
         			"Ibrahim"
         		]
         	},
        -	"syntaxhighlight-desc": "Имкони даÑтуроти рангин карданро <syntaxhighlight> бо иÑтифода аз [http://qbnz.com/highlighter/ GeSHi Highlighter]-ро фароҳам меоварад",
        -	"syntaxhighlight-specify": "Шумо боÑд бо ин шакл забонеро Ð¼ÑƒÑˆÐ°Ñ…Ñ…Ð°Ñ ÐºÑƒÐ½ÐµÐ´:",
        -	"syntaxhighlight-supported": "Забонҳои пуштибонишуда барои рангин кардани даÑтуроти наҳвӣ:",
        -	"syntaxhighlight-err-loading": "(хато дар богузории забонҳои пуштибонишуда)",
        -	"syntaxhighlight-err-language": "Забони ғайри миҷоз.",
        -	"geshi.css": "/* CSS инҷо гузошташуда ба даÑтуроти рангинкунии GeSHi ба кор бурда мешавад */"
        +	"syntaxhighlight-desc": "Имкони даÑтуроти рангин карданро <syntaxhighlight> бо иÑтифода аз [http://pygments.org/ Pygments]-ро фароҳам меоварад"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/tg-latn.json b/extensions/SyntaxHighlight_GeSHi/i18n/tg-latn.json
        index 57edee53..294a914d 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/tg-latn.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/tg-latn.json
        @@ -4,10 +4,5 @@
         			"Liangent"
         		]
         	},
        -	"syntaxhighlight-desc": "Imkoni dasturoti rangin kardanro <syntaxhighlight> bo istifoda az [http://qbnz.com/highlighter/ GeSHi Highlighter]-ro faroham meovarad",
        -	"syntaxhighlight-specify": "Åžumo bojad bo in ÅŸakl zabonero muÅŸaxxas kuned:",
        -	"syntaxhighlight-supported": "Zabonhoi puştibonişuda baroi rangin kardani dasturoti nahvī:",
        -	"syntaxhighlight-err-loading": "(xato dar boguzoriji zabonhoi puÅŸtiboniÅŸuda)",
        -	"syntaxhighlight-err-language": "Zaboni ƣajri miçoz.",
        -	"geshi.css": "/* CSS inço guzoştaşuda ba dasturoti ranginkuniji GeSHi ba kor burda meşavad */"
        +	"syntaxhighlight-desc": "Imkoni dasturoti rangin kardanro <syntaxhighlight> bo istifoda az [http://pygments.org/ Pygments]-ro faroham meovarad"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/tk.json b/extensions/SyntaxHighlight_GeSHi/i18n/tk.json
        index 5645b73f..21a8a2f1 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/tk.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/tk.json
        @@ -4,10 +4,5 @@
         			"Hanberke"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi Highlighter] ulanyp <syntaxhighlight> sintaksis nygtamasyny üpjün edýär",
        -	"syntaxhighlight-specify": "Şunuň ýaly bir dil görkezmeli:",
        -	"syntaxhighlight-supported": "Sintaksis nygtamasy üçin goldanylýan diller:",
        -	"syntaxhighlight-err-loading": "(goldanylýan diller sanawyny ýükleme säwligi)",
        -	"syntaxhighlight-err-language": "Nädogry dil.",
        -	"geshi.css": "/* Bu ýere ýerleşdirilen CSS, GeSHi sintaksis nygtamasyna berjaý ediljekdir */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ Pygments] ulanyp <syntaxhighlight> sintaksis nygtamasyny üpjün edýär"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/tl.json b/extensions/SyntaxHighlight_GeSHi/i18n/tl.json
        index 1217bb2e..a036c709 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/tl.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/tl.json
        @@ -4,10 +4,5 @@
         			"AnakngAraw"
         		]
         	},
        -	"syntaxhighlight-desc": "Nagbibigay ng pagbibigay ng liwanag sa palaugnayan <syntaxhighlight> na ginagamitan ng [http://qbnz.com/highlighter/ pambigay ng liwanag (''highlighter'') ng GeSHi]",
        -	"syntaxhighlight-specify": "Kinakailangan mong tumukoy ng isang wikang katulad nito:",
        -	"syntaxhighlight-supported": "Sinusuportahang mga wika para sa pagbibigay ng liwanag/pagtatampok ng palaugnayan:",
        -	"syntaxhighlight-err-loading": "(kamalian sa pagkarga ng sinusuportahang talaan ng wika)",
        -	"syntaxhighlight-err-language": "Hindi tanggap na wika.",
        -	"geshi.css": "/* Ang inilagay na CSS dito ay gagamitin para sa pang-GeSHi na pagbibigay ng liwanag sa/pagtatampok ng palaugnayan */"
        +	"syntaxhighlight-desc": "Nagbibigay ng pagbibigay ng liwanag sa palaugnayan <syntaxhighlight> na ginagamitan ng [http://pygments.org/ pambigay ng liwanag (''highlighter'') ng GeSHi]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/tokipona.json b/extensions/SyntaxHighlight_GeSHi/i18n/tokipona.json
        new file mode 100644
        index 00000000..c899f1e3
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/tokipona.json
        @@ -0,0 +1,8 @@
        +{
        +	"@metadata": {
        +		"authors": [
        +			"Robin0van0der0vliet"
        +		]
        +	},
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "toki"
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/tr.json b/extensions/SyntaxHighlight_GeSHi/i18n/tr.json
        index 20d82332..d0a2b4d4 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/tr.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/tr.json
        @@ -5,10 +5,5 @@
         			"Joseph"
         		]
         	},
        -	"syntaxhighlight-desc": "[http://qbnz.com/highlighter/ GeSHi Highlighter] kullanarak <syntaxhighlight> sözdizimi vurgulamasını sağlar",
        -	"syntaxhighlight-specify": "Bu gibi bir dil belirtmelisiniz:",
        -	"syntaxhighlight-supported": "Sözdizimi vurgulaması için desteklenen diller:",
        -	"syntaxhighlight-err-loading": "(desteklenen diller listesi yüklenirken hata)",
        -	"syntaxhighlight-err-language": "Geçersiz dil.",
        -	"geshi.css": "/* Buraya yerleştirilen CSS, GeSHi sözdizimi vurgulamasına uygulanacaktır */"
        +	"syntaxhighlight-desc": "[http://pygments.org/ Pygments] kullanarak <syntaxhighlight> sözdizimi vurgulamasını sağlar"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/uk.json b/extensions/SyntaxHighlight_GeSHi/i18n/uk.json
        index c9b3285b..29af87b8 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/uk.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/uk.json
        @@ -1,13 +1,21 @@
         {
         	"@metadata": {
         		"authors": [
        -			"Ahonc"
        +			"Ahonc",
        +			"Ðта",
        +			"AS",
        +			"Dars"
         		]
         	},
        -	"syntaxhighlight-desc": "ДозволÑÑ” викориÑтовувати тег <syntaxhighlight> Ð´Ð»Ñ Ð¿Ñ–Ð´ÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ ÑинтакÑиÑу за допомогою [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Ви повинні зазначити мову наÑтупним чином:",
        -	"syntaxhighlight-supported": "Підтримувані мови:",
        -	"syntaxhighlight-err-loading": "(неможливо завантажити ÑпиÑок мов)",
        -	"syntaxhighlight-err-language": "Зазначена непідтримувана мова.",
        -	"geshi.css": "/* CSS-код, розміщений тут, буде заÑтоÑований Ð´Ð»Ñ Ð¿Ñ–Ð´ÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ ÑинтакÑиÑу GeSHI */"
        +	"syntaxhighlight-desc": "Забезпечує підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ ÑинтакÑиÑу <syntaxhighlight> за допомогою [http://pygments.org/ Pygments] Ð´Ð»Ñ ÑинтакÑиÑу Python",
        +	"syntaxhighlight-error-category": "Сторінки, Ñкі міÑÑ‚ÑÑ‚ÑŒ помилки підÑвітки ÑинтакÑиÑу",
        +	"syntaxhighlight-error-category-desc": "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при Ñпробі підÑÐ²Ñ–Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð´Ñƒ на Ñторінці.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Код",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Мова",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Ðемає)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Показати номери Ñ€Ñдків",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Блок коду",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ‚Ð¸ Pygments",
        +	"syntaxhighlight-error-unknown-language": "Ðевідома мова «$1»",
        +	"syntaxhighlight-error-exceeds-size-limit": "Код розміром $1 {{PLURAL:$1|байт|байти|байтів}} перевищує дозволений макÑимум $2 {{PLURAL:$2|байт|байти|байтів}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ur.json b/extensions/SyntaxHighlight_GeSHi/i18n/ur.json
        deleted file mode 100644
        index 16a9e9f7..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/ur.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"පසිඳු කà·à·€à·’න්ද"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "باطل زبان ÛÛ’."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/vec.json b/extensions/SyntaxHighlight_GeSHi/i18n/vec.json
        index f1a70280..eac10d90 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/vec.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/vec.json
        @@ -4,10 +4,5 @@
         			"Candalua"
         		]
         	},
        -	"syntaxhighlight-desc": "Evidensia la sintassi dei linguagi de programazion <syntaxhighlight> tramite [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Te ghè da specificar un linguagio in sta maniera:",
        -	"syntaxhighlight-supported": "Linguagi de cui se pol evidensiar la sintassi coi colori:",
        -	"syntaxhighlight-err-loading": "(eror nel caricamento de l'elenco dei linguagi suportà)",
        -	"syntaxhighlight-err-language": "Linguagio mìa riconossiùo.",
        -	"geshi.css": "/* I stili CSS inserìi qua i se àplica a l'evidenziazion de sintassi con GeSHi */"
        +	"syntaxhighlight-desc": "Evidensia la sintassi dei linguagi de programazion <syntaxhighlight> tramite [http://pygments.org/ Pygments]"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/vep.json b/extensions/SyntaxHighlight_GeSHi/i18n/vep.json
        deleted file mode 100644
        index b9891f49..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/vep.json
        +++ /dev/null
        @@ -1,8 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Игорь БродÑкий"
        -		]
        -	},
        -	"syntaxhighlight-err-language": "Vär kel'"
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/vi.json b/extensions/SyntaxHighlight_GeSHi/i18n/vi.json
        index 17e64cb7..1fa08a90 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/vi.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/vi.json
        @@ -4,10 +4,15 @@
         			"Minh Nguyen"
         		]
         	},
        -	"syntaxhighlight-desc": "Tô màu cú pháp trong thẻ <syntaxhighlight> dùng [http://qbnz.com/highlighter/ GeSHi Highlighter]",
        -	"syntaxhighlight-specify": "Bạn cần phải định rõ một ngôn ngữ như vầy:",
        -	"syntaxhighlight-supported": "Các ngôn ngữ được tô màu cú pháp:",
        -	"syntaxhighlight-err-loading": "(gặp lỗi khi nạp danh sách các ngôn ngữ được hỗ trợ)",
        -	"syntaxhighlight-err-language": "Ngôn ngữ không hợp lệ.",
        -	"geshi.css": "/* Bộ tô màu cú pháp GeSHi sẽ áp dụng mã CSS ở đây */"
        +	"syntaxhighlight-desc": "Tô màu cú pháp trong thẻ <syntaxhighlight> dùng [http://pygments.org/ Pygments – trình tô màu cú pháp Python]",
        +	"syntaxhighlight-error-category": "Trang có lỗi tô màu cú pháp",
        +	"syntaxhighlight-error-category-desc": "Äã xuất hiện lá»—i khi tô màu Ä‘oạn mã trong trang.",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "Äoạn mã",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "Ngôn ngữ",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(Không có)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "Äánh số dòng",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "Äoạn mã",
        +	"syntaxhighlight-error-pygments-invocation-failure": "Thất bại khi gá»i Pygments",
        +	"syntaxhighlight-error-unknown-language": "Ngôn ngữ không rõ “$1â€",
        +	"syntaxhighlight-error-exceeds-size-limit": "Äoạn mã có $1 byte, vượt quá tối Ä‘a $2 byte"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/vo.json b/extensions/SyntaxHighlight_GeSHi/i18n/vo.json
        deleted file mode 100644
        index e6d3b37b..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/vo.json
        +++ /dev/null
        @@ -1,12 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"Malafaya",
        -			"Smeira"
        -		]
        -	},
        -	"syntaxhighlight-specify": "Nedol välön püki ön mod soik:",
        -	"syntaxhighlight-supported": "Püks lonöföl pro süntag pekölöl:",
        -	"syntaxhighlight-err-loading": "(pöl pö lodam lised pükas lonöföl)",
        -	"syntaxhighlight-err-language": "Pük no dabinöl."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/yi.json b/extensions/SyntaxHighlight_GeSHi/i18n/yi.json
        deleted file mode 100644
        index 79f5ea06..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/yi.json
        +++ /dev/null
        @@ -1,10 +0,0 @@
        -{
        -	"@metadata": {
        -		"authors": [
        -			"פוילישער"
        -		]
        -	},
        -	"syntaxhighlight-specify": "×יר ד×רפֿט ספעציפֿירן × ×©×¤×¨×ַך ×זוי:",
        -	"syntaxhighlight-supported": " געשטיצטע שפר×כן:",
        -	"syntaxhighlight-err-language": "×ומגילטיקע שפר×ַך."
        -}
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/yue.json b/extensions/SyntaxHighlight_GeSHi/i18n/yue.json
        index 7c96a990..9fdb42d2 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/yue.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/yue.json
        @@ -4,10 +4,5 @@
         			"Shinjiman"
         		]
         	},
        -	"syntaxhighlight-desc": "用[http://qbnz.com/highlighter/ GeSHi Highlighter]以<syntaxhighlight>æ供醒目æ示",
        -	"syntaxhighlight-specify": "你需è¦æŒ‡å®šä¸€ç¨®èªžè¨€ï¼Œå¥½ä¼¼å’:",
        -	"syntaxhighlight-supported": "語法醒目標示所支æ´å˜…語言:",
        -	"syntaxhighlight-err-loading": "(支æ´èªžè¨€æ¸…單載入錯誤)",
        -	"syntaxhighlight-err-language": "無效嘅語言。",
        -	"geshi.css": "/* 放響呢度嘅CSS會以GeSHi語法醒目æ示方å¼é¡¯ç¤º */"
        +	"syntaxhighlight-desc": "用[http://pygments.org/ Pygments]以<syntaxhighlight>æ供醒目æ示"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/zh-hans.json b/extensions/SyntaxHighlight_GeSHi/i18n/zh-hans.json
        index f430cf4e..61dcab3e 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/zh-hans.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/zh-hans.json
        @@ -1,13 +1,19 @@
         {
         	"@metadata": {
         		"authors": [
        -			"Shinjiman"
        +			"Shinjiman",
        +			"Liuxinyu970226"
         		]
         	},
        -	"syntaxhighlight-desc": "使用[http://qbnz.com/highlighter/ GeSHi Highlighter]以<syntaxhighlight>æ供高亮",
        -	"syntaxhighlight-specify": "您需è¦æŒ‡å®šä¸€ç§è¯­è¨€ï¼Œåƒè¿™æ ·:",
        -	"syntaxhighlight-supported": "语法高亮所支æŒçš„语言:",
        -	"syntaxhighlight-err-loading": "(支æŒè¯­è¨€åˆ—表载入错误)",
        -	"syntaxhighlight-err-language": "无效的语言。",
        -	"geshi.css": "/* 放在这里的CSS会以GeSHi语法高亮方å¼æ˜¾ç¤º */"
        +	"syntaxhighlight-desc": "使用[http://pygments.org/ Pygments - Python syntax highlighter]以æ供语法高亮<syntaxhighlight>",
        +	"syntaxhighlight-error-category": "有语法高亮错误的页é¢",
        +	"syntaxhighlight-error-category-desc": "å°è¯•é«˜äº®åŒ…å«åœ¨é¡µé¢ä¸­çš„代ç æ—¶å‡ºé”™ã€‚",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "代ç ",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "语言",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(无)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "显示行数",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "代ç å—",
        +	"syntaxhighlight-error-pygments-invocation-failure": "调用Pygments失败",
        +	"syntaxhighlight-error-unknown-language": "未知的语言“$1â€",
        +	"syntaxhighlight-error-exceeds-size-limit": "$1{{PLURAL:$1|字节}}代ç å¤§å°è¶…过了最大值$2{{PLURAL:$2|字节}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/zh-hant.json b/extensions/SyntaxHighlight_GeSHi/i18n/zh-hant.json
        index a4c40d94..8d7371a5 100644
        --- a/extensions/SyntaxHighlight_GeSHi/i18n/zh-hant.json
        +++ b/extensions/SyntaxHighlight_GeSHi/i18n/zh-hant.json
        @@ -3,13 +3,16 @@
         		"authors": [
         			"Mark85296341",
         			"Shinjiman",
        -			"Cwlin0416"
        +			"Cwlin0416",
        +			"Liuxinyu970226"
         		]
         	},
        -	"syntaxhighlight-desc": "使用 [http://qbnz.com/highlighter/ GeSHi Highlighter] æä¾›å¯å¼·èª¿èªžæ³•é¡¯ç¤ºçš„ <syntaxhighlight> 標籤。",
        -	"syntaxhighlight-specify": "您需è¦æŒ‡å®šä¸€ç¨®èªžè¨€ï¼Œå¦‚:",
        -	"syntaxhighlight-supported": "支æ´å¼·èª¿èªžæ³•é¡¯ç¤ºçš„語言:",
        -	"syntaxhighlight-err-loading": "(讀å–支æ´çš„語言清單錯誤)",
        -	"syntaxhighlight-err-language": "無效的語言。",
        -	"geshi.css": "/* 置於此處的 CSS 會套用至 GeSHi 的強調語法顯示 */"
        +	"syntaxhighlight-desc": "使用 [http://pygments.org/ Pygments - Python syntax highlighter] æä¾›å¯å¼·èª¿èªžæ³•é¡¯ç¤ºçš„ <syntaxhighlight> 標籤。",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code": "程å¼ç¢¼",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language": "語言",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none": "(ç„¡)",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines": "顯示行號",
        +	"syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title": "程å¼ç¢¼å€å¡Š",
        +	"syntaxhighlight-error-unknown-language": "ä¸æ˜Žèªžè¨€ \"$1\"",
        +	"syntaxhighlight-error-exceeds-size-limit": "程å¼ç¢¼å¤§å° $1 {{PLURAL:$1|ä½å…ƒçµ„}} 已超出å…許的上é™å€¼ $2 {{PLURAL:$2|ä½å…ƒçµ„}}"
         }
        diff --git a/extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php b/extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php
        new file mode 100644
        index 00000000..a3c0c817
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php
        @@ -0,0 +1,54 @@
        +
        + * @ingroup Maintenance
        + */
        +
        +use KzykHys\Pygments\Pygments;
        +
        +$IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..';
        +
        +require_once "$IP/maintenance/Maintenance.php";
        +
        +class UpdateCSS extends Maintenance {
        +
        +	public function __construct() {
        +		parent::__construct();
        +		$this->addDescription( 'Generate CSS code for SyntaxHighlight_GeSHi' );
        +	}
        +
        +	public function execute() {
        +		global $wgPygmentizePath;
        +
        +		$target = __DIR__ . '/../modules/pygments.generated.css';
        +		$pygments = new Pygments( $wgPygmentizePath );
        +		$css = "/* Stylesheet generated by updateCSS.php */\n";
        +		$css .= $pygments->getCss( 'default', '.' . SyntaxHighlight_GeSHi::HIGHLIGHT_CSS_CLASS );
        +		if ( file_put_contents( $target, $css ) === false ) {
        +			$this->output( "Failed to write to {$target}\n" );
        +		} else {
        +			$this->output( 'CSS written to ' . realpath( $target ) . "\n" );
        +		}
        +	}
        +}
        +
        +$maintClass = "UpdateCSS";
        +require_once RUN_MAINTENANCE_IF_MAIN;
        diff --git a/extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php b/extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php
        deleted file mode 100644
        index 6e9feb33..00000000
        --- a/extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php
        +++ /dev/null
        @@ -1,54 +0,0 @@
        -
        - * @ingroup Maintenance
        - */
        -
        -$IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..';
        -
        -require_once "$IP/maintenance/Maintenance.php";
        -require_once __DIR__ . "/../geshi/geshi.php";
        -
        -class UpdateLanguageList extends Maintenance {
        -	public function __construct() {
        -		parent::__construct();
        -		$this->addDescription( 'Update list of languages supported by SyntaxHighlight_GeSHi' );
        -	}
        -
        -	public function execute() {
        -		global $IP;
        -
        -		$geshi = new GeSHi;
        -		$header = '// Generated by ' . basename( __FILE__ ) . ' on ' . date( DATE_RFC2822 ) . "\n";
        -		$langs = array_values( array_filter( $geshi->get_supported_languages( false ), 'ctype_alnum' ) );
        -		sort( $langs );
        -		$replace = array( '[' => "array(\n\t", ']' => "\n);\n", '",' => "\",\n\t" );
        -		$code = "output( "Updated language list written to SyntaxHighlight_GeSHi.langs.php\n" );
        -	}
        -}
        -
        -$maintClass = "UpdateLanguageList";
        -require_once( RUN_MAINTENANCE_IF_MAIN );
        diff --git a/extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php b/extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php
        new file mode 100644
        index 00000000..75beb9b5
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php
        @@ -0,0 +1,60 @@
        +
        + * @ingroup Maintenance
        + */
        +
        +use KzykHys\Pygments\Pygments;
        +
        +$IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..';
        +
        +require_once "$IP/maintenance/Maintenance.php";
        +
        +class UpdateLanguageList extends Maintenance {
        +	public function __construct() {
        +		parent::__construct();
        +		$this->addDescription( 'Update list of lexers supported by SyntaxHighlight_GeSHi' );
        +	}
        +
        +	public function execute() {
        +		global $wgPygmentizePath;
        +
        +		function lang_filter( $val ) {
        +			return preg_match( '/^[a-zA-Z0-9\-_]+$/', $val );
        +		}
        +
        +		$header = '// Generated by ' . basename( __FILE__ ) . "\n\n";
        +
        +		$pygments = new Pygments( $wgPygmentizePath );
        +		$lexers = array_keys( $pygments->getLexers() );
        +		sort( $lexers );
        +
        +		$code = "| (?=\())/i', '', $code );
        +		$code = preg_replace( "/^ +/m", "\t", $code );
        +
        +		file_put_contents( __DIR__ . '/../SyntaxHighlight_GeSHi.lexers.php', $code );
        +		$this->output( "Updated language list written to SyntaxHighlight_GeSHi.lexers.php\n" );
        +	}
        +}
        +
        +$maintClass = "UpdateLanguageList";
        +require_once ( RUN_MAINTENANCE_IF_MAIN );
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/pygments.generated.css b/extensions/SyntaxHighlight_GeSHi/modules/pygments.generated.css
        new file mode 100644
        index 00000000..12b23df2
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/pygments.generated.css
        @@ -0,0 +1,64 @@
        +/* Stylesheet generated by updateCSS.php */
        +.mw-highlight .hll { background-color: #ffffcc }
        +.mw-highlight  { background: #f8f8f8; }
        +.mw-highlight .c { color: #408080; font-style: italic } /* Comment */
        +.mw-highlight .err { border: 1px solid #FF0000 } /* Error */
        +.mw-highlight .k { color: #008000; font-weight: bold } /* Keyword */
        +.mw-highlight .o { color: #666666 } /* Operator */
        +.mw-highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
        +.mw-highlight .cp { color: #BC7A00 } /* Comment.Preproc */
        +.mw-highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
        +.mw-highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
        +.mw-highlight .gd { color: #A00000 } /* Generic.Deleted */
        +.mw-highlight .ge { font-style: italic } /* Generic.Emph */
        +.mw-highlight .gr { color: #FF0000 } /* Generic.Error */
        +.mw-highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
        +.mw-highlight .gi { color: #00A000 } /* Generic.Inserted */
        +.mw-highlight .go { color: #888888 } /* Generic.Output */
        +.mw-highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
        +.mw-highlight .gs { font-weight: bold } /* Generic.Strong */
        +.mw-highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
        +.mw-highlight .gt { color: #0044DD } /* Generic.Traceback */
        +.mw-highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
        +.mw-highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
        +.mw-highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
        +.mw-highlight .kp { color: #008000 } /* Keyword.Pseudo */
        +.mw-highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
        +.mw-highlight .kt { color: #B00040 } /* Keyword.Type */
        +.mw-highlight .m { color: #666666 } /* Literal.Number */
        +.mw-highlight .s { color: #BA2121 } /* Literal.String */
        +.mw-highlight .na { color: #7D9029 } /* Name.Attribute */
        +.mw-highlight .nb { color: #008000 } /* Name.Builtin */
        +.mw-highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
        +.mw-highlight .no { color: #880000 } /* Name.Constant */
        +.mw-highlight .nd { color: #AA22FF } /* Name.Decorator */
        +.mw-highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
        +.mw-highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
        +.mw-highlight .nf { color: #0000FF } /* Name.Function */
        +.mw-highlight .nl { color: #A0A000 } /* Name.Label */
        +.mw-highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
        +.mw-highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
        +.mw-highlight .nv { color: #19177C } /* Name.Variable */
        +.mw-highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
        +.mw-highlight .w { color: #bbbbbb } /* Text.Whitespace */
        +.mw-highlight .mb { color: #666666 } /* Literal.Number.Bin */
        +.mw-highlight .mf { color: #666666 } /* Literal.Number.Float */
        +.mw-highlight .mh { color: #666666 } /* Literal.Number.Hex */
        +.mw-highlight .mi { color: #666666 } /* Literal.Number.Integer */
        +.mw-highlight .mo { color: #666666 } /* Literal.Number.Oct */
        +.mw-highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
        +.mw-highlight .sc { color: #BA2121 } /* Literal.String.Char */
        +.mw-highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
        +.mw-highlight .s2 { color: #BA2121 } /* Literal.String.Double */
        +.mw-highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
        +.mw-highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
        +.mw-highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
        +.mw-highlight .sx { color: #008000 } /* Literal.String.Other */
        +.mw-highlight .sr { color: #BB6688 } /* Literal.String.Regex */
        +.mw-highlight .s1 { color: #BA2121 } /* Literal.String.Single */
        +.mw-highlight .ss { color: #19177C } /* Literal.String.Symbol */
        +.mw-highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
        +.mw-highlight .vc { color: #19177C } /* Name.Variable.Class */
        +.mw-highlight .vg { color: #19177C } /* Name.Variable.Global */
        +.mw-highlight .vi { color: #19177C } /* Name.Variable.Instance */
        +.mw-highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/pygments.wrapper.css b/extensions/SyntaxHighlight_GeSHi/modules/pygments.wrapper.css
        new file mode 100644
        index 00000000..cb30b186
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/pygments.wrapper.css
        @@ -0,0 +1,42 @@
        +.mw-highlight {
        +	/* All supported programming languages are written left-to-right */
        +	/* @noflip */
        +	direction: ltr;
        +	unicode-bidi: embed;
        +}
        +
        +/* Avoid displaying double borders for nested 'code' elements.
        +   Before we started using the 'code' tag for inline code snippets,
        +   ...
        +   was a common pattern. Continue supporting it in existing content. */
        +code code.mw-highlight {
        +	background-color: transparent;
        +	border: 0;
        +	padding: 0;
        +}
        +
        +/*
        + * Don't show a red border around syntax errors. This behavior may be useful
        + * in code editors, but it is not useful in a wiki environment, especially
        + * given the longstanding habit of using an existing, mostly-compatible lexer
        + * to highlight a language for which no lexer exists.
        + */
        +.mw-highlight .err {
        +	border: 0;
        +}
        +
        +/* Highlight background of whole lines, not just text in them */
        +.mw-highlight .hll {
        +	display: block;
        +}
        +
        +/* To interact better with the 'display: block' above, doesn't affect other uses */
        +/* @noflip */
        +.mw-highlight.mw-content-ltr .lineno {
        +	float: left;
        +}
        +
        +/* @noflip */
        +.mw-highlight.mw-content-rtl .lineno {
        +	float: right;
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.css b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.css
        new file mode 100644
        index 00000000..2c5bb4a8
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.css
        @@ -0,0 +1,11 @@
        +/*!
        + * VisualEditor ContentEditable MWSyntaxHighlightNode styles.
        + *
        + * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
        + * @license The MIT License (MIT); see LICENSE.txt
        + */
        +
        + .ve-ce-mwSyntaxHighlightNode pre {
        +	/* Prevent silly wrapping on Safari and Chrome (https://bugs.webkit.org/show_bug.cgi?id=35935) */
        +	word-wrap: normal;
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.js b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.js
        new file mode 100644
        index 00000000..fb5a0be6
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ce.MWSyntaxHighlightNode.js
        @@ -0,0 +1,89 @@
        +/*!
        + * VisualEditor ContentEditable MWSyntaxHighlightNode class.
        + *
        + * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
        + * @license The MIT License (MIT); see LICENSE.txt
        + */
        +
        +/**
        + * ContentEditable MediaWiki syntax highlight node.
        + *
        + * @class
        + * @abstract
        + *
        + * @constructor
        + */
        +ve.ce.MWSyntaxHighlightNode = function VeCeMWSyntaxHighlightNode() {
        +};
        +
        +/* Inheritance */
        +
        +OO.initClass( ve.ce.MWSyntaxHighlightNode );
        +
        +/* Static Properties */
        +
        +ve.ce.MWSyntaxHighlightNode.static.name = 'mwSyntaxHighlight';
        +
        +ve.ce.MWSyntaxHighlightNode.static.primaryCommandName = 'syntaxhighlight';
        +
        +/* Methods */
        +
        +/** */
        +ve.ce.MWSyntaxHighlightNode.prototype.generateContents = function () {
        +	if ( !this.getModel().isLanguageSupported() ) {
        +		return $.Deferred().reject().promise();
        +	}
        +	// Parent method
        +	return ve.ce.MWExtensionNode.prototype.generateContents.apply( this, arguments );
        +};
        +
        +/** */
        +ve.ce.MWSyntaxHighlightNode.prototype.onSetup = function () {
        +	// Parent method
        +	ve.ce.MWExtensionNode.prototype.onSetup.call( this );
        +
        +	// DOM changes
        +	this.$element.addClass( 've-ce-mwSyntaxHighlightNode' );
        +};
        +
        +/** */
        +ve.ce.MWSyntaxHighlightNode.prototype.getBoundingRect = function () {
        +	// HACK: Because nodes can overflow due to the pre tag, just use the
        +	// first rect (of the wrapper div) for placing the context.
        +	return this.rects[ 0 ];
        +};
        +
        +/* Concrete subclasses */
        +
        +ve.ce.MWBlockSyntaxHighlightNode = function VeCeMWBlockSyntaxHighlightNode() {
        +	// Parent method
        +	ve.ce.MWBlockExtensionNode.super.apply( this, arguments );
        +
        +	// Mixin method
        +	ve.ce.MWSyntaxHighlightNode.call( this );
        +};
        +
        +OO.inheritClass( ve.ce.MWBlockSyntaxHighlightNode, ve.ce.MWBlockExtensionNode );
        +
        +OO.mixinClass( ve.ce.MWBlockSyntaxHighlightNode, ve.ce.MWSyntaxHighlightNode );
        +
        +ve.ce.MWBlockSyntaxHighlightNode.static.name = 'mwBlockSyntaxHighlight';
        +
        +ve.ce.MWInlineSyntaxHighlightNode = function VeCeMWInlineSyntaxHighlightNode() {
        +	// Parent method
        +	ve.ce.MWInlineExtensionNode.super.apply( this, arguments );
        +
        +	// Mixin method
        +	ve.ce.MWSyntaxHighlightNode.call( this );
        +};
        +
        +OO.inheritClass( ve.ce.MWInlineSyntaxHighlightNode, ve.ce.MWInlineExtensionNode );
        +
        +OO.mixinClass( ve.ce.MWInlineSyntaxHighlightNode, ve.ce.MWSyntaxHighlightNode );
        +
        +ve.ce.MWInlineSyntaxHighlightNode.static.name = 'mwInlineSyntaxHighlight';
        +
        +/* Registration */
        +
        +ve.ce.nodeFactory.register( ve.ce.MWBlockSyntaxHighlightNode );
        +ve.ce.nodeFactory.register( ve.ce.MWInlineSyntaxHighlightNode );
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.dm.MWSyntaxHighlightNode.js b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.dm.MWSyntaxHighlightNode.js
        new file mode 100644
        index 00000000..a3ea9597
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.dm.MWSyntaxHighlightNode.js
        @@ -0,0 +1,135 @@
        +/*!
        + * VisualEditor DataModel MWSyntaxHighlightNode class.
        + *
        + * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
        + * @license The MIT License (MIT); see LICENSE.txt
        + */
        +
        +/**
        + * DataModel MediaWiki syntax highlight node.
        + *
        + * @class
        + * @abstract
        + *
        + * @constructor
        + */
        +ve.dm.MWSyntaxHighlightNode = function VeDmMWSyntaxHighlightNode() {
        +};
        +
        +/* Inheritance */
        +
        +OO.initClass( ve.dm.MWSyntaxHighlightNode );
        +
        +/* Static members */
        +
        +ve.dm.MWSyntaxHighlightNode.static.name = 'mwSyntaxHighlight';
        +
        +ve.dm.MWSyntaxHighlightNode.static.extensionName = 'syntaxhighlight';
        +
        +ve.dm.MWSyntaxHighlightNode.static.getMatchRdfaTypes = function () {
        +	return [ 'mw:Extension/syntaxhighlight', 'mw:Extension/source' ];
        +};
        +
        +/* Static methods */
        +
        +/**
        + * @inheritdoc
        + */
        +ve.dm.MWSyntaxHighlightNode.static.toDataElement = function ( domElements, converter ) {
        +	// Parent method
        +	var dataElement = ve.dm.MWExtensionNode.static.toDataElement( domElements, converter ),
        +		isInline = this.isHybridInline( domElements, converter ),
        +		type = isInline ? 'mwInlineSyntaxHighlight' : 'mwBlockSyntaxHighlight';
        +
        +	dataElement.type = type;
        +
        +	return dataElement;
        +};
        +
        +( function () {
        +	var supportedLanguages = [ undefined ];
        +
        +	/**
        +	 * Register supported languages.
        +	 *
        +	 * @param {Array} languages
        +	 */
        +	ve.dm.MWSyntaxHighlightNode.static.addLanguages = function ( languages ) {
        +		ve.batchPush( supportedLanguages, languages );
        +	};
        +
        +	/**
        +	 * Check if a language is supported
        +	 *
        +	 * @param {string} language Language name
        +	 * @return {boolean} The language is supported
        +	 */
        +	ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported = function ( language ) {
        +		return supportedLanguages.indexOf( language || undefined ) !== -1;
        +	};
        +
        +	/**
        +	 * Get an array of all languages
        +	 *
        +	 * @return {Array} All currently supported languages
        +	 */
        +	ve.dm.MWSyntaxHighlightNode.static.getLanguages = function () {
        +		return supportedLanguages.slice();
        +	};
        +}() );
        +
        +/* Methods */
        +
        +/**
        + * Check if the node's current language is supported
        + *
        + * @return {boolean} The language is supported
        + */
        +ve.dm.MWSyntaxHighlightNode.prototype.isLanguageSupported = function () {
        +	return this.constructor.static.isLanguageSupported( this.getLanguage() );
        +};
        +
        +ve.dm.MWSyntaxHighlightNode.prototype.getLanguage = function () {
        +	return this.getAttribute( 'mw' ).attrs.lang;
        +};
        +
        +/* Concrete subclasses */
        +
        +ve.dm.MWBlockSyntaxHighlightNode = function VeDmMWBlockSyntaxHighlightNode() {
        +	// Parent method
        +	ve.dm.MWBlockExtensionNode.super.apply( this, arguments );
        +
        +	// Mixin method
        +	ve.dm.MWSyntaxHighlightNode.call( this );
        +};
        +
        +OO.inheritClass( ve.dm.MWBlockSyntaxHighlightNode, ve.dm.MWBlockExtensionNode );
        +
        +OO.mixinClass( ve.dm.MWBlockSyntaxHighlightNode, ve.dm.MWSyntaxHighlightNode );
        +
        +ve.dm.MWBlockSyntaxHighlightNode.static.name = 'mwBlockSyntaxHighlight';
        +
        +ve.dm.MWBlockSyntaxHighlightNode.static.tagName = 'div';
        +
        +ve.dm.MWInlineSyntaxHighlightNode = function VeDmMWInlineSyntaxHighlightNode() {
        +	// Parent method
        +	ve.dm.MWInlineExtensionNode.super.apply( this, arguments );
        +
        +	// Mixin method
        +	ve.dm.MWSyntaxHighlightNode.call( this );
        +};
        +
        +OO.inheritClass( ve.dm.MWInlineSyntaxHighlightNode, ve.dm.MWInlineExtensionNode );
        +
        +OO.mixinClass( ve.dm.MWInlineSyntaxHighlightNode, ve.dm.MWSyntaxHighlightNode );
        +
        +ve.dm.MWInlineSyntaxHighlightNode.static.name = 'mwInlineSyntaxHighlight';
        +
        +ve.dm.MWInlineSyntaxHighlightNode.static.tagName = 'code';
        +
        +ve.dm.MWInlineSyntaxHighlightNode.static.isContent = true;
        +
        +/* Registration */
        +
        +ve.dm.modelRegistry.register( ve.dm.MWBlockSyntaxHighlightNode );
        +ve.dm.modelRegistry.register( ve.dm.MWInlineSyntaxHighlightNode );
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.css b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.css
        new file mode 100644
        index 00000000..37644b95
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.css
        @@ -0,0 +1,10 @@
        +/*!
        + * VisualEditor UserInterface MWSyntaxHighlightInspector styles.
        + *
        + * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
        + * @license The MIT License (MIT); see LICENSE.txt
        + */
        +
        +.ve-ui-mwSyntaxHighlightInspector-content .ve-ui-mwExtensionInspector-input textarea {
        +	font-family: monospace, Courier;
        +}
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.js b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.js
        new file mode 100644
        index 00000000..257951af
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspector.js
        @@ -0,0 +1,163 @@
        +/*!
        + * VisualEditor UserInterface MWSyntaxHighlightInspector class.
        + *
        + * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
        + * @license The MIT License (MIT); see LICENSE.txt
        + */
        +
        +/**
        + * MediaWiki syntax highlight inspector.
        + *
        + * @class
        + * @extends ve.ui.MWLiveExtensionInspector
        + *
        + * @constructor
        + * @param {Object} [config] Configuration options
        + */
        +ve.ui.MWSyntaxHighlightInspector = function VeUiMWSyntaxHighlightInspector() {
        +	// Parent constructor
        +	ve.ui.MWSyntaxHighlightInspector.super.apply( this, arguments );
        +};
        +
        +/* Inheritance */
        +
        +OO.inheritClass( ve.ui.MWSyntaxHighlightInspector, ve.ui.MWLiveExtensionInspector );
        +
        +/* Static properties */
        +
        +ve.ui.MWSyntaxHighlightInspector.static.name = 'syntaxhighlight';
        +
        +ve.ui.MWSyntaxHighlightInspector.static.icon = 'alienextension';
        +
        +ve.ui.MWSyntaxHighlightInspector.static.size = 'large';
        +
        +ve.ui.MWSyntaxHighlightInspector.static.title = OO.ui.deferMsg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title' );
        +
        +ve.ui.MWSyntaxHighlightInspector.static.modelClasses = [ ve.dm.MWBlockSyntaxHighlightNode, ve.dm.MWInlineSyntaxHighlightNode ];
        +
        +ve.ui.MWSyntaxHighlightInspector.static.dir = 'ltr';
        +
        +/* Methods */
        +
        +/**
        + * @inheritdoc
        + */
        +ve.ui.MWSyntaxHighlightInspector.prototype.initialize = function () {
        +	var languageField, codeField, showLinesField,
        +		noneMsg = ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-none' );
        +	// Parent method
        +	ve.ui.MWSyntaxHighlightInspector.super.prototype.initialize.call( this );
        +
        +	this.language = new OO.ui.ComboBoxWidget( {
        +		menu: {
        +			filterFromInput: true,
        +			items: $.map( ve.dm.MWSyntaxHighlightNode.static.getLanguages(), function ( lang ) {
        +				return new OO.ui.MenuOptionWidget( { data: lang, label: lang || noneMsg } );
        +			} )
        +		},
        +		input: { validate: function ( input ) {
        +			return ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported( input );
        +		} }
        +	} );
        +	this.language.getInput().connect( this, { change: 'onLanguageInputChange' } );
        +
        +	this.showLinesCheckbox = new OO.ui.CheckboxInputWidget();
        +
        +	languageField = new OO.ui.FieldLayout( this.language, {
        +		align: 'top',
        +		label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-language' )
        +	} );
        +	codeField = new OO.ui.FieldLayout( this.input, {
        +		align: 'top',
        +		label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-code' )
        +	} );
        +	showLinesField = new OO.ui.FieldLayout( this.showLinesCheckbox, {
        +		align: 'inline',
        +		label: ve.msg( 'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-showlines' )
        +	} );
        +
        +	// Initialization
        +	this.$content.addClass( 've-ui-mwSyntaxHighlightInspector-content' );
        +	this.form.$element.prepend(
        +		languageField.$element,
        +		codeField.$element,
        +		showLinesField.$element
        +	);
        +};
        +
        +/**
        + * Handle input change events
        + *
        + * @param {string} value New value
        + */
        +ve.ui.MWSyntaxHighlightInspector.prototype.onLanguageInputChange = function () {
        +	var inspector = this;
        +	this.language.getInput().isValid().done( function ( valid ) {
        +		inspector.getActions().setAbilities( { done: valid } );
        +	} );
        +};
        +
        +/**
        + * @inheritdoc
        + */
        +ve.ui.MWSyntaxHighlightInspector.prototype.getReadyProcess = function ( data ) {
        +	return ve.ui.MWSyntaxHighlightInspector.super.prototype.getReadyProcess.call( this, data )
        +		.next( function () {
        +			if ( this.language.input.getValue() ) {
        +				this.input.focus();
        +			} else {
        +				this.language.getMenu().toggle( true );
        +			}
        +		}, this );
        +};
        +
        +/**
        + * @inheritdoc
        + */
        +ve.ui.MWSyntaxHighlightInspector.prototype.getSetupProcess = function ( data ) {
        +	return ve.ui.MWSyntaxHighlightInspector.super.prototype.getSetupProcess.call( this, data )
        +		.next( function () {
        +			var attrs = this.selectedNode.getAttribute( 'mw' ).attrs,
        +				language = attrs.lang || '',
        +				showLines = attrs.line !== undefined;
        +
        +			if ( ve.dm.MWSyntaxHighlightNode.static.isLanguageSupported( language ) ) {
        +				this.language.input.setValue( language );
        +			}
        +			this.language.input.on( 'change', this.onChangeHandler );
        +
        +			this.showLinesCheckbox.setSelected( showLines );
        +			this.showLinesCheckbox.on( 'change', this.onChangeHandler );
        +		}, this );
        +};
        +
        +/**
        + * @inheritdoc
        + */
        +ve.ui.MWSyntaxHighlightInspector.prototype.getTeardownProcess = function ( data ) {
        +	return ve.ui.MWSyntaxHighlightInspector.super.prototype.getTeardownProcess.call( this, data )
        +		.first( function () {
        +			this.language.input.off( 'change', this.onChangeHandler );
        +			this.showLinesCheckbox.off( 'change', this.onChangeHandler );
        +		}, this );
        +};
        +
        +/**
        + * @inheritdoc
        + */
        +ve.ui.MWSyntaxHighlightInspector.prototype.updateMwData = function ( mwData ) {
        +	var language, showLines;
        +
        +	// Parent method
        +	ve.ui.MWSyntaxHighlightInspector.super.prototype.updateMwData.call( this, mwData );
        +
        +	language = this.language.input.getValue();
        +	showLines = this.showLinesCheckbox.isSelected();
        +
        +	mwData.attrs.lang = language || undefined;
        +	mwData.attrs.line = showLines ? '1' : undefined;
        +};
        +
        +/* Registration */
        +
        +ve.ui.windowFactory.register( ve.ui.MWSyntaxHighlightInspector );
        diff --git a/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspectorTool.js b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspectorTool.js
        new file mode 100644
        index 00000000..1192976b
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/modules/ve-syntaxhighlight/ve.ui.MWSyntaxHighlightInspectorTool.js
        @@ -0,0 +1,37 @@
        +/*!
        + * VisualEditor UserInterface MWSyntaxHighlightInspectorTool class.
        + *
        + * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
        + * @license The MIT License (MIT); see LICENSE.txt
        + */
        +
        +/*global ve, OO */
        +
        +/**
        + * MediaWiki UserInterface syntax highlight tool.
        + *
        + * @class
        + * @extends ve.ui.InspectorTool
        + * @constructor
        + * @param {OO.ui.ToolGroup} toolGroup
        + * @param {Object} [config] Configuration options
        + */
        +ve.ui.MWSyntaxHighlightInspectorTool = function VeUiMWSyntaxHighlightInspectorTool( toolGroup, config ) {
        +	ve.ui.InspectorTool.call( this, toolGroup, config );
        +};
        +OO.inheritClass( ve.ui.MWSyntaxHighlightInspectorTool, ve.ui.InspectorTool );
        +ve.ui.MWSyntaxHighlightInspectorTool.static.name = 'syntaxhighlight';
        +ve.ui.MWSyntaxHighlightInspectorTool.static.group = 'object';
        +ve.ui.MWSyntaxHighlightInspectorTool.static.icon = 'alienextension';
        +ve.ui.MWSyntaxHighlightInspectorTool.static.title = OO.ui.deferMsg(
        +	'syntaxhighlight-visualeditor-mwsyntaxhighlightinspector-title' );
        +ve.ui.MWSyntaxHighlightInspectorTool.static.modelClasses = [ ve.dm.MWBlockSyntaxHighlightNode, ve.dm.MWInlineSyntaxHighlightNode ];
        +ve.ui.MWSyntaxHighlightInspectorTool.static.commandName = 'syntaxhighlight';
        +ve.ui.toolFactory.register( ve.ui.MWSyntaxHighlightInspectorTool );
        +
        +ve.ui.commandRegistry.register(
        +	new ve.ui.Command(
        +		'syntaxhighlight', 'window', 'open',
        +		{ args: [ 'syntaxhighlight' ], supportedSelections: [ 'linear' ] }
        +	)
        +);
        diff --git a/extensions/SyntaxHighlight_GeSHi/phpcs.xml b/extensions/SyntaxHighlight_GeSHi/phpcs.xml
        new file mode 100644
        index 00000000..d81a2927
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/phpcs.xml
        @@ -0,0 +1,8 @@
        +
        +
        +	
        +	.
        +	
        +	
        +	vendor
        +
        diff --git a/extensions/SyntaxHighlight_GeSHi/pygments/PYGMENTS_LICENSE b/extensions/SyntaxHighlight_GeSHi/pygments/PYGMENTS_LICENSE
        new file mode 100644
        index 00000000..f24578fd
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/pygments/PYGMENTS_LICENSE
        @@ -0,0 +1,25 @@
        +Copyright (c) 2006-2015 by the respective authors (see AUTHORS file).
        +All rights reserved.
        +
        +Redistribution and use in source and binary forms, with or without
        +modification, are permitted provided that the following conditions are
        +met:
        +
        +* Redistributions of source code must retain the above copyright
        +  notice, this list of conditions and the following disclaimer.
        +
        +* Redistributions in binary form must reproduce the above copyright
        +  notice, this list of conditions and the following disclaimer in the
        +  documentation and/or other materials provided with the distribution.
        +
        +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
        +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
        +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
        +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
        +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
        +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
        +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
        +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        \ No newline at end of file
        diff --git a/extensions/SyntaxHighlight_GeSHi/pygments/create_pygmentize_bundle b/extensions/SyntaxHighlight_GeSHi/pygments/create_pygmentize_bundle
        new file mode 100644
        index 00000000..9f638b9c
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/pygments/create_pygmentize_bundle
        @@ -0,0 +1,68 @@
        +#!/usr/bin/env python
        +# -*- coding: utf-8 -*-
        +"""
        +  Create a standalone, executable 'pygmentize' bundle.
        +  Author: Ori Livneh
        +
        +"""
        +import sys
        +reload(sys)
        +sys.setdefaultencoding('utf-8')
        +
        +import hashlib
        +import io
        +import os
        +import stat
        +import textwrap
        +import urllib2
        +import xmlrpclib
        +import zipfile
        +
        +
        +PYGMENTIZE_LAUNCHER = textwrap.dedent(b'''\
        +  #!/usr/bin/env python
        +
        +  import sys
        +  import pygments.cmdline
        +  try:
        +      sys.exit(pygments.cmdline.main(sys.argv))
        +  except KeyboardInterrupt:
        +      sys.exit(1)
        +''')
        +
        +
        +print('Querying PyPI for the latest Pygments release...')
        +pypi = xmlrpclib.ServerProxy('https://pypi.python.org/pypi')
        +latest_version = pypi.package_releases('Pygments')[0]
        +for release in pypi.release_urls('Pygments', latest_version):
        +    if (release['packagetype'] == 'bdist_wheel' and
        +            release['python_version'].startswith('2')):
        +        url = release['url']
        +        md5_digest = release['md5_digest']
        +        break
        +    else:
        +        raise RuntimeError('No suitable package found.')
        +
        +print('Retreiving version %s (%s)...' % (latest_version, url))
        +req = urllib2.urlopen(url)
        +buf = io.BytesIO(req.read())
        +
        +print('Verifying...')
        +if hashlib.md5(buf.getvalue()).hexdigest() != md5_digest:
        +    raise RuntimeError('MD5 checksum mismatch.')
        +
        +print('Creating executable ZIP bundle...')
        +with zipfile.ZipFile(buf, 'a') as zf:
        +    zf.writestr('__main__.py', PYGMENTIZE_LAUNCHER)
        +
        +data = buf.getvalue()
        +script_dir = os.path.dirname(os.path.abspath(__file__))
        +file_path = os.path.join(script_dir, 'pygmentize')
        +with open(file_path, 'w') as f:
        +    f.write('#!/usr/bin/env python\n')
        +    f.write(data)
        +
        +file_st = os.stat(file_path)
        +os.chmod(file_path, file_st.st_mode | stat.S_IEXEC)
        +
        +print('Done. Wrote %s bytes to %s' % (len(data), file_path))
        diff --git a/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize b/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize
        new file mode 100644
        index 00000000..3cc23e45
        Binary files /dev/null and b/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize differ
        diff --git a/extensions/SyntaxHighlight_GeSHi/tests/parserTests.txt b/extensions/SyntaxHighlight_GeSHi/tests/parserTests.txt
        new file mode 100644
        index 00000000..c6aaa9a4
        --- /dev/null
        +++ b/extensions/SyntaxHighlight_GeSHi/tests/parserTests.txt
        @@ -0,0 +1,156 @@
        +!! hooks
        +source
        +!! endhooks
        +
        +!! test
        +Non-existent language
        +!!input
        +
        +foobar
        +
        +!! result
        +
        foobar
        + +!! end + +!! test +No language specified +!! wikitext + +foo + +!! html +
        foo
        + +!! end + +!! test +No language specified (no wellformed xml) +!! config +wgWellFormedXml=false +!! wikitext + +bar + +!! html +
        bar
        + +!! end + +!! test +XSS is escaped +!!input + + + + +%253cscript%253ealert(document.cookie)%253c/script%253e + +!! result +
        <script>alert("pwnd")</script>
        +<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
        +<IMG
        +SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;
        +&#39;&#88;&#83;&#83;&#39;&#41;
        +\";alert('XSS');//
        +</script><script>alert('XSS');</script>
        +%253cscript%253ealert(document.cookie)%253c/script%253e
        + +!! end + +!! test +XSS is escaped (inline) +!!input + + + + +%253cscript%253ealert(document.cookie)%253c/script%253e + +!! result +

        <script>alert("pwnd")</script> <IMG SRC=`javascript:alert("RSnake says, 'XSS'")`> <IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40; &#39;&#88;&#83;&#83;&#39;&#41; \";alert('XSS');// </script><script>alert('XSS');</script> %253cscript%253ealert(document.cookie)%253c/script%253e +

        +!! end + +!! test +Default behaviour (inner is pre) +!!input + +var a; + +!! result +
        var a;
        +
        + +!! end + +!! test +Multiline in lists +!!input +* a +b + +* foo a +b +!! html +
        • a
          +b
        +
        • foo
          a
          +b
        + +!! html+tidy +
          +
        • +
          +
          +a
          +b
          +
          +
        • +
        +
          +
        • foo +
          +
          +a
          +b
          +
          +
        • +
        +!! end + +!! test +Custom attributes +!!input +var a; +!! result +
        var a;
        +
        + +!! end + +!! test +Inline attribute (inline code) +!!input +Text var a;. +!! result +

        Text var a;. +

        +!! end + +!! test +Enclose none (inline code) +!!input +Text var a;. +!! result +

        Text var a;. +

        +!! end diff --git a/extensions/TitleBlacklist/Gruntfile.js b/extensions/TitleBlacklist/Gruntfile.js new file mode 100644 index 00000000..5a87e7b6 --- /dev/null +++ b/extensions/TitleBlacklist/Gruntfile.js @@ -0,0 +1,19 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/TitleBlacklist/TitleBlacklist.hooks.php b/extensions/TitleBlacklist/TitleBlacklist.hooks.php index 34be8eb7..3b455064 100644 --- a/extensions/TitleBlacklist/TitleBlacklist.hooks.php +++ b/extensions/TitleBlacklist/TitleBlacklist.hooks.php @@ -48,27 +48,29 @@ class TitleBlacklistHooks { /** * Display a notice if a user is only able to create or edit a page - * because they have tboverride (or autoconfirmed). + * because they have tboverride. * * @param Title $title * @param integer $oldid * @param array &$notices */ public static function displayBlacklistOverrideNotice( Title $title, $oldid, array &$notices ) { + if ( !RequestContext::getMain()->getUser()->isAllowed( 'tboverride' ) ) { + return true; + } + $blacklisted = TitleBlacklist::singleton()->isBlacklisted( $title, $title->exists() ? 'edit' : 'create' ); - if ( $blacklisted ) { - $params = $blacklisted->getParams(); - $msg = wfMessage( - isset( $params['autoconfirmed'] ) ? - 'titleblacklist-autoconfirmed-warning' : - 'titleblacklist-warning' - ); - $notices['titleblacklist'] = $msg->rawParams( - htmlspecialchars( $blacklisted->getRaw() ) )->parseAsBlock(); + if ( !$blacklisted ) { + return true; } + + $params = $blacklisted->getParams(); + $msg = wfMessage( 'titleblacklist-warning' ); + $notices['titleblacklist'] = $msg->rawParams( + htmlspecialchars( $blacklisted->getRaw() ) )->parseAsBlock(); return true; } @@ -104,41 +106,16 @@ class TitleBlacklistHooks { return true; } - /** - * AbortMove hook (<1.24) - * - * @todo: Remove once 1.24 support is dropped - * - * @param $old Title - * @param $nt Title - * @param $user User - * @param $err - * @return bool - */ - public static function abortMove( $old, $nt, $user, &$err, $reason ) { - if ( method_exists( 'MovePage', 'checkPermissions' ) ) { - // Don't use this hook, use MovePageCheckPermissions instead - return true; - } - - $status = new Status(); - self::onMovePageCheckPermissions( $old, $nt, $user, $reason, $status ); - if ( !$status->isOK() ) { - $err = $status->getHTML(); - } - - return $status->isOK(); - } - /** * Check whether a user name is acceptable, * and set a message if unacceptable. * - * Used by abortNewAccount and centralAuthAutoCreate + * Used by abortNewAccount and centralAuthAutoCreate. + * May also be called externally to vet alternate account names. * * @return bool Acceptable */ - private static function acceptNewUserName( $userName, $permissionsUser, &$err, $override = true, $log = false ) { + public static function acceptNewUserName( $userName, $permissionsUser, &$err, $override = true, $log = false ) { global $wgUser; $title = Title::makeTitleSafe( NS_USER, $userName ); $blacklisted = TitleBlacklist::singleton()->userCannot( $title, $permissionsUser, @@ -162,6 +139,8 @@ class TitleBlacklistHooks { * AbortNewAccount hook * * @param User $user + * @param string &$message + * @return bool */ public static function abortNewAccount( $user, &$message ) { global $wgUser, $wgRequest; @@ -169,6 +148,21 @@ class TitleBlacklistHooks { return self::acceptNewUserName( $user->getName(), $wgUser, $message, $override, true ); } + /** + * AbortAutoAccount hook + * + * @param User $user + * @param string &$message + * @return bool + */ + public static function abortAutoAccount( $user, &$message ) { + global $wgTitleBlacklistBlockAutoAccountCreation; + if ( $wgTitleBlacklistBlockAutoAccountCreation ) { + return self::abortNewAccount( $user, $message ); + } + return true; + } + /** * EditFilter hook * diff --git a/extensions/TitleBlacklist/TitleBlacklist.list.php b/extensions/TitleBlacklist/TitleBlacklist.list.php index a9578a59..489e87ab 100644 --- a/extensions/TitleBlacklist/TitleBlacklist.list.php +++ b/extensions/TitleBlacklist/TitleBlacklist.list.php @@ -37,9 +37,11 @@ class TitleBlacklist { * Load all configured blacklist sources */ public function load() { - global $wgTitleBlacklistSources, $wgMemc, $wgTitleBlacklistCaching; + global $wgTitleBlacklistSources, $wgTitleBlacklistCaching; + + $cache = ObjectCache::getMainWANInstance(); // Try to find something in the cache - $cachedBlacklist = $wgMemc->get( wfMemcKey( "title_blacklist_entries" ) ); + $cachedBlacklist = $cache->get( wfMemcKey( "title_blacklist_entries" ) ); if ( is_array( $cachedBlacklist ) && count( $cachedBlacklist ) > 0 && ( $cachedBlacklist[0]->getFormatVersion() == self::VERSION ) ) { $this->mBlacklist = $cachedBlacklist; return; @@ -51,7 +53,7 @@ class TitleBlacklist { foreach( $sources as $sourceName => $source ) { $this->mBlacklist = array_merge( $this->mBlacklist, $this->parseBlacklist( $this->getBlacklistText( $source ), $sourceName ) ); } - $wgMemc->set( wfMemcKey( "title_blacklist_entries" ), $this->mBlacklist, $wgTitleBlacklistCaching['expiry'] ); + $cache->set( wfMemcKey( "title_blacklist_entries" ), $this->mBlacklist, $wgTitleBlacklistCaching['expiry'] ); wfDebugLog( 'TitleBlacklist-cache', 'Updated ' . wfMemcKey( "title_blacklist_entries" ) . ' with ' . count( $this->mBlacklist ) . ' entries.' ); } @@ -60,15 +62,17 @@ class TitleBlacklist { * Load local whitelist */ public function loadWhitelist() { - global $wgMemc, $wgTitleBlacklistCaching; - $cachedWhitelist = $wgMemc->get( wfMemcKey( "title_whitelist_entries" ) ); + global $wgTitleBlacklistCaching; + + $cache = ObjectCache::getMainWANInstance(); + $cachedWhitelist = $cache->get( wfMemcKey( "title_whitelist_entries" ) ); if ( is_array( $cachedWhitelist ) && count( $cachedWhitelist ) > 0 && ( $cachedWhitelist[0]->getFormatVersion() != self::VERSION ) ) { $this->mWhitelist = $cachedWhitelist; return; } $this->mWhitelist = $this->parseBlacklist( wfMessage( 'titlewhitelist' ) ->inContentLanguage()->text(), 'whitelist' ); - $wgMemc->set( wfMemcKey( "title_whitelist_entries" ), $this->mWhitelist, $wgTitleBlacklistCaching['expiry'] ); + $cache->set( wfMemcKey( "title_whitelist_entries" ), $this->mWhitelist, $wgTitleBlacklistCaching['expiry'] ); } /** @@ -136,7 +140,7 @@ class TitleBlacklist { } /** - * Check whether the blacklist restricts giver nuser + * Check whether the blacklist restricts given user * performing a specific action on the given Title * * @param $title Title to check @@ -147,16 +151,18 @@ class TitleBlacklist { * blacklisted; otherwise false */ public function userCannot( $title, $user, $action = 'edit', $override = true ) { + $entry = $this->isBlacklisted( $title, $action ); + if ( !$entry ) { + return false; + } + $params = $entry->getParams(); + if ( isset( $params['autoconfirmed'] ) && $user->isAllowed( 'autoconfirmed' ) ) { + return false; + } if ( $override && self::userCanOverride( $user, $action ) ) { return false; - } else { - $entry = $this->isBlacklisted( $title, $action ); - if ( !$entry ) { - return false; - } - $params = $entry->getParams(); - return isset( $params['autoconfirmed'] ) && $user->isAllowed( 'autoconfirmed' ) ? false : $entry; } + return $entry; } /** @@ -220,7 +226,7 @@ class TitleBlacklist { /** * Get the current blacklist * - * @return Array of TitleBlacklistEntry items + * @return TitleBlacklistEntry[] */ public function getBlacklist() { if ( is_null( $this->mBlacklist ) ) { @@ -265,8 +271,8 @@ class TitleBlacklist { * Invalidate the blacklist cache */ public function invalidate() { - global $wgMemc; - $wgMemc->delete( wfMemcKey( "title_blacklist_entries" ) ); + $cache = ObjectCache::getMainWANInstance(); + $cache->delete( wfMemcKey( "title_blacklist_entries" ) ); } /** diff --git a/extensions/TitleBlacklist/composer.json b/extensions/TitleBlacklist/composer.json new file mode 100644 index 00000000..fd380fb7 --- /dev/null +++ b/extensions/TitleBlacklist/composer.json @@ -0,0 +1,10 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9" + }, + "scripts": { + "test": [ + "parallel-lint . --exclude node_modules --exclude vendor" + ] + } +} diff --git a/extensions/TitleBlacklist/extension.json b/extensions/TitleBlacklist/extension.json index 2e64802d..154605fe 100644 --- a/extensions/TitleBlacklist/extension.json +++ b/extensions/TitleBlacklist/extension.json @@ -1,11 +1,11 @@ { - "name": "Title Blacklist", + "name": "TitleBlacklist", "version": "1.5.0", "author": [ "Victor Vasiliev", "Fran Rogers" ], - "url": "https://www.mediawiki.org/wiki/Extension:Title_Blacklist", + "url": "https://www.mediawiki.org/wiki/Extension:TitleBlacklist", "descriptionmsg": "titleblacklist-desc", "license-name": "GPL-2.0+", "type": "antispam", @@ -63,9 +63,6 @@ "TitleGetEditNotices": [ "TitleBlacklistHooks::displayBlacklistOverrideNotice" ], - "AbortMove": [ - "TitleBlacklistHooks::abortMove" - ], "MovePageCheckPermissions": [ "TitleBlacklistHooks::onMovePageCheckPermissions" ], @@ -73,7 +70,7 @@ "TitleBlacklistHooks::abortNewAccount" ], "AbortAutoAccount": [ - "TitleBlacklistHooks::abortNewAccount" + "TitleBlacklistHooks::abortAutoAccount" ], "EditFilter": [ "TitleBlacklistHooks::validateBlacklist" @@ -99,6 +96,8 @@ "warningchance": 100, "expiry": 900, "warningexpiry": 600 - } - } + }, + "TitleBlacklistBlockAutoAccountCreation": true + }, + "manifest_version": 1 } diff --git a/extensions/TitleBlacklist/i18n/ar.json b/extensions/TitleBlacklist/i18n/ar.json index e947d925..7aa9acfa 100644 --- a/extensions/TitleBlacklist/i18n/ar.json +++ b/extensions/TitleBlacklist/i18n/ar.json @@ -19,7 +19,6 @@ "titleblacklist-forbidden-new-account": "إنشاء اسم المستخدم \"$2\" ممنوع.\nهو يطابق مدخلة القائمة السوداء التالية: $1", "titleblacklist-invalid": "{{PLURAL:$1||السطر التالي|السطران التاليان|السطور التالية}} ÙÙŠ قائمة العناوين السوداء {{PLURAL:$1||غير صحيح|غير صحيحان|غير صحيحة}}Ø› من Ùضلك {{PLURAL:$1||صححه|صححهما|صححهم}} قبل الحÙظ:", "titleblacklist-override": "تجاهل القائمة السوداء", - "titleblacklist-autoconfirmed-warning": "ملاحظة: لا يمكن تحرير هذه الصÙحة إلا للمستخدمين المؤكدين تلقائياً لأنها تطابق مدخلة القائمة السوداء التالية:
        $1", "titleblacklist-warning": "ملاحظة: لا يمكن تحرير هذه الصÙحة إلا للإداريين والمستخدمين الآخرين الذين لديهم صلاحية tboverride لأنها تطابق مدخلة القائمة السوداء التالية:
        $1", "right-tboverride": "تجاوز قائمتي العناوين أو أسماء المستخدمين السوداوين", "right-tboverride-account": "تجاوز قائمة اسم المستخدم السوداء.", diff --git a/extensions/TitleBlacklist/i18n/ast.json b/extensions/TitleBlacklist/i18n/ast.json index 10e05e4b..e9ab3349 100644 --- a/extensions/TitleBlacklist/i18n/ast.json +++ b/extensions/TitleBlacklist/i18n/ast.json @@ -18,9 +18,14 @@ "titleblacklist-forbidden-new-account": "Torgóse la creación del nome d'usuariu \"$2\".\nConcueya cola siguiente entrada na llista prieta: $1", "titleblacklist-invalid": "{{PLURAL:$1|La siguiente llinia|Les siguientes llinies}} de la llista prieta de títulos {{PLURAL:$1|nun ye válida|nun son válides}};\npor favor {{PLURAL:$1|corríxila|corríxiles}} enantes de guardar:", "titleblacklist-override": "Inorar la llista prieta", - "titleblacklist-autoconfirmed-warning": "Nota: Esta páxina sólo puen editala usuarios col permisu autoconfirmáu porque casa cola siguiente entrada de la llista prieta de títulos:
        $1", "titleblacklist-warning": "Atención: Esta páxina sólo puen editala alministradores y otros usuarios col permisu tboverride porque casa cola siguiente entrada de la llista prieta de títulos:
        $1", "right-tboverride": "Sobrescribir la llista prieta de títulos o nomes d'usuariu", "right-tboverride-account": "Saltar la llista prieta d'usuarios", - "right-titleblacklistlog": "Ver el rexistru de llista prieta de títulos" + "right-titleblacklistlog": "Ver el rexistru de llista prieta de títulos", + "apihelp-titleblacklist-description": "Validar un títulu d'artículu, o nome de ficheru o d'usuariu escontra la llista prieta de títulos.", + "apihelp-titleblacklist-param-title": "La cadena a validar escontra la llista prieta.", + "apihelp-titleblacklist-param-action": "L'aición a comprobar.", + "apihelp-titleblacklist-param-nooverride": "Nun intentes saltate la llista prieta de títulos.", + "apihelp-titleblacklist-example-1": "Comprobar si [[Foo]] ta na llista prieta", + "apihelp-titleblacklist-example-2": "Comprobar si [[Bar]] ta na llista prieta pa la edición" } diff --git a/extensions/TitleBlacklist/i18n/be-tarask.json b/extensions/TitleBlacklist/i18n/be-tarask.json index 238c592d..472024cc 100644 --- a/extensions/TitleBlacklist/i18n/be-tarask.json +++ b/extensions/TitleBlacklist/i18n/be-tarask.json @@ -16,6 +16,7 @@ "titleblacklist-forbidden-new-account": "Ð†Ð¼Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÐ° «$2» было забаронена Ð´Ð»Ñ ÑтварÑньнÑ.\nЯно адпавÑдае наÑтупнаму ÑлемÑнту чорнага ÑьпіÑу: $1", "titleblacklist-invalid": "{{PLURAL:$1|1=ÐаÑтупны радок у|ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ñ€Ð°Ð´ÐºÑ– Ñž}} ÑьпіÑе забароненых назваў — {{PLURAL:$1|1=нÑÑлушны|нÑÑлушныÑ}};\nкалі лаÑка, выпраўце {{PLURAL:$1|1=Ñго|Ñ–Ñ…}} перад захаваньнем:", "titleblacklist-override": "Ігнараваць чорны ÑьпіÑ", - "right-tboverride": "Ігнараваньне чорнага ÑьпіÑу назваў Ñ– імёнаў удзельнікаў", - "right-tboverride-account": "ігнараваньне чорнага ÑьпіÑу ўдзельнікаў" + "right-tboverride": "ігнараваньне чорнага ÑьпіÑу назваў Ñ– імёнаў удзельнікаў", + "right-tboverride-account": "ігнараваньне чорнага ÑьпіÑу ўдзельнікаў", + "right-titleblacklistlog": "праглÑд журнала забароненых назваў" } diff --git a/extensions/TitleBlacklist/i18n/bn.json b/extensions/TitleBlacklist/i18n/bn.json index e69f0c05..30059343 100644 --- a/extensions/TitleBlacklist/i18n/bn.json +++ b/extensions/TitleBlacklist/i18n/bn.json @@ -5,7 +5,8 @@ "Bellayet", "Nasir8891", "Zaheen", - "Aftab1995" + "Aftab1995", + "Aftabuzzaman" ] }, "action-titleblacklistlog": "কালোতালিকা শিরোনাম লগ দেখà§à¦¨", diff --git a/extensions/TitleBlacklist/i18n/bs.json b/extensions/TitleBlacklist/i18n/bs.json index f7e186fe..b164e11d 100644 --- a/extensions/TitleBlacklist/i18n/bs.json +++ b/extensions/TitleBlacklist/i18n/bs.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "CERminator", - "KWiki" + "KWiki", + "Semso98" ] }, "titleblacklist-desc": "Omogućuje administratorima da zabrane pravljenje stranica i korisniÄkih raÄuna putem spiskova [[MediaWiki:Titleblacklist|zabranjenih]] i [[MediaWiki:Titlewhitelist|dopuÅ¡tenih]] naslova", @@ -12,8 +13,8 @@ "titleblacklist-forbidden-move": "\"$2\" ne može biti premjeÅ¡ten na \"$3\", jer je naslov \"$3\" zabranjen za pravljenje.\nNalazi se kao slijedeća stavka spiska nepoželjnih naslova: $1", "titleblacklist-forbidden-upload": "Datoteka s imenom \"$2\" zabranjena je za postavljanje.\nNalazi se kao stavka na spisku zabranjenih naslova: $1", "titleblacklist-forbidden-new-account": "KorisniÄko ime \"$2\" je zabranjeno za pravljenje.\nOno se nalazi na spisku zabranjenih naslova pod stavkom: $1", - "titleblacklist-invalid": "{{PLURAL:$1|Slijedeći red|Slijedeća $1 reda|Slijedećih $1 redova}} na spisku nepoželjnih naslova {{PLURAL:$1|je nevalidan|su nevalidna|je nevalidno}};\nmolimo da {{PLURAL:$1|ga|ih}} ispravite prije spremanja:", + "titleblacklist-invalid": "{{PLURAL:$1|Sljedeći red|Sljedeća $1 reda|Sljedećih $1 redova}} na spisku nepoželjnih naslova {{PLURAL:$1|je nevalidan|su nevalidna|je nevalidno}};\nmolimo da {{PLURAL:$1|ga|ih}} ispravite prije spaÅ¡avanja:", "titleblacklist-override": "Zanemari crnu listu", - "right-tboverride": "Zaobilaženje spiska zabranjenih naslova", + "right-tboverride": "Zaobilaženje spiska zabranjenih korisniÄkih imena", "right-tboverride-account": "Zaobilaženje spiska zabranjenih korisniÄkih imena" } diff --git a/extensions/TitleBlacklist/i18n/ce.json b/extensions/TitleBlacklist/i18n/ce.json index 5584b99a..09988cea 100644 --- a/extensions/TitleBlacklist/i18n/ce.json +++ b/extensions/TitleBlacklist/i18n/ce.json @@ -4,8 +4,11 @@ "Умар" ] }, - "titleblacklist-desc": "[[MediaWiki:Titleblacklist|Ӏаьржа]] а [[MediaWiki:Titlewhitelist|къайн]] а могӀанийн гӀоьнца куьйгалхошна таро хуьлуьйту декъашхойн дӀаÑздарш ца кхоллийта.", - "titleblacklist": "# ХӀара ца магийна цӀерийн могӀам бу, Царах тера цӀераш йолу агӀонаш а декъашхойн дӀаÑздарш а кхолла йиш Ñц\n# Коммент йита лелае «#».\n# Ӏад йитарца региÑтарна Ñкамалла Ñц.", + "action-titleblacklistlog": "магийна йоцу цӀерийн тептаре хьажар", + "log-name-titleblacklist": "Магийна йоцу цӀерийн тептар", + "log-description-titleblacklist": "Магийна йоцу цӀерш чохь йолу могӀам.", + "titleblacklist-desc": "[[MediaWiki:Titleblacklist|Ӏаьржа]] а, [[MediaWiki:Titlewhitelist|къайн]] а могӀанийн гӀоьнца куьйгалхошна таро хуьлуьйту декъашхойн дӀаÑздарш ца кхоллийта.", + "titleblacklist": "# ХӀара ца магийна цӀерийн могӀам бу, Царах тера цӀерш йолу агӀонаш а декъашхойн дӀаÑздарш а кхолла йиш Ñц\n# Коммент йита лелае «#».\n# Ӏад йитарца региÑтарна Ñкамалла Ñц.", "titlewhitelist": "# ХӀара цӀерийн «кӀайн могӀам» бу, Комменташна лелае «#».\n# Ӏад йитарца Ñимволийн региÑтарта Ñкамалла Ñц.", "titleblacklist-forbidden-edit": "
        \n'''\"$2\" цӀарца агӀо кхолла йиш Ñц'''
        \nИза могӀам чура хӀокху магийна йицу цӀерийн юкъа йогӀу: '''''$1'''''\n
        ", "titleblacklist-forbidden-move": "ÐгӀона «$2» цӀе → «$3» хуьйцийла Ñц, Ӏаьржа могӀам чохь керла цӀе ца магийна хилар бахьнехь дӀаÑздарца: $1", @@ -13,6 +16,7 @@ "titleblacklist-forbidden-new-account": "Декъашхочун «$2» цӀе лелаÑн ца магийна.\nИ цӀе Ӏаьржа могӀам чура дӀаÑздаршна юкъа йогӀу: $1", "titleblacklist-invalid": "Ца магийна цӀерийн могӀам чура хӀара {{PLURAL:$1|1=могӀам|могӀамаш}} {{PLURAL:$1|нийÑа дац}}. Дехар до Ӏалаш Ñле {{PLURAL:$1|1=и|уьш}} нийÑа де:", "titleblacklist-override": "Ӏаьржа могӀам тергал мабе", - "right-tboverride": "Ӏаьржачу могӀанийн чура агӀонийн цӀераш тергалцаÑÑ€ Ñ Ð´ÐµÐºÑŠÐ°ÑˆÑ…Ð¾Ð¹ тергалцабар", - "right-tboverride-account": "Ӏаьржачу могӀанийн чура декъашхойн цӀераш тергалцаÑÑ€" + "right-tboverride": "Ӏаьржачу могӀанийн чура агӀонийн цӀерш тергалцаÑÑ€ Ñ Ð´ÐµÐºÑŠÐ°ÑˆÑ…Ð¾Ð¹ тергалцабар", + "right-tboverride-account": "Ӏаьржачу могӀанийн чура декъашхойн цӀерш тергалцаÑÑ€", + "right-titleblacklistlog": "магийна йоцу цӀерийн тептаре хьажар" } diff --git a/extensions/TitleBlacklist/i18n/cs.json b/extensions/TitleBlacklist/i18n/cs.json index 5210543c..74e543dc 100644 --- a/extensions/TitleBlacklist/i18n/cs.json +++ b/extensions/TitleBlacklist/i18n/cs.json @@ -20,7 +20,6 @@ "titleblacklist-forbidden-new-account": "Není dovoleno zaregistrovat uživatelské jméno „$2“.\nOdpovídá následující položce Äerné listiny: $1", "titleblacklist-invalid": "Na Äerné listinÄ› názvů {{PLURAL:$1|je následující řádka neplatný regulární výraz|jsou následující řádky neplatné regulární výrazy|jsou následující řádky regulární výrazy}} a je nutné {{PLURAL:$1|ji|je|je}} pÅ™ed uložením stránky opravit :", "titleblacklist-override": "Ignorovat Äernou listinu", - "titleblacklist-autoconfirmed-warning": "Poznámka: Tuto stránku mohou editovat jen uživatelé s oprávnÄ›ním autoconfirmed, protože odpovídá následujícímu záznamu Äerné listiny názvů:
        $1", "titleblacklist-warning": "UpozornÄ›ní: Tuto stránku mohou editovat jen správci a další uživatelé s oprávnÄ›ním tboverride, protože odpovídá následujícímu záznamu Äerné listiny názvů:
        $1", "right-tboverride": "PÅ™ekonání zakázaných názvů stránek nebo uživatelských jmen", "right-tboverride-account": "PÅ™ekonání Äerné listiny uživatelských jmen", diff --git a/extensions/TitleBlacklist/i18n/de.json b/extensions/TitleBlacklist/i18n/de.json index fc1b2a20..2c830e4c 100644 --- a/extensions/TitleBlacklist/i18n/de.json +++ b/extensions/TitleBlacklist/i18n/de.json @@ -26,9 +26,11 @@ "titleblacklist-forbidden-new-account": "Die Registrierung des Benutzernamens „$2“ ist nicht erwünscht.\nFolgender Eintrag aus der Liste unerwünschter Benutzernamen führte zur Ablehnung: $1", "titleblacklist-invalid": "Die {{PLURAL:$1|folgende Zeile|folgenden Zeilen}} in der Sperrliste {{PLURAL:$1|ist|sind}} ungültig; bitte korrigiere diese vor dem Speichern:", "titleblacklist-override": "Blacklist ignorieren", - "titleblacklist-autoconfirmed-warning": "Hinweis: Diese Seite kann nur von Benutzern mit dem autoconfirmed-Recht bearbeitet werden, da sie mit dem folgenden Titel-Blacklist-Eintrag übereinstimmt:
        $1", "titleblacklist-warning": "Warnung: Diese Seite kann nur von Administratoren und anderen Benutzern mit dem tboverride-Recht bearbeitet werden, da sie mit dem folgenden Titel-Blacklist-Eintrag übereinstimmt:
        $1", "right-tboverride": "Die schwarze Liste unerwünschter Seiten- oder Benutzernamen außer Kraft setzen", "right-tboverride-account": "Die schwarze Liste unerwünschter Benutzernamen außer Kraft setzen", - "right-titleblacklistlog": "Das Titel-Blacklist-Logbuch ansehen" + "right-titleblacklistlog": "Das Titel-Blacklist-Logbuch ansehen", + "apihelp-titleblacklist-param-action": "Die zu überprüfende Aktion.", + "apihelp-titleblacklist-example-1": "Überprüft, ob [[Foo]] blackgelistet ist", + "apihelp-titleblacklist-example-2": "Überprüft, ob [[Bar]] für das Bearbeiten blackgelistet ist" } diff --git a/extensions/TitleBlacklist/i18n/en.json b/extensions/TitleBlacklist/i18n/en.json index a7efd2a6..ab52f452 100644 --- a/extensions/TitleBlacklist/i18n/en.json +++ b/extensions/TitleBlacklist/i18n/en.json @@ -15,7 +15,6 @@ "titleblacklist-forbidden-new-account": "The user name \"$2\" has been banned from creation.\nIt matches the following blacklist entry: $1", "titleblacklist-invalid": "The following {{PLURAL:$1|line|lines}} in the title blacklist {{PLURAL:$1|is|are}} invalid;\nplease correct {{PLURAL:$1|it|them}} before saving:", "titleblacklist-override": "Ignore the blacklist", - "titleblacklist-autoconfirmed-warning": "Note: This page can only be edited by users with the autoconfirmed right because it matches the following title blacklist entry:
        $1", "titleblacklist-warning": "Warning: This page can only be edited by administrators and other users with the tboverride right because it matches the following title blacklist entry:
        $1", "right-tboverride": "Override the title or username blacklist", "right-tboverride-account": "Override the username blacklist", diff --git a/extensions/TitleBlacklist/i18n/es.json b/extensions/TitleBlacklist/i18n/es.json index c5dea1b8..9177c910 100644 --- a/extensions/TitleBlacklist/i18n/es.json +++ b/extensions/TitleBlacklist/i18n/es.json @@ -6,21 +6,28 @@ "Locos epraix", "Remember the dot", "Sanbec", - "MarcoAurelio" + "MarcoAurelio", + "Macofe" ] }, "action-titleblacklistlog": "ver el registro de la lista negra de títulos", "log-name-titleblacklist": "Registro de la lista negra de títulos", "titleblacklist-desc": "Permite que los administradores prohíban la creación de páginas y cuentas de usuario mediante una [[MediaWiki:Titleblacklist|lista negra]] y una [[MediaWiki:Titlewhitelist|lista blanca]]", "titleblacklist": "# Esta es una lista negra de títulos. No se pueden crear títulos o usuarios que coincidan con una de estas expresiones regulares.\n# Use «#» para comentarios.\n# Esta es insensible a las mayúsculas por defecto", - "titlewhitelist": "# Esta es una lista blanca de títulos. Use «#» para comentarios.\n# Esta es insensible a las mayúsculas por defecto", + "titlewhitelist": "# Esta es una lista blanca de títulos. Usa «#» para comentarios.\n# Por omisión, no distingue mayúsculas de minúsculas", "titleblacklist-forbidden-edit": "Se ha bloqueado la creación del título «$2».\nCoincide con la siguiente entrada de lista negra: $1", "titleblacklist-forbidden-move": "«$2» no puede ser trasladado a «$3», porque se ha bloqueado la creación del título «$3».\nCoincide con la siguiente entrada de lista negra: $1", "titleblacklist-forbidden-upload": "Se ha bloqueado el nombre de archivo «$2».\nCoincide con la entrada de lista negra $1.", "titleblacklist-forbidden-new-account": "Se prohibe crear el nombre de usuario «$2».\nCoincide con la siguiente entrada de la lista negra: $1", "titleblacklist-invalid": "{{PLURAL:$1|La siguiente línea|Las siguientes líneas}} de la lista negra no {{PLURAL:$1|es válida|son válidas}};\npor favor corríge{{PLURAL:$1|la|las}} antes de grabar:", "titleblacklist-override": "Ignorar la lista negra", + "titleblacklist-warning": "Advertencia: solo los administradores y los usuarios con el permiso tboverride pueden editar esta página porque esta aparece en la siguiente entrada de la lista negra de títulos:
        $1", "right-tboverride": "Ignorar la lista negra de títulos o de nombres de usuario", "right-tboverride-account": "Ignorar la lista negra de los nombres de usuario", - "right-titleblacklistlog": "Ver el registro de la lista negra de títulos" + "right-titleblacklistlog": "Ver el registro de la lista negra de títulos", + "apihelp-titleblacklist-param-title": "La cadena que se validará contra la lista negra.", + "apihelp-titleblacklist-param-action": "La acción que verificar.", + "apihelp-titleblacklist-param-nooverride": "No intentar pisar la lista negra de títulos.", + "apihelp-titleblacklist-example-1": "Comprobar si [[Foo]] está en la lista negra", + "apihelp-titleblacklist-example-2": "Comprobar si [[Bar]] está en la lista negra de edición" } diff --git a/extensions/TitleBlacklist/i18n/et.json b/extensions/TitleBlacklist/i18n/et.json index cc4d8a83..a28752fc 100644 --- a/extensions/TitleBlacklist/i18n/et.json +++ b/extensions/TitleBlacklist/i18n/et.json @@ -17,9 +17,14 @@ "titleblacklist-forbidden-new-account": "Kasutajat nimega \"$2\" on keelatud luua.\nSee vastab järgmisele musta nimekirja sissekandele: $1", "titleblacklist-invalid": "{{PLURAL:$1|Järgmine|Järgmised}} musta nimekirja {{PLURAL:$1|rida on vigane|read on vigased}}.\nPalun paranda {{PLURAL:$1|see|need}} enne salvestamist:", "titleblacklist-override": "Eira musta nimekirja", - "titleblacklist-autoconfirmed-warning": "Märkus: Seda lehekülge saavad redigeerida ainult kasutajad õigusega autoconfirmed, sest see vastab pealkirjade musta nimekirja järgmisele sissekandele:
        $1", "titleblacklist-warning": "Märkus: Seda lehekülge saavad redigeerida ainult administraatorid ja kasutajad õigusega tboverride, sest see vastab pealkirjade musta nimekirja järgmisele sissekandele:
        $1", "right-tboverride": "Eirata pealkirjade või kasutajanimede musta nimekirja", "right-tboverride-account": "Eirata kasutajanimede musta nimekirja", - "right-titleblacklistlog": "Vaadata pealkirjade musta nimekirja logi" + "right-titleblacklistlog": "Vaadata pealkirjade musta nimekirja logi", + "apihelp-titleblacklist-description": "Artikli pealkirja, failinime või kasutajanime valideerimine pealkirjade musta nimekirja vastu.", + "apihelp-titleblacklist-param-title": "Sõne, mida musta nimekirja vastu valideerida.", + "apihelp-titleblacklist-param-action": "Toiming, mida kontrollida.", + "apihelp-titleblacklist-param-nooverride": "Ära ürita pealkirjade musta nimekirja ümber kehtestada.", + "apihelp-titleblacklist-example-1": "Kontrolli, kas [[Foo]] on mustas nimekirjas", + "apihelp-titleblacklist-example-2": "Kontrolli, kas [[Bar]] on mustas nimekirjas redigeerimise keelamisega" } diff --git a/extensions/TitleBlacklist/i18n/fa.json b/extensions/TitleBlacklist/i18n/fa.json index f8ab269c..e86f041f 100644 --- a/extensions/TitleBlacklist/i18n/fa.json +++ b/extensions/TitleBlacklist/i18n/fa.json @@ -25,7 +25,6 @@ "titleblacklist-forbidden-new-account": "حساب کاربری «$2» در برابر ایجاد محاÙظت شده‌است.\nاین نام کاربری با این قسمت از Ùهرست سیاه مطابقت دارد: $1", "titleblacklist-invalid": "\n{{PLURAL:$1|سطر|سطرهای}} زیر در Ùهرست سیاه عنوان‌ها نامجاز {{PLURAL:$1|است|هستند}}Ø› لطÙاً {{PLURAL:$1|آن|آن‌ها}} را قبل از ذخیره‌کردن اصلاح کنید:", "titleblacklist-override": "از Ùهرست سیاه چشم‌پوشی Ú©Ù†", - "titleblacklist-autoconfirmed-warning": "نکته: این صÙحه Ùقط می‌تواند توسط کاربرهای با دسترسی autoconfirmed ویرایش شود به این دلیل Ú©Ù‡ با این مدخل Ùهرست سیاه انطباق دارد:
        $1", "titleblacklist-warning": "هشدار: این صÙحه Ùقط توسط مدیران سیستم Ùˆ کاربرانی Ú©Ù‡ مجوز tboverride دارند قابل ویرایش شدن است؛ چون صÙحه منطبق با لیست‌سیاه زیر است:
        $1", "right-tboverride": "نادیده گرÙتن لیست سیاه عنوان یا نام کاربری", "right-tboverride-account": "لغو Ùهرست سیاه نام کاربری", diff --git a/extensions/TitleBlacklist/i18n/fr.json b/extensions/TitleBlacklist/i18n/fr.json index caea12f9..ec44a0b3 100644 --- a/extensions/TitleBlacklist/i18n/fr.json +++ b/extensions/TitleBlacklist/i18n/fr.json @@ -25,9 +25,14 @@ "titleblacklist-forbidden-new-account": "Le nom d’utilisateur « $2 » a été banni à la création.\nIl correspond à l’entrée suivante de la liste noire : $1", "titleblacklist-invalid": "{{PLURAL:$1|La ligne suivante|Les lignes suivantes}} dans la liste noire des titres {{PLURAL:$1|est invalide. Veuillez la|sont invalides. Veuillez les}} corriger avant de publier.", "titleblacklist-override": "Ignorer la liste noire", - "titleblacklist-autoconfirmed-warning": "Remarque : Cette page ne peut être modifiée que par des utilisateurs avec le droit autoconfirmed, car elle correspond à l’entrée suivante de la liste noire des titres :
        $1", "titleblacklist-warning": "Attention : Cette page ne peut être modifiée que par des administrateurs et autres utilisateurs avec le droit tboverride, parce qu’ellle correspond à l’entrée suivante de la liste noire des titres :
        $1", "right-tboverride": "Remplacer la liste noire des titres ou des noms d'utilisateur", "right-tboverride-account": "Ignorer la liste noire des noms d'utilisateur", - "right-titleblacklistlog": "Afficher le journal de la liste noire des titres" + "right-titleblacklistlog": "Afficher le journal de la liste noire des titres", + "apihelp-titleblacklist-description": "Valider un titre d’article, un nom de fichier, ou un nom d’utilisateur, d’après TitleBlacklist.", + "apihelp-titleblacklist-param-title": "La chaîne à valider d’après la liste noire.", + "apihelp-titleblacklist-param-action": "L’action à vérifier.", + "apihelp-titleblacklist-param-nooverride": "N’essayez pas d’écraser la liste noire des titres.", + "apihelp-titleblacklist-example-1": "Vérifier si [[Foo]] est en liste noire", + "apihelp-titleblacklist-example-2": "Vérifier si [[Bar]] est en liste noire pour modification" } diff --git a/extensions/TitleBlacklist/i18n/gl.json b/extensions/TitleBlacklist/i18n/gl.json index 40eec472..51180a96 100644 --- a/extensions/TitleBlacklist/i18n/gl.json +++ b/extensions/TitleBlacklist/i18n/gl.json @@ -3,9 +3,14 @@ "authors": [ "Alma", "Toliño", - "Xosé" + "Xosé", + "Elisardojm" ] }, + "action-titleblacklistlog": "ver o rexistro da lista negra de títulos", + "log-name-titleblacklist": "Rexistro da lista negra de títulos", + "log-description-titleblacklist": "Este rexistro fai un seguimento das coincidencias coa lista negra de títulos.", + "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|provocou}} unha coincidencia coa lista negra de títulos cando intentaba crear a conta $3 correspondente a $4.", "titleblacklist-desc": "Permítelle aos administradores prohibir a creación de páxinas e contas de usuario grazas a unha [[MediaWiki:Titleblacklist|lista negra]] e mais unha [[MediaWiki:Titlewhitelist|lista branca]] de títulos", "titleblacklist": "# Esta é unha lista negra de títulos. Non se pode crear ningún título ou usuario que coincida cunha destas expresións regulares.\n# Use \"#\" para os comentarios.\n# Por defecto, diferencia entre maiúsculas e minúsculas", "titlewhitelist": "# Este é un título da lista branca. Use \"#\" para os comentarios. \n# Por defecto, diferencia entre maiúsculas e minúsculas", @@ -15,6 +20,14 @@ "titleblacklist-forbidden-new-account": "O nome de usuario \"$2\" foi protexido fronte á súa creación.\nCoincide coa seguinte entrada da lista negra: $1", "titleblacklist-invalid": "{{PLURAL:$1|A seguinte liña|As seguintes liñas}} da lista negra {{PLURAL:$1|é inválida|son inválidas}}; por favor {{PLURAL:$1|corríxaa|corríxaas}} antes de gardar:", "titleblacklist-override": "Ignorar a lista negra", + "titleblacklist-warning": "Aviso: Esta páxina só pode ser editada por administradores e outros usuario co privilexio tboverride, pois corresponde co seguinte título da lista negra:
        $1", "right-tboverride": "Ignorar a lista negra de títulos ou nomes de usuario", - "right-tboverride-account": "Ignorar a lista negra de nomes de usuario" + "right-tboverride-account": "Ignorar a lista negra de nomes de usuario", + "right-titleblacklistlog": "Ver o rexistro da lista negra de títulos", + "apihelp-titleblacklist-description": "Validar un título de artigo, ficheiro ou nome de usuario contra a lista negra de títulos.", + "apihelp-titleblacklist-param-title": "Cadea de texto a validar contra a lista negra.", + "apihelp-titleblacklist-param-action": "Acción a ser chequeada.", + "apihelp-titleblacklist-param-nooverride": "Non intente ignorar a lista negra de títulos.", + "apihelp-titleblacklist-example-1": "Revisar se [[Foo]] está na lista negra", + "apihelp-titleblacklist-example-2": "Revisar se [[Bar]] está na lista negra para edición" } diff --git a/extensions/TitleBlacklist/i18n/gu.json b/extensions/TitleBlacklist/i18n/gu.json index 81fc8b3d..fcfa12d5 100644 --- a/extensions/TitleBlacklist/i18n/gu.json +++ b/extensions/TitleBlacklist/i18n/gu.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Ashok modhvadia", - "Sushant savla" + "Sushant savla", + "Dsvyas" ] }, "titleblacklist-desc": "પà«àª°àª¬àª‚ધકોને [[MediaWiki:Titleblacklist|blacklist]] અને [[MediaWiki:Titlewhitelist|whitelist]] અનà«àª¸àª¾àª° નવા પૃષà«àª  કે ખાતા રચનાને પà«àª°àª¤à«àª¬àª‚ધીત કરવાનો અધિકાર આપે છે.", @@ -15,5 +16,5 @@ "titleblacklist-invalid": "નીચેની {{PLURAL:$1|હરોળ|હરોળ}} પà«àª°àª¤àª¿àª¬àª‚ધિત યાદી {{PLURAL:$1|is|are}} અમાનà«àª¯ છે;\nમહેરબાની કરી {{PLURAL:$1|તેને|તેમને}} સાચવો:", "titleblacklist-override": "પà«àª°àª¤àª¿àª¬àª‚ધ સૂચી અવગણો", "right-tboverride": "આ શીરà«àª·àª• કે સભà«àª¯àª¨àª¾àª® પà«àª°àª¤àª¿àª¬àª‚ધ સૂચિની ઉપરવટ જાવ", - "right-tboverride-account": "આ સભà«àª¯ નામ પà«àª°àª¤àª¿àª¬àª‚ધ સૂચિની ઉપરવટ જાવ" + "right-tboverride-account": "આ સભà«àª¯àª¨àª¾àª® પà«àª°àª¤àª¿àª¬àª‚ધસૂચિની ઉપરવટ જાવ" } diff --git a/extensions/TitleBlacklist/i18n/he.json b/extensions/TitleBlacklist/i18n/he.json index c64c9dbd..fdc83453 100644 --- a/extensions/TitleBlacklist/i18n/he.json +++ b/extensions/TitleBlacklist/i18n/he.json @@ -22,7 +22,6 @@ "titleblacklist-forbidden-new-account": "×©× ×”×ž×©×ª×ž×© \"$2\" × ×סר ליצירה.\n×”×•× ×ž×ª××™× ×œ×¢×¨×š ×”×‘× ×‘×¨×©×™×ž×” השחורה: $1", "titleblacklist-invalid": "{{PLURAL:$1|השורה הב××”|השורות הב×ות}} ברשימת הכותרות ×”×סורות {{PLURAL:$1|××™× ×” תקינה|××™× × ×ª×§×™× ×™×}};\n×× × ×ª×§× ×• {{PLURAL:$1|×ותה|×ותן}} לפני השמירה:", "titleblacklist-override": "×œ×”×ª×¢×œ× ×ž×”×¨×©×™×ž×” השחורה", - "titleblacklist-autoconfirmed-warning": "לתשומת לבך: רק ×ž×©×ª×ž×©×™× ×‘×¢×œ×™ הרש×ת autoconfirmed (×ž×©×ª×ž×©×™× ×•×ª×™×§×™×) ×™×›×•×œ×™× ×œ×¢×¨×•×š ×ת הדף ×”×–×” ×›×™ ×”×•× ×ž×ª××™× ×œ×©×•×¨×” הב××” ברשימה השחורה:
        $1", "titleblacklist-warning": "לתשומת לבך: רק ×ž×¤×¢×™×œ×™× ×•×ž×©×ª×ž×©×™× ××—×¨×™× ×‘×¢×œ×™ הרש×ת tboverride ×™×›×•×œ×™× ×œ×¢×¨×•×š ×ת הדף ×”×–×” ×›×™ ×”×•× ×ž×ª××™× ×œ×©×•×¨×” הב××” ברשימה השחורה:
        $1", "right-tboverride": "עקיפת כותרת הרשימה השחורה של שמות המשתמשי×", "right-tboverride-account": "עקיפת הרשימה השחורה של שמות המשתמשי×", diff --git a/extensions/TitleBlacklist/i18n/ilo.json b/extensions/TitleBlacklist/i18n/ilo.json index bad71fac..d1da80bd 100644 --- a/extensions/TitleBlacklist/i18n/ilo.json +++ b/extensions/TitleBlacklist/i18n/ilo.json @@ -17,7 +17,6 @@ "titleblacklist-forbidden-new-account": "Ti nagan ti agar-aramat ti \"$2\" ket naiparit manipud ti pannakapartuat.\nNaipada iti sumaganad a naikabil a blacklist: $1", "titleblacklist-invalid": "Ti sumaganad a {{PLURAL:$1|linia|linlinia}} iti title blacklist ket imbalido;\npangngaasi ta pasayaaten {{PLURAL:$1|dayta|dagita}} sakbay nga idulin:", "titleblacklist-override": "Saan nga ikaskaso ti blacklist", - "titleblacklist-autoconfirmed-warning": "Nota: Daytoy a panid ket mabalin laeng a maurnos babaen dagiti agar-aramat nga addaan iti karbengan ti automatiko a napasingkedan gapu ta maipada daytoy iti sumaganad a naikabil a blacklist:
        $1", "titleblacklist-warning": "Ballaag: Daytoy a panid ket maurnos laeng babaen dagiti administrador ken dagiti sabali nga agar-aramat nga addaan iti karbengan ti tboverride gapu ta maipada iti sumaganad a naikabil a title blacklist:
        $1", "right-tboverride": "Patuonan ti titulo wenno ti blacklist ti nagan ti agar-aramat", "right-tboverride-account": "Patuonan ti blacklist ti nagan ti agar-aramat", diff --git a/extensions/TitleBlacklist/i18n/it.json b/extensions/TitleBlacklist/i18n/it.json index ba541061..fe00bb60 100644 --- a/extensions/TitleBlacklist/i18n/it.json +++ b/extensions/TitleBlacklist/i18n/it.json @@ -22,7 +22,6 @@ "titleblacklist-forbidden-new-account": "La creazione di utenti con nome \"$2\" è stata impedita. La voce corrispondente nell'elenco dei nomi non consentiti è la seguente: $1", "titleblacklist-invalid": "{{PLURAL:$1|La seguente riga|Le seguenti righe}} dell'elenco dei titoli non consentiti {{PLURAL:$1|non è valida|non sono valide}}; si prega di correggere {{PLURAL:$1|l'errore|gli errori}} prima di salvare la pagina.", "titleblacklist-override": "Ignora la blacklist", - "titleblacklist-autoconfirmed-warning": "Nota: questa pagina può essere modificata solo dagli utenti autoconvalidati (autoconfirmed) poiché corrisponde alla seguente voce della lista dei titoli bloccati:
        $1", "titleblacklist-warning": "Attenzione: questa pagina può essere modificata solo dagli amministratori o dagli utenti con il diritto tboverride poiché corrisponde alla seguente voce della lista dei titoli bloccati:
        $1", "right-tboverride": "Ignora la blacklist dei titoli o dei nome utente", "right-tboverride-account": "Ignora la blacklist dei nome utente", diff --git a/extensions/TitleBlacklist/i18n/ja.json b/extensions/TitleBlacklist/i18n/ja.json index 4815c660..89778903 100644 --- a/extensions/TitleBlacklist/i18n/ja.json +++ b/extensions/TitleBlacklist/i18n/ja.json @@ -9,7 +9,10 @@ "Muttley", "Shirayuki", "é’å­å®ˆæ­Œ", - "Whym" + "Whym", + "Sujiniku", + "2nd-player", + "Otokoume" ] }, "action-titleblacklistlog": "ページåブラックリストã®è¨˜éŒ²ã®é–²è¦§", @@ -25,9 +28,10 @@ "titleblacklist-forbidden-new-account": "利用者å「$2ã€ã®ä½œæˆã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚\nã“ã‚Œã¯ä»¥ä¸‹ã®ãƒ–ラックリスト項目ã¨ä¸€è‡´ã—ã¾ã™: $1", "titleblacklist-invalid": "ページåブラックリスト内ã®ä»¥ä¸‹ã®{{PLURAL:$1|è¡Œ}}ã¯ç„¡åŠ¹{{PLURAL:$1|ã§ã™}}。\nä¿å­˜ã™ã‚‹å‰ã«{{PLURAL:$1|修正ã—ã¦}}ãã ã•ã„:", "titleblacklist-override": "ブラックリストを無視", - "titleblacklist-autoconfirmed-warning": "注æ„: ã“ã®ãƒšãƒ¼ã‚¸ã¯ä¸‹è¨˜ã®ãƒšãƒ¼ã‚¸åブラックリスト項目ã«ä¸€è‡´ã—ã¦ã„ã‚‹ãŸã‚ autoconfirmed 権é™ã®ã‚る利用者ã®ã¿ãŒç·¨é›†ã§ãã¾ã™:
        $1", "titleblacklist-warning": "警告: ã“ã®ãƒšãƒ¼ã‚¸ã¯ä¸‹è¨˜ã®ãƒšãƒ¼ã‚¸åブラックリスト項目ã«ä¸€è‡´ã—ã¦ã„ã‚‹ãŸã‚管ç†è€…㨠tboverride 権é™ã®ã‚る利用者ã®ã¿ãŒç·¨é›†ã§ãã¾ã™:
        $1", "right-tboverride": "ページå/利用者åã®ãƒ–ラックリストã«ã‚ˆã‚‹åˆ¶é™ã‚’å—ã‘ãªã„", "right-tboverride-account": "利用者åブラックリストを無視", - "right-titleblacklistlog": "ページåブラックリストã®è¨˜éŒ²ã‚’閲覧" + "right-titleblacklistlog": "ページåブラックリストã®è¨˜éŒ²ã‚’閲覧", + "apihelp-titleblacklist-description": "TitleBllacklist ã«å¯¾ã—ã¦è¨˜äº‹ã®ãƒšãƒ¼ã‚¸åã€ãƒ•ã‚¡ã‚¤ãƒ«åã€åˆ©ç”¨è€…åを検証ã—ã¾ã™ã€‚", + "apihelp-titleblacklist-param-action": "確èªå¯¾è±¡ã®æ“作" } diff --git a/extensions/TitleBlacklist/i18n/kk-cyrl.json b/extensions/TitleBlacklist/i18n/kk-cyrl.json index 17a83c53..5d9b46ff 100644 --- a/extensions/TitleBlacklist/i18n/kk-cyrl.json +++ b/extensions/TitleBlacklist/i18n/kk-cyrl.json @@ -15,9 +15,10 @@ "titleblacklist-forbidden-new-account": "«$2» атаулы қатыÑушы еÑімі баÑтаудан құрÑауланған.\nОл келеÑÑ– қара тізім жазбаÑына ÑÓ™Ð¹ÐºÐµÑ ÐºÐµÐ»ÐµÐ´Ñ–: $1", "titleblacklist-invalid": "Ðтаулардың қара тізіміндегі келеÑÑ– {{PLURAL:$1|жол|жолдар}} жарамÑыз; Ñақтау алдында {{PLURAL:$1|бұны|бұларды}} дұрыÑтап шығыңыз:", "titleblacklist-override": "Қаратізімді елемеу", - "titleblacklist-autoconfirmed-warning": "ЕÑкерту: Бұл бетті тек өздіктіқұпталған қатыÑушылар ғана өңдей алады, Ñебебі ол келеÑÑ– атаулардың қара тізімі жазбаÑына ÑÓ™Ð¹ÐºÐµÑ ÐºÐµÐ»ÐµÐ´Ñ–:
        $1", "titleblacklist-warning": "ЕÑкерту: Бұл бетті тек әкімшілер және одан баÑқа Ò¯Ñтінен жазатын құқықтары бар қатыÑушылар ғана өңдей алады, Ñебебі ол келеÑÑ– атаулардың қара тізімі жазбаÑына ÑÓ™Ð¹ÐºÐµÑ ÐºÐµÐ»ÐµÐ´Ñ–:
        $1", "right-tboverride": "Ðтаулардың немеÑе қатыÑушы атаулары қара тізіміне енетін жазбалардың Ò¯Ñтінен жазу", "right-tboverride-account": "ҚатыÑушы атауларының қара тізіміне енетін жазбалардың Ò¯Ñтінен жазу", - "right-titleblacklistlog": "Ðтаулардың қара тізімі журналын қарау" + "right-titleblacklistlog": "Ðтаулардың қара тізімі журналын қарау", + "apihelp-titleblacklist-param-action": "Әрекет теркÑерілді.", + "apihelp-titleblacklist-param-nooverride": "Ðтаулардың қара тізімінің Ò¯Ñтінен жазбаңыз." } diff --git a/extensions/TitleBlacklist/i18n/ko.json b/extensions/TitleBlacklist/i18n/ko.json index 874eab3b..a2725c18 100644 --- a/extensions/TitleBlacklist/i18n/ko.json +++ b/extensions/TitleBlacklist/i18n/ko.json @@ -7,13 +7,14 @@ "ì•„ë¼", "Hym411", "Revi", - "IRTC1015" + "IRTC1015", + "Hwangjy9" ] }, "action-titleblacklistlog": "제목 블랙리스트 로그를 봅니다", "log-name-titleblacklist": "제목 블랙리스트 로그", "log-description-titleblacklist": "ì´ ê¸°ë¡ì€ 제목 블랙리스트 ë¡œê·¸ì˜ ì¼ì¹˜ë¥¼ 추ì í•©ë‹ˆë‹¤.", - "logentry-titleblacklist-hit-username": "$1 사용ìžê°€ 제목 블랙리스트 $4 íŒ¨í„´ì— ì¼ì¹˜í•˜ëŠ” $3 ê³„ì •ì„ ìƒì„±í•˜ë ¤ê³  하였습니다.", + "logentry-titleblacklist-hit-username": "$1 사용ìžê°€ 제목 블랙리스트 $4 íŒ¨í„´ì— ì¼ì¹˜í•˜ëŠ” $3 ê³„ì •ì„ {{GENDER:$2|ìƒì„±í•˜ë ¤ê³  하였습니다}}.", "titleblacklist-desc": "관리ìžê°€ [[MediaWiki:Titleblacklist]], [[MediaWiki:Titlewhitelist]]마다 문서와 ì‚¬ìš©ìž ê³„ì •ì„ ë§Œë“œëŠ” ê²ƒì„ ê¸ˆì§€í•  수 있습니다", "titleblacklist": "# 제목 금지 목ë¡ìž…니다. ì •ê·œ 표현ì‹ê³¼ ì¼ì¹˜í•˜ëŠ” 제목ì´ë‚˜ ì‚¬ìš©ìž ê³„ì •ì€ ë§Œë“¤ 수 없습니다.\n# ì£¼ì„ ë‚´ìš©ì—는 ì•žì— \"#\"ì„ ë¶™ì—¬ 주세요.\n# 기본ì ìœ¼ë¡œ ê·œì¹™ì€ ëŒ€ì†Œë¬¸ìžë¥¼ 구별하지 않습니다", "titlewhitelist": "# 제목 허용 목ë¡ìž…니다. ì£¼ì„ ë‚´ìš©ì—는 ì•žì— \"#\"ì„ ë¶™ì—¬ 주세요.\n# 기본ì ìœ¼ë¡œ ê·œì¹™ì€ ëŒ€ì†Œë¬¸ìžë¥¼ 구별하지 않습니다", @@ -23,9 +24,9 @@ "titleblacklist-forbidden-new-account": "\"$2\" ì´ë¦„으로 ê³„ì •ì„ ë§Œë“œëŠ” ê²ƒì´ ì œí•œë˜ì–´ 있습니다.\n계정 ì´ë¦„ì´ ë‹¤ìŒì˜ ê·œì¹™ì— í•´ë‹¹ë©ë‹ˆë‹¤: $1", "titleblacklist-invalid": "제목 ë¸”ëž™ë¦¬ìŠ¤íŠ¸ì˜ ë‹¤ìŒ {{PLURAL:$1|줄}}ì— ìž˜ëª»ëœ êµ¬ë¬¸ì´ {{PLURAL:$1|있습니다}}.\n저장하기 ì „ì— {{PLURAL:$1}}올바르게 수정해주세요:", "titleblacklist-override": "블랙리스트를 무시", - "titleblacklist-autoconfirmed-warning": "참고: ì´ ë¬¸ì„œëŠ” autoconfirmed ê¶Œí•œì„ ê°€ì§„ 사용ìžë§Œ 편집할 수 있ë„ë¡ ì œëª© ë¸”ëž™ë¦¬ìŠ¤íŠ¸ì˜ ë‹¤ìŒ í•­ëª©ì— ì§€ì •ë˜ì—ˆìŠµë‹ˆë‹¤:
        $1", "titleblacklist-warning": "경고: ì´ ë¬¸ì„œëŠ” 제목 금지 목ë¡ì˜ ë‹¤ìŒ í•­ëª©ê³¼ ì¼ì¹˜í•˜ê¸° ë•Œë¬¸ì— ê´€ë¦¬ìžì™€ tboverride ê¶Œí•œì„ ê°€ì§„ 사용ìžë§Œ 편집할 수 있습니다.
        $1", "right-tboverride": "문서 제목ì´ë‚˜ ì‚¬ìš©ìž ì´ë¦„ 블랙리스트 무시", "right-tboverride-account": "ì‚¬ìš©ìž ì´ë¦„ 블랙리스트를 무시", - "right-titleblacklistlog": "제목 블랙리스트 로그 보기" + "right-titleblacklistlog": "제목 블랙리스트 로그 보기", + "apihelp-titleblacklist-example-1": "[[Foo]] 문서가 ë¸”ëž™ë¦¬ìŠ¤íŠ¸ì— ì˜¬ë¼ê°€ 있는지 검사하기" } diff --git a/extensions/TitleBlacklist/i18n/krc.json b/extensions/TitleBlacklist/i18n/krc.json index 945f9b7b..ba707559 100644 --- a/extensions/TitleBlacklist/i18n/krc.json +++ b/extensions/TitleBlacklist/i18n/krc.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Iltever" + "Iltever", + "Ernác" ] }, "titleblacklist-override": "Къара тизмеге ÑÑ Ð±Ñ‘Ð»Ð¼Ðµ" diff --git a/extensions/TitleBlacklist/i18n/ksh.json b/extensions/TitleBlacklist/i18n/ksh.json index 9dc10852..b6755fe2 100644 --- a/extensions/TitleBlacklist/i18n/ksh.json +++ b/extensions/TitleBlacklist/i18n/ksh.json @@ -12,14 +12,13 @@ "titleblacklist": "# Dat hee eß en „schwatze Leß“ met verbodde Tittele för Sigge.\n# Dä ier Enhallt sen rejolähre Ußdrök,\n# wat do drop paß, kam_mer nit aanläje.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Donn „#“ aan der Aanfang fun en Reih, dann häß ene Kommentaa.", "titlewhitelist": "# Dat hee eß en Leß met Ußnahme fun de „schwatze Leß“ met verbodde\n# Tittele för Sigge. Dä ier Enhallt sen rejolähre Ußdrök,\n# wat do drop paß, kam_mer aanläje.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Donn „#“ aan der Aanfang fun en Reih, dann häß ene Kommentaa.", "titleblacklist-forbidden-edit": "En Sigg met dämm Tittel „$2“ aanzelääje es verbodde per dämm Enndraach $1 en de „schwazze Leß.“", - "titleblacklist-forbidden-move": "Di Sigg met dämm Tittel „$2“ op dä Tittel „$3“ ömzenänne es verbodde per dämm Enndraach $1 en de „schwazze Leß.“", + "titleblacklist-forbidden-move": "Di Sigg met dä Övverschreff „$2“ op de Övverschreff „$3“ ömzenänne es verbodde per dämm Enndraach $1 en de „schwazze Leß.“", "titleblacklist-forbidden-upload": "En Datei met dämm Tittel „$2“ huhzelade es verbodde per dämm Enndraach $1 en de „schwazze Leß.“", "titleblacklist-forbidden-new-account": "Enne Metmaacher met dämm Name „$2“ aanzelääje es verbodde per dämm Enndraach $1 en de „schwazze Leß.“", - "titleblacklist-invalid": "{{PLURAL:$1|De Reih unge stemmp nit un moß|De $1 Reije unge stimme nit un möße|Dat he sull}} för em Afspeichere eets en Odenung jebraat wäde:", + "titleblacklist-invalid": "{{PLURAL:$1|De Reih unge stemmp nit un moß|De $1 Reije unge stimme nit un möße|Dat he sull}} för em Affschpeischere eets en Odenung jebraat wäde:", "titleblacklist-override": "De schwazze Leß övverjonn", - "titleblacklist-autoconfirmed-warning": "Opjepaß: heh di Sigg kann blohß vun Metmaachere met däm Rääsch autoconfirmed ({{int:group-autoconfirmed}}) weil se en dä „schwazze Leß“ för Övverschreffte op heh dä Enndraach paß:
        $1", "titleblacklist-warning": "Opjepaß: heh di Sigg kann blohß vun Wikki_Köhbeße un vun andere Metmaacher met däm Rääsch tboverride, weil se en dä „schwazze Leß“ för Övverschreffte op heh dä Enndraach paß:
        $1", - "right-tboverride": "De Lėß met verbodde Naame un Titelle för Sigge övverjonn", + "right-tboverride": "De Lėß met verbodde Nahme un Övverschreffte för Sigge övverjonn", "right-tboverride-account": "De Leß met verbodde Metmaacher-Name övverjonn", "right-titleblacklistlog": "Donn et Logbohch vun de „schwazze Leß“ för Övvverschreffte aanlohre", "apihelp-titleblacklist-description": "Donn de Övverschreffte vun Sigge, Datteije udder de Nahme vun Metmaacher jähje de „schwazze Leß“ för Övvverschreffte pröhve.", diff --git a/extensions/TitleBlacklist/i18n/lt.json b/extensions/TitleBlacklist/i18n/lt.json index 2fb06b83..7dbf2e63 100644 --- a/extensions/TitleBlacklist/i18n/lt.json +++ b/extensions/TitleBlacklist/i18n/lt.json @@ -3,9 +3,14 @@ "authors": [ "Eitvys200", "Homo", - "Matasg" + "Matasg", + "Albertas" ] }, + "action-titleblacklistlog": "peržiÅ«rÄ—ti pavadinimų juodojo sÄ…raÅ¡o žurnalÄ…", + "log-name-titleblacklist": "Pavadinimų juodojo sÄ…raÅ¡o žurnalas", + "log-description-titleblacklist": "Å ie įvykiai seka pavadinimų juodojo sÄ…raÅ¡o sužadinimus.", + "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|sukÄ—lÄ—}} pavadinimų juodojo sÄ…raÅ¡o sužadinimÄ…, kai bandÄ— sukurti paskyrÄ… $3, atitinkanÄiÄ… $4.", "titleblacklist-desc": "Leidžia administratoriams uždrausti kurti puslapius ir vartotojų sÄ…skaitas pagal [[MediaWiki:Titleblacklist|juodÄ…jį sÄ…raÅ¡Ä…]] ir [[MediaWiki:Titlewhitelist|baltÄ…jį sÄ…raÅ¡Ä…]]", "titleblacklist": "# Tai pavadinimų juodasis sÄ…raÅ¡as. Pavadinimai ir vartotojai, kurie atitinka įraÅ¡us Äia, negali bÅ«ti sukuriami. \n# Naudokite \"#\" komentarams. \n# Pagal nutylÄ—jimÄ… nejautrus raidžių dydžiui", "titlewhitelist": "# Tai pavadinimų baltasis sÄ…raÅ¡as. Naudokite \"#\" komentarams. \n# Pagal nutylÄ—jimÄ… nejautrus raidžių dydžiui", @@ -13,7 +18,16 @@ "titleblacklist-forbidden-move": "\"$2\" negali bÅ«ti perkeltas į \"$3\", nes pavadinimÄ… \"$3\" buvo uždrausta sukurti.\nJis atitinkÄ… šį juodojo sÄ…raÅ¡o įraÅ¡Ä…: $1", "titleblacklist-forbidden-upload": "FailÄ… \"$2\" buvo uždrausta sukurti.\nJis atitinkÄ… šį juodojo sÄ…raÅ¡o įraÅ¡Ä…: $1", "titleblacklist-forbidden-new-account": "Naudotojo vardÄ… \"$2\" buvo uždrausta sukurti.\nJis atitinkÄ… šį juodojo sÄ…raÅ¡o įraÅ¡Ä…: $1", - "titleblacklist-invalid": "Žemiau {{PLURAL:$1|esanti linija|esanÄios linijos}} juodajame sÄ…raÅ¡e {{PLURAL:$1|yra|yra}} netinkama;\npraÅ¡ome {{PLURAL:$1|jÄ…|jas}} pataisyti prieÅ¡ iÅ¡saugant:", + "titleblacklist-invalid": "Žemiau {{PLURAL:$1|esanti eilutÄ—|esanÄios eilutÄ—s}} pavadinimų juodajame sÄ…raÅ¡e {{PLURAL:$1|yra}} {{PLURAL:$1|netinkama|netinkamos}};\npraÅ¡ome {{PLURAL:$1|jÄ…|jas}} pataisyti prieÅ¡ iÅ¡saugant:", "titleblacklist-override": "Ignoruoti juodÄ…jį sÄ…raÅ¡Ä…", - "right-tboverride": "Nepaisyti juodojo sÄ…raÅ¡o" + "titleblacklist-warning": "Ä®spÄ—jimas: Šį puslapį gali redaguoti tik administratoriai ir kiti naudotojai, turinys tboverride teisÄ™, nes jis atitinka šį pavadinimų juodojo sÄ…raÅ¡o įraÅ¡Ä…:
        $1", + "right-tboverride": "Nepaisyti pavadinimų arba naudotojų juodojo sÄ…raÅ¡o", + "right-tboverride-account": "Nepaisyti naudotojų juodojo sÄ…raÅ¡o", + "right-titleblacklistlog": "PeržiÅ«rÄ—ti pavadinimų juodojo sÄ…raÅ¡o žurnalÄ…", + "apihelp-titleblacklist-description": "Patikrinti, ar straipsnio pavadinimas, failo vardas ar naudotojo vardas nÄ—ra įtrauktas į juodÄ…jį sÄ…raÅ¡Ä….", + "apihelp-titleblacklist-param-title": "EilutÄ—, kuriÄ… patikrinti juodajame sÄ…raÅ¡e.", + "apihelp-titleblacklist-param-action": "Veiksmas, kurį patikrinti.", + "apihelp-titleblacklist-param-nooverride": "Nebandykite perraÅ¡yti pavadinimų juodojo sÄ…raÅ¡o.", + "apihelp-titleblacklist-example-1": "Patikrinti, ar [[Foo]] yra juodajame sÄ…raÅ¡e", + "apihelp-titleblacklist-example-2": "Patikrinti, ar [[Bar]] yra redagavimo juodajame sÄ…raÅ¡e" } diff --git a/extensions/TitleBlacklist/i18n/mk.json b/extensions/TitleBlacklist/i18n/mk.json index fd4faa97..4f891e2e 100644 --- a/extensions/TitleBlacklist/i18n/mk.json +++ b/extensions/TitleBlacklist/i18n/mk.json @@ -17,7 +17,6 @@ "titleblacklist-forbidden-new-account": "КориÑничкото име „$2“ е забрането за Ñоздавање.\nСе Ñовпаѓа Ñо Ñледнава Ñтавка на црниот ÑпиÑок: $1", "titleblacklist-invalid": "{{PLURAL:$1|Следниов ред|Следниве редови}} во црниот ÑпиÑок на наÑлови {{PLURAL:$1|е|Ñе}} неважечки;\nпоправете {{PLURAL:$1|го|ги}} пред да зачувате:", "titleblacklist-override": "Занемари го црниот ÑпиÑок", - "titleblacklist-autoconfirmed-warning": "Ðапомена: Страницава можат да ја уредуваат Ñамо кориÑници Ñо правото autoconfirmed (автопотврден) бидејќи Ñе Ñовпаѓа Ñо Ñледниов наÑлов на црниот ÑпиÑок:
        $1", "titleblacklist-warning": "Предупредување: Страницава можат да ја уредуваат Ñамо админиÑтратори и други кориÑници Ñо правото tboverride бидејќи Ñе Ñовпаѓа Ñо Ñледниов наÑлов на црниот ÑпиÑок:
        $1", "right-tboverride": "Занемарување на црниот ÑпиÑок на наÑлови или кориÑници", "right-tboverride-account": "ПотиÑнување на црниот ÑпиÑок на кориÑнички имиња", diff --git a/extensions/TitleBlacklist/i18n/ml.json b/extensions/TitleBlacklist/i18n/ml.json index 839b59d1..c0604012 100644 --- a/extensions/TitleBlacklist/i18n/ml.json +++ b/extensions/TitleBlacklist/i18n/ml.json @@ -5,6 +5,10 @@ "Shijualex" ] }, + "action-titleblacklistlog": "തലകàµà´•àµ†à´Ÿàµà´Ÿàµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµà´Ÿàµ† രേഖ കാണàµà´•", + "log-name-titleblacklist": "തലകàµà´•àµ†à´Ÿàµà´Ÿàµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµà´Ÿàµ† രേഖ", + "log-description-titleblacklist": "പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµ† ഉണർതàµà´¤à´¿à´¯ സംഭവങàµà´™àµ¾.", + "logentry-titleblacklist-hit-username": "$4 പോലെയàµà´³àµà´³ à´…à´‚à´—à´¤àµà´µà´‚ $3 സൃഷàµà´Ÿà´¿à´•àµà´•à´¾àµ» à´¶àµà´°à´®à´¿à´šàµà´šà´ªàµà´ªàµ‹àµ¾ $1 തലകàµà´•àµ†à´Ÿàµà´Ÿàµ പാഴെഴàµà´¤àµà´¤àµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµ† {{GENDER:$2|ഉണർതàµà´¤à´¿}}", "titleblacklist-desc": "[[MediaWiki:Titleblacklist]], [[MediaWiki:Titlewhitelist]] à´Žà´¨àµà´¨à´¿à´µà´¯à´¿àµ½ കൊടàµà´¤àµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨ à´…à´‚à´—à´¤àµà´µà´™àµà´™à´³àµà´‚ താളàµà´•à´³àµà´‚ സൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ തടയാൻ കാരàµà´¯à´¨à´¿àµ¼à´µà´¾à´¹à´•à´°àµ† à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨àµ.", "titleblacklist": "# ഇതൠതലകàµà´•àµ†à´Ÿàµà´Ÿà´¿à´¨àµà´±àµ† à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¾à´£àµâ€Œ. à´ˆ പടàµà´Ÿà´¿à´•à´¯à´¿à´²àµà´³àµà´³ ഇനവàµà´®à´¾à´¯à´¿ യോജികàµà´•àµà´¨àµà´¨ ലേഖനങàµà´™à´³àµà´‚ ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´™àµà´™à´³àµà´‚ സൃഷàµà´Ÿà´¿à´•àµà´•à´¾à´¨à´¾à´µà´¿à´²àµà´². \n# à´…à´­à´¿à´ªàµà´°à´¾à´¯à´¤àµà´¤à´¿à´¨àµ \"#\" ഉപയോഗികàµà´•àµà´•.\n# ഇതൠസàµà´µà´¤àµ‡ കേസൠസെൻസിറàµà´±àµ€à´µàµ ആണàµ.", "titlewhitelist": "# ഇതൠതലകàµà´•àµ†à´Ÿàµà´Ÿà´¿à´¨àµà´±àµ† à´¶àµà´¦àµà´§à´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¾à´£àµ. à´•àµà´±à´¿à´ªàµà´ªà´¿à´Ÿà´¾à´¨à´¾à´¯à´¿ \"#\" ഉപയോഗികàµà´•àµà´•. \n# ഇതൠസàµà´µà´¤àµ‡ കേസൠസെൻസിറàµà´±àµ€à´µàµ ആണàµ", @@ -15,5 +19,11 @@ "titleblacklist-invalid": "à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿à´²àµ† താഴെ കൊടàµà´¤àµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨ {{PLURAL:$1|വരി|വരികൾ}} അസാധàµà´µà´¾à´£àµ.\nദയവായി {{PLURAL:$1|à´…à´¤àµ|à´…à´µ}} ശരിയാകàµà´•à´¿à´¯ ശേഷം സേവൠചെയàµà´¯àµà´•:", "titleblacklist-override": "à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´• അവഗണികàµà´•àµà´•", "right-tboverride": "തലകàµà´•àµ†à´Ÿàµà´Ÿà´¿à´¨àµà´±àµ† à´…à´²àµà´²àµ†à´™àµà´•à´¿àµ½ ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´¤àµà´¤à´¿à´¨àµà´±àµ† à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµ† അതിലംഘികàµà´•àµà´•", - "right-tboverride-account": "ഉപയോകàµà´¤àµƒà´¨à´¾à´® à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµ† അതിലംഘികàµà´•àµà´•" + "right-tboverride-account": "ഉപയോകàµà´¤àµƒà´¨à´¾à´® à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµ† അതിലംഘികàµà´•àµà´•", + "right-titleblacklistlog": "തലകàµà´•àµ†à´Ÿàµà´Ÿàµ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯àµà´Ÿàµ† രേഖ കാണàµà´•", + "apihelp-titleblacklist-description": "ലേഖനതàµà´¤à´¿à´¨àµà´±àµ† തലകàµà´•àµ†à´Ÿàµà´Ÿàµ, à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµà´±àµ† പേരൠഅലàµà´²àµ†à´™àµà´•à´¿àµ½ ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ തലകàµà´•àµ†à´Ÿàµà´Ÿàµâ€Œà´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ പരിശോധികàµà´•àµà´•.", + "apihelp-titleblacklist-param-title": "à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ പരിശോധികàµà´•àµ‡à´£àµà´Ÿ പദം.", + "apihelp-titleblacklist-param-action": "പരിശോധികàµà´•àµ‡à´£àµà´Ÿ à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿.", + "apihelp-titleblacklist-example-1": "[[Foo]] à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ ഉൾപàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´Ÿàµà´Ÿàµà´£àµà´Ÿàµ‹à´¯àµ†à´¨àµà´¨àµ പരിശോധികàµà´•àµà´•", + "apihelp-titleblacklist-example-2": "[[Bar]] തിരàµà´¤àµà´¤àµà´¨àµà´¨ à´•à´°à´¿à´®àµà´ªà´Ÿàµà´Ÿà´¿à´•à´¯à´¿àµ½ ഉണàµà´Ÿàµ‹à´¯àµ†à´¨àµà´¨àµ പരിശോധികàµà´•àµà´•" } diff --git a/extensions/TitleBlacklist/i18n/nap.json b/extensions/TitleBlacklist/i18n/nap.json new file mode 100644 index 00000000..547d3e65 --- /dev/null +++ b/extensions/TitleBlacklist/i18n/nap.json @@ -0,0 +1,30 @@ +{ + "@metadata": { + "authors": [ + "C.R." + ] + }, + "action-titleblacklistlog": "vide 'o titulo d' 'o riggistro d' 'a lista nera", + "log-name-titleblacklist": "Riggistro 'e titule bluccate", + "log-description-titleblacklist": "St'evente se pigliassero 'o cuntrollo 'e attivaziune d' 'a lista nera.", + "logentry-titleblacklist-hit-username": "$1, {{GENDER:$2|pe' ccausa 'e cchesta}} s'appicciaje 'a lista nera quanno se criaje nu cunto utente $3 ca currispunnesse a $4.", + "titleblacklist-desc": "Premmettesse l'ammenistature 'e pruteggere 'a criazione 'e paggene e cunte utente p' 'a [[MediaWiki:Titleblacklist|lista nera]] e 'a [[MediaWiki:Titlewhitelist|lista janca]]", + "titleblacklist": "# Chest'è na lista nera. 'E titule e l'utente ca s'azzeccassero n'espressione regolare ccà nun se ponno crià.\n# Ausate \"#\" p' 'e cummente.\n# Chest'è senzibbele a 'e maiuscole e minuscole 'e partenza", + "titlewhitelist": "# Chest'è na lista janca. Ausate \"#\" p' 'e cummente.\n# Chest'è senzibbele a 'e maiuscole e minuscole 'e partenza", + "titleblacklist-forbidden-edit": "'O titolo \"$2\" s'è cacciato pe' nun 'o putè crià.
        \nStu titolo s'azzecca troppo 'a voce ccà, dint'a lista nera, oj cann: $1", + "titleblacklist-forbidden-move": "\"$2\" nun se pò mòvere ncopp'a \"$3\", pecché 'o titolo \"$3\" s'è luvato 'a criaziona.
        \nÈ tropp'azzeccato 'a voce ccà, dint'a lista nera, oj cann: $1", + "titleblacklist-forbidden-upload": "'O filename (nomme 'e file) \"$2\" s'è cacciato pe' nun 'o putè crià.
        \nStu titolo s'azzecca troppo 'a voce ccà, dint'a lista nera, oj cann: $1", + "titleblacklist-forbidden-new-account": "'O cunto utente \"$2\" s'è cacciato pe' nun 'o putè crià.
        \nStu titolo s'azzecca troppo 'a voce ccà, dint'a lista nera, oj cann: $1", + "titleblacklist-invalid": "{{PLURAL:$1|'A linea ccà abbascio|'E linee ccà abbascio}} dint'a lista nera 'e titole {{PLURAL:$1|è|songo}} invalide;\npe' piacere curriggite {{PLURAL:$1|chisto|chiste}} primm' 'e reggistrà:", + "titleblacklist-override": "Ignora 'a blacklist", + "titleblacklist-warning": "Attenziò: sta paggena se putesse cagnà surtanto 'a ll'ammenistrature o l'at'utente c' 'o deritto tboverride pecché currisponne 'a voce ccà d' 'a lista 'e titule bluccate, oj cann:
        $1", + "right-tboverride": "Sovrascrive 'a lista nera 'e titole o utente", + "right-tboverride-account": "Sovrascrive 'a lista nera 'utente", + "right-titleblacklistlog": "Vide 'o riggistro d' 'a lista nera", + "apihelp-titleblacklist-description": "Valida 'o titolo 'e narticolo, nomme 'e file, o nomme utente annanz'a l'elenco TitleBlacklist. ('a lista nera)", + "apihelp-titleblacklist-param-title": "'A stringa pe' validà annanz' 'a lista nira.", + "apihelp-titleblacklist-param-action": "L'aziona p' 'a cuntrullà.", + "apihelp-titleblacklist-param-nooverride": "Nun tentà 'e sovrascrivere 'a lista nera.", + "apihelp-titleblacklist-example-1": "Cuntrolla si [[Foo]] è miso dint'a lista nera p' 'o cagnà.", + "apihelp-titleblacklist-example-2": "Cuntrolla si [[Bar]] è miso dint'a lista nera p' 'o cagnà." +} diff --git a/extensions/TitleBlacklist/i18n/nl.json b/extensions/TitleBlacklist/i18n/nl.json index 42f10e8a..30c774cb 100644 --- a/extensions/TitleBlacklist/i18n/nl.json +++ b/extensions/TitleBlacklist/i18n/nl.json @@ -6,6 +6,8 @@ "Southparkfan" ] }, + "action-titleblacklistlog": "logboek zwarte lijst voor paginanamen te bekijken", + "log-name-titleblacklist": "Logboek zwarte lijst voor paginanamen", "titleblacklist-desc": "Voorkomt het aanmaken van pagina's en gebruikers via een [[MediaWiki:Titleblacklist|zwarte lijst]] en een [[MediaWiki:Titlewhitelist|witte lijst]]", "titleblacklist": "# Dit is een zwarte lijst voor paginanamen. Paginanamen en gebruikers die voldoen aan een reguliere expressie op deze pagina kunnen niet aangemaakt worden.\n# Gebruik \"#\" voor opmerkingen.\n# Regels in de zwarte lijst zijn niet hoofdlettergevoelig.", "titlewhitelist": "# Dit is een witte lijst voor paginanamen. Gebruik \"#\" voor opmerkingen.\n# Regels in de witte lijst zijn niet hoofdlettergevoelig.", @@ -16,5 +18,6 @@ "titleblacklist-invalid": "De volgende {{PLURAL:$1|regel|regels}} in de zwarte lijst voor paginanamen {{PLURAL:$1|is|zijn}} ongeldig.\nVerbeter die {{PLURAL:$1|regel|regels}} voordat u de lijst opslaat:", "titleblacklist-override": "Zwarte lijst negeren", "right-tboverride": "De zwarte lijst voor pagina- en gebruikersnamen omzeilen", - "right-tboverride-account": "Zwarte lijst voor gebruikersnamen negeren" + "right-tboverride-account": "Zwarte lijst voor gebruikersnamen negeren", + "right-titleblacklistlog": "Logboek zwarte lijst voor paginanamen bekijken" } diff --git a/extensions/TitleBlacklist/i18n/oc.json b/extensions/TitleBlacklist/i18n/oc.json index 56b096f5..c43f2047 100644 --- a/extensions/TitleBlacklist/i18n/oc.json +++ b/extensions/TitleBlacklist/i18n/oc.json @@ -12,5 +12,6 @@ "titleblacklist-forbidden-upload": "'''Un fichièr nomenat \"$2\" pòt pas èsser telecargat.'''
        Dins la lista negra, correspond a l'expression racionala : $1", "titleblacklist-forbidden-new-account": "Lo nom d’utilizaire « $2 » es estat interdich a la creacion.\nCorrespond a l’entrada seguenta de la lista negra : $1", "titleblacklist-invalid": "{{PLURAL:$1|La linha seguenta|Las linhas seguentas}} dins la lista negra dels títols {{PLURAL:$1|es invalida|son invalidas}} : sètz convidat a {{PLURAL:$1|la|las}} corregir abans de salvar.", + "titleblacklist-override": "Ignorar la lista negra", "right-tboverride": "Remplaçar la lista negra dels títols o dels noms d'utilizaires" } diff --git a/extensions/TitleBlacklist/i18n/pt.json b/extensions/TitleBlacklist/i18n/pt.json index d6441649..f18828ea 100644 --- a/extensions/TitleBlacklist/i18n/pt.json +++ b/extensions/TitleBlacklist/i18n/pt.json @@ -18,7 +18,6 @@ "titleblacklist-forbidden-new-account": "Foi bloqueada a criação de utilizadores com o nome \"$2\".\nO nome corresponde à seguinte entrada da lista negra: $1", "titleblacklist-invalid": "{{PLURAL:$1|A seguinte linha|As seguintes linhas}} da lista negra {{PLURAL:$1|é inválida|são inválidas}}. Por favor, {{PLURAL:$1|corrija-a|corrija-as}} antes de gravar:", "titleblacklist-override": "Ignorar a lista negra", - "titleblacklist-autoconfirmed-warning": "Nota: Esta página só pode ser editada por utilizadores autoconfirmados, pois corresponde com o seguinte título de entrada da lista negra:
        $1", "titleblacklist-warning": "Aviso: Esta página só pode ser editada por administradores e outros utilizadores com o privilégio tboverride, pois corresponde com o seguinte título de entrada da lista negra:
        $1", "right-tboverride": "Sobrepor a lista negra de títulos e nomes de utilizador", "right-tboverride-account": "Ignorar a lista negra de nomes de utilizador" diff --git a/extensions/TitleBlacklist/i18n/qqq.json b/extensions/TitleBlacklist/i18n/qqq.json index 342305a5..f88d2f7d 100644 --- a/extensions/TitleBlacklist/i18n/qqq.json +++ b/extensions/TitleBlacklist/i18n/qqq.json @@ -7,7 +7,8 @@ "The Evil IP address", "Umherirrender", "Yekrats", - "Amire80" + "Amire80", + "Nemo bis" ] }, "action-titleblacklistlog": "{{doc-action|titleblacklistlog}}", @@ -23,7 +24,6 @@ "titleblacklist-forbidden-new-account": "Parameters:\n* $1 - blacklist entry\n* $2 - username\n{{Related|Titleblacklist-forbidden}}", "titleblacklist-invalid": "Used as error message.\n\nThis message is followed by a list of the invalid lines.\n\nParameters:\n* $1 - number of invalid lines in the title blacklist", "titleblacklist-override": "Check box label on \"Create account\" form if the user has the user right ''tboverride-account''. If checked, the [[MediaWiki:Titleblacklist]] is ignored during account creation.", - "titleblacklist-autoconfirmed-warning": "Displayed when a user is editing a page that only autoconfirmed editors can edit due to the title blacklist. \"Autoconfirmed editors\" refers to the contents of the message {{msg-mw|Group-autoconfirmed}}.\n\nParameters:\n* $1 - blacklist entry", "titleblacklist-warning": "Displayed when a user is editing a page that only administrators (or custom user groups with the tboverride right) can edit due to the title blacklist. Parameters:\n* $1 - blacklist entry", "right-tboverride": "{{doc-right|tboverride}}", "right-tboverride-account": "{{doc-right|tboverride-account}}", @@ -33,5 +33,5 @@ "apihelp-titleblacklist-param-action": "{{doc-apihelp-param|titleblacklist|action}}", "apihelp-titleblacklist-param-nooverride": "{{doc-apihelp-param|titleblacklist|nooverride}}", "apihelp-titleblacklist-example-1": "{{doc-apihelp-example|titleblacklist}}", - "apihelp-titleblacklist-example-2": "{{doc-apihelp-example|titleblacklist}}" + "apihelp-titleblacklist-example-2": "Replace \"Bar\" with any example string suitable for your language, for instance the translation of \"Example\".\n----\n{{doc-apihelp-example|titleblacklist}}" } diff --git a/extensions/TitleBlacklist/i18n/roa-tara.json b/extensions/TitleBlacklist/i18n/roa-tara.json index c267766e..a0a39951 100644 --- a/extensions/TitleBlacklist/i18n/roa-tara.json +++ b/extensions/TitleBlacklist/i18n/roa-tara.json @@ -4,6 +4,7 @@ "Joetaras" ] }, + "action-titleblacklistlog": "'ndruche 'u titole de l'archivije de l'elenghe gnure", "titleblacklist-desc": "Permette a l'amministrature de vietà ccrejaziune de le pàggene e le cunde utinde pe 'na [[MediaWiki:Titleblacklist|lista gnore]] e [[MediaWiki:Titlewhitelist|lista vianghe]]", "titleblacklist": "# Stu titele jè in lista gnore. Le titele e l'utinde ca se ponne comborndà cu le espressiune regolare aqquà non ge ponne essere ccrejate.\n# Ause \"#\" pe le commende.\n# Quiste jè sensibbele a le maiuscole e le minuscole de partenze", "titlewhitelist": "# Stu titele jè in lista vianghe.\n# Ause \"#\" pe le commende.\n# Quiste jè sensibbele a le maiuscole e le minuscole de partenze", diff --git a/extensions/TitleBlacklist/i18n/ru.json b/extensions/TitleBlacklist/i18n/ru.json index 3ee01520..0de2580d 100644 --- a/extensions/TitleBlacklist/i18n/ru.json +++ b/extensions/TitleBlacklist/i18n/ru.json @@ -24,9 +24,11 @@ "titleblacklist-forbidden-new-account": "Запрещено иÑпользовать Ð¸Ð¼Ñ ÑƒÑ‡Ð°Ñтника «$2».\nÐ˜Ð¼Ñ ÑоответÑтвует Ñледующей запиÑи из чёрного ÑпиÑка: $1", "titleblacklist-invalid": "{{PLURAL:$1|1=Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтрока|Следующие Ñтроки}} в ÑпиÑке запрещённых названий {{PLURAL:$1|1=не ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼ регулÑрным выражением|не ÑвлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ регулÑрными выражениÑми}}. ПожалуйÑта, иÑправьте {{PLURAL:$1|1=её|их}} перед Ñохранением:", "titleblacklist-override": "Игнорировать чёрный ÑпиÑок", - "titleblacklist-autoconfirmed-warning": "Примечание: Эту Ñтраницу могут редактировать только автоподтверждённые учаÑтники, потому что, похоже, она Ñовпадает Ñо Ñледующей запиÑью из «чёрного ÑпиÑка» названий:
        $1", "titleblacklist-warning": "Примечание: Эту Ñтраницу могут редактировать только админиÑтраторы и другие учаÑтники Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ tboverride, потому что, похоже, она Ñовпадает Ñо Ñледующей запиÑью из «чёрного ÑпиÑка» названий:
        $1", "right-tboverride": "игнорирование чёрного ÑпиÑка имён Ñтраниц или учаÑтников", "right-tboverride-account": "игнорирование чёрного ÑпиÑка имён учаÑтников", - "right-titleblacklistlog": "проÑмотр журнала запрещённыx названий" + "right-titleblacklistlog": "проÑмотр журнала запрещённыx названий", + "apihelp-titleblacklist-param-action": "ДейÑтвие, которое должно быть проверено.", + "apihelp-titleblacklist-example-1": "Проверить, занеÑена ли ÑÑ‚Ð°Ñ‚ÑŒÑ [[Foo]] в чёрный ÑпиÑок", + "apihelp-titleblacklist-example-2": "Проверить, занеÑена ли ÑÑ‚Ð°Ñ‚ÑŒÑ [[Bar]] в чёрный ÑпиÑок Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" } diff --git a/extensions/TitleBlacklist/i18n/scn.json b/extensions/TitleBlacklist/i18n/scn.json new file mode 100644 index 00000000..d5e3e78c --- /dev/null +++ b/extensions/TitleBlacklist/i18n/scn.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Pippinu", + "Sarvaturi" + ] + }, + "titleblacklist-forbidden-edit": "La criazzioni di pàggini cûn tìtulu comu «$2» fu sbannuta.\nLu tìtulu currispunni a sta vuci dâ lista nìura: $1", + "titleblacklist-forbidden-move": "«$2» nun si pò spustari nta «$3», pirchì la criazzioni di tìtula comu «$3» fu sbannuta.\nStu tìtulu currispunni a sta vuci dâ lista nìura: $1", + "titleblacklist-forbidden-new-account": "La criazzioni di nomi d'utenti comu «$2» fu sbannuta.\nLu nomu currispunni a sta vuci dâ lista nìura: $1" +} diff --git a/extensions/TitleBlacklist/i18n/sr-ec.json b/extensions/TitleBlacklist/i18n/sr-ec.json index 111442c2..972aee3d 100644 --- a/extensions/TitleBlacklist/i18n/sr-ec.json +++ b/extensions/TitleBlacklist/i18n/sr-ec.json @@ -10,12 +10,13 @@ ] }, "titleblacklist-desc": "Допушта забрану Ñтварања Ñтраница Ñ Ð¾Ð´Ñ€ÐµÑ’ÐµÐ½Ð¸Ð¼ наÑловима: [[MediaWiki:Titleblacklist|црна лиÑта]] и [[MediaWiki:Titlewhitelist|бела лиÑта]].", - "titleblacklist": "# Ово је наÑлов црног ÑпиÑка. ÐаÑлови који Ñадрже регуларни израз из овог ÑпиÑка не могу бити направљени.\n# КориÑти \"#\" за коментаре.\n# Подразумевано је неоÑетљив на величину Ñлова", + "titleblacklist": "# Ово је наÑлов црног ÑпиÑка. ÐаÑлови који Ñадрже регуларни израз из овог ÑпиÑка не могу бити направљени.\n# КориÑти „#“ за коментаре.\n# Подразумевано је неоÑетљив на величину Ñлова", "titlewhitelist": "# Ово је бели ÑпиÑак наÑлова. КориÑти \"#\" за коментаре.\n# Подразумевано је неоÑетљив на величину Ñлова", "titleblacklist-forbidden-edit": "ÐаÑлов „$2“ налази Ñе на црној лиÑти.\nПоклапа Ñе Ñа Ñледећим уноÑом на црној лиÑти: $1", "titleblacklist-forbidden-upload": "Ðазив датотеке „$2“ је на црној лиÑти.\nПоклапа Ñе Ñа Ñледећим уноÑом на црној лиÑти: $1", "titleblacklist-forbidden-new-account": "КориÑничко име „$2“ налази Ñе на црној лиÑти.\nПоклапа Ñе Ñа Ñледећим уноÑом на црној лиÑти: $1", "titleblacklist-override": "Занемари црну лиÑту", - "right-tboverride": "заобилажење црне лиÑте наÑлова или кориÑничких имена", + "titleblacklist-warning": "Упозорење: ову Ñтраницу могу Ñамо да уређују админиÑтратори и кориÑници Ñа Ñледећим правом tboverride, зато што Ñе поклапа Ñа уноÑом у црној лиÑти:
        $1", + "right-tboverride": "заобилажење црног ÑпиÑка наÑлова или кориÑничких имена", "right-tboverride-account": "заобилажење црне лиÑте кориÑничких имена" } diff --git a/extensions/TitleBlacklist/i18n/sr-el.json b/extensions/TitleBlacklist/i18n/sr-el.json index bbd60fa1..1cd76458 100644 --- a/extensions/TitleBlacklist/i18n/sr-el.json +++ b/extensions/TitleBlacklist/i18n/sr-el.json @@ -6,12 +6,12 @@ ] }, "titleblacklist-desc": "DopuÅ¡ta zabranu stvaranja strana s odreÄ‘enim naslovima: [[MediaWiki:Titleblacklist|crna lista]] i [[MediaWiki:Titlewhitelist|bela lista]].", - "titleblacklist": "# Ovo je naslov crnog spiska. Naslovi koji sadrže regularni izraz iz ovog spiska ne mogu biti napravljeni.\n# Koristi \"#\" za komentare.\n# Podrazumevano je neosetljiv na veliÄinu slova", + "titleblacklist": "# Ovo je naslov crnog spiska. Naslovi koji sadrže regularni izraz iz ovog spiska ne mogu biti napravljeni.\n# Koristi „#“ za komentare.\n# Podrazumevano je neosetljiv na veliÄinu slova", "titlewhitelist": "# Ovo je beli spisak naslova. Koristi \"#\" za komentare.\n# Podrazumevano je neosetljiv na veliÄinu slova", "titleblacklist-forbidden-edit": "Naslov „$2“ nalazi se na crnoj listi.\nPoklapa se sa sledećim unosom na crnoj listi: $1", "titleblacklist-forbidden-upload": "Naziv datoteke „$2“ je na crnoj listi.\nPoklapa se sa sledećim unosom na crnoj listi: $1", "titleblacklist-forbidden-new-account": "KorisniÄko ime „$2“ nalazi se na crnoj listi.\nPoklapa se sa sledećim unosom na crnoj listi: $1", "titleblacklist-override": "Zanemari crnu listu", - "right-tboverride": "zaobilaženje crne liste naslova ili korisniÄkih imena", + "right-tboverride": "zaobilaženje crnog spiska naslova ili korisniÄkih imena", "right-tboverride-account": "zaobilaženje crne liste korisniÄkih imena" } diff --git a/extensions/TitleBlacklist/i18n/sv.json b/extensions/TitleBlacklist/i18n/sv.json index d54fcd72..da70905d 100644 --- a/extensions/TitleBlacklist/i18n/sv.json +++ b/extensions/TitleBlacklist/i18n/sv.json @@ -21,7 +21,6 @@ "titleblacklist-forbidden-new-account": "Användarnamnet \"$2\" kan inte skapas.\nDet matchar följande element i svartlistan: $1", "titleblacklist-invalid": "Följande {{PLURAL:$1|rad|rader}} i listan är {{PLURAL:$1|felaktig|felaktiga}}; {{PLURAL:$1|den|de}} mÃ¥ste rättas innan du kan spara:", "titleblacklist-override": "Ignorera svartlistan", - "titleblacklist-autoconfirmed-warning": "Obs: Denna sida kan endast redigeras av användarna med autoconfirmed-rättigheten eftersom den matchar följande post i svartlistan över titlar:
        $1", "titleblacklist-warning": "Varning: Denna sida kan endast redigeras av administratörer och andra användare med tboverride-rättigheten eftersom den matchar följande post i svartlistan över titlar:
        $1", "right-tboverride": "Ã…sidosätt svartlistan med titlar och användarnamn", "right-tboverride-account": "Kör över svartlistan för användarnamn", diff --git a/extensions/TitleBlacklist/i18n/uk.json b/extensions/TitleBlacklist/i18n/uk.json index 1d1a63ba..b7094fc5 100644 --- a/extensions/TitleBlacklist/i18n/uk.json +++ b/extensions/TitleBlacklist/i18n/uk.json @@ -25,9 +25,14 @@ "titleblacklist-forbidden-new-account": "Заборонено викориÑтовувати ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача «$2».\nІм'Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” наÑтупному запиÑу з чорного ÑпиÑку: $1", "titleblacklist-invalid": "{{PLURAL:$1|1=ÐаÑтупний Ñ€Ñдок|ÐаÑтупні Ñ€Ñдки}} ÑпиÑку заборонених назв Ñ” {{PLURAL:$1|1=помилковим|помилковими}};\nбудь лаÑка, виправте {{PLURAL:$1|1=його|Ñ—Ñ…}} перед збереженнÑм:", "titleblacklist-override": "Ігнорувати чорний ÑпиÑок", - "titleblacklist-autoconfirmed-warning": "Зверніть увагу: Цю Ñторінку можуть редагувати лише автопідтверджені кориÑтувачі, оÑкільки вона збігаєтьÑÑ Ð· наÑтупним запиÑом із «чорного ÑпиÑку» назв:
        $1", "titleblacklist-warning": "Зверніть увагу: Цю Ñторінку можуть редагувати лише адмініÑтратори та інші кориÑтувачі з правами tboverride, оÑкільки вона збігаєтьÑÑ Ð· наÑтупним запиÑом із «чорного ÑпиÑку» назв:
        $1", "right-tboverride": "Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð¾Ñ€Ð½Ð¾Ð³Ð¾ ÑпиÑку назв Ñторінок або кориÑтувачів", "right-tboverride-account": "Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð¾Ñ€Ð½Ð¾Ð³Ð¾ ÑпиÑку імен кориÑтувачів", - "right-titleblacklistlog": "переглÑд чорного ÑпиÑку назв" + "right-titleblacklistlog": "переглÑд чорного ÑпиÑку назв", + "apihelp-titleblacklist-description": "Перевірити назву Ñтатті, файлу або ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача у чорному ÑпиÑку назв.", + "apihelp-titleblacklist-param-title": "РÑдок Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ у чорному ÑпиÑку.", + "apihelp-titleblacklist-param-action": "ДіÑ, Ñку треба перевірити.", + "apihelp-titleblacklist-param-nooverride": "Ðе намагайтеÑÑ Ð¾Ð±Ñ–Ð¹Ñ‚Ð¸ чорний ÑпиÑок назв.", + "apihelp-titleblacklist-example-1": "Перевірити, чи ÑÑ‚Ð°Ñ‚Ñ‚Ñ [[Foo]] занеÑена в чорний ÑпиÑок", + "apihelp-titleblacklist-example-2": "Перевірити, чи ÑÑ‚Ð°Ñ‚Ñ‚Ñ [[Bar]] занеÑена в чорний ÑпиÑок редагуваннÑ" } diff --git a/extensions/TitleBlacklist/i18n/vi.json b/extensions/TitleBlacklist/i18n/vi.json index a433f84b..4ab28b2f 100644 --- a/extensions/TitleBlacklist/i18n/vi.json +++ b/extensions/TitleBlacklist/i18n/vi.json @@ -18,7 +18,6 @@ "titleblacklist-forbidden-new-account": "Không được tạo ra tài khoản “$2â€.\nNó trùng tên vá»›i má»™t khoản mục trong danh sách Ä‘en: $1", "titleblacklist-invalid": "{{PLURAL:$1|Dòng|Những dòng}} sau đây trong danh sách Ä‘en vá» tên trang không hợp lệ; xin hãy sá»­a chữa {{PLURAL:$1|nó|chúng}} để tuân theo cú pháp biểu thức chính quy trÆ°á»›c khi lÆ°u trang:", "titleblacklist-override": "Bá» qua danh sách Ä‘en", - "titleblacklist-autoconfirmed-warning": "LÆ°u ý: Chỉ có những ngÆ°á»i có quyá»n autoconfirmed được phép sá»­a đổi trang này vì nó khá»›p vá»›i mục sau trong danh sách Ä‘en tiêu Ä‘á»:
        $1", "titleblacklist-warning": "Cảnh báo: Chỉ có các bảo quản viên và những ngÆ°á»i khác có quyá»n tboverride được phép sá»­a đổi trang này vì nó khá»›p vá»›i mục sau trong danh sách Ä‘en tiêu Ä‘á»:
        $1", "right-tboverride": "Bá» qua các danh sách Ä‘en tiêu Ä‘á» và tên ngÆ°á»i dùng", "right-tboverride-account": "Ghi đè lên danh sách Ä‘en tên ngÆ°á»i dùng", diff --git a/extensions/TitleBlacklist/i18n/yue.json b/extensions/TitleBlacklist/i18n/yue.json index 280c4d29..58245563 100644 --- a/extensions/TitleBlacklist/i18n/yue.json +++ b/extensions/TitleBlacklist/i18n/yue.json @@ -1,11 +1,12 @@ { "@metadata": { "authors": [ - "Shinjiman" + "Shinjiman", + "CRCHF" ] }, "titleblacklist-desc": "容許ç¦æ­¢é–‹æŒ‡å®šæ¨™é¡Œå˜…版: [[MediaWiki:Titleblacklist]] åŒ [[MediaWiki:Titlewhitelist]]", - "titleblacklist": "# 呢個係一個標題黑å單。åŒå‘¢åº¦é…åˆæ­£è¦è¡¨é”å¼å˜…標題係唔å¯ä»¥æ–°é–‹å˜…。\n# 用 \"#\" 去åšè¨»è§£ã€‚", + "titleblacklist": "# 呢個係標題黑å單。åŒå‘¢åº¦é…åˆæ­£è¦è¡¨é”å¼å˜…標題係唔å¯ä»¥æ–°é–‹å˜…。\n# 用 \"#\" 去åšè¨»è§£ã€‚", "titlewhitelist": "# 呢個係一個標題白å單。 用 \"#\" 去åšè¨»è§£", "titleblacklist-forbidden-edit": "個標題 \"$2\" 已經ç¦æ­¢å’—去開版。佢åŒä¸‹é¢é»‘å單嘅項目é…åˆ: $1", "titleblacklist-forbidden-move": "\"$2\" å””å¯ä»¥æ¬åˆ°åŽ» \"$3\",由於個標題 \"$3\" 已經ç¦æ­¢å’—去開。佢åŒä¸‹é¢é»‘å單嘅項目é…åˆ: $1", diff --git a/extensions/TitleBlacklist/i18n/zh-hans.json b/extensions/TitleBlacklist/i18n/zh-hans.json index 45c93522..992ee7d6 100644 --- a/extensions/TitleBlacklist/i18n/zh-hans.json +++ b/extensions/TitleBlacklist/i18n/zh-hans.json @@ -25,7 +25,6 @@ "titleblacklist-forbidden-new-account": "用户å“$2â€å·²è¢«ç¦æ­¢åˆ›å»ºã€‚\n其与以下黑åå•é¡¹åŒ¹é…:$1", "titleblacklist-invalid": "标题黑åå•ä¸­ä»¥ä¸‹{{PLURAL:$1|一行|多行}}无效;请在ä¿å­˜å‰æ”¹æ­£{{PLURAL:$1|它|它们}}:", "titleblacklist-override": "忽略黑åå•", - "titleblacklist-autoconfirmed-warning": "注æ„:此页é¢åªèƒ½ç”±è‡ªåŠ¨ç¡®è®¤ç”¨æˆ·ç¼–辑,因为它匹é…以下标题黑åå•ï¼š
        $1", "titleblacklist-warning": "警告:此页é¢åªèƒ½ç”±ç®¡ç†å‘˜å’Œå…¶ä»–拥有tboverrideæƒé™çš„用户编辑,因为它匹é…以下标题黑åå•ï¼š
        $1", "right-tboverride": "覆盖标题或用户å黑åå•", "right-tboverride-account": "覆盖用户å黑åå•", diff --git a/extensions/TitleBlacklist/i18n/zh-hant.json b/extensions/TitleBlacklist/i18n/zh-hant.json index 9ff9db4a..4b7074d4 100644 --- a/extensions/TitleBlacklist/i18n/zh-hant.json +++ b/extensions/TitleBlacklist/i18n/zh-hant.json @@ -25,7 +25,6 @@ "titleblacklist-forbidden-new-account": "使用者å稱 \"$2\" 已被ç¦æ­¢ä½¿ç”¨ã€‚\n該å稱符åˆä»¥ä¸‹å°éŽ–清單項目:$1", "titleblacklist-invalid": "標題å°éŽ–清單中的下列{{PLURAL:$1|一行|多行}}無效;\n在儲存之å‰è«‹å…ˆä¿®æ­£ï¼š", "titleblacklist-override": "忽略å°éŽ–清單", - "titleblacklist-autoconfirmed-warning": "注æ„:此é é¢ç¬¦åˆä¸‹åˆ—標題å°éŽ–清單項目,僅å¯ç”±æ“有 å·²è‡ªå‹•ç¢ºèª æ¬Šé™çš„使用者編輯:
        $1", "titleblacklist-warning": "警告:此é é¢ç¬¦åˆä¸‹åˆ—標題å°éŽ–清單項目,僅å¯ç”±ç®¡ç†å“¡æˆ–æ“有 tboverride 權é™çš„使用者編輯:
        $1", "right-tboverride": "覆蓋標題或使用者å稱黑åå–®", "right-tboverride-account": "覆蓋使用者å稱黑åå–®", diff --git a/extensions/WikiEditor/Gruntfile.js b/extensions/WikiEditor/Gruntfile.js new file mode 100644 index 00000000..5a87e7b6 --- /dev/null +++ b/extensions/WikiEditor/Gruntfile.js @@ -0,0 +1,19 @@ +/*jshint node:true */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-banana-checker' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + + var conf = grunt.file.readJSON( 'extension.json' ); + grunt.initConfig( { + banana: conf.MessagesDirs, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/extensions/WikiEditor/WikiEditor.hooks.php b/extensions/WikiEditor/WikiEditor.hooks.php index 6dfdb691..ccb54480 100644 --- a/extensions/WikiEditor/WikiEditor.hooks.php +++ b/extensions/WikiEditor/WikiEditor.hooks.php @@ -53,22 +53,6 @@ class WikiEditorHooks { 'ext.wikiEditor.dialogs', ), ), - 'hidesig' => array( - 'preferences' => array( - 'wikieditor-toolbar-hidesig' => array( - 'type' => 'toggle', - 'label-message' => 'wikieditor-toolbar-hidesig', - 'section' => 'editing/editor', - ), - ), - 'requirements' => array( - 'wikieditor-toolbar-hidesig' => true, - 'usebetatoolbar' => true, - ), - 'modules' => array( - 'ext.wikiEditor.toolbar.hideSig', - ), - ), /* Labs Features */ @@ -118,8 +102,6 @@ class WikiEditorHooks { 'toolbar' => array( 'global' => false, 'user' => true ), // Provides interactive tools 'dialogs' => array( 'global' => false, 'user' => true ), - // Hide signature button from main namespace - 'hidesig' => array( 'global' => true, 'user' => false ), /* Textarea / i-frame compatible, but still experimental and unstable (do not deploy!) */ @@ -193,6 +175,10 @@ class WikiEditorHooks { if ( !class_exists( 'EventLogging' ) ) { return false; } + // Sample 6.25% (via hex digit) + if ( $data['editingSessionId'][0] > '0' ) { + return false; + } $user = $article->getContext()->getUser(); $page = $article->getPage(); @@ -204,7 +190,6 @@ class WikiEditorHooks { 'editor' => 'wikitext', 'platform' => 'desktop', // FIXME 'integration' => 'page', - 'page.length' => -1, // FIXME 'page.id' => $page->getId(), 'page.title' => $title->getPrefixedText(), 'page.ns' => $title->getNamespace(), @@ -218,7 +203,7 @@ class WikiEditorHooks { $data['user.class'] = 'IP'; } - return EventLogging::logEvent( 'Edit', 11448630, $data ); + return EventLogging::logEvent( 'Edit', 13457736, $data ); } /** @@ -293,9 +278,10 @@ class WikiEditorHooks { $req = $outputPage->getContext()->getRequest(); $editingStatsId = $req->getVal( 'editingStatsId' ); - if ( !$editingStatsId ) { + if ( !$editingStatsId || !$req->wasPosted() ) { $editingStatsId = self::getEditingStatsId(); } + $outputPage->addHTML( Xml::element( 'input', @@ -362,6 +348,7 @@ class WikiEditorHooks { public static function resourceLoaderGetConfigVars( &$vars ) { // expose magic words for use by the wikieditor toolbar WikiEditorHooks::getMagicWords( $vars ); + return true; } @@ -427,20 +414,6 @@ class WikiEditorHooks { } - /** - * Adds WikiEditor JS to the output. - * - * This is attached to the MediaWiki 'BeforePageDisplay' hook. - * - * @param OutputPage $output - * @param Skin $skin - * @return boolean - */ - public static function onBeforePageDisplay( OutputPage &$output, Skin &$skin ) { - $output->addModules( array( 'ext.wikiEditor.init' ) ); - return true; - } - /** * Gets a 32 character alphanumeric random string to be used for stats. * @return string diff --git a/extensions/WikiEditor/composer.json b/extensions/WikiEditor/composer.json index 800bf156..18feb337 100644 --- a/extensions/WikiEditor/composer.json +++ b/extensions/WikiEditor/composer.json @@ -1,7 +1,8 @@ { + "license": "GPL-2.0+", "require-dev": { - "jakub-onderka/php-parallel-lint": "0.8.0", - "mediawiki/mediawiki-codesniffer": "0.1.0" + "jakub-onderka/php-parallel-lint": "0.9", + "mediawiki/mediawiki-codesniffer": "0.3.0" }, "scripts": { "test": [ diff --git a/extensions/WikiEditor/extension.json b/extensions/WikiEditor/extension.json index d8889517..1cb026c7 100644 --- a/extensions/WikiEditor/extension.json +++ b/extensions/WikiEditor/extension.json @@ -1,7 +1,8 @@ { "name": "WikiEditor", - "version": "0.4.0", + "version": "0.5.0", "author": [ + "Derk-Jan Hartman", "Trevor Parscal", "Roan Kattouw", "Nimish Gautam", @@ -9,6 +10,7 @@ ], "url": "https://www.mediawiki.org/wiki/Extension:WikiEditor", "descriptionmsg": "wikieditor-desc", + "license-name": "GPL-2.0+", "type": "other", "callback": "WikiEditorHooks::onRegistration", "MessagesDirs": { @@ -38,9 +40,6 @@ "EditPage::showEditForm:fields": [ "WikiEditorHooks::editPageShowEditFormFields" ], - "BeforePageDisplay": [ - "WikiEditorHooks::onBeforePageDisplay" - ], "EditPage::attemptSave": [ "WikiEditorHooks::editPageAttemptSave" ], @@ -55,7 +54,8 @@ "styles": "jquery.wikiEditor.less", "dependencies": [ "jquery.client", - "jquery.textSelection" + "jquery.textSelection", + "mediawiki.language" ], "messages": [ "wikieditor-wikitext-tab", @@ -81,12 +81,12 @@ "scripts": "jquery.wikiEditor.dialogs.config.js", "styles": "jquery.wikiEditor.dialogs.config.less", "dependencies": [ - "jquery.mwExtension", "jquery.wikiEditor", "jquery.wikiEditor.dialogs", "jquery.wikiEditor.toolbar.i18n", "jquery.suggestions", "mediawiki.api", + "mediawiki.RegExp", "mediawiki.Title", "mediawiki.jqueryMsg" ], @@ -101,7 +101,14 @@ "wikieditor-toolbar-file-format", "wikieditor-toolbar-tool-file-insert", "wikieditor-toolbar-tool-file-cancel" - ] + ], + "templates": { + "dialogInsertFile.html": "templates/dialogInsertFile.html", + "dialogInsertLink.html": "templates/dialogInsertLink.html", + "dialogInsertReference.html": "templates/dialogInsertReference.html", + "dialogInsertTable.html": "templates/dialogInsertTable.html", + "dialogReplace.html": "templates/dialogReplace.html" + } }, "jquery.wikiEditor.preview": { "group": "ext.wikiEditor", @@ -323,6 +330,9 @@ "wikieditor-toolbar-help-content-reference-description", "wikieditor-toolbar-help-content-reference-syntax", "wikieditor-toolbar-help-content-reference-result", + "wikieditor-toolbar-help-content-named-reference-description", + "wikieditor-toolbar-help-content-named-reference-syntax", + "wikieditor-toolbar-help-content-named-reference-result", "wikieditor-toolbar-help-content-rereference-description", "wikieditor-toolbar-help-content-rereference-syntax", "wikieditor-toolbar-help-content-rereference-result", @@ -345,7 +355,8 @@ "scripts": "ext.wikiEditor.js", "styles": "ext.wikiEditor.less", "dependencies": [ - "jquery.wikiEditor" + "jquery.wikiEditor", + "mediawiki.user" ] }, "ext.wikiEditor.dialogs": { @@ -399,12 +410,9 @@ ] }, "ext.wikiEditor.toolbar.styles": { + "position": "top", "group": "ext.wikiEditor", "styles": "ext.wikiEditor.toolbar.styles.less" - }, - "ext.wikiEditor.toolbar.hideSig": { - "group": "ext.wikiEditor", - "scripts": "ext.wikiEditor.toolbar.hideSig.js" } }, "ResourceFileModulePaths": { @@ -416,5 +424,6 @@ }, "AutoloadClasses": { "WikiEditorHooks": "WikiEditor.hooks.php" - } + }, + "manifest_version": 1 } diff --git a/extensions/WikiEditor/i18n/af.json b/extensions/WikiEditor/i18n/af.json index 75f30652..d67a5867 100644 --- a/extensions/WikiEditor/i18n/af.json +++ b/extensions/WikiEditor/i18n/af.json @@ -29,7 +29,6 @@ "wikieditor-toolbar-desc": "Wysigingsbalk met verhoogde bruikbaarheid", "wikieditor-toolbar-preference": "Gebruik gevorderde redigeringsbalk", "wikieditor-toolbar-dialogs-preference": "Aktiveer dialoog vir die byvoeging van skakels, tabelle en meer", - "wikieditor-toolbar-hidesig": "Steek die ondertekening knoppie van die bladsye in die hoof naamruimte", "wikieditor-toolbar-loading": "Besig om te laai...", "wikieditor-toolbar-tool-bold": "Vetdruk", "wikieditor-toolbar-tool-bold-example": "Vetgedrukte teks", @@ -56,6 +55,7 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "Ongeldige bladsynaam", "wikieditor-toolbar-tool-link-int-target-status-external": "Eksterne skakel", "wikieditor-toolbar-tool-link-int-target-status-loading": "Kontroleer of die bladsy reeds bestaan...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "Dubbelsinnigheidsbladsy", "wikieditor-toolbar-tool-link-int-invalid": "Die titel wat u verskaf het is ongeldig.", "wikieditor-toolbar-tool-link-lookslikeinternal": "Die URL wat u verskaf het lyk asof dit bedoel is as skakel na 'n ander wikibladsy.\nWil u dit na 'n interne skakel verander?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Interne skakel", @@ -188,14 +188,14 @@ "wikieditor-toolbar-help-content-file-description": "Ingebedde lêer", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Voorbeeld.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Verwysing", - "wikieditor-toolbar-help-content-reference-syntax": "Bladsyteks.<ref name=\"test\">[http://www.voorbeeld.org Skakel se teks], addisionele teks.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Bladsyteks.<ref>[http://www.voorbeeld.org Skakel se teks], addisionele teks.</ref>", "wikieditor-toolbar-help-content-reference-result": "Bladsyteks [1]", "wikieditor-toolbar-help-content-rereference-description": "Hergebruik van dieselfde verwysing", - "wikieditor-toolbar-help-content-rereference-result": "Bladsyteks [1]", + "wikieditor-toolbar-help-content-rereference-result": "Bladsyteks [2]", "wikieditor-toolbar-help-content-showreferences-description": "Wys verwysings", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Skakel se teks, addisionele teks.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Handtekening met tydstempel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Gebruikersnaam (bespreking) 15:54, 10 Junie 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Gebruikersnaam (bespreking) 15:54, 10 Junie 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Handtekening", "wikieditor-toolbar-help-content-signature-result": "Gebruikersnaam (bespreking)", "wikieditor-toolbar-help-content-indent-description": "Indenteer", diff --git a/extensions/WikiEditor/i18n/aln.json b/extensions/WikiEditor/i18n/aln.json index 87e9f399..39df7f09 100644 --- a/extensions/WikiEditor/i18n/aln.json +++ b/extensions/WikiEditor/i18n/aln.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Mdupont", - "Macofe" + "Macofe", + "Ammartivari" ] }, "wikieditor": "redaktimi i avancuar wikitext interface", @@ -18,7 +19,7 @@ "wikieditor-publish-button-cancel": "Anuloj", "wikieditor-publish-dialog-title": "Publikimi në {{SITENAME}}", "wikieditor-publish-dialog-summary": "përmbledhje Edit (përshkruaj shkurtimisht ndryshimet që keni bërë):", - "wikieditor-publish-dialog-minor": "Minor redakto", + "wikieditor-publish-dialog-minor": "Redaktim i vogël", "wikieditor-publish-dialog-watch": "Watch këtë faqe", "wikieditor-publish-dialog-publish": "Publikoj", "wikieditor-publish-dialog-goback": "Kthehem", @@ -173,14 +174,14 @@ "wikieditor-toolbar-help-content-file-description": "Embedded file", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referim", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst faqesh. name=\"test\"> ref", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst faqesh.> ref", "wikieditor-toolbar-help-content-reference-result": "Tekst faqesh. [1]", "wikieditor-toolbar-help-content-rereference-description": "përdorimin shtesë të njëjtën referencë", - "wikieditor-toolbar-help-content-rereference-result": "Tekst faqesh. [1]", + "wikieditor-toolbar-help-content-rereference-result": "Tekst faqesh. [2]", "wikieditor-toolbar-help-content-showreferences-description": "referenca Display", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Teksti Link , teksti shtesë.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Nënshkrimi me gjithë kohë", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Emri i përdoruesit ( të folur ) 15:54, 10 Qershor 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Emri i përdoruesit ( të folur ) 15:54, 10 Qershor 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Nënshkrim", "wikieditor-toolbar-help-content-signature-result": "Emri i përdoruesit ( të folur )", "wikieditor-toolbar-help-content-indent-description": "Porosit", diff --git a/extensions/WikiEditor/i18n/an.json b/extensions/WikiEditor/i18n/an.json index fe431353..c39e3a31 100644 --- a/extensions/WikiEditor/i18n/an.json +++ b/extensions/WikiEditor/i18n/an.json @@ -175,14 +175,14 @@ "wikieditor-toolbar-help-content-file-description": "Fichero incorporato", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eixemplo.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referencia", - "wikieditor-toolbar-help-content-reference-syntax": "Texto d'a pachina.<ref name=\"test\">[http://www.example.org Texto d'o vinclo], texto adicional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Texto d'a pachina.<ref>[http://www.example.org Texto d'o vinclo], texto adicional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Texto d'a pachina.[1]", "wikieditor-toolbar-help-content-rereference-description": "Uso adicional d'a mesma referencia", - "wikieditor-toolbar-help-content-rereference-result": "Texto d'a pachina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Texto d'a pachina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Amostrar as referencias", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Texto d'o vinclo, texto adicional.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Sinyatura, calendata y hora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nombre d'usuario (discusión) 15:54, 10 de chunio de 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nombre d'usuario (discusión) 15:54, 10 de chunio de 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Sinyatura", "wikieditor-toolbar-help-content-signature-result": "Nombre d'usuario (discusión)", "wikieditor-toolbar-help-content-indent-description": "Indentación", diff --git a/extensions/WikiEditor/i18n/ar.json b/extensions/WikiEditor/i18n/ar.json index b02ef89c..83a74d47 100644 --- a/extensions/WikiEditor/i18n/ar.json +++ b/extensions/WikiEditor/i18n/ar.json @@ -35,7 +35,6 @@ "wikieditor-toolbar-desc": "شريط تحرير الصÙحات مع تحسين الاستخدامية", "wikieditor-toolbar-preference": "تÙعيل شريط أدوات التحرير المحسن", "wikieditor-toolbar-dialogs-preference": "تÙعيل حوارات إدراج الوصلات والجداول وخاصية البحث والاستبدال", - "wikieditor-toolbar-hidesig": "أخ٠زر التوقيع ÙÙŠ صÙحات النطاق الرئيسي", "wikieditor-toolbar-loading": "تحميل...", "wikieditor-toolbar-tool-bold": "غليظ", "wikieditor-toolbar-tool-bold-example": "نص غليظ", @@ -194,15 +193,16 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. عنصر قائمة
        2. عنصر قائمة
        ", "wikieditor-toolbar-help-content-file-description": "مل٠مضمن", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "نص التعليق", "wikieditor-toolbar-help-content-reference-description": "مرجع", - "wikieditor-toolbar-help-content-reference-syntax": "نص الصÙحة.<ref name=\"test\">[http://www.example.org نص الوصلة]ØŒ نص إضاÙÙŠ.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "نص الصÙحة.<ref>[http://www.example.org نص الوصلة]ØŒ نص إضاÙÙŠ.</ref>", "wikieditor-toolbar-help-content-reference-result": "نص الصÙحة.[1]", "wikieditor-toolbar-help-content-rereference-description": "استخدام Ù†Ùس المرجع مرة أخرى", - "wikieditor-toolbar-help-content-rereference-result": "نص الصÙحة.[1]", + "wikieditor-toolbar-help-content-rereference-result": "نص الصÙحة.[2]", "wikieditor-toolbar-help-content-showreferences-description": "اعرض المراجع", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ نص الرابط، نص إضاÙÙŠ.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "توقيع مع طابع زمني", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "اسم المستخدم (ناقش) 15:54ØŒ 10 يونيو 2009 (ت ع Ù…)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--اسم المستخدم (ناقش) 15:54ØŒ 10 يونيو 2009 (ت ع Ù…)", "wikieditor-toolbar-help-content-signature-description": "توقيع", "wikieditor-toolbar-help-content-signature-result": "اسم المستخدم (ناقش)", "wikieditor-toolbar-help-content-indent-description": "إزاحة", diff --git a/extensions/WikiEditor/i18n/arz.json b/extensions/WikiEditor/i18n/arz.json index 0a9da54f..749e2ca8 100644 --- a/extensions/WikiEditor/i18n/arz.json +++ b/extensions/WikiEditor/i18n/arz.json @@ -163,14 +163,14 @@ "wikieditor-toolbar-help-content-file-description": "Embedded file", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "مرجع", - "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref name=\"test\">[http://www.example.org Link text], additional text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref>[http://www.example.org Link text], additional text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Page text.[1]", "wikieditor-toolbar-help-content-rereference-description": "إستعمل تانى Ù†Ùس المرجع", - "wikieditor-toolbar-help-content-rereference-result": "Page text.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Page text.[2]", "wikieditor-toolbar-help-content-showreferences-description": "اعرض المراجع", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Link text, additional text.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "الامضا مع ختم الوقت", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "اسم اليوزر (كلّمه) 15:54,†10 يونيه 2009 â€(UTC)â€", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--اسم اليوزر (كلّمه) 15:54,†10 يونيه 2009 â€(UTC)â€", "wikieditor-toolbar-help-content-signature-description": "امضا", "wikieditor-toolbar-help-content-signature-result": "اسم اليوزر (كلّم)", "wikieditor-toolbar-help-content-indent-description": "Indent", diff --git a/extensions/WikiEditor/i18n/as.json b/extensions/WikiEditor/i18n/as.json index e54b0776..0df5968a 100644 --- a/extensions/WikiEditor/i18n/as.json +++ b/extensions/WikiEditor/i18n/as.json @@ -20,7 +20,7 @@ "wikieditor-publish-button-publish": "পà§à§°à¦•à¦¾à¦¶ কৰক", "wikieditor-publish-button-cancel": "বাতিল কৰক", "wikieditor-publish-dialog-title": "{{SITENAME}} ত পà§à§°à¦•à¦¾à¦¶ কৰক", - "wikieditor-publish-dialog-summary": "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ সাৰাংশ (আপà§à¦¨à¦¿ কি পৰিবরà§à¦¤à¦¨ কৰিছে সেই বিষয়ে অলপ লিখক):", + "wikieditor-publish-dialog-summary": "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ সাৰাংশ (আপà§à¦¨à¦¿ কি পৰিৱরà§à¦¤à¦¨ কৰিছে সেই বিষয়ে অলপ লিখক):", "wikieditor-publish-dialog-minor": "অগà§à§°à§à¦¤à§à¦¬à¦ªà§‚ৰà§à¦£ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾", "wikieditor-publish-dialog-watch": "à¦à¦‡ পৃষà§à¦ à¦¾à¦Ÿà§‹ লকà§à¦·à§à¦¯ কৰক", "wikieditor-publish-dialog-publish": "পà§à§°à¦•à¦¾à¦¶ কৰক", @@ -127,12 +127,12 @@ "wikieditor-toolbar-tool-table-invalidnumber": "আপà§à¦¨à¦¿ উলমà§à¦¬ আৰৠপথালী শাৰীৰ বৈধ সংখà§à¦¯à¦¾ লিখাত ভà§à¦² কৰিছে।", "wikieditor-toolbar-tool-table-zero": "আপà§à¦¨à¦¿ শূনà§à¦¯ উলমà§à¦¬ বা পথালী শাৰী থকা টেবà§à¦² যোগ কৰিব নোৱাৰে।", "wikieditor-toolbar-tool-replace": "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ আৰৠপà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨", - "wikieditor-toolbar-tool-replace-title": "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ আৰৠপà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨", + "wikieditor-toolbar-tool-replace-title": "সনà§à¦§à¦¾à¦¨ আৰৠপà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨", "wikieditor-toolbar-tool-replace-search": "ৰ কাৰণে সনà§à¦§à¦¾à¦¨ কৰক", "wikieditor-toolbar-tool-replace-replace": "ইয়াৰ লগত পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ কৰক:", "wikieditor-toolbar-tool-replace-case": "আখৰৰ ফলা মিলাওক", - "wikieditor-toolbar-tool-replace-regex": "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ বাকà§à¦¯à¦• নিয়মিত à¦à¦•à§à¦¸à¦ªà§à§°à§‡à¦›à¦¨ হিচাপে গণà§à¦¯ কৰক", - "wikieditor-toolbar-tool-replace-button-findnext": "পৰৱৰà§à¦¤à§€ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨", + "wikieditor-toolbar-tool-replace-regex": "সনà§à¦§à¦¾à¦¨ বাকà§à¦¯à¦• নিয়মিত à¦à¦•à§à¦¸à¦ªà§à§°à§‡à¦›à¦¨ হিচাপে গণà§à¦¯ কৰক", + "wikieditor-toolbar-tool-replace-button-findnext": "পৰৱৰà§à¦¤à§€ সনà§à¦§à¦¾à¦¨", "wikieditor-toolbar-tool-replace-button-replace": "পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨", "wikieditor-toolbar-tool-replace-button-replaceall": "সকলো পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨", "wikieditor-toolbar-tool-replace-close": "বনà§à¦§", @@ -188,14 +188,14 @@ "wikieditor-toolbar-help-content-file-description": "à¦à¦®à§à¦¬à§‡à¦¡à§‡à¦¡ ফাইল", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "তথà§à¦¯à¦¸à¦‚গà§à§°à¦¹", - "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref name=\"test\">[http://www.example.org Link text], additional text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref>[http://www.example.org Link text], additional text.</ref>", "wikieditor-toolbar-help-content-reference-result": "পৃষà§à¦ à¦¾à§° পাঠà§à¦¯à¥¤[1]", "wikieditor-toolbar-help-content-rereference-description": "à¦à¦Ÿà¦¾ তথà§à¦¯ উতà§à¦¸à§° à¦à¦•à¦¾à¦§à¦¿à¦• বà§à¦¯à§±à¦¹à¦¾à§°", - "wikieditor-toolbar-help-content-rereference-result": "পৃষà§à¦ à¦¾à§° পাঠà§à¦¯à¥¤[1]", + "wikieditor-toolbar-help-content-rereference-result": "পৃষà§à¦ à¦¾à§° পাঠà§à¦¯à¥¤[2]", "wikieditor-toolbar-help-content-showreferences-description": "তথà§à¦¯à¦¸à¦‚গà§à§°à¦¹ পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰক", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ সংযোগ পাঠà§à¦¯, অধিক পাঠà§à¦¯à¥¤
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "সময়ৰ সৈতে আপোনাৰ সà§à¦¬à¦¾à¦•à§à¦·à§°", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ (আলোচনা) ১৫:৫৪, ১০ জà§à¦¨ ২০০৯ (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ (আলোচনা) ১৫:৫৪, ১০ জà§à¦¨ ২০০৯ (UTC)", "wikieditor-toolbar-help-content-signature-description": "সà§à¦¬à¦¾à¦•à§à¦·à§°", "wikieditor-toolbar-help-content-signature-result": "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ (আলোচনা)", "wikieditor-toolbar-help-content-indent-description": "ইণà§à¦¡à§‡à¦£à§à¦Ÿ", diff --git a/extensions/WikiEditor/i18n/ast.json b/extensions/WikiEditor/i18n/ast.json index f96dd1e8..188ba55a 100644 --- a/extensions/WikiEditor/i18n/ast.json +++ b/extensions/WikiEditor/i18n/ast.json @@ -26,7 +26,6 @@ "wikieditor-toolbar-desc": "Barra de ferramientes de la páxina d'edición con usabilidá enantada", "wikieditor-toolbar-preference": "Activar a barra d'edición enantada", "wikieditor-toolbar-dialogs-preference": "Activar los asistentes p'amestar enllaces y tables, y tamién la función de guetar y trocar", - "wikieditor-toolbar-hidesig": "Anubrir el botón de robla nes páxines del espaciu de nomes principal", "wikieditor-toolbar-loading": "Cargando...", "wikieditor-toolbar-tool-bold": "Negrina", "wikieditor-toolbar-tool-bold-example": "Testu en negrina", @@ -121,7 +120,7 @@ "wikieditor-toolbar-tool-table-preview": "Vista previa", "wikieditor-toolbar-tool-table-insert": "Inxertar", "wikieditor-toolbar-tool-table-cancel": "Encaboxar", - "wikieditor-toolbar-tool-table-toomany": "Con esti diálogu nun ye posible inxertar una tabla de más de 1000 caxelles.", + "wikieditor-toolbar-tool-table-toomany": "Con esti diálogu nun ye posible inxertar una tabla de más de $1 {{PLURAL:$1|caxella|caxelles}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Nun escribisti un númberu válidu de fileres o columnes.", "wikieditor-toolbar-tool-table-zero": "Nun pues inxertar una tabla con cero fileres o columnes.", "wikieditor-toolbar-tool-replace": "Guetar y reemplazar", @@ -160,8 +159,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Testu en negrina y cursiva'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Testu en negrina & cursiva", "wikieditor-toolbar-help-content-ilink-description": "Enllaz internu", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Títulu de la páxina|Etiqueta del enllaz]]
        [[Títulu de la páxina]]", - "wikieditor-toolbar-help-content-ilink-result": "Etiqueta del enllaz
        Títulu de la páxina", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Títulu de la páxina]]
        [[Títulu de la páxina|Etiqueta del enllaz]]", + "wikieditor-toolbar-help-content-ilink-result": "Títulu de la páxina
        Etiqueta del enllaz", "wikieditor-toolbar-help-content-xlink-description": "Enllaz esternu", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Etiqueta del enllaz]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Etiqueta del enllaz
        [1]
        http://www.example.org", @@ -185,15 +184,19 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. Elementu de la llista
        2. Elementu de la llista
        ", "wikieditor-toolbar-help-content-file-description": "Ficheru incrustáu", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplu.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Testu del pie", "wikieditor-toolbar-help-content-reference-description": "Referencia", - "wikieditor-toolbar-help-content-reference-syntax": "Testu de la páxina<ref name=\"test\">[http://www.example.org Testu del enllaz], otru testu.</ref>.", + "wikieditor-toolbar-help-content-reference-syntax": "Testu de la páxina<ref>[http://www.example.org Testu del enllaz], otru testu.</ref>.", "wikieditor-toolbar-help-content-reference-result": "Testu de la páxina.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Referencia con nome", + "wikieditor-toolbar-help-content-named-reference-syntax": "Testu de la páxina.<ref name=\"test\">[http://www.example.org Testu del enllaz]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Testu de la páxina.[2]", "wikieditor-toolbar-help-content-rereference-description": "Otros usos de la mesma referencia", - "wikieditor-toolbar-help-content-rereference-result": "Testu de la páxina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Testu de la páxina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Amosar les referencies", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Testu del enllaz, otru testu.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Testu del enllaz, otru testu.
        2. ^ Testu del enllaz
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Robla con data y hora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nome d'usuariu (alderique) 15:54, 10 xunu 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nome d'usuariu (alderique) 15:54, 10 xunu 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Robla", "wikieditor-toolbar-help-content-signature-result": "Nome d'usuariu (alderique)", "wikieditor-toolbar-help-content-indent-description": "Sangría", diff --git a/extensions/WikiEditor/i18n/az.json b/extensions/WikiEditor/i18n/az.json index 2ec9ad2c..4e70e99a 100644 --- a/extensions/WikiEditor/i18n/az.json +++ b/extensions/WikiEditor/i18n/az.json @@ -130,14 +130,14 @@ "wikieditor-toolbar-help-content-file-description": "Şəkil əlavə etmə", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "İstinad", - "wikieditor-toolbar-help-content-reference-syntax": "Səhifənin mətni.<ref name=\"test\">[http://www.example.org Keçidin mətni], əlavə mətnt.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Səhifənin mətni.<ref>[http://www.example.org Keçidin mətni], əlavə mətnt.</ref>", "wikieditor-toolbar-help-content-reference-result": "Səhifənin mətni.[1]", "wikieditor-toolbar-help-content-rereference-description": "Eyni istinaddan istifadənin əlavəsi", - "wikieditor-toolbar-help-content-rereference-result": "Səhifə mətni.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Səhifə mətni.[2]", "wikieditor-toolbar-help-content-showreferences-description": "İstinadları göstər", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Keçid mətni, əlavə mətn.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Vaxt qeydi ilÉ™ imza", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ä°stifadəçi adı (müzakirÉ™) 15:54, 10 iyun 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ä°stifadəçi adı (müzakirÉ™) 15:54, 10 iyun 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Ä°mza", "wikieditor-toolbar-help-content-signature-result": "Ä°stifadəçi adı (müzakirÉ™)", "wikieditor-toolbar-help-content-indent-description": "Abzas", diff --git a/extensions/WikiEditor/i18n/azb.json b/extensions/WikiEditor/i18n/azb.json index a87afdf0..64a1fa60 100644 --- a/extensions/WikiEditor/i18n/azb.json +++ b/extensions/WikiEditor/i18n/azb.json @@ -4,7 +4,9 @@ "Amir a57", "E THP", "Ebrahimi-amir", - "Mousa" + "Mousa", + "KoroÄŸlu", + "Alp Er Tunqa" ] }, "wikieditor-wikitext-tab": "ویکی‌متن", @@ -18,6 +20,8 @@ "wikieditor-publish-dialog-watch": "بو صÙحه‌نی ایزله", "wikieditor-publish-dialog-publish": "یایلما", "wikieditor-publish-dialog-goback": "دالییا گییت", + "wikieditor-toolbar-preference": "گلیشمیش دییشدیرمه آراج چۇبوغونو چالیشدیر", + "wikieditor-toolbar-dialogs-preference": "تعامل پنجره‌لرینی باغلانتی، جدول Ùˆ داها باشقاسینی آرتیرماق اۆچون چالیشدیر", "wikieditor-toolbar-loading": "یوکلنیر...", "wikieditor-toolbar-tool-bold": "قالین رنگ", "wikieditor-toolbar-tool-bold-example": "قالین یازی", @@ -103,7 +107,7 @@ "wikieditor-toolbar-tool-table-example-header": "باشلیق متنی", "wikieditor-toolbar-tool-table-title": "جدول آرتیرماق", "wikieditor-toolbar-tool-table-dimensions-rows": "سطرلر:", - "wikieditor-toolbar-tool-table-dimensions-columns": "سوتونلار", + "wikieditor-toolbar-tool-table-dimensions-columns": "سوتون‌لار", "wikieditor-toolbar-tool-table-dimensions-header": "باشلیق سطرینی آرتیر", "wikieditor-toolbar-tool-table-wikitable": "کنارلیگی آرتیر", "wikieditor-toolbar-tool-table-sortable": "جدولی سیرالانا بیلن ائت", @@ -129,29 +133,7 @@ "wikieditor-toolbar-tool-replace-emptysearch": "سیز آختارماغا بیر شئی وئرمه‌دینیز.", "wikieditor-toolbar-tool-replace-invalidregex": "سیز وئردیگینیز مونظم سؤز (رÙقولار اÙکسپرÙØ´ÙÙ†) گئچرسیزدیر: $1", "wikieditor-toolbar-section-characters": "خصوصی یازیلار:", - "wikieditor-toolbar-characters-page-latin": "لاتین", - "wikieditor-toolbar-characters-page-latinextended": "لاتین گئنیشلندیریلمیش", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "سیمبول لار", - "wikieditor-toolbar-characters-page-greek": "یونانی", - "wikieditor-toolbar-characters-page-cyrillic": "کیریل", - "wikieditor-toolbar-characters-page-arabic": "عربجه", - "wikieditor-toolbar-characters-page-arabicextended": "گئنیشلندیریلمیش عربجه", - "wikieditor-toolbar-characters-page-persian": "Ùارسجا", - "wikieditor-toolbar-characters-page-hebrew": "عبرجه", - "wikieditor-toolbar-characters-page-bangla": "بنگالجه", - "wikieditor-toolbar-characters-page-tamil": "تامیلجه", - "wikieditor-toolbar-characters-page-telugu": "تالوگوجه", - "wikieditor-toolbar-characters-page-sinhala": "سینهالجه", - "wikieditor-toolbar-characters-page-gujarati": "گجراتجه", - "wikieditor-toolbar-characters-page-devanagari": "دیواناگرى", - "wikieditor-toolbar-characters-page-thai": "تایلندجه", - "wikieditor-toolbar-characters-page-lao": "لائو", - "wikieditor-toolbar-characters-page-khmer": "خمر", - "wikieditor-toolbar-characters-endash": "آرالیق خطی دی", - "wikieditor-toolbar-characters-emdash": "آرالیق خطی چکیلیب", - "wikieditor-toolbar-characters-minus": "منÙÛŒ علامتی", - "wikieditor-toolbar-section-help": "یاردیم", + "wikieditor-toolbar-section-help": "کؤمک", "wikieditor-toolbar-help-heading-description": "شرح", "wikieditor-toolbar-help-heading-syntax": "یازدیگینیز", "wikieditor-toolbar-help-heading-result": "آلدیگینیز", @@ -197,16 +179,15 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. سیاهی بندی
        2. سیاهی بندی
        ", "wikieditor-toolbar-help-content-file-description": "یئرلشدیریلمیش Ùایل", "wikieditor-toolbar-help-content-file-syntax": "[[$1:مثال.png|$2|موضوع متنی]]", - "wikieditor-toolbar-help-content-file-result": "
        عنوان باشلیقی
        ", "wikieditor-toolbar-help-content-reference-description": "قایناق", - "wikieditor-toolbar-help-content-reference-syntax": "صحیÙه‌نین متنی.<ref name=\"test\">[http://www.example.org کئچیدین متنی]ØŒ علاوه متنت.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "صحیÙه‌نین متنی.<ref>[http://www.example.org کئچیدین متنی]ØŒ علاوه متنت.</ref>", "wikieditor-toolbar-help-content-reference-result": "صحیÙÙ‡ متنی.[1]", "wikieditor-toolbar-help-content-rereference-description": "عینی ایستیناددان ایستیÙاده‌نین علاوه‌سی", - "wikieditor-toolbar-help-content-rereference-result": "صحیÙÙ‡ متنی.[1]", + "wikieditor-toolbar-help-content-rereference-result": "صÙحه متنی.[2]", "wikieditor-toolbar-help-content-showreferences-description": "قایناق لاری گؤستر", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ م، آرتیق متن.
        تن باغلانتی سی", "wikieditor-toolbar-help-content-signaturetimestamp-description": "واخت قئیدی ایله ایمضا", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ایستÙادچی آدی (دانیشیق) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ایستÙادچی آدی (دانیشیق) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ایمضا", "wikieditor-toolbar-help-content-signature-result": "ایستÙاده Ú†ÛŒ آدی (دانیشیق)", "wikieditor-toolbar-help-content-indent-description": "ایچری باتدیگی", diff --git a/extensions/WikiEditor/i18n/ba.json b/extensions/WikiEditor/i18n/ba.json index ed3c8e70..3e287b48 100644 --- a/extensions/WikiEditor/i18n/ba.json +++ b/extensions/WikiEditor/i18n/ba.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Индерелгән файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Миҫал.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Төшөрмә", - "wikieditor-toolbar-help-content-reference-syntax": "Биттәге текÑÑ‚.<ref name=\"test\">[http://www.example.org Һылтанма текÑÑ‚Ñ‹], өҫтәмә текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Биттәге текÑÑ‚.<ref>[http://www.example.org Һылтанма текÑÑ‚Ñ‹], өҫтәмә текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "Биттәге текÑÑ‚.[1]", "wikieditor-toolbar-help-content-rereference-description": "Бер үк төшөрмәне ҡабаттан ҡулланыу", - "wikieditor-toolbar-help-content-rereference-result": "Биттәге текÑÑ‚.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Биттәге текÑÑ‚.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Төшөрмәләрҙе күрһәтеү", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Һылтанма текÑÑ‚Ñ‹, өҫтәмә текÑÑ‚.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Имза һәм ҡуйыу ваҡыты", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ҠатнашыуÑÑ‹ иÑеме (фекер алышыу) 11:56, 30 авгуÑÑ‚ (Урағай) 2010 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ҠатнашыуÑÑ‹ иÑеме (фекер алышыу) 11:56, 30 авгуÑÑ‚ (Урағай) 2010 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Имза", "wikieditor-toolbar-help-content-signature-result": "ҠатнашыуÑÑ‹ иÑеме (фекер алышыу)", "wikieditor-toolbar-help-content-indent-description": "Буш ара", diff --git a/extensions/WikiEditor/i18n/be-tarask.json b/extensions/WikiEditor/i18n/be-tarask.json index d95bc694..3ac12801 100644 --- a/extensions/WikiEditor/i18n/be-tarask.json +++ b/extensions/WikiEditor/i18n/be-tarask.json @@ -6,7 +6,8 @@ "Renessaince", "Wizardist", "Zedlik", - "Macofe" + "Macofe", + "Red Winged Duck" ] }, "wikieditor": "Пашыраны інтÑрфÑÐ¹Ñ Ñ€ÑÐ´Ð°Ð³Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ð²Ñ–ÐºÑ–-Ñ‚ÑкÑту", @@ -125,7 +126,7 @@ "wikieditor-toolbar-tool-table-preview": "ПапÑÑ€Ñдні праглÑд", "wikieditor-toolbar-tool-table-insert": "УÑтавіць", "wikieditor-toolbar-tool-table-cancel": "Закрыць", - "wikieditor-toolbar-tool-table-toomany": "ГÑÑ‚Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° Ð½Ñ Ð¼Ð¾Ð¶Ð° ÑžÑтавіць табліцу, ÑÐºÐ°Ñ ÑžÑ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°Ðµ больш за 1000 ÑчÑек.", + "wikieditor-toolbar-tool-table-toomany": "З дапамогай гÑтага дыÑлёгу нельга ÑžÑтавіць табліцу памерам больш чым $1 {{PLURAL:$1|ÑчÑйка|ÑчÑйкі|ÑчÑек}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Ð’Ñ‹ не ўвÑлі Ñлушную колькаÑьць радкоў ці Ñлупкоў.", "wikieditor-toolbar-tool-table-zero": "Ð’Ñ‹ Ð½Ñ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ ÑžÑтавіць табліцу з нулÑвой колькаÑьцю радкоў ці Ñлупкоў.", "wikieditor-toolbar-tool-replace": "ЗнайÑьці Ñ– замÑніць", @@ -189,15 +190,16 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. ЭлемÑнт ÑьпіÑу
        2. ЭлемÑнт ÑьпіÑу
        ", "wikieditor-toolbar-help-content-file-description": "Укладзены файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Прыклад.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "ТÑкÑÑ‚ апіÑаньнÑ", "wikieditor-toolbar-help-content-reference-description": "ЗноÑка", - "wikieditor-toolbar-help-content-reference-syntax": "ТÑкÑÑ‚ Ñтаронкі.<ref name=\"test\">[http://www.example.org ТÑкÑÑ‚ ÑпаÑылкі], дадатковы Ñ‚ÑкÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "ТÑкÑÑ‚ Ñтаронкі.<ref>[http://www.example.org ТÑкÑÑ‚ ÑпаÑылкі], дадатковы Ñ‚ÑкÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "ТÑкÑÑ‚ Ñтаронкі.[1]", "wikieditor-toolbar-help-content-rereference-description": "Паўторнае выкарыÑтаньне той жа зноÑкі", - "wikieditor-toolbar-help-content-rereference-result": "ТÑкÑÑ‚ Ñтаронкі.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ТÑкÑÑ‚ Ñтаронкі.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Паказваць зноÑкі", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ ТÑкÑÑ‚ ÑпаÑылкі, дадатковы Ñ‚ÑкÑÑ‚.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ÐŸÐ¾Ð´Ð¿Ñ–Ñ Ñ– чаÑ", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ð†Ð¼Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÐ° (гутаркі) 15:54, 10 чÑÑ€Ð²ÐµÐ½Ñ 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ð†Ð¼Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÐ° (гутаркі) 15:54, 10 чÑÑ€Ð²ÐµÐ½Ñ 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПодпіÑ", "wikieditor-toolbar-help-content-signature-result": "Ð†Ð¼Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÐ° (гутаркі)", "wikieditor-toolbar-help-content-indent-description": "ВодÑтуп", diff --git a/extensions/WikiEditor/i18n/be.json b/extensions/WikiEditor/i18n/be.json index 35a4a4bb..b2c04339 100644 --- a/extensions/WikiEditor/i18n/be.json +++ b/extensions/WikiEditor/i18n/be.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Файл у Ñ‚ÑкÑце", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "ЗноÑка", - "wikieditor-toolbar-help-content-reference-syntax": "ТÑкÑÑ‚ на Ñтаронцы.<ref name=\"test\">[http://www.example.org ТÑкÑÑ‚ ÑпаÑылкі], аÑтатні Ñ‚ÑкÑÑ‚ зноÑкі.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "ТÑкÑÑ‚ на Ñтаронцы.<ref>[http://www.example.org ТÑкÑÑ‚ ÑпаÑылкі], аÑтатні Ñ‚ÑкÑÑ‚ зноÑкі.</ref>", "wikieditor-toolbar-help-content-reference-result": "ТÑкÑÑ‚ на Ñтаронцы.[1]", "wikieditor-toolbar-help-content-rereference-description": "Шматразовае карыÑтанне зноÑкай", - "wikieditor-toolbar-help-content-rereference-result": "ТÑкÑÑ‚ на Ñтаронцы.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ТÑкÑÑ‚ на Ñтаронцы.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Паказаць зноÑкі", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ ТÑÑкт ÑпаÑылкі, аÑтатні Ñ‚ÑкÑÑ‚ зноÑкі.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Ваш Ð¿Ð¾Ð´Ð¿Ñ–Ñ Ñ– адзначаны чаÑ", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ð†Ð¼Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÐ° (размовы) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ð†Ð¼Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÐ° (размовы) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПодпіÑ", "wikieditor-toolbar-help-content-signature-result": "Ð†Ð¼Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÐ° (размовы)", "wikieditor-toolbar-help-content-indent-description": "ВодÑтуп", diff --git a/extensions/WikiEditor/i18n/bg.json b/extensions/WikiEditor/i18n/bg.json index 1c196c0a..e4c1b830 100644 --- a/extensions/WikiEditor/i18n/bg.json +++ b/extensions/WikiEditor/i18n/bg.json @@ -189,14 +189,14 @@ "wikieditor-toolbar-help-content-file-description": "Вграден файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Източник", - "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ на Ñтраницата.<ref name=\"test\">[http://www.example.org ТекÑÑ‚ на външната препратка], допълнителен текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ на Ñтраницата.<ref>[http://www.example.org ТекÑÑ‚ на външната препратка], допълнителен текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "ТекÑÑ‚ на Ñтраницата.[1]", "wikieditor-toolbar-help-content-rereference-description": "МножеÑтвена употреба на един и Ñъщ източник", - "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ на Ñтраницата.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ на Ñтраницата.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Извеждане на източниците", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ ТекÑÑ‚ на външната препратка, допълнителен текÑÑ‚.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ÐŸÐ¾Ð´Ð¿Ð¸Ñ Ñ Ð´Ð°Ñ‚Ð° и чаÑ", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ПотребителÑко име (беÑеда) 15:54, 10 юни 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ПотребителÑко име (беÑеда) 15:54, 10 юни 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПодпиÑ", "wikieditor-toolbar-help-content-signature-result": "ПотребителÑко име (беÑеда)", "wikieditor-toolbar-help-content-indent-description": "ОтÑтъп", diff --git a/extensions/WikiEditor/i18n/bjn.json b/extensions/WikiEditor/i18n/bjn.json index b10a625f..08625ad5 100644 --- a/extensions/WikiEditor/i18n/bjn.json +++ b/extensions/WikiEditor/i18n/bjn.json @@ -157,10 +157,10 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Cuntuh.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Rujukan", "wikieditor-toolbar-help-content-reference-result": "Naskah tungkaran.[1]", - "wikieditor-toolbar-help-content-rereference-result": "Naskah tungkaran.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Naskah tungkaran.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Manampaiakan rujukan", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Tandatangan lawan waktu", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ngaran-pamakai (pandir) 15:54, 10 Juni 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ngaran-pamakai (pandir) 15:54, 10 Juni 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Tandatangan", "wikieditor-toolbar-help-content-signature-result": "Ngaran-pamakai (pandir)", "wikieditor-toolbar-help-content-indent-description": "Inden" diff --git a/extensions/WikiEditor/i18n/bn.json b/extensions/WikiEditor/i18n/bn.json index 2c5b4a28..ac7a975f 100644 --- a/extensions/WikiEditor/i18n/bn.json +++ b/extensions/WikiEditor/i18n/bn.json @@ -11,11 +11,12 @@ ] }, "wikieditor": "উনà§à¦¨à¦¤ উইকিটেকà§à¦¸à¦Ÿ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸", + "wikieditor-desc": "à¦à¦•à¦Ÿà¦¿ সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦£à¦¯à§‹à¦—à§à¦¯ উইকিটেকà§à¦¸à¦Ÿ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ পà§à¦°à¦¦à¦¾à¦¨ করে à¦à¦¬à¦‚ à¦à¦¬à¦‚ বহৠবৈশিষà§à¦Ÿà§à¦¯ মডিউল পà§à¦°à¦¦à¦¾à¦¨ করে", "wikieditor-wikitext-tab": "উইকিটেকà§à¦¸à¦Ÿ", "wikieditor-loading": "লোড হচà§à¦›à§‡...", "wikieditor-preview-preference": "পাশাপাশি পà§à¦°à¦¾à¦•à¦¦à¦°à§à¦¶à¦¨ সকà§à¦°à¦¿à¦¯à¦¼ করো", "wikieditor-preview-tab": "পà§à¦°à¦¾à¦•à¦¦à¦°à§à¦¶à¦¨", - "wikieditor-preview-changes-tab": "পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ", + "wikieditor-preview-changes-tab": "পরিবরà§à¦¤à¦¨", "wikieditor-preview-loading": "লোড হচà§à¦›à§‡...", "wikieditor-publish-preference": "ধাপে ধাপে পà§à¦°à¦•à¦¾à¦¶ করা সকà§à¦°à¦¿à¦¯à¦¼ করো", "wikieditor-publish-button-publish": "পà§à¦°à¦•à¦¾à¦¶ করো", @@ -30,7 +31,6 @@ "wikieditor-toolbar-desc": "বেশি বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦¯à§‹à¦—à§à¦¯ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ পাতার টà§à¦²à¦¬à¦¾à¦°", "wikieditor-toolbar-preference": "শকà§à¦¤à¦¿à¦¶à¦¾à¦²à§€ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ টà§à¦²à¦¬à¦¾à¦° সকà§à¦°à¦¿à¦¯à¦¼ করো", "wikieditor-toolbar-dialogs-preference": "লিংক যোগ, ছকসহ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ ও ফাংশন পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨à§‡à¦° জনà§à¦¯ উইজারà§à¦¡ সকà§à¦°à¦¿à¦¯à¦¼ করো", - "wikieditor-toolbar-hidesig": "পà§à¦°à¦§à¦¾à¦¨ নামসà§à¦¥à¦¾à¦¨à§‡à¦° পাতায় সà§à¦¬à¦¾à¦•à§à¦·à¦° বোতাম লà§à¦•à¦¾à¦“", "wikieditor-toolbar-loading": "লোড হচà§à¦›à§‡...", "wikieditor-toolbar-tool-bold": "গাঢ়", "wikieditor-toolbar-tool-bold-example": "গাঢ় লেখা", @@ -38,7 +38,7 @@ "wikieditor-toolbar-tool-italic-example": "ইটালিক লেখা", "wikieditor-toolbar-tool-ilink": "আভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ সংযোগ", "wikieditor-toolbar-tool-ilink-example": "সংযোগের শিরোনাম", - "wikieditor-toolbar-tool-xlink": "বহিঃসংযোগ (মনে রাখবেন http:// উপসরà§à¦— থাকবে)", + "wikieditor-toolbar-tool-xlink": "বহিঃসংযোগ (http:// উপসরà§à¦—ের কথা মনে রাখà§à¦¨)", "wikieditor-toolbar-tool-xlink-example": "http://www.example.com সংযোগের শিরোনাম", "wikieditor-toolbar-tool-link": "লিংক", "wikieditor-toolbar-tool-link-title": "লিংক যোগ করো", @@ -125,7 +125,7 @@ "wikieditor-toolbar-tool-table-preview": "পà§à¦°à¦¾à¦•à¦¦à¦°à§à¦¶à¦¨", "wikieditor-toolbar-tool-table-insert": "যোগ করো", "wikieditor-toolbar-tool-table-cancel": "বাতিল", - "wikieditor-toolbar-tool-table-toomany": "à¦à¦‡ ডায়লগ দà§à¦¬à¦¾à¦°à¦¾ à¦à¦•à¦Ÿà¦¿ সারণিতে ১০০০ ঘরের বেশি ছক যোগ করা সমà§à¦­à¦¬ নয়।", + "wikieditor-toolbar-tool-table-toomany": "à¦à¦‡ ডায়লগ দà§à¦¬à¦¾à¦°à¦¾ à¦à¦•à¦Ÿà¦¿ সারণিতে $1 {{PLURAL:$1|ঘরের}} বেশি ছক যোগ করা সমà§à¦­à¦¬ নয়।", "wikieditor-toolbar-tool-table-invalidnumber": "আপনি সারি à¦à¦¬à¦‚ কলামের জনà§à¦¯ ভà§à¦² সংখà§à¦¯à¦¾ টাইপ করেছেন।", "wikieditor-toolbar-tool-table-zero": "আপনি ছকের সারি à¦à¦¬à¦‚ কলামের সংখà§à¦¯à¦¾ শূনà§à¦¯ দিতে পারবেন না।", "wikieditor-toolbar-tool-replace": "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ ও পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨", @@ -164,8 +164,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''গাঢ় & ইটালিক লেখা'''''", "wikieditor-toolbar-help-content-bolditalic-result": "গাঢ় & ইটালিক লেখা", "wikieditor-toolbar-help-content-ilink-description": "আভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ সংযোগ", - "wikieditor-toolbar-help-content-ilink-syntax": "[[পাতার শিরোনাম|সংযোগ লেবেল]]
        [[পাতার শিরোনাম]]", - "wikieditor-toolbar-help-content-ilink-result": "সংযোগ লেবেল
        পাতার শিরোনাম", + "wikieditor-toolbar-help-content-ilink-syntax": "[[পাতার শিরোনাম]]
        [[পাতার শিরোনাম|সংযোগ লেবেল]]", + "wikieditor-toolbar-help-content-ilink-result": "পাতার শিরোনাম
        সংযোগের লেভেল", "wikieditor-toolbar-help-content-xlink-description": "বহিঃসংযোগ", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org সংযোগ লেবেল]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "সংযোগ লেবেল
        [১]
        http://www.example.org", @@ -191,14 +191,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:উদাহরণ.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "কà§à¦¯à¦¾à¦ªà¦¶à¦¨ লেখা", "wikieditor-toolbar-help-content-reference-description": "তথà§à¦¯à¦¸à§‚তà§à¦°", - "wikieditor-toolbar-help-content-reference-syntax": "পাতার লেখা।<ref name=\"test\">[http://www.example.org লিংকের লেখা], অতিরিকà§à¦¤ লেখা।</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "পাতার লেখা।<ref>[http://www.example.org লিংকের লেখা], অতিরিকà§à¦¤ লেখা।</ref>", "wikieditor-toolbar-help-content-reference-result": "পাতার লেখা।[1]", + "wikieditor-toolbar-help-content-named-reference-description": "নামযà§à¦•à§à¦¤ তথà§à¦¯à¦¸à§‚তà§à¦°", + "wikieditor-toolbar-help-content-named-reference-syntax": "পাতার লেখা।<ref name=\"test\">[http://www.example.org লিঙà§à¦•à§‡à¦° লেখা]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "পাতার লেখ।[2]", "wikieditor-toolbar-help-content-rereference-description": "à¦à¦•à¦‡ তথà§à¦¯à¦¸à§‚তà§à¦°à§‡à¦° à¦à¦•à¦¾à¦§à¦¿à¦• বà§à¦¯à¦¬à¦¹à¦¾à¦°", - "wikieditor-toolbar-help-content-rereference-result": "পাতার লেখ।[1]", + "wikieditor-toolbar-help-content-rereference-result": "পাতার লেখ।[2]", "wikieditor-toolbar-help-content-showreferences-description": "তথà§à¦¯à¦¸à§‚তà§à¦° পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করো", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ সংযোগ লেখ, বাড়তি লেখ।
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ সংযোগের লেখা, বাড়তি লেখা।
        2. ^ সংযোগের লেখা
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "সময় সহ সà§à¦¬à¦¾à¦•à§à¦·à¦°", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ (আলাপ) ১৫:৫৪, ১০ জà§à¦¨ ২০১০ (ইউটিসি)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ (আলাপ) ১৫:৫৪, ১০ জà§à¦¨ ২০১০ (ইউটিসি)", "wikieditor-toolbar-help-content-signature-description": "সà§à¦¬à¦¾à¦•à§à¦·à¦°", "wikieditor-toolbar-help-content-signature-result": "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ (আলাপ)", "wikieditor-toolbar-help-content-indent-description": "পà§à¦°à¦¾à¦¨à§à¦¤à¦¿à¦•à¦•à¦°à¦£", diff --git a/extensions/WikiEditor/i18n/bpy.json b/extensions/WikiEditor/i18n/bpy.json index c6cd80f4..abf6dfc1 100644 --- a/extensions/WikiEditor/i18n/bpy.json +++ b/extensions/WikiEditor/i18n/bpy.json @@ -173,14 +173,14 @@ "wikieditor-toolbar-help-content-file-description": "à¦à¦®à§à¦¬à§‡à¦¡à§‡à¦¡ ফাইলগ", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "রেফারেনà§à¦¸à¦¹à¦¾à¦¨à¦¿", - "wikieditor-toolbar-help-content-reference-syntax": "পাতার ইকাহানি।<ref name=\"test\">[http://www.example.org মিলাপর মেয়েকগি], আরতাউ মেয়েক।</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "পাতার ইকাহানি।<ref>[http://www.example.org মিলাপর মেয়েকগি], আরতাউ মেয়েক।</ref>", "wikieditor-toolbar-help-content-reference-result": "পাতার ইকা।[1]", "wikieditor-toolbar-help-content-rereference-description": "তথà§à¦¯à¦¸à§‚তà§à¦° আকহানর কতà§à¦¤à¦®à¦¾à¦‰ বà§à¦¯à¦¬à¦¹à¦¾à¦°", - "wikieditor-toolbar-help-content-rereference-result": "পাতার ইকা।[1]", + "wikieditor-toolbar-help-content-rereference-result": "পাতার ইকা।[2]", "wikieditor-toolbar-help-content-showreferences-description": "তথà§à¦¯à¦¸à§‚তà§à¦° দেহাদে", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ মিলাপর মেয়েকগি, হেলপা মেয়েকগি।
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "সà§à¦¬à¦¾à¦•à§à¦·à¦°à¦¹à¦¾à¦¨ লগে খেনà§à¦¤à¦¾à¦® বরিয়া", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "আতাকà§à¦°à¦¾ (য়à§à¦¯à¦¾à¦°à§€) ১৫:৫৪, ১০ আগষà§à¦Ÿ ২০১০(UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--আতাকà§à¦°à¦¾ (য়à§à¦¯à¦¾à¦°à§€) ১৫:৫৪, ১০ আগষà§à¦Ÿ ২০১০(UTC)", "wikieditor-toolbar-help-content-signature-description": "সà§à¦¬à¦¾à¦•à§à¦·à¦°", "wikieditor-toolbar-help-content-signature-result": "আতাকà§à¦°à¦¾ (য়à§à¦¯à¦¾à¦°à§€)", "wikieditor-toolbar-help-content-indent-description": "কাসাদেনা", diff --git a/extensions/WikiEditor/i18n/br.json b/extensions/WikiEditor/i18n/br.json index e0d84895..a4dd8556 100644 --- a/extensions/WikiEditor/i18n/br.json +++ b/extensions/WikiEditor/i18n/br.json @@ -188,14 +188,14 @@ "wikieditor-toolbar-help-content-file-description": "Restr enframmet", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Daveenn", - "wikieditor-toolbar-help-content-reference-syntax": "Testenn ar bajenn.<ref name=\"test\">[http://www.example.org testenn al liamm], testenn ouzhpenn.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Testenn ar bajenn.<ref>[http://www.example.org testenn al liamm], testenn ouzhpenn.</ref>", "wikieditor-toolbar-help-content-reference-result": "Testenn ar bajenn.[1]", "wikieditor-toolbar-help-content-rereference-description": "Adimplij eus an hevelep daveenn", - "wikieditor-toolbar-help-content-rereference-result": "Testenn ar bajenn.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Testenn ar bajenn.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Diskwel an daveennoù", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Anv al liamm, testenn ouzhpenn.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Sinadur gant an deiziad", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Anv implijer (kaozeal) 15:54, 10 Mezheven 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Anv implijer (kaozeal) 15:54, 10 Mezheven 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Sinadur", "wikieditor-toolbar-help-content-signature-result": "Anv implijer (kaozeal)", "wikieditor-toolbar-help-content-indent-description": "Endantadur", diff --git a/extensions/WikiEditor/i18n/bs.json b/extensions/WikiEditor/i18n/bs.json index 1747785a..62622936 100644 --- a/extensions/WikiEditor/i18n/bs.json +++ b/extensions/WikiEditor/i18n/bs.json @@ -3,18 +3,22 @@ "authors": [ "CERminator", "Palapa", - "Macofe" + "Macofe", + "KWiki", + "Munja", + "Srdjan m", + "Semso98" ] }, "wikieditor": "Napredni interfejs za ureÄ‘ivanje wikiteksta", "wikieditor-desc": "Omogućava proÅ¡irivi interfejs za ureÄ‘ivanje wikiteksta i mnoge module sa brojnim mogućnostima", "wikieditor-wikitext-tab": "Wikitekst", "wikieditor-loading": "UÄitavanje", - "wikieditor-preview-preference": "Omogući pretpregled s obje strane", + "wikieditor-preview-preference": "UkljuÄi uporedni pregled", "wikieditor-preview-tab": "Pregled", "wikieditor-preview-changes-tab": "Promjene", "wikieditor-preview-loading": "UÄitavam...", - "wikieditor-publish-preference": "Omogući objavljivanje u koracima", + "wikieditor-publish-preference": "UkljuÄi objavljivanje u koracima", "wikieditor-publish-button-publish": "Objavi", "wikieditor-publish-button-cancel": "Odustani", "wikieditor-publish-dialog-title": "Objavi na {{SITENAME}}", @@ -25,8 +29,8 @@ "wikieditor-publish-dialog-goback": "Vrati se nazad", "wikieditor-toolbar": "UreÄ‘ivanje alatne trake", "wikieditor-toolbar-desc": "Alatna traka stranice za ureÄ‘ivanje sa poboljÅ¡anom upotrebljivošću", - "wikieditor-toolbar-preference": "Omogući naprednu traku za ureÄ‘ivanje", - "wikieditor-toolbar-dialogs-preference": "Omogući Äarobnjake za ubacivanje linkova, tabela kao i funkciju pretrage i zamjene", + "wikieditor-toolbar-preference": "UkljuÄi naprednu traku za ureÄ‘ivanje", + "wikieditor-toolbar-dialogs-preference": "UkljuÄi Äarobnjake za ubacivanje linkova, tabela kao i funkciju pretrage i zamjene", "wikieditor-toolbar-hidesig": "Sakrij dugme potpisa sa stranica u glavnom imenskom prostoru", "wikieditor-toolbar-loading": "Punjenje...", "wikieditor-toolbar-tool-bold": "Podebljano", @@ -55,7 +59,7 @@ "wikieditor-toolbar-tool-link-int-target-status-external": "Vanjski link", "wikieditor-toolbar-tool-link-int-target-status-loading": "Provjeravam postojanje stranice...", "wikieditor-toolbar-tool-link-int-invalid": "Naslov koji ste unijeli je nevaljan.", - "wikieditor-toolbar-tool-link-lookslikeinternal": "URL koji ste naveli izgleda da je prepoznat kao link na drugu wiki stranicu.\nDa li želite napraviti interni link?", + "wikieditor-toolbar-tool-link-lookslikeinternal": "Izgleda da je URL koji ste naveli prepoznat kao link na drugu wiki-stranicu.\nŽelite li napraviti unutraÅ¡nji link?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "UnutraÅ¡nji link", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Vanjski link", "wikieditor-toolbar-tool-link-empty": "Niste unijeli niÅ¡ta za linkovanje.", @@ -120,11 +124,11 @@ "wikieditor-toolbar-tool-replace-replace": "Zamijeni sa:", "wikieditor-toolbar-tool-replace-case": "Razlikuj velika i mala slova", "wikieditor-toolbar-tool-replace-regex": "Smatraj traženi pojam kao regularni izraz", - "wikieditor-toolbar-tool-replace-button-findnext": "NaÄ‘i slijedeći", + "wikieditor-toolbar-tool-replace-button-findnext": "NaÄ‘i sljedeći", "wikieditor-toolbar-tool-replace-button-replaceall": "Zamijeni sve", "wikieditor-toolbar-tool-replace-close": "Zatvori", "wikieditor-toolbar-tool-replace-nomatch": "VaÅ¡a pretraga nije dala nijedan rezultat.", - "wikieditor-toolbar-tool-replace-success": "NaÄinjeno $1 izmjena.", + "wikieditor-toolbar-tool-replace-success": "NaÄinjeno $1 {{PLURAL:$1|izmjena|izmjene}}.", "wikieditor-toolbar-tool-replace-emptysearch": "Niste unijeli niÅ¡ta za pretragu.", "wikieditor-toolbar-tool-replace-invalidregex": "Regularni izraz koji ste unijeli nije valjan: $1", "wikieditor-toolbar-section-characters": "Posebni znakovi", @@ -175,14 +179,14 @@ "wikieditor-toolbar-help-content-file-description": "Uklopljena datoteka", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Reference", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.<ref name=\"test\">[http://www.example.org Tekst linka], dodatni tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.<ref>[http://www.example.org Tekst linka], dodatni tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tekst stranice.[1]", "wikieditor-toolbar-help-content-rereference-description": "Dodatna upotreba istog izvora", - "wikieditor-toolbar-help-content-rereference-result": "Tekst stranice.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tekst stranice.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Prikaži izvore", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Tekst linka, dodatni tekst.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Potpis s trenutnim vremenom", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "KorisniÄko ime (Razgovor) 15:54, 10. juni 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--KorisniÄko ime (Razgovor) 15:54, 10. juni 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Potpis", "wikieditor-toolbar-help-content-signature-result": "KorisniÄko ime (razgovor)", "wikieditor-toolbar-help-content-indent-description": "UvuÄeno", diff --git a/extensions/WikiEditor/i18n/ca.json b/extensions/WikiEditor/i18n/ca.json index b30f9d74..5180354b 100644 --- a/extensions/WikiEditor/i18n/ca.json +++ b/extensions/WikiEditor/i18n/ca.json @@ -34,7 +34,6 @@ "wikieditor-toolbar-desc": "Barra d'eines d'edició amb usabilitat millorada", "wikieditor-toolbar-preference": "Habilita la barra d'eines millorada", "wikieditor-toolbar-dialogs-preference": "Habilita caixes de diàleg per inserir enllaços, taules i altres", - "wikieditor-toolbar-hidesig": "Amaga el botó de signar de les pàgines de l'espai de noms principal", "wikieditor-toolbar-loading": "Carregant...", "wikieditor-toolbar-tool-bold": "Negreta", "wikieditor-toolbar-tool-bold-example": "Text en negreta", @@ -193,14 +192,14 @@ "wikieditor-toolbar-help-content-file-description": "Fitxer incrustat", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referències", - "wikieditor-toolbar-help-content-reference-syntax": "Text de la pàgina.<ref name=\"test\">[http://www.exemple.cat Nom de l'enllaç], text addicional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Text de la pàgina.<ref>[http://www.exemple.cat Nom de l'enllaç], text addicional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Text de la pàgina.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ús addicional de la mateixa referència", - "wikieditor-toolbar-help-content-rereference-result": "Text de la pàgina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Text de la pàgina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Mostra les referències", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Nom de l'enllaç, text addicional.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatura, data i hora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nom d'usuari (discussió) 15:54, 10 de juny de 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nom d'usuari (discussió) 15:54, 10 de juny de 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatura", "wikieditor-toolbar-help-content-signature-result": "Nom d'usuari (discussió)", "wikieditor-toolbar-help-content-indent-description": "Sagnat", diff --git a/extensions/WikiEditor/i18n/ce.json b/extensions/WikiEditor/i18n/ce.json index c920cf58..d93816e0 100644 --- a/extensions/WikiEditor/i18n/ce.json +++ b/extensions/WikiEditor/i18n/ce.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Sasan700", - "Умар" + "Умар", + "ИÑмаил Садуев" ] }, "wikieditor": "Викийоза тадаран шоьйра интерфейÑ", @@ -14,19 +15,18 @@ "wikieditor-preview-changes-tab": "хийцамаш", "wikieditor-preview-loading": "Чуйолуш…", "wikieditor-publish-preference": "Латайé цхьац ког бокхуш чутохар", - "wikieditor-publish-button-publish": "Ðахангайта", + "wikieditor-publish-button-publish": "Ðрахеца", "wikieditor-publish-button-cancel": "Цаоьшу", "wikieditor-publish-dialog-title": "{{SITENAME}} проектехь арахецар", "wikieditor-publish-dialog-summary": "Хийцамах лаьцна (доц Ñзде Ñ…lу хийцам бина ахьа):", "wikieditor-publish-dialog-minor": "Жим хийцам", - "wikieditor-publish-dialog-watch": "Тергам бé Ñ…lокху агlон", - "wikieditor-publish-dialog-publish": "Ðахангайта", + "wikieditor-publish-dialog-watch": "Тергам бé хӀокху агӀона", + "wikieditor-publish-dialog-publish": "Ðрахеца", "wikieditor-publish-dialog-goback": "Юха", "wikieditor-toolbar": "Тадаран меттиг", "wikieditor-toolbar-desc": "Тадаран меттиг гӀоле лелорца", "wikieditor-toolbar-preference": "Гайта дика кечйина панель", - "wikieditor-toolbar-dialogs-preference": "Латайé йозан хьажорг йуьллург, таблицан а кхин хӀумнашна а", - "wikieditor-toolbar-hidesig": "Коьрта цӀерийн аннийн агӀонашкахь къайлаÑккха куьйг таӀо кнопка", + "wikieditor-toolbar-dialogs-preference": "Латайé йозан хьажорг йуьллург, таблицан а, кхин хӀумнашна а", "wikieditor-toolbar-loading": "Чуйолуш…", "wikieditor-toolbar-tool-bold": "ДерÑтино", "wikieditor-toolbar-tool-bold-example": "ДерÑтино до йоза", @@ -48,11 +48,11 @@ "wikieditor-toolbar-tool-link-ext-text": "Хьажораган йоза:", "wikieditor-toolbar-tool-link-insert": "Чуйилла хьажорг", "wikieditor-toolbar-tool-link-cancel": "Цаоьшу", - "wikieditor-toolbar-tool-link-int-target-status-exists": "Ишта агlо йолш ÑŽ", - "wikieditor-toolbar-tool-link-int-target-status-notexists": "Ишта агlо Ñц", + "wikieditor-toolbar-tool-link-int-target-status-exists": "Ишта агӀо йолуш ÑŽ", + "wikieditor-toolbar-tool-link-int-target-status-notexists": "Ишта агӀо Ñц", "wikieditor-toolbar-tool-link-int-target-status-invalid": "Ца магайо цӀе", "wikieditor-toolbar-tool-link-int-target-status-external": "Ðрахьара хьажорг", - "wikieditor-toolbar-tool-link-int-target-status-loading": "Ðгlо ÑŽ Ñц хьоьжуш…", + "wikieditor-toolbar-tool-link-int-target-status-loading": "ÐгӀо юьй хьажар…", "wikieditor-toolbar-tool-link-int-target-status-disambig": "Дуккха маьӀнаш долу агӀонаш", "wikieditor-toolbar-tool-link-int-invalid": "Гойтуш йолу цӀе ца магайо.", "wikieditor-toolbar-tool-link-lookslikeinternal": "Ðхьа хоттийна URL кхечу вики-агӀонан хьажорагах тера ÑŽ. Лаьий хьуна и хьажорг чоьхьарчех Ñ?", @@ -124,7 +124,7 @@ "wikieditor-toolbar-tool-table-toomany": "Оцул чоьнаш Ñ Ð°ÑŒÑ‚Ñ‚Ñƒ ца болу, таблицан чоьнашна бáрам $1 хоттало.", "wikieditor-toolbar-tool-table-invalidnumber": "Ðхьа нийÑа ца хоттийн цхьатерра могlанаш ле бlогlамаш.", "wikieditor-toolbar-tool-table-zero": "Хьога йиллалур Ñц таблица йоцургца могӀанаш ле бӀогӀамаш долуш.", - "wikieditor-toolbar-tool-replace": "Лахар а хийцар а", + "wikieditor-toolbar-tool-replace": "Лахар а, хийцар а", "wikieditor-toolbar-tool-replace-title": "Лаха хийца а хуьйцуш", "wikieditor-toolbar-tool-replace-search": "Лаха:", "wikieditor-toolbar-tool-replace-replace": "Хийца оцуьнца:", @@ -139,28 +139,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Ðхьа ца гайтна Ñ…lу лаха деза.", "wikieditor-toolbar-tool-replace-invalidregex": "Ðхьа Ñзйина цlе ÑŽÑ…-юха нийÑа Ñц: $1", "wikieditor-toolbar-section-characters": "Леррина Ñимволаш", - "wikieditor-toolbar-characters-page-latin": "Латинан", - "wikieditor-toolbar-characters-page-latinextended": "Латинан алÑам", - "wikieditor-toolbar-characters-page-ipa": "ДÐЭ (IPA)", - "wikieditor-toolbar-characters-page-symbols": "Символаш", - "wikieditor-toolbar-characters-page-greek": "Грекийн", - "wikieditor-toolbar-characters-page-cyrillic": "Кирилан", - "wikieditor-toolbar-characters-page-arabic": "Ӏарбийн", - "wikieditor-toolbar-characters-page-arabicextended": "Iаьрбийн шординарш", - "wikieditor-toolbar-characters-page-persian": "ПхьарÑхойн", - "wikieditor-toolbar-characters-page-hebrew": "Жуьгтийн", - "wikieditor-toolbar-characters-page-bangla": "Бангалойн", - "wikieditor-toolbar-characters-page-tamil": "Тамилхойн", - "wikieditor-toolbar-characters-page-telugu": "Телугойн", - "wikieditor-toolbar-characters-page-sinhala": "Синхалойн", - "wikieditor-toolbar-characters-page-gujarati": "Гужаратойн", - "wikieditor-toolbar-characters-page-devanagari": "Деванагари", - "wikieditor-toolbar-characters-page-thai": "Тайхойн", - "wikieditor-toolbar-characters-page-lao": "Лаохойн", - "wikieditor-toolbar-characters-page-khmer": "Кхимерхойн", - "wikieditor-toolbar-characters-endash": "юкъар Ñиз", - "wikieditor-toolbar-characters-emdash": "деха Ñиз", - "wikieditor-toolbar-characters-minus": "хьаьрк минуÑ", "wikieditor-toolbar-section-help": "ГӀо", "wikieditor-toolbar-help-heading-description": "Цуьнах лаьцна", "wikieditor-toolbar-help-heading-syntax": "Ð¥lу йуьллу ахьа", @@ -209,14 +187,14 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Куьйгаш:", "wikieditor-toolbar-help-content-reference-description": "Билгалдаккхар", - "wikieditor-toolbar-help-content-reference-syntax": "Ðгlонан йоза.<ref name=\"test\">[http://www.example.org Хьажориган йоза], кхин Ñ‚lе дузуш йоза.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Ðгlонан йоза.<ref>[http://www.example.org Хьажориган йоза], кхин Ñ‚lе дузуш йоза.</ref>", "wikieditor-toolbar-help-content-reference-result": "Ðгlонан йоза.[1]", "wikieditor-toolbar-help-content-rereference-description": "Кхин тӀе лело изза хьажорг", - "wikieditor-toolbar-help-content-rereference-result": "Ðгlонан йоза[1].", + "wikieditor-toolbar-help-content-rereference-result": "Ðгlонан йоза[2].", "wikieditor-toolbar-help-content-showreferences-description": "Гайта билгалдаккхар", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Хьажориган йоза, кхин тlе дузуш йоза.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Куьгтаlор хан хlоттош", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Декъашхочун цӀе (дийцаре) 15:54, 10 июнь 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Декъашхочун цӀе (дийцаре) 15:54, 10 июнь 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Куьгтаlор", "wikieditor-toolbar-help-content-signature-result": "Декъашхочун цӀе (дийцаре)", "wikieditor-toolbar-help-content-indent-description": "Дlахило", diff --git a/extensions/WikiEditor/i18n/ckb.json b/extensions/WikiEditor/i18n/ckb.json index 127d32ca..30aa6fe5 100644 --- a/extensions/WikiEditor/i18n/ckb.json +++ b/extensions/WikiEditor/i18n/ckb.json @@ -128,7 +128,7 @@ "wikieditor-toolbar-tool-replace-search": "بگەڕێ بۆ:", "wikieditor-toolbar-tool-replace-replace": "جێبەجێی بکە لەگەڵ:", "wikieditor-toolbar-tool-replace-case": "کوت و مت وەک خۆی", - "wikieditor-toolbar-tool-replace-regex": "لەگەڵ نووسەی گەڕانەکە وەک دەقی ڕێک ھەڵسوکەوت بکە", + "wikieditor-toolbar-tool-replace-regex": "لەگەڵ نووسینەکانی گەڕاندا وەک regular expression ھەڵسوکەوت بکە", "wikieditor-toolbar-tool-replace-button-findnext": "دوای ئەمە بدۆزەوە", "wikieditor-toolbar-tool-replace-button-replaceall": "ھەموویان جێگیر بکە", "wikieditor-toolbar-tool-replace-close": "دایخە", @@ -184,14 +184,14 @@ "wikieditor-toolbar-help-content-file-description": "پەڕگەی نێودەق", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "سەرچاوە", - "wikieditor-toolbar-help-content-reference-syntax": "دەقی پەڕە.<ref name=\"test\">[http://www.example.org دەقی بەستەر], دەقی زیادی.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "دەقی پەڕە.<ref>[http://www.example.org دەقی بەستەر], دەقی زیادی.</ref>", "wikieditor-toolbar-help-content-reference-result": "دەقی پەڕە.[1]", "wikieditor-toolbar-help-content-rereference-description": "بەکارھێنانی دیکەی ئەو سەرچاوەیە", - "wikieditor-toolbar-help-content-rereference-result": "دەقی پەڕە.[1]", + "wikieditor-toolbar-help-content-rereference-result": "دەقی پەڕە.[2]", "wikieditor-toolbar-help-content-showreferences-description": "نیشان‌دانی سەرچاوەکان", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ دەقی بەستەر, دەقی زیادی.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "واژوو Ùˆ ڕێکەوت", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ناوی بەکارھێنەر (لێدوان) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ناوی بەکارھێنەر (لێدوان) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "واژوو", "wikieditor-toolbar-help-content-signature-result": "ناوی بەکارھێنەر (لێدوان)", "wikieditor-toolbar-help-content-indent-description": "پێشبردن", diff --git a/extensions/WikiEditor/i18n/cs.json b/extensions/WikiEditor/i18n/cs.json index 67037f95..2f8bdb19 100644 --- a/extensions/WikiEditor/i18n/cs.json +++ b/extensions/WikiEditor/i18n/cs.json @@ -29,7 +29,6 @@ "wikieditor-toolbar-desc": "EditaÄní panel nástrojů s vylepÅ¡enou použitelností", "wikieditor-toolbar-preference": "Zapnout vylepÅ¡ený panel nástrojů", "wikieditor-toolbar-dialogs-preference": "Používat průvodce pro vkládání odkazů a tabulek i pro funkci hledání a nahrazování.", - "wikieditor-toolbar-hidesig": "Skrýt tlaÄítko podpisu na stránkách v hlavním jmenném prostoru", "wikieditor-toolbar-loading": "NaÄítá se…", "wikieditor-toolbar-tool-bold": "TuÄnÄ›", "wikieditor-toolbar-tool-bold-example": "TuÄný text", @@ -124,7 +123,7 @@ "wikieditor-toolbar-tool-table-preview": "Náhled", "wikieditor-toolbar-tool-table-insert": "Vložit", "wikieditor-toolbar-tool-table-cancel": "Storno", - "wikieditor-toolbar-tool-table-toomany": "Pomocí tohoto dialogu nelze vložit tabulku s více než 1000 buňkami.", + "wikieditor-toolbar-tool-table-toomany": "Pomocí tohoto dialogu nelze vložit tabulku s více než $1 {{PLURAL:$1|buňkou|buňkami}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Musíte zadat platný poÄet řádků nebo sloupců.", "wikieditor-toolbar-tool-table-zero": "Nemůžete vložit tabulku s nulovým poÄet řádků nebo sloupců.", "wikieditor-toolbar-tool-replace": "Najít a nahradit", @@ -163,8 +162,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Text tuÄnou kurzívou'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Text tuÄnou kurzívou", "wikieditor-toolbar-help-content-ilink-description": "VnitÅ™ní odkaz", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Název stránky|Text odkazu]]
        [[Název stránky]]", - "wikieditor-toolbar-help-content-ilink-result": "Text odkazu
        Název stránky", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Název stránky]]
        [[Název stránky|Text odkazu]]", + "wikieditor-toolbar-help-content-ilink-result": "Název stránky
        Text odkazu", "wikieditor-toolbar-help-content-xlink-description": "Externí odkaz", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Text odkazu]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Text odkazu
        [1]
        http://www.example.org", @@ -190,14 +189,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Příklad.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Text nadpisu", "wikieditor-toolbar-help-content-reference-description": "Reference", - "wikieditor-toolbar-help-content-reference-syntax": "Text stránky.<ref name=\"test\">[http://www.example.org Text odkazu], další text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Text stránky.<ref>[http://www.example.org Text odkazu], další text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Text stránky.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Pojmenovaná reference", + "wikieditor-toolbar-help-content-named-reference-syntax": "Text stránky.<ref name=\"test\">[http://www.example.org Text odkazu]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Text stránky.[2]", "wikieditor-toolbar-help-content-rereference-description": "Další odkaz na stejnou referenci", - "wikieditor-toolbar-help-content-rereference-result": "Text stránky.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Text stránky.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Zobrazení referencí", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Text odkazu, další text.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Text odkazu, další text.
        2. ^ Text odkazu
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Podpis a datum", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Uživatelské jméno 23. 6. 2009, 10:43 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Uživatelské jméno 23. 6. 2009, 10:43 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Podpis", "wikieditor-toolbar-help-content-signature-result": "Uživatelské jméno", "wikieditor-toolbar-help-content-indent-description": "Odsazení", diff --git a/extensions/WikiEditor/i18n/cy.json b/extensions/WikiEditor/i18n/cy.json index 4af0b0fe..2b728ef2 100644 --- a/extensions/WikiEditor/i18n/cy.json +++ b/extensions/WikiEditor/i18n/cy.json @@ -187,14 +187,14 @@ "wikieditor-toolbar-help-content-file-description": "Ffeil mewnosodol", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Troednodyn", - "wikieditor-toolbar-help-content-reference-syntax": "Testun y dudalen.<ref name=\"test\">[http://www.enghraifft.org ysgrifen y cyswllt], ysgrifen ychwanegol.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Testun y dudalen.<ref>[http://www.enghraifft.org ysgrifen y cyswllt], ysgrifen ychwanegol.</ref>", "wikieditor-toolbar-help-content-reference-result": "Testun y dudalen.", "wikieditor-toolbar-help-content-rereference-description": "Ail-ddefnyddio troednodyn", - "wikieditor-toolbar-help-content-rereference-result": "Testun y dudalen.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Testun y dudalen.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Dangos y troednodion", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Ysgrifen y cyswllt, ysgrifen arall.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Llofnod gyda stamp amser", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Enw defnyddiwr (sgwrs) 15:54, 10 Mehefin 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Enw defnyddiwr (sgwrs) 15:54, 10 Mehefin 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Llofnod", "wikieditor-toolbar-help-content-signature-result": "Enw defnyddiwr (sgwrs)", "wikieditor-toolbar-help-content-indent-description": "Mewnoli", diff --git a/extensions/WikiEditor/i18n/da.json b/extensions/WikiEditor/i18n/da.json index 9ce64dcc..32e5ad09 100644 --- a/extensions/WikiEditor/i18n/da.json +++ b/extensions/WikiEditor/i18n/da.json @@ -192,14 +192,14 @@ "wikieditor-toolbar-help-content-file-description": "Indlejret fil", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eksempel.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Fodnote", - "wikieditor-toolbar-help-content-reference-syntax": "Sidetekst.<ref name=\"test\">[http://www.example.org Henvisningstekst], yderligere tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Sidetekst.<ref>[http://www.example.org Henvisningstekst], yderligere tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Sidetekst.[1]", "wikieditor-toolbar-help-content-rereference-description": "Yderligere henvisninger til samme fodnote", - "wikieditor-toolbar-help-content-rereference-result": "Sidetekst.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Sidetekst.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Vis fodnoter", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Henvisningstekst, yderligere tekst.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatur og tidsstempel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Brugernavn (diskussion) 10. juni 2009, 15:54 (CEST)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Brugernavn (diskussion) 10. juni 2009, 15:54 (CEST)", "wikieditor-toolbar-help-content-signature-description": "Signatur", "wikieditor-toolbar-help-content-signature-result": "Brugernavn (diskussion)", "wikieditor-toolbar-help-content-indent-description": "Indrykning", diff --git a/extensions/WikiEditor/i18n/de.json b/extensions/WikiEditor/i18n/de.json index 1b040a36..f95171c4 100644 --- a/extensions/WikiEditor/i18n/de.json +++ b/extensions/WikiEditor/i18n/de.json @@ -131,7 +131,7 @@ "wikieditor-toolbar-tool-table-preview": "Vorschau", "wikieditor-toolbar-tool-table-insert": "Einfügen", "wikieditor-toolbar-tool-table-cancel": "Abbrechen", - "wikieditor-toolbar-tool-table-toomany": "Das Einfügen einer Tabelle mit mehr als 1000 Zellen ist mit diesem Dialog nicht möglich.", + "wikieditor-toolbar-tool-table-toomany": "Das Einfügen einer Tabelle mit mehr als {{PLURAL:$1|einer Zelle|1000 Zellen}} ist mit diesem Dialog nicht möglich.", "wikieditor-toolbar-tool-table-invalidnumber": "Du hast keine gültige Anzahl von Zeilen oder Spalten angegeben.", "wikieditor-toolbar-tool-table-zero": "Du kannst keine Tabelle einfügen, die weder Zeilen noch Spalten hat.", "wikieditor-toolbar-tool-replace": "Suchen und Ersetzen", @@ -149,28 +149,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Du hast nichts zum Suchen eingegeben.", "wikieditor-toolbar-tool-replace-invalidregex": "Der eingegebene reguläre Ausdruck ist ungültig: $1", "wikieditor-toolbar-section-characters": "Sonderzeichen", - "wikieditor-toolbar-characters-page-latin": "Lateinisch", - "wikieditor-toolbar-characters-page-latinextended": "Lateinisch, erweitert", - "wikieditor-toolbar-characters-page-ipa": "Internationales Phonetisches Alphabet (IPA)", - "wikieditor-toolbar-characters-page-symbols": "Symbole", - "wikieditor-toolbar-characters-page-greek": "Griechisch", - "wikieditor-toolbar-characters-page-cyrillic": "Kyrillisch", - "wikieditor-toolbar-characters-page-arabic": "Arabisch", - "wikieditor-toolbar-characters-page-arabicextended": "Arabisch, erweitert", - "wikieditor-toolbar-characters-page-persian": "Persisch", - "wikieditor-toolbar-characters-page-hebrew": "Hebräisch", - "wikieditor-toolbar-characters-page-bangla": "Bengalisch", - "wikieditor-toolbar-characters-page-tamil": "Tamilisch", - "wikieditor-toolbar-characters-page-telugu": "Telugu", - "wikieditor-toolbar-characters-page-sinhala": "Singhalesisch", - "wikieditor-toolbar-characters-page-gujarati": "Gujarati", - "wikieditor-toolbar-characters-page-devanagari": "Devanagari", - "wikieditor-toolbar-characters-page-thai": "Thailändisch", - "wikieditor-toolbar-characters-page-lao": "Laotisch", - "wikieditor-toolbar-characters-page-khmer": "Khmer", - "wikieditor-toolbar-characters-endash": "Halbgeviertstrich", - "wikieditor-toolbar-characters-emdash": "Geviertstrich", - "wikieditor-toolbar-characters-minus": "Minus", "wikieditor-toolbar-section-help": "Hilfe", "wikieditor-toolbar-help-heading-description": "Beschreibung", "wikieditor-toolbar-help-heading-syntax": "Was du eingibst", @@ -192,8 +170,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Fetter und kursiver Text'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Fetter und kursiver Text", "wikieditor-toolbar-help-content-ilink-description": "Interner Link", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Seitentitel|Linktext]]
        [[Seitentitel]]", - "wikieditor-toolbar-help-content-ilink-result": "Linktext
        Seitentitel", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Seitentitel]]
        [[Seitentitel|Linktext]]", + "wikieditor-toolbar-help-content-ilink-result": "Seitentitel
        Linktext", "wikieditor-toolbar-help-content-xlink-description": "Externer Link", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Linktext]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Linktext
        [1]
        http://www.example.org", @@ -219,14 +197,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Beispiel.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Beschreibung", "wikieditor-toolbar-help-content-reference-description": "Einzelnachweis", - "wikieditor-toolbar-help-content-reference-syntax": "Seitentext.<ref name=\"test\">[http://www.example.org Linktext], zusätzlicher Text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Seitentext.<ref>[http://www.example.org Linktext], zusätzlicher Text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Seitentext.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Benannter Einzelnachweis", + "wikieditor-toolbar-help-content-named-reference-syntax": "Seitentext.<ref name=\"test\">[http://www.example.org Linktext]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Seitentext.[2]", "wikieditor-toolbar-help-content-rereference-description": "Den gleichen Einzelnachweis erneut verwenden", - "wikieditor-toolbar-help-content-rereference-result": "Seitentext.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Seitentext.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Einzelnachweise anzeigen", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Linktext, zusätzlicher Text.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Linktext, zusätzlicher Text.
        2. ^ Linktext
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatur mit Zeitstempel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Benutzername (Diskussion) 15:54, 10. Jun. 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Benutzername (Diskussion) 15:54, 10. Jun. 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatur", "wikieditor-toolbar-help-content-signature-result": "Benutzername (Diskussion)", "wikieditor-toolbar-help-content-indent-description": "Einrücken", diff --git a/extensions/WikiEditor/i18n/diq.json b/extensions/WikiEditor/i18n/diq.json index 50bbe1aa..75b25d3e 100644 --- a/extensions/WikiEditor/i18n/diq.json +++ b/extensions/WikiEditor/i18n/diq.json @@ -193,13 +193,13 @@ "wikieditor-toolbar-help-content-reference-syntax": "metnê peli.<ref name=\"tesel kerdış/cerebnayiş\">[http://www.misal.org metnê gıreyi], zeylê metni.</ref>", "wikieditor-toolbar-help-content-reference-result": "metnê peli.[1]", "wikieditor-toolbar-help-content-rereference-description": "şuxulnayişê zeylê o çımeyi", - "wikieditor-toolbar-help-content-rereference-result": "metnê peli.[1]", + "wikieditor-toolbar-help-content-rereference-result": "metnê peli.[2]", "wikieditor-toolbar-help-content-showreferences-description": "çımeyi ramocın", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ metnê gırey, metno ilawe.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "pê tamğayê zemani imza eştış", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "nameyê karberi (mesaj) 15:54, 10 Heziran 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--nameyê karberi (mesaj) 15:54, 10 Heziran 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "imza", - "wikieditor-toolbar-help-content-signature-result": "Namey karberi (mesac)", + "wikieditor-toolbar-help-content-signature-result": "Nameyê karberi (mesac)", "wikieditor-toolbar-help-content-indent-description": "Kewente", "wikieditor-toolbar-help-content-indent-syntax": "metno normal
        :metno indent
        ::metno indent", "wikieditor-toolbar-help-content-indent-result": "metno normal
        metno indent
        metno indent
        " diff --git a/extensions/WikiEditor/i18n/dsb.json b/extensions/WikiEditor/i18n/dsb.json index 01f2bd90..b2c6eae4 100644 --- a/extensions/WikiEditor/i18n/dsb.json +++ b/extensions/WikiEditor/i18n/dsb.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Zasajźona dataja", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referenca", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst boka.<ref name=\"test\">[http://www.example.org Tekst wótkaza], pśidatny tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst boka.<ref>[http://www.example.org Tekst wótkaza], pśidatny tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tekst boka.[1]", "wikieditor-toolbar-help-content-rereference-description": "Pśidatne wužywanje samskeje reference", - "wikieditor-toolbar-help-content-rereference-result": "Tekst boka.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tekst boka.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Reference zwobrazniś", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Tekst wótkaza, pśidanty tekst.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatura z casowym koÅ‚kom", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Wužywarske mÄ› (diskusija) 15:54, 10. junija 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Wužywarske mÄ› (diskusija) 15:54, 10. junija 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatura", "wikieditor-toolbar-help-content-signature-result": "Wužywarske mÄ› (diskusija)", "wikieditor-toolbar-help-content-indent-description": "Zasunjenje", diff --git a/extensions/WikiEditor/i18n/el.json b/extensions/WikiEditor/i18n/el.json index 0010026a..2d3b631b 100644 --- a/extensions/WikiEditor/i18n/el.json +++ b/extensions/WikiEditor/i18n/el.json @@ -34,7 +34,6 @@ "wikieditor-toolbar-desc": "ΜπάÏα εÏγαλείων επεξεÏγασίας σελίδων με πεÏισσότεÏες δυνατότητες χÏήσης", "wikieditor-toolbar-preference": "ΕνεÏγοποιήστε την μπάÏα εÏγαλείων με τις πεÏισσότεÏες δυνατότητες επεξεÏγασίας", "wikieditor-toolbar-dialogs-preference": "ΕνεÏγοποίηση οδηγών για την εισαγωγή συνδέσμων, πινάκων όπως και της λειτουÏγίας αναζήτησης και αντικατάστασης", - "wikieditor-toolbar-hidesig": "ΚÏÏψε το κουμπί υπογÏαφής από σελίδες στον κÏÏιο χώÏο ονομάτων", "wikieditor-toolbar-loading": "ΦόÏτωση...", "wikieditor-toolbar-tool-bold": "Έντονα", "wikieditor-toolbar-tool-bold-example": "Έντονο κείμενο", @@ -168,7 +167,7 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Έντονο & πλάγιο κείμενο'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Έντονο & πλάγιο κείμενο", "wikieditor-toolbar-help-content-ilink-description": "ΕσωτεÏικός σÏνδεσμος", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Τίτλος σελίδας|Ταμπέλα συνδέσμου]]
        [[Τίτλος σελίδας]]", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Τίτλος σελίδας]]
        [[Τίτλος σελίδας|Ετικέτα συνδέσμου]]", "wikieditor-toolbar-help-content-ilink-result": "Τίτλος συνδέσμου
        Τίτλος σελίδας", "wikieditor-toolbar-help-content-xlink-description": "ΕξωτεÏικοί σÏνδεσμοι", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Ταμπέλα συνδέσμου]
        [http://www.example.org]
        http://www.example.org", @@ -194,14 +193,14 @@ "wikieditor-toolbar-help-content-file-description": "Ενσωματωμένο αÏχείο", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "ΠαÏαπομπή", - "wikieditor-toolbar-help-content-reference-syntax": "Κείμενο σελίδας.<ref name=\"test\">[http://www.example.org Κείμενο συνδέσμου], επιπλέον κείμενο.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Κείμενο σελίδας.<ref>[http://www.example.org Κείμενο συνδέσμου], επιπλέον κείμενο.</ref>", "wikieditor-toolbar-help-content-reference-result": "Κείμενο σελίδας.[1]", "wikieditor-toolbar-help-content-rereference-description": "ΠÏόσθετη χÏήση της ίδιας παÏαπομπής", - "wikieditor-toolbar-help-content-rereference-result": "Κείμενο σελίδας.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Κείμενο σελίδας.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Εμφάνιση παÏαπομπών", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Κείμενο συνδέσμου, επιπλέον κείμενο.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ΥπογÏαφή με σφÏαγίδα χÏόνου", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Όνομα χÏήστη (συζήτηση) 10 Ιουνίου 2009 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Όνομα χÏήστη (συζήτηση) 10 Ιουνίου 2009 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ΥπογÏαφή", "wikieditor-toolbar-help-content-signature-result": "Όνομα χÏήστη (συζήτηση)", "wikieditor-toolbar-help-content-indent-description": "Οδόντωση", diff --git a/extensions/WikiEditor/i18n/en.json b/extensions/WikiEditor/i18n/en.json index 2138026d..0384b295 100644 --- a/extensions/WikiEditor/i18n/en.json +++ b/extensions/WikiEditor/i18n/en.json @@ -25,7 +25,6 @@ "wikieditor-toolbar-desc": "Edit page toolbar with enhanced usability", "wikieditor-toolbar-preference": "Enable enhanced editing toolbar", "wikieditor-toolbar-dialogs-preference": "Enable wizards for inserting links, tables as well as the search and replace function", - "wikieditor-toolbar-hidesig": "Hide the signature button from pages in the main namespace", "wikieditor-toolbar-loading": "Loading...", "wikieditor-toolbar-tool-bold": "Bold", "wikieditor-toolbar-tool-bold-example": "Bold text", @@ -121,7 +120,7 @@ "wikieditor-toolbar-tool-table-insert": "Insert", "wikieditor-toolbar-tool-table-cancel": "Cancel", "wikieditor-toolbar-tool-table-example-text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec purus diam. Sed aliquam imperdiet nunc quis lacinia. Donec rutrum consectetur placerat. Sed volutpat neque non purus faucibus id ultricies enim euismod.", - "wikieditor-toolbar-tool-table-toomany": "Inserting a table with more than 1000 cells is not possible with this dialog.", + "wikieditor-toolbar-tool-table-toomany": "Inserting a table with more than $1 {{PLURAL:$1|cells}} is not possible with this dialog.", "wikieditor-toolbar-tool-table-invalidnumber": "You have not entered a valid number of rows or columns.", "wikieditor-toolbar-tool-table-zero": "You cannot insert a table with zero rows or columns.", "wikieditor-toolbar-tool-replace": "Search and replace", @@ -160,8 +159,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Bold & italic text'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Bold & italic text", "wikieditor-toolbar-help-content-ilink-description": "Internal link", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Page title|Link label]]
        [[Page title]]", - "wikieditor-toolbar-help-content-ilink-result": "Link label
        Page title", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Page title]]
        [[Page title|Link label]]", + "wikieditor-toolbar-help-content-ilink-result": "Page title
        Link label", "wikieditor-toolbar-help-content-xlink-description": "External link", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Link label]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Link label
        [1]
        http://www.example.org", @@ -187,17 +186,20 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Caption text", "wikieditor-toolbar-help-content-reference-description": "Reference", - "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref name=\"test\">[http://www.example.org Link text], additional text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref>[http://www.example.org Link text], additional text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Page text.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Named reference", + "wikieditor-toolbar-help-content-named-reference-syntax": "Page text.<ref name=\"test\">[http://www.example.org Link text]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Page text.[2]", "wikieditor-toolbar-help-content-rereference-description": "Additional use of same reference", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"test\" />", - "wikieditor-toolbar-help-content-rereference-result": "Page text.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Page text.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Display references", "wikieditor-toolbar-help-content-showreferences-syntax": "<references />", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Link text, additional text.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Link text, additional text.
        2. ^ Link text
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signature with timestamp", - "wikieditor-toolbar-help-content-signaturetimestamp-syntax": "~~~~", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Username (talk) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-syntax": "--~~~~", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Username (talk) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signature", "wikieditor-toolbar-help-content-signature-syntax": "~~~", "wikieditor-toolbar-help-content-signature-result": "Username (talk)", diff --git a/extensions/WikiEditor/i18n/eo.json b/extensions/WikiEditor/i18n/eo.json index 32d01550..eb3a4161 100644 --- a/extensions/WikiEditor/i18n/eo.json +++ b/extensions/WikiEditor/i18n/eo.json @@ -34,7 +34,6 @@ "wikieditor-toolbar-desc": "Ilobreto por redaktoj, kun plibonigita uzebleco", "wikieditor-toolbar-preference": "EnÅalti plibonigitan ilobreton por redaktoj", "wikieditor-toolbar-dialogs-preference": "EnÅalti dialogujojn por aldoni ligilojn, tabelojn kaj pli", - "wikieditor-toolbar-hidesig": "KaÅi la subskribo-butonon de paÄoj en la ĉefa nomspaco", "wikieditor-toolbar-loading": "ÅœarÄante...", "wikieditor-toolbar-tool-bold": "Diklitera", "wikieditor-toolbar-tool-bold-example": "Diklitera teksto", @@ -194,14 +193,14 @@ "wikieditor-toolbar-help-content-file-description": "Enmetita dosiero", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Piednoto", - "wikieditor-toolbar-help-content-reference-syntax": "PaÄa teksto.<ref name=\"test\">[http://www.ekzemplo.org Ligila teksto], aldona teksto.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "PaÄa teksto.<ref>[http://www.ekzemplo.org Ligila teksto], aldona teksto.</ref>", "wikieditor-toolbar-help-content-reference-result": "PaÄa teksto.[1]", "wikieditor-toolbar-help-content-rereference-description": "Reuzo de la sama piednoto.", - "wikieditor-toolbar-help-content-rereference-result": "PaÄa teksto.[1]", + "wikieditor-toolbar-help-content-rereference-result": "PaÄa teksto.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Montri piednotojn", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Ligila teksto, aldona teksto.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Subskribo kun tempindiko", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Salutnomo (diskuto) 15:54, 10 junio 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Salutnomo (diskuto) 15:54, 10 junio 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Subskribo", "wikieditor-toolbar-help-content-signature-result": "Salutnomo (diskuto)", "wikieditor-toolbar-help-content-indent-description": "KrommarÄeno", diff --git a/extensions/WikiEditor/i18n/es.json b/extensions/WikiEditor/i18n/es.json index 3567e04d..313426a8 100644 --- a/extensions/WikiEditor/i18n/es.json +++ b/extensions/WikiEditor/i18n/es.json @@ -57,7 +57,7 @@ "wikieditor-toolbar-tool-link-int-target": "Título de página:", "wikieditor-toolbar-tool-link-int-target-tooltip": "Título de la página o URL", "wikieditor-toolbar-tool-link-int-text": "Título del enlace", - "wikieditor-toolbar-tool-link-int-text-tooltip": "Introducir el texto para mostrar", + "wikieditor-toolbar-tool-link-int-text-tooltip": "Texto que se mostrará", "wikieditor-toolbar-tool-link-ext": "A una página web externa", "wikieditor-toolbar-tool-link-ext-target": "URL del enlace:", "wikieditor-toolbar-tool-link-ext-text": "Título del enlace:", @@ -107,7 +107,7 @@ "wikieditor-toolbar-tool-olist": "Lista numerada", "wikieditor-toolbar-tool-olist-example": "Elemento de lista numerada", "wikieditor-toolbar-tool-nowiki": "Sin formato wiki", - "wikieditor-toolbar-tool-nowiki-example": "Introduzca texto sin formato aquí", + "wikieditor-toolbar-tool-nowiki-example": "Escribe texto sin formato aquí", "wikieditor-toolbar-tool-redirect": "Redirección", "wikieditor-toolbar-tool-redirect-example": "Nombre de la página destino", "wikieditor-toolbar-tool-big": "Grande", @@ -154,28 +154,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "No ingresó nada para buscar.", "wikieditor-toolbar-tool-replace-invalidregex": "La expresión regular que ha introducido es inválida: $1", "wikieditor-toolbar-section-characters": "Caracteres especiales", - "wikieditor-toolbar-characters-page-latin": "Latín", - "wikieditor-toolbar-characters-page-latinextended": "Latín extendido", - "wikieditor-toolbar-characters-page-ipa": "AFI", - "wikieditor-toolbar-characters-page-symbols": "Símbolos", - "wikieditor-toolbar-characters-page-greek": "Griego", - "wikieditor-toolbar-characters-page-cyrillic": "Cirílico", - "wikieditor-toolbar-characters-page-arabic": "Ãrabe", - "wikieditor-toolbar-characters-page-arabicextended": "Arábico extendido", - "wikieditor-toolbar-characters-page-persian": "Persa", - "wikieditor-toolbar-characters-page-hebrew": "Hebreo", - "wikieditor-toolbar-characters-page-bangla": "Bengalí", - "wikieditor-toolbar-characters-page-tamil": "Tamil", - "wikieditor-toolbar-characters-page-telugu": "Telugú", - "wikieditor-toolbar-characters-page-sinhala": "Sinhala", - "wikieditor-toolbar-characters-page-gujarati": "Gujarati", - "wikieditor-toolbar-characters-page-devanagari": "Devanagari", - "wikieditor-toolbar-characters-page-thai": "Tailandés", - "wikieditor-toolbar-characters-page-lao": "Lao", - "wikieditor-toolbar-characters-page-khmer": "Jemer", - "wikieditor-toolbar-characters-endash": "semirraya", - "wikieditor-toolbar-characters-emdash": "raya", - "wikieditor-toolbar-characters-minus": "signo menos", "wikieditor-toolbar-section-help": "Ayuda", "wikieditor-toolbar-help-heading-description": "Descripción", "wikieditor-toolbar-help-heading-syntax": "Lo que escribes", @@ -197,8 +175,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Texto en negrita y cursiva'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Texto en negrita & cursiva", "wikieditor-toolbar-help-content-ilink-description": "Enlace interno", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Título de la página|Texto del enlace]]
        [[Título de la página]]", - "wikieditor-toolbar-help-content-ilink-result": "Texto del enlace
        Título de la página", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Título de la página]]
        [[Título de la página|Etiqueta del enlace]]", + "wikieditor-toolbar-help-content-ilink-result": "Título de la página
        Etiqueta del enlace", "wikieditor-toolbar-help-content-xlink-description": "Enlace externo", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Etiqueta del enlace]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Etiqueta del enlace
        [1]
        http://www.example.org", @@ -224,14 +202,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ejemplo.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Texto de la leyenda", "wikieditor-toolbar-help-content-reference-description": "Referencia", - "wikieditor-toolbar-help-content-reference-syntax": "Texto de página.<ref name=\"test\">[http://www.example.org Texto de vínculo], texto adicional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Texto de página.<ref>[http://www.example.org Texto del enlace], texto adicional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Texto de página.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Referencia nombrada", + "wikieditor-toolbar-help-content-named-reference-syntax": "Texto de la página.<ref name=\"test\">[http://www.example.org Texto del enlace]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Texto de página.[2]", "wikieditor-toolbar-help-content-rereference-description": "Uso adicional de la misma referencia", - "wikieditor-toolbar-help-content-rereference-result": "Texto de página.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Texto de página.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Mostrar referencias", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Texto de vínculo, texto adicional.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Texto del enlace, texto adicional.
        2. ^ Texto del enlace
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Fecha y firma", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nombre de usuario (discusión) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nombre de usuario (discusión) 15:54, 10 de junio de 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firma", "wikieditor-toolbar-help-content-signature-result": "Nombre de usuario (discusión)", "wikieditor-toolbar-help-content-indent-description": "Sangría", diff --git a/extensions/WikiEditor/i18n/et.json b/extensions/WikiEditor/i18n/et.json index b0dccf99..310feebd 100644 --- a/extensions/WikiEditor/i18n/et.json +++ b/extensions/WikiEditor/i18n/et.json @@ -28,7 +28,6 @@ "wikieditor-toolbar-desc": "Täiustatud kasutushõlpsusega redigeerimislehekülje tööriistariba", "wikieditor-toolbar-preference": "Kasuta laiendatud redigeerimisriba", "wikieditor-toolbar-dialogs-preference": "Kasuta viisardeid tabelite lisamisel ning otsi- ja asendusfunktsiooni jaoks", - "wikieditor-toolbar-hidesig": "Peida põhinimeruumi lehekülgedel allkirjanupp", "wikieditor-toolbar-loading": "Laadimine...", "wikieditor-toolbar-tool-bold": "Rasvane", "wikieditor-toolbar-tool-bold-example": "Rasvane kiri", @@ -45,7 +44,7 @@ "wikieditor-toolbar-tool-link-int-target-tooltip": "Lehekülje pealkiri või internetiaadress", "wikieditor-toolbar-tool-link-int-text": "Lingi tekst:", "wikieditor-toolbar-tool-link-int-text-tooltip": "Kuvatav tekst", - "wikieditor-toolbar-tool-link-ext": "Välisele võrguleheküljele", + "wikieditor-toolbar-tool-link-ext": "Välisele veebilehele", "wikieditor-toolbar-tool-link-ext-target": "Lingi aadress:", "wikieditor-toolbar-tool-link-ext-text": "Lingi tekst:", "wikieditor-toolbar-tool-link-insert": "Lisa link", @@ -123,7 +122,7 @@ "wikieditor-toolbar-tool-table-preview": "Eelvaade", "wikieditor-toolbar-tool-table-insert": "Lisa", "wikieditor-toolbar-tool-table-cancel": "Loobu", - "wikieditor-toolbar-tool-table-toomany": "Selle dialoogiaknaga ei saa lisada tabelit, millel on üle 1000 lahtri.", + "wikieditor-toolbar-tool-table-toomany": "Selle dialoogiaknaga ei saa lisada tabelit, milles on üle $1 {{PLURAL:$1|lahtri}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Sa pole sisestanud sobivat ridade ega veergude määra.", "wikieditor-toolbar-tool-table-zero": "Ühegi rea ega veeruta tabelit ei saa lisada", "wikieditor-toolbar-tool-replace": "Otsi ja asenda", @@ -141,28 +140,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Otsitav on sisestamata.", "wikieditor-toolbar-tool-replace-invalidregex": "Sisestatud regulaaravaldis on vigane: $1", "wikieditor-toolbar-section-characters": "Erimärgid", - "wikieditor-toolbar-characters-page-latin": "Ladina", - "wikieditor-toolbar-characters-page-latinextended": "Ladina (laiendatud)", - "wikieditor-toolbar-characters-page-ipa": "IPA-laiendid", - "wikieditor-toolbar-characters-page-symbols": "Sümbolid", - "wikieditor-toolbar-characters-page-greek": "Kreeka", - "wikieditor-toolbar-characters-page-cyrillic": "Kirillitsa", - "wikieditor-toolbar-characters-page-arabic": "Araabia", - "wikieditor-toolbar-characters-page-arabicextended": "Araabia (laiendatud)", - "wikieditor-toolbar-characters-page-persian": "Pärsia", - "wikieditor-toolbar-characters-page-hebrew": "Heebrea", - "wikieditor-toolbar-characters-page-bangla": "Bengali", - "wikieditor-toolbar-characters-page-tamil": "Tamili", - "wikieditor-toolbar-characters-page-telugu": "Telugu", - "wikieditor-toolbar-characters-page-sinhala": "Singali", - "wikieditor-toolbar-characters-page-gujarati": "Gudžarati", - "wikieditor-toolbar-characters-page-devanagari": "Devanaagari", - "wikieditor-toolbar-characters-page-thai": "Tai", - "wikieditor-toolbar-characters-page-lao": "Lao", - "wikieditor-toolbar-characters-page-khmer": "Khmeeri", - "wikieditor-toolbar-characters-endash": "mõttekriips", - "wikieditor-toolbar-characters-emdash": "pikk mõttekriips", - "wikieditor-toolbar-characters-minus": "miinusmärk", "wikieditor-toolbar-section-help": "Abi", "wikieditor-toolbar-help-heading-description": "Kirjeldus", "wikieditor-toolbar-help-heading-syntax": "Trükitu", @@ -211,17 +188,20 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Näide.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Pildiallkiri", "wikieditor-toolbar-help-content-reference-description": "Viide", - "wikieditor-toolbar-help-content-reference-syntax": "Lehekülje tekst.<ref name=\"test\">[http://www.näide.ee Lingi tekst], täiendav tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Lehekülje tekst.<ref>[http://www.näide.ee Lingi tekst], täiendav tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Lehekülje tekst.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Nimega viide", + "wikieditor-toolbar-help-content-named-reference-syntax": "Lehekülje tekst.<ref name=\"test\">[http://www.näide.ee Lingi tekst]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Lehekülje tekst.[2]", "wikieditor-toolbar-help-content-rereference-description": "Sama viite mitmekordne kasutamine", - "wikieditor-toolbar-help-content-rereference-syntax": "Lehekülje tekst.<ref name=\"test\" />", - "wikieditor-toolbar-help-content-rereference-result": "Lehekülje tekst.[1]", + "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"test\" />", + "wikieditor-toolbar-help-content-rereference-result": "Lehekülje tekst.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Viidete kuvamine", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Lingi tekst, täiendav tekst.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Lingi tekst, täiendav tekst.
        2. ^ Lingi tekst
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Allkiri ja ajatempel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Kasutajanimi 10. juuni 2009, kell 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Kasutajanimi (arutelu) 10. juuni 2009, kell 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Allkiri", - "wikieditor-toolbar-help-content-signature-result": "Kasutajanimi", + "wikieditor-toolbar-help-content-signature-result": "Kasutajanimi (arutelu)", "wikieditor-toolbar-help-content-indent-description": "Taane", "wikieditor-toolbar-help-content-indent-syntax": "Harilik tekst
        :Taandega tekst
        ::Taandega tekst", "wikieditor-toolbar-help-content-indent-result": "Harilik tekst
        Taandega tekst
        Taandega tekst
        " diff --git a/extensions/WikiEditor/i18n/eu.json b/extensions/WikiEditor/i18n/eu.json index 70b0bc6a..c61a8044 100644 --- a/extensions/WikiEditor/i18n/eu.json +++ b/extensions/WikiEditor/i18n/eu.json @@ -6,7 +6,8 @@ "Joxemai", "Xabier Armendaritz", "පසිඳු කà·à·€à·’න්ද", - "Macofe" + "Macofe", + "Sator" ] }, "wikieditor": "Wikitestu edizio-interfaze aurreratua", @@ -56,6 +57,7 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "Balio gabeko izenburua", "wikieditor-toolbar-tool-link-int-target-status-external": "Kanpo lotura", "wikieditor-toolbar-tool-link-int-target-status-loading": "Orriaren existentzia egiaztatzen...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "Argipen orria", "wikieditor-toolbar-tool-link-int-invalid": "Zehaztutako izenburua ez dago zuzen.", "wikieditor-toolbar-tool-link-lookslikeinternal": "Adierazi duzun URL beste wiki orri batera lotzen duela dirudi.\nBarne lotura bezala sortu nahi duzu?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Barne lotura", @@ -63,6 +65,9 @@ "wikieditor-toolbar-tool-link-empty": "Ez duzu bilatu beharreko ezer adierazi.", "wikieditor-toolbar-tool-file": "Fitxategia txertatu", "wikieditor-toolbar-tool-file-example": "Adibidea.jpg", + "wikieditor-toolbar-tool-file-title": "Fitxategia txertatu", + "wikieditor-toolbar-file-target": "Fitxategi-izena:", + "wikieditor-toolbar-file-caption": "Irudi-oineko testua", "wikieditor-toolbar-file-size": "Tamaina:", "wikieditor-toolbar-file-format": "Formatua:", "wikieditor-toolbar-tool-file-insert": "Txertatu", @@ -156,8 +161,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Letra lodi eta etzaneko testua'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Letra lodi eta etzaneko testua", "wikieditor-toolbar-help-content-ilink-description": "Barne lotura", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Orriaren titulua|Loturaren izena]]
        [[Orriaren titulua]]", - "wikieditor-toolbar-help-content-ilink-result": "Loturaren izena
        Orriaren titulua", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Orriaren titulua]]
        [[Orriaren titulua|Loturaren etiketa]]", + "wikieditor-toolbar-help-content-ilink-result": "Orriaren titulua
        Etiketaren lotura", "wikieditor-toolbar-help-content-xlink-description": "Kanpo lotura", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.adibidea.org Loturaren izena]
        [http://www.adibidea.org]
        http://www.adibidea.org", "wikieditor-toolbar-help-content-xlink-result": "Loturaren izena
        [1]
        http://www.adibidea.org", @@ -185,11 +190,11 @@ "wikieditor-toolbar-help-content-reference-syntax": "Orrialdearen testua.<ref name=\"proba\">[http://www.adibidea.org Loturaren testua], testu gehigarria.</ref>", "wikieditor-toolbar-help-content-reference-result": "Orrialdearen testua.[1]", "wikieditor-toolbar-help-content-rereference-description": "Erreferentzia beraren erabilera gehiago", - "wikieditor-toolbar-help-content-rereference-result": "Orrialdearen testua.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Orrialdearen testua.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Erreferentziak erakutsi", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Loturaren testua, testu gehigarria.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Sindaura, eguna eta ordua", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Lankide izena (eztabaida) 2009-06-10, 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Lankide izena (eztabaida) 2009-06-10, 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Sinadura", "wikieditor-toolbar-help-content-signature-result": "Lankide izena (eztabaida)", "wikieditor-toolbar-help-content-indent-description": "Koska", diff --git a/extensions/WikiEditor/i18n/fa.json b/extensions/WikiEditor/i18n/fa.json index f3aad408..55bc3012 100644 --- a/extensions/WikiEditor/i18n/fa.json +++ b/extensions/WikiEditor/i18n/fa.json @@ -32,7 +32,7 @@ "wikieditor-publish-dialog-goback": "بازگشت به عقب", "wikieditor-toolbar": "نوار ابزار ویرایش", "wikieditor-toolbar-desc": "نوار ابزار ویرایش صÙحه با استÙاده‌پذیری بالاتر", - "wikieditor-toolbar-preference": "Ùعال‌کردن نوارابزار ویرایش پیشرÙته", + "wikieditor-toolbar-preference": "Ùعال کردن نوارابزار ویرایش پیشرÙته", "wikieditor-toolbar-dialogs-preference": "Ùعال‌سازی پنجره‌های تعاملی برای وارد کردن پیوندها، جدول‌ها همراه با دستور جستجو Ùˆ جایگزینی", "wikieditor-toolbar-hidesig": "نهÙتن دکمهٔ امضا از صÙحه‌های Ùضای نام اصلی", "wikieditor-toolbar-loading": "در حال بارگیری...", @@ -147,28 +147,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "شما چیزی برای جستجو وارد نکردید.", "wikieditor-toolbar-tool-replace-invalidregex": "عبارت باقاعده‌ای Ú©Ù‡ وارد کردید مجاز نیست: $1", "wikieditor-toolbar-section-characters": "نویسه‌های ویژه", - "wikieditor-toolbar-characters-page-latin": "لاتین", - "wikieditor-toolbar-characters-page-latinextended": "لاتین گسترش‌یاÙته", - "wikieditor-toolbar-characters-page-ipa": "آوانگاری بین‌المللی", - "wikieditor-toolbar-characters-page-symbols": "نمادها", - "wikieditor-toolbar-characters-page-greek": "یونانی", - "wikieditor-toolbar-characters-page-cyrillic": "سیریلیک", - "wikieditor-toolbar-characters-page-arabic": "عربی", - "wikieditor-toolbar-characters-page-arabicextended": "عربی گسترش‌یاÙته", - "wikieditor-toolbar-characters-page-persian": "Ùارسی", - "wikieditor-toolbar-characters-page-hebrew": "عبری", - "wikieditor-toolbar-characters-page-bangla": "بنگالی", - "wikieditor-toolbar-characters-page-tamil": "تامیلی", - "wikieditor-toolbar-characters-page-telugu": "تالوگو", - "wikieditor-toolbar-characters-page-sinhala": "سینهالی", - "wikieditor-toolbar-characters-page-gujarati": "گجراتی", - "wikieditor-toolbar-characters-page-devanagari": "دیواناگرى", - "wikieditor-toolbar-characters-page-thai": "تایلندی", - "wikieditor-toolbar-characters-page-lao": "لائو", - "wikieditor-toolbar-characters-page-khmer": "خمر", - "wikieditor-toolbar-characters-endash": "خط Ùاصله", - "wikieditor-toolbar-characters-emdash": "خط Ùاسله کشیده", - "wikieditor-toolbar-characters-minus": "علامت منÙÛŒ", "wikieditor-toolbar-section-help": "راهنما", "wikieditor-toolbar-help-heading-description": "توضیح", "wikieditor-toolbar-help-heading-syntax": "آن Ú†Ù‡ می‌نویسید", @@ -215,16 +193,15 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. مورد Ùهرست
        2. مورد Ùهرست
        ", "wikieditor-toolbar-help-content-file-description": "پرونده جاسازی‌شده", "wikieditor-toolbar-help-content-file-syntax": "[[$1:مثال.png|بندانگشتی|متن عنوان]]", - "wikieditor-toolbar-help-content-file-result": "
        متن عنوان
        ", "wikieditor-toolbar-help-content-reference-description": "منبع", - "wikieditor-toolbar-help-content-reference-syntax": "متن صÙحه.<ref name=\"test\">[http://www.example.org متن پیوند]ØŒ متن اضاÙÛŒ.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "متن صÙحه.<ref>[http://www.example.org متن پیوند]ØŒ متن اضاÙÛŒ.</ref>", "wikieditor-toolbar-help-content-reference-result": "متن صÙحه.[1]", "wikieditor-toolbar-help-content-rereference-description": "استÙادهٔ دوباره از همان منبع", - "wikieditor-toolbar-help-content-rereference-result": "متن صÙحه.[1]", + "wikieditor-toolbar-help-content-rereference-result": "متن صÙحه.[2]", "wikieditor-toolbar-help-content-showreferences-description": "نمایش منابع", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ متن پیوند، متن اضاÙÛŒ.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "امضا به همراه برچسب زمان", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "نام کاربری (بحث)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--نام کاربری (بحث)", "wikieditor-toolbar-help-content-signature-description": "امضا", "wikieditor-toolbar-help-content-signature-result": "نام کاربری (بحث)", "wikieditor-toolbar-help-content-indent-description": "تورÙتگی", diff --git a/extensions/WikiEditor/i18n/fi.json b/extensions/WikiEditor/i18n/fi.json index 743bff90..315d5345 100644 --- a/extensions/WikiEditor/i18n/fi.json +++ b/extensions/WikiEditor/i18n/fi.json @@ -199,14 +199,15 @@ "wikieditor-toolbar-help-content-file-description": "Tallennettu tiedosto", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Viite", - "wikieditor-toolbar-help-content-reference-syntax": "Sivun teksti.<ref name=\"testi\">[http://www.example.org Linkin teksti], lisäteksti.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Sivun teksti.<ref>[http://www.example.org Linkin teksti], lisäteksti.</ref>", "wikieditor-toolbar-help-content-reference-result": "Sivun teksti.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Nimetty viite", "wikieditor-toolbar-help-content-rereference-description": "Saman viitteen lisäkäyttö", - "wikieditor-toolbar-help-content-rereference-result": "Sivun teksti.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Sivun teksti.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Näytä viitteet", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Linkin teksti, lisäteksti.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Allekirjoitus aikaleimalla", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Käyttäjätunnus (keskustelu) 10. kesäkuuta 2009 kello 15.54 (EEST)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Käyttäjätunnus (keskustelu) 10. kesäkuuta 2009 kello 15.54 (EEST)", "wikieditor-toolbar-help-content-signature-description": "Allekirjoitus", "wikieditor-toolbar-help-content-signature-result": "Käyttäjätunnus (keskustelu)", "wikieditor-toolbar-help-content-indent-description": "Sisennys", diff --git a/extensions/WikiEditor/i18n/fr.json b/extensions/WikiEditor/i18n/fr.json index b2ae9e8d..c5024f38 100644 --- a/extensions/WikiEditor/i18n/fr.json +++ b/extensions/WikiEditor/i18n/fr.json @@ -15,13 +15,15 @@ "Verdy p", "Wyz", "Zetud", - "Macofe" + "Macofe", + "Djiboun", + "Freak2fast4u" ] }, "wikieditor": "Interface avancée de modification de wikitexte", - "wikieditor-desc": "Fournit un interface de modification de wikitexte extensible et plusieurs fonctionnalités.", + "wikieditor-desc": "Fournit une interface de modification de wikitexte extensible et de nombreuses fonctionnalités.", "wikieditor-wikitext-tab": "WikiTexte", - "wikieditor-loading": "Chargement", + "wikieditor-loading": "Chargement en cours…", "wikieditor-preview-preference": "Activer la prévisualisation côte à côte", "wikieditor-preview-tab": "Prévisualisation", "wikieditor-preview-changes-tab": "Changements", @@ -48,11 +50,11 @@ "wikieditor-toolbar-tool-ilink": "Lien interne", "wikieditor-toolbar-tool-ilink-example": "Titre du lien", "wikieditor-toolbar-tool-xlink": "Lien externe (n’oubliez pas le préfixe http://)", - "wikieditor-toolbar-tool-xlink-example": "http://www.example.com titre du lien", + "wikieditor-toolbar-tool-xlink-example": "http://www.exemple.com titre du lien", "wikieditor-toolbar-tool-link": "Lien", "wikieditor-toolbar-tool-link-title": "Insérer un lien", "wikieditor-toolbar-tool-link-int": "Vers un article / une page wiki", - "wikieditor-toolbar-tool-link-int-target": "Titre de la page :", + "wikieditor-toolbar-tool-link-int-target": "Page ou URL cible :", "wikieditor-toolbar-tool-link-int-target-tooltip": "Titre de la page ou URL", "wikieditor-toolbar-tool-link-int-text": "Texte du lien :", "wikieditor-toolbar-tool-link-int-text-tooltip": "Entrez le texte qui devrait être affiché", @@ -134,7 +136,7 @@ "wikieditor-toolbar-tool-table-preview": "Prévisualisation", "wikieditor-toolbar-tool-table-insert": "Insérer", "wikieditor-toolbar-tool-table-cancel": "Annuler", - "wikieditor-toolbar-tool-table-toomany": "Il n’est pas possible d’insérer un tableau de plus de 1000 cellules avec cet outil.", + "wikieditor-toolbar-tool-table-toomany": "Il n’est pas possible d’insérer un tableau de plus de $1 {{PLURAL:$1|cellule|cellules}} avec cet outil.", "wikieditor-toolbar-tool-table-invalidnumber": "Vous n’avez pas entré un nombre de lignes ou de colonnes valide.", "wikieditor-toolbar-tool-table-zero": "Vous ne pouvez pas insérer un tableau sans ligne ou sans colonne.", "wikieditor-toolbar-tool-replace": "Rechercher et remplacer", @@ -173,8 +175,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Texte gras & italique'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Texte gras & italique", "wikieditor-toolbar-help-content-ilink-description": "Lien interne", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Titre de la page|Texte du lien]]
        [[Titre de la page]]", - "wikieditor-toolbar-help-content-ilink-result": "Texte du lien
        Titre de la page", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Titre de la page]]
        [[Titre de la page|Libellé du lien]]", + "wikieditor-toolbar-help-content-ilink-result": "Titre de la page
        Libellé du lien", "wikieditor-toolbar-help-content-xlink-description": "Lien externe", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Texte du lien]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Texte du lien
        [1]
        http://www.example.org", @@ -198,15 +200,19 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. Élément de la liste
        2. Élément de la liste
        ", "wikieditor-toolbar-help-content-file-description": "Fichier inséré", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemple.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Texte de la légende", "wikieditor-toolbar-help-content-reference-description": "Référence", - "wikieditor-toolbar-help-content-reference-syntax": "Texte de la page<ref name=\"test\">[http://www.example.org texte du lien], texte additionnel.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Texte de la page<ref>[http://www.example.org texte du lien], texte additionnel.</ref>", "wikieditor-toolbar-help-content-reference-result": "Texte de la page [1]", + "wikieditor-toolbar-help-content-named-reference-description": "Référence nommée", + "wikieditor-toolbar-help-content-named-reference-syntax": "Texte de la page.<ref name=\"test\">[http://www.example.org Texte du lien]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Texte de la page.[2]", "wikieditor-toolbar-help-content-rereference-description": "Utilisation additionnelle de la même référence", - "wikieditor-toolbar-help-content-rereference-result": "Texte de la page [1]", + "wikieditor-toolbar-help-content-rereference-result": "Texte de la page [2]", "wikieditor-toolbar-help-content-showreferences-description": "Afficher les références", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Texte du lien, texte additionnel.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Texte du lien, additional text.
        2. ^ Texte du lien
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signature avec date", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nom d’utilisateur (discuter) 10 Juin 2009 à 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nom d’utilisateur (discuter) 10 Juin 2009 à 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signature", "wikieditor-toolbar-help-content-signature-result": "Nom d’utilisateur (discuter)", "wikieditor-toolbar-help-content-indent-description": "Retrait", diff --git a/extensions/WikiEditor/i18n/frp.json b/extensions/WikiEditor/i18n/frp.json index 7fd9b9c8..700ef404 100644 --- a/extensions/WikiEditor/i18n/frp.json +++ b/extensions/WikiEditor/i18n/frp.json @@ -185,14 +185,14 @@ "wikieditor-toolbar-help-content-file-description": "Fichiér entrebetâ", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ègzemplo.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Refèrence", - "wikieditor-toolbar-help-content-reference-syntax": "Tèxto de la pâge.<ref name=\"test\">[http://www.example.org tèxto du lim], tèxto de ples.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tèxto de la pâge.<ref>[http://www.example.org tèxto du lim], tèxto de ples.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tèxto de la pâge.[1]", "wikieditor-toolbar-help-content-rereference-description": "Usâjo de ples de la méma refèrence", - "wikieditor-toolbar-help-content-rereference-result": "Tèxto de la pâge.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tèxto de la pâge.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Fâre vêre les refèrences", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Tèxto du lim, tèxto de ples.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatura avouéc dâta", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nom d’usanciér (discutar) 10 de jouen 2009 a 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nom d’usanciér (discutar) 10 de jouen 2009 a 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatura", "wikieditor-toolbar-help-content-signature-result": "Nom d’usanciér (discutar)", "wikieditor-toolbar-help-content-indent-description": "Endentacion", diff --git a/extensions/WikiEditor/i18n/fy.json b/extensions/WikiEditor/i18n/fy.json index b4a79c39..0fefb44a 100644 --- a/extensions/WikiEditor/i18n/fy.json +++ b/extensions/WikiEditor/i18n/fy.json @@ -45,6 +45,7 @@ "wikieditor-toolbar-tool-table-cancel": "Annulearje", "wikieditor-toolbar-tool-replace-search": "Sykje op:", "wikieditor-toolbar-tool-replace-replace": "Ferfange mei:", + "wikieditor-toolbar-tool-replace-close": "Slute", "wikieditor-toolbar-section-characters": "Spesjale tekens", "wikieditor-toolbar-section-help": "Help", "wikieditor-toolbar-help-page-file": "Triemmen", diff --git a/extensions/WikiEditor/i18n/gd.json b/extensions/WikiEditor/i18n/gd.json index a1ff0a2f..916302f5 100644 --- a/extensions/WikiEditor/i18n/gd.json +++ b/extensions/WikiEditor/i18n/gd.json @@ -175,14 +175,14 @@ "wikieditor-toolbar-help-content-file-description": "Embedded file", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Iomradh", - "wikieditor-toolbar-help-content-reference-syntax": "Teacsa na duilleige.<ref name=\"test\">[http://www.ballsampaill.org Teacsa a' cheangail], teacsa eile.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Teacsa na duilleige.<ref>[http://www.ballsampaill.org Teacsa a' cheangail], teacsa eile.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teacsa na duilleige.[1]", "wikieditor-toolbar-help-content-rereference-description": "Cleachdadh eile an dearbh iomraidh", - "wikieditor-toolbar-help-content-rereference-result": "Teacsa na duilleige.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teacsa na duilleige.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Seall na h-iomraidhean", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Teacsa a' cheangail, teacsa eile.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Ainm sgrìobhte le stampa-ama", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ainm-cleachdaiche (conaltradh) 15:54, 10 dhen Ã’gmhios 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ainm-cleachdaiche (conaltradh) 15:54, 10 dhen Ã’gmhios 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Ainm-sgrìobhte", "wikieditor-toolbar-help-content-signature-result": "Ainm-cleachdaiche (conaltradh)", "wikieditor-toolbar-help-content-indent-description": "Eagaich a-steach", diff --git a/extensions/WikiEditor/i18n/gl.json b/extensions/WikiEditor/i18n/gl.json index b520e286..3d398653 100644 --- a/extensions/WikiEditor/i18n/gl.json +++ b/extensions/WikiEditor/i18n/gl.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Toliño", - "Banjo" + "Banjo", + "Elisardojm" ] }, "wikieditor": "Interface avanzada de edición de texto wiki", @@ -26,7 +27,6 @@ "wikieditor-toolbar-desc": "Editar a páxina da barra de ferramentas cunha mellor usabilidade", "wikieditor-toolbar-preference": "Activar a barra de ferramentas de edición mellorada", "wikieditor-toolbar-dialogs-preference": "Activar os diálogos para engadir ligazóns, táboas, así como a función de buscar e substituír", - "wikieditor-toolbar-hidesig": "Agochar o botón de sinatura nas páxinas do espazo de nomes principal", "wikieditor-toolbar-loading": "Cargando...", "wikieditor-toolbar-tool-bold": "Negra", "wikieditor-toolbar-tool-bold-example": "Texto en negra", @@ -121,7 +121,7 @@ "wikieditor-toolbar-tool-table-preview": "Vista previa", "wikieditor-toolbar-tool-table-insert": "Inserir", "wikieditor-toolbar-tool-table-cancel": "Cancelar", - "wikieditor-toolbar-tool-table-toomany": "Non é posible inserir unha táboa con máis de 1000 celas con este diálogo.", + "wikieditor-toolbar-tool-table-toomany": "Non é posible inserir unha táboa con máis de $1 {{PLURAL:$1|cela|celas}} con este diálogo.", "wikieditor-toolbar-tool-table-invalidnumber": "Non inseriu un número válido de fileiras ou columnas.", "wikieditor-toolbar-tool-table-zero": "Non pode inserir unha táboa con cero fileiras ou columnas.", "wikieditor-toolbar-tool-replace": "Buscar e substituír", @@ -139,28 +139,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Non inseriu nada que procurar.", "wikieditor-toolbar-tool-replace-invalidregex": "A expresión regular que inseriu non é válida: $1", "wikieditor-toolbar-section-characters": "Caracteres especiais", - "wikieditor-toolbar-characters-page-latin": "Latín", - "wikieditor-toolbar-characters-page-latinextended": "Latín estendido", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "Símbolos", - "wikieditor-toolbar-characters-page-greek": "Grego", - "wikieditor-toolbar-characters-page-cyrillic": "Cirílico", - "wikieditor-toolbar-characters-page-arabic": "Ãrabe", - "wikieditor-toolbar-characters-page-arabicextended": "Ãrabe estendido", - "wikieditor-toolbar-characters-page-persian": "Persa", - "wikieditor-toolbar-characters-page-hebrew": "Hebreo", - "wikieditor-toolbar-characters-page-bangla": "Bengalí", - "wikieditor-toolbar-characters-page-tamil": "Támil", - "wikieditor-toolbar-characters-page-telugu": "Telugú", - "wikieditor-toolbar-characters-page-sinhala": "Cingalés", - "wikieditor-toolbar-characters-page-gujarati": "Gujarati", - "wikieditor-toolbar-characters-page-devanagari": "DevanÄgarÄ«", - "wikieditor-toolbar-characters-page-thai": "Tailandés", - "wikieditor-toolbar-characters-page-lao": "Laosiano", - "wikieditor-toolbar-characters-page-khmer": "Camboxano", - "wikieditor-toolbar-characters-endash": "guión", - "wikieditor-toolbar-characters-emdash": "raia", - "wikieditor-toolbar-characters-minus": "signo menos", "wikieditor-toolbar-section-help": "Axuda", "wikieditor-toolbar-help-heading-description": "Descrición", "wikieditor-toolbar-help-heading-syntax": "O que escribe", @@ -182,8 +160,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Texto en negra e cursiva'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Texto en negra e cursiva", "wikieditor-toolbar-help-content-ilink-description": "Ligazón interna", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Título da páxina|Texto da ligazón]]
        [[Título da páxina]]", - "wikieditor-toolbar-help-content-ilink-result": "Texto da ligazón
        Título da páxina", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Título da páxina]]
        [[Título da páxina|Texto da ligazón]]", + "wikieditor-toolbar-help-content-ilink-result": "Título da páxina
        Texto da ligazón", "wikieditor-toolbar-help-content-xlink-description": "Ligazón externa", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Texto da ligazón]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Texto da ligazón
        [1]
        http://www.example.org", @@ -207,15 +185,19 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. Elemento da lista
        2. Elemento da lista
        ", "wikieditor-toolbar-help-content-file-description": "Ficheiro embelecido", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Texto do pé de foto", "wikieditor-toolbar-help-content-reference-description": "Referencia", - "wikieditor-toolbar-help-content-reference-syntax": "Texto da páxina<ref name=\"test\">[http://www.example.org Texto da ligazón], texto adicional.</ref>.", + "wikieditor-toolbar-help-content-reference-syntax": "Texto da páxina<ref>[http://www.example.org Texto da ligazón], texto adicional.</ref>.", "wikieditor-toolbar-help-content-reference-result": "Texto da páxina[1].", + "wikieditor-toolbar-help-content-named-reference-description": "Referencia con nome", + "wikieditor-toolbar-help-content-named-reference-syntax": "Texto da páxina.<ref name=\"proba\">[http://www.example.org Texto da ligazón]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Texto da páxina.[2]", "wikieditor-toolbar-help-content-rereference-description": "Uso adicional da mesma referencia", - "wikieditor-toolbar-help-content-rereference-result": "Texto da páxina[1].", + "wikieditor-toolbar-help-content-rereference-result": "Texto da páxina[2].", "wikieditor-toolbar-help-content-showreferences-description": "Mostrar as referencias", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Texto da ligazón, texto adicional.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Texto da ligazón, texto adicional.
        2. ^ Texto da ligazón
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Sinatura con data e hora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nome de usuario (conversa) 10 de xuño de 2009 ás 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nome de usuario (conversa) 10 de xuño de 2009 ás 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Sinatura", "wikieditor-toolbar-help-content-signature-result": "Nome de usuario (conversa)", "wikieditor-toolbar-help-content-indent-description": "Sangría", diff --git a/extensions/WikiEditor/i18n/grc.json b/extensions/WikiEditor/i18n/grc.json index eee6e418..6010fe94 100644 --- a/extensions/WikiEditor/i18n/grc.json +++ b/extensions/WikiEditor/i18n/grc.json @@ -44,15 +44,6 @@ "wikieditor-toolbar-tool-replace-replace": "Ὑποκατάστασις ὑπό:", "wikieditor-toolbar-tool-replace-close": "Κλῄειν", "wikieditor-toolbar-section-characters": "Εἰδικοὶ χαÏακτῆÏες", - "wikieditor-toolbar-characters-page-latin": "Λατινικόν", - "wikieditor-toolbar-characters-page-latinextended": "Λατινικὸν Ï€Ïοεκτεταμένον", - "wikieditor-toolbar-characters-page-ipa": "ΔΦΑ", - "wikieditor-toolbar-characters-page-symbols": "ΣÏμβολα", - "wikieditor-toolbar-characters-page-greek": "Ἑλληνικόν", - "wikieditor-toolbar-characters-page-cyrillic": "ΚυÏιλλικόν", - "wikieditor-toolbar-characters-page-arabic": "ἈÏαβικόν", - "wikieditor-toolbar-characters-page-hebrew": "ἙβÏαϊκόν", - "wikieditor-toolbar-characters-page-telugu": "ΤελουγοÏϊον", "wikieditor-toolbar-section-help": "Βοήθεια", "wikieditor-toolbar-help-heading-description": "ΠεÏιγÏαφή", "wikieditor-toolbar-help-page-format": "ΜοÏφοποίησις", @@ -85,7 +76,7 @@ "wikieditor-toolbar-help-content-olist-description": "ἨÏιθμημένη διαλογή", "wikieditor-toolbar-help-content-file-description": "Ἐμβεβαπτισμένον á¼€Ïχεῖον", "wikieditor-toolbar-help-content-reference-description": "ἈναφοÏά", - "wikieditor-toolbar-help-content-reference-syntax": "Κείμενον δέλτου.<ref name=\"test\">[http://www.example.org Κείμενον συνδέσμου], á¼Ï€Î¹Ï€Ïόσθετον κείμενον.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Κείμενον δέλτου.<ref>[http://www.example.org Κείμενον συνδέσμου], á¼Ï€Î¹Ï€Ïόσθετον κείμενον.</ref>", "wikieditor-toolbar-help-content-showreferences-description": "ΔεικνÏειν ἀναφοÏάς", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ὙπογÏαφὴ μετὰ χÏονοσφÏαγίδος", "wikieditor-toolbar-help-content-signature-description": "ὙπογÏαφή", diff --git a/extensions/WikiEditor/i18n/gsw.json b/extensions/WikiEditor/i18n/gsw.json index c5200fdc..5105fc7c 100644 --- a/extensions/WikiEditor/i18n/gsw.json +++ b/extensions/WikiEditor/i18n/gsw.json @@ -187,14 +187,14 @@ "wikieditor-toolbar-help-content-file-description": "Yygfiegti Datei", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Quälle", - "wikieditor-toolbar-help-content-reference-syntax": "Sytetekscht.<ref name=\"test\">[http://www.byschpil.org Gleichtekscht], zuesätzlige Tekscht.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Sytetekscht.<ref>[http://www.byschpil.org Gleichtekscht], zuesätzlige Tekscht.</ref>", "wikieditor-toolbar-help-content-reference-result": "Sytetekscht.[1]", "wikieditor-toolbar-help-content-rereference-description": "Zuesätzlige Verwändig vu dr glyche Quälle", - "wikieditor-toolbar-help-content-rereference-result": "Sytetekscht.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Sytetekscht.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Quälle aazeige", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Linktekscht, zuesätzlige Tekscht.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Unterschrift mit Zytaagab", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Benutzername (talk) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Benutzername (talk) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Unterschrift", "wikieditor-toolbar-help-content-signature-result": "Benutzername (talk)", "wikieditor-toolbar-help-content-indent-description": "Zeileyyzug", diff --git a/extensions/WikiEditor/i18n/gu.json b/extensions/WikiEditor/i18n/gu.json index 27bce66f..643a85ec 100644 --- a/extensions/WikiEditor/i18n/gu.json +++ b/extensions/WikiEditor/i18n/gu.json @@ -4,7 +4,9 @@ "Ashok modhvadia", "KartikMistry", "Sushant savla", - "Macofe" + "Macofe", + "NehalDaveND", + "Dsvyas" ] }, "wikieditor": "ઉચà«àªš વિકિલખાણ ફેરફાર દેખાવ", @@ -64,9 +66,11 @@ "wikieditor-toolbar-tool-file-example": "Example.jpg (ઉદાહરણ)", "wikieditor-toolbar-tool-file-title": "ફાઇલ ઉમેરો", "wikieditor-toolbar-file-target": "ફાઇલનામ:", + "wikieditor-toolbar-file-caption": "શિરોનામ:", "wikieditor-toolbar-file-size": "માપ:", "wikieditor-toolbar-file-default": "(મૂળભૂત)", "wikieditor-toolbar-file-format": "શૈલી:", + "wikieditor-toolbar-file-format-none": "કોઇ નહીં", "wikieditor-toolbar-tool-file-insert": "ઉમેરો", "wikieditor-toolbar-tool-file-cancel": "રદ કરો", "wikieditor-toolbar-tool-reference": "સંદરà«àª­", @@ -184,14 +188,14 @@ "wikieditor-toolbar-help-content-file-description": "અંદર વણાયેલી (Embedded) ફાઇલ", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "સંદરà«àª­", - "wikieditor-toolbar-help-content-reference-syntax": "પાનાં લખાણ.<ref name=\"test\">[http://www.example.org કડી લખાણ], વધારાનà«àª‚ લખાણ.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "પાનાં લખાણ.<ref> {{cite web |url= |title= |author= |date= |work= |publisher= |accessdate= |archiveurl = |archivedate = }}</ref>.", "wikieditor-toolbar-help-content-reference-result": "પૃષà«àª  લેખન.[1]", "wikieditor-toolbar-help-content-rereference-description": "તેજ સંદરà«àª­àª¨à«‹ વધારાનો વપરાશ", - "wikieditor-toolbar-help-content-rereference-result": "પૃષà«àª  લેખન.[1]", + "wikieditor-toolbar-help-content-rereference-result": "પૃષà«àª  લેખન.[2]", "wikieditor-toolbar-help-content-showreferences-description": "સંદરà«àª­à«‹ દરà«àª¶àª¾àªµà«‹", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ કડીની માહિતી, વધારાની માહિતી.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "સમયછાપ સાથે હસà«àª¤àª¾àª•à«àª·àª°", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "સભà«àª¯àª¨àª¾àª® (talk) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--સભà«àª¯àª¨àª¾àª® (talk) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "હસà«àª¤àª¾àª•à«àª·àª°", "wikieditor-toolbar-help-content-signature-result": "સભà«àª¯àª¨àª¾àª® (ચરà«àªšàª¾)", "wikieditor-toolbar-help-content-indent-description": "હાંસિયો", diff --git a/extensions/WikiEditor/i18n/gv.json b/extensions/WikiEditor/i18n/gv.json index e0efc951..5330fa2f 100644 --- a/extensions/WikiEditor/i18n/gv.json +++ b/extensions/WikiEditor/i18n/gv.json @@ -172,14 +172,14 @@ "wikieditor-toolbar-help-content-file-description": "Coadan jingit", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Imraa", - "wikieditor-toolbar-help-content-reference-syntax": "Teks duillag.<ref name=\"test\">[http://www.example.org Teks kiangley], tooilley teks.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Teks duillag.<ref>[http://www.example.org Teks kiangley], tooilley teks.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teks duillag.[1]", "wikieditor-toolbar-help-content-rereference-description": "Tooilley ymmyd jeh'n imraa cheddin", - "wikieditor-toolbar-help-content-rereference-result": "Teks duillag.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teks duillag.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Soilshaghey imraaghyn", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Teks kiangley, tooilley teks.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Ennym screeuit as stampey traa", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ymmydeyr (resoonaght) 15:54, 10 Mean Souree 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ymmydeyr (resoonaght) 15:54, 10 Mean Souree 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Ennym screeuit", "wikieditor-toolbar-help-content-signature-result": "Ymmydeyr (resoonaght)", "wikieditor-toolbar-help-content-indent-description": "Jingey", diff --git a/extensions/WikiEditor/i18n/he.json b/extensions/WikiEditor/i18n/he.json index 55ea291e..d36737b6 100644 --- a/extensions/WikiEditor/i18n/he.json +++ b/extensions/WikiEditor/i18n/he.json @@ -127,7 +127,7 @@ "wikieditor-toolbar-tool-table-insert": "הוספה", "wikieditor-toolbar-tool-table-cancel": "ביטול", "wikieditor-toolbar-tool-table-example-text": "×žÖ·×”Ö¾× Ö¸Ö¼×¢Ö´×™× ×”Ö¸×¢Ö¶×¨Ö¶×‘ לִלְבַב כָּל־גֶּבֶר, ×Ö´× ×žÖ·×¨Ö¾× Ö¶×¤Ö¶×©× ×”×•Ö¼×, ×Ö´× ×’Ö¶Ö¼×‘Ö¶×¨ צוֹלֵחַ; לָזֶה ×¢Ö´× ×”Ö¸×¢Ö¶×¨Ö¶×‘ ×™Ö¸×‘Ö¹× ×§Öµ×¥ שֶ×בֶר וָזֶה בָּעֶרֶב פִּי שֶ×בַע שָׂמֵחַ. ×›Ö´Ö¼×™ ×¨Ö·×¢Ö·×©× ×”Ö·×™Ö¼×•Ö¹×, ×וֹר שֶ××žÖ¶×©× ×–×•Ö¹×¨Öµ×—Ö·, יַלְ×וּ ×”Ö·× Ö¶Ö¼×¤Ö¶×©× ×•Ö´×™×§Ö·×¦Ö°Ö¼×¦×•Ö¼ ×”Ö¸×ֵבֶר, וּבְדִמְמַת עֶרֶב ×ֶל × Ö¹×’Ö·×”Ö¼ יָרֵחַ ×ªÖ´Ö¼× Ö¸Ö¼×¤Ö·×©× ×Ö·×£ תַּחֲלִיף עָצְמָה וָשֵ×בֶר.", - "wikieditor-toolbar-tool-table-toomany": "הוספת טבלה בת יותר מ־1000 ת××™× ××™× ×” ×פשרית בתיבת הדו־שיח ×”×–×ת.", + "wikieditor-toolbar-tool-table-toomany": "הוספת טבלה בת יותר {{PLURAL:$1|×ž×ª× ×חד|מ־$1 ת××™×}} ××™× ×” ×פשרית בתיבת הדו־שיח ×”×–×ת.", "wikieditor-toolbar-tool-table-invalidnumber": "מספר השורות ×ו העמודות שהוזן ×ינו תקין.", "wikieditor-toolbar-tool-table-zero": "×œ× × ×™×ª×Ÿ להוסיף טבלה בעלת ×פס שורות ×ו עמודות.", "wikieditor-toolbar-tool-replace": "חיפוש והחלפה", @@ -145,28 +145,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "×œ× ×”×–× ×ª טקסט לחיפוש.", "wikieditor-toolbar-tool-replace-invalidregex": "הביטוי הרגולרי שהוכנס ×ינו תקין: $1", "wikieditor-toolbar-section-characters": "×ª×•×•×™× ×ž×™×•×—×“×™×", - "wikieditor-toolbar-characters-page-latin": "לטיני", - "wikieditor-toolbar-characters-page-latinextended": "לטיני מורחב", - "wikieditor-toolbar-characters-page-ipa": "×לפבית פונטי בינל×ומי (IPA)", - "wikieditor-toolbar-characters-page-symbols": "סימני×", - "wikieditor-toolbar-characters-page-greek": "יווני", - "wikieditor-toolbar-characters-page-cyrillic": "קירילי", - "wikieditor-toolbar-characters-page-arabic": "ערבי", - "wikieditor-toolbar-characters-page-arabicextended": "ערבי מורחב", - "wikieditor-toolbar-characters-page-persian": "פרסית", - "wikieditor-toolbar-characters-page-hebrew": "עברית", - "wikieditor-toolbar-characters-page-bangla": "בנגלית", - "wikieditor-toolbar-characters-page-tamil": "טמילית", - "wikieditor-toolbar-characters-page-telugu": "טלוגו", - "wikieditor-toolbar-characters-page-sinhala": "סינהלה", - "wikieditor-toolbar-characters-page-gujarati": "גוג'רטית", - "wikieditor-toolbar-characters-page-devanagari": "דוונג×רי", - "wikieditor-toolbar-characters-page-thai": "ת×ית", - "wikieditor-toolbar-characters-page-lao": "ל×ו", - "wikieditor-toolbar-characters-page-khmer": "קמר", - "wikieditor-toolbar-characters-endash": "קו מפריד", - "wikieditor-toolbar-characters-emdash": "קו מפריד ×רוך", - "wikieditor-toolbar-characters-minus": "מינוס", "wikieditor-toolbar-section-help": "עזרה", "wikieditor-toolbar-help-heading-description": "תי×ור", "wikieditor-toolbar-help-heading-syntax": "מה יש להקליד", @@ -188,8 +166,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''טקסט מודגש ונטוי'''''", "wikieditor-toolbar-help-content-bolditalic-result": "טקסט מודגש ונטוי", "wikieditor-toolbar-help-content-ilink-description": "קישור פנימי", - "wikieditor-toolbar-help-content-ilink-syntax": "[[כותרת הדף|כותרת הקישור]]
        [[כותרת הדף]]", - "wikieditor-toolbar-help-content-ilink-result": "כותרת הקישור
        כותרת הדף", + "wikieditor-toolbar-help-content-ilink-syntax": "[[כותרת הדף]]
        [[כותרת הדף|תווית הקישור]]", + "wikieditor-toolbar-help-content-ilink-result": "כותרת הדף
        תווית הקישור", "wikieditor-toolbar-help-content-xlink-description": "קישור חיצוני", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org כותרת הקישור]
        [http://www.example.org]
        http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "כותרת הקישור
        [1]
        http://www.example.org", @@ -215,14 +193,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:דוגמה.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "טקסט הכיתוב", "wikieditor-toolbar-help-content-reference-description": "הערת שוליי×", - "wikieditor-toolbar-help-content-reference-syntax": "טקסט הדף.<ref name=\"test\">[http://www.example.org טקסט הקישור], טקסט נוסף.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "טקסט הדף.<ref>[http://www.example.org טקסט הקישור], טקסט נוסף.</ref>", "wikieditor-toolbar-help-content-reference-result": "טקסט הדף.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "הערת ×©×•×œ×™×™× ×¢× ×©×", + "wikieditor-toolbar-help-content-named-reference-syntax": "טקסט הדף.<ref name=\"test\">[http://www.example.org Link טקסט]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "טקסט הדף.[2]", "wikieditor-toolbar-help-content-rereference-description": "שימוש נוסף ב×ותה הערת שוליי×", - "wikieditor-toolbar-help-content-rereference-result": "טקסט הדף.[1]", + "wikieditor-toolbar-help-content-rereference-result": "טקסט הדף.[2]", "wikieditor-toolbar-help-content-showreferences-description": "הצגת הערות שוליי×", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ טקסט הקישור, טקסט נוסף.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ טקסט הקישור, טקסט נוסף.
        2. ^ טקסט הקישור
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "חתימה ×¢× ×ª×ריך ושעה", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "×©× ×”×ž×©×ª×ž×© (שיחה) 15:54, 10 ביוני 2009 (IDT)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--×©× ×”×ž×©×ª×ž×© (שיחה) 15:54, 10 ביוני 2009 (IDT)", "wikieditor-toolbar-help-content-signature-description": "חתימה", "wikieditor-toolbar-help-content-signature-result": "×©× ×”×ž×©×ª×ž×© (שיחה)", "wikieditor-toolbar-help-content-indent-description": "×”×–×—×”", diff --git a/extensions/WikiEditor/i18n/hi.json b/extensions/WikiEditor/i18n/hi.json index bfc00197..379c4cf8 100644 --- a/extensions/WikiEditor/i18n/hi.json +++ b/extensions/WikiEditor/i18n/hi.json @@ -5,7 +5,8 @@ "Karthi.dr", "Pooja.srivastava", "Siddhartha Ghai", - "Macofe" + "Macofe", + "NehalDaveND" ] }, "wikieditor": "उनà¥à¤¨à¤¤ विकितेकà¥à¤·à¥à¤¤à¥ संपादन इनà¥à¤¤à¥‡à¤°à¥à¤«à¤šà¥‡", @@ -57,6 +58,14 @@ "wikieditor-toolbar-tool-link-empty": "आप लिंक करने के लिठकà¥à¤› दरà¥à¤œà¤¼ नहीं किठथे ।", "wikieditor-toolbar-tool-file": "संलगà¥à¤¨ फ़ाइल", "wikieditor-toolbar-tool-file-example": "उदाहरण.jpg", + "wikieditor-toolbar-tool-file-title": "फ़ाइल समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें", + "wikieditor-toolbar-file-target": "संचिका नाम:", + "wikieditor-toolbar-file-caption": "शीरà¥à¤·à¤•", + "wikieditor-toolbar-file-size": "आकार", + "wikieditor-toolbar-file-default": "(डिफॉलà¥à¤Ÿ)", + "wikieditor-toolbar-file-format": "सà¥à¤µà¤°à¥‚प", + "wikieditor-toolbar-file-format-none": "कोई नहीं", + "wikieditor-toolbar-tool-file-insert": "समà¥à¤®à¤¿à¤²à¤¿à¤¤ करें", "wikieditor-toolbar-tool-file-cancel": "रदà¥à¤¦ करें", "wikieditor-toolbar-tool-reference": "संदरà¥à¤­", "wikieditor-toolbar-tool-reference-example": "आधार पाठ यहाठसमà¥à¤®à¤¿à¤²à¤¿à¤¤ करें", @@ -167,14 +176,14 @@ "wikieditor-toolbar-help-content-file-description": "संलगà¥à¤¨ फ़ाइल", "wikieditor-toolbar-help-content-file-syntax": "[[$1:उदाहरण.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "संदरà¥à¤­", - "wikieditor-toolbar-help-content-reference-syntax": "पृषà¥à¤  लेख ।<ref name=\"test\">[http://www.example.org लिंक लेख], अतिरिकà¥à¤¤ लेख.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "पृषà¥à¤  लेख ।<ref>[http://www.example.org लिंक लेख], अतिरिकà¥à¤¤ लेख.</ref>", "wikieditor-toolbar-help-content-reference-result": "पृषà¥à¤  लेख ।[1]", "wikieditor-toolbar-help-content-rereference-description": "वही संदरà¥à¤­ का अतिरिकà¥à¤¤ उपयोग", - "wikieditor-toolbar-help-content-rereference-result": "पृषà¥à¤  लेख ।[1]", + "wikieditor-toolbar-help-content-rereference-result": "पृषà¥à¤  लेख ।[2]", "wikieditor-toolbar-help-content-showreferences-description": "संदरà¥à¤­ दिखाà¤à¤", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ लिंक लेख, अतिरिकà¥à¤¤ लेख ।
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "हसà¥à¤¤à¤¾à¤•à¥à¤·à¤° टाइमसà¥à¤Ÿà¥ˆà¤®à¥à¤ª सहित", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "सदसà¥à¤¯à¤¨à¤¾à¤® (चरà¥à¤šà¤¾) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--सदसà¥à¤¯à¤¨à¤¾à¤® (चरà¥à¤šà¤¾) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "हसà¥à¤¤à¤¾à¤•à¥à¤·à¤°", "wikieditor-toolbar-help-content-signature-result": "सदसà¥à¤¯à¤¨à¤¾à¤® (वारà¥à¤¤à¤¾)", "wikieditor-toolbar-help-content-indent-description": "इनडेंट", diff --git a/extensions/WikiEditor/i18n/hr.json b/extensions/WikiEditor/i18n/hr.json index 8b9dcf58..b5ebd86d 100644 --- a/extensions/WikiEditor/i18n/hr.json +++ b/extensions/WikiEditor/i18n/hr.json @@ -59,7 +59,7 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "Nevaljani naslov", "wikieditor-toolbar-tool-link-int-target-status-external": "Vanjska poveznica", "wikieditor-toolbar-tool-link-int-target-status-loading": "Provjera postoji li stranica...", - "wikieditor-toolbar-tool-link-int-invalid": "Naslov koji ste naveli je nevažeći.", + "wikieditor-toolbar-tool-link-int-invalid": "Naslov koji ste naveli nije valjan.", "wikieditor-toolbar-tool-link-lookslikeinternal": "URL koji ste predali Äini se namijenjen kao poveznica na drugu wiki stranicu.\nŽelite li napraviti unutraÅ¡nju poveznicu?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Unutarnja poveznica", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Vanjska poveznica", @@ -180,14 +180,14 @@ "wikieditor-toolbar-help-content-file-description": "Uložena datoteka", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "BiljeÅ¡ke", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.<ref name=\"test\">[http://www.primjer.org Tekst poveznice], dodatni tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.<ref>[http://www.primjer.org Tekst poveznice], dodatni tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tekst stranice.[1]", "wikieditor-toolbar-help-content-rereference-description": "Dodatno koriÅ¡tenje iste biljeÅ¡ke", - "wikieditor-toolbar-help-content-rereference-result": "Tekst stranice.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tekst stranice.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Prikazivanje biljeÅ¡ki", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Teks poveznice, dodatni tekst.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Potpis s datumom", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "SuradniÄko ime (razgovor) 15:54, 10. lipnja 2009. (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--SuradniÄko ime (razgovor) 15:54, 10. lipnja 2009. (UTC)", "wikieditor-toolbar-help-content-signature-description": "Potpis", "wikieditor-toolbar-help-content-signature-result": "SuradniÄko ime (razgovor)", "wikieditor-toolbar-help-content-indent-description": "Uvlaka", diff --git a/extensions/WikiEditor/i18n/hsb.json b/extensions/WikiEditor/i18n/hsb.json index ecb6cc28..71fb93d7 100644 --- a/extensions/WikiEditor/i18n/hsb.json +++ b/extensions/WikiEditor/i18n/hsb.json @@ -187,14 +187,14 @@ "wikieditor-toolbar-help-content-file-description": "Zasadźena dataja", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referenca", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst strony.<ref name=\"test\">[http://www.example.org tekst wotkaza], pÅ™idatny tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst strony.<ref>[http://www.example.org tekst wotkaza], pÅ™idatny tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tekst strony.[1]", "wikieditor-toolbar-help-content-rereference-description": "PÅ™idatne wužiwanje samsneje referency", - "wikieditor-toolbar-help-content-rereference-result": "Tekst strony.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tekst strony.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Referency zwobraznić", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Tekst wotkaza, přidatny tekst.
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatura z Äasowym koÅ‚kom", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Wužiwarske mjeno (diskusija) 15:54, 10. junija 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Wužiwarske mjeno (diskusija) 15:54, 10. junija 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatura", "wikieditor-toolbar-help-content-signature-result": "Wužiwarske mjeno (diskusija)", "wikieditor-toolbar-help-content-indent-description": "Zasunjenje", diff --git a/extensions/WikiEditor/i18n/hu.json b/extensions/WikiEditor/i18n/hu.json index 900940f8..61a9def2 100644 --- a/extensions/WikiEditor/i18n/hu.json +++ b/extensions/WikiEditor/i18n/hu.json @@ -9,7 +9,8 @@ "McDutchie", "Misibacsi", "Csega", - "Macofe" + "Macofe", + "Tacsipacsi" ] }, "wikieditor": "Fejlett szerkesztÅ‘felület wikiszöveghez", @@ -32,8 +33,7 @@ "wikieditor-toolbar": "SzerkesztÅ‘-eszköztár", "wikieditor-toolbar-desc": "Használhatóbb szerkesztÅ‘ eszköztár", "wikieditor-toolbar-preference": "Fejlettebb szerkesztÅ‘-eszköztár használata", - "wikieditor-toolbar-dialogs-preference": "Párbeszédablakok engedélyezése hivatkozások, táblázatok és egyebek beillesztéséhez", - "wikieditor-toolbar-hidesig": "Aláírás gomb elrejtése a szócikknévtérben", + "wikieditor-toolbar-dialogs-preference": "Varázslók engedélyezése hivatkozások, táblázatok beillesztéséhez, valamint a keresés és csere funkcióhoz", "wikieditor-toolbar-loading": "Betöltés…", "wikieditor-toolbar-tool-bold": "Félkövér", "wikieditor-toolbar-tool-bold-example": "Félkövér szöveg", @@ -60,6 +60,7 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "Érvénytelen cím", "wikieditor-toolbar-tool-link-int-target-status-external": "KülsÅ‘ hivatkozás", "wikieditor-toolbar-tool-link-int-target-status-loading": "EllenÅ‘rzöm, hogy létezik-e a lap…", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "EgyértelműsítÅ‘ lap", "wikieditor-toolbar-tool-link-int-invalid": "A megadott cím érvénytelen", "wikieditor-toolbar-tool-link-lookslikeinternal": "Úgy tűnik, hogy a megadott URL másik wiki lapra mutató hivatkozás akart lenni.\nSzeretnéd belsÅ‘ hivatkozássá alakítani?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "BelsÅ‘ hivatkozás", @@ -74,6 +75,7 @@ "wikieditor-toolbar-file-float": "Illesztés:", "wikieditor-toolbar-file-default": "(alapértelmezett)", "wikieditor-toolbar-file-format": "Formátum:", + "wikieditor-toolbar-file-format-none": "nincs", "wikieditor-toolbar-tool-file-insert": "Beszúrás", "wikieditor-toolbar-tool-file-cancel": "Mégse", "wikieditor-toolbar-tool-reference": "Forráshivatkozás", @@ -165,8 +167,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Félkövér és dÅ‘lt szöveg'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Félkövér és dÅ‘lt szöveg", "wikieditor-toolbar-help-content-ilink-description": "BelsÅ‘ hivatkozás", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Lap címe|Hivatkozás szövege]]
        [[Lap címe]]", - "wikieditor-toolbar-help-content-ilink-result": "Hivatkozás szövege
        Lap címe", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Lap címe]]
        [[Lap címe|Hivatkozás szövege]]", + "wikieditor-toolbar-help-content-ilink-result": "Lap címe
        Hivatkozás szövege", "wikieditor-toolbar-help-content-xlink-description": "Külső hivatkozás", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.peldaoldal.hu Hivatkozás szövege]
        [http://www.peldaoldal.hu]
        http://www.peldaoldal.hu", "wikieditor-toolbar-help-content-xlink-result": "Hivatkozás szövege
        [1]
        http://www.peldaoldal.hu", @@ -190,15 +192,18 @@ "wikieditor-toolbar-help-content-olist-result": "
        1. Listaelem
        2. Listaelem
        ", "wikieditor-toolbar-help-content-file-description": "Beszúrt fájl", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Képaláírás", "wikieditor-toolbar-help-content-reference-description": "Forráshivatkozás", - "wikieditor-toolbar-help-content-reference-syntax": "Lap szövege.<ref name=\"test\">[http://www.példaoldal.hu Hivatkozás szövege], további szöveg.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Lap szövege.<ref>[http://www.példaoldal.hu Hivatkozás szövege], további szöveg.</ref>", "wikieditor-toolbar-help-content-reference-result": "Lap szövege.[1]", + "wikieditor-toolbar-help-content-named-reference-syntax": "Lap szövege.<ref>[http://www.példaoldal.hu Hivatkozás szövege]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Lap szövege.[2]", "wikieditor-toolbar-help-content-rereference-description": "Ugyanazon forráshivatkozás későbbi használata", - "wikieditor-toolbar-help-content-rereference-result": "Lap szövege.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Lap szövege.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Forráshivatkozások listázása", - "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Hivatkozás szövege, további szöveg.
        ", + "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Hivatkozás szövege, további szöveg.
        2. ^ Hivatkozás szövege
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Aláírás idÅ‘bélyeggel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "SzerkesztÅ‘név (vita) 2009. június 10., 15:54 (CEST)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--SzerkesztÅ‘név (vita) 2009. június 10., 15:54 (CEST)", "wikieditor-toolbar-help-content-signature-description": "Aláírás", "wikieditor-toolbar-help-content-signature-result": "SzerkesztÅ‘név (vita)", "wikieditor-toolbar-help-content-indent-description": "Behúzás", diff --git a/extensions/WikiEditor/i18n/hy.json b/extensions/WikiEditor/i18n/hy.json index e1cbe042..f016bff6 100644 --- a/extensions/WikiEditor/i18n/hy.json +++ b/extensions/WikiEditor/i18n/hy.json @@ -183,14 +183,14 @@ "wikieditor-toolbar-help-content-file-description": "Õ†Õ¥Ö€Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ® Õ¶Õ«Õ·Ö„", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Ô¾Õ¡Õ¶Õ¸Õ©Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶", - "wikieditor-toolbar-help-content-reference-syntax": "ÕÕ¥Ö„Õ½Õ¿ Õ§Õ»Õ¸Ö‚Õ´<ref name=\"test\">[http://www.example.org Õ€Õ²Õ´Õ¡Õ¶ Õ¿Õ¥Ö„Õ½Õ¿], Õ°Õ¡Õ¾Õ¥Õ¬ÕµÕ¡Õ¬ Õ¿Õ¥Ö„Õ½Õ¿Ö‰</ref>Ö‰", + "wikieditor-toolbar-help-content-reference-syntax": "ÕÕ¥Ö„Õ½Õ¿ Õ§Õ»Õ¸Ö‚Õ´<ref>[http://www.example.org Õ€Õ²Õ´Õ¡Õ¶ Õ¿Õ¥Ö„Õ½Õ¿], Õ°Õ¡Õ¾Õ¥Õ¬ÕµÕ¡Õ¬ Õ¿Õ¥Ö„Õ½Õ¿Ö‰</ref>Ö‰", "wikieditor-toolbar-help-content-reference-result": "ÕÕ¥Ö„Õ½Õ¿ Õ§Õ»Õ¸Ö‚Õ´[1]Ö‰", "wikieditor-toolbar-help-content-rereference-description": "Õ†Õ¸Ö‚ÕµÕ¶ Õ®Õ¡Õ¶Õ¸Õ©Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¯Ö€Õ¯Õ¶Õ¡Õ¯Õ« Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¸Ö‚Õ´", - "wikieditor-toolbar-help-content-rereference-result": "ÕÕ¥Ö„Õ½Õ¿ Õ§Õ»Õ¸Ö‚Õ´[1]Ö‰", + "wikieditor-toolbar-help-content-rereference-result": "ÕÕ¥Ö„Õ½Õ¿ Õ§Õ»Õ¸Ö‚Õ´[2]Ö‰", "wikieditor-toolbar-help-content-showreferences-description": "Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ®Õ¡Õ¶Õ¸Õ©Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨", "wikieditor-toolbar-help-content-showreferences-result": "
        1. ^ Õ€Õ²Õ´Õ¡Õ¶ Õ¿Õ¥Ö„Õ½Õ¿, Õ°Õ¡Õ¾Õ¥Õ¬ÕµÕ¡Õ¬ Õ¿Õ¥Ö„Õ½Õ¿Ö‰
        ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ÕÕ¿Õ¸Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¡Õ´Õ½Õ¡Õ©Õ¾Õ¸Õ¾", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Õ„Õ¡Õ½Õ¶Õ¡Õ¯ÖÕ« Õ¡Õ¶Õ¸Ö‚Õ¶ (Ö„Õ¶Õ¶Õ¡Ö€Õ¯Õ¸Ö‚Õ´) 15:54, 10 Õ°Õ¸Ö‚Õ¶Õ«Õ½ 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Õ„Õ¡Õ½Õ¶Õ¡Õ¯ÖÕ« Õ¡Õ¶Õ¸Ö‚Õ¶ (Ö„Õ¶Õ¶Õ¡Ö€Õ¯Õ¸Ö‚Õ´) 15:54, 10 Õ°Õ¸Ö‚Õ¶Õ«Õ½ 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ÕÕ¿Õ¸Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶", "wikieditor-toolbar-help-content-signature-result": "Õ„Õ¡Õ½Õ¶Õ¡Õ¯ÖÕ« Ô±Õ¶Õ¸Ö‚Õ¶ (Ö„Õ¶Õ¶Õ¡Ö€Õ¯Õ¸Ö‚Õ´)", "wikieditor-toolbar-help-content-indent-description": "Ô½Õ¸Ö€Ö„Õ«Ö", diff --git a/extensions/WikiEditor/i18n/ia.json b/extensions/WikiEditor/i18n/ia.json index 7614a5c1..d57b8f63 100644 --- a/extensions/WikiEditor/i18n/ia.json +++ b/extensions/WikiEditor/i18n/ia.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "File incastrate", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referentia", - "wikieditor-toolbar-help-content-reference-syntax": "Texto del pagina.<ref name=\"test\">[http://www.example.org Texto del ligamine], texto additional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Texto del pagina.<ref>[http://www.example.org Texto del ligamine], texto additional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Texto del pagina.[1]", "wikieditor-toolbar-help-content-rereference-description": "Uso additional del mesme referentia", - "wikieditor-toolbar-help-content-rereference-result": "Texto del pagina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Texto del pagina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Monstrar referentias", "wikieditor-toolbar-help-content-showreferences-result": "ol class='references'>
      1. ^ Texto del ligamine, texto additional.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatura con data e hora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nomine de usator (discussion) 15:54, 10 junio 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nomine de usator (discussion) 15:54, 10 junio 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatura", "wikieditor-toolbar-help-content-signature-result": "Nomine de usator (discussion)", "wikieditor-toolbar-help-content-indent-description": "Indentation", diff --git a/extensions/WikiEditor/i18n/id.json b/extensions/WikiEditor/i18n/id.json index a7a8d0f1..b60054d1 100644 --- a/extensions/WikiEditor/i18n/id.json +++ b/extensions/WikiEditor/i18n/id.json @@ -191,14 +191,14 @@ "wikieditor-toolbar-help-content-file-description": "Menyisipkan berkas", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referensi", - "wikieditor-toolbar-help-content-reference-syntax": "Teks halaman.<ref name=\"test\">[http://www.contoh.org Teks pranala], teks tambahan.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Teks halaman.<ref>[http://www.contoh.org Teks pranala], teks tambahan.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teks halaman.[1]", "wikieditor-toolbar-help-content-rereference-description": "Penggunaan kembali referensi yang sama", - "wikieditor-toolbar-help-content-rereference-result": "Teks halaman.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teks halaman.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Menampilkan referensi", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Teks pranala, teks tambahan.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Tanda tangan dengan waktu", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nama pengguna (bicara) 15:54, 10 Mei 2013 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nama pengguna (bicara) 15:54, 10 Mei 2013 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Tanda tangan", "wikieditor-toolbar-help-content-signature-result": "Nama pengguna (bicara)", "wikieditor-toolbar-help-content-indent-description": "Inden", diff --git a/extensions/WikiEditor/i18n/ilo.json b/extensions/WikiEditor/i18n/ilo.json index 88c3481c..b11727b9 100644 --- a/extensions/WikiEditor/i18n/ilo.json +++ b/extensions/WikiEditor/i18n/ilo.json @@ -5,65 +5,65 @@ "Macofe" ] }, - "wikieditor": "Napasayaat a wikitext nga interface ti panagurnos", - "wikieditor-desc": "Mangited ti maipadakkel a wikitext nga interface ti panagurnos ken adu pay a langa a maited dagiti modulo", + "wikieditor": "Napasayaat nga interface ti panagurnos ti wikitext", + "wikieditor-desc": "Mangited ti mapadakkel nga interface ti panagurnos ti wikitext ken dagiti modulo a mangited ti adu a langa", "wikieditor-wikitext-tab": "Wikitext", "wikieditor-loading": "Agkarkarga...", - "wikieditor-preview-preference": "Pakabaelanna ti agsumbangir a panagipadas", + "wikieditor-preview-preference": "Pakabaelan ti agabay a panagipadas", "wikieditor-preview-tab": "Ipadas", "wikieditor-preview-changes-tab": "Dagiti sinukatan", "wikieditor-preview-loading": "Agkarkarga...", "wikieditor-publish-preference": "Pakabaelan ti naiyaddang a panagipablaak", "wikieditor-publish-button-publish": "Ipablaak", "wikieditor-publish-button-cancel": "Ukasen", - "wikieditor-publish-dialog-title": "Ipabablaak idiay {{SITENAME}}", + "wikieditor-publish-dialog-title": "Ipabablaak iti {{SITENAME}}", "wikieditor-publish-dialog-summary": "Pakapukpukan ti panagurnos (ipalawag bassit dagiti sinukatam) :", - "wikieditor-publish-dialog-minor": "Bassit a panag-urnos", + "wikieditor-publish-dialog-minor": "Bassit a panagurnos", "wikieditor-publish-dialog-watch": "Bantayan daytoy a panid", "wikieditor-publish-dialog-publish": "Ipablaak", "wikieditor-publish-dialog-goback": "Agsubli", - "wikieditor-toolbar": "Ramit a baras ti panag-urnos", - "wikieditor-toolbar-desc": "Ramit ti baras ti panag-urnos nga addan ti napasayaat a panag-usar", - "wikieditor-toolbar-preference": "Pakabaelanna ti napasayaat a ramit ti baras a panag-urnos", - "wikieditor-toolbar-dialogs-preference": "Pakabaelanna dagiti mangngarading para iti panangisengngat kadagiti silpo, tab-tabla ken ti pay panagbiruk ken panagisukat nga annong", - "wikieditor-toolbar-hidesig": "Ilemmeng ti pirma a buton manipud kadagiti panid iti umuna a nagan ti lugar", + "wikieditor-toolbar": "Baras ti ramit ti panagurnos", + "wikieditor-toolbar-desc": "Baras ti ramit ti panagurnos nga addaan iti napasayaat a kaserbi", + "wikieditor-toolbar-preference": "Pakabaelan ti napasayaat a baras ti ramit ti panagurnos", + "wikieditor-toolbar-dialogs-preference": "Pakabaelan dagiti mangngarading para iti panangisengngat kadagiti silpo, tabtabla ken ti pay annong ti panagbiruk ken panagisukat", + "wikieditor-toolbar-hidesig": "Ilemmeng ti buton ti pirma manipud kadagiti panid iti nangruna a nagan ti espasio", "wikieditor-toolbar-loading": "Agkarkarga...", "wikieditor-toolbar-tool-bold": "Napuskol", - "wikieditor-toolbar-tool-bold-example": "Napuskol a testo", - "wikieditor-toolbar-tool-italic": "Agir-irig", - "wikieditor-toolbar-tool-italic-example": "Nakairig a testo", - "wikieditor-toolbar-tool-ilink": "Akinuneg a panilpo", - "wikieditor-toolbar-tool-ilink-example": "Titulo ti panilpo", - "wikieditor-toolbar-tool-xlink": "Akinruar a panilpo (laglagipen ti http:// a pasaruno)", - "wikieditor-toolbar-tool-xlink-example": "http://www.example.com titulo ti panilpo", - "wikieditor-toolbar-tool-link": "Panilpo", - "wikieditor-toolbar-tool-link-title": "Isengngat ti panilpo", + "wikieditor-toolbar-tool-bold-example": "Teksto a napuskol", + "wikieditor-toolbar-tool-italic": "Italiko", + "wikieditor-toolbar-tool-italic-example": "Teksto nga italiko", + "wikieditor-toolbar-tool-ilink": "Akin-uneg a silpo", + "wikieditor-toolbar-tool-ilink-example": "Titulo ti silpo", + "wikieditor-toolbar-tool-xlink": "Akinruar a silpo (laglagipen ti pasakbay nga http://)", + "wikieditor-toolbar-tool-xlink-example": "http://www.example.com titulo ti silpo", + "wikieditor-toolbar-tool-link": "Silpo", + "wikieditor-toolbar-tool-link-title": "Isengngat ti silpo", "wikieditor-toolbar-tool-link-int": "Iti panid a wiki", "wikieditor-toolbar-tool-link-int-target": "Puntaan a panid wenno URL:", "wikieditor-toolbar-tool-link-int-target-tooltip": "Titulo ti panid wenno URL", - "wikieditor-toolbar-tool-link-int-text": "Testo nga iparang:", - "wikieditor-toolbar-tool-link-int-text-tooltip": "Testo nga iparang", - "wikieditor-toolbar-tool-link-ext": "Idiay akinuneg a panid ti sapot", + "wikieditor-toolbar-tool-link-int-text": "Iparang a teksto:", + "wikieditor-toolbar-tool-link-int-text-tooltip": "Maiparangto a teksto", + "wikieditor-toolbar-tool-link-ext": "Iti maysa nga akin-uneg a panid ti web", "wikieditor-toolbar-tool-link-ext-target": "Isilpo ti URL:", - "wikieditor-toolbar-tool-link-ext-text": "Isilpo ti testo:", - "wikieditor-toolbar-tool-link-insert": "Isengngat ti panilpo", + "wikieditor-toolbar-tool-link-ext-text": "Isilpo ti teksto:", + "wikieditor-toolbar-tool-link-insert": "Isengngat ti silpo", "wikieditor-toolbar-tool-link-cancel": "Ukasen", - "wikieditor-toolbar-tool-link-int-target-status-exists": "Addaan ti panid", + "wikieditor-toolbar-tool-link-int-target-status-exists": "Adda ti panid", "wikieditor-toolbar-tool-link-int-target-status-notexists": "Awan ti panid", "wikieditor-toolbar-tool-link-int-target-status-invalid": "Imbalido a titulo", - "wikieditor-toolbar-tool-link-int-target-status-external": "Kasilpo iti ruar", - "wikieditor-toolbar-tool-link-int-target-status-loading": "Kitkitaen no adda ti panid...", + "wikieditor-toolbar-tool-link-int-target-status-external": "Akinruar a silpo", + "wikieditor-toolbar-tool-link-int-target-status-loading": "Kitkitaen ti kaadda ti panid...", "wikieditor-toolbar-tool-link-int-target-status-disambig": "Panangilawlawag a panid", - "wikieditor-toolbar-tool-link-int-invalid": "Ti titulo a nainaganam ket imbalido.", - "wikieditor-toolbar-tool-link-lookslikeinternal": "Ti URL a nainaganam ket kasla naaramid a panilpo iti sabali a panid ti wiki.\nKayatmo nga aramiden daytoy nga akinuneg a panilpo?", - "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Akinuneg a panilpo", - "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Kasilpo iti ruar", + "wikieditor-toolbar-tool-link-int-invalid": "Imbalido ti titulo a nainaganam.", + "wikieditor-toolbar-tool-link-lookslikeinternal": "Ti URL a nainaganam ket kasla nikeddeng a kas silpo iti sabali a panid ti wiki.\nKayatmo nga aramiden daytoy nga akin-uneg a silpo?", + "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Akin-uneg a silpo", + "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Akinruar a silpo", "wikieditor-toolbar-tool-link-empty": "Awan ti inkabilmo a pakaisilpuan.", "wikieditor-toolbar-tool-file": "Naisengngat a papeles", - "wikieditor-toolbar-tool-file-example": "Kas pagarigan.jpg", + "wikieditor-toolbar-tool-file-example": "Example.jpg", "wikieditor-toolbar-tool-file-title": "Isengngat ti papeles", "wikieditor-toolbar-file-target": "Nagan ti papeles:", - "wikieditor-toolbar-file-caption": "Maisurat:", + "wikieditor-toolbar-file-caption": "Kapsion:", "wikieditor-toolbar-file-size": "Kadakkel:", "wikieditor-toolbar-file-float": "Ilinia:", "wikieditor-toolbar-file-default": "(kasisigud)", @@ -71,12 +71,12 @@ "wikieditor-toolbar-file-format-none": "awan", "wikieditor-toolbar-tool-file-insert": "Isengngat", "wikieditor-toolbar-tool-file-cancel": "Ukasen", - "wikieditor-toolbar-tool-reference": "Pinagibasaran", - "wikieditor-toolbar-tool-reference-example": "Isengngat ti paammo ti baba a testo ditoy", + "wikieditor-toolbar-tool-reference": "Reperensia", + "wikieditor-toolbar-tool-reference-example": "Isengngat ti paammo ti baba a teksto ditoy", "wikieditor-toolbar-tool-reference-cancel": "Ukasen", - "wikieditor-toolbar-tool-reference-title": "Isengngat ti pinagibasaran", + "wikieditor-toolbar-tool-reference-title": "Isengngat ti reperensia", "wikieditor-toolbar-tool-reference-insert": "Isengngat", - "wikieditor-toolbar-tool-reference-text": "Testo ti pinagibasaran", + "wikieditor-toolbar-tool-reference-text": "Teksto ti reperensia", "wikieditor-toolbar-tool-signature": "Pirma, petsa ken oras", "wikieditor-toolbar-section-advanced": "Napasayaat", "wikieditor-toolbar-tool-heading": "Paulo", @@ -85,98 +85,98 @@ "wikieditor-toolbar-tool-heading-3": "Agpang 3", "wikieditor-toolbar-tool-heading-4": "Agpang 4", "wikieditor-toolbar-tool-heading-5": "Agpang 5", - "wikieditor-toolbar-tool-heading-example": "Testo ti paulo", + "wikieditor-toolbar-tool-heading-example": "Teksto ti paulo", "wikieditor-toolbar-group-format": "Pormat", "wikieditor-toolbar-tool-ulist": "Punglo a listaan", "wikieditor-toolbar-tool-ulist-example": "Punglo a listaan ti banag", "wikieditor-toolbar-tool-olist": "Nabilangan a listaan", "wikieditor-toolbar-tool-olist-example": "Nabilangan a listaan ti banag", - "wikieditor-toolbar-tool-nowiki": "Saan a pormaen a kas wiki", - "wikieditor-toolbar-tool-nowiki-example": "Mangisuldong ti saan a nabuklan a testo ditoy", + "wikieditor-toolbar-tool-nowiki": "Awan ti panagpormat a wiki", + "wikieditor-toolbar-tool-nowiki-example": "Isengngat ti saan a napormat a teksto ditoy", "wikieditor-toolbar-tool-redirect": "Baw-ing", "wikieditor-toolbar-tool-redirect-example": "Nagan ti puntaan a panid", "wikieditor-toolbar-tool-big": "Dakkel", - "wikieditor-toolbar-tool-big-example": "Dakkel a testo", + "wikieditor-toolbar-tool-big-example": "Dakkel a teksto", "wikieditor-toolbar-tool-small": "Bassit", - "wikieditor-toolbar-tool-small-example": "Bassit a testo", - "wikieditor-toolbar-tool-superscript": "Superscript", - "wikieditor-toolbar-tool-superscript-example": "Testo ti supereskritu", - "wikieditor-toolbar-tool-subscript": "Subscript", - "wikieditor-toolbar-tool-subscript-example": "Testo ti subeskritu", + "wikieditor-toolbar-tool-small-example": "Bassit a teksto", + "wikieditor-toolbar-tool-superscript": "Akinngato nga eskritu", + "wikieditor-toolbar-tool-superscript-example": "Teksto ti akinngato nga eskritu", + "wikieditor-toolbar-tool-subscript": "Akinbaba nga eskritu", + "wikieditor-toolbar-tool-subscript-example": "Teksto ti akinbaba nga eskritu", "wikieditor-toolbar-group-insert": "Isengngat", - "wikieditor-toolbar-tool-gallery": "Palko ti retrato", - "wikieditor-toolbar-tool-gallery-example": "Example.jpg|Naisurat1\nExample.jpg|Naisurat2", + "wikieditor-toolbar-tool-gallery": "Galeria ti ladawan", + "wikieditor-toolbar-tool-gallery-example": "Example.jpg|Kapsion1\nExample.jpg|Kapsion2", "wikieditor-toolbar-tool-newline": "Baro a linia", "wikieditor-toolbar-tool-table": "Tabla", "wikieditor-toolbar-tool-table-example-old": "-\n! paulo 1\n! paulo 2\n! paulo 3\n|-\n| aray 1, selula 1\n| aray 1, selula 2\n| aray 1, selula 3\n|-\n| aray 2, selula 1\n| aray 2, selula 2\n| aray 2, selula 3", - "wikieditor-toolbar-tool-table-example-cell-text": "Testo ti selula", - "wikieditor-toolbar-tool-table-example-header": "Testo ti paulo", + "wikieditor-toolbar-tool-table-example-cell-text": "Teksto ti selula", + "wikieditor-toolbar-tool-table-example-header": "Teksto ti paulo", "wikieditor-toolbar-tool-table-title": "Isengngat ti tabla", "wikieditor-toolbar-tool-table-dimensions-rows": "Ar-aray", - "wikieditor-toolbar-tool-table-dimensions-columns": "Binnatong", - "wikieditor-toolbar-tool-table-dimensions-header": "Agnayon to paulo nga aray", - "wikieditor-toolbar-tool-table-wikitable": "Estilo nga adda kadagiti pagbeddengan", - "wikieditor-toolbar-tool-table-sortable": "Aramiden ti tabla tapno mabalin a mailasin", - "wikieditor-toolbar-tool-table-example": "Kas pagarigan", + "wikieditor-toolbar-tool-table-dimensions-columns": "Dagiti batong", + "wikieditor-toolbar-tool-table-dimensions-header": "Agnayon iti aray ti paulo", + "wikieditor-toolbar-tool-table-wikitable": "Estilo nga addaan kadagiti pagbeddengan", + "wikieditor-toolbar-tool-table-sortable": "Aramiden a maurnos ti tabla", + "wikieditor-toolbar-tool-table-example": "Pagarigan", "wikieditor-toolbar-tool-table-preview": "Ipadas", "wikieditor-toolbar-tool-table-insert": "Isengngat", "wikieditor-toolbar-tool-table-cancel": "Ukasen", - "wikieditor-toolbar-tool-table-toomany": "Ti panagisengngat ti tabla nga adda kadagiti ad-adu ngem 1000 a selula ket saan a mabalin iti daytoy a pagsaritaan.", - "wikieditor-toolbar-tool-table-invalidnumber": "Saanka pay a nakaikabil ti umisu a numero iti ar-aray wenno binnatong.", - "wikieditor-toolbar-tool-table-zero": "Saanmo a mabalin ti agisengngat ti tabla nga adda ti sero nga ar-aray wenno binnatong.", - "wikieditor-toolbar-tool-replace": "Agbiruk ken sukatan", - "wikieditor-toolbar-tool-replace-title": "Agbiruk ken sukatan", + "wikieditor-toolbar-tool-table-toomany": "Ti panangisengngat ti tabla nga addaan kadagiti ad-adu ngem $1 a {{PLURAL:$1|selula}} ket saan a mabalin iti daytoy a pagsaritaan.", + "wikieditor-toolbar-tool-table-invalidnumber": "Saanka pay a nakaikabil ti umiso a bilang dagiti aray wenno dagiti batong.", + "wikieditor-toolbar-tool-table-zero": "Saanmo a mabalin ti agisengngat ti tabla nga addaan iti sero nga ar-aray wenno dagiti batong.", + "wikieditor-toolbar-tool-replace": "Sapulen ken sukatan", + "wikieditor-toolbar-tool-replace-title": "Sapulen ken sukatan", "wikieditor-toolbar-tool-replace-search": "Biruken iti:", "wikieditor-toolbar-tool-replace-replace": "Sukatan iti:", - "wikieditor-toolbar-tool-replace-case": "Agpada a kaso", - "wikieditor-toolbar-tool-replace-regex": "Tratuen ti biruken a kuerdas a kasla kadawyan a panangisao", + "wikieditor-toolbar-tool-replace-case": "Ipada ti kaso", + "wikieditor-toolbar-tool-replace-regex": "Tratuen ti biruken a kuerdas a kas kadawyan a panangiyebkas", "wikieditor-toolbar-tool-replace-button-findnext": "Sapulen ti sumaruno", "wikieditor-toolbar-tool-replace-button-replace": "Sukatan", "wikieditor-toolbar-tool-replace-button-replaceall": "Sukatan amin", "wikieditor-toolbar-tool-replace-close": "Irikep", - "wikieditor-toolbar-tool-replace-nomatch": "Ti panagbirukmo ket awan ti napadana.", + "wikieditor-toolbar-tool-replace-nomatch": "Ti panagbirukmo ket awan ti ania man a naipada.", "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|a sinukatan|a sinuksukatan}} ti naaramid.", - "wikieditor-toolbar-tool-replace-emptysearch": "Awan ti inkabilmo a biruken.", - "wikieditor-toolbar-tool-replace-invalidregex": "Ti kadawyan a panangisao nga inkabilmo ket imbalido: $1", - "wikieditor-toolbar-section-characters": "Dagiti naipangpangruna a karakter", + "wikieditor-toolbar-tool-replace-emptysearch": "Awan ti ania man nga inkabilmo a biruken.", + "wikieditor-toolbar-tool-replace-invalidregex": "Imbalido ti inkabilmo a kadawyan a panangiyebkas: $1", + "wikieditor-toolbar-section-characters": "Espesial a karkarakter", "wikieditor-toolbar-section-help": "Tulong", - "wikieditor-toolbar-help-heading-description": "Panagipalpalawag", + "wikieditor-toolbar-help-heading-description": "Deskripsion", "wikieditor-toolbar-help-heading-syntax": "Ti imakiniliam", "wikieditor-toolbar-help-heading-result": "Ti maalam", - "wikieditor-toolbar-help-page-format": "Panagporma", - "wikieditor-toolbar-help-page-link": "Dagiti panilpo", + "wikieditor-toolbar-help-page-format": "Panagpormat", + "wikieditor-toolbar-help-page-link": "Dagiti silpo", "wikieditor-toolbar-help-page-heading": "Dagiti paulo", "wikieditor-toolbar-help-page-list": "Dagiti listaan", "wikieditor-toolbar-help-page-file": "Dagiti papeles", - "wikieditor-toolbar-help-page-reference": "Pinagibasaran", - "wikieditor-toolbar-help-page-discussion": "Pagtungtongan", - "wikieditor-toolbar-help-content-italic-description": "Naka-irig", - "wikieditor-toolbar-help-content-italic-syntax": "''Naka-irig a testo''", - "wikieditor-toolbar-help-content-italic-result": "Naka-irig a testo", + "wikieditor-toolbar-help-page-reference": "Dagiti reperensia", + "wikieditor-toolbar-help-page-discussion": "Pagtungtungan", + "wikieditor-toolbar-help-content-italic-description": "Italiko", + "wikieditor-toolbar-help-content-italic-syntax": "''Teksto nga italiko''", + "wikieditor-toolbar-help-content-italic-result": "Teksto nga italiko", "wikieditor-toolbar-help-content-bold-description": "Napuskol", - "wikieditor-toolbar-help-content-bold-syntax": "'''Napuskol a testo'''", - "wikieditor-toolbar-help-content-bold-result": "Napuskol a testo", - "wikieditor-toolbar-help-content-bolditalic-description": "Napuskol & nakairig", - "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Napuskol & nakairig a testo'''''", - "wikieditor-toolbar-help-content-bolditalic-result": "Napuskol & nakairig a testo", - "wikieditor-toolbar-help-content-ilink-description": "Akinuneg a panilpo", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Titulo ti panid|Etiketa ti panilpo]]
      [[Titulo ti panid]]", - "wikieditor-toolbar-help-content-ilink-result": "Etiketa ti panilpo
      Titulo ti panid", - "wikieditor-toolbar-help-content-xlink-description": "Kasilpo iti ruar", - "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Etiketa ti panilpo]
      [http://www.example.org]
      http://www.example.org", - "wikieditor-toolbar-help-content-xlink-result": "Etiketa ti panilpo
      [1]
      http://www.example.org", + "wikieditor-toolbar-help-content-bold-syntax": "'''Teksto a napuskol'''", + "wikieditor-toolbar-help-content-bold-result": "Teksto a napuskol", + "wikieditor-toolbar-help-content-bolditalic-description": "Napuskol ken italiko", + "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Teksto a napuskol ken italiko'''''", + "wikieditor-toolbar-help-content-bolditalic-result": "Teksto a napuskol ken italiko", + "wikieditor-toolbar-help-content-ilink-description": "Akin-uneg a silpo", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Titulo ti panid]]
      [[Titulo ti panid|Etiketa ti silpo]]", + "wikieditor-toolbar-help-content-ilink-result": "Titulo ti panid
      Etiketa ti silpo", + "wikieditor-toolbar-help-content-xlink-description": "Akinruar a silpo", + "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Etiketa ti silpo]
      [http://www.example.org]
      http://www.example.org", + "wikieditor-toolbar-help-content-xlink-result": "Etiketa ti silpo
      [1]
      http://www.example.org", "wikieditor-toolbar-help-content-heading2-description": "Maika-2 nga agpang a paulo", - "wikieditor-toolbar-help-content-heading2-syntax": "== Testo ti paulo ==", - "wikieditor-toolbar-help-content-heading2-result": "

      Testo ti paulo

      ", + "wikieditor-toolbar-help-content-heading2-syntax": "== Teksto ti paulo ==", + "wikieditor-toolbar-help-content-heading2-result": "

      Teksto ti paulo

      ", "wikieditor-toolbar-help-content-heading3-description": "Maika-3 nga agpang a paulo", - "wikieditor-toolbar-help-content-heading3-syntax": "=== Testo ti paulo ===", - "wikieditor-toolbar-help-content-heading3-result": "

      Testo ti paulo

      ", + "wikieditor-toolbar-help-content-heading3-syntax": "=== Teksto ti paulo ===", + "wikieditor-toolbar-help-content-heading3-result": "

      Teksto ti paulo

      ", "wikieditor-toolbar-help-content-heading4-description": "Maika-4 nga agpang a paulo", - "wikieditor-toolbar-help-content-heading4-syntax": "==== Testo ti paulo ====", - "wikieditor-toolbar-help-content-heading4-result": "

      Testo ti paulo

      ", + "wikieditor-toolbar-help-content-heading4-syntax": "==== Teksto ti paulo ====", + "wikieditor-toolbar-help-content-heading4-result": "

      Teksto ti paulo

      ", "wikieditor-toolbar-help-content-heading5-description": "Maika-5 nga agpang a paulo", - "wikieditor-toolbar-help-content-heading5-syntax": "===== Testo ti paulo =====", - "wikieditor-toolbar-help-content-heading5-result": "
      Testo ti paulo
      ", + "wikieditor-toolbar-help-content-heading5-syntax": "===== Teksto ti paulo =====", + "wikieditor-toolbar-help-content-heading5-result": "
      Teksto ti paulo
      ", "wikieditor-toolbar-help-content-ulist-description": "Punglo a listaan", "wikieditor-toolbar-help-content-ulist-syntax": "* Ilista ti banag
      * Ilista ti banag", "wikieditor-toolbar-help-content-ulist-result": "
      • Ilista ti banag
      • Ilista ti banag
      ", @@ -185,18 +185,22 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. Ilista ti banag
      2. Ilista ti banag
      ", "wikieditor-toolbar-help-content-file-description": "Naisengngat a papeles", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", - "wikieditor-toolbar-help-content-reference-description": "Pinagibasaran", - "wikieditor-toolbar-help-content-reference-syntax": "Testo ti panid.<ref name=\"test\">[http://www.example.org Testo ti panilpo], nainayon a testo.</ref>", - "wikieditor-toolbar-help-content-reference-result": "Testo ti panid.[1]", - "wikieditor-toolbar-help-content-rereference-description": "Nainayon a panagusar ti kapada a pinagibasaran", - "wikieditor-toolbar-help-content-rereference-result": "Testo ti panid.[1]", - "wikieditor-toolbar-help-content-showreferences-description": "Iparang dagiti pinagibasaran", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Testo ti panilpo, nainayon a testo.
      ", - "wikieditor-toolbar-help-content-signaturetimestamp-description": "Ti pirmam nga addan ti oras ken petsa", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nagan ti agar-aramat (tungtungan) 15:54, 10 Hunio 2009 (UTC)", + "wikieditor-toolbar-help-content-file-caption": "Teksto ti kapsion", + "wikieditor-toolbar-help-content-reference-description": "Reperensia", + "wikieditor-toolbar-help-content-reference-syntax": "Teksto ti panid.<ref>[http://www.example.org Teksto ti silpo], maipatinayon a teksto.</ref>", + "wikieditor-toolbar-help-content-reference-result": "Teksto ti panid.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Nanaganan a reperensia", + "wikieditor-toolbar-help-content-named-reference-syntax": "Teksto ti panid.<ref name=\"test\">[http://www.example.org Teksto ti silpo]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Teksto ti panid.[2]", + "wikieditor-toolbar-help-content-rereference-description": "Maipatinayon nga usar iti isu met laeng a reperensia", + "wikieditor-toolbar-help-content-rereference-result": "Teksto ti panid.[2]", + "wikieditor-toolbar-help-content-showreferences-description": "Iparang dagiti reperensia", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Teksto ti silpo, maipatinayon a teksto.
      2. ^ Teksto ti silpo
      ", + "wikieditor-toolbar-help-content-signaturetimestamp-description": "Pirma nga addaan iti oras ken petsa", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nagan ti agar-aramat (tungtungan) 15:54, 10 Hunio 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Pirma", "wikieditor-toolbar-help-content-signature-result": "Nagan ti agar-aramat (tungtungan)", "wikieditor-toolbar-help-content-indent-description": "Lennekan", - "wikieditor-toolbar-help-content-indent-syntax": "Kadawyan a testo
      :Nalennekan a testo
      ::Nalennekan a testo", - "wikieditor-toolbar-help-content-indent-result": "Kadawyan a testo
      Nalennekan a testo
      Nalennekan a testo
      " + "wikieditor-toolbar-help-content-indent-syntax": "Kadawyan a teksto
      :Nalennekan a teksto
      ::Nalennekan a teksto", + "wikieditor-toolbar-help-content-indent-result": "Kadawyan a teksto
      Nalennekan a teksto
      Nalennekan a teksto
      " } diff --git a/extensions/WikiEditor/i18n/is.json b/extensions/WikiEditor/i18n/is.json index 58f5a228..162637a5 100644 --- a/extensions/WikiEditor/i18n/is.json +++ b/extensions/WikiEditor/i18n/is.json @@ -24,8 +24,7 @@ "wikieditor-publish-dialog-goback": "Fara til baka", "wikieditor-toolbar": "Breytingarstika", "wikieditor-toolbar-desc": "Breytingarstika með auknu notagildi", - "wikieditor-toolbar-dialogs-preference": "Virkja valmyndir fyrir innsetningu tengla, taflna og aðgerðina að skipta út texta.", - "wikieditor-toolbar-hidesig": "Fela undirskriftar hnappinn á síðum í aðalnafnrými", + "wikieditor-toolbar-dialogs-preference": "Virkja valmyndir fyrir innsetningu tengla, taflna og aðgerðna að skipta út texta.", "wikieditor-toolbar-loading": "Hleð...", "wikieditor-toolbar-tool-bold": "Feitletrað", "wikieditor-toolbar-tool-bold-example": "Feitletraður texti", @@ -118,7 +117,7 @@ "wikieditor-toolbar-tool-table-preview": "Forskoðun", "wikieditor-toolbar-tool-table-insert": "Setja inn", "wikieditor-toolbar-tool-table-cancel": "Hætta við", - "wikieditor-toolbar-tool-table-toomany": "Ekki er hægt að búa til töflu með fleiri en 1000 reiti með þessari valmynd.", + "wikieditor-toolbar-tool-table-toomany": "Ekki er hægt að búa til töflu með fleiri en $1 {{PLURAL:$1|reit|reiti}} með þessari valmynd.", "wikieditor-toolbar-tool-table-invalidnumber": "Ógildur fjöldi raða eða reita.", "wikieditor-toolbar-tool-table-zero": "Taflan getur ekki innihaldið núll raðir eða reiti.", "wikieditor-toolbar-tool-replace": "Leita og skipta út", @@ -183,14 +182,14 @@ "wikieditor-toolbar-help-content-file-description": "Bæta við mynd", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Tilvísun", - "wikieditor-toolbar-help-content-reference-syntax": "Texti síðu.<ref name=\"test\">[http://www.example.org Titill síðu], Skoðað 1. janúar 2010.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Texti síðu.<ref>[http://www.example.org Titill síðu], Skoðað 1. janúar 2010.</ref>", "wikieditor-toolbar-help-content-reference-result": "Texti síðu.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ãframhaldandi notkun á sömu tilvísun", - "wikieditor-toolbar-help-content-rereference-result": "Texti síðu.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Texti síðu.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Sýna tilvísanir", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Texti tengils, viðbótar texti.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Undirskrift þín auk tímasetningar", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Notendanafn (spjall) 15:54, 10. Júní 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Notendanafn (spjall) 15:54, 10. Júní 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Undirskrift", "wikieditor-toolbar-help-content-signature-result": "Notendanafn (spjall)", "wikieditor-toolbar-help-content-indent-description": "Inndráttur", diff --git a/extensions/WikiEditor/i18n/it.json b/extensions/WikiEditor/i18n/it.json index cdeafc2c..6c116b12 100644 --- a/extensions/WikiEditor/i18n/it.json +++ b/extensions/WikiEditor/i18n/it.json @@ -13,7 +13,8 @@ "PaoloRomano", "Una giornata uggiosa '94", "Vituzzu", - "Toadino2" + "Toadino2", + "Statix64" ] }, "wikieditor": "Interfaccia avanzata di modifica del wikitesto", @@ -37,7 +38,6 @@ "wikieditor-toolbar-desc": "Barra degli strumenti di modifica della pagina con migliorata usabilità", "wikieditor-toolbar-preference": "Abilita la barra degli strumenti di modifica avanzata", "wikieditor-toolbar-dialogs-preference": "Abilita le finestre per l'inserimento di collegamenti, tabelle e la funzione di cerca e sostituisci", - "wikieditor-toolbar-hidesig": "Nasconde il pulsante della firma dalle pagine nel namespace principale", "wikieditor-toolbar-loading": "Caricamento in corso...", "wikieditor-toolbar-tool-bold": "Grassetto", "wikieditor-toolbar-tool-bold-example": "Testo in grassetto", @@ -132,7 +132,7 @@ "wikieditor-toolbar-tool-table-preview": "Anteprima", "wikieditor-toolbar-tool-table-insert": "Inserisci", "wikieditor-toolbar-tool-table-cancel": "Annulla", - "wikieditor-toolbar-tool-table-toomany": "Con questo strumento non è possibile inserire una tabella che abbia più di 1000 celle.", + "wikieditor-toolbar-tool-table-toomany": "Con questo strumento non è possibile inserire una tabella che abbia più di $1 {{PLURAL:$1|cella|celle}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Non hai indicato un numero valido di righe o di colonne.", "wikieditor-toolbar-tool-table-zero": "Non puoi inserire una tabella senza righe e/o senza colonne.", "wikieditor-toolbar-tool-replace": "Cerca e sostituisci", @@ -150,28 +150,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Non hai indicato cosa cercare.", "wikieditor-toolbar-tool-replace-invalidregex": "L'espressione regolare immessa non è valida: $1", "wikieditor-toolbar-section-characters": "Caratteri speciali", - "wikieditor-toolbar-characters-page-latin": "Latino", - "wikieditor-toolbar-characters-page-latinextended": "Latino esteso", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "Simboli", - "wikieditor-toolbar-characters-page-greek": "Greco", - "wikieditor-toolbar-characters-page-cyrillic": "Cirillico", - "wikieditor-toolbar-characters-page-arabic": "Arabo", - "wikieditor-toolbar-characters-page-arabicextended": "Arabo esteso", - "wikieditor-toolbar-characters-page-persian": "Persiano", - "wikieditor-toolbar-characters-page-hebrew": "Ebraico", - "wikieditor-toolbar-characters-page-bangla": "Bengalese", - "wikieditor-toolbar-characters-page-tamil": "Tamil", - "wikieditor-toolbar-characters-page-telugu": "Telugu", - "wikieditor-toolbar-characters-page-sinhala": "Singalese", - "wikieditor-toolbar-characters-page-gujarati": "Gujarati", - "wikieditor-toolbar-characters-page-devanagari": "Devanagari", - "wikieditor-toolbar-characters-page-thai": "Thailandese", - "wikieditor-toolbar-characters-page-lao": "Lao", - "wikieditor-toolbar-characters-page-khmer": "Khmer", - "wikieditor-toolbar-characters-endash": "lineetta enne", - "wikieditor-toolbar-characters-emdash": "lineetta emme", - "wikieditor-toolbar-characters-minus": "segno meno", "wikieditor-toolbar-section-help": "Aiuto", "wikieditor-toolbar-help-heading-description": "Descrizione", "wikieditor-toolbar-help-heading-syntax": "Cosa si digita", @@ -193,8 +171,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Testo in grassetto e corsivo'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Testo in grassetto e corsivo", "wikieditor-toolbar-help-content-ilink-description": "Collegamento interno", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Titolo pagina|Etichetta collegamento]]
      [[Titolo pagina]]", - "wikieditor-toolbar-help-content-ilink-result": "Etichetta collegamento
      Titolo pagina", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Titolo pagina]]
      [[Titolo pagina|Etichetta collegamento]]", + "wikieditor-toolbar-help-content-ilink-result": "Titolo pagina
      Etichetta collegamento", "wikieditor-toolbar-help-content-xlink-description": "Collegamento esterno", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Etichetta collegamento]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Etichetta collegamento
      [1]
      http://www.example.org", @@ -220,14 +198,15 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Esempio.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Testo della didascalia", "wikieditor-toolbar-help-content-reference-description": "Nota", - "wikieditor-toolbar-help-content-reference-syntax": "Testo della pagina.<ref name=\"test\">[http://www.example.org Testo del collegamento], testo aggiuntivo.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Testo della pagina.<ref>[http://www.example.org Testo del collegamento], testo aggiuntivo.</ref>", "wikieditor-toolbar-help-content-reference-result": "Testo della pagina.[1]", + "wikieditor-toolbar-help-content-named-reference-result": "Testo della pagina.[2]", "wikieditor-toolbar-help-content-rereference-description": "Ulteriore uso della stessa nota", - "wikieditor-toolbar-help-content-rereference-result": "Testo della pagina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Testo della pagina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Mostra note", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Testo del collegamento, testo aggiuntivo.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Testo del collegamento, testo aggiuntivo.
      2. ^ Testo del collegamento
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Firma con data e ora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nome utente (discussione) 15:54, 10 giu 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nome utente (discussione) 15:54, 10 giu 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firma", "wikieditor-toolbar-help-content-signature-result": "Nome utente (discussione)", "wikieditor-toolbar-help-content-indent-description": "Indentazione", diff --git a/extensions/WikiEditor/i18n/ja.json b/extensions/WikiEditor/i18n/ja.json index c82a3042..2be77284 100644 --- a/extensions/WikiEditor/i18n/ja.json +++ b/extensions/WikiEditor/i18n/ja.json @@ -11,7 +11,9 @@ "Whym", "é’å­å®ˆæ­Œ", "Rxy", - "Macofe" + "Macofe", + "Sujiniku", + "Otokoume" ] }, "wikieditor": "高度ãªã‚¦ã‚£ã‚­ãƒ†ã‚­ã‚¹ãƒˆç·¨é›†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹", @@ -35,7 +37,6 @@ "wikieditor-toolbar-desc": "使ã„ã‚„ã™ã•ã®å‘上ã—ãŸãƒšãƒ¼ã‚¸ç·¨é›†ãƒ„ールãƒãƒ¼", "wikieditor-toolbar-preference": "改良型編集ツールãƒãƒ¼ã‚’有効ã«ã™ã‚‹", "wikieditor-toolbar-dialogs-preference": "リンクや表ã®æŒ¿å…¥ã€ãŠã‚ˆã³æ¤œç´¢ã¨ç½®æ›ã®ãŸã‚ã®ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹", - "wikieditor-toolbar-hidesig": "標準åå‰ç©ºé–“ã§ç½²åボタンをéžè¡¨ç¤ºã«ã™ã‚‹", "wikieditor-toolbar-loading": "読ã¿è¾¼ã¿ä¸­...", "wikieditor-toolbar-tool-bold": "太字", "wikieditor-toolbar-tool-bold-example": "太字文", @@ -130,7 +131,7 @@ "wikieditor-toolbar-tool-table-preview": "プレビュー", "wikieditor-toolbar-tool-table-insert": "挿入", "wikieditor-toolbar-tool-table-cancel": "中止", - "wikieditor-toolbar-tool-table-toomany": "ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã§ã¯ã€1000個以上ã®ã‚»ãƒ«ãŒã‚る表ã¯æŒ¿å…¥ã§ãã¾ã›ã‚“。", + "wikieditor-toolbar-tool-table-toomany": "ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã§ã¯ã€$1個以上㮠{{PLURAL:$1|セル}}ãŒã‚る表ã¯æŒ¿å…¥ã§ãã¾ã›ã‚“。", "wikieditor-toolbar-tool-table-invalidnumber": "入力ã—ãŸè¡Œæ•°ã¾ãŸã¯åˆ—æ•°ãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。", "wikieditor-toolbar-tool-table-zero": "行数ã¾ãŸã¯åˆ—æ•°ãŒ0ã®è¡¨ã¯æŒ¿å…¥ã§ãã¾ã›ã‚“。", "wikieditor-toolbar-tool-replace": "検索ã¨ç½®æ›", @@ -169,8 +170,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''太字ã‹ã¤æ–œä½“'''''", "wikieditor-toolbar-help-content-bolditalic-result": "太字ã‹ã¤æ–œä½“", "wikieditor-toolbar-help-content-ilink-description": "内部リンク", - "wikieditor-toolbar-help-content-ilink-syntax": "[[ページå|リンクラベル]]
      [[ページå]]", - "wikieditor-toolbar-help-content-ilink-result": "リンクラベル
      ページå", + "wikieditor-toolbar-help-content-ilink-syntax": "[[ページå]]
      [[ページå|リンクラベル]]", + "wikieditor-toolbar-help-content-ilink-result": "ページå
      リンクラベル", "wikieditor-toolbar-help-content-xlink-description": "外部リンク", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org リンクラベル]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "リンクラベル
      [1]
      http://www.example.org", @@ -194,15 +195,17 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. 箇æ¡æ›¸ãé …ç›®
      2. 箇æ¡æ›¸ãé …ç›®
      ", "wikieditor-toolbar-help-content-file-description": "埋ã‚è¾¼ã¿ãƒ•ã‚¡ã‚¤ãƒ«", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "キャプション文", "wikieditor-toolbar-help-content-reference-description": "注釈", - "wikieditor-toolbar-help-content-reference-syntax": "ページ本文<ref name=\"test\">[http://www.example.org リンクタイトル]ã€è¿½åŠ ãƒ†ã‚­ã‚¹ãƒˆ</ref>。", + "wikieditor-toolbar-help-content-reference-syntax": "ページ本文<ref>[http://www.example.org リンクタイトル]ã€è¿½åŠ ãƒ†ã‚­ã‚¹ãƒˆ</ref>。", "wikieditor-toolbar-help-content-reference-result": "ページ本文[1]。", + "wikieditor-toolbar-help-content-named-reference-result": "ページ本文[2]。", "wikieditor-toolbar-help-content-rereference-description": "åŒã˜æ³¨é‡ˆã®è¿½åŠ åˆ©ç”¨", - "wikieditor-toolbar-help-content-rereference-result": "ページ本文[1]。", + "wikieditor-toolbar-help-content-rereference-result": "ページ本文[2]。", "wikieditor-toolbar-help-content-showreferences-description": "脚注ã®è¡¨ç¤º", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ リンクタイトルã€è¿½åŠ ãƒ†ã‚­ã‚¹ãƒˆ
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ リンクタイトルã€è¿½åŠ ãƒ†ã‚­ã‚¹ãƒˆ
      2. ^ リンクタイトル
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "時刻å°ä»˜ãç½²å", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "利用者å (トーク) 2009å¹´6月10æ—¥ (æ°´) 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--利用者å (トーク) 2009å¹´6月10æ—¥ (æ°´) 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ç½²å", "wikieditor-toolbar-help-content-signature-result": "利用者å (トーク)", "wikieditor-toolbar-help-content-indent-description": "インデント", diff --git a/extensions/WikiEditor/i18n/jv.json b/extensions/WikiEditor/i18n/jv.json index 880b8fa3..44cd3851 100644 --- a/extensions/WikiEditor/i18n/jv.json +++ b/extensions/WikiEditor/i18n/jv.json @@ -184,14 +184,14 @@ "wikieditor-toolbar-help-content-file-description": "Berkas kasisipaké", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Conto.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Rujukan", - "wikieditor-toolbar-help-content-reference-syntax": "Tèks kaca.<ref name=\"test\">[http://www.conto.org Tèks pranala], tèks tambahan.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tèks kaca.<ref>[http://www.conto.org Tèks pranala], tèks tambahan.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tèks kaca.[1]", "wikieditor-toolbar-help-content-rereference-description": "Panganggoan tambahan saka rujukan sing padha", - "wikieditor-toolbar-help-content-rereference-result": "Tèks kaca.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tèks kaca.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Tampilaké réferensi", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Tèks pranala, tèks tambahan.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Tapak asta lan cap wektu", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Panganggo (wicara) 15:54, 10 Juni 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Panganggo (wicara) 15:54, 10 Juni 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Tapak asta", "wikieditor-toolbar-help-content-signature-result": "Panganggo (wicara)", "wikieditor-toolbar-help-content-indent-description": "Indèn" diff --git a/extensions/WikiEditor/i18n/ka.json b/extensions/WikiEditor/i18n/ka.json index 37873bf5..13b143b2 100644 --- a/extensions/WikiEditor/i18n/ka.json +++ b/extensions/WikiEditor/i18n/ka.json @@ -189,14 +189,14 @@ "wikieditor-toolbar-help-content-file-description": "ჩáƒáƒ¡áƒ›áƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ˜", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "მინიშნებáƒ", - "wikieditor-toolbar-help-content-reference-syntax": "გვერდის ტექსტი<ref name=\"test\">[http://www.example.org ბმულის ტექსტი], დáƒáƒ›áƒáƒ¢áƒ”ბითი ტექსტი.</ref>.", + "wikieditor-toolbar-help-content-reference-syntax": "გვერდის ტექსტი<ref>[http://www.example.org ბმულის ტექსტი], დáƒáƒ›áƒáƒ¢áƒ”ბითი ტექსტი.</ref>.", "wikieditor-toolbar-help-content-reference-result": "გვერდის ტექსტი[1].", "wikieditor-toolbar-help-content-rereference-description": "იგივე მინიშნების დáƒáƒ›áƒáƒ¢áƒ”ბითი გáƒáƒ›áƒáƒ§áƒ”ნებáƒ", - "wikieditor-toolbar-help-content-rereference-result": "გვერდის ტექსტი[1].", + "wikieditor-toolbar-help-content-rereference-result": "გვერდის ტექსტი[2].", "wikieditor-toolbar-help-content-showreferences-description": "სქáƒáƒšáƒ˜áƒáƒ¡ ჩვენებáƒ", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ბმულის ტექსტი, დáƒáƒ›áƒáƒ¢áƒ”ბითი ტექსტი.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ხელმáƒáƒ¬áƒ”რრდრáƒáƒ˜áƒ¡ მითითებით", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლი (გáƒáƒœáƒ®áƒ˜áƒšáƒ•áƒ) 15:54, 10 ივნისი 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლი (გáƒáƒœáƒ®áƒ˜áƒšáƒ•áƒ) 15:54, 10 ივნისი 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ხელმáƒáƒ¬áƒ”რáƒ", "wikieditor-toolbar-help-content-signature-result": "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლი (გáƒáƒœáƒ®áƒ˜áƒšáƒ•áƒ)", "wikieditor-toolbar-help-content-indent-description": "შეწევáƒ", diff --git a/extensions/WikiEditor/i18n/kk-cyrl.json b/extensions/WikiEditor/i18n/kk-cyrl.json index c7d3e8d9..4fc9de4c 100644 --- a/extensions/WikiEditor/i18n/kk-cyrl.json +++ b/extensions/WikiEditor/i18n/kk-cyrl.json @@ -120,7 +120,7 @@ "wikieditor-toolbar-tool-table-preview": "Қарап шығу", "wikieditor-toolbar-tool-table-insert": "Енгізу", "wikieditor-toolbar-tool-table-cancel": "Болдырмау", - "wikieditor-toolbar-tool-table-toomany": "Бұл диалог арқылы кеÑтеге 1000-нан көп Ò±Ñшық енгізу мүмкін емеÑ.", + "wikieditor-toolbar-tool-table-toomany": "Бұл диалог арқылы кеÑтеге $1 {{PLURAL:$1|Ò±Ñшықтан}} көп енгізу мүмкін емеÑ.", "wikieditor-toolbar-tool-table-invalidnumber": "Сіз бағандар немеÑе қатарлар бойынша жарамды нөмір енгізбедіңіз.", "wikieditor-toolbar-tool-table-zero": "Сіз нөлдік қатар немеÑе баған бойынша кеÑте кіріÑтіре алмайÑыз.", "wikieditor-toolbar-tool-replace": "Іздеу және алмаÑтыру", @@ -138,28 +138,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Іздеу үшін ештеңе енгізбедіңіз.", "wikieditor-toolbar-tool-replace-invalidregex": "Сіз енгізген жүйелі айтылым жарамды емеÑ: $1", "wikieditor-toolbar-section-characters": "Ðрнайы таңбалар", - "wikieditor-toolbar-characters-page-latin": "Латын", - "wikieditor-toolbar-characters-page-latinextended": "Кеңейтілген латын", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "Белгілер", - "wikieditor-toolbar-characters-page-greek": "Грек", - "wikieditor-toolbar-characters-page-cyrillic": "Кирилл", - "wikieditor-toolbar-characters-page-arabic": "Ðраб", - "wikieditor-toolbar-characters-page-arabicextended": "Кеңейтілген араб", - "wikieditor-toolbar-characters-page-persian": "ПарÑÑ‹", - "wikieditor-toolbar-characters-page-hebrew": "Иврит", - "wikieditor-toolbar-characters-page-bangla": "Бангла", - "wikieditor-toolbar-characters-page-tamil": "Тамил", - "wikieditor-toolbar-characters-page-telugu": "Телугу", - "wikieditor-toolbar-characters-page-sinhala": "Синхала", - "wikieditor-toolbar-characters-page-gujarati": "Гуджарати", - "wikieditor-toolbar-characters-page-devanagari": "Девангари", - "wikieditor-toolbar-characters-page-thai": "Тай", - "wikieditor-toolbar-characters-page-lao": "Лао", - "wikieditor-toolbar-characters-page-khmer": "Кхмер", - "wikieditor-toolbar-characters-endash": "дефиÑ", - "wikieditor-toolbar-characters-emdash": "Ñызықша", - "wikieditor-toolbar-characters-minus": "Ð¼Ð¸Ð½ÑƒÑ Ð±ÐµÐ»Ð³Ñ–ÑÑ–", "wikieditor-toolbar-section-help": "Ðнықтама", "wikieditor-toolbar-help-heading-description": "СипаттамаÑÑ‹", "wikieditor-toolbar-help-heading-syntax": "Жазғаныңыз", @@ -208,14 +186,14 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Файл тақырыбы", "wikieditor-toolbar-help-content-reference-description": "Дереккөз", - "wikieditor-toolbar-help-content-reference-syntax": "Бет мәтіні.<ref name=\"test\">[http://www.мыÑал.org Сілтеме мәтіні], қоÑымша мәтін.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Бет мәтіні.<ref>[http://www.мыÑал.org Сілтеме мәтіні], қоÑымша мәтін.</ref>", "wikieditor-toolbar-help-content-reference-result": "Бет мәтіні.[1]", "wikieditor-toolbar-help-content-rereference-description": "Кейбір дереккөздердің қоÑымша қолданылуы", - "wikieditor-toolbar-help-content-rereference-result": "Бет мәтіні.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Бет мәтіні.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Дереккөзін көрÑету", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Сілтеме мәтіні, қоÑымша мәтін.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Қолтаңба және уақыт", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ҚатыÑушы еÑімі (талқылауы) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ҚатыÑушы еÑімі (талқылауы) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Қолтаңба", "wikieditor-toolbar-help-content-signature-result": "ҚатыÑушы еÑімі (талқылауы)", "wikieditor-toolbar-help-content-indent-description": "ШегініÑ", diff --git a/extensions/WikiEditor/i18n/km.json b/extensions/WikiEditor/i18n/km.json index 52c53583..2ec03b6f 100644 --- a/extensions/WikiEditor/i18n/km.json +++ b/extensions/WikiEditor/i18n/km.json @@ -89,7 +89,7 @@ "wikieditor-toolbar-tool-superscript-example": "ឃ្លាជានិទស្សន្ážáž“áŸ", "wikieditor-toolbar-tool-subscript": "សន្ទស្សនáŸ", "wikieditor-toolbar-tool-subscript-example": "ឃ្លាជាសន្ទស្សនáŸ", - "wikieditor-toolbar-group-insert": "បញ្ជូល", + "wikieditor-toolbar-group-insert": "បញ្ចូល", "wikieditor-toolbar-tool-gallery": "វិចិážáŸ’រសាលរូបភាព", "wikieditor-toolbar-tool-gallery-example": "ឧទាហរណáŸ.jpg|ចំនងជើងក្រោមរូបភាព១\nឧទាហរណáŸ.jpg|ចំនងជើងក្រោមរូបភាព២", "wikieditor-toolbar-tool-newline": "ចុះបន្ទាážáŸ‹", @@ -168,14 +168,14 @@ "wikieditor-toolbar-help-content-file-description": "រូបភាពបង្កប់", "wikieditor-toolbar-help-content-file-syntax": "[[$1:ឧទាហរណáŸ.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "ឯកសារ​យោង​", - "wikieditor-toolbar-help-content-reference-syntax": "អážáŸ’ážáž”ទ​ទំពáŸážšâ€‹.<ref name=\"test\">[http://www.example.org ážáŸ†ážŽâ€‹áž—្ជាប់], អក្សរ​បន្ážáŸ‚ម​.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "អážáŸ’ážáž”ទ​ទំពáŸážšâ€‹.<ref>[http://www.example.org ážáŸ†ážŽâ€‹áž—្ជាប់], អក្សរ​បន្ážáŸ‚ម​.</ref>", "wikieditor-toolbar-help-content-reference-result": "អážáŸ’ážáž”ទ​ទំពáŸážšâ€‹.[1]", "wikieditor-toolbar-help-content-rereference-description": "ការប្រើប្រាស់​បន្ážáŸ‚ម​នៃ​ឯកសារ​យោង​ដូចគ្នា​", - "wikieditor-toolbar-help-content-rereference-result": "អážáŸ’ážáž”ទ​ទំពáŸážšâ€‹.[1]", + "wikieditor-toolbar-help-content-rereference-result": "អážáŸ’ážáž”ទ​ទំពáŸážšâ€‹.[2]", "wikieditor-toolbar-help-content-showreferences-description": "បង្ហាញ​ឯកសារ​យោង​", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ អážáŸ’ážáž”áž‘ážáŸ†ážŽáž—្ជាប់/a>, អážáŸ’ážáž”ទបន្ážáŸ‚ម។
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "áž ážáŸ’ážáž›áŸážáž¶â€‹ ជាមួយនឹង​ážáŸ’រាពáŸáž›ážœáŸáž›áž¶â€‹", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "អážáŸ’ážáž“ាម (ការពិភាក្សា) ១៥:៥៤, ១០ មិážáž»áž“ា ២០០៩ (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--អážáŸ’ážáž“ាម (ការពិភាក្សា) ១៥:៥៤, ១០ មិážáž»áž“ា ២០០៩ (UTC)", "wikieditor-toolbar-help-content-signature-description": "áž ážáŸ’ážáž›áŸážáž¶â€‹", "wikieditor-toolbar-help-content-signature-result": "អážáŸ’ážáž“ាម (ការពិភាក្សា)", "wikieditor-toolbar-help-content-indent-description": "ážáž·ážáž…ូល (Indent)", diff --git a/extensions/WikiEditor/i18n/kn.json b/extensions/WikiEditor/i18n/kn.json index b5c95a78..ab5252e6 100644 --- a/extensions/WikiEditor/i18n/kn.json +++ b/extensions/WikiEditor/i18n/kn.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Nayvik", - "VASANTH S.N." + "VASANTH S.N.", + "Yogesh" ] }, "wikieditor": "ಮà³à²‚ದà³à²µà²°à²¿à²¦ ವಿಕಿಪಠà³à²¯ ಸಂಪಾದನೆಯ ಅಂತರà³â€à²¸à²‚ಪರà³à²•", @@ -12,9 +13,6 @@ "wikieditor-preview-tab": "ಮà³à²¨à³à²¨à³‹à²Ÿ", "wikieditor-preview-changes-tab": "ಬದಲಾವಣೆಗಳà³", "wikieditor-preview-loading": "ತà³à²‚ಬಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†....", - "wikieditor-previewDialog-preference": "ಮà³à²¨à³à²¨à³‹à²Ÿ ಸಂವಾದ ಸಾಧà³à²¯à²µà²¾à²—ಿಸà³", - "wikieditor-previewDialog-tab": "ಮà³à²¨à³à²¨à³‹à²Ÿ", - "wikieditor-previewDialog-loading": "ತà³à²‚ಬಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†....", "wikieditor-publish-preference": "ಅನà³à²•à³à²°à²®à²µà²¾à²—ಿ ಪà³à²°à²•à²Ÿà²ªà²¡à³à²¸à³à²µà²¿à²•à³†à²¯à²¨à³à²¨à³ ಸಾಧà³à²¯à²µà²¾à²—ಿಸà³", "wikieditor-publish-button-publish": "ಪà³à²°à²•à²Ÿà²ªà²¡à²¿à²¸à³", "wikieditor-publish-button-cancel": "ರದà³à²¦à³à²ªà²¡à²¿à²¸à³", @@ -84,21 +82,7 @@ "wikieditor-toolbar-tool-table-cancel": "ರದà³à²¦à³à²®à²¾à²¡à³", "wikieditor-toolbar-tool-replace-search": "ಇದನà³à²¨à³ ಹà³à²¡à³à²•à³", "wikieditor-toolbar-tool-replace-close": "ಮà³à²šà³à²šà²¿", - "wikieditor-toolbar-section-characters": "ವಿಷೇಶ ಅಕà³à²·à²°à²—ಳà³", - "wikieditor-toolbar-characters-page-latin": "ಲà³à²¯à²¾à²Ÿà²¿à²¨", - "wikieditor-toolbar-characters-page-greek": "ಗà³à²°à³€à²•à³", - "wikieditor-toolbar-characters-page-arabic": "ಅರೇಬಿಕà³", - "wikieditor-toolbar-characters-page-persian": "ಪರà³à²¶à²¿à²¯à²¨à³", - "wikieditor-toolbar-characters-page-hebrew": "ಹೀಬà³à²°à³‚", - "wikieditor-toolbar-characters-page-bangla": "ಬಾಂಗà³à²²à²¾", - "wikieditor-toolbar-characters-page-tamil": "ತಮಿಳà³", - "wikieditor-toolbar-characters-page-telugu": "ತೆಲà³à²—à³", - "wikieditor-toolbar-characters-page-sinhala": "ಸಿಂಹಳ", - "wikieditor-toolbar-characters-page-gujarati": "ಗà³à²œà²°à²¾à²¤à²¿", - "wikieditor-toolbar-characters-page-devanagari": "ದೇವನಾಗರಿ", - "wikieditor-toolbar-characters-page-thai": "ಥಾಯà³", - "wikieditor-toolbar-characters-page-lao": "ಲಾವೋ", - "wikieditor-toolbar-characters-page-khmer": "ಖà³à²®à³‡à²°à³", + "wikieditor-toolbar-section-characters": "ವಿಶೇಷ ಅಕà³à²·à²°à²—ಳà³", "wikieditor-toolbar-section-help": "ಸಹಾಯ", "wikieditor-toolbar-help-heading-description": "ವಿವರ", "wikieditor-toolbar-help-page-link": "ಕೊಂಡಿಗಳà³", diff --git a/extensions/WikiEditor/i18n/ko.json b/extensions/WikiEditor/i18n/ko.json index bf093b47..c344ad4d 100644 --- a/extensions/WikiEditor/i18n/ko.json +++ b/extensions/WikiEditor/i18n/ko.json @@ -10,7 +10,8 @@ "Priviet", "ê´€ì¸ìƒëžµ", "ì•„ë¼", - "Macofe" + "Macofe", + "Hwangjy9" ] }, "wikieditor": "í™•ìž¥ëœ ìœ„í‚¤í…스트 편집 ì¸í„°íŽ˜ì´ìŠ¤", @@ -34,15 +35,14 @@ "wikieditor-toolbar-desc": "ì‚¬ìš©ì„±ì´ í–¥ìƒëœ 문서 편집 ë„구 모ìŒ", "wikieditor-toolbar-preference": "í–¥ìƒëœ 편집 ë„구 ëª¨ìŒ í™œì„±í™”í•˜ê¸°", "wikieditor-toolbar-dialogs-preference": "ë§í¬ì™€ í‘œ 넣기 ë¿ë§Œ ì•„ë‹ˆë¼ ì°¾ì•„ 바꾸기 ê¸°ëŠ¥ì„ ìœ„í•œ 마법사를 활성화", - "wikieditor-toolbar-hidesig": "ì¼ë°˜ 문서 ì´ë¦„공간ì—ì„œ 서명 단추를 숨기기", "wikieditor-toolbar-loading": "불러오는 중...", - "wikieditor-toolbar-tool-bold": "êµµì€ ê¸€ì”¨", + "wikieditor-toolbar-tool-bold": "굵게", "wikieditor-toolbar-tool-bold-example": "êµµì€ ê¸€ì”¨", - "wikieditor-toolbar-tool-italic": "ê¸°ìš¸ì¸ ê¸€ì”¨", + "wikieditor-toolbar-tool-italic": "기울임꼴", "wikieditor-toolbar-tool-italic-example": "ê¸°ìš¸ì¸ ê¸€ì”¨", "wikieditor-toolbar-tool-ilink": "안쪽 ë§í¬", "wikieditor-toolbar-tool-ilink-example": "문서 제목", - "wikieditor-toolbar-tool-xlink": "바깥 ë§í¬ (주소 ì•žì— http://ê°€ 있어야 합니다)", + "wikieditor-toolbar-tool-xlink": "바깥 ë§í¬ (http://를 ì•žì— ë¶™ì—¬ì•¼ 합니다)", "wikieditor-toolbar-tool-xlink-example": "http://www.example.com ë§í¬ ì´ë¦„", "wikieditor-toolbar-tool-link": "ë§í¬", "wikieditor-toolbar-tool-link-title": "ë§í¬ 넣기", @@ -57,7 +57,7 @@ "wikieditor-toolbar-tool-link-insert": "ë§í¬ 넣기", "wikieditor-toolbar-tool-link-cancel": "취소", "wikieditor-toolbar-tool-link-int-target-status-exists": "문서가 존재합니다.", - "wikieditor-toolbar-tool-link-int-target-status-notexists": "문서가 존재하지 않습니다.", + "wikieditor-toolbar-tool-link-int-target-status-notexists": "문서가 존재하지 않습니다", "wikieditor-toolbar-tool-link-int-target-status-invalid": "ì œëª©ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤.", "wikieditor-toolbar-tool-link-int-target-status-external": "바깥 ë§í¬", "wikieditor-toolbar-tool-link-int-target-status-loading": "문서가 존재하는 지 í™•ì¸ ì¤‘...", @@ -79,12 +79,12 @@ "wikieditor-toolbar-file-format-none": "ì—†ìŒ", "wikieditor-toolbar-tool-file-insert": "넣기", "wikieditor-toolbar-tool-file-cancel": "취소", - "wikieditor-toolbar-tool-reference": "출처", + "wikieditor-toolbar-tool-reference": "ê°ì£¼", "wikieditor-toolbar-tool-reference-example": "ì—¬ê¸°ì— ì£¼ì„ ë‚´ìš©ì„ ì ì–´ 주세요", "wikieditor-toolbar-tool-reference-cancel": "취소", - "wikieditor-toolbar-tool-reference-title": "출처 넣기", + "wikieditor-toolbar-tool-reference-title": "ê°ì£¼ 넣기", "wikieditor-toolbar-tool-reference-insert": "넣기", - "wikieditor-toolbar-tool-reference-text": "출처 í…스트", + "wikieditor-toolbar-tool-reference-text": "ê°ì£¼ í…스트", "wikieditor-toolbar-tool-signature": "서명 ë° ì‹œê°", "wikieditor-toolbar-section-advanced": "고급", "wikieditor-toolbar-tool-heading": "문단 제목", @@ -124,19 +124,19 @@ "wikieditor-toolbar-tool-table-dimensions-columns": "ì—´", "wikieditor-toolbar-tool-table-dimensions-header": "í‘œ ì œëª©ëž€ì„ í¬í•¨ì‹œí‚¤ê¸°", "wikieditor-toolbar-tool-table-wikitable": "ì…€ ê²½ê³„ì„ ì´ ìžˆëŠ” 스타ì¼", - "wikieditor-toolbar-tool-table-sortable": "표를 ì •ë ¬ 가능하게 만들기", + "wikieditor-toolbar-tool-table-sortable": "표를 정렬할 수 있게 만들기", "wikieditor-toolbar-tool-table-example": "ì…€ ë‚´ìš©", "wikieditor-toolbar-tool-table-preview": "미리 보기", "wikieditor-toolbar-tool-table-insert": "넣기", "wikieditor-toolbar-tool-table-cancel": "취소", - "wikieditor-toolbar-tool-table-toomany": "ì´ ê¸°ëŠ¥ì„ í†µí•´ì„œëŠ” 1000ê°œ ì´ìƒì˜ ì…€ì„ ê°€ì§„ í‹€ì„ ë„£ì„ ìˆ˜ 없습니다.", + "wikieditor-toolbar-tool-table-toomany": "ì´ ê¸°ëŠ¥ì„ í†µí•´ì„œëŠ” $1ê°œ ì´ìƒì˜ {{PLURAL:$1|ì…€}}ì„ ê°€ì§„ í‹€ì„ ë„£ì„ ìˆ˜ 없습니다.", "wikieditor-toolbar-tool-table-invalidnumber": "í–‰ì´ë‚˜ ì—´ì˜ ê°œìˆ˜ë¥¼ 잘못 입력했습니다.", "wikieditor-toolbar-tool-table-zero": "í–‰ì´ë‚˜ ì—´ì˜ ê°œìˆ˜ê°€ 0ì¸ í‘œë¥¼ ë„£ì„ ìˆ˜ 없습니다.", "wikieditor-toolbar-tool-replace": "찾아 바꾸기", "wikieditor-toolbar-tool-replace-title": "찾아 바꾸기", "wikieditor-toolbar-tool-replace-search": "ì°¾ì„ ëŒ€ìƒ:", "wikieditor-toolbar-tool-replace-replace": "바꾸기:", - "wikieditor-toolbar-tool-replace-case": "대소문ìžë¥¼ 구별", + "wikieditor-toolbar-tool-replace-case": "ëŒ€ì†Œë¬¸ìž êµ¬ë¶„", "wikieditor-toolbar-tool-replace-regex": "ì°¾ì„ ë¬¸ìžì—´ì— ì •ê·œ 표현ì‹ì„ ì ìš©", "wikieditor-toolbar-tool-replace-button-findnext": "ë‹¤ìŒ ì°¾ê¸°", "wikieditor-toolbar-tool-replace-button-replace": "바꾸기", @@ -156,19 +156,19 @@ "wikieditor-toolbar-help-page-heading": "문단 제목", "wikieditor-toolbar-help-page-list": "목ë¡", "wikieditor-toolbar-help-page-file": "파ì¼", - "wikieditor-toolbar-help-page-reference": "출처", + "wikieditor-toolbar-help-page-reference": "ê°ì£¼", "wikieditor-toolbar-help-page-discussion": "토론", - "wikieditor-toolbar-help-content-italic-description": "ê¸°ìš¸ì¸ ê¸€ì”¨", + "wikieditor-toolbar-help-content-italic-description": "기울임꼴", "wikieditor-toolbar-help-content-italic-syntax": "''ê¸°ìš¸ì¸ ê¸€ì”¨''", "wikieditor-toolbar-help-content-italic-result": "ê¸°ìš¸ì¸ ê¸€ì”¨", - "wikieditor-toolbar-help-content-bold-description": "êµµì€ ê¸€ì”¨", + "wikieditor-toolbar-help-content-bold-description": "굵게", "wikieditor-toolbar-help-content-bold-syntax": "'''êµµì€ ê¸€ì”¨'''", "wikieditor-toolbar-help-content-bold-result": "êµµì€ ê¸€ì”¨", "wikieditor-toolbar-help-content-bolditalic-description": "굵고 ê¸°ìš¸ì¸ ê¸€ì”¨", "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''굵고 ê¸°ìš¸ì¸ ê¸€ì”¨'''''", "wikieditor-toolbar-help-content-bolditalic-result": "굵고 ê¸°ìš¸ì¸ ê¸€ì”¨", "wikieditor-toolbar-help-content-ilink-description": "안쪽 ë§í¬", - "wikieditor-toolbar-help-content-ilink-syntax": "[[문서 ì´ë¦„|다른 ì´ë¦„]]
      [[문서 ì´ë¦„]]", + "wikieditor-toolbar-help-content-ilink-syntax": "[[문서 ì´ë¦„]]
      [[문서 ì´ë¦„|다른 ì´ë¦„]]", "wikieditor-toolbar-help-content-ilink-result": "다른 ì´ë¦„
      문서 ì´ë¦„", "wikieditor-toolbar-help-content-xlink-description": "바깥 ë§í¬", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org ë§í¬ ì´ë¦„]
      [http://www.example.org]
      http://www.example.org", @@ -193,15 +193,16 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. ëª©ë¡ í•­ëª©
      2. ëª©ë¡ í•­ëª©
      ", "wikieditor-toolbar-help-content-file-description": "íŒŒì¼ ë„£ê¸°", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", - "wikieditor-toolbar-help-content-reference-description": "출처", - "wikieditor-toolbar-help-content-reference-syntax": "문서 ë‚´ìš©.<ref name=\"test\">[http://www.example.org ë§í¬ 제목], 기타 설명.</ref>", + "wikieditor-toolbar-help-content-file-caption": "캡션 í…스트", + "wikieditor-toolbar-help-content-reference-description": "ê°ì£¼", + "wikieditor-toolbar-help-content-reference-syntax": "문서 ë‚´ìš©.<ref>[http://www.example.org ë§í¬ 제목], 기타 설명.</ref>", "wikieditor-toolbar-help-content-reference-result": "문서 ë‚´ìš©.[1]", - "wikieditor-toolbar-help-content-rereference-description": "ê¸°ì¡´ì— ë¶™ì¸ ì¶œì²˜ 재사용하기", - "wikieditor-toolbar-help-content-rereference-result": "문서 ë‚´ìš©.[1]", - "wikieditor-toolbar-help-content-showreferences-description": "출처 ë³´ì´ê¸°", + "wikieditor-toolbar-help-content-rereference-description": "ê°™ì€ ê°ì£¼ì˜ 추가 사용", + "wikieditor-toolbar-help-content-rereference-result": "문서 ë‚´ìš©.[2]", + "wikieditor-toolbar-help-content-showreferences-description": "ê°ì£¼ ë³´ì´ê¸°", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ë§í¬ 제목, 기타 설명.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "서명 ë° ì‹œê°", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ì‚¬ìš©ìž ì´ë¦„ (토론) 2009ë…„ 6ì›” 10ì¼ (수) 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ì‚¬ìš©ìž ì´ë¦„ (토론) 2009ë…„ 6ì›” 10ì¼ (수) 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "서명", "wikieditor-toolbar-help-content-signature-result": "ì‚¬ìš©ìž ì´ë¦„ (토론)", "wikieditor-toolbar-help-content-indent-description": "들여쓰기", diff --git a/extensions/WikiEditor/i18n/krc.json b/extensions/WikiEditor/i18n/krc.json index bb4cc3db..db700846 100644 --- a/extensions/WikiEditor/i18n/krc.json +++ b/extensions/WikiEditor/i18n/krc.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Эндирилген файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Белги", - "wikieditor-toolbar-help-content-reference-syntax": "Бетни текÑти.<ref name=\"test\">[http://www.example.org Джибериуню текÑти], къошакъ текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Бетни текÑти.<ref>[http://www.example.org Джибериуню текÑти], къошакъ текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "Бетни текÑти.[1]", "wikieditor-toolbar-help-content-rereference-description": "Бир белгини джангыдан хайырланыу", - "wikieditor-toolbar-help-content-rereference-result": "Бетни текÑти.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Бетни текÑти.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Белгилени кёргюз", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Джибериуню текÑти, къошакъ текÑÑ‚.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Къол Ñалыннган бла заман белгиÑи", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Къошлуучуну аты (Ñюзюу) 15:54, 10 июнь 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Къошлуучуну аты (Ñюзюу) 15:54, 10 июнь 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Къол", "wikieditor-toolbar-help-content-signature-result": "Къошлуучуну аты (Ñюзюу)", "wikieditor-toolbar-help-content-indent-description": "Бош атлам", diff --git a/extensions/WikiEditor/i18n/ksh.json b/extensions/WikiEditor/i18n/ksh.json index 3adf5323..7fc5a79b 100644 --- a/extensions/WikiEditor/i18n/ksh.json +++ b/extensions/WikiEditor/i18n/ksh.json @@ -4,9 +4,9 @@ "Purodha" ] }, - "wikieditor": "Fottjeschredde Eddiror för der WikiTäx", - "wikieditor-desc": "Brängk en Möjjeleschkeit för Wikitäx enzejävve un ze ändere en et Wiki, di mer ußboue kann, un di noch allerhand Kröhmsches met dobei hät.", - "wikieditor-wikitext-tab": "Wikitäx", + "wikieditor": "Fottjeschredde Beärbeide un Änndere för der WikkiTäx.", + "wikieditor-desc": "Brängk en Müjjeleschkeit för Wikkitäx ennzejävve un ze ändere en et Wikki, di mer ußboue kann, un di noch allerhand Kröhmsches met dobei hät.", + "wikieditor-wikitext-tab": "Wikkitäx", "wikieditor-loading": "Ben aam Lahde â€¦", "wikieditor-preview-preference": "Donn de {{int:preview}} nevvedraan zohlohße", "wikieditor-preview-tab": "{{int:preview}}", @@ -20,19 +20,18 @@ "wikieditor-publish-dialog-minor": "{{int:minoredit}}", "wikieditor-publish-dialog-watch": "{{int:watchthis}}", "wikieditor-publish-dialog-publish": "{{int:wikieditor-publish-button-publish}}", - "wikieditor-publish-dialog-goback": "Jangk Retuur!", + "wikieditor-publish-dialog-goback": "Jangk Retuhr!", "wikieditor-toolbar": "Werkzüsh för et Ändere", "wikieditor-toolbar-desc": "Verbesserte Werkzüsh för et Ändere", "wikieditor-toolbar-preference": "Donn et ußföerlesh Werkzüsh för et Ändere aanzeije (bruch Java_Skripp)", "wikieditor-toolbar-dialogs-preference": "Donn de Lengks aanzeije för Lengks, Tabälle en Sigge em Wiki ennzeföhje un schalld et Söhke un Ußtuusche en.", - "wikieditor-toolbar-hidesig": "Donn dä Knopp för de „Ongerschreff“ nit aanzeije för nomaale Sigge vum Wiki singem Enhalld.", "wikieditor-toolbar-loading": "Ben aam Lahde â€¦", "wikieditor-toolbar-tool-bold": "Fätte Schreff", "wikieditor-toolbar-tool-bold-example": "Fätte Schreff", "wikieditor-toolbar-tool-italic": "Scheive Schreff", "wikieditor-toolbar-tool-italic-example": "Scheive Schreff", "wikieditor-toolbar-tool-ilink": "Lenk en et Wiki", - "wikieditor-toolbar-tool-ilink-example": "Dä Tittel vun dä Sigk, woh dä Lengk drop jonn sull", + "wikieditor-toolbar-tool-ilink-example": "De Övverschreff vun dä Sigk, woh dä Lengk drop jonn sull", "wikieditor-toolbar-tool-xlink": "Lengk noh Ußerhallf vum Wiki", "wikieditor-toolbar-tool-xlink-example": "http://www.example.com Täx för Aanzezeije, för däm Lengk singe Anker", "wikieditor-toolbar-tool-link": "Lengk", @@ -49,11 +48,11 @@ "wikieditor-toolbar-tool-link-cancel": "Ophüre!", "wikieditor-toolbar-tool-link-int-target-status-exists": "Di Sigg jidd_et alld", "wikieditor-toolbar-tool-link-int-target-status-notexists": "Di Sigg jidd_et nit", - "wikieditor-toolbar-tool-link-int-target-status-invalid": "Dat es ene onjöltijje Tittel för en Sigg", + "wikieditor-toolbar-tool-link-int-target-status-invalid": "Dat es en onjöltijje Övverschreff för en Sigg", "wikieditor-toolbar-tool-link-int-target-status-external": "Ene Lengk noh ußerhallef vum Wiki", "wikieditor-toolbar-tool-link-int-target-status-loading": "Ben aam Prööfe, ov et di Sigg jitt{{int:ellipsis}}", "wikieditor-toolbar-tool-link-int-target-status-disambig": "„Wadd eß dat?“ Sigg", - "wikieditor-toolbar-tool-link-int-invalid": "Dä aanjejovve Tittel för en Sigg en onjöltesch.", + "wikieditor-toolbar-tool-link-int-invalid": "De aanjejovve Övverschreff för en Sigg en onjöltesch.", "wikieditor-toolbar-tool-link-lookslikeinternal": "Ding URL schingk obb en Sigg em Wiki sellver ze jon. Wells De ene ääschte Lengk en et Wiki druß maache?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Ene Lengk en et Wiki", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Ene Lengk uß em Wiki moh ußerhallef", @@ -61,7 +60,7 @@ "wikieditor-toolbar-tool-file": "Enjefösch Dattei", "wikieditor-toolbar-tool-file-example": "Beld_Beishpöll.jpeg", "wikieditor-toolbar-tool-file-title": "Dattei ennfööje", - "wikieditor-toolbar-file-target": "Dä Dattei iere Naame:", + "wikieditor-toolbar-file-target": "Dä Dattei iere Nahme:", "wikieditor-toolbar-file-caption": "Lejände:", "wikieditor-toolbar-file-size": "Ömfang", "wikieditor-toolbar-file-float": "Ußreeschte:", @@ -81,7 +80,7 @@ "wikieditor-toolbar-tool-heading": "Övverschreff", "wikieditor-toolbar-tool-heading-1": "Om bövverschte Nivvoh", "wikieditor-toolbar-tool-heading-2": "Om zwette Nivvoh", - "wikieditor-toolbar-tool-heading-3": "Om dette Nivvoh", + "wikieditor-toolbar-tool-heading-3": "Om drette Nivvoh", "wikieditor-toolbar-tool-heading-4": "Om veete Nivvoh", "wikieditor-toolbar-tool-heading-5": "Om fönnefte Nivvoh", "wikieditor-toolbar-tool-heading-example": "Dä Övverschreff iere Tex", @@ -90,10 +89,10 @@ "wikieditor-toolbar-tool-ulist-example": "Ene Enndraach en dä Leß", "wikieditor-toolbar-tool-olist": "En Leß met Nommere", "wikieditor-toolbar-tool-olist-example": "Ene Enndraach en dä Leß", - "wikieditor-toolbar-tool-nowiki": "Der Wiki-Code för et Fommatteere üvverjonn", + "wikieditor-toolbar-tool-nowiki": "Der Wikki_Kohd för et Fommattehre övverjonn", "wikieditor-toolbar-tool-nowiki-example": "Jif dä Tex en, dä vun de Wiki-Soffwär nit bearbeid, un en Rauh jelooße wääde soll", "wikieditor-toolbar-tool-redirect": "En Ömleidong", - "wikieditor-toolbar-tool-redirect-example": "Dä Tittel vun dä Sigg, wo et hen jonn sull", + "wikieditor-toolbar-tool-redirect-example": "De Övverschreff vun dä Sigg, wo et hen jonn sull", "wikieditor-toolbar-tool-big": "Met en jröößer Schreff jeschrevve", "wikieditor-toolbar-tool-big-example": "Met en jröößer Schreff jeschrevve", "wikieditor-toolbar-tool-small": "Met en kleiner Schreff jeschrevve", @@ -119,9 +118,9 @@ "wikieditor-toolbar-tool-table-example": "Täx en enem Feld en dä Tabäll", "wikieditor-toolbar-tool-table-preview": "{{int:preview}}", "wikieditor-toolbar-tool-table-insert": "Lohß Jonn!", - "wikieditor-toolbar-tool-table-cancel": "Schloß! Ophüüre!", + "wikieditor-toolbar-tool-table-cancel": "Schloß! Ophühre!", "wikieditor-toolbar-tool-table-example-text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec purus diam. Sed aliquam imperdiet nunc quis lacinia. Donec rutrum consectetur placerat. Sed volutpat neque non purus faucibus id ultricies enim euismod. Un der Öhl läuf küßde Postölling Ähzebülle wann Ãœhle de Sohd beije.", - "wikieditor-toolbar-tool-table-toomany": "En Tabäll met mieh wi {{PLUTAL:$1|einem Plaz|$1 Pläz|keinem Plaz}} kann heh dat Projramm nit en der Täx enboue.", + "wikieditor-toolbar-tool-table-toomany": "En Tabäll met mieh wi {{PLURAL:$1|einem Plaz|$1 Pläz|keinem Plaz}} kann heh dat Projramm nit en der Täx enboue.", "wikieditor-toolbar-tool-table-invalidnumber": "Do häs kein jöltije Zahl för de Reije udder de Schpallde enjejovve.", "wikieditor-toolbar-tool-table-zero": "Do kanns kein Tabäll ennföhje, woh kein Schpallde udder kein Reihje dren sin.", "wikieditor-toolbar-tool-replace": "Söhke un Tuusche", @@ -187,16 +186,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Täx zom Beld", "wikieditor-toolbar-help-content-reference-description": "Fohßnoht", - "wikieditor-toolbar-help-content-reference-syntax": "Tex en dä Sigg. <ref name=\"versoht\">[http://www.example.org Täx för dä Lengk], un noch jät mieh Täx.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tex en dä Sigg. <ref>[http://www.example.org Täx för dä Lengk], un noch jät mieh Täx.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tex en dä Sigg. [1]", + "wikieditor-toolbar-help-content-named-reference-description": "Benannte Bezösch", "wikieditor-toolbar-help-content-rereference-description": "Noch ens desellve Fohßnoht bruche", - "wikieditor-toolbar-help-content-rereference-result": "Tex en dä Sigg. [1]", + "wikieditor-toolbar-help-content-rereference-result": "Täx en dä Sigg. [2]", "wikieditor-toolbar-help-content-showreferences-description": "Fohßnuuhte aanzeije", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Täx för dä Lengk, un noch jät mieh Täx.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "„Ongerschreff“ met Dattum un Uhrzick", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Metmaacher_Name (Klaaf) 15:54, 10. Juni 2009 (CET)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Metmaacher_Nahme (Klaaf) 15:54, 10. Juhni 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "„Ongerschreff“", - "wikieditor-toolbar-help-content-signature-result": "Metmaacher_Name (Klaaf)", + "wikieditor-toolbar-help-content-signature-result": "Metmaacher_Nahme (Klaaf)", "wikieditor-toolbar-help-content-indent-description": "Enjerök", "wikieditor-toolbar-help-content-indent-syntax": "Nommaale Täx
      :Enjerök
      ::Un norrens enjerök", "wikieditor-toolbar-help-content-indent-result": "Nommaale Täx
      Enjerök
      Un norrens enjerök
      " diff --git a/extensions/WikiEditor/i18n/kw.json b/extensions/WikiEditor/i18n/kw.json index add86ff9..ee3c65ed 100644 --- a/extensions/WikiEditor/i18n/kw.json +++ b/extensions/WikiEditor/i18n/kw.json @@ -164,14 +164,14 @@ "wikieditor-toolbar-help-content-file-description": "Restren neythys", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ensampel.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Devyn", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst an folen.<ref name=\"test\">[http://www.ensampel.org Tekst an gevren], tekst keworansel.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst an folen.<ref>[http://www.ensampel.org Tekst an gevren], tekst keworansel.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tekst an folen.[1]", "wikieditor-toolbar-help-content-rereference-description": "Devnydh keworansel a'n keth devyn", - "wikieditor-toolbar-help-content-rereference-result": "Tekst an folen.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tekst an folen.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Diskwedhes devynnow", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Tekst an gevren, tekst keworansel.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Sinans gans an dedhyans", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Hanow usyer (keskows) 15:54, 10 Metheven 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Hanow usyer (keskows) 15:54, 10 Metheven 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Sinans", "wikieditor-toolbar-help-content-signature-result": "Hanow devnydhyer (keskows)", "wikieditor-toolbar-help-content-indent-description": "Kryba", diff --git a/extensions/WikiEditor/i18n/ky.json b/extensions/WikiEditor/i18n/ky.json index 76c9bacc..76418fa4 100644 --- a/extensions/WikiEditor/i18n/ky.json +++ b/extensions/WikiEditor/i18n/ky.json @@ -139,14 +139,14 @@ "wikieditor-toolbar-help-content-file-description": "КыÑтарылган файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Шилтемелер", - "wikieditor-toolbar-help-content-reference-syntax": "Барактын текÑти.<ref name=\"test\">[http://www.example.org Шилтеменин текÑти], кошумча текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Барактын текÑти.<ref>[http://www.example.org Шилтеменин текÑти], кошумча текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "Барактын текÑти.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ошол Ñле шилтемени кошумча колдонуу", - "wikieditor-toolbar-help-content-rereference-result": "Барактын текÑти.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Барактын текÑти.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Шилтемелерди көргөз", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Шилтеменин текÑти, кошумча текÑÑ‚.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Кол тамга менен убакыт мөөрүн баÑ", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Колдонуучунун аты (талкуу) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Колдонуучунун аты (талкуу) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Кол тамга", "wikieditor-toolbar-help-content-signature-result": "Колдонуучунун аты (талкуу)", "wikieditor-toolbar-help-content-indent-description": "ЖÑÑк калтыр", diff --git a/extensions/WikiEditor/i18n/la.json b/extensions/WikiEditor/i18n/la.json index 77e2ae3d..d70cab03 100644 --- a/extensions/WikiEditor/i18n/la.json +++ b/extensions/WikiEditor/i18n/la.json @@ -93,14 +93,14 @@ "wikieditor-toolbar-help-content-file-description": "Fasciculus in pagina impositus", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplum.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referentia bibliographica", - "wikieditor-toolbar-help-content-reference-syntax": "Textus paginae.<ref name=\"test\">[http://www.example.org Textus nexus], textus additus.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Textus paginae.<ref>[http://www.example.org Textus nexus], textus additus.</ref>", "wikieditor-toolbar-help-content-reference-result": "Textus paginae.[1]", "wikieditor-toolbar-help-content-rereference-description": "Eiusdem referentiae usus additus", - "wikieditor-toolbar-help-content-rereference-result": "Textus paginae.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Textus paginae.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Referentias bibliographicas monstrare", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Textus nexus, textus additus.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Subscriptio tua cum indicatione temporis", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nomen usoris (disputatio) 15:54, 10 Iunii 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nomen usoris (disputatio) 15:54, 10 Iunii 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Subscriptio", "wikieditor-toolbar-help-content-signature-result": "Nomen usoris (disputatio)" } diff --git a/extensions/WikiEditor/i18n/lb.json b/extensions/WikiEditor/i18n/lb.json index 71522b62..0be788e0 100644 --- a/extensions/WikiEditor/i18n/lb.json +++ b/extensions/WikiEditor/i18n/lb.json @@ -25,8 +25,7 @@ "wikieditor-toolbar": "Toolbar änneren", "wikieditor-toolbar-desc": "Toolbar vun de Säitenännerunge mat erweiderter Benotzerfrëndlechkeet", "wikieditor-toolbar-preference": "Déi erweidert Ännerungs-Toolbar aktivéieren", - "wikieditor-toolbar-dialogs-preference": "Assistente fir d'Drasetze vu Linken, Tabellen genee sou wéi d'Funktioun 'sichen an ersetzen' aschalten", - "wikieditor-toolbar-hidesig": "Den Ënnerschrëftsknäppchen op Säiten am Haaptnummraum verstoppen", + "wikieditor-toolbar-dialogs-preference": "Assistente fir d'Drasetze vu Linken, Tabelle genee sou wéi d'Funktioun 'sichen an ersetzen' aschalten", "wikieditor-toolbar-loading": "Lueden...", "wikieditor-toolbar-tool-bold": "Fettgedréckt", "wikieditor-toolbar-tool-bold-example": "Fettgedréckten Text", @@ -55,7 +54,7 @@ "wikieditor-toolbar-tool-link-int-target-status-loading": "Et gëtt nogekuckt ob et d'Säit gëtt...", "wikieditor-toolbar-tool-link-int-target-status-disambig": "Homonymie-Säit", "wikieditor-toolbar-tool-link-int-invalid": "Den Titel deen Dir uginn hutt ass net valabel.", - "wikieditor-toolbar-tool-link-lookslikeinternal": "Déi URL déi dir uginn hutt gesäit aus wéi e Link op eng aner Wikisäit. Wëllt dir doraus en interne Link maachen?", + "wikieditor-toolbar-tool-link-lookslikeinternal": "Déi URL déi Dir uginn hutt gesäit aus wéi e Link op eng aner Wikisäit. Wëllt Dir doraus en interne Link maachen?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Interne Link", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Externe Link", "wikieditor-toolbar-tool-link-empty": "Dir hutt näischt aginn op dat verlinkt soll ginn.", @@ -121,7 +120,7 @@ "wikieditor-toolbar-tool-table-preview": "Kucken ouni ze späicheren", "wikieditor-toolbar-tool-table-insert": "Drasetzen", "wikieditor-toolbar-tool-table-cancel": "Ofbriechen", - "wikieditor-toolbar-tool-table-toomany": "Et ass net méiglech eng Tabell mat méi wéi 1000 Zelle mat dësem Dialog dranzesetzen.", + "wikieditor-toolbar-tool-table-toomany": "Et ass net méiglech eng Tabell mat méi wéi $1 {{PLURAL:$1|Zelle}} mat dësem Dialog dranzesetzen.", "wikieditor-toolbar-tool-table-invalidnumber": "Dir hutt keng valabel Zuel vu Reien oder Kolonnen aginn.", "wikieditor-toolbar-tool-table-zero": "Dir kënnt Tabell mat null Reien a Kolonnen drasetzen.", "wikieditor-toolbar-tool-replace": "Sichen an ersetzen", @@ -160,8 +159,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Fetten & kursiven Text'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Fetten & kursiven Text", "wikieditor-toolbar-help-content-ilink-description": "Interne Link", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Page title|Text vum Link]]
      [[Page title]]", - "wikieditor-toolbar-help-content-ilink-result": "Text vum Link
      Titel vun der Säit", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Page title|Text vum Link]]
      [[Page title|Linktext]]", + "wikieditor-toolbar-help-content-ilink-result": "Titel vun der Säit
      Etikett vum Link", "wikieditor-toolbar-help-content-xlink-description": "Externe Link", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Text vum Link]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "a href='#' class='external'>Text vum Link
      [1]
      http://www.example.org", @@ -186,14 +185,16 @@ "wikieditor-toolbar-help-content-file-description": "Agebonnene Fichier", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Beispill.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referenz", - "wikieditor-toolbar-help-content-reference-syntax": "Text vun der Säit.<ref name=\"test\">[http://www.example.org Text vum Link], zousätzlechen Text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Text vun der Säit.<ref>[http://www.example.org Text vum Link], zousätzlechen Text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Text vun der Säit [1]", + "wikieditor-toolbar-help-content-named-reference-description": "Referenz mat engem Numm", + "wikieditor-toolbar-help-content-named-reference-result": "Text vun der Säit [2]", "wikieditor-toolbar-help-content-rereference-description": "Zousätzleche Gebrauch vun derselwëschter Referenz", - "wikieditor-toolbar-help-content-rereference-result": "Text vun der Säit. [1]", + "wikieditor-toolbar-help-content-rereference-result": "Text vun der Säit. [2]", "wikieditor-toolbar-help-content-showreferences-description": "Referenze weisen", - "wikieditor-toolbar-help-content-showreferences-result": "
        \n
      1. ^ Text vum Link, zousätzlechen Text.
      2. \n
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
        \n
      1. ^ Text vum Link, zousätzlechen Text.
      2. \n
      3. ^ Text vum Link
      4. \n
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Ënnerschrëft mat Datum an Auerzäit", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Benotzernumm (Diskussioun) 10 Juni 2009 àëm 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Benotzernumm (Diskussioun) 10 Juni 2009 ëm 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Ënnerschrëft", "wikieditor-toolbar-help-content-signature-result": "Benotzernumm (talk)", "wikieditor-toolbar-help-content-indent-description": "Erasetzen", diff --git a/extensions/WikiEditor/i18n/li.json b/extensions/WikiEditor/i18n/li.json index 79321cba..6eea884f 100644 --- a/extensions/WikiEditor/i18n/li.json +++ b/extensions/WikiEditor/i18n/li.json @@ -176,14 +176,14 @@ "wikieditor-toolbar-help-content-file-description": "Mediabesjtandj", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Verwiezing", - "wikieditor-toolbar-help-content-reference-syntax": "Paginateks.<ref name=\"test\">[http://www.example.org Verwiezingsteks], biekómmendje teks.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Paginateks.<ref>[http://www.example.org Verwiezingsteks], biekómmendje teks.</ref>", "wikieditor-toolbar-help-content-reference-result": "Paginateks. [1]", "wikieditor-toolbar-help-content-rereference-description": "Hergebroek van dezelfdje referentie", - "wikieditor-toolbar-help-content-rereference-result": "Paginateks. [1]", + "wikieditor-toolbar-help-content-rereference-result": "Paginateks. [2]", "wikieditor-toolbar-help-content-showreferences-description": "Toean verwiezinge", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Verwiezingsteks, biekómstige teks.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Handjteikening en tied", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Gebroekersnaam (euverlègk) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Gebroekersnaam (euverlègk) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Handjteikening", "wikieditor-toolbar-help-content-signature-result": "Gebroekersnaam (euverlègk)", "wikieditor-toolbar-help-content-indent-description": "Spring in", diff --git a/extensions/WikiEditor/i18n/lrc.json b/extensions/WikiEditor/i18n/lrc.json index 851565eb..dc976241 100644 --- a/extensions/WikiEditor/i18n/lrc.json +++ b/extensions/WikiEditor/i18n/lrc.json @@ -94,23 +94,6 @@ "wikieditor-toolbar-tool-replace-button-findnext": "نهایی نه پیدا Ú©Ùˆ", "wikieditor-toolbar-tool-replace-close": "بسن", "wikieditor-toolbar-tool-replace-emptysearch": "شما سی Ù¾ÛŒ جوری هیچی وارد نکردیته.", - "wikieditor-toolbar-characters-page-latin": "لاتين", - "wikieditor-toolbar-characters-page-ipa": "Ø¢ÛŒ Ù¾ÛŒ Ø¢", - "wikieditor-toolbar-characters-page-symbols": "نماديا", - "wikieditor-toolbar-characters-page-greek": "هلنی", - "wikieditor-toolbar-characters-page-cyrillic": "سريليك", - "wikieditor-toolbar-characters-page-arabic": "عروی", - "wikieditor-toolbar-characters-page-persian": "Ùارسی", - "wikieditor-toolbar-characters-page-hebrew": "عبری", - "wikieditor-toolbar-characters-page-bangla": "بانگلا", - "wikieditor-toolbar-characters-page-tamil": "تاميل", - "wikieditor-toolbar-characters-page-telugu": "تلوگو", - "wikieditor-toolbar-characters-page-sinhala": "سين هالا", - "wikieditor-toolbar-characters-page-gujarati": "گجرات", - "wikieditor-toolbar-characters-page-devanagari": "دوانگاری", - "wikieditor-toolbar-characters-page-thai": "تايی", - "wikieditor-toolbar-characters-page-lao": "لائو", - "wikieditor-toolbar-characters-page-khmer": "خمر", "wikieditor-toolbar-section-help": "هومياری", "wikieditor-toolbar-help-page-link": "هوم پیوندیا", "wikieditor-toolbar-help-page-list": "نوم Ú¯Ù‡ یا", @@ -138,11 +121,11 @@ "wikieditor-toolbar-help-content-olist-result": "
      • قلم نوم Ú¯Ù‡
      • قلم نوم Ú¯Ù‡
      ", "wikieditor-toolbar-help-content-reference-description": "سرچشمه", "wikieditor-toolbar-help-content-reference-result": "نیسسه بلگه.[1]", - "wikieditor-toolbar-help-content-rereference-result": "نیسسه بلگه.[1]", + "wikieditor-toolbar-help-content-rereference-result": "نیسسه بلگه.[2]", "wikieditor-toolbar-help-content-showreferences-description": "نشو دئن سرچشمه یا", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ نیسسه هوم پیوند, نیسسه اضاÙÛŒ.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "امضا Ùˆ دیسمن وخت", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "نوم کاریاری (Ú†Ú© چنه) 15:54, 10 جوئن2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--نوم کاریاری (Ú†Ú© چنه) 15:54, 10 جوئن2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "امضا", "wikieditor-toolbar-help-content-signature-result": "نوم کاریاری (Ú†Ú© چنه)", "wikieditor-toolbar-help-content-indent-description": "مئن رئته", diff --git a/extensions/WikiEditor/i18n/lt.json b/extensions/WikiEditor/i18n/lt.json index e964eccf..c5f7c0fd 100644 --- a/extensions/WikiEditor/i18n/lt.json +++ b/extensions/WikiEditor/i18n/lt.json @@ -7,7 +7,9 @@ "Matasg", "Vogone", "Vpovilaitis", - "Pofka" + "Pofka", + "Salpusnis", + "Albertas" ] }, "wikieditor": "IÅ¡plÄ—stinÄ— wikiteksto redagavimo sÄ…saja", @@ -30,7 +32,8 @@ "wikieditor-toolbar": "Redagavimo įrankių juosta", "wikieditor-toolbar-desc": "Redaguoti įrankių juostÄ…, siekiant didesnio praktiÅ¡kumo", "wikieditor-toolbar-preference": "Ä®jungti naudingesnÄ™ įrankių juostÄ…", - "wikieditor-toolbar-dialogs-preference": "Ä®jungti dialogus įterpti nuorodas, lenteles ir daugiau", + "wikieditor-toolbar-dialogs-preference": "Ä®galinti vedlius nuorodoms, lentelÄ—ms įterpti, taip pat paieÅ¡kos ir keitimo funkcijÄ…", + "wikieditor-toolbar-hidesig": "PaslÄ—pti paraÅ¡o mygtukÄ… pagrindinÄ—s vardų srities puslapiuose", "wikieditor-toolbar-loading": "Kraunama...", "wikieditor-toolbar-tool-bold": "ParyÅ¡kinti", "wikieditor-toolbar-tool-bold-example": "ParyÅ¡kinti tekstÄ…", @@ -57,6 +60,7 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "Neleistinas pavadinimas", "wikieditor-toolbar-tool-link-int-target-status-external": "IÅ¡orinÄ— nuoroda", "wikieditor-toolbar-tool-link-int-target-status-loading": "Tikrinama, ar puslapis egzistuoja...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "PaaiÅ¡kinimo puslapis", "wikieditor-toolbar-tool-link-int-invalid": "Nurodytas pavadinimas yra neleistinas", "wikieditor-toolbar-tool-link-lookslikeinternal": "Adresas, kurį nurodÄ—te, atrodo, turÄ—jo yra nuoroda į kitÄ… wiki puslapį. Ar norite paversti nuorodÄ… vidine?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "VidinÄ— nuoroda", @@ -71,6 +75,7 @@ "wikieditor-toolbar-file-float": "Lygiuoti:", "wikieditor-toolbar-file-default": "(numatytasis)", "wikieditor-toolbar-file-format": "Formatas:", + "wikieditor-toolbar-file-format-none": "nÄ—ra", "wikieditor-toolbar-tool-file-insert": "Ä®terpti", "wikieditor-toolbar-tool-file-cancel": "AtÅ¡aukti", "wikieditor-toolbar-tool-reference": "IÅ¡naÅ¡a", @@ -123,7 +128,7 @@ "wikieditor-toolbar-tool-table-preview": "PeržiÅ«ra", "wikieditor-toolbar-tool-table-insert": "Ä®terpti", "wikieditor-toolbar-tool-table-cancel": "AtÅ¡aukti", - "wikieditor-toolbar-tool-table-toomany": "Ä®terpti lentelÄ™ su daugiau nei $1 langelių Å¡iame lange negalima.", + "wikieditor-toolbar-tool-table-toomany": "Ä®terpti lentelÄ™ su daugiau nei $1 {{PLURAL:$1|}} langelių Å¡iame lange negalima.", "wikieditor-toolbar-tool-table-invalidnumber": "JÅ«s neįvedÄ—te leistino skaiÄiaus eiluÄių ar stulpelių.", "wikieditor-toolbar-tool-table-zero": "JÅ«s negalite įterpti lentelÄ—s su nuliu eiluÄių ar stulpelių.", "wikieditor-toolbar-tool-replace": "IeÅ¡koti ir pakeisti", @@ -137,29 +142,10 @@ "wikieditor-toolbar-tool-replace-button-replaceall": "Pakeisti visus", "wikieditor-toolbar-tool-replace-close": "Uždaryti", "wikieditor-toolbar-tool-replace-nomatch": "JÅ«sų paieÅ¡ka nieko nerado.", - "wikieditor-toolbar-tool-replace-success": "Atlikta $1 pakeitimas (-ų).", + "wikieditor-toolbar-tool-replace-success": "Atlikta $1{{PLURAL:$1|}} pakeitimas (-ų).", "wikieditor-toolbar-tool-replace-emptysearch": "JÅ«s neįvedÄ—te nieko ieÅ¡koti.", "wikieditor-toolbar-tool-replace-invalidregex": "Reguliarioji iÅ¡raiÅ¡ka, kuriÄ… įvedÄ—te, yra neleistina: $1", "wikieditor-toolbar-section-characters": "Specialieji simboliai", - "wikieditor-toolbar-characters-page-latin": "Lotynų", - "wikieditor-toolbar-characters-page-latinextended": "Lotynų iÅ¡plÄ—stoji", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "Simboliai", - "wikieditor-toolbar-characters-page-greek": "Graikų", - "wikieditor-toolbar-characters-page-cyrillic": "Kirilica", - "wikieditor-toolbar-characters-page-arabic": "Arabų", - "wikieditor-toolbar-characters-page-arabicextended": "Arabic extended", - "wikieditor-toolbar-characters-page-persian": "Persų", - "wikieditor-toolbar-characters-page-hebrew": "Hebrajų", - "wikieditor-toolbar-characters-page-bangla": "Bengalų", - "wikieditor-toolbar-characters-page-tamil": "Tamil", - "wikieditor-toolbar-characters-page-telugu": "Telugų", - "wikieditor-toolbar-characters-page-sinhala": "Sinhalų", - "wikieditor-toolbar-characters-page-gujarati": "Gudžaratų", - "wikieditor-toolbar-characters-page-devanagari": "Devanagari", - "wikieditor-toolbar-characters-page-thai": "Tajų", - "wikieditor-toolbar-characters-page-lao": "LaosieÄių", - "wikieditor-toolbar-characters-page-khmer": "Khmerų", "wikieditor-toolbar-section-help": "Pagalba", "wikieditor-toolbar-help-heading-description": "ApraÅ¡ymas", "wikieditor-toolbar-help-heading-syntax": "KÄ… raÅ¡ote", @@ -181,8 +167,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''ParyÅ¡kintas tekstas kursyvu'''''", "wikieditor-toolbar-help-content-bolditalic-result": "ParyÅ¡kintas tekstas kursyvu", "wikieditor-toolbar-help-content-ilink-description": "VidinÄ— nuoroda", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Puslapio pavadinimas|Pavadinimas]]
      [[Puslapio pavadinimas]]", - "wikieditor-toolbar-help-content-ilink-result": "Nuorodos pavadinimas
      Puslapio pavadinimas", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Puslapio pavadinimas]]
      [[Puslapio pavadinimas|Nuorodos žymė]]", + "wikieditor-toolbar-help-content-ilink-result": "Puslapio pavadinimas
      Nuorodos žymė", "wikieditor-toolbar-help-content-xlink-description": "Išorinė nuoroda", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Nuorodos pavadinimas]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Nuorodos pavadinimas
      [1]
      http://www.example.org", @@ -208,14 +194,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Pavyzdys.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "AntraÅ¡tÄ—s tekstas", "wikieditor-toolbar-help-content-reference-description": "IÅ¡naÅ¡a", - "wikieditor-toolbar-help-content-reference-syntax": "Puslapio tekstas.<ref name=\"test\">[http://www.example.org Nuorodos tekstas], papildomas tekstas.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Puslapio tekstas.<ref>[http://www.example.org Nuorodos tekstas], papildomas tekstas.</ref>", "wikieditor-toolbar-help-content-reference-result": "Puslapio tekstas.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Nuoroda su pavadinimu", + "wikieditor-toolbar-help-content-named-reference-syntax": "Puslapio tekstas.<ref name=\"testas\">[http://www.example.org Nuorodos tekstas]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Puslapio tekstas.[2]", "wikieditor-toolbar-help-content-rereference-description": "Papildomas tos paÄios iÅ¡naÅ¡os naudojimas", - "wikieditor-toolbar-help-content-rereference-result": "Puslapio tekstas.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Puslapio tekstas.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Rodyti iÅ¡naÅ¡as", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Nuorodos tekstas, papildomas tekstas.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Nuorodos tekstas, papildomas tekstas.
      2. ^ Nuorodos tekstas
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ParaÅ¡as bei laikas", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Naudotojo vardas (aptarimas) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Naudotojo vardas (aptarimas) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ParaÅ¡as", "wikieditor-toolbar-help-content-signature-result": "Naudotojo vardas (aptarimas)", "wikieditor-toolbar-help-content-indent-description": "Ä®trauka", diff --git a/extensions/WikiEditor/i18n/lus.json b/extensions/WikiEditor/i18n/lus.json index 11b5c610..03c02dc8 100644 --- a/extensions/WikiEditor/i18n/lus.json +++ b/extensions/WikiEditor/i18n/lus.json @@ -148,10 +148,10 @@ "wikieditor-toolbar-help-content-file-description": "Taksa telh", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Entirna.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Ràwnte", - "wikieditor-toolbar-help-content-reference-syntax": "Thu inziak.<ref name=\"test\">[http://www.example.org zawmna thü], thu dang.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Thu inziak.<ref>[http://www.example.org zawmna thü], thu dang.</ref>", "wikieditor-toolbar-help-content-reference-result": "Thu inziak.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ràwnbu hmanna dang", - "wikieditor-toolbar-help-content-rereference-result": "Thu inziak.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Thu inziak.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Thulâkna lantirna", "wikieditor-toolbar-help-content-signature-description": "Hmingtàr", "wikieditor-toolbar-help-content-signature-result": "Hmangtu-hming (sawihona)", diff --git a/extensions/WikiEditor/i18n/lv.json b/extensions/WikiEditor/i18n/lv.json index e39097b2..488b1774 100644 --- a/extensions/WikiEditor/i18n/lv.json +++ b/extensions/WikiEditor/i18n/lv.json @@ -154,7 +154,7 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Pustrekns teksts kursÄ«vÄ'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Pustrekns teksts kursÄ«vÄ", "wikieditor-toolbar-help-content-ilink-description": "IekÅ¡Ä“jÄ saite", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Lapas nosaukums|Saites teksts]]
      [[Lapas nosaukums]]", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Lapas nosaukums]]
      [[Lapas nosaukums|Saites teksts]]", "wikieditor-toolbar-help-content-ilink-result": "Saites teksts
      Lapas nosaukums", "wikieditor-toolbar-help-content-xlink-description": "Ä€rÄ“jÄ saite", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Saites teksts]
      [http://www.example.org]
      http://www.example.org", @@ -180,14 +180,14 @@ "wikieditor-toolbar-help-content-file-description": "Iekļauts fails", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Atsauce", - "wikieditor-toolbar-help-content-reference-syntax": "Lapas teksts.<ref name=\"test\">[http://www.example.org Saites teksts], papildus teksts.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Lapas teksts.<ref>[http://www.example.org Saites teksts], papildus teksts.</ref>", "wikieditor-toolbar-help-content-reference-result": "Lapas teksts.[1]", "wikieditor-toolbar-help-content-rereference-description": "AtkÄrtota jau esoÅ¡as atsauces izmantoÅ¡ana", - "wikieditor-toolbar-help-content-rereference-result": "Lapas teksts.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Lapas teksts.[2]", "wikieditor-toolbar-help-content-showreferences-description": "ParÄdÄ«t atsauces", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Saites teksts, papildus teksts.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Paraksts un parakstÄ«Å¡anÄs laiks", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "LietotÄja vÄrds (diskusija) 15:54, 10 jÅ«nijÄ, 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--LietotÄja vÄrds (diskusija) 15:54, 10 jÅ«nijÄ, 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Tikai paraksts", "wikieditor-toolbar-help-content-signature-result": "LietotÄja vÄrds (diskusija)", "wikieditor-toolbar-help-content-indent-description": "AtkÄpe", diff --git a/extensions/WikiEditor/i18n/min.json b/extensions/WikiEditor/i18n/min.json index d912f1a8..50d25b17 100644 --- a/extensions/WikiEditor/i18n/min.json +++ b/extensions/WikiEditor/i18n/min.json @@ -188,16 +188,16 @@ "wikieditor-toolbar-help-content-file-description": "Cantumkan berkas", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Rujuakan", - "wikieditor-toolbar-help-content-reference-syntax": "Teks laman.<ref name=\"test\">[http://www.contoh_sajo.org Teks pautan], teks tambahan.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Teks laman.<ref>[http://www.contoh_sajo.org Teks pautan], teks tambahan.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teks laman.[1]", "wikieditor-toolbar-help-content-rereference-description": "Rujuakan nan digunoan ulang", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"test\" />", - "wikieditor-toolbar-help-content-rereference-result": "Teks laman.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teks laman.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Tampilkan rujuakan", "wikieditor-toolbar-help-content-showreferences-syntax": "<references />", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Teks pautan, teks tambahan.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Tando tangan jo wakatu", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Namo pangguno (maota) 15:54, 10 Juni 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Namo pangguno (maota) 15:54, 10 Juni 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Tandotangan", "wikieditor-toolbar-help-content-signature-result": "Namo pangguno (maota)", "wikieditor-toolbar-help-content-indent-description": "Inden", diff --git a/extensions/WikiEditor/i18n/mk.json b/extensions/WikiEditor/i18n/mk.json index 87f6f14b..a724fb0f 100644 --- a/extensions/WikiEditor/i18n/mk.json +++ b/extensions/WikiEditor/i18n/mk.json @@ -121,7 +121,7 @@ "wikieditor-toolbar-tool-table-preview": "Преглед", "wikieditor-toolbar-tool-table-insert": "Вметни", "wikieditor-toolbar-tool-table-cancel": "Откажи", - "wikieditor-toolbar-tool-table-toomany": "Ðе можете да вметнувате табела Ñо повеќе од 1000 ќелии Ñо овој дијалог.", + "wikieditor-toolbar-tool-table-toomany": "Ðе можете да вметнувате табела Ñо повеќе од $1 {{PLURAL:$1|ќелии}} Ñо овој дијалог.", "wikieditor-toolbar-tool-table-invalidnumber": "Ðе внеÑовте важечки број на редови или колони.", "wikieditor-toolbar-tool-table-zero": "Ðе можете да вметнувате табела Ñо нула редови или колони.", "wikieditor-toolbar-tool-replace": "Ðајди и замени", @@ -139,28 +139,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Ðе внеÑовте зборови за пребарување.", "wikieditor-toolbar-tool-replace-invalidregex": "Регуларниот израз кој го внеÑовте е неважечки: $1", "wikieditor-toolbar-section-characters": "ПоÑебни знаци", - "wikieditor-toolbar-characters-page-latin": "Латиница", - "wikieditor-toolbar-characters-page-latinextended": "Латиница-проширено", - "wikieditor-toolbar-characters-page-ipa": "МФÐ", - "wikieditor-toolbar-characters-page-symbols": "Симболи", - "wikieditor-toolbar-characters-page-greek": "Грчки", - "wikieditor-toolbar-characters-page-cyrillic": "Кирилица", - "wikieditor-toolbar-characters-page-arabic": "ÐрапÑки", - "wikieditor-toolbar-characters-page-arabicextended": "ÐрапÑки-проширено", - "wikieditor-toolbar-characters-page-persian": "перÑиÑки", - "wikieditor-toolbar-characters-page-hebrew": "ХебрејÑки", - "wikieditor-toolbar-characters-page-bangla": "БенгалÑки", - "wikieditor-toolbar-characters-page-tamil": "тамилÑки", - "wikieditor-toolbar-characters-page-telugu": "Телугу", - "wikieditor-toolbar-characters-page-sinhala": "СинхалÑки", - "wikieditor-toolbar-characters-page-gujarati": "Гуџарати", - "wikieditor-toolbar-characters-page-devanagari": "деванагари", - "wikieditor-toolbar-characters-page-thai": "ТајландÑки", - "wikieditor-toolbar-characters-page-lao": "Лаошки", - "wikieditor-toolbar-characters-page-khmer": "КмерÑки", - "wikieditor-toolbar-characters-endash": "цртичка", - "wikieditor-toolbar-characters-emdash": "тире", - "wikieditor-toolbar-characters-minus": "минуÑ", "wikieditor-toolbar-section-help": "Помош", "wikieditor-toolbar-help-heading-description": "ОпиÑ", "wikieditor-toolbar-help-heading-syntax": "Што пишувате", @@ -182,8 +160,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Задебелен + закоÑен текÑÑ‚'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Задебелен и закоÑен текÑÑ‚", "wikieditor-toolbar-help-content-ilink-description": "Внатрешна врÑка", - "wikieditor-toolbar-help-content-ilink-syntax": "[[ÐаÑлов на Ñтраницата|ÐаÑлов на врÑката]]
      [[ÐаÑлов на Ñтраницата]]", - "wikieditor-toolbar-help-content-ilink-result": "ÐаÑлов на врÑката
      ÐаÑлов на Ñтраницата", + "wikieditor-toolbar-help-content-ilink-syntax": "[[ÐаÑлов на Ñтраницата]]
      [[ÐаÑлов на Ñтраницата|ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð½Ð° врÑката]]", + "wikieditor-toolbar-help-content-ilink-result": "ÐаÑлов на Ñтраницата
      ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð½Ð° врÑката", "wikieditor-toolbar-help-content-xlink-description": "Ðадворешна врÑка", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.пример.org ÐаÑлов на врÑката]
      [http://www.пример.org]
      http://www.пример.org", "wikieditor-toolbar-help-content-xlink-result": "ÐаÑлов на врÑката
      [1]
      http://www.пример.org", @@ -209,15 +187,18 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "ОпиÑен текÑÑ‚", "wikieditor-toolbar-help-content-reference-description": "Ðавод", - "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ во Ñтраницата.<ref name=\"test\">[http://www.пример.org ТекÑÑ‚ на врÑката], дополнителен текÑÑ‚.</ref>", - "wikieditor-toolbar-help-content-reference-result": "ТекÑÑ‚ во Ñтраницата.[1]", + "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ на Ñтраницата.<ref>[http://www.example.org ТекÑÑ‚ на врÑката], дополнителен текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-result": "ТекÑÑ‚ на Ñтраницата.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Именуван навод", + "wikieditor-toolbar-help-content-named-reference-syntax": "ТекÑÑ‚ на Ñтраницата.<ref name=\"test\">[http://www.example.org ТекÑÑ‚ на врÑката]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "ТекÑÑ‚ на Ñтраницата.[2]", "wikieditor-toolbar-help-content-rereference-description": "Понатамошна употреба на иÑтиот навод", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"проба\" />", - "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ во Ñтраницата.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ на Ñтраницата.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Прикажи наводи", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ на врÑката, дополнителен текÑÑ‚.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ на врÑката, дополнителен текÑÑ‚.
      2. ^ ТекÑÑ‚ на врÑката
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Вашиот Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ñо време", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "КориÑничко име (разговор) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--КориÑничко име (разговор) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПотпиÑ", "wikieditor-toolbar-help-content-signature-result": "КориÑничко име (разговор)", "wikieditor-toolbar-help-content-indent-description": "Вовлекување", diff --git a/extensions/WikiEditor/i18n/ml.json b/extensions/WikiEditor/i18n/ml.json index df5eff82..e119156b 100644 --- a/extensions/WikiEditor/i18n/ml.json +++ b/extensions/WikiEditor/i18n/ml.json @@ -188,14 +188,14 @@ "wikieditor-toolbar-help-content-file-description": "à´ªàµà´°à´®à´¾à´£à´‚ ചേർകàµà´•àµ½", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "അവലംബം", - "wikieditor-toolbar-help-content-reference-syntax": "താളിലെ à´Žà´´àµà´¤àµà´¤àµ.<ref name=\"test\">[http://www.example.org à´•à´£àµà´£à´¿à´¯à´¾à´¯àµà´³àµà´³ à´Žà´´àµà´¤àµà´¤àµ], കൂടàµà´¤àµ½ à´Žà´´àµà´¤àµà´¤àµ.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "താളിലെ à´Žà´´àµà´¤àµà´¤àµ.<ref>[http://www.example.org à´•à´£àµà´£à´¿à´¯à´¾à´¯àµà´³àµà´³ à´Žà´´àµà´¤àµà´¤àµ], കൂടàµà´¤àµ½ à´Žà´´àµà´¤àµà´¤àµ.</ref>", "wikieditor-toolbar-help-content-reference-result": "താളിലെ à´Žà´´àµà´¤àµà´¤àµ.[1]", "wikieditor-toolbar-help-content-rereference-description": "അതേ അവലംബതàµà´¤à´¿à´¨àµà´±àµ† കൂടàµà´¤àµ½ ഉപയോഗം", - "wikieditor-toolbar-help-content-rereference-result": "താളിലെ à´Žà´´àµà´¤àµà´¤àµ.[1]", + "wikieditor-toolbar-help-content-rereference-result": "താളിലെ à´Žà´´àµà´¤àµà´¤àµ.[2]", "wikieditor-toolbar-help-content-showreferences-description": "അവലംബങàµà´™àµ¾ à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ à´•à´£àµà´£à´¿à´¯à´¾à´¯àµà´³àµà´³ à´Žà´´àµà´¤àµà´¤àµ, കൂടàµà´¤àµ½ à´Žà´´àµà´¤àµà´¤àµ.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "സമയമàµà´¦àµà´°à´¯àµ‹à´Ÿàµà´•àµ‚à´Ÿà´¿à´¯ à´’à´ªàµà´ªàµ", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ (സംവാദം) 15:54, 10 ജൂൺ 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ (സംവാദം) 15:54, 10 ജൂൺ 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "à´’à´ªàµà´ªàµ", "wikieditor-toolbar-help-content-signature-result": "ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ (സംവാദം)", "wikieditor-toolbar-help-content-indent-description": "നീകàµà´•à´¿à´¯àµ†à´´àµà´¤àµà´•", diff --git a/extensions/WikiEditor/i18n/mr.json b/extensions/WikiEditor/i18n/mr.json index 65b9e720..3448fca9 100644 --- a/extensions/WikiEditor/i18n/mr.json +++ b/extensions/WikiEditor/i18n/mr.json @@ -193,14 +193,14 @@ "wikieditor-toolbar-help-content-file-description": "संलगà¥à¤¨ संचिका", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "संदरà¥à¤­", - "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref name=\"test\">[http://www.example.org Link text], additional text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref>[http://www.example.org Link text], additional text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Page text.[1]", "wikieditor-toolbar-help-content-rereference-description": "याच संदरà¥à¤­à¤¾à¤šà¤¾ अतिरिकà¥à¤¤ वापर", - "wikieditor-toolbar-help-content-rereference-result": "पान मजकूर.[1]", + "wikieditor-toolbar-help-content-rereference-result": "पान मजकूर.[2]", "wikieditor-toolbar-help-content-showreferences-description": "संदरà¥à¤­ दरà¥à¤¶à¤µà¤¾", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Link text, additional text.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "सही आणि वेळठसा", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "सदसà¥à¤¯à¤¨à¤¾à¤µ (चरà¥à¤šà¤¾) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--सदसà¥à¤¯à¤¨à¤¾à¤µ (चरà¥à¤šà¤¾) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "सही", "wikieditor-toolbar-help-content-signature-result": "सदसà¥à¤¯à¤¨à¤¾à¤µ (चरà¥à¤šà¤¾)", "wikieditor-toolbar-help-content-indent-description": "समासांतर", diff --git a/extensions/WikiEditor/i18n/ms.json b/extensions/WikiEditor/i18n/ms.json index b89b5f66..8018e838 100644 --- a/extensions/WikiEditor/i18n/ms.json +++ b/extensions/WikiEditor/i18n/ms.json @@ -193,14 +193,14 @@ "wikieditor-toolbar-help-content-file-description": "Fail terbenam", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Rujukan", - "wikieditor-toolbar-help-content-reference-syntax": "Teks laman.<ref nama=\"cubaan\">[http://www.contoh.org Teks pautan], teks tambahan.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Teks laman.<ref>[http://www.contoh.org Teks pautan], teks tambahan.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teks laman.[1]", "wikieditor-toolbar-help-content-rereference-description": "Penggunaan rujukan sama", - "wikieditor-toolbar-help-content-rereference-result": "Teks laman.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teks laman.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Paparkan senarai rujukan", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Teks pautan, teks tambahan.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Tandatangan dengan waktu", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nama pengguna (bincang) 15:54, 10 Jun 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nama pengguna (bincang) 15:54, 10 Jun 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Tandatangan", "wikieditor-toolbar-help-content-signature-result": "Nama pengguna (bincang)", "wikieditor-toolbar-help-content-indent-description": "Inden", diff --git a/extensions/WikiEditor/i18n/mt.json b/extensions/WikiEditor/i18n/mt.json index 1319952c..98542863 100644 --- a/extensions/WikiEditor/i18n/mt.json +++ b/extensions/WikiEditor/i18n/mt.json @@ -185,14 +185,14 @@ "wikieditor-toolbar-help-content-file-description": "Fajl inkorporat", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eżempju.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referenza", - "wikieditor-toolbar-help-content-reference-syntax": "Test tal-paġna.<ref name=\"test\">[http://www.example.org Test tal-ħolqa], test addizzjonali.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Test tal-paġna.<ref>[http://www.example.org Test tal-ħolqa], test addizzjonali.</ref>", "wikieditor-toolbar-help-content-reference-result": "Test tal-paġna.[1]", "wikieditor-toolbar-help-content-rereference-description": "Użu addizzjonali tal-istess referenza", - "wikieditor-toolbar-help-content-rereference-result": "Test tal-paġna.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Test tal-paġna.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Viżwal tar-referenzi", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Test tal-ħolqa, test addizzjonali.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Firma bid-data u l-ħin", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Isem tal-utent (diskussjoni) 15:54, 10 Ä unju 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Isem tal-utent (diskussjoni) 15:54, 10 Ä unju 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firma", "wikieditor-toolbar-help-content-signature-result": "Isem tal-utent (diskussjoni)", "wikieditor-toolbar-help-content-indent-description": "Indentazzjoni", diff --git a/extensions/WikiEditor/i18n/nah.json b/extensions/WikiEditor/i18n/nah.json index 5674bcf5..5c2bca68 100644 --- a/extensions/WikiEditor/i18n/nah.json +++ b/extensions/WikiEditor/i18n/nah.json @@ -126,14 +126,14 @@ "wikieditor-toolbar-help-content-xlink-description": "CalÄn tzonhuiliztli", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ejemplo.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Tlànalòyàntli", - "wikieditor-toolbar-help-content-reference-syntax": "Tlaìxtlapallâkuilòlmantli.<ref name=\"test\">[http://www.example.org Tzòwistlâkuilòlmantli], tlâxitìllâkuilòlmantli.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tlaìxtlapallâkuilòlmantli.<ref>[http://www.example.org Tzòwistlâkuilòlmantli], tlâxitìllâkuilòlmantli.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tlaìxtlapallâkuilòlmantli.[1]", "wikieditor-toolbar-help-content-rereference-description": "ÃŒtlâtlatekitìltilis in yi yë tlànalòyàntli", - "wikieditor-toolbar-help-content-rereference-result": "Tlaìxtlapallâkuilòlmantli.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tlaìxtlapallâkuilòlmantli.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Monèxtis tlànalòyàntli", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Tzòwistlâkuilòlmantli, tlâxitìllâkuilòlmantli.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Netèìxmachìtìlmachiòtl wàn tlapảnolpòwálli", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Tekitkàtòkâtli (nenônòtzalistli) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Tekitkàtòkâtli (nenônòtzalistli) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Netèìxmachìtìlmachiòtl", "wikieditor-toolbar-help-content-signature-result": "Tekitkàtòkâtli (nenônòtzalistli)", "wikieditor-toolbar-help-content-indent-description": "Tlâtlapouhki", diff --git a/extensions/WikiEditor/i18n/nap.json b/extensions/WikiEditor/i18n/nap.json new file mode 100644 index 00000000..a75b581b --- /dev/null +++ b/extensions/WikiEditor/i18n/nap.json @@ -0,0 +1,206 @@ +{ + "@metadata": { + "authors": [ + "Candalua", + "C.R.", + "Chelin" + ] + }, + "wikieditor": "Nterfaccia avanzata 'e cagnamiento d' 'o wikitesto", + "wikieditor-desc": "Ve mettesse nu wikitesto ca se putesse spannere cagnanno interfaccia e tante module ca dipenneno 'e na funzionalità", + "wikieditor-wikitext-tab": "Wikitesto", + "wikieditor-loading": "Carecamiento 'n curso…", + "wikieditor-preview-preference": "Premmettesse l'anteprimma affiancata a lato a lato", + "wikieditor-preview-tab": "Anteprimma", + "wikieditor-preview-changes-tab": "Cagnamiente", + "wikieditor-preview-loading": "Carecamiento 'n curso…", + "wikieditor-publish-preference": "Premmettesse 'a pubbrecazione affiancata a lato a lato...", + "wikieditor-publish-button-publish": "Pubbreca", + "wikieditor-publish-button-cancel": "Canciella", + "wikieditor-publish-dialog-title": "Pubbreca su {{SITENAME}}", + "wikieditor-publish-dialog-summary": "Riepilego 'e cagnamiente (veloce veloce descrivesse 'e cagnamiente c'avite fatto vuje):", + "wikieditor-publish-dialog-minor": "Cagnamiento piccerillo", + "wikieditor-publish-dialog-watch": "Tiene d'uocchio chesta paggena", + "wikieditor-publish-dialog-publish": "Pubbreca", + "wikieditor-publish-dialog-goback": "Torna arreto", + "wikieditor-toolbar": "Barra 'e cagnamiente", + "wikieditor-toolbar-desc": "Cagna 'a paggena d' 'a barra 'e strumiente cun l'usabbilità avanzata", + "wikieditor-toolbar-preference": "Abbìa 'a barra strumiente 'e cagnamiento migliurata", + "wikieditor-toolbar-dialogs-preference": "Premmettesse 'e guide d'azzeccà cullegamente, tabbelle e pure 'e trova-sostituisce", + "wikieditor-toolbar-loading": "Carecamiento 'n curso…", + "wikieditor-toolbar-tool-bold": "Grassetto", + "wikieditor-toolbar-tool-bold-example": "Testo 'n grassetto", + "wikieditor-toolbar-tool-italic": "Corsivo", + "wikieditor-toolbar-tool-italic-example": "Testo 'n corsivo", + "wikieditor-toolbar-tool-ilink": "Cullegamiente nterne", + "wikieditor-toolbar-tool-ilink-example": "Titulo d' 'o cullegamento", + "wikieditor-toolbar-tool-xlink": "Link esterno (arricuordate 'o prefisso http:// )", + "wikieditor-toolbar-tool-xlink-example": "http://www.example.com titulo d' 'o cullegamento", + "wikieditor-toolbar-tool-link": "Cullegamente", + "wikieditor-toolbar-tool-link-title": "Nzèrta nu cullegamento", + "wikieditor-toolbar-tool-link-int": "Int'a na paggena wiki", + "wikieditor-toolbar-tool-link-int-target": "Paggena 'e destinazione o URL:", + "wikieditor-toolbar-tool-link-int-target-tooltip": "Paggena 'e titolo o URL", + "wikieditor-toolbar-tool-link-int-text": "Testo a mmustà:", + "wikieditor-toolbar-tool-link-int-text-tooltip": "Testo a mmustà", + "wikieditor-toolbar-tool-link-ext": "Dint'a na paggena web 'e ffore", + "wikieditor-toolbar-tool-link-ext-target": "URL d\"o link:", + "wikieditor-toolbar-tool-link-ext-text": "Testo d\"o link:", + "wikieditor-toolbar-tool-link-insert": "Nzèrta nu cullegamento", + "wikieditor-toolbar-tool-link-cancel": "Canciella", + "wikieditor-toolbar-tool-link-int-target-status-exists": "'A paggena esiste già", + "wikieditor-toolbar-tool-link-int-target-status-notexists": "'A paggena nun esiste", + "wikieditor-toolbar-tool-link-int-target-status-invalid": "Titolo invalido", + "wikieditor-toolbar-tool-link-int-target-status-external": "Cullegamiente esterne", + "wikieditor-toolbar-tool-link-int-target-status-loading": "Cuntrullanno l'esistenza d' 'a paggena...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "Paggene 'e disambiguaziona", + "wikieditor-toolbar-tool-link-int-invalid": "'O titolo c'avite miso nun è bbuono.", + "wikieditor-toolbar-tool-link-lookslikeinternal": "L'URL c'avite specificato pare ca fuje fatta pe' ne fà nu link a n'ata paggena wiki.\nVulite fà nu link interno?", + "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Cullegamiente nterne", + "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Cullegamiente esterne", + "wikieditor-toolbar-tool-link-empty": "Vuje nun avite miso niente p' 'o cullegà.", + "wikieditor-toolbar-tool-file": "Fiùra ncuorporata", + "wikieditor-toolbar-tool-file-example": "Essempio.jpg", + "wikieditor-toolbar-tool-file-title": "Nzerta file", + "wikieditor-toolbar-file-target": "Nomme d' 'o file:", + "wikieditor-toolbar-file-caption": "Didascalia:", + "wikieditor-toolbar-file-size": "Dimenzione:", + "wikieditor-toolbar-file-float": "Allineamento:", + "wikieditor-toolbar-file-default": "(predefinito)", + "wikieditor-toolbar-file-format": "Furmato:", + "wikieditor-toolbar-file-format-none": "nisciuno", + "wikieditor-toolbar-tool-file-insert": "Nzèrta", + "wikieditor-toolbar-tool-file-cancel": "Canciella", + "wikieditor-toolbar-tool-reference": "Riferimiento", + "wikieditor-toolbar-tool-reference-example": "Nzèrta testo 'e nota ccà", + "wikieditor-toolbar-tool-reference-cancel": "Canciella", + "wikieditor-toolbar-tool-reference-title": "Azzecca riferimento", + "wikieditor-toolbar-tool-reference-insert": "Nzèrta", + "wikieditor-toolbar-tool-reference-text": "Testo 'e riferimento", + "wikieditor-toolbar-tool-signature": "Firma cu data e ora", + "wikieditor-toolbar-section-advanced": "Avanzate", + "wikieditor-toolbar-tool-heading": "'Ntestazzione", + "wikieditor-toolbar-tool-heading-1": "Liviello 1", + "wikieditor-toolbar-tool-heading-2": "Liviello 2", + "wikieditor-toolbar-tool-heading-3": "Liviello 3", + "wikieditor-toolbar-tool-heading-4": "Liviello 4", + "wikieditor-toolbar-tool-heading-5": "Liviello 5", + "wikieditor-toolbar-tool-heading-example": "Testo 'e cap' 'e paggena (testata)", + "wikieditor-toolbar-group-format": "Furmato", + "wikieditor-toolbar-tool-ulist": "Elenco 'e palline", + "wikieditor-toolbar-tool-ulist-example": "Elemento 'e palline elencate", + "wikieditor-toolbar-tool-olist": "Lista nummerata", + "wikieditor-toolbar-tool-olist-example": "Elemento 'elenco nummerato", + "wikieditor-toolbar-tool-nowiki": "Nun fà furmattaziona wiki", + "wikieditor-toolbar-tool-nowiki-example": "Azzeccà 'o testo nun-furmattato ccà", + "wikieditor-toolbar-tool-redirect": "Redirezione", + "wikieditor-toolbar-tool-redirect-example": "Nomme d' 'a paggena 'e destinazione", + "wikieditor-toolbar-tool-big": "Grande", + "wikieditor-toolbar-tool-big-example": "Testo gruosso", + "wikieditor-toolbar-tool-small": "Piccerillo", + "wikieditor-toolbar-tool-small-example": "Testo piccerillo", + "wikieditor-toolbar-tool-superscript": "Sovrascritto", + "wikieditor-toolbar-tool-superscript-example": "Testo 'n sovrascritto", + "wikieditor-toolbar-tool-subscript": "Piere", + "wikieditor-toolbar-tool-subscript-example": "Testo 'e piere", + "wikieditor-toolbar-group-insert": "Nzèrta", + "wikieditor-toolbar-tool-gallery": "Gallaria 'e foto", + "wikieditor-toolbar-tool-gallery-example": "Esempio.jpg|Didascalia1\nEsempio.jpg|Didascalia2", + "wikieditor-toolbar-tool-newline": "Linea nova", + "wikieditor-toolbar-tool-table": "Tabbella", + "wikieditor-toolbar-tool-table-example-old": "-\n! testata 1\n! testata 2\n! testata 3\n|-\n| riga 1, cella 1\n| riga 1, cella 2\n| riga 1, cella 3\n|-\n| riga 2, cella 1\n| riga 2, cella 2\n| riga 2, cella 3", + "wikieditor-toolbar-tool-table-example-cell-text": "Testo d' 'a cella", + "wikieditor-toolbar-tool-table-example-header": "Testo d' 'a cap' 'e paggena (testata)", + "wikieditor-toolbar-tool-table-title": "Nzerta tabbella", + "wikieditor-toolbar-tool-table-dimensions-rows": "Righe", + "wikieditor-toolbar-tool-table-dimensions-columns": "Culonne", + "wikieditor-toolbar-tool-table-dimensions-header": "Azzecca na riga 'e testata", + "wikieditor-toolbar-tool-table-wikitable": "Stile ch' 'e borde", + "wikieditor-toolbar-tool-table-sortable": "Fà 'a tabbella ordenabbele", + "wikieditor-toolbar-tool-table-example": "Esempio", + "wikieditor-toolbar-tool-table-preview": "Anteprimma", + "wikieditor-toolbar-tool-table-insert": "Nzèrta", + "wikieditor-toolbar-tool-table-cancel": "Canciella", + "wikieditor-toolbar-tool-table-toomany": "'E nzertà na tabbella cu cchiù 'e $1 {{PLURAL:$1|celle}} nun è possibbele cu stu dialogo.", + "wikieditor-toolbar-tool-table-invalidnumber": "Nun avite miso nu nummero valido 'e righe o culonne.", + "wikieditor-toolbar-tool-table-zero": "Nun putite nzertà na tabbella cu zero righe o culonne.", + "wikieditor-toolbar-tool-replace": "Trova e sostituisce", + "wikieditor-toolbar-tool-replace-title": "Trova e sostituisce", + "wikieditor-toolbar-tool-replace-search": "Circa:", + "wikieditor-toolbar-tool-replace-replace": "Sostituisce cu:", + "wikieditor-toolbar-tool-replace-case": "Maiuscole/minuscole", + "wikieditor-toolbar-tool-replace-regex": "Tratta 'a stringa 'e ricerca comm'a n'espressione revolare", + "wikieditor-toolbar-tool-replace-button-findnext": "Cirche 'o prossemo", + "wikieditor-toolbar-tool-replace-button-replace": "Sostituisce", + "wikieditor-toolbar-tool-replace-button-replaceall": "Sostituisce tutte", + "wikieditor-toolbar-tool-replace-close": "Chiure", + "wikieditor-toolbar-tool-replace-nomatch": "'A ricerca vosta nun s'accucchiàje nisciuno risultato azzeccato.", + "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|sostituzione fatta|sostituziune fatte}}.", + "wikieditor-toolbar-tool-replace-emptysearch": "Nun avite miso niente pe' ffà ricerche.", + "wikieditor-toolbar-tool-replace-invalidregex": "L'espressione regolare c'avite miso nun è valida: $1", + "wikieditor-toolbar-section-characters": "Carattere speciale", + "wikieditor-toolbar-section-help": "Ajùto", + "wikieditor-toolbar-help-heading-description": "Descrizzione", + "wikieditor-toolbar-help-heading-syntax": "Chello ca se scrive", + "wikieditor-toolbar-help-heading-result": "Chello ca se piglia", + "wikieditor-toolbar-help-page-format": "Furmattazzione", + "wikieditor-toolbar-help-page-link": "Cullegamente", + "wikieditor-toolbar-help-page-heading": "'Ntestazzione", + "wikieditor-toolbar-help-page-list": "Elenchi", + "wikieditor-toolbar-help-page-file": "File", + "wikieditor-toolbar-help-page-reference": "Riferimienti", + "wikieditor-toolbar-help-page-discussion": "Chiàcchiera", + "wikieditor-toolbar-help-content-italic-description": "Corsivo", + "wikieditor-toolbar-help-content-italic-syntax": "''Testo in corsivo''", + "wikieditor-toolbar-help-content-italic-result": "Testo in corsivo", + "wikieditor-toolbar-help-content-bold-description": "Grassetto", + "wikieditor-toolbar-help-content-bold-syntax": "'''Testo in grassetto'''", + "wikieditor-toolbar-help-content-bold-result": "Testo in grassetto", + "wikieditor-toolbar-help-content-bolditalic-description": "Grassetto e corsivo", + "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Testo in grassetto e corsivo'''''", + "wikieditor-toolbar-help-content-bolditalic-result": "Testo in grassetto e corsivo", + "wikieditor-toolbar-help-content-ilink-description": "Cullegamiente nterne", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Titolo d' 'a paggena]]
      [[Titole d' 'e paggene|etichette 'e cullegamento]]", + "wikieditor-toolbar-help-content-ilink-result": "Titole d' 'a pàggena
      Etichetta 'e collegamento", + "wikieditor-toolbar-help-content-xlink-description": "Cullegamiente esterne", + "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Etichetta cullegamiento]
      [http://www.example.org]
      http://www.example.org", + "wikieditor-toolbar-help-content-xlink-result": "Etichette 'e collegamento
      [1]
      http://www.esembie.org", + "wikieditor-toolbar-help-content-heading2-description": "2º livello 'e testata", + "wikieditor-toolbar-help-content-heading2-syntax": "== Testo 'e sezione ==", + "wikieditor-toolbar-help-content-heading2-result": "

      Titolo sezione

      ", + "wikieditor-toolbar-help-content-heading3-description": "3º livello 'e testata", + "wikieditor-toolbar-help-content-heading3-syntax": "=== Titolo sezione ===", + "wikieditor-toolbar-help-content-heading3-result": "

      Titolo sezione

      ", + "wikieditor-toolbar-help-content-heading4-description": "4° livello 'e testata", + "wikieditor-toolbar-help-content-heading4-syntax": "==== Titolo sezione ====", + "wikieditor-toolbar-help-content-heading4-result": "

      Titolo sezione

      ", + "wikieditor-toolbar-help-content-heading5-description": "5º livello 'e testata", + "wikieditor-toolbar-help-content-heading5-syntax": "===== Titolo sezione =====", + "wikieditor-toolbar-help-content-heading5-result": "
      Titolo sezione
      ", + "wikieditor-toolbar-help-content-ulist-description": "Elenco 'e palline", + "wikieditor-toolbar-help-content-ulist-syntax": "* Elemento 'e lista
      *Elemente 'e lista", + "wikieditor-toolbar-help-content-ulist-result": "
      • Elemente 'e l'elenco
      • Elemente 'e l'elenco
      ", + "wikieditor-toolbar-help-content-olist-description": "Lista nummerata", + "wikieditor-toolbar-help-content-olist-syntax": "# Elemento 'e lista
      #Elemente 'e lista", + "wikieditor-toolbar-help-content-olist-result": "
      1. Elemente 'e l'elenco
      2. Elemente 'e l'elenco
      ", + "wikieditor-toolbar-help-content-file-description": "Fiùra ncuorporata", + "wikieditor-toolbar-help-content-file-syntax": "[[$1:Esempio.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Testo d' 'o titolo", + "wikieditor-toolbar-help-content-reference-description": "Riferimiento", + "wikieditor-toolbar-help-content-reference-syntax": "Teste d' 'a pàggena.<ref>[http://www.example.org Testo d' 'o collegamento], testo addizionale.</ref>", + "wikieditor-toolbar-help-content-reference-result": "Teste d' 'a pàggena.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Referimento nnommenate", + "wikieditor-toolbar-help-content-named-reference-syntax": "Teste d' 'a pàggena.<ref name=\"test\">[http://www.example.org Teste 'e cullegamento]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Teste d' 'a pàggena.[2]", + "wikieditor-toolbar-help-content-rereference-description": "Ause addizionale d' 'u stesso riferimento", + "wikieditor-toolbar-help-content-rereference-result": "Testo d' 'a pàggena.[2]", + "wikieditor-toolbar-help-content-showreferences-description": "Fà vedè 'e riferemente", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Testo d' 'o collegamento, teste aggiuntive.
      2. ^ Testo d' 'o collegamento
      ", + "wikieditor-toolbar-help-content-signaturetimestamp-description": "Firma cu data e ora", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nomme utente (chiacchiera) 15:54, 10 Giugne 2009 (UTC)", + "wikieditor-toolbar-help-content-signature-description": "Firma", + "wikieditor-toolbar-help-content-signature-result": "Nomme utente (chiacchiera)", + "wikieditor-toolbar-help-content-indent-description": "Indentaziona", + "wikieditor-toolbar-help-content-indent-syntax": "Testo normale
      :Teste indendate
      ::Teste indendate", + "wikieditor-toolbar-help-content-indent-result": "Testo normale
      Teste indendate
      Teste indendate
      " +} diff --git a/extensions/WikiEditor/i18n/nb.json b/extensions/WikiEditor/i18n/nb.json index 364e28b8..58c5f306 100644 --- a/extensions/WikiEditor/i18n/nb.json +++ b/extensions/WikiEditor/i18n/nb.json @@ -192,14 +192,14 @@ "wikieditor-toolbar-help-content-file-description": "Fil", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referanse", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst.<ref name=\"test\">[http://www.example.org Lenketekst], ytterligere tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst.<ref>[http://www.example.org Lenketekst], ytterligere tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tekst.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ytterligere bruk av samme referanse", - "wikieditor-toolbar-help-content-rereference-result": "Tekst.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Tekst.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Vis referanser", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Lenketekst, ytterligere tekst.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatur med tidsangivelse", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Brukernavn (diskusjon) 10. juni 2009, 15:54 (CEST)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Brukernavn (diskusjon) 10. juni 2009, 15:54 (CEST)", "wikieditor-toolbar-help-content-signature-description": "Signatur", "wikieditor-toolbar-help-content-signature-result": "Brukernavn (diskusjon)", "wikieditor-toolbar-help-content-indent-description": "Innrykk", diff --git a/extensions/WikiEditor/i18n/nds-nl.json b/extensions/WikiEditor/i18n/nds-nl.json index 825dd7d0..24d3365d 100644 --- a/extensions/WikiEditor/i18n/nds-nl.json +++ b/extensions/WikiEditor/i18n/nds-nl.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Bestaand derbie doon", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Veurbeeld.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referensie", - "wikieditor-toolbar-help-content-reference-syntax": "Ziedtekste.<ref name=\"test\">[http://www.example.org Beschrieving], eventuele tekste.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Ziedtekste.<ref>[http://www.example.org Beschrieving], eventuele tekste.</ref>", "wikieditor-toolbar-help-content-reference-result": "Ziedtekste [1]", "wikieditor-toolbar-help-content-rereference-description": "Hergebruuk van de zelfde referensie", - "wikieditor-toolbar-help-content-rereference-result": "Ziedtekste [1]", + "wikieditor-toolbar-help-content-rereference-result": "Ziedtekste [2]", "wikieditor-toolbar-help-content-showreferences-description": "Referensies weergeven", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Beschrieving, eventuele tekste.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Ondertekening mit tiedstempel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Gebrukersnaam (overleg) 15:54, 10 juni 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Gebrukersnaam (overleg) 15:54, 10 juni 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Ondertekening", "wikieditor-toolbar-help-content-signature-result": "Gebrukersnaam (overleg)", "wikieditor-toolbar-help-content-indent-description": "Inspringen", diff --git a/extensions/WikiEditor/i18n/ne.json b/extensions/WikiEditor/i18n/ne.json index 43ea7765..c99d492e 100644 --- a/extensions/WikiEditor/i18n/ne.json +++ b/extensions/WikiEditor/i18n/ne.json @@ -1,14 +1,133 @@ { "@metadata": { "authors": [ - "Bhawani Gautam" + "Bhawani Gautam", + "NehalDaveND", + "राम पà¥à¤°à¤¸à¤¾à¤¦ जोशी" ] }, + "wikieditor-loading": "लोड हà¥à¤¦à¥ˆà¤›...", + "wikieditor-preview-tab": "पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•à¤¨", + "wikieditor-preview-changes-tab": "परिवरà¥à¤¤à¤¨à¤¹à¤°à¥‚", + "wikieditor-preview-loading": "लोड हà¥à¤¦à¥ˆà¤›...", + "wikieditor-publish-button-publish": "पà¥à¤°à¤•à¤¾à¤¶à¤¿à¤¤ गरà¥à¤¨à¥à¤¹à¥‹à¤¸", + "wikieditor-publish-button-cancel": "रदà¥à¤¦ गरà¥à¤¨à¥‡", + "wikieditor-publish-dialog-publish": "पà¥à¤°à¤•à¤¾à¤¶à¤¿à¤¤ गरà¥à¤¨à¥à¤¹à¥‹à¤¸", + "wikieditor-publish-dialog-goback": "पछाडि परà¥à¤•à¤¨à¥‡", + "wikieditor-toolbar": "समà¥à¤ªà¤¾à¤¦à¤¨ उपकरणपटà¥à¤Ÿà¥€", + "wikieditor-toolbar-loading": "लोड हà¥à¤¦à¥ˆà¤›...", + "wikieditor-toolbar-tool-bold": "गाढा", + "wikieditor-toolbar-tool-bold-example": "गाढा अकà¥à¤·à¤°", + "wikieditor-toolbar-tool-italic": "छडà¥à¤•à¥‡", + "wikieditor-toolbar-tool-italic-example": "छडà¥à¤•à¥‡ अकà¥à¤·à¤°", + "wikieditor-toolbar-tool-ilink": "आनà¥à¤¤à¤°à¤¿à¤• लिङà¥à¤•", + "wikieditor-toolbar-tool-ilink-example": "शीरà¥à¤·à¤• लिंङà¥à¤•", + "wikieditor-toolbar-tool-xlink": "बाहà¥à¤¯ लिङà¥à¤• (समà¥à¤à¤¨à¥à¤¹à¥‹à¤¸à¥ http:// prefix)", + "wikieditor-toolbar-tool-xlink-example": "http://www.example.com शीरà¥à¤·à¤• लिंक", + "wikieditor-toolbar-tool-link": "लिङà¥à¤•à¤¹à¤°à¥‚", + "wikieditor-toolbar-tool-link-title": "आनà¥à¤¤à¤°à¤¿à¤• लिङà¥à¤•", + "wikieditor-toolbar-file-caption": "कà¥à¤¯à¤¾à¤ªà¥à¤¸à¤¨ :", + "wikieditor-toolbar-file-size": "आकार:", + "wikieditor-toolbar-file-float": "पंकà¥à¤¤à¤¿à¤µà¤¦à¥à¤˜ गरà¥à¤¨à¥ :", + "wikieditor-toolbar-file-default": "(पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤)", + "wikieditor-toolbar-file-format": "सà¥à¤µà¤°à¥‚प:", + "wikieditor-toolbar-file-format-none": "कà¥à¤¨à¥ˆ पनि होइन", + "wikieditor-toolbar-tool-file-insert": "थपà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-file-cancel": "रदà¥à¤¦ गरà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-reference": "सनà¥à¤¦à¤°à¥à¤­", + "wikieditor-toolbar-tool-reference-cancel": "रदà¥à¤¦ गरà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-reference-title": "सनà¥à¤¦à¤°à¥à¤­ थपà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-reference-insert": "थपà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-reference-text": "सनà¥à¤¦à¤°à¥à¤­ पाठ", "wikieditor-toolbar-section-advanced": "उनà¥à¤¨à¤¤", "wikieditor-toolbar-tool-heading": "शीरà¥à¤·à¤•", + "wikieditor-toolbar-tool-heading-1": "सà¥à¤¤à¤° १", "wikieditor-toolbar-tool-heading-2": "शीरà¥à¤·à¤• 2", "wikieditor-toolbar-tool-heading-3": "शीरà¥à¤·à¤• 3", "wikieditor-toolbar-tool-heading-4": "शीरà¥à¤·à¤• 4", "wikieditor-toolbar-tool-heading-5": "शीरà¥à¤·à¤• 5", - "wikieditor-toolbar-section-characters": "विशेष वरà¥à¤£à¤¹à¤°à¥" + "wikieditor-toolbar-tool-heading-example": "शीरà¥à¤·à¤• अकà¥à¤·à¤°", + "wikieditor-toolbar-group-format": "सà¥à¤µà¤°à¥‚प", + "wikieditor-toolbar-tool-ulist": "थोपà¥à¤²à¤¾ सà¥à¤šà¥€", + "wikieditor-toolbar-tool-olist": "संखà¥à¤¯à¤¾ सà¥à¤šà¥€", + "wikieditor-toolbar-tool-nowiki": "विकि फरमà¥à¤¯à¤¾à¤Ÿà¤¿à¤™à¥à¤²à¤¾à¤ˆ वासà¥à¤¤à¤¾ नगरà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-redirect": "अनà¥à¤ªà¥à¤°à¥‡à¤·à¤£", + "wikieditor-toolbar-tool-redirect-example": "Target page name", + "wikieditor-toolbar-tool-big": "ठूलो", + "wikieditor-toolbar-tool-big-example": "ठूलो अकà¥à¤·à¤°", + "wikieditor-toolbar-tool-small": "सानो", + "wikieditor-toolbar-tool-small-example": "सानो पाठ", + "wikieditor-toolbar-tool-superscript": "सà¥à¤ªà¤°à¤¸à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ", + "wikieditor-toolbar-tool-superscript-example": "सà¥à¤ªà¤°à¤¸à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ पाठ", + "wikieditor-toolbar-tool-subscript": "निमà¥à¤¨à¤¾à¤™à¥à¤•à¤¿à¤¤ गरà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-subscript-example": "निमà¥à¤¨à¤¾à¤™à¥à¤•à¤¿à¤¤ पाठ", + "wikieditor-toolbar-group-insert": "थपà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-gallery": "चितà¥à¤° गà¥à¤¯à¤¾à¤²à¤°à¥€", + "wikieditor-toolbar-tool-gallery-example": "उदाहरण.jpg|चितà¥à¤°à¤¶à¥€à¤°à¥à¤·à¤•à¥§\nउदाहरण.jpg|चितà¥à¤°à¤¶à¥€à¤°à¥à¤·à¤•à¥¨", + "wikieditor-toolbar-tool-newline": "नयाठपङà¥à¤•à¤¿à¤¤", + "wikieditor-toolbar-tool-table": "सूची", + "wikieditor-toolbar-tool-table-example-old": "-\n! शीरà¥à¤·à¤• १\n! शीरà¥à¤·à¤• २\n! शीरà¥à¤·à¤• ३\n|-\n| पंकà¥à¤¤à¤¿ १, पà¥à¤°à¤•à¥‹à¤·à¥à¤  १\n| पंकà¥à¤¤à¤¿ १, पà¥à¤°à¤•à¥‹à¤·à¥à¤  २\n| पंकà¥à¤¤à¤¿ १, पà¥à¤°à¤•à¥‹à¤·à¥à¤  ३\n|-\n| पंकà¥à¤¤à¤¿ २, पà¥à¤°à¤•à¥‹à¤·à¥à¤  १\n| पंकà¥à¤¤à¤¿ २, पà¥à¤°à¤•à¥‹à¤·à¥à¤  २\n| पंकà¥à¤¤à¤¿ २, पà¥à¤°à¤•à¥‹à¤·à¥à¤  ३", + "wikieditor-toolbar-tool-table-example-cell-text": "सेल पाठ", + "wikieditor-toolbar-tool-table-example-header": "शिरà¥à¤· पाठ", + "wikieditor-toolbar-tool-table-title": "सूची थपà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-table-dimensions-rows": "पङà¥à¤•à¥à¤¤à¤¿", + "wikieditor-toolbar-tool-table-dimensions-columns": "सà¥à¤¤à¤®à¥à¤­à¤¹à¤°à¥", + "wikieditor-toolbar-tool-table-dimensions-header": "शीरà¥à¤· पंकà¥à¤¤à¤¿ थपà¥à¤¨", + "wikieditor-toolbar-tool-table-wikitable": "सीमानाहरू संग शैली", + "wikieditor-toolbar-tool-table-example": "उदाहरण", + "wikieditor-toolbar-tool-table-preview": "पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•à¤¨", + "wikieditor-toolbar-tool-table-insert": "थपà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-table-cancel": "रदà¥à¤¦ गरà¥à¤¨à¥‡", + "wikieditor-toolbar-tool-replace-search": "यसलाइ खोजà¥à¤¨à¥‡:", + "wikieditor-toolbar-tool-replace-button-replace": "बदलà¥à¤¨à¥à¤¹à¥‹à¤¸à¥", + "wikieditor-toolbar-tool-replace-button-replaceall": "सबै बदलà¥à¤¨à¥à¤¹à¥‹à¤¸à¥", + "wikieditor-toolbar-tool-replace-close": "बनà¥à¤¦ गरà¥à¤¨à¥‡", + "wikieditor-toolbar-section-characters": "विशेष वरà¥à¤£à¤¹à¤°à¥", + "wikieditor-toolbar-section-help": "सहायता", + "wikieditor-toolbar-help-heading-description": "विवरण", + "wikieditor-toolbar-help-heading-syntax": "के तपाईं टाइप", + "wikieditor-toolbar-help-heading-result": "के तपाईं पà¥à¤°à¤¾à¤ªà¥à¤¤", + "wikieditor-toolbar-help-page-format": "पà¥à¤°à¤¾à¤°à¥‚प", + "wikieditor-toolbar-help-page-link": "कडियाà¤", + "wikieditor-toolbar-help-page-heading": "शीरà¥à¤·à¤•à¤¹à¤°à¥‚", + "wikieditor-toolbar-help-page-list": "सूचीहरू", + "wikieditor-toolbar-help-page-file": "फाइलहरू", + "wikieditor-toolbar-help-page-reference": "सनà¥à¤¦à¤°à¥à¤­ सामगà¥à¤°à¥€à¤¹à¤°à¥‚", + "wikieditor-toolbar-help-page-discussion": "वारà¥à¤¤à¤¾à¤²à¤¾à¤ª", + "wikieditor-toolbar-help-content-italic-description": "छडà¥à¤•à¥‡", + "wikieditor-toolbar-help-content-italic-syntax": "''छडà¥à¤•à¥‡ पाठ''", + "wikieditor-toolbar-help-content-italic-result": "छडà¥à¤•à¥‡ पाठ", + "wikieditor-toolbar-help-content-bold-description": "मोटो", + "wikieditor-toolbar-help-content-bold-syntax": "''' मोटो पाठ '''", + "wikieditor-toolbar-help-content-bold-result": "मोटो पाठ", + "wikieditor-toolbar-help-content-bolditalic-description": "मोटो & छडà¥à¤•à¥‡", + "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''मोटो & छडà¥à¤•à¥‡ पाठ'''''", + "wikieditor-toolbar-help-content-bolditalic-result": "मोटो & छडके पाठ", + "wikieditor-toolbar-help-content-ilink-description": "आनà¥à¤¤à¤°à¤¿à¤• लिङà¥à¤•", + "wikieditor-toolbar-help-content-ilink-syntax": "[[पृषà¥à¤ à¤¶à¥€à¤°à¥à¤·à¤•|लिङà¥à¤• शिरोनाम]]
      [[पृषà¥à¤ à¤¶à¥€à¤°à¥à¤·à¤•]]", + "wikieditor-toolbar-help-content-ilink-result": "लिङà¥à¤• शिरोनाम
      पृषà¥à¤ à¤¶à¥€à¤°à¥à¤·à¤•", + "wikieditor-toolbar-help-content-xlink-description": "बाहà¥à¤¯ लिंक", + "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org लिङà¥à¤• शिरोनाम]
      [http://www.example.org]
      http://www.example.org", + "wikieditor-toolbar-help-content-xlink-result": "लिङà¥à¤• शिरोनाम
      [1]
      http://www.example.org", + "wikieditor-toolbar-help-content-heading2-description": "दोसà¥à¤°à¥‹ सà¥à¤¤à¤° शीरà¥à¤·à¤•à¤®à¤¾", + "wikieditor-toolbar-help-content-heading2-syntax": "== शीरà¥à¤·à¤•à¤ªà¤¾à¤  ==", + "wikieditor-toolbar-help-content-heading2-result": "

      शीरà¥à¤·à¤•à¤ªà¤¾à¤ 

      ", + "wikieditor-toolbar-help-content-heading3-description": "तेसà¥à¤°à¥‹ सà¥à¤¤à¤° शीरà¥à¤·à¤•à¤®à¤¾", + "wikieditor-toolbar-help-content-heading3-syntax": "=== शीरà¥à¤·à¤•à¤ªà¤¾à¤  ===", + "wikieditor-toolbar-help-content-heading3-result": "

      शीरà¥à¤·à¤•à¤ªà¤¾à¤ 

      ", + "wikieditor-toolbar-help-content-heading4-description": "चौथो सà¥à¤¤à¤° शीरà¥à¤·à¤•à¤®à¤¾", + "wikieditor-toolbar-help-content-heading4-syntax": "==== शीरà¥à¤·à¤•à¤ªà¤¾à¤  ====", + "wikieditor-toolbar-help-content-heading4-result": "

      शीरà¥à¤·à¤•à¤ªà¤¾à¤ 

      ", + "wikieditor-toolbar-help-content-heading5-description": "पाà¤à¤šà¥Œà¤‚ सà¥à¤¤à¤° शीरà¥à¤·à¤•à¤®à¤¾", + "wikieditor-toolbar-help-content-heading5-syntax": "===== शीरà¥à¤·à¤•à¤ªà¤¾à¤  =====", + "wikieditor-toolbar-help-content-heading5-result": "
      शीरà¥à¤·à¤•à¤ªà¤¾à¤ 
      ", + "wikieditor-toolbar-help-content-ulist-description": "थोपà¥à¤²à¤¾ सà¥à¤šà¥€", + "wikieditor-toolbar-help-content-olist-description": "संखà¥à¤¯à¤¾ सà¥à¤šà¥€", + "wikieditor-toolbar-help-content-reference-description": "सनà¥à¤¦à¤°à¥à¤­", + "wikieditor-toolbar-help-content-reference-result": "पृषà¥à¤ à¤ªà¤¾à¤ .[1]", + "wikieditor-toolbar-help-content-rereference-result": "पृषà¥à¤ à¤ªà¤¾à¤  .[2]", + "wikieditor-toolbar-help-content-showreferences-description": "सनà¥à¤¦à¤°à¥à¤­ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Link text, additional text.
      ", + "wikieditor-toolbar-help-content-signaturetimestamp-description": "समयछाप संग हसà¥à¤¤à¤¾à¤•à¥à¤·à¤°", + "wikieditor-toolbar-help-content-signature-description": "हसà¥à¤¤à¤¾à¤•à¥à¤·à¤°" } diff --git a/extensions/WikiEditor/i18n/nl.json b/extensions/WikiEditor/i18n/nl.json index d35fb110..799316d4 100644 --- a/extensions/WikiEditor/i18n/nl.json +++ b/extensions/WikiEditor/i18n/nl.json @@ -9,7 +9,8 @@ "Tvdm", "Wiki13", "Macofe", - "MedShot" + "MedShot", + "HanV" ] }, "wikieditor": "Uitgebreide tekstverwerker voor wikitekst", @@ -33,7 +34,6 @@ "wikieditor-toolbar-desc": "Bewerkingsbalk die eenvoudiger te gebruiken is", "wikieditor-toolbar-preference": "Uitgebreide bewerkingsbalk inschakelen", "wikieditor-toolbar-dialogs-preference": "Dialogen inschakelen voor het toevoegen van koppelingen, tabellen, en zoeken en vervangen", - "wikieditor-toolbar-hidesig": "De knop voor ondertekenen in deze naamruimte verbergen", "wikieditor-toolbar-loading": "Bezig met laden…", "wikieditor-toolbar-tool-bold": "Vet", "wikieditor-toolbar-tool-bold-example": "Vetgedrukte tekst", @@ -128,7 +128,7 @@ "wikieditor-toolbar-tool-table-preview": "Voorvertoning", "wikieditor-toolbar-tool-table-insert": "Invoegen", "wikieditor-toolbar-tool-table-cancel": "Annuleren", - "wikieditor-toolbar-tool-table-toomany": "Het invoegen van een tabel met meer dan 1000 cellen is niet mogelijk via dit dialoogvenster.", + "wikieditor-toolbar-tool-table-toomany": "Het invoegen van een tabel met meer dan $1 {{PLURAL:$1|cellen}} is hier niet mogelijk.", "wikieditor-toolbar-tool-table-invalidnumber": "U hebt een ongeldig aantal regels of kolommen opgegeven.", "wikieditor-toolbar-tool-table-zero": "U kunt geen tabel invoegen zonder regels of kolommen.", "wikieditor-toolbar-tool-replace": "Zoeken en vervangen", @@ -193,14 +193,14 @@ "wikieditor-toolbar-help-content-file-description": "Ingebed bestand", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Voorbeeld.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referentie", - "wikieditor-toolbar-help-content-reference-syntax": "Paginatekst.<ref name=\"test\">[http://www.example.org Koppelingstekst], extra tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Paginatekst.<ref>[http://www.example.org Koppelingstekst], extra tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Paginatekst. [1]", "wikieditor-toolbar-help-content-rereference-description": "Extra gebruik van dezelfde referentie", - "wikieditor-toolbar-help-content-rereference-result": "Paginatekst. [1]", + "wikieditor-toolbar-help-content-rereference-result": "Paginatekst. [2]", "wikieditor-toolbar-help-content-showreferences-description": "Referenties weergeven", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Koppelingstekst, extra tekst.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Ondertekening met tijdstempel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Gebruikersnaam (overleg) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Gebruikersnaam (overleg) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Ondertekening", "wikieditor-toolbar-help-content-signature-result": "Gebruikersnaam (overleg)", "wikieditor-toolbar-help-content-indent-description": "Inspringen", diff --git a/extensions/WikiEditor/i18n/nn.json b/extensions/WikiEditor/i18n/nn.json index f3055838..254bb17e 100644 --- a/extensions/WikiEditor/i18n/nn.json +++ b/extensions/WikiEditor/i18n/nn.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Fil", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referanse", - "wikieditor-toolbar-help-content-reference-syntax": "Sidetekst.<ref name=\"test\">[http://www.døme.org Lenkjetekst], ekstra lenkjetekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Sidetekst.<ref>[http://www.døme.org Lenkjetekst], ekstra lenkjetekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Sidetekst.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ytterlegare bruk av same referanse", - "wikieditor-toolbar-help-content-rereference-result": "Sidetekst.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Sidetekst.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Vis referansar", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Lenkjetekst, ekstra tekst.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatur med tidsstempel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Brukarnamn (diskusjon) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Brukarnamn (diskusjon) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatur", "wikieditor-toolbar-help-content-signature-result": "Brukarnamn (diskusjon)", "wikieditor-toolbar-help-content-indent-description": "Innrykk", diff --git a/extensions/WikiEditor/i18n/oc.json b/extensions/WikiEditor/i18n/oc.json index c17fce26..ee904291 100644 --- a/extensions/WikiEditor/i18n/oc.json +++ b/extensions/WikiEditor/i18n/oc.json @@ -141,28 +141,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Avètz pas indicat de tèxte de recercar.", "wikieditor-toolbar-tool-replace-invalidregex": "L'expression racionala entrada es invalida : $1", "wikieditor-toolbar-section-characters": "Caractèrs especials", - "wikieditor-toolbar-characters-page-latin": "Latin", - "wikieditor-toolbar-characters-page-latinextended": "Latin espandit", - "wikieditor-toolbar-characters-page-ipa": "API", - "wikieditor-toolbar-characters-page-symbols": "Simbòls", - "wikieditor-toolbar-characters-page-greek": "Grèc", - "wikieditor-toolbar-characters-page-cyrillic": "Cirillic", - "wikieditor-toolbar-characters-page-arabic": "Arabi", - "wikieditor-toolbar-characters-page-arabicextended": "arabi espandit", - "wikieditor-toolbar-characters-page-persian": "Pèrse", - "wikieditor-toolbar-characters-page-hebrew": "Ebrieu", - "wikieditor-toolbar-characters-page-bangla": "Bengali", - "wikieditor-toolbar-characters-page-tamil": "Tamol", - "wikieditor-toolbar-characters-page-telugu": "Telogó", - "wikieditor-toolbar-characters-page-sinhala": "Cingalés", - "wikieditor-toolbar-characters-page-gujarati": "Gujarati", - "wikieditor-toolbar-characters-page-devanagari": "Devanagari", - "wikieditor-toolbar-characters-page-thai": "Tai", - "wikieditor-toolbar-characters-page-lao": "Laocian", - "wikieditor-toolbar-characters-page-khmer": "Cmèr", - "wikieditor-toolbar-characters-endash": "jonhent anglés", - "wikieditor-toolbar-characters-emdash": "jonhent em", - "wikieditor-toolbar-characters-minus": "signe mens", "wikieditor-toolbar-section-help": "Ajuda", "wikieditor-toolbar-help-heading-description": "Descripcion", "wikieditor-toolbar-help-heading-syntax": "Çò que picatz", @@ -210,14 +188,14 @@ "wikieditor-toolbar-help-content-file-description": "Fichièr inserit", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemple.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referéncia", - "wikieditor-toolbar-help-content-reference-syntax": "Tèxte de la pagina.<ref name=\"test\">[http://www.example.org tèxte del ligam], tèxte adicional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Tèxte de la pagina.<ref>[http://www.example.org tèxte del ligam], tèxte adicional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tèxte de la pagina [1]", "wikieditor-toolbar-help-content-rereference-description": "Utilizacion adicionala de la meteissa referéncia", - "wikieditor-toolbar-help-content-rereference-result": "Tèxte de la pagina [1]", + "wikieditor-toolbar-help-content-rereference-result": "Tèxte de la pagina [2]", "wikieditor-toolbar-help-content-showreferences-description": "Afichar las referéncias", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Tèxte del ligam, tèxte adicional.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Signatura amb data", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nom d'utilizaire (discutir) 10 de junh de 2009 a 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nom d'utilizaire (discutir) 10 de junh de 2009 a 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatura", "wikieditor-toolbar-help-content-signature-result": "Nom d'utilizaire (discutir)", "wikieditor-toolbar-help-content-indent-description": "Identacion", diff --git a/extensions/WikiEditor/i18n/olo.json b/extensions/WikiEditor/i18n/olo.json new file mode 100644 index 00000000..09d81629 --- /dev/null +++ b/extensions/WikiEditor/i18n/olo.json @@ -0,0 +1,62 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "wikieditor-wikitext-tab": "Wikitekstu", + "wikieditor-publish-button-publish": "Piästä ilmah", + "wikieditor-publish-button-cancel": "Hylgiä", + "wikieditor-publish-dialog-watch": "Valvo tädä sivuu", + "wikieditor-publish-dialog-publish": "Piästä ilmah", + "wikieditor-publish-dialog-goback": "Mene järilleh", + "wikieditor-toolbar-tool-bold": "Sangei", + "wikieditor-toolbar-tool-bold-example": "Sangei tekstu", + "wikieditor-toolbar-tool-italic": "Kursivoitu", + "wikieditor-toolbar-tool-italic-example": "Kursivoitu tekstu", + "wikieditor-toolbar-tool-ilink": "Sižähine linku", + "wikieditor-toolbar-tool-link-int-target-status-exists": "Sivu on olemas", + "wikieditor-toolbar-tool-link-int-target-status-notexists": "Sivuu ei ole", + "wikieditor-toolbar-tool-link-int-target-status-external": "Ulgopuoline linku", + "wikieditor-toolbar-tool-link-int-target-status-loading": "Tarkistetah sivun olemasolendu...", + "wikieditor-toolbar-file-size": "Kogo:", + "wikieditor-toolbar-file-format-none": "nimidä", + "wikieditor-toolbar-tool-file-cancel": "Hylgiä", + "wikieditor-toolbar-tool-reference-cancel": "Hylgiä", + "wikieditor-toolbar-tool-heading": "Rubriekku", + "wikieditor-toolbar-tool-heading-1": "Tazo 1", + "wikieditor-toolbar-tool-heading-2": "Tazo 2", + "wikieditor-toolbar-tool-heading-3": "Tazo 3", + "wikieditor-toolbar-tool-heading-4": "Tazo 4", + "wikieditor-toolbar-tool-heading-5": "Tazo 5", + "wikieditor-toolbar-tool-heading-example": "Rubriekkutekstu", + "wikieditor-toolbar-group-format": "Formuattu", + "wikieditor-toolbar-tool-big": "Suuri", + "wikieditor-toolbar-tool-big-example": "Suuri tekstu", + "wikieditor-toolbar-tool-small": "Pieni", + "wikieditor-toolbar-tool-small-example": "Pieni tekstu", + "wikieditor-toolbar-tool-replace-button-findnext": "EÄi tulii", + "wikieditor-toolbar-tool-replace-close": "Salbua", + "wikieditor-toolbar-help-content-italic-description": "Kursivoitu", + "wikieditor-toolbar-help-content-italic-syntax": "''Kursivoitu tekstu''", + "wikieditor-toolbar-help-content-italic-result": "Kursivoitu tekstu", + "wikieditor-toolbar-help-content-bold-description": "Sangei", + "wikieditor-toolbar-help-content-bold-syntax": "'''Sangei tekstu'''", + "wikieditor-toolbar-help-content-bold-result": "Sangei tekstu", + "wikieditor-toolbar-help-content-bolditalic-description": "Sangei da kursivoitu", + "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Sangei da kursivoitu tekstu'''''", + "wikieditor-toolbar-help-content-bolditalic-result": "Sangei da kursivoitu tekstu", + "wikieditor-toolbar-help-content-heading2-description": "2. tazon rubriekku", + "wikieditor-toolbar-help-content-heading2-syntax": "== Rubriekkutekstu ==", + "wikieditor-toolbar-help-content-heading2-result": "

      Rubriekkutekstu

      ", + "wikieditor-toolbar-help-content-heading3-description": "3. tazon rubriekku", + "wikieditor-toolbar-help-content-heading3-syntax": "== Rubriekkutekstu ==", + "wikieditor-toolbar-help-content-heading3-result": "

      Rubriekkutekstu

      ", + "wikieditor-toolbar-help-content-heading4-description": "4. tazon rubriekku", + "wikieditor-toolbar-help-content-heading4-syntax": "== Rubriekkutekstu ==", + "wikieditor-toolbar-help-content-heading4-result": "

      Rubriekkutekstu

      ", + "wikieditor-toolbar-help-content-heading5-description": "5. tazon rubriekku", + "wikieditor-toolbar-help-content-heading5-syntax": "== Rubriekkutekstu ==", + "wikieditor-toolbar-help-content-heading5-result": "
      Rubriekkutekstu
      ", + "wikieditor-toolbar-help-content-signature-description": "Allekirjutus" +} diff --git a/extensions/WikiEditor/i18n/or.json b/extensions/WikiEditor/i18n/or.json index cf9f52fa..d3c0e8ba 100644 --- a/extensions/WikiEditor/i18n/or.json +++ b/extensions/WikiEditor/i18n/or.json @@ -190,14 +190,14 @@ "wikieditor-toolbar-help-content-file-description": "à¬à¬®à¬¬à­‡à¬¡à¬¼ ହୋଇଥିବା ଫାଇଲ", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "ଆଧାର", - "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref name=\"test\">[http://www.example.org Link text], additional text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Page text.<ref>[http://www.example.org Link text], additional text.</ref>", "wikieditor-toolbar-help-content-reference-result": "ପୃଷà­à¬ à¬¾ ଲେଖା ।[1]", "wikieditor-toolbar-help-content-rereference-description": "à¬à¬• ଆଧାରର ଅଧିକ ବà­à­Ÿà¬¬à¬¹à¬¾à¬°", - "wikieditor-toolbar-help-content-rereference-result": "ପୃଷà­à¬ à¬¾ ଲେଖା ।[1]", + "wikieditor-toolbar-help-content-rereference-result": "ପୃଷà­à¬ à¬¾ ଲେଖା ।[2]", "wikieditor-toolbar-help-content-showreferences-description": "ଡିସ‌ପà­à¬²à­‡ ଆଧାରସମୂହ", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Link text, ଅଧିକ ଲେଖା ।
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ଦସà­à¬¤à¬–ତ ଓ ସମୟଚିହà­à¬¨ (Signature with timestamp)", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Username (talk) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Username (talk) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ଦସà­à¬¤à¬–ତ (Signature)", "wikieditor-toolbar-help-content-signature-result": "Username (talk)", "wikieditor-toolbar-help-content-indent-description": "ଅନà­à¬šà­à¬›à­‡à¬¦ ଛାଡ଼", diff --git a/extensions/WikiEditor/i18n/os.json b/extensions/WikiEditor/i18n/os.json index 667e50a4..1527aa18 100644 --- a/extensions/WikiEditor/i18n/os.json +++ b/extensions/WikiEditor/i18n/os.json @@ -92,7 +92,7 @@ "wikieditor-toolbar-tool-olist": "Ðымад номхыгъд", "wikieditor-toolbar-tool-olist-example": "Ðымад номхыгъды иуæг", "wikieditor-toolbar-tool-nowiki": "Æнæ викиформаткæнынæй", - "wikieditor-toolbar-tool-nowiki-example": "Æнæформатгонд текÑÑ‚ ам батыÑÑын", + "wikieditor-toolbar-tool-nowiki-example": "Æнæформатгонд текÑÑ‚ ам батъыÑÑын", "wikieditor-toolbar-tool-redirect": "ÆрвыÑÑ‚", "wikieditor-toolbar-tool-redirect-example": "ныÑангонд фарÑÑ‹ ном", "wikieditor-toolbar-tool-big": "Стыр", @@ -103,7 +103,7 @@ "wikieditor-toolbar-tool-superscript-example": "Уæлрæнхъон текÑÑ‚", "wikieditor-toolbar-tool-subscript": "Дæлрæнхъон", "wikieditor-toolbar-tool-subscript-example": "Дæлрæнхъон текÑÑ‚", - "wikieditor-toolbar-group-insert": "БатыÑÑын", + "wikieditor-toolbar-group-insert": "БатъыÑÑын", "wikieditor-toolbar-tool-gallery": "Ðывты галери", "wikieditor-toolbar-tool-gallery-example": "Example.jpg|ФыÑÑ‚1\nExample.jpg|ФыÑÑ‚2", "wikieditor-toolbar-tool-newline": "Ðог рæнхъ", @@ -111,7 +111,7 @@ "wikieditor-toolbar-tool-table-example-old": "-\n! Ñæр 1\n! Ñæр 2\n! Ñæр 3\n|-\n| рæнхъ 1, чырæг 1\n| рæнхъ 1, чырæг 2\n| рæнхъ 1, чырæг 3\n|-\n| рæнхъ 2, чырæг 1\n| рæнхъ 2, чырæг 2\n| рæнхъ 2, чырæг 3", "wikieditor-toolbar-tool-table-example-cell-text": "Чырæгы текÑÑ‚", "wikieditor-toolbar-tool-table-example-header": "Сæры текÑÑ‚", - "wikieditor-toolbar-tool-table-title": "Рæнхъ батыÑÑын", + "wikieditor-toolbar-tool-table-title": "Рæнхъ батъыÑÑын", "wikieditor-toolbar-tool-table-dimensions-rows": "Рæнхъытæ", "wikieditor-toolbar-tool-table-dimensions-columns": "Рæгътæ", "wikieditor-toolbar-tool-table-dimensions-header": "Бафтауын Ñæргонд рæнхъ", @@ -119,7 +119,7 @@ "wikieditor-toolbar-tool-table-sortable": "Таблицæ Ñортгæнаг Ñкæнын", "wikieditor-toolbar-tool-table-example": "Цæвиттон", "wikieditor-toolbar-tool-table-preview": "РазæркаÑÑ‚", - "wikieditor-toolbar-tool-table-insert": "БатыÑÑын", + "wikieditor-toolbar-tool-table-insert": "БатъыÑÑын", "wikieditor-toolbar-tool-table-cancel": "Ðыууадзын", "wikieditor-toolbar-tool-table-toomany": "$1-æй фылдæр чырæнимæ таблицæтæ ацы диалогы уылты нæй Ñ‚Ñ‹ÑÑæн.", "wikieditor-toolbar-tool-table-invalidnumber": "Рæнхъытæн кæнæ рæгътæн раÑÑ‚ нымæц нæ бацамыдтай.", @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Æфтыд файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Фиппаинаг", - "wikieditor-toolbar-help-content-reference-syntax": "ФарÑÑ‹ текÑÑ‚.<ref name=\"test\">[http://www.example.org Æрвитæны текÑÑ‚], уæлæмхаÑæн текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "ФарÑÑ‹ текÑÑ‚.<ref>[http://www.example.org Æрвитæны текÑÑ‚], уæлæмхаÑæн текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "ФарÑÑ‹ текÑÑ‚.[1]", "wikieditor-toolbar-help-content-rereference-description": "ФæÑтæмæ уыцы фиппайнагæй нодзы иу архайд", - "wikieditor-toolbar-help-content-rereference-result": "ФарÑÑ‹ текÑÑ‚.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ФарÑÑ‹ текÑÑ‚.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Фиппаинæгтæ æвдиÑын", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Æрвитæны текÑÑ‚, уæлæмхаÑæн текÑÑ‚.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "РæÑтæгимæ къухæрфыÑÑ‚", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ФæÑномыг (ныхаÑ) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ФæÑномыг (ныхаÑ) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "КъухæрфыÑÑ‚", "wikieditor-toolbar-help-content-signature-result": "ФæÑномыг (talk)", "wikieditor-toolbar-help-content-indent-description": "ХаÑÑ‚", diff --git a/extensions/WikiEditor/i18n/pa.json b/extensions/WikiEditor/i18n/pa.json index 57bb6b43..967f5d57 100644 --- a/extensions/WikiEditor/i18n/pa.json +++ b/extensions/WikiEditor/i18n/pa.json @@ -9,9 +9,6 @@ "wikieditor-preview-tab": "à¨à¨²à¨•", "wikieditor-preview-changes-tab": "ਤਬਦੀਲੀਆਂ", "wikieditor-preview-loading": "ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...", - "wikieditor-previewDialog-preference": "à¨à¨²à¨• ਡੱਬਾ ਚਾਲੂ ਕਰੋ", - "wikieditor-previewDialog-tab": "à¨à¨²à¨•", - "wikieditor-previewDialog-loading": "ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…", "wikieditor-publish-preference": "ਕਦਮ ਦਰ ਕਦਮ ਛਾਪਾ ਚਾਲੂ ਕਰੋ", "wikieditor-publish-button-publish": "ਛਾਪੋ", "wikieditor-publish-button-cancel": "ਰੱਦ ਕਰੋ", @@ -119,28 +116,6 @@ "wikieditor-toolbar-tool-replace-nomatch": "ਤà©à¨¹à¨¾à¨¡à©€ ਖੋਜ ਨੇ ਕਿਸੇ ਨਾਲ਼ ਮੇਲ ਨਹੀਂ ਖਾਧਾ।", "wikieditor-toolbar-tool-replace-emptysearch": "ਤà©à¨¸à©€à¨‚ ਲੱਭਣ ਲਈ ਕà©à¨ ਨਹੀਂ ਭਰਿਆ।", "wikieditor-toolbar-section-characters": "ਖ਼ਾਸ ਚਿੰਨà©à¨¹", - "wikieditor-toolbar-characters-page-latin": "ਲਾਤੀਨੀ", - "wikieditor-toolbar-characters-page-latinextended": "ਲਾਤੀਨੀ ਤੋਂ ਛà©à©±à¨Ÿ", - "wikieditor-toolbar-characters-page-ipa": "ਆਈ੦ਪੀ੦à¨", - "wikieditor-toolbar-characters-page-symbols": "ਨਿਸ਼ਾਨ", - "wikieditor-toolbar-characters-page-greek": "ਯੂਨਾਨੀ", - "wikieditor-toolbar-characters-page-cyrillic": "ਸਿਰੀਲਿਕ", - "wikieditor-toolbar-characters-page-arabic": "ਅਰਬੀ", - "wikieditor-toolbar-characters-page-arabicextended": "ਅਰਬੀ ਵਿਸਥਾਰੀ", - "wikieditor-toolbar-characters-page-persian": "ਫ਼ਾਰਸੀ", - "wikieditor-toolbar-characters-page-hebrew": "ਹਿਬਰੂ", - "wikieditor-toolbar-characters-page-bangla": "ਬਾਂਗਲਾ", - "wikieditor-toolbar-characters-page-tamil": "ਤਾਮਿਲ", - "wikieditor-toolbar-characters-page-telugu": "ਤੇਲਗੂ", - "wikieditor-toolbar-characters-page-sinhala": "ਸਿਨਹਾਲਾ", - "wikieditor-toolbar-characters-page-gujarati": "ਗà©à¨œà¨°à¨¾à¨¤à©€", - "wikieditor-toolbar-characters-page-devanagari": "ਦੇਵਨਾਗਰੀ", - "wikieditor-toolbar-characters-page-thai": "ਥਾਈ", - "wikieditor-toolbar-characters-page-lao": "ਲਾਓ", - "wikieditor-toolbar-characters-page-khmer": "ਖ਼ਮੇਰ", - "wikieditor-toolbar-characters-endash": "ਅੰਗਰੇਜ਼ੀ ਡੈਸ਼", - "wikieditor-toolbar-characters-emdash": "em ਡੈਸ਼", - "wikieditor-toolbar-characters-minus": "ਘਟਾਓ ਦਾ ਨਿਸ਼ਾਨ", "wikieditor-toolbar-section-help": "ਮਦਦ", "wikieditor-toolbar-help-heading-description": "ਵੇਰਵਾ", "wikieditor-toolbar-help-heading-syntax": "ਜੋ ਤà©à¨¸à©€à¨‚ ਟਾਈਪ ਕਰਦੇ ਹੋ", @@ -184,14 +159,14 @@ "wikieditor-toolbar-help-content-olist-syntax": "# ਸੂਚੀ ਦੀ ਵਸਤੂ
      # ਸੂਚੀ ਦੀ ਵਸਤੂ", "wikieditor-toolbar-help-content-olist-result": "
      1. ਸੂਚੀ ਦੀ ਵਸਤੂ
      2. ਸੂਚੀ ਦੀ ਵਸਤੂ
      ", "wikieditor-toolbar-help-content-reference-description": "ਹਵਾਲਾ", - "wikieditor-toolbar-help-content-reference-syntax": "ਸਫ਼ਾ ਲਿਖਤ।<ref name=\"test\">[http://www.example.org ਕੜੀ ਲਿਖਤ], ਵਧੀਕ ਲਿਖਤ।</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "ਸਫ਼ਾ ਲਿਖਤ।<ref>[http://www.example.org ਕੜੀ ਲਿਖਤ], ਵਧੀਕ ਲਿਖਤ।</ref>", "wikieditor-toolbar-help-content-reference-result": "ਸਫ਼ਾ ਲਿਖਤ।[੧]", "wikieditor-toolbar-help-content-rereference-description": "ਉਸੇ ਹਵਾਲੇ ਦੀ ਵਧੀਕ ਵਰਤੋਂ", - "wikieditor-toolbar-help-content-rereference-result": "ਸਫ਼ੇ ਦੀ ਲਿਖਤ।[1]", + "wikieditor-toolbar-help-content-rereference-result": "ਸਫ਼ੇ ਦੀ ਲਿਖਤ।[2]", "wikieditor-toolbar-help-content-showreferences-description": "ਹਵਾਲੇ ਵਿਖਾਓ", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ਕੜੀ ਲਿਖਤ, ਵਧੀਕ ਲਿਖਤ।
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ਸਮੇਂ ਦੀ ਮੋਹਰ ਸਮੇਤ ਦਸਤਖ਼ਤ", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ਵਰਤੋਂਕਾਰ ਨਾਂ (talk) ੧੫:੫੪, ੧੦ ਜੂਨ ੨੦੦੯ (ਯੂਟੀਸੀ)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ਵਰਤੋਂਕਾਰ ਨਾਂ (talk) ੧੫:੫੪, ੧੦ ਜੂਨ ੨੦੦੯ (ਯੂਟੀਸੀ)", "wikieditor-toolbar-help-content-signature-description": "ਦਸਤਖ਼ਤ", "wikieditor-toolbar-help-content-signature-result": "ਵਰਤੋਂਕਾਰ ਨਾਂ (ਗੱਲਬਾਤ)", "wikieditor-toolbar-help-content-indent-description": "ਹਾਸ਼ੀਠਤੋਂ ਦੂਰ" diff --git a/extensions/WikiEditor/i18n/pam.json b/extensions/WikiEditor/i18n/pam.json new file mode 100644 index 00000000..3a2d6bf7 --- /dev/null +++ b/extensions/WikiEditor/i18n/pam.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Leeheonjin" + ] + }, + "wikieditor-toolbar-help-content-named-reference-description": "Makalagyung dalerayan" +} diff --git a/extensions/WikiEditor/i18n/pl.json b/extensions/WikiEditor/i18n/pl.json index b477be7c..b3020569 100644 --- a/extensions/WikiEditor/i18n/pl.json +++ b/extensions/WikiEditor/i18n/pl.json @@ -12,7 +12,8 @@ "ToSter", "WTM", "Wpedzich", - "Mareklug" + "Mareklug", + "Chrumps" ] }, "wikieditor": "Zaawansowany interfejs edycji wikitekstu", @@ -131,7 +132,7 @@ "wikieditor-toolbar-tool-table-preview": "PodglÄ…d", "wikieditor-toolbar-tool-table-insert": "Wstaw", "wikieditor-toolbar-tool-table-cancel": "Anuluj", - "wikieditor-toolbar-tool-table-toomany": "Wstawianie tabeli o wiÄ™kszej liczbie komórek niż 1000 nie jest możliwe z użyciem tego okna.", + "wikieditor-toolbar-tool-table-toomany": "Wstawianie tabeli o wiÄ™kszej liczbie komórek niż $1 nie jest możliwe z użyciem tego okna.", "wikieditor-toolbar-tool-table-invalidnumber": "Nie wprowadziÅ‚eÅ› poprawnej liczby wierszy i kolumn.", "wikieditor-toolbar-tool-table-zero": "Nie można wstawić tabeli z zerowÄ… liczbÄ… wierszy lub kolumn.", "wikieditor-toolbar-tool-replace": "Wyszukaj i zastÄ…p", @@ -149,28 +150,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Nie okreÅ›liÅ‚eÅ› niczego do wyszukania.", "wikieditor-toolbar-tool-replace-invalidregex": "NieprawidÅ‚owe wyrażenie regularne – $1", "wikieditor-toolbar-section-characters": "Znaki specjalne", - "wikieditor-toolbar-characters-page-latin": "ÅaciÅ„skie", - "wikieditor-toolbar-characters-page-latinextended": "ÅaciÅ„skie (rozszerzony)", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "Symbole", - "wikieditor-toolbar-characters-page-greek": "Greckie", - "wikieditor-toolbar-characters-page-cyrillic": "Cyrylica", - "wikieditor-toolbar-characters-page-arabic": "Arabskie", - "wikieditor-toolbar-characters-page-arabicextended": "Arabskie (rozszerzony)", - "wikieditor-toolbar-characters-page-persian": "Perskie", - "wikieditor-toolbar-characters-page-hebrew": "Hebrajskie", - "wikieditor-toolbar-characters-page-bangla": "Bengalski", - "wikieditor-toolbar-characters-page-tamil": "Tamilski", - "wikieditor-toolbar-characters-page-telugu": "Telugu", - "wikieditor-toolbar-characters-page-sinhala": "Syngaleskie", - "wikieditor-toolbar-characters-page-gujarati": "Gudźarackie", - "wikieditor-toolbar-characters-page-devanagari": "Dewanagari", - "wikieditor-toolbar-characters-page-thai": "Tajskie", - "wikieditor-toolbar-characters-page-lao": "LaotaÅ„skie", - "wikieditor-toolbar-characters-page-khmer": "Khmerskie", - "wikieditor-toolbar-characters-endash": "krótka kreska", - "wikieditor-toolbar-characters-emdash": "dÅ‚uga kreska", - "wikieditor-toolbar-characters-minus": "minus", "wikieditor-toolbar-section-help": "Pomoc", "wikieditor-toolbar-help-heading-description": "Opis", "wikieditor-toolbar-help-heading-syntax": "Należy wpisać", @@ -192,8 +171,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Tekst tÅ‚ustÄ… pochyÅ‚Ä… czcionkÄ…'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Tekst tÅ‚ustÄ… pochyÅ‚Ä… czcionkÄ…", "wikieditor-toolbar-help-content-ilink-description": "Link wewnÄ™trzny", - "wikieditor-toolbar-help-content-ilink-syntax": "[[TytuÅ‚ strony|Opis linku]]
      [[Tytuł strony]]", - "wikieditor-toolbar-help-content-ilink-result": "Opis linku
      Tytuł strony", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Tytuł strony]]
      [[Tytuł strony|Etykieta linku]]", + "wikieditor-toolbar-help-content-ilink-result": "Tytuł strony
      Etykieta linku", "wikieditor-toolbar-help-content-xlink-description": "Link zewnętrzny", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.przyklad.org Opis linku]
      [http://www.przyklad.org]
      http://www.przyklad.org", "wikieditor-toolbar-help-content-xlink-result": "Opis linku
      [1]
      http://www.przyklad.org", @@ -218,14 +197,17 @@ "wikieditor-toolbar-help-content-file-description": "Plik osadzony", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Przykład.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Przypis", - "wikieditor-toolbar-help-content-reference-syntax": "Treść strony<ref name=\"test\"> [http://www.przyklad.org Opis linku], dodatkowy tekst. </ref>.", + "wikieditor-toolbar-help-content-reference-syntax": "Treść strony<ref> [http://www.przyklad.org Opis linku], dodatkowy tekst. </ref>.", "wikieditor-toolbar-help-content-reference-result": "Treść strony[1].", + "wikieditor-toolbar-help-content-named-reference-description": "Nazwany odnośnik", + "wikieditor-toolbar-help-content-named-reference-syntax": "Tekst na stronie.<ref name=\"test\">[http://www.example.org Tekst linku]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Tekst na stronie.[2]", "wikieditor-toolbar-help-content-rereference-description": "Kolejne użycie nazwanego przypisu", - "wikieditor-toolbar-help-content-rereference-result": "Treść strony[1].", + "wikieditor-toolbar-help-content-rereference-result": "Treść strony[2].", "wikieditor-toolbar-help-content-showreferences-description": "Wyświetl przypisy", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Opis linku, dodatkowy tekst.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Tekst linku, dodatkowy tekst.
      2. ^ Tekst linku
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Podpis wraz z datą i czasem", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nazwa użytkownika (dyskusja) 15:54, 10 czerwca 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nazwa użytkownika (dyskusja) 15:54, 10 czerwca 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Podpis", "wikieditor-toolbar-help-content-signature-result": "Nazwa użytkownika (dyskusja)", "wikieditor-toolbar-help-content-indent-description": "Wcięcie", diff --git a/extensions/WikiEditor/i18n/pms.json b/extensions/WikiEditor/i18n/pms.json index 8cdaa71d..348195a7 100644 --- a/extensions/WikiEditor/i18n/pms.json +++ b/extensions/WikiEditor/i18n/pms.json @@ -188,14 +188,14 @@ "wikieditor-toolbar-help-content-file-description": "Archivi anserì", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Arferiment", - "wikieditor-toolbar-help-content-reference-syntax": "Test ëd dla pàgina.<ref name=\"test\">[http://www.example.org Test dël colegament], test adissional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Test ëd dla pàgina.<ref>[http://www.example.org Test dël colegament], test adissional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Test ëd la pàgina.[1]", "wikieditor-toolbar-help-content-rereference-description": "Usagi adissional dël midem arferiment", - "wikieditor-toolbar-help-content-rereference-result": "Test ëd la pàgina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Test ëd la pàgina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Visualisa arferiment", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Test dël colegament, test adissional.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Firma con timestamp", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nòm utent (discussion) 15:54, 10 giugn 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Stranòm (ciaciarade) 15:54, 10 giugn 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firma", "wikieditor-toolbar-help-content-signature-result": "Nòm utent (discussion)", "wikieditor-toolbar-help-content-indent-description": "Indenta", diff --git a/extensions/WikiEditor/i18n/pnb.json b/extensions/WikiEditor/i18n/pnb.json index 49870b62..639252e3 100644 --- a/extensions/WikiEditor/i18n/pnb.json +++ b/extensions/WikiEditor/i18n/pnb.json @@ -176,14 +176,14 @@ "wikieditor-toolbar-help-content-file-description": "مورت Ù„Ú¯ÛŒ Ùائل", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "اتے پتے", - "wikieditor-toolbar-help-content-reference-syntax": "صÙÛ Ù„Ú©Ú¾Øª.<ref name=\"test\">[http://www.example.org جوڑ لکھت], Ûور لکھت.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "صÙÛ Ù„Ú©Ú¾Øª.<ref>[http://www.example.org جوڑ لکھت], Ûور لکھت.</ref>", "wikieditor-toolbar-help-content-reference-result": "صÙا لکھت.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ûور ورتن اوسے اتے پتے دا", - "wikieditor-toolbar-help-content-rereference-result": "صÙÛ Ù„Ú©Ú¾Øª.[1]", + "wikieditor-toolbar-help-content-rereference-result": "صÙÛ Ù„Ú©Ú¾Øª.[2]", "wikieditor-toolbar-help-content-showreferences-description": "اتے پتے وکھاؤ", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Link text, additional text.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "تواڈے دستخط ویلے دے نال", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ورتن والے دا ناں (talk) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ورتن والے دا ناں (talk) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "دسخط", "wikieditor-toolbar-help-content-signature-result": "ورتن ناں (talk)", "wikieditor-toolbar-help-content-indent-description": "انڈنٹ", diff --git a/extensions/WikiEditor/i18n/ps.json b/extensions/WikiEditor/i18n/ps.json index ecd204a3..ee532326 100644 --- a/extensions/WikiEditor/i18n/ps.json +++ b/extensions/WikiEditor/i18n/ps.json @@ -6,11 +6,11 @@ }, "wikieditor": "د پرمختللی ويکي متن د سمون ليدنمخ", "wikieditor-wikitext-tab": "ويکي متن", - "wikieditor-loading": "برسÛرÛØ¯Ù†Û Ú©Û Ø¯ÛŒ...", + "wikieditor-loading": "رابرسÛرÛÚ–ÙŠ...", "wikieditor-preview-preference": "Ú…Ù†Ú¯ په Ú…Ù†Ú¯ مخليدنه چارنول", "wikieditor-preview-tab": "مخليدنه", "wikieditor-preview-changes-tab": "بدلونونه", - "wikieditor-preview-loading": "برسÛرÛØ¯Ù†Û Ú©Û Ø¯ÛŒ...", + "wikieditor-preview-loading": "رابرسÛرÛÚ–ÙŠ...", "wikieditor-publish-preference": "ګام په ګام خپرÛدنه چارنده کول", "wikieditor-publish-button-publish": "خپرول", "wikieditor-publish-button-cancel": "ناگارل", @@ -23,7 +23,7 @@ "wikieditor-toolbar": "د سمون توکپټه", "wikieditor-toolbar-preference": "د سمون Ù¾Ø±Ù…Ø®ØªÙ„Ù„Û Ø§ÙˆØ²Ø§Ø±Ù¾Ù¼Ù‡ چارنول", "wikieditor-toolbar-dialogs-preference": "د تړنو، لښتيالونو د ورټومبلو، همدا شان د Ù¾Ù„Ù¼Ù†Û Ø§Ùˆ Úايناستولو لپاره کوډگران چارنول", - "wikieditor-toolbar-loading": "برسÛرÛØ¯Ù†Û Ú©Û Ø¯ÛŒ...", + "wikieditor-toolbar-loading": "رابرسÛرÛÚ–ÙŠ...", "wikieditor-toolbar-tool-bold": "زغرد", "wikieditor-toolbar-tool-bold-example": "زغرد متن", "wikieditor-toolbar-tool-italic": "رÛوند", @@ -57,6 +57,7 @@ "wikieditor-toolbar-file-size": "Ú©Ú†Ù‡:", "wikieditor-toolbar-file-default": "(تلواليز)", "wikieditor-toolbar-file-format": "بڼه:", + "wikieditor-toolbar-file-format-none": "Ù‡ÛÚ…", "wikieditor-toolbar-tool-file-insert": "ورټومبل", "wikieditor-toolbar-tool-file-cancel": "ناگارل", "wikieditor-toolbar-tool-reference": "سرچينه", @@ -78,6 +79,7 @@ "wikieditor-toolbar-tool-ulist": "Ú¯ÙˆÙ„Û Ø¯Ø§Ø±Ù‡ لړليک", "wikieditor-toolbar-tool-ulist-example": "د Ú¯ÙˆÙ„Û Ø¯Ø§Ø±Ù‡ لړليک توکی", "wikieditor-toolbar-tool-olist": "شمÛرن لړليک", + "wikieditor-toolbar-tool-olist-example": "د Ú¯ÙˆÙ„Û Ø¯Ø§Ø±Ù‡ لړليک توکی", "wikieditor-toolbar-tool-redirect-example": "د هدÙÙŠ مخ نوم", "wikieditor-toolbar-tool-big": "لوی", "wikieditor-toolbar-tool-big-example": "لوی متن", @@ -114,25 +116,6 @@ "wikieditor-toolbar-tool-replace-close": "تړل", "wikieditor-toolbar-tool-replace-nomatch": "Ø³ØªØ§Ø³Û Ù¾Ù„Ù¼Ù†Ù‡ د Ù‡ÛÚ… کوم شي سره اړونده نه وه.", "wikieditor-toolbar-section-characters": "Úانگړي توري", - "wikieditor-toolbar-characters-page-latin": "لاتين", - "wikieditor-toolbar-characters-page-latinextended": "غÚÛدلی لاتين", - "wikieditor-toolbar-characters-page-ipa": "Ù†.غ.ا", - "wikieditor-toolbar-characters-page-symbols": "سمبولونه", - "wikieditor-toolbar-characters-page-greek": "يوناني", - "wikieditor-toolbar-characters-page-cyrillic": "سرÛليک", - "wikieditor-toolbar-characters-page-arabic": "عربي", - "wikieditor-toolbar-characters-page-arabicextended": "غÚÛØ¯Ù„Û Ø¹Ø±Ø¨ÙŠ", - "wikieditor-toolbar-characters-page-persian": "پارسي", - "wikieditor-toolbar-characters-page-hebrew": "عبراني", - "wikieditor-toolbar-characters-page-bangla": "بنګالي", - "wikieditor-toolbar-characters-page-tamil": "تاميلي", - "wikieditor-toolbar-characters-page-telugu": "تÛلوګو", - "wikieditor-toolbar-characters-page-sinhala": "سÛنهالي", - "wikieditor-toolbar-characters-page-gujarati": "ګجراتي", - "wikieditor-toolbar-characters-page-devanagari": "دÛوانګري", - "wikieditor-toolbar-characters-page-thai": "تايلنډي", - "wikieditor-toolbar-characters-page-lao": "لاوي", - "wikieditor-toolbar-characters-page-khmer": "خمري", "wikieditor-toolbar-section-help": "لارښود", "wikieditor-toolbar-help-heading-description": "څرگندونه", "wikieditor-toolbar-help-heading-syntax": "هغه Ú…Ù‡ Ú†Û Ù„ÙŠÚ©Û", @@ -176,14 +159,14 @@ "wikieditor-toolbar-help-content-file-description": "خښه Ø´ÙˆÛ Ø¯ÙˆØªÙ†Ù‡", "wikieditor-toolbar-help-content-file-syntax": "[[$1:بÛÙ„Ú¯Ù‡.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "سرچينه", - "wikieditor-toolbar-help-content-reference-syntax": "د مخ متن.<ref name=\"test\">[http://www.example.org د ØªÚ“Ù†Û Ù…ØªÙ†], اضاÙÙŠ متن.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "د مخ متن.<ref>[http://www.example.org د ØªÚ“Ù†Û Ù…ØªÙ†], اضاÙÙŠ متن.</ref>", "wikieditor-toolbar-help-content-reference-result": "د مخ متن.[1]", "wikieditor-toolbar-help-content-rereference-description": "د سرچينو اضاÙÙŠ کارÛدنه", - "wikieditor-toolbar-help-content-rereference-result": "د مخ متن.[1]", + "wikieditor-toolbar-help-content-rereference-result": "د مخ متن.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Ø³Ø±Ú†ÙŠÙ†Û ÚšÚ©Ø§Ø±Ù‡ کول", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ د ØªÚ“Ù†Û Ù…ØªÙ†, اضاÙÙŠ متن.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "لاسليک د وخت د Ù¼Ø§Ù¾Û Ø³Ø±Ù‡", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "کارن نوم (Ø®Ø¨Ø±Û Ø§ØªØ±Û) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--کارن نوم (Ø®Ø¨Ø±Û Ø§ØªØ±Û) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "لاسليک", "wikieditor-toolbar-help-content-signature-result": "کارن نوم (Ø®Ø¨Ø±Û Ø§ØªØ±Û)", "wikieditor-toolbar-help-content-indent-description": "سرتشه", diff --git a/extensions/WikiEditor/i18n/pt-br.json b/extensions/WikiEditor/i18n/pt-br.json index 8176642b..cbc24ab3 100644 --- a/extensions/WikiEditor/i18n/pt-br.json +++ b/extensions/WikiEditor/i18n/pt-br.json @@ -200,14 +200,14 @@ "wikieditor-toolbar-help-content-file-description": "Arquivo embutido", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referência", - "wikieditor-toolbar-help-content-reference-syntax": "Texto da página.<ref name=\"teste\">[http://www.exemplo.org Texto do link], texto adicional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Texto da página.<ref>[http://www.exemplo.org Texto do link], texto adicional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Texto da página.[1]", "wikieditor-toolbar-help-content-rereference-description": "Reutilização da mesma referência", - "wikieditor-toolbar-help-content-rereference-result": "Texto da página.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Texto da página.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Mostrar referências", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Texto do link, texto adicional.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Assinatura com hora e data", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nome de usuário (discussão) 15h54min de 10 de junho de 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nome de usuário (discussão) 15h54min de 10 de junho de 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Assinatura", "wikieditor-toolbar-help-content-signature-result": "Nome de usuário (discussão)", "wikieditor-toolbar-help-content-indent-description": "Indentação", diff --git a/extensions/WikiEditor/i18n/pt.json b/extensions/WikiEditor/i18n/pt.json index 4a56ac28..80d08985 100644 --- a/extensions/WikiEditor/i18n/pt.json +++ b/extensions/WikiEditor/i18n/pt.json @@ -133,7 +133,7 @@ "wikieditor-toolbar-tool-table-preview": "Antevisão", "wikieditor-toolbar-tool-table-insert": "Inserir", "wikieditor-toolbar-tool-table-cancel": "Cancelar", - "wikieditor-toolbar-tool-table-toomany": "Neste diálogo não é possível inserir uma tabela com mais de 1000 células.", + "wikieditor-toolbar-tool-table-toomany": "Neste diálogo não é possível inserir uma tabela com mais de $1 {{PLURAL:$1|células}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Não introduziu um número válido de linhas ou colunas.", "wikieditor-toolbar-tool-table-zero": "Não pode inserir uma tabela com zero linhas ou colunas", "wikieditor-toolbar-tool-replace": "Pesquisar e substituir", @@ -151,28 +151,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Não introduziu nada para pesquisar.", "wikieditor-toolbar-tool-replace-invalidregex": "A expressão regular ''(regex)'' que introduziu é inválida: $1", "wikieditor-toolbar-section-characters": "Caracteres especiais", - "wikieditor-toolbar-characters-page-latin": "Latim", - "wikieditor-toolbar-characters-page-latinextended": "Latim expandido", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "Símbolos", - "wikieditor-toolbar-characters-page-greek": "Grego", - "wikieditor-toolbar-characters-page-cyrillic": "Cirílico", - "wikieditor-toolbar-characters-page-arabic": "Ãrabe", - "wikieditor-toolbar-characters-page-arabicextended": "Arábico estendido", - "wikieditor-toolbar-characters-page-persian": "Persa", - "wikieditor-toolbar-characters-page-hebrew": "Hebraico", - "wikieditor-toolbar-characters-page-bangla": "Bangla", - "wikieditor-toolbar-characters-page-tamil": "Tâmil", - "wikieditor-toolbar-characters-page-telugu": "Telugo", - "wikieditor-toolbar-characters-page-sinhala": "Cingalês", - "wikieditor-toolbar-characters-page-gujarati": "Guzerate", - "wikieditor-toolbar-characters-page-devanagari": "Devanágari", - "wikieditor-toolbar-characters-page-thai": "Tailandês", - "wikieditor-toolbar-characters-page-lao": "Laociano", - "wikieditor-toolbar-characters-page-khmer": "Cambojano", - "wikieditor-toolbar-characters-endash": "hífen", - "wikieditor-toolbar-characters-emdash": "travessão", - "wikieditor-toolbar-characters-minus": "sinal de subtração", "wikieditor-toolbar-section-help": "Ajuda", "wikieditor-toolbar-help-heading-description": "Descrição", "wikieditor-toolbar-help-heading-syntax": "O que escreve", @@ -194,8 +172,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Texto em negrito e itálico'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Texto em negrito e itálico", "wikieditor-toolbar-help-content-ilink-description": "Link interno", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Título da página|texto do link]]
      [[Título da página]]", - "wikieditor-toolbar-help-content-ilink-result": "Texto do link
      Título da página", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Título da página]]
      [[Título da página|Texto da ligação]]", + "wikieditor-toolbar-help-content-ilink-result": "Título da página
      Texto da ligação", "wikieditor-toolbar-help-content-xlink-description": "Link externo", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Texto do link]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Texto do link
      [1]
      http://www.example.org", @@ -221,14 +199,16 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Texto da legenda", "wikieditor-toolbar-help-content-reference-description": "Referência", - "wikieditor-toolbar-help-content-reference-syntax": "Texto da página.<ref name=\"teste\">[http://www.exemplo.org Texto do link], texto adicional.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Texto da página.<ref>[http://www.exemplo.org Texto do link], texto adicional.</ref>", "wikieditor-toolbar-help-content-reference-result": "Texto da página.[1]", + "wikieditor-toolbar-help-content-named-reference-syntax": "Texto da página.<ref name=\"test\">[http://www.example.org Link text]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Texto da página.[2]", "wikieditor-toolbar-help-content-rereference-description": "Reutilização da mesma referência", - "wikieditor-toolbar-help-content-rereference-result": "Texto da página.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Texto da página.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Mostrar referências", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Texto do link, texto adicional.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Texto da ligação, texto adicional.
      2. ^ Texto da ligação
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Assinatura com data e hora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nome de utilizador (discussão) 15h54min de 10 de junho de 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nome de utilizador (discussão) 15h54min de 10 de junho de 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Assinatura", "wikieditor-toolbar-help-content-signature-result": "Nome de utilizador (discussão)", "wikieditor-toolbar-help-content-indent-description": "Indentação", diff --git a/extensions/WikiEditor/i18n/qqq.json b/extensions/WikiEditor/i18n/qqq.json index 452d6738..56748af6 100644 --- a/extensions/WikiEditor/i18n/qqq.json +++ b/extensions/WikiEditor/i18n/qqq.json @@ -21,7 +21,9 @@ "Yekrats", "Liuxinyu970226", "Metalhead64", - "Mareklug" + "Mareklug", + "Macofe", + "Totosunarto" ] }, "wikieditor": "An extension to allow for advanced editing features.\nhttp://www.mediawiki.org/wiki/Extension:WikiEditor", @@ -44,18 +46,26 @@ "wikieditor-toolbar": "A customizable toolbar for the WikiEditor.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization", "wikieditor-toolbar-desc": "Unused at this time.", "wikieditor-toolbar-preference": "Option in [[Special:Preferences]]", - "wikieditor-toolbar-dialogs-preference": "Caption of a checkbox on [[Special:Preferences]] (''editing'' tab), enabling helper dialogs for various features of the advanced edit toolbar (e.g. inserting links or tables).\n{{Identical|Enable wizards for inserting links, tables as well as the search and replace function}}", + "wikieditor-toolbar-dialogs-preference": "Caption of a checkbox on [[Special:Preferences]] (''editing'' tab), enabling helper dialogs for various features of the advanced edit toolbar (e.g. inserting links or tables).", "wikieditor-toolbar-loading": "{{Identical|Loading}}", "wikieditor-toolbar-tool-bold": "{{Identical|Bold}}", "wikieditor-toolbar-tool-bold-example": "{{Identical|Bold text}}", "wikieditor-toolbar-tool-italic": "{{Identical|Italic}}", "wikieditor-toolbar-tool-italic-example": "{{Identical|Italic text}}", "wikieditor-toolbar-tool-ilink": "{{Identical|Internal link}}", + "wikieditor-toolbar-tool-ilink-example": "Used as link title when inserting an example wikilink into the editbox from the toolbar", "wikieditor-toolbar-tool-xlink": "{{Identical|External link (remember http:// prefix)}}", "wikieditor-toolbar-tool-xlink-example": "www.example.com is not a real website, but it has been reserved to use in software documentation, and will never be sold or used for advertising. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.com at all. If you do wish to translate it you should first check where the translated link takes you, and bear in mind that anybody could purchase that name in the future.", "wikieditor-toolbar-tool-link": "{{Identical|Link}}", "wikieditor-toolbar-tool-link-title": "{{Identical|Insert link}}", + "wikieditor-toolbar-tool-link-int": "Used in the link dialog of the toolbar as label for a checkbox", + "wikieditor-toolbar-tool-link-int-target": "Used in the link dialog of the toolbar as label for an input field", + "wikieditor-toolbar-tool-link-int-target-tooltip": "Used in the link dialog of the toolbar as tooltip of a label for an input field", + "wikieditor-toolbar-tool-link-int-text": "Used in the link dialog of the toolbar as label for an input field", + "wikieditor-toolbar-tool-link-int-text-tooltip": "Used in the link dialog of the toolbar as tooltip of a label for an input field", + "wikieditor-toolbar-tool-link-ext": "Used in the link dialog of the toolbar as label for a checkbox", "wikieditor-toolbar-tool-link-ext-target": "{{Identical|Link URL}}", + "wikieditor-toolbar-tool-link-ext-text": "Unused at the moment", "wikieditor-toolbar-tool-link-insert": "{{Identical|Insert link}}", "wikieditor-toolbar-tool-link-cancel": "{{Identical|Cancel}}", "wikieditor-toolbar-tool-link-int-target-status-exists": "Text shown when the title the user entered exists", @@ -65,8 +75,10 @@ "wikieditor-toolbar-tool-link-int-target-status-loading": "alt text and title text for the image shown while the title the user entered is being checked for existence", "wikieditor-toolbar-tool-link-int-target-status-disambig": "Text shown when the link target the user entered points to a disambiguation page.\n{{Identical|Disambiguation page}}", "wikieditor-toolbar-tool-link-int-invalid": "This message appears when you try to create an internal link but the page title in the link is invalid.", + "wikieditor-toolbar-tool-link-lookslikeinternal": "Used in the link dialog of the toolbar as hint when clicking the insert button", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "{{Identical|Internal link}}", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "{{Identical|External link}}", + "wikieditor-toolbar-tool-link-empty": "Used in the link dialog of the toolbar as hint after clicking the insert button", "wikieditor-toolbar-tool-file": "{{Identical|Embedded file}}", "wikieditor-toolbar-tool-file-example": "{{Identical|Example}}", "wikieditor-toolbar-tool-file-title": "Title for insert file dialog", @@ -80,6 +92,7 @@ "wikieditor-toolbar-tool-file-insert": "{{Identical|Insert}}", "wikieditor-toolbar-tool-file-cancel": "{{Identical|Cancel}}", "wikieditor-toolbar-tool-reference": "{{Identical|Reference}}", + "wikieditor-toolbar-tool-reference-example": "Used as example text when inserting a reference into the editbox from the toolbar", "wikieditor-toolbar-tool-reference-cancel": "{{Identical|Cancel}}", "wikieditor-toolbar-tool-reference-title": "Title of insert reference dialog. This text is on the very top bar of the dialog.\n{{Identical|Insert reference}}", "wikieditor-toolbar-tool-reference-insert": "Button text for the insert action of the insert reference dialog.\n{{Identical|Insert}}", @@ -87,17 +100,35 @@ "wikieditor-toolbar-tool-signature": "{{Identical|Signature with timestamp}}", "wikieditor-toolbar-section-advanced": "{{Identical|Advanced}}", "wikieditor-toolbar-tool-heading": "{{Identical|Heading}}", + "wikieditor-toolbar-tool-heading-1": "Used as example text when inserting a header into the editbox from the toolbar", + "wikieditor-toolbar-tool-heading-2": "Used as example text when inserting a header into the editbox from the toolbar", + "wikieditor-toolbar-tool-heading-3": "Used as example text when inserting a header into the editbox from the toolbar", + "wikieditor-toolbar-tool-heading-4": "Used as example text when inserting a header into the editbox from the toolbar", + "wikieditor-toolbar-tool-heading-5": "Used as example text when inserting a header into the editbox from the toolbar", + "wikieditor-toolbar-tool-heading-example": "Used as example text when inserting a header into the editbox from the toolbar", "wikieditor-toolbar-group-format": "{{Identical|Format}}", "wikieditor-toolbar-tool-ulist": "{{Identical|Bulleted list}}", + "wikieditor-toolbar-tool-ulist-example": "Used as example text when inserting an unordered list into the editbox from the toolbar", "wikieditor-toolbar-tool-olist": "{{Identical|Numbered list}}", + "wikieditor-toolbar-tool-olist-example": "Used as example text when inserting an orderered list into the editbox from the toolbar", "wikieditor-toolbar-tool-nowiki": "This is the text that appears when you hover the mouse over the third button from the right on the edit toolbar.", + "wikieditor-toolbar-tool-nowiki-example": "Used as example text when inserting a nowiki tag into the editbox from the toolbar", "wikieditor-toolbar-tool-redirect": "Tooltip for icon to place wiki text for a redirect in the edit box. The label before these icons says 'Insert'. 'Redirect' is a noun here.\n{{Identical|Redirect}}", "wikieditor-toolbar-tool-redirect-example": "Target is an adjective describing the page name. You could use 'destination' instead of 'target'. 'Target page name' is the destination of the redirect and appears when the wikitext for a redirect is inserted in the text box thus\n #REDIRECT [[target page name]]", "wikieditor-toolbar-tool-big": "{{Identical|Big}}", + "wikieditor-toolbar-tool-big-example": "Used as example text when inserting a big tag into the editbox from the toolbar", "wikieditor-toolbar-tool-small": "{{Identical|Small}}", + "wikieditor-toolbar-tool-small-example": "Used as example text when inserting a small tag into the editbox from the toolbar", + "wikieditor-toolbar-tool-superscript": "Used as description when inserting a sup tag into the editbox from the toolbar", + "wikieditor-toolbar-tool-superscript-example": "Used as example text when inserting a sup text into the editbox from the toolbar", + "wikieditor-toolbar-tool-subscript": "Used as description when inserting a sub tag into the editbox from the toolbar", + "wikieditor-toolbar-tool-subscript-example": "Used as example text when inserting a sub tag into the editbox from the toolbar", "wikieditor-toolbar-group-insert": "{{Identical|Insert}}", + "wikieditor-toolbar-tool-gallery": "Used as description when inserting a gallery tag into the editbox from the toolbar", "wikieditor-toolbar-tool-gallery-example": "Used as example for Picture Gallery.\n\nThis message follows the message {{msg-mw|wikieditor-toolbar-tool-gallery}}.\n\nParameters:\n* $1 - optional namespace name \"File\", unused in the default message.", + "wikieditor-toolbar-tool-newline": "Used as description when inserting a new line into the editbox from the toolbar", "wikieditor-toolbar-tool-table": "{{Identical|Table}}", + "wikieditor-toolbar-tool-table-example-old": "Used as example text when inserting a table into the editbox from the toolbar", "wikieditor-toolbar-tool-table-example-cell-text": "[[File:Wikieditor-toolbar-tool-table.png|thumb]] See screenshot.", "wikieditor-toolbar-tool-table-example-header": "[[File:Wikieditor-toolbar-tool-table.png|thumb]] See screenshot.\n\nSee also:\n* {{msg-mw|wikieditor-toolbar-tool-table-example-header}}\n* {{msg-mw|wikieditor-toolbar-tool-table-example}}", "wikieditor-toolbar-tool-table-title": "[[File:Wikieditor-toolbar-tool-table.png|thumb]] See screenshot.", @@ -117,16 +148,22 @@ "wikieditor-toolbar-tool-replace": "{{Identical|Search and replace}}", "wikieditor-toolbar-tool-replace-title": "{{Identical|Search and replace}}", "wikieditor-toolbar-tool-replace-search": "{{Identical|Search}}", + "wikieditor-toolbar-tool-replace-replace": "Used in the \"search and replace\" dialog of the toolbar as label for an input field", "wikieditor-toolbar-tool-replace-case": "This could as well be translated as \"case sensitive search\" -\n\"case\" refers to character case, that is upper case, or lower case.", "wikieditor-toolbar-tool-replace-regex": "A \"regular expression\" is a syntax to find strings based on patterns, for more see [[wikipedia:Regular expression|the Wikipedia article]].\n\nMore notes:\n* \"Regular expression\" is mostly a programmer tool, which is sometimes exposed to normal users too. It's almost as a programming language, but it is used to describe different kinds of strings (sometimes also called patterns and pattern matching), and is often used to change (parts of) the strings, too.", "wikieditor-toolbar-tool-replace-button-findnext": "{{Identical|Find next}}", "wikieditor-toolbar-tool-replace-button-replace": "{{Identical|Replace}}", + "wikieditor-toolbar-tool-replace-button-replaceall": "Used in the \"search and replace\" dialog of the toolbar as text for a button", "wikieditor-toolbar-tool-replace-close": "{{Identical|Close}}", + "wikieditor-toolbar-tool-replace-nomatch": "Used in the \"search and replace\" dialog of the toolbar as hint after clicking the button", "wikieditor-toolbar-tool-replace-success": "Parameter:\n* $1 - the number of replacements", + "wikieditor-toolbar-tool-replace-emptysearch": "Used in the \"search and replace\" dialog of the toolbar as hint after clicking the button", "wikieditor-toolbar-tool-replace-invalidregex": "Parameters:\n* $1 - a browser-supplied error message, probably in English, possibly in the browser language.\n\nA \"regular expression\" is a syntax to find strings based on patterns, for more see [[wikipedia:Regular expression|the Wikipedia article]].\n\nRegular expressions are mostly a programmer tool, which is sometimes exposed to normal users too.\n\nIt's almost as a programming language, but it is used to describe different kinds of strings (sometimes also called patterns and pattern matching), and is often used to change (parts of) the strings too.", "wikieditor-toolbar-section-characters": "This will be a toolbar for special characters, like emoticons.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization\n{{Identical|Special character}}", "wikieditor-toolbar-section-help": "{{Identical|Help}}", - "wikieditor-toolbar-help-heading-description": "{{Identical|Description}}", + "wikieditor-toolbar-help-heading-description": "Header for the description column used in the help section of the toolbar\n{{Identical|Description}}", + "wikieditor-toolbar-help-heading-syntax": "Header for the syntax column used in the help section of the toolbar", + "wikieditor-toolbar-help-heading-result": "Header for the result column used in the help section of the toolbar", "wikieditor-toolbar-help-page-format": "{{Identical|Formatting}}", "wikieditor-toolbar-help-page-link": "{{Identical|Link}}", "wikieditor-toolbar-help-page-heading": "{{Identical|Heading}}", @@ -144,30 +181,51 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "\"& amp;\" is displayed as &. It means \"and\".", "wikieditor-toolbar-help-content-bolditalic-result": "\"& amp;\" is displayed as &. It means \"and\".", "wikieditor-toolbar-help-content-ilink-description": "{{Identical|Internal link}}", + "wikieditor-toolbar-help-content-ilink-syntax": "Syntax example used in the help section \"link\" of the toolbar", + "wikieditor-toolbar-help-content-ilink-result": "Html example used in the help section \"link\" of the toolbar", "wikieditor-toolbar-help-content-xlink-description": "{{Identical|External link}}", - "wikieditor-toolbar-help-content-xlink-syntax": "www.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.", - "wikieditor-toolbar-help-content-xlink-result": "www.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.", + "wikieditor-toolbar-help-content-xlink-syntax": "Syntax example used in the help section \"link\" of the toolbar\n\nwww.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.", + "wikieditor-toolbar-help-content-xlink-result": "Html example used in the help section \"link\" of the toolbar\n\nwww.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.", + "wikieditor-toolbar-help-content-heading2-description": "Description used in the help section \"header\" of the toolbar", "wikieditor-toolbar-help-content-heading2-syntax": "{{Identical|Heading text}}", "wikieditor-toolbar-help-content-heading2-result": "{{Identical|Heading text}}", + "wikieditor-toolbar-help-content-heading3-description": "Description used in the help section \"header\" of the toolbar", "wikieditor-toolbar-help-content-heading3-syntax": "{{Identical|Heading text}}", "wikieditor-toolbar-help-content-heading3-result": "{{Identical|Heading text}}", + "wikieditor-toolbar-help-content-heading4-description": "Description used in the help section \"header\" of the toolbar", "wikieditor-toolbar-help-content-heading4-syntax": "{{Identical|Heading text}}", "wikieditor-toolbar-help-content-heading4-result": "{{Identical|Heading text}}", + "wikieditor-toolbar-help-content-heading5-description": "Description used in the help section \"header\" of the toolbar", "wikieditor-toolbar-help-content-heading5-syntax": "{{Identical|Heading text}}", "wikieditor-toolbar-help-content-heading5-result": "{{Identical|Heading text}}", "wikieditor-toolbar-help-content-ulist-description": "{{Identical|Bulleted list}}", + "wikieditor-toolbar-help-content-ulist-syntax": "Syntax example used in the help section \"list\" of the toolbar", + "wikieditor-toolbar-help-content-ulist-result": "Html example used in the help section \"list\" of the toolbar", "wikieditor-toolbar-help-content-olist-description": "{{Identical|Numbered list}}", + "wikieditor-toolbar-help-content-olist-syntax": "Syntax example used in the help section \"list\" of the toolbar", + "wikieditor-toolbar-help-content-olist-result": "Html example used in the help section \"list\" of the toolbar", "wikieditor-toolbar-help-content-file-description": "{{Identical|Embedded file}}", "wikieditor-toolbar-help-content-file-syntax": "Parameters:\n* $1 - \"File\" namespace name\n* $2 - the image syntax parameter for a thumbnail\n* $3 - the caption for the a thumbnail", "wikieditor-toolbar-help-content-file-caption": "Placeholder text for file caption. Must match {{msg-mw|wikieditor-toolbar-help-content-file-syntax}}.", "wikieditor-toolbar-help-content-reference-description": "{{Identical|Reference}}", - "wikieditor-toolbar-help-content-reference-syntax": "I suggest leaving the name=\"test\" string in English\n\nwww.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.", - "wikieditor-toolbar-help-content-rereference-syntax": "{{Optional}}", + "wikieditor-toolbar-help-content-reference-syntax": "Syntax example used in the help section \"reference\" of the toolbar\n\nwww.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.", + "wikieditor-toolbar-help-content-reference-result": "Html example used in the help section \"reference\" of the toolbar", + "wikieditor-toolbar-help-content-named-reference-description": "Description used in the help section \"reference\" of the toolbar", + "wikieditor-toolbar-help-content-named-reference-syntax": "{{Optional}}\nSyntax example used in the help section \"reference\" of the toolbar\n\nIt is suggest to leave the name=\"test\" string in English", + "wikieditor-toolbar-help-content-named-reference-result": "Html example used in the help section \"reference\" of the toolbar. If your language uses different digits, use it instead of \"[2]\".", + "wikieditor-toolbar-help-content-rereference-description": "Description used in the help section \"reference\" of the toolbar", + "wikieditor-toolbar-help-content-rereference-syntax": "{{Optional}}\nSyntax example used in the help section \"reference\" of the toolbar", + "wikieditor-toolbar-help-content-rereference-result": "Html example used in the help section \"reference\" of the toolbar", + "wikieditor-toolbar-help-content-showreferences-description": "Description used in the help section \"reference\" of the toolbar", "wikieditor-toolbar-help-content-showreferences-syntax": "{{Optional}}", "wikieditor-toolbar-help-content-showreferences-result": "For the
    1. tag's id attribute, non-ASCII characters are URL-encoded as follows: a period (.) followed by a capital hexadecimal code. For example, produces
    2. .\n\nwww.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.", "wikieditor-toolbar-help-content-signaturetimestamp-description": "{{Identical|Signature with timestamp}}", "wikieditor-toolbar-help-content-signaturetimestamp-syntax": "{{notranslate}}", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "Html example used in the help section \"discussion\" of the toolbar", "wikieditor-toolbar-help-content-signature-description": "{{Identical|Signature}}", "wikieditor-toolbar-help-content-signature-syntax": "{{notranslate}}", - "wikieditor-toolbar-help-content-indent-description": "{{Identical|Indent}}" + "wikieditor-toolbar-help-content-signature-result": "Html example used in the help section \"discussion\" of the toolbar", + "wikieditor-toolbar-help-content-indent-description": "{{Identical|Indent}}", + "wikieditor-toolbar-help-content-indent-syntax": "Syntax example used in the help section \"discussion\" of the toolbar", + "wikieditor-toolbar-help-content-indent-result": "Html example used in the help section \"discussion\" of the toolbar" } diff --git a/extensions/WikiEditor/i18n/qu.json b/extensions/WikiEditor/i18n/qu.json index bf4a270f..89aad5a0 100644 --- a/extensions/WikiEditor/i18n/qu.json +++ b/extensions/WikiEditor/i18n/qu.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Ch'aqtasqa rikcha", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Qhawarichiy.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Pukyumanta willay", - "wikieditor-toolbar-help-content-reference-syntax": "P'anqa qillqa.<ref name=\"test\">[http://www.example.org T'inki qillqa], yapasqa qillqa.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "P'anqa qillqa.<ref>[http://www.example.org T'inki qillqa], yapasqa qillqa.</ref>", "wikieditor-toolbar-help-content-reference-result": "P'anqa qillqa.[1]", "wikieditor-toolbar-help-content-rereference-description": "Kay pukyumanta willayta yapalla llamk'achiy", - "wikieditor-toolbar-help-content-rereference-result": "P'anqa qillqa.[1]", + "wikieditor-toolbar-help-content-rereference-result": "P'anqa qillqa.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Pukyukunamanta willaykunata rikuchiy", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ T'inki qillqa, yapasqa qillqa.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Silq'uy pachawan", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ruraqpa sutin (rimanakuy) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ruraqpa sutin (rimanakuy) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Silq'uy", "wikieditor-toolbar-help-content-signature-result": "Ruraqpa sutin (rimanakuy)", "wikieditor-toolbar-help-content-indent-description": "Anchhuchisqa", diff --git a/extensions/WikiEditor/i18n/ro.json b/extensions/WikiEditor/i18n/ro.json index c07d539e..cbf9bee2 100644 --- a/extensions/WikiEditor/i18n/ro.json +++ b/extensions/WikiEditor/i18n/ro.json @@ -6,7 +6,8 @@ "Firilacroco", "Minisarm", "Stelistcristi", - "Macofe" + "Macofe", + "Wintereu" ] }, "wikieditor": "Interfață de modificare wikitext avansată", @@ -30,7 +31,6 @@ "wikieditor-toolbar-desc": "Modificarea barei de instrumente cu utilizare ridicată", "wikieditor-toolbar-preference": "Activează varianta îmbunătățită a barei de unelte", "wikieditor-toolbar-dialogs-preference": "Activează asistență pentru inserarea legăturilor, tabelelor, precum și pentru funcțiile de căutare și înlocuire", - "wikieditor-toolbar-hidesig": "Ascunde butonul de semnătură în cazul paginilor din spațiul de nume principal", "wikieditor-toolbar-loading": "Se încarcă...", "wikieditor-toolbar-tool-bold": "Aldin", "wikieditor-toolbar-tool-bold-example": "Text aldin", @@ -164,8 +164,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Text aldin și cursiv'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Text aldin și cursiv", "wikieditor-toolbar-help-content-ilink-description": "Legătură internă", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Titlul paginii|Titlul legăturii]]
      [[Titlul paginii]]", - "wikieditor-toolbar-help-content-ilink-result": "Titlul legăturii
      Titlul paginii", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Titlul paginii]]
      [[Titlul paginii|Descrierea legăturii]]", + "wikieditor-toolbar-help-content-ilink-result": "Titlul paginii
      Descrierea legăturii", "wikieditor-toolbar-help-content-xlink-description": "Legătură externă", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.exemplu.org Titlul legăturii]
      [http://www.exemplu.org]
      http://www.exemplu.org", "wikieditor-toolbar-help-content-xlink-result": "Titlul legăturii
      [1]
      http://www.exemplu.org", @@ -190,14 +190,14 @@ "wikieditor-toolbar-help-content-file-description": "Fișier inserat", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplu.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referință", - "wikieditor-toolbar-help-content-reference-syntax": "Textul paginii.<ref name=\"test\">[http://www.exemplu.org Textul legăturii], text suplimentar.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Textul paginii.<ref>[http://www.exemplu.org Textul legăturii], text suplimentar.</ref>", "wikieditor-toolbar-help-content-reference-result": "Textul paginii.[1]", "wikieditor-toolbar-help-content-rereference-description": "Utilizare suplimentară a aceleiași referințe", - "wikieditor-toolbar-help-content-rereference-result": "Textul paginii.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Textul paginii.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Afișare referințe", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Textul legăturii, text adițional.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Semnătură datată", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nume de utilizator (discuție) 15:54, 10 iunie 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nume de utilizator (discuție) 15:54, 10 iunie 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Semnătură", "wikieditor-toolbar-help-content-signature-result": "Nume de utilizator (discuție)", "wikieditor-toolbar-help-content-indent-description": "Indentare", diff --git a/extensions/WikiEditor/i18n/roa-tara.json b/extensions/WikiEditor/i18n/roa-tara.json index 113f3b44..3c23cfaf 100644 --- a/extensions/WikiEditor/i18n/roa-tara.json +++ b/extensions/WikiEditor/i18n/roa-tara.json @@ -26,7 +26,6 @@ "wikieditor-toolbar-desc": "Cange 'a pàgene d'a barre de le struminde cu l'usabbilità avanzate", "wikieditor-toolbar-preference": "Abbilite 'a barre de le struminde pe le cangiaminde avanzate", "wikieditor-toolbar-dialogs-preference": "Abbilite le procedure guidate pe l'inzerimende de collegaminde, tabbelle e otre cose pa funzione de ricerche e sostituzione", - "wikieditor-toolbar-hidesig": "Scunne 'u buttone d'a firme da le pàggene jndr'à 'u namespace prengepàle", "wikieditor-toolbar-loading": "Stoche a careche…", "wikieditor-toolbar-tool-bold": "Grascette", "wikieditor-toolbar-tool-bold-example": "Teste grascette", @@ -105,7 +104,7 @@ "wikieditor-toolbar-tool-subscript-example": "Teste sottoscritte", "wikieditor-toolbar-group-insert": "'Nzerisce", "wikieditor-toolbar-tool-gallery": "Gallerìe fotografeche", - "wikieditor-toolbar-tool-gallery-example": "Example.jpg|Titele1\nExample.jpg|Titele2", + "wikieditor-toolbar-tool-gallery-example": "Example.jpg|Titole1\nExample.jpg|Titole2", "wikieditor-toolbar-tool-newline": "Linèa nove", "wikieditor-toolbar-tool-table": "Tabbelle", "wikieditor-toolbar-tool-table-example-old": "-\n! testate 1\n! testate 2\n! testate 3\n|-\n| righe 1, celle 1\n| righe 1, celle 2\n| righe 1, celle 3\n|-\n| righe 2, celle 1\n| righe 2, celle 2\n| righe 2, celle 3", @@ -121,7 +120,7 @@ "wikieditor-toolbar-tool-table-preview": "Andeprime", "wikieditor-toolbar-tool-table-insert": "Inzerisce", "wikieditor-toolbar-tool-table-cancel": "Annulle", - "wikieditor-toolbar-tool-table-toomany": "'U 'nzerimende de 'na tabbelle cu cchiù de 1000 celle non g'è possibbele cu stu dialoghe.", + "wikieditor-toolbar-tool-table-toomany": "'U 'nzerimende de 'na tabbelle cu cchiù de $1 {{PLURAL:$1|celle}} non g'è possibbele cu stu dialoghe.", "wikieditor-toolbar-tool-table-invalidnumber": "Tu non g'è mise 'nu numere valide de righe o culonne.", "wikieditor-toolbar-tool-table-zero": "Tu non ge puè inzerì 'na tabbelle cù zero righe o culonne.", "wikieditor-toolbar-tool-replace": "Cirche e sostituisce", @@ -139,28 +138,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Tu non g'è mise ninde pe fà 'a ricerche.", "wikieditor-toolbar-tool-replace-invalidregex": "L'espressione regolare ca tu è 'nzerite jè invalide: $1", "wikieditor-toolbar-section-characters": "Carattere speciale", - "wikieditor-toolbar-characters-page-latin": "Latine", - "wikieditor-toolbar-characters-page-latinextended": "Latine estese", - "wikieditor-toolbar-characters-page-ipa": "IPA", - "wikieditor-toolbar-characters-page-symbols": "Simbole", - "wikieditor-toolbar-characters-page-greek": "Greche", - "wikieditor-toolbar-characters-page-cyrillic": "Cirilliche", - "wikieditor-toolbar-characters-page-arabic": "Arabe", - "wikieditor-toolbar-characters-page-arabicextended": "Estenziune arabe", - "wikieditor-toolbar-characters-page-persian": "Persiane", - "wikieditor-toolbar-characters-page-hebrew": "Ebbrèe", - "wikieditor-toolbar-characters-page-bangla": "Bangladesciane", - "wikieditor-toolbar-characters-page-tamil": "Tamil", - "wikieditor-toolbar-characters-page-telugu": "Telugu", - "wikieditor-toolbar-characters-page-sinhala": "Sinhala", - "wikieditor-toolbar-characters-page-gujarati": "Gujarati", - "wikieditor-toolbar-characters-page-devanagari": "Devanagari", - "wikieditor-toolbar-characters-page-thai": "Thai", - "wikieditor-toolbar-characters-page-lao": "Lao", - "wikieditor-toolbar-characters-page-khmer": "Khmer", - "wikieditor-toolbar-characters-endash": "trattine en", - "wikieditor-toolbar-characters-emdash": "trattine em", - "wikieditor-toolbar-characters-minus": "segne mene", "wikieditor-toolbar-section-help": "Ajiute", "wikieditor-toolbar-help-heading-description": "Descrizione", "wikieditor-toolbar-help-heading-syntax": "Cè è scritte", @@ -182,8 +159,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Grascette & corsive'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Teste grascette & corsive", "wikieditor-toolbar-help-content-ilink-description": "Collegamende inderne", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Titele d'a pàgene|etichette de collegamende]]
      [[Titele d'a pàgene]]", - "wikieditor-toolbar-help-content-ilink-result": "Etichette de collegamende
      Titele d'a pàgene", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Titole d'a pàgene]]
      [[Titole d'a pàgene|etichette de collegamende]]", + "wikieditor-toolbar-help-content-ilink-result": "Titole d'a pàgene
      Etichette de collegamende", "wikieditor-toolbar-help-content-xlink-description": "Collegamende fore a Uicchipèdie", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.esembie.org etichette de collegamende][http://www.esembie.org]
      http://www.esembie.org", "wikieditor-toolbar-help-content-xlink-result": "Etichette de collegamende
      [1]
      http://www.esembie.org", @@ -209,14 +186,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Teste d'u titole", "wikieditor-toolbar-help-content-reference-description": "Riferimende", - "wikieditor-toolbar-help-content-reference-syntax": "Teste d'a pàgene.<ref name=\"test\">[http://www.example.org Teste d'u collegamende], teste addizionale.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Teste d'a pàgene.<ref>[http://www.example.org Teste d'u collegamende], teste addizionale.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teste d'a pàgene.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Referimende nnomenate", + "wikieditor-toolbar-help-content-named-reference-syntax": "Teste d'a pàgene.<ref name=\"test\">[http://www.example.org Teste de collegamende]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Teste d'a pàgene.[2]", "wikieditor-toolbar-help-content-rereference-description": "Ause addizionale d'u stesse riferimende", - "wikieditor-toolbar-help-content-rereference-result": "Teste d'a pàgene.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teste d'a pàgene.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Fà vedè le rifereminde", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Teste d'u collegamende, teste addizionale.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Teste d'u collegamende, teste aggiundive.
      2. ^ Teste d'u collegamende
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "firme cu l'orarie", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nome utende ('ngazzaminde) 15:54, 10 Giugne 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nome utende ('ngazzaminde) 15:54, 10 Giugne 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firme", "wikieditor-toolbar-help-content-signature-result": "Nome utende ('ngazzaminde)", "wikieditor-toolbar-help-content-indent-description": "Idente", diff --git a/extensions/WikiEditor/i18n/ru.json b/extensions/WikiEditor/i18n/ru.json index b5016424..4565958b 100644 --- a/extensions/WikiEditor/i18n/ru.json +++ b/extensions/WikiEditor/i18n/ru.json @@ -14,7 +14,8 @@ "Lockal", "Okras", "Temuri rajavi", - "ÐлекÑандр Сигачёв" + "ÐлекÑандр Сигачёв", + "Amire80" ] }, "wikieditor": "РаÑширенный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸ÐºÐ¸Ñ‚ÐµÐºÑта", @@ -38,7 +39,6 @@ "wikieditor-toolbar-desc": "Панель редактированиÑ, более ÑƒÐ´Ð¾Ð±Ð½Ð°Ñ Ð² иÑпользовании", "wikieditor-toolbar-preference": "Включить улучшенную панель редактированиÑ", "wikieditor-toolbar-dialogs-preference": "Включить маÑтера Ð´Ð»Ñ Ð²Ñтавки ÑÑылок, таблиц, а также функции вÑтавки и замены", - "wikieditor-toolbar-hidesig": "Скрыть кнопку подпиÑи на Ñтраницах оÑновного проÑтранÑтва имён", "wikieditor-toolbar-loading": "Загрузка…", "wikieditor-toolbar-tool-bold": "Полужирный", "wikieditor-toolbar-tool-bold-example": "Полужирное начертание", @@ -134,7 +134,7 @@ "wikieditor-toolbar-tool-table-insert": "Ð’Ñтавить", "wikieditor-toolbar-tool-table-cancel": "Отмена", "wikieditor-toolbar-tool-table-example-text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec purus diam. Sed aliquam imperdiet nunc quis lacinia. Donec rutrum consectetur placerat. Sed volutpat neque non purus faucibus id ultricies enim euismod.", - "wikieditor-toolbar-tool-table-toomany": "Этот диалог не позволÑет вÑтавить таблицу размером более 1000 Ñчеек.", + "wikieditor-toolbar-tool-table-toomany": "Этот диалог не позволÑет вÑтавить таблицу размером более $1 {{PLURAL:$1|Ñчейки|Ñчеек}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Ð’Ñ‹ не указали корректное количеÑтво Ñтрок или Ñтолбцов.", "wikieditor-toolbar-tool-table-zero": "Ð’Ñ‹ не можете вÑтавить таблицу Ñ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ количеÑтвом Ñтрок или Ñтолбцов.", "wikieditor-toolbar-tool-replace": "ПоиÑк и замена", @@ -152,28 +152,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Ð’Ñ‹ не указали что Ñледует иÑкать.", "wikieditor-toolbar-tool-replace-invalidregex": "Введённое вами регулÑрное выражение ошибочно: $1", "wikieditor-toolbar-section-characters": "СпецÑимволы", - "wikieditor-toolbar-characters-page-latin": "ЛатинÑкие", - "wikieditor-toolbar-characters-page-latinextended": "ЛатинÑкие раÑширенные", - "wikieditor-toolbar-characters-page-ipa": "МФР(IPA)", - "wikieditor-toolbar-characters-page-symbols": "Символы", - "wikieditor-toolbar-characters-page-greek": "ГречеÑкие", - "wikieditor-toolbar-characters-page-cyrillic": "Кириллица", - "wikieditor-toolbar-characters-page-arabic": "ÐрабÑкие", - "wikieditor-toolbar-characters-page-arabicextended": "ÐрабÑкие раÑширенные", - "wikieditor-toolbar-characters-page-persian": "ПерÑидÑкие", - "wikieditor-toolbar-characters-page-hebrew": "Иврит", - "wikieditor-toolbar-characters-page-bangla": "БенгальÑкие", - "wikieditor-toolbar-characters-page-tamil": "ТамильÑкий", - "wikieditor-toolbar-characters-page-telugu": "Телугу", - "wikieditor-toolbar-characters-page-sinhala": "СингальÑкие", - "wikieditor-toolbar-characters-page-gujarati": "Гуджарати", - "wikieditor-toolbar-characters-page-devanagari": "Деванагари", - "wikieditor-toolbar-characters-page-thai": "ТайÑкие", - "wikieditor-toolbar-characters-page-lao": "ЛаоÑÑкие", - "wikieditor-toolbar-characters-page-khmer": "КхмерÑкие", - "wikieditor-toolbar-characters-endash": "Ñреднее тире", - "wikieditor-toolbar-characters-emdash": "длинное тире", - "wikieditor-toolbar-characters-minus": "знак минуÑ", "wikieditor-toolbar-section-help": "Справка", "wikieditor-toolbar-help-heading-description": "ОпиÑание", "wikieditor-toolbar-help-heading-syntax": "Что вы вводите", @@ -195,8 +173,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Полужирный курÑив'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Полужирный курÑив", "wikieditor-toolbar-help-content-ilink-description": "ВнутреннÑÑ ÑÑылка", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Заголовок Ñтраницы|ТекÑÑ‚ ÑÑылки]]
      [[Заголовок Ñтраницы]]", - "wikieditor-toolbar-help-content-ilink-result": "ТекÑÑ‚ ÑÑылки
      Заголовок Ñтраницы", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Заголовок Ñтраницы]]
      [[Заголовок Ñтраницы|ТекÑÑ‚ ÑÑылки]]", + "wikieditor-toolbar-help-content-ilink-result": "Заголовок Ñтраницы
      ТекÑÑ‚ ÑÑылки", "wikieditor-toolbar-help-content-xlink-description": "ВнешнÑÑ ÑÑылка", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org ТекÑÑ‚ ÑÑылки]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "ТекÑÑ‚ ÑÑылки
      [1]
      http://www.example.org", @@ -222,16 +200,19 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "ПоÑÑнительный текÑÑ‚", "wikieditor-toolbar-help-content-reference-description": "Примечание", - "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñтраницы.<ref name=\"test\">[http://www.example.org ТекÑÑ‚ ÑÑылки], дополнительный текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñтраницы.<ref>[http://www.example.org ТекÑÑ‚ ÑÑылки], дополнительный текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "ТекÑÑ‚ Ñтраницы.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "СноÑка Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼", + "wikieditor-toolbar-help-content-named-reference-syntax": "ТекÑÑ‚ Ñтраницы.<ref name=\"test\">[http://www.example.org ТекÑÑ‚ ÑÑылки]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "ТекÑÑ‚ Ñтраницы.[2]", "wikieditor-toolbar-help-content-rereference-description": "Дополнительное иÑпользование той же ÑÑылки", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"test\" />", - "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñтраницы[1].", + "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñтраницы[2].", "wikieditor-toolbar-help-content-showreferences-description": "Показывать примечаниÑ", "wikieditor-toolbar-help-content-showreferences-syntax": "<references />", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ ÑÑылки, дополнительный текÑÑ‚.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ ÑÑылки, дополнительный текÑÑ‚.
      2. ^ ТекÑÑ‚ ÑÑылки
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ПодпиÑÑŒ Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¾Ð¹ времени", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ð˜Ð¼Ñ ÑƒÑ‡Ð°Ñтника (обÑуждение) 15:54, 10 Ð¸ÑŽÐ½Ñ 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ð˜Ð¼Ñ ÑƒÑ‡Ð°Ñтника (обÑуждение) 15:54, 10 Ð¸ÑŽÐ½Ñ 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПодпиÑÑŒ", "wikieditor-toolbar-help-content-signature-result": "Ð˜Ð¼Ñ ÑƒÑ‡Ð°Ñтника (обÑуждение)", "wikieditor-toolbar-help-content-indent-description": "ОтÑтуп", diff --git a/extensions/WikiEditor/i18n/rue.json b/extensions/WikiEditor/i18n/rue.json index 5d5b13ba..c726f1b5 100644 --- a/extensions/WikiEditor/i18n/rue.json +++ b/extensions/WikiEditor/i18n/rue.json @@ -179,14 +179,14 @@ "wikieditor-toolbar-help-content-file-description": "Ð’Ð»Ð¾Ð¶Ñ–Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Позначка", - "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñторінкы<ref name=\"test\">[http://www.example.org ТекÑÑ‚ одказу], додатковый текÑÑ‚.</ref>.", + "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñторінкы<ref>[http://www.example.org ТекÑÑ‚ одказу], додатковый текÑÑ‚.</ref>.", "wikieditor-toolbar-help-content-reference-result": "ТекÑÑ‚ Ñторінкы.[1]", "wikieditor-toolbar-help-content-rereference-description": "Далшый одказ на тоту Ñаму позначку", - "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñторінкы.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñторінкы.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Вказати позначкы", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ одказу, додатковый текÑÑ‚.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ÐŸÑ–Ð´Ð¿Ð¸Ñ Ñ– датум", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Мено хоÑÐ½Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (діÑкузії) 15:54, 10 юна 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Мено хоÑÐ½Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (діÑкузії) 15:54, 10 юна 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПідпиÑ", "wikieditor-toolbar-help-content-signature-result": "Мено хоÑÐ½Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (діÑкузії)", "wikieditor-toolbar-help-content-indent-description": "ОдÑтуп", diff --git a/extensions/WikiEditor/i18n/sa.json b/extensions/WikiEditor/i18n/sa.json index 127be4e6..a4318cf1 100644 --- a/extensions/WikiEditor/i18n/sa.json +++ b/extensions/WikiEditor/i18n/sa.json @@ -4,17 +4,18 @@ "Ansumang", "Bhawani Gautam", "Shubha", - "Macofe" + "Macofe", + "NehalDaveND" ] }, "wikieditor": "उनà¥à¤¨à¤¤à¤µà¥€à¤•à¤¿à¤ªà¤¾à¤ à¥à¤¯à¤¾à¤‚शसà¥à¤¯ समà¥à¤ªà¤¾à¤¦à¤¨à¤®à¤¾à¤§à¥à¤¯à¤®à¤®à¥", "wikieditor-desc": "मधà¥à¤¯à¤¸à¥à¤¥à¤¸à¤®à¥à¤ªà¤¾à¤¦à¤¨à¤¯à¥‹à¤—à¥à¤¯à¤‚ विसà¥à¤¤à¤¾à¤°à¤¶à¥€à¤²à¤‚ विकिपाठà¥à¤¯à¤¾à¤‚शं विविधानà¥à¤•à¥‚लकारिणः विभागानॠच पà¥à¤°à¤¦à¤¦à¤¾à¤¤à¤¿", "wikieditor-wikitext-tab": "विकिपाठः", - "wikieditor-loading": "आरोपà¥à¤¯à¤®à¤¾à¤£à¤®à¤¸à¥à¤¤à¤¿.....", + "wikieditor-loading": "आरोपयति...", "wikieditor-preview-preference": "पकà¥à¤·à¤¶à¤ƒ पà¥à¤°à¤¾à¤—à¥à¤¦à¥ƒà¤¶à¥à¤¯à¤‚ सकà¥à¤·à¤®à¤‚ कà¥à¤°à¤¿à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-preview-tab": "पà¥à¤°à¤¾à¤—à¥à¤¦à¥ƒà¤¶à¥à¤¯à¤®à¥", "wikieditor-preview-changes-tab": "परिवरà¥à¤¤à¤¨à¤¾à¤¨à¤¿", - "wikieditor-preview-loading": "आरोपà¥à¤¯à¤®à¤¾à¤£à¤®à¤¸à¥à¤¤à¤¿.....", + "wikieditor-preview-loading": "आरोपयति.....", "wikieditor-publish-preference": "सोपानशः पà¥à¤°à¤•à¤¾à¤¶à¤¨à¤‚ सकà¥à¤·à¤®à¤‚ कà¥à¤°à¤¿à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-publish-button-publish": "पà¥à¤°à¤•à¤¾à¤¶à¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-publish-button-cancel": "निरसà¥à¤¯à¤¤à¤¾à¤®à¥", @@ -29,7 +30,7 @@ "wikieditor-toolbar-preference": "विवृदà¥à¤§à¥‹à¤ªà¤•à¤°à¤£à¤ªà¥‡à¤Ÿà¤¿à¤•à¤¾à¤¯à¤¾à¤ƒ समà¥à¤ªà¤¾à¤¦à¤¨à¤‚ सकà¥à¤°à¤¿à¤¯à¤‚ कà¥à¤°à¤¿à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-dialogs-preference": "अनà¥à¤¬à¤¨à¥à¤§à¤•à¥‹à¤·à¥à¤Ÿà¤•à¤¾à¤¦à¥€à¤¨à¤¾à¤‚ समायोजनाय समà¥à¤­à¤¾à¤·à¤£à¤‚ सकà¥à¤°à¤¿à¤¯à¤‚ करोतà¥", "wikieditor-toolbar-hidesig": "मà¥à¤–à¥à¤¯à¤¨à¤¾à¤®à¤¾à¤µà¤•à¤¾à¤¶à¤ªà¥ƒà¤·à¥à¤ à¥‡à¤·à¥ हसà¥à¤¤à¤¾à¤•à¥à¤·à¤°à¤•à¥à¤¡à¥à¤®à¤²à¤‚ विलोपयतà¥", - "wikieditor-toolbar-loading": "आरोपà¥à¤¯à¤®à¤¾à¤£à¤®à¤¸à¥à¤¤à¤¿.....", + "wikieditor-toolbar-loading": "आरोपयति.....", "wikieditor-toolbar-tool-bold": "सà¥à¤¥à¥‚लकà¥à¤·à¤°à¤®à¥", "wikieditor-toolbar-tool-bold-example": "सà¥à¤¥à¥‚लाकà¥à¤·à¤°à¥ˆà¤ƒ यà¥à¤•à¥à¤¤à¤ƒ भागः", "wikieditor-toolbar-tool-italic": "वलिताकà¥à¤·à¤°à¤®à¥", @@ -38,17 +39,17 @@ "wikieditor-toolbar-tool-ilink-example": "अनà¥à¤¬à¤¨à¥à¤§à¤¸à¥à¤¯ शीरà¥à¤·à¤•à¤®à¥", "wikieditor-toolbar-tool-xlink": "बाहà¥à¤¯à¤¾à¤¨à¥à¤¬à¤¨à¥à¤§à¤ƒ (http://इति पूरà¥à¤µà¤²à¤—à¥à¤¨à¤‚ सà¥à¤®à¤°à¥à¤¤à¤µà¥à¤¯à¤®à¥)", "wikieditor-toolbar-tool-xlink-example": "http://www.example.com अनà¥à¤¬à¤¨à¥à¤§à¤¸à¥à¤¯ शीरà¥à¤·à¤•à¤®à¥", - "wikieditor-toolbar-tool-link": "अनà¥à¤¬à¤¨à¥à¤§à¤ƒ", - "wikieditor-toolbar-tool-link-title": "अनà¥à¤¬à¤¨à¥à¤§à¤ƒ योजà¥à¤¯à¤¤à¤¾à¤®à¥", + "wikieditor-toolbar-tool-link": "परिसनà¥à¤§à¤¿à¤ƒ", + "wikieditor-toolbar-tool-link-title": "परिसनà¥à¤§à¤¿à¤ƒ योजà¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-tool-link-int": "विकिपृषà¥à¤ à¤¾à¤¯", "wikieditor-toolbar-tool-link-int-target": "लकà¥à¤·à¥à¤¯à¤ªà¥ƒà¤·à¥à¤ à¤®à¥ अथवा URL:", "wikieditor-toolbar-tool-link-int-target-tooltip": "पृषà¥à¤ à¤¶à¥€à¤°à¥à¤·à¤•à¤®à¥ अथवा URL", "wikieditor-toolbar-tool-link-int-text": "पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨à¤¾à¤¯ पाठà¥à¤¯à¤­à¤¾à¤—ः :", "wikieditor-toolbar-tool-link-int-text-tooltip": "पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨à¤¾à¤¯ पाठà¥à¤¯à¤¾à¤‚शः", "wikieditor-toolbar-tool-link-ext": "बाहà¥à¤¯à¤œà¤¾à¤²à¤ªà¥à¤Ÿà¤‚ पà¥à¤°à¤¤à¤¿", - "wikieditor-toolbar-tool-link-ext-target": "अनà¥à¤¬à¤¨à¥à¤§à¤ƒ URL:", + "wikieditor-toolbar-tool-link-ext-target": "सारà¥à¤µà¤¸à¤™à¥à¤•à¥‡à¤¤à¤ƒ योजà¥à¤¯à¤¤à¤¾à¤®à¥ :", "wikieditor-toolbar-tool-link-ext-text": "पाटà¥à¤¯à¤¾à¤‚शानà¥à¤¬à¤¨à¥à¤§à¤ƒ :", - "wikieditor-toolbar-tool-link-insert": "अनà¥à¤¬à¤¨à¥à¤§à¤ƒ योजà¥à¤¯à¤¤à¤¾à¤®à¥", + "wikieditor-toolbar-tool-link-insert": "परिसनà¥à¤§à¤¿à¤ƒ योजà¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-tool-link-cancel": "निरसà¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-tool-link-int-target-status-exists": "पृषà¥à¤ à¤‚ विदà¥à¤¯à¤¤à¥‡", "wikieditor-toolbar-tool-link-int-target-status-notexists": "पृषà¥à¤ à¤‚ न विदà¥à¤¯à¤¤à¥‡", @@ -56,7 +57,7 @@ "wikieditor-toolbar-tool-link-int-target-status-external": "बाहà¥à¤¯à¤¸à¤®à¥à¤ªà¤°à¥à¤•à¤¤à¤¨à¥à¤¤à¥à¤ƒ", "wikieditor-toolbar-tool-link-int-target-status-loading": "पृषà¥à¤ à¤¸à¥à¤¯ असà¥à¤¤à¤¿à¤¤à¥à¤µà¤‚ परिशीलयति ....", "wikieditor-toolbar-tool-link-int-invalid": "सूचिता शीरà¥à¤·à¤¿à¤•à¤¾ अमानà¥à¤¯à¤¾ वरà¥à¤¤à¤¤à¥‡ ।", - "wikieditor-toolbar-tool-link-lookslikeinternal": "भवता सूचितः जालसङà¥à¤•à¥‡à¤¤à¤ƒ अनà¥à¤¯à¤¸à¥à¤¯ विकिपृषà¥à¤ à¤¸à¥à¤¯ अनà¥à¤¬à¤¨à¥à¤§à¤ƒ इति भाति ।\nइदमॠआनà¥à¤¤à¤°à¤¿à¤•à¤¾à¤¨à¥à¤¬à¤¨à¥à¤§à¤¤à¥à¤µà¥‡à¤¨ करà¥à¤¤à¥à¤®à¤¿à¤šà¥à¤›à¤¤à¤¿ किमॠ?", + "wikieditor-toolbar-tool-link-lookslikeinternal": "भवता सूचितः जालसङà¥à¤•à¥‡à¤¤à¤ƒ अनà¥à¤¯à¤¸à¥à¤¯ विकिपृषà¥à¤ à¤¸à¥à¤¯ परिसनà¥à¤§à¤¿à¤ƒ इति भाति ।\nइदमॠआनà¥à¤¤à¤°à¤¿à¤•à¤¾à¤¨à¥à¤¬à¤¨à¥à¤§à¤¤à¥à¤µà¥‡à¤¨ करà¥à¤¤à¥à¤®à¤¿à¤šà¥à¤›à¤¤à¤¿ किमॠ?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "आनà¥à¤¤à¤°à¤¿à¤•à¤¸à¤®à¥à¤ªà¤°à¥à¤•à¤¤à¤¨à¥à¤¤à¥à¤ƒ", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "बाहà¥à¤¯à¤¸à¤®à¥à¤ªà¤°à¥à¤•à¤¤à¤¨à¥à¤¤à¥à¤ƒ", "wikieditor-toolbar-tool-link-empty": "समà¥à¤ªà¤°à¥à¤•à¤•à¤²à¥à¤ªà¤¨à¤¾à¤¯ न किञà¥à¤šà¤¿à¤¤à¥ सूचितमॠ।", @@ -67,24 +68,25 @@ "wikieditor-toolbar-file-caption": "शिरोनाम :", "wikieditor-toolbar-file-size": "आकारः :", "wikieditor-toolbar-file-float": "पङà¥à¤•à¥à¤¤à¤¿à¤‚ करोतॠ:", - "wikieditor-toolbar-file-default": "(पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤¦à¤¿à¤·à¥à¤Ÿà¤®à¥)", + "wikieditor-toolbar-file-default": "(यदभावे)", "wikieditor-toolbar-file-format": "पà¥à¤°à¤¾à¤°à¥‚पमà¥", + "wikieditor-toolbar-file-format-none": "नैकमपि", "wikieditor-toolbar-tool-file-insert": "योजà¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-tool-file-cancel": "निरसà¥à¤¯à¤¤à¤¾à¤®à¥", - "wikieditor-toolbar-tool-reference": "आधारः", + "wikieditor-toolbar-tool-reference": "सनà¥à¤¦à¤°à¥à¤­à¤ƒ", "wikieditor-toolbar-tool-reference-example": "अतà¥à¤° अधोटिपà¥à¤ªà¤£à¥€ योजà¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-tool-reference-cancel": "निरसà¥à¤¯à¤¤à¤¾à¤®à¥", - "wikieditor-toolbar-tool-reference-title": "आधारः योजà¥à¤¯à¤¤à¤¾à¤®à¥", + "wikieditor-toolbar-tool-reference-title": "सनà¥à¤¦à¤°à¥à¤­à¤ƒ योजà¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-tool-reference-insert": "योजà¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-tool-reference-text": "आधारपाठà¥à¤¯à¤¾à¤‚शः", "wikieditor-toolbar-tool-signature": "हसà¥à¤¤à¤¾à¤•à¥à¤·à¤°à¤‚ समयाङà¥à¤•à¤¨à¤žà¥à¤š", "wikieditor-toolbar-section-advanced": "उनà¥à¤¨à¤¤à¤®à¥", "wikieditor-toolbar-tool-heading": "शीरà¥à¤·à¤•à¤®à¥", "wikieditor-toolbar-tool-heading-1": "सà¥à¤¤à¤°à¤ƒ १", - "wikieditor-toolbar-tool-heading-2": "शीरà¥à¤·à¤•à¤®à¥ 2", - "wikieditor-toolbar-tool-heading-3": "शीरà¥à¤·à¤•à¤®à¥", - "wikieditor-toolbar-tool-heading-4": "शीरà¥à¤·à¤•à¤®à¥ 4", - "wikieditor-toolbar-tool-heading-5": "शीरà¥à¤·à¤•à¤®à¥", + "wikieditor-toolbar-tool-heading-2": "सà¥à¤¤à¤°à¤ƒ २", + "wikieditor-toolbar-tool-heading-3": "सà¥à¤¤à¤°à¤ƒ ३", + "wikieditor-toolbar-tool-heading-4": "सà¥à¤¤à¤°à¤ƒ ४", + "wikieditor-toolbar-tool-heading-5": "सà¥à¤¤à¤°à¤ƒ ५", "wikieditor-toolbar-tool-heading-example": "शीरà¥à¤·à¤•à¤ªà¤¾à¤ à¥à¤¯à¤¾à¤‚शः", "wikieditor-toolbar-group-format": "पà¥à¤°à¤¾à¤°à¥‚पमà¥", "wikieditor-toolbar-tool-ulist": "अङà¥à¤•à¤¿à¤¤à¤¾ सूची", @@ -144,12 +146,12 @@ "wikieditor-toolbar-help-heading-syntax": "भवता किं लिखà¥à¤¯à¤¤à¥‡", "wikieditor-toolbar-help-heading-result": "भवता किं पà¥à¤°à¤¾à¤ªà¥à¤¯à¤¤à¥‡", "wikieditor-toolbar-help-page-format": "पà¥à¤°à¤¾à¤°à¥‚पणमà¥", - "wikieditor-toolbar-help-page-link": "अनà¥à¤¬à¤¨à¥à¤§à¤¾à¤ƒ", + "wikieditor-toolbar-help-page-link": "परिसनà¥à¤§à¤¯à¤ƒ", "wikieditor-toolbar-help-page-heading": "शीरà¥à¤·à¤•à¤¾à¤£à¤¿", "wikieditor-toolbar-help-page-list": "सूचà¥à¤¯à¤ƒ", "wikieditor-toolbar-help-page-file": "सञà¥à¤šà¤¿à¤•à¤¾:", - "wikieditor-toolbar-help-page-reference": "आधारः", - "wikieditor-toolbar-help-page-discussion": "चरà¥à¤šà¤¾", + "wikieditor-toolbar-help-page-reference": "सनà¥à¤¦à¤°à¥à¤­à¤ƒ", + "wikieditor-toolbar-help-page-discussion": "समà¥à¤­à¤¾à¤·à¤£à¤®à¥", "wikieditor-toolbar-help-content-italic-description": "वलिताकà¥à¤·à¤°à¤®à¥", "wikieditor-toolbar-help-content-italic-syntax": "''वलिताकà¥à¤·à¤°à¤¯à¥à¤¤à¤ªà¤¾à¤ à¤ƒ ''", "wikieditor-toolbar-help-content-italic-result": "वलिताकà¥à¤·à¤°à¤¯à¥à¤¤à¤ªà¤¾à¤ à¤ƒ", @@ -185,17 +187,17 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. अंशानां सूची
      2. अंशानां सूची
      ", "wikieditor-toolbar-help-content-file-description": "अनà¥à¤¤à¤°à¥à¤—ता सञà¥à¤šà¤¿à¤•à¤¾", "wikieditor-toolbar-help-content-file-syntax": "[[$1:उदाहरणमà¥.png|$2|$3]]", - "wikieditor-toolbar-help-content-reference-description": "आधारः", - "wikieditor-toolbar-help-content-reference-syntax": "पृषà¥à¤ à¤ªà¤¾à¤ à¤ƒ ।<ref name=\"test\">[http://www.example.org अनà¥à¤¬à¤¨à¥à¤§à¤ªà¤¾à¤ à¤ƒ], अतिरिकà¥à¤¤à¤ªà¤¾à¤ à¤ƒ.</ref>", + "wikieditor-toolbar-help-content-reference-description": "सनà¥à¤¦à¤°à¥à¤­à¤ƒ", + "wikieditor-toolbar-help-content-reference-syntax": "पृषà¥à¤ à¤ªà¤¾à¤ à¤ƒ ।<ref>[http://www.example.org अनà¥à¤¬à¤¨à¥à¤§à¤ªà¤¾à¤ à¤ƒ], अतिरिकà¥à¤¤à¤ªà¤¾à¤ à¤ƒ.</ref>", "wikieditor-toolbar-help-content-reference-result": "पृषà¥à¤ à¤ªà¤¾à¤ à¤ƒ.[1]", "wikieditor-toolbar-help-content-rereference-description": "तसà¥à¤¯à¥ˆà¤µ आधारसà¥à¤¯ अतिरिकà¥à¤¤à¤ƒ उपयोगः", - "wikieditor-toolbar-help-content-rereference-result": "पृषà¥à¤ à¤ªà¤¾à¤ à¤ƒ .[1]", - "wikieditor-toolbar-help-content-showreferences-description": "आधारः दरà¥à¤¶à¥à¤¯à¤¤à¤¾à¤®à¥", + "wikieditor-toolbar-help-content-rereference-result": "पृषà¥à¤ à¤ªà¤¾à¤ à¤ƒ .[2]", + "wikieditor-toolbar-help-content-showreferences-description": "सनà¥à¤¦à¤°à¥à¤­à¤ƒ दरà¥à¤¶à¥à¤¯à¤¤à¤¾à¤®à¥", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ अनà¥à¤¬à¤¨à¥à¤§à¤²à¥‡à¤–ः, अतिरिकà¥à¤¤à¤²à¥‡à¤–ः ।
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "हसà¥à¤¤à¤¾à¤•à¥à¤·à¤°à¤‚ समयाङà¥à¤•à¤¨à¤žà¥à¤š", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "सदसà¥à¤¯à¤¨à¤¾à¤® (चरà¥à¤šà¤¾) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--सदसà¥à¤¯à¤¨à¤¾à¤® (चरà¥à¤šà¤¾) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "हसà¥à¤¤à¤¾à¤•à¥à¤·à¤°à¤®à¥", - "wikieditor-toolbar-help-content-signature-result": "सदसà¥à¤¯à¤¨à¤¾à¤® (चरà¥à¤šà¤¾)", + "wikieditor-toolbar-help-content-signature-result": "सदसà¥à¤¯à¤¨à¤¾à¤® (समà¥à¤­à¤¾à¤·à¤£à¤®à¥)", "wikieditor-toolbar-help-content-indent-description": "भङà¥à¤—à¥à¤°à¥€à¤•à¤°à¥‹à¤¤à¤¿", "wikieditor-toolbar-help-content-indent-syntax": "सामानà¥à¤¯à¤²à¥‡à¤–ः
      :समीकृतः लेखः
      ::समीकृतः लेखः", "wikieditor-toolbar-help-content-indent-result": "सामानà¥à¤¯à¤ƒ लेखः
      सजà¥à¤œà¥€à¤•à¥ƒà¤¤à¤ƒ लेखः
      सजà¥à¤œà¥€à¤•à¥ƒà¤¤à¤ƒ लेखः
      " diff --git a/extensions/WikiEditor/i18n/sah.json b/extensions/WikiEditor/i18n/sah.json index 9a67eb41..ba87a6e6 100644 --- a/extensions/WikiEditor/i18n/sah.json +++ b/extensions/WikiEditor/i18n/sah.json @@ -173,14 +173,14 @@ "wikieditor-toolbar-help-content-file-description": "ИһинÑÑҕи билÑ", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Быһаарыы", - "wikieditor-toolbar-help-content-reference-syntax": "СирÑй тиÑкиһÑ.<ref name=\"test\">[http://www.example.org Ð¡Ð¸Ð³Ñ Ð±Ñ‹Ò»Ð°Ð°Ñ€Ñ‹Ñ‹Ñ‚Ð°], Ñбии быһаарыы.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "СирÑй тиÑкиһÑ.<ref>[http://www.example.org Ð¡Ð¸Ð³Ñ Ð±Ñ‹Ò»Ð°Ð°Ñ€Ñ‹Ñ‹Ñ‚Ð°], Ñбии быһаарыы.</ref>", "wikieditor-toolbar-help-content-reference-result": "СирÑй тиÑкиһÑ.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ити ÑигÑни Ñбии туттуу", - "wikieditor-toolbar-help-content-rereference-result": "СирÑй тиÑкиһÑ.[1]", + "wikieditor-toolbar-help-content-rereference-result": "СирÑй тиÑкиһÑ.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Быһаарыылары көрдөрүү", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Ð¡Ð¸Ð³Ñ Ð±Ñ‹Ò»Ð°Ð°Ñ€Ñ‹Ñ‹Ñ‚Ð°, Ñбии быһаарыы.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Илии батааһын кÑмин кытта", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Кытааччы аата (ырытыы) 15:54, БÑÑ Ñ‹Ð¹Ñ‹Ð½ 10, 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Кытааччы аата (ырытыы) 15:54, БÑÑ Ñ‹Ð¹Ñ‹Ð½ 10, 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Илии баттааһын", "wikieditor-toolbar-help-content-signature-result": "Кыттааччы аата (ырытыы)", "wikieditor-toolbar-help-content-indent-description": "ОтÑтуп", diff --git a/extensions/WikiEditor/i18n/sc.json b/extensions/WikiEditor/i18n/sc.json index e1b1ab60..f09addcd 100644 --- a/extensions/WikiEditor/i18n/sc.json +++ b/extensions/WikiEditor/i18n/sc.json @@ -166,7 +166,7 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Esempru.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referèntzia", "wikieditor-toolbar-help-content-reference-result": "Testu de sa pàgina.[1]", - "wikieditor-toolbar-help-content-rereference-result": "Testu de sa pàgina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Testu de sa pàgina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Ammustra referèntzias", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Firma cun data e ora", "wikieditor-toolbar-help-content-signature-description": "Firma", diff --git a/extensions/WikiEditor/i18n/scn.json b/extensions/WikiEditor/i18n/scn.json index 8e2aa0fa..e3347688 100644 --- a/extensions/WikiEditor/i18n/scn.json +++ b/extensions/WikiEditor/i18n/scn.json @@ -3,7 +3,9 @@ "authors": [ "Aushulz", "Gmelfi", - "Macofe" + "Macofe", + "Pippinu", + "Sarvaturi" ] }, "wikieditor": "Ntirfazza avanzata di canci di testu wiki", @@ -26,7 +28,7 @@ "wikieditor-toolbar": "Barra dî strummenta di canci", "wikieditor-toolbar-desc": "Barra dî strummenta di canci dâ pàggina cu na megghiu usabbilità", "wikieditor-toolbar-preference": "Abbilita la barra avanzata dî strummenta di canci", - "wikieditor-toolbar-dialogs-preference": "Abbilita li finestri di dialugu pi nsirìri liami, tabbelli e àutri cosi", + "wikieditor-toolbar-dialogs-preference": "Attiva li pruciduri guidati pi nziriri liami e tabbelli e pâ funzioni di arricerca e rimpiazzu", "wikieditor-toolbar-loading": "Caricamentu in corsu...", "wikieditor-toolbar-tool-bold": "Grassettu", "wikieditor-toolbar-tool-bold-example": "Testu in grassettu", @@ -110,7 +112,7 @@ "wikieditor-toolbar-tool-table-preview": "Antiprima", "wikieditor-toolbar-tool-table-insert": "Nsirìsci", "wikieditor-toolbar-tool-table-cancel": "Annulla", - "wikieditor-toolbar-tool-table-toomany": "Cu stu strummentu nun è pussìbbili nsirìri na tabbella cu cchiossai di $1 celli", + "wikieditor-toolbar-tool-table-toomany": "Cu sta finestra di diàlugu nun si ponnu nziriri tabbelli cu cchiossai di 1000 ceddi.", "wikieditor-toolbar-tool-table-invalidnumber": "Nun andicasti nu nùmmuru vâliddu di ligni o di culonni", "wikieditor-toolbar-tool-table-zero": "Nun puoi nsiriri na tabbella senza ligni e/o senza culonni", "wikieditor-toolbar-tool-replace": "Cerca e sustituisci", @@ -124,7 +126,7 @@ "wikieditor-toolbar-tool-replace-button-replaceall": "Sustituisci tutticosi", "wikieditor-toolbar-tool-replace-close": "Chiudi", "wikieditor-toolbar-tool-replace-nomatch": "La tò ricerca nun prudicìu risurtati", - "wikieditor-toolbar-tool-replace-success": "$1 sustituzzioni fatta/fatti", + "wikieditor-toolbar-tool-replace-success": "{{PLURAL:$1|Fatta|Fatti}} $1 sustituzzioni.", "wikieditor-toolbar-tool-replace-emptysearch": "Nun annicasti chidda ca s'havi a circari", "wikieditor-toolbar-tool-replace-invalidregex": "L'esprissioni rigulari misa nun è vàlidda: $1", "wikieditor-toolbar-section-characters": "Carattiri spiciali", @@ -149,7 +151,7 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Testu n grassettu e cursivu'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Testuo n grassettu e cursivu", "wikieditor-toolbar-help-content-ilink-description": "Liami nternu", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Titulu pàggina|Etichetta di culligamentu]]
      [[Titulu pàggina]]", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Tìtulu dâ pàggina|Etichetta dû culligamentu]]
      [[Tìtulu dâ pàggina]]", "wikieditor-toolbar-help-content-ilink-result": "Etichetta di culligamentu
      Tìtulu dâ pàggina", "wikieditor-toolbar-help-content-xlink-description": "Lijami di fora", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Etichetta dû liami]
      [http://www.example.org]
      http://www.example.org", @@ -175,14 +177,14 @@ "wikieditor-toolbar-help-content-file-description": "File ncurpuratu", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Rifirenza", - "wikieditor-toolbar-help-content-reference-syntax": "Testu dâ pàggina.<ref name=\"test\">[http://www.example.org Testu dû culligamentu], testu ca si pò junciri.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Testu dâ pàggina.<ref>[http://www.example.org Testu dû culligamentu], testu ca si pò junciri.</ref>", "wikieditor-toolbar-help-content-reference-result": "Testu dâ pàggina.[1]", "wikieditor-toolbar-help-content-rereference-description": "Usu dâ stissa nota cchiù tardu", - "wikieditor-toolbar-help-content-rereference-result": "Testu dâ pàggina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Testu dâ pàggina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Ammuscia li rifirenzi", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Link text, additional text.
      \n
      1. ^ Testu dû culligamentu, testu ca si pò junciri.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Firma cu data e ura", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nomu di l'utenti (discussioni) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nomu di l'utenti (discussioni) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firma", "wikieditor-toolbar-help-content-signature-result": "Nomu di l'utenti (discussioni)", "wikieditor-toolbar-help-content-indent-description": "Ndintazzioni", diff --git a/extensions/WikiEditor/i18n/shn.json b/extensions/WikiEditor/i18n/shn.json new file mode 100644 index 00000000..18626742 --- /dev/null +++ b/extensions/WikiEditor/i18n/shn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Saosukham" + ] + }, + "wikieditor-toolbar-help-content-named-reference-description": "သႂ်ႇá¸á€­á€¯á€á€ºá‚ˆ á½á€­á€¯á¼á€ºá€¢á€­á€„်" +} diff --git a/extensions/WikiEditor/i18n/shy-latn.json b/extensions/WikiEditor/i18n/shy-latn.json new file mode 100644 index 00000000..fd4623e1 --- /dev/null +++ b/extensions/WikiEditor/i18n/shy-latn.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Vikoula5" + ] + }, + "wikieditor-toolbar-tool-replace-search": "Iruzzi:" +} diff --git a/extensions/WikiEditor/i18n/si.json b/extensions/WikiEditor/i18n/si.json index 38a31138..c22d4ed2 100644 --- a/extensions/WikiEditor/i18n/si.json +++ b/extensions/WikiEditor/i18n/si.json @@ -192,14 +192,14 @@ "wikieditor-toolbar-help-content-file-description": "ක෠වà·à¶¯à·Šà¶¯à·– ගොනුව", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "යොමුව", - "wikieditor-toolbar-help-content-reference-syntax": "පිටු පෙළ.<ref name=\"test\">[http://www.example.org සබà·à¶³à·”ම් පෙළ], අමතර පෙළ.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "පිටු පෙළ.<ref>[http://www.example.org සබà·à¶³à·”ම් පෙළ], අමතර පෙළ.</ref>", "wikieditor-toolbar-help-content-reference-result": "පිටු පෙළ.[1]", "wikieditor-toolbar-help-content-rereference-description": "එකම â€à¶ºà·œà¶¸à·”à·€ අමතර භà·à·€à·’තය", - "wikieditor-toolbar-help-content-rereference-result": "පිටු පෙළ.[1]", + "wikieditor-toolbar-help-content-rereference-result": "පිටු පෙළ.[2]", "wikieditor-toolbar-help-content-showreferences-description": "යොමුවන් පෙන්වන්න", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ සබà·à¶³à·”ම් පෙළ, අමතර පෙළ.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "කà·à¶½ මුද්â€à¶»à·à·€ සමඟ අත්සන", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "පරිà·à·’ලක නà·à¶¸à¶º (කතà·à·€) 15:54, 10 ජූනි 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--පරිà·à·’ලක නà·à¶¸à¶º (කතà·à·€) 15:54, 10 ජූනි 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "අත්සන", "wikieditor-toolbar-help-content-signature-result": "පරිà·à·“ලක නà·à¶¸à¶º (කතà·à·€)", "wikieditor-toolbar-help-content-indent-description": "ඉන්ඩෙන්ට් කිරිම", diff --git a/extensions/WikiEditor/i18n/sk.json b/extensions/WikiEditor/i18n/sk.json index e4e89e8f..ad80fa3d 100644 --- a/extensions/WikiEditor/i18n/sk.json +++ b/extensions/WikiEditor/i18n/sk.json @@ -56,6 +56,7 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "Neplatný názov", "wikieditor-toolbar-tool-link-int-target-status-external": "Externý odkaz", "wikieditor-toolbar-tool-link-int-target-status-loading": "Kontroluje sa existencia stránky...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "RozliÅ¡ovacia stránka", "wikieditor-toolbar-tool-link-int-invalid": "Názov, ktorý ste zadali nie je platný.", "wikieditor-toolbar-tool-link-lookslikeinternal": "URL, ktorý ste zadali vyzerá ako odkaz na inú stránku wiki. Chcete z neho spraviÅ¥ interný odkaz?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Interný odkaz", @@ -178,14 +179,14 @@ "wikieditor-toolbar-help-content-file-description": "Vložený súbor", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Príklad.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Referencie", - "wikieditor-toolbar-help-content-reference-syntax": "Text stránky.<ref name=\"test\">[http://www.example.org Text odkazu], Äalší text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Text stránky.<ref>[http://www.example.org Text odkazu], Äalší text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Text stránky.[1]", "wikieditor-toolbar-help-content-rereference-description": "ÄŽalÅ¡ie použitie rovnakej referencie", - "wikieditor-toolbar-help-content-rereference-result": "Text stránky.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Text stránky.[2]", "wikieditor-toolbar-help-content-showreferences-description": "ZobraziÅ¥ referencie", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Text odkazu, Äalší text.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Podpis s Äasom", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Používateľské meno (talk) 15:54, 10. jún 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Používateľské meno (talk) 15:54, 10. jún 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Podpis", "wikieditor-toolbar-help-content-signature-result": "Používateľské meno (diskusia)", "wikieditor-toolbar-help-content-indent-description": "Odsadenie", diff --git a/extensions/WikiEditor/i18n/sl.json b/extensions/WikiEditor/i18n/sl.json index 545586e0..f4eca7f6 100644 --- a/extensions/WikiEditor/i18n/sl.json +++ b/extensions/WikiEditor/i18n/sl.json @@ -27,7 +27,6 @@ "wikieditor-toolbar-desc": "Urejevalna orodna vrstica z veÄjo uporabnostjo", "wikieditor-toolbar-preference": "OmogoÄi izboljÅ¡ano urejevalno vrstico", "wikieditor-toolbar-dialogs-preference": "OmogoÄi Äarovnike za vstavljanje povezav in tabel, kakor tudi funkcijo iÅ¡Äi in zamenjaj", - "wikieditor-toolbar-hidesig": "Skrij gumb za podpis s strani v glavnem imenskem prostoru", "wikieditor-toolbar-loading": "Nalaganje ...", "wikieditor-toolbar-tool-bold": "Krepko", "wikieditor-toolbar-tool-bold-example": "Krepko besedilo", @@ -122,7 +121,7 @@ "wikieditor-toolbar-tool-table-preview": "Predogled", "wikieditor-toolbar-tool-table-insert": "Vstavi", "wikieditor-toolbar-tool-table-cancel": "PrekliÄi", - "wikieditor-toolbar-tool-table-toomany": "Vstavljanje tabele z veÄ kot 1000 celicami s tem obrazcem ni mogoÄe.", + "wikieditor-toolbar-tool-table-toomany": "Vstavljanje tabele z veÄ kot $1 {{PLURAL:$1|celico|celicama|celicami}} s tem obrazcem ni mogoÄe.", "wikieditor-toolbar-tool-table-invalidnumber": "Niste vnesli veljavnega Å¡tevila vrstic ali stolpcev.", "wikieditor-toolbar-tool-table-zero": "Ne morete vstaviti tabele z niÄ vrsticami ali stolpci.", "wikieditor-toolbar-tool-replace": "Zamenjaj", @@ -140,28 +139,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "Niste vnesli niÄesar za iskanje.", "wikieditor-toolbar-tool-replace-invalidregex": "ObiÄajni izraz, ki ste ga vnesli, je neveljaven: $1", "wikieditor-toolbar-section-characters": "Posebni znaki", - "wikieditor-toolbar-characters-page-latin": "Latinica", - "wikieditor-toolbar-characters-page-latinextended": "RazÅ¡irjena latinica", - "wikieditor-toolbar-characters-page-ipa": "Mednarodna fonetiÄna abeceda (IPA)", - "wikieditor-toolbar-characters-page-symbols": "Simboli", - "wikieditor-toolbar-characters-page-greek": "GrÅ¡ki", - "wikieditor-toolbar-characters-page-cyrillic": "Cirilica", - "wikieditor-toolbar-characters-page-arabic": "Arabski", - "wikieditor-toolbar-characters-page-arabicextended": "RazÅ¡irjena arabÅ¡Äina", - "wikieditor-toolbar-characters-page-persian": "Perzijski", - "wikieditor-toolbar-characters-page-hebrew": "Hebrejski", - "wikieditor-toolbar-characters-page-bangla": "BengalÅ¡Äina", - "wikieditor-toolbar-characters-page-tamil": "tamilÅ¡Äina", - "wikieditor-toolbar-characters-page-telugu": "Telugijski", - "wikieditor-toolbar-characters-page-sinhala": "SingalÅ¡Äina", - "wikieditor-toolbar-characters-page-gujarati": "Gudžarati", - "wikieditor-toolbar-characters-page-devanagari": "Devanagari", - "wikieditor-toolbar-characters-page-thai": "Tajski", - "wikieditor-toolbar-characters-page-lao": "LaoÅ¡ki", - "wikieditor-toolbar-characters-page-khmer": "Kmerski", - "wikieditor-toolbar-characters-endash": "navaden pomiÅ¡ljaj", - "wikieditor-toolbar-characters-emdash": "dolgi pomiÅ¡ljaj", - "wikieditor-toolbar-characters-minus": "znak za minus", "wikieditor-toolbar-section-help": "PomoÄ", "wikieditor-toolbar-help-heading-description": "Opis", "wikieditor-toolbar-help-heading-syntax": "Kaj vtipkaÅ¡", @@ -183,8 +160,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Krepko in ležeÄe besedilo'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Krepko in ležeÄe besedilo", "wikieditor-toolbar-help-content-ilink-description": "Notranja povezava", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Naslov strani|Oznaka strani]]
      [[Naslov strani]]", - "wikieditor-toolbar-help-content-ilink-result": "Oznaka strani
      Naslov strani", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Naslov strani]]
      [[Naslov strani|Oznaka povezave]]", + "wikieditor-toolbar-help-content-ilink-result": "Naslov strani
      Oznaka povezave", "wikieditor-toolbar-help-content-xlink-description": "Zunanja povezava", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Oznaka povezave]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Oznaka povezave
      [1]
      http://www.example.org", @@ -210,14 +187,17 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Primer.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Napis pod sliko", "wikieditor-toolbar-help-content-reference-description": "Sprotna opomba", - "wikieditor-toolbar-help-content-reference-syntax": "Besedilo strani. <ref name="test"> [http://www.example.org Oznaka povezave], dodatno besedilo. </ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Besedilo strani. <ref> [http://www.example.org Oznaka povezave], dodatno besedilo. </ref>", "wikieditor-toolbar-help-content-reference-result": "Besedilo strani. [1]", + "wikieditor-toolbar-help-content-named-reference-description": "Poimenovan sklic", + "wikieditor-toolbar-help-content-named-reference-syntax": "Besedilo strani.<ref name=\"test\">[http://www.example.org Besedilo povezave]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Besedilo strani.[2]", "wikieditor-toolbar-help-content-rereference-description": "Ponovna uporaba iste sprotne opombe", - "wikieditor-toolbar-help-content-rereference-result": "Besedilo strani. [1]", + "wikieditor-toolbar-help-content-rereference-result": "Besedilo strani. [2]", "wikieditor-toolbar-help-content-showreferences-description": "Prikaži sprotne opombe", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Oznaka povezave, dodatno besedilo.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Besedilo povezave, dodatno besedilo.
      2. ^ Besedilo povezave
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Podpis z datumom", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Uporabniško ime (pogovor) 15:54, 10. junij 2009 (CEST)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Uporabniško ime (pogovor) 15:54, 10. junij 2009 (CEST)", "wikieditor-toolbar-help-content-signature-description": "Podpis", "wikieditor-toolbar-help-content-signature-result": "Uporabniško ime (pogovor)", "wikieditor-toolbar-help-content-indent-description": "Zamik", diff --git a/extensions/WikiEditor/i18n/sq.json b/extensions/WikiEditor/i18n/sq.json index 7ab07a76..83fc334c 100644 --- a/extensions/WikiEditor/i18n/sq.json +++ b/extensions/WikiEditor/i18n/sq.json @@ -4,7 +4,8 @@ "Mikullovci11", "Olsi", "Nemo bis", - "Macofe" + "Macofe", + "Ammartivari" ] }, "wikieditor": "Editori i përparuar", @@ -20,7 +21,7 @@ "wikieditor-publish-button-cancel": "Anulo", "wikieditor-publish-dialog-title": "Publikimi për {{SITENAME}}", "wikieditor-publish-dialog-summary": "Përmbledhje (përshkrim të shkurtër e ndryshimeve që e keni bërë):", - "wikieditor-publish-dialog-minor": "Ky është një redaktim i vogël", + "wikieditor-publish-dialog-minor": "Redaktim i vogël", "wikieditor-publish-dialog-watch": "Mbikqyre këtë faqe", "wikieditor-publish-dialog-publish": "Publikuar", "wikieditor-publish-dialog-goback": "Kthehu", @@ -175,14 +176,14 @@ "wikieditor-toolbar-help-content-file-description": "Vendos një figurë", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Burimi", - "wikieditor-toolbar-help-content-reference-syntax": "Teksti i Faqës.<ref name=\"test\">[http://www.shembull.org Teksti i lidhjes], Tekst shtues.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Teksti i Faqës.<ref>[http://www.shembull.org Teksti i lidhjes], Tekst shtues.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teksti i Faqës.[1]", "wikieditor-toolbar-help-content-rereference-description": "Përdorim shtesë i së njëjtës referencë", - "wikieditor-toolbar-help-content-rereference-result": "Teksti i Faqës.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teksti i Faqës.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Burim tregues", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Link text, additional text.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Nënshkrimi dhe vula e kohës", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Emri i përdoruesit (diskuto) 15:54, 10 Qershor 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Emri i përdoruesit (diskuto) 15:54, 10 Qershor 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firma", "wikieditor-toolbar-help-content-signature-result": "Emri i përdoruesit (diskuto)", "wikieditor-toolbar-help-content-indent-description": "Largoj nga ana e faqes", diff --git a/extensions/WikiEditor/i18n/sr-ec.json b/extensions/WikiEditor/i18n/sr-ec.json index 87f8c5a7..113a05da 100644 --- a/extensions/WikiEditor/i18n/sr-ec.json +++ b/extensions/WikiEditor/i18n/sr-ec.json @@ -16,7 +16,7 @@ "wikieditor": "Ðапредно окружење за уређивање вики-текÑта", "wikieditor-desc": "Пружа прошириво кориÑничко окружење за уређивање викитекÑта и много модула Ñа бројним могућноÑтима", "wikieditor-wikitext-tab": "ВикитекÑÑ‚", - "wikieditor-loading": "Учитавање", + "wikieditor-loading": "Учитавање...", "wikieditor-preview-preference": "Омогући упоредни преглед", "wikieditor-preview-tab": "Преглед", "wikieditor-preview-changes-tab": "Измене", @@ -33,12 +33,11 @@ "wikieditor-toolbar": "Ðлатна трака за уређивање", "wikieditor-toolbar-desc": "Ðлатна трака за уређивање Ñ Ð¿Ð¾Ð±Ð¾Ñ™ÑˆÐ°Ð½Ð¾Ð¼ употребљивошћу", "wikieditor-toolbar-preference": "Омогући побољшану траку за уређивање", - "wikieditor-toolbar-dialogs-preference": "Омогући прозорчад за убацивање веза, табела и више", - "wikieditor-toolbar-hidesig": "Сакриј дугме за Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ð½Ð° Ñтраницама у главном именÑком проÑтору", + "wikieditor-toolbar-dialogs-preference": "Омогући чаробњаке за убацивање веза, табела и више", "wikieditor-toolbar-loading": "Учитавам…", "wikieditor-toolbar-tool-bold": "Подебљано", "wikieditor-toolbar-tool-bold-example": "Подебљан текÑÑ‚", - "wikieditor-toolbar-tool-italic": "Курзив", + "wikieditor-toolbar-tool-italic": "ИÑкошено", "wikieditor-toolbar-tool-italic-example": "ИÑкошени текÑÑ‚", "wikieditor-toolbar-tool-ilink": "Унутрашња веза", "wikieditor-toolbar-tool-ilink-example": "ÐаÑлов везе", @@ -61,12 +60,13 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "ÐеиÑправан наÑлов", "wikieditor-toolbar-tool-link-int-target-status-external": "Спољашња веза", "wikieditor-toolbar-tool-link-int-target-status-loading": "Провера поÑтојања Ñтранице...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "Вишезначна Ñтраница", "wikieditor-toolbar-tool-link-int-invalid": "Ðаведени наÑлов је неиÑправан.", "wikieditor-toolbar-tool-link-lookslikeinternal": "Спољашња веза коју Ñте унели изгледа као веза према другој вики Ñтраници. Да ли желите да је промените у унутрашњу везу?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Унутрашња веза", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Спољашња веза", "wikieditor-toolbar-tool-link-empty": "ÐиÑта унели ништа за повезивање.", - "wikieditor-toolbar-tool-file": "Уграђена датотека", + "wikieditor-toolbar-tool-file": "Убацивање датотеке", "wikieditor-toolbar-tool-file-example": "Пример.jpg", "wikieditor-toolbar-tool-file-title": "Убацивање датотеке", "wikieditor-toolbar-file-target": "Ðазив датотеке:", @@ -75,6 +75,7 @@ "wikieditor-toolbar-file-float": "Позиција:", "wikieditor-toolbar-file-default": "(подразумевано)", "wikieditor-toolbar-file-format": "Формат:", + "wikieditor-toolbar-file-format-none": "ништа", "wikieditor-toolbar-tool-file-insert": "Убаци", "wikieditor-toolbar-tool-file-cancel": "Откажи", "wikieditor-toolbar-tool-reference": "Ðавод", @@ -97,7 +98,7 @@ "wikieditor-toolbar-tool-ulist-example": "Ставка попиÑа Ñ Ð¾Ð·Ð½Ð°ÐºÐ°Ð¼Ð°", "wikieditor-toolbar-tool-olist": "ÐумериÑани ÑпиÑак", "wikieditor-toolbar-tool-olist-example": "Ставка нумериÑаног ÑпиÑка", - "wikieditor-toolbar-tool-nowiki": "Без вики обликовања", + "wikieditor-toolbar-tool-nowiki": "Без викиобликовања", "wikieditor-toolbar-tool-nowiki-example": "Убаците необликован текÑÑ‚ овде", "wikieditor-toolbar-tool-redirect": "ПреуÑмерење", "wikieditor-toolbar-tool-redirect-example": "Име циљне Ñтранице", @@ -128,7 +129,7 @@ "wikieditor-toolbar-tool-table-insert": "Убаци", "wikieditor-toolbar-tool-table-cancel": "Откажи", "wikieditor-toolbar-tool-table-example-text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec purus diam. Sed aliquam imperdiet nunc quis lacinia. Donec rutrum consectetur placerat. Sed volutpat neque non purus faucibus id ultricies enim euismod.", - "wikieditor-toolbar-tool-table-toomany": "Ðе можете да убацујете табеле Ñ Ð²Ð¸ÑˆÐµ од $1 ћелија Ñ Ð¾Ð²Ð¸Ð¼ прозорчетом.", + "wikieditor-toolbar-tool-table-toomany": "Ðе можете да убацујете табеле Ñ Ð²Ð¸ÑˆÐµ од $1 {{PLURAL:$1|ћелије|ћелија}} Ñ Ð¾Ð²Ð¸Ð¼ прозорчетом.", "wikieditor-toolbar-tool-table-invalidnumber": "ÐиÑте унели валидан број редова и колона", "wikieditor-toolbar-tool-table-zero": "Ðе можете да унеÑете табелу Ñа 0 редова или колона.", "wikieditor-toolbar-tool-replace": "Тражи и замени", @@ -142,7 +143,7 @@ "wikieditor-toolbar-tool-replace-button-replaceall": "Замени Ñве", "wikieditor-toolbar-tool-replace-close": "Затвори", "wikieditor-toolbar-tool-replace-nomatch": "Претрага није пронашла резултате.", - "wikieditor-toolbar-tool-replace-success": "Ðаправљених замена: $1.", + "wikieditor-toolbar-tool-replace-success": "Ðаправљених {{PLURAL:$1|замена}}: $1.", "wikieditor-toolbar-tool-replace-emptysearch": "ÐиÑте унели ништа за претрагу.", "wikieditor-toolbar-tool-replace-invalidregex": "Израз који Ñте унели није иÑправан: $1", "wikieditor-toolbar-section-characters": "ПоÑебни знакови", @@ -155,7 +156,7 @@ "wikieditor-toolbar-help-page-heading": "ÐаÑлови", "wikieditor-toolbar-help-page-list": "СпиÑкови", "wikieditor-toolbar-help-page-file": "Датотеке", - "wikieditor-toolbar-help-page-reference": "Ðаводи", + "wikieditor-toolbar-help-page-reference": "Референце", "wikieditor-toolbar-help-page-discussion": "Разговор", "wikieditor-toolbar-help-content-italic-description": "ИÑкошено", "wikieditor-toolbar-help-content-italic-syntax": "''ИÑкошени текÑÑ‚''", @@ -167,10 +168,11 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Подебљани и иÑкошени текÑÑ‚'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Подебљани и иÑкошени текÑÑ‚", "wikieditor-toolbar-help-content-ilink-description": "Унутрашња веза", - "wikieditor-toolbar-help-content-ilink-syntax": "[[ÐаÑлов Ñтранице|ÐаÑлов везе]]
      [[ÐаÑлов Ñтранице]]", - "wikieditor-toolbar-help-content-ilink-result": "Ðазив везе
      ÐаÑлов Ñтранице", + "wikieditor-toolbar-help-content-ilink-syntax": "[[ÐаÑлов Ñтранице]]
      [[ÐаÑлов Ñтранице|Ðазив везе]]", + "wikieditor-toolbar-help-content-ilink-result": "ÐаÑлов Ñтранице
      Ðазив везе", "wikieditor-toolbar-help-content-xlink-description": "Спољашња веза", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.primer.org Ðазив везе]
      [http://www.primer.org]
      http://www.primer.org", + "wikieditor-toolbar-help-content-xlink-result": "Ðазив везе
      [1]
      http://www.primer.org", "wikieditor-toolbar-help-content-heading2-description": "ÐаÑлов другог нивоа", "wikieditor-toolbar-help-content-heading2-syntax": "== ТекÑÑ‚ наÑлова ==", "wikieditor-toolbar-help-content-heading2-result": "

      ТекÑÑ‚ наÑлова

      ", @@ -189,19 +191,23 @@ "wikieditor-toolbar-help-content-olist-description": "ÐумериÑани ÑпиÑак", "wikieditor-toolbar-help-content-olist-syntax": "# Ставка
      # Ставка", "wikieditor-toolbar-help-content-olist-result": "
      1. Ставка
      2. Ставка
      ", - "wikieditor-toolbar-help-content-file-description": "Уграђена датотека", + "wikieditor-toolbar-help-content-file-description": "Убацивање датотеке", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Пример.png|$2|$3]]", - "wikieditor-toolbar-help-content-reference-description": "Ðавод", - "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñтранице.<ref name=\"test\">[http://www.primer.org ТекÑÑ‚ везе], додатни текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-file-caption": "ÐžÐ¿Ð¸Ñ Ñлике", + "wikieditor-toolbar-help-content-reference-description": "Референца", + "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñтранице.<ref>[http://www.primer.org ТекÑÑ‚ везе], додатни текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "ТекÑÑ‚ Ñтранице.[1]", - "wikieditor-toolbar-help-content-rereference-description": "Додатна употреба иÑтог навода", + "wikieditor-toolbar-help-content-named-reference-description": "Именована референца", + "wikieditor-toolbar-help-content-named-reference-syntax": "ТекÑÑ‚ Ñтранице.<ref name=\"test\">[http://www.primer.org ТекÑÑ‚ везе]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "ТекÑÑ‚ Ñтранице.[2]", + "wikieditor-toolbar-help-content-rereference-description": "Додатна употреба иÑте референце", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"проба\" />", - "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñтранице.[1]", - "wikieditor-toolbar-help-content-showreferences-description": "Прикажи наводе", + "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñтранице.[2]", + "wikieditor-toolbar-help-content-showreferences-description": "Приказивање референци", "wikieditor-toolbar-help-content-showreferences-syntax": "<наводи />", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ везе, додатни текÑÑ‚.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ везе, додатни текÑÑ‚.
      2. ^ ТекÑÑ‚ везе
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ÐŸÐ¾Ñ‚Ð¿Ð¸Ñ Ñ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¸Ð¼ временом", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "КориÑник (разговор) 15:54, 10. јун 2009. (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--КориÑник (разговор) 15:54, 10. јун 2009. (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПотпиÑ", "wikieditor-toolbar-help-content-signature-result": "КориÑничко име (разговор)", "wikieditor-toolbar-help-content-indent-description": "Увлачење", diff --git a/extensions/WikiEditor/i18n/sr-el.json b/extensions/WikiEditor/i18n/sr-el.json index 6e5740e4..952258fd 100644 --- a/extensions/WikiEditor/i18n/sr-el.json +++ b/extensions/WikiEditor/i18n/sr-el.json @@ -12,7 +12,7 @@ "wikieditor": "Napredno suÄelje ureÄ‘ivanja vikiteksta", "wikieditor-desc": "Pruža proÅ¡irivo korisniÄko okruženje za ureÄ‘ivanje vikiteksta i mnogo modula sa brojnim mogućnostima", "wikieditor-wikitext-tab": "Vikitekst", - "wikieditor-loading": "UÄitavanje", + "wikieditor-loading": "UÄitavanje...", "wikieditor-preview-preference": "Omogući uporedni pregled", "wikieditor-preview-tab": "Pretpregled", "wikieditor-preview-changes-tab": "Izmene", @@ -29,17 +29,16 @@ "wikieditor-toolbar": "Alatna traka za ureÄ‘ivanje", "wikieditor-toolbar-desc": "Alatna traka za ureÄ‘ivanje s poboljÅ¡anom upotrebljivošću", "wikieditor-toolbar-preference": "Omogući poboljÅ¡anu traku za ureÄ‘ivanje", - "wikieditor-toolbar-dialogs-preference": "Omogući prozorÄad za ubacivanje veza, tabela i viÅ¡e", - "wikieditor-toolbar-hidesig": "Sakrij dugme za potpis na stranicama u glavnom imenskom prostoru", + "wikieditor-toolbar-dialogs-preference": "Omogući Äarobnjake za ubacivanje veza, tabela i viÅ¡e", "wikieditor-toolbar-loading": "UÄitavanje...", "wikieditor-toolbar-tool-bold": "Podebljan", "wikieditor-toolbar-tool-bold-example": "Podebljan tekst", - "wikieditor-toolbar-tool-italic": "Korziv", - "wikieditor-toolbar-tool-italic-example": "Kurzivan tekst", + "wikieditor-toolbar-tool-italic": "IskoÅ¡eno", + "wikieditor-toolbar-tool-italic-example": "IskoÅ¡eni tekst", "wikieditor-toolbar-tool-ilink": "UnutraÅ¡nja veza", "wikieditor-toolbar-tool-ilink-example": "Naslov veze", "wikieditor-toolbar-tool-xlink": "Spoljna veza (s predmetkom http://)", - "wikieditor-toolbar-tool-xlink-example": "http://www.example.com naslov veze", + "wikieditor-toolbar-tool-xlink-example": "http://www.primer.com naslov veze", "wikieditor-toolbar-tool-link": "Veza", "wikieditor-toolbar-tool-link-title": "Ubaci vezu", "wikieditor-toolbar-tool-link-int": "Prema viki stranici", @@ -48,7 +47,7 @@ "wikieditor-toolbar-tool-link-int-text": "Tekst veze:", "wikieditor-toolbar-tool-link-int-text-tooltip": "Tekst za prikaz", "wikieditor-toolbar-tool-link-ext": "Prema spoljnoj stranici", - "wikieditor-toolbar-tool-link-ext-target": "Putanja veze (URL):", + "wikieditor-toolbar-tool-link-ext-target": "Adresa veze:", "wikieditor-toolbar-tool-link-ext-text": "Tekst veze:", "wikieditor-toolbar-tool-link-insert": "Ubaci vezu", "wikieditor-toolbar-tool-link-cancel": "Otkaži", @@ -57,12 +56,13 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "PogreÅ¡an naslov", "wikieditor-toolbar-tool-link-int-target-status-external": "SpoljaÅ¡nja veza", "wikieditor-toolbar-tool-link-int-target-status-loading": "Provera postojanja stranice...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "ViÅ¡eznaÄna stranica", "wikieditor-toolbar-tool-link-int-invalid": "Naslov koji ste izabrali nije validan", "wikieditor-toolbar-tool-link-lookslikeinternal": "SpoljaÅ¡nja veza koju ste uneli izgleda kao veza prema drugoj viki stranici. Da li želite da je promenite u unutraÅ¡nju vezu?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "UnutraÅ¡nja veza", "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "SpoljaÅ¡nja veza", "wikieditor-toolbar-tool-link-empty": "Nista uneli niÅ¡ta za povezivanje.", - "wikieditor-toolbar-tool-file": "UgraÄ‘ena datoteka", + "wikieditor-toolbar-tool-file": "Ubacivanje datoteke", "wikieditor-toolbar-tool-file-example": "Primer.jpg", "wikieditor-toolbar-tool-file-title": "Ubacivanje datoteke", "wikieditor-toolbar-file-target": "Naziv datoteke:", @@ -71,6 +71,7 @@ "wikieditor-toolbar-file-float": "Pozicija:", "wikieditor-toolbar-file-default": "(podrazumevano)", "wikieditor-toolbar-file-format": "Format:", + "wikieditor-toolbar-file-format-none": "niÅ¡ta", "wikieditor-toolbar-tool-file-insert": "Ubaci", "wikieditor-toolbar-tool-file-cancel": "Otkaži", "wikieditor-toolbar-tool-reference": "Referenca", @@ -93,7 +94,7 @@ "wikieditor-toolbar-tool-ulist-example": "Stavka popisa s oznakama", "wikieditor-toolbar-tool-olist": "Numerisani spisak", "wikieditor-toolbar-tool-olist-example": "Stavka numerisanog spiska", - "wikieditor-toolbar-tool-nowiki": "Bez viki oblikovanja", + "wikieditor-toolbar-tool-nowiki": "Bez vikioblikovanja", "wikieditor-toolbar-tool-nowiki-example": "Ubacite neoblikovan tekst ovde", "wikieditor-toolbar-tool-redirect": "Preusmerenje", "wikieditor-toolbar-tool-redirect-example": "Ime ciljne stranice", @@ -124,7 +125,7 @@ "wikieditor-toolbar-tool-table-insert": "Ubaci", "wikieditor-toolbar-tool-table-cancel": "Otkaži", "wikieditor-toolbar-tool-table-example-text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec purus diam. Sed aliquam imperdiet nunc quis lacinia. Donec rutrum consectetur placerat. Sed volutpat neque non purus faucibus id ultricies enim euismod.", - "wikieditor-toolbar-tool-table-toomany": "Ne možete da ubacujete tabele s viÅ¡e od $1 ćelija s ovim prozorÄetom.", + "wikieditor-toolbar-tool-table-toomany": "Ne možete da ubacujete tabele s viÅ¡e od $1 {{PLURAL:$1|ćelije|ćelija}} s ovim prozorÄetom.", "wikieditor-toolbar-tool-table-invalidnumber": "Niste uneli validan broj redova i kolona", "wikieditor-toolbar-tool-table-zero": "Ne možete da unesete tabelu sa 0 redova ili kolona.", "wikieditor-toolbar-tool-replace": "Traži i zameni", @@ -138,7 +139,7 @@ "wikieditor-toolbar-tool-replace-button-replaceall": "Zameni sve", "wikieditor-toolbar-tool-replace-close": "Zatvori", "wikieditor-toolbar-tool-replace-nomatch": "Pretraga nije pronaÅ¡la rezultate.", - "wikieditor-toolbar-tool-replace-success": "Napravljenih zamena: $1.", + "wikieditor-toolbar-tool-replace-success": "Napravljenih {{PLURAL:$1|zamena}}: $1.", "wikieditor-toolbar-tool-replace-emptysearch": "Niste uneli niÅ¡ta za pretragu.", "wikieditor-toolbar-tool-replace-invalidregex": "Izraz koji ste uneli nije ispravan: $1", "wikieditor-toolbar-section-characters": "Posebni znakovi", @@ -163,10 +164,11 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Podebljani & iskoÅ¡eni tekst'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Podebljan & iskoÅ¡en tekst", "wikieditor-toolbar-help-content-ilink-description": "UnutraÅ¡nja veza", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Naslov stranice|Naslov veze]]
      [[Naslov stranice]]", - "wikieditor-toolbar-help-content-ilink-result": "Naziv veze
      Naslov stranice", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Naslov stranice]]
      [[Naslov stranice|Naziv veze]]", + "wikieditor-toolbar-help-content-ilink-result": "Naslov stranice
      Naziv veze", "wikieditor-toolbar-help-content-xlink-description": "Spoljašnja veza", - "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.primer.org Naslov veze]
      [http://www.primer.org]
      http://www.primer.org", + "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.primer.org Naziv veze]
      [http://www.primer.org]
      http://www.primer.org", + "wikieditor-toolbar-help-content-xlink-result": "Naziv veze
      [1]
      http://www.primer.org", "wikieditor-toolbar-help-content-heading2-description": "Odeljak drugog nivoa", "wikieditor-toolbar-help-content-heading2-syntax": "== Naslov odeljka ==", "wikieditor-toolbar-help-content-heading2-result": "

      Naslov odeljka

      ", @@ -185,19 +187,23 @@ "wikieditor-toolbar-help-content-olist-description": "Numerisana lista", "wikieditor-toolbar-help-content-olist-syntax": "# Stavka
      # Stavka", "wikieditor-toolbar-help-content-olist-result": "
      1. Stavka
      2. Stavka
      ", - "wikieditor-toolbar-help-content-file-description": "Ugrađena datoteka", - "wikieditor-toolbar-help-content-file-syntax": "[[$1:Primjer.png|$2|$3]]", - "wikieditor-toolbar-help-content-reference-description": "Reference", - "wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.<ref name=\"test\">[http://www.primer.org Tekst veze], dodatni tekst.</ref>", + "wikieditor-toolbar-help-content-file-description": "Ubacivanje datoteke", + "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Opis slike", + "wikieditor-toolbar-help-content-reference-description": "Referenca", + "wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.<ref>[http://www.primer.org Tekst veze], dodatni tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Tekst stranice.[1]", - "wikieditor-toolbar-help-content-rereference-description": "Dodatna upotreba istog navoda", + "wikieditor-toolbar-help-content-named-reference-description": "Imenovana referenca", + "wikieditor-toolbar-help-content-named-reference-syntax": "Tekst stranice.<ref name=\"test\">[http://www.primer.org Tekst veze]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Tekst stranice.[2]", + "wikieditor-toolbar-help-content-rereference-description": "Dodatna upotreba iste reference", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"proba\" />", - "wikieditor-toolbar-help-content-rereference-result": "Tekst stranice.[1]", - "wikieditor-toolbar-help-content-showreferences-description": "Prikaži reference", + "wikieditor-toolbar-help-content-rereference-result": "Tekst stranice.[2]", + "wikieditor-toolbar-help-content-showreferences-description": "Prikazivanje referenci", "wikieditor-toolbar-help-content-showreferences-syntax": "<navodi />", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Tekst veze, dodatni tekst.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Tekst veze, dodatni tekst.
      2. ^ Tekst veze
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Potpis s trenutnim vremenom", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Korisnik (razgovor) 15:54, 10. jun 2009. (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Korisnik (razgovor) 15:54, 10. jun 2009. (UTC)", "wikieditor-toolbar-help-content-signature-description": "Potpis", "wikieditor-toolbar-help-content-signature-result": "KorisniÄko ime (razgovor)", "wikieditor-toolbar-help-content-indent-description": "UvlaÄenje", diff --git a/extensions/WikiEditor/i18n/su.json b/extensions/WikiEditor/i18n/su.json index a659deb8..440ff4cc 100644 --- a/extensions/WikiEditor/i18n/su.json +++ b/extensions/WikiEditor/i18n/su.json @@ -153,13 +153,13 @@ "wikieditor-toolbar-help-content-olist-description": "Béréndélan nomer", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Conto.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Rujukan", - "wikieditor-toolbar-help-content-reference-syntax": "Téks kaca.<ref name=\"test\">[http://www.conto.org Téks tutumbu], téks panambih.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Téks kaca.<ref>[http://www.conto.org Téks tutumbu], téks panambih.</ref>", "wikieditor-toolbar-help-content-reference-result": "Téks kaca.[1]", - "wikieditor-toolbar-help-content-rereference-result": "Téks kaca.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Téks kaca.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Témbongkeun rujukan", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Téks tutumbu, téks panambih.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Tandatangan jeung titimangsa", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Sandiasma (obrolan) 15:54, 10 Juni 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Sandiasma (obrolan) 15:54, 10 Juni 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Tandatangan", "wikieditor-toolbar-help-content-signature-result": "Sandiasma (obrolan)", "wikieditor-toolbar-help-content-indent-description": "Ngelok", diff --git a/extensions/WikiEditor/i18n/sv.json b/extensions/WikiEditor/i18n/sv.json index a7a5ffd9..043111c6 100644 --- a/extensions/WikiEditor/i18n/sv.json +++ b/extensions/WikiEditor/i18n/sv.json @@ -37,7 +37,6 @@ "wikieditor-toolbar-desc": "Redigeringsverktygsrad med utökad användbarhet", "wikieditor-toolbar-preference": "Aktivera utökad redigeringsverktygsrad", "wikieditor-toolbar-dialogs-preference": "Aktivera guider för att lägga in länkar, tabeller såväl som sök- och ersättningsfunktionen", - "wikieditor-toolbar-hidesig": "Dölj knappen signatur på sidor i huvudnamnrymden", "wikieditor-toolbar-loading": "Laddar...", "wikieditor-toolbar-tool-bold": "Fet", "wikieditor-toolbar-tool-bold-example": "Fet text", @@ -132,7 +131,7 @@ "wikieditor-toolbar-tool-table-preview": "Förhandsgranska", "wikieditor-toolbar-tool-table-insert": "Infoga", "wikieditor-toolbar-tool-table-cancel": "Avbryt", - "wikieditor-toolbar-tool-table-toomany": "Att sätta in en tabell med fler än 1000 celler är inte möjligt med denna dialog.", + "wikieditor-toolbar-tool-table-toomany": "Att sätta in en tabell med fler än $1 {{PLURAL:$1|celler}} är inte möjligt med denna dialog.", "wikieditor-toolbar-tool-table-invalidnumber": "Du har inte angett ett giltigt antal rader eller kolumner.", "wikieditor-toolbar-tool-table-zero": "Du kan inte sätta in en tabell med noll rader eller kolumner.", "wikieditor-toolbar-tool-replace": "Sök och ersätt", @@ -171,8 +170,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Fet & kursiv text'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Fet & kursiv text", "wikieditor-toolbar-help-content-ilink-description": "Intern länk", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Sidtitel|Länktext]]
      [[Sidtitel]]", - "wikieditor-toolbar-help-content-ilink-result": "Länktext
      Sidtitel", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Sidtitel]]
      [[Sidtitel|Länktext]]", + "wikieditor-toolbar-help-content-ilink-result": "Sidtitel
      Länktext", "wikieditor-toolbar-help-content-xlink-description": "Extern länk", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.exeample.org Länktext]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Länktext
      [1]
      http://www.example.org", @@ -198,14 +197,14 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exempel.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "Bildtext", "wikieditor-toolbar-help-content-reference-description": "Referens", - "wikieditor-toolbar-help-content-reference-syntax": "Brödtext.<ref name=\"test\">[http://www.example.org Länktext], ytterligare text.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Brödtext.<ref>[http://www.example.org Länktext], ytterligare text.</ref>", "wikieditor-toolbar-help-content-reference-result": "Brödtext.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ytterligare användning av samma referens", - "wikieditor-toolbar-help-content-rereference-result": "Brödtext.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Brödtext.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Visa referenser", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Länktext, ytterligare text.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Din signatur med tidsstämpel", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Användarnamn (diskussion) 10 juni 2009 kl. 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Användarnamn (diskussion) 10 juni 2009 kl. 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Signatur", "wikieditor-toolbar-help-content-signature-result": "Användarnamn (diskussion)", "wikieditor-toolbar-help-content-indent-description": "Indrag", diff --git a/extensions/WikiEditor/i18n/sw.json b/extensions/WikiEditor/i18n/sw.json index d6c4df9e..56e9d490 100644 --- a/extensions/WikiEditor/i18n/sw.json +++ b/extensions/WikiEditor/i18n/sw.json @@ -180,14 +180,14 @@ "wikieditor-toolbar-help-content-file-description": "Ingiza faili", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Marejeo", - "wikieditor-toolbar-help-content-reference-syntax": "Maandishi ya ukurasa.<ref name=\"mfano\">[http://www.example.org Maandishi ya kiungo], maandishi mengine.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Maandishi ya ukurasa.<ref>[http://www.example.org Maandishi ya kiungo], maandishi mengine.</ref>", "wikieditor-toolbar-help-content-reference-result": "Maandiko.[1]", "wikieditor-toolbar-help-content-rereference-description": "Kutumia marejeo fulani kwa mara nyingine", - "wikieditor-toolbar-help-content-rereference-result": "Maandiko.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Maandiko.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Onyesha marejeo", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Maandishi ya kiungo, maandishi mengine.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Sahihi pamoja na stempu ya saa", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Jina la mtumiaji (majadiliano) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Jina la mtumiaji (majadiliano) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Sahihi", "wikieditor-toolbar-help-content-signature-result": "Jina la mtumiaji (majadiliano)", "wikieditor-toolbar-help-content-indent-description": "Jongeza ndani", diff --git a/extensions/WikiEditor/i18n/ta.json b/extensions/WikiEditor/i18n/ta.json index e5b820b7..d34998ae 100644 --- a/extensions/WikiEditor/i18n/ta.json +++ b/extensions/WikiEditor/i18n/ta.json @@ -9,7 +9,8 @@ "TRYPPN", "செலà¯à®µà®¾", "மதனாஹரனà¯", - "Macofe" + "Macofe", + "Shrikarsan" ] }, "wikieditor": "மேமà¯à®ªà®Ÿà¯à®Ÿ விகà¯à®•à®¿à®¯à¯à®°à¯ˆà®¤à¯ தொகà¯à®ªà¯à®ªà¯ இடைமà¯à®•à®®à¯", @@ -32,7 +33,6 @@ "wikieditor-toolbar": "தொகà¯à®ªà¯à®ªà¯à®•à¯ கரà¯à®µà®¿à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ˆ", "wikieditor-toolbar-desc": "பகà¯à®•à®•à¯ கரà¯à®µà®¿à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ˆà®¯à¯ˆ மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿ பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯à®Ÿà®©à¯ தொகà¯à®•à¯à®•à®µà¯à®®à¯", "wikieditor-toolbar-preference": "மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿ தொகà¯à®¤à¯à®¤à®²à¯ கரà¯à®µà®¿à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ˆà®¯à¯ˆà®šà¯ செயறà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯", - "wikieditor-toolbar-hidesig": "à®®à¯à®¤à®©à¯à®®à¯ˆà®ªà¯ பெயரà¯à®µà¯†à®³à®¿à®¯à®¿à®²à®¿à®°à¯à®•à¯à®•à¯à®®à¯ பகà¯à®•à®™à¯à®•à®³à®¿à®²à¯ கையொபà¯à®ªà®ªà¯ பொதà¯à®¤à®¾à®©à¯ˆ மறைகà¯à®•à®µà¯à®®à¯", "wikieditor-toolbar-loading": "à®à®±à¯à®±à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯...", "wikieditor-toolbar-tool-bold": "தடிதà¯à®¤", "wikieditor-toolbar-tool-bold-example": "தடிதà¯à®¤ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯", @@ -156,10 +156,10 @@ "wikieditor-toolbar-help-page-reference": "மேறà¯à®•à¯‹à®³à¯à®•à®³à¯", "wikieditor-toolbar-help-page-discussion": "உரையாடலà¯", "wikieditor-toolbar-help-content-italic-description": "சாயà¯à®¨à¯à®¤", - "wikieditor-toolbar-help-content-italic-syntax": "\"சாயà¯à®¨à¯à®¤ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯\"", + "wikieditor-toolbar-help-content-italic-syntax": "''சாயà¯à®¨à¯à®¤ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯''", "wikieditor-toolbar-help-content-italic-result": "சாயà¯à®¨à¯à®¤ எழà¯à®¤à¯à®¤à¯à®°à¯ˆ", "wikieditor-toolbar-help-content-bold-description": "தடிதà¯à®¤", - "wikieditor-toolbar-help-content-bold-syntax": "\"தடிதà¯à®¤ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯\"", + "wikieditor-toolbar-help-content-bold-syntax": "'''தடிதà¯à®¤ எழà¯à®¤à¯à®¤à¯à®•à¯à®•à®³à¯'''", "wikieditor-toolbar-help-content-bold-result": "தடிதà¯à®¤ உரை", "wikieditor-toolbar-help-content-bolditalic-description": "தடிதà¯à®¤ & சாயà¯à®¨à¯à®¤", "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''தடிதà¯à®¤ & சாயà¯à®¨à¯à®¤ சொறà¯à®±à¯Šà®Ÿà®°à¯'''''", @@ -191,13 +191,13 @@ "wikieditor-toolbar-help-content-file-description": "பொதிநà¯à®¤à¯à®³à¯à®³ படிமமà¯", "wikieditor-toolbar-help-content-file-syntax": "[[$1:எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "# மேறà¯à®•à¯‹à®³à¯\n# à®®à¯à®©à¯à®®à®¾à®¤à®¿à®°à®¿", - "wikieditor-toolbar-help-content-reference-syntax": "பகà¯à®• உரை.<ref name=\"சோதனை\">[http://www.example.org இணைபà¯à®ªà¯ உரை], கூடà¯à®¤à®²à¯ உரை.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "பகà¯à®• உரை.<ref>[http://www.example.org இணைபà¯à®ªà¯ உரை], கூடà¯à®¤à®²à¯ உரை.</ref>", "wikieditor-toolbar-help-content-reference-result": "பகà¯à®• உரை.[1]", "wikieditor-toolbar-help-content-rereference-description": "அதே மேறà¯à®•à¯‹à®³à®¿à®©à¯ கூடà¯à®¤à®²à¯ பயனà¯à®ªà®¾à®Ÿà¯", - "wikieditor-toolbar-help-content-rereference-result": "பகà¯à®• உரை.[1]", + "wikieditor-toolbar-help-content-rereference-result": "பகà¯à®• உரை.[2]", "wikieditor-toolbar-help-content-showreferences-description": "# மேறà¯à®•à¯‹à®³à¯à®•à®³à¯ˆà®•à¯ காடà¯à®Ÿà¯\n# à®®à¯à®©à¯à®®à®¾à®¤à®¿à®°à®¿à®•à®³à¯ˆà®•à¯ காடà¯à®Ÿà¯", "wikieditor-toolbar-help-content-signaturetimestamp-description": "நேர à®®à¯à®¤à¯à®¤à®¿à®°à¯ˆà®¯à¯à®Ÿà®©à¯ கையொபà¯à®ªà®®à¯", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "பயனர௠பெயர௠(பேசà¯à®šà¯) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--பயனர௠பெயர௠(பேசà¯à®šà¯) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "# கையெழà¯à®¤à¯à®¤à¯\n# கையொபà¯à®ªà®®à¯", "wikieditor-toolbar-help-content-signature-result": "பயனர௠பெயர௠(பேசà¯à®šà¯)", "wikieditor-toolbar-help-content-indent-description": "சிறித௠தளà¯à®³à®¿à®µà¯ˆ", diff --git a/extensions/WikiEditor/i18n/te.json b/extensions/WikiEditor/i18n/te.json index c806a893..0c5eae62 100644 --- a/extensions/WikiEditor/i18n/te.json +++ b/extensions/WikiEditor/i18n/te.json @@ -156,12 +156,12 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. జాబితా అంశం
      2. జాబితా అంశం
      ", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "సాకà±à°·à±à°¯à°¾à°²à±", - "wikieditor-toolbar-help-content-reference-syntax": "పేజీ పాఠà±à°¯à°‚.<ref name=\"test\">[http://www.example.org లింకౠపాఠà±à°¯à°‚], అదనపౠపాఠà±à°¯à°‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "పేజీ పాఠà±à°¯à°‚.<ref>[http://www.example.org లింకౠపాఠà±à°¯à°‚], అదనపౠపాఠà±à°¯à°‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "పేజీ పాఠà±à°¯à°‚.[1]", - "wikieditor-toolbar-help-content-rereference-result": "పేజీ పాఠà±à°¯à°‚.[1]", + "wikieditor-toolbar-help-content-rereference-result": "పేజీ పాఠà±à°¯à°‚.[2]", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ లంకె పాఠà±à°¯à°‚, అదనపౠపాఠà±à°¯à°‚.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "సమయమà±à°¦à±à°°à°¤à±‹ సంతకం", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "వాడà±à°•à°°à°¿à°ªà±‡à°°à± (à°šà°°à±à°š) 15:54, 10 జూనౠ2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--వాడà±à°•à°°à°¿à°ªà±‡à°°à± (à°šà°°à±à°š) 15:54, 10 జూనౠ2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "సంతకం", "wikieditor-toolbar-help-content-signature-result": "వాడà±à°•à°°à°¿à°ªà±‡à°°à± (à°šà°°à±à°š)" } diff --git a/extensions/WikiEditor/i18n/th.json b/extensions/WikiEditor/i18n/th.json index 84e90317..d6acf997 100644 --- a/extensions/WikiEditor/i18n/th.json +++ b/extensions/WikiEditor/i18n/th.json @@ -174,13 +174,13 @@ "wikieditor-toolbar-help-content-file-description": "à¹à¸—รà¸à¹„ฟล์", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "อ้างอิง", - "wikieditor-toolbar-help-content-reference-syntax": "ชื่อหน้า.<ref name=\"test\">[http://www.example.org ชื่อลิงà¸à¹Œ], คำอธิบายเพิ่มเติม.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "ชื่อหน้า.<ref>[http://www.example.org ชื่อลิงà¸à¹Œ], คำอธิบายเพิ่มเติม.</ref>", "wikieditor-toolbar-help-content-reference-result": "ข้อความในหน้า[1]", "wikieditor-toolbar-help-content-rereference-description": "à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¹€à¸”ียวà¸à¸±à¸™à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•à¸´à¸¡", - "wikieditor-toolbar-help-content-rereference-result": "ข้อความในหน้า[1]", + "wikieditor-toolbar-help-content-rereference-result": "ข้อความในหน้า[2]", "wikieditor-toolbar-help-content-showreferences-description": "à¹à¸ªà¸”งà¹à¸«à¸¥à¹ˆà¸‡à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ลายเซ็นพร้อมลงเวลา", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ชื่อผู้ใช้ (พูดคุย) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ชื่อผู้ใช้ (พูดคุย) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ลายเซ็น", "wikieditor-toolbar-help-content-signature-result": "ชื่อผู้ใช้ (พูดคุย)", "wikieditor-toolbar-help-content-indent-description": "ย่อหน้า", diff --git a/extensions/WikiEditor/i18n/tk.json b/extensions/WikiEditor/i18n/tk.json index 1baf2726..aca5700a 100644 --- a/extensions/WikiEditor/i18n/tk.json +++ b/extensions/WikiEditor/i18n/tk.json @@ -173,14 +173,14 @@ "wikieditor-toolbar-help-content-file-description": "Salnan faýl", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Salgylanma", - "wikieditor-toolbar-help-content-reference-syntax": "Sahypanyň teksti.<ref name=\"test\">[http://www.example.org Çykgydyň teksti], goÅŸmaça tekst.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Sahypanyň teksti.<ref>[http://www.example.org Çykgydyň teksti], goÅŸmaça tekst.</ref>", "wikieditor-toolbar-help-content-reference-result": "Sahypa teksti.[1]", "wikieditor-toolbar-help-content-rereference-description": "Åžol bir salgylanmanyň goÅŸmaça ulanylyÅŸy", - "wikieditor-toolbar-help-content-rereference-result": "Sahypa teksti.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Sahypa teksti.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Salgylanmalary görkez", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Çykgydyň teksti, goşmaça tekst.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Wagt belgili gol", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ulanyjy ady (çekişme) 15:54, 10 iýun 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ulanyjy ady (çekişme) 15:54, 10 iýun 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Gol", "wikieditor-toolbar-help-content-signature-result": "Ulanyjy ady (çekişme)", "wikieditor-toolbar-help-content-indent-description": "Boş ýer", diff --git a/extensions/WikiEditor/i18n/tl.json b/extensions/WikiEditor/i18n/tl.json index 4e3678e9..c1b380ee 100644 --- a/extensions/WikiEditor/i18n/tl.json +++ b/extensions/WikiEditor/i18n/tl.json @@ -3,7 +3,8 @@ "authors": [ "AnakngAraw", "McDutchie", - "Macofe" + "Macofe", + "Lam-ang" ] }, "wikieditor": "Mas masulong na dugtungang-mukha na pambago ng wikiteksto", @@ -27,7 +28,6 @@ "wikieditor-toolbar-desc": "Kahong kasangkapan na pamatnugot na may pinainam na pagkanagagamit", "wikieditor-toolbar-preference": "Paganahin ang pinainam na kahong kasangkapang pamatnugot", "wikieditor-toolbar-dialogs-preference": "Paganahin ang mga salitaan para sa pagsisingit ng mga kawing, mga tabla at marami pa", - "wikieditor-toolbar-hidesig": "Itago ang pindutan ng lagda magmula sa mga pahina sa loob ng pangunahing puwang ng pangalan", "wikieditor-toolbar-loading": "Ikinakarga...", "wikieditor-toolbar-tool-bold": "Makapal", "wikieditor-toolbar-tool-bold-example": "Makapal na panitik", @@ -158,7 +158,7 @@ "wikieditor-toolbar-help-content-bold-result": "Tekstong makapal", "wikieditor-toolbar-help-content-bolditalic-description": "Makapal & nakapahilis", "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Tekstong makapal & nakapahilis'''''", - "wikieditor-toolbar-help-content-bolditalic-result": "strong>Tekstong makapal & nakapahilis", + "wikieditor-toolbar-help-content-bolditalic-result": "Tekstong makapal & nakapahilis", "wikieditor-toolbar-help-content-ilink-description": "Kawing panloob", "wikieditor-toolbar-help-content-ilink-syntax": "[[Page title|Tatak ng kawing]]
      [[Pamagat ng pahina]]", "wikieditor-toolbar-help-content-ilink-result": "Tatak ng kawing
      Pamagat ng pahina", @@ -186,16 +186,16 @@ "wikieditor-toolbar-help-content-file-description": "Talaksang nakabaon", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Halimbawa.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Sanggunian", - "wikieditor-toolbar-help-content-reference-syntax": "Taksto ng pahina.<ref name=\"test\">[http://www.halimbawa.org Teksto ng kawing], karagdagang teksto.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Taksto ng pahina.<ref>[http://www.halimbawa.org Teksto ng kawing], karagdagang teksto.</ref>", "wikieditor-toolbar-help-content-reference-result": "Teksto ng pahina.[1]", "wikieditor-toolbar-help-content-rereference-description": "Karagdagang paggamit na gayun ding sanggunian", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"test\" />", - "wikieditor-toolbar-help-content-rereference-result": "Teksto ng pahina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Teksto ng pahina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Ipakita ang mga sanggunian", "wikieditor-toolbar-help-content-showreferences-syntax": "<mga sanggunian />", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Teksto ng kawing, karagdagang teksto.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Lagdang may tatak ng oras", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Pangalan ng tagagamit (talk) 15:54, 10 Hunyo 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Pangalan ng tagagamit (talk) 15:54, 10 Hunyo 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Lagda", "wikieditor-toolbar-help-content-signature-result": "Pangalan ng tagagamit (usapan)", "wikieditor-toolbar-help-content-indent-description": "Iurong", diff --git a/extensions/WikiEditor/i18n/tr.json b/extensions/WikiEditor/i18n/tr.json index 57c9cf6f..f3bf42f4 100644 --- a/extensions/WikiEditor/i18n/tr.json +++ b/extensions/WikiEditor/i18n/tr.json @@ -187,14 +187,14 @@ "wikieditor-toolbar-help-content-file-description": "Gömülü dosya", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Örnek.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Kaynak", - "wikieditor-toolbar-help-content-reference-syntax": "Sayfa metni.<ref name=\"deneme\">[http://www.ornek.org Bağlanı metni], ek metin.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Sayfa metni.<ref>[http://www.ornek.org Bağlanı metni], ek metin.</ref>", "wikieditor-toolbar-help-content-reference-result": "Sayfa metni.[1]", "wikieditor-toolbar-help-content-rereference-description": "Aynı kaynağın ek kullanımı", - "wikieditor-toolbar-help-content-rereference-result": "Sayfa metni.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Sayfa metni.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Kaynakçayı görüntüle", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Bağlantı metni, ek metin.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Zaman damgası ile imza", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Kullanıcı adı (mesaj) 15.54, 17 Åžubat 2012 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Kullanıcı adı (mesaj) 15.54, 17 Åžubat 2012 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Ä°mza", "wikieditor-toolbar-help-content-signature-result": "Kullanıcı adı (mesaj)", "wikieditor-toolbar-help-content-indent-description": "Girinti", diff --git a/extensions/WikiEditor/i18n/tt-cyrl.json b/extensions/WikiEditor/i18n/tt-cyrl.json index a4ef8c36..d1ef61f0 100644 --- a/extensions/WikiEditor/i18n/tt-cyrl.json +++ b/extensions/WikiEditor/i18n/tt-cyrl.json @@ -28,7 +28,7 @@ "wikieditor-toolbar": "Төзәтү панеле", "wikieditor-toolbar-desc": "Яңартылган үзгәртү панеле", "wikieditor-toolbar-preference": "Яңа үзгәртү панелен куллана башлау", - "wikieditor-toolbar-dialogs-preference": "Сылтамалар, табыннар һәм башка җиÑемнәрне кую", + "wikieditor-toolbar-dialogs-preference": "Сылтамаларны, табыннар һәм башка җиÑемнәрне кую оÑтаÑын ачу", "wikieditor-toolbar-loading": "Йөкләү...", "wikieditor-toolbar-tool-bold": "Куе Ñ‚Ó©Ñ", "wikieditor-toolbar-tool-bold-example": "Калын Ñзылыш", @@ -55,6 +55,7 @@ "wikieditor-toolbar-tool-link-int-target-status-invalid": "Мөмкин булмаган иÑем", "wikieditor-toolbar-tool-link-int-target-status-external": "Тышкы Ñылтама", "wikieditor-toolbar-tool-link-int-target-status-loading": "Битнең барлыгын тикшерү...", + "wikieditor-toolbar-tool-link-int-target-status-disambig": "БилгеÑезлекне тикшерүче битләр", "wikieditor-toolbar-tool-link-int-invalid": "Бирелгән иÑем мөмкин түгел.", "wikieditor-toolbar-tool-link-lookslikeinternal": "Сезнең тарафтан күрÑәтелгән URL-бит вики-Ñәхифәнең ÑылтамаÑына ошаган. Сез аны Ñчке Ñылтама итәргә ризамы?", "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Эчке Ñылтама", @@ -62,6 +63,16 @@ "wikieditor-toolbar-tool-link-empty": "Сез нәрÑәгә Ñылтама ÑÑарга кирәк икәнлеген күрÑәтмәдегез.", "wikieditor-toolbar-tool-file": "Куелган файл", "wikieditor-toolbar-tool-file-example": "МиÑал.jpg", + "wikieditor-toolbar-tool-file-title": "Файл Ó©ÑÑ‚Ó™Ò¯", + "wikieditor-toolbar-file-target": "Файл иÑеме:", + "wikieditor-toolbar-file-caption": "Имза:", + "wikieditor-toolbar-file-size": "Үлчәм:", + "wikieditor-toolbar-file-float": "Тигезләү:", + "wikieditor-toolbar-file-default": "(килешү буенча)", + "wikieditor-toolbar-file-format": "Формат:", + "wikieditor-toolbar-file-format-none": "юк", + "wikieditor-toolbar-tool-file-insert": "Ó¨ÑÑ‚Ó™Ò¯", + "wikieditor-toolbar-tool-file-cancel": "Баш тарту", "wikieditor-toolbar-tool-reference": "ИÑкәрмә", "wikieditor-toolbar-tool-reference-example": "ИÑкәрмәнең текÑтын монда куегыз", "wikieditor-toolbar-tool-reference-cancel": "Кире кагу", @@ -112,7 +123,7 @@ "wikieditor-toolbar-tool-table-preview": "Ðлдан карау", "wikieditor-toolbar-tool-table-insert": "Ó¨ÑÑ‚Ó™Ò¯", "wikieditor-toolbar-tool-table-cancel": "Кире кагу", - "wikieditor-toolbar-tool-table-toomany": "Бу диалог табынга $1 күзәнәктән дә артык Ó©Ñтәүне чикли", + "wikieditor-toolbar-tool-table-toomany": "Бу диалог $1 {{PLURAL:$1|күзәктән}} дә артык булган табын ÑÑауны чикли.", "wikieditor-toolbar-tool-table-invalidnumber": "Сез Ð´Ó©Ñ€ÐµÑ ÐºÒ¯Ð»Ó™Ð¼Ð´Ó™ баганаларны һәм юлларны күрÑәтмәгәнÑез.", "wikieditor-toolbar-tool-table-zero": "Сез буш табын ÐºÑƒÑ Ð°Ð»Ð¼Ñ‹Ð¹Ñыз.", "wikieditor-toolbar-tool-replace": "Эзләү һәм алмаштыру", @@ -122,10 +133,11 @@ "wikieditor-toolbar-tool-replace-case": "Зурлыкны иÑәпләү", "wikieditor-toolbar-tool-replace-regex": "Эзләү таÑмаÑын гади иттереп билгеләргә", "wikieditor-toolbar-tool-replace-button-findnext": "Бирелгәнне Ñзләү", + "wikieditor-toolbar-tool-replace-button-replace": "Ðлмаштыру", "wikieditor-toolbar-tool-replace-button-replaceall": "БарыÑында алмаштыру", "wikieditor-toolbar-tool-replace-close": "Ябу", "wikieditor-toolbar-tool-replace-nomatch": "Сезнең Ñоравыгыз буенча берни дә табылмады.", - "wikieditor-toolbar-tool-replace-success": "$1 алмаштыру үткәрелде.", + "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|алмаштыру башкарылган}}.", "wikieditor-toolbar-tool-replace-emptysearch": "Сез нәрÑÓ™ Ñзләргә икәнлеген күрÑәтмәдегез.", "wikieditor-toolbar-tool-replace-invalidregex": "Сезнең тарафтан кертелгән $1 аңлатмаÑÑ‹ Ð´Ó©Ñ€ÐµÑ Ñ‚Ò¯Ð³ÐµÐ».", "wikieditor-toolbar-section-characters": "МахÑÑƒÑ Ñ‚Ð°Ð¼Ð³Ð°Ð»Ð°Ñ€", @@ -150,8 +162,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Ðвышлы куе Ñ‚Ó©Ñтәге кулъÑзма'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Ðвышлы куе Ñ‚Ó©Ñтәге кулъÑзма", "wikieditor-toolbar-help-content-ilink-description": "Эчке Ñылтама", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Битнең башлыгы|Сылтама текÑÑ‚Ñ‹]]
      [[Битнең башлыгы]]", - "wikieditor-toolbar-help-content-ilink-result": "Сылтаманың текÑÑ‚Ñ‹
      Битнең башлыгы", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Битнең башлыгы]]
      [[Битнең башлыгы|Сылтама текÑÑ‚Ñ‹]]", + "wikieditor-toolbar-help-content-ilink-result": "Битнең башлыгы
      Сылтаманың текÑÑ‚Ñ‹", "wikieditor-toolbar-help-content-xlink-description": "Тышкы Ñылтама", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Сылтаманың текÑÑ‚Ñ‹]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Сылтаманың текÑÑ‚Ñ‹
      [1]
      http://www.example.org", @@ -175,15 +187,19 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. ИÑемлекнең тәртибе
      2. ИÑемлекнең тәртибе
      ", "wikieditor-toolbar-help-content-file-description": "Куелган файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Ðңлатма текÑÑ‚Ñ‹", "wikieditor-toolbar-help-content-reference-description": "ИÑкәрмә", - "wikieditor-toolbar-help-content-reference-syntax": "Битнең текÑÑ‚Ñ‹.<ref name=\"test\">[http://www.example.org Сылтаманың текÑÑ‚Ñ‹], Ó©Ñтәмә текÑÑ‚.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Битнең текÑÑ‚Ñ‹.<ref>[http://www.example.org Сылтаманың текÑÑ‚Ñ‹], Ó©Ñтәмә текÑÑ‚.</ref>", "wikieditor-toolbar-help-content-reference-result": "Битнең текÑÑ‚Ñ‹.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "ИÑкәрмә, иÑем белән", + "wikieditor-toolbar-help-content-named-reference-syntax": "Битнең текÑÑ‚Ñ‹.<ref name=\"test\">[http://www.example.org Сылтама текÑÑ‚Ñ‹]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Битнең текÑÑ‚Ñ‹.[2]", "wikieditor-toolbar-help-content-rereference-description": "Бирелгән Ñылтаманы Ó©Ñтәмә куллану", - "wikieditor-toolbar-help-content-rereference-result": "Битнең текÑÑ‚Ñ‹.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Битнең текÑÑ‚Ñ‹.[2]", "wikieditor-toolbar-help-content-showreferences-description": "ИÑкәрмәне күрÑәтү", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Сылтаманың текÑÑ‚Ñ‹, Ó©Ñтәмә текÑÑ‚.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Сылтаманың текÑÑ‚Ñ‹, Ó©Ñтәмә текÑÑ‚.
      2. ^ Сылтама
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Имза (куелган вакыт белән)", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Кулланучы иÑеме (бәхәÑ) 15:54, 10 июнь 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Кулланучы иÑеме (бәхәÑ) 15:54, 10 июнь 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Имза", "wikieditor-toolbar-help-content-signature-result": "Кулланучы иÑеме (бәхәÑ)", "wikieditor-toolbar-help-content-indent-description": "Чигенеш", diff --git a/extensions/WikiEditor/i18n/uk.json b/extensions/WikiEditor/i18n/uk.json index 9853cc6e..ca3ceed5 100644 --- a/extensions/WikiEditor/i18n/uk.json +++ b/extensions/WikiEditor/i18n/uk.json @@ -12,7 +12,8 @@ "Olvin", "Prima klasy4na", "ТеÑÑ‚", - "Macofe" + "Macofe", + "Ðта" ] }, "wikieditor": "Розширений Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–ÐºÑ–Ñ‚ÐµÐºÑту", @@ -36,7 +37,6 @@ "wikieditor-toolbar-desc": "Панель заÑобів Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð· покращеною ужитковіÑÑ‚ÑŽ", "wikieditor-toolbar-preference": "Увімкнути покращену панель заÑобів редагуваннÑ", "wikieditor-toolbar-dialogs-preference": "Увімкнути майÑтри Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñилань, таблиць, а також функції пошуку Ñ– заміни", - "wikieditor-toolbar-hidesig": "Приховати кнопку підпиÑу зі Ñторінок в оÑновному проÑторі назв", "wikieditor-toolbar-loading": "ЗавантаженнÑ…", "wikieditor-toolbar-tool-bold": "Жирний", "wikieditor-toolbar-tool-bold-example": "Жирний текÑÑ‚", @@ -132,7 +132,7 @@ "wikieditor-toolbar-tool-table-insert": "Ð’Ñтавити", "wikieditor-toolbar-tool-table-cancel": "СкаÑувати", "wikieditor-toolbar-tool-table-example-text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec purus diam. Sed aliquam imperdiet nunc quis lacinia. Donec rutrum consectetur placerat. Sed volutpat neque non purus faucibus id ultricies enim euismod.", - "wikieditor-toolbar-tool-table-toomany": "Цей діалог не дозволÑÑ” вÑтавити таблицю розміром більше 1000 клітинок.", + "wikieditor-toolbar-tool-table-toomany": "Цей діалог не дозволÑÑ” вÑтавити таблицю розміром більше $1 {{PLURAL:$1|клітинки|клітинок}}.", "wikieditor-toolbar-tool-table-invalidnumber": "Ви не вказали необхідного чиÑла Ñ€Ñдків Ñ– Ñтовпців.", "wikieditor-toolbar-tool-table-zero": "Ви не можете вÑтавити таблицю з нульовою кількіÑÑ‚ÑŽ Ñ€Ñдків або Ñтовпців.", "wikieditor-toolbar-tool-replace": "Пошук Ñ– заміна", @@ -171,8 +171,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Жирний курÑивний текÑÑ‚'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Жирний курÑивний текÑÑ‚", "wikieditor-toolbar-help-content-ilink-description": "Внутрішнє поÑиланнÑ", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Заголовок Ñторінки|ТекÑÑ‚ поÑиланнÑ]]
      [[Заголовок Ñторінки]]", - "wikieditor-toolbar-help-content-ilink-result": "ТекÑÑ‚ поÑиланнÑ
      Заголовок Ñторінки", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Заголовок Ñторінки]]
      [[Заголовок Ñторінки|ТекÑÑ‚ поÑиланнÑ]]", + "wikieditor-toolbar-help-content-ilink-result": "Заголовок Ñторінки
      ТекÑÑ‚ поÑиланнÑ", "wikieditor-toolbar-help-content-xlink-description": "Зовнішнє поÑиланнÑ", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org ТекÑÑ‚ поÑиланнÑ]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "ТекÑÑ‚ поÑиланнÑ
      [1]
      http://www.example.org", @@ -196,17 +196,21 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. Елемент ÑпиÑку
      2. Елемент ÑпиÑку
      ", "wikieditor-toolbar-help-content-file-description": "Вбудований файл", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "ТекÑÑ‚ опиÑу", "wikieditor-toolbar-help-content-reference-description": "ВиноÑка", - "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñторінки<ref name=\"test\">[http://www.example.org ТекÑÑ‚ поÑиланнÑ], додатковий текÑÑ‚.</ref>.", + "wikieditor-toolbar-help-content-reference-syntax": "ТекÑÑ‚ Ñторінки<ref>[http://www.example.org ТекÑÑ‚ поÑиланнÑ], додатковий текÑÑ‚.</ref>.", "wikieditor-toolbar-help-content-reference-result": "ТекÑÑ‚ Ñторінки.[1]", + "wikieditor-toolbar-help-content-named-reference-description": "Іменоване поÑиланнÑ", + "wikieditor-toolbar-help-content-named-reference-syntax": "ТекÑÑ‚ на Ñторінці.<ref name=\"test\">[http://www.example.org ТекÑÑ‚ поÑиланнÑ]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "ТекÑÑ‚ Ñторінки.[2]", "wikieditor-toolbar-help-content-rereference-description": "Додаткове викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ñ–Ñ”Ñ— ж виноÑки", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"test\" />", - "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñторінки.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ТекÑÑ‚ Ñторінки.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Показати виноÑки", "wikieditor-toolbar-help-content-showreferences-syntax": "<references />", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ поÑиланнÑ, додатковий текÑÑ‚.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ТекÑÑ‚ поÑиланнÑ, додатковий текÑÑ‚.
      2. ^ ТекÑÑ‚ поÑиланнÑ
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ÐŸÑ–Ð´Ð¿Ð¸Ñ Ð· чаÑовою міткою", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача (обговореннÑ) 15:54, 10 Ñ‡ÐµÑ€Ð²Ð½Ñ 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача (обговореннÑ) 15:54, 10 Ñ‡ÐµÑ€Ð²Ð½Ñ 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ПідпиÑ", "wikieditor-toolbar-help-content-signature-result": "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача (обговореннÑ)", "wikieditor-toolbar-help-content-indent-description": "ВідÑтуп", diff --git a/extensions/WikiEditor/i18n/uz.json b/extensions/WikiEditor/i18n/uz.json index 583ad3a4..23890ec6 100644 --- a/extensions/WikiEditor/i18n/uz.json +++ b/extensions/WikiEditor/i18n/uz.json @@ -186,14 +186,14 @@ "wikieditor-toolbar-help-content-file-description": "Fayl oÊ»rnatish", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Izoh", - "wikieditor-toolbar-help-content-reference-syntax": "Sahifa matni.<ref name=\"test\">[http://www.example.org Havola matni], qoÊ»shimcha matn.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Sahifa matni.<ref>[http://www.example.org Havola matni], qoÊ»shimcha matn.</ref>", "wikieditor-toolbar-help-content-reference-result": "Sahifa matni.[1]", "wikieditor-toolbar-help-content-rereference-description": "OÊ»sha havoladan qoÊ»shimcha foydalanish", - "wikieditor-toolbar-help-content-rereference-result": "Sahifa matni.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Sahifa matni.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Izohlarni koÊ»rsatish", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Havola matni, qoʻshimcha matn.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Imzo vaqt bilan birga", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Foydalanuvchi nomi (munozara) 15:54, 10 iyun 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Foydalanuvchi nomi (munozara) 15:54, 10 iyun 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Imzo", "wikieditor-toolbar-help-content-signature-result": "Foydalanuvchi nomi (munozara)", "wikieditor-toolbar-help-content-indent-description": "Xat boshi", diff --git a/extensions/WikiEditor/i18n/vec.json b/extensions/WikiEditor/i18n/vec.json index b44c64de..b22666f8 100644 --- a/extensions/WikiEditor/i18n/vec.json +++ b/extensions/WikiEditor/i18n/vec.json @@ -187,14 +187,14 @@ "wikieditor-toolbar-help-content-file-description": "File incorporado", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "Nòda", - "wikieditor-toolbar-help-content-reference-syntax": "Testo de la pàgina.<ref name=\"test\">[http://www.exenpio.org Testo del colegamento], altro testo in pì.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Testo de la pàgina.<ref>[http://www.exenpio.org Testo del colegamento], altro testo in pì.</ref>", "wikieditor-toolbar-help-content-reference-result": "Testo de la pàgina.[1]", "wikieditor-toolbar-help-content-rereference-description": "Doparar ancora la stesa nòda", - "wikieditor-toolbar-help-content-rereference-result": "Testo de la pàgina.[1]", + "wikieditor-toolbar-help-content-rereference-result": "Testo de la pàgina.[2]", "wikieditor-toolbar-help-content-showreferences-description": "Mostra le nòde", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Testo del colegamento, altro testo in pì.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Firma co data e ora", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Nome utente (discusion) 15:54, 10 giu 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Nome utente (discusion) 15:54, 10 giu 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Firma", "wikieditor-toolbar-help-content-signature-result": "Nome utente (discusion)", "wikieditor-toolbar-help-content-indent-description": "Rientro", diff --git a/extensions/WikiEditor/i18n/vi.json b/extensions/WikiEditor/i18n/vi.json index 3433aaf6..fbd886f0 100644 --- a/extensions/WikiEditor/i18n/vi.json +++ b/extensions/WikiEditor/i18n/vi.json @@ -123,7 +123,7 @@ "wikieditor-toolbar-tool-table-preview": "Xem trÆ°á»›c", "wikieditor-toolbar-tool-table-insert": "Chèn", "wikieditor-toolbar-tool-table-cancel": "Hủy bá»", - "wikieditor-toolbar-tool-table-toomany": "Không thể dùng há»™p thoại này để chèn bảng có hÆ¡n 1.000 ô.", + "wikieditor-toolbar-tool-table-toomany": "Không thể dùng há»™p thoại này để chèn bảng có hÆ¡n $1 ô.", "wikieditor-toolbar-tool-table-invalidnumber": "Bạn đã nhập số hàng hay cá»™t không hợp lệ.", "wikieditor-toolbar-tool-table-zero": "Không thể chèn bảng không có hàng hay cá»™t nào.", "wikieditor-toolbar-tool-replace": "Tìm và thay thế", @@ -162,8 +162,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Văn bản đậm & xiên'''''", "wikieditor-toolbar-help-content-bolditalic-result": "Văn bản đậm & xiên", "wikieditor-toolbar-help-content-ilink-description": "Liên kết trong", - "wikieditor-toolbar-help-content-ilink-syntax": "[[Tên trang|Văn bản liên kết]]
      [[Tên trang]]", - "wikieditor-toolbar-help-content-ilink-result": "Văn bản liên kết
      Tên trang", + "wikieditor-toolbar-help-content-ilink-syntax": "[[Tên trang]]
      [[Tên trang|Văn bản liên kết]]", + "wikieditor-toolbar-help-content-ilink-result": "Tên trang
      Văn bản liên kết", "wikieditor-toolbar-help-content-xlink-description": "Liên kết ngoài", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Văn bản liên kết]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "Văn bản liên kết
      [1]
      http://www.example.org", @@ -187,16 +187,20 @@ "wikieditor-toolbar-help-content-olist-result": "
      1. Mục danh sách
      2. Mục danh sách
      ", "wikieditor-toolbar-help-content-file-description": "Chèn tập tin", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ví dụ.png|$2|$3]]", + "wikieditor-toolbar-help-content-file-caption": "Văn bản ghi chú", "wikieditor-toolbar-help-content-reference-description": "Tham khảo", - "wikieditor-toolbar-help-content-reference-syntax": "Nội dung trang<ref name=\"thử\">[http://www.example.org Văn bản liên kết], văn bản bổ sung.</ref>.", + "wikieditor-toolbar-help-content-reference-syntax": "Nội dung trang<ref>[http://www.example.org Văn bản liên kết], văn bản bổ sung.</ref>.", "wikieditor-toolbar-help-content-reference-result": "Nội dung trang[1].", + "wikieditor-toolbar-help-content-named-reference-description": "Tham chiếu có tên", + "wikieditor-toolbar-help-content-named-reference-syntax": "Nội dung trang.<ref name=\"thử\">[http://www.example.org Văn bản liên kết]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "Nội dung trang.[2]", "wikieditor-toolbar-help-content-rereference-description": "Sử dụng lại cùng chú thích", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"thử\" />", - "wikieditor-toolbar-help-content-rereference-result": "Nội dung trang[1].", + "wikieditor-toolbar-help-content-rereference-result": "Nội dung trang[2].", "wikieditor-toolbar-help-content-showreferences-description": "Liệt kê các chú thích", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Văn bản liên kết, văn bản bổ sung.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ Văn bản liên kết, văn bản bổ sung.
      2. ^ Văn bản liên kết
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "Chữ ký có ngày", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Tên ngÆ°á»i dùng (thảo luận) 15:54, ngày 10 tháng 6 năm 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Tên ngÆ°á»i dùng (thảo luận) 15:54, ngày 10 tháng 6 năm 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "Chữ ký", "wikieditor-toolbar-help-content-signature-result": "Tên ngÆ°á»i dùng (thảo luận)", "wikieditor-toolbar-help-content-indent-description": "Tăng lá»", diff --git a/extensions/WikiEditor/i18n/yi.json b/extensions/WikiEditor/i18n/yi.json index 0deed3b8..4bbf45cd 100644 --- a/extensions/WikiEditor/i18n/yi.json +++ b/extensions/WikiEditor/i18n/yi.json @@ -115,11 +115,11 @@ "wikieditor-toolbar-tool-table-dimensions-header": "צולייגן קעפל שורה", "wikieditor-toolbar-tool-table-wikitable": "סטיל מיט ר×מען", "wikieditor-toolbar-tool-table-sortable": "מ×ַכן ט×ַבעלע ס×רטירב×ַר", - "wikieditor-toolbar-tool-table-example": "צעל טעקסט", + "wikieditor-toolbar-tool-table-example": "ביישפיל", "wikieditor-toolbar-tool-table-preview": "פֿ×ר×ויסשטעלונג", "wikieditor-toolbar-tool-table-insert": "צולייגן", "wikieditor-toolbar-tool-table-cancel": "×נולירן", - "wikieditor-toolbar-tool-table-toomany": "מיט ×“×¢× ×“×™×ַל××’ ××™×– נישט מעגלעך ×ַרײַנשטעלן × ×˜×ַבעלע מיט מער ווי 1000 צעלן", + "wikieditor-toolbar-tool-table-toomany": "מיט ×“×¢× ×“×™×ַל××’ ××™×– נישט מעגלעך ×ַרײַנשטעלן × ×˜×ַבעלע מיט מער ווי $1 {{PLURAL:$1|צעלן}}.", "wikieditor-toolbar-tool-table-invalidnumber": "×יר ×”×ָט נישט ×רײַנגעגעבן ×Ö· גילטיקן נומער פון שורות ×ָדער זיילן.", "wikieditor-toolbar-tool-table-zero": "×יר קענט נישט ×ַרײַנשטעלן × ×˜×ַבעלע מיט נול שורות ×דער זיילן.", "wikieditor-toolbar-tool-replace": "זוכן ×ון בײַטן", @@ -137,28 +137,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "×יר ×”×ט ×’×ָרנישט ×רײַנגעגעבן ×¦×•× ×–×•×›×Ÿ.", "wikieditor-toolbar-tool-replace-invalidregex": "דער רעגולערער ×ויסדרוק וו×ָס ×יר ×”×ט ×ַרײַנגעגעבן ××™×– ×ומגילטיק: $1", "wikieditor-toolbar-section-characters": "ספעציעלע צייכנס", - "wikieditor-toolbar-characters-page-latin": "ל×ַטייניש", - "wikieditor-toolbar-characters-page-latinextended": "ל×ַטייַן פֿ×ַרברייטערט", - "wikieditor-toolbar-characters-page-ipa": "×ינטערנ×ַצי×× ×לער פֿ×נעטישער ×לפֿ×בעט (IPA)", - "wikieditor-toolbar-characters-page-symbols": "סימב×לן", - "wikieditor-toolbar-characters-page-greek": "גריכיש", - "wikieditor-toolbar-characters-page-cyrillic": "ציריליש", - "wikieditor-toolbar-characters-page-arabic": "×ר×ביש", - "wikieditor-toolbar-characters-page-arabicextended": "פ×רברייטערטע ×ר×ביש", - "wikieditor-toolbar-characters-page-persian": "פּערסיש", - "wikieditor-toolbar-characters-page-hebrew": "העברעיש", - "wikieditor-toolbar-characters-page-bangla": "בענג×ַליש", - "wikieditor-toolbar-characters-page-tamil": "ט×ַמיליש", - "wikieditor-toolbar-characters-page-telugu": "טעלוגו", - "wikieditor-toolbar-characters-page-sinhala": "סינה×ַל×Ö·", - "wikieditor-toolbar-characters-page-gujarati": "גודזש×ַר×ַטי", - "wikieditor-toolbar-characters-page-devanagari": "דעוו×Ö·× ×Ö·×’×ַרי", - "wikieditor-toolbar-characters-page-thai": "טה××™", - "wikieditor-toolbar-characters-page-lao": "ל×Ö·×טיש", - "wikieditor-toolbar-characters-page-khmer": "כמער", - "wikieditor-toolbar-characters-endash": "ען טירע", - "wikieditor-toolbar-characters-emdash": "×¢× ×˜×™×¨×¢", - "wikieditor-toolbar-characters-minus": "מינוס", "wikieditor-toolbar-section-help": "הילף", "wikieditor-toolbar-help-heading-description": "ב×ַשרײַבונג", "wikieditor-toolbar-help-heading-syntax": "וו×ָס ×יר קל×ַפט ×ַרײַן", @@ -180,8 +158,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''דיקער & קורסיווער טעקסט'''''", "wikieditor-toolbar-help-content-bolditalic-result": "דיקער & קורסיווער טעקסט", "wikieditor-toolbar-help-content-ilink-description": "×ינערלעכער לינק", - "wikieditor-toolbar-help-content-ilink-syntax": "[[בל×ַט קעפל|לינק טעקסט]]
      [[בל×ַט קעפל]]", - "wikieditor-toolbar-help-content-ilink-result": "לינק טעקסט
      בל×ַט קעפל", + "wikieditor-toolbar-help-content-ilink-syntax": "[[בל×ַט קעפל]]
      [[בל×ַט קעפל|לינקטעקסט]]", + "wikieditor-toolbar-help-content-ilink-result": "בל×ַט קעפל
      לינקטעקסט", "wikieditor-toolbar-help-content-xlink-description": "דרויסנדיקער לינק", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org לינק טעקסט]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "לינק טעקסט
      [1]
      http://www.example.org", @@ -206,14 +184,14 @@ "wikieditor-toolbar-help-content-file-description": "×ײַנגעבעטעטע טעקע", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "רעפערענץ", - "wikieditor-toolbar-help-content-reference-syntax": "בל×ַט טעקסט.<ref name=\"test\">[http://www.example.org לינק טעקסט], צוגעגעבענער טעקסט.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "בל×ַט טעקסט.<ref>[http://www.example.org לינק טעקסט], צוגעגעבענער טעקסט.</ref>", "wikieditor-toolbar-help-content-reference-result": "בל×ַט טעקסט. [1]", "wikieditor-toolbar-help-content-rereference-description": "× ×ך × × ×™×¥ ×¤×•× ×¢× ×–×¢×œ×‘×Ÿ רעפערענץ", - "wikieditor-toolbar-help-content-rereference-result": "בל×ַט טעקסט. [1]", + "wikieditor-toolbar-help-content-rereference-result": "בל×ַט טעקסט. [2]", "wikieditor-toolbar-help-content-showreferences-description": "ווייַזן רעפֿערענצן", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ לינק טעקסט, × ×ך טעקסט.
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ לינקטעקסט, × ×ך טעקסט.
      2. ^ לינקטעקסט
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "×ונטערשריפֿט מיט צײַטסטעמפּל.", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "ב×ַניצער × ×ָמען (שמועס) 15:54, 10 טן יוני 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--ב×ַניצער × ×ָמען (שמועס) 15:54, 10 טן יוני 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "חתימה", "wikieditor-toolbar-help-content-signature-result": "ב×ַניצער × ×ָמען (שמועס)", "wikieditor-toolbar-help-content-indent-description": "×ָפרוקן", diff --git a/extensions/WikiEditor/i18n/yo.json b/extensions/WikiEditor/i18n/yo.json index 7fddef46..0fd132c1 100644 --- a/extensions/WikiEditor/i18n/yo.json +++ b/extensions/WikiEditor/i18n/yo.json @@ -171,14 +171,14 @@ "wikieditor-toolbar-help-content-file-description": "Fáìlì alákòósínú", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "ÃŒtá»Ìkasí", - "wikieditor-toolbar-help-content-reference-syntax": "Ãká» ojúewé.<ref name=\"test\">[http://www.example.org ÃŒkỠìjápá»Ì€], ìká» mìràn.</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "Ãká» ojúewé.<ref>[http://www.example.org ÃŒkỠìjápá»Ì€], ìká» mìràn.</ref>", "wikieditor-toolbar-help-content-reference-result": "ÃŒká» ojúewé.[1]", "wikieditor-toolbar-help-content-rereference-description": "Ọ̀nà ílò míràn ìtá»Ìkasí kannáà", - "wikieditor-toolbar-help-content-rereference-result": "ÃŒká» ojúewé.[1]", + "wikieditor-toolbar-help-content-rereference-result": "ÃŒká» ojúewé.[2]", "wikieditor-toolbar-help-content-showreferences-description": "ÃŒfihàn àwá»n ìtá»Ìkasí", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ ÃŒkỠìjápá»Ì€, ìká» mìràn.
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ÃŒtá»wá»Ìbá»Ì€wé pẹ̀lú èdìdí àkókò", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "Orúká» oníṣe (á»Ì€rá»Ì€) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--Orúká» oníṣe (á»Ì€rá»Ì€) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ÃŒtá»wá»Ìbá»Ì€wé", "wikieditor-toolbar-help-content-signature-result": "Orúká» oníṣe (á»Ì€rá»Ì€)", "wikieditor-toolbar-help-content-indent-description": "Awá»Ì" diff --git a/extensions/WikiEditor/i18n/yue.json b/extensions/WikiEditor/i18n/yue.json index d65471e2..812a970c 100644 --- a/extensions/WikiEditor/i18n/yue.json +++ b/extensions/WikiEditor/i18n/yue.json @@ -6,7 +6,8 @@ "Waihorace", "Xiaomingyan", "LNDDYL", - "Macofe" + "Macofe", + "CRCHF" ] }, "wikieditor": "進階維基文字編輯界é¢", @@ -113,7 +114,7 @@ "wikieditor-toolbar-tool-table-preview": "é è¦½", "wikieditor-toolbar-tool-table-insert": "æ’å…¥", "wikieditor-toolbar-tool-table-cancel": "å–消", - "wikieditor-toolbar-tool-table-toomany": "æ’入一個多個$1格嘅表格用呢個信æ¯æ¡†ä¿‚å””å¯èƒ½å˜…", + "wikieditor-toolbar-tool-table-toomany": "æ’入一個或多個$1格嘅表å†ç”¨å‘¢å€‹ä¿¡æ¯æ¡†ä¿‚冇å¯èƒ½å˜…。", "wikieditor-toolbar-tool-table-invalidnumber": "你係行或者列輸入左一個唔正確嘅數字", "wikieditor-toolbar-tool-table-zero": "ä½ å””å¯ä»¥æ’入一個有0行或者列嘅表格", "wikieditor-toolbar-tool-replace": "æœç´¢åŒé‡æ–°æ”¾ä½", @@ -177,14 +178,14 @@ "wikieditor-toolbar-help-content-file-description": "çµåˆæª”", "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-reference-description": "åƒè€ƒ", - "wikieditor-toolbar-help-content-reference-syntax": "é å­—。<ref name=\"test\">[http://www.example.org 連字],附加字。</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "é å­—。<ref>[http://www.example.org 連字],附加字。</ref>", "wikieditor-toolbar-help-content-reference-result": "é å­—。[1]", "wikieditor-toolbar-help-content-rereference-description": "åŒåƒè€ƒé™„加用途", - "wikieditor-toolbar-help-content-rereference-result": "é å­—。[1]", + "wikieditor-toolbar-help-content-rereference-result": "é å­—。[2]", "wikieditor-toolbar-help-content-showreferences-description": "顯示喜好", "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ 拎字,附加字。
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ç°½å加埋時間å°", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "用戶å (討論) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--用戶å (討論) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ç°½å", "wikieditor-toolbar-help-content-signature-result": "用戶å (討論)", "wikieditor-toolbar-help-content-indent-description": "縮排", diff --git a/extensions/WikiEditor/i18n/zh-hans.json b/extensions/WikiEditor/i18n/zh-hans.json index 63a5407e..bdaa0d8b 100644 --- a/extensions/WikiEditor/i18n/zh-hans.json +++ b/extensions/WikiEditor/i18n/zh-hans.json @@ -132,7 +132,7 @@ "wikieditor-toolbar-tool-table-preview": "预览", "wikieditor-toolbar-tool-table-insert": "æ’å…¥", "wikieditor-toolbar-tool-table-cancel": "å–消", - "wikieditor-toolbar-tool-table-toomany": "在这个对è¯æ¡†ä¸­æ— æ³•æ’入超过1000个å•å…ƒæ ¼çš„表格。", + "wikieditor-toolbar-tool-table-toomany": "在这个对è¯æ¡†ä¸­æ— æ³•æ’入超过$1个{{PLURAL:$1|å•å…ƒæ ¼}}的表格。", "wikieditor-toolbar-tool-table-invalidnumber": "您输入的行数或列数无效。", "wikieditor-toolbar-tool-table-zero": "您ä¸èƒ½æ’入一个零行或零列的表格。", "wikieditor-toolbar-tool-replace": "查找和替æ¢", @@ -150,28 +150,6 @@ "wikieditor-toolbar-tool-replace-emptysearch": "您没有输入查找内容。", "wikieditor-toolbar-tool-replace-invalidregex": "您输入的正则表达å¼æ— æ•ˆï¼š$1", "wikieditor-toolbar-section-characters": "特殊字符", - "wikieditor-toolbar-characters-page-latin": "拉ä¸å­—æ¯", - "wikieditor-toolbar-characters-page-latinextended": "扩展拉ä¸å­—æ¯", - "wikieditor-toolbar-characters-page-ipa": "国际音标", - "wikieditor-toolbar-characters-page-symbols": "符å·", - "wikieditor-toolbar-characters-page-greek": "希腊字æ¯", - "wikieditor-toolbar-characters-page-cyrillic": "西里尔字æ¯", - "wikieditor-toolbar-characters-page-arabic": "阿拉伯字æ¯", - "wikieditor-toolbar-characters-page-arabicextended": "扩展阿拉伯字æ¯", - "wikieditor-toolbar-characters-page-persian": "波斯语字æ¯", - "wikieditor-toolbar-characters-page-hebrew": "希伯æ¥å­—æ¯", - "wikieditor-toolbar-characters-page-bangla": "孟加拉字æ¯", - "wikieditor-toolbar-characters-page-tamil": "泰米尔数字和符å·", - "wikieditor-toolbar-characters-page-telugu": "æ³°å¢å›ºå­—æ¯", - "wikieditor-toolbar-characters-page-sinhala": "僧伽罗语", - "wikieditor-toolbar-characters-page-gujarati": "å¤å‰æ‹‰ç‰¹è¯­", - "wikieditor-toolbar-characters-page-devanagari": "梵文", - "wikieditor-toolbar-characters-page-thai": "泰语", - "wikieditor-toolbar-characters-page-lao": "è€æŒè¯­", - "wikieditor-toolbar-characters-page-khmer": "高棉语", - "wikieditor-toolbar-characters-endash": "短划线", - "wikieditor-toolbar-characters-emdash": "长划线", - "wikieditor-toolbar-characters-minus": "å‡å·", "wikieditor-toolbar-section-help": "帮助", "wikieditor-toolbar-help-heading-description": "说明", "wikieditor-toolbar-help-heading-syntax": "输入内容", @@ -193,8 +171,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''粗斜体文字'''''", "wikieditor-toolbar-help-content-bolditalic-result": "粗斜体文字", "wikieditor-toolbar-help-content-ilink-description": "内部链接", - "wikieditor-toolbar-help-content-ilink-syntax": "[[页é¢æ ‡é¢˜|链接标签]]
      [[页é¢æ ‡é¢˜]]", - "wikieditor-toolbar-help-content-ilink-result": "链接标签
      页é¢æ ‡é¢˜", + "wikieditor-toolbar-help-content-ilink-syntax": "[[页é¢æ ‡é¢˜]]
      [[页é¢æ ‡é¢˜|链接标签]]", + "wikieditor-toolbar-help-content-ilink-result": "页é¢æ ‡é¢˜
      链接标签", "wikieditor-toolbar-help-content-xlink-description": "外部链接", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org 链接标签]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "链接标签
      [1]
      http://www.example.org", @@ -220,15 +198,18 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "标题文本", "wikieditor-toolbar-help-content-reference-description": "å‚考", - "wikieditor-toolbar-help-content-reference-syntax": "页é¢æ–‡æœ¬ã€‚<ref name=\"测试\">[http://www.example.org 链接文本],附加文本。</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "页é¢æ–‡æœ¬ã€‚<ref>[http://www.example.org 链接文本],附加文本。</ref>", "wikieditor-toolbar-help-content-reference-result": "页é¢æ–‡æœ¬ã€‚[1]", + "wikieditor-toolbar-help-content-named-reference-description": "命åçš„å‚考文献", + "wikieditor-toolbar-help-content-named-reference-syntax": "页é¢æ–‡æœ¬ã€‚<ref name=\"test\">[http://www.example.org 链接文本]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "页é¢æ–‡æœ¬ã€‚[2]", "wikieditor-toolbar-help-content-rereference-description": "å¤ç”¨å‚考资料", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"测试\" />", - "wikieditor-toolbar-help-content-rereference-result": "页é¢æ–‡æœ¬ã€‚[1]", + "wikieditor-toolbar-help-content-rereference-result": "页é¢æ–‡æœ¬ã€‚[2]", "wikieditor-toolbar-help-content-showreferences-description": "显示å‚考资料", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ 链接文本,附加文本。
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ 链接文本,附加文本。
      2. ^ 链接文本
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "带时间戳的签å", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "用户å(讨论) 2009å¹´6月10æ—¥ (三) 15:54 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--用户å(讨论) 2009å¹´6月10æ—¥ (三) 15:54 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ç­¾å", "wikieditor-toolbar-help-content-signature-result": "用户å(讨论)", "wikieditor-toolbar-help-content-indent-description": "缩进", diff --git a/extensions/WikiEditor/i18n/zh-hant.json b/extensions/WikiEditor/i18n/zh-hant.json index b0613b33..b63d73bf 100644 --- a/extensions/WikiEditor/i18n/zh-hant.json +++ b/extensions/WikiEditor/i18n/zh-hant.json @@ -45,7 +45,6 @@ "wikieditor-toolbar-desc": "使編輯é é¢æ›´ç°¡å–®çš„é é¢å·¥å…·åˆ—", "wikieditor-toolbar-preference": "開啟進階編輯工具列", "wikieditor-toolbar-dialogs-preference": "é–‹å•Ÿæ’入連çµã€è¡¨æ ¼ã€æœå°‹èˆ‡å–代的å”助功能", - "wikieditor-toolbar-hidesig": "éš±è—在主è¦å‘½å空間é é¢ä¸­çš„ç°½å按鈕", "wikieditor-toolbar-loading": "讀å–中...", "wikieditor-toolbar-tool-bold": "ç²—é«”", "wikieditor-toolbar-tool-bold-example": "粗體文字", @@ -140,7 +139,7 @@ "wikieditor-toolbar-tool-table-preview": "é è¦½", "wikieditor-toolbar-tool-table-insert": "æ’å…¥", "wikieditor-toolbar-tool-table-cancel": "å–消", - "wikieditor-toolbar-tool-table-toomany": "æ­¤å°è©±æ–¹å¡Šä¸­ç„¡æ³•æ’å…¥è¶…éŽ 1000 個儲存格的表格。", + "wikieditor-toolbar-tool-table-toomany": "æ­¤å°è©±æ–¹å¡Šä¸­ç„¡æ³•æ’å…¥è¶…éŽ $1 {{PLURAL:$1|個儲存格}}的表格。", "wikieditor-toolbar-tool-table-invalidnumber": "您輸入的列數或欄數無效。", "wikieditor-toolbar-tool-table-zero": "您ä¸èƒ½æ’入一個零列或零欄的表格。", "wikieditor-toolbar-tool-replace": "æœå°‹èˆ‡å–代", @@ -179,8 +178,8 @@ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''粗斜體文字'''''", "wikieditor-toolbar-help-content-bolditalic-result": "粗斜體文字", "wikieditor-toolbar-help-content-ilink-description": "內部連çµ", - "wikieditor-toolbar-help-content-ilink-syntax": "[[é é¢æ¨™é¡Œ|連çµæ¨™ç±¤]]
      [[é é¢æ¨™é¡Œ]]", - "wikieditor-toolbar-help-content-ilink-result": "連çµæ¨™ç±¤
      é é¢æ¨™é¡Œ", + "wikieditor-toolbar-help-content-ilink-syntax": "[[é é¢æ¨™é¡Œ]]
      [[é é¢æ¨™é¡Œ|連çµæ¨™ç±¤]]", + "wikieditor-toolbar-help-content-ilink-result": "é é¢æ¨™é¡Œ
      連çµæ¨™ç±¤", "wikieditor-toolbar-help-content-xlink-description": "外部連çµ", "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org 連çµæ¨™ç±¤]
      [http://www.example.org]
      http://www.example.org", "wikieditor-toolbar-help-content-xlink-result": "連çµæ¨™ç±¤
      [1]
      http://www.example.org", @@ -206,15 +205,18 @@ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]", "wikieditor-toolbar-help-content-file-caption": "標題文字", "wikieditor-toolbar-help-content-reference-description": "åƒè€ƒä¾†æº", - "wikieditor-toolbar-help-content-reference-syntax": "é é¢æ–‡å­—。<ref name=\"test\">[http://www.example.org 連çµæ–‡å­—],附加文字。</ref>", + "wikieditor-toolbar-help-content-reference-syntax": "é é¢æ–‡å­—。<ref>[http://www.example.org 連çµæ–‡å­—],附加文字。</ref>", "wikieditor-toolbar-help-content-reference-result": "é é¢æ–‡å­—。[1]", + "wikieditor-toolbar-help-content-named-reference-description": "已命åçš„åƒè€ƒæ–‡ç»", + "wikieditor-toolbar-help-content-named-reference-syntax": "é é¢æ–‡å­—。<ref name=\"test\">[http://www.example.org Link text]</ref>", + "wikieditor-toolbar-help-content-named-reference-result": "é é¢æ–‡å­—。[2]", "wikieditor-toolbar-help-content-rereference-description": "é‡è¤‡ä½¿ç”¨ç›¸åŒåƒè€ƒä¾†æº", "wikieditor-toolbar-help-content-rereference-syntax": "<ref name=\"測試\" />", - "wikieditor-toolbar-help-content-rereference-result": "é é¢æ–‡å­—。[1]", + "wikieditor-toolbar-help-content-rereference-result": "é é¢æ–‡å­—。[2]", "wikieditor-toolbar-help-content-showreferences-description": "顯示åƒè€ƒä¾†æº", - "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ 連çµæ–‡å­—,附加文字。
      ", + "wikieditor-toolbar-help-content-showreferences-result": "
      1. ^ 連çµæ–‡å­—,附加文字。
      2. ^ 連çµæ–‡å­—
      ", "wikieditor-toolbar-help-content-signaturetimestamp-description": "ç°½å與時間", - "wikieditor-toolbar-help-content-signaturetimestamp-result": "使用者å稱 (å°è©±) 15:54, 10 June 2009 (UTC)", + "wikieditor-toolbar-help-content-signaturetimestamp-result": "--使用者å稱 (å°è©±) 15:54, 10 June 2009 (UTC)", "wikieditor-toolbar-help-content-signature-description": "ç°½å", "wikieditor-toolbar-help-content-signature-result": "使用者å稱 (å°è©±)", "wikieditor-toolbar-help-content-indent-description": "縮排", diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.js b/extensions/WikiEditor/modules/ext.wikiEditor.js index 7e3baed6..6bcdd9d5 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.js @@ -3,11 +3,20 @@ */ ( function ( $, mw ) { + var editingSessionId; + function logEditEvent( action, data ) { if ( mw.loader.getState( 'schema.Edit' ) === null ) { return; } + // Sample 6.25% (via hex digit) + // We have to do this on the client too because the unload handler + // can cause an editingSessionId to be generated on the client + if ( editingSessionId.charAt( 0 ) > '0' ) { + return; + } + mw.loader.using( 'schema.Edit' ).done( function () { data = $.extend( { version: 1, @@ -19,7 +28,6 @@ 'page.title': mw.config.get( 'wgPageName' ), 'page.ns': mw.config.get( 'wgNamespaceNumber' ), 'page.revid': mw.config.get( 'wgRevisionId' ), - 'page.length': -1, // FIXME 'user.id': mw.user.getId(), 'user.editCount': mw.config.get( 'wgUserEditCount', 0 ), 'mediawiki.version': mw.config.get( 'wgVersion' ) @@ -44,14 +52,15 @@ $( function () { var $textarea = $( '#wpTextbox1' ), - editingSessionIdInput = $( '#editingStatsId' ), - editingSessionId, submitting, onUnloadFallback; + $editingSessionIdInput = $( '#editingStatsId' ), + origText = $textarea.val(), + submitting, onUnloadFallback; // Initialize wikiEditor $textarea.wikiEditor(); - if ( editingSessionIdInput.length ) { - editingSessionId = editingSessionIdInput.val(); + if ( $editingSessionIdInput.length ) { + editingSessionId = $editingSessionIdInput.val(); logEditEvent( 'ready', { editingSessionId: editingSessionId } ); @@ -60,21 +69,46 @@ } ); onUnloadFallback = window.onunload; window.onunload = function () { - var fallbackResult; + var fallbackResult, abortType, + caVeEdit = $( '#ca-ve-edit' )[0], + switchingToVE = caVeEdit && ( + document.activeElement === caVeEdit || + $.contains( caVeEdit, document.activeElement ) + ), + unmodified = mw.config.get( 'wgAction' ) !== 'submit' && origText === $textarea.val(); if ( onUnloadFallback ) { fallbackResult = onUnloadFallback(); } + if ( switchingToVE && unmodified ) { + abortType = 'switchnochange'; + } else if ( switchingToVE ) { + abortType = 'switchwithout'; + } else if ( unmodified ) { + abortType = 'nochange'; + } else { + abortType = 'abandon'; + } + if ( !submitting ) { logEditEvent( 'abort', { editingSessionId: editingSessionId, - // TODO: abort.type + type: abortType } ); } + // If/when the user uses the back button to go back to the edit form + // and the browser serves this from bfcache, regenerate the session ID + // so we don't use the same ID twice. Ideally we'd do this by listening to the pageshow + // event and checking e.originalEvent.persisted, but that doesn't work in Chrome: + // https://code.google.com/p/chromium/issues/detail?id=344507 + // So instead we modify the DOM here, after sending the abort event. + editingSessionId = mw.user.generateRandomSessionId(); + $editingSessionIdInput.val( editingSessionId ); + return fallbackResult; }; } } ); -}( jQuery, mediaWiki ) ); \ No newline at end of file +}( jQuery, mediaWiki ) ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js deleted file mode 100644 index 48d30274..00000000 --- a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Remove the signature button if the main namespace is edited. - */ -jQuery( document ).ready( function ( $ ) { - // This module is designed not to depend on ext.wikiEditor or jquery.wikiEditor. - // Removing this dependency fixed various bugs, but it does mean that we have to - // account for the situation where $.wikiEditor is not present - if ( !$.wikiEditor || !$.wikiEditor.isSupported( $.wikiEditor.modules.toolbar ) ) { - return; - } - if ( $( 'body' ).hasClass( 'ns-0' ) ) { - $( '#wpTextbox1' ).wikiEditor( 'removeFromToolbar', { 'section': 'main', 'group': 'insert', 'tool': 'signature' } ); - } -} ); diff --git a/extensions/WikiEditor/modules/images/toolbar/arrow-down.svg b/extensions/WikiEditor/modules/images/toolbar/arrow-down.svg new file mode 100644 index 00000000..e744ec32 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extensions/WikiEditor/modules/images/toolbar/arrow-ltr.svg b/extensions/WikiEditor/modules/images/toolbar/arrow-ltr.svg new file mode 100644 index 00000000..b943caa4 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/arrow-ltr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extensions/WikiEditor/modules/images/toolbar/arrow-rtl.svg b/extensions/WikiEditor/modules/images/toolbar/arrow-rtl.svg new file mode 100644 index 00000000..5faf356d --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/arrow-rtl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extensions/WikiEditor/modules/images/toolbar/button-sprite.png b/extensions/WikiEditor/modules/images/toolbar/button-sprite.png index a51432dc..036edfe0 100644 Binary files a/extensions/WikiEditor/modules/images/toolbar/button-sprite.png and b/extensions/WikiEditor/modules/images/toolbar/button-sprite.png differ diff --git a/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg b/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg new file mode 100644 index 00000000..83531f7d --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg @@ -0,0 +1,2 @@ + +image/svg+xml diff --git a/extensions/WikiEditor/modules/images/toolbar/format-big.svg b/extensions/WikiEditor/modules/images/toolbar/format-big.svg new file mode 100644 index 00000000..e0071702 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-big.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg new file mode 100644 index 00000000..924276f8 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg new file mode 100644 index 00000000..3ec7ef86 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg @@ -0,0 +1,23 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg new file mode 100644 index 00000000..2d2aaf5d --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + F + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg new file mode 100644 index 00000000..9ea2d5aa --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + G + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg new file mode 100644 index 00000000..efcc7069 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + N + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg new file mode 100644 index 00000000..106fa283 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + P + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg new file mode 100644 index 00000000..94837888 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + V + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold.svg new file mode 100644 index 00000000..924276f8 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-bold.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.png b/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.png new file mode 100644 index 00000000..4a6b10fa Binary files /dev/null and b/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.png differ diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.svg b/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.svg new file mode 100644 index 00000000..387231b7 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent.png b/extensions/WikiEditor/modules/images/toolbar/format-indent.png new file mode 100644 index 00000000..37c4c083 Binary files /dev/null and b/extensions/WikiEditor/modules/images/toolbar/format-indent.png differ diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent.svg b/extensions/WikiEditor/modules/images/toolbar/format-indent.svg new file mode 100644 index 00000000..784847b0 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-indent.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg new file mode 100644 index 00000000..2fabcf40 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg new file mode 100644 index 00000000..6d590f90 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + C + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-I.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-I.svg new file mode 100644 index 00000000..66fce119 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-I.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + I + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg new file mode 100644 index 00000000..f2e425e6 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + K + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic.svg new file mode 100644 index 00000000..4ab860b2 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-italic.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-olist-rtl.svg b/extensions/WikiEditor/modules/images/toolbar/format-olist-rtl.svg new file mode 100644 index 00000000..4c0761eb --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-olist-rtl.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + 2 + + + + + + 1 + 3 + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-olist.svg b/extensions/WikiEditor/modules/images/toolbar/format-olist.svg new file mode 100644 index 00000000..319b2aff --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-olist.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + 1 + 2 + 3 + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-small.svg b/extensions/WikiEditor/modules/images/toolbar/format-small.svg new file mode 100644 index 00000000..6c0d210b --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-small.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + - + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg b/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg new file mode 100644 index 00000000..9f32340d --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + â–¼ + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg b/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg new file mode 100644 index 00000000..19e0885a --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + â–² + A + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-ulist-rtl.svg b/extensions/WikiEditor/modules/images/toolbar/format-ulist-rtl.svg new file mode 100644 index 00000000..8837cbfa --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-ulist-rtl.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg b/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg new file mode 100644 index 00000000..c4732395 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-file.svg b/extensions/WikiEditor/modules/images/toolbar/insert-file.svg new file mode 100644 index 00000000..056ebc2a --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-file.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg b/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg new file mode 100644 index 00000000..325695bd --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg b/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg new file mode 100644 index 00000000..3762677a --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-link.svg b/extensions/WikiEditor/modules/images/toolbar/insert-link.svg new file mode 100644 index 00000000..e366fc60 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-link.svg @@ -0,0 +1,20 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg b/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg new file mode 100644 index 00000000..c7db3a8f --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg b/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg new file mode 100644 index 00000000..35a788d7 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + W + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-redirect-rtl.svg b/extensions/WikiEditor/modules/images/toolbar/insert-redirect-rtl.svg new file mode 100644 index 00000000..9757044f --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-redirect-rtl.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg b/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg new file mode 100644 index 00000000..e567222d --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg b/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg new file mode 100644 index 00000000..c404e860 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg @@ -0,0 +1,88 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-signature.png b/extensions/WikiEditor/modules/images/toolbar/insert-signature.png index d42cf37f..df35e353 100644 Binary files a/extensions/WikiEditor/modules/images/toolbar/insert-signature.png and b/extensions/WikiEditor/modules/images/toolbar/insert-signature.png differ diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg b/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg new file mode 100644 index 00000000..e37057ec --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg @@ -0,0 +1,49 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-table.svg b/extensions/WikiEditor/modules/images/toolbar/insert-table.svg new file mode 100644 index 00000000..e640f1b0 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-table.svg @@ -0,0 +1,37 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg b/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg new file mode 100644 index 00000000..c7c664b5 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/images/toolbar/search-replace.svg b/extensions/WikiEditor/modules/images/toolbar/search-replace.svg new file mode 100644 index 00000000..bfebdea5 --- /dev/null +++ b/extensions/WikiEditor/modules/images/toolbar/search-replace.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js index 31b54805..857828b0 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js @@ -95,28 +95,7 @@ $.wikiEditor.modules.dialogs.config = { 'insert-link': { titleMsg: 'wikieditor-toolbar-tool-link-title', id: 'wikieditor-toolbar-link-dialog', - html: '\ -
      \ -
      \ - \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      \ -
      \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      \ -
      ', + htmlTemplate: 'dialogInsertLink.html', init: function () { var api = new mw.Api(); @@ -536,7 +515,7 @@ $.wikiEditor.modules.dialogs.config = { var serverName = mw.config.get( 'wgServer' ).replace( /^(https?:)?\/\//, '' ); // Cache the articlepath regex $( this ).data( 'articlePathRegex', new RegExp( - '^https?://' + $.escapeRE( serverName + mw.config.get( 'wgArticlePath' ) ) + '^https?://' + mw.RegExp.escape( serverName + mw.config.get( 'wgArticlePath' ) ) .replace( /\\\$1/g, '(.*)' ) + '$' ) ); // Pre-fill the text fields based on the current selection @@ -629,16 +608,7 @@ $.wikiEditor.modules.dialogs.config = { 'insert-reference': { titleMsg: 'wikieditor-toolbar-tool-reference-title', id: 'wikieditor-toolbar-reference-dialog', - html: '\ -
      \ -
      \ -
      \ - \ - \ -
      \ -
      \ -
      ', + htmlTemplate: 'dialogInsertReference.html', init: function () { // Insert translated strings into labels $( this ).find( '[rel]' ).each( function () { @@ -726,42 +696,7 @@ $.wikiEditor.modules.dialogs.config = { 'insert-file': { titleMsg: 'wikieditor-toolbar-tool-file-title', id: 'wikieditor-toolbar-file-dialog', - html: '\ -
      \ -
      \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      \ -
      \ -
      \ - \ -
      \ -
      \ -
      \ - \ -
      \ -
      \ -
      \ - \ -
      \ -
      \ -
      ', + htmlTemplate: 'dialogInsertFile.html', init: function () { var magicWordsI18N = mw.config.get( 'wgWikiEditorMagicWords' ); var defaultMsg = mw.msg( 'wikieditor-toolbar-file-default' ); @@ -875,68 +810,7 @@ $.wikiEditor.modules.dialogs.config = { 'insert-table': { titleMsg: 'wikieditor-toolbar-tool-table-title', id: 'wikieditor-toolbar-table-dialog', - // FIXME: Localize 'x'? - html: '\ -
      \ -
      \ -
      \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      \ -
      \ -
      \ - \ -
      \ -
      \ -
      \ - \ -
      \ -
      \ -
      \ -
      \ - \ -
      \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ -
      \ -
      \ -
      ', + htmlTemplate: 'dialogInsertTable.html', init: function () { $( this ).find( '[rel]' ).each( function () { $( this ).text( mw.msg( $( this ).attr( 'rel' ) ) ); @@ -1111,31 +985,7 @@ $.wikiEditor.modules.dialogs.config = { }, titleMsg: 'wikieditor-toolbar-tool-replace-title', id: 'wikieditor-toolbar-replace-dialog', - html: '\ -
      \ -
      \ -
      \ -
      \ -
      \ -
      \ -
      \ -
      \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      \ - \ - \ -
      \ -
      ', + htmlTemplate: 'dialogReplace.html', init: function () { $( this ).find( '[rel]' ).each( function () { $( this ).text( mw.msg( $( this ).attr( 'rel' ) ) ); @@ -1168,7 +1018,7 @@ $.wikiEditor.modules.dialogs.config = { } var isRegex = $( '#wikieditor-toolbar-replace-regex' ).is( ':checked' ); if ( !isRegex ) { - searchStr = $.escapeRE( searchStr ); + searchStr = mw.RegExp.escape( searchStr ); } if ( mode === 'replaceAll' ) { flags += 'g'; diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less index 72b384d3..824fb917 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less @@ -54,7 +54,7 @@ } .ui-dialog-buttonpane { - border-top: 1px solid #cccccc !important; + border-top: 1px solid #ccc !important; } } diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js index 907b0485..8ae977aa 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js @@ -115,7 +115,7 @@ $.wikiEditor.modules.dialogs = { * @param {String} name Dialog name (key in $.wikiEditor.modules.dialogs.modules) */ reallyCreate: function ( context, module, name ) { - var msg, dialogDiv, + var msg, dialogDiv, $content, configuration = module.dialog; // Add some stuff to configuration configuration.bgiframe = true; @@ -133,10 +133,17 @@ $.wikiEditor.modules.dialogs = { configuration.newButtons[mw.msg( msg )] = configuration.buttons[msg]; } configuration.buttons = configuration.newButtons; + if ( module.htmlTemplate ) { + $content = mw.template.get( 'jquery.wikiEditor.dialogs.config', module.htmlTemplate ).render(); + } else if ( module.html instanceof jQuery ) { + $content = module.html; + } else { + $content = $( $.parseHTML( module.html ) ); + } // Create the dialog
      dialogDiv = $( '
      ' ) .attr( 'id', module.id ) - .html( module.html ) + .append( $content ) .data( 'context', context ) .appendTo( $( 'body' ) ) .each( module.init ) diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less index 6516d090..3f9218dc 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less @@ -56,5 +56,5 @@ body { } .wikieditor-toolbar-dialog-hint { - color: #999999; + color: #999; } diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.js b/extensions/WikiEditor/modules/jquery.wikiEditor.js index 7c8e4c35..8df115fc 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.js @@ -11,7 +11,25 @@ /*jshint onevar:false, boss:true */ ( function ( $, mw ) { -var hasOwn = Object.prototype.hasOwnProperty; +var hasOwn = Object.prototype.hasOwnProperty, + +/** + * Array of language codes. + */ +fallbackChain = ( function () { + var isRTL = $( 'body' ).hasClass( 'rtl' ), + chain = mw.language.getFallbackLanguageChain(); + + // Do not fallback to 'en' + if ( chain.length >= 2 && !/^en-/.test( chain[chain.length - 2] ) ) { + chain.pop(); + } + if ( isRTL ) { + chain.push( 'default-rtl' ); + } + chain.push( 'default' ); + return chain; +} )(); /** * Global static object for wikiEditor that provides generally useful functionality to all modules and contexts. @@ -165,12 +183,17 @@ $.wikiEditor = { * with a default. * * @param object Object to extract property from - * @param lang Language code, defaults to wgUserLanguage */ - autoLang: function ( object, lang ) { - var defaultKey = $( 'body' ).hasClass( 'rtl' ) ? 'default-rtl' : 'default'; - lang = lang || mw.config.get( 'wgUserLanguage' ); - return hasOwn.call( object, lang ) ? object[lang] : ( object[defaultKey] || object['default'] || object ); + autoLang: function ( object ) { + var i, key; + + for ( i = 0; i < fallbackChain.length; i++ ) { + key = fallbackChain[i]; + if ( hasOwn.call( object, key ) ) { + return object[key]; + } + } + return object; }, /** @@ -179,10 +202,9 @@ $.wikiEditor = { * * @param icon Icon object from e.g. toolbar config * @param path Default icon path, defaults to $.wikiEditor.imgPath - * @param lang Language code, defaults to wgUserLanguage */ - autoIcon: function ( icon, path, lang ) { - var src = $.wikiEditor.autoLang( icon, lang ); + autoIcon: function ( icon, path ) { + var src = $.wikiEditor.autoLang( icon ); path = path || $.wikiEditor.imgPath; // Prepend path if src is not absolute if ( src.substr( 0, 7 ) !== 'http://' && src.substr( 0, 8 ) !== 'https://' && src[0] !== '/' ) { @@ -197,17 +219,27 @@ $.wikiEditor = { * @param icon Icon object, see autoIcon() * @param offset Offset object * @param path Icon path, see autoIcon() - * @param lang Language code, defaults to wgUserLanguage */ - autoIconOrOffset: function ( icon, offset, path, lang ) { - lang = lang || mw.config.get( 'wgUserLanguage' ); - if ( typeof offset === 'object' && hasOwn.call( offset, lang ) ) { - return offset[lang]; - } else if ( typeof icon === 'object' && hasOwn.call( icon, lang ) ) { - return $.wikiEditor.autoIcon( icon, undefined, lang ); - } else { - return $.wikiEditor.autoLang( offset, lang ); + autoIconOrOffset: function ( icon, offset, path ) { + var i, key, src; + + path = path || $.wikiEditor.imgPath; + + for ( i = 0; i < fallbackChain.length; i++ ) { + key = fallbackChain[i]; + if ( offset && hasOwn.call( offset, key ) ) { + return offset[key]; + } + if ( icon && hasOwn.call( icon, key ) ) { + src = icon[key]; + // Prepend path if src is not absolute + if ( src.substr( 0, 7 ) !== 'http://' && src.substr( 0, 8 ) !== 'https://' && src[0] !== '/' ) { + src = path + src; + } + return src + '?' + mw.loader.getVersion( 'jquery.wikiEditor' ); + } } + return offset || icon; } }; diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.less b/extensions/WikiEditor/modules/jquery.wikiEditor.less index 18adf867..96e133eb 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.less +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.less @@ -8,7 +8,7 @@ position: relative; clear: both; width: 100%; - background-color: #E0EEf7; + background-color: #e0eef7; textarea { width: 100%; @@ -39,7 +39,7 @@ .wikiEditor-ui-right { float: right; - background: #F3F3F3; + background: #f3f3f3; overflow: hidden; } } @@ -74,7 +74,7 @@ display: inline-block; padding: 0 0.75em; line-height: 2.5em; - color: #0645AD; + color: #0645ad; } &.current { @@ -82,7 +82,7 @@ background-color: white; a { - color: #333333; + color: #333; &:hover { text-decoration: none; diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.less b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.less index fc8155bc..4c1df76a 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.less +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.less @@ -7,7 +7,7 @@ background-color: white; span { - color: #666666; + color: #666; } } diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js index 41e70be0..6251b5fa 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js @@ -6,7 +6,7 @@ getDefaultConfig: function () { var fileNamespace = mw.config.get( 'wgFormattedNamespaces' )[6]; - return { 'toolbar': { + var result = { 'toolbar': { // Main section 'main': { 'type': 'toolbar', @@ -21,6 +21,7 @@ getDefaultConfig: function () { 'en': [2, -142], 'cs': [2, -142], 'de': [2, -214], + 'fa': [2, -142], 'fr': [2, -286], 'gl': [2, -358], 'es': [2, -358], @@ -29,7 +30,6 @@ getDefaultConfig: function () { 'it': [2, -286], 'nl': [2, -502], 'pt': [2, -358], - 'pt-br': [2, -358], 'pl': [2, -142], 'ml': [2, -142] }, @@ -38,6 +38,7 @@ getDefaultConfig: function () { 'en': 'format-bold-B.png', 'cs': 'format-bold-B.png', 'de': 'format-bold-F.png', + 'fa': 'format-bold-B.png', 'fr': 'format-bold-G.png', 'gl': 'format-bold-N.png', 'es': 'format-bold-N.png', @@ -51,7 +52,6 @@ getDefaultConfig: function () { 'nl': 'format-bold-V.png', 'os': 'format-bold-os.png', 'pt': 'format-bold-N.png', - 'pt-br': 'format-bold-N.png', 'pl': 'format-bold-B.png', 'ru': 'format-bold-ru.png', 'ml': 'format-bold-B.png' @@ -76,6 +76,7 @@ getDefaultConfig: function () { 'en': [2, -862], 'cs': [2, -862], 'de': [2, -934], + 'fa': [2, -862], 'fr': [2, -862], 'gl': [2, -790], 'es': [2, -790], @@ -85,7 +86,6 @@ getDefaultConfig: function () { 'nl': [2, -790], 'os': [2, -934], 'pt': [2, -862], - 'pt-br': [2, -862], 'pl': [2, -862], 'ru': [2, -934], 'ml': [2, -862] @@ -95,6 +95,7 @@ getDefaultConfig: function () { 'en': 'format-italic-I.png', 'cs': 'format-italic-I.png', 'de': 'format-italic-K.png', + 'fa': 'format-italic-I.png', 'fr': 'format-italic-I.png', 'gl': 'format-italic-C.png', 'es': 'format-italic-C.png', @@ -108,7 +109,6 @@ getDefaultConfig: function () { 'nl': 'format-italic-C.png', 'os': 'format-italic-K.png', 'pt': 'format-italic-I.png', - 'pt-br': 'format-italic-I.png', 'pl': 'format-italic-I.png', 'ru': 'format-italic-K.png', 'ml': 'format-italic-I.png' @@ -186,7 +186,7 @@ getDefaultConfig: function () { 'signature': { 'labelMsg': 'wikieditor-toolbar-tool-signature', 'type': 'button', - 'offset': [2, -1872], + 'offset': [2, -1870], 'icon': 'insert-signature.png', 'action': { 'type': 'encapsulate', @@ -728,6 +728,11 @@ getDefaultConfig: function () { 'syntax': { 'htmlMsg': 'wikieditor-toolbar-help-content-reference-syntax' }, 'result': { 'htmlMsg': 'wikieditor-toolbar-help-content-reference-result' } }, + { + 'description': { 'htmlMsg': 'wikieditor-toolbar-help-content-named-reference-description' }, + 'syntax': { 'htmlMsg': 'wikieditor-toolbar-help-content-named-reference-syntax' }, + 'result': { 'htmlMsg': 'wikieditor-toolbar-help-content-named-reference-result' } + }, { 'description': { 'htmlMsg': 'wikieditor-toolbar-help-content-rereference-description' }, 'syntax': { 'htmlMsg': 'wikieditor-toolbar-help-content-rereference-syntax' }, @@ -771,6 +776,16 @@ getDefaultConfig: function () { } } } }; + + // If this page is not a talk page and not in a namespaces listed in + // wgExtraSignatureNamespaces, remove the signature button + if ( mw.config.get( 'wgNamespaceNumber' ) % 2 === 0 && + $.inArray( mw.config.get( 'wgNamespaceNumber' ), mw.config.get( 'wgExtraSignatureNamespaces' ) ) === -1 + ) { + delete result.toolbar.main.groups.insert.tools.signature; + } + + return result; } }; } ) ( jQuery, mediaWiki ); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js index 29899a38..6322b9e7 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js @@ -84,7 +84,7 @@ api: { $.wikiEditor.modules.toolbar.fn.buildBookmark( context, page, data[type][page] ) ); } - $.wikiEditor.modules.toolbar.fn.updateBookletSelection( context, page, $pages, $index ); + $.wikiEditor.modules.toolbar.fn.updateBookletSelection( context, data.section, $pages, $index ); smooth = false; break; case 'rows': @@ -175,7 +175,7 @@ api: { context.modules.toolbar.$toolbar.find( index ).remove(); $.wikiEditor.modules.toolbar.fn.updateBookletSelection( context, - null, + data.section, context.modules.toolbar.$toolbar.find( target ), context.modules.toolbar.$toolbar.find( index ) ); @@ -307,29 +307,28 @@ fn: { var label = $.wikiEditor.autoMsg( tool, 'label' ); switch ( tool.type ) { case 'button': - var src = $.wikiEditor.autoIcon( tool.icon, $.wikiEditor.imgPath + 'toolbar/' ); - var $button = null; - if ( 'offset' in tool ) { - var offsetOrIcon = $.wikiEditor.autoIconOrOffset( tool.icon, tool.offset, - $.wikiEditor.imgPath + 'toolbar/' - ); - if ( typeof offsetOrIcon === 'object' ) { - $button = $( '' ) - .attr( { - 'href': '#', - 'title': label, - 'rel': id, - 'role': 'button', - 'class': 'tool tool-button wikiEditor-toolbar-spritedButton' - } ) - .text( label ) - .css( 'backgroundPosition', offsetOrIcon[0] + 'px ' + offsetOrIcon[1] + 'px' ); - } - } - if ( !$button ) { + var $button, offsetOrIcon; + + offsetOrIcon = $.wikiEditor.autoIconOrOffset( + tool.icon, + tool.offset, + $.wikiEditor.imgPath + 'toolbar/' + ); + if ( typeof offsetOrIcon === 'object' ) { + $button = $( '' ) + .attr( { + 'href': '#', + 'title': label, + 'rel': id, + 'role': 'button', + 'class': 'tool tool-button wikiEditor-toolbar-spritedButton' + } ) + .text( label ) + .css( 'backgroundPosition', offsetOrIcon[0] + 'px ' + offsetOrIcon[1] + 'px' ); + } else { $button = $( '' ) .attr( { - 'src': src, + 'src': offsetOrIcon, 'width': 22, 'height': 22, 'alt': label, @@ -430,7 +429,7 @@ fn: { } ) .click( function ( event ) { $( this ).parent().parent().find( '.page' ).hide(); - $( this ).parent().parent().find( '.page-' + $( this ).attr( 'rel' ) ).show(); + $( this ).parent().parent().find( '.page-' + $( this ).attr( 'rel' ) ).show().trigger( 'loadPage' ); $( this ).siblings().removeClass( 'current' ); $( this ).addClass( 'current' ); var section = $( this ).parent().parent().attr( 'rel' ); @@ -445,12 +444,24 @@ fn: { return false; } ); }, - buildPage: function ( context, id, page ) { - var html, i; + buildPage: function ( context, id, page, deferLoad ) { var $page = $( '
      ' ).attr( { 'class': 'page page-' + id, 'rel': id } ); + if ( deferLoad ) { + $page.addClass( 'loading' ).append( $( '
      ' ).addClass( 'spinner' ) ); + $page.bind( 'loadPage', function () { + $.wikiEditor.modules.toolbar.fn.reallyBuildPage( context, id, page, $page ); + $page.removeClass( 'loading' ); + } ); + } else { + $.wikiEditor.modules.toolbar.fn.reallyBuildPage( context, id, page, $page ); + } + return $page; + }, + reallyBuildPage: function ( context, id, page, $page ) { + var html, i; switch ( page.layout ) { case 'table': $page.addClass( 'page-table' ); @@ -508,11 +519,10 @@ fn: { $page.append( $characters ); break; } - return $page; }, buildHeading: function ( context, headings ) { var html = ''; - for ( var i = 0; i< headings.length; i++ ) { + for ( var i = 0; i < headings.length; i++ ) { html += '' + $.wikiEditor.autoMsg( headings[i], ['html', 'text'] ) + ''; } return html + ''; @@ -615,33 +625,18 @@ fn: { $( this ).parent().parent().find( 'a' ).removeClass( 'current' ); $sections.css( 'overflow', 'hidden' ); - var animate = function ( $that ) { - $sections - .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function () { - $that.css( 'overflow', 'visible' ).css( 'height', 'auto' ); - context.fn.trigger( 'resize' ); - } ); - }; if ( show ) { $section.removeClass( 'section-hidden' ) .attr( 'aria-expanded', 'true' ) .animate( { opacity: 100.0 }, 'fast', 'linear', function () { $( this ).addClass( 'section-visible' ); } ); - - if ( $section.hasClass( 'loading' ) ) { - // Loading of this section was deferred, load it now - var $that = $( this ); - $that.addClass( 'current loading' ); - setTimeout( function () { - $section.trigger( 'loadSection' ); - animate( $that ); - $that.removeClass( 'loading' ); - }, 1000 ); - } else { - animate( $( this ) ); - $( this ).addClass( 'current' ); - } + $sections + .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function () { + $( this ).css( 'overflow', 'visible' ).css( 'height', 'auto' ); + context.fn.trigger( 'resize' ); + } ); + $( this ).addClass( 'current' ); } else { $sections .css( 'height', $section.outerHeight() ) @@ -675,16 +670,7 @@ fn: { var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' ); var show = selected === id; - if ( section.deferLoad !== undefined && section.deferLoad && id !== 'main' && !show ) { - // This class shows the spinner and serves as a marker for the click handler in buildTab() - $section.addClass( 'loading' ).append( $( '
      ' ).addClass( 'spinner' ) ); - $section.bind( 'loadSection', function () { - $.wikiEditor.modules.toolbar.fn.reallyBuildSection( context, id, section, $section ); - $section.removeClass( 'loading' ); - } ); - } else { - $.wikiEditor.modules.toolbar.fn.reallyBuildSection( context, id, section, $section ); - } + $.wikiEditor.modules.toolbar.fn.reallyBuildSection( context, id, section, $section, section.deferLoad ); // Show or hide section if ( id !== 'main' ) { @@ -698,7 +684,7 @@ fn: { } return $section; }, - reallyBuildSection: function ( context, id, section, $section ) { + reallyBuildSection: function ( context, id, section, $section, deferLoad ) { context.$textarea.trigger( 'wikiEditor-toolbar-buildSection-' + $section.attr( 'rel' ), [section] ); switch ( section.type ) { case 'toolbar': @@ -716,7 +702,7 @@ fn: { if ( 'pages' in section ) { for ( var page in section.pages ) { $pages.append( - $.wikiEditor.modules.toolbar.fn.buildPage( context, page, section.pages[page] ) + $.wikiEditor.modules.toolbar.fn.buildPage( context, page, section.pages[page], deferLoad ) ); $index.append( $.wikiEditor.modules.toolbar.fn.buildBookmark( context, page, section.pages[page] ) @@ -729,21 +715,19 @@ fn: { } }, updateBookletSelection: function ( context, id, $pages, $index ) { - /*jshint eqnull:true */ var cookie = 'wikiEditor-' + context.instance + '-booklet-' + id + '-page'; var selected = $.cookie( cookie ); // Re-save cookie - if ( selected != null ) { + if ( selected !== null ) { $.cookie( cookie, selected, { expires: 30, path: '/' } ); } var $selectedIndex = $index.find( '*[rel="' + selected + '"]' ); - if ( $selectedIndex.size() === 0 ) { + if ( $selectedIndex.length === 0 ) { $selectedIndex = $index.children().eq( 0 ); selected = $selectedIndex.attr( 'rel' ); - $.cookie( cookie, selected, { expires: 30, path: '/' } ); } $pages.children().hide(); - $pages.find( '*[rel="' + selected + '"]' ).show(); + $pages.find( '*[rel="' + selected + '"]' ).show().trigger( 'loadPage' ); $index.children().removeClass( 'current' ); $selectedIndex.addClass( 'current' ); }, @@ -770,12 +754,6 @@ fn: { $.eachAsync( sectionQueue, { 'bulk': 0, 'end': function () { - // HACK: Opera doesn't seem to want to redraw after these bits - // are added to the DOM, so we can just FORCE it! - var oldValue = $( 'body' ).css( 'position' ); - $( 'body' ).css( 'position', 'static' ); - $( 'body' ).css( 'position', oldValue ); - context.$textarea.trigger( 'wikiEditor-toolbar-doneInitialSections' ); }, 'loop': function ( i, s ) { diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less index cfd316b1..7b084f17 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less @@ -25,8 +25,8 @@ .section { float: left; width: 100%; - border-top: 1px solid #DDDDDD; - background-color: #E0EEF7; + border-top: 1px solid #ddd; + background-color: #e0eef7; } .section-hidden { @@ -45,7 +45,7 @@ .background-image('images/toolbar/loading.gif'); background-position: left center; background-repeat: no-repeat; - color: #666666; + color: #666; display: block; float: left; height: 32px; @@ -70,8 +70,8 @@ float: left; line-height: 26px; - a, a:visited { - .background-image('images/toolbar/arrow-ltr.png'); + a, a:visited { + .background-image-svg('images/toolbar/arrow-ltr.svg', 'images/toolbar/arrow-ltr.png'); background-position: left center; background-repeat: no-repeat; color: #0645ad; @@ -84,8 +84,8 @@ } a.current, a.current:visited { - .background-image('images/toolbar/arrow-down.png'); - color: #333333; + .background-image-svg('images/toolbar/arrow-down.svg', 'images/toolbar/arrow-down.png'); + color: #333; &:hover { text-decoration: none; @@ -112,7 +112,7 @@ float: left; height: 26px; padding-right: 6px; - border-right: 1px solid #DDDDDD; + border-right: 1px solid #ddd; margin: 3px; /* Toolbar */ @@ -124,7 +124,7 @@ margin: 2px; margin-left: 5px; margin-right: 8px; - color: #777777; + color: #777; cursor: default; } @@ -145,10 +145,10 @@ border: 1px solid silver; padding: 0; margin-right: 0; - background-color: #ffffff; + background-color: #fff; .label { - .background-image('images/toolbar/arrow-down.png'); + .background-image-svg('images/toolbar/arrow-down.svg', 'images/toolbar/arrow-down.png'); background-position: center right; background-repeat: no-repeat; padding: 0; @@ -158,7 +158,7 @@ margin-right: 4px; cursor: pointer; text-decoration: none; - color: #333333; + color: #333; } .menu { @@ -168,7 +168,7 @@ margin-left: -1px; margin-top: 22px; border: 1px solid silver; - background-color: #ffffff; + background-color: #fff; } } @@ -181,7 +181,7 @@ white-space: nowrap; &:hover { - background-color: #E0EEF7; + background-color: #e0eef7; } &[rel=heading-2] { @@ -212,7 +212,7 @@ float: right; padding: 0 0 0 6px; border-right: none; - border-left: 1px solid #DDDDDD; + border-left: 1px solid #ddd; } .group-insert { @@ -236,14 +236,14 @@ } .current { - background-color: #FAFAFA; - color: #333333; + background-color: #fafafa; + color: #333; cursor: default; } } .pages { - background-color: #FAFAFA; + background-color: #fafafa; height: 125px; overflow: auto; } @@ -261,12 +261,12 @@ } th { - color: #999999; + color: #999; } td { color: black; - border-top: 1px solid #EEEEEE; + border-top: 1px solid #eee; } th, @@ -309,7 +309,7 @@ .page-characters { div { span { - border: 1px solid #DDDDDD; + border: 1px solid #ddd; padding: 5px; padding-left: 8px; padding-right: 8px; @@ -342,7 +342,7 @@ /* Sprited Buttons */ .wikiEditor-toolbar-spritedButton { - .background-image('images/toolbar/button-sprite.png'); + .background-image-svg('images/toolbar/button-sprite.svg', 'images/toolbar/button-sprite.png'); background-position: 0 0; background-repeat: no-repeat; display: block; diff --git a/extensions/WikiEditor/modules/templates/dialogInsertFile.html b/extensions/WikiEditor/modules/templates/dialogInsertFile.html new file mode 100644 index 00000000..142672df --- /dev/null +++ b/extensions/WikiEditor/modules/templates/dialogInsertFile.html @@ -0,0 +1,35 @@ +
      +
      + + +
      +
      + + +
      +
      +
      +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      +
      diff --git a/extensions/WikiEditor/modules/templates/dialogInsertLink.html b/extensions/WikiEditor/modules/templates/dialogInsertLink.html new file mode 100644 index 00000000..382d9c85 --- /dev/null +++ b/extensions/WikiEditor/modules/templates/dialogInsertLink.html @@ -0,0 +1,21 @@ +
      +
      + + + +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      +
      +
      diff --git a/extensions/WikiEditor/modules/templates/dialogInsertReference.html b/extensions/WikiEditor/modules/templates/dialogInsertReference.html new file mode 100644 index 00000000..88424998 --- /dev/null +++ b/extensions/WikiEditor/modules/templates/dialogInsertReference.html @@ -0,0 +1,9 @@ +
      +
      +
      + + +
      +
      +
      diff --git a/extensions/WikiEditor/modules/templates/dialogInsertTable.html b/extensions/WikiEditor/modules/templates/dialogInsertTable.html new file mode 100644 index 00000000..512b045e --- /dev/null +++ b/extensions/WikiEditor/modules/templates/dialogInsertTable.html @@ -0,0 +1,60 @@ +
      +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      +
      +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      diff --git a/extensions/WikiEditor/modules/templates/dialogReplace.html b/extensions/WikiEditor/modules/templates/dialogReplace.html new file mode 100644 index 00000000..55fbef68 --- /dev/null +++ b/extensions/WikiEditor/modules/templates/dialogReplace.html @@ -0,0 +1,24 @@ +
      +
      +
      +
      +
      +
      +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      diff --git a/img_auth.php b/img_auth.php index f44cac0b..88591417 100644 --- a/img_auth.php +++ b/img_auth.php @@ -46,11 +46,9 @@ $wgArticlePath = false; # Don't let a "/*" article path clober our action path $wgActionPaths = array( "$wgUploadPath/" ); wfImageAuthMain(); -wfLogProfilingData(); -// Commit and close up! -$factory = wfGetLBFactory(); -$factory->commitMasterChanges(); -$factory->shutdown(); + +$mediawiki = new MediaWiki(); +$mediawiki->doPostOutputShutdown( 'fast' ); function wfImageAuthMain() { global $wgImgAuthUrlPathMap; @@ -151,7 +149,7 @@ function wfImageAuthMain() { // Run hook for extension authorization plugins /** @var $result array */ $result = null; - if ( !wfRunHooks( 'ImgAuthBeforeStream', array( &$title, &$path, &$name, &$result ) ) ) { + if ( !Hooks::run( 'ImgAuthBeforeStream', array( &$title, &$path, &$name, &$result ) ) ) { wfForbidden( $result[0], $result[1], array_slice( $result, 2 ) ); return; } @@ -197,7 +195,7 @@ function wfForbidden( $msg1, $msg2 ) { wfMessage( $msg2, $args )->inLanguage( 'en' )->text() ); - header( 'HTTP/1.0 403 Forbidden' ); + HttpStatus::header( 403 ); header( 'Cache-Control: no-cache' ); header( 'Content-Type: text/html; charset=utf-8' ); echo <<func_name, $this->args ); if ( $result === false || $result === null ) { - wfDebug( __METHOD__ . ' ERROR while dispatching ' - . $this->func_name . "(" . var_export( $this->args, true ) . "): " - . "no data returned\n" ); + wfDebug( __METHOD__ . ' ERROR while dispatching ' . + $this->func_name . "(" . var_export( $this->args, true ) . "): " . + "no data returned\n" ); wfHttpError( 500, 'Internal Error', "{$this->func_name} returned no data" ); @@ -141,9 +141,9 @@ class AjaxDispatcher { wfDebug( __METHOD__ . ' dispatch complete for ' . $this->func_name . "\n" ); } } catch ( Exception $e ) { - wfDebug( __METHOD__ . ' ERROR while dispatching ' - . $this->func_name . "(" . var_export( $this->args, true ) . "): " - . get_class( $e ) . ": " . $e->getMessage() . "\n" ); + wfDebug( __METHOD__ . ' ERROR while dispatching ' . + $this->func_name . "(" . var_export( $this->args, true ) . "): " . + get_class( $e ) . ": " . $e->getMessage() . "\n" ); if ( !headers_sent() ) { wfHttpError( 500, 'Internal Error', diff --git a/includes/AjaxResponse.php b/includes/AjaxResponse.php index 8e9f490f..6c2efc29 100644 --- a/includes/AjaxResponse.php +++ b/includes/AjaxResponse.php @@ -86,7 +86,7 @@ class AjaxResponse { $this->mDisabled = false; $this->mText = ''; - $this->mResponseCode = '200 OK'; + $this->mResponseCode = 200; $this->mLastModified = false; $this->mContentType = 'application/x-wiki'; @@ -158,16 +158,20 @@ class AjaxResponse { */ function sendHeaders() { if ( $this->mResponseCode ) { - $n = preg_replace( '/^ *(\d+)/', '\1', $this->mResponseCode ); - header( "Status: " . $this->mResponseCode, true, (int)$n ); + // For back-compat, it is supported that mResponseCode be a string like " 200 OK" + // (with leading space and the status message after). Cast response code to an integer + // to take advantage of PHP's conversion rules which will turn " 200 OK" into 200. + // http://php.net/string#language.types.string.conversion + $n = intval( trim( $this->mResponseCode ) ); + HttpStatus::header( $n ); } - header ( "Content-Type: " . $this->mContentType ); + header( "Content-Type: " . $this->mContentType ); if ( $this->mLastModified ) { - header ( "Last-Modified: " . $this->mLastModified ); + header( "Last-Modified: " . $this->mLastModified ); } else { - header ( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" ); + header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" ); } if ( $this->mCacheDuration ) { @@ -189,20 +193,20 @@ class AjaxResponse { } else { # Let the client do the caching. Cache is not purged. - header ( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" ); - header ( "Cache-Control: s-maxage={$this->mCacheDuration}," . + header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" ); + header( "Cache-Control: s-maxage={$this->mCacheDuration}," . "public,max-age={$this->mCacheDuration}" ); } } else { # always expired, always modified - header ( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); // Date in the past - header ( "Cache-Control: no-cache, must-revalidate" ); // HTTP/1.1 - header ( "Pragma: no-cache" ); // HTTP/1.0 + header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); // Date in the past + header( "Cache-Control: no-cache, must-revalidate" ); // HTTP/1.1 + header( "Pragma: no-cache" ); // HTTP/1.0 } if ( $this->mVary ) { - header ( "Vary: " . $this->mVary ); + header( "Vary: " . $this->mVary ); } } @@ -246,7 +250,7 @@ class AjaxResponse { $ismodsince >= $wgCacheEpoch ) { ini_set( 'zlib.output_compression', 0 ); - $this->setResponseCode( "304 Not Modified" ); + $this->setResponseCode( 304 ); $this->disable(); $this->mLastModified = $lastmod; diff --git a/includes/AuthPlugin.php b/includes/AuthPlugin.php index 45ad4d1b..badf47c3 100644 --- a/includes/AuthPlugin.php +++ b/includes/AuthPlugin.php @@ -120,6 +120,8 @@ class AuthPlugin { * The User object is passed by reference so it can be modified; don't * forget the & on your function declaration. * + * @deprecated since 1.26, use the UserLoggedIn hook instead. And assigning + * a different User object to $user is no longer supported. * @param User $user * @return bool */ @@ -204,6 +206,7 @@ class AuthPlugin { * Update user information in the external authentication database. * Return true if successful. * + * @deprecated since 1.26, use the UserSaveSettings hook instead. * @param User $user * @return bool */ @@ -215,6 +218,7 @@ class AuthPlugin { * Update user groups in the external authentication database. * Return true if successful. * + * @deprecated since 1.26, use the UserGroupsChanged hook instead. * @param User $user * @param array $addgroups Groups to add. * @param array $delgroups Groups to remove. @@ -278,6 +282,8 @@ class AuthPlugin { * The User object is passed by reference so it can be modified; don't * forget the & on your function declaration. * + * @deprecated since 1.26, use the UserLoggedIn hook instead. And assigning + * a different User object to $user is no longer supported. * @param User $user * @param bool $autocreate True if user is being autocreated on login */ @@ -326,11 +332,21 @@ class AuthPluginUser { return -1; } + /** + * Indicate whether the user is locked + * @deprecated since 1.26, use the UserIsLocked hook instead. + * @return bool + */ public function isLocked() { # Override this! return false; } + /** + * Indicate whether the user is hidden + * @deprecated since 1.26, use the UserIsHidden hook instead. + * @return bool + */ public function isHidden() { # Override this! return false; diff --git a/includes/Block.php b/includes/Block.php index 873a26d8..c5a16fce 100644 --- a/includes/Block.php +++ b/includes/Block.php @@ -23,15 +23,16 @@ class Block { /** @var string */ public $mReason; - /** @var bool|string */ + /** @var string */ public $mTimestamp; - /** @var int */ + /** @var bool */ public $mAuto; - /** @var bool|string */ + /** @var string */ public $mExpiry; + /** @var bool */ public $mHideName; /** @var int */ @@ -65,10 +66,10 @@ class Block { protected $blocker; /** @var bool */ - protected $isHardblock = true; + protected $isHardblock; /** @var bool */ - protected $isAutoblocking = true; + protected $isAutoblocking; # TYPE constants const TYPE_USER = 1; @@ -78,59 +79,84 @@ class Block { const TYPE_ID = 5; /** - * @todo FIXME: Don't know what the best format to have for this constructor - * is, but fourteen optional parameters certainly isn't it. - * @param string $address - * @param int $user - * @param int $by - * @param string $reason - * @param mixed $timestamp - * @param int $auto - * @param string $expiry - * @param int $anonOnly - * @param int $createAccount - * @param int $enableAutoblock - * @param int $hideName - * @param int $blockEmail - * @param int $allowUsertalk - * @param string $byText + * Create a new block with specified parameters on a user, IP or IP range. + * + * @param array $options Parameters of the block: + * address string|User Target user name, User object, IP address or IP range + * user int Override target user ID (for foreign users) + * by int User ID of the blocker + * reason string Reason of the block + * timestamp string The time at which the block comes into effect + * auto bool Is this an automatic block? + * expiry string Timestamp of expiration of the block or 'infinity' + * anonOnly bool Only disallow anonymous actions + * createAccount bool Disallow creation of new accounts + * enableAutoblock bool Enable automatic blocking + * hideName bool Hide the target user name + * blockEmail bool Disallow sending emails + * allowUsertalk bool Allow the target to edit its own talk page + * byText string Username of the blocker (for foreign users) + * + * @since 1.26 accepts $options array instead of individual parameters; order + * of parameters above reflects the original order */ - function __construct( $address = '', $user = 0, $by = 0, $reason = '', - $timestamp = 0, $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0, - $hideName = 0, $blockEmail = 0, $allowUsertalk = 0, $byText = '' - ) { - if ( $timestamp === 0 ) { - $timestamp = wfTimestampNow(); - } + function __construct( $options = array() ) { + $defaults = array( + 'address' => '', + 'user' => null, + 'by' => null, + 'reason' => '', + 'timestamp' => '', + 'auto' => false, + 'expiry' => '', + 'anonOnly' => false, + 'createAccount' => false, + 'enableAutoblock' => false, + 'hideName' => false, + 'blockEmail' => false, + 'allowUsertalk' => false, + 'byText' => '', + ); - if ( count( func_get_args() ) > 0 ) { - # Soon... :D - # wfDeprecated( __METHOD__ . " with arguments" ); + if ( func_num_args() > 1 || !is_array( $options ) ) { + $options = array_combine( + array_slice( array_keys( $defaults ), 0, func_num_args() ), + func_get_args() + ); + wfDeprecated( __METHOD__ . ' with multiple arguments', '1.26' ); } - $this->setTarget( $address ); - if ( $this->target instanceof User && $user ) { - $this->forcedTargetID = $user; // needed for foreign users - } - if ( $by ) { // local user - $this->setBlocker( User::newFromId( $by ) ); - } else { // foreign user - $this->setBlocker( $byText ); + $options += $defaults; + + $this->setTarget( $options['address'] ); + + if ( $this->target instanceof User && $options['user'] ) { + # Needed for foreign users + $this->forcedTargetID = $options['user']; } - $this->mReason = $reason; - $this->mTimestamp = wfTimestamp( TS_MW, $timestamp ); - $this->mAuto = $auto; - $this->isHardblock( !$anonOnly ); - $this->prevents( 'createaccount', $createAccount ); - if ( $expiry == 'infinity' || $expiry == wfGetDB( DB_SLAVE )->getInfinity() ) { - $this->mExpiry = 'infinity'; + + if ( $options['by'] ) { + # Local user + $this->setBlocker( User::newFromID( $options['by'] ) ); } else { - $this->mExpiry = wfTimestamp( TS_MW, $expiry ); + # Foreign user + $this->setBlocker( $options['byText'] ); } - $this->isAutoblocking( $enableAutoblock ); - $this->mHideName = $hideName; - $this->prevents( 'sendemail', $blockEmail ); - $this->prevents( 'editownusertalk', !$allowUsertalk ); + + $this->mReason = $options['reason']; + $this->mTimestamp = wfTimestamp( TS_MW, $options['timestamp'] ); + $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $options['expiry'] ); + + # Boolean settings + $this->mAuto = (bool)$options['auto']; + $this->mHideName = (bool)$options['hideName']; + $this->isHardblock( !$options['anonOnly'] ); + $this->isAutoblocking( (bool)$options['enableAutoblock'] ); + + # Prevention measures + $this->prevents( 'sendemail', (bool)$options['blockEmail'] ); + $this->prevents( 'editownusertalk', !$options['allowUsertalk'] ); + $this->prevents( 'createaccount', (bool)$options['createAccount'] ); $this->mFromMaster = false; } @@ -375,16 +401,11 @@ class Block { $this->mTimestamp = wfTimestamp( TS_MW, $row->ipb_timestamp ); $this->mAuto = $row->ipb_auto; $this->mHideName = $row->ipb_deleted; - $this->mId = $row->ipb_id; + $this->mId = (int)$row->ipb_id; $this->mParentBlockId = $row->ipb_parent_block_id; // I wish I didn't have to do this - $db = wfGetDB( DB_SLAVE ); - if ( $row->ipb_expiry == $db->getInfinity() ) { - $this->mExpiry = 'infinity'; - } else { - $this->mExpiry = wfTimestamp( TS_MW, $row->ipb_expiry ); - } + $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $row->ipb_expiry ); $this->isHardblock( !$row->ipb_anon_only ); $this->isAutoblocking( $row->ipb_enable_autoblock ); @@ -452,11 +473,15 @@ class Block { $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) ); $affected = $dbw->affectedRows(); + $this->mId = $dbw->insertId(); # Don't collide with expired blocks. - # Do this after trying to insert to avoid pointless gap locks. + # Do this after trying to insert to avoid locking. if ( !$affected ) { - $dbw->delete( 'ipblocks', + # T96428: The ipb_address index uses a prefix on a field, so + # use a standard SELECT + DELETE to avoid annoying gap locks. + $ids = $dbw->selectFieldValues( 'ipblocks', + 'ipb_id', array( 'ipb_address' => $row['ipb_address'], 'ipb_user' => $row['ipb_user'], @@ -464,13 +489,14 @@ class Block { ), __METHOD__ ); - - $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) ); - $affected = $dbw->affectedRows(); + if ( $ids ) { + $dbw->delete( 'ipblocks', array( 'ipb_id' => $ids ), __METHOD__ ); + $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) ); + $affected = $dbw->affectedRows(); + $this->mId = $dbw->insertId(); + } } - $this->mId = $dbw->insertId(); - if ( $affected ) { $auto_ipd_ids = $this->doRetroactiveAutoblock(); return array( 'id' => $this->mId, 'autoIds' => $auto_ipd_ids ); @@ -1113,7 +1139,7 @@ class Block { $blocks = array(); foreach ( $rows as $row ) { $block = self::newFromRow( $row ); - if ( !$block->deleteIfExpired() ) { + if ( !$block->deleteIfExpired() ) { $blocks[] = $block; } } diff --git a/includes/CategoryFinder.php b/includes/CategoryFinder.php index 33de7404..77c43bf0 100644 --- a/includes/CategoryFinder.php +++ b/includes/CategoryFinder.php @@ -27,7 +27,7 @@ * articles are in one or all of a given subset of categories. * * Example use : - * + * @code * # Determines whether the article with the page_id 12345 is in both * # "Category 1" and "Category 2" or their subcategories, respectively * @@ -39,7 +39,7 @@ * ); * $a = $cf->run(); * print implode( ',' , $a ); - * + * @endcode * */ class CategoryFinder { diff --git a/includes/CategoryViewer.php b/includes/CategoryViewer.php index 66079c01..e2c31a66 100644 --- a/includes/CategoryViewer.php +++ b/includes/CategoryViewer.php @@ -329,7 +329,7 @@ class CategoryViewer extends ContextSource { 'category' => array( 'LEFT JOIN', array( 'cat_title = page_title', 'page_namespace' => NS_CATEGORY - )) + ) ) ) ); diff --git a/includes/CdbCompat.php b/includes/CdbCompat.php deleted file mode 100644 index 0074cc96..00000000 --- a/includes/CdbCompat.php +++ /dev/null @@ -1,45 +0,0 @@ - 'mw-tag-marker ' . - Sanitizer::escapeClass( "mw-tag-marker-$tag" ) ), - self::tagDescription( $tag ) - ); - $classes[] = Sanitizer::escapeClass( "mw-tag-$tag" ); - } - $markers = wfMessage( 'tag-list-wrapper' ) - ->numParams( count( $displayTags ) ) - ->rawParams( $wgLang->commaList( $displayTags ) ) - ->parse(); - $markers = Xml::tags( 'span', array( 'class' => 'mw-tag-markers' ), $markers ); - - return array( $markers, $classes ); - } - - /** - * Get a short description for a tag - * - * @param string $tag Tag - * - * @return string Short description of the tag from "mediawiki:tag-$tag" if this message exists, - * html-escaped version of $tag otherwise - */ - public static function tagDescription( $tag ) { - $msg = wfMessage( "tag-$tag" ); - return $msg->exists() ? $msg->parse() : htmlspecialchars( $tag ); - } - - /** - * Add tags to a change given its rc_id, rev_id and/or log_id - * - * @param string|array $tags Tags to add to the change - * @param int|null $rc_id The rc_id of the change to add the tags to - * @param int|null $rev_id The rev_id of the change to add the tags to - * @param int|null $log_id The log_id of the change to add the tags to - * @param string $params Params to put in the ct_params field of table 'change_tag' - * - * @throws MWException - * @return bool False if no changes are made, otherwise true - */ - public static function addTags( $tags, $rc_id = null, $rev_id = null, - $log_id = null, $params = null - ) { - $result = self::updateTags( $tags, null, $rc_id, $rev_id, $log_id, $params ); - return (bool)$result[0]; - } - - /** - * Add and remove tags to/from a change given its rc_id, rev_id and/or log_id, - * without verifying that the tags exist or are valid. If a tag is present in - * both $tagsToAdd and $tagsToRemove, it will be removed. - * - * This function should only be used by extensions to manipulate tags they - * have registered using the ListDefinedTags hook. When dealing with user - * input, call updateTagsWithChecks() instead. - * - * @param string|array|null $tagsToAdd Tags to add to the change - * @param string|array|null $tagsToRemove Tags to remove from the change - * @param int|null &$rc_id The rc_id of the change to add the tags to. - * Pass a variable whose value is null if the rc_id is not relevant or unknown. - * @param int|null &$rev_id The rev_id of the change to add the tags to. - * Pass a variable whose value is null if the rev_id is not relevant or unknown. - * @param int|null &$log_id The log_id of the change to add the tags to. - * Pass a variable whose value is null if the log_id is not relevant or unknown. - * @param string $params Params to put in the ct_params field of table - * 'change_tag' when adding tags - * - * @throws MWException When $rc_id, $rev_id and $log_id are all null - * @return array Index 0 is an array of tags actually added, index 1 is an - * array of tags actually removed, index 2 is an array of tags present on the - * revision or log entry before any changes were made - * - * @since 1.25 - */ - public static function updateTags( $tagsToAdd, $tagsToRemove, &$rc_id = null, - &$rev_id = null, &$log_id = null, $params = null ) { - - $tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure we're submitting all tags... - $tagsToRemove = array_filter( (array)$tagsToRemove ); - - if ( !$rc_id && !$rev_id && !$log_id ) { - throw new MWException( 'At least one of: RCID, revision ID, and log ID MUST be ' . - 'specified when adding or removing a tag from a change!' ); - } - - $dbw = wfGetDB( DB_MASTER ); - - // Might as well look for rcids and so on. - if ( !$rc_id ) { - // Info might be out of date, somewhat fractionally, on slave. - if ( $log_id ) { - $rc_id = $dbw->selectField( - 'recentchanges', - 'rc_id', - array( 'rc_logid' => $log_id ), - __METHOD__ - ); - } elseif ( $rev_id ) { - $rc_id = $dbw->selectField( - 'recentchanges', - 'rc_id', - array( 'rc_this_oldid' => $rev_id ), - __METHOD__ - ); - } - } elseif ( !$log_id && !$rev_id ) { - // Info might be out of date, somewhat fractionally, on slave. - $log_id = $dbw->selectField( - 'recentchanges', - 'rc_logid', - array( 'rc_id' => $rc_id ), - __METHOD__ - ); - $rev_id = $dbw->selectField( - 'recentchanges', - 'rc_this_oldid', - array( 'rc_id' => $rc_id ), - __METHOD__ - ); - } - - // update the tag_summary row - $prevTags = array(); - if ( !self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $rc_id, $rev_id, - $log_id, $prevTags ) ) { - - // nothing to do - return array( array(), array(), $prevTags ); - } - - // insert a row into change_tag for each new tag - if ( count( $tagsToAdd ) ) { - $tagsRows = array(); - foreach ( $tagsToAdd as $tag ) { - // Filter so we don't insert NULLs as zero accidentally. - // Keep in mind that $rc_id === null means "I don't care/know about the - // rc_id, just delete $tag on this revision/log entry". It doesn't - // mean "only delete tags on this revision/log WHERE rc_id IS NULL". - $tagsRows[] = array_filter( - array( - 'ct_tag' => $tag, - 'ct_rc_id' => $rc_id, - 'ct_log_id' => $log_id, - 'ct_rev_id' => $rev_id, - 'ct_params' => $params - ) - ); - } - - $dbw->insert( 'change_tag', $tagsRows, __METHOD__, array( 'IGNORE' ) ); - } - - // delete from change_tag - if ( count( $tagsToRemove ) ) { - foreach ( $tagsToRemove as $tag ) { - $conds = array_filter( - array( - 'ct_tag' => $tag, - 'ct_rc_id' => $rc_id, - 'ct_log_id' => $log_id, - 'ct_rev_id' => $rev_id - ) - ); - $dbw->delete( 'change_tag', $conds, __METHOD__ ); - } - } - - self::purgeTagUsageCache(); - return array( $tagsToAdd, $tagsToRemove, $prevTags ); - } - - /** - * Adds or removes a given set of tags to/from the relevant row of the - * tag_summary table. Modifies the tagsToAdd and tagsToRemove arrays to - * reflect the tags that were actually added and/or removed. - * - * @param array &$tagsToAdd - * @param array &$tagsToRemove If a tag is present in both $tagsToAdd and - * $tagsToRemove, it will be removed - * @param int|null $rc_id Null if not known or not applicable - * @param int|null $rev_id Null if not known or not applicable - * @param int|null $log_id Null if not known or not applicable - * @param array &$prevTags Optionally outputs a list of the tags that were - * in the tag_summary row to begin with - * @return bool True if any modifications were made, otherwise false - * @since 1.25 - */ - protected static function updateTagSummaryRow( &$tagsToAdd, &$tagsToRemove, - $rc_id, $rev_id, $log_id, &$prevTags = array() ) { - - $dbw = wfGetDB( DB_MASTER ); - - $tsConds = array_filter( array( - 'ts_rc_id' => $rc_id, - 'ts_rev_id' => $rev_id, - 'ts_log_id' => $log_id - ) ); - - // Can't both add and remove a tag at the same time... - $tagsToAdd = array_diff( $tagsToAdd, $tagsToRemove ); - - // Update the summary row. - // $prevTags can be out of date on slaves, especially when addTags is called consecutively, - // causing loss of tags added recently in tag_summary table. - $prevTags = $dbw->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ ); - $prevTags = $prevTags ? $prevTags : ''; - $prevTags = array_filter( explode( ',', $prevTags ) ); - - // add tags - $tagsToAdd = array_values( array_diff( $tagsToAdd, $prevTags ) ); - $newTags = array_unique( array_merge( $prevTags, $tagsToAdd ) ); - - // remove tags - $tagsToRemove = array_values( array_intersect( $tagsToRemove, $newTags ) ); - $newTags = array_values( array_diff( $newTags, $tagsToRemove ) ); - - sort( $prevTags ); - sort( $newTags ); - if ( $prevTags == $newTags ) { - // No change. - return false; - } - - if ( !$newTags ) { - // no tags left, so delete the row altogether - $dbw->delete( 'tag_summary', $tsConds, __METHOD__ ); - } else { - $dbw->replace( 'tag_summary', - array( 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ), - array_filter( array_merge( $tsConds, array( 'ts_tags' => implode( ',', $newTags ) ) ) ), - __METHOD__ - ); - } - - return true; - } - - /** - * Helper function to generate a fatal status with a 'not-allowed' type error. - * - * @param string $msgOne Message key to use in the case of one tag - * @param string $msgMulti Message key to use in the case of more than one tag - * @param array $tags Restricted tags (passed as $1 into the message, count of - * $tags passed as $2) - * @return Status - * @since 1.25 - */ - protected static function restrictedTagError( $msgOne, $msgMulti, $tags ) { - $lang = RequestContext::getMain()->getLanguage(); - $count = count( $tags ); - return Status::newFatal( ( $count > 1 ) ? $msgMulti : $msgOne, - $lang->commaList( $tags ), $count ); - } - - /** - * Is it OK to allow the user to apply all the specified tags at the same time - * as they edit/make the change? - * - * @param array $tags Tags that you are interested in applying - * @param User|null $user User whose permission you wish to check, or null if - * you don't care (e.g. maintenance scripts) - * @return Status - * @since 1.25 - */ - public static function canAddTagsAccompanyingChange( array $tags, - User $user = null ) { - - if ( !is_null( $user ) && !$user->isAllowed( 'applychangetags' ) ) { - return Status::newFatal( 'tags-apply-no-permission' ); - } - - // to be applied, a tag has to be explicitly defined - // @todo Allow extensions to define tags that can be applied by users... - $allowedTags = self::listExplicitlyDefinedTags(); - $disallowedTags = array_diff( $tags, $allowedTags ); - if ( $disallowedTags ) { - return self::restrictedTagError( 'tags-apply-not-allowed-one', - 'tags-apply-not-allowed-multi', $disallowedTags ); - } - - return Status::newGood(); - } - - /** - * Adds tags to a given change, checking whether it is allowed first, but - * without adding a log entry. Useful for cases where the tag is being added - * along with the action that generated the change (e.g. tagging an edit as - * it is being made). - * - * Extensions should not use this function, unless directly handling a user - * request to add a particular tag. Normally, extensions should call - * ChangeTags::updateTags() instead. - * - * @param array $tags Tags to apply - * @param int|null $rc_id The rc_id of the change to add the tags to - * @param int|null $rev_id The rev_id of the change to add the tags to - * @param int|null $log_id The log_id of the change to add the tags to - * @param string $params Params to put in the ct_params field of table - * 'change_tag' when adding tags - * @param User $user Who to give credit for the action - * @return Status - * @since 1.25 - */ - public static function addTagsAccompanyingChangeWithChecks( array $tags, - $rc_id, $rev_id, $log_id, $params, User $user ) { - - // are we allowed to do this? - $result = self::canAddTagsAccompanyingChange( $tags, $user ); - if ( !$result->isOK() ) { - $result->value = null; - return $result; - } - - // do it! - self::addTags( $tagsToAdd, $rc_id, $rev_id, $log_id, $params ); - - return Status::newGood( true ); - } - - /** - * Is it OK to allow the user to adds and remove the given tags tags to/from a - * change? - * - * @param array $tagsToAdd Tags that you are interested in adding - * @param array $tagsToRemove Tags that you are interested in removing - * @param User|null $user User whose permission you wish to check, or null if - * you don't care (e.g. maintenance scripts) - * @return Status - * @since 1.25 - */ - public static function canUpdateTags( array $tagsToAdd, array $tagsToRemove, - User $user = null ) { - - if ( !is_null( $user ) && !$user->isAllowed( 'changetags' ) ) { - return Status::newFatal( 'tags-update-no-permission' ); - } - - // to be added, a tag has to be explicitly defined - // @todo Allow extensions to define tags that can be applied by users... - $explicitlyDefinedTags = self::listExplicitlyDefinedTags(); - $diff = array_diff( $tagsToAdd, $explicitlyDefinedTags ); - if ( $diff ) { - return self::restrictedTagError( 'tags-update-add-not-allowed-one', - 'tags-update-add-not-allowed-multi', $diff ); - } - - // to be removed, a tag has to be either explicitly defined or not defined - // at all - $definedTags = self::listDefinedTags(); - $diff = array_diff( $tagsToRemove, $explicitlyDefinedTags ); - if ( $diff ) { - $intersect = array_intersect( $diff, $definedTags ); - if ( $intersect ) { - return self::restrictedTagError( 'tags-update-remove-not-allowed-one', - 'tags-update-remove-not-allowed-multi', $intersect ); - } - } - - return Status::newGood(); - } - - /** - * Adds and/or removes tags to/from a given change, checking whether it is - * allowed first, and adding a log entry afterwards. - * - * Includes a call to ChangeTag::canUpdateTags(), so your code doesn't need - * to do that. However, it doesn't check whether the *_id parameters are a - * valid combination. That is up to you to enforce. See ApiTag::execute() for - * an example. - * - * @param array|null $tagsToAdd If none, pass array() or null - * @param array|null $tagsToRemove If none, pass array() or null - * @param int|null $rc_id The rc_id of the change to add the tags to - * @param int|null $rev_id The rev_id of the change to add the tags to - * @param int|null $log_id The log_id of the change to add the tags to - * @param string $params Params to put in the ct_params field of table - * 'change_tag' when adding tags - * @param string $reason Comment for the log - * @param User $user Who to give credit for the action - * @return Status If successful, the value of this Status object will be an - * object (stdClass) with the following fields: - * - logId: the ID of the added log entry, or null if no log entry was added - * (i.e. no operation was performed) - * - addedTags: an array containing the tags that were actually added - * - removedTags: an array containing the tags that were actually removed - * @since 1.25 - */ - public static function updateTagsWithChecks( $tagsToAdd, $tagsToRemove, - $rc_id, $rev_id, $log_id, $params, $reason, User $user ) { - - if ( is_null( $tagsToAdd ) ) { - $tagsToAdd = array(); - } - if ( is_null( $tagsToRemove ) ) { - $tagsToRemove = array(); - } - if ( !$tagsToAdd && !$tagsToRemove ) { - // no-op, don't bother - return Status::newGood( (object)array( - 'logId' => null, - 'addedTags' => array(), - 'removedTags' => array(), - ) ); - } - - // are we allowed to do this? - $result = self::canUpdateTags( $tagsToAdd, $tagsToRemove, $user ); - if ( !$result->isOK() ) { - $result->value = null; - return $result; - } - - // basic rate limiting - if ( $user->pingLimiter( 'changetag' ) ) { - return Status::newFatal( 'actionthrottledtext' ); - } - - // do it! - list( $tagsAdded, $tagsRemoved, $initialTags ) = self::updateTags( $tagsToAdd, - $tagsToRemove, $rc_id, $rev_id, $log_id, $params ); - if ( !$tagsAdded && !$tagsRemoved ) { - // no-op, don't log it - return Status::newGood( (object)array( - 'logId' => null, - 'addedTags' => array(), - 'removedTags' => array(), - ) ); - } - - // log it - $logEntry = new ManualLogEntry( 'tag', 'update' ); - $logEntry->setPerformer( $user ); - $logEntry->setComment( $reason ); - - // find the appropriate target page - if ( $rev_id ) { - $rev = Revision::newFromId( $rev_id ); - if ( $rev ) { - $title = $rev->getTitle(); - $logEntry->setTarget( $rev->getTitle() ); - } - } elseif ( $log_id ) { - // This function is from revision deletion logic and has nothing to do with - // change tags, but it appears to be the only other place in core where we - // perform logged actions on log items. - $logEntry->setTarget( RevDelLogList::suggestTarget( 0, array( $log_id ) ) ); - } - - if ( !$logEntry->getTarget() ) { - // target is required, so we have to set something - $logEntry->setTarget( SpecialPage::getTitleFor( 'Tags' ) ); - } - - $logParams = array( - '4::revid' => $rev_id, - '5::logid' => $log_id, - '6:list:tagsAdded' => $tagsAdded, - '7:number:tagsAddedCount' => count( $tagsAdded ), - '8:list:tagsRemoved' => $tagsRemoved, - '9:number:tagsRemovedCount' => count( $tagsRemoved ), - 'initialTags' => $initialTags, - ); - $logEntry->setParameters( $logParams ); - $logEntry->setRelations( array( 'Tag' => array_merge( $tagsAdded, $tagsRemoved ) ) ); - - $dbw = wfGetDB( DB_MASTER ); - $logId = $logEntry->insert( $dbw ); - // Only send this to UDP, not RC, similar to patrol events - $logEntry->publish( $logId, 'udp' ); - - return Status::newGood( (object)array( - 'logId' => $logId, - 'addedTags' => $tagsAdded, - 'removedTags' => $tagsRemoved, - ) ); - } - - /** - * Applies all tags-related changes to a query. - * Handles selecting tags, and filtering. - * Needs $tables to be set up properly, so we can figure out which join conditions to use. - * - * @param string|array $tables Table names, see DatabaseBase::select - * @param string|array $fields Fields used in query, see DatabaseBase::select - * @param string|array $conds Conditions used in query, see DatabaseBase::select - * @param array $join_conds Join conditions, see DatabaseBase::select - * @param array $options Options, see Database::select - * @param bool|string $filter_tag Tag to select on - * - * @throws MWException When unable to determine appropriate JOIN condition for tagging - */ - public static function modifyDisplayQuery( &$tables, &$fields, &$conds, - &$join_conds, &$options, $filter_tag = false ) { - global $wgRequest, $wgUseTagFilter; - - if ( $filter_tag === false ) { - $filter_tag = $wgRequest->getVal( 'tagfilter' ); - } - - // Figure out which conditions can be done. - if ( in_array( 'recentchanges', $tables ) ) { - $join_cond = 'ct_rc_id=rc_id'; - } elseif ( in_array( 'logging', $tables ) ) { - $join_cond = 'ct_log_id=log_id'; - } elseif ( in_array( 'revision', $tables ) ) { - $join_cond = 'ct_rev_id=rev_id'; - } elseif ( in_array( 'archive', $tables ) ) { - $join_cond = 'ct_rev_id=ar_rev_id'; - } else { - throw new MWException( 'Unable to determine appropriate JOIN condition for tagging.' ); - } - - $fields['ts_tags'] = wfGetDB( DB_SLAVE )->buildGroupConcatField( - ',', 'change_tag', 'ct_tag', $join_cond - ); - - if ( $wgUseTagFilter && $filter_tag ) { - // Somebody wants to filter on a tag. - // Add an INNER JOIN on change_tag - - $tables[] = 'change_tag'; - $join_conds['change_tag'] = array( 'INNER JOIN', $join_cond ); - $conds['ct_tag'] = $filter_tag; - } - } - - /** - * Build a text box to select a change tag - * - * @param string $selected Tag to select by default - * @param bool $fullForm - * - if false, then it returns an array of (label, form). - * - if true, it returns an entire form around the selector. - * @param Title $title Title object to send the form to. - * Used when, and only when $fullForm is true. - * @return string|array - * - if $fullForm is false: Array with - * - if $fullForm is true: String, html fragment - */ - public static function buildTagFilterSelector( $selected = '', - $fullForm = false, Title $title = null - ) { - global $wgUseTagFilter; - - if ( !$wgUseTagFilter || !count( self::listDefinedTags() ) ) { - return $fullForm ? '' : array(); - } - - $data = array( - Html::rawElement( - 'label', - array( 'for' => 'tagfilter' ), - wfMessage( 'tag-filter' )->parse() - ), - Xml::input( - 'tagfilter', - 20, - $selected, - array( 'class' => 'mw-tagfilter-input mw-ui-input mw-ui-input-inline', 'id' => 'tagfilter' ) - ) - ); - - if ( !$fullForm ) { - return $data; - } - - $html = implode( ' ', $data ); - $html .= "\n" . - Xml::element( - 'input', - array( 'type' => 'submit', 'value' => wfMessage( 'tag-filter-submit' )->text() ) - ); - $html .= "\n" . Html::hidden( 'title', $title->getPrefixedText() ); - $html = Xml::tags( - 'form', - array( 'action' => $title->getLocalURL(), 'class' => 'mw-tagfilter-form', 'method' => 'get' ), - $html - ); - - return $html; - } - - /** - * Defines a tag in the valid_tag table, without checking that the tag name - * is valid. - * Extensions should NOT use this function; they can use the ListDefinedTags - * hook instead. - * - * @param string $tag Tag to create - * @since 1.25 - */ - public static function defineTag( $tag ) { - $dbw = wfGetDB( DB_MASTER ); - $dbw->replace( 'valid_tag', - array( 'vt_tag' ), - array( 'vt_tag' => $tag ), - __METHOD__ ); - - // clear the memcache of defined tags - self::purgeTagCacheAll(); - } - - /** - * Removes a tag from the valid_tag table. The tag may remain in use by - * extensions, and may still show up as 'defined' if an extension is setting - * it from the ListDefinedTags hook. - * - * @param string $tag Tag to remove - * @since 1.25 - */ - public static function undefineTag( $tag ) { - $dbw = wfGetDB( DB_MASTER ); - $dbw->delete( 'valid_tag', array( 'vt_tag' => $tag ), __METHOD__ ); - - // clear the memcache of defined tags - self::purgeTagCacheAll(); - } - - /** - * Writes a tag action into the tag management log. - * - * @param string $action - * @param string $tag - * @param string $reason - * @param User $user Who to attribute the action to - * @param int $tagCount For deletion only, how many usages the tag had before - * it was deleted. - * @since 1.25 - */ - protected static function logTagManagementAction( $action, $tag, $reason, - User $user, $tagCount = null ) { - - $dbw = wfGetDB( DB_MASTER ); - - $logEntry = new ManualLogEntry( 'managetags', $action ); - $logEntry->setPerformer( $user ); - // target page is not relevant, but it has to be set, so we just put in - // the title of Special:Tags - $logEntry->setTarget( Title::newFromText( 'Special:Tags' ) ); - $logEntry->setComment( $reason ); - - $params = array( '4::tag' => $tag ); - if ( !is_null( $tagCount ) ) { - $params['5:number:count'] = $tagCount; - } - $logEntry->setParameters( $params ); - $logEntry->setRelations( array( 'Tag' => $tag ) ); - - $logId = $logEntry->insert( $dbw ); - $logEntry->publish( $logId ); - return $logId; - } - - /** - * Is it OK to allow the user to activate this tag? - * - * @param string $tag Tag that you are interested in activating - * @param User|null $user User whose permission you wish to check, or null if - * you don't care (e.g. maintenance scripts) - * @return Status - * @since 1.25 - */ - public static function canActivateTag( $tag, User $user = null ) { - if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) { - return Status::newFatal( 'tags-manage-no-permission' ); - } - - // non-existing tags cannot be activated - $tagUsage = self::tagUsageStatistics(); - if ( !isset( $tagUsage[$tag] ) ) { - return Status::newFatal( 'tags-activate-not-found', $tag ); - } - - // defined tags cannot be activated (a defined tag is either extension- - // defined, in which case the extension chooses whether or not to active it; - // or user-defined, in which case it is considered active) - $definedTags = self::listDefinedTags(); - if ( in_array( $tag, $definedTags ) ) { - return Status::newFatal( 'tags-activate-not-allowed', $tag ); - } - - return Status::newGood(); - } - - /** - * Activates a tag, checking whether it is allowed first, and adding a log - * entry afterwards. - * - * Includes a call to ChangeTag::canActivateTag(), so your code doesn't need - * to do that. - * - * @param string $tag - * @param string $reason - * @param User $user Who to give credit for the action - * @param bool $ignoreWarnings Can be used for API interaction, default false - * @return Status If successful, the Status contains the ID of the added log - * entry as its value - * @since 1.25 - */ - public static function activateTagWithChecks( $tag, $reason, User $user, - $ignoreWarnings = false ) { - - // are we allowed to do this? - $result = self::canActivateTag( $tag, $user ); - if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) { - $result->value = null; - return $result; - } - - // do it! - self::defineTag( $tag ); - - // log it - $logId = self::logTagManagementAction( 'activate', $tag, $reason, $user ); - return Status::newGood( $logId ); - } - - /** - * Is it OK to allow the user to deactivate this tag? - * - * @param string $tag Tag that you are interested in deactivating - * @param User|null $user User whose permission you wish to check, or null if - * you don't care (e.g. maintenance scripts) - * @return Status - * @since 1.25 - */ - public static function canDeactivateTag( $tag, User $user = null ) { - if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) { - return Status::newFatal( 'tags-manage-no-permission' ); - } - - // only explicitly-defined tags can be deactivated - $explicitlyDefinedTags = self::listExplicitlyDefinedTags(); - if ( !in_array( $tag, $explicitlyDefinedTags ) ) { - return Status::newFatal( 'tags-deactivate-not-allowed', $tag ); - } - return Status::newGood(); - } - - /** - * Deactivates a tag, checking whether it is allowed first, and adding a log - * entry afterwards. - * - * Includes a call to ChangeTag::canDeactivateTag(), so your code doesn't need - * to do that. - * - * @param string $tag - * @param string $reason - * @param User $user Who to give credit for the action - * @param bool $ignoreWarnings Can be used for API interaction, default false - * @return Status If successful, the Status contains the ID of the added log - * entry as its value - * @since 1.25 - */ - public static function deactivateTagWithChecks( $tag, $reason, User $user, - $ignoreWarnings = false ) { - - // are we allowed to do this? - $result = self::canDeactivateTag( $tag, $user ); - if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) { - $result->value = null; - return $result; - } - - // do it! - self::undefineTag( $tag ); - - // log it - $logId = self::logTagManagementAction( 'deactivate', $tag, $reason, $user ); - return Status::newGood( $logId ); - } - - /** - * Is it OK to allow the user to create this tag? - * - * @param string $tag Tag that you are interested in creating - * @param User|null $user User whose permission you wish to check, or null if - * you don't care (e.g. maintenance scripts) - * @return Status - * @since 1.25 - */ - public static function canCreateTag( $tag, User $user = null ) { - if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) { - return Status::newFatal( 'tags-manage-no-permission' ); - } - - // no empty tags - if ( $tag === '' ) { - return Status::newFatal( 'tags-create-no-name' ); - } - - // tags cannot contain commas (used as a delimiter in tag_summary table) or - // slashes (would break tag description messages in MediaWiki namespace) - if ( strpos( $tag, ',' ) !== false || strpos( $tag, '/' ) !== false ) { - return Status::newFatal( 'tags-create-invalid-chars' ); - } - - // could the MediaWiki namespace description messages be created? - $title = Title::makeTitleSafe( NS_MEDIAWIKI, "Tag-$tag-description" ); - if ( is_null( $title ) ) { - return Status::newFatal( 'tags-create-invalid-title-chars' ); - } - - // does the tag already exist? - $tagUsage = self::tagUsageStatistics(); - if ( isset( $tagUsage[$tag] ) ) { - return Status::newFatal( 'tags-create-already-exists', $tag ); - } - - // check with hooks - $canCreateResult = Status::newGood(); - Hooks::run( 'ChangeTagCanCreate', array( $tag, $user, &$canCreateResult ) ); - return $canCreateResult; - } - - /** - * Creates a tag by adding a row to the `valid_tag` table. - * - * Includes a call to ChangeTag::canDeleteTag(), so your code doesn't need to - * do that. - * - * @param string $tag - * @param string $reason - * @param User $user Who to give credit for the action - * @param bool $ignoreWarnings Can be used for API interaction, default false - * @return Status If successful, the Status contains the ID of the added log - * entry as its value - * @since 1.25 - */ - public static function createTagWithChecks( $tag, $reason, User $user, - $ignoreWarnings = false ) { - - // are we allowed to do this? - $result = self::canCreateTag( $tag, $user ); - if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) { - $result->value = null; - return $result; - } - - // do it! - self::defineTag( $tag ); - - // log it - $logId = self::logTagManagementAction( 'create', $tag, $reason, $user ); - return Status::newGood( $logId ); - } - - /** - * Permanently removes all traces of a tag from the DB. Good for removing - * misspelt or temporary tags. - * - * This function should be directly called by maintenance scripts only, never - * by user-facing code. See deleteTagWithChecks() for functionality that can - * safely be exposed to users. - * - * @param string $tag Tag to remove - * @return Status The returned status will be good unless a hook changed it - * @since 1.25 - */ - public static function deleteTagEverywhere( $tag ) { - $dbw = wfGetDB( DB_MASTER ); - $dbw->begin( __METHOD__ ); - - // delete from valid_tag - self::undefineTag( $tag ); - - // find out which revisions use this tag, so we can delete from tag_summary - $result = $dbw->select( 'change_tag', - array( 'ct_rc_id', 'ct_log_id', 'ct_rev_id', 'ct_tag' ), - array( 'ct_tag' => $tag ), - __METHOD__ ); - foreach ( $result as $row ) { - // remove the tag from the relevant row of tag_summary - $tagsToAdd = array(); - $tagsToRemove = array( $tag ); - self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $row->ct_rc_id, - $row->ct_rev_id, $row->ct_log_id ); - } - - // delete from change_tag - $dbw->delete( 'change_tag', array( 'ct_tag' => $tag ), __METHOD__ ); - - $dbw->commit( __METHOD__ ); - - // give extensions a chance - $status = Status::newGood(); - Hooks::run( 'ChangeTagAfterDelete', array( $tag, &$status ) ); - // let's not allow error results, as the actual tag deletion succeeded - if ( !$status->isOK() ) { - wfDebug( 'ChangeTagAfterDelete error condition downgraded to warning' ); - $status->ok = true; - } - - // clear the memcache of defined tags - self::purgeTagCacheAll(); - - return $status; - } - - /** - * Is it OK to allow the user to delete this tag? - * - * @param string $tag Tag that you are interested in deleting - * @param User|null $user User whose permission you wish to check, or null if - * you don't care (e.g. maintenance scripts) - * @return Status - * @since 1.25 - */ - public static function canDeleteTag( $tag, User $user = null ) { - $tagUsage = self::tagUsageStatistics(); - - if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) { - return Status::newFatal( 'tags-manage-no-permission' ); - } - - if ( !isset( $tagUsage[$tag] ) ) { - return Status::newFatal( 'tags-delete-not-found', $tag ); - } - - if ( $tagUsage[$tag] > self::MAX_DELETE_USES ) { - return Status::newFatal( 'tags-delete-too-many-uses', $tag, self::MAX_DELETE_USES ); - } - - $extensionDefined = self::listExtensionDefinedTags(); - if ( in_array( $tag, $extensionDefined ) ) { - // extension-defined tags can't be deleted unless the extension - // specifically allows it - $status = Status::newFatal( 'tags-delete-not-allowed' ); - } else { - // user-defined tags are deletable unless otherwise specified - $status = Status::newGood(); - } - - Hooks::run( 'ChangeTagCanDelete', array( $tag, $user, &$status ) ); - return $status; - } - - /** - * Deletes a tag, checking whether it is allowed first, and adding a log entry - * afterwards. - * - * Includes a call to ChangeTag::canDeleteTag(), so your code doesn't need to - * do that. - * - * @param string $tag - * @param string $reason - * @param User $user Who to give credit for the action - * @param bool $ignoreWarnings Can be used for API interaction, default false - * @return Status If successful, the Status contains the ID of the added log - * entry as its value - * @since 1.25 - */ - public static function deleteTagWithChecks( $tag, $reason, User $user, - $ignoreWarnings = false ) { - - // are we allowed to do this? - $result = self::canDeleteTag( $tag, $user ); - if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) { - $result->value = null; - return $result; - } - - // store the tag usage statistics - $tagUsage = self::tagUsageStatistics(); - - // do it! - $deleteResult = self::deleteTagEverywhere( $tag ); - if ( !$deleteResult->isOK() ) { - return $deleteResult; - } - - // log it - $logId = self::logTagManagementAction( 'delete', $tag, $reason, $user, $tagUsage[$tag] ); - $deleteResult->value = $logId; - return $deleteResult; - } - - /** - * Lists those tags which extensions report as being "active". - * - * @return array - * @since 1.25 - */ - public static function listExtensionActivatedTags() { - // Caching... - global $wgMemc; - $key = wfMemcKey( 'active-tags' ); - $tags = $wgMemc->get( $key ); - if ( $tags ) { - return $tags; - } - - // ask extensions which tags they consider active - $extensionActive = array(); - Hooks::run( 'ChangeTagsListActive', array( &$extensionActive ) ); - - // Short-term caching. - $wgMemc->set( $key, $extensionActive, 300 ); - return $extensionActive; - } - - /** - * Basically lists defined tags which count even if they aren't applied to anything. - * It returns a union of the results of listExplicitlyDefinedTags() and - * listExtensionDefinedTags(). - * - * @return string[] Array of strings: tags - */ - public static function listDefinedTags() { - $tags1 = self::listExplicitlyDefinedTags(); - $tags2 = self::listExtensionDefinedTags(); - return array_values( array_unique( array_merge( $tags1, $tags2 ) ) ); - } - - /** - * Lists tags explicitly defined in the `valid_tag` table of the database. - * Tags in table 'change_tag' which are not in table 'valid_tag' are not - * included. - * - * Tries memcached first. - * - * @return string[] Array of strings: tags - * @since 1.25 - */ - public static function listExplicitlyDefinedTags() { - // Caching... - global $wgMemc; - $key = wfMemcKey( 'valid-tags-db' ); - $tags = $wgMemc->get( $key ); - if ( $tags ) { - return $tags; - } - - $emptyTags = array(); - - // Some DB stuff - $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( 'valid_tag', 'vt_tag', array(), __METHOD__ ); - foreach ( $res as $row ) { - $emptyTags[] = $row->vt_tag; - } - - $emptyTags = array_filter( array_unique( $emptyTags ) ); - - // Short-term caching. - $wgMemc->set( $key, $emptyTags, 300 ); - return $emptyTags; - } - - /** - * Lists tags defined by extensions using the ListDefinedTags hook. - * Extensions need only define those tags they deem to be in active use. - * - * Tries memcached first. - * - * @return string[] Array of strings: tags - * @since 1.25 - */ - public static function listExtensionDefinedTags() { - // Caching... - global $wgMemc; - $key = wfMemcKey( 'valid-tags-hook' ); - $tags = $wgMemc->get( $key ); - if ( $tags ) { - return $tags; - } - - $emptyTags = array(); - Hooks::run( 'ListDefinedTags', array( &$emptyTags ) ); - $emptyTags = array_filter( array_unique( $emptyTags ) ); - - // Short-term caching. - $wgMemc->set( $key, $emptyTags, 300 ); - return $emptyTags; - } - - /** - * Invalidates the short-term cache of defined tags used by the - * list*DefinedTags functions, as well as the tag statistics cache. - * @since 1.25 - */ - public static function purgeTagCacheAll() { - global $wgMemc; - $wgMemc->delete( wfMemcKey( 'active-tags' ) ); - $wgMemc->delete( wfMemcKey( 'valid-tags-db' ) ); - $wgMemc->delete( wfMemcKey( 'valid-tags-hook' ) ); - self::purgeTagUsageCache(); - } - - /** - * Invalidates the tag statistics cache only. - * @since 1.25 - */ - public static function purgeTagUsageCache() { - global $wgMemc; - $wgMemc->delete( wfMemcKey( 'change-tag-statistics' ) ); - } - - /** - * Returns a map of any tags used on the wiki to number of edits - * tagged with them, ordered descending by the hitcount. - * - * Keeps a short-term cache in memory, so calling this multiple times in the - * same request should be fine. - * - * @return array Array of string => int - */ - public static function tagUsageStatistics() { - // Caching... - global $wgMemc; - $key = wfMemcKey( 'change-tag-statistics' ); - $stats = $wgMemc->get( $key ); - if ( $stats ) { - return $stats; - } - - $out = array(); - - $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( - 'change_tag', - array( 'ct_tag', 'hitcount' => 'count(*)' ), - array(), - __METHOD__, - array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' ) - ); - - foreach ( $res as $row ) { - $out[$row->ct_tag] = $row->hitcount; - } - foreach ( self::listDefinedTags() as $tag ) { - if ( !isset( $out[$tag] ) ) { - $out[$tag] = 0; - } - } - - // Cache for a very short time - $wgMemc->set( $key, $out, 300 ); - return $out; - } - - /** - * Indicate whether change tag editing UI is relevant - * - * Returns true if the user has the necessary right and there are any - * editable tags defined. - * - * This intentionally doesn't check "any addable || any deletable", because - * it seems like it would be more confusing than useful if the checkboxes - * suddenly showed up because some abuse filter stopped defining a tag and - * then suddenly disappeared when someone deleted all uses of that tag. - * - * @param User $user - * @return bool - */ - public static function showTagEditingUI( User $user ) { - return $user->isAllowed( 'changetags' ) && (bool)self::listExplicitlyDefinedTags(); - } -} diff --git a/includes/Collation.php b/includes/Collation.php index 481d8e70..c1f0b388 100644 --- a/includes/Collation.php +++ b/includes/Collation.php @@ -320,16 +320,16 @@ class IcuCollation extends Collation { // intl extension produces non null-terminated // strings. Appending '' fixes it so that it doesn't generate // a warning on each access in debug php. - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $key = $this->mainCollator->getSortKey( $string ) . ''; - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); return $key; } function getPrimarySortKey( $string ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $key = $this->primaryCollator->getSortKey( $string ) . ''; - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); return $key; } diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index c13aa5f4..268a8d19 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -75,13 +75,21 @@ $wgConfigRegistry = array( * MediaWiki version number * @since 1.2 */ -$wgVersion = '1.25.3'; +$wgVersion = '1.26.0'; /** * Name of the site. It must be changed in LocalSettings.php */ $wgSitename = 'MediaWiki'; +/** + * When the wiki is running behind a proxy and this is set to true, assumes that the proxy exposes + * the wiki on the standard ports (443 for https and 80 for http). + * @var bool + * @since 1.26 + */ +$wgAssumeProxiesUseDefaultProtocolPorts = true; + /** * URL of the server. * @@ -203,7 +211,7 @@ $wgLoadScript = false; /** * The URL path of the skins directory. - * Defaults to "{$wgScriptPath}/skins". + * Defaults to "{$wgResourceBasePath}/skins". * @since 1.3 */ $wgStylePath = false; @@ -218,7 +226,7 @@ $wgLocalStylePath = false; /** * The URL path of the extensions directory. - * Defaults to "{$wgScriptPath}/extensions". + * Defaults to "{$wgResourceBasePath}/extensions". * @since 1.16 */ $wgExtensionAssetsPath = false; @@ -472,13 +480,13 @@ $wgImgAuthUrlPathMap = array(); * * These settings describe a foreign MediaWiki installation. They are optional, and will be ignored * for local repositories: - * - descBaseUrl URL of image description pages, e.g. http://en.wikipedia.org/wiki/File: + * - descBaseUrl URL of image description pages, e.g. https://en.wikipedia.org/wiki/File: * - scriptDirUrl URL of the MediaWiki installation, equivalent to $wgScriptPath, e.g. - * http://en.wikipedia.org/w + * https://en.wikipedia.org/w * - scriptExtension Script extension of the MediaWiki installation, equivalent to * $wgScriptExtension, e.g. .php5 defaults to .php * - * - articleUrl Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1 + * - articleUrl Equivalent to $wgArticlePath, e.g. https://en.wikipedia.org/wiki/$1 * - fetchDescription Fetch the text of the remote file description page. Equivalent to * $wgFetchCommonsDescriptions. * - abbrvThreshold File names over this size will use the short form of thumbnail names. @@ -517,6 +525,16 @@ $wgForeignFileRepos = array(); */ $wgUseInstantCommons = false; +/** + * Array of foreign file repo names (set in $wgForeignFileRepos above) that + * are allowable upload targets. These wikis must have some method of + * authentication (i.e. CentralAuth), and be CORS-enabled for this wiki. + * + * Example: + * $wgForeignUploadTargets = array( 'shared' ); + */ +$wgForeignUploadTargets = array(); + /** * File backend structure configuration. * @@ -717,7 +735,7 @@ $wgMinUploadChunkSize = 1024; # 1KB * * @par Example: * @code - * $wgUploadNavigationUrl = 'http://commons.wikimedia.org/wiki/Special:Upload'; + * $wgUploadNavigationUrl = 'https://commons.wikimedia.org/wiki/Special:Upload'; * @endcode */ $wgUploadNavigationUrl = false; @@ -777,7 +795,7 @@ $wgHashedSharedUploadDirectory = true; * * Please specify the namespace, as in the example below. */ -$wgRepositoryBaseUrl = "http://commons.wikimedia.org/wiki/File:"; +$wgRepositoryBaseUrl = "https://commons.wikimedia.org/wiki/File:"; /** * This is the list of preferred extensions for uploading files. Uploading files @@ -884,6 +902,7 @@ $wgMediaHandlers = array( 'image/png' => 'PNGHandler', 'image/gif' => 'GIFHandler', 'image/tiff' => 'TiffHandler', + 'image/webp' => 'WebPHandler', 'image/x-ms-bmp' => 'BmpHandler', 'image/x-bmp' => 'BmpHandler', 'image/x-xcf' => 'XCFHandler', @@ -978,6 +997,14 @@ $wgJpegTran = '/usr/bin/jpegtran'; */ $wgExiv2Command = '/usr/bin/exiv2'; + +/** + * Path to exiftool binary. Used for lossless ICC profile swapping. + * + * @since 1.26 + */ +$wgExiftool = '/usr/bin/exiftool'; + /** * Scalable Vector Graphics (SVG) may be uploaded as images. * Since SVG support is not yet standard in browsers, it is @@ -1012,7 +1039,7 @@ $wgSVGConverterPath = ''; /** * Don't scale a SVG larger than this */ -$wgSVGMaxSize = 2048; +$wgSVGMaxSize = 5120; /** * Don't read SVG metadata beyond this point. @@ -1330,6 +1357,14 @@ $wgUploadThumbnailRenderHttpCustomHost = false; */ $wgUploadThumbnailRenderHttpCustomDomain = false; +/** + * When this variable is true and JPGs use the sRGB ICC profile, swaps it for the more lightweight + * (and free) TinyRGB profile when generating thumbnails. + * + * @since 1.26 + */ +$wgUseTinyRGBForJPGThumbnails = false; + /** * Default parameters for the "" tag */ @@ -1580,7 +1615,8 @@ $wgEnotifRevealEditorAddress = false; /** * Send notification mails on minor edits to watchlist pages. This is enabled - * by default. Does not affect user talk notifications. + * by default. User talk notifications are affected by this, $wgEnotifUserTalk, and + * the nominornewtalk user right. */ $wgEnotifMinorEdits = true; @@ -1842,12 +1878,6 @@ $wgDBservers = false; */ $wgLBFactoryConf = array( 'class' => 'LBFactorySimple' ); -/** - * How long to wait for a slave to catch up to the master - * @deprecated since 1.24 - */ -$wgMasterWaitTimeout = 10; - /** * File to log database errors to */ @@ -1862,24 +1892,17 @@ $wgDBerrorLog = false; * * @par Examples: * @code - * $wgLocaltimezone = 'UTC'; - * $wgLocaltimezone = 'GMT'; - * $wgLocaltimezone = 'PST8PDT'; - * $wgLocaltimezone = 'Europe/Sweden'; - * $wgLocaltimezone = 'CET'; + * $wgDBerrorLogTZ = 'UTC'; + * $wgDBerrorLogTZ = 'GMT'; + * $wgDBerrorLogTZ = 'PST8PDT'; + * $wgDBerrorLogTZ = 'Europe/Sweden'; + * $wgDBerrorLogTZ = 'CET'; * @endcode * * @since 1.20 */ $wgDBerrorLogTZ = false; -/** - * Scale load balancer polling time so that under overload conditions, the - * database server receives a SHOW STATUS query at an average interval of this - * many microseconds - */ -$wgDBAvgStatusPoll = 2000; - /** * Set to true to engage MySQL 4.1/5.0 charset-related features; * for now will just cause sending of 'SET NAMES=utf8' on connect. @@ -2067,6 +2090,14 @@ $wgMaxArticleSize = 2048; */ $wgMemoryLimit = "50M"; +/** + * The minimum amount of time that MediaWiki needs for "slow" write request, + * particularly ones with multiple non-atomic writes that *should* be as + * transactional as possible; MediaWiki will call set_time_limit() if needed. + * @since 1.26 + */ +$wgTransactionalTimeLimit = 120; + /** @} */ # end performance hacks } /************************************************************************//** @@ -2086,8 +2117,8 @@ $wgCacheDirectory = false; /** * Main cache type. This should be a cache with fast access, but it may have - * limited space. By default, it is disabled, since the database is not fast - * enough to make it worthwhile. + * limited space. By default, it is disabled, since the stock database cache + * is not fast enough to make it worthwhile. * * The options are: * @@ -2157,6 +2188,19 @@ $wgObjectCaches = array( CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ), CACHE_MEMCACHED => array( 'factory' => 'ObjectCache::newMemcached', 'loggroup' => 'memcached' ), + 'db-replicated' => array( + 'class' => 'ReplicatedBagOStuff', + 'readFactory' => array( + 'class' => 'SqlBagOStuff', + 'args' => array( array( 'slaveOnly' => true ) ) + ), + 'writeFactory' => array( + 'class' => 'SqlBagOStuff', + 'args' => array( array( 'slaveOnly' => false ) ) + ), + 'loggroup' => 'SQLBagOStuff' + ), + 'apc' => array( 'class' => 'APCBagOStuff' ), 'xcache' => array( 'class' => 'XCacheBagOStuff' ), 'wincache' => array( 'class' => 'WinCacheBagOStuff' ), @@ -2165,6 +2209,71 @@ $wgObjectCaches = array( 'hash' => array( 'class' => 'HashBagOStuff' ), ); +/** + * Main Wide-Area-Network cache type. This should be a cache with fast access, + * but it may have limited space. By default, it is disabled, since the basic stock + * cache is not fast enough to make it worthwhile. For single data-center setups, this can + * simply be pointed to a cache in $wgWANObjectCaches that uses a local $wgObjectCaches + * cache with a relayer of type EventRelayerNull. + * + * The options are: + * - false: Configure the cache using $wgMainCacheType, without using + * a relayer (only matters if there are multiple data-centers) + * - CACHE_NONE: Do not cache + * - (other): A string may be used which identifies a cache + * configuration in $wgWANObjectCaches + * @since 1.26 + */ +$wgMainWANCache = false; + +/** + * Advanced WAN object cache configuration. + * + * Each WAN cache wraps a registered object cache (for the local cluster) + * and it must also be configured to point to a PubSub instance. Subscribers + * must be configured to relay purges to the actual cache servers. + * + * The format is an associative array where the key is a cache identifier, and + * the value is an associative array of parameters. The "cacheId" parameter is + * a cache identifier from $wgObjectCaches. The "relayerConfig" parameter is an + * array used to construct an EventRelayer object. The "pool" parameter is a + * string that is used as a PubSub channel prefix. + * + * @since 1.26 + */ +$wgWANObjectCaches = array( + CACHE_NONE => array( + 'class' => 'WANObjectCache', + 'cacheId' => CACHE_NONE, + 'pool' => 'mediawiki-main-none', + 'relayerConfig' => array( 'class' => 'EventRelayerNull' ) + ) + /* Example of a simple single data-center cache: + 'memcached-php' => array( + 'class' => 'WANObjectCache', + 'cacheId' => 'memcached-php', + 'pool' => 'mediawiki-main-memcached', + 'relayerConfig' => array( 'class' => 'EventRelayerNull' ) + ) + */ +); + +/** + * Main object stash type. This should be a fast storage system for storing + * lightweight data like hit counters and user activity. Sites with multiple + * data-centers should have this use a store that replicates all writes. The + * store should have enough consistency for CAS operations to be usable. + * Reads outside of those needed for merge() may be eventually consistent. + * + * The options are: + * - db: Store cache objects in the DB + * - (other): A string may be used which identifies a cache + * configuration in $wgObjectCaches + * + * @since 1.26 + */ +$wgMainStash = 'db-replicated'; + /** * The expiry time for the parser cache, in seconds. * The default is 86400 (one day). @@ -2239,11 +2348,13 @@ $wgAdaptiveMessageCache = false; * Localisation cache configuration. Associative array with keys: * class: The class to use. May be overridden by extensions. * - * store: The location to store cache data. May be 'files', 'db' or + * store: The location to store cache data. May be 'files', 'array', 'db' or * 'detect'. If set to "files", data will be in CDB files. If set * to "db", data will be stored to the database. If set to * "detect", files will be used if $wgCacheDirectory is set, * otherwise the database will be used. + * "array" is an experimental option that uses PHP files that + * store static arrays. * * storeClass: The class name for the underlying storage. If set to a class * name, it overrides the "store" setting. @@ -2311,13 +2422,8 @@ $wgUseFileCache = false; $wgFileCacheDepth = 2; /** - * Keep parsed pages in a cache (objectcache table or memcached) - * to speed up output of the same page viewed by another user with the - * same options. - * - * This can provide a significant speedup for medium to large pages, - * so you probably want to keep it on. Extensions that conflict with the - * parser cache should disable the cache on a per-page basis instead. + * Kept for extension compatibility; see $wgParserCacheType + * @deprecated 1.26 */ $wgEnableParserCache = true; @@ -2447,13 +2553,16 @@ $wgInternalServer = false; /** * Cache timeout for the squid, will be sent as s-maxage (without ESI) or * Surrogate-Control (with ESI). Without ESI, you should strip out s-maxage in - * the Squid config. 18000 seconds = 5 hours, more cache hits with 2678400 = 31 - * days + * the Squid config. + * +* 18000 seconds = 5 hours, more cache hits with 2678400 = 31 days. */ $wgSquidMaxage = 18000; /** * Default maximum age for raw CSS/JS accesses + * + * 300 seconds = 5 minutes. */ $wgForcedRawSMaxage = 300; @@ -2742,14 +2851,14 @@ $wgBrowserBlackList = array( * - Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC) * - [...] * - * @link http://en.wikipedia.org/w/index.php?diff=12356041&oldid=12355864 - * @link http://en.wikipedia.org/wiki/Template%3AOS9 + * @link https://en.wikipedia.org/w/index.php?diff=12356041&oldid=12355864 + * @link https://en.wikipedia.org/wiki/Template%3AOS9 */ '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/', /** * Google wireless transcoder, seems to eat a lot of chars alive - * http://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361 + * https://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361 */ '/^Mozilla\/4\.0 \(compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;\)/' ); @@ -3382,8 +3491,8 @@ $wgResourceModuleSkinStyles = array(); $wgResourceLoaderSources = array(); /** - * Default 'remoteBasePath' value for instances of ResourceLoaderFileModule. - * If not set, then $wgScriptPath will be used as a fallback. + * The default 'remoteBasePath' value for instances of ResourceLoaderFileModule. + * Defaults to $wgScriptPath. */ $wgResourceBasePath = null; @@ -3421,13 +3530,6 @@ $wgResourceLoaderMaxage = array( */ $wgResourceLoaderDebug = false; -/** - * Enable embedding of certain resources using Edge Side Includes. This will - * improve performance but only works if there is something in front of the - * web server (e..g a Squid or Varnish server) configured to process the ESI. - */ -$wgResourceLoaderUseESI = false; - /** * Put each statement on its own line when minifying JavaScript. This makes * debugging in non-debug mode a bit easier. @@ -3442,28 +3544,27 @@ $wgResourceLoaderMinifierStatementsOnOwnLine = false; $wgResourceLoaderMinifierMaxLineLength = 1000; /** - * Whether to include the mediawiki.legacy JS library (old wikibits.js), and its - * dependencies. + * Whether to ensure the mediawiki.legacy library is loaded before other modules. + * + * @deprecated since 1.26: Always declare dependencies. */ $wgIncludeLegacyJavaScript = true; /** - * Whether to preload the mediawiki.util module as blocking module in the top - * queue. + * Whether to ensure the mediawiki.util is loaded before other modules. * - * Before MediaWiki 1.19, modules used to load slower/less asynchronous which - * allowed modules to lack dependencies on 'popular' modules that were likely - * loaded already. + * Before MediaWiki 1.19, modules used to load less asynchronous which allowed + * modules to lack dependencies on 'popular' modules that were likely loaded already. * * This setting is to aid scripts during migration by providing mediawiki.util - * unconditionally (which was the most commonly missed dependency). - * It doesn't cover all missing dependencies obviously but should fix most of - * them. + * unconditionally (which was the most commonly missed dependency). It doesn't + * cover all missing dependencies obviously but should fix most of them. * * This should be removed at some point after site/user scripts have been fixed. * Enable this if your wiki has a large amount of user/site scripts that are * lacking dependencies. - * @todo Deprecate + * + * @deprecated since 1.26: Always declare dependencies. */ $wgPreloadJavaScriptMwUtil = false; @@ -3528,13 +3629,6 @@ $wgResourceLoaderValidateJS = true; */ $wgResourceLoaderValidateStaticJS = false; -/** - * If set to true, asynchronous loading of bottom-queue scripts in the "" - * will be enabled. This is an experimental feature that's supposed to make - * JavaScript load faster. - */ -$wgResourceLoaderExperimentalAsyncLoading = false; - /** * Global LESS variables. An associative array binding variable names to * LESS code snippets representing their values. @@ -3560,18 +3654,6 @@ $wgResourceLoaderExperimentalAsyncLoading = false; */ $wgResourceLoaderLESSVars = array(); -/** - * Custom LESS functions. An associative array mapping function name to PHP - * callable. - * - * Changes to LESS functions do not trigger cache invalidation. - * - * @since 1.22 - * @deprecated since 1.24 Questionable usefulness and problematic to support, - * will be removed in the future. - */ -$wgResourceLoaderLESSFunctions = array(); - /** * Default import paths for LESS modules. LESS files referenced in @import * statements will be looked up here first, and relative to the importing file @@ -3880,6 +3962,15 @@ $wgTrackingCategories = array(); */ $wgContentNamespaces = array( NS_MAIN ); +/** + * Array of namespaces, in addition to the talk namespaces, where signatures + * (~~~~) are likely to be used. This determines whether to display the + * Signature button on the edit toolbar, and may also be used by extensions. + * For example, "traditional" style wikis, where content and discussion are + * intermixed, could place NS_MAIN and NS_PROJECT namespaces in this array. + */ +$wgExtraSignatureNamespaces = array(); + /** * Max number of redirects to follow when resolving redirects. * 1 means only the first redirect is followed (default behavior). @@ -4031,44 +4122,55 @@ $wgEnableImageWhitelist = true; $wgAllowImageTag = false; /** - * $wgUseTidy: use tidy to make sure HTML output is sane. - * Tidy is a free tool that fixes broken HTML. - * See http://www.w3.org/People/Raggett/tidy/ + * Configuration for HTML postprocessing tool. Set this to a configuration + * array to enable an external tool. Dave Raggett's "HTML Tidy" is typically + * used. See http://www.w3.org/People/Raggett/tidy/ * - * - $wgTidyBin should be set to the path of the binary and - * - $wgTidyConf to the path of the configuration file. - * - $wgTidyOpts can include any number of parameters. - * - $wgTidyInternal controls the use of the PECL extension or the - * libtidy (PHP >= 5) extension to use an in-process tidy library instead - * of spawning a separate program. - * Normally you shouldn't need to override the setting except for - * debugging. To install, use 'pear install tidy' and add a line - * 'extension=tidy.so' to php.ini. + * If this is null and $wgUseTidy is true, the deprecated configuration + * parameters will be used instead. + * + * If this is null and $wgUseTidy is false, a pure PHP fallback will be used. + * + * Keys are: + * - driver: May be: + * - RaggettInternalHHVM: Use the limited-functionality HHVM extension + * - RaggettInternalPHP: Use the PECL extension + * - RaggettExternal: Shell out to an external binary (tidyBin) + * + * - tidyConfigFile: Path to configuration file for any of the Raggett drivers + * - debugComment: True to add a comment to the output with warning messages + * - tidyBin: For RaggettExternal, the path to the tidy binary. + * - tidyCommandLine: For RaggettExternal, additional command line options. */ -$wgUseTidy = false; +$wgTidyConfig = null; /** - * @see $wgUseTidy + * Set this to true to use the deprecated tidy configuration parameters. + * @deprecated use $wgTidyConfig */ -$wgAlwaysUseTidy = false; +$wgUseTidy = false; /** - * @see $wgUseTidy + * The path to the tidy binary. + * @deprecated Use $wgTidyConfig['tidyBin'] */ $wgTidyBin = 'tidy'; /** - * @see $wgUseTidy + * The path to the tidy config file + * @deprecated Use $wgTidyConfig['tidyConfigFile'] */ -$wgTidyConf = $IP . '/includes/tidy.conf'; +$wgTidyConf = $IP . '/includes/tidy/tidy.conf'; /** - * @see $wgUseTidy + * The command line options to the tidy binary + * @deprecated Use $wgTidyConfig['tidyCommandLine'] */ $wgTidyOpts = ''; /** - * @see $wgUseTidy + * Set this to true to use the tidy extension + * @deprecated Use $wgTidyConfig['driver'] */ $wgTidyInternal = extension_loaded( 'tidy' ); @@ -4197,6 +4299,59 @@ $wgActiveUserDays = 30; * @{ */ +/** + * Password policy for local wiki users. A user's effective policy + * is the superset of all policy statements from the policies for the + * groups where the user is a member. If more than one group policy + * include the same policy statement, the value is the max() of the + * values. Note true > false. The 'default' policy group is required, + * and serves as the minimum policy for all users. New statements can + * be added by appending to $wgPasswordPolicy['checks']. + * Statements: + * - MinimalPasswordLength - minimum length a user can set + * - MinimumPasswordLengthToLogin - passwords shorter than this will + * not be allowed to login, regardless if it is correct. + * - MaximalPasswordLength - maximum length password a user is allowed + * to attempt. Prevents DoS attacks with pbkdf2. + * - PasswordCannotMatchUsername - Password cannot match username to + * - PasswordCannotMatchBlacklist - Username/password combination cannot + * match a specific, hardcoded blacklist. + * @since 1.26 + */ +$wgPasswordPolicy = array( + 'policies' => array( + 'bureaucrat' => array( + 'MinimalPasswordLength' => 8, + 'MinimumPasswordLengthToLogin' => 1, + 'PasswordCannotMatchUsername' => true, + ), + 'sysop' => array( + 'MinimalPasswordLength' => 8, + 'MinimumPasswordLengthToLogin' => 1, + 'PasswordCannotMatchUsername' => true, + ), + 'bot' => array( + 'MinimalPasswordLength' => 8, + 'MinimumPasswordLengthToLogin' => 1, + 'PasswordCannotMatchUsername' => true, + ), + 'default' => array( + 'MinimalPasswordLength' => 1, + 'PasswordCannotMatchUsername' => true, + 'PasswordCannotMatchBlacklist' => true, + 'MaximalPasswordLength' => 4096, + ), + ), + 'checks' => array( + 'MinimalPasswordLength' => 'PasswordPolicyChecks::checkMinimalPasswordLength', + 'MinimumPasswordLengthToLogin' => 'PasswordPolicyChecks::checkMinimumPasswordLengthToLogin', + 'PasswordCannotMatchUsername' => 'PasswordPolicyChecks::checkPasswordCannotMatchUsername', + 'PasswordCannotMatchBlacklist' => 'PasswordPolicyChecks::checkPasswordCannotMatchBlacklist', + 'MaximalPasswordLength' => 'PasswordPolicyChecks::checkMaximalPasswordLength', + ), +); + + /** * For compatibility with old installations set to false * @deprecated since 1.24 will be removed in future @@ -4206,8 +4361,9 @@ $wgPasswordSalt = true; /** * Specifies the minimal length of a user password. If set to 0, empty pass- * words are allowed. + * @deprecated since 1.26, use $wgPasswordPolicy's MinimalPasswordLength. */ -$wgMinimalPasswordLength = 1; +$wgMinimalPasswordLength = false; /** * Specifies the maximal length of a user password (T64685). @@ -4218,8 +4374,9 @@ $wgMinimalPasswordLength = 1; * * @warning Unlike other password settings, user with passwords greater than * the maximum will not be able to log in. + * @deprecated since 1.26, use $wgPasswordPolicy's MaximalPasswordLength. */ -$wgMaximalPasswordLength = 4096; +$wgMaximalPasswordLength = false; /** * Specifies if users should be sent to a password-reset form on login, if their @@ -4295,7 +4452,7 @@ $wgPasswordConfig = array( */ $wgPasswordResetRoutes = array( 'username' => true, - 'email' => false, + 'email' => true, ); /** @@ -4322,6 +4479,7 @@ $wgReservedUsernames = array( 'msg:double-redirect-fixer', // Automatic double redirect fix 'msg:usermessage-editor', // Default user for leaving user messages 'msg:proxyblocker', // For $wgProxyList and Special:Blockme (removed in 1.22) + 'msg:spambot_username', // Used by cleanupSpam.php ); /** @@ -4397,7 +4555,7 @@ $wgHiddenPrefs = array(); * This is used in a regular expression character class during * registration (regex metacharacters like / are escaped). */ -$wgInvalidUsernameCharacters = '@'; +$wgInvalidUsernameCharacters = '@:'; /** * Character used as a delimiter when testing for interwiki userrights @@ -4413,7 +4571,7 @@ $wgUserrightsInterwikiDelimiter = '@'; /** * This is to let user authenticate using https when they come from http. * Based on an idea by George Herbert on wikitech-l: - * http://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050039.html + * https://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050039.html * @since 1.17 */ $wgSecureLogin = false; @@ -4433,7 +4591,7 @@ $wgAutoblockExpiry = 86400; /** * Set this to true to allow blocked users to edit their own user talk page. */ -$wgBlockAllowsUTEdit = false; +$wgBlockAllowsUTEdit = true; /** * Allow sysops to ban users from accessing Emailuser @@ -4940,7 +5098,7 @@ $wgAccountCreationThrottle = 0; * There's no administrator override on-wiki, so be careful what you set. :) * May be an array of regexes or a single string for backwards compatibility. * - * @see http://en.wikipedia.org/wiki/Regular_expression + * @see https://en.wikipedia.org/wiki/Regular_expression * * @note Each regex needs a beginning/end delimiter, eg: # or / */ @@ -5144,6 +5302,22 @@ $wgProxyList = array(); */ $wgCookieExpiration = 180 * 86400; +/** + * The identifiers of the login cookies that can have their lifetimes + * extended independently of all other login cookies. + * + * @var string[] + */ +$wgExtendedLoginCookies = array( 'UserID', 'Token' ); + +/** + * Default login cookie lifetime, in seconds. Setting + * $wgExtendLoginCookieExpiration to null will use $wgCookieExpiration to + * calculate the cookie lifetime. As with $wgCookieExpiration, 0 will make + * login cookies session-only. + */ +$wgExtendedLoginCookieExpiration = null; + /** * Set to set an explicit domain on the login cookies eg, "justthis.domain.org" * or ".any.subdomain.net" @@ -5281,6 +5455,36 @@ $wgDebugDumpSql = false; */ $wgDebugDumpSqlLength = 500; +/** + * Performance expectations for DB usage + * + * @since 1.26 + */ +$wgTrxProfilerLimits = array( + // Basic GET and POST requests + 'GET' => array( + 'masterConns' => 0, + 'writes' => 0, + 'readQueryTime' => 5 + ), + 'POST' => array( + 'readQueryTime' => 5, + 'writeQueryTime' => 1, + 'maxAffected' => 500 + ), + // Background job runner + 'JobRunner' => array( + 'readQueryTime' => 30, + 'writeQueryTime' => 5, + 'maxAffected' => 500 + ), + // Command-line scripts + 'Maintenance' => array( + 'writeQueryTime' => 5, + 'maxAffected' => 1000 + ) +); + /** * Map of string log group names to log destinations. * @@ -5447,7 +5651,7 @@ $wgProfilePerHost = null; * * The host should be running a daemon which can be obtained from MediaWiki * Git at: - * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile + * https://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile * * @deprecated set $wgProfiler['udphost'] instead */ @@ -5503,6 +5707,29 @@ $wgAggregateStatsID = false; */ $wgStatsFormatString = "stats/%s - %s 1 1 1 1 %s\n"; +/** + * Destination of statsd metrics. + * + * A host or host:port of a statsd server. Port defaults to 8125. + * + * If not set, statsd metrics will not be collected. + * + * @see wfLogProfilingData + * @since 1.25 + */ +$wgStatsdServer = false; + +/** + * Prefix for metric names sent to wgStatsdServer. + * + * Defaults to "MediaWiki". + * + * @see RequestContext::getStats + * @see BufferingStatsdDataFactory + * @since 1.25 + */ +$wgStatsdMetricPrefix = false; + /** * InfoAction retrieves a list of transclusion links (both to and from). * This number puts a limit on that query in the case of highly transcluded @@ -5835,6 +6062,21 @@ $wgGitRepositoryViewers = array( */ $wgRCMaxAge = 90 * 24 * 3600; +/** + * Page watchers inactive for more than this many seconds are considered inactive. + * Used mainly by action=info. Default: 180 days = about six months. + * @since 1.26 + */ +$wgWatchersMaxAge = 180 * 24 * 3600; + +/** + * If active watchers (per above) are this number or less, do not disclose it. + * Left to 1, prevents unprivileged users from knowing for sure that there are 0. + * Set to -1 if you want to always complement watchers count with this info. + * @since 1.26 + */ +$wgUnwatchedPageSecret = 1; + /** * Filter $wgRCLinkDays by $wgRCMaxAge to avoid showing links for numbers * higher than what will be stored. Note that this is disabled by default @@ -6453,6 +6695,7 @@ $wgJobClasses = array( 'ThumbnailRender' => 'ThumbnailRenderJob', 'recentChangesUpdate' => 'RecentChangesUpdateJob', 'refreshLinksPrioritized' => 'RefreshLinksJob', // for cascading protection + 'activityUpdateJob' => 'ActivityUpdateJob', 'enqueue' => 'EnqueueJob', // local queue for multi-DC setups 'null' => 'NullJob' ); @@ -6481,6 +6724,21 @@ $wgJobTypesExcludedFromDefaultQueue = array( 'AssembleUploadChunks', 'PublishSta */ $wgJobBackoffThrottling = array(); +/** + * Make job runners commit changes for slave-lag prone jobs one job at a time. + * This is useful if there are many job workers that race on slave lag checks. + * If set, jobs taking this many seconds of DB write time have serialized commits. + * + * Note that affected jobs may have worse lock contention. Also, if they affect + * several DBs at once they may have a smaller chance of being atomic due to the + * possibility of connection loss while queueing up to commit. Affected jobs may + * also fail due to the commit lock acquisition timeout. + * + * @var float|bool + * @since 1.26 + */ +$wgJobSerialCommitThreshold = false; + /** * Map of job types to configuration arrays. * This determines which queue class and storage system is used for each job type. @@ -6488,7 +6746,7 @@ $wgJobBackoffThrottling = array(); * These settings should be global to all wikis. */ $wgJobTypeConf = array( - 'default' => array( 'class' => 'JobQueueDB', 'order' => 'random' ), + 'default' => array( 'class' => 'JobQueueDB', 'order' => 'random', 'claimTTL' => 3600 ), ); /** @@ -6604,6 +6862,7 @@ $wgLogTypes = array( 'suppress', 'tag', 'managetags', + 'contentmodel', ); /** @@ -6679,15 +6938,15 @@ $wgLogNames = array( $wgLogHeaders = array( '' => 'alllogstext', 'block' => 'blocklogtext', - 'protect' => 'protectlogtext', - 'rights' => 'rightslogtext', 'delete' => 'dellogpagetext', - 'upload' => 'uploadlogpagetext', - 'move' => 'movelogpagetext', 'import' => 'importlogpagetext', - 'patrol' => 'patrol-log-header', 'merge' => 'mergelogpagetext', + 'move' => 'movelogpagetext', + 'patrol' => 'patrol-log-header', + 'protect' => 'protectlogtext', + 'rights' => 'rightslogtext', 'suppress' => 'suppressionlogtext', + 'upload' => 'uploadlogpagetext', ); /** @@ -6697,10 +6956,9 @@ $wgLogHeaders = array( * Extensions with custom log types may add to this array. */ $wgLogActions = array( - 'protect/protect' => 'protectedarticle', 'protect/modify' => 'modifiedarticleprotection', + 'protect/protect' => 'protectedarticle', 'protect/unprotect' => 'unprotectedarticle', - 'protect/move_prot' => 'movedarticleprotection', ); /** @@ -6710,34 +6968,36 @@ $wgLogActions = array( * @see LogFormatter */ $wgLogActionsHandlers = array( - 'move/move' => 'MoveLogFormatter', - 'move/move_redir' => 'MoveLogFormatter', + 'block/block' => 'BlockLogFormatter', + 'block/reblock' => 'BlockLogFormatter', + 'block/unblock' => 'BlockLogFormatter', + 'contentmodel/change' => 'ContentModelLogFormatter', 'delete/delete' => 'DeleteLogFormatter', + 'delete/event' => 'DeleteLogFormatter', 'delete/restore' => 'DeleteLogFormatter', 'delete/revision' => 'DeleteLogFormatter', - 'delete/event' => 'DeleteLogFormatter', - 'suppress/revision' => 'DeleteLogFormatter', - 'suppress/event' => 'DeleteLogFormatter', - 'suppress/delete' => 'DeleteLogFormatter', - 'patrol/patrol' => 'PatrolLogFormatter', - 'rights/rights' => 'RightsLogFormatter', - 'rights/autopromote' => 'RightsLogFormatter', - 'upload/upload' => 'UploadLogFormatter', - 'upload/overwrite' => 'UploadLogFormatter', - 'upload/revert' => 'UploadLogFormatter', - 'merge/merge' => 'MergeLogFormatter', - 'tag/update' => 'TagLogFormatter', - 'managetags/create' => 'LogFormatter', - 'managetags/delete' => 'LogFormatter', + 'import/interwiki' => 'LogFormatter', + 'import/upload' => 'LogFormatter', 'managetags/activate' => 'LogFormatter', + 'managetags/create' => 'LogFormatter', 'managetags/deactivate' => 'LogFormatter', - 'block/block' => 'BlockLogFormatter', - 'block/unblock' => 'BlockLogFormatter', - 'block/reblock' => 'BlockLogFormatter', + 'managetags/delete' => 'LogFormatter', + 'merge/merge' => 'MergeLogFormatter', + 'move/move' => 'MoveLogFormatter', + 'move/move_redir' => 'MoveLogFormatter', + 'patrol/patrol' => 'PatrolLogFormatter', + 'protect/move_prot' => 'ProtectLogFormatter', + 'rights/autopromote' => 'RightsLogFormatter', + 'rights/rights' => 'RightsLogFormatter', 'suppress/block' => 'BlockLogFormatter', + 'suppress/delete' => 'DeleteLogFormatter', + 'suppress/event' => 'DeleteLogFormatter', 'suppress/reblock' => 'BlockLogFormatter', - 'import/upload' => 'LogFormatter', - 'import/interwiki' => 'LogFormatter', + 'suppress/revision' => 'DeleteLogFormatter', + 'tag/update' => 'TagLogFormatter', + 'upload/overwrite' => 'UploadLogFormatter', + 'upload/revert' => 'UploadLogFormatter', + 'upload/upload' => 'UploadLogFormatter', ); /** @@ -6763,14 +7023,6 @@ $wgAllowSpecialInclusion = true; */ $wgDisableQueryPageUpdate = false; -/** - * List of special pages, followed by what subtitle they should go under - * at Special:SpecialPages - * - * @deprecated since 1.21 Override SpecialPage::getGroupName instead - */ -$wgSpecialPageGroups = array(); - /** * On Special:Unusedimages, consider images "used", if they are put * into a category. Default (false) is not to count those as used. @@ -7008,12 +7260,6 @@ $wgAPIPropModules = array(); */ $wgAPIListModules = array(); -/** - * This variable is ignored. To add your module to the API, please add it to $wgAPI*Modules - * @deprecated since 1.21 - */ -$wgAPIGeneratorModules = array(); - /** * Maximum amount of rows to scan in a DB query in the API * The default value is generally fine @@ -7464,6 +7710,7 @@ $wgUseLinkNamespaceDBFields = true; * $wgVirtualRestConfig['modules']['parsoid'] = array( * 'url' => 'http://localhost:8000', * 'prefix' => 'enwiki', + * 'domain' => 'en.wikipedia.org', * ); * * @var array @@ -7474,11 +7721,21 @@ $wgVirtualRestConfig = array( 'global' => array( # Timeout in seconds 'timeout' => 360, + # 'domain' is set to $wgCanonicalServer in Setup.php 'forwardCookies' => false, 'HTTPProxy' => null ) ); +/** + * Controls whether zero-result search queries with suggestions should display results for + * these suggestions. + * + * @var bool + * @since 1.26 + */ +$wgSearchRunSuggestedQuery = true; + /** * For really cool vim folding this needs to be at the end: * vim: foldmarker=@{,@} foldmethod=marker diff --git a/includes/Defines.php b/includes/Defines.php index c9263da9..d55bbcf8 100644 --- a/includes/Defines.php +++ b/includes/Defines.php @@ -24,11 +24,6 @@ * @defgroup Constants MediaWiki constants */ -/** - * Version constants for the benefit of extensions - */ -define( 'MW_SPECIALPAGE_VERSION', 2 ); - /**@{ * Database related constants */ @@ -203,7 +198,7 @@ define( 'LIST_OR', 4 ); /** * Unicode and normalisation related */ -require_once __DIR__ . '/libs/normal/UtfNormalDefines.php'; +require_once __DIR__ . '/compat/normal/UtfNormalDefines.php'; /**@{ * Hook support constants diff --git a/includes/EditPage.php b/includes/EditPage.php index 8d27eac8..05e0ac0e 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -167,6 +167,12 @@ class EditPage { */ const AS_PARSE_ERROR = 240; + /** + * Status: when changing the content model is disallowed due to + * $wgContentHandlerUseDB being false + */ + const AS_CANNOT_USE_CUSTOM_MODEL = 241; + /** * HTML id and name for the beginning of the edit form. */ @@ -380,12 +386,14 @@ class EditPage { public $suppressIntro = false; - /** @var bool Set to true to allow editing of non-text content types. */ - public $allowNonTextContent = false; - /** @var bool */ protected $edit; + /** + * @var bool Set in ApiEditPage, based on ContentHandler::allowsDirectApiEditing + */ + private $enableApiEditOverride = false; + /** * @param Article $article */ @@ -447,8 +455,18 @@ class EditPage { * @throws MWException If $modelId has no known handler */ public function isSupportedContentModel( $modelId ) { - return $this->allowNonTextContent || - ContentHandler::getForModelID( $modelId ) instanceof TextContentHandler; + return $this->enableApiEditOverride === true || + ContentHandler::getForModelID( $modelId )->supportsDirectEditing(); + } + + /** + * Allow editing of content that supports API direct editing, but not general + * direct editing. Set to false by default. + * + * @param bool $enableOverride + */ + public function setApiEditOverride( $enableOverride ) { + $this->enableApiEditOverride = $enableOverride; } function submit() { @@ -509,7 +527,10 @@ class EditPage { if ( $permErrors ) { wfDebug( __METHOD__ . ": User can't edit\n" ); // Auto-block user's IP if the account was "hard" blocked - $wgUser->spreadAnyEditBlock(); + $user = $wgUser; + DeferredUpdates::addCallableUpdate( function() use ( $user ) { + $user->spreadAnyEditBlock(); + } ); $this->displayPermissionsError( $permErrors ); @@ -634,6 +655,9 @@ class EditPage { $this->getContextTitle()->getPrefixedText() ) ); $wgOut->addBacklinkSubtitle( $this->getContextTitle() ); + $wgOut->addHTML( $this->editFormPageTop ); + $wgOut->addHTML( $this->editFormTextTop ); + $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' ) ); $wgOut->addHTML( "
      \n" ); @@ -647,13 +671,16 @@ class EditPage { $wgOut->addWikiMsg( 'viewsourcetext' ); } + $wgOut->addHTML( $this->editFormTextBeforeContent ); $this->showTextbox( $text, 'wpTextbox1', array( 'readonly' ) ); + $wgOut->addHTML( $this->editFormTextAfterContent ); $wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ), Linker::formatTemplates( $this->getTemplates() ) ) ); $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' ); + $wgOut->addHTML( $this->editFormTextBottom ); if ( $this->mTitle->exists() ) { $wgOut->returnToMain( null, $this->mTitle ); } @@ -1025,7 +1052,6 @@ class EditPage { $undo = $wgRequest->getInt( 'undo' ); if ( $undo > 0 && $undoafter > 0 ) { - $undorev = Revision::newFromId( $undo ); $oldrev = Revision::newFromId( $undoafter ); @@ -1034,8 +1060,8 @@ class EditPage { # Otherwise, $content will be left as-is. if ( !is_null( $undorev ) && !is_null( $oldrev ) && !$undorev->isDeleted( Revision::DELETED_TEXT ) && - !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) { - + !$oldrev->isDeleted( Revision::DELETED_TEXT ) + ) { $content = $this->mArticle->getUndoContent( $undorev, $oldrev ); if ( $content === false ) { @@ -1230,9 +1256,9 @@ class EditPage { if ( !$converted ) { //TODO: somehow show a warning to the user! - wfDebug( "Attempt to preload incompatible content: " - . "can't convert " . $content->getModel() - . " to " . $handler->getModelID() ); + wfDebug( "Attempt to preload incompatible content: " . + "can't convert " . $content->getModel() . + " to " . $handler->getModelID() ); return $handler->makeEmptyContent(); } @@ -1350,6 +1376,7 @@ class EditPage { case self::AS_HOOK_ERROR: return false; + case self::AS_CANNOT_USE_CUSTOM_MODEL: case self::AS_PARSE_ERROR: $wgOut->addWikiText( '
      ' . $status->getWikiText() . '
      ' ); return true; @@ -1532,6 +1559,7 @@ class EditPage { */ function internalAttemptSave( &$result, $bot = false ) { global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize; + global $wgContentHandlerUseDB; $status = Status::newGood(); @@ -1652,11 +1680,19 @@ class EditPage { } } - if ( $this->contentModel !== $this->mTitle->getContentModel() - && !$wgUser->isAllowed( 'editcontentmodel' ) - ) { - $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL ); - return $status; + $changingContentModel = false; + if ( $this->contentModel !== $this->mTitle->getContentModel() ) { + if ( !$wgContentHandlerUseDB ) { + $status->fatal( 'editpage-cannot-use-custom-model' ); + $status->value = self::AS_CANNOT_USE_CUSTOM_MODEL; + return $status; + } elseif ( !$wgUser->isAllowed( 'editcontentmodel' ) ) { + $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL ); + return $status; + + } + $changingContentModel = true; + $oldContentModel = $this->mTitle->getContentModel(); } if ( $this->changeTags ) { @@ -1916,7 +1952,7 @@ class EditPage { $this->summary, $flags, false, - null, + $wgUser, $content->getDefaultFormat() ); @@ -1946,16 +1982,48 @@ class EditPage { if ( $this->changeTags && isset( $doEditStatus->value['revision'] ) ) { // If a revision was created, apply any change tags that were requested - ChangeTags::addTags( - $this->changeTags, - isset( $doEditStatus->value['rc'] ) ? $doEditStatus->value['rc']->mAttribs['rc_id'] : null, - $doEditStatus->value['revision']->getId() + $addTags = $this->changeTags; + $revId = $doEditStatus->value['revision']->getId(); + // Defer this both for performance and so that addTags() sees the rc_id + // since the recentchange entry addition is deferred first (bug T100248) + DeferredUpdates::addCallableUpdate( function() use ( $addTags, $revId ) { + ChangeTags::addTags( $addTags, null, $revId ); + } ); + } + + // If the content model changed, add a log entry + if ( $changingContentModel ) { + $this->addContentModelChangeLogEntry( + $wgUser, + $oldContentModel, + $this->contentModel, + $this->summary ); } return $status; } + /** + * @param Title $title + * @param string $oldModel + * @param string $newModel + * @param string $reason + */ + protected function addContentModelChangeLogEntry( User $user, $oldModel, $newModel, $reason ) { + $log = new ManualLogEntry( 'contentmodel', 'change' ); + $log->setPerformer( $user ); + $log->setTarget( $this->mTitle ); + $log->setComment( $reason ); + $log->setParameters( array( + '4::oldmodel' => $oldModel, + '5::newmodel' => $newModel + ) ); + $logid = $log->insert(); + $log->publish( $logid ); + } + + /** * Register the change of watch status */ @@ -2486,7 +2554,7 @@ class EditPage { $wgOut->addHTML( $this->editFormTextBeforeContent ); if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) { - $wgOut->addHTML( EditPage::getEditToolbar() ); + $wgOut->addHTML( EditPage::getEditToolbar( $this->mTitle ) ); } if ( $this->blankArticle ) { @@ -3386,7 +3454,7 @@ HTML $this->deletedSinceEdit = false; - if ( $this->mTitle->isDeletedQuick() ) { + if ( !$this->mTitle->exists() && $this->mTitle->isDeletedQuick() ) { $this->lastDelete = $this->getLastDelete(); if ( $this->lastDelete ) { $deleteTime = wfTimestamp( TS_MW, $this->lastDelete->log_timestamp ); @@ -3450,6 +3518,8 @@ HTML global $wgOut, $wgUser, $wgRawHtml, $wgLang; global $wgAllowUserCss, $wgAllowUserJs; + $stats = $wgOut->getContext()->getStats(); + if ( $wgRawHtml && !$this->mTokenOk ) { // Could be an offsite preview attempt. This is very unsafe if // HTML is enabled, as it could be an attack. @@ -3461,6 +3531,7 @@ HTML $parsedNote = $wgOut->parse( "
      " . wfMessage( 'session_fail_preview_html' )->text() . "
      ", true, /* interface */true ); } + $stats->increment( 'edit.failures.session_loss' ); return $parsedNote; } @@ -3484,11 +3555,16 @@ HTML if ( $this->mTriedSave && !$this->mTokenOk ) { if ( $this->mTokenOkExceptSuffix ) { $note = wfMessage( 'token_suffix_mismatch' )->plain(); + $stats->increment( 'edit.failures.bad_token' ); } else { $note = wfMessage( 'session_fail_preview' )->plain(); + $stats->increment( 'edit.failures.session_loss' ); } } elseif ( $this->incompleteForm ) { $note = wfMessage( 'edit_form_incomplete' )->plain(); + if ( $this->mTriedSave ) { + $stats->increment( 'edit.failures.incomplete_form' ); + } } else { $note = wfMessage( 'previewnote' )->plain() . ' ' . $continueEditing; } @@ -3619,13 +3695,18 @@ HTML * Shows a bulletin board style toolbar for common editing functions. * It can be disabled in the user preferences. * + * @param $title Title object for the page being edited (optional) * @return string */ - static function getEditToolbar() { + static function getEditToolbar( $title = null ) { global $wgContLang, $wgOut; global $wgEnableUploads, $wgForeignFileRepos; $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos ); + $showSignature = true; + if ( $title ) { + $showSignature = MWNamespace::wantSignatures( $title->getNamespace() ); + } /** * $toolarray is an array of arrays each of which includes the @@ -3693,13 +3774,13 @@ HTML 'sample' => wfMessage( 'nowiki_sample' )->text(), 'tip' => wfMessage( 'nowiki_tip' )->text(), ), - array( + $showSignature ? array( 'id' => 'mw-editbutton-signature', 'open' => '--~~~~', 'close' => '', 'sample' => '', 'tip' => wfMessage( 'sig_tip' )->text(), - ), + ) : false, array( 'id' => 'mw-editbutton-hr', 'open' => "\n----\n", @@ -3737,7 +3818,7 @@ HTML } $script .= '});'; - $wgOut->addScript( Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( $script ) ) ); + $wgOut->addScript( ResourceLoader::makeInlineScript( $script ) ); $toolbar = '
      '; diff --git a/includes/Export.php b/includes/Export.php index 4600feb5..adab21c3 100644 --- a/includes/Export.php +++ b/includes/Export.php @@ -874,7 +874,7 @@ class XmlDumpWriter { } global $wgContLang; - $prefix = str_replace( '_', ' ', $wgContLang->getNsText( $title->getNamespace() ) ); + $prefix = $wgContLang->getFormattedNsText( $title->getNamespace() ); if ( $prefix !== '' ) { $prefix .= ':'; @@ -1191,7 +1191,7 @@ class Dump7ZipOutput extends DumpPipeOutput { * @return string */ function setup7zCommand( $file ) { - $command = "7za a -bd -si " . wfEscapeShellArg( $file ); + $command = "7za a -bd -si -mx=4 " . wfEscapeShellArg( $file ); // Suppress annoying useless crap from p7zip // Unfortunately this could suppress real error messages too $command .= ' >' . wfGetNull() . ' 2>&1'; diff --git a/includes/FileDeleteForm.php b/includes/FileDeleteForm.php index c1d14db0..bcd6db20 100644 --- a/includes/FileDeleteForm.php +++ b/includes/FileDeleteForm.php @@ -296,8 +296,8 @@ class FileDeleteForm { Xml::closeElement( 'form' ); if ( $wgUser->isAllowed( 'editinterface' ) ) { - $title = Title::makeTitle( NS_MEDIAWIKI, 'Filedelete-reason-dropdown' ); - $link = Linker::link( + $title = wfMessage( 'filedelete-reason-dropdown' )->inContentLanguage()->getTitle(); + $link = Linker::linkKnown( $title, wfMessage( 'filedelete-edit-reasonlist' )->escaped(), array(), diff --git a/includes/GitInfo.php b/includes/GitInfo.php index fb298cfe..7f05bb0f 100644 --- a/includes/GitInfo.php +++ b/includes/GitInfo.php @@ -281,9 +281,9 @@ class GitInfo { $config = "{$this->basedir}/config"; $url = false; if ( is_readable( $config ) ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $configArray = parse_ini_file( $config, true ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); $remote = false; // Use the "origin" remote repo if available or any other repo if not. diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index ab3f019f..64aa87ec 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -24,7 +24,6 @@ if ( !defined( 'MEDIAWIKI' ) ) { die( "This file is part of MediaWiki, it is not a valid entry point" ); } -use Liuggio\StatsdClient\StatsdClient; use Liuggio\StatsdClient\Sender\SocketSender; use MediaWiki\Logger\LoggerFactory; @@ -172,6 +171,7 @@ if ( !function_exists( 'hash_equals' ) ) { * * @param string $ext Name of the extension to load * @param string|null $path Absolute path of where to find the extension.json file + * @since 1.25 */ function wfLoadExtension( $ext, $path = null ) { if ( !$path ) { @@ -192,6 +192,7 @@ function wfLoadExtension( $ext, $path = null ) { * * @see wfLoadExtension * @param string[] $exts Array of extension names to load + * @since 1.25 */ function wfLoadExtensions( array $exts ) { global $wgExtensionDirectory; @@ -207,6 +208,7 @@ function wfLoadExtensions( array $exts ) { * @see wfLoadExtension * @param string $skin Name of the extension to load * @param string|null $path Absolute path of where to find the skin.json file + * @since 1.25 */ function wfLoadSkin( $skin, $path = null ) { if ( !$path ) { @@ -221,6 +223,7 @@ function wfLoadSkin( $skin, $path = null ) { * * @see wfLoadExtensions * @param string[] $skins Array of extension names to load + * @since 1.25 */ function wfLoadSkins( array $skins ) { global $wgStyleDirectory; @@ -402,12 +405,17 @@ function wfRandomString( $length = 32 ) { * * ;:@&=$-_.+!*'(), * + * RFC 1738 says ~ is unsafe, however RFC 3986 considers it an unreserved + * character which should not be encoded. More importantly, google chrome + * always converts %7E back to ~, and converting it in this function can + * cause a redirect loop (T105265). + * * But + is not safe because it's used to indicate a space; &= are only safe in * paths and not in queries (and we don't distinguish here); ' seems kind of * scary; and urlencode() doesn't touch -_. to begin with. Plus, although / * is reserved, we don't care. So the list we unescape is: * - * ;:@$!*(),/ + * ;:@$!*(),/~ * * However, IIS7 redirects fail when the url contains a colon (Bug 22709), * so no fancy : for IIS7. @@ -426,7 +434,7 @@ function wfUrlencode( $s ) { } if ( is_null( $needle ) ) { - $needle = array( '%3B', '%40', '%24', '%21', '%2A', '%28', '%29', '%2C', '%2F' ); + $needle = array( '%3B', '%40', '%24', '%21', '%2A', '%28', '%29', '%2C', '%2F', '%7E' ); if ( !isset( $_SERVER['SERVER_SOFTWARE'] ) || ( strpos( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/7' ) === false ) ) { @@ -437,7 +445,7 @@ function wfUrlencode( $s ) { $s = urlencode( $s ); $s = str_ireplace( $needle, - array( ';', '@', '$', '!', '*', '(', ')', ',', '/', ':' ), + array( ';', '@', '$', '!', '*', '(', ')', ',', '/', '~', ':' ), $s ); @@ -860,9 +868,9 @@ function wfParseUrl( $url ) { if ( $wasRelative ) { $url = "http:$url"; } - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $bits = parse_url( $url ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); // parse_url() returns an array without scheme for some invalid URLs, e.g. // parse_url("%0Ahttp://example.com") == array( 'host' => '%0Ahttp', 'path' => 'example.com' ) if ( !$bits || !isset( $bits['scheme'] ) ) { @@ -1248,13 +1256,17 @@ function wfLogProfilingData() { $profiler->logData(); $config = $context->getConfig(); - if ( $config->has( 'StatsdServer' ) ) { - $statsdServer = explode( ':', $config->get( 'StatsdServer' ) ); - $statsdHost = $statsdServer[0]; - $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125; - $statsdSender = new SocketSender( $statsdHost, $statsdPort ); - $statsdClient = new StatsdClient( $statsdSender ); - $statsdClient->send( $context->getStats()->getBuffer() ); + if ( $config->get( 'StatsdServer' ) ) { + try { + $statsdServer = explode( ':', $config->get( 'StatsdServer' ) ); + $statsdHost = $statsdServer[0]; + $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125; + $statsdSender = new SocketSender( $statsdHost, $statsdPort ); + $statsdClient = new SamplingStatsdClient( $statsdSender, true, false ); + $statsdClient->send( $context->getStats()->getBuffer() ); + } catch ( Exception $ex ) { + MWExceptionHandler::logException( $ex ); + } } # Profiling must actually be enabled... @@ -1344,6 +1356,17 @@ function wfReadOnlyReason() { } else { $wgReadOnly = false; } + // Callers use this method to be aware that data presented to a user + // may be very stale and thus allowing submissions can be problematic. + try { + if ( $wgReadOnly === false && wfGetLB()->getLaggedSlaveMode() ) { + $wgReadOnly = 'The database has been automatically locked ' . + 'while the slave database servers catch up to the master'; + } + } catch ( DBConnectionError $e ) { + $wgReadOnly = 'The database has been automatically locked ' . + 'until the slave database servers become available'; + } } return $wgReadOnly; @@ -1405,7 +1428,7 @@ function wfGetLangObj( $langcode = false ) { * * This function replaces all old wfMsg* functions. * - * @param string|string[] $key Message key, or array of keys + * @param string|string[]|MessageSpecifier $key Message key, or array of keys, or a MessageSpecifier * @param mixed $params,... Normal message parameters * @return Message * @@ -1745,7 +1768,7 @@ function wfMsgExt( $key, $options ) { } if ( in_array( 'escape', $options, true ) ) { - $string = htmlspecialchars ( $string ); + $string = htmlspecialchars( $string ); } elseif ( in_array( 'escapenoentities', $options, true ) ) { $string = Sanitizer::escapeHtmlAllowEntities( $string ); } @@ -2118,15 +2141,14 @@ function wfVarDump( $var ) { */ function wfHttpError( $code, $label, $desc ) { global $wgOut; - header( "HTTP/1.0 $code $label" ); - header( "Status: $code $label" ); + HttpStatus::header( $code ); if ( $wgOut ) { $wgOut->disable(); $wgOut->sendCacheControl(); } header( 'Content-type: text/html; charset=utf-8' ); - print "" . + print '' . '' . htmlspecialchars( $label ) . '

      ' . @@ -2161,14 +2183,24 @@ function wfResetOutputBuffers( $resetGzipEncoding = true ) { $wgDisableOutputCompression = true; } while ( $status = ob_get_status() ) { - if ( $status['type'] == 0 /* PHP_OUTPUT_HANDLER_INTERNAL */ ) { - // Probably from zlib.output_compression or other - // PHP-internal setting which can't be removed. - // + if ( isset( $status['flags'] ) ) { + $flags = PHP_OUTPUT_HANDLER_CLEANABLE | PHP_OUTPUT_HANDLER_REMOVABLE; + $deleteable = ( $status['flags'] & $flags ) === $flags; + } elseif ( isset( $status['del'] ) ) { + $deleteable = $status['del']; + } else { + // Guess that any PHP-internal setting can't be removed. + $deleteable = $status['type'] !== 0; /* PHP_OUTPUT_HANDLER_INTERNAL */ + } + if ( !$deleteable ) { // Give up, and hope the result doesn't break // output behavior. break; } + if ( $status['name'] === 'MediaWikiTestCase::wfResetOutputBuffersBarrier' ) { + // Unit testing barrier to prevent this function from breaking PHPUnit. + break; + } if ( !ob_end_clean() ) { // Could not remove output buffer handler; abort now // to avoid getting in some kind of infinite loop. @@ -2312,40 +2344,19 @@ function wfNegotiateType( $cprefs, $sprefs ) { /** * Reference-counted warning suppression * + * @deprecated since 1.26, use MediaWiki\suppressWarnings() directly * @param bool $end */ function wfSuppressWarnings( $end = false ) { - static $suppressCount = 0; - static $originalLevel = false; - - if ( $end ) { - if ( $suppressCount ) { - --$suppressCount; - if ( !$suppressCount ) { - error_reporting( $originalLevel ); - } - } - } else { - if ( !$suppressCount ) { - $originalLevel = error_reporting( E_ALL & ~( - E_WARNING | - E_NOTICE | - E_USER_WARNING | - E_USER_NOTICE | - E_DEPRECATED | - E_USER_DEPRECATED | - E_STRICT - ) ); - } - ++$suppressCount; - } + MediaWiki\suppressWarnings( $end ); } /** + * @deprecated since 1.26, use MediaWiki\restoreWarnings() directly * Restore error level to previous value */ function wfRestoreWarnings() { - wfSuppressWarnings( true ); + MediaWiki\suppressWarnings( true ); } # Autodetect, convert and provide timestamps of various types @@ -2453,7 +2464,7 @@ function wfTimestampNow() { function wfIsWindows() { static $isWindows = null; if ( $isWindows === null ) { - $isWindows = substr( php_uname(), 0, 7 ) == 'Windows'; + $isWindows = strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN'; } return $isWindows; } @@ -2515,7 +2526,7 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) { wfDebug( "$caller: called wfMkdirParents($dir)\n" ); } - if ( strval( $dir ) === '' || ( file_exists( $dir ) && is_dir( $dir ) ) ) { + if ( strval( $dir ) === '' || is_dir( $dir ) ) { return true; } @@ -2526,9 +2537,9 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) { } // Turn off the normal warning, we're doing our own below - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $ok = mkdir( $dir, $mode, true ); // PHP5 <3 - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$ok ) { //directory may have been created on another request since we last checked @@ -2769,7 +2780,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $useLogPipe = false; if ( is_executable( '/bin/bash' ) ) { - $time = intval ( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime ); + $time = intval( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime ); if ( isset( $limits['walltime'] ) ) { $wallTime = intval( $limits['walltime'] ); } elseif ( isset( $limits['time'] ) ) { @@ -2777,8 +2788,8 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), } else { $wallTime = intval( $wgMaxShellWallClockTime ); } - $mem = intval ( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory ); - $filesize = intval ( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize ); + $mem = intval( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory ); + $filesize = intval( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize ); if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) { $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' . @@ -3023,9 +3034,9 @@ function wfMerge( $old, $mine, $yours, &$result ) { # This check may also protect against code injection in # case of broken installations. - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$haveDiff3 ) { wfDebug( "diff3 not found\n" ); @@ -3102,9 +3113,9 @@ function wfDiff( $before, $after, $params = '-u' ) { } global $wgDiff; - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $haveDiff = $wgDiff && file_exists( $wgDiff ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); # This check may also protect against code injection in # case of broken installations. @@ -3205,6 +3216,7 @@ function wfUsePHP( $req_ver ) { * * @see perldoc -f use * + * @deprecated since 1.26, use the "requires' property of extension.json * @param string|int|float $req_ver The version to check, can be a string, an integer, or a float * @throws MWException */ @@ -3455,7 +3467,6 @@ function wfResetSessionID() { $_SESSION = $tmp; } $newSessionId = session_id(); - Hooks::run( 'ResetSessionID', array( $oldSessionId, $newSessionId ) ); } /** @@ -3464,15 +3475,17 @@ function wfResetSessionID() { * @param bool $sessionId */ function wfSetupSession( $sessionId = false ) { - global $wgSessionsInMemcached, $wgSessionsInObjectCache, $wgCookiePath, $wgCookieDomain, - $wgCookieSecure, $wgCookieHttpOnly, $wgSessionHandler; - if ( $wgSessionsInObjectCache || $wgSessionsInMemcached ) { + global $wgSessionsInObjectCache, $wgSessionHandler; + global $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly; + + if ( $wgSessionsInObjectCache ) { ObjectCacheSessionHandler::install(); } elseif ( $wgSessionHandler && $wgSessionHandler != ini_get( 'session.save_handler' ) ) { # Only set this if $wgSessionHandler isn't null and session.save_handler # hasn't already been set to the desired value (that causes errors) ini_set( 'session.save_handler', $wgSessionHandler ); } + session_set_cookie_params( 0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly ); session_cache_limiter( 'private, must-revalidate' ); @@ -3481,9 +3494,14 @@ function wfSetupSession( $sessionId = false ) { } else { wfFixSessionID(); } - wfSuppressWarnings(); + + MediaWiki\suppressWarnings(); session_start(); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); + + if ( $wgSessionsInObjectCache ) { + ObjectCacheSessionHandler::renewCurrentSession(); + } } /** @@ -3506,7 +3524,7 @@ function wfGetPrecompiledData( $name ) { } /** - * Get a cache key + * Make a cache key for the local wiki. * * @param string $args,... * @return string @@ -3516,12 +3534,13 @@ function wfMemcKey( /*...*/ ) { $prefix = $wgCachePrefix === false ? wfWikiID() : $wgCachePrefix; $args = func_get_args(); $key = $prefix . ':' . implode( ':', $args ); - $key = str_replace( ' ', '_', $key ); - return $key; + return strtr( $key, ' ', '_' ); } /** - * Get a cache key for a foreign DB + * Make a cache key for a foreign DB. + * + * Must match what wfMemcKey() would produce in context of the foreign wiki. * * @param string $db * @param string $prefix @@ -3531,11 +3550,29 @@ function wfMemcKey( /*...*/ ) { function wfForeignMemcKey( $db, $prefix /*...*/ ) { $args = array_slice( func_get_args(), 2 ); if ( $prefix ) { + // Match wfWikiID() logic $key = "$db-$prefix:" . implode( ':', $args ); } else { $key = $db . ':' . implode( ':', $args ); } - return str_replace( ' ', '_', $key ); + return strtr( $key, ' ', '_' ); +} + +/** + * Make a cache key with database-agnostic prefix. + * + * Doesn't have a wiki-specific namespace. Uses a generic 'global' prefix + * instead. Must have a prefix as otherwise keys that use a database name + * in the first segment will clash with wfMemcKey/wfForeignMemcKey. + * + * @since 1.26 + * @param string $args,... + * @return string + */ +function wfGlobalCacheKey( /*...*/ ) { + $args = func_get_args(); + $key = 'global:' . implode( ':', $args ); + return strtr( $key, ' ', '_' ); } /** @@ -3744,6 +3781,7 @@ function wfWaitForSlaves( } // Figure out which clusters need to be checked + /** @var LoadBalancer[] $lbs */ $lbs = array(); if ( $cluster === '*' ) { wfGetLBFactory()->forEachLB( function ( LoadBalancer $lb ) use ( &$lbs ) { @@ -3760,20 +3798,14 @@ function wfWaitForSlaves( // time needed to wait on the next clusters. $masterPositions = array_fill( 0, count( $lbs ), false ); foreach ( $lbs as $i => $lb ) { - // bug 27975 - Don't try to wait for slaves if there are none - // Prevents permission error when getting master position - if ( $lb->getServerCount() > 1 ) { - if ( $ifWritesSince && !$lb->hasMasterConnection() ) { - continue; // assume no writes done - } - // Use the empty string to not trigger selectDB() since the connection - // may have been to a server that does not have a DB for the current wiki. - $dbw = $lb->getConnection( DB_MASTER, array(), '' ); - if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) { - continue; // no writes since the last wait - } - $masterPositions[$i] = $dbw->getMasterPos(); + if ( $lb->getServerCount() <= 1 ) { + // Bug 27975 - Don't try to wait for slaves if there are none + // Prevents permission error when getting master position + continue; + } elseif ( $ifWritesSince && $lb->lastMasterChangeTimestamp() < $ifWritesSince ) { + continue; // no writes since the last wait } + $masterPositions[$i] = $lb->getMasterPos(); } $ok = true; @@ -3830,9 +3862,9 @@ function wfStripIllegalFilenameChars( $name ) { } /** - * Set PHP's memory limit to the larger of php.ini or $wgMemoryLimit; + * Set PHP's memory limit to the larger of php.ini or $wgMemoryLimit * - * @return int Value the memory limit was set to. + * @return int Resulting value of the memory limit. */ function wfMemoryLimit() { global $wgMemoryLimit; @@ -3841,21 +3873,41 @@ function wfMemoryLimit() { $conflimit = wfShorthandToInteger( $wgMemoryLimit ); if ( $conflimit == -1 ) { wfDebug( "Removing PHP's memory limit\n" ); - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); ini_set( 'memory_limit', $conflimit ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); return $conflimit; } elseif ( $conflimit > $memlimit ) { wfDebug( "Raising PHP's memory limit to $conflimit bytes\n" ); - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); ini_set( 'memory_limit', $conflimit ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); return $conflimit; } } return $memlimit; } +/** + * Set PHP's time limit to the larger of php.ini or $wgTransactionalTimeLimit + * + * @return int Prior time limit + * @since 1.26 + */ +function wfTransactionalTimeLimit() { + global $wgTransactionalTimeLimit; + + $timeLimit = ini_get( 'max_execution_time' ); + // Note that CLI scripts use 0 + if ( $timeLimit > 0 && $wgTransactionalTimeLimit > $timeLimit ) { + set_time_limit( $wgTransactionalTimeLimit ); + } + + ignore_user_abort( true ); // ignore client disconnects + + return $timeLimit; +} + /** * Converts shorthand byte notation to integer form * @@ -3917,13 +3969,13 @@ function wfBCP47( $code ) { } /** - * Get a cache object. + * Get a specific cache object. * - * @param int $inputType Cache type, one of the CACHE_* constants. + * @param int|string $cacheType A CACHE_* constants, or other key in $wgObjectCaches * @return BagOStuff */ -function wfGetCache( $inputType ) { - return ObjectCache::getInstance( $inputType ); +function wfGetCache( $cacheType ) { + return ObjectCache::getInstance( $cacheType ); } /** @@ -3995,9 +4047,9 @@ function wfUnpack( $format, $data, $length = false ) { } } - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $result = unpack( $format, $data ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( $result === false ) { // If it cannot extract the packed data. @@ -4236,3 +4288,28 @@ function wfThumbIsStandard( File $file, array $params ) { return true; } + +/** + * Merges two (possibly) 2 dimensional arrays into the target array ($baseArray). + * + * Values that exist in both values will be combined with += (all values of the array + * of $newValues will be added to the values of the array of $baseArray, while values, + * that exists in both, the value of $baseArray will be used). + * + * @param array $baseArray The array where you want to add the values of $newValues to + * @param array $newValues An array with new values + * @return array The combined array + * @since 1.26 + */ +function wfArrayPlus2d( array $baseArray, array $newValues ) { + // First merge items that are in both arrays + foreach ( $baseArray as $name => &$groupVal ) { + if ( isset( $newValues[$name] ) ) { + $groupVal += $newValues[$name]; + } + } + // Now add items that didn't exist yet + $baseArray += $newValues; + + return $baseArray; +} diff --git a/includes/HistoryBlob.php b/includes/HistoryBlob.php index 69f1120d..494cbfaf 100644 --- a/includes/HistoryBlob.php +++ b/includes/HistoryBlob.php @@ -522,9 +522,9 @@ class DiffHistoryBlob implements HistoryBlob { function diff( $t1, $t2 ) { # Need to do a null concatenation with warnings off, due to bugs in the current version of xdiff # "String is not zero-terminated" - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $diff = xdiff_string_rabdiff( $t1, $t2 ) . ''; - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); return $diff; } @@ -535,9 +535,9 @@ class DiffHistoryBlob implements HistoryBlob { */ function patch( $base, $diff ) { if ( function_exists( 'xdiff_string_bpatch' ) ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $text = xdiff_string_bpatch( $base, $diff ) . ''; - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); return $text; } diff --git a/includes/Hooks.php b/includes/Hooks.php index dffc7bcf..a4145624 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -135,9 +135,6 @@ class Hooks { * returning null) is equivalent to returning true. */ public static function run( $event, array $args = array(), $deprecatedVersion = null ) { - $profiler = Profiler::instance(); - $eventPS = $profiler->scopedProfileIn( 'hook: ' . $event ); - foreach ( self::getHandlers( $event ) as $hook ) { // Turn non-array values into an array. (Can't use casting because of objects.) if ( !is_array( $hook ) ) { @@ -196,8 +193,6 @@ class Hooks { $badhookmsg = null; $hook_args = array_merge( $hook, $args ); - // Profile first in case the Profiler causes errors - $funcPS = $profiler->scopedProfileIn( $func ); set_error_handler( 'Hooks::hookErrorHandler' ); // mark hook as deprecated, if deprecation version is specified @@ -215,7 +210,6 @@ class Hooks { } restore_error_handler(); - $profiler->scopedProfileOut( $funcPS ); // Process the return value. if ( is_string( $retval ) ) { @@ -237,22 +231,25 @@ class Hooks { } /** - * Handle PHP errors issued inside a hook. Catch errors that have to do with - * a function expecting a reference, and let all others pass through. - * - * This REALLY should be protected... but it's public for compatibility + * Handle PHP errors issued inside a hook. Catch errors that have to do + * with a function expecting a reference, and pass all others through to + * MWExceptionHandler::handleError() for default processing. * * @since 1.18 * * @param int $errno Error number (unused) * @param string $errstr Error message * @throws MWHookException If the error has to do with the function signature - * @return bool Always returns false + * @return bool */ public static function hookErrorHandler( $errno, $errstr ) { if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) { throw new MWHookException( $errstr, $errno ); } - return false; + + // Delegate unhandled errors to the default MW handler + return call_user_func_array( + 'MWExceptionHandler::handleError', func_get_args() + ); } } diff --git a/includes/Html.php b/includes/Html.php index d312e0a6..62ae0b85 100644 --- a/includes/Html.php +++ b/includes/Html.php @@ -104,27 +104,26 @@ class Html { /** * Modifies a set of attributes meant for button elements * and apply a set of default attributes when $wgUseMediaWikiUIEverywhere enabled. - * @param array $attrs - * @param string[] $modifiers to add to the button + * @param array $attrs HTML attributes in an associative array + * @param string[] $modifiers classes to add to the button * @see https://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers * @return array $attrs A modified attribute array */ - public static function buttonAttributes( $attrs, $modifiers = array() ) { + public static function buttonAttributes( array $attrs, array $modifiers = array() ) { global $wgUseMediaWikiUIEverywhere; if ( $wgUseMediaWikiUIEverywhere ) { if ( isset( $attrs['class'] ) ) { if ( is_array( $attrs['class'] ) ) { $attrs['class'][] = 'mw-ui-button'; - $attrs = array_merge( $attrs, $modifiers ); + $attrs['class'] = array_merge( $attrs['class'], $modifiers ); // ensure compatibility with Xml $attrs['class'] = implode( ' ', $attrs['class'] ); } else { $attrs['class'] .= ' mw-ui-button ' . implode( ' ', $modifiers ); } } else { - $attrs['class'] = array( 'mw-ui-button' ); // ensure compatibility with Xml - $attrs['class'] = implode( ' ', array_merge( $attrs['class'], $modifiers ) ); + $attrs['class'] = 'mw-ui-button ' . implode( ' ', $modifiers ); } } return $attrs; @@ -137,11 +136,8 @@ class Html { * @param array $attrs An attribute array. * @return array $attrs A modified attribute array */ - public static function getTextInputAttributes( $attrs ) { + public static function getTextInputAttributes( array $attrs ) { global $wgUseMediaWikiUIEverywhere; - if ( !$attrs ) { - $attrs = array(); - } if ( $wgUseMediaWikiUIEverywhere ) { if ( isset( $attrs['class'] ) ) { if ( is_array( $attrs['class'] ) ) { @@ -165,11 +161,11 @@ class Html { * @param array $attrs Associative array of attributes, e.g., array( * 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for * further documentation. - * @param string[] $modifiers to add to the button + * @param string[] $modifiers classes to add to the button * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers * @return string Raw HTML */ - public static function linkButton( $contents, $attrs, $modifiers = array() ) { + public static function linkButton( $contents, array $attrs, array $modifiers = array() ) { return self::element( 'a', self::buttonAttributes( $attrs, $modifiers ), $contents @@ -185,11 +181,11 @@ class Html { * @param array $attrs Associative array of attributes, e.g., array( * 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for * further documentation. - * @param string[] $modifiers to add to the button + * @param string[] $modifiers classes to add to the button * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers * @return string Raw HTML */ - public static function submitButton( $contents, $attrs, $modifiers = array() ) { + public static function submitButton( $contents, array $attrs, array $modifiers = array() ) { $attrs['type'] = 'submit'; $attrs['value'] = $contents; return self::element( 'input', self::buttonAttributes( $attrs, $modifiers ) ); @@ -337,8 +333,7 @@ class Html { * further documentation. * @return array An array of attributes functionally identical to $attribs */ - private static function dropDefaults( $element, $attribs ) { - + private static function dropDefaults( $element, array $attribs ) { // Whenever altering this array, please provide a covering test case // in HtmlTest::provideElementsWithAttributesHavingDefaultValues static $attribDefaults = array( @@ -485,11 +480,10 @@ class Html { * @return string HTML fragment that goes between element name and '>' * (starting with a space if at least one attribute is output) */ - public static function expandAttributes( $attribs ) { + public static function expandAttributes( array $attribs ) { global $wgWellFormedXml; $ret = ''; - $attribs = (array)$attribs; foreach ( $attribs as $key => $value ) { // Support intuitive array( 'checked' => true/false ) form if ( $value === false || is_null( $value ) ) { @@ -714,13 +708,16 @@ class Html { * attributes, passed to Html::element() * @return string Raw HTML */ - public static function input( $name, $value = '', $type = 'text', $attribs = array() ) { + public static function input( $name, $value = '', $type = 'text', array $attribs = array() ) { $attribs['type'] = $type; $attribs['value'] = $value; $attribs['name'] = $name; if ( in_array( $type, array( 'text', 'search', 'email', 'password', 'number' ) ) ) { $attribs = self::getTextInputAttributes( $attribs ); } + if ( in_array( $type, array( 'button', 'reset', 'submit' ) ) ) { + $attribs = self::buttonAttributes( $attribs ); + } return self::element( 'input', $attribs ); } @@ -794,7 +791,7 @@ class Html { * attributes, passed to Html::element() * @return string Raw HTML */ - public static function hidden( $name, $value, $attribs = array() ) { + public static function hidden( $name, $value, array $attribs = array() ) { return self::input( $name, $value, 'hidden', $attribs ); } @@ -810,7 +807,7 @@ class Html { * attributes, passed to Html::element() * @return string Raw HTML */ - public static function textarea( $name, $value = '', $attribs = array() ) { + public static function textarea( $name, $value = '', array $attribs = array() ) { $attribs['name'] = $name; if ( substr( $value, 0, 1 ) == "\n" ) { @@ -825,6 +822,47 @@ class Html { return self::element( 'textarea', self::getTextInputAttributes( $attribs ), $spacedValue ); } + /** + * Helper for Html::namespaceSelector(). + * @param array $params See Html::namespaceSelector() + * @return array + */ + public static function namespaceSelectorOptions( array $params = array() ) { + global $wgContLang; + + $options = array(); + + if ( !isset( $params['exclude'] ) || !is_array( $params['exclude'] ) ) { + $params['exclude'] = array(); + } + + if ( isset( $params['all'] ) ) { + // add an option that would let the user select all namespaces. + // Value is provided by user, the name shown is localized for the user. + $options[$params['all']] = wfMessage( 'namespacesall' )->text(); + } + // Add all namespaces as options (in the content language) + $options += $wgContLang->getFormattedNamespaces(); + + $optionsOut = array(); + // Filter out namespaces below 0 and massage labels + foreach ( $options as $nsId => $nsName ) { + if ( $nsId < NS_MAIN || in_array( $nsId, $params['exclude'] ) ) { + continue; + } + if ( $nsId === NS_MAIN ) { + // For other namespaces use the namespace prefix as label, but for + // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)") + $nsName = wfMessage( 'blanknamespace' )->text(); + } elseif ( is_int( $nsId ) ) { + $nsName = $wgContLang->convertNamespace( $nsId ); + } + $optionsOut[ $nsId ] = $nsName; + } + + return $optionsOut; + } + /** * Build a drop-down box for selecting a namespace * @@ -844,8 +882,6 @@ class Html { public static function namespaceSelector( array $params = array(), array $selectAttribs = array() ) { - global $wgContLang; - ksort( $selectAttribs ); // Is a namespace selected? @@ -862,37 +898,16 @@ class Html { $params['selected'] = ''; } - if ( !isset( $params['exclude'] ) || !is_array( $params['exclude'] ) ) { - $params['exclude'] = array(); - } if ( !isset( $params['disable'] ) || !is_array( $params['disable'] ) ) { $params['disable'] = array(); } // Associative array between option-values and option-labels - $options = array(); - - if ( isset( $params['all'] ) ) { - // add an option that would let the user select all namespaces. - // Value is provided by user, the name shown is localized for the user. - $options[$params['all']] = wfMessage( 'namespacesall' )->text(); - } - // Add all namespaces as options (in the content language) - $options += $wgContLang->getFormattedNamespaces(); + $options = self::namespaceSelectorOptions( $params ); - // Convert $options to HTML and filter out namespaces below 0 + // Convert $options to HTML $optionsHtml = array(); foreach ( $options as $nsId => $nsName ) { - if ( $nsId < NS_MAIN || in_array( $nsId, $params['exclude'] ) ) { - continue; - } - if ( $nsId === NS_MAIN ) { - // For other namespaces use the namespace prefix as label, but for - // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)") - $nsName = wfMessage( 'blanknamespace' )->text(); - } elseif ( is_int( $nsId ) ) { - $nsName = $wgContLang->convertNamespace( $nsId ); - } $optionsHtml[] = self::element( 'option', array( 'disabled' => in_array( $nsId, $params['disable'] ), @@ -937,7 +952,7 @@ class Html { * attributes, passed to Html::element() of html tag. * @return string Raw HTML */ - public static function htmlHeader( $attribs = array() ) { + public static function htmlHeader( array $attribs = array() ) { $ret = ''; global $wgHtml5Version, $wgMimeType, $wgXhtmlNamespaces; @@ -1047,7 +1062,7 @@ class Html { * @param string[] $urls * @return string */ - static function srcSet( $urls ) { + static function srcSet( array $urls ) { $candidates = array(); foreach ( $urls as $density => $url ) { // Cast density to float to strip 'x'. diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php index fa54487a..bc5a9570 100644 --- a/includes/HttpFunctions.php +++ b/includes/HttpFunctions.php @@ -257,7 +257,7 @@ class MWHttpRequest { $this->parsedUrl = wfParseUrl( $this->url ); if ( !$this->parsedUrl || !Http::isValidURI( $this->url ) ) { - $this->status = Status::newFatal( 'http-invalid-url' ); + $this->status = Status::newFatal( 'http-invalid-url', $url ); } else { $this->status = Status::newGood( 100 ); // continue } @@ -797,14 +797,14 @@ class CurlHttpRequest extends MWHttpRequest { } if ( $this->followRedirects && $this->canFollowRedirects() ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); if ( !curl_setopt( $curlHandle, CURLOPT_FOLLOWLOCATION, true ) ) { wfDebug( __METHOD__ . ": Couldn't set CURLOPT_FOLLOWLOCATION. " . "Probably safe_mode or open_basedir is set.\n" ); // Continue the processing. If it were in curl_setopt_array, // processing would have halted on its entry } - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); } if ( $this->profiler ) { diff --git a/includes/Import.php b/includes/Import.php index d31be43b..6a0bfd09 100644 --- a/includes/Import.php +++ b/includes/Import.php @@ -34,7 +34,7 @@ class WikiImporter { private $reader = null; private $foreignNamespaces = null; private $mLogItemCallback, $mUploadCallback, $mRevisionCallback, $mPageCallback; - private $mSiteInfoCallback, $mTargetNamespace, $mPageOutCallback; + private $mSiteInfoCallback, $mPageOutCallback; private $mNoticeCallback, $mDebug; private $mImportUploads, $mImageBasePath; private $mNoUpdates = false; @@ -49,8 +49,13 @@ class WikiImporter { * Creates an ImportXMLReader drawing from the source provided * @param ImportSource $source * @param Config $config + * @throws Exception */ function __construct( ImportSource $source, Config $config = null ) { + if ( !class_exists( 'XMLReader' ) ) { + throw new Exception( 'Import requires PHP to have been compiled with libxml support' ); + } + $this->reader = new XMLReader(); if ( !$config ) { wfDeprecated( __METHOD__ . ' without a Config instance', '1.25' ); @@ -62,11 +67,22 @@ class WikiImporter { stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' ); } $id = UploadSourceAdapter::registerSource( $source ); + + // Enable the entity loader, as it is needed for loading external URLs via + // XMLReader::open (T86036) + $oldDisable = libxml_disable_entity_loader( false ); if ( defined( 'LIBXML_PARSEHUGE' ) ) { - $this->reader->open( "uploadsource://$id", null, LIBXML_PARSEHUGE ); + $status = $this->reader->open( "uploadsource://$id", null, LIBXML_PARSEHUGE ); } else { - $this->reader->open( "uploadsource://$id" ); + $status = $this->reader->open( "uploadsource://$id" ); } + if ( !$status ) { + $error = libxml_get_last_error(); + libxml_disable_entity_loader( $oldDisable ); + throw new MWException( 'Encountered an internal error while initializing WikiImporter object: ' . + $error->message ); + } + libxml_disable_entity_loader( $oldDisable ); // Default callbacks $this->setPageCallback( array( $this, 'beforeImportPage' ) ); @@ -224,7 +240,6 @@ class WikiImporter { public function setTargetNamespace( $namespace ) { if ( is_null( $namespace ) ) { // Don't override namespaces - $this->mTargetNamespace = null; $this->setImportTitleFactory( new NaiveImportTitleFactory() ); return true; } elseif ( @@ -232,7 +247,6 @@ class WikiImporter { MWNamespace::exists( intval( $namespace ) ) ) { $namespace = intval( $namespace ); - $this->mTargetNamespace = $namespace; $this->setImportTitleFactory( new NamespaceImportTitleFactory( $namespace ) ); return true; } else { @@ -252,10 +266,7 @@ class WikiImporter { $this->setImportTitleFactory( new NaiveImportTitleFactory() ); } elseif ( $rootpage !== '' ) { $rootpage = rtrim( $rootpage, '/' ); //avoid double slashes - $title = Title::newFromText( $rootpage, !is_null( $this->mTargetNamespace ) - ? $this->mTargetNamespace - : NS_MAIN - ); + $title = Title::newFromText( $rootpage ); if ( !$title || $title->isExternal() ) { $status->fatal( 'import-rootpage-invalid' ); @@ -383,9 +394,9 @@ class WikiImporter { $countKey = 'title_' . $title->getPrefixedText(); $countable = $page->isCountable( $editInfo ); if ( array_key_exists( $countKey, $this->countableCache ) && - $countable != $this->countableCache[ $countKey ] ) { + $countable != $this->countableCache[$countKey] ) { DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( - 'articles' => ( (int)$countable - (int)$this->countableCache[ $countKey ] ) + 'articles' => ( (int)$countable - (int)$this->countableCache[$countKey] ) ) ) ); } } @@ -528,10 +539,10 @@ class WikiImporter { $oldDisable = libxml_disable_entity_loader( true ); $this->reader->read(); - if ( $this->reader->name != 'mediawiki' ) { + if ( $this->reader->localName != 'mediawiki' ) { libxml_disable_entity_loader( $oldDisable ); throw new MWException( "Expected tag, got " . - $this->reader->name ); + $this->reader->localName ); } $this->debug( " tag is correct." ); @@ -542,7 +553,7 @@ class WikiImporter { $rethrow = null; try { while ( $keepReading ) { - $tag = $this->reader->name; + $tag = $this->reader->localName; $type = $this->reader->nodeType; if ( !Hooks::run( 'ImportHandleToplevelXMLTag', array( $this ) ) ) { @@ -593,14 +604,14 @@ class WikiImporter { while ( $this->reader->read() ) { if ( $this->reader->nodeType == XmlReader::END_ELEMENT && - $this->reader->name == 'siteinfo' ) { + $this->reader->localName == 'siteinfo' ) { break; } - $tag = $this->reader->name; + $tag = $this->reader->localName; if ( $tag == 'namespace' ) { - $this->foreignNamespaces[ $this->nodeAttribute( 'key' ) ] = + $this->foreignNamespaces[$this->nodeAttribute( 'key' )] = $this->nodeContents(); } elseif ( in_array( $tag, $normalFields ) ) { $siteInfo[$tag] = $this->nodeContents(); @@ -621,11 +632,11 @@ class WikiImporter { while ( $this->reader->read() ) { if ( $this->reader->nodeType == XMLReader::END_ELEMENT && - $this->reader->name == 'logitem' ) { + $this->reader->localName == 'logitem' ) { break; } - $tag = $this->reader->name; + $tag = $this->reader->localName; if ( !Hooks::run( 'ImportHandleLogItemXMLTag', array( $this, $logInfo @@ -685,13 +696,13 @@ class WikiImporter { while ( $skip ? $this->reader->next() : $this->reader->read() ) { if ( $this->reader->nodeType == XMLReader::END_ELEMENT && - $this->reader->name == 'page' ) { + $this->reader->localName == 'page' ) { break; } $skip = false; - $tag = $this->reader->name; + $tag = $this->reader->localName; if ( $badTitle ) { // The title is invalid, bail out of this page @@ -758,11 +769,11 @@ class WikiImporter { while ( $skip ? $this->reader->next() : $this->reader->read() ) { if ( $this->reader->nodeType == XMLReader::END_ELEMENT && - $this->reader->name == 'revision' ) { + $this->reader->localName == 'revision' ) { break; } - $tag = $this->reader->name; + $tag = $this->reader->localName; if ( !Hooks::run( 'ImportHandleRevisionXMLTag', array( $this, $pageInfo, $revisionInfo @@ -850,11 +861,11 @@ class WikiImporter { while ( $skip ? $this->reader->next() : $this->reader->read() ) { if ( $this->reader->nodeType == XMLReader::END_ELEMENT && - $this->reader->name == 'upload' ) { + $this->reader->localName == 'upload' ) { break; } - $tag = $this->reader->name; + $tag = $this->reader->localName; if ( !Hooks::run( 'ImportHandleUploadXMLTag', array( $this, $pageInfo @@ -948,11 +959,11 @@ class WikiImporter { while ( $this->reader->read() ) { if ( $this->reader->nodeType == XMLReader::END_ELEMENT && - $this->reader->name == 'contributor' ) { + $this->reader->localName == 'contributor' ) { break; } - $tag = $this->reader->name; + $tag = $this->reader->localName; if ( in_array( $tag, $fields ) ) { $info[$tag] = $this->nodeContents(); @@ -1846,9 +1857,9 @@ class ImportStreamSource implements ImportSource { * @return Status */ static function newFromFile( $filename ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $file = fopen( $filename, 'rt' ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$file ) { return Status::newFatal( "importcantopen" ); } diff --git a/includes/Linker.php b/includes/Linker.php index b58dabab..9b5ff27b 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -77,7 +77,7 @@ class Linker { wfDeprecated( __METHOD__, '1.25' ); $title = urldecode( $title ); - $title = str_replace( '_', ' ', $title ); + $title = strtr( $title, '_', ' ' ); return self::getLinkAttributesInternal( $title, $class ); } @@ -1276,9 +1276,11 @@ class Linker { * @param string $comment * @param Title|null $title Title object (to generate link to the section in autocomment) or null * @param bool $local Whether section links should refer to local page + * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes. + * * @return mixed|string */ - public static function formatComment( $comment, $title = null, $local = false ) { + public static function formatComment( $comment, $title = null, $local = false, $wikiId = null ) { # Sanitize text a bit: $comment = str_replace( "\n", " ", $comment ); @@ -1286,8 +1288,8 @@ class Linker { $comment = Sanitizer::escapeHtmlAllowEntities( $comment ); # Render autocomments and make links: - $comment = self::formatAutocomments( $comment, $title, $local ); - $comment = self::formatLinksInComment( $comment, $title, $local ); + $comment = self::formatAutocomments( $comment, $title, $local, $wikiId ); + $comment = self::formatLinksInComment( $comment, $title, $local, $wikiId ); return $comment; } @@ -1304,9 +1306,11 @@ class Linker { * @param string $comment Comment text * @param Title|null $title An optional title object used to links to sections * @param bool $local Whether section links should refer to local page - * @return string Formatted comment + * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap. + * + * @return string Formatted comment (wikitext) */ - private static function formatAutocomments( $comment, $title = null, $local = false ) { + private static function formatAutocomments( $comment, $title = null, $local = false, $wikiId = null ) { // @todo $append here is something of a hack to preserve the status // quo. Someone who knows more about bidi and such should decide // (1) what sane rendering even *is* for an LTR edit summary on an RTL @@ -1320,7 +1324,7 @@ class Linker { // zero-width assertions optional, so wrap them in a non-capturing // group. '!(?:(?<=(.)))?/\*\s*(.*?)\s*\*/(?:(?=(.)))?!', - function ( $match ) use ( $title, $local, &$append ) { + function ( $match ) use ( $title, $local, $wikiId, &$append ) { global $wgLang; // Ensure all match positions are defined @@ -1330,7 +1334,7 @@ class Linker { $auto = $match[2]; $post = $match[3] !== ''; $comment = null; - Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) ); + Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local, $wikiId ) ); if ( $comment === null ) { $link = ''; if ( $title ) { @@ -1349,9 +1353,7 @@ class Linker { $title->getDBkey(), $section ); } if ( $sectionTitle ) { - $link = Linker::link( $sectionTitle, - $wgLang->getArrow(), array(), array(), - 'noclasses' ); + $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' ); } else { $link = ''; } @@ -1384,7 +1386,7 @@ class Linker { * @param string $comment Text to format links in * @param Title|null $title An optional title object used to links to sections * @param bool $local Whether section links should refer to local page - * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap + * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap. * * @return string */ @@ -1414,10 +1416,9 @@ class Linker { # fix up urlencoded title texts (copied from Parser::replaceInternalLinks) if ( strpos( $match[1], '%' ) !== false ) { - $match[1] = str_replace( - array( '<', '>' ), - array( '<', '>' ), - rawurldecode( $match[1] ) + $match[1] = strtr( + rawurldecode( $match[1] ), + array( '<' => '<', '>' => '>' ) ); } @@ -1460,22 +1461,9 @@ class Linker { $newTarget = clone ( $title ); $newTarget->setFragment( '#' . $target->getFragment() ); $target = $newTarget; - - } - - if ( $wikiId !== null ) { - $thelink = Linker::makeExternalLink( - WikiMap::getForeignURL( $wikiId, $target->getFullText() ), - $linkText . $inside, - /* escape = */ false // Already escaped - ) . $trail; - } else { - $thelink = Linker::link( - $target, - $linkText . $inside - ) . $trail; } + $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail; } } if ( $thelink ) { @@ -1494,6 +1482,32 @@ class Linker { ); } + /** + * Generates a link to the given Title + * + * @note This is only public for technical reasons. It's not intended for use outside Linker. + * + * @param Title $title + * @param string $text + * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap. + * @param string|string[] $options See the $options parameter in Linker::link. + * + * @return string HTML link + */ + public static function makeCommentLink( Title $title, $text, $wikiId = null, $options = array() ) { + if ( $wikiId !== null && !$title->isExternal() ) { + $link = Linker::makeExternalLink( + WikiMap::getForeignURL( $wikiId, $title->getPrefixedText(), $title->getFragment() ), + $text, + /* escape = */ false // Already escaped + ); + } else { + $link = Linker::link( $title, $text, array(), array(), $options ); + } + + return $link; + } + /** * @param Title $contextTitle * @param string $target @@ -1580,17 +1594,18 @@ class Linker { * @param string $comment * @param Title|null $title Title object (to generate link to section in autocomment) or null * @param bool $local Whether section links should refer to local page + * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes. * * @return string */ - public static function commentBlock( $comment, $title = null, $local = false ) { + public static function commentBlock( $comment, $title = null, $local = false, $wikiId = null ) { // '*' used to be the comment inserted by the software way back // in antiquity in case none was provided, here for backwards // compatibility, acc. to brion -ævar if ( $comment == '' || $comment == '*' ) { return ''; } else { - $formatted = self::formatComment( $comment, $title, $local ); + $formatted = self::formatComment( $comment, $title, $local, $wikiId ); $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped(); return " $formatted"; } @@ -1705,13 +1720,13 @@ class Linker { } /** - * Generate a table of contents from a section tree - * Currently unused. + * Generate a table of contents from a section tree. * * @param array $tree Return value of ParserOutput::getSections() + * @param string|Language|bool $lang Language for the toc title, defaults to user language * @return string HTML fragment */ - public static function generateTOC( $tree ) { + public static function generateTOC( $tree, $lang = false ) { $toc = ''; $lastLevel = 0; foreach ( $tree as $section ) { @@ -1730,7 +1745,7 @@ class Linker { $lastLevel = $section['toclevel']; } $toc .= self::tocLineEnd(); - return self::tocList( $toc ); + return self::tocList( $toc, $lang ); } /** @@ -2383,6 +2398,7 @@ class Linker { 'title' => $tooltip ) ); } + } /** diff --git a/includes/MWNamespace.php b/includes/MWNamespace.php index e370bf10..8ca205ab 100644 --- a/includes/MWNamespace.php +++ b/includes/MWNamespace.php @@ -298,6 +298,18 @@ class MWNamespace { return $index == NS_MAIN || in_array( $index, $wgContentNamespaces ); } + /** + * Might pages in this namespace require the use of the Signature button on + * the edit toolbar? + * + * @param int $index Index to check + * @return bool + */ + public static function wantSignatures( $index ) { + global $wgExtraSignatureNamespaces; + return self::isTalk( $index ) || in_array( $index, $wgExtraSignatureNamespaces ); + } + /** * Can pages in a namespace be watched? * diff --git a/includes/MWTimestamp.php b/includes/MWTimestamp.php index ea91470e..d28f88e5 100644 --- a/includes/MWTimestamp.php +++ b/includes/MWTimestamp.php @@ -56,7 +56,7 @@ class MWTimestamp { * * @since 1.20 * - * @param bool|string $timestamp Timestamp to set, or false for current time + * @param bool|string|int|float $timestamp Timestamp to set, or false for current time */ public function __construct( $timestamp = false ) { $this->setTimestamp( $timestamp ); @@ -74,6 +74,7 @@ class MWTimestamp { * @throws TimestampException */ public function setTimestamp( $ts = false ) { + $m = array(); $da = array(); $strtime = ''; @@ -87,9 +88,9 @@ class MWTimestamp { # TS_EXIF } elseif ( preg_match( '/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D', $ts, $da ) ) { # TS_MW - } elseif ( preg_match( '/^-?\d{1,13}$/D', $ts ) ) { + } elseif ( preg_match( '/^(-?\d{1,13})(\.\d+)?$/D', $ts, $m ) ) { # TS_UNIX - $strtime = "@$ts"; // http://php.net/manual/en/datetime.formats.compound.php + $strtime = "@{$m[1]}"; // http://php.net/manual/en/datetime.formats.compound.php } elseif ( preg_match( '/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts ) ) { # TS_ORACLE // session altered to DD-MM-YYYY HH24:MI:SS.FF6 $strtime = preg_replace( '/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3", @@ -199,42 +200,19 @@ class MWTimestamp { * * @since 1.20 * @since 1.22 Uses Language::getHumanTimestamp to produce the timestamp + * @deprecated since 1.26 Use Language::getHumanTimestamp directly * - * @param MWTimestamp|null $relativeTo The base timestamp to compare to - * (defaults to now). - * @param User|null $user User the timestamp is being generated for (or null - * to use main context's user). - * @param Language|null $lang Language to use to make the human timestamp - * (or null to use main context's language). + * @param MWTimestamp|null $relativeTo The base timestamp to compare to (defaults to now) + * @param User|null $user User the timestamp is being generated for (or null to use main context's user) + * @param Language|null $lang Language to use to make the human timestamp (or null to use main context's language) * @return string Formatted timestamp */ - public function getHumanTimestamp( MWTimestamp $relativeTo = null, - User $user = null, Language $lang = null - ) { - if ( $relativeTo === null ) { - $relativeTo = new self(); - } - if ( $user === null ) { - $user = RequestContext::getMain()->getUser(); - } + public function getHumanTimestamp( MWTimestamp $relativeTo = null, User $user = null, Language $lang = null ) { if ( $lang === null ) { $lang = RequestContext::getMain()->getLanguage(); } - // Adjust for the user's timezone. - $offsetThis = $this->offsetForUser( $user ); - $offsetRel = $relativeTo->offsetForUser( $user ); - - $ts = ''; - if ( Hooks::run( 'GetHumanTimestamp', array( &$ts, $this, $relativeTo, $user, $lang ) ) ) { - $ts = $lang->getHumanTimestamp( $this, $relativeTo, $user ); - } - - // Reset the timezone on the objects. - $this->timestamp->sub( $offsetThis ); - $relativeTo->timestamp->sub( $offsetRel ); - - return $ts; + return $lang->getHumanTimestamp( $this, $relativeTo, $user ); } /** diff --git a/includes/MagicWord.php b/includes/MagicWord.php index 186821de..2c7ba91b 100644 --- a/includes/MagicWord.php +++ b/includes/MagicWord.php @@ -718,9 +718,6 @@ class MagicWordArray { private $regex; - /** @todo Unused? */ - private $matches; - /** * @param array $names */ @@ -953,10 +950,12 @@ class MagicWordArray { if ( $regex === '' ) { continue; } - preg_match_all( $regex, $text, $matches, PREG_SET_ORDER ); - foreach ( $matches as $m ) { - list( $name, $param ) = $this->parseMatch( $m ); - $found[$name] = $param; + $matches = array(); + if ( preg_match_all( $regex, $text, $matches, PREG_SET_ORDER ) ) { + foreach ( $matches as $m ) { + list( $name, $param ) = $this->parseMatch( $m ); + $found[$name] = $param; + } } $text = preg_replace( $regex, '', $text ); } diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index ec2f40f6..fbacb250 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -51,6 +51,7 @@ class MediaWiki { /** * Parse the request to get the Title object * + * @throws MalformedTitleException If a title has been provided by the user, but is invalid. * @return Title Title object to be $wgTitle */ private function parseTitle() { @@ -110,7 +111,10 @@ class MediaWiki { } if ( $ret === null || ( $ret->getDBkey() == '' && !$ret->isExternal() ) ) { - $ret = SpecialPage::getTitleFor( 'Badtitle' ); + // If we get here, we definitely don't have a valid title; throw an exception. + // Try to get detailed invalid title exception first, fall back to MalformedTitleException. + Title::newFromTextThrow( $title ); + throw new MalformedTitleException( 'badtitletext', $title ); } return $ret; @@ -122,7 +126,11 @@ class MediaWiki { */ public function getTitle() { if ( !$this->context->hasTitle() ) { - $this->context->setTitle( $this->parseTitle() ); + try { + $this->context->setTitle( $this->parseTitle() ); + } catch ( MalformedTitleException $ex ) { + $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) ); + } } return $this->context->getTitle(); } @@ -174,6 +182,11 @@ class MediaWiki { || $title->isSpecial( 'Badtitle' ) ) { $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) ); + try { + $this->parseTitle(); + } catch ( MalformedTitleException $ex ) { + throw new BadTitleError( $ex ); + } throw new BadTitleError(); } @@ -219,65 +232,116 @@ class MediaWiki { $output->redirect( $url, 301 ); } else { $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) ); - throw new BadTitleError(); - } - // Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant - } elseif ( $request->getVal( 'action', 'view' ) == 'view' && !$request->wasPosted() - && ( $request->getVal( 'title' ) === null - || $title->getPrefixedDBkey() != $request->getVal( 'title' ) ) - && !count( $request->getValueNames( array( 'action', 'title' ) ) ) - && Hooks::run( 'TestCanonicalRedirect', array( $request, $title, $output ) ) - ) { - if ( $title->isSpecialPage() ) { - list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() ); - if ( $name ) { - $title = SpecialPage::getTitleFor( $name, $subpage ); + try { + $this->parseTitle(); + } catch ( MalformedTitleException $ex ) { + throw new BadTitleError( $ex ); } + throw new BadTitleError(); } - $targetUrl = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ); - // Redirect to canonical url, make it a 301 to allow caching - if ( $targetUrl == $request->getFullRequestURL() ) { - $message = "Redirect loop detected!\n\n" . - "This means the wiki got confused about what page was " . - "requested; this sometimes happens when moving a wiki " . - "to a new server or changing the server configuration.\n\n"; - - if ( $this->config->get( 'UsePathInfo' ) ) { - $message .= "The wiki is trying to interpret the page " . - "title from the URL path portion (PATH_INFO), which " . - "sometimes fails depending on the web server. Try " . - "setting \"\$wgUsePathInfo = false;\" in your " . - "LocalSettings.php, or check that \$wgArticlePath " . - "is correct."; + // Handle any other redirects. + // Redirect loops, titleless URL, $wgUsePathInfo URLs, and URLs with a variant + } elseif ( !$this->tryNormaliseRedirect( $title ) ) { + + // Special pages + if ( NS_SPECIAL == $title->getNamespace() ) { + // Actions that need to be made when we have a special pages + SpecialPageFactory::executePath( $title, $this->context ); + } else { + // ...otherwise treat it as an article view. The article + // may still be a wikipage redirect to another article or URL. + $article = $this->initializeArticle(); + if ( is_object( $article ) ) { + $this->performAction( $article, $requestTitle ); + } elseif ( is_string( $article ) ) { + $output->redirect( $article ); } else { - $message .= "Your web server was detected as possibly not " . - "supporting URL path components (PATH_INFO) correctly; " . - "check your LocalSettings.php for a customized " . - "\$wgArticlePath setting and/or toggle \$wgUsePathInfo " . - "to true."; + throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle()" + . " returned neither an object nor a URL" ); } - throw new HttpError( 500, $message ); - } else { - $output->setSquidMaxage( 1200 ); - $output->redirect( $targetUrl, '301' ); } - // Special pages - } elseif ( NS_SPECIAL == $title->getNamespace() ) { - // Actions that need to be made when we have a special pages - SpecialPageFactory::executePath( $title, $this->context ); - } else { - // ...otherwise treat it as an article view. The article - // may be a redirect to another article or URL. - $article = $this->initializeArticle(); - if ( is_object( $article ) ) { - $this->performAction( $article, $requestTitle ); - } elseif ( is_string( $article ) ) { - $output->redirect( $article ); + } + } + + /** + * Handle redirects for uncanonical title requests. + * + * Handles: + * - Redirect loops. + * - No title in URL. + * - $wgUsePathInfo URLs. + * - URLs with a variant. + * - Other non-standard URLs (as long as they have no extra query parameters). + * + * Behaviour: + * - Normalise title values: + * /wiki/Foo%20Bar -> /wiki/Foo_Bar + * - Normalise empty title: + * /wiki/ -> /wiki/Main + * /w/index.php?title= -> /wiki/Main + * - Normalise non-standard title urls: + * /w/index.php?title=Foo_Bar -> /wiki/Foo_Bar + * - Don't redirect anything with query parameters other than 'title' or 'action=view'. + * + * @param Title $title + * @return bool True if a redirect was set. + * @throws HttpError + */ + private function tryNormaliseRedirect( Title $title ) { + $request = $this->context->getRequest(); + $output = $this->context->getOutput(); + + if ( $request->getVal( 'action', 'view' ) != 'view' + || $request->wasPosted() + || count( $request->getValueNames( array( 'action', 'title' ) ) ) + || !Hooks::run( 'TestCanonicalRedirect', array( $request, $title, $output ) ) + ) { + return false; + } + + if ( $title->isSpecialPage() ) { + list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() ); + if ( $name ) { + $title = SpecialPage::getTitleFor( $name, $subpage ); + } + } + // Redirect to canonical url, make it a 301 to allow caching + $targetUrl = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ); + + if ( $targetUrl != $request->getFullRequestURL() ) { + $output->setSquidMaxage( 1200 ); + $output->redirect( $targetUrl, '301' ); + return true; + } + + // If there is no title, or the title is in a non-standard encoding, we demand + // a redirect. If cgi somehow changed the 'title' query to be non-standard while + // the url is standard, the server is misconfigured. + if ( $request->getVal( 'title' ) === null + || $title->getPrefixedDBkey() != $request->getVal( 'title' ) + ) { + $message = "Redirect loop detected!\n\n" . + "This means the wiki got confused about what page was " . + "requested; this sometimes happens when moving a wiki " . + "to a new server or changing the server configuration.\n\n"; + + if ( $this->config->get( 'UsePathInfo' ) ) { + $message .= "The wiki is trying to interpret the page " . + "title from the URL path portion (PATH_INFO), which " . + "sometimes fails depending on the web server. Try " . + "setting \"\$wgUsePathInfo = false;\" in your " . + "LocalSettings.php, or check that \$wgArticlePath " . + "is correct."; } else { - throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle()" - . " returned neither an object nor a URL" ); + $message .= "Your web server was detected as possibly not " . + "supporting URL path components (PATH_INFO) correctly; " . + "check your LocalSettings.php for a customized " . + "\$wgArticlePath setting and/or toggle \$wgUsePathInfo " . + "to true."; } + throw new HttpError( 500, $message ); } + return false; } /** @@ -301,9 +365,8 @@ class MediaWiki { $this->context->setWikiPage( $article->getPage() ); } - // NS_MEDIAWIKI has no redirects. - // It is also used for CSS/JS, so performance matters here... - if ( $title->getNamespace() == NS_MEDIAWIKI ) { + // Skip some unnecessary code if the content model doesn't support redirects + if ( !ContentHandler::getForTitle( $title )->supportsRedirects() ) { return $article; } @@ -404,8 +467,7 @@ class MediaWiki { } /** - * Run the current MediaWiki instance - * index.php just calls this + * Run the current MediaWiki instance; index.php just calls this */ public function run() { try { @@ -416,16 +478,71 @@ class MediaWiki { // Bug 62091: while exceptions are convenient to bubble up GUI errors, // they are not internal application faults. As with normal requests, this // should commit, print the output, do deferred updates, jobs, and profiling. - wfGetLBFactory()->commitMasterChanges(); + $this->doPreOutputCommit(); $e->report(); // display the GUI error } + } catch ( Exception $e ) { + MWExceptionHandler::handleException( $e ); + } + + $this->doPostOutputShutdown( 'normal' ); + } + + /** + * This function commits all DB changes as needed before + * the user can receive a response (in case commit fails) + * + * @since 1.26 + */ + public function doPreOutputCommit() { + // Either all DBs should commit or none + ignore_user_abort( true ); + + // Commit all changes and record ChronologyProtector positions + $factory = wfGetLBFactory(); + $factory->commitMasterChanges(); + $factory->shutdown(); + + wfDebug( __METHOD__ . ' completed; all transactions committed' ); + } + + /** + * This function does work that can be done *after* the + * user gets the HTTP response so they don't block on it + * + * This manages deferred updates, job insertion, + * final commit, and the logging of profiling data + * + * @param string $mode Use 'fast' to always skip job running + * @since 1.26 + */ + public function doPostOutputShutdown( $mode = 'normal' ) { + // Show visible profiling data if enabled (which cannot be post-send) + Profiler::instance()->logDataPageOutputOnly(); + + $that = $this; + $callback = function () use ( $that, $mode ) { + try { + $that->restInPeace( $mode ); + } catch ( Exception $e ) { + MWExceptionHandler::handleException( $e ); + } + }; + + // Defer everything else... + if ( function_exists( 'register_postsend_function' ) ) { + // https://github.com/facebook/hhvm/issues/1230 + register_postsend_function( $callback ); + } else { if ( function_exists( 'fastcgi_finish_request' ) ) { fastcgi_finish_request(); + } else { + // Either all DB and deferred updates should happen or none. + // The later should not be cancelled due to client disconnect. + ignore_user_abort( true ); } - $this->triggerJobs(); - $this->restInPeace(); - } catch ( Exception $e ) { - MWExceptionHandler::handleException( $e ); + + $callback(); } } @@ -440,7 +557,7 @@ class MediaWiki { list( $host, $lag ) = wfGetLB()->getMaxLag(); if ( $lag > $maxLag ) { $resp = $this->context->getRequest()->response(); - $resp->header( 'HTTP/1.1 503 Service Unavailable' ); + $resp->statusHeader( 503 ); $resp->header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) ); $resp->header( 'X-Database-Lag: ' . intval( $lag ) ); $resp->header( 'Content-Type: text/plain' ); @@ -457,7 +574,7 @@ class MediaWiki { } private function main() { - global $wgTitle; + global $wgTitle, $wgTrxProfilerLimits; $request = $this->context->getRequest(); @@ -489,10 +606,9 @@ class MediaWiki { if ( !$request->wasPosted() && in_array( $action, array( 'view', 'edit', 'history' ) ) ) { - $trxProfiler->setExpectation( 'masterConns', 0, __METHOD__ ); - $trxProfiler->setExpectation( 'writes', 0, __METHOD__ ); + $trxProfiler->setExpectations( $wgTrxProfilerLimits['GET'], __METHOD__ ); } else { - $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ ); + $trxProfiler->setExpectations( $wgTrxProfilerLimits['POST'], __METHOD__ ); } // If the user has forceHTTPS set to true, or if the user @@ -565,22 +681,23 @@ class MediaWiki { // Actually do the work of the request and build up any output $this->performRequest(); - // Either all DB and deferred updates should happen or none. - // The later should not be cancelled due to client disconnect. - ignore_user_abort( true ); // Now commit any transactions, so that unreported errors after - // output() don't roll back the whole DB transaction - wfGetLBFactory()->commitMasterChanges(); + // output() don't roll back the whole DB transaction and so that + // we avoid having both success and error text in the response + $this->doPreOutputCommit(); // Output everything! $this->context->getOutput()->output(); - } /** * Ends this task peacefully + * @param string $mode Use 'fast' to always skip job running */ - public function restInPeace() { + public function restInPeace( $mode = 'fast' ) { + // Assure deferred updates are not in the main transaction + wfGetLBFactory()->commitMasterChanges(); + // Ignore things like master queries/connections on GET requests // as long as they are in deferred updates (which catch errors). Profiler::instance()->getTransactionProfiler()->resetExpectations(); @@ -588,6 +705,15 @@ class MediaWiki { // Do any deferred jobs DeferredUpdates::doUpdates( 'commit' ); + // Make sure any lazy jobs are pushed + JobQueueGroup::pushLazyJobs(); + + // Now that everything specific to this request is done, + // try to occasionally run jobs (if enabled) from the queues + if ( $mode === 'normal' ) { + $this->triggerJobs(); + } + // Log profiling data, e.g. in the database or UDP wfLogProfilingData(); @@ -604,7 +730,7 @@ class MediaWiki { * to run a specified number of jobs. This registers a callback to cleanup * the socket once it's done. */ - protected function triggerJobs() { + public function triggerJobs() { $jobRunRate = $this->config->get( 'JobRunRate' ); if ( $jobRunRate <= 0 || wfReadOnly() ) { return; @@ -647,7 +773,7 @@ class MediaWiki { $errno = $errstr = null; $info = wfParseUrl( $this->config->get( 'Server' ) ); - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $sock = fsockopen( $info['host'], isset( $info['port'] ) ? $info['port'] : 80, @@ -657,7 +783,7 @@ class MediaWiki { // is a problem elsewhere. 0.1 ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$sock ) { $runJobsLogger->error( "Failed to start cron API (socket error $errno): $errstr" ); // Fall back to running the job here while the user waits diff --git a/includes/Message.php b/includes/Message.php index 134af0ed..54abfd15 100644 --- a/includes/Message.php +++ b/includes/Message.php @@ -156,7 +156,7 @@ * * @since 1.17 */ -class Message implements MessageSpecifier { +class Message implements MessageSpecifier, Serializable { /** * In which language to get this message. True, which is the default, @@ -226,8 +226,9 @@ class Message implements MessageSpecifier { /** * @since 1.17 * - * @param string|string[] $key Message key or array of message keys to try and use the first - * non-empty message for. + * @param string|string[]|MessageSpecifier $key Message key, or array of + * message keys to try and use the first non-empty message for, or a + * MessageSpecifier to copy from. * @param array $params Message parameters. * @param Language $language Optional language of the message, defaults to $wgLang. * @@ -236,6 +237,16 @@ class Message implements MessageSpecifier { public function __construct( $key, $params = array(), Language $language = null ) { global $wgLang; + if ( $key instanceof MessageSpecifier ) { + if ( $params ) { + throw new InvalidArgumentException( + '$params must be empty if $key is a MessageSpecifier' + ); + } + $params = $key->getParams(); + $key = $key->getKey(); + } + if ( !is_string( $key ) && !is_array( $key ) ) { throw new InvalidArgumentException( '$key must be a string or an array' ); } @@ -252,6 +263,41 @@ class Message implements MessageSpecifier { $this->language = $language ?: $wgLang; } + /** + * @see Serializable::serialize() + * @since 1.26 + * @return string + */ + public function serialize() { + return serialize( array( + 'interface' => $this->interface, + 'language' => $this->language->getCode(), + 'key' => $this->key, + 'keysToTry' => $this->keysToTry, + 'parameters' => $this->parameters, + 'format' => $this->format, + 'useDatabase' => $this->useDatabase, + 'title' => $this->title, + ) ); + } + + /** + * @see Serializable::unserialize() + * @since 1.26 + * @param string $serialized + */ + public function unserialize( $serialized ) { + $data = unserialize( $serialized ); + $this->interface = $data['interface']; + $this->key = $data['key']; + $this->keysToTry = $data['keysToTry']; + $this->parameters = $data['parameters']; + $this->format = $data['format']; + $this->useDatabase = $data['useDatabase']; + $this->language = Language::factory( $data['language'] ); + $this->title = $data['title']; + } + /** * @since 1.24 * @@ -327,7 +373,7 @@ class Message implements MessageSpecifier { * * @since 1.17 * - * @param string|string[] $key Message key or array of keys. + * @param string|string[]|MessageSpecifier $key * @param mixed $param,... Parameters as strings. * * @return Message @@ -364,6 +410,31 @@ class Message implements MessageSpecifier { return new self( $keys ); } + /** + * Get a title object for a mediawiki message, where it can be found in the mediawiki namespace. + * The title will be for the current language, if the message key is in + * $wgForceUIMsgAsContentMsg it will be append with the language code (except content + * language), because Message::inContentLanguage will also return in user language. + * + * @see $wgForceUIMsgAsContentMsg + * @return Title + * @since 1.26 + */ + public function getTitle() { + global $wgContLang, $wgForceUIMsgAsContentMsg; + + $code = $this->language->getCode(); + $title = $this->key; + if ( + $wgContLang->getCode() !== $code + && in_array( $this->key, (array)$wgForceUIMsgAsContentMsg ) + ) { + $title .= '/' . $code; + } + + return Title::makeTitle( NS_MEDIAWIKI, $wgContLang->ucfirst( strtr( $title, ' ', '_' ) ) ); + } + /** * Adds parameters to the parameter list of this message. * @@ -597,7 +668,7 @@ class Message implements MessageSpecifier { if ( $lang instanceof Language || $lang instanceof StubUserLang ) { $this->language = $lang; } elseif ( is_string( $lang ) ) { - if ( $this->language->getCode() != $lang ) { + if ( !$this->language instanceof Language || $this->language->getCode() != $lang ) { $this->language = Language::factory( $lang ); } } else { diff --git a/includes/MessageBlobStore.php b/includes/MessageBlobStore.php deleted file mode 100644 index 011cae66..00000000 --- a/includes/MessageBlobStore.php +++ /dev/null @@ -1,390 +0,0 @@ -getFromDB( $resourceLoader, array_keys( $modules ), $lang ); - - // Generate blobs for any missing modules and store them in the DB - $missing = array_diff( array_keys( $modules ), array_keys( $blobs ) ); - foreach ( $missing as $name ) { - $blob = $this->insertMessageBlob( $name, $modules[$name], $lang ); - if ( $blob ) { - $blobs[$name] = $blob; - } - } - - return $blobs; - } - - /** - * Generate and insert a new message blob. If the blob was already - * present, it is not regenerated; instead, the preexisting blob - * is fetched and returned. - * - * @param string $name Module name - * @param ResourceLoaderModule $module - * @param string $lang Language code - * @return mixed Message blob or false if the module has no messages - */ - public function insertMessageBlob( $name, ResourceLoaderModule $module, $lang ) { - $blob = $this->generateMessageBlob( $module, $lang ); - - if ( !$blob ) { - return false; - } - - try { - $dbw = wfGetDB( DB_MASTER ); - $success = $dbw->insert( 'msg_resource', array( - 'mr_lang' => $lang, - 'mr_resource' => $name, - 'mr_blob' => $blob, - 'mr_timestamp' => $dbw->timestamp() - ), - __METHOD__, - array( 'IGNORE' ) - ); - - if ( $success ) { - if ( $dbw->affectedRows() == 0 ) { - // Blob was already present, fetch it - $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array( - 'mr_resource' => $name, - 'mr_lang' => $lang, - ), - __METHOD__ - ); - } else { - // Update msg_resource_links - $rows = array(); - - foreach ( $module->getMessages() as $key ) { - $rows[] = array( - 'mrl_resource' => $name, - 'mrl_message' => $key - ); - } - $dbw->insert( 'msg_resource_links', $rows, - __METHOD__, array( 'IGNORE' ) - ); - } - } - } catch ( DBError $e ) { - wfDebug( __METHOD__ . " failed to update DB: $e\n" ); - } - return $blob; - } - - /** - * Update the message blob for a given module in a given language - * - * @param string $name Module name - * @param ResourceLoaderModule $module - * @param string $lang Language code - * @return string Regenerated message blob, or null if there was no blob for - * the given module/language pair. - */ - public function updateModule( $name, ResourceLoaderModule $module, $lang ) { - $dbw = wfGetDB( DB_MASTER ); - $row = $dbw->selectRow( 'msg_resource', 'mr_blob', - array( 'mr_resource' => $name, 'mr_lang' => $lang ), - __METHOD__ - ); - if ( !$row ) { - return null; - } - - // Save the old and new blobs for later - $oldBlob = $row->mr_blob; - $newBlob = $this->generateMessageBlob( $module, $lang ); - - try { - $newRow = array( - 'mr_resource' => $name, - 'mr_lang' => $lang, - 'mr_blob' => $newBlob, - 'mr_timestamp' => $dbw->timestamp() - ); - - $dbw->replace( 'msg_resource', - array( array( 'mr_resource', 'mr_lang' ) ), - $newRow, __METHOD__ - ); - - // Figure out which messages were added and removed - $oldMessages = array_keys( FormatJson::decode( $oldBlob, true ) ); - $newMessages = array_keys( FormatJson::decode( $newBlob, true ) ); - $added = array_diff( $newMessages, $oldMessages ); - $removed = array_diff( $oldMessages, $newMessages ); - - // Delete removed messages, insert added ones - if ( $removed ) { - $dbw->delete( 'msg_resource_links', array( - 'mrl_resource' => $name, - 'mrl_message' => $removed - ), __METHOD__ - ); - } - - $newLinksRows = array(); - - foreach ( $added as $message ) { - $newLinksRows[] = array( - 'mrl_resource' => $name, - 'mrl_message' => $message - ); - } - - if ( $newLinksRows ) { - $dbw->insert( 'msg_resource_links', $newLinksRows, __METHOD__, - array( 'IGNORE' ) // just in case - ); - } - } catch ( Exception $e ) { - wfDebug( __METHOD__ . " failed to update DB: $e\n" ); - } - return $newBlob; - } - - /** - * Update a single message in all message blobs it occurs in. - * - * @param string $key Message key - */ - public function updateMessage( $key ) { - try { - $dbw = wfGetDB( DB_MASTER ); - - // Keep running until the updates queue is empty. - // Due to update conflicts, the queue might not be emptied - // in one iteration. - $updates = null; - do { - $updates = $this->getUpdatesForMessage( $key, $updates ); - - foreach ( $updates as $k => $update ) { - // Update the row on the condition that it - // didn't change since we fetched it by putting - // the timestamp in the WHERE clause. - $success = $dbw->update( 'msg_resource', - array( - 'mr_blob' => $update['newBlob'], - 'mr_timestamp' => $dbw->timestamp() ), - array( - 'mr_resource' => $update['resource'], - 'mr_lang' => $update['lang'], - 'mr_timestamp' => $update['timestamp'] ), - __METHOD__ - ); - - // Only requeue conflicted updates. - // If update() returned false, don't retry, for - // fear of getting into an infinite loop - if ( !( $success && $dbw->affectedRows() == 0 ) ) { - // Not conflicted - unset( $updates[$k] ); - } - } - } while ( count( $updates ) ); - - // No need to update msg_resource_links because we didn't add - // or remove any messages, we just changed their contents. - } catch ( Exception $e ) { - wfDebug( __METHOD__ . " failed to update DB: $e\n" ); - } - } - - public function clear() { - // TODO: Give this some more thought - try { - // Not using TRUNCATE, because that needs extra permissions, - // which maybe not granted to the database user. - $dbw = wfGetDB( DB_MASTER ); - $dbw->delete( 'msg_resource', '*', __METHOD__ ); - $dbw->delete( 'msg_resource_links', '*', __METHOD__ ); - } catch ( Exception $e ) { - wfDebug( __METHOD__ . " failed to update DB: $e\n" ); - } - } - - /** - * Create an update queue for updateMessage() - * - * @param string $key Message key - * @param array $prevUpdates Updates queue to refresh or null to build a fresh update queue - * @return array Updates queue - */ - private function getUpdatesForMessage( $key, $prevUpdates = null ) { - $dbw = wfGetDB( DB_MASTER ); - - if ( is_null( $prevUpdates ) ) { - // Fetch all blobs referencing $key - $res = $dbw->select( - array( 'msg_resource', 'msg_resource_links' ), - array( 'mr_resource', 'mr_lang', 'mr_blob', 'mr_timestamp' ), - array( 'mrl_message' => $key, 'mr_resource=mrl_resource' ), - __METHOD__ - ); - } else { - // Refetch the blobs referenced by $prevUpdates - - // Reorganize the (resource, lang) pairs in the format - // expected by makeWhereFrom2d() - $twoD = array(); - - foreach ( $prevUpdates as $update ) { - $twoD[$update['resource']][$update['lang']] = true; - } - - $res = $dbw->select( 'msg_resource', - array( 'mr_resource', 'mr_lang', 'mr_blob', 'mr_timestamp' ), - $dbw->makeWhereFrom2d( $twoD, 'mr_resource', 'mr_lang' ), - __METHOD__ - ); - } - - // Build the new updates queue - $updates = array(); - - foreach ( $res as $row ) { - $updates[] = array( - 'resource' => $row->mr_resource, - 'lang' => $row->mr_lang, - 'timestamp' => $row->mr_timestamp, - 'newBlob' => $this->reencodeBlob( $row->mr_blob, $key, $row->mr_lang ) - ); - } - - return $updates; - } - - /** - * Reencode a message blob with the updated value for a message - * - * @param string $blob Message blob (JSON object) - * @param string $key Message key - * @param string $lang Language code - * @return string Message blob with $key replaced with its new value - */ - private function reencodeBlob( $blob, $key, $lang ) { - $decoded = FormatJson::decode( $blob, true ); - $decoded[$key] = wfMessage( $key )->inLanguage( $lang )->plain(); - - return FormatJson::encode( (object)$decoded ); - } - - /** - * Get the message blobs for a set of modules from the database. - * Modules whose blobs are not in the database are silently dropped. - * - * @param ResourceLoader $resourceLoader - * @param array $modules Array of module names - * @param string $lang Language code - * @throws MWException - * @return array Array mapping module names to blobs - */ - private function getFromDB( ResourceLoader $resourceLoader, $modules, $lang ) { - $config = $resourceLoader->getConfig(); - $retval = array(); - $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( 'msg_resource', - array( 'mr_blob', 'mr_resource', 'mr_timestamp' ), - array( 'mr_resource' => $modules, 'mr_lang' => $lang ), - __METHOD__ - ); - - foreach ( $res as $row ) { - $module = $resourceLoader->getModule( $row->mr_resource ); - if ( !$module ) { - // This shouldn't be possible - throw new MWException( __METHOD__ . ' passed an invalid module name' ); - } - - // Update the module's blobs if the set of messages changed or if the blob is - // older than the CacheEpoch setting - $keys = array_keys( FormatJson::decode( $row->mr_blob, true ) ); - $values = array_values( array_unique( $module->getMessages() ) ); - if ( $keys !== $values - || wfTimestamp( TS_MW, $row->mr_timestamp ) <= $config->get( 'CacheEpoch' ) - ) { - $retval[$row->mr_resource] = $this->updateModule( $row->mr_resource, $module, $lang ); - } else { - $retval[$row->mr_resource] = $row->mr_blob; - } - } - - return $retval; - } - - /** - * Generate the message blob for a given module in a given language. - * - * @param ResourceLoaderModule $module - * @param string $lang Language code - * @return string JSON object - */ - private function generateMessageBlob( ResourceLoaderModule $module, $lang ) { - $messages = array(); - - foreach ( $module->getMessages() as $key ) { - $messages[$key] = wfMessage( $key )->inLanguage( $lang )->plain(); - } - - return FormatJson::encode( (object)$messages ); - } -} diff --git a/includes/MimeMagic.php b/includes/MimeMagic.php index ebe98a3c..2b240c3b 100644 --- a/includes/MimeMagic.php +++ b/includes/MimeMagic.php @@ -617,16 +617,18 @@ class MimeMagic { /** * Guess the MIME type from the file contents. * + * @todo Remove $ext param + * * @param string $file * @param mixed $ext * @return bool|string * @throws MWException */ - private function doGuessMimeType( $file, $ext ) { // TODO: remove $ext param + private function doGuessMimeType( $file, $ext ) { // Read a chunk of the file - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $f = fopen( $file, 'rb' ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$f ) { return 'unknown/unknown'; @@ -693,7 +695,7 @@ class MimeMagic { } /* Look for WebP */ - if ( strncmp( $head, "RIFF", 4 ) == 0 && strncmp( substr( $head, 8, 8 ), "WEBPVP8 ", 8 ) == 0 ) { + if ( strncmp( $head, "RIFF", 4 ) == 0 && strncmp( substr( $head, 8, 7 ), "WEBPVP8", 7 ) == 0 ) { wfDebug( __METHOD__ . ": recognized file as image/webp\n" ); return "image/webp"; } @@ -780,9 +782,9 @@ class MimeMagic { return $this->detectZipType( $head, $tail, $ext ); } - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $gis = getimagesize( $file ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( $gis && isset( $gis['mime'] ) ) { $mime = $gis['mime']; diff --git a/includes/MovePage.php b/includes/MovePage.php index de7da3f9..2cd9698c 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -64,21 +64,9 @@ class MovePage { $status->fatal( 'spamprotectiontext' ); } - # The move is allowed only if (1) the target doesn't exist, or - # (2) the target is a redirect to the source, and has no history - # (so we can undo bad moves right after they're done). - - if ( $this->newTitle->getArticleID() ) { # Target exists; check for validity - if ( !$this->isValidMoveTarget() ) { - $status->fatal( 'articleexists' ); - } - } else { - $tp = $this->newTitle->getTitleProtection(); - if ( $tp !== false ) { - if ( !$user->isAllowed( $tp['permission'] ) ) { - $status->fatal( 'cantmove-titleprotected' ); - } - } + $tp = $this->newTitle->getTitleProtection(); + if ( $tp !== false && !$user->isAllowed( $tp['permission'] ) ) { + $status->fatal( 'cantmove-titleprotected' ); } Hooks::run( 'MovePageCheckPermissions', @@ -125,6 +113,13 @@ class MovePage { $status->fatal( 'badarticleerror' ); } + # The move is allowed only if (1) the target doesn't exist, or + # (2) the target is a redirect to the source, and has no history + # (so we can undo bad moves right after they're done). + if ( $this->newTitle->getArticleID() && !$this->isValidMoveTarget() ) { + $status->fatal( 'articleexists' ); + } + // Content model checks if ( !$wgContentHandlerUseDB && $this->oldTitle->getContentModel() !== $this->newTitle->getContentModel() ) { @@ -310,8 +305,8 @@ class MovePage { __METHOD__, array( 'IGNORE' ) ); - # Update the protection log - $log = new LogPage( 'protect' ); + + // Build comment for log $comment = wfMessage( 'prot_1movedto2', $this->oldTitle->getPrefixedText(), @@ -320,14 +315,6 @@ class MovePage { if ( $reason ) { $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason; } - // @todo FIXME: $params? - $logId = $log->addEntry( - 'move_prot', - $this->newTitle, - $comment, - array( $this->oldTitle->getPrefixedText() ), - $user - ); // reread inserted pr_ids for log relation $insertedPrIds = $dbw->select( @@ -340,7 +327,18 @@ class MovePage { foreach ( $insertedPrIds as $prid ) { $logRelationsValues[] = $prid->pr_id; } - $log->addRelations( 'pr_id', $logRelationsValues, $logId ); + + // Update the protection log + $logEntry = new ManualLogEntry( 'protect', 'move_prot' ); + $logEntry->setTarget( $this->newTitle ); + $logEntry->setComment( $comment ); + $logEntry->setPerformer( $user ); + $logEntry->setParameters( array( + '4::oldtitle' => $this->oldTitle->getPrefixedText(), + ) ); + $logEntry->setRelations( array( 'pr_id' => $logRelationsValues ) ); + $logId = $logEntry->insert(); + $logEntry->publish( $logId ); } // Update *_from_namespace fields as needed @@ -421,6 +419,13 @@ class MovePage { $redirectContent = null; } + // Figure out whether the content model is no longer the default + $oldDefault = ContentHandler::getDefaultModelFor( $this->oldTitle ); + $contentModel = $this->oldTitle->getContentModel(); + $newDefault = ContentHandler::getDefaultModelFor( $nt ); + $defaultContentModelChanging = ( $oldDefault !== $newDefault + && $oldDefault === $contentModel ); + // bug 57084: log_page should be the ID of the *moved* page $oldid = $this->oldTitle->getArticleID(); $logTitle = clone $this->oldTitle; @@ -498,6 +503,16 @@ class MovePage { $newpage->doEditUpdates( $nullRevision, $user, array( 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ) ); + // If the default content model changes, we need to populate rev_content_model + if ( $defaultContentModelChanging ) { + $dbw->update( + 'revision', + array( 'rev_content_model' => $contentModel ), + array( 'rev_page' => $nt->getArticleID(), 'rev_content_model IS NULL' ), + __METHOD__ + ); + } + if ( !$moveOverRedirect ) { WikiPage::onArticleCreate( $nt ); } diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 7e671878..552e1815 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -20,6 +20,9 @@ * @file */ +use MediaWiki\Logger\LoggerFactory; +use WrappedString\WrappedString; + /** * This class should be covered by a general architecture document which does * not exist as of January 2011. This is one of the Core classes and should @@ -139,9 +142,6 @@ class OutputPage extends ContextSource { /** @var string Inline CSS styles. Use addInlineStyle() sparingly */ protected $mInlineStyles = ''; - /** @todo Unused? */ - private $mLinkColours; - /** * @var string Used by skin template. * Example: $tpl->set( 'displaytitle', $out->mPageLinkTitle ); @@ -162,9 +162,6 @@ class OutputPage extends ContextSource { /** @var array */ protected $mModuleStyles = array(); - /** @var array */ - protected $mModuleMessages = array(); - /** @var ResourceLoader */ protected $mResourceLoader; @@ -305,6 +302,11 @@ class OutputPage extends ContextSource { */ private $mEnableSectionEditLinks = true; + /** + * @var string|null The URL to send in a element with rel=copyright + */ + private $copyrightUrl; + /** * Constructor for OutputPage. This should not be called directly. * Instead a new RequestContext should be created and it will implicitly create @@ -341,6 +343,18 @@ class OutputPage extends ContextSource { return $this->mRedirect; } + /** + * Set the copyright URL to send with the output. + * Empty string to omit, null to reset. + * + * @since 1.26 + * + * @param string|null $url + */ + public function setCopyrightUrl( $url ) { + $this->copyrightUrl = $url; + } + /** * Set the HTTP status code to send with the output. * @@ -594,6 +608,20 @@ class OutputPage extends ContextSource { * @return array Array of module names */ public function getModuleStyles( $filter = false, $position = null ) { + // T97420 + $resourceLoader = $this->getResourceLoader(); + + foreach ( $this->mModuleStyles as $val ) { + $module = $resourceLoader->getModule( $val ); + + if ( $module instanceof ResourceLoaderModule && $module->isPositionDefault() ) { + $warning = __METHOD__ . ': style module should define its position explicitly: ' . + $val . ' ' . get_class( $module ); + wfDebugLog( 'resourceloader', $warning ); + wfLogWarning( $warning ); + } + } + return $this->getModules( $filter, $position, 'mModuleStyles' ); } @@ -613,24 +641,24 @@ class OutputPage extends ContextSource { /** * Get the list of module messages to include on this page * + * @deprecated since 1.26 Obsolete * @param bool $filter * @param string|null $position - * * @return array Array of module names */ public function getModuleMessages( $filter = false, $position = null ) { - return $this->getModules( $filter, $position, 'mModuleMessages' ); + wfDeprecated( __METHOD__, '1.26' ); + return array(); } /** - * Add only messages of one or more modules recognized by the resource loader. - * Module messages added through this function will be loaded by the resource - * loader when the page loads. + * Load messages of one or more ResourceLoader modules. * + * @deprecated since 1.26 Use addModules() instead * @param string|array $modules Module name (string) or array of module names */ public function addModuleMessages( $modules ) { - $this->mModuleMessages = array_merge( $this->mModuleMessages, (array)$modules ); + wfDeprecated( __METHOD__, '1.26' ); } /** @@ -797,9 +825,9 @@ class OutputPage extends ContextSource { # this breaks strtotime(). $clientHeader = preg_replace( '/;.*$/', '', $clientHeader ); - wfSuppressWarnings(); // E_STRICT system time bitching + MediaWiki\suppressWarnings(); // E_STRICT system time bitching $clientHeaderTime = strtotime( $clientHeader ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$clientHeaderTime ) { wfDebug( __METHOD__ . ": unable to parse the client's If-Modified-Since header: $clientHeader\n" ); @@ -826,10 +854,10 @@ class OutputPage extends ContextSource { } # Not modified - # Give a 304 response code and disable body output + # Give a 304 Not Modified response code and disable body output wfDebug( __METHOD__ . ": NOT MODIFIED, $info\n", 'log' ); ini_set( 'zlib.output_compression', 0 ); - $this->getRequest()->response()->header( "HTTP/1.1 304 Not Modified" ); + $this->getRequest()->response()->statusHeader( 304 ); $this->sendCacheControl(); $this->disable(); @@ -1761,7 +1789,6 @@ class OutputPage extends ContextSource { $this->addModules( $parserOutput->getModules() ); $this->addModuleScripts( $parserOutput->getModuleScripts() ); $this->addModuleStyles( $parserOutput->getModuleStyles() ); - $this->addModuleMessages( $parserOutput->getModuleMessages() ); $this->addJsConfigVars( $parserOutput->getJsConfigVars() ); $this->mPreventClickjacking = $this->mPreventClickjacking || $parserOutput->preventClickjacking(); @@ -1788,6 +1815,11 @@ class OutputPage extends ContextSource { } } + // enable OOUI if requested via ParserOutput + if ( $parserOutput->getEnableOOUI() ) { + $this->enableOOUI(); + } + // Link flags are ignored for now, but may in the future be // used to mark individual language links. $linkFlags = array(); @@ -1808,7 +1840,6 @@ class OutputPage extends ContextSource { $this->addModules( $parserOutput->getModules() ); $this->addModuleScripts( $parserOutput->getModuleScripts() ); $this->addModuleStyles( $parserOutput->getModuleStyles() ); - $this->addModuleMessages( $parserOutput->getModuleMessages() ); $this->addJsConfigVars( $parserOutput->getJsConfigVars() ); } @@ -1978,21 +2009,20 @@ class OutputPage extends ContextSource { * Add an HTTP header that will influence on the cache * * @param string $header Header name - * @param array|null $option - * @todo FIXME: Document the $option parameter; it appears to be for - * X-Vary-Options but what format is acceptable? + * @param string[]|null $option Options for X-Vary-Options. Possible options are: + * - "string-contains=$XXX" varies on whether the header value as a string + * contains $XXX as a substring. + * - "list-contains=$XXX" varies on whether the header value as a + * comma-separated list contains $XXX as one of the list items. */ - public function addVaryHeader( $header, $option = null ) { + public function addVaryHeader( $header, array $option = null ) { if ( !array_key_exists( $header, $this->mVaryHeader ) ) { - $this->mVaryHeader[$header] = (array)$option; - } elseif ( is_array( $option ) ) { - if ( is_array( $this->mVaryHeader[$header] ) ) { - $this->mVaryHeader[$header] = array_merge( $this->mVaryHeader[$header], $option ); - } else { - $this->mVaryHeader[$header] = $option; - } + $this->mVaryHeader[$header] = array(); } - $this->mVaryHeader[$header] = array_unique( (array)$this->mVaryHeader[$header] ); + if ( !is_array( $option ) ) { + $option = array(); + } + $this->mVaryHeader[$header] = array_unique( array_merge( $this->mVaryHeader[$header], $option ) ); } /** @@ -2210,8 +2240,7 @@ class OutputPage extends ContextSource { if ( Hooks::run( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) { if ( $code == '301' || $code == '303' ) { if ( !$config->get( 'DebugRedirects' ) ) { - $message = HttpStatus::getMessage( $code ); - $response->header( "HTTP/1.1 $code $message" ); + $response->statusHeader( $code ); } $this->mLastModified = wfTimestamp( TS_RFC2822 ); } @@ -2233,10 +2262,7 @@ class OutputPage extends ContextSource { return; } elseif ( $this->mStatusCode ) { - $message = HttpStatus::getMessage( $this->mStatusCode ); - if ( $message ) { - $response->header( 'HTTP/1.1 ' . $this->mStatusCode . ' ' . $message ); - } + $response->statusHeader( $this->mStatusCode ); } # Buffer output; final headers may depend on later processing @@ -2258,14 +2284,14 @@ class OutputPage extends ContextSource { if ( $this->mArticleBodyOnly ) { echo $this->mBodytext; } else { - $sk = $this->getSkin(); // add skin specific modules $modules = $sk->getDefaultModules(); - // enforce various default modules for all skins + // Enforce various default modules for all skins $coreModules = array( - // keep this list as small as possible + // Keep this list as small as possible + 'site', 'mediawiki.page.startup', 'mediawiki.user', ); @@ -2672,16 +2698,14 @@ class OutputPage extends ContextSource { } $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n"; + $ret .= $this->getInlineHeadScripts() . "\n"; + $ret .= $this->buildCssLinks() . "\n"; + $ret .= $this->getExternalHeadScripts() . "\n"; foreach ( $this->getHeadLinksArray() as $item ) { $ret .= $item . "\n"; } - // No newline after buildCssLinks since makeResourceLoaderLink did that already - $ret .= $this->buildCssLinks(); - - $ret .= $this->getHeadScripts() . "\n"; - foreach ( $this->mHeadItems as $item ) { $ret .= $item . "\n"; } @@ -2729,29 +2753,31 @@ class OutputPage extends ContextSource { */ public function getResourceLoader() { if ( is_null( $this->mResourceLoader ) ) { - $this->mResourceLoader = new ResourceLoader( $this->getConfig() ); + $this->mResourceLoader = new ResourceLoader( + $this->getConfig(), + LoggerFactory::getInstance( 'resourceloader' ) + ); } return $this->mResourceLoader; } /** - * @todo Document + * Construct neccecary html and loader preset states to load modules on a page. + * + * Use getHtmlFromLoaderLinks() to convert this array to HTML. + * * @param array|string $modules One or more module names * @param string $only ResourceLoaderModule TYPE_ class constant - * @param bool $useESI - * @param array $extraQuery Array with extra query parameters to add to each - * request. array( param => value ). - * @param bool $loadCall If true, output an (asynchronous) mw.loader.load() - * call rather than a " tags to put in "". + * + * @return string HTML fragment + */ + function getInlineHeadScripts() { + $links = array(); + + // Client profile classes for . Allows for easy hiding/showing of UI components. + // Must be done synchronously on every page to avoid flashes of wrong content. + // Note: This class distinguishes MediaWiki-supported JavaScript from the rest. + // The "rest" includes browsers that support JavaScript but not supported by our runtime. + // For the performance benefit of the majority, this is added unconditionally here and is + // then fixed up by the startup module for unsupported browsers. $links[] = Html::inlineScript( - ResourceLoader::makeLoaderConditionalScript( - ResourceLoader::makeConfigSetScript( $this->getJSVars() ) - ) + 'document.documentElement.className = document.documentElement.className' + . '.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );' + ); + + // Load config before anything else + $links[] = ResourceLoader::makeInlineScript( + ResourceLoader::makeConfigSetScript( $this->getJSVars() ) ); // Load embeddable private modules before any loader links // This needs to be TYPE_COMBINED so these modules are properly wrapped // in mw.loader.implement() calls and deferred until mw.user is available - $embedScripts = array( 'user.options', 'user.tokens' ); + $embedScripts = array( 'user.options' ); $links[] = $this->makeResourceLoaderLink( $embedScripts, ResourceLoaderModule::TYPE_COMBINED ); - - // Scripts and messages "only" requests marked for top inclusion - // Messages should go first - $links[] = $this->makeResourceLoaderLink( - $this->getModuleMessages( true, 'top' ), - ResourceLoaderModule::TYPE_MESSAGES - ); - $links[] = $this->makeResourceLoaderLink( - $this->getModuleScripts( true, 'top' ), - ResourceLoaderModule::TYPE_SCRIPTS - ); + // Separate user.tokens as otherwise caching will be allowed (T84960) + $links[] = $this->makeResourceLoaderLink( 'user.tokens', ResourceLoaderModule::TYPE_COMBINED ); // Modules requests - let the client calculate dependencies and batch requests as it likes // Only load modules that have marked themselves for loading at the top $modules = $this->getModules( true, 'top' ); if ( $modules ) { - $links[] = Html::inlineScript( - ResourceLoader::makeLoaderConditionalScript( - Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) - ) + $links[] = ResourceLoader::makeInlineScript( + Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) ); } - if ( $this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) { - $links[] = $this->getScriptsForBottomQueue( true ); - } + // "Scripts only" modules marked for top inclusion + $links[] = $this->makeResourceLoaderLink( + $this->getModuleScripts( true, 'top' ), + ResourceLoaderModule::TYPE_SCRIPTS + ); return self::getHtmlFromLoaderLinks( $links ); } /** - * JS stuff to put at the 'bottom', which can either be the bottom of the - * "" or the bottom of the "" depending on - * $wgResourceLoaderExperimentalAsyncLoading: modules marked with position - * 'bottom', legacy scripts ($this->mScripts), user preferences, site JS - * and user JS. + * JS stuff to put at the 'bottom', which goes at the bottom of the ``. + * These are modules marked with position 'bottom', legacy scripts ($this->mScripts), + * site JS, and user JS. * - * @param bool $inHead If true, this HTML goes into the "", - * if false it goes into the "". + * @param bool $unused Previously used to let this method change its output based + * on whether it was called by getExternalHeadScripts() or getBottomScripts(). * @return string */ - function getScriptsForBottomQueue( $inHead ) { - // Scripts and messages "only" requests marked for bottom inclusion + function getScriptsForBottomQueue( $unused = null ) { + // Scripts "only" requests marked for bottom inclusion // If we're in the , use load() calls rather than " + ); } /** @@ -1361,11 +1404,13 @@ MESSAGE; * @return string */ public static function makeConfigSetScript( array $configuration ) { - return Xml::encodeJsCall( - 'mw.config.set', - array( $configuration ), - ResourceLoader::inDebugMode() - ); + if ( ResourceLoader::inDebugMode() ) { + return Xml::encodeJsCall( 'mw.config.set', array( $configuration ), true ); + } + + $config = RequestContext::getMain()->getConfig(); + $js = Xml::encodeJsCall( 'mw.config.set', array( $configuration ), false ); + return self::applyFilter( 'minify-js', $js, $config ); } /** @@ -1427,7 +1472,7 @@ MESSAGE; * @param string $source Name of the ResourceLoader source * @param ResourceLoaderContext $context * @param array $extraQuery - * @return string URL to load.php. May be protocol-relative (if $wgLoadScript is procol-relative) + * @return string URL to load.php. May be protocol-relative if $wgLoadScript is, too. */ public function createLoaderURL( $source, ResourceLoaderContext $context, $extraQuery = array() @@ -1435,14 +1480,12 @@ MESSAGE; $query = self::createLoaderQuery( $context, $extraQuery ); $script = $this->getLoadScript( $source ); - // Prevent the IE6 extension check from being triggered (bug 28840) - // by appending a character that's invalid in Windows extensions ('*') - return wfExpandUrl( wfAppendQuery( $script, $query ) . '&*', PROTO_RELATIVE ); + return wfAppendQuery( $script, $query ); } /** * Build a load.php URL - * @deprecated since 1.24, use createLoaderURL instead + * @deprecated since 1.24 Use createLoaderURL() instead * @param array $modules Array of module names (strings) * @param string $lang Language code * @param string $skin Skin name @@ -1453,7 +1496,7 @@ MESSAGE; * @param bool $printable Printable mode * @param bool $handheld Handheld mode * @param array $extraQuery Extra query parameters to add - * @return string URL to load.php. May be protocol-relative (if $wgLoadScript is procol-relative) + * @return string URL to load.php. May be protocol-relative if $wgLoadScript is, too. */ public static function makeLoaderURL( $modules, $lang, $skin, $user = null, $version = null, $debug = false, $only = null, $printable = false, @@ -1465,9 +1508,7 @@ MESSAGE; $only, $printable, $handheld, $extraQuery ); - // Prevent the IE6 extension check from being triggered (bug 28840) - // by appending a character that's invalid in Windows extensions ('*') - return wfExpandUrl( wfAppendQuery( $wgLoadScript, $query ) . '&*', PROTO_RELATIVE ); + return wfAppendQuery( $wgLoadScript, $query ); } /** @@ -1562,27 +1603,23 @@ MESSAGE; * @param Config $config * @throws MWException * @since 1.22 - * @return lessc + * @return Less_Parser */ public static function getLessCompiler( Config $config ) { // When called from the installer, it is possible that a required PHP extension // is missing (at least for now; see bug 47564). If this is the case, throw an // exception (caught by the installer) to prevent a fatal error later on. - if ( !class_exists( 'lessc' ) ) { - throw new MWException( 'MediaWiki requires the lessphp compiler' ); - } - if ( !function_exists( 'ctype_digit' ) ) { - throw new MWException( 'lessc requires the Ctype extension' ); + if ( !class_exists( 'Less_Parser' ) ) { + throw new MWException( 'MediaWiki requires the less.php parser' ); } - $less = new lessc(); - $less->setPreserveComments( true ); - $less->setVariables( self::getLessVars( $config ) ); - $less->setImportDir( $config->get( 'ResourceLoaderLESSImportPaths' ) ); - foreach ( $config->get( 'ResourceLoaderLESSFunctions' ) as $name => $func ) { - $less->registerFunction( $name, $func ); - } - return $less; + $parser = new Less_Parser; + $parser->ModifyVars( self::getLessVars( $config ) ); + $parser->SetImportDirs( array_fill_keys( $config->get( 'ResourceLoaderLESSImportPaths' ), '' ) ); + $parser->SetOption( 'relativeUrls', false ); + $parser->SetCacheDir( $config->get( 'CacheDirectory' ) ?: wfTempDir() ); + + return $parser; } /** diff --git a/includes/resourceloader/ResourceLoaderContext.php b/includes/resourceloader/ResourceLoaderContext.php index a6a7d347..2e1752a6 100644 --- a/includes/resourceloader/ResourceLoaderContext.php +++ b/includes/resourceloader/ResourceLoaderContext.php @@ -22,6 +22,8 @@ * @author Roan Kattouw */ +use MediaWiki\Logger\LoggerFactory; + /** * Object passed around to modules which contains information about the state * of a specific loader request @@ -57,24 +59,26 @@ class ResourceLoaderContext { $this->resourceLoader = $resourceLoader; $this->request = $request; - // Interpret request // List of modules $modules = $request->getVal( 'modules' ); $this->modules = $modules ? self::expandModuleNames( $modules ) : array(); + // Various parameters - $this->skin = $request->getVal( 'skin' ); $this->user = $request->getVal( 'user' ); $this->debug = $request->getFuzzyBool( - 'debug', $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' ) + 'debug', + $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' ) ); - $this->only = $request->getVal( 'only' ); - $this->version = $request->getVal( 'version' ); + $this->only = $request->getVal( 'only', null ); + $this->version = $request->getVal( 'version', null ); $this->raw = $request->getFuzzyBool( 'raw' ); + // Image requests $this->image = $request->getVal( 'image' ); $this->variant = $request->getVal( 'variant' ); $this->format = $request->getVal( 'format' ); + $this->skin = $request->getVal( 'skin' ); $skinnames = Skin::getSkinNames(); // If no skin is specified, or we don't recognize the skin, use the default skin if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) { @@ -123,7 +127,8 @@ class ResourceLoaderContext { */ public static function newDummyContext() { return new self( new ResourceLoader( - ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) + ConfigFactory::getDefaultInstance()->makeConfig( 'main' ), + LoggerFactory::getInstance( 'resourceloader' ) ), new FauxRequest( array() ) ); } @@ -154,7 +159,7 @@ class ResourceLoaderContext { public function getLanguage() { if ( $this->language === null ) { // Must be a valid language code after this point (bug 62849) - $this->language = RequestContext::sanitizeLangCode( $this->request->getVal( 'lang' ) ); + $this->language = RequestContext::sanitizeLangCode( $this->getRequest()->getVal( 'lang' ) ); } return $this->language; } @@ -164,7 +169,7 @@ class ResourceLoaderContext { */ public function getDirection() { if ( $this->direction === null ) { - $this->direction = $this->request->getVal( 'dir' ); + $this->direction = $this->getRequest()->getVal( 'dir' ); if ( !$this->direction ) { // Determine directionality based on user language (bug 6100) $this->direction = Language::factory( $this->getLanguage() )->getDir(); @@ -174,7 +179,7 @@ class ResourceLoaderContext { } /** - * @return string|null + * @return string */ public function getSkin() { return $this->skin; @@ -227,6 +232,8 @@ class ResourceLoaderContext { } /** + * @see ResourceLoaderModule::getVersionHash + * @see OutputPage::makeResourceLoaderLink * @return string|null */ public function getVersion() { @@ -285,7 +292,7 @@ class ResourceLoaderContext { return $this->imageObj; } - $image = $module->getImage( $this->image ); + $image = $module->getImage( $this->image, $this ); if ( !$image ) { return $this->imageObj; } @@ -300,21 +307,21 @@ class ResourceLoaderContext { * @return bool */ public function shouldIncludeScripts() { - return is_null( $this->getOnly() ) || $this->getOnly() === 'scripts'; + return $this->getOnly() === null || $this->getOnly() === 'scripts'; } /** * @return bool */ public function shouldIncludeStyles() { - return is_null( $this->getOnly() ) || $this->getOnly() === 'styles'; + return $this->getOnly() === null || $this->getOnly() === 'styles'; } /** * @return bool */ public function shouldIncludeMessages() { - return is_null( $this->getOnly() ) || $this->getOnly() === 'messages'; + return $this->getOnly() === null; } /** diff --git a/includes/resourceloader/ResourceLoaderEditToolbarModule.php b/includes/resourceloader/ResourceLoaderEditToolbarModule.php index d79174cd..da729fdc 100644 --- a/includes/resourceloader/ResourceLoaderEditToolbarModule.php +++ b/includes/resourceloader/ResourceLoaderEditToolbarModule.php @@ -56,7 +56,7 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule { // This is very conveniently formatted and we can pass it right through $vars = $language->getImageFiles(); - // lessc tries to be helpful and parse our variables as LESS source code + // less.php tries to be helpful and parse our variables as LESS source code foreach ( $vars as $key => &$value ) { $value = self::cssSerializeString( $value ); } @@ -65,25 +65,10 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule { } /** - * @param ResourceLoaderContext $context - * @return int UNIX timestamp - */ - public function getModifiedTime( ResourceLoaderContext $context ) { - return max( - parent::getModifiedTime( $context ), - $this->getHashMtime( $context ) - ); - } - - /** - * @param ResourceLoaderContext $context - * @return string Hash + * @return bool */ - public function getModifiedHash( ResourceLoaderContext $context ) { - return md5( - parent::getModifiedHash( $context ) . - serialize( $this->getLessVars( $context ) ) - ); + public function enableModuleContentVersion() { + return true; } /** @@ -93,11 +78,11 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule { * * @throws MWException * @param ResourceLoaderContext $context - * @return lessc + * @return Less_Parser */ protected function getLessCompiler( ResourceLoaderContext $context = null ) { - $compiler = parent::getLessCompiler(); - $compiler->setVariables( $this->getLessVars( $context ) ); - return $compiler; + $parser = parent::getLessCompiler(); + $parser->ModifyVars( $this->getLessVars( $context ) ); + return $parser; } } diff --git a/includes/resourceloader/ResourceLoaderFileModule.php b/includes/resourceloader/ResourceLoaderFileModule.php index 671098e1..7fbc1cb4 100644 --- a/includes/resourceloader/ResourceLoaderFileModule.php +++ b/includes/resourceloader/ResourceLoaderFileModule.php @@ -143,15 +143,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { */ protected $hasGeneratedStyles = false; - /** - * @var array Cache for mtime - * @par Usage: - * @code - * array( [hash] => [mtime], [hash] => [mtime], ... ) - * @endcode - */ - protected $modifiedTime = array(); - /** * @var array Place where readStyleFile() tracks file dependencies * @par Usage: @@ -161,6 +152,12 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { */ protected $localFileRefs = array(); + /** + * @var array Place where readStyleFile() tracks file dependencies for non-existent files. + * Used in tests to detect missing dependencies. + */ + protected $missingLocalFileRefs = array(); + /* Methods */ /** @@ -281,8 +278,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { $this->{$member} = $option; break; // Single strings - case 'group': case 'position': + $this->isPositionDefined = true; + case 'group': case 'skipFunction': $this->{$member} = (string)$option; break; @@ -486,10 +484,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { /** * Gets list of names of modules this module depends on. - * + * @param ResourceLoaderContext context * @return array List of module names */ - public function getDependencies() { + public function getDependencies( ResourceLoaderContext $context = null ) { return $this->dependencies; } @@ -522,24 +520,28 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { } /** - * Get the last modified timestamp of this module. + * Disable module content versioning. * - * Last modified timestamps are calculated from the highest last modified - * timestamp of this module's constituent files as well as the files it - * depends on. This function is context-sensitive, only performing - * calculations on files relevant to the given language, skin and debug - * mode. + * This class uses getDefinitionSummary() instead, to avoid filesystem overhead + * involved with building the full module content inside a startup request. * - * @param ResourceLoaderContext $context Context in which to calculate - * the modified time - * @return int UNIX timestamp - * @see ResourceLoaderModule::getFileDependencies + * @return bool */ - public function getModifiedTime( ResourceLoaderContext $context ) { - if ( isset( $this->modifiedTime[$context->getHash()] ) ) { - return $this->modifiedTime[$context->getHash()]; - } + public function enableModuleContentVersion() { + return false; + } + /** + * Helper method to gather file hashes for getDefinitionSummary. + * + * This function is context-sensitive, only computing hashes of files relevant to the + * given language, skin, etc. + * + * @see ResourceLoaderModule::getFileDependencies + * @param ResourceLoaderContext $context + * @return array + */ + protected function getFileHashes( ResourceLoaderContext $context ) { $files = array(); // Flatten style files into $files @@ -578,22 +580,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { // entry point Less file we already know about. $files = array_values( array_unique( $files ) ); - // If a module is nothing but a list of dependencies, we need to avoid - // giving max() an empty array - if ( count( $files ) === 0 ) { - $this->modifiedTime[$context->getHash()] = 1; - return $this->modifiedTime[$context->getHash()]; - } - - $filesMtime = max( array_map( array( __CLASS__, 'safeFilemtime' ), $files ) ); - - $this->modifiedTime[$context->getHash()] = max( - $filesMtime, - $this->getMsgBlobMtime( $context->getLanguage() ), - $this->getDefinitionMtime( $context ) - ); - - return $this->modifiedTime[$context->getHash()]; + // Don't include keys or file paths here, only the hashes. Including that would needlessly + // cause global cache invalidation when files move or if e.g. the MediaWiki path changes. + // Any significant ordering is already detected by the definition summary. + return array_map( array( __CLASS__, 'safeFileHash' ), $files ); } /** @@ -604,7 +594,17 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { */ public function getDefinitionSummary( ResourceLoaderContext $context ) { $summary = parent::getDefinitionSummary( $context ); + + $options = array(); foreach ( array( + // The following properties are omitted because they don't affect the module reponse: + // - localBasePath (Per T104950; Changes when absolute directory name changes. If + // this affects 'scripts' and other file paths, getFileHashes accounts for that.) + // - remoteBasePath (Per T104950) + // - dependencies (provided via startup module) + // - targets + // - group (provided via startup module) + // - position (only used by OutputPage) 'scripts', 'debugScripts', 'loaderScripts', @@ -612,25 +612,23 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { 'languageScripts', 'skinScripts', 'skinStyles', - 'dependencies', 'messages', - 'targets', 'templates', - 'group', - 'position', 'skipFunction', - 'localBasePath', - 'remoteBasePath', 'debugRaw', 'raw', ) as $member ) { - $summary[$member] = $this->{$member}; + $options[$member] = $this->{$member}; }; + + $summary[] = array( + 'options' => $options, + 'fileHashes' => $this->getFileHashes( $context ), + 'msgBlobMtime' => $this->getMsgBlobMtime( $context->getLanguage() ), + ); return $summary; } - /* Protected Methods */ - /** * @param string|ResourceLoaderFilePath $path * @return string @@ -925,10 +923,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { $localDir = dirname( $localPath ); $remoteDir = dirname( $remotePath ); // Get and register local file references - $this->localFileRefs = array_merge( - $this->localFileRefs, - CSSMin::getLocalFileReferences( $style, $localDir ) - ); + $localFileRefs = CSSMin::getAllLocalFileReferences( $style, $localDir ); + foreach ( $localFileRefs as $file ) { + if ( file_exists( $file ) ) { + $this->localFileRefs[] = $file; + } else { + $this->missingLocalFileRefs[] = $file; + } + } return CSSMin::remap( $style, $localDir, $remoteDir, true ); @@ -958,17 +960,17 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { * Keeps track of all used files and adds them to localFileRefs. * * @since 1.22 - * @throws Exception If lessc encounters a parse error + * @throws Exception If less.php encounters a parse error * @param string $fileName File path of LESS source - * @param lessc $compiler Compiler to use, if not default + * @param Less_Parser $parser Compiler to use, if not default * @return string CSS source */ protected function compileLessFile( $fileName, $compiler = null ) { if ( !$compiler ) { $compiler = $this->getLessCompiler(); } - $result = $compiler->compileFile( $fileName ); - $this->localFileRefs += array_keys( $compiler->allParsedFiles() ); + $result = $compiler->parseFile( $fileName )->getCss(); + $this->localFileRefs += array_keys( $compiler->AllParsedFiles() ); return $result; } @@ -980,7 +982,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { * @param ResourceLoaderContext $context * @throws MWException * @since 1.24 - * @return lessc + * @return Less_Parser */ protected function getLessCompiler( ResourceLoaderContext $context = null ) { return ResourceLoader::getLessCompiler( $this->getConfig() ); diff --git a/includes/resourceloader/ResourceLoaderForeignApiModule.php b/includes/resourceloader/ResourceLoaderForeignApiModule.php new file mode 100644 index 00000000..7ed08317 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderForeignApiModule.php @@ -0,0 +1,33 @@ +dependencies; + Hooks::run( 'ResourceLoaderForeignApiModules', array( &$dependencies, $context ) ); + return $dependencies; + } +} diff --git a/includes/resourceloader/ResourceLoaderImage.php b/includes/resourceloader/ResourceLoaderImage.php index 12d1e827..2338c902 100644 --- a/includes/resourceloader/ResourceLoaderImage.php +++ b/includes/resourceloader/ResourceLoaderImage.php @@ -54,15 +54,16 @@ class ResourceLoaderImage { $this->variants = $variants; // Expand shorthands: - // array( "en,de,fr" => "foo.svg" ) → array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" ) + // array( "en,de,fr" => "foo.svg" ) + // → array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" ) if ( is_array( $this->descriptor ) && isset( $this->descriptor['lang'] ) ) { foreach ( array_keys( $this->descriptor['lang'] ) as $langList ) { if ( strpos( $langList, ',' ) !== false ) { $this->descriptor['lang'] += array_fill_keys( explode( ',', $langList ), - $this->descriptor['lang'][ $langList ] + $this->descriptor['lang'][$langList] ); - unset( $this->descriptor['lang'][ $langList ] ); + unset( $this->descriptor['lang'][$langList] ); } } } @@ -75,11 +76,15 @@ class ResourceLoaderImage { } ); $extensions = array_unique( $extensions ); if ( count( $extensions ) !== 1 ) { - throw new InvalidArgumentException( "File type for different image files of '$name' not the same" ); + throw new InvalidArgumentException( + "File type for different image files of '$name' not the same" + ); } $ext = $extensions[0]; if ( !isset( self::$fileTypes[$ext] ) ) { - throw new InvalidArgumentException( "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)" ); + throw new InvalidArgumentException( + "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)" + ); } $this->extension = $ext; } @@ -117,14 +122,14 @@ class ResourceLoaderImage { * @param ResourceLoaderContext $context Any context * @return string */ - protected function getPath( ResourceLoaderContext $context ) { + public function getPath( ResourceLoaderContext $context ) { $desc = $this->descriptor; if ( is_string( $desc ) ) { return $this->basePath . '/' . $desc; - } elseif ( isset( $desc['lang'][ $context->getLanguage() ] ) ) { - return $this->basePath . '/' . $desc['lang'][ $context->getLanguage() ]; - } elseif ( isset( $desc[ $context->getDirection() ] ) ) { - return $this->basePath . '/' . $desc[ $context->getDirection() ]; + } elseif ( isset( $desc['lang'][$context->getLanguage()] ) ) { + return $this->basePath . '/' . $desc['lang'][$context->getLanguage()]; + } elseif ( isset( $desc[$context->getDirection()] ) ) { + return $this->basePath . '/' . $desc[$context->getDirection()]; } else { return $this->basePath . '/' . $desc['default']; } diff --git a/includes/resourceloader/ResourceLoaderImageModule.php b/includes/resourceloader/ResourceLoaderImageModule.php index bf6a7dd2..8de87f2e 100644 --- a/includes/resourceloader/ResourceLoaderImageModule.php +++ b/includes/resourceloader/ResourceLoaderImageModule.php @@ -28,6 +28,8 @@ */ class ResourceLoaderImageModule extends ResourceLoaderModule { + protected $definition = null; + /** * Local base path, see __construct() * @var string @@ -43,6 +45,9 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { protected $selectorWithVariant = '.{prefix}-{name}-{variant}'; protected $targets = array( 'desktop', 'mobile' ); + /** @var string Position on the page to load this module at */ + protected $position = 'bottom'; + /** * Constructs a new module from an options array. * @@ -57,6 +62,8 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { * array( * // Base path to prepend to all local paths in $options. Defaults to $IP * 'localBasePath' => [base path], + * // Path to JSON file that contains any of the settings below + * 'data' => [file path string] * // CSS class prefix to use in all style rules * 'prefix' => [CSS class prefix], * // Alternatively: Format of CSS selector to use in all style rules @@ -66,21 +73,29 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { * 'selectorWithVariant' => [CSS selector template, variables: {prefix} {name} {variant}], * // List of variants that may be used for the image files * 'variants' => array( + * [theme name] => array( * [variant name] => array( * 'color' => [color string, e.g. '#ffff00'], * 'global' => [boolean, if true, this variant is available * for all images of this type], * ), + * ... + * ), * ... * ), * // List of image files and their options * 'images' => array( - * [file path string], - * [file path string] => array( - * 'name' => [image name string, defaults to file name], + * [theme name] => array( + * [icon name] => array( + * 'file' => [file path string or array whose values are file path strings + * and whose keys are 'default', 'ltr', 'rtl', a single + * language code like 'en', or a list of language codes like + * 'en,de,ar'], * 'variants' => [array of variant name strings, variants * available for this image], * ), + * ... + * ), * ... * ), * ) @@ -90,6 +105,26 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { public function __construct( $options = array(), $localBasePath = null ) { $this->localBasePath = self::extractLocalBasePath( $options, $localBasePath ); + $this->definition = $options; + } + + /** + * Parse definition and external JSON data, if referenced. + */ + protected function loadFromDefinition() { + if ( $this->definition === null ) { + return; + } + + $options = $this->definition; + $this->definition = null; + + if ( isset( $options['data'] ) ) { + $dataPath = $this->localBasePath . '/' . $options['data']; + $data = json_decode( file_get_contents( $dataPath ), true ); + $options = array_merge( $data, $options ); + } + // Accepted combinations: // * prefix // * selector @@ -99,20 +134,30 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { $prefix = isset( $options['prefix'] ) && $options['prefix']; $selector = isset( $options['selector'] ) && $options['selector']; - $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] ) && $options['selectorWithoutVariant']; - $selectorWithVariant = isset( $options['selectorWithVariant'] ) && $options['selectorWithVariant']; + $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] ) + && $options['selectorWithoutVariant']; + $selectorWithVariant = isset( $options['selectorWithVariant'] ) + && $options['selectorWithVariant']; if ( $selectorWithoutVariant && !$selectorWithVariant ) { - throw new InvalidArgumentException( "Given 'selectorWithoutVariant' but no 'selectorWithVariant'." ); + throw new InvalidArgumentException( + "Given 'selectorWithoutVariant' but no 'selectorWithVariant'." + ); } if ( $selectorWithVariant && !$selectorWithoutVariant ) { - throw new InvalidArgumentException( "Given 'selectorWithVariant' but no 'selectorWithoutVariant'." ); + throw new InvalidArgumentException( + "Given 'selectorWithVariant' but no 'selectorWithoutVariant'." + ); } if ( $selector && $selectorWithVariant ) { - throw new InvalidArgumentException( "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given." ); + throw new InvalidArgumentException( + "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given." + ); } if ( !$prefix && !$selector && !$selectorWithVariant ) { - throw new InvalidArgumentException( "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given." ); + throw new InvalidArgumentException( + "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given." + ); } foreach ( $options as $member => $option ) { @@ -124,9 +169,22 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { "Invalid list error. '$option' given, array expected." ); } + if ( !isset( $option['default'] ) ) { + // Backwards compatibility + $option = array( 'default' => $option ); + } + foreach ( $option as $skin => $data ) { + if ( !is_array( $option ) ) { + throw new InvalidArgumentException( + "Invalid list error. '$option' given, array expected." + ); + } + } $this->{$member} = $option; break; + case 'position': + $this->isPositionDefined = true; case 'prefix': case 'selectorWithoutVariant': case 'selectorWithVariant': @@ -144,6 +202,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { * @return string */ public function getPrefix() { + $this->loadFromDefinition(); return $this->prefix; } @@ -152,6 +211,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { * @return string */ public function getSelectors() { + $this->loadFromDefinition(); return array( 'selectorWithoutVariant' => $this->selectorWithoutVariant, 'selectorWithVariant' => $this->selectorWithVariant, @@ -161,31 +221,43 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { /** * Get a ResourceLoaderImage object for given image. * @param string $name Image name + * @param ResourceLoaderContext $context * @return ResourceLoaderImage|null */ - public function getImage( $name ) { - $images = $this->getImages(); + public function getImage( $name, ResourceLoaderContext $context ) { + $this->loadFromDefinition(); + $images = $this->getImages( $context ); return isset( $images[$name] ) ? $images[$name] : null; } /** * Get ResourceLoaderImage objects for all images. + * @param ResourceLoaderContext $context * @return ResourceLoaderImage[] Array keyed by image name */ - public function getImages() { + public function getImages( ResourceLoaderContext $context ) { + $skin = $context->getSkin(); if ( !isset( $this->imageObjects ) ) { + $this->loadFromDefinition(); $this->imageObjects = array(); - - foreach ( $this->images as $name => $options ) { + } + if ( !isset( $this->imageObjects[$skin] ) ) { + $this->imageObjects[$skin] = array(); + if ( !isset( $this->images[$skin] ) ) { + $this->images[$skin] = isset( $this->images['default'] ) ? + $this->images['default'] : + array(); + } + foreach ( $this->images[$skin] as $name => $options ) { $fileDescriptor = is_string( $options ) ? $options : $options['file']; $allowedVariants = array_merge( is_array( $options ) && isset( $options['variants'] ) ? $options['variants'] : array(), - $this->getGlobalVariants() + $this->getGlobalVariants( $context ) ); - if ( isset( $this->variants ) ) { + if ( isset( $this->variants[$skin] ) ) { $variantConfig = array_intersect_key( - $this->variants, + $this->variants[$skin], array_fill_keys( $allowedVariants, true ) ); } else { @@ -199,32 +271,40 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { $this->localBasePath, $variantConfig ); - $this->imageObjects[ $image->getName() ] = $image; + $this->imageObjects[$skin][$image->getName()] = $image; } } - return $this->imageObjects; + return $this->imageObjects[$skin]; } /** * Get list of variants in this module that are 'global', i.e., available * for every image regardless of image options. + * @param ResourceLoaderContext $context * @return string[] */ - public function getGlobalVariants() { + public function getGlobalVariants( ResourceLoaderContext $context ) { + $skin = $context->getSkin(); if ( !isset( $this->globalVariants ) ) { + $this->loadFromDefinition(); $this->globalVariants = array(); - - if ( isset( $this->variants ) ) { - foreach ( $this->variants as $name => $config ) { - if ( isset( $config['global'] ) && $config['global'] ) { - $this->globalVariants[] = $name; - } + } + if ( !isset( $this->globalVariants[$skin] ) ) { + $this->globalVariants[$skin] = array(); + if ( !isset( $this->variants[$skin] ) ) { + $this->variants[$skin] = isset( $this->variants['default'] ) ? + $this->variants['default'] : + array(); + } + foreach ( $this->variants[$skin] as $name => $config ) { + if ( isset( $config['global'] ) && $config['global'] ) { + $this->globalVariants[$skin][] = $name; } } } - return $this->globalVariants; + return $this->globalVariants[$skin]; } /** @@ -232,12 +312,14 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { * @return array */ public function getStyles( ResourceLoaderContext $context ) { + $this->loadFromDefinition(); + // Build CSS rules $rules = array(); $script = $context->getResourceLoader()->getLoadScript( $this->getSource() ); $selectors = $this->getSelectors(); - foreach ( $this->getImages() as $name => $image ) { + foreach ( $this->getImages( $context ) as $name => $image ) { $declarations = $this->getCssDeclarations( $image->getDataUri( $context, null, 'original' ), $image->getUrl( $context, $script, null, 'rasterized' ) @@ -303,6 +385,48 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { return false; } + /** + * Get the definition summary for this module. + * + * @param ResourceLoaderContext $context + * @return array + */ + public function getDefinitionSummary( ResourceLoaderContext $context ) { + $this->loadFromDefinition(); + $summary = parent::getDefinitionSummary( $context ); + foreach ( array( + 'localBasePath', + 'images', + 'variants', + 'prefix', + 'selectorWithoutVariant', + 'selectorWithVariant', + ) as $member ) { + $summary[$member] = $this->{$member}; + }; + return $summary; + } + + /** + * Get the last modified timestamp of this module. + * + * @param ResourceLoaderContext $context Context in which to calculate + * the modified time + * @return int UNIX timestamp + */ + public function getModifiedTime( ResourceLoaderContext $context ) { + $this->loadFromDefinition(); + $files = array(); + foreach ( $this->getImages( $context ) as $name => $image ) { + $files[] = $image->getPath( $context ); + } + + $files = array_values( array_unique( $files ) ); + $filesMtime = max( array_map( array( __CLASS__, 'safeFilemtime' ), $files ) ); + + return $filesMtime; + } + /** * Extract a local base path from module definition information. * @@ -324,4 +448,17 @@ class ResourceLoaderImageModule extends ResourceLoaderModule { return $localBasePath; } + + /** + * @return string + */ + public function getPosition() { + $this->loadFromDefinition(); + return $this->position; + } + + public function isPositionDefault() { + $this->loadFromDefinition(); + return parent::isPositionDefault(); + } } diff --git a/includes/resourceloader/ResourceLoaderJqueryMsgModule.php b/includes/resourceloader/ResourceLoaderJqueryMsgModule.php new file mode 100644 index 00000000..f9dfbdc2 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderJqueryMsgModule.php @@ -0,0 +1,66 @@ +getHashMtime( $context ) ); + public function enableModuleContentVersion() { + return true; } /** * @param ResourceLoaderContext $context - * @return string Hash - */ - public function getModifiedHash( ResourceLoaderContext $context ) { - return md5( serialize( $this->getData( $context ) ) ); - } - - /** * @return array */ - public function getDependencies() { + public function getDependencies( ResourceLoaderContext $context = null ) { return array( 'mediawiki.language.init' ); } } diff --git a/includes/resourceloader/ResourceLoaderLanguageNamesModule.php b/includes/resourceloader/ResourceLoaderLanguageNamesModule.php index 55b1f4b1..081c728c 100644 --- a/includes/resourceloader/ResourceLoaderLanguageNamesModule.php +++ b/includes/resourceloader/ResourceLoaderLanguageNamesModule.php @@ -32,7 +32,6 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule { protected $targets = array( 'desktop', 'mobile' ); - /** * @param ResourceLoaderContext $context * @return array @@ -60,24 +59,19 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule { ); } - public function getDependencies() { - return array( 'mediawiki.language.init' ); - } - /** * @param ResourceLoaderContext $context - * @return int UNIX timestamp + * @return array */ - public function getModifiedTime( ResourceLoaderContext $context ) { - return max( 1, $this->getHashMtime( $context ) ); + public function getDependencies( ResourceLoaderContext $context = null ) { + return array( 'mediawiki.language.init' ); } /** - * @param ResourceLoaderContext $context - * @return string Hash + * @return bool */ - public function getModifiedHash( ResourceLoaderContext $context ) { - return md5( serialize( $this->getData( $context ) ) ); + public function enableModuleContentVersion() { + return true; } } diff --git a/includes/resourceloader/ResourceLoaderModule.php b/includes/resourceloader/ResourceLoaderModule.php index ed16521b..1d3ffb55 100644 --- a/includes/resourceloader/ResourceLoaderModule.php +++ b/includes/resourceloader/ResourceLoaderModule.php @@ -29,7 +29,6 @@ abstract class ResourceLoaderModule { # Type of resource const TYPE_SCRIPTS = 'scripts'; const TYPE_STYLES = 'styles'; - const TYPE_MESSAGES = 'messages'; const TYPE_COMBINED = 'combined'; # sitewide core module like a skin file or jQuery component @@ -63,6 +62,14 @@ abstract class ResourceLoaderModule { protected $fileDeps = array(); // In-object cache for message blob mtime protected $msgBlobMtime = array(); + // In-object cache for version hash + protected $versionHash = array(); + // In-object cache for module content + protected $contents = array(); + + // Whether the position returned by getPosition() is defined in the module configuration + // and not a default value + protected $isPositionDefined = false; /** * @var Config @@ -284,6 +291,19 @@ abstract class ResourceLoaderModule { return 'bottom'; } + /** + * Whether the position returned by getPosition() is a default value or comes from the module + * definition. This method is meant to be short-lived, and is only useful until classes added + * via addModuleStyles with a default value define an explicit position. See getModuleStyles() + * in OutputPage for the related migration warning. + * + * @return bool + * @since 1.26 + */ + public function isPositionDefault() { + return !$this->isPositionDefined; + } + /** * Whether this module's JS expects to work without the client-side ResourceLoader module. * Returning true from this function will prevent mw.loader.state() call from being @@ -313,9 +333,14 @@ abstract class ResourceLoaderModule { * * To add dependencies dynamically on the client side, use a custom * loader script, see getLoaderScript() + * + * Note: It is expected that $context will be made non-optional in the near + * future. + * + * @param ResourceLoaderContext $context * @return array List of module names as strings */ - public function getDependencies() { + public function getDependencies( ResourceLoaderContext $context = null ) { // Stub, override expected return array(); } @@ -361,16 +386,21 @@ abstract class ResourceLoaderModule { } $dbr = wfGetDB( DB_SLAVE ); - $deps = $dbr->selectField( 'module_deps', 'md_deps', array( + $deps = $dbr->selectField( 'module_deps', + 'md_deps', + array( 'md_module' => $this->getName(), 'md_skin' => $skin, - ), __METHOD__ + ), + __METHOD__ ); + if ( !is_null( $deps ) ) { $this->fileDeps[$skin] = (array)FormatJson::decode( $deps, true ); } else { $this->fileDeps[$skin] = array(); } + return $this->fileDeps[$skin]; } @@ -385,8 +415,7 @@ abstract class ResourceLoaderModule { } /** - * Get the last modification timestamp of the message blob for this - * module in a given language. + * Get the last modification timestamp of the messages in this module for a given language. * @param string $lang Language code * @return int UNIX timestamp */ @@ -397,10 +426,13 @@ abstract class ResourceLoaderModule { } $dbr = wfGetDB( DB_SLAVE ); - $msgBlobMtime = $dbr->selectField( 'msg_resource', 'mr_timestamp', array( + $msgBlobMtime = $dbr->selectField( 'msg_resource', + 'mr_timestamp', + array( 'mr_resource' => $this->getName(), 'mr_lang' => $lang - ), __METHOD__ + ), + __METHOD__ ); // If no blob was found, but the module does have messages, that means we need // to regenerate it. Return NOW @@ -422,143 +454,317 @@ abstract class ResourceLoaderModule { $this->msgBlobMtime[$lang] = $mtime; } - /* Abstract Methods */ - /** - * Get this module's last modification timestamp for a given - * combination of language, skin and debug mode flag. This is typically - * the highest of each of the relevant components' modification - * timestamps. Whenever anything happens that changes the module's - * contents for these parameters, the mtime should increase. - * - * NOTE: The mtime of the module's messages is NOT automatically included. - * If you want this to happen, you'll need to call getMsgBlobMtime() - * yourself and take its result into consideration. - * - * NOTE: The mtime of the module's hash is NOT automatically included. - * If your module provides a getModifiedHash() method, you'll need to call getHashMtime() - * yourself and take its result into consideration. + * Get an array of this module's resources. Ready for serving to the web. * - * @param ResourceLoaderContext $context Context object - * @return int UNIX timestamp - */ - public function getModifiedTime( ResourceLoaderContext $context ) { - return 1; + * @since 1.26 + * @param ResourceLoaderContext $context + * @return array + */ + public function getModuleContent( ResourceLoaderContext $context ) { + $contextHash = $context->getHash(); + // Cache this expensive operation. This calls builds the scripts, styles, and messages + // content which typically involves filesystem and/or database access. + if ( !array_key_exists( $contextHash, $this->contents ) ) { + $this->contents[$contextHash] = $this->buildContent( $context ); + } + return $this->contents[$contextHash]; } /** - * Helper method for calculating when the module's hash (if it has one) changed. + * Bundle all resources attached to this module into an array. * + * @since 1.26 * @param ResourceLoaderContext $context - * @return int UNIX timestamp - */ - public function getHashMtime( ResourceLoaderContext $context ) { - $hash = $this->getModifiedHash( $context ); - if ( !is_string( $hash ) ) { - return 1; + * @return array + */ + final protected function buildContent( ResourceLoaderContext $context ) { + $rl = $context->getResourceLoader(); + $stats = RequestContext::getMain()->getStats(); + $statStart = microtime( true ); + + // Only include properties that are relevant to this context (e.g. only=scripts) + // and that are non-empty (e.g. don't include "templates" for modules without + // templates). This helps prevent invalidating cache for all modules when new + // optional properties are introduced. + $content = array(); + + // Scripts + if ( $context->shouldIncludeScripts() ) { + // If we are in debug mode, we'll want to return an array of URLs if possible + // However, we can't do this if the module doesn't support it + // We also can't do this if there is an only= parameter, because we have to give + // the module a way to return a load.php URL without causing an infinite loop + if ( $context->getDebug() && !$context->getOnly() && $this->supportsURLLoading() ) { + $scripts = $this->getScriptURLsForDebug( $context ); + } else { + $scripts = $this->getScript( $context ); + // rtrim() because there are usually a few line breaks + // after the last ';'. A new line at EOF, a new line + // added by ResourceLoaderFileModule::readScriptFiles, etc. + if ( is_string( $scripts ) + && strlen( $scripts ) + && substr( rtrim( $scripts ), -1 ) !== ';' + ) { + // Append semicolon to prevent weird bugs caused by files not + // terminating their statements right (bug 27054) + $scripts .= ";\n"; + } + } + $content['scripts'] = $scripts; + } + + // Styles + if ( $context->shouldIncludeStyles() ) { + $styles = array(); + // Don't create empty stylesheets like array( '' => '' ) for modules + // that don't *have* any stylesheets (bug 38024). + $stylePairs = $this->getStyles( $context ); + if ( count( $stylePairs ) ) { + // If we are in debug mode without &only= set, we'll want to return an array of URLs + // See comment near shouldIncludeScripts() for more details + if ( $context->getDebug() && !$context->getOnly() && $this->supportsURLLoading() ) { + $styles = array( + 'url' => $this->getStyleURLsForDebug( $context ) + ); + } else { + // Minify CSS before embedding in mw.loader.implement call + // (unless in debug mode) + if ( !$context->getDebug() ) { + foreach ( $stylePairs as $media => $style ) { + // Can be either a string or an array of strings. + if ( is_array( $style ) ) { + $stylePairs[$media] = array(); + foreach ( $style as $cssText ) { + if ( is_string( $cssText ) ) { + $stylePairs[$media][] = + $rl->filter( 'minify-css', $cssText ); + } + } + } elseif ( is_string( $style ) ) { + $stylePairs[$media] = $rl->filter( 'minify-css', $style ); + } + } + } + // Wrap styles into @media groups as needed and flatten into a numerical array + $styles = array( + 'css' => $rl->makeCombinedStyles( $stylePairs ) + ); + } + } + $content['styles'] = $styles; + } + + // Messages + $blobs = $rl->getMessageBlobStore()->get( + $rl, + array( $this->getName() => $this ), + $context->getLanguage() + ); + if ( isset( $blobs[$this->getName()] ) ) { + $content['messagesBlob'] = $blobs[$this->getName()]; } - // Embed the hash itself in the cache key. This allows for a few nifty things: - // - During deployment, servers with old and new versions of the code communicating - // with the same memcached will not override the same key repeatedly increasing - // the timestamp. - // - In case of the definition changing and then changing back in a short period of time - // (e.g. in case of a revert or a corrupt server) the old timestamp and client-side cache - // url will be re-used. - // - If different context-combinations (e.g. same skin, same language or some combination - // thereof) result in the same definition, they will use the same hash and timestamp. - $cache = wfGetCache( CACHE_ANYTHING ); - $key = wfMemcKey( 'resourceloader', 'hashmtime', $this->getName(), $hash ); - - $data = $cache->get( $key ); - if ( is_int( $data ) && $data > 0 ) { - // We've seen this hash before, re-use the timestamp of when we first saw it. - return $data; + $templates = $this->getTemplates(); + if ( $templates ) { + $content['templates'] = $templates; } - $timestamp = time(); - $cache->set( $key, $timestamp ); - return $timestamp; + $statTiming = microtime( true ) - $statStart; + $statName = strtr( $this->getName(), '.', '_' ); + $stats->timing( "resourceloader_build.all", 1000 * $statTiming ); + $stats->timing( "resourceloader_build.$statName", 1000 * $statTiming ); + + return $content; } /** - * Get the hash for whatever this module may contain. + * Get a string identifying the current version of this module in a given context. + * + * Whenever anything happens that changes the module's response (e.g. scripts, styles, and + * messages) this value must change. This value is used to store module responses in cache. + * (Both client-side and server-side.) * - * This is the method subclasses should implement if they want to make - * use of getHashMTime() inside getModifiedTime(). + * It is not recommended to override this directly. Use getDefinitionSummary() instead. + * If overridden, one must call the parent getVersionHash(), append data and re-hash. * + * This method should be quick because it is frequently run by ResourceLoaderStartUpModule to + * propagate changes to the client and effectively invalidate cache. + * + * For backward-compatibility, the following optional data providers are automatically included: + * + * - getModifiedTime() + * - getModifiedHash() + * + * @since 1.26 * @param ResourceLoaderContext $context - * @return string|null Hash - */ - public function getModifiedHash( ResourceLoaderContext $context ) { - return null; + * @return string Hash (should use ResourceLoader::makeHash) + */ + public function getVersionHash( ResourceLoaderContext $context ) { + // The startup module produces a manifest with versions representing the entire module. + // Typically, the request for the startup module itself has only=scripts. That must apply + // only to the startup module content, and not to the module version computed here. + $context = new DerivativeResourceLoaderContext( $context ); + $context->setModules( array() ); + // Version hash must cover all resources, regardless of startup request itself. + $context->setOnly( null ); + // Compute version hash based on content, not debug urls. + $context->setDebug( false ); + + // Cache this somewhat expensive operation. Especially because some classes + // (e.g. startup module) iterate more than once over all modules to get versions. + $contextHash = $context->getHash(); + if ( !array_key_exists( $contextHash, $this->versionHash ) ) { + + if ( $this->enableModuleContentVersion() ) { + // Detect changes directly + $str = json_encode( $this->getModuleContent( $context ) ); + } else { + // Infer changes based on definition and other metrics + $summary = $this->getDefinitionSummary( $context ); + if ( !isset( $summary['_cacheEpoch'] ) ) { + throw new LogicException( 'getDefinitionSummary must call parent method' ); + } + $str = json_encode( $summary ); + + $mtime = $this->getModifiedTime( $context ); + if ( $mtime !== null ) { + // Support: MediaWiki 1.25 and earlier + $str .= strval( $mtime ); + } + + $mhash = $this->getModifiedHash( $context ); + if ( $mhash !== null ) { + // Support: MediaWiki 1.25 and earlier + $str .= strval( $mhash ); + } + } + + $this->versionHash[$contextHash] = ResourceLoader::makeHash( $str ); + } + return $this->versionHash[$contextHash]; } /** - * Helper method for calculating when this module's definition summary was last changed. + * Whether to generate version hash based on module content. * - * @since 1.23 + * If a module requires database or file system access to build the module + * content, consider disabling this in favour of manually tracking relevant + * aspects in getDefinitionSummary(). See getVersionHash() for how this is used. * - * @param ResourceLoaderContext $context - * @return int UNIX timestamp + * @return bool */ - public function getDefinitionMtime( ResourceLoaderContext $context ) { - $summary = $this->getDefinitionSummary( $context ); - if ( $summary === null ) { - return 1; - } - - $hash = md5( json_encode( $summary ) ); - $cache = wfGetCache( CACHE_ANYTHING ); - $key = wfMemcKey( 'resourceloader', 'moduledefinition', $this->getName(), $hash ); - - $data = $cache->get( $key ); - if ( is_int( $data ) && $data > 0 ) { - // We've seen this hash before, re-use the timestamp of when we first saw it. - return $data; - } - - wfDebugLog( 'resourceloader', __METHOD__ . ": New definition for module " - . "{$this->getName()} in context \"{$context->getHash()}\"" ); - - $timestamp = time(); - $cache->set( $key, $timestamp ); - return $timestamp; + public function enableModuleContentVersion() { + return false; } /** * Get the definition summary for this module. * - * This is the method subclasses should implement if they want to make - * use of getDefinitionMTime() inside getModifiedTime(). + * This is the method subclasses are recommended to use to track values in their + * version hash. Call this in getVersionHash() and pass it to e.g. json_encode. + * + * Subclasses must call the parent getDefinitionSummary() and build on that. + * It is recommended that each subclass appends its own new array. This prevents + * clashes or accidental overwrites of existing keys and gives each subclass + * its own scope for simple array keys. + * + * @code + * $summary = parent::getDefinitionSummary( $context ); + * $summary[] = array( + * 'foo' => 123, + * 'bar' => 'quux', + * ); + * return $summary; + * @endcode * * Return an array containing values from all significant properties of this - * module's definition. Be sure to include things that are explicitly ordered, - * in their actaul order (bug 37812). + * module's definition. * - * Avoid including things that are insiginificant (e.g. order of message - * keys is insignificant and should be sorted to avoid unnecessary cache - * invalidation). + * Be careful not to normalise too much. Especially preserve the order of things + * that carry significance in getScript and getStyles (T39812). * - * Avoid including things already considered by other methods inside your - * getModifiedTime(), such as file mtime timestamps. + * Avoid including things that are insiginificant (e.g. order of message keys is + * insignificant and should be sorted to avoid unnecessary cache invalidation). * - * Serialisation is done using json_encode, which means object state is not - * taken into account when building the hash. This data structure must only - * contain arrays and scalars as values (avoid object instances) which means - * it requires abstraction. + * This data structure must exclusively contain arrays and scalars as values (avoid + * object instances) to allow simple serialisation using json_encode. * - * @since 1.23 + * If modules have a hash or timestamp from another source, that may be incuded as-is. * + * A number of utility methods are available to help you gather data. These are not + * called by default and must be included by the subclass' getDefinitionSummary(). + * + * - getMsgBlobMtime() + * + * @since 1.23 * @param ResourceLoaderContext $context * @return array|null */ public function getDefinitionSummary( ResourceLoaderContext $context ) { return array( - 'class' => get_class( $this ), + '_class' => get_class( $this ), + '_cacheEpoch' => $this->getConfig()->get( 'CacheEpoch' ), ); } + /** + * Get this module's last modification timestamp for a given context. + * + * @deprecated since 1.26 Use getDefinitionSummary() instead + * @param ResourceLoaderContext $context Context object + * @return int|null UNIX timestamp + */ + public function getModifiedTime( ResourceLoaderContext $context ) { + return null; + } + + /** + * Helper method for providing a version hash to getVersionHash(). + * + * @deprecated since 1.26 Use getDefinitionSummary() instead + * @param ResourceLoaderContext $context + * @return string|null Hash + */ + public function getModifiedHash( ResourceLoaderContext $context ) { + return null; + } + + /** + * Back-compat dummy for old subclass implementations of getModifiedTime(). + * + * This method used to use ObjectCache to track when a hash was first seen. That principle + * stems from a time that ResourceLoader could only identify module versions by timestamp. + * That is no longer the case. Use getDefinitionSummary() directly. + * + * @deprecated since 1.26 Superseded by getVersionHash() + * @param ResourceLoaderContext $context + * @return int UNIX timestamp + */ + public function getHashMtime( ResourceLoaderContext $context ) { + if ( !is_string( $this->getModifiedHash( $context ) ) ) { + return 1; + } + // Dummy that is > 1 + return 2; + } + + /** + * Back-compat dummy for old subclass implementations of getModifiedTime(). + * + * @since 1.23 + * @deprecated since 1.26 Superseded by getVersionHash() + * @param ResourceLoaderContext $context + * @return int UNIX timestamp + */ + public function getDefinitionMtime( ResourceLoaderContext $context ) { + if ( $this->getDefinitionSummary( $context ) === null ) { + return 1; + } + // Dummy that is > 1 + return 2; + } + /** * Check whether this module is known to be empty. If a child class * has an easy and cheap way to determine that this module is @@ -587,8 +793,13 @@ abstract class ResourceLoaderModule { protected function validateScriptFile( $fileName, $contents ) { if ( $this->getConfig()->get( 'ResourceLoaderValidateJS' ) ) { // Try for cache hit - // Use CACHE_ANYTHING since filtering is very slow compared to DB queries - $key = wfMemcKey( 'resourceloader', 'jsparse', self::$parseCacheVersion, md5( $contents ) ); + // Use CACHE_ANYTHING since parsing JS is much slower than a DB query + $key = wfMemcKey( + 'resourceloader', + 'jsparse', + self::$parseCacheVersion, + md5( $contents ) + ); $cache = wfGetCache( CACHE_ANYTHING ); $cacheEntry = $cache->get( $key ); if ( is_string( $cacheEntry ) ) { @@ -602,7 +813,8 @@ abstract class ResourceLoaderModule { } catch ( Exception $e ) { // We'll save this to cache to avoid having to validate broken JS over and over... $err = $e->getMessage(); - $result = "throw new Error(" . Xml::encodeJsVar( "JavaScript parse error: $err" ) . ");"; + $result = "mw.log.error(" . + Xml::encodeJsVar( "JavaScript parse error: $err" ) . ");"; } $cache->set( $key, $result ); @@ -623,16 +835,57 @@ abstract class ResourceLoaderModule { } /** - * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist - * but returns 1 instead. - * @param string $filename File name + * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist. + * Defaults to 1. + * + * @param string $filePath File path * @return int UNIX timestamp */ - protected static function safeFilemtime( $filename ) { - wfSuppressWarnings(); - $mtime = filemtime( $filename ) ?: 1; - wfRestoreWarnings(); - + protected static function safeFilemtime( $filePath ) { + MediaWiki\suppressWarnings(); + $mtime = filemtime( $filePath ) ?: 1; + MediaWiki\restoreWarnings(); return $mtime; } + + /** + * Compute a non-cryptographic string hash of a file's contents. + * If the file does not exist or cannot be read, returns an empty string. + * + * @since 1.26 Uses MD4 instead of SHA1. + * @param string $filePath File path + * @return string Hash + */ + protected static function safeFileHash( $filePath ) { + static $cache; + + if ( !$cache ) { + $cache = ObjectCache::newAccelerator( CACHE_NONE ); + } + + MediaWiki\suppressWarnings(); + $mtime = filemtime( $filePath ); + MediaWiki\restoreWarnings(); + if ( !$mtime ) { + return ''; + } + + $cacheKey = wfGlobalCacheKey( 'resourceloader', __METHOD__, $filePath ); + $cachedHash = $cache->get( $cacheKey ); + if ( isset( $cachedHash['mtime'] ) && $cachedHash['mtime'] === $mtime ) { + return $cachedHash['hash']; + } + + MediaWiki\suppressWarnings(); + $contents = file_get_contents( $filePath ); + MediaWiki\restoreWarnings(); + if ( !$contents ) { + return ''; + } + + $hash = hash( 'md4', $contents ); + $cache->set( $cacheKey, array( 'mtime' => $mtime, 'hash' => $hash ), 60 * 60 * 24 ); + + return $hash; + } } diff --git a/includes/resourceloader/ResourceLoaderOOUIImageModule.php b/includes/resourceloader/ResourceLoaderOOUIImageModule.php new file mode 100644 index 00000000..8493f9fd --- /dev/null +++ b/includes/resourceloader/ResourceLoaderOOUIImageModule.php @@ -0,0 +1,86 @@ +definition === null ) { + return; + } + + // Core default themes + $themes = array( 'default' => 'mediawiki' ); + $themes += ExtensionRegistry::getInstance()->getAttribute( 'SkinOOUIThemes' ); + + $name = $this->definition['name']; + $rootPath = $this->definition['rootPath']; + + $definition = array(); + foreach ( $themes as $skin => $theme ) { + // TODO Allow extensions to specify this path somehow + $dataPath = $this->localBasePath . '/' . $rootPath . '/' . $theme . '/' . $name . '.json'; + + if ( file_exists( $dataPath ) ) { + $data = json_decode( file_get_contents( $dataPath ), true ); + $fixPath = function ( &$path ) use ( $rootPath, $theme ) { + // TODO Allow extensions to specify this path somehow + $path = $rootPath . '/' . $theme . '/' . $path; + }; + array_walk( $data['images'], function ( &$value ) use ( $fixPath ) { + if ( is_string( $value['file'] ) ) { + $fixPath( $value['file'] ); + } elseif ( is_array( $value['file'] ) ) { + array_walk_recursive( $value['file'], $fixPath ); + } + } ); + } else { + $data = array(); + } + + foreach ( $data as $key => $value ) { + switch ( $key ) { + case 'images': + case 'variants': + $definition[$key][$skin] = $data[$key]; + break; + + default: + if ( !isset( $definition[$key] ) ) { + $definition[$key] = $data[$key]; + } elseif ( $definition[$key] !== $data[$key] ) { + throw new Exception( + "Mismatched OOUI theme definitions are not supported: trying to load $key of $theme theme" + ); + } + break; + } + } + } + + // Fields from definition silently override keys from JSON files + $this->definition += $definition; + + parent::loadFromDefinition(); + } +} diff --git a/includes/resourceloader/ResourceLoaderRawFileModule.php b/includes/resourceloader/ResourceLoaderRawFileModule.php new file mode 100644 index 00000000..d9005fa5 --- /dev/null +++ b/includes/resourceloader/ResourceLoaderRawFileModule.php @@ -0,0 +1,52 @@ +getHashMtime( $context ) ); - } - /** * @param $context ResourceLoaderContext * @return string: Hash diff --git a/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php b/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php index 5c917091..8170cb1c 100644 --- a/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php +++ b/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php @@ -35,7 +35,8 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule { * @return array */ protected function getData() { - return json_decode( file_get_contents( $this->path ) ); + global $IP; + return json_decode( file_get_contents( "$IP/{$this->path}" ) ); } /** @@ -53,25 +54,17 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule { } /** - * @param ResourceLoaderContext $context - * @return int UNIX timestamp + * @return bool */ - public function getModifiedTime( ResourceLoaderContext $context ) { - return static::safeFilemtime( $this->path ); + public function enableModuleContentVersion() { + return true; } /** * @param ResourceLoaderContext $context - * @return string Hash - */ - public function getModifiedHash( ResourceLoaderContext $context ) { - return md5( serialize( $this->getData() ) ); - } - - /** * @return array */ - public function getDependencies() { + public function getDependencies( ResourceLoaderContext $context = null ) { return array( 'mediawiki.language' ); } diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index b2fbae9c..87d8ee20 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -24,14 +24,10 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { - /* Protected Members */ - - protected $modifiedTime = array(); + // Cache for getConfigSettings() as it's called by multiple methods protected $configVars = array(); protected $targets = array( 'desktop', 'mobile' ); - /* Protected Methods */ - /** * @param ResourceLoaderContext $context * @return array @@ -92,6 +88,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { 'wgContentNamespaces' => MWNamespace::getContentNamespaces(), 'wgSiteName' => $conf->get( 'Sitename' ), 'wgDBname' => $conf->get( 'DBname' ), + 'wgExtraSignatureNamespaces' => $conf->get( 'ExtraSignatureNamespaces' ), 'wgAvailableSkins' => Skin::getSkinNames(), 'wgExtensionAssetsPath' => $conf->get( 'ExtensionAssetsPath' ), // MediaWiki sets cookies to have this prefix by default @@ -104,6 +101,9 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { 'wgLegalTitleChars' => Title::convertByteClassToUnicodeClass( Title::legalChars() ), 'wgResourceLoaderStorageVersion' => $conf->get( 'ResourceLoaderStorageVersion' ), 'wgResourceLoaderStorageEnabled' => $conf->get( 'ResourceLoaderStorageEnabled' ), + 'wgResourceLoaderLegacyModules' => self::getLegacyModules(), + 'wgForeignUploadTargets' => $conf->get( 'ForeignUploadTargets' ), + 'wgEnableUploads' => $conf->get( 'EnableUploads' ), ); Hooks::run( 'ResourceLoaderGetConfigVars', array( &$vars ) ); @@ -159,7 +159,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { * data send to the client. * * @param array &$registryData Modules keyed by name with properties: - * - number 'version' + * - string 'version' * - array 'dependencies' * - string|null 'group' * - string 'source' @@ -191,6 +191,9 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { $resourceLoader = $context->getResourceLoader(); $target = $context->getRequest()->getVal( 'target', 'desktop' ); + // Bypass target filter if this request is from a unit test context. To prevent misuse in + // production, this is only allowed if testing is enabled server-side. + $byPassTargetFilter = $this->getConfig()->get( 'EnableJavaScriptTest' ) && $target === 'test'; $out = ''; $registryData = array(); @@ -199,7 +202,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { foreach ( $resourceLoader->getModuleNames() as $name ) { $module = $resourceLoader->getModule( $name ); $moduleTargets = $module->getTargets(); - if ( !in_array( $target, $moduleTargets ) ) { + if ( !$byPassTargetFilter && !in_array( $target, $moduleTargets ) ) { continue; } @@ -210,31 +213,27 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { continue; } - // Coerce module timestamp to UNIX timestamp. - // getModifiedTime() is supposed to return a UNIX timestamp, but custom implementations - // might forget. TODO: Maybe emit warning? - $moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) ); + $versionHash = $module->getVersionHash( $context ); + if ( strlen( $versionHash ) !== 8 ) { + // Module implementation either broken or deviated from ResourceLoader::makeHash + // Asserted by tests/phpunit/structure/ResourcesTest. + $versionHash = ResourceLoader::makeHash( $versionHash ); + } $skipFunction = $module->getSkipFunction(); if ( $skipFunction !== null && !ResourceLoader::inDebugMode() ) { $skipFunction = $resourceLoader->filter( 'minify-js', $skipFunction, - // There will potentially be lots of these little string in the registrations + // There will potentially be lots of these little strings in the registrations // manifest, we don't want to blow up the startup module with - // "/* cache key: ... */" all over it in non-debug mode. + // "/* cache key: ... */" all over it. /* cacheReport = */ false ); } - $mtime = max( - $moduleMtime, - wfTimestamp( TS_UNIX, $this->getConfig()->get( 'CacheEpoch' ) ) - ); - $registryData[$name] = array( - // Convert to numbers as wfTimestamp always returns a string, even for TS_UNIX - 'version' => (int) $mtime, - 'dependencies' => $module->getDependencies(), + 'version' => $versionHash, + 'dependencies' => $module->getDependencies( $context ), 'group' => $module->getGroup(), 'source' => $module->getSource(), 'loader' => $module->getLoaderScript(), @@ -263,7 +262,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { continue; } - // Call mw.loader.register(name, timestamp, dependencies, group, source, skip) + // Call mw.loader.register(name, version, dependencies, group, source, skip) $registrations[] = array( $name, $data['version'], @@ -276,13 +275,11 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { } // Register modules - $out .= ResourceLoader::makeLoaderRegisterScript( $registrations ); + $out .= "\n" . ResourceLoader::makeLoaderRegisterScript( $registrations ); return $out; } - /* Methods */ - /** * @return bool */ @@ -299,6 +296,20 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { return array( 'jquery', 'mediawiki' ); } + public static function getLegacyModules() { + global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil; + + $legacyModules = array(); + if ( $wgIncludeLegacyJavaScript ) { + $legacyModules[] = 'mediawiki.legacy.wikibits'; + } + if ( $wgPreloadJavaScriptMwUtil ) { + $legacyModules[] = 'mediawiki.util'; + } + + return $legacyModules; + } + /** * Get the load URL of the startup modules. * @@ -309,24 +320,16 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { * @return string */ public static function getStartupModulesUrl( ResourceLoaderContext $context ) { + $rl = $context->getResourceLoader(); $moduleNames = self::getStartupModules(); - // Get the latest version - $loader = $context->getResourceLoader(); - $version = 1; - foreach ( $moduleNames as $moduleName ) { - $version = max( $version, - $loader->getModule( $moduleName )->getModifiedTime( $context ) - ); - } - $query = array( 'modules' => ResourceLoader::makePackedModulesString( $moduleNames ), 'only' => 'scripts', 'lang' => $context->getLanguage(), 'skin' => $context->getSkin(), 'debug' => $context->getDebug() ? 'true' : 'false', - 'version' => wfTimestamp( TS_ISO_8601_BASIC, $version ) + 'version' => $rl->getCombinedVersion( $context, $moduleNames ), ); // Ensure uniform query order ksort( $query ); @@ -339,40 +342,25 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { */ public function getScript( ResourceLoaderContext $context ) { global $IP; + if ( $context->getOnly() !== 'scripts' ) { + return '/* Requires only=script */'; + } $out = file_get_contents( "$IP/resources/src/startup.js" ); - if ( $context->getOnly() === 'scripts' ) { - // Startup function - $configuration = $this->getConfigSettings( $context ); - $registrations = $this->getModuleRegistrations( $context ); + $pairs = array_map( function ( $value ) { + $value = FormatJson::encode( $value, ResourceLoader::inDebugMode(), FormatJson::ALL_OK ); // Fix indentation - $registrations = str_replace( "\n", "\n\t", trim( $registrations ) ); - $mwMapJsCall = Xml::encodeJsCall( - 'mw.Map', - array( $this->getConfig()->get( 'LegacyJavaScriptGlobals' ) ) - ); - $mwConfigSetJsCall = Xml::encodeJsCall( - 'mw.config.set', - array( $configuration ), - ResourceLoader::inDebugMode() - ); - - $out .= "var startUp = function () {\n" . - "\tmw.config = new " . - $mwMapJsCall . "\n" . - "\t$registrations\n" . - "\t" . $mwConfigSetJsCall . - "};\n"; - - // Conditional script injection - $scriptTag = Html::linkedScript( self::getStartupModulesUrl( $context ) ); - $out .= "if ( isCompatible() ) {\n" . - "\t" . Xml::encodeJsCall( 'document.write', array( $scriptTag ) ) . - "\n}"; - } - - return $out; + $value = str_replace( "\n", "\n\t", $value ); + return $value; + }, array( + '$VARS.wgLegacyJavaScriptGlobals' => $this->getConfig()->get( 'LegacyJavaScriptGlobals' ), + '$VARS.configuration' => $this->getConfigSettings( $context ), + '$VARS.baseModulesUri' => self::getStartupModulesUrl( $context ), + ) ); + $pairs['$CODE.registrations()'] = str_replace( "\n", "\n\t", trim( $this->getModuleRegistrations( $context ) ) ); + + return strtr( $out, $pairs ); } /** @@ -383,59 +371,48 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { } /** + * Get the definition summary for this module. + * * @param ResourceLoaderContext $context - * @return array|mixed + * @return array */ - public function getModifiedTime( ResourceLoaderContext $context ) { + public function getDefinitionSummary( ResourceLoaderContext $context ) { global $IP; + $summary = parent::getDefinitionSummary( $context ); + $summary[] = array( + // Detect changes to variables exposed in mw.config (T30899). + 'vars' => $this->getConfigSettings( $context ), + // Changes how getScript() creates mw.Map for mw.config + 'wgLegacyJavaScriptGlobals' => $this->getConfig()->get( 'LegacyJavaScriptGlobals' ), + // Detect changes to the module registrations + 'moduleHashes' => $this->getAllModuleHashes( $context ), - $hash = $context->getHash(); - if ( isset( $this->modifiedTime[$hash] ) ) { - return $this->modifiedTime[$hash]; - } - - // Call preloadModuleInfo() on ALL modules as we're about - // to call getModifiedTime() on all of them - $loader = $context->getResourceLoader(); - $loader->preloadModuleInfo( $loader->getModuleNames(), $context ); - - $time = max( - wfTimestamp( TS_UNIX, $this->getConfig()->get( 'CacheEpoch' ) ), - filemtime( "$IP/resources/src/startup.js" ), - $this->getHashMtime( $context ) + 'fileMtimes' => array( + filemtime( "$IP/resources/src/startup.js" ), + ), ); - - // ATTENTION!: Because of the line below, this is not going to cause - // infinite recursion - think carefully before making changes to this - // code! - // Pre-populate modifiedTime with something because the loop over - // all modules below includes the startup module (this module). - $this->modifiedTime[$hash] = 1; - - foreach ( $loader->getModuleNames() as $name ) { - $module = $loader->getModule( $name ); - $time = max( $time, $module->getModifiedTime( $context ) ); - } - - $this->modifiedTime[$hash] = $time; - return $this->modifiedTime[$hash]; + return $summary; } /** - * Hash of all dynamic data embedded in getScript(). - * - * Detect changes to mw.config settings embedded in #getScript (bug 28899). + * Helper method for getDefinitionSummary(). * * @param ResourceLoaderContext $context - * @return string Hash + * @return string SHA-1 */ - public function getModifiedHash( ResourceLoaderContext $context ) { - $data = array( - 'vars' => $this->getConfigSettings( $context ), - 'wgLegacyJavaScriptGlobals' => $this->getConfig()->get( 'LegacyJavaScriptGlobals' ), - ); - - return md5( serialize( $data ) ); + protected function getAllModuleHashes( ResourceLoaderContext $context ) { + $rl = $context->getResourceLoader(); + // Preload for getCombinedVersion() + $rl->preloadModuleInfo( $rl->getModuleNames(), $context ); + + // ATTENTION: Because of the line below, this is not going to cause infinite recursion. + // Think carefully before making changes to this code! + // Pre-populate versionHash with something because the loop over all modules below includes + // the startup module (this module). + // See ResourceLoaderModule::getVersionHash() for usage of this cache. + $this->versionHash[$context->getHash()] = null; + + return $rl->getCombinedVersion( $context, $rl->getModuleNames() ); } /** diff --git a/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php b/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php index 472ceb26..65d770e2 100644 --- a/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php +++ b/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php @@ -27,25 +27,13 @@ */ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule { - /* Protected Members */ - - protected $modifiedTime = array(); - protected $origin = self::ORIGIN_CORE_INDIVIDUAL; - /* Methods */ - /** - * @param ResourceLoaderContext $context - * @return array|int|mixed + * @return bool */ - public function getModifiedTime( ResourceLoaderContext $context ) { - $hash = $context->getHash(); - if ( !isset( $this->modifiedTime[$hash] ) ) { - $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() ); - } - - return $this->modifiedTime[$hash]; + public function enableModuleContentVersion() { + return true; } /** diff --git a/includes/resourceloader/ResourceLoaderUserDefaultsModule.php b/includes/resourceloader/ResourceLoaderUserDefaultsModule.php index 5f4bc16b..eba61edc 100644 --- a/includes/resourceloader/ResourceLoaderUserDefaultsModule.php +++ b/includes/resourceloader/ResourceLoaderUserDefaultsModule.php @@ -26,26 +26,13 @@ */ class ResourceLoaderUserDefaultsModule extends ResourceLoaderModule { - /* Protected Members */ - protected $targets = array( 'desktop', 'mobile' ); - /* Methods */ - - /** - * @param ResourceLoaderContext $context - * @return string Hash - */ - public function getModifiedHash( ResourceLoaderContext $context ) { - return md5( serialize( User::getDefaultOptions() ) ); - } - /** - * @param ResourceLoaderContext $context - * @return int + * @return bool */ - public function getModifiedTime( ResourceLoaderContext $context ) { - return $this->getHashMtime( $context ); + public function enableModuleContentVersion() { + return true; } /** diff --git a/includes/resourceloader/ResourceLoaderUserOptionsModule.php b/includes/resourceloader/ResourceLoaderUserOptionsModule.php index 84c1906d..0847109c 100644 --- a/includes/resourceloader/ResourceLoaderUserOptionsModule.php +++ b/includes/resourceloader/ResourceLoaderUserOptionsModule.php @@ -27,34 +27,23 @@ */ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule { - /* Protected Members */ - - protected $modifiedTime = array(); - protected $origin = self::ORIGIN_CORE_INDIVIDUAL; protected $targets = array( 'desktop', 'mobile' ); - /* Methods */ - /** + * @param ResourceLoaderContext $context * @return array List of module names as strings */ - public function getDependencies() { + public function getDependencies( ResourceLoaderContext $context = null ) { return array( 'user.defaults' ); } /** - * @param ResourceLoaderContext $context - * @return int + * @return bool */ - public function getModifiedTime( ResourceLoaderContext $context ) { - $hash = $context->getHash(); - if ( !isset( $this->modifiedTime[$hash] ) ) { - $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() ); - } - - return $this->modifiedTime[$hash]; + public function enableModuleContentVersion() { + return true; } /** diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php index 7b44cc67..0023de27 100644 --- a/includes/resourceloader/ResourceLoaderWikiModule.php +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -26,15 +26,30 @@ * Abstraction for resource loader modules which pull from wiki pages * * This can only be used for wiki pages in the MediaWiki and User namespaces, - * because of its dependence on the functionality of - * Title::isCssJsSubpage. + * because of its dependence on the functionality of Title::isCssJsSubpage. + * + * This module supports being used as a placeholder for a module on a remote wiki. + * To do so, getDB() must be overloaded to return a foreign database object that + * allows local wikis to query page metadata. + * + * Safe for calls on local wikis are: + * - Option getters: + * - getGroup() + * - getPosition() + * - getPages() + * - Basic methods that strictly involve the foreign database + * - getDB() + * - isKnownEmpty() + * - getTitleInfo() */ class ResourceLoaderWikiModule extends ResourceLoaderModule { + /** @var string Position on the page to load this module at */ + protected $position = 'bottom'; // Origin defaults to users with sitewide authority protected $origin = self::ORIGIN_USER_SITEWIDE; - // In-object cache for title info + // In-process cache for title info protected $titleInfo = array(); // List of page names that contain CSS @@ -50,14 +65,21 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { * @param array $options For back-compat, this can be omitted in favour of overwriting getPages. */ public function __construct( array $options = null ) { - if ( isset( $options['styles'] ) ) { - $this->styles = $options['styles']; + if ( is_null( $options ) ) { + return; } - if ( isset( $options['scripts'] ) ) { - $this->scripts = $options['scripts']; - } - if ( isset( $options['group'] ) ) { - $this->group = $options['group']; + + foreach ( $options as $member => $option ) { + switch ( $member ) { + case 'position': + $this->isPositionDefined = true; + // Don't break since we need the member set as well + case 'styles': + case 'scripts': + case 'group': + $this->{$member} = $option; + break; + } } } @@ -107,13 +129,13 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { } /** - * Get the Database object used in getTitleMTimes(). Defaults to the local slave DB - * but subclasses may want to override this to return a remote DB object, or to return - * null if getTitleMTimes() shouldn't access the DB at all. + * Get the Database object used in getTitleInfo(). + * + * Defaults to the local slave DB. Subclasses may want to override this to return a foreign + * database object, or null if getTitleInfo() shouldn't access the database. * - * NOTE: This ONLY works for getTitleMTimes() and getModifiedTime(), NOT FOR ANYTHING ELSE. - * In particular, it doesn't work for getting the content of JS and CSS pages. That functionality - * will use the local DB irrespective of the return value of this method. + * NOTE: This ONLY works for getTitleInfo() and isKnownEmpty(), NOT FOR ANYTHING ELSE. + * In particular, it doesn't work for getContent() or getScript() etc. * * @return IDatabase|null */ @@ -122,10 +144,15 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { } /** - * @param Title $title + * @param string $title * @return null|string */ - protected function getContent( $title ) { + protected function getContent( $titleText ) { + $title = Title::newFromText( $titleText ); + if ( !$title ) { + return null; + } + $handler = ContentHandler::getForTitle( $title ); if ( $handler->isSupportedFormat( CONTENT_FORMAT_CSS ) ) { $format = CONTENT_FORMAT_CSS; @@ -160,11 +187,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { if ( $options['type'] !== 'script' ) { continue; } - $title = Title::newFromText( $titleText ); - if ( !$title || $title->isRedirect() ) { - continue; - } - $script = $this->getContent( $title ); + $script = $this->getContent( $titleText ); if ( strval( $script ) !== '' ) { $script = $this->validateScriptFile( $titleText, $script ); $scripts .= ResourceLoader::makeComment( $titleText ) . $script . "\n"; @@ -183,12 +206,8 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { if ( $options['type'] !== 'style' ) { continue; } - $title = Title::newFromText( $titleText ); - if ( !$title || $title->isRedirect() ) { - continue; - } $media = isset( $options['media'] ) ? $options['media'] : 'all'; - $style = $this->getContent( $title ); + $style = $this->getContent( $titleText ); if ( strval( $style ) === '' ) { continue; } @@ -206,37 +225,31 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { } /** - * @param ResourceLoaderContext $context - * @return int + * Disable module content versioning. + * + * This class does not support generating content outside of a module + * request due to foreign database support. + * + * See getDefinitionSummary() for meta-data versioning. + * + * @return bool */ - public function getModifiedTime( ResourceLoaderContext $context ) { - $modifiedTime = 1; - $titleInfo = $this->getTitleInfo( $context ); - if ( count( $titleInfo ) ) { - $mtimes = array_map( function ( $value ) { - return $value['timestamp']; - }, $titleInfo ); - $modifiedTime = max( $modifiedTime, max( $mtimes ) ); - } - $modifiedTime = max( - $modifiedTime, - $this->getMsgBlobMtime( $context->getLanguage() ), - $this->getDefinitionMtime( $context ) - ); - return $modifiedTime; + public function enableModuleContentVersion() { + return false; } /** - * Get the definition summary for this module. - * * @param ResourceLoaderContext $context * @return array */ public function getDefinitionSummary( ResourceLoaderContext $context ) { - return array( - 'class' => get_class( $this ), + $summary = parent::getDefinitionSummary( $context ); + $summary[] = array( 'pages' => $this->getPages( $context ), + // Includes SHA1 of content + 'titleInfo' => $this->getTitleInfo( $context ), ); + return $summary; } /** @@ -244,33 +257,29 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { * @return bool */ public function isKnownEmpty( ResourceLoaderContext $context ) { - $titleInfo = $this->getTitleInfo( $context ); - // Bug 68488: For modules in the "user" group, we should actually - // check that the pages are empty (page_len == 0), but for other - // groups, just check the pages exist so that we don't end up - // caching temporarily-blank pages without the appropriate - // - + diff --git a/maintenance/jsduck/external.js b/maintenance/jsduck/external.js index 4bb83694..c9012407 100644 --- a/maintenance/jsduck/external.js +++ b/maintenance/jsduck/external.js @@ -37,7 +37,6 @@ * @alternateClassName jqXHR */ - /** * @class QUnit * @source diff --git a/maintenance/jsparse.php b/maintenance/jsparse.php index 3f0a9ba7..fddfc024 100644 --- a/maintenance/jsparse.php +++ b/maintenance/jsparse.php @@ -47,9 +47,9 @@ class JSParseHelper extends Maintenance { $parser = new JSParser(); foreach ( $files as $filename ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $js = file_get_contents( $filename ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( $js === false ) { $this->output( "$filename ERROR: could not read file\n" ); $this->errs++; diff --git a/maintenance/language/StatOutputs.php b/maintenance/language/StatOutputs.php index 257fe146..534a8b48 100644 --- a/maintenance/language/StatOutputs.php +++ b/maintenance/language/StatOutputs.php @@ -26,9 +26,9 @@ /** A general output object. Need to be overridden */ class StatsOutput { function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $return = sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); return $return; } @@ -92,9 +92,9 @@ class WikiStatsOutput extends StatsOutput { } function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) { - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $v = round( 255 * $subset / $total ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( $revert ) { # Weigh reverse with factor 20 so coloring takes effect more quickly as diff --git a/maintenance/language/checkLanguage.inc b/maintenance/language/checkLanguage.inc index 990f2585..0c3ea671 100644 --- a/maintenance/language/checkLanguage.inc +++ b/maintenance/language/checkLanguage.inc @@ -339,7 +339,7 @@ ENDS; $blacklist = $checkBlacklist; - wfRunHooks( 'LocalisationChecksBlacklist', array( &$blacklist ) ); + Hooks::run( 'LocalisationChecksBlacklist', array( &$blacklist ) ); return $blacklist; } diff --git a/maintenance/language/generateNormalizerDataAr.php b/maintenance/language/generateNormalizerDataAr.php index ac50d291..52ed81fb 100644 --- a/maintenance/language/generateNormalizerDataAr.php +++ b/maintenance/language/generateNormalizerDataAr.php @@ -25,7 +25,8 @@ require_once __DIR__ . '/../Maintenance.php'; /** * Generates the normalizer data file for Arabic. - * For NFC see includes/libs/normal. + * + * This data file is used after normalizing to NFC. * * @ingroup MaintenanceLanguage */ diff --git a/maintenance/language/generateNormalizerDataMl.php b/maintenance/language/generateNormalizerDataMl.php index 8580187d..cb6ae698 100644 --- a/maintenance/language/generateNormalizerDataMl.php +++ b/maintenance/language/generateNormalizerDataMl.php @@ -25,7 +25,8 @@ require_once __DIR__ . '/../Maintenance.php'; /** * Generates the normalizer data file for Malayalam. - * For NFC see includes/libs/normal. + * + * This data file is used after normalizing to NFC. * * @ingroup MaintenanceLanguage */ diff --git a/maintenance/language/languages.inc b/maintenance/language/languages.inc index fb496cbc..9affb9e6 100644 --- a/maintenance/language/languages.inc +++ b/maintenance/language/languages.inc @@ -63,7 +63,7 @@ class Languages { * files in the languages directory. */ function __construct() { - wfRunHooks( 'LocalisationIgnoredOptionalMessages', + Hooks::run( 'LocalisationIgnoredOptionalMessages', array( &$this->mIgnoredMessages, &$this->mOptionalMessages ) ); $this->mLanguages = array_keys( Language::fetchLanguageNames( null, 'mwfile' ) ); diff --git a/maintenance/language/zhtable/Makefile.py b/maintenance/language/zhtable/Makefile.py index 71641ef1..4ab57d40 100644 --- a/maintenance/language/zhtable/Makefile.py +++ b/maintenance/language/zhtable/Makefile.py @@ -203,13 +203,16 @@ def customRules( path ): fp = open( path, 'r', encoding = 'U8' ) ret = dict() for line in fp: - elems = line.split( '#' )[0].split() + line = line.rstrip( '\r\n' ) + if '#' in line: + line = line.split( '#' )[0].rstrip() + elems = line.split( '\t' ) if len( elems ) > 1: ret[elems[0]] = elems[1] return ret def dictToSortedList( src_table, pos ): - return sorted( src_table.items(), key = lambda m: m[pos] ) + return sorted( src_table.items(), key = lambda m: ( m[pos], m[1 - pos] ) ) def translate( text, conv_table ): i = 0 @@ -229,7 +232,7 @@ def manualWordsTable( path, conv_table, reconv_table ): reconv_table = {} wordlist = [line.split( '#' )[0].strip() for line in fp] wordlist = list( set( wordlist ) ) - wordlist.sort( key = len, reverse = True ) + wordlist.sort( key = lambda w: ( len(w), w ), reverse = True ) while wordlist: word = wordlist.pop() new_word = translate( word, conv_table ) @@ -241,7 +244,7 @@ def manualWordsTable( path, conv_table, reconv_table ): def defaultWordsTable( src_wordlist, src_tomany, char_conv_table, char_reconv_table ): wordlist = list( src_wordlist ) - wordlist.sort( key = len, reverse = True ) + wordlist.sort( key = lambda w: ( len(w), w ), reverse = True ) word_conv_table = {} word_reconv_table = {} conv_table = char_conv_table.copy() @@ -276,7 +279,7 @@ def PHPArray( table ): def main(): #Get Unihan.zip: url = 'http://www.unicode.org/Public/%s/ucd/Unihan.zip' % UNIHAN_VER - han_dest = 'Unihan.zip' + han_dest = 'Unihan-%s.zip' % UNIHAN_VER download( url, han_dest ) # Get scim-tables-$(SCIM_TABLES_VER).tar.gz: diff --git a/maintenance/language/zhtable/simp2trad.manual b/maintenance/language/zhtable/simp2trad.manual index da75c446..5518a88d 100644 --- a/maintenance/language/zhtable/simp2trad.manual +++ b/maintenance/language/zhtable/simp2trad.manual @@ -59,7 +59,7 @@ U+05446呆|U+05446呆|U+07343çƒ| U+054B8å’¸|U+054B8å’¸|U+09E79é¹¹| U+054C4å“„|U+054C4å“„|U+09B28鬨| U+0556Eå•®|U+09F67齧|U+056D3囓|U+05699åš™| -U+05582å–‚|U+05582å–‚|U+09935餵| +U+05582å–‚|U+09935餵|U+05582å–‚| U+056DE回|U+056DE回|U+08FF4è¿´| U+056E2团|U+05718團|U+07CF0ç³°| U+056F0å›°|U+056F0å›°|U+0774Fç| @@ -168,6 +168,7 @@ U+080DC胜|U+052DDå‹|U+080DC胜| U+080E1胡|U+080E1胡|U+09B0Dé¬|U+0885Aè¡š| U+0810Fè„|U+09AD2é«’|U+081DF臟| U+0814Aè…Š|U+081D8臘|U+0814Aè…Š| +U+0814Cè…Œ|U+09183醃| U+081F4致|U+081F4致|U+07DFBç·»| U+0820Dèˆ|U+0820Dèˆ|U+06368æ¨| U+082B8芸|U+082B8芸|U+08553è•“| @@ -230,4 +231,4 @@ U+09CC4鳄|U+09C77é±·|U+09C10é°| U+09E21鸡|U+096DE雞|U+09DC4é·„| U+09E5A鹚|U+09DBF鶿|U+09DC0é·€| U+09EB9麹|U+09EB4麴| -U+080C4胄|U+080C4胄|U+05191冑| \ No newline at end of file +U+080C4胄|U+080C4胄|U+05191冑| diff --git a/maintenance/language/zhtable/simp2trad_noconvert.manual b/maintenance/language/zhtable/simp2trad_noconvert.manual index 3266168d..d9326f28 100644 --- a/maintenance/language/zhtable/simp2trad_noconvert.manual +++ b/maintenance/language/zhtable/simp2trad_noconvert.manual @@ -7,4 +7,9 @@ æ¡¿ 錶 蘋 -è©‘ \ No newline at end of file +è©‘ +å – +嶴 +ç¡ +è–³ +虯 diff --git a/maintenance/language/zhtable/simpphrases.manual b/maintenance/language/zhtable/simpphrases.manual index 3b149823..3477c0a9 100644 --- a/maintenance/language/zhtable/simpphrases.manual +++ b/maintenance/language/zhtable/simpphrases.manual @@ -38,7 +38,6 @@ 乾岗 乾巛 乾州 -ä¹¾å¼ ä¹¾å½• 乾律 乾德 @@ -146,6 +145,7 @@ 字乾生 乾神 乾西 +乾东 象乾 陈é‡ä¹¾ 曾è¿ä¹¾ @@ -153,6 +153,9 @@ 孙乾 乾潭 乾贵士 +承乾 +乾生元 +蔡å­ä¹¾ 於乎 æ–¼æˆ é­å¾µ @@ -161,7 +164,6 @@ æ–¼æ° æ–¼å¤«ç½— æ–¼æ¢¨åŽ -å·èˆŒ 樊於期 æ–¼èŸ æ–¼æ½œåŽ¿ @@ -176,7 +178,7 @@ 於哲 於除鞬 於志贺 -覆蓋 +覆盖 五箇山 麽麽 幺厮 @@ -227,11 +229,12 @@ çŸ³ç¢ ç¢åœ£ æš—é—‡ +闇公 +山崎闇斋 繙㠾 æƒæ…„ æƒæ‚· 目劄 -橡椀 谢肇淛 朱淛 諲譔 @@ -264,6 +267,21 @@ 庆馀 馀庆 å­é¦€ -郭行馀 +行馀 王馀鱼 -馀年无多 \ No newline at end of file +傒倖 +倖田 +倖一郎 +兒宽 +穀旦 +ä¸ç©€ +穀水 +穀阳 +岳讬 +硕讬 +讬庸 +讬æ©å¤š +åšå’Œè®¬ +讬麻 +饱讬 +蔡絛 diff --git a/maintenance/language/zhtable/simpphrases_exclude.manual b/maintenance/language/zhtable/simpphrases_exclude.manual index b4dd3e01..7985a89a 100644 --- a/maintenance/language/zhtable/simpphrases_exclude.manual +++ b/maintenance/language/zhtable/simpphrases_exclude.manual @@ -26,5 +26,6 @@ ç¡·æ·¡ æ‚½æ» é²‡é±¼ -和尚撞一天钟 -ä½™ \ No newline at end of file +é’Ÿ +ä½™ +è€ä¹ˆ diff --git a/maintenance/language/zhtable/symme_supp.manual b/maintenance/language/zhtable/symme_supp.manual index 09e14155..7470a381 100644 --- a/maintenance/language/zhtable/symme_supp.manual +++ b/maintenance/language/zhtable/symme_supp.manual @@ -18,10 +18,10 @@ U+08600蘀|U+0841Aèš| U+08AE1è«¡|U+08C25è°¥| U+09746é†|U+053C7å‡| U+09749é‰|U+053C6å†| -U+09A44é©„|U+29A02𩨂| +U+09A44é©„|U+09AA2骢| U+09C1Bé°›|U+09CC1é³| U+09EB3麳|U+2A38C𪎌| U+295E1ð©—¡|U+29667𩙧| U+298F5ð©£µ|U+299FB𩧻| U+29F47𩽇|U+29F8E𩾎| -U+2A23C𪈼|U+2A253𪉓| \ No newline at end of file +U+2A23C𪈼|U+2A253𪉓| diff --git a/maintenance/language/zhtable/toCN.manual b/maintenance/language/zhtable/toCN.manual index a678ac93..3a00bd45 100644 --- a/maintenance/language/zhtable/toCN.manual +++ b/maintenance/language/zhtable/toCN.manual @@ -20,6 +20,7 @@ 胺基酸 氨基酸 æ°´æ°£ æ°´æ±½ 計畫 计划 +è¦ç•« 规划 天份 天分 å份 å分 è·ä»½ èŒåˆ† @@ -31,7 +32,7 @@ æŠ•æ©Ÿä»½å­ æŠ•æœºåˆ†å­ ä¸€ä»½å­ ä¸€åˆ†å­ æ°´ä»½ 水分 -氧份 养分 +氧份 氧分 糖份 糖分 鹽份 ç›åˆ† 組份 组分 @@ -57,7 +58,10 @@ 堂姊 å ‚å§ å­¸å§Š å­¦å§ ä¹¾å§Š å¹²å§ +清澈 清澈 #分詞用 澈底 彻底 +仲介 中介 +å¯è¶³ 铆足 逕庭 径庭 逕到 径到 é€•å– å¾„å– @@ -130,7 +134,6 @@ 帳外 账外 帳務 账务 螢光棒 è§å…‰æ£’ -è¾­å½™ è¯æ±‡ 著業 ç€ä¸š è‘—çµ² ç€ä¸ 著麼 ç€ä¹ˆ @@ -285,6 +288,7 @@ 乘著å 乘著å 乘著錄 乘著录 乘著稱 乘著称 +乘著称 乘著称 乘著者 乘著者 乘著述 乘著述 爭著 äº‰ç€ @@ -301,6 +305,7 @@ 亮著å 亮著å 亮著錄 亮著录 亮著稱 亮著称 +亮著称 亮著称 亮著者 亮著者 亮著述 亮著述 ä»—è‘— ä»—ç€ @@ -333,6 +338,7 @@ 低著å 低著å 低著錄 低著录 低著稱 低著称 +低著称 低著称 低著者 低著者 低著述 低著述 ä½è‘— ä½ç€ @@ -341,6 +347,7 @@ ä½è‘—å ä½è‘—å ä½è‘—錄 ä½è‘—录 ä½è‘—稱 ä½è‘—称 +ä½è‘—称 ä½è‘—称 ä½è‘—者 ä½è‘—者 ä½è‘—è¿° ä½è‘—è¿° å´è‘— ä¾§ç€ @@ -357,6 +364,7 @@ ä¿éšœè‘—å ä¿éšœè‘—å ä¿éšœè‘—錄 ä¿éšœè‘—录 ä¿éšœè‘—稱 ä¿éšœè‘—称 +ä¿éšœè‘—称 ä¿éšœè‘—称 ä¿éšœè‘—者 ä¿éšœè‘—者 ä¿éšœè‘—è¿° ä¿éšœè‘—è¿° ä¿¡è‘— ä¿¡ç€ @@ -365,6 +373,7 @@ ä¿¡è‘—å ä¿¡è‘—å 信著錄 信著录 信著稱 信著称 +信著称 信著称 信著者 信著者 ä¿¡è‘—è¿° ä¿¡è‘—è¿° 候著 å€™ç€ @@ -405,6 +414,7 @@ 光著å 光著å 光著錄 光著录 光著稱 光著称 +光著称 光著称 光著者 光著者 光著述 光著述 關著 å…³ç€ @@ -415,14 +425,7 @@ 關著稱 关著称 關著者 关著者 關著述 关著述 -冀著 å†€ç€ -冀著書 冀著书 -冀著作 冀著作 -冀著å 冀著å -冀著錄 冀著录 -冀著稱 冀著称 -冀著者 冀著者 -冀著述 冀著述 +希冀著 å¸Œå†€ç€ å†’è‘— å†’ç€ å†’è‘—æ›¸ 冒著书 冒著作 冒著作 @@ -461,6 +464,7 @@ 刻著å 刻著å 刻著錄 刻著录 刻著稱 刻著称 +刻著称 刻著称 刻著者 刻著者 刻著述 刻著述 辦著 åŠžç€ @@ -485,16 +489,9 @@ 努力著å 努力著å 努力著錄 努力著录 努力著稱 努力著称 +努力著称 努力著称 努力著者 努力著者 努力著述 努力著述 -努著 åŠªç€ -努著書 努著书 -努著作 努著作 -努著å 努著å -努著錄 努著录 -努著稱 努著称 -努著者 努著者 -努著述 努著述 å°è‘— å°ç€ å°è‘—書 å°è‘—书 å°è‘—作 å°è‘—作 @@ -511,14 +508,6 @@ 壓著稱 压著称 壓著者 压著者 壓著述 压著述 -去著 åŽ»ç€ -去著書 去著书 -去著作 去著作 -去著å 去著å -去著錄 去著录 -去著稱 去著称 -去著者 去著者 -去著述 去著述 å—è‘— å—ç€ å—著書 å—著书 å—著作 å—著作 @@ -581,6 +570,7 @@ 味著å 味著å 味著錄 味著录 味著稱 味著称 +味著称 味著称 味著者 味著者 味著述 味著述 響著 å“ç€ @@ -650,14 +640,7 @@ åœè‘—稱 围著称 åœè‘—者 围著者 åœè‘—è¿° å›´è‘—è¿° -在著 åœ¨ç€ -在著書 在著书 -在著作 在著作 -在著å 在著å -在著錄 在著录 -在著稱 在著称 -在著者 在著者 -在著述 在著述 +存在著 å­˜åœ¨ç€ åè‘— åç€ å著書 å著书 å著作 å著作 @@ -682,14 +665,6 @@ 夾著稱 夹著称 夾著者 夹著者 夾著述 夹著述 -孤著 å­¤ç€ -孤著書 孤著书 -孤著作 孤著作 -孤著å 孤著å -孤著錄 孤著录 -孤著稱 孤著称 -孤著者 孤著者 -孤著述 孤著述 學著 å­¦ç€ å­¸è‘—æ›¸ 学著书 學著作 学著作 @@ -704,6 +679,7 @@ 守著å 守著å 守著錄 守著录 守著稱 守著称 +守著称 守著称 守著者 守著者 守著述 守著述 定著 å®šç€ @@ -712,6 +688,7 @@ 定著å 定著å 定著錄 定著录 定著稱 定著称 +定著称 定著称 定著者 定著者 定著述 定著述 å°è‘— å¯¹ç€ @@ -762,14 +739,6 @@ 應著稱 应著称 應著者 应著者 應著述 应著述 -康著 åº·ç€ -康著書 康著书 -康著作 康著作 -康著å 康著å -康著錄 康著录 -康著稱 康著称 -康著者 康著者 -康著述 康著述 é–‹è‘— å¼€ç€ é–‹è‘—æ›¸ 开著书 開著作 开著作 @@ -816,6 +785,7 @@ 心著å 心著å 心著錄 心著录 心著稱 心著称 +心著称 心著称 心著者 心著者 心著述 心著述 å¿è‘— å¿ç€ @@ -826,14 +796,7 @@ å¿è‘—稱 å¿è‘—称 å¿è‘—者 å¿è‘—者 å¿è‘—è¿° å¿è‘—è¿° -å¿—è‘— å¿—ç€ -志著書 志著书 -志著作 志著作 -å¿—è‘—å å¿—è‘—å -志著錄 志著录 -志著稱 志著称 -志著者 志著者 -å¿—è‘—è¿° å¿—è‘—è¿° +標志著 æ ‡å¿—ç€ å¿™è‘— å¿™ç€ å¿™è‘—æ›¸ 忙著书 忙著作 忙著作 @@ -858,14 +821,6 @@ 急著稱 急著称 急著者 急著者 急著述 急著述 -性著 æ€§ç€ -性著書 性著书 -性著作 性著作 -性著å 性著å -性著錄 性著录 -性著稱 性著称 -性著者 性著者 -性著述 性著述 戀著 æ‹ç€ 戀著書 æ‹è‘—书 戀著作 æ‹è‘—作 @@ -896,6 +851,7 @@ 想著å 想著å 想著錄 想著录 想著稱 想著称 +想著称 想著称 想著者 想著者 想著述 想著述 戰著 æˆ˜ç€ @@ -1305,14 +1261,7 @@ 潤著稱 润著称 潤著者 润著者 潤著述 润著述 -涵著 æ¶µç€ -涵著書 涵著书 -涵著作 涵著作 -涵著å 涵著å -涵著錄 涵著录 -涵著稱 涵著称 -涵著者 涵著者 -涵著述 涵著述 +蘊涵著 è•´æ¶µç€ æ¸´è‘— æ¸´ç€ æ¸´è‘—æ›¸ 渴著书 渴著作 渴著作 @@ -1383,14 +1332,6 @@ 牽著稱 牵著称 牽著者 牵著者 牽著述 牵著述 -ç¨è‘— ç‹¬ç€ -ç¨è‘—書 独著书 -ç¨è‘—作 独著作 -ç¨è‘—å 独著å -ç¨è‘—錄 独著录 -ç¨è‘—稱 独著称 -ç¨è‘—者 独著者 -ç¨è‘—è¿° 独著述 猜著 çŒœç€ çŒœè‘—æ›¸ 猜ç€ä¹¦ 猜著作 猜著作 @@ -1455,14 +1396,7 @@ 盯著稱 盯著称 盯著者 盯著者 盯著述 盯著述 -盾著 ç›¾ç€ -盾著書 盾著书 -盾著作 盾著作 -盾著å 盾著å -盾著錄 盾著录 -盾著稱 盾著称 -盾著者 盾著者 -盾著述 盾著述 +矛盾著 çŸ›ç›¾ç€ çœ‹è‘— çœ‹ç€ çœ‹è‘—æ›¸ 看ç€ä¹¦ 看著作 看著作 @@ -1481,6 +1415,7 @@ 瞧著述 瞧著述 存著 å­˜ç€ å­˜è‘—å 存著å +存著作 存著作 劃著 åˆ’ç€ åˆ¥è‘— åˆ«ç€ åˆ®è‘— åˆ®ç€ @@ -1653,6 +1588,7 @@ 美著å 美著å 美著錄 美著录 美著稱 美著称 +美著称 美著称 美著者 美著者 美著述 美著述 耀著 è€€ç€ @@ -1687,14 +1623,6 @@ 膠著稱 胶著称 膠著者 胶著者 膠著述 胶著述 -è—è‘— è‰ºç€ -è—著書 艺著书 -è—著作 艺著作 -è—è‘—å 艺著å -è—著錄 艺著录 -è—著稱 艺著称 -è—著者 艺著者 -è—è‘—è¿° 艺著述 苦著 è‹¦ç€ è‹¦è‘—æ›¸ 苦著书 苦著作 苦著作 @@ -1756,6 +1684,7 @@ 衣著å 衣著å 衣著錄 衣著录 衣著稱 衣著称 +衣著称 衣著称 衣著者 衣著者 衣著述 衣著述 è£è‘— è£…ç€ @@ -1806,22 +1735,9 @@ 語著稱 语著称 語著者 语著者 語著述 语著述 -豫著 è±«ç€ -豫著書 豫著书 -豫著作 豫著作 -豫著å 豫著å -豫著錄 豫著录 -豫著稱 豫著称 -豫著者 豫著者 -豫著述 豫著述 -貞著 è´žç€ -貞著書 贞著书 -貞著作 贞著作 -貞著å è´žè‘—å -貞著錄 贞著录 -貞著稱 贞著称 -貞著者 贞著者 -貞著述 è´žè‘—è¿° +猶豫著 çŠ¹è±«ç€ +堅貞著 åšè´žç€ +忠貞著 å¿ è´žç€ èµ°è‘— èµ°ç€ èµ°è‘—æ›¸ 走著书 走著作 走著作 @@ -1942,14 +1858,6 @@ é”著稱 达著称 é”著者 达著者 é”è‘—è¿° 达著述 -é è‘— è¿œç€ -é è‘—書 远著书 -é è‘—作 远著作 -é è‘—å 远著å -é è‘—錄 远著录 -é è‘—稱 远著称 -é è‘—者 远著者 -é è‘—è¿° 远著述 連著 è¿žç€ é€£è‘—æ›¸ 连著书 連著作 连著作 @@ -1988,6 +1896,7 @@ é‡è‘—å é‡è‘—å é‡è‘—錄 é‡è‘—录 é‡è‘—稱 é‡è‘—称 +é‡è‘—称 é‡è‘—称 é‡è‘—者 é‡è‘—者 é‡è‘—è¿° é‡è‘—è¿° é…è‘— é…ç€ @@ -2076,6 +1985,7 @@ é›…è‘—å é›…è‘—å 雅著錄 雅著录 雅著稱 雅著称 +雅著称 雅著称 雅著者 雅著者 é›…è‘—è¿° é›…è‘—è¿° é ‚è‘— é¡¶ç€ @@ -2148,16 +2058,9 @@ 高著å 高著å 高著錄 高著录 高著稱 高著称 +高著称 高著称 高著者 高著者 高著述 高著述 -é«­è‘— é«­ç€ -髭著書 髭著书 -髭著作 髭著作 -é«­è‘—å é«­è‘—å -髭著錄 髭著录 -髭著稱 髭著称 -髭著者 髭著者 -é«­è‘—è¿° é«­è‘—è¿° é»è‘— é»ç€ é»è‘—書 é»è‘—书 é»è‘—作 é»è‘—作 @@ -2242,13 +2145,40 @@ è¡è‘— å†²ç€ æ²–è‘— å†²ç€ æ²–è‘—ã€Š 冲著《 +沖著( 冲著( 沖著。 冲著。 沖著, 冲著, +ç«‹è‘— ç«‹ç€ +ç«‹è‘—å ç«‹è‘—å +立著作 立著作 +立著者 立著者 +立著稱 立著称 +立著称 立著称 +立著有 立著有 +立著《 立著《 +立著( 立著( 繫著 ç³»ç€ é¢³è‘— åˆ®ç€ é¬¥è‘— æ–—ç€ +縱著 çºµç€ +ä¼è‘— ä¼ç€ +視著 è§†ç€ +視著å 视著å +è“‹è‘— ç›–ç€ +è“‹è‘—å ç›–è‘—å +蓋著稱 盖著称 +蓋著作 盖著作 +覆蓋著 è¦†ç›–ç€ #分è¯ç”¨ 象徵著 象å¾ç€ 象徵著å 象å¾è‘—å +固著 å›ºç€ +ç­å›ºè‘— ç­å›ºè‘— +分布著 åˆ†å¸ƒç€ +分佈著 åˆ†å¸ƒç€ +散布著 æ•£å¸ƒç€ +散佈著 æ•£å¸ƒç€ +é佈著 éå¸ƒç€ +é布著 éå¸ƒç€ ä¸‰åå…­è‘— 三åå…­ç€ èµ°ç‚ºä¸Šè‘— èµ°ä¸ºä¸Šç€ è¨˜æ†¶é«” 内存 @@ -2276,6 +2206,8 @@ 晶片 芯片 晶元 芯片 片語 è¯ç»„ +隻字片語 åªå­—片语 +隻言片語 åªè¨€ç‰‡è¯­ 軟碟機 软驱 快閃記憶體 闪存 滑鼠 é¼ æ ‡ @@ -2296,10 +2228,10 @@ 八進ä½åˆ¶ å…«è¿›ä½åˆ¶ å進ä½åˆ¶ åè¿›ä½åˆ¶ 16進ä½åˆ¶ 16è¿›ä½åˆ¶ -äº’å‹•å¼ äº¤äº’å¼ å„ªå…ˆé †åº ä¼˜å…ˆçº§ 攜帶型 便æºå¼ 資訊ç†è«– ä¿¡æ¯è®º +資訊時代 ä¿¡æ¯æ—¶ä»£ 迴圈 循环 解æžåº¦ 分辨率 伺æœå™¨ æœåŠ¡å™¨ @@ -2327,7 +2259,6 @@ 行動電話 ç§»åŠ¨ç”µè¯ æµå‹•é›»è©± ç§»åŠ¨ç”µè¯ æ•¸æ“šæ©Ÿ 调制解调器 -çƒèŒ²åˆ¥å…‹ ä¹Œå…¹åˆ«å…‹æ–¯å¦ è‘‰é–€ 也门 è²é‡Œæ–¯ 伯利兹 維德角 佛得角 @@ -2346,10 +2277,8 @@ 厄瓜多 厄瓜多尔 厄利垂亞 厄立特里亚 å‰å¸ƒåœ° å‰å¸ƒæ -哈薩克 哈è¨å…‹æ–¯å¦ 哥斯大黎加 哥斯达黎加 å瓦魯 å›¾ç“¦å¢ -土庫曼 åœŸåº“æ›¼æ–¯å¦ è–露西亞 圣å¢è¥¿äºš è–å‰æ–¯ç´åŸŸæ–¯ 圣基茨和尼维斯 è–克里斯多ç¦åŠå°¼ç¶­æ–¯ 圣基茨和尼维斯 @@ -2360,8 +2289,6 @@ 衣索匹亞 埃塞俄比亚 衣索比亞 埃塞俄比亚 å‰é‡Œå·´æ–¯ 基里巴斯 -å¡”å‰å…‹ å¡”å‰å…‹æ–¯å¦ -å¡”å‰å…‹æ–¯å¦ å¡”å‰å…‹æ–¯å¦ 塞拉利昂 塞拉利昂 塞普勒斯 塞浦路斯 塞席爾 塞舌尔 @@ -2395,6 +2322,7 @@ 象牙海岸 科特迪瓦 çªå°¼è¥¿äºž çªå°¼æ–¯ 寮國 è€æŒ +貢寮 贡寮 #分詞用 è˜‡åˆ©å— è‹é‡Œå— 莫三比克 莫桑比克 賴索托 莱索托 @@ -2552,8 +2480,10 @@ 多明尼加 多米尼加 頻寬 带宽 數ä½ç›¸æ©Ÿ æ•°ç ç›¸æœº +數ä½ç…§ç›¸æ©Ÿ æ•°ç ç…§ç›¸æœº 單眼相機 å•å相机 å–®é¡å光機 å•å相机 +桌上型電腦 å°å¼ç”µè„‘ 韌體 固件 唯讀 åªè¯» 作業系統 æ“作系统 @@ -2567,7 +2497,6 @@ èž¢å± è§å± 解åƒåº¦ 分辨率 IPä½å€ IPåœ°å€ -IP ä½å€ IP åœ°å€ ç¨‹å¼è¨­è¨ˆå¸« 程åºå‘˜ 公尺 ç±³ å…¬å‡ å‡ @@ -2586,6 +2515,7 @@ IP ä½å€ IP åœ°å€ çµä»– å‰ä»– 了çµä»– 了结他 連çµä»– 连结他 +éˆçµ 链接 已開發國家 å‘达国家 太空飛行員 宇航员 太空衣 å®‡èˆªæœ @@ -2608,7 +2538,6 @@ Aåž‹è‚ç‚Ž 甲型è‚ç‚Ž 金æ°ä¸–界紀錄 å‰å°¼æ–¯ä¸–界纪录 祖雲é”æ–¯ 尤文图斯 若且唯若 当且仅当 -山葉 雅马哈 複製人 克隆人 白朗寧 å‹ƒæœ—å® å½¢ä¸Šå­¸ 形而上学 @@ -2650,6 +2579,8 @@ Aåž‹è‚ç‚Ž 甲型è‚ç‚Ž é›»è…¦ç¨‹å¼ è®¡ç®—æœºç¨‹åº æ‡‰ç”¨ç¨‹å¼ åº”ç”¨ç¨‹åº é›·å°„ 激光 +鱼雷 鱼雷 #分詞用 +é­šé›· 鱼雷 尖峰時間 高峰时间 尖峰時段 高峰时段 å’–å“© å’–å–± @@ -2659,7 +2590,7 @@ Aåž‹è‚ç‚Ž 甲型è‚ç‚Ž 共和è”邦 英è”邦 阿布é”比 阿布扎比 蓋曼群島 开曼群岛 -柴契爾 撒切尔 +柴契爾 撒切尔 戴å“爾 撒切尔 å‡±è–©ç³ å‡¯ç‘Ÿç³ å˜‰èŠ™è“® å‡¯ç‘Ÿç³ @@ -2706,4 +2637,17 @@ Aåž‹è‚ç‚Ž 甲型è‚ç‚Ž ç¿å±±è˜‡å§¬ 昂山素季 昂山素姬 昂山素季 西洋棋 囯际象棋 -ç§éš± éšç§ \ No newline at end of file +ç§éš± éšç§ +æ ¼æž—ç¾ŽçŽ æ ¼èŽ±ç¾Žå¥– +è‘›èŠç¾ŽçŽ 格莱美奖 +å²ä¸¹ç¦å¤§å­¸ æ–¯å¦ç¦å¤§å­¦ +賈伯斯 乔布斯 +波里活 å®èŽ±åž +åº«å¾·æ— åº“å°”å¾·æ— +庫德人 库尔德人 +希拉蕊 希拉里 +希拉莉 希拉里 +麻薩諸塞 马è¨è¯¸å¡ž +æ±å—亞國家å”會 东å—亚国家è”盟 +ç¨ç«‹åœ‹å” 独è”体 +ç¨ç«‹åœ‹å®¶åœ‹å” 独立国家è”åˆä½“ diff --git a/maintenance/language/zhtable/toHK.manual b/maintenance/language/zhtable/toHK.manual index c31d2320..525100e0 100644 --- a/maintenance/language/zhtable/toHK.manual +++ b/maintenance/language/zhtable/toHK.manual @@ -19,7 +19,9 @@ å†™å­—å° å¯«å­—æž± å·¥ä½œå° å·¥ä½œæž± å¼¹å­å° 彈å­æž± +上å°é¢ ä¸Šæž±é¢ å°é¢ä¸Š æž±é¢ä¸Š +å°é¢åŒ– æž±é¢åŒ– æŸœå° æ«ƒæž± çƒå° çƒæž± èµŒå° è³­æž± @@ -35,9 +37,11 @@ å‘布 發佈 發布 發佈 秀å‘布 秀發佈 -并å‘布 並發佈 +并å‘布 並發佈 分布 分佈 +分布于 分佈於 宣布 宣佈 +承宣布政 承宣布政 公布 公佈 摆布 擺佈 擺布 擺佈 @@ -237,7 +241,8 @@ å åœ‹ 佔國 å å›½æ¡¥ å åœ‹æ©‹ å åœ‹æ©‹ å åœ‹æ©‹ -å ç¾Ž 佔美 +å ç¾Žå›½ 佔美國 +å ç¾Žåœ‹ 佔美國 å å° ä½”å° å è‡º 佔臺 å é¦™ 佔香 @@ -401,7 +406,9 @@ 屋里 å±‹è£ å±¯é‡Œ å±¯è£ å··é‡Œ å··è£ -市里 å¸‚è£ +城市里 åŸŽå¸‚è£ +都市里 éƒ½å¸‚è£ +市里的 市è£çš„ 年代里 å¹´ä»£è£ å¹´é‡Œ å¹´è£ åº—é‡Œ åº—è£ @@ -493,7 +500,7 @@ 袖里 è¢–è£ è¢«é‡Œ è¢«è£ é‡Œå‹¾å¤–è¿ž è£å‹¾å¤–連 -里手 è£æ‰‹ +行家里手 行家è£æ‰‹ 里海 è£æµ· 里屋 è£å±‹ 里层 è£å±¤ @@ -507,13 +514,13 @@ 里边 è£é‚Š 里间 è£é–“ é‡Œé¢ è£é¢ -里é¢åŒ… è£é¢åŒ… 里头 è£é ­ 衬里 è¥¯è£ è§’è½é‡Œ 角è½è£ è¯é‡Œæœ‰è¯ 話è£æœ‰è©± 车库里 è»Šåº«è£ è½¦ç«™é‡Œ è»Šç«™è£ +网站里 ç¶²ç«™è£ è½¦é‡Œ è»Šè£ è½¦é‡Œé›…å®¾æ–¯å…‹ 車里雅賓斯克 这里 é€™è£ @@ -529,6 +536,7 @@ 鸡蛋里挑骨头 雞蛋è£æŒ‘骨頭 雪里 é›ªè£ é›¾é‡Œ éœ§è£ +云里雾里 雲è£éœ§è£ 鞋里 éž‹è£ éž­è¾Ÿå…¥é‡Œ éž­è¾Ÿå…¥è£ å¤´é‡Œ é ­è£ @@ -567,12 +575,21 @@ 山里有 å±±è£æœ‰ 棉里 æ£‰è£ è¯­é‡Œ èªžè£ +言里 è¨€è£ +境里 å¢ƒè£ æ–¹æ³•é‡Œ æ–¹æ³•è£ è¯­æ³•é‡Œ èªžæ³•è£ çœ‹æ³•é‡Œ çœ‹æ³•è£ å®ªæ³•é‡Œ æ†²æ³•è£ ç”¨æ³•é‡Œ ç”¨æ³•è£ æ³•é‡Œï¼Œ 法è£ï¼Œ +框里 æ¡†è£ +碗里 ç¢—è£ +电梯里 é›»æ¢¯è£ +个月里 å€‹æœˆè£ +æœˆè£¡æ¥ æœˆè£ä¾† +分钟里 分é˜è£ +å°æ—¶é‡Œ å°æ™‚è£ è‹‘è£¡ 苑裡 霄裡 霄裡 岸裡 岸裡 @@ -625,9 +642,8 @@ å‹•è‘— å‹•ç€ é¬¥è‘— é¬¥ç€ æ–—ç€ é¬¥ç€ -ç¨è‘— ç¨ç€ å°è‘— å°ç€ -盾著 ç›¾ç€ +矛盾著 çŸ›ç›¾ç€ çŠ¯å¾—è‘— çŠ¯å¾—ç€ çŠ¯ä¸è‘— 犯ä¸ç€ ç¦è‘— ç¦ç€ @@ -635,7 +651,6 @@ 高著 é«˜ç€ éš”è‘— éš”ç€ è·Ÿè‘— è·Ÿç€ -孤著 å­¤ç€ é—œè‘— é—œç€ ç®¡è‘— ç®¡ç€ æ…£è‘— æ…£ç€ @@ -652,7 +667,7 @@ ç²è‘— ç²ç€ 急著 æ€¥ç€ è¨˜è‘— è¨˜ç€ -冀著 å†€ç€ +希冀著 å¸Œå†€ç€ å¤¾è‘— å¤¾ç€ é§•è‘— é§•ç€ è¦‹è‘— è¦‹ç€ @@ -665,7 +680,6 @@ 看得著 çœ‹å¾—ç€ çœ‹ä¸è‘— 看ä¸ç€ 看著 çœ‹ç€ -康著 åº·ç€ æ‰›è‘— æ‰›ç€ è€ƒè‘— è€ƒç€ æ¸´è‘— æ¸´ç€ @@ -703,7 +717,6 @@ æ‹¿è‘— æ‹¿ç€ é€†è‘— é€†ç€ é‡€è‘— é‡€ç€ -努著 åŠªç€ è¶´è‘— è¶´ç€ è·‘è‘— è·‘ç€ é™ªè‘— é™ªç€ @@ -716,7 +729,6 @@ 騎著 é¨Žç€ ç‰½è‘— ç‰½ç€ æ±‚è‘— æ±‚ç€ -去著 åŽ»ç€ åš·è‘— åš·ç€ ç¹žè‘— ç¹žç€ å¿è‘— å¿ç€ @@ -758,7 +770,6 @@ 心著 å¿ƒç€ ä¿¡è‘— ä¿¡ç€ è¡Œè‘— è¡Œç€ -性著 æ€§ç€ å­¸è‘— å­¸ç€ å°‹è‘— å°‹ç€ å¾ªè‘— å¾ªç€ @@ -770,7 +781,6 @@ 衣著 è¡£ç€ ç–‘è‘— ç–‘ç€ æº¢è‘— æº¢ç€ -è—è‘— è—ç€ å› è‘— å› ç€ å°è‘— å°ç€ 應著 æ‡‰ç€ @@ -782,12 +792,11 @@ 有著 æœ‰ç€ èˆ‡è‘— èˆ‡ç€ èªžè‘— èªžç€ -豫著 è±«ç€ -é è‘— é ç€ +猶豫著 çŒ¶è±«ç€ èºè‘— èºç€ 雜著 é›œç€ è¼‰è‘— è¼‰ç€ -在著 åœ¨ç€ +存在著 å­˜åœ¨ç€ ç´®è‘— ç´®ç€ å±•è‘— å±•ç€ å ç€ ä½”ç€ @@ -806,7 +815,8 @@ 找ä¸è‘— 找ä¸ç€ 照著 ç…§ç€ ç½©è‘— ç½©ç€ -貞著 è²žç€ +堅貞著 å …è²žç€ +忠貞著 å¿ è²žç€ æž•è‘— æž•ç€ çˆ­è‘— çˆ­ç€ æŽ™è‘— æŽ™ç€ @@ -818,12 +828,11 @@ 轉著 è½‰ç€ è£è‘— è£ç€ 追著 è¿½ç€ -é«­è‘— é«­ç€ èµ°è‘— èµ°ç€ åè‘— åç€ åšè‘— åšç€ å«è‘— å«ç€ -涵著 æ¶µç€ +蘊涵著 è˜Šæ¶µç€ æ¼”è‘— æ¼”ç€ ä¿éšœè‘— ä¿éšœç€ é»è‘— é»ç€ @@ -1048,6 +1057,7 @@ 乘著å 乘著å 乘著述 乘著述 乘著稱 乘著稱 +乘著称 乘著稱 乘著錄 乘著錄 乘著書 乘著書 æŒè‘—作 æŒè‘—作 @@ -1151,6 +1161,7 @@ 低著å 低著å 低著述 低著述 低著稱 低著稱 +低著称 低著稱 低著錄 低著錄 低著書 低著書 點著作 點著作 @@ -1179,6 +1190,7 @@ 定著å 定著å 定著述 定著述 定著稱 定著稱 +定著称 定著稱 定著錄 定著錄 定著書 定著書 動著作 動著作 @@ -1195,13 +1207,6 @@ 鬥著稱 鬥著稱 鬥著錄 鬥著錄 鬥著書 鬥著書 -ç¨è‘—作 ç¨è‘—作 -ç¨è‘—者 ç¨è‘—者 -ç¨è‘—å ç¨è‘—å -ç¨è‘—è¿° ç¨è‘—è¿° -ç¨è‘—稱 ç¨è‘—稱 -ç¨è‘—錄 ç¨è‘—錄 -ç¨è‘—書 ç¨è‘—書 å°è‘—作 å°è‘—作 å°è‘—者 å°è‘—者 å°è‘—å å°è‘—å @@ -1209,13 +1214,6 @@ å°è‘—稱 å°è‘—稱 å°è‘—錄 å°è‘—錄 å°è‘—書 å°è‘—書 -盾著作 盾著作 -盾著者 盾著者 -盾著å 盾著å -盾著述 盾著述 -盾著稱 盾著稱 -盾著錄 盾著錄 -盾著書 盾著書 犯ä¸è‘—作 犯ä¸è‘—作 犯ä¸è‘—者 犯ä¸è‘—者 犯ä¸è‘—å 犯ä¸è‘—å @@ -1242,6 +1240,7 @@ 高著å 高著å 高著述 高著述 高著稱 高著稱 +高著称 高著稱 高著錄 高著錄 高著書 高著書 隔著作 隔著作 @@ -1258,13 +1257,6 @@ 跟著稱 跟著稱 跟著錄 跟著錄 跟著書 跟著書 -孤著作 孤著作 -孤著者 孤著者 -孤著å 孤著å -孤著述 孤著述 -孤著稱 孤著稱 -孤著錄 孤著錄 -孤著書 孤著書 關著作 關著作 關著者 關著者 關著å 關著å @@ -1291,6 +1283,7 @@ 光著å 光著å 光著述 光著述 光著稱 光著稱 +光著称 光著稱 光著錄 光著錄 光著書 光著書 跪著作 跪著作 @@ -1375,13 +1368,6 @@ 記著稱 記著稱 記著錄 記著錄 記著書 記著書 -冀著作 冀著作 -冀著者 冀著者 -冀著å 冀著å -冀著述 冀著述 -冀著稱 冀著稱 -冀著錄 冀著錄 -冀著書 冀著書 夾著作 夾著作 夾著者 夾著者 夾著å 夾著å @@ -1451,13 +1437,6 @@ 看著稱 看著稱 看著錄 看著錄 看著書 看著書 -康著作 康著作 -康著者 康著者 -康著å 康著å -康著述 康著述 -康著稱 康著稱 -康著錄 康著錄 -康著書 康著書 扛著作 扛著作 扛著者 扛著者 扛著å 扛著å @@ -1484,6 +1463,7 @@ 刻著å 刻著å 刻著述 刻著述 刻著稱 刻著稱 +刻著称 刻著稱 刻著錄 刻著錄 刻著書 刻著書 空著作 空著作 @@ -1546,6 +1526,7 @@ 努力著å 努力著å 努力著述 努力著述 努力著稱 努力著稱 +努力著称 努力著稱 努力著錄 努力著錄 努力著書 努力著書 麗著作 麗著作 @@ -1581,6 +1562,7 @@ 亮著å 亮著å 亮著述 亮著述 亮著稱 亮著稱 +亮著称 亮著稱 亮著錄 亮著錄 亮著書 亮著書 臨著作 臨著作 @@ -1677,6 +1659,7 @@ 美著å 美著å 美著述 美著述 美著稱 美著稱 +美著称 美著稱 美著錄 美著錄 美著書 美著書 夢著作 夢著作 @@ -1713,13 +1696,6 @@ 釀著稱 釀著稱 釀著錄 釀著錄 釀著書 釀著書 -努著作 努著作 -努著者 努著者 -努著å 努著å -努著述 努著述 -努著稱 努著稱 -努著錄 努著錄 -努著書 努著書 趴著作 趴著作 趴著者 趴著者 趴著å 趴著å @@ -1803,13 +1779,6 @@ 求著稱 求著稱 求著錄 求著錄 求著書 求著書 -去著作 去著作 -去著者 去著者 -去著å 去著å -去著述 去著述 -去著稱 去著稱 -去著錄 去著錄 -去著書 去著書 嚷著作 嚷著作 嚷著者 嚷著者 åš·è‘—å åš·è‘—å @@ -1878,6 +1847,7 @@ 守著å 守著å 守著述 守著述 守著稱 守著稱 +守著称 守著稱 守著錄 守著錄 守著書 守著書 å—著作 å—著作 @@ -2011,6 +1981,7 @@ 味著å 味著å 味著述 味著述 味著稱 味著稱 +味著称 味著稱 味著錄 味著錄 味著書 味著書 想著作 想著作 @@ -2018,6 +1989,7 @@ 想著å 想著å 想著述 想著述 想著稱 想著稱 +想著称 想著稱 想著錄 想著錄 想著書 想著書 響著作 響著作 @@ -2046,6 +2018,7 @@ 心著å 心著å 心著述 心著述 心著稱 心著稱 +心著称 心著稱 心著錄 心著錄 心著書 心著書 信著作 信著作 @@ -2053,6 +2026,7 @@ ä¿¡è‘—å ä¿¡è‘—å ä¿¡è‘—è¿° ä¿¡è‘—è¿° 信著稱 信著稱 +信著称 信著稱 信著錄 信著錄 信著書 信著書 行著作 行著作 @@ -2062,13 +2036,6 @@ 行著稱 行著稱 行著錄 行著錄 行著書 行著書 -性著作 性著作 -性著者 性著者 -性著å 性著å -性著述 性著述 -性著稱 性著稱 -性著錄 性著錄 -性著書 性著書 學著作 學著作 學著者 學著者 學著å 學著å @@ -2102,6 +2069,7 @@ é›…è‘—å é›…è‘—å é›…è‘—è¿° é›…è‘—è¿° 雅著稱 雅著稱 +雅著称 雅著稱 雅著錄 雅著錄 雅著書 雅著書 沿著作 沿著作 @@ -2129,6 +2097,7 @@ 衣著å 衣著å 衣著述 衣著述 衣著稱 衣著稱 +衣著稱 衣著稱 衣著錄 衣著錄 衣著書 衣著書 疑著作 疑著作 @@ -2145,13 +2114,6 @@ 溢著稱 溢著稱 溢著錄 溢著錄 溢著書 溢著書 -è—著作 è—著作 -è—著者 è—著者 -è—è‘—å è—è‘—å -è—è‘—è¿° è—è‘—è¿° -è—著稱 è—著稱 -è—著錄 è—著錄 -è—著書 è—著書 因著作 因著作 因著者 因著者 å› è‘—å å› è‘—å @@ -2217,20 +2179,6 @@ 語著稱 語著稱 語著錄 語著錄 語著書 語著書 -豫著作 豫著作 -豫著者 豫著者 -豫著å 豫著å -豫著述 豫著述 -豫著稱 豫著稱 -豫著錄 豫著錄 -豫著書 豫著書 -é è‘—作 é è‘—作 -é è‘—者 é è‘—者 -é è‘—å é è‘—å -é è‘—è¿° é è‘—è¿° -é è‘—稱 é è‘—稱 -é è‘—錄 é è‘—錄 -é è‘—書 é è‘—書 èºè‘—作 èºè‘—作 èºè‘—者 èºè‘—者 èºè‘—å èºè‘—å @@ -2252,13 +2200,6 @@ 載著稱 載著稱 載著錄 載著錄 載著書 載著書 -在著作 在著作 -在著者 在著者 -在著å 在著å -在著述 在著述 -在著稱 在著稱 -在著錄 在著錄 -在著書 在著書 紮著作 紮著作 紮著者 紮著者 紮著å 紮著å @@ -2315,13 +2256,6 @@ 罩著稱 罩著稱 罩著錄 罩著錄 罩著書 罩著書 -貞著作 貞著作 -貞著者 貞著者 -貞著å 貞著å -貞著述 貞著述 -貞著稱 貞著稱 -貞著錄 貞著錄 -貞著書 貞著書 枕著作 枕著作 枕著者 枕著者 æž•è‘—å æž•è‘—å @@ -2349,13 +2283,6 @@ 制著稱 制著稱 制著錄 制著錄 制著書 制著書 -志著作 志著作 -志著者 志著者 -å¿—è‘—å å¿—è‘—å -å¿—è‘—è¿° å¿—è‘—è¿° -志著稱 志著稱 -志著錄 志著錄 -志著書 志著書 皺著作 皺著作 皺著者 皺著者 皺著å 皺著å @@ -2397,13 +2324,6 @@ 追著稱 追著稱 追著錄 追著錄 追著書 追著書 -髭著作 髭著作 -髭著者 髭著者 -é«­è‘—å é«­è‘—å -é«­è‘—è¿° é«­è‘—è¿° -髭著稱 髭著稱 -髭著錄 髭著錄 -髭著書 髭著書 走著作 走著作 走著者 走著者 èµ°è‘—å èµ°è‘—å @@ -2432,13 +2352,6 @@ å«è‘—稱 å«è‘—稱 å«è‘—錄 å«è‘—錄 å«è‘—書 å«è‘—書 -涵著作 涵著作 -涵著者 涵著者 -涵著å 涵著å -涵著述 涵著述 -涵著稱 涵著稱 -涵著錄 涵著錄 -涵著書 涵著書 演著作 演著作 演著者 演著者 演著å 演著å @@ -2500,6 +2413,7 @@ é‡è‘—å é‡è‘—å é‡è‘—è¿° é‡è‘—è¿° é‡è‘—稱 é‡è‘—稱 +é‡è‘—称 é‡è‘—稱 é‡è‘—錄 é‡è‘—錄 é‡è‘—書 é‡è‘—書 殺著作 殺著作 @@ -2560,6 +2474,7 @@ 著甚麽 ç€ç”šéº½ 存著 å­˜ç€ å­˜è‘—å 存著å +存著作 存著作 劃著 åŠƒç€ åˆ¥è‘— åˆ¥ç€ åˆ®è‘— åˆ®ç€ @@ -2621,6 +2536,33 @@ 放著å 放著å 放著稱 放著稱 放著称 放著稱 +縱著 ç¸±ç€ +ä¼è‘— ä¼ç€ +視著 è¦–ç€ +視著å 視著å +è“‹è‘— è“‹ç€ +è“‹è‘—å è“‹è‘—å +蓋著稱 蓋著稱 +蓋著作 蓋著作 +覆蓋著 è¦†è“‹ç€ +ç«‹è‘— ç«‹ç€ +ç«‹è‘—å ç«‹è‘—å +立著作 立著作 +立著者 立著者 +立著稱 立著稱 +立著称 立著稱 +立著有 立著有 +立著《 立著《 +立著( 立著( +固著 å›ºç€ +ç­å›ºè‘— ç­å›ºè‘— +é¢åŒ…è‘— é¢åŒ…ç€ +分布著 åˆ†ä½ˆç€ +分佈著 åˆ†ä½ˆç€ +散布著 æ•£ä½ˆç€ +散佈著 æ•£ä½ˆç€ +é佈著 éä½ˆç€ +é布著 éä½ˆç€ ä¸‰åå…­è‘— 三åå…­ç€ èµ°ç‚ºä¸Šè‘— èµ°ç‚ºä¸Šç€ é¬§è‘— é¬§ç€ @@ -2739,6 +2681,7 @@ è¬é‚£æœ 瓦努阿圖 葛摩 科摩羅 寮國 è€æ’¾ +貢寮 貢寮 #分詞用 肯尼亚 肯雅 莫三比克 莫桑比克 賴索托 èŠç´¢æ‰˜ @@ -2762,7 +2705,7 @@ 柯林頓 å…‹æž—é “ è¨è¾¾å§† è–©é”姆 è´å…‹æ±‰å§† 碧咸 -è´å…‹æ¼¢ 碧咸 +è²å…‹æ¼¢ 碧咸 迈克尔·欧文 米高·奧雲 å¡æ™®é‡Œäºšè’‚ å¡ä½©é›…è’‚ 马拉特·è¨èŠ¬ 馬拉特·沙芬 @@ -2777,7 +2720,6 @@ 莱特湾 é›·ä¼Šæ³°ç£ èŠç‰¹ç£ é›·ä¼Šæ³°ç£ è˜­å¡å¨ 浮羅交怡 -å‰å°”å‰æ–¯æ–¯å¦ å‰çˆ¾å‰æ–¯ 撒马尔罕 撒馬爾罕 伊斯蘭瑪巴德 伊斯蘭堡 喀拉蚩 å¡æ‹‰å¥‡ @@ -2900,7 +2842,7 @@ å²åŒ¹æŸ å²åŒ¹å ¡ 戈巴契夫 戈爾巴喬夫 席哈克 希拉克 -希拉蕊 希拉里 +希拉蕊 希拉莉 布莱尔 è²ç†é›… å°¼å…‹æ¾ å°¼å…‹éœ å¥§é»›éº—Â·èµ«æœ¬ 柯德莉·å¤è @@ -2930,10 +2872,10 @@ Cåž‹è‚ç‚Ž 丙型è‚ç‚Ž 晶体管 電晶體 æºä»£ç  原始碼 IPåœ°å€ IPä½å€ -IP åœ°å€ IP ä½å€ å±å¹• 螢幕 è§å± èž¢å± ç‰ˆæƒä¿¡æ¯ 版權資訊 +ä¿¡æ¯æ—¶ä»£ 資訊時代 蹦床 彈床 æ“ŠåŠ åŠæ“Š 击剑 åŠæ“Š @@ -2941,8 +2883,11 @@ IP åœ°å€ IP ä½å€ 牛轧 é³¥çµ ç‰›è»‹ é³¥çµ æ•¸ä½ç›¸æ©Ÿ 數碼相機 +數ä½ç…§ç›¸æ©Ÿ 数碼照相機 +数字照相机 数碼照相機 單眼相機 å–®é¡å光機 å•å相机 å–®é¡å光機 +å°å¼ç”µè„‘ 桌上型電腦 形上學 形而上學 å‰å°¼æ–¯ä¸–界纪录 å¥åŠ›å£«ä¸–界紀錄 å‰ä»– çµä»– @@ -2951,7 +2896,6 @@ IP åœ°å€ IP ä½å€ æ³°å¦å°¼å…‹å· éµé”尼號 自行ç«ç‚® 自走炮 冰激凌 雪糕 -奥斯曼 鄂圖曼 里æ°0 黎克特制0 里æ°1 黎克特制1 里æ°2 黎克特制2 @@ -2982,6 +2926,7 @@ IP åœ°å€ IP ä½å€ 正體中文 ç¹é«”中文 æ¿çƒ æœ¨çƒ ç±ƒæ¿çƒ 籃æ¿çƒ +篮æ¿çƒ 籃æ¿çƒ 智慧財產權 知識產權 智財權 知識產權 首席执行官 è¡Œæ”¿ç¸½è£ @@ -3007,7 +2952,6 @@ IP åœ°å€ IP ä½å€ 肖斯塔科维奇 蕭士é”高維契 蕭士塔高維奇 蕭士é”高維契 工具機 機床 -伊斯å¦å ¡ 伊斯å¦å¸ƒçˆ¾ ç©ºæ°”è´¨é‡ ç©ºæ°£è³ªç´  空氣å“質 空氣質素 俯å§æ’‘ 掌上壓 @@ -3041,4 +2985,15 @@ IP åœ°å€ IP ä½å€ 西洋棋 國際象棋 éšç§ ç§éš± éš±ç§ ç§éš± -ç¡…è—» ç¡…è—» \ No newline at end of file +ç¡…è—» ç¡…è—» +格莱美奖 æ ¼æž—ç¾ŽçŽ +è‘›èŠç¾ŽçŽ æ ¼æž—ç¾ŽçŽ +æ–¯å¦ç¦å¤§å­¦ å²ä¸¹ç¦å¤§å­¸ +賈伯斯 喬布斯 +å®èŽ±åž 波里活 +寶èŠå¡¢ 波里活 +åº«å¾·æ— åº“çˆ¾å¾·æ— +庫德人 库爾德人 +æ±å—亞國家å”會 æ±å—亞國家è¯ç›Ÿ +ç¨ç«‹åœ‹å” ç¨è¯é«” +ç¨ç«‹åœ‹å®¶åœ‹å” ç¨ç«‹åœ‹å®¶è¯åˆé«” diff --git a/maintenance/language/zhtable/toSimp.manual b/maintenance/language/zhtable/toSimp.manual index b857e5f4..9674aae9 100644 --- a/maintenance/language/zhtable/toSimp.manual +++ b/maintenance/language/zhtable/toSimp.manual @@ -57,9 +57,9 @@ 男性为乾 男性为乾 男为乾 男为乾 阳为乾 阳为乾 -男性爲乾 男性为乾 -男爲乾 男为乾 -陽爲乾 阳为乾 +男性為乾 男性为乾 +男為乾 男为乾 +陽為乾 阳为乾 乾一组 乾一组 ä¹¾ä¸€å› ä¹¾ä¸€å› é™ˆä¹¾ç”Ÿ 陈乾生 @@ -68,12 +68,12 @@ 孙乾 孙乾 陈é‡ä¹¾ 陈é‡ä¹¾ 曾è¿ä¹¾ 曾è¿ä¹¾ -象乾 象乾 乾贵士 乾贵士 +乾东 乾东 柳诒徵 柳诒徵 於夫罗 於夫罗 æ–¼æ¢¨åŽ æ–¼æ¢¨åŽ -於潜县 於潜县 +於潜 於潜 於志贺 於志贺 憑藉 凭借 藉端 借端 @@ -144,7 +144,16 @@ 么篇 幺篇 么謙 幺谦 六么 六幺 +è€ä¹ˆ è€å¹º +么正 幺正 +么女 幺女 +ä¹ˆä¹ å¹ºä¹ +ä¹ˆå­ å¹ºå­ è¿™ä¹ˆ 这么 +那么 那么 +什么 什么 +怎么 怎么 +多么 多么 乾乾淨淨 干干净净 乾乾脆脆 干干脆脆 肉乾乾 肉干干 @@ -206,9 +215,6 @@ ç¨é¾ 独钟 é¾éˆ é’Ÿçµ é¾é¾ 龙钟 -é¾å±± é’Ÿå±± -ä¸€é¾ ä¸€é’Ÿ -åƒé¾ åƒé’Ÿ 薰心 ç†å¿ƒ è–°ç¿’ ç†ä¹  薰陶 ç†é™¶ @@ -265,4 +271,14 @@ 麴黴 曲霉 造麴 造曲 大麴 大曲 -黃麴毒素 黄曲毒素 \ No newline at end of file +黃麴毒素 黄曲毒素 +硃砂 朱砂 +硃紅 朱红 +硃色 朱色 +銀硃 银朱 +é¶å¢ƒ 绕境 +侷促 局促 +ä¾·é™ å±€é™ +馬鞌 é©¬éž +觔斗 斤斗 +穀阳 穀阳 diff --git a/maintenance/language/zhtable/toTW.manual b/maintenance/language/zhtable/toTW.manual index 14f7eaeb..22456a78 100644 --- a/maintenance/language/zhtable/toTW.manual +++ b/maintenance/language/zhtable/toTW.manual @@ -17,45 +17,84 @@ é’š 鈽 ç¡… 矽 ç…™è‰ è¸è‰ +çƒŸè‰ è¸è‰ 煙蒂 è¸è’‚ +烟蒂 è¸è’‚ 煙斗 è¸æ–— +烟斗 è¸æ–— 煙鬼 è¸é¬¼ +烟鬼 è¸é¬¼ ç…™ç° è¸ç° +çƒŸç° è¸ç° 煙具 è¸å…· +烟具 è¸å…· 煙民 è¸æ°‘ +烟民 è¸æ°‘ 煙農 è¸è¾² +烟农 è¸è¾² 煙絲 è¸çµ² +çƒŸä¸ è¸çµ² 煙頭 è¸é ­ +烟头 è¸é ­ 煙葉 è¸è‘‰ +çƒŸå¶ è¸è‘‰ 煙癮 è¸ç™® +烟瘾 è¸ç™® 煙嘴 è¸å˜´ +烟嘴 è¸å˜´ 煙酒 è¸é…’ +烟酒 è¸é…’ 煙袋 è¸è¢‹ +烟袋 è¸è¢‹ ç…™å“ è¸å“ +çƒŸå“ è¸å“ 煙鹼 è¸é¹¼ +烟碱 è¸é¹¼ ç…™æ² è¸æ² +çƒŸå· è¸æ² 香煙 é¦™è¸ +香烟 é¦™è¸ æ²ç…™ æ²è¸ +å·çƒŸ æ²è¸ 旱煙 æ—±è¸ +旱烟 æ—±è¸ çƒ¤ç…™ çƒ¤è¸ +烤烟 çƒ¤è¸ ç¦ç…™ ç¦è¸ +ç¦çƒŸ ç¦è¸ 戒煙 æˆ’è¸ +戒烟 æˆ’è¸ æ‹’ç…™ æ‹’è¸ +拒烟 æ‹’è¸ ç´™ç…™ ç´™è¸ +纸烟 ç´™è¸ æŠ½ç…™ æŠ½è¸ +抽烟 æŠ½è¸ å¸ç…™ å¸è¸ +å¸çƒŸ å¸è¸ åç…™ åè¸ +å烟 åè¸ ç§ç…™ ç§è¸ +ç§çƒŸ ç§è¸ 點煙 é»žè¸ +点烟 é»žè¸ æ´‹ç…™ æ´‹è¸ +洋烟 æ´‹è¸ äºŒæ‰‹ç…™ äºŒæ‰‹è¸ +二手烟 äºŒæ‰‹è¸ é›»å­ç…™ é›»å­è¸ +电å­çƒŸ é›»å­è¸ 呂宋煙 å‘‚å®‹è¸ +å•å®‹çƒŸ å‘‚å®‹è¸ é›ªèŒ„ç…™ é›ªèŒ„è¸ +雪茄烟 é›ªèŒ„è¸ ç„¡ç…™æ—¥ ç„¡è¸æ—¥ +无烟日 ç„¡è¸æ—¥ 無煙環境 ç„¡è¸ç’°å¢ƒ +无烟环境 ç„¡è¸ç’°å¢ƒ 榴莲 榴槤 榴蓮 榴槤 +铆足 å¯è¶³ 霉素 é»´ç´  想象 æƒ³åƒ è¿­ä»£ 疊代 @@ -126,9 +165,17 @@ å†²ç€ è¡è‘— å¹²ç€ å¹¹è‘— å¹²ç€æ€¥ 干著急 +对ç€å¹² å°è‘—å¹¹ æ–—ç€ é¬¥è‘— +é¢åŒ…ç€ é¢åŒ…è‘— 徵狀 症狀 系数 係數 +汇编 彙編 +æŠ¥é“ å ±å°Ž +划ç€èˆ¹ 划著船 +划ç€ç«¹ç­ åˆ’è‘—ç«¹ç­ +划ç€ç‹¬æœ¨èˆŸ 划著ç¨æœ¨èˆŸ +ç€çœ¼äºŽ 著眼於 ç¼ºçœ é è¨­ 以太网 乙太網 光盘 光碟 @@ -144,7 +191,6 @@ ç£ç›˜ ç£ç¢Ÿ ç£é“ ç£è»Œ ç«¯å£ åŸ  -ç®—å­ é‹ç®—å…ƒ 芯片 晶片 è¯‘ç  è§£ç¢¼ 软驱 軟碟機 @@ -153,6 +199,7 @@ é¼ æ ‡ 滑鼠 进制 é€²ä½ ä¿¡æ¯è®º 資訊ç†è«– +ä¿¡æ¯æ—¶ä»£ 資訊時代 写ä¿æŠ¤ 防寫 分辨率 解æžåº¦ æœåŠ¡å™¨ 伺æœå™¨ @@ -161,10 +208,9 @@ æ•°æ®åº“ 資料庫 打å°æœº å°è¡¨æ©Ÿ 打å°æ©Ÿ å°è¡¨æ©Ÿ -字节 ä½å…ƒçµ„ -字節 ä½å…ƒçµ„ æ‰“å° åˆ—å° -æ”»æ‰“å° æ”»æ‰“å° +攻打 攻打 #分詞用 +打å°åº¦ 打å°åº¦ 硬件 硬體 二æžç®¡ 二極體 二極管 二極體 @@ -184,7 +230,6 @@ 调制解调器 數據機 調制解調器 數據機 短信 簡訊 -ä¹Œå…¹åˆ«å…‹æ–¯å¦ çƒèŒ²åˆ¥å…‹ ä¹å¾— 查德 也门 葉門 也門 葉門 @@ -215,12 +260,10 @@ 厄立特里亞 厄利垂亞 å‰å¸ƒæ å‰å¸ƒåœ° å‰å¸ƒå ¤ å‰å¸ƒåœ° -哈è¨å…‹æ–¯å¦ 哈薩克 哥斯达黎加 哥斯大黎加 哥斯é”黎加 哥斯大黎加 å›¾ç“¦å¢ å瓦魯 圖瓦盧 å瓦魯 -åœŸåº“æ›¼æ–¯å¦ åœŸåº«æ›¼ 圣å¢è¥¿äºš è–露西亞 è–盧西亞 è–露西亞 圣基茨和尼维斯 è–克里斯多ç¦åŠå°¼ç¶­æ–¯ @@ -236,7 +279,6 @@ 埃塞俄比亚 衣索比亞 埃塞俄比亞 衣索比亞 基里巴斯 å‰é‡Œå·´æ–¯ -å¡”å‰å…‹æ–¯å¦ å¡”å‰å…‹ 塞拉利昂 ç…å­å±± 塞浦路斯 塞普勒斯 塞舌尔 塞席爾 @@ -335,7 +377,6 @@ 莱特湾 é›·ä¼Šæ³°ç£ èŠç‰¹ç£ é›·ä¼Šæ³°ç£ è€¶åŠ é” é›…åŠ é” -å‰å°”å‰æ–¯æ–¯å¦ å‰çˆ¾å‰æ–¯ 伊斯兰堡 伊斯蘭瑪巴德 伊斯蘭堡 伊斯蘭瑪巴德 å¡æ‹‰å¥‡ 喀拉蚩 @@ -504,7 +545,7 @@ 索贊尼辛 ç´¢å¿å°¼è¾› 瓦格纳 è¯æ ¼ç´ 毕加索 ç•¢å¡ç´¢ -碧咸 è´å…‹æ¼¢ +碧咸 è²å…‹æ¼¢ 梅尔·å‰å¸ƒæ£® 梅爾·å‰å‹ƒéœ 查韦斯 查維茲 本æ°æ˜Ž ç­å‚‘明 @@ -516,7 +557,7 @@ 斯皮尔伯格 å²åŒ¹æŸ 斯特劳斯 å²ç‰¹å‹žæ–¯ 斯大林 å²é”æž— -æ–¯å¦ç¦ å²ä¸¹ç¦ +æ–¯å¦ç¦å¤§å­¦ å²ä¸¹ç¦å¤§å­¸ 撒切尔 柴契爾 戴å“爾 柴契爾 摩根士丹利 æ‘©æ ¹å²å¦åˆ© @@ -528,6 +569,7 @@ 德里达 å¾·å¸Œé” å¸•ç‰¹é‡Œå…‹ 派屈克 希拉里 希拉蕊 +希拉莉 希拉蕊 希拉克 席哈克 å°¼å…‹æ¾ å°¼å…‹æ£® å¨å»‰å§†æ–¯ å¨å»‰å£« @@ -571,7 +613,6 @@ 晶體管 電晶體 晶体管 電晶體 IPåœ°å€ IPä½å€ -IP åœ°å€ IP ä½å€ 解åƒåº¦ 解æžåº¦ å±å¹• 螢幕 è§å± èž¢å± @@ -582,8 +623,11 @@ IP åœ°å€ IP ä½å€ 宇航员 太空人 太空飛行員 太空人 独è”体 ç¨ç«‹åœ‹å” +ç¨è¯é«” ç¨ç«‹åœ‹å” 独立国家è”åˆä½“ ç¨ç«‹åœ‹å®¶åœ‹å” -东å—亚国家è”盟 æ±å—äºžåœ‹å” +ç¨ç«‹åœ‹å®¶è¯åˆé«” ç¨ç«‹åœ‹å®¶åœ‹å” +东å—亚国家è”盟 æ±å—亞國家å”會 +æ±å—亞國家è¯ç›Ÿ æ±å—亞國家å”會 å‘达国家 已開發國家 å“¥ç‰¹å¼ å“¥å¾·å¼ è½è»Š 下車 @@ -600,7 +644,11 @@ IP åœ°å€ IP ä½å€ 數碼相機 數ä½ç›¸æ©Ÿ å–®é¡å光機 單眼相機 æ•°ç ç›¸æœº 數ä½ç›¸æ©Ÿ +数字照相机 數ä½ç…§ç›¸æ©Ÿ +æ•°ç ç…§ç›¸æœº 數ä½ç…§ç›¸æ©Ÿ +數碼照相機 數ä½ç…§ç›¸æ©Ÿ å•å相机 單眼相機 +å°å¼ç”µè„‘ 桌上型電腦 形而上學 形上學 形而上学 形上學 当且仅当 若且唯若 @@ -614,7 +662,6 @@ IP åœ°å€ IP ä½å€ 沙律 沙拉 忌廉 奶油 å‘³ç¾Žæ€ è‹¦è‰¾é…’ -奥斯曼 鄂圖曼 埃åšæ‹‰ 伊波拉 克隆人 複製人 è§å…‰ 螢光 @@ -655,6 +702,7 @@ IP åœ°å€ IP ä½å€ 高峰时间 尖峰時間 高峰时段 尖峰時段 东盟 æ±å” +æ±ç›Ÿ æ±å” 亚细安 æ±å” 英è”邦 å¤§è‹±åœ‹å” è‹±è¯é‚¦ å¤§è‹±åœ‹å” @@ -672,7 +720,7 @@ IP åœ°å€ IP ä½å€ 自由泳 è‡ªç”±å¼ æœºåºŠ 工具機 機床 工具機 -ç©ºæ°”è´¨é‡ ç©ºæ°£å“質 +ç©ºæ°”è´¨é‡ ç©ºæ°£å“質 空氣質素 空氣å“質 俯å§æ’‘ ä¼åœ°æŒºèº« 掌上壓 ä¼åœ°æŒºèº« @@ -684,6 +732,8 @@ IP åœ°å€ IP ä½å€ 數碼訊號 數ä½è¨Šè™Ÿ 移动网络 行動網路 æµå‹•ç¶²çµ¡ 行動網路 +ç½‘ç»œæ¸¸æˆ ç¶²è·¯éŠæˆ² +網絡éŠæˆ² 網路éŠæˆ² 咪高峰 麥克風 電單車 機車 æœç´¢å¼•æ“Ž æœå°‹å¼•æ“Ž @@ -701,4 +751,10 @@ IP åœ°å€ IP ä½å€ 囯际象棋 西洋棋 國際象棋 西洋棋 ç§éš± éš±ç§ -ç¡…è—» ç¡…è—» \ No newline at end of file +ç¡…è—» ç¡…è—» +æ ¼æž—ç¾ŽçŽ è‘›èŠç¾ŽçŽ +格莱美奖 è‘›èŠç¾ŽçŽ +乔布斯 賈伯斯 +波里活 寶èŠå¡¢ +åº“å°”å¾·æ— åº«å¾·æ— +库尔德人 庫德人 diff --git a/maintenance/language/zhtable/toTrad.manual b/maintenance/language/zhtable/toTrad.manual index 7fc60c74..13a0b989 100644 --- a/maintenance/language/zhtable/toTrad.manual +++ b/maintenance/language/zhtable/toTrad.manual @@ -2,22 +2,28 @@ “ 「 ‘ 『 ’ 〠-’s ’s +’s ’s 手塚治虫 手塚治虫 無言ä¸ä»‡ 無言ä¸è®Ž 視如寇仇 視如寇讎 往日無仇 往日無讎 近日無仇 近日無讎 æŽé€£æ° æŽé€£æ° -周æ°å€« 周æ°å€« +æ°å€« æ°å€« +æ°å¨çˆ¾ æ°å¨çˆ¾ +é»ƒè©©æ° é»ƒè©©æ° +é™³å£«æ° é™³å£«æ° +æž—æ°æ¨‘ æž—æ°æ¨‘ +許è–æ° è¨±è–æ° +å¼µæ° å¼µæ° +å­«æ° å­«æ° +é™³æ° é™³æ° +é»ƒæ° é»ƒæ° +è¬æ° è¬æ° 寶曆 寶曆 涂謹申 涂謹申 涂鴻欽 涂鴻欽 涂壯勳 涂壯勳 -於姓 於姓 -æ–¼æ° æ–¼æ° -於夫羅 於夫羅 -æ–¼æ¢¨è¯ æ–¼æ¢¨è¯ é„­å‡±äº‘ 鄭凱云 筑陽 筑陽 筑後 筑後 @@ -35,7 +41,6 @@ 拜托 拜託 委托书 委託書 委托 委託 -於夫罗 於夫羅 åºœå¹²é  åºœå¹²é  åºœå¹²æ“¾ 府干擾 é é¢ é é¢ @@ -64,9 +69,6 @@ 乾象曆 乾象曆 乾象历 乾象曆 ä¸å¥½å¹²é  ä¸å¥½å¹²é  -ä¸å¹²é  ä¸å¹²é  -ä¸å¹²æ“¾ ä¸å¹²æ“¾ -ä¸å¹²ç‰  ä¸å¹²ç‰  范文瀾 范文瀾 機械系 機械系 頂多 頂多 @@ -107,7 +109,6 @@ 于明濤 于明濤 äºŽæ ¹å‰ äºŽæ ¹å‰ äºŽæ¨¹æ½” 于樹潔 -于正昇 于正昇 于漢超 于漢超 äºŽæ´ªå€ äºŽæ´ªå€ äºŽæ¹˜è˜­ 于湘蘭 @@ -153,20 +154,18 @@ ä½™ä¸‰å‹ ä½™ä¸‰å‹ ç°¡ç­‘ç¿Ž ç°¡ç­‘ç¿Ž 楊雅筑 楊雅筑 -æ°å¨çˆ¾éŸ³æ¨‚ æ°å¨çˆ¾éŸ³æ¨‚ å°¸ç¾…ç²¾èˆ å°¸ç¾…ç²¾èˆ é¨°æ ¼é‡Œ 騰格里 æ‘里長 æ‘里長 進制 進制 æ¨¡èŒƒä¸‰è» æ¨¡èŒƒä¸‰è» -é»ƒè©©æ° é»ƒè©©æ° é™³å†² 陳冲 劉佳怜 劉佳怜 范賢惠 范賢惠 于國治 于國治 于楓 于楓 黎å‰é›² 黎å‰é›² -于飛島 于飛島 +于飛 于飛 鄉愿 鄉愿 愿樸 愿樸 謹愿 謹愿 @@ -192,16 +191,14 @@ 苹果 蘋果 苹果干 蘋果乾 åŽåº„ åŽåº„ +後庄 後庄 龜山庄 龜山庄 寶山庄 寶山庄 員山庄 員山庄 昵称 暱稱 單于 單于 -鮮于樞 鮮于樞 -鳳凰于飛 鳳凰于飛 +鮮于 鮮于 賦范 賦范 -é™³å£«æ° é™³å£«æ° -æž—æ°æ¨‘ æž—æ°æ¨‘ 茅于軾 茅于軾 é™³æœ‰åŽ é™³æœ‰åŽ å¤©ç¥žä¹‹åŽ å¤©ç¥žä¹‹åŽ @@ -214,11 +211,13 @@ 水里高級商工 水里高級商工 水里鳳林 水里鳳林 水里æ¿æ°´æºª 水里æ¿æ°´æºª +洞里薩 洞里薩 划ä¸ä¾† 划ä¸ä¾† 划來划去 划來划去 划動 划動 划得來 划得來 划著 划著 +划著 劃著å 划進 划進 åˆ’éŽ åˆ’éŽ åˆ’é¾èˆŸ 划é¾èˆŸ @@ -226,6 +225,11 @@ 么弟 么弟 六么 六么 么雞 么雞 +么正 么正 +么女 么女 +ä¹ˆä¹ ä¹ˆä¹ +ä¹ˆå­ ä¹ˆå­ +ä¹ˆåŠ ä¹ˆåŠ ç¾©è” ç¾©è” æ è½‚ æ è½‚ 局促 侷促 @@ -450,6 +454,7 @@ 万余 è¬é¤˜ 亿余 億餘 兆余 兆餘 +ä»…ä½™ 僅餘 0ä½™ 0餘 1ä½™ 1餘 2ä½™ 2餘 @@ -460,6 +465,9 @@ 7ä½™ 7餘 8ä½™ 8餘 9ä½™ 9餘 +带余 帶餘 +余干 餘干 +余江 餘江 于余曲折 于餘曲折 尸居余气 尸居餘氣 余光生 余光生 @@ -479,7 +487,43 @@ 曲钱 麴錢 曲车 麴車 é¼ æ›²è‰ é¼ éº´è‰ -大曲酒 大麴酒 +曲酒 麯酒 泸州大曲 瀘州大麯 #商標å -洋河大曲 洋河大麴 -åŒæ²Ÿå¤§æ›² é›™æºå¤§éº¯ #商標å \ No newline at end of file +洋河大曲 洋河大麯 +沟大曲 æºå¤§éº¯ +朱砂 硃砂 +银朱 銀硃 +喲喂 喲喂 +鳥栖 鳥栖 +澄江县 澂江縣 #以下為å«ç•°é«”字地å +横峰县 橫峯縣 +鹤峰县 鶴峯縣 +五峰县 五峯縣 +兰溪市 蘭谿市 +金溪县 金谿縣 +竹溪县 竹谿縣 +辰溪县 辰谿縣 +æ¾æºªåŽ¿ æ¾è°¿ç¸£ +慈溪 慈谿 +浚州 濬州 +浚县 濬縣 +穆棱 穆稜 +绥棱 ç¶ç¨œ +丹棱 丹稜 +仙游 ä»™éŠ +麟游 éºŸéŠ +ä¹æ¸¸åŽŸ 樂éŠåŽŸ +托克逊 è¨—å…‹éœ +托里县 託里縣 +沾化 霑化 +沾益 霑益 +岫岩 岫巖 +黄岩县 黃巖縣 +黄岩区 é»ƒå·–å€ +北仑河 北崙河 +昆嵛 å´‘åµ› +昆承湖 崑承湖 +çµæ˜† éˆå´‘ +龙岩 é¾å·– +扑冬 撲鼕 +冬冬鼓 鼕鼕鼓 diff --git a/maintenance/language/zhtable/trad2simp.manual b/maintenance/language/zhtable/trad2simp.manual index f76a9498..c479f35d 100644 --- a/maintenance/language/zhtable/trad2simp.manual +++ b/maintenance/language/zhtable/trad2simp.manual @@ -1,4 +1,3 @@ -U+0347A㑺|U+04FCAä¿Š| U+034BAã’º|U+07F54ç½”| U+034C2ã“‚|U+05BC7寇| U+03541ã•|U+05374å´| @@ -15,8 +14,6 @@ U+0384Cã¡Œ|U+05E3D帽| U+03898㢘|U+05EC9廉| U+03919㤙|U+06069æ©| U+03966㥦|U+060EC惬| -U+0396B㥫|U+060C7惇| -U+039F1㧱|U+062FFæ‹¿| U+03A17㨗|U+06377æ·| U+03A2A㨪|U+06643晃| U+03A3F㨿|U+0636Eæ®| @@ -61,7 +58,6 @@ U+04EB7亷|U+05EC9廉| U+04EBE亾|U+04EA1亡| U+04F48佈|U+05E03布| U+04F54ä½”|U+05360å | -U+04FB7ä¾·|U+05C40å±€| U+04FFBä¿»|U+05907备| U+05010å€|U+0500Få€| U+05016倖|U+05E78幸| @@ -138,7 +134,6 @@ U+056D9å›™|U+056E0å› | U+05705圅|U+051FD函| U+0577Få¿|U+09644附| U+0579Cåžœ|U+0579Båž›| -U+0585Aå¡š|U+051A2冢| U+0585Få¡Ÿ|U+0846C葬| U+05872塲|U+0573A场| U+05896墖|U+05854å¡”| @@ -227,7 +222,7 @@ U+0617Cæ…¼|U+0621A戚| U+0617Dæ…½|U+0621A戚| U+0617Eæ…¾|U+06B32欲| U+06187憇|U+061A9憩| -U+061DE懞|U+08499è’™| +U+061DE懞|U+061DE懞|U+08499è’™| U+0621E戞|U+0621B戛| U+0622F戯|U+0620Fæˆ| U+06239戹|U+05384厄| @@ -275,7 +270,6 @@ U+0671E朞|U+0671F期| U+06722朢|U+0671B望| U+0672E朮|U+0672F术| U+06736朶|U+06735朵| -U+06792æž’|U+04E2Bæ¡ | U+067B1æž±|U+053F0å°| U+067FA柺|U+062D0æ‹| U+067FB査|U+067E5查| @@ -287,8 +281,6 @@ U+06852æ¡’|U+06851æ¡‘| U+0686Eæ¡®|U+0676Fæ¯| U+0687A桺|U+067F3柳| U+068CA棊|U+068CB棋| -U+06900椀|U+07897碗| -U+06909椉|U+04E58乘| U+06917椗|U+07887碇| U+06936椶|U+068D5棕| U+06937椷|U+07F04缄| @@ -324,7 +316,6 @@ U+06DDBæ·›|U+06D59æµ™| U+06DE8æ·¨|U+051C0净| U+06DE9æ·©|U+051CC凌| U+06E67湧|U+06D8C涌| -U+06E7Bæ¹»|U+06DF3æ·³| U+06E7Cæ¹¼|U+06D85涅| U+06EBC溼|U+06E7F湿| U+06ED9æ»™|U+06C47汇| @@ -417,7 +408,6 @@ U+077C1çŸ|U+07785çž…| U+077C7矇|U+08499è’™|U+077C7矇| U+077D9矙|U+077B0çž°| U+07832ç ²|U+070AEç‚®| -U+07843硃|U+06731朱| U+07881ç¢|U+068CB棋| U+078AA碪|U+07827ç §| U+078DF磟|U+0788C碌| @@ -446,7 +436,7 @@ U+07AE2ç«¢|U+04FDFä¿Ÿ| U+07AEA竪|U+07AD6ç«–| U+07B5Eç­ž|U+07B56ç­–| U+07B69ç­©|U+07B52ç­’| -U+07B6Fç­¯|U+07BB8箸| +U+07B6Fç­¯|U+07BB8箸| U+07B87箇|U+04E2A个| U+07B92ç®’|U+05E1A帚| U+07BA0ç® |U+068F0棰| @@ -567,7 +557,6 @@ U+08842è¡‚|U+08844è¡„| U+08846衆|U+04F17ä¼—| U+08847衇|U+08109脉| U+0884Aè¡Š|U+08511蔑| -U+08856è¡–|U+05F04弄| U+0885Eè¡ž|U+0536Bå«| U+0887A衺|U+090AA邪| U+0889F袟|U+05E19帙| @@ -584,7 +573,6 @@ U+08988覈|U+06838æ ¸| U+0898A覊|U+07F81ç¾| U+08994覔|U+089C5觅| U+089A9覩|U+07779ç¹| -U+089D4觔|U+065A4æ–¤| U+089DDè§|U+062B5抵| U+08A17託|U+06258托|U+08BAC讬| U+08A3C証|U+08BC1è¯| @@ -649,7 +637,6 @@ U+09049é‰|U+04FA6侦| U+0904AéŠ|U+06E38游| U+09061é¡|U+06EAF溯| U+0906Fé¯|U+09041é| -U+09076é¶|U+07ED5绕| U+09156é…–|U+09E29鸩| U+09167é…§|U+0916Cé…¬| U+09183醃|U+0814Cè…Œ| @@ -663,6 +650,7 @@ U+091E6釦|U+06263扣| U+091EC釬|U+0710Aç„Š| U+09205鈅|U+094A5é’¥| U+0920E鈎|U+094A9é’©| +U+09244鉄|U+094C1é“| U+09246鉆|U+094BBé’»| U+09262鉢|U+094B5é’µ| U+092B2銲|U+0710Aç„Š| @@ -711,7 +699,6 @@ U+096A3隣|U+090BBé‚»| U+096B7éš·|U+096B6隶| U+0976Dé­|U+097E7韧| U+09771é±|U+097E7韧| -U+0978C鞌|U+0978Déž| U+097A6鞦|U+079CB秋|U+097A7鞧| U+097B5éžµ|U+0978Béž‹| U+097BEéž¾|U+09774é´| @@ -734,6 +721,7 @@ U+098F1飱|U+098E7飧| U+09901é¤|U+0996A饪| U+09908餈|U+07CCDç³| U+09918餘|U+09980馀|U+04F59ä½™| +U+09935餵|U+05582å–‚| U+09939餹|U+07CD6ç³–| U+0993B餻|U+07CD5糕| U+0993D餽|U+09988馈| @@ -742,22 +730,18 @@ U+09951饑|U+09965饥| U+0995Dé¥|U+0998Dé¦| U+099C8駈|U+09A71驱| U+099E1駡|U+09A82骂| -U+099EE駮|U+09A73驳| U+09A10é¨|U+09A8C验| U+09A23騣|U+09B03鬃| U+09A58驘|U+09AA1骡| U+09ABD骽|U+0817Fè…¿| U+09ABE骾|U+09CA0é² | U+09AC8髈|U+08180膀| -U+09AE3é«£|U+04EFF仿| U+09AE5é«¥|U+09AEF髯| -U+09AF4é«´|U+04F5Bä½›| U+09B00鬀|U+05243剃| U+09B09鬉|U+09B03鬃| U+09B26鬦|U+06597æ–—| U+09B28鬨|U+054C4å“„| U+09B2A鬪|U+06597æ–—| -U+09B2D鬭|U+06597æ–—| U+09B30鬰|U+090C1éƒ| U+09B8E鮎|U+09C87鲇| U+09B9Dé®|U+09C9E鲞| @@ -786,47 +770,25 @@ U+09EF4é»´|U+09709霉| U+09F03鼃|U+086D9è›™| U+09F07鼇|U+09CCC鳌| U+09F08鼈|U+09CD6é³–| -U+09F15鼕|U+051AC冬| +U+09F15鼕|U+0549Aå’š| U+09F63é½£|U+051FA出| U+09F67齧|U+0556Eå•®| U+09F69齩|U+054ACå’¬| -U+201EE𠇮|U+0547D命| -U+20302𠌂|U+04F1E伞| U+20542ð •‚|U+0518Då†| U+20545ð •…|U+0518Då†| -U+20587ð –‡|U+051A5冥| U+207B0ð ž°|U+0527F剿| -U+20ABE𠪾|U+05386历| -U+20D1Fð ´Ÿ|U+054A9å’©| -U+20EF3ð »³|U+055FDå—½| -U+21428ð¡¨|U+091CE野| U+21681ð¡š|U+05F0A弊| -U+21A18𡨘|U+051A4冤| U+21A25𡨥|U+05BC7寇| -U+21B36𡬶|U+05BFB寻| U+21ED5ð¡»•|U+05C81å²| -U+22B38𢬸|U+062EC括| -U+22B4Fð¢­|U+06363æ£| -U+22BA5𢮥|U+064CDæ“| -U+22DEC𢷬|U+06363æ£| U+2365C𣙜|U+069B7榷| U+242EE𤋮|U+07199熙| U+24A0Fð¤¨|U+07410ç| -U+24C1C𤰜|U+04EA9亩| U+24C48𤱈|U+04EA9亩| -U+24C4A𤱊|U+07559ç•™| U+24EA5𤺥|U+07629瘩| -U+25128𥄨|U+07785çž…| -U+25997𥦗|U+07A97窗| -U+25CBB𥲻|U+07E82纂| -U+260B3𦂳|U+07D27ç´§| -U+260C2𦃂|U+07D27ç´§| -U+26246𦉆|U+078B4碴| U+262B1𦊱|U+06302挂| U+26351ð¦‘|U+07F8C羌| U+26548𦕈|U+07707眇| -U+26A99𦪙|U+0447D䑽| U+26D4Fð¦µ|U+0846C葬| U+28F7B𨽻|U+096B6隶| U+294D0ð©“|U+08116è„–| -U+295D7ð©——|U+098D3飓| \ No newline at end of file +U+295D7ð©——|U+098D3飓| diff --git a/maintenance/language/zhtable/trad2simp_noconvert.manual b/maintenance/language/zhtable/trad2simp_noconvert.manual index 15192eaf..25be79e4 100644 --- a/maintenance/language/zhtable/trad2simp_noconvert.manual +++ b/maintenance/language/zhtable/trad2simp_noconvert.manual @@ -11,4 +11,8 @@ 幺 苹 厘 -ð«Ÿ \ No newline at end of file +ð«Ÿ +åž´ +å²™ +㳕 +ä“• diff --git a/maintenance/language/zhtable/tradphrases.manual b/maintenance/language/zhtable/tradphrases.manual index 4d313b42..b97ca6e4 100644 --- a/maintenance/language/zhtable/tradphrases.manual +++ b/maintenance/language/zhtable/tradphrases.manual @@ -230,7 +230,6 @@ ä¹¾æ‘æ²™ 乾暖 乾料 -乾敲梆å­ä¸è³£æ²¹ 乾支支 乾支剌 乾擦 @@ -259,10 +258,8 @@ ä¹¾å‰å‰ 乾刻版 乾芻 -幹人 乾產 乾喬 -夯幹 大目乾連 國之楨榦 唇乾 @@ -278,11 +275,12 @@ é¡›ä¹¾å€’å¤ å¼·å¹¹ 乾眼 -幹的åœç•¶ 井幹 乾巴 åŽä¹¾ 眼乾 +ç€ä¹¾ +白乾兒 肉絲麵 è–‘çµ² å覆 @@ -424,6 +422,7 @@ æŽ¡å€ æŽ¡é‹ æŽ¡é¢¨ +採血 官地為寀 寮寀 è”˜ç¶ @@ -488,7 +487,7 @@ 醜逆 é†œå² é†œè³Šç”Ÿ -é†œå©†å­ +真醜 出乖弄醜 出乖露醜 ç²åŒªå…¶é†œ @@ -506,7 +505,6 @@ 女丑 å°ä¸‘ 大丑 -ä¸‘å©†å­ ä¸‘æ—¦ 丑角 丑三 @@ -579,7 +577,7 @@ 髮屋 櫛髮工 鬒髮 -令人髮指 +人髮指 爆發指數 開發 剪其髮 @@ -682,6 +680,7 @@ å¾çˆ²ä¹‹ç¯„我馳驅 天地為範 範數 +範亭 丰采 丰標ä¸å‡¡ 丰神 @@ -702,6 +701,9 @@ è¤‡æµ å複製 複å°æ•¸ +複分解 +è¤‡åˆ #因複åˆè©žé »é é«˜æ–¼å¾©åˆ +複方 撥穀 æ‰æ“¬ç©€ç›œèŸ² ä¸ç©€ @@ -711,7 +713,6 @@ 脫穀機 å¹´ç©€ 礱穀機 -孤寡ä¸ç©€ 穀米 穀旦 穀圭 @@ -733,11 +734,9 @@ 臧穀亡羊 種穀 颳雪 -刮風下雪倒便宜 广部 -亂鬨ä¸éŽä¾† +亂鬨鬨 斗鬨 -亂鬨 開鬨 花鬨 鬨動 @@ -752,13 +751,15 @@ å—è¿´éµè·¯ 北迴線 北迴éµè·¯ -文匯報 -æ²³æµåŒ¯é›† -å“å½™ -åšå½™ +迴文詩 +迴文數 +迴文錦 +è¿´æ–‡è¯ +è¿´æ–‡åºåˆ— +è¿´æ–‡çµæ§‹ +迴文構詞 æ»™è± ä¼™é ­ -方几 ä¼å‡  高几 雪窗螢几 @@ -806,9 +807,8 @@ å°çºç¶¬è‹¥ ç•æ¹˜ ç•ç„¶ -澤滲ç•è€Œä¸‹é™ +æ»²ç• è£å‹¾å¤–連 -è£æ‰‹ 水里溪 二里頭 å¹´æ­·å² @@ -929,7 +929,6 @@ 擀麵 éŽæ°´éºµ 蕎麥麵 -巧婦åšä¸å¾—無麵餺飥 削麵 å°ç±³éºµ 壯麵 @@ -959,7 +958,15 @@ 辣麵 肉麵 燴麵 -雲åžéºµ +è¦éºµ +é›²åž +一碗麵 +åƒç¢—麵 +åƒéºµ +麵點師 +麵點〠+ã€éºµé»ž +éºµè£½å“ å†·é¢ç›¸ ç³žç©¢è¡Šé¢ åƒ•åƒ• @@ -1085,11 +1092,21 @@ 瀋河 瀋水 瀋州 +瀋北 +ç€‹å‰ ç€‹å±±ç·š -瀋å‰ç·š -墨沈 +瀋山éµè·¯ 瀋海éµè·¯ +瀋海高速 +瀋丹線 +瀋丹éµè·¯ +ç€‹ä¸¹å®¢é‹ +瀋大線 +瀋大éµè·¯ +瀋大高速 +ç§¦ç€‹å®¢é‹ é¼ç€‹ +京瀋 胜肽 èƒœéµ é›™èƒœé¡ž @@ -1115,13 +1132,16 @@ 鬆元音 鬆喉 鬆化 +很鬆 +寬鬆鬆 +蓬鬆鬆 +輕鬆鬆 +鬆鬆地 囉囉囌囌 囉囌 骨罈 èœç½ˆ 罈騞 -餵驢 -剪牡丹喂牛 鹹粥 鹹食 鹹潟 @@ -1129,6 +1149,8 @@ 鹽打怎麼鹹 鹹派 鹹批 +鹹濕 +鹹豬 錦綉花園 籲天 勃鬱 @@ -1209,6 +1231,10 @@ 正官庄 冬山庄 æ¾å±±åº„ +香山庄 +ä¸­åº„å­ +田庄英雄 +本庄 厂部 è¡é‡ è¡è»Š @@ -1272,7 +1298,6 @@ é¾çœ¼ä¹¾ 乾乾淨淨 ä¹¾æŸ´çƒˆç« -乾乾兒的 æ¡‘ä¹¾ 撈乾 æ­ä¹¾é‹ª @@ -1282,20 +1307,56 @@ 幹事 幹什麼 幹細胞 -é ­å…’å¹¹ -é…水幹管 -ç¹å¹ƒé£„井幹 -站乾岸兒 -秋陰入井幹 -沒梢幹 +樹幹 +å£ç‡¥å”‡ä¹¾ +舌乾唇焦 +ä¸é£Ÿä¹¾è…Š +ä¸ä¹¾ä¸æ·¨ +ä¹¾é‡ +蒸乾 +乾物 +乾食 +ä¹¾é‹ +自乾五 +ä¸ä¹¾è†  +è€ç™½ä¹¾ +ä¹¾å§ +乾紅葡è„é…’ +乾白葡è„é…’ 楨幹 -據榦而窺井底 -井榦摧敗 -æ°ç‰¹ +新幹縣 +誰幹的 +他幹的 +們幹的 +人幹的 +幹的事 +幹的好事 +得力幹將 +黑幹將 +的幹將 +幹大事 +å°ç€å¹¹ +怎麼幹 +這麼幹 +幹這 +幹仗 æŽé€£æ° -周æ°å€« +å‘¨æ° æ°å€« -å§œæ–‡æ° +æ–‡æ° +æ°å¨çˆ¾ +é»ƒè©©æ° +ä½•æ° +ç‹„å¿—æ° +伊é©æ° +å¼µæ° +å­«æ° +èƒ¡æ° +é™³æ° +é»ƒæ° +è¬æ° +æ­£æ° +æŸ³æ–Œæ° ç¨œé¡ ç¨œè§’ ç¨œå° @@ -1351,35 +1412,11 @@ å¶éŸ» å¶éŸ³ å¶æ­å¼˜ -æ–¼1 -æ–¼2 -æ–¼3 -æ–¼4 -æ–¼5 -æ–¼6 -æ–¼7 -æ–¼8 -æ–¼9 -æ–¼0 -於一 -於二 -於三 -於四 -於五 -於六 -於七 -於八 -æ–¼ä¹ -æ–¼å -æ–¼åŠ -於夫羅 -æ–¼æ¢¨è¯ ç½®æ–¼ 散於 æ’­æ–¼ 國於 æ•—æ–¼ -於一役 畢於 畢業於 寒於 @@ -1387,30 +1424,16 @@ 拘於 æ’æ–¼ 中於 -於市 -於野 æ•æ–¼ è½æ–¼ 短於 æˆæ–¼ 樊於期 æ·¡æ–¼ -於陸 -於密 -於盡 ç¦æ–¼ 格於 猛於 施於 -於牆 -於物 -於己 -於你 -於我 -於他 -於她 -於它 -於祂 拒人於 æ‹’æ–¼ æ½°æ–¼ @@ -1418,8 +1441,6 @@ 相於 形於 åŠæ–¼ -於始 -於終 詢於 美於 醜於 @@ -1429,40 +1450,16 @@ 弱於 差於 劣於 -於美 -於醜 -於好 -æ–¼å -於強 -於弱 -於差 -於劣 -於垂 染指於 -æ–¼ç« -å­˜å一於åƒç™¾ 存於 -於勤 隱於 è—æ–¼ åš´æ–¼ 寬於 -於幕 給於 -於穆 -於呼哀哉 -於時 -於該 å±æ–¼ -æ–¼ä¼ -於何 -於家 -於國 -於潛縣 -於焉 於徵 離於 -於畢 麗於 下於 亞於 @@ -1470,30 +1467,18 @@ 屑於 絕於 致於 -於行 éœæ–¼ 任教於 教於 自於 來於 附於 -於人 -於世 阻於 -於民 -於盲 -於色 囿於 ç›´æ–¼ 建於 都於 -於農 -於樂 -æ–¼å‰ å½¹æ–¼ -於心 -於法 -於事 助於 害於 ææ–¼ @@ -1510,17 +1495,14 @@ 身於 足於 溢於 -於衷 ç•æ–¼ 視於 è¡·æ–¼ 狃於 疲於 通於 -於途 è€æ–¼ 耿於 -於懷 æœæ–¼ 臻於 匿於 @@ -1561,6 +1543,7 @@ 筑邦 筑陽 å—ç­‘ +悲筑 批准的 核准的 為準 @@ -1804,6 +1787,13 @@ 舊錶 å°é˜ é˜éŸ¿ +èˆ¹é˜ +é›»æ³¢é˜ +çŸ³é˜ +è‡ªç”±é˜ +é˜èžº +é˜èŠ± +é¦¬å¾·é˜ è¨ˆæ™‚éŒ¶ 防水錶 顯示表格 @@ -1847,6 +1837,7 @@ éŠç‰§ éŠè•© éŠåˆƒ +éŠç¾Žå­¸å‹™ 黑奴籲天錄 æž—éƒæ–¹ 讚歌 @@ -1920,20 +1911,15 @@ 影相弔 哀弔 å”å¼” -於水 安於 è¿«æ–¼ ç½·æ–¼ 蹪於 -æ–¼æ• -æ–¼éŽ ç”šæ–¼ 等於 定於 利於 å°æ–¼ -推舟於陸 -退è—於密 歸於 難於 移ç¦æ–¼ @@ -1949,19 +1935,13 @@ 基於 急於 å«ç¦æ–¼ -借è½æ–¼è¾ 見於 é‘’æ–¼ -謹於心 -求é“於盲 始於 -æ–¼è— å‡ºæ–¼ 輕於 -行百里者åŠæ–¼ä¹å 幸於 怠於 -詢於芻蕘 止於 至於 拙於 @@ -1974,40 +1954,46 @@ 屬於 浮於 在於 -åŽè–ªæ–¼ç« 易於 精於 由於 -於此 -燕巢於幕 -æ–¼èŸ -於乎 -於戲 -於邑 補於 ä½æ–¼ -於今 -於是 -於是乎 -於斯 寓於 -月離於畢 -月麗於箕 æºæ–¼ 且於 é•·æ–¼ ç¾æ–¼ 較於 -於之 分布於 -分散於 +散於 優於 æ—©æ–¼ 晚於 æ„Ÿæ–¼ +用於 +處於 +助於 +便於 +戰於 +葬於 +å›°æ–¼ +é©æ–¼ +苦於 +è½æ–¼ +å–決於 +ç€çœ¼æ–¼ é¬¼è°·å­ è°·å­æ•¬ æ´ªè°·å­ +西米谷 +世田谷 +è–馬爾谷日 +æ¾€è°·å€ +開山闢谷 +山谷 #分詞用 +æºè°· +曼谷 于美人 ç·Šç·» 曰云 @@ -2095,11 +2081,22 @@ 爭奇鬥豔 使其鬥 鬥地主 +鈎心鬥角 +é¬¥åŠ +激鬥 +政鬥 +é¬¥ç¸ +é¬¥é¾ +鬥勇 +鬥狗 +é¬¥è› +鬥垮 +鬥敗 +鬥戰 石樑 木樑 è—æ­·å² é é¢ -æ–¹é¢ é¢æ¢ç›® 大讚 唄讚 @@ -2110,6 +2107,8 @@ 詩讚 賞讚 讚唄 +點讚 +點個讚 飛紮 紮裹 紮腳 @@ -2167,9 +2166,7 @@ å¾µå 徵令 本徵 -èˆ¹é˜ é»ƒéˆºç­‘ -香山庄 當準 憑準 沒準 @@ -2238,6 +2235,8 @@ 趙治勳 æ®­å± æœ‰æ –å· +栗栖溪 +鳥栖市 兇惡 兇狠 兇猛 @@ -2272,7 +2271,6 @@ 鋼之éŠé‡‘術師 索馬里 范登堡 -世田谷 製漿 ä¸‰çµ±æ­·å² ä¼Šæ–¯è˜­æ•™æ­·å² @@ -2352,8 +2350,6 @@ æ¯é†œ ä¸€é½£å­ é½£å…’ -çƒä¸²äº†çš® -å ä¾¿å®œçš„æ˜¯çƒ ä¸°æ¨™ 丰姿 丰韻 @@ -2366,8 +2362,6 @@ 鼕鼕鼓 剷頭 剷刈 -å£ç‡¥å”‡ä¹¾ -舌乾唇焦 花è´è©žé¸ 渾箇 箇中原因 @@ -2376,12 +2370,13 @@ 箇中好手 箇中強手 箇中滋味 -箇中奧秘 -箇中奧妙 +箇中奧 +箇中é“ç† ç®‡ä¸­çŽ„æ©Ÿ -ç®‡ä¸­æ¶ˆæ¯ -箇中資訊 -ç®‡ä¸­è¨Šæ¯ +箇中翹楚 +,箇中 +。箇中 +的箇中 å°è¡¨é” å°è¡¨ç¾ å°è¡¨æ¼” @@ -2406,17 +2401,6 @@ ä¸å ç®— ä¸å¥½å¹²æ¶‰ ä¸å¥½å¹²é  -ä¸å¹²é  -ä¸å¹²æ¶‰ -ä¸å¹²ä¼‘ -ä¸å¹²çŠ¯ -ä¸å¹²æ“¾ -ä¸å¹²ä½  -ä¸å¹²æˆ‘ -ä¸å¹²ä»– -ä¸å¹²å¥¹ -ä¸å¹²å®ƒ -ä¸å¹²äº‹ ä¸æ–—膽 ä¸æ¯åª ä¸é‡‡è² @@ -2425,15 +2409,10 @@ ä¹‹ä¸€åª ä¹‹äºŒåª ä¹‹å…«ä¹åª -也斗了膽 -事情干脆 -事都干脆 二åªå¾— 亦云 人云 以自制 -們斗了膽 -你斗了膽 å…¶ä¸€åª å…¶äºŒåª å…¶å…«ä¹åª @@ -2506,6 +2485,9 @@ å°é¢¨ç©©å¥ ç©©å¥çš„å°é¢¨ å°é¢¨çŽ +電視å°é¢¨ +足çƒå° +網çƒå° åˆåºœä¸Š 後é¢åº— å‘往常 @@ -2524,11 +2506,17 @@ 好斗篷 好斗膽 好斗蓬 +墨斗 å°å‡  尸利 尸祿 尸臣 尸鳩 +尸佼 +å°¸å­ +å°¸ç¾…ç²¾èˆ +毗婆尸佛 +尸棄佛 å·²å åœ å·²å ç®— 并迭 @@ -2604,7 +2592,6 @@ ç²¾åˆ¶ä½ ç²¾åˆ¶æœ ç¶“æœ‰äº‘ -給我干脆 編制法 能干休 能干戈 @@ -2672,10 +2659,11 @@ é¢åŒ…è£ é¢åŒ…裹 é¢åŒ…èµ· +é¢åŒ…ç€ +é¢åŒ…è‘— é¢åº—鋪 é¢ç²‰ç¢Ž é¢ç²‰ç´… -é¢é£Ÿéºµ é¢é£Ÿé£¯ 顛顛仆仆 高干擾 @@ -2684,13 +2672,14 @@ 黃金表 天åŽå®® 一åŠéŒ¢ -ä¸é£Ÿä¹¾è…Š 傳ä½äºŽå››å¤ªå­ 儉确之教 党懷英 八蜡 憑几 å—宮适 +洪适 +æŽé€‚ 大蜡 å­äº‘ 分å­é›² @@ -2702,7 +2691,6 @@ 折å­æˆ² æ¤è‚®æ‹ŠèƒŒ 文采éƒéƒ -洪适 腊之以為餌 腊毒 蜡月 @@ -2711,12 +2699,14 @@ 宜云 è²´ä»· éƒéƒè²è² -ä¸ä¹¾ä¸æ·¨ 生發生 å¿…é ˆ 須根據 ·范 å‰‹å‰ +休克期 +克期間 +溫洛克期 科尼亞克期 馬斯垂克期 滿拚自盡 @@ -2726,6 +2716,7 @@ 拚絕 æˆæ–¼æ€ 單單於 +å單於 ç©æ¾± æ¾±ç© æ¾±åŒ—ç‰‡ @@ -2765,14 +2756,9 @@ 范文藤 范文虎 范文照 -ä¹¾é‡ -鈎心鬥角 -å…¨é¢åŒ…åœ -å…¨é¢åŒ…裹 機械系 體系 å¿ƒç† -複分解 é¹°éµ° 天地志狼 薴烯 @@ -2916,7 +2902,6 @@ äºŽç¦ äºŽæ•ä¸­ 註:# ä¸ä½œâ€œæ³¨ï¼šâ€ -å‘†å‘†ç¸ åŠƒç‚º# ä¸ä½œâ€œåˆ’為†併為一體 併為一家 @@ -2964,6 +2949,7 @@ 這裡 中文裡 洞裡 +洞里薩 界裡 眼ç›è£¡ 百科裡 @@ -3060,16 +3046,31 @@ 山裡有 棉裡 語裡 +言裡 +境裡 +境里程 +中境里 方法裡 語法裡 看法裡 憲法裡 用法裡 法裡, +框裡 +碗裡 +電梯裡 +網站裡 +行家裡手 +雲裡霧裡 +城市裡 +都市裡 +市裡的 +個月裡 +月裡來 +分é˜è£¡ +å°æ™‚裡 首發 夸脫 -誰幹的 -é˜èžº 風采 代碼表 編碼表 @@ -3089,14 +3090,13 @@ 有åªç”¨ 葉å¶ç¹ 胡å­æ˜‚ +胡å­å¬° 包括 特别致 分别致 韶山沖 于丹 -于樂 于冕 -äºŽè» äºŽå‰ äºŽå … 于姓 @@ -3118,6 +3118,7 @@ äºŽé– äºŽå‹’ 于格 +于飛 于ä»æ³° 于會泳 于å‰åœ‹ @@ -3213,7 +3214,6 @@ 故云 強制作用 é¬±å— -西米谷 鬱林 é¥‘è’ å…å¾µ @@ -3233,6 +3233,8 @@ æ­ŒåŽ å½±åŽ å°åŽ +查å°å¾Œ +解å°å¾Œ å¤ªåŽ å¤©åŽ å‘‚åŽ @@ -3273,8 +3275,10 @@ 馬格里布 伊里布 劃入 -ä¸­åº„å­ åŸ”è£ç¤¾ +手è£åŠ +è£æ°´éŽ® +è£é‹æ²³ 懸掛 僱傭 å››æ¨å…­å…¥ @@ -3288,13 +3292,8 @@ 莜麵 ç°¡ç­‘ç¿Ž 楊雅筑 -é­”æ°åº§ -æ°å¨çˆ¾éŸ³æ¨‚ å½­äºŽæ™ -å°¸ç¾…ç²¾èˆ é€²åˆ¶ -é»ƒè©©æ° -ä½•æ° åŠ‰ä½³æ€œ 于å°æƒ  于耘婕 @@ -3309,7 +3308,6 @@ ç†Šæ° åœäº‘å‰ é»Žå‰é›² -于飛島 代表 水無怜奈 è³­åŽ @@ -3318,12 +3316,12 @@ åŠ‰èŠ¸åŽ è¬è¯åŽ è¶™æƒ åŽ +æ˜­æƒ åŽ +å‘¨æƒ åŽ +å­æƒ åŽ 趙å¨åŽ è–åŽ é™³æœ‰åŽ -許虬 -ç‹„å¿—æ° -伊é©æ° äºŽå† è¯ äºŽé›²é¶´ 于忠肅集 @@ -3333,12 +3331,13 @@ äºŽå¤©é¾ äºŽè¬¹ 于榮光 -é›»æ³¢é˜ æŽ›å -å•Ÿç™¼å¼ èˆžåŽ ç”„åŽ éƒ­åŽ +é«˜åŽ +å‡é«˜å¾Œ +æ高後 0å¹´ # å”助分詞 1å¹´ 2å¹´ @@ -3403,11 +3402,13 @@ æ¨—é‡Œå­ ä¼Šé”é‡Œå­ æ¿±ç”°é‡Œä½³å­ +王田里 +å°äº•é‡Œ +西井里 å°ŠåŽ å¶å¿—ç©— å¶ä¸äºŒå­ äºŽç«‹æˆ -å±±è°·é“ æŽå¿—å–œ 于欣 äºŽå°‘ä¿ @@ -3421,15 +3422,14 @@ 于å†æ¸… 茅于軾 å¼µæ¨‚äºŽå¼µå¾ -鮮于樞 +鮮于 +æœé®®æ–¼ 于寶軒 于震 æ–¼éœ‡å‰ -æ–¼éœ‡åŽ +於震後 於震中 固定制 -毗婆尸佛 -尸棄佛 划船 划ä¸ä¾† 划拳 @@ -3438,12 +3438,16 @@ 划艇 划行 划算 +划ç€èˆ¹ +划ç€ç«¹ç­ +划ç€ç¨æœ¨èˆŸ 總è£åˆ¶ 仲è£åˆ¶ ç¨è£åˆ¶ æ’生 +æ’基 +æ’隆 嚴云農 -手è£åŠ 伊æ±æ€œ 衛後莊公 並行 @@ -3454,24 +3458,30 @@ 余力為 葉å¶ç´ 幾個 -æ¾€è°·å€ ä½µç™¼ç—‡ 併發é‡ç—‡ ä½µç™¼æ¨¡å¼ ä½µç™¼åž‹æ¨¡å¼ +å•Ÿç™¼å¼ +é€£ç™¼å¼ è‰²é•·é«® é ­é•·é«® çš„é•·é«® +黑長髮 +留長髮 +髮披肩 +é«®åŠè…° +飄髮自由女神 後天 學家 游離 ç´…åŽå‡èªª æ›¸é¢ ä¸åª +湧水 高涌泉 -王田里 +涌水塘 åŽå§“ -田庄英雄 計劃 抑制劑 党姓 @@ -3517,10 +3527,6 @@ 功勳 èŽè™Ž ç£¨èŽ -é¬¥åŠ -激鬥 -政鬥 -沈海蓉 æ–¹å¿—æ’ å¤è¹Ÿ 瀋撫 @@ -3528,21 +3534,21 @@ é¨°è¡ æ²–å¤© è±è‡º +煙臺 陽穀 -蒸乾 太醜 御製 åˆä½µ è–人曆 -电影後 +電影後 å°ç‚ºåŽ 皮托管 白é¢åŒ…é’天 å¤©ç¥žä¹‹åŽ -栗栖溪 羅馬曆 ç¾…é¦¬æ­·å² ç¾…é¦¬æ­·ä»£ +曆數書 你誇 誇你 誇我 @@ -3573,8 +3579,7 @@ 自誇 誇稱 誇讚 -更加注 -繼承制 +讚嘆 布穀鳥 黎克特制 筆桿 @@ -3594,7 +3599,6 @@ 墨瀋 米瀋 拾瀋 -乾物 姦污 託兒 åŒäººèªŒ @@ -3602,7 +3606,6 @@ è¡ç€ 確係 乃係 -開山辟谷 穀祿 製衣 巨製 @@ -3643,12 +3646,9 @@ 錦滷 汤滷 浸滷 -çŸ³é˜ -石é˜å±± 花葯 èšè‘¯é›„è•Š éºè¹Ÿ -開山闢谷 å—僱 僱請 僱車 @@ -3690,6 +3690,7 @@ 辦公檯 檯é¢ä¸Š ä¸Šæª¯é¢ +檯é¢åŒ– 牴觸 牴牾 角牴 @@ -3698,7 +3699,6 @@ å«©è–‘ 酸薑 薑啤 -鹹濕 騰湧 è‰è“† 竹蓆 @@ -3706,9 +3706,13 @@ 涼蓆 ç˜è“† 麻將蓆 -è£æ°´éŽ® 被廢後 蒸製 +烹製 +醃製 +和製漢 +壓製機 +壓製出 體徵 綜åˆå¾µ ä»·å· @@ -3777,6 +3781,7 @@ 被繫上 繫上, 繫上。 +繫舟 亂發生 亂發脾氣 ç§€ç™¼æ‘ @@ -3786,4 +3791,30 @@ ç§€ç™¼ç¾ ç§€ç™¼ç”Ÿ 秀發起 -秀發展 \ No newline at end of file +秀發展 +縮短發 +簡短發 +短發生 +å¤äººæœ‰äº‘ +昔人有云 +云敞 +喂, +å–‚ï¼ +å–‚å–² +喲喂 +å•Šå–‚ +呵喂 +呦喂 +æ°´è¡¨é¢ +表é¢åŒ… +æ¾å£éŽ® +沙瑯 +çºç‘¯ +èœé¤š +æ¢å•“超 +æ”¹åˆ¶æˆ +çŽ‹æ·»ç¯ +腌臢 +風颳 +颳大風 +黃白術 diff --git a/maintenance/language/zhtable/tradphrases_exclude.manual b/maintenance/language/zhtable/tradphrases_exclude.manual index 4a3613b6..1f8a6e06 100644 --- a/maintenance/language/zhtable/tradphrases_exclude.manual +++ b/maintenance/language/zhtable/tradphrases_exclude.manual @@ -662,4 +662,45 @@ è¤‡æµ è¤‡ç•ç 起複 -餘 \ No newline at end of file +餘 +æ—‹ä¹¾è½‰å¤ +ä¹¾å¤ +ä¹¾å¦ +乾隆 +乾掉 +讚嘆ä¸å·² +讚歎 +好乾 +加註 +幹將 +鼕 +彙報 +彙整 +彙編 +彙集 +å¿«å¹¹ +å¿«ä¹¾ +瀋海 +è¿´æ–‡ +è¿´å‘ +迴音 +美製 +éºµç° +麵價 +承製 +樹榦 +白乾 +白干兒 +市裡 +于飛 +髮指 +鬆鬆 +于是 +于七 +于今 +曆數 +發矇 +ä¸å¹¹ +作姦犯科 +æ¸¸ç‰§æ°‘æ— +ç©€é“ diff --git a/maintenance/migrateFileRepoLayout.php b/maintenance/migrateFileRepoLayout.php new file mode 100644 index 00000000..78587ce5 --- /dev/null +++ b/maintenance/migrateFileRepoLayout.php @@ -0,0 +1,232 @@ +mDescription = "Copy files in repo to a different layout."; + $this->addOption( 'oldlayout', "Old layout; one of 'name' or 'sha1'", true, true ); + $this->addOption( 'newlayout', "New layout; one of 'name' or 'sha1'", true, true ); + $this->addOption( 'since', "Copy only files from after this timestamp", false, true ); + $this->setBatchSize( 50 ); + } + + public function execute() { + $oldLayout = $this->getOption( 'oldlayout' ); + if ( !in_array( $oldLayout, array( 'name', 'sha1' ) ) ) { + $this->error( "Invalid old layout.", 1 ); + } + $newLayout = $this->getOption( 'newlayout' ); + if ( !in_array( $newLayout, array( 'name', 'sha1' ) ) ) { + $this->error( "Invalid new layout.", 1 ); + } + $since = $this->getOption( 'since' ); + + $repo = $this->getRepo(); + + $be = $repo->getBackend(); + if ( $be instanceof FileBackendDBRepoWrapper ) { + $be = $be->getInternalBackend(); // avoid path translations for this script + } + + $dbw = $repo->getMasterDB(); + + $origBase = $be->getContainerStoragePath( "{$repo->getName()}-original" ); + $startTime = wfTimestampNow(); + + // Do current and archived versions... + $conds = array(); + if ( $since ) { + $conds[] = 'img_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $since ) ); + } + + $batch = array(); + $lastName = ''; + do { + $res = $dbw->select( 'image', array( 'img_name', 'img_sha1' ), + array_merge( array( 'img_name > ' . $dbw->addQuotes( $lastName ) ), $conds ), + __METHOD__, + array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'img_name' ) + ); + + foreach ( $res as $row ) { + $lastName = $row->img_name; + $sha1 = $row->img_sha1; + if ( !strlen( $sha1 ) ) { + $this->error( "Image SHA-1 not set for {$row->img_name}." ); + } else { + $file = $repo->newFile( $row->img_name ); + + if ( $oldLayout === 'sha1' ) { + $spath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}"; + } else { + $spath = $file->getPath(); + } + + if ( $newLayout === 'sha1' ) { + $dpath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}"; + } else { + $dpath = $file->getPath(); + } + + $status = $be->prepare( array( 'dir' => dirname( $dpath ) ) ); + if ( !$status->isOK() ) { + $this->error( print_r( $status->getErrorsArray(), true ) ); + } + + $batch[] = array( 'op' => 'copy', 'overwrite' => true, + 'src' => $spath, 'dst' => $dpath, 'img' => $row->img_name ); + } + + foreach ( $file->getHistory() as $ofile ) { + $sha1 = $ofile->getSha1(); + if ( !strlen( $sha1 ) ) { + $this->error( "Image SHA-1 not set for {$ofile->getArchiveName()}." ); + continue; + } + + if ( $oldLayout === 'sha1' ) { + $spath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}"; + } elseif ( $ofile->isDeleted( File::DELETED_FILE ) ) { + $spath = $be->getContainerStoragePath( "{$repo->getName()}-deleted" ) . + '/' . $repo->getDeletedHashPath( $sha1 ) . + $sha1 . '.' . $ofile->getExtension(); + } else { + $spath = $ofile->getPath(); + } + + if ( $newLayout === 'sha1' ) { + $dpath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}"; + } else { + $dpath = $ofile->getPath(); + } + + $status = $be->prepare( array( 'dir' => dirname( $dpath ) ) ); + if ( !$status->isOK() ) { + $this->error( print_r( $status->getErrorsArray(), true ) ); + } + $batch[] = array( 'op' => 'copy', 'overwrite' => true, + 'src' => $spath, 'dst' => $dpath, 'img' => $ofile->getArchiveName() ); + } + + if ( count( $batch ) >= $this->mBatchSize ) { + $this->runBatch( $batch, $be ); + $batch = array(); + } + } + } while ( $res->numRows() ); + + if ( count( $batch ) ) { + $this->runBatch( $batch, $be ); + } + + // Do deleted versions... + $conds = array(); + if ( $since ) { + $conds[] = 'fa_deleted_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $since ) ); + } + + $batch = array(); + $lastId = 0; + do { + $res = $dbw->select( 'filearchive', array( 'fa_storage_key', 'fa_id', 'fa_name' ), + array_merge( array( 'fa_id > ' . $dbw->addQuotes( $lastId ) ), $conds ), + __METHOD__, + array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'fa_id' ) + ); + + foreach ( $res as $row ) { + $lastId = $row->fa_id; + $sha1Key = $row->fa_storage_key; + if ( !strlen( $sha1Key ) ) { + $this->error( "Image SHA-1 not set for file #{$row->fa_id} (deleted)." ); + continue; + } + $sha1 = substr( $sha1Key, 0, strpos( $sha1Key, '.' ) ); + + if ( $oldLayout === 'sha1' ) { + $spath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}"; + } else { + $spath = $be->getContainerStoragePath( "{$repo->getName()}-deleted" ) . + '/' . $repo->getDeletedHashPath( $sha1Key ) . $sha1Key; + } + + if ( $newLayout === 'sha1' ) { + $dpath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}"; + } else { + $dpath = $be->getContainerStoragePath( "{$repo->getName()}-deleted" ) . + '/' . $repo->getDeletedHashPath( $sha1Key ) . $sha1Key; + } + + $status = $be->prepare( array( 'dir' => dirname( $dpath ) ) ); + if ( !$status->isOK() ) { + $this->error( print_r( $status->getErrorsArray(), true ) ); + } + + $batch[] = array( 'op' => 'copy', 'src' => $spath, 'dst' => $dpath, + 'overwriteSame' => true, 'img' => "(ID {$row->fa_id}) {$row->fa_name}" ); + + if ( count( $batch ) >= $this->mBatchSize ) { + $this->runBatch( $batch, $be ); + $batch = array(); + } + } + } while ( $res->numRows() ); + + if ( count( $batch ) ) { + $this->runBatch( $batch, $be ); + } + + $this->output( "Done (started $startTime)\n" ); + } + + protected function getRepo() { + return RepoGroup::singleton()->getLocalRepo(); + } + + protected function runBatch( array $ops, FileBackend $be ) { + $this->output( "Migrating file batch:\n" ); + foreach ( $ops as $op ) { + $this->output( "\"{$op['img']}\" (dest: {$op['dst']})\n" ); + } + + $status = $be->doOperations( $ops ); + if ( !$status->isOK() ) { + $this->output( print_r( $status->getErrorsArray(), true ) ); + } + + $this->output( "Batch done\n\n" ); + } +} + +$maintClass = 'MigrateFileRepoLayout'; +require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/maintenance/namespaceDupes.php b/maintenance/namespaceDupes.php index 96e01fe4..088f6776 100644 --- a/maintenance/namespaceDupes.php +++ b/maintenance/namespaceDupes.php @@ -39,9 +39,12 @@ class NamespaceConflictChecker extends Maintenance { */ protected $db; - private $resolvableCount = 0; + private $resolvablePages = 0; private $totalPages = 0; + private $resolvableLinks = 0; + private $totalLinks = 0; + public function __construct() { parent::__construct(); $this->mDescription = ""; @@ -172,7 +175,43 @@ class NamespaceConflictChecker extends Maintenance { } $this->output( "{$this->totalPages} pages to fix, " . - "{$this->resolvableCount} were resolvable.\n" ); + "{$this->resolvablePages} were resolvable.\n\n" ); + + foreach ( $spaces as $name => $ns ) { + if ( $ns != 0 ) { + // Fix up link destinations for non-interwiki links only. + // + // For example if a page has [[Foo:Bar]] and then a Foo namespace + // is introduced, pagelinks needs to be updated to have + // page_namespace = NS_FOO. + // + // If instead an interwiki prefix was introduced called "Foo", + // the link should instead be moved to the iwlinks table. If a new + // language is introduced called "Foo", or if there is a pagelink + // [[fr:Bar]] when interlanguage magic links are turned on, the + // link would have to be moved to the langlinks table. Let's put + // those cases in the too-hard basket for now. The consequences are + // not especially severe. + // + // @fixme Handle interwiki links, and pagelinks to Category:, File: + // which probably need reparsing. + + $this->checkLinkTable( 'pagelinks', 'pl', $ns, $name, $options ); + $this->checkLinkTable( 'templatelinks', 'tl', $ns, $name, $options ); + + // The redirect table has interwiki links randomly mixed in, we + // need to filter those out. For example [[w:Foo:Bar]] would + // have rd_interwiki=w and rd_namespace=0, which would match the + // query for a conflicting namespace "Foo" if filtering wasn't done. + $this->checkLinkTable( 'redirect', 'rd', $ns, $name, $options, + array( 'rd_interwiki' => null ) ); + $this->checkLinkTable( 'redirect', 'rd', $ns, $name, $options, + array( 'rd_interwiki' => '' ) ); + } + } + + $this->output( "{$this->totalLinks} links to fix, " . + "{$this->resolvableLinks} were resolvable.\n" ); return $ok; } @@ -215,7 +254,8 @@ class NamespaceConflictChecker extends Maintenance { // Find the new title and determine the action to take - $newTitle = $this->getDestinationTitle( $ns, $name, $row, $options ); + $newTitle = $this->getDestinationTitle( $ns, $name, + $row->page_namespace, $row->page_title, $options ); $logStatus = false; if ( !$newTitle ) { $logStatus = 'invalid title'; @@ -271,26 +311,101 @@ class NamespaceConflictChecker extends Maintenance { $newTitle->getPrefixedDBkey() . " (merge)$dryRunNote\n" ); if ( $options['fix'] ) { - $pageOK = $this->mergePage( $row->page_id, $newTitle ); + $pageOK = $this->mergePage( $row, $newTitle ); } break; } if ( $pageOK ) { - $this->resolvableCount++; + $this->resolvablePages++; } else { $ok = false; } } - // @fixme Also needs to do like self::getTargetList() on the - // *_namespace and *_title fields of pagelinks, templatelinks, and - // redirects, and schedule a LinksUpdate job or similar for each found - // *_from. - return $ok; } + /** + * Check and repair the destination fields in a link table + * @param string $table The link table name + * @param string $fieldPrefix The field prefix in the link table + * @param int $ns Destination namespace id + * @param string $name + * @param array $options Associative array of validated command-line options + * @param array $extraConds Extra conditions for the SQL query + */ + private function checkLinkTable( $table, $fieldPrefix, $ns, $name, $options, + $extraConds = array() + ) { + $batchConds = array(); + $fromField = "{$fieldPrefix}_from"; + $namespaceField = "{$fieldPrefix}_namespace"; + $titleField = "{$fieldPrefix}_title"; + $batchSize = 500; + while ( true ) { + $res = $this->db->select( + $table, + array( $fromField, $namespaceField, $titleField ), + array_merge( $batchConds, $extraConds, array( + $namespaceField => 0, + $titleField . $this->db->buildLike( "$name:", $this->db->anyString() ) + ) ), + __METHOD__, + array( + 'ORDER BY' => array( $titleField, $fromField ), + 'LIMIT' => $batchSize + ) + ); + + if ( $res->numRows() == 0 ) { + break; + } + foreach ( $res as $row ) { + $logTitle = "from={$row->$fromField} ns={$row->$namespaceField} " . + "dbk={$row->$titleField}"; + $destTitle = $this->getDestinationTitle( $ns, $name, + $row->$namespaceField, $row->$titleField, $options ); + $this->totalLinks++; + if ( !$destTitle ) { + $this->output( "$table $logTitle *** INVALID\n" ); + continue; + } + $this->resolvableLinks++; + if ( !$options['fix'] ) { + $this->output( "$table $logTitle -> " . + $destTitle->getPrefixedDBkey() . " DRY RUN\n" ); + continue; + } + + $this->db->update( $table, + // SET + array( + $namespaceField => $destTitle->getNamespace(), + $titleField => $destTitle->getDBkey() + ), + // WHERE + array( + $namespaceField => 0, + $titleField => $row->$titleField, + $fromField => $row->$fromField + ), + __METHOD__ + ); + $this->output( "$table $logTitle -> " . + $destTitle->getPrefixedDBkey() . "\n" ); + } + $encLastTitle = $this->db->addQuotes( $row->$titleField ); + $encLastFrom = $this->db->addQuotes( $row->$fromField ); + + $batchConds = array( + "$titleField > $encLastTitle " . + "OR ($titleField = $encLastTitle AND $fromField > $encLastFrom)" ); + + wfWaitForSlaves(); + } + } + /** * Move the given pseudo-namespace, either replacing the colon with a hyphen * (useful for pseudo-namespaces that conflict with interwiki links) or move @@ -338,21 +453,22 @@ class NamespaceConflictChecker extends Maintenance { } /** - * Get the preferred destination title for a given target page row. + * Get the preferred destination title for a given target page. * @param integer $ns The destination namespace ID * @param string $name The conflicting prefix - * @param stdClass $row + * @param integer $sourceNs The source namespace + * @param integer $sourceDbk The source DB key (i.e. page_title) * @param array $options Associative array of validated command-line options * @return Title|false */ - private function getDestinationTitle( $ns, $name, $row, $options ) { - $dbk = substr( $row->page_title, strlen( "$name:" ) ); + private function getDestinationTitle( $ns, $name, $sourceNs, $sourceDbk, $options ) { + $dbk = substr( $sourceDbk, strlen( "$name:" ) ); if ( $ns == 0 ) { // An interwiki; try an alternate encoding with '-' for ':' $dbk = "$name-" . $dbk; } $destNS = $ns; - if ( $row->page_namespace == NS_TALK && MWNamespace::isSubject( $ns ) ) { + if ( $sourceNs == NS_TALK && MWNamespace::isSubject( $ns ) ) { // This is an associated talk page moved with the --move-talk feature. $destNS = MWNamespace::getTalk( $destNS ); } @@ -392,8 +508,6 @@ class NamespaceConflictChecker extends Maintenance { /** * Move a page * - * @fixme Update pl_from_namespace etc. - * * @param integer $id The page_id * @param Title $newTitle The new title * @return bool @@ -409,8 +523,20 @@ class NamespaceConflictChecker extends Maintenance { ), __METHOD__ ); - // @fixme Needs updating the *_from_namespace fields in categorylinks, - // pagelinks, templatelinks and imagelinks. + // Update *_from_namespace in links tables + $fromNamespaceTables = array( + array( 'pagelinks', 'pl' ), + array( 'templatelinks', 'tl' ), + array( 'imagelinks', 'il' ) ); + foreach ( $fromNamespaceTables as $tableInfo ) { + list( $table, $fieldPrefix ) = $tableInfo; + $this->db->update( $table, + // SET + array( "{$fieldPrefix}_from_namespace" => $newTitle->getNamespace() ), + // WHERE + array( "{$fieldPrefix}_from" => $id ), + __METHOD__ ); + } return true; } @@ -444,7 +570,17 @@ class NamespaceConflictChecker extends Maintenance { * @param integer $id The page_id * @param Title $newTitle The new title */ - private function mergePage( $id, Title $newTitle ) { + private function mergePage( $row, Title $newTitle ) { + $id = $row->page_id; + + // Construct the WikiPage object we will need later, while the + // page_id still exists. Note that this cannot use makeTitleSafe(), + // we are deliberately constructing an invalid title. + $sourceTitle = Title::makeTitle( $row->page_namespace, $row->page_title ); + $sourceTitle->resetArticleID( $id ); + $wikiPage = new WikiPage( $sourceTitle ); + $wikiPage->loadPageData( 'fromdbmaster' ); + $destId = $newTitle->getArticleId(); $this->db->begin( __METHOD__ ); $this->db->update( 'revision', @@ -456,10 +592,18 @@ class NamespaceConflictChecker extends Maintenance { $this->db->delete( 'page', array( 'page_id' => $id ), __METHOD__ ); - // @fixme Need WikiPage::doDeleteUpdates() or similar to avoid orphan - // rows in the links tables. - + // Call LinksDeletionUpdate to delete outgoing links from the old title, + // and update category counts. + // + // Calling external code with a fake broken Title is a fairly dubious + // idea. It's necessary because it's quite a lot of code to duplicate, + // but that also makes it fragile since it would be easy for someone to + // accidentally introduce an assumption of title validity to the code we + // are calling. + $update = new LinksDeletionUpdate( $wikiPage ); + $update->doUpdate(); $this->db->commit( __METHOD__ ); + return true; } } diff --git a/maintenance/parse.php b/maintenance/parse.php index 7b05cb7b..d6559657 100644 --- a/maintenance/parse.php +++ b/maintenance/parse.php @@ -89,11 +89,10 @@ class CLIParser extends Maintenance { * @return string Wikitext */ protected function Wikitext() { - $php_stdin = 'php://stdin'; $input_file = $this->getArg( 0, $php_stdin ); - if ( $input_file === $php_stdin ) { + if ( $input_file === $php_stdin && !$this->mQuiet ) { $ctrl = wfIsWindows() ? 'CTRL+Z' : 'CTRL+D'; $this->error( basename( __FILE__ ) . ": warning: reading wikitext from STDIN. Press $ctrl to parse.\n" ); diff --git a/maintenance/populateCategory.php b/maintenance/populateCategory.php index ab0ca1ed..66553bc6 100644 --- a/maintenance/populateCategory.php +++ b/maintenance/populateCategory.php @@ -57,12 +57,6 @@ TEXT; false, true ); - $this->addOption( - 'max-slave-lag', - 'If slave lag exceeds this many seconds, wait until it drops before continuing. Default: 10', - false, - true - ); $this->addOption( 'throttle', 'Wait this many milliseconds after each category. Default: 0', @@ -74,13 +68,9 @@ TEXT; public function execute() { $begin = $this->getOption( 'begin', '' ); - $maxSlaveLag = $this->getOption( 'max-slave-lag', 10 ); $throttle = $this->getOption( 'throttle', 0 ); $force = $this->getOption( 'force', false ); - $this->doPopulateCategory( $begin, $maxSlaveLag, $throttle, $force ); - } - private function doPopulateCategory( $begin, $maxlag, $throttle, $force ) { $dbw = wfGetDB( DB_MASTER ); if ( !$force ) { diff --git a/maintenance/populateContentModel.php b/maintenance/populateContentModel.php new file mode 100644 index 00000000..3f5d6b69 --- /dev/null +++ b/maintenance/populateContentModel.php @@ -0,0 +1,207 @@ +mDescription = 'Populate the various content_* fields'; + $this->addOption( 'ns', 'Namespace to run in, or "all" for all namespaces', true, true ); + $this->addOption( 'table', 'Table to run in', true, true ); + $this->setBatchSize( 100 ); + } + + public function execute() { + $dbw = wfGetDB( DB_MASTER ); + $ns = $this->getOption( 'ns' ); + if ( !ctype_digit( $ns ) && $ns !== 'all' ) { + $this->error( 'Invalid namespace', 1 ); + } + $ns = $ns === 'all' ? 'all' : (int)$ns; + $table = $this->getOption( 'table' ); + switch ( $table ) { + case 'revision': + case 'archive': + $this->populateRevisionOrArchive( $dbw, $table, $ns ); + break; + case 'page': + $this->populatePage( $dbw, $ns ); + break; + default: + $this->error( "Invalid table name: $table", 1 ); + } + } + + private function updatePageRows( DatabaseBase $dbw, $pageIds, $model ) { + $count = count( $pageIds ); + $this->output( "Setting $count rows to $model..." ); + $dbw->update( + 'page', + array( 'page_content_model' => $model ), + array( 'page_id' => $pageIds ), + __METHOD__ + ); + wfWaitForSlaves(); + $this->output( "done.\n" ); + } + + protected function populatePage( DatabaseBase $dbw, $ns ) { + $toSave = array(); + $lastId = 0; + $nsCondition = $ns === 'all' ? array() : array( 'page_namespace' => $ns ); + do { + $rows = $dbw->select( + 'page', + array( 'page_namespace', 'page_title', 'page_id' ), + array( + 'page_content_model' => null, + 'page_id > ' . $dbw->addQuotes( $lastId ), + ) + $nsCondition, + __METHOD__, + array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'page_id ASC' ) + ); + $this->output( "Fetched {$rows->numRows()} rows.\n" ); + foreach ( $rows as $row ) { + $title = Title::newFromRow( $row ); + $model = ContentHandler::getDefaultModelFor( $title ); + $toSave[$model][] = $row->page_id; + if ( count( $toSave[$model] ) >= $this->mBatchSize ) { + $this->updatePageRows( $dbw, $toSave[$model], $model ); + unset( $toSave[$model] ); + } + $lastId = $row->page_id; + } + } while ( $rows->numRows() >= $this->mBatchSize ); + foreach ( $toSave as $model => $pages ) { + $this->updatePageRows( $dbw, $pages, $model ); + } + } + + private function updateRevisionOrArchiveRows( DatabaseBase $dbw, $ids, $model, $table ) { + $prefix = $table === 'archive' ? 'ar' : 'rev'; + $model_column = "{$prefix}_content_model"; + $format_column = "{$prefix}_content_format"; + $key = "{$prefix}_id"; + + $count = count( $ids ); + $format = ContentHandler::getForModelID( $model )->getDefaultFormat(); + $this->output( "Setting $count rows to $model / $format..." ); + $dbw->update( + $table, + array( $model_column => $model, $format_column => $format ), + array( $key => $ids ), + __METHOD__ + ); + $this->output( "done.\n" ); + } + + protected function populateRevisionOrArchive( DatabaseBase $dbw, $table, $ns ) { + $prefix = $table === 'archive' ? 'ar' : 'rev'; + $model_column = "{$prefix}_content_model"; + $format_column = "{$prefix}_content_format"; + $key = "{$prefix}_id"; + if ( $table === 'archive' ) { + $selectTables = 'archive'; + $fields = array( 'ar_namespace', 'ar_title' ); + $join_conds = array(); + $where = $ns === 'all' ? array() : array( 'ar_namespace' => $ns ); + } else { // revision + $selectTables = array( 'revision', 'page' ); + $fields = array( 'page_title', 'page_namespace' ); + $join_conds = array( 'page' => array( 'INNER JOIN', 'rev_page=page_id' ) ); + $where = $ns === 'all' ? array() : array( 'page_namespace' => $ns ); + } + + $toSave = array(); + $lastId = 0; + do { + $rows = $dbw->select( + $selectTables, + array_merge( $fields, array( $model_column, $format_column, $key ) ), + // @todo support populating format if model is already set + array( + $model_column => null, + "$key > " . $dbw->addQuotes( $lastId ), + ) + $where, + __METHOD__, + array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => "$key ASC" ), + $join_conds + ); + $this->output( "Fetched {$rows->numRows()} rows.\n" ); + foreach ( $rows as $row ) { + if ( $table === 'archive' ) { + $title = Title::makeTitle( $row->ar_namespace, $row->ar_title ); + } else { + $title = Title::newFromRow( $row ); + } + $lastId = $row->{$key}; + try { + $handler = ContentHandler::getForTitle( $title ); + } catch ( MWException $e ) { + $this->error( "Invalid content model for $title" ); + continue; + } + $defaultModel = $handler->getModelID(); + $defaultFormat = $handler->getDefaultFormat(); + $dbModel = $row->{$model_column}; + $dbFormat = $row->{$format_column}; + $id = $row->{$key}; + if ( $dbModel === null && $dbFormat === null ) { + // Set the defaults + $toSave[$defaultModel][] = $row->{$key}; + } else { // $dbModel === null, $dbFormat set. + if ( $dbFormat === $defaultFormat ) { + $toSave[$defaultModel][] = $row->{$key}; + } else { // non-default format, just update now + $this->output( "Updating model to match format for $table $id of $title... "); + $dbw->update( + $table, + array( $model_column => $defaultModel ), + array( $key => $id ), + __METHOD__ + ); + wfWaitForSlaves(); + $this->output( "done.\n" ); + continue; + } + } + + if ( count( $toSave[$defaultModel] ) >= $this->mBatchSize ) { + $this->updateRevisionOrArchiveRows( $dbw, $toSave[$defaultModel], $defaultModel, $table ); + unset( $toSave[$defaultModel] ); + } + } + } while ( $rows->numRows() >= $this->mBatchSize ); + foreach ( $toSave as $model => $ids ) { + $this->updateRevisionOrArchiveRows( $dbw, $ids, $model, $table ); + } + } +} + +$maintClass = 'PopulateContentModel'; +require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/maintenance/postgres/archives/patch-textsearch_bug66650.sql b/maintenance/postgres/archives/patch-textsearch_bug66650.sql new file mode 100644 index 00000000..e4f5681c --- /dev/null +++ b/maintenance/postgres/archives/patch-textsearch_bug66650.sql @@ -0,0 +1,5 @@ +UPDATE /*_*/pagecontent SET textvector=to_tsvector(old_text) +WHERE textvector IS NULL AND old_id IN +(SELECT max(rev_text_id) FROM revision GROUP BY rev_page); + +INSERT INTO /*_*/updatelog(ul_key) VALUES ('patch-textsearch_bug66650.sql'); diff --git a/maintenance/postgres/update-keys.sql b/maintenance/postgres/update-keys.sql index 7761d0c5..b8585515 100644 --- a/maintenance/postgres/update-keys.sql +++ b/maintenance/postgres/update-keys.sql @@ -27,3 +27,8 @@ INSERT INTO /*_*/updatelog (ul_key, ul_value) VALUES( 'user_former_groups-ufg_group-patch-ufg_group-length-increase-255.sql', null ); INSERT INTO /*_*/updatelog (ul_key, ul_value) VALUES( 'user_properties-up_property-patch-up_property.sql', null ); + +-- PostgreSQL-specific patches. + +INSERT INTO /*_*/updatelog (ul_key, ul_value) + VALUES( 'patch-textsearch_bug66650.sql', null ); diff --git a/maintenance/purgeChangedFiles.php b/maintenance/purgeChangedFiles.php index d21a296d..b98e95f4 100644 --- a/maintenance/purgeChangedFiles.php +++ b/maintenance/purgeChangedFiles.php @@ -166,7 +166,6 @@ class PurgeChangedFiles extends Maintenance { // Purge current version and any versions in oldimage table $file->purgeCache(); - $file->purgeHistory(); if ( $logType === 'delete' ) { // If there is an orphaned storage file... delete it @@ -191,7 +190,6 @@ class PurgeChangedFiles extends Maintenance { $target = $params['4::target']; $targetFile = $repo->newFile( Title::makeTitle( NS_FILE, $target ) ); $targetFile->purgeCache(); - $targetFile->purgeHistory(); $this->verbose( "Purged file {$target}; move target @{$row->log_timestamp}.\n" ); } } diff --git a/maintenance/rebuildFileCache.php b/maintenance/rebuildFileCache.php index 6ce54b9f..924457ae 100644 --- a/maintenance/rebuildFileCache.php +++ b/maintenance/rebuildFileCache.php @@ -131,9 +131,9 @@ class RebuildFileCache extends Maintenance { ob_start( array( &$cache, 'saveToFileCache' ) ); // save on ob_end_clean() $wgUseFileCache = false; // hack, we don't want $article fiddling with filecache $article->view(); - wfSuppressWarnings(); // header notices + MediaWiki\suppressWarnings(); // header notices $wgOut->output(); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); $wgUseFileCache = true; ob_end_clean(); // clear buffer if ( $rebuilt ) { diff --git a/maintenance/rebuildImages.php b/maintenance/rebuildImages.php index 5a149678..8e399787 100644 --- a/maintenance/rebuildImages.php +++ b/maintenance/rebuildImages.php @@ -59,7 +59,6 @@ class ImageBuilder extends Maintenance { public function execute() { $this->dbw = wfGetDB( DB_MASTER ); - $this->maxLag = 10; # if slaves are lagged more than 10 secs, wait $this->dryrun = $this->hasOption( 'dry-run' ); if ( $this->dryrun ) { $GLOBALS['wgReadOnly'] = 'Dry run mode, image upgrades are suppressed'; diff --git a/maintenance/rebuildLocalisationCache.php b/maintenance/rebuildLocalisationCache.php index 47866dc0..f89877ea 100644 --- a/maintenance/rebuildLocalisationCache.php +++ b/maintenance/rebuildLocalisationCache.php @@ -48,14 +48,6 @@ class RebuildLocalisationCache extends Maintenance { false, true ); } - public function memoryLimit() { - if ( $this->hasOption( 'memory-limit' ) ) { - return parent::memoryLimit(); - } - - return '1000M'; - } - public function finalSetup() { # This script needs to be run to build the inital l10n cache. But if # $wgLanguageCode is not 'en', it won't be able to run because there is diff --git a/maintenance/refreshLinks.php b/maintenance/refreshLinks.php index a2484aa3..06e1449e 100644 --- a/maintenance/refreshLinks.php +++ b/maintenance/refreshLinks.php @@ -73,7 +73,7 @@ class RefreshLinks extends Maintenance { private function doRefreshLinks( $start, $newOnly = false, $end = null, $redirectsOnly = false, $oldRedirectsOnly = false ) { - global $wgParser, $wgUseTidy; + global $wgParser; $reportingInterval = 100; $dbr = wfGetDB( DB_SLAVE ); @@ -83,14 +83,11 @@ class RefreshLinks extends Maintenance { } // Give extensions a chance to optimize settings - wfRunHooks( 'MaintenanceRefreshLinksInit', array( $this ) ); + Hooks::run( 'MaintenanceRefreshLinksInit', array( $this ) ); # Don't generate extension images (e.g. Timeline) $wgParser->clearTagHooks(); - # Don't use HTML tidy - $wgUseTidy = false; - $what = $redirectsOnly ? "redirects" : "links"; if ( $oldRedirectsOnly ) { @@ -344,17 +341,15 @@ class RefreshLinks extends Maintenance { $numIds = count( $ids ); if ( $numIds ) { $counter += $numIds; - wfWaitForSlaves(); $dbw->delete( $table, array( $field => $ids ), __METHOD__ ); $this->output( ", $counter" ); $tableStart = $ids[$numIds - 1] + 1; + wfWaitForSlaves(); } } while ( $numIds >= $batchSize && ( $end === null || $tableStart <= $end ) ); $this->output( " deleted.\n" ); - - wfWaitForSlaves(); } } diff --git a/maintenance/resources/update-oojs-ui.sh b/maintenance/resources/update-oojs-ui.sh index f6245f27..831e2dca 100644 --- a/maintenance/resources/update-oojs-ui.sh +++ b/maintenance/resources/update-oojs-ui.sh @@ -1,8 +1,8 @@ -#!/usr/bin/env bash +#!/bin/bash -eu # This script generates a commit that updates our copy of OOjs UI -if [ -n "$2" ] +if [ -n "${2:-}" ] then # Too many parameters echo >&2 "Usage: $0 []" @@ -14,18 +14,21 @@ TARGET_DIR="resources/lib/oojs-ui" # Destination relative to the root of the rep NPM_DIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'update-oojs-ui') # e.g. /tmp/update-oojs-ui.rI0I5Vir # Prepare working tree -cd "$REPO_DIR" && -git reset composer.json && git checkout composer.json && -git reset $TARGET_DIR && git checkout $TARGET_DIR && git fetch origin && -git checkout -B upstream-oojs-ui origin/master || exit 1 +cd "$REPO_DIR" +git reset composer.json +git checkout composer.json +git reset -- $TARGET_DIR +git checkout -- $TARGET_DIR +git fetch origin +git checkout -B upstream-oojs-ui origin/master # Fetch upstream version cd $NPM_DIR -if [ -n "$1" ] +if [ -n "${1:-}" ] then - npm install "oojs-ui@$1" || exit 1 + npm install "oojs-ui@$1" else - npm install oojs-ui || exit 1 + npm install oojs-ui fi OOJSUI_VERSION=$(node -e 'console.log(require("./node_modules/oojs-ui/package.json").version);') @@ -35,24 +38,27 @@ then exit 1 fi -# Copy files, excluding: -# * the Apex theme files, -# * the minimised distribution files, and -# * the RTL sheets for non-CSSJanus environments -# * the raster- and vector-only distribution sheets -rsync --force --recursive --delete \ - --exclude '*apex*' \ - --exclude 'oojs-ui*.min.*' \ - --exclude 'oojs-ui*.rtl.css' \ - --exclude 'oojs-ui*.raster.css' \ - --exclude 'oojs-ui*.vector.css' \ - ./node_modules/oojs-ui/dist/ "$REPO_DIR/$TARGET_DIR" || exit 1 +# Copy files, picking the necessary ones from source and distribution +rm -r "$REPO_DIR/$TARGET_DIR" +mkdir -p "$REPO_DIR/$TARGET_DIR/i18n" +mkdir -p "$REPO_DIR/$TARGET_DIR/images" +mkdir -p "$REPO_DIR/$TARGET_DIR/themes/mediawiki/images" +mkdir -p "$REPO_DIR/$TARGET_DIR/themes/apex/images" +cp ./node_modules/oojs-ui/dist/oojs-ui.js "$REPO_DIR/$TARGET_DIR" +cp ./node_modules/oojs-ui/dist/{oojs-ui-mediawiki-noimages.css,oojs-ui-mediawiki.js} "$REPO_DIR/$TARGET_DIR" +cp ./node_modules/oojs-ui/dist/{oojs-ui-apex-noimages.css,oojs-ui-apex.js} "$REPO_DIR/$TARGET_DIR" +cp -R ./node_modules/oojs-ui/dist/i18n "$REPO_DIR/$TARGET_DIR" +cp -R ./node_modules/oojs-ui/dist/images "$REPO_DIR/$TARGET_DIR" +cp -R ./node_modules/oojs-ui/dist/themes/mediawiki/images "$REPO_DIR/$TARGET_DIR/themes/mediawiki" +cp ./node_modules/oojs-ui/src/themes/mediawiki/*.json "$REPO_DIR/$TARGET_DIR/themes/mediawiki" +cp -R ./node_modules/oojs-ui/dist/themes/apex/images "$REPO_DIR/$TARGET_DIR/themes/apex" +cp ./node_modules/oojs-ui/src/themes/apex/*.json "$REPO_DIR/$TARGET_DIR/themes/apex" # Clean up temporary area rm -rf "$NPM_DIR" # Generate commit -cd $REPO_DIR || exit 1 +cd $REPO_DIR COMMITMSG=$(cat <&2 "Usage: $0 []" @@ -14,17 +14,19 @@ TARGET_DIR="resources/lib/oojs" # Destination relative to the root of the repo NPM_DIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'update-oojs') # e.g. /tmp/update-oojs.rI0I5Vir # Prepare working tree -cd "$REPO_DIR" && -git reset $TARGET_DIR && git checkout $TARGET_DIR && git fetch origin && -git checkout -B upstream-oojs origin/master || exit 1 +cd "$REPO_DIR" +git reset -- $TARGET_DIR +git checkout -- $TARGET_DIR +git fetch origin +git checkout -B upstream-oojs origin/master # Fetch upstream version cd $NPM_DIR -if [ -n "$1" ] +if [ -n "${1:-}" ] then - npm install "oojs@$1" || exit 1 + npm install "oojs@$1" else - npm install oojs || exit 1 + npm install oojs fi OOJS_VERSION=$(node -e 'console.log(require("./node_modules/oojs/package.json").version);') @@ -35,13 +37,13 @@ then fi # Copy file(s) -rsync --force ./node_modules/oojs/dist/oojs.jquery.js "$REPO_DIR/$TARGET_DIR" || exit 1 +rsync --force ./node_modules/oojs/dist/oojs.jquery.js "$REPO_DIR/$TARGET_DIR" # Clean up temporary area rm -rf "$NPM_DIR" # Generate commit -cd $REPO_DIR || exit 1 +cd $REPO_DIR COMMITMSG=$(cat <error( "Unable to run jobs; the wiki is in read-only mode.", 1 ); // die - } + global $wgCommandLineMode; if ( $this->hasOption( 'procs' ) ) { $procs = intval( $this->getOption( 'procs' ) ); @@ -68,21 +66,29 @@ class RunJobs extends Maintenance { } } - $json = ( $this->getOption( 'result' ) === 'json' ); + $outputJSON = ( $this->getOption( 'result' ) === 'json' ); + + // Enable DBO_TRX for atomicity; JobRunner manages transactions + // and works well in web server mode already (@TODO: this is a hack) + $wgCommandLineMode = false; $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) ); - if ( !$json ) { + if ( !$outputJSON ) { $runner->setDebugHandler( array( $this, 'debugInternal' ) ); } + $response = $runner->run( array( 'type' => $this->getOption( 'type', false ), 'maxJobs' => $this->getOption( 'maxjobs', false ), 'maxTime' => $this->getOption( 'maxtime', false ), 'throttle' => $this->hasOption( 'nothrottle' ) ? false : true, ) ); - if ( $json ) { + + if ( $outputJSON ) { $this->output( FormatJson::encode( $response, true ) ); } + + $wgCommandLineMode = true; } /** diff --git a/maintenance/showJobs.php b/maintenance/showJobs.php index 9e9ad327..25a096c0 100644 --- a/maintenance/showJobs.php +++ b/maintenance/showJobs.php @@ -34,39 +34,53 @@ require_once __DIR__ . '/Maintenance.php'; * @ingroup Maintenance */ class ShowJobs extends Maintenance { + protected static $stateMethods = array( + 'unclaimed' => 'getAllQueuedJobs', + 'delayed' => 'getAllDelayedJobs', + 'claimed' => 'getAllAcquiredJobs', + 'abandoned' => 'getAllAbandonedJobs', + ); + public function __construct() { parent::__construct(); $this->mDescription = "Show number of jobs waiting in master database"; $this->addOption( 'group', 'Show number of jobs per job type' ); - $this->addOption( 'list', - 'Show a list of all jobs in a machine-readable format, instead of statistics' ); + $this->addOption( 'list', 'Show a list of all jobs instead of counts' ); $this->addOption( 'type', 'Only show/count jobs of a given type', false, true ); + $this->addOption( 'status', 'Filter list by state (unclaimed,delayed,claimed,abandoned)' ); + $this->addOption( 'limit', 'Limit of jobs listed' ); } public function execute() { - $filterType = $this->getOption( 'type', '' ); + $typeFilter = $this->getOption( 'type', '' ); + $stateFilter = $this->getOption( 'status', '' ); + $stateLimit = (float)$this->getOption( 'limit', INF ); + $group = JobQueueGroup::singleton(); + + $filteredTypes = $typeFilter + ? array( $typeFilter ) + : $group->getQueueTypes(); + $filteredStates = $stateFilter + ? array_intersect_key( self::$stateMethods, array( $stateFilter => 1 ) ) + : self::$stateMethods; + if ( $this->hasOption( 'list' ) ) { - foreach ( $group->getQueueTypes() as $type ) { - if ( $filterType != '' && $type != $filterType ) { - continue; - } + $count = 0; + foreach ( $filteredTypes as $type ) { $queue = $group->get( $type ); - foreach ( $queue->getAllQueuedJobs() as $job ) { - $this->output( $job->toString() . " status=unclaimed\n" ); - } - foreach ( $queue->getAllDelayedJobs() as $job ) { - $this->output( $job->toString() . " status=delayed\n" ); - } - foreach ( $queue->getAllAbandonedJobs() as $job ) { - $this->output( $job->toString() . " status=abandoned\n" ); + foreach ( $filteredStates as $state => $method ) { + foreach ( $queue->$method() as $job ) { + /** @var Job $job */ + $this->output( $job->toString() . " status=$state\n" ); + if ( ++$count >= $stateLimit ) { + return; + } + } } } } elseif ( $this->hasOption( 'group' ) ) { - foreach ( $group->getQueueTypes() as $type ) { - if ( $filterType != '' && $type != $filterType ) { - continue; - } + foreach ( $filteredTypes as $type ) { $queue = $group->get( $type ); $delayed = $queue->getDelayedCount(); $pending = $queue->getSize(); @@ -83,10 +97,7 @@ class ShowJobs extends Maintenance { } } else { $count = 0; - foreach ( $group->getQueueTypes() as $type ) { - if ( $filterType != '' && $type != $filterType ) { - continue; - } + foreach ( $filteredTypes as $type ) { $count += $group->get( $type )->getSize(); } $this->output( "$count\n" ); diff --git a/maintenance/sql.php b/maintenance/sql.php index 886e3f10..a93e51fe 100644 --- a/maintenance/sql.php +++ b/maintenance/sql.php @@ -32,7 +32,9 @@ require_once __DIR__ . '/Maintenance.php'; class MwSql extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Send SQL queries to a MediaWiki database"; + $this->mDescription = "Send SQL queries to a MediaWiki database. " . + "Takes a file name containing SQL as argument or runs interactively."; + $this->addOption( 'query', 'Run a single query instead of running interactively', false, true ); $this->addOption( 'cluster', 'Use an external cluster by name', false, true ); $this->addOption( 'wikidb', 'The database wiki ID to use if not the current one', false, true ); $this->addOption( 'slave', 'Use a slave server (either "any" or by name)', false, true ); @@ -88,6 +90,13 @@ class MwSql extends Maintenance { } } + if ( $this->hasOption( 'query' ) ) { + $query = $this->getOption( 'query' ); + $this->sqlDoQuery( $db, $query, /* dieOnError */ true ); + wfWaitForSlaves(); + return; + } + $useReadline = function_exists( 'readline_add_history' ) && Maintenance::posix_isatty( 0 /*STDIN*/ ); @@ -101,6 +110,7 @@ class MwSql extends Maintenance { $wholeLine = ''; $newPrompt = '> '; $prompt = $newPrompt; + $doDie = !Maintenance::posix_isatty( 0 ); while ( ( $line = Maintenance::readconsole( $prompt ) ) !== false ) { if ( !$line ) { # User simply pressed return key @@ -121,19 +131,22 @@ class MwSql extends Maintenance { readline_add_history( $wholeLine . $db->getDelimiter() ); readline_write_history( $historyFile ); } - try { - $res = $db->query( $wholeLine ); - $this->sqlPrintResult( $res, $db ); - $prompt = $newPrompt; - $wholeLine = ''; - } catch ( DBQueryError $e ) { - $doDie = !Maintenance::posix_isatty( 0 ); - $this->error( $e, $doDie ); - } + $this->sqlDoQuery( $db, $wholeLine, $doDie ); + $prompt = $newPrompt; + $wholeLine = ''; } wfWaitForSlaves(); } + protected function sqlDoQuery( $db, $line, $dieOnError ) { + try { + $res = $db->query( $line ); + $this->sqlPrintResult( $res, $db ); + } catch ( DBQueryError $e ) { + $this->error( $e, $dieOnError ); + } + } + /** * Print the results, callback for $db->sourceStream() * @param ResultWrapper $res The results object diff --git a/maintenance/sqlite.php b/maintenance/sqlite.php index 7e02a4b2..b11f1c8b 100644 --- a/maintenance/sqlite.php +++ b/maintenance/sqlite.php @@ -117,12 +117,12 @@ class SqliteMaintenance extends Maintenance { $this->db->query( 'BEGIN IMMEDIATE TRANSACTION', __METHOD__ ); $ourFile = $this->db->getDbFilePath(); $this->output( " Copying database file $ourFile to $fileName... " ); - wfSuppressWarnings( false ); + MediaWiki\suppressWarnings( false ); if ( !copy( $ourFile, $fileName ) ) { $err = error_get_last(); $this->error( " {$err['message']}" ); } - wfSuppressWarnings( true ); + MediaWiki\suppressWarnings( true ); $this->output( " Releasing lock...\n" ); $this->db->query( 'COMMIT TRANSACTION', __METHOD__ ); } diff --git a/maintenance/storage/fixBug20757.php b/maintenance/storage/fixBug20757.php index d2fe3b42..dd4cd54b 100644 --- a/maintenance/storage/fixBug20757.php +++ b/maintenance/storage/fixBug20757.php @@ -312,9 +312,9 @@ class FixBug20757 extends Maintenance { $text = $secondaryRow->old_text; if ( in_array( 'external', $flags ) ) { $url = $text; - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); list( /* $proto */, $path ) = explode( '://', $url, 2 ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( $path == "" ) { return false; diff --git a/maintenance/storage/recompressTracked.php b/maintenance/storage/recompressTracked.php index 3562df62..b2139294 100644 --- a/maintenance/storage/recompressTracked.php +++ b/maintenance/storage/recompressTracked.php @@ -234,9 +234,9 @@ class RecompressTracked { array( 'file', 'php://stdout', 'w' ), array( 'file', 'php://stderr', 'w' ) ); - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $proc = proc_open( "$cmd --slave-id $i", $spec, $pipes ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$proc ) { $this->critical( "Error opening slave process: $cmd" ); exit( 1 ); diff --git a/maintenance/syncFileBackend.php b/maintenance/syncFileBackend.php index 14a1502f..63d5e9f8 100644 --- a/maintenance/syncFileBackend.php +++ b/maintenance/syncFileBackend.php @@ -159,6 +159,7 @@ class SyncFileBackend extends Maintenance { $this->error( "Error: given starting ID greater than ending ID.", 1 ); } + $next = null; do { $limit = min( $this->mBatchSize, $end - $start + 1 ); // don't go pass ending ID $this->output( "Doing id $start to " . ( $start + $limit - 1 ) . "...\n" ); diff --git a/maintenance/tables.sql b/maintenance/tables.sql index bf93a232..aa0c7ea9 100644 --- a/maintenance/tables.sql +++ b/maintenance/tables.sql @@ -3,7 +3,9 @@ -- not have to run it by itself unless doing a manual install. -- This is a shared schema file used for both MySQL and SQLite installs. - +-- +-- For more documentation on the database schema, see +-- https://www.mediawiki.org/wiki/Manual:Database_layout -- -- General notes: -- @@ -490,7 +492,7 @@ CREATE TABLE /*_*/pagelinks ( CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title); CREATE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from); -CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from_namespace,pl_from); +CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_from_namespace,pl_namespace,pl_title,pl_from); -- @@ -512,7 +514,7 @@ CREATE TABLE /*_*/templatelinks ( CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title); CREATE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from); -CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from_namespace,tl_from); +CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_from_namespace,tl_namespace,tl_title,tl_from); -- @@ -534,7 +536,7 @@ CREATE TABLE /*_*/imagelinks ( CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to); CREATE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from); -CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_to,il_from_namespace,il_from); +CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_from_namespace,il_to,il_from); -- diff --git a/maintenance/update.php b/maintenance/update.php index 7e0748be..452b53cd 100644 --- a/maintenance/update.php +++ b/maintenance/update.php @@ -4,7 +4,6 @@ * Run all updaters. * * This is used when the database schema is modified and we need to apply patches. - * It is kept compatible with php 4 parsing so that it can give out a meaningful error. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,13 +57,11 @@ class UpdateMediaWiki extends Maintenance { } function getDbType() { - /* If we used the class constant PHP4 would give a parser error here */ - return 2; /* Maintenance::DB_ADMIN */ + return Maintenance::DB_ADMIN; } function compatChecks() { - // Avoid syntax error in PHP4 - $minimumPcreVersion = constant( 'Installer::MINIMUM_PCRE_VERSION' ); + $minimumPcreVersion = Installer::MINIMUM_PCRE_VERSION; list( $pcreVersion ) = explode( ' ', PCRE_VERSION, 2 ); if ( version_compare( $pcreVersion, $minimumPcreVersion, '<' ) ) { @@ -121,7 +118,7 @@ class UpdateMediaWiki extends Maintenance { $this->output( "MediaWiki {$wgVersion} Updater\n\n" ); - wfWaitForSlaves( 5 ); // let's not kill databases, shall we? ;) --tor + wfWaitForSlaves(); if ( !$this->hasOption( 'skip-compat-checks' ) ) { $this->compatChecks(); @@ -156,7 +153,7 @@ class UpdateMediaWiki extends Maintenance { wfCountDown( 5 ); } - $time1 = new MWTimestamp(); + $time1 = microtime( true ); $shared = $this->hasOption( 'doshared' ); @@ -175,7 +172,7 @@ class UpdateMediaWiki extends Maintenance { $child = $this->runChild( $maint ); // LoggedUpdateMaintenance is checking the updatelog itself - $isLoggedUpdate = is_a( $child, 'LoggedUpdateMaintenance' ); + $isLoggedUpdate = $child instanceof LoggedUpdateMaintenance; if ( !$isLoggedUpdate && $updater->updateRowExists( $maint ) ) { continue; @@ -192,9 +189,10 @@ class UpdateMediaWiki extends Maintenance { $updater->purgeCache(); } - $time2 = new MWTimestamp(); - $timeDiff = $time2->diff( $time1 ); - $this->output( "\nDone in " . $timeDiff->format( "%i:%S" ) . ".\n" ); + $time2 = microtime( true ); + + $timeDiff = $wgLang->formatTimePeriod( $time2 - $time1 ); + $this->output( "\nDone in $timeDiff.\n" ); } function afterFinalSetup() { diff --git a/maintenance/updateCollation.php b/maintenance/updateCollation.php index 342ffbad..5cf8afa9 100644 --- a/maintenance/updateCollation.php +++ b/maintenance/updateCollation.php @@ -24,8 +24,6 @@ * @author Aryeh Gregor (Simetrical) */ -#$optionsWithArgs = array( 'begin', 'max-slave-lag' ); - require_once __DIR__ . '/Maintenance.php'; /** diff --git a/maintenance/validateRegistrationFile.php b/maintenance/validateRegistrationFile.php index e7646610..9cf7b2bd 100644 --- a/maintenance/validateRegistrationFile.php +++ b/maintenance/validateRegistrationFile.php @@ -12,18 +12,39 @@ class ValidateRegistrationFile extends Maintenance { $this->error( 'The JsonSchema library cannot be found, please install it through composer.', 1 ); } - $retriever = new JsonSchema\Uri\UriRetriever(); - $schema = $retriever->retrieve('file://' . dirname( __DIR__ ) . '/docs/extension.schema.json' ); $path = $this->getArg( 0 ); $data = json_decode( file_get_contents( $path ) ); if ( !is_object( $data ) ) { $this->error( "$path is not a valid JSON file.", 1 ); } + if ( !isset( $data->manifest_version ) ) { + $this->output( "Warning: No manifest_version set, assuming 1.\n" ); + // For backwards-compatability assume 1 + $data->manifest_version = 1; + } + $version = $data->manifest_version; + if ( $version !== ExtensionRegistry::MANIFEST_VERSION ) { + $schemaPath = dirname( __DIR__ ) . "/docs/extension.schema.v$version.json"; + } else { + $schemaPath = dirname( __DIR__ ) . '/docs/extension.schema.json'; + } + + if ( $version < ExtensionRegistry::OLDEST_MANIFEST_VERSION + || $version > ExtensionRegistry::MANIFEST_VERSION + ) { + $this->error( "Error: $path is using a non-supported schema version, it should use " + . ExtensionRegistry::MANIFEST_VERSION, 1 ); + } elseif ( $version < ExtensionRegistry::MANIFEST_VERSION ) { + $this->output( "Warning: $path is using a deprecated schema, and should be updated to " + . ExtensionRegistry::MANIFEST_VERSION . "\n" ); + } + $retriever = new JsonSchema\Uri\UriRetriever(); + $schema = $retriever->retrieve( 'file://' . $schemaPath ); $validator = new JsonSchema\Validator(); $validator->check( $data, $schema ); if ( $validator->isValid() ) { - $this->output( "$path validates against the schema!\n" ); + $this->output( "$path validates against the version $version schema!\n" ); } else { foreach ( $validator->getErrors() as $error ) { $this->output( "[{$error['property']}] {$error['message']}\n" ); diff --git a/maintenance/waitForSlave.php b/maintenance/waitForSlave.php index c9b1abba..50665ef2 100644 --- a/maintenance/waitForSlave.php +++ b/maintenance/waitForSlave.php @@ -1,6 +1,6 @@ addArg( 'maxlag', 'How long to wait for the slaves, default 10 seconds', false ); - } - public function execute() { - wfWaitForSlaves( $this->getArg( 0, 10 ) ); + wfWaitForSlaves(); } } diff --git a/mw-config/config.css b/mw-config/config.css index 17b20392..0e0b304c 100644 --- a/mw-config/config.css +++ b/mw-config/config.css @@ -172,3 +172,32 @@ overflow: hidden; min-width: 20em; } + +/* tooltip styles */ +.config-help-field-hint { + display: none; + margin-left: 2px; + margin-bottom: -8px; + padding: 0 0 0 15px; + /* @embed */ + background-image: url(images/help-question.gif); + background-position: left center; + background-repeat: no-repeat; + cursor: pointer; + font-size: .8em; + text-decoration: underline; + color: #0645ad; +} + +.config-help-field-hint:hover { + /* @embed */ + background-image: url(images/help-question-hover.gif); +} + +.config-help-field-data { + display: block; + background-color: #d6f3ff; + padding: 5px 8px 4px 8px; + border: 1px solid #5dc9f4; + margin-left: 20px; +} diff --git a/mw-config/config.js b/mw-config/config.js index cf17aef7..fb637f79 100644 --- a/mw-config/config.js +++ b/mw-config/config.js @@ -3,7 +3,7 @@ var $label, labelText; function syncText() { - var value = $(this).val() + var value = $( this ).val() .replace( /[\[\]\{\}|#<>%+? ]/g, '_' ) .replace( /&/, '&' ) .replace( /__+/g, '_' ) @@ -14,22 +14,22 @@ } // Set up the help system - $( '.mw-help-field-data' ) + $( '.config-help-field-data' ) .hide() - .closest( '.mw-help-field-container' ) - .find( '.mw-help-field-hint' ) + .closest( '.config-help-field-container' ) + .find( '.config-help-field-hint' ) .show() .click( function () { - $(this) - .closest( '.mw-help-field-container' ) - .find( '.mw-help-field-data' ) + $( this ) + .closest( '.config-help-field-container' ) + .find( '.config-help-field-data' ) .slideToggle( 'fast' ); } ); // Show/hide code for DB-specific options // FIXME: Do we want slow, fast, or even non-animated (instantaneous) showing/hiding here? $( '.dbRadio' ).each( function () { - $( document.getElementById( $(this).attr( 'rel' ) ) ).hide(); + $( document.getElementById( $( this ).attr( 'rel' ) ) ).hide(); } ); $( document.getElementById( $( '.dbRadio:checked' ).attr( 'rel' ) ) ).show(); $( '.dbRadio' ).click( function () { @@ -58,16 +58,16 @@ // Show/hide random stuff (email, upload) $( '.showHideRadio' ).click( function () { - var $wrapper = $( '#' + $(this).attr( 'rel' ) ); - if ( $(this).is( ':checked' ) ) { + var $wrapper = $( '#' + $( this ).attr( 'rel' ) ); + if ( $( this ).is( ':checked' ) ) { $wrapper.show( 'slow' ); } else { $wrapper.hide( 'slow' ); } } ); $( '.hideShowRadio' ).click( function () { - var $wrapper = $( '#' + $(this).attr( 'rel' ) ); - if ( $(this).is( ':checked' ) ) { + var $wrapper = $( '#' + $( this ).attr( 'rel' ) ); + if ( $( this ).is( ':checked' ) ) { $wrapper.hide( 'slow' ); } else { $wrapper.show( 'slow' ); @@ -80,9 +80,9 @@ // Enable/disable "other" textboxes $( '.enableForOther' ).click( function () { - var $textbox = $( document.getElementById( $(this).attr( 'rel' ) ) ); + var $textbox = $( document.getElementById( $( this ).attr( 'rel' ) ) ); // FIXME: Ugh, this is ugly - if ( $(this).val() === 'other' ) { + if ( $( this ).val() === 'other' ) { $textbox.removeProp( 'readonly' ).closest( '.config-block' ).slideDown( 'fast' ); } else { $textbox.prop( 'readonly', true ).closest( '.config-block' ).slideUp( 'fast' ); diff --git a/mw-config/images/help-question-hover.gif b/mw-config/images/help-question-hover.gif new file mode 100644 index 00000000..515138db Binary files /dev/null and b/mw-config/images/help-question-hover.gif differ diff --git a/mw-config/images/help-question.gif b/mw-config/images/help-question.gif new file mode 100644 index 00000000..b4fc9c5b Binary files /dev/null and b/mw-config/images/help-question.gif differ diff --git a/mw-config/index.php5 b/mw-config/index.php5 deleted file mode 100644 index 88986532..00000000 --- a/mw-config/index.php5 +++ /dev/null @@ -1,26 +0,0 @@ - $template ) { // Allow hooks to override the suggestion URL settings in a more // general way than overriding the whole search engine... -wfRunHooks( 'OpenSearchUrls', array( &$urls ) ); +Hooks::run( 'OpenSearchUrls', array( &$urls ) ); foreach ( $urls as $attribs ) { print Xml::element( 'Url', $attribs ); diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 00000000..36ad3947 --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,14 @@ + + + + . + + + + */languages/messages/Messages*.php + + node_modules + vendor + extensions + skins + diff --git a/resources/Resources.php b/resources/Resources.php index feda8a53..6a22af66 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -39,6 +39,7 @@ return array( 'group' => 'noscript', ), 'filepage' => array( + 'position' => 'top', 'class' => 'ResourceLoaderWikiModule', 'styles' => array( 'MediaWiki:Filepage.css' ), ), @@ -90,19 +91,22 @@ return array( * including more than one of them into your skin as this will result in duplicate CSS. */ 'mediawiki.skinning.elements' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ), ), ), 'mediawiki.skinning.content' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ), 'resources/src/mediawiki.skinning/content.css' => array( 'media' => 'screen' ), ), ), + // Used in the web installer. Test it after modifying this definition! 'mediawiki.skinning.interface' => array( + 'position' => 'top', 'class' => 'ResourceLoaderSkinModule', - // Used in the web installer. Test it after modifying this definition! 'styles' => array( 'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ), 'resources/src/mediawiki.skinning/content.css' => array( 'media' => 'screen' ), @@ -111,6 +115,7 @@ return array( ), 'mediawiki.skinning.content.parsoid' => array( + 'position' => 'top', // Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser // with the interface.css styles; skinStyles should be used if your // skin over-rides common content styling. @@ -121,6 +126,7 @@ return array( ), 'mediawiki.skinning.content.externallinks' => array( + 'position' => 'bottom', 'styles' => array( 'resources/src/mediawiki.skinning/content.externallinks.css' => array( 'media' => 'screen' ), ), @@ -142,7 +148,7 @@ return array( 'scripts' => 'resources/src/jquery/jquery.accessKeyLabel.js', 'dependencies' => array( 'jquery.client', - 'jquery.mwExtension', + 'mediawiki.RegExp', ), 'messages' => array( 'brackets', 'word-separator' ), 'targets' => array( 'mobile', 'desktop' ), @@ -209,7 +215,6 @@ return array( 'styles' => 'resources/src/jquery/jquery.confirmable.css', 'dependencies' => 'mediawiki.jqueryMsg', ), - // Use mediawiki.cookie in new code, rather than jquery.cookie. 'jquery.cookie' => array( 'scripts' => 'resources/lib/jquery/jquery.cookie.js', 'targets' => array( 'desktop', 'mobile' ), @@ -242,12 +247,44 @@ return array( ), 'jquery.highlightText' => array( 'scripts' => 'resources/src/jquery/jquery.highlightText.js', - 'dependencies' => 'jquery.mwExtension', + 'dependencies' => array( + 'mediawiki.RegExp', + 'dom-level2-shim', + ), 'targets' => array( 'desktop', 'mobile' ), ), 'jquery.hoverIntent' => array( 'scripts' => 'resources/lib/jquery/jquery.hoverIntent.js', ), + 'jquery.i18n' => array( + 'scripts' => array( + 'resources/lib/jquery.i18n/src/jquery.i18n.js', + 'resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js', + 'resources/lib/jquery.i18n/src/jquery.i18n.parser.js', + 'resources/lib/jquery.i18n/src/jquery.i18n.emitter.js', + 'resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js', + 'resources/lib/jquery.i18n/src/jquery.i18n.language.js', + 'resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js', + ), + 'dependencies' => 'mediawiki.libs.pluralruleparser', + 'languageScripts' => array( + 'bs' => 'resources/lib/jquery.i18n/src/languages/bs.js', + 'dsb' => 'resources/lib/jquery.i18n/src/languages/dsb.js', + 'fi' => 'resources/lib/jquery.i18n/src/languages/fi.js', + 'ga' => 'resources/lib/jquery.i18n/src/languages/ga.js', + 'he' => 'resources/lib/jquery.i18n/src/languages/he.js', + 'hsb' => 'resources/lib/jquery.i18n/src/languages/hsb.js', + 'hu' => 'resources/lib/jquery.i18n/src/languages/hu.js', + 'hy' => 'resources/lib/jquery.i18n/src/languages/hy.js', + 'la' => 'resources/lib/jquery.i18n/src/languages/la.js', + 'ml' => 'resources/lib/jquery.i18n/src/languages/ml.js', + 'os' => 'resources/lib/jquery.i18n/src/languages/os.js', + 'ru' => 'resources/lib/jquery.i18n/src/languages/ru.js', + 'sl' => 'resources/lib/jquery.i18n/src/languages/sl.js', + 'uk' => 'resources/lib/jquery.i18n/src/languages/uk.js', + ), + 'targets' => array( 'desktop', 'mobile' ), + ), 'jquery.localize' => array( 'scripts' => 'resources/src/jquery/jquery.localize.js', ), @@ -304,13 +341,15 @@ return array( 'styles' => 'resources/src/jquery/jquery.tablesorter.css', 'messages' => array( 'sort-descending', 'sort-ascending' ), 'dependencies' => array( - 'jquery.mwExtension', + 'dom-level2-shim', + 'mediawiki.RegExp', 'mediawiki.language.months', ), ), 'jquery.textSelection' => array( 'scripts' => 'resources/src/jquery/jquery.textSelection.js', 'dependencies' => 'jquery.client', + 'targets' => array( 'mobile', 'desktop' ), ), 'jquery.throttle-debounce' => array( 'scripts' => 'resources/lib/jquery/jquery.ba-throttle-debounce.js', @@ -334,6 +373,13 @@ return array( 'jquery.ui.core' => array( 'scripts' => 'resources/lib/jquery.ui/jquery.ui.core.js', + 'dependencies' => array( + 'jquery.ui.core.styles', + ), + 'group' => 'jquery.ui', + ), + 'jquery.ui.core.styles' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css', @@ -687,7 +733,10 @@ return array( /* Moment.js */ 'moment' => array( - 'scripts' => 'resources/lib/moment/moment.js', + 'scripts' => array( + 'resources/lib/moment/moment.js', + 'resources/src/moment-local-dmy.js', + ), 'languageScripts' => array( 'af' => 'resources/lib/moment/locale/af.js', 'ar' => 'resources/lib/moment/locale/ar.js', @@ -772,14 +821,14 @@ return array( /* MediaWiki */ 'mediawiki' => array( - // Keep maintenance/jsduck/eg-iframe.html in sync + 'class' => 'ResourceLoaderRawFileModule', + // Keep in sync with maintenance/jsduck/eg-iframe.html 'scripts' => array( + 'resources/lib/phpjs-sha1/sha1.js', 'resources/src/mediawiki/mediawiki.js', 'resources/src/mediawiki/mediawiki.errorLogger.js', - 'resources/src/mediawiki/mediawiki.startUp.js', ), 'debugScripts' => 'resources/src/mediawiki/mediawiki.log.js', - 'raw' => true, 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.apihelp' => array( @@ -798,6 +847,12 @@ return array( 'resources/src/mediawiki/mediawiki.template.mustache.js', ), 'targets' => array( 'desktop', 'mobile' ), + 'dependencies' => 'mediawiki.template', + ), + 'mediawiki.template.regexp' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.template.regexp.js', + 'targets' => array( 'desktop', 'mobile' ), + 'dependencies' => 'mediawiki.template', ), 'mediawiki.apipretty' => array( 'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css', @@ -806,7 +861,10 @@ return array( ), 'mediawiki.api' => array( 'scripts' => 'resources/src/mediawiki.api/mediawiki.api.js', - 'dependencies' => 'mediawiki.util', + 'dependencies' => array( + 'mediawiki.util', + 'user.tokens', + ), 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.api.category' => array( @@ -821,7 +879,6 @@ return array( 'dependencies' => array( 'mediawiki.api', 'mediawiki.Title', - 'user.tokens', ), 'targets' => array( 'desktop', 'mobile' ), ), @@ -837,15 +894,25 @@ return array( 'mediawiki.api.parse' => array( 'scripts' => 'resources/src/mediawiki.api/mediawiki.api.parse.js', 'dependencies' => 'mediawiki.api', + 'targets' => array( 'desktop', 'mobile' ), + ), + 'mediawiki.api.upload' => array( + 'scripts' => 'resources/src/mediawiki.api/mediawiki.api.upload.js', + 'dependencies' => array( + 'dom-level2-shim', + 'mediawiki.api', + 'mediawiki.api.edit', + 'json', + ), ), 'mediawiki.api.watch' => array( 'scripts' => 'resources/src/mediawiki.api/mediawiki.api.watch.js', 'dependencies' => array( 'mediawiki.api', - 'user.tokens', ), ), 'mediawiki.content.json' => array( + 'position' => 'top', 'styles' => 'resources/src/mediawiki/mediawiki.content.json.css', ), 'mediawiki.confirmCloseWindow' => array( @@ -908,7 +975,10 @@ return array( 'feedback-useragent' ), ), - + 'mediawiki.feedlink' => array( + 'position' => 'top', + 'styles' => 'resources/src/mediawiki/mediawiki.feedlink.css', + ), 'mediawiki.filewarning' => array( 'scripts' => 'resources/src/mediawiki/mediawiki.filewarning.js', 'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less', @@ -916,8 +986,22 @@ return array( 'oojs-ui', ), ), - + 'mediawiki.ForeignApi' => array( + 'targets' => array( 'desktop', 'mobile' ), + 'class' => 'ResourceLoaderForeignApiModule', + // Additional dependencies generated dynamically + 'dependencies' => 'mediawiki.ForeignApi.core', + ), + 'mediawiki.ForeignApi.core' => array( + 'scripts' => 'resources/src/mediawiki.api/mediawiki.ForeignApi.js', + 'dependencies' => array( + 'mediawiki.api', + 'oojs', + ), + 'targets' => array( 'desktop', 'mobile' ), + ), 'mediawiki.helplink' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki/mediawiki.helplink.less', ), @@ -937,7 +1021,7 @@ return array( 'mediawiki.htmlform' => array( 'scripts' => 'resources/src/mediawiki/mediawiki.htmlform.js', 'dependencies' => array( - 'jquery.mwExtension', + 'mediawiki.RegExp', 'jquery.byteLimit', ), 'messages' => array( @@ -946,6 +1030,14 @@ return array( 'colon-separator', ), ), + 'mediawiki.htmlform.styles' => array( + 'styles' => 'resources/src/mediawiki/mediawiki.htmlform.css', + 'position' => 'top', + ), + 'mediawiki.htmlform.ooui.styles' => array( + 'styles' => 'resources/src/mediawiki/mediawiki.htmlform.ooui.css', + 'position' => 'top', + ), 'mediawiki.icon' => array( 'styles' => 'resources/src/mediawiki/mediawiki.icon.less', ), @@ -953,6 +1045,7 @@ return array( 'scripts' => 'resources/src/mediawiki/mediawiki.inspect.js', 'dependencies' => array( 'jquery.byteLength', + 'mediawiki.RegExp', 'json', ), 'targets' => array( 'desktop', 'mobile' ), @@ -980,10 +1073,13 @@ return array( ), 'mediawiki.notification' => array( 'styles' => array( - 'resources/src/mediawiki/mediawiki.notification.css', + 'resources/src/mediawiki/mediawiki.notification.common.css', 'resources/src/mediawiki/mediawiki.notification.hideForPrint.css' => array( 'media' => 'print' ), ), + 'skinStyles' => array( + 'default' => 'resources/src/mediawiki/mediawiki.notification.css', + ), 'scripts' => 'resources/src/mediawiki/mediawiki.notification.js', 'dependencies' => 'mediawiki.page.startup', 'targets' => array( 'desktop', 'mobile' ), @@ -992,6 +1088,10 @@ return array( 'scripts' => 'resources/src/mediawiki/mediawiki.notify.js', 'targets' => array( 'desktop', 'mobile' ), ), + 'mediawiki.RegExp' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.RegExp.js', + 'targets' => array( 'desktop', 'mobile' ), + ), 'mediawiki.pager.tablePager' => array( 'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less', 'position' => 'top', @@ -1012,10 +1112,15 @@ return array( ), ), 'mediawiki.sectionAnchor' => array( + 'position' => 'top', // Back-compat to hide it on cached pages (T18691; Ie9e334e973; 2015-03-17) 'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css', 'targets' => array( 'desktop', 'mobile' ), ), + 'mediawiki.storage' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.storage.js', + 'targets' => array( 'desktop', 'mobile' ), + ), 'mediawiki.Title' => array( 'scripts' => 'resources/src/mediawiki/mediawiki.Title.js', 'dependencies' => array( @@ -1024,21 +1129,157 @@ return array( ), 'targets' => array( 'desktop', 'mobile' ), ), + 'mediawiki.Upload' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.Upload.js', + 'dependencies' => array( + 'dom-level2-shim', + 'mediawiki.api.upload', + ), + ), + 'mediawiki.ForeignUpload' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.ForeignUpload.js', + 'dependencies' => array( + 'mediawiki.ForeignApi', + 'mediawiki.Upload', + 'oojs', + ), + ), + 'mediawiki.ForeignStructuredUpload' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js', + 'dependencies' => array( + 'mediawiki.ForeignUpload', + ), + ), + 'mediawiki.Upload.Dialog' => array( + 'scripts' => array( + 'resources/src/mediawiki/mediawiki.Upload.Dialog.js', + ), + 'dependencies' => array( + 'mediawiki.Upload.BookletLayout', + ), + 'messages' => array( + 'upload-dialog-title', + 'upload-dialog-button-cancel', + 'upload-dialog-button-done', + 'upload-dialog-button-save', + 'upload-dialog-button-upload', + ), + ), + 'mediawiki.Upload.BookletLayout' => array( + 'scripts' => array( + 'resources/src/mediawiki/mediawiki.Upload.BookletLayout.js', + ), + 'dependencies' => array( + 'oojs-ui', + 'mediawiki.Upload', + 'mediawiki.jqueryMsg', + ), + 'messages' => array( + 'upload-form-label-select-file', + 'upload-form-label-infoform-title', + 'upload-form-label-infoform-name', + 'upload-form-label-infoform-description', + 'upload-form-label-usage-title', + 'upload-form-label-usage-filename', + 'api-error-unknownerror', + 'api-error-unknown-warning', + 'api-error-badaccess-groups', + 'api-error-badtoken', + 'api-error-copyuploaddisabled', + 'api-error-duplicate', + 'api-error-duplicate-archive', + 'api-error-empty-file', + 'api-error-emptypage', + 'api-error-fetchfileerror', + 'api-error-fileexists-forbidden', + 'api-error-fileexists-shared-forbidden', + 'api-error-file-too-large', + 'api-error-filename-tooshort', + 'api-error-filetype-banned', + 'api-error-filetype-banned-type', + 'api-error-filetype-missing', + 'api-error-hookaborted', + 'api-error-http', + 'api-error-illegal-filename', + 'api-error-internal-error', + 'api-error-invalid-file-key', + 'api-error-missingparam', + 'api-error-missingresult', + 'api-error-mustbeloggedin', + 'api-error-mustbeposted', + 'api-error-noimageinfo', + 'api-error-nomodule', + 'api-error-ok-but-empty', + 'api-error-overwrite', + 'api-error-stashfailed', + 'api-error-publishfailed', + 'api-error-stasherror', + 'api-error-stashedfilenotfound', + 'api-error-stashpathinvalid', + 'api-error-stashfilestorage', + 'api-error-stashzerolength', + 'api-error-stashnotloggedin', + 'api-error-stashwrongowner', + 'api-error-stashnosuchfilekey', + 'api-error-timeout', + 'api-error-unclassified', + 'api-error-unknown-code', + 'api-error-unknown-error', + 'api-error-uploaddisabled', + 'api-error-verification-error', + 'fileexists', + 'filepageexists', + 'filename-bad-prefix', + 'filename-thumb-name', + 'badfilename', + 'api-error-duplicate-archive', + 'api-error-blacklisted', // HACK + ), + ), + 'mediawiki.ForeignStructuredUpload.BookletLayout' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js', + 'styles' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.css', + 'dependencies' => array( + 'mediawiki.ForeignStructuredUpload', + 'mediawiki.Upload.BookletLayout', + 'mediawiki.widgets.CategorySelector', + 'mediawiki.widgets.DateInputWidget', + 'mediawiki.jqueryMsg', + ), + 'messages' => array( + 'foreign-structured-upload-form-label-own-work', + 'foreign-structured-upload-form-label-infoform-categories', + 'foreign-structured-upload-form-label-infoform-date', + 'foreign-structured-upload-form-label-own-work-message-default', + 'foreign-structured-upload-form-label-not-own-work-message-default', + 'foreign-structured-upload-form-label-not-own-work-local-default', + 'foreign-structured-upload-form-label-own-work-message-shared', + 'foreign-structured-upload-form-label-not-own-work-message-shared', + 'foreign-structured-upload-form-label-not-own-work-local-shared', + 'foreign-structured-upload-form-label-own-work-message-local', + 'foreign-structured-upload-form-label-not-own-work-message-local', + 'foreign-structured-upload-form-label-not-own-work-local-local', + ), + ), 'mediawiki.toc' => array( 'scripts' => 'resources/src/mediawiki/mediawiki.toc.js', - 'dependencies' => 'jquery.cookie', + 'dependencies' => 'mediawiki.cookie', 'messages' => array( 'showtoc', 'hidetoc' ), 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.Uri' => array( 'scripts' => 'resources/src/mediawiki/mediawiki.Uri.js', + 'templates' => array( + 'strict.regexp' => 'resources/src/mediawiki/mediawiki.Uri.strict.regexp', + 'loose.regexp' => 'resources/src/mediawiki/mediawiki.Uri.loose.regexp', + ), 'dependencies' => 'mediawiki.util', 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.user' => array( 'scripts' => 'resources/src/mediawiki/mediawiki.user.js', 'dependencies' => array( - 'jquery.cookie', + 'mediawiki.cookie', 'mediawiki.api', 'user.options', 'user.tokens', @@ -1056,7 +1297,7 @@ return array( 'scripts' => 'resources/src/mediawiki/mediawiki.util.js', 'dependencies' => array( 'jquery.accessKeyLabel', - 'jquery.mwExtension', + 'mediawiki.RegExp', 'mediawiki.notify', ), 'position' => 'top', // For $wgPreloadJavaScriptMwUtil @@ -1073,6 +1314,10 @@ return array( 'styles' => 'resources/src/mediawiki.toolbar/toolbar.less', 'position' => 'top', ), + 'mediawiki.experiments' => array( + 'scripts' => 'resources/src/mediawiki/mediawiki.experiments.js', + 'targets' => array( 'desktop', 'mobile' ), + ), /* MediaWiki Action */ @@ -1087,15 +1332,15 @@ return array( 'position' => 'top', ), 'mediawiki.action.edit.styles' => array( - 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css', 'position' => 'top', + 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css', ), 'mediawiki.action.edit.collapsibleFooter' => array( 'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js', 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.css', 'dependencies' => array( 'jquery.makeCollapsible', - 'jquery.cookie', + 'mediawiki.cookie', 'mediawiki.icon', ), ), @@ -1134,18 +1379,18 @@ return array( ), ), 'mediawiki.action.history' => array( + 'position' => 'top', 'scripts' => 'resources/src/mediawiki.action/mediawiki.action.history.js', 'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.css', - 'group' => 'mediawiki.action.history', ), 'mediawiki.action.history.diff' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.action/mediawiki.action.history.diff.css', 'resources/src/mediawiki.action/mediawiki.action.history.diff.print.css' => array( 'media' => 'print' ), ), - 'group' => 'mediawiki.action.history', 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.action.view.dblClickEdit' => array( @@ -1165,6 +1410,7 @@ return array( ), ), 'mediawiki.action.view.categoryPage.styles' => array( + 'position' => 'top', 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less', 'targets' => array( 'desktop', 'mobile' ) ), @@ -1190,8 +1436,8 @@ return array( 'position' => 'top', ), 'mediawiki.action.view.redirectPage' => array( - 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css', 'position' => 'top', + 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css', ), 'mediawiki.action.view.rightClickEdit' => array( 'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.rightClickEdit.js', @@ -1210,6 +1456,13 @@ return array( 'prefs-editing' ), ), + 'mediawiki.action.view.filepage' => array( + 'styles' => array( + 'resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css' => array( 'media' => 'print' ), + 'resources/src/mediawiki.action/mediawiki.action.view.filepage.css', + ), + 'position' => 'top', + ), /* MediaWiki Language */ @@ -1265,10 +1518,14 @@ return array( ), 'mediawiki.jqueryMsg' => array( + // Add data for mediawiki.jqueryMsg, such as allowed tags + 'class' => 'ResourceLoaderJqueryMsgModule', 'scripts' => 'resources/src/mediawiki/mediawiki.jqueryMsg.js', 'dependencies' => array( 'mediawiki.util', 'mediawiki.language', + 'user.options', + 'dom-level2-shim', ), 'targets' => array( 'desktop', 'mobile' ), ), @@ -1300,9 +1557,18 @@ return array( 'mediawiki.page.gallery' => array( 'scripts' => 'resources/src/mediawiki.page/mediawiki.page.gallery.js', 'dependencies' => array( + 'mediawiki.page.gallery.styles', 'jquery.throttle-debounce', ) ), + 'mediawiki.page.gallery.styles' => array( + 'styles' => array( + 'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ), + 'resources/src/mediawiki.page/mediawiki.page.gallery.css', + ), + 'position' => 'top', + 'targets' => array( 'desktop', 'mobile' ), + ), 'mediawiki.page.ready' => array( 'scripts' => 'resources/src/mediawiki.page/mediawiki.page.ready.js', 'dependencies' => array( @@ -1345,7 +1611,7 @@ return array( 'mediawiki.page.startup', 'mediawiki.util', 'jquery.accessKeyLabel', - 'jquery.mwExtension', + 'mediawiki.RegExp', ), 'messages' => array( 'watch', @@ -1369,6 +1635,7 @@ return array( /* MediaWiki Special pages */ 'mediawiki.special' => array( + 'position' => 'top', 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.js', 'styles' => 'resources/src/mediawiki.special/mediawiki.special.css', ), @@ -1387,19 +1654,22 @@ return array( ), ), 'mediawiki.special.changeslist' => array( + 'position' => 'top', 'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css', ), 'mediawiki.special.changeslist.legend' => array( + 'position' => 'top', 'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css', ), 'mediawiki.special.changeslist.legend.js' => array( 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js', 'dependencies' => array( 'jquery.makeCollapsible', - 'jquery.cookie', + 'mediawiki.cookie', ), ), 'mediawiki.special.changeslist.enhanced' => array( + 'position' => 'top', 'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css', ), 'mediawiki.special.edittags' => array( @@ -1421,12 +1691,20 @@ return array( ), 'mediawiki.special.movePage' => array( 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.movePage.js', - 'dependencies' => 'jquery.byteLimit', + 'dependencies' => array( + 'jquery.byteLimit', + 'mediawiki.widgets', + ), + ), + 'mediawiki.special.movePage.styles' => array( + 'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css', + 'position' => 'top', ), 'mediawiki.special.pageLanguage' => array( 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js', ), 'mediawiki.special.pagesWithProp' => array( + 'position' => 'top', 'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css', ), 'mediawiki.special.preferences' => array( @@ -1437,10 +1715,12 @@ return array( 'prefs-tabs-navigation-hint', 'prefswarning-warning', 'saveprefs', + 'savedprefs', ), 'dependencies' => array( 'mediawiki.language', 'mediawiki.confirmCloseWindow', + 'mediawiki.notification', ), ), 'mediawiki.special.recentchanges' => array( @@ -1449,6 +1729,7 @@ return array( 'position' => 'top', ), 'mediawiki.special.search' => array( + 'position' => 'top', 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.js', 'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.css', 'messages' => array( @@ -1494,25 +1775,16 @@ return array( 'position' => 'top', ), 'mediawiki.special.userlogin.signup.styles' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.css', ), - 'position' => 'top', ), 'mediawiki.special.userlogin.login.styles' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css', ), - 'position' => 'top', - ), - 'mediawiki.special.userlogin.common.js' => array( - 'scripts' => array( - 'resources/src/mediawiki.special/mediawiki.special.userlogin.common.js', - ), - 'messages' => array( - 'createacct-captcha', - 'createacct-imgcaptcha-ph', - ), ), 'mediawiki.special.userlogin.signup.js' => array( 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js', @@ -1564,8 +1836,8 @@ return array( /* MediaWiki Installer */ + // Used in the web installer. Test it after modifying this definition! 'mediawiki.legacy.config' => array( - // Used in the web installer. Test it after modifying this definition! // These files are not actually loaded via ResourceLoader, so dependencies etc. won't work. 'scripts' => 'mw-config/config.js', 'styles' => 'mw-config/config.css', @@ -1573,15 +1845,8 @@ return array( /* MediaWiki Legacy */ - 'mediawiki.legacy.ajax' => array( - 'scripts' => 'resources/src/mediawiki.legacy/ajax.js', - 'dependencies' => array( - 'mediawiki.util', - 'mediawiki.legacy.wikibits', - ), - 'position' => 'top', - ), 'mediawiki.legacy.commonPrint' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' ) ), @@ -1591,13 +1856,15 @@ return array( 'dependencies' => 'jquery.byteLimit', 'messages' => array( 'protect-unchain-permissions' ) ), + // Used in the web installer. Test it after modifying this definition! 'mediawiki.legacy.shared' => array( - // Used in the web installer. Test it after modifying this definition! + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' ) ), ), 'mediawiki.legacy.oldshared' => array( + 'position' => 'top', 'styles' => array( 'resources/src/mediawiki.legacy/oldshared.css' => array( 'media' => 'screen' ) ), @@ -1606,85 +1873,175 @@ return array( 'scripts' => 'resources/src/mediawiki.legacy/wikibits.js', 'dependencies' => 'mediawiki.util', 'position' => 'top', + 'targets' => array( 'desktop', 'mobile' ), ), /* MediaWiki UI */ 'mediawiki.ui' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/default.less', ), ), - 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.ui.checkbox' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/components/checkbox.less', ), ), - 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.ui.radio' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/components/radio.less', ), ), - 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), // Lightweight module for anchor styles 'mediawiki.ui.anchor' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/components/anchors.less', ), ), - 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), // Lightweight module for button styles 'mediawiki.ui.button' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/components/buttons.less', ), ), - 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.ui.input' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/components/inputs.less', ), ), - 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), 'mediawiki.ui.icon' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/components/icons.less', ), ), - 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), // Lightweight module for text styles 'mediawiki.ui.text' => array( + 'position' => 'top', 'skinStyles' => array( 'default' => array( 'resources/src/mediawiki.ui/components/text.less', ), ), + 'targets' => array( 'desktop', 'mobile' ), + ), + + 'mediawiki.widgets' => array( + 'scripts' => array( + 'resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js', + 'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js', + 'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js', + 'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js', + 'resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js', + ), + 'skinStyles' => array( + 'default' => array( + 'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.css', + ), + ), + 'dependencies' => array( + 'oojs-ui', + 'mediawiki.widgets.styles', + // TitleInputWidget + 'mediawiki.Title', + 'mediawiki.api', + 'jquery.byteLimit', + // TitleOptionWidget + 'jquery.autoEllipsis', + // CategorySelector + 'mediawiki.ForeignApi', + // FIXME: Kept for bc + 'mediawiki.widgets.CategorySelector', + ), + 'messages' => array( + // NamespaceInputWidget + 'blanknamespace', + 'namespacesall', + // TitleInputWidget + 'mw-widgets-titleinput-description-new-page', + 'mw-widgets-titleinput-description-redirect', + ), + 'targets' => array( 'desktop', 'mobile' ), + ), + 'mediawiki.widgets.styles' => array( + 'skinStyles' => array( + 'default' => array( + 'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css', + 'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css', + ), + ), 'position' => 'top', 'targets' => array( 'desktop', 'mobile' ), ), + 'mediawiki.widgets.DateInputWidget' => array( + 'scripts' => array( + 'resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js', + 'resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js', + ), + 'skinStyles' => array( + 'default' => array( + 'resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less', + 'resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less', + ), + ), + 'messages' => array( + 'mw-widgets-dateinput-no-date', + 'mw-widgets-dateinput-placeholder-day', + 'mw-widgets-dateinput-placeholder-month', + ), + 'dependencies' => array( + 'oojs-ui', + 'moment', + ), + 'targets' => array( 'desktop', 'mobile' ), + ), + 'mediawiki.widgets.CategorySelector' => array( + 'scripts' => array( + 'resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js', + 'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js', + ), + 'dependencies' => array( + 'oojs-ui', + 'mediawiki.api', + ), + 'targets' => array( 'desktop', 'mobile' ), + ), + 'mediawiki.widgets.UserInputWidget' => array( + 'scripts' => array( + 'resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js', + ), + 'dependencies' => array( + 'oojs-ui', + ), + ), /* es5-shim */ 'es5-shim' => array( @@ -1696,6 +2053,14 @@ return array( 'skipFunction' => 'resources/src/es5-skip.js', ), + /* dom-level2-shim */ + // IE 8 + 'dom-level2-shim' => array( + 'scripts' => 'resources/src/polyfill-nodeTypes.js', + 'targets' => array( 'desktop', 'mobile' ), + 'skipFunction' => 'resources/src/dom-level2-skip.js', + ), + /* OOjs */ 'oojs' => array( 'scripts' => array( @@ -1711,41 +2076,5 @@ return array( /* OOjs UI */ // WARNING: OOjs-UI is NOT TESTED with older browsers and is likely to break // if loaded in browsers that don't support ES5 - 'oojs-ui' => array( - 'scripts' => array( - 'resources/lib/oojs-ui/oojs-ui.js', - ), - 'skinScripts' => array( - 'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.js', - ), - 'dependencies' => array( - 'es5-shim', - 'oojs', - 'oojs-ui.styles', - ), - 'messages' => array( - 'ooui-dialog-message-accept', - 'ooui-dialog-message-reject', - 'ooui-dialog-process-continue', - 'ooui-dialog-process-dismiss', - 'ooui-dialog-process-error', - 'ooui-dialog-process-retry', - 'ooui-outline-control-move-down', - 'ooui-outline-control-move-up', - 'ooui-outline-control-remove', - 'ooui-toolbar-more', - 'ooui-toolgroup-collapse', - 'ooui-toolgroup-expand', - ), - 'targets' => array( 'desktop', 'mobile' ), - ), - - 'oojs-ui.styles' => array( - 'position' => 'top', - 'skinStyles' => array( - 'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.css', - ), - 'targets' => array( 'desktop', 'mobile' ), - ), - + // @see ResourcesOOUI.php ); diff --git a/resources/ResourcesOOUI.php b/resources/ResourcesOOUI.php new file mode 100644 index 00000000..caf6dabd --- /dev/null +++ b/resources/ResourcesOOUI.php @@ -0,0 +1,132 @@ +getAttribute( 'SkinOOUIThemes' ); + // We only use the theme names for file names, and they are lowercase + $themes = array_map( 'strtolower', $themes ); + $themes['default'] = 'mediawiki'; + + $modules = array(); + $modules['oojs-ui'] = array( + 'scripts' => array( + 'resources/lib/oojs-ui/oojs-ui.js', + ), + 'skinScripts' => array_combine( + array_keys( $themes ), + array_map( function ( $theme ) { + // TODO Allow extensions to specify this path somehow + return "resources/lib/oojs-ui/oojs-ui-$theme.js"; + }, array_values( $themes ) ) + ), + 'dependencies' => array( + 'es5-shim', + 'oojs', + 'oojs-ui.styles', + 'oojs-ui.styles.icons', + 'oojs-ui.styles.indicators', + 'oojs-ui.styles.textures', + ), + 'messages' => array( + 'ooui-dialog-message-accept', + 'ooui-dialog-message-reject', + 'ooui-dialog-process-continue', + 'ooui-dialog-process-dismiss', + 'ooui-dialog-process-error', + 'ooui-dialog-process-retry', + 'ooui-outline-control-move-down', + 'ooui-outline-control-move-up', + 'ooui-outline-control-remove', + 'ooui-selectfile-button-select', + 'ooui-selectfile-dragdrop-placeholder', + 'ooui-selectfile-not-supported', + 'ooui-selectfile-placeholder', + 'ooui-toolbar-more', + 'ooui-toolgroup-collapse', + 'ooui-toolgroup-expand', + ), + 'targets' => array( 'desktop', 'mobile' ), + ); + $modules['oojs-ui.styles'] = array( + 'position' => 'top', + 'styles' => 'resources/src/oojs-ui-local.css', // HACK, see inside the file + 'skinStyles' => array_combine( + array_keys( $themes ), + array_map( function ( $theme ) { + // TODO Allow extensions to specify this path somehow + return "resources/lib/oojs-ui/oojs-ui-$theme-noimages.css"; + }, array_values( $themes ) ) + ), + 'targets' => array( 'desktop', 'mobile' ), + ); + + $imageSets = array( + // Comments for greppability + 'icons', // oojs-ui.styles.icons + 'indicators', // oojs-ui.styles.indicators + 'textures', // oojs-ui.styles.textures + 'icons-accessibility', // oojs-ui.styles.icons-accessibility + 'icons-alerts', // oojs-ui.styles.icons-alerts + 'icons-content', // oojs-ui.styles.icons-content + 'icons-editing-advanced', // oojs-ui.styles.icons-editing-advanced + 'icons-editing-core', // oojs-ui.styles.icons-editing-core + 'icons-editing-list', // oojs-ui.styles.icons-editing-list + 'icons-editing-styling', // oojs-ui.styles.icons-editing-styling + 'icons-interactions', // oojs-ui.styles.icons-interactions + 'icons-layout', // oojs-ui.styles.icons-layout + 'icons-location', // oojs-ui.styles.icons-location + 'icons-media', // oojs-ui.styles.icons-media + 'icons-moderation', // oojs-ui.styles.icons-moderation + 'icons-movement', // oojs-ui.styles.icons-movement + 'icons-user', // oojs-ui.styles.icons-user + 'icons-wikimedia', // oojs-ui.styles.icons-wikimedia + ); + $rootPath = 'resources/lib/oojs-ui/themes'; + + foreach ( $imageSets as $name ) { + $module = array( + 'position' => 'top', + 'class' => 'ResourceLoaderOOUIImageModule', + 'name' => $name, + 'rootPath' => $rootPath, + ); + + if ( substr( $name, 0, 5 ) === 'icons' ) { + $module['selectorWithoutVariant'] = '.oo-ui-icon-{name}, .mw-ui-icon-{name}:before'; + $module['selectorWithVariant'] = ' + .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before, + /* Hack for Flow, see T110051 */ + .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, + .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before'; + } + + $modules["oojs-ui.styles.$name"] = $module; + } + + return $modules; +} ); diff --git a/resources/lib/es5-shim/es5-shim.js b/resources/lib/es5-shim/es5-shim.js index 45959940..85f51e2d 100644 --- a/resources/lib/es5-shim/es5-shim.js +++ b/resources/lib/es5-shim/es5-shim.js @@ -1,17 +1,20 @@ /*! * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License + * @license es5-shim Copyright 2009-2015 by contributors, MIT License * see https://github.com/es-shims/es5-shim/blob/master/LICENSE */ // vim: ts=4 sts=4 sw=4 expandtab -//Add semicolon to prevent IIFE from being passed as argument to concated code. +// Add semicolon to prevent IIFE from being passed as argument to concatenated code. ; // UMD (Universal Module Definition) // see https://github.com/umdjs/umd/blob/master/returnExports.js (function (root, factory) { + 'use strict'; + + /*global define, exports, module */ if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory); @@ -42,140 +45,144 @@ var ObjectPrototype = Object.prototype; var FunctionPrototype = Function.prototype; var StringPrototype = String.prototype; var NumberPrototype = Number.prototype; -var _Array_slice_ = ArrayPrototype.slice; +var array_slice = ArrayPrototype.slice; var array_splice = ArrayPrototype.splice; var array_push = ArrayPrototype.push; var array_unshift = ArrayPrototype.unshift; +var array_concat = ArrayPrototype.concat; var call = FunctionPrototype.call; -// Having a toString local variable name breaks in Opera so use _toString. -var _toString = ObjectPrototype.toString; +// Having a toString local variable name breaks in Opera so use to_string. +var to_string = ObjectPrototype.toString; -var isFunction = function (val) { - return ObjectPrototype.toString.call(val) === '[object Function]'; -}; -var isRegex = function (val) { - return ObjectPrototype.toString.call(val) === '[object RegExp]'; -}; -var isArray = function isArray(obj) { - return _toString.call(obj) === "[object Array]"; -}; -var isString = function isString(obj) { - return _toString.call(obj) === "[object String]"; +var isArray = Array.isArray || function isArray(obj) { + return to_string.call(obj) === '[object Array]'; }; + +var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; +var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, tryFunctionObject = function tryFunctionObject(value) { try { fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]'; isCallable = function isCallable(value) { if (typeof value !== 'function') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; }; +var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; }; +var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; }; + var isArguments = function isArguments(value) { - var str = _toString.call(value); + var str = to_string.call(value); var isArgs = str === '[object Arguments]'; if (!isArgs) { - isArgs = !isArray(str) - && value !== null - && typeof value === 'object' - && typeof value.length === 'number' - && value.length >= 0 - && isFunction(value.callee); + isArgs = !isArray(value) && + value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + isCallable(value.callee); } return isArgs; }; -var supportsDescriptors = Object.defineProperty && (function () { - try { - Object.defineProperty({}, 'x', {}); - return true; - } catch (e) { /* this is ES3 */ - return false; - } -}()); - -// Define configurable, writable and non-enumerable props -// if they don't exist. -var defineProperty; -if (supportsDescriptors) { - defineProperty = function (object, name, method, forceAssign) { - if (!forceAssign && (name in object)) { return; } - Object.defineProperty(object, name, { - configurable: true, - enumerable: false, - writable: true, - value: method - }); - }; -} else { - defineProperty = function (object, name, method, forceAssign) { - if (!forceAssign && (name in object)) { return; } - object[name] = method; - }; -} -var defineProperties = function (object, map, forceAssign) { - for (var name in map) { - if (ObjectPrototype.hasOwnProperty.call(map, name)) { - defineProperty(object, name, map[name], forceAssign); - } - } -}; +/* inlined from http://npmjs.com/define-properties */ +var defineProperties = (function (has) { + var supportsDescriptors = Object.defineProperty && (function () { + try { + var obj = {}; + Object.defineProperty(obj, 'x', { enumerable: false, value: obj }); + for (var _ in obj) { return false; } + return obj.x === obj; + } catch (e) { /* this is ES3 */ + return false; + } + }()); + + // Define configurable, writable and non-enumerable props + // if they don't exist. + var defineProperty; + if (supportsDescriptors) { + defineProperty = function (object, name, method, forceAssign) { + if (!forceAssign && (name in object)) { return; } + Object.defineProperty(object, name, { + configurable: true, + enumerable: false, + writable: true, + value: method + }); + }; + } else { + defineProperty = function (object, name, method, forceAssign) { + if (!forceAssign && (name in object)) { return; } + object[name] = method; + }; + } + return function defineProperties(object, map, forceAssign) { + for (var name in map) { + if (has.call(map, name)) { + defineProperty(object, name, map[name], forceAssign); + } + } + }; +}(ObjectPrototype.hasOwnProperty)); // // Util // ====== // -// ES5 9.4 -// http://es5.github.com/#x9.4 -// http://jsperf.com/to-integer - -function toInteger(n) { - n = +n; - if (n !== n) { // isNaN - n = 0; - } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - return n; -} - -function isPrimitive(input) { +/* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */ +var isPrimitive = function isPrimitive(input) { var type = typeof input; - return ( - input === null || - type === "undefined" || - type === "boolean" || - type === "number" || - type === "string" - ); -} + return input === null || (type !== 'object' && type !== 'function'); +}; -function toPrimitive(input) { - var val, valueOf, toStr; - if (isPrimitive(input)) { - return input; - } - valueOf = input.valueOf; - if (isFunction(valueOf)) { - val = valueOf.call(input); - if (isPrimitive(val)) { - return val; +var ES = { + // ES5 9.4 + // http://es5.github.com/#x9.4 + // http://jsperf.com/to-integer + /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */ + ToInteger: function ToInteger(num) { + var n = +num; + if (n !== n) { // isNaN + n = 0; + } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); } - } - toStr = input.toString; - if (isFunction(toStr)) { - val = toStr.call(input); - if (isPrimitive(val)) { - return val; + return n; + }, + + /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */ + ToPrimitive: function ToPrimitive(input) { + var val, valueOf, toStr; + if (isPrimitive(input)) { + return input; } - } - throw new TypeError(); -} + valueOf = input.valueOf; + if (isCallable(valueOf)) { + val = valueOf.call(input); + if (isPrimitive(val)) { + return val; + } + } + toStr = input.toString; + if (isCallable(toStr)) { + val = toStr.call(input); + if (isPrimitive(val)) { + return val; + } + } + throw new TypeError(); + }, + + // ES5 9.9 + // http://es5.github.com/#x9.9 + /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */ + ToObject: function (o) { + /*jshint eqnull: true */ + if (o == null) { // this matches both null and undefined + throw new TypeError("can't convert " + o + ' to object'); + } + return Object(o); + }, -// ES5 9.9 -// http://es5.github.com/#x9.9 -var toObject = function (o) { - if (o == null) { // this matches both null and undefined - throw new TypeError("can't convert " + o + " to object"); + /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */ + ToUint32: function ToUint32(x) { + return x >>> 0; } - return Object(o); -}; - -var ToUint32 = function ToUint32(x) { - return x >>> 0; }; // @@ -186,20 +193,20 @@ var ToUint32 = function ToUint32(x) { // ES-5 15.3.4.5 // http://es5.github.com/#x15.3.4.5 -function Empty() {} +var Empty = function Empty() {}; defineProperties(FunctionPrototype, { bind: function bind(that) { // .length is 1 // 1. Let Target be the this value. var target = this; // 2. If IsCallable(Target) is false, throw a TypeError exception. - if (!isFunction(target)) { - throw new TypeError("Function.prototype.bind called on incompatible " + target); + if (!isCallable(target)) { + throw new TypeError('Function.prototype.bind called on incompatible ' + target); } // 3. Let A be a new (possibly empty) internal list of all of the // argument values provided after thisArg (arg1, arg2 etc), in order. // XXX slicedArgs will stand in for "A" if used - var args = _Array_slice_.call(arguments, 1); // for normal call + var args = array_slice.call(arguments, 1); // for normal call // 4. Let F be a new native ECMAScript object. // 11. Set the [[Prototype]] internal property of F to the standard // built-in Function prototype object as specified in 15.3.3.1. @@ -209,6 +216,7 @@ defineProperties(FunctionPrototype, { // 15.3.4.5.2. // 14. Set the [[HasInstance]] internal property of F as described in // 15.3.4.5.3. + var bound; var binder = function () { if (this instanceof bound) { @@ -230,7 +238,7 @@ defineProperties(FunctionPrototype, { var result = target.apply( this, - args.concat(_Array_slice_.call(arguments)) + array_concat.call(args, array_slice.call(arguments)) ); if (Object(result) === result) { return result; @@ -259,7 +267,7 @@ defineProperties(FunctionPrototype, { // equiv: target.call(this, ...boundArgs, ...args) return target.apply( that, - args.concat(_Array_slice_.call(arguments)) + array_concat.call(args, array_slice.call(arguments)) ); } @@ -278,7 +286,7 @@ defineProperties(FunctionPrototype, { // specified in 15.3.5.1. var boundArgs = []; for (var i = 0; i < boundLength; i++) { - boundArgs.push("$" + i); + boundArgs.push('$' + i); } // XXX Build a dynamic function with desired amount of arguments is the only @@ -287,7 +295,7 @@ defineProperties(FunctionPrototype, { // for ex.) all use of eval or Function costructor throws an exception. // However in all of these environments Function.prototype.bind exists // and so this code will never be executed. - var bound = Function("binder", "return function (" + boundArgs.join(",") + "){return binder.apply(this,arguments)}")(binder); + bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder); if (target.prototype) { Empty.prototype = target.prototype; @@ -325,19 +333,6 @@ defineProperties(FunctionPrototype, { // us it in defining shortcuts. var owns = call.bind(ObjectPrototype.hasOwnProperty); -// If JS engine supports accessors creating shortcuts. -var defineGetter; -var defineSetter; -var lookupGetter; -var lookupSetter; -var supportsAccessors; -if ((supportsAccessors = owns(ObjectPrototype, "__defineGetter__"))) { - defineGetter = call.bind(ObjectPrototype.__defineGetter__); - defineSetter = call.bind(ObjectPrototype.__defineSetter__); - lookupGetter = call.bind(ObjectPrototype.__lookupGetter__); - lookupSetter = call.bind(ObjectPrototype.__lookupSetter__); -} - // // Array // ===== @@ -359,7 +354,7 @@ defineProperties(ArrayPrototype, { return array_splice.apply(this, arguments); } } -}, spliceNoopReturnsEmptyArray); +}, !spliceNoopReturnsEmptyArray); var spliceWorksWithEmptyObject = (function () { var obj = {}; @@ -370,13 +365,13 @@ defineProperties(ArrayPrototype, { splice: function splice(start, deleteCount) { if (arguments.length === 0) { return []; } var args = arguments; - this.length = Math.max(toInteger(this.length), 0); + this.length = Math.max(ES.ToInteger(this.length), 0); if (arguments.length > 0 && typeof deleteCount !== 'number') { - args = _Array_slice_.call(arguments); + args = array_slice.call(arguments); if (args.length < 2) { args.push(this.length - start); } else { - args[1] = toInteger(deleteCount); + args[1] = ES.ToInteger(deleteCount); } } return array_splice.apply(this, args); @@ -419,8 +414,8 @@ defineProperties(Array, { isArray: isArray }); // Check failure of by-index access of string characters (IE < 9) // and failure of `0 in boxedString` (Rhino) -var boxedString = Object("a"); -var splitString = boxedString[0] !== "a" || !(0 in boxedString); +var boxedString = Object('a'); +var splitString = boxedString[0] !== 'a' || !(0 in boxedString); var properlyBoxesContext = function properlyBoxed(method) { // Check node 0.6.21 bug where third parameter is not boxed @@ -433,6 +428,7 @@ var properlyBoxesContext = function properlyBoxed(method) { method.call([1], function () { 'use strict'; + properlyBoxesStrict = typeof this === 'string'; }, 'x'); } @@ -440,24 +436,30 @@ var properlyBoxesContext = function properlyBoxed(method) { }; defineProperties(ArrayPrototype, { - forEach: function forEach(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - thisp = arguments[1], - i = -1, - length = self.length >>> 0; + forEach: function forEach(callbackfn /*, thisArg*/) { + var object = ES.ToObject(this); + var self = splitString && isString(this) ? this.split('') : object; + var i = -1; + var length = self.length >>> 0; + var T; + if (arguments.length > 1) { + T = arguments[1]; + } // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(); // TODO message + if (!isCallable(callbackfn)) { + throw new TypeError('Array.prototype.forEach callback must be a function'); } while (++i < length) { if (i in self) { // Invoke the callback function with call, passing arguments: // context, property value, property key, thisArg object - // context - fun.call(thisp, self[i], i, object); + if (typeof T !== 'undefined') { + callbackfn.call(T, self[i], i, object); + } else { + callbackfn(self[i], i, object); + } } } } @@ -467,21 +469,28 @@ defineProperties(ArrayPrototype, { // http://es5.github.com/#x15.4.4.19 // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map defineProperties(ArrayPrototype, { - map: function map(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - length = self.length >>> 0, - result = Array(length), - thisp = arguments[1]; + map: function map(callbackfn/*, thisArg*/) { + var object = ES.ToObject(this); + var self = splitString && isString(this) ? this.split('') : object; + var length = self.length >>> 0; + var result = Array(length); + var T; + if (arguments.length > 1) { + T = arguments[1]; + } // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); + if (!isCallable(callbackfn)) { + throw new TypeError('Array.prototype.map callback must be a function'); } for (var i = 0; i < length; i++) { if (i in self) { - result[i] = fun.call(thisp, self[i], i, object); + if (typeof T !== 'undefined') { + result[i] = callbackfn.call(T, self[i], i, object); + } else { + result[i] = callbackfn(self[i], i, object); + } } } return result; @@ -492,23 +501,26 @@ defineProperties(ArrayPrototype, { // http://es5.github.com/#x15.4.4.20 // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter defineProperties(ArrayPrototype, { - filter: function filter(fun /*, thisp */) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - length = self.length >>> 0, - result = [], - value, - thisp = arguments[1]; + filter: function filter(callbackfn /*, thisArg*/) { + var object = ES.ToObject(this); + var self = splitString && isString(this) ? this.split('') : object; + var length = self.length >>> 0; + var result = []; + var value; + var T; + if (arguments.length > 1) { + T = arguments[1]; + } // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); + if (!isCallable(callbackfn)) { + throw new TypeError('Array.prototype.filter callback must be a function'); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; - if (fun.call(thisp, value, i, object)) { + if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) { result.push(value); } } @@ -521,19 +533,22 @@ defineProperties(ArrayPrototype, { // http://es5.github.com/#x15.4.4.16 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every defineProperties(ArrayPrototype, { - every: function every(fun /*, thisp */) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - length = self.length >>> 0, - thisp = arguments[1]; + every: function every(callbackfn /*, thisArg*/) { + var object = ES.ToObject(this); + var self = splitString && isString(this) ? this.split('') : object; + var length = self.length >>> 0; + var T; + if (arguments.length > 1) { + T = arguments[1]; + } // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); + if (!isCallable(callbackfn)) { + throw new TypeError('Array.prototype.every callback must be a function'); } for (var i = 0; i < length; i++) { - if (i in self && !fun.call(thisp, self[i], i, object)) { + if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) { return false; } } @@ -545,19 +560,22 @@ defineProperties(ArrayPrototype, { // http://es5.github.com/#x15.4.4.17 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some defineProperties(ArrayPrototype, { - some: function some(fun /*, thisp */) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - length = self.length >>> 0, - thisp = arguments[1]; + some: function some(callbackfn/*, thisArg */) { + var object = ES.ToObject(this); + var self = splitString && isString(this) ? this.split('') : object; + var length = self.length >>> 0; + var T; + if (arguments.length > 1) { + T = arguments[1]; + } // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); + if (!isCallable(callbackfn)) { + throw new TypeError('Array.prototype.some callback must be a function'); } for (var i = 0; i < length; i++) { - if (i in self && fun.call(thisp, self[i], i, object)) { + if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) { return true; } } @@ -573,19 +591,19 @@ if (ArrayPrototype.reduce) { reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) { return list; }) === 'object'; } defineProperties(ArrayPrototype, { - reduce: function reduce(fun /*, initial*/) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - length = self.length >>> 0; + reduce: function reduce(callbackfn /*, initialValue*/) { + var object = ES.ToObject(this); + var self = splitString && isString(this) ? this.split('') : object; + var length = self.length >>> 0; // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); + if (!isCallable(callbackfn)) { + throw new TypeError('Array.prototype.reduce callback must be a function'); } // no value to return if no initial value and an empty array - if (!length && arguments.length === 1) { - throw new TypeError("reduce of empty array with no initial value"); + if (length === 0 && arguments.length === 1) { + throw new TypeError('reduce of empty array with no initial value'); } var i = 0; @@ -601,14 +619,14 @@ defineProperties(ArrayPrototype, { // if array contains no values, no initial value to return if (++i >= length) { - throw new TypeError("reduce of empty array with no initial value"); + throw new TypeError('reduce of empty array with no initial value'); } } while (true); } for (; i < length; i++) { if (i in self) { - result = fun.call(void 0, result, self[i], i, object); + result = callbackfn(result, self[i], i, object); } } @@ -624,22 +642,23 @@ if (ArrayPrototype.reduceRight) { reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) { return list; }) === 'object'; } defineProperties(ArrayPrototype, { - reduceRight: function reduceRight(fun /*, initial*/) { - var object = toObject(this), - self = splitString && isString(this) ? this.split('') : object, - length = self.length >>> 0; + reduceRight: function reduceRight(callbackfn/*, initial*/) { + var object = ES.ToObject(this); + var self = splitString && isString(this) ? this.split('') : object; + var length = self.length >>> 0; // If no callback function or if callback is not a callable function - if (!isFunction(fun)) { - throw new TypeError(fun + " is not a function"); + if (!isCallable(callbackfn)) { + throw new TypeError('Array.prototype.reduceRight callback must be a function'); } // no value to return if no initial value, empty array - if (!length && arguments.length === 1) { - throw new TypeError("reduceRight of empty array with no initial value"); + if (length === 0 && arguments.length === 1) { + throw new TypeError('reduceRight of empty array with no initial value'); } - var result, i = length - 1; + var result; + var i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { @@ -651,7 +670,7 @@ defineProperties(ArrayPrototype, { // if array contains no values, no initial value to return if (--i < 0) { - throw new TypeError("reduceRight of empty array with no initial value"); + throw new TypeError('reduceRight of empty array with no initial value'); } } while (true); } @@ -662,7 +681,7 @@ defineProperties(ArrayPrototype, { do { if (i in self) { - result = fun.call(void 0, result, self[i], i, object); + result = callbackfn(result, self[i], i, object); } } while (i--); @@ -675,23 +694,23 @@ defineProperties(ArrayPrototype, { // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf var hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1; defineProperties(ArrayPrototype, { - indexOf: function indexOf(sought /*, fromIndex */ ) { - var self = splitString && isString(this) ? this.split('') : toObject(this), - length = self.length >>> 0; + indexOf: function indexOf(searchElement /*, fromIndex */) { + var self = splitString && isString(this) ? this.split('') : ES.ToObject(this); + var length = self.length >>> 0; - if (!length) { + if (length === 0) { return -1; } var i = 0; if (arguments.length > 1) { - i = toInteger(arguments[1]); + i = ES.ToInteger(arguments[1]); } // handle negative indices i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { - if (i in self && self[i] === sought) { + if (i in self && self[i] === searchElement) { return i; } } @@ -704,21 +723,21 @@ defineProperties(ArrayPrototype, { // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf var hasFirefox2LastIndexOfBug = Array.prototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1; defineProperties(ArrayPrototype, { - lastIndexOf: function lastIndexOf(sought /*, fromIndex */) { - var self = splitString && isString(this) ? this.split('') : toObject(this), - length = self.length >>> 0; + lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */) { + var self = splitString && isString(this) ? this.split('') : ES.ToObject(this); + var length = self.length >>> 0; - if (!length) { + if (length === 0) { return -1; } var i = length - 1; if (arguments.length > 1) { - i = Math.min(i, toInteger(arguments[1])); + i = Math.min(i, ES.ToInteger(arguments[1])); } // handle negative indices i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { - if (i in self && sought === self[i]) { + if (i in self && searchElement === self[i]) { return i; } } @@ -735,37 +754,40 @@ defineProperties(ArrayPrototype, { // http://es5.github.com/#x15.2.3.14 // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation -var hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), - hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'), +var hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString'), + hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype'), + hasStringEnumBug = !owns('x', '0'), dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' ], dontEnumsLength = dontEnums.length; defineProperties(Object, { keys: function keys(object) { - var isFn = isFunction(object), + var isFn = isCallable(object), isArgs = isArguments(object), isObject = object !== null && typeof object === 'object', isStr = isObject && isString(object); if (!isObject && !isFn && !isArgs) { - throw new TypeError("Object.keys called on a non-object"); + throw new TypeError('Object.keys called on a non-object'); } var theKeys = []; var skipProto = hasProtoEnumBug && isFn; - if (isStr || isArgs) { + if ((isStr && hasStringEnumBug) || isArgs) { for (var i = 0; i < object.length; ++i) { theKeys.push(String(i)); } - } else { + } + + if (!isArgs) { for (var name in object) { if (!(skipProto && name === 'prototype') && owns(object, name)) { theKeys.push(String(name)); @@ -815,14 +837,14 @@ defineProperties(Object, { // The time zone is always UTC, denoted by the suffix Z. If the time value of // this object is not a finite Number a RangeError exception is thrown. var negativeDate = -62198755200000; -var negativeYearString = "-000001"; +var negativeYearString = '-000001'; var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1; defineProperties(Date.prototype, { toISOString: function toISOString() { var result, length, value, year, month; if (!isFinite(this)) { - throw new RangeError("Date.prototype.toISOString called on non-finite value."); + throw new RangeError('Date.prototype.toISOString called on non-finite value.'); } year = this.getUTCFullYear(); @@ -835,8 +857,8 @@ defineProperties(Date.prototype, { // the date time string format is specified in 15.9.1.15. result = [month + 1, this.getUTCDate(), this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()]; year = ( - (year < 0 ? "-" : (year > 9999 ? "+" : "")) + - ("00000" + Math.abs(year)).slice(0 <= year && year <= 9999 ? -4 : -6) + (year < 0 ? '-' : (year > 9999 ? '+' : '')) + + ('00000' + Math.abs(year)).slice((0 <= year && year <= 9999) ? -4 : -6) ); length = result.length; @@ -845,37 +867,34 @@ defineProperties(Date.prototype, { // pad months, days, hours, minutes, and seconds to have two // digits. if (value < 10) { - result[length] = "0" + value; + result[length] = '0' + value; } } // pad milliseconds to have three digits. return ( - year + "-" + result.slice(0, 2).join("-") + - "T" + result.slice(2).join(":") + "." + - ("000" + this.getUTCMilliseconds()).slice(-3) + "Z" + year + '-' + result.slice(0, 2).join('-') + + 'T' + result.slice(2).join(':') + '.' + + ('000' + this.getUTCMilliseconds()).slice(-3) + 'Z' ); } }, hasNegativeDateBug); - // ES5 15.9.5.44 // http://es5.github.com/#x15.9.5.44 // This function provides a String representation of a Date object for use by // JSON.stringify (15.12.3). -var dateToJSONIsSupported = false; -try { - dateToJSONIsSupported = ( - Date.prototype.toJSON && - new Date(NaN).toJSON() === null && - new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 && - Date.prototype.toJSON.call({ // generic - toISOString: function () { - return true; - } - }) - ); -} catch (e) { -} +var dateToJSONIsSupported = (function () { + try { + return Date.prototype.toJSON && + new Date(NaN).toJSON() === null && + new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 && + Date.prototype.toJSON.call({ // generic + toISOString: function () { return true; } + }); + } catch (e) { + return false; + } +}()); if (!dateToJSONIsSupported) { Date.prototype.toJSON = function toJSON(key) { // When the toJSON method is called with argument key, the following @@ -883,24 +902,23 @@ if (!dateToJSONIsSupported) { // 1. Let O be the result of calling ToObject, giving it the this // value as its argument. - // 2. Let tv be toPrimitive(O, hint Number). - var o = Object(this), - tv = toPrimitive(o), - toISO; + // 2. Let tv be ES.ToPrimitive(O, hint Number). + var O = Object(this); + var tv = ES.ToPrimitive(O); // 3. If tv is a Number and is not finite, return null. - if (typeof tv === "number" && !isFinite(tv)) { + if (typeof tv === 'number' && !isFinite(tv)) { return null; } // 4. Let toISO be the result of calling the [[Get]] internal method of // O with argument "toISOString". - toISO = o.toISOString; + var toISO = O.toISOString; // 5. If IsCallable(toISO) is false, throw a TypeError exception. - if (typeof toISO !== "function") { - throw new TypeError("toISOString property is not callable"); + if (!isCallable(toISO)) { + throw new TypeError('toISOString property is not callable'); } // 6. Return the result of calling the [[Call]] internal method of // toISO with O as the this value and an empty argument list. - return toISO.call(o); + return toISO.call(O); // NOTE 1 The argument is ignored. @@ -918,20 +936,23 @@ if (!dateToJSONIsSupported) { // based on work shared by Daniel Friesen (dantman) // http://gist.github.com/303249 var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15; -var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')); -var doesNotParseY2KNewYear = isNaN(Date.parse("2000-01-01T00:00:00.000Z")); +var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z')); +var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z')); if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) { // XXX global assignment won't work in embeddings that use // an alternate object for the context. + /*global Date: true */ + /*eslint-disable no-undef*/ Date = (function (NativeDate) { - + /*eslint-enable no-undef*/ // Date.length === 7 - function Date(Y, M, D, h, m, s, ms) { + var DateShim = function Date(Y, M, D, h, m, s, ms) { var length = arguments.length; + var date; if (this instanceof NativeDate) { - var date = length === 1 && String(Y) === Y ? // isString(Y) + date = length === 1 && String(Y) === Y ? // isString(Y) // We explicitly pass it through parse: - new NativeDate(Date.parse(Y)) : + new NativeDate(DateShim.parse(Y)) : // We have to manually make calls depending on argument // length here length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) : @@ -942,41 +963,40 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt length >= 2 ? new NativeDate(Y, M) : length >= 1 ? new NativeDate(Y) : new NativeDate(); - // Prevent mixups with unfixed Date object - date.constructor = Date; - return date; + } else { + date = NativeDate.apply(this, arguments); } - return NativeDate.apply(this, arguments); - } + // Prevent mixups with unfixed Date object + defineProperties(date, { constructor: DateShim }, true); + return date; + }; // 15.9.1.15 Date Time String Format. - var isoDateExpression = new RegExp("^" + - "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign + + var isoDateExpression = new RegExp('^' + + '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign + // 6-digit extended year - "(?:-(\\d{2})" + // optional month capture - "(?:-(\\d{2})" + // optional day capture - "(?:" + // capture hours:minutes:seconds.milliseconds - "T(\\d{2})" + // hours capture - ":(\\d{2})" + // minutes capture - "(?:" + // optional :seconds.milliseconds - ":(\\d{2})" + // seconds capture - "(?:(\\.\\d{1,}))?" + // milliseconds capture - ")?" + - "(" + // capture UTC offset component - "Z|" + // UTC capture - "(?:" + // offset specifier +/-hours:minutes - "([-+])" + // sign capture - "(\\d{2})" + // hours offset capture - ":(\\d{2})" + // minutes offset capture - ")" + - ")?)?)?)?" + - "$"); - - var months = [ - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 - ]; - - function dayFromMonth(year, month) { + '(?:-(\\d{2})' + // optional month capture + '(?:-(\\d{2})' + // optional day capture + '(?:' + // capture hours:minutes:seconds.milliseconds + 'T(\\d{2})' + // hours capture + ':(\\d{2})' + // minutes capture + '(?:' + // optional :seconds.milliseconds + ':(\\d{2})' + // seconds capture + '(?:(\\.\\d{1,}))?' + // milliseconds capture + ')?' + + '(' + // capture UTC offset component + 'Z|' + // UTC capture + '(?:' + // offset specifier +/-hours:minutes + '([-+])' + // sign capture + '(\\d{2})' + // hours offset capture + ':(\\d{2})' + // minutes offset capture + ')' + + ')?)?)?)?' + + '$'); + + var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]; + + var dayFromMonth = function dayFromMonth(year, month) { var t = month > 1 ? 1 : 0; return ( months[month] + @@ -985,25 +1005,31 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt Math.floor((year - 1601 + t) / 400) + 365 * (year - 1970) ); - } + }; - function toUTC(t) { + var toUTC = function toUTC(t) { return Number(new NativeDate(1970, 0, 1, 0, 0, 0, t)); - } + }; // Copy any custom methods a 3rd party library may have added for (var key in NativeDate) { - Date[key] = NativeDate[key]; + if (owns(NativeDate, key)) { + DateShim[key] = NativeDate[key]; + } } // Copy "native" methods explicitly; they may be non-enumerable - Date.now = NativeDate.now; - Date.UTC = NativeDate.UTC; - Date.prototype = NativeDate.prototype; - Date.prototype.constructor = Date; + defineProperties(DateShim, { + now: NativeDate.now, + UTC: NativeDate.UTC + }, true); + DateShim.prototype = NativeDate.prototype; + defineProperties(DateShim.prototype, { + constructor: DateShim + }, true); // Upgrade Date.parse to handle simplified ISO 8601 strings - Date.parse = function parse(string) { + DateShim.parse = function parse(string) { var match = isoDateExpression.exec(string); if (match) { // parse months, days, hours, minutes, seconds, and milliseconds @@ -1020,7 +1046,7 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt // (ES 5.1 bug) // see https://bugs.ecmascript.org/show_bug.cgi?id=112 isLocalTime = Boolean(match[4] && !match[8]), - signOffset = match[9] === "-" ? 1 : -1, + signOffset = match[9] === '-' ? 1 : -1, hourOffset = Number(match[10] || 0), minuteOffset = Number(match[11] || 0), result; @@ -1059,8 +1085,9 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt return NativeDate.parse.apply(this, arguments); }; - return Date; - })(Date); + return DateShim; + }(Date)); + /*global Date: false */ } // ES5 15.9.4.4 @@ -1071,7 +1098,6 @@ if (!Date.now) { }; } - // // Number // ====== @@ -1080,10 +1106,10 @@ if (!Date.now) { // ES5.1 15.7.4.5 // http://es5.github.com/#x15.7.4.5 var hasToFixedBugs = NumberPrototype.toFixed && ( - (0.00008).toFixed(3) !== '0.000' - || (0.9).toFixed(0) !== '1' - || (1.255).toFixed(2) !== '1.25' - || (1000000000000000128).toFixed(0) !== "1000000000000000128" + (0.00008).toFixed(3) !== '0.000' || + (0.9).toFixed(0) !== '1' || + (1.255).toFixed(2) !== '1.25' || + (1000000000000000128).toFixed(0) !== '1000000000000000128' ); var toFixedHelpers = { @@ -1092,10 +1118,11 @@ var toFixedHelpers = { data: [0, 0, 0, 0, 0, 0], multiply: function multiply(n, c) { var i = -1; + var c2 = c; while (++i < toFixedHelpers.size) { - c += n * toFixedHelpers.data[i]; - toFixedHelpers.data[i] = c % toFixedHelpers.base; - c = Math.floor(c / toFixedHelpers.base); + c2 += n * toFixedHelpers.data[i]; + toFixedHelpers.data[i] = c2 % toFixedHelpers.base; + c2 = Math.floor(c2 / toFixedHelpers.base); } }, divide: function divide(n) { @@ -1126,13 +1153,14 @@ var toFixedHelpers = { }, log: function log(x) { var n = 0; - while (x >= 4096) { + var x2 = x; + while (x2 >= 4096) { n += 12; - x /= 4096; + x2 /= 4096; } - while (x >= 2) { + while (x2 >= 2) { n += 1; - x /= 2; + x2 /= 2; } return n; } @@ -1147,14 +1175,14 @@ defineProperties(NumberPrototype, { f = f !== f ? 0 : Math.floor(f); if (f < 0 || f > 20) { - throw new RangeError("Number.toFixed called with invalid number of decimals"); + throw new RangeError('Number.toFixed called with invalid number of decimals'); } x = Number(this); // Test for NaN if (x !== x) { - return "NaN"; + return 'NaN'; } // If it is too big or small, return the string value of the number @@ -1162,14 +1190,14 @@ defineProperties(NumberPrototype, { return String(x); } - s = ""; + s = ''; if (x < 0) { - s = "-"; + s = '-'; x = -x; } - m = "0"; + m = '0'; if (x > 1e-21) { // 1e-21 < x < 1e21 @@ -1225,7 +1253,6 @@ defineProperties(NumberPrototype, { } }, hasToFixedBugs); - // // String // ====== @@ -1250,38 +1277,38 @@ var string_split = StringPrototype.split; if ( 'ab'.split(/(?:ab)*/).length !== 2 || '.'.split(/(.?)(.?)/).length !== 4 || - 'tesst'.split(/(s)*/)[1] === "t" || + 'tesst'.split(/(s)*/)[1] === 't' || 'test'.split(/(?:)/, -1).length !== 4 || ''.split(/.?/).length || '.'.split(/()()/).length > 1 ) { (function () { - var compliantExecNpcg = /()??/.exec("")[1] === void 0; // NPCG: nonparticipating capturing group + var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group StringPrototype.split = function (separator, limit) { var string = this; - if (separator === void 0 && limit === 0) { + if (typeof separator === 'undefined' && limit === 0) { return []; } // If `separator` is not a regex, use native split - if (_toString.call(separator) !== "[object RegExp]") { + if (!isRegex(separator)) { return string_split.call(this, separator, limit); } - var output = [], - flags = (separator.ignoreCase ? "i" : "") + - (separator.multiline ? "m" : "") + - (separator.extended ? "x" : "") + // Proposed for ES6 - (separator.sticky ? "y" : ""), // Firefox 3+ + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.extended ? 'x' : '') + // Proposed for ES6 + (separator.sticky ? 'y' : ''), // Firefox 3+ lastLastIndex = 0, // Make `global` and avoid `lastIndex` issues by working with a copy separator2, match, lastIndex, lastLength; - separator = new RegExp(separator.source, flags + "g"); - string += ""; // Type-convert + var separatorCopy = new RegExp(separator.source, flags + 'g'); + string += ''; // Type-convert if (!compliantExecNpcg) { // Doesn't need flags gy, but they don't hurt - separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags); + separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags); } /* Values for `limit`, per the spec: * If undefined: 4294967295 // Math.pow(2, 32) - 1 @@ -1290,46 +1317,50 @@ if ( * If negative number: 4294967296 - Math.floor(Math.abs(limit)) * If other: Type-convert, then use the above rules */ - limit = limit === void 0 ? + var splitLimit = typeof limit === 'undefined' ? -1 >>> 0 : // Math.pow(2, 32) - 1 - ToUint32(limit); - while (match = separator.exec(string)) { - // `separator.lastIndex` is not reliable cross-browser + ES.ToUint32(limit); + match = separatorCopy.exec(string); + while (match) { + // `separatorCopy.lastIndex` is not reliable cross-browser lastIndex = match.index + match[0].length; if (lastIndex > lastLastIndex) { output.push(string.slice(lastLastIndex, match.index)); // Fix browsers whose `exec` methods don't consistently return `undefined` for // nonparticipating capturing groups if (!compliantExecNpcg && match.length > 1) { + /*eslint-disable no-loop-func */ match[0].replace(separator2, function () { for (var i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === void 0) { + if (typeof arguments[i] === 'undefined') { match[i] = void 0; } } }); + /*eslint-enable no-loop-func */ } if (match.length > 1 && match.index < string.length) { - ArrayPrototype.push.apply(output, match.slice(1)); + array_push.apply(output, match.slice(1)); } lastLength = match[0].length; lastLastIndex = lastIndex; - if (output.length >= limit) { + if (output.length >= splitLimit) { break; } } - if (separator.lastIndex === match.index) { - separator.lastIndex++; // Avoid an infinite loop + if (separatorCopy.lastIndex === match.index) { + separatorCopy.lastIndex++; // Avoid an infinite loop } + match = separatorCopy.exec(string); } if (lastLastIndex === string.length) { - if (lastLength || !separator.test("")) { - output.push(""); + if (lastLength || !separatorCopy.test('')) { + output.push(''); } } else { output.push(string.slice(lastLastIndex)); } - return output.length > limit ? output.slice(0, limit) : output; + return output.length > splitLimit ? output.slice(0, splitLimit) : output; }; }()); @@ -1339,9 +1370,9 @@ if ( // then the output array is truncated so that it contains no more than limit // elements. // "0".split(undefined, 0) -> [] -} else if ("0".split(void 0, 0).length) { +} else if ('0'.split(void 0, 0).length) { StringPrototype.split = function split(separator, limit) { - if (separator === void 0 && limit === 0) { return []; } + if (typeof separator === 'undefined' && limit === 0) { return []; } return string_split.call(this, separator, limit); }; } @@ -1357,7 +1388,7 @@ var replaceReportsGroupsCorrectly = (function () { if (!replaceReportsGroupsCorrectly) { StringPrototype.replace = function replace(searchValue, replaceValue) { - var isFn = isFunction(replaceValue); + var isFn = isCallable(replaceValue); var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source); if (!isFn || !hasCapturingGroups) { return str_replace.call(this, searchValue, replaceValue); @@ -1366,7 +1397,7 @@ if (!replaceReportsGroupsCorrectly) { var length = arguments.length; var originalLastIndex = searchValue.lastIndex; searchValue.lastIndex = 0; - var args = searchValue.exec(match); + var args = searchValue.exec(match) || []; searchValue.lastIndex = originalLastIndex; args.push(arguments[length - 2], arguments[length - 1]); return replaceValue.apply(this, args); @@ -1382,48 +1413,47 @@ if (!replaceReportsGroupsCorrectly) { // normalized across all browsers // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE var string_substr = StringPrototype.substr; -var hasNegativeSubstrBug = "".substr && "0b".substr(-1) !== "b"; +var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b'; defineProperties(StringPrototype, { substr: function substr(start, length) { - return string_substr.call( - this, - start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start, - length - ); + var normalizedStart = start; + if (start < 0) { + normalizedStart = Math.max(this.length + start, 0); + } + return string_substr.call(this, normalizedStart, length); } }, hasNegativeSubstrBug); // ES5 15.5.4.20 // whitespace from: http://es5.github.io/#x15.5.4.20 -var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + - "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + - "\u2029\uFEFF"; +var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' + + '\u2029\uFEFF'; var zeroWidth = '\u200b'; -var wsRegexChars = "[" + ws + "]"; -var trimBeginRegexp = new RegExp("^" + wsRegexChars + wsRegexChars + "*"); -var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + "*$"); +var wsRegexChars = '[' + ws + ']'; +var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*'); +var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$'); var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim()); defineProperties(StringPrototype, { // http://blog.stevenlevithan.com/archives/faster-trim-javascript // http://perfectionkills.com/whitespace-deviations/ trim: function trim() { - if (this === void 0 || this === null) { - throw new TypeError("can't convert " + this + " to object"); + if (typeof this === 'undefined' || this === null) { + throw new TypeError("can't convert " + this + ' to object'); } - return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); + return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, ''); } }, hasTrimWhitespaceBug); // ES-5 15.1.2.2 if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) { + /*global parseInt: true */ parseInt = (function (origParseInt) { var hexRegex = /^0[xX]/; - return function parseIntES5(str, radix) { - str = String(str).trim(); - if (!Number(radix)) { - radix = hexRegex.test(str) ? 16 : 10; - } - return origParseInt(str, radix); + return function parseInt(str, radix) { + var string = String(str).trim(); + var defaultedRadix = Number(radix) || (hexRegex.test(string) ? 16 : 10); + return origParseInt(string, defaultedRadix); }; }(parseInt)); } diff --git a/resources/lib/jquery.client/jquery.client.js b/resources/lib/jquery.client/jquery.client.js index 1560c7d2..8257d85b 100644 --- a/resources/lib/jquery.client/jquery.client.js +++ b/resources/lib/jquery.client/jquery.client.js @@ -1,5 +1,5 @@ /*! - * jQuery Client v1.0.0 + * jQuery Client v2.0.0 * https://www.mediawiki.org/wiki/JQuery_Client * * Copyright 2010-2015 jquery-client maintainers and other contributors. @@ -182,9 +182,12 @@ version = match[1]; } } - // And IE 12's different lies about not being IE + // And MS Edge's lies about being Chrome + // + // It's different enough from classic IE Trident engine that they do this + // to avoid getting caught by MSIE-specific browser sniffing. if ( name === 'chrome' && ( match = ua.match( /\bedge\/([0-9\.]*)/ ) ) ) { - name = 'msie'; + name = 'edge'; version = match[1]; layout = 'edge'; layoutversion = parseInt( match[1], 10 ); diff --git a/resources/lib/jquery.i18n/CREDITS b/resources/lib/jquery.i18n/CREDITS new file mode 100644 index 00000000..3a4eb5e2 --- /dev/null +++ b/resources/lib/jquery.i18n/CREDITS @@ -0,0 +1,9 @@ +Credits +======= + +Santhosh Thottingal +Amir E. Aharoni +Siebrand Mazeland +Niklas Laxström +Neil Kandalgaonkar +David Chan diff --git a/resources/lib/jquery.i18n/GPL-LICENSE b/resources/lib/jquery.i18n/GPL-LICENSE new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/resources/lib/jquery.i18n/GPL-LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/resources/lib/jquery.i18n/MIT-LICENSE b/resources/lib/jquery.i18n/MIT-LICENSE new file mode 100644 index 00000000..f3a03b7e --- /dev/null +++ b/resources/lib/jquery.i18n/MIT-LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2012-2013 Santhosh Thottingal and other +contributors. See CREDITS for a list. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/resources/lib/jquery.i18n/README.md b/resources/lib/jquery.i18n/README.md new file mode 100644 index 00000000..da82c2bc --- /dev/null +++ b/resources/lib/jquery.i18n/README.md @@ -0,0 +1,432 @@ +jQuery.i18n +=========== + +jQuery.i18n is a jQuery based Javascript internationalization library. It helps you to internationalize your web applications easily. + +This is a project by Wikimedia foundation's [Language Engineering team](http://wikimediafoundation.org/wiki/Language_Engineering_team) and used in some of the Wikimedia Foundation projects like Universal Language Selector. + +The jquery.i18n library uses a json based localization file format, "banana", which is used as the localization file format for MediaWiki and other projects. + +Features +======== +* Simple file format - JSON. Easily readable for humans and machines. +* Author and metadata information is not lost anywhere. There are other file formats using comments to store this. +* Uses MediaWiki convention for placeholders. Easily readable and proven convention. Example: ```There are $1 cars``` +* Supports plural conversion without using extra messages for all plural forms. Plural rule handling is done using CLDR. Covers a wide range of languages +* Supports gender. By passing the gender value, you get correct sentences according to gender. +* Supports grammar forms. jquery.i18n has a basic but extensible grammar conversion support +* Fallback chains for all languages. +* Data api- the message key. Example: ```
    3. ```. +* Dynamic change of interface language without refreshing a webpage. +* Nestable grammar, plural, gender support. These constructs can be nested to any arbitrary level for supporting sophisticated message localization +* Message documentation through special language code ```qqq``` +* Extensible message parser to add or customize magic words in the messages. Example: ```{sitename}``` or ```[[link]]`` + + +Quick start +----------- + +```bash +git clone https://github.com/wikimedia/jquery.i18n.git +cd jquery.i18n +git submodule update --init +``` + +Testing +------- + +```shell +npm install +``` + +To run tests locally, run `npm test`, and this will run the tests. + +Message File Format +=================== + +The message files are json formatted. As a convention you can have a folder named i18n inside your source code. For each language or locale, have a file named like languagecode.json. + +Example: +``` +App + |--src + |--doc + |--i18n + |--ar.json + |--de.json + |--en.json + |--he.json + |--hi.json + |--fr.json + |--qqq.json +``` + +A simple en.json file example is given below + +```json +{ + "@metadata": { + "authors": [ + "Alice", + "David", + "Santhosh" + ], + "last-updated": "2012-09-21", + "locale": "en", + "message-documentation": "qqq", + "AnotherMetadata": "AnotherMedatadataValue" + }, + "appname-title": "Example Application", + "appname-sub-title": "An example application with jquery.i18n", + "appname-header-introduction": "Introduction", + "appname-about": "About this application", + "appname-footer": "Footer text" +} +``` + +The json file should be a valid json. The ```@metadata``` holds all kind of data that are not messages. You can store author information, copyright, updated date or anything there. + +Messages are key value pairs. It is a good convention to prefix your appname to message keys to make the messages unique. It acts as the namespace for the message keys. It is also a good convention to have the message keys with ```-``` separated words, all in lower case. + +If you are curious to see some real jquery.i18n message file from other projects: + +- message files of MediaWiki https://github.com/wikimedia/mediawiki-core/tree/master/languages/i18n +- message files from jquery.uls project https://github.com/wikimedia/jquery.uls/blob/master/i18n + +Single message file for all languages +------------------------------------- +There are some alternate message file format supported for different use cases. If your application is not big, and want all the translation in a single file, you can have it as shown in the below example: + +```json +{ + "@metadata": { + "authors": [ + "Alice", + "David", + "Santhosh" + ], + "last-updated": "2012-09-21", + "locale": "en", + "message-documentation": "qqq", + "AnotherMetadata": "AnotherMedatadataValue" + }, + "en": { + "appname-title": "Example Application", + "appname-sub-title": "An example application with jquery.i18n", + "appname-header-introduction": "Introduction", + "appname-about": "About this application", + "appname-footer": "Footer text" + }, + "ml": { + "appname-title": "à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·à´¨àµâ€ ഉദാഹരണം", + "appname-sub-title": "jquery.i18n ഉപയോഗിചàµà´šàµà´³àµà´³ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·à´¨àµâ€ ഉദാഹരണം", + "appname-header-introduction": "ആമàµà´–à´‚", + "appname-about": "à´ˆ à´…à´ªàµà´²à´¿à´•àµà´•àµ‡à´·à´¨àµ†à´ªàµà´ªà´±àµà´±à´¿", + "appname-footer": "à´…à´Ÿà´¿à´•àµà´•àµà´±à´¿à´ªàµà´ªàµàµ" + } +} +``` + +Here the json file contains language code as key value and messagekey-message pairs as the value for all language pairs. You can choose this format or per-language file formats depending on your use case. Per-language files are more convenient for collaboration, version controlling, scalability, etc. + +In this approach, it is also possible to give a file name as the value of language code. + +```json +{ + "@metadata": { + "authors": [ + "Alice", + "David", + "Santhosh" + ], + "last-updated": "2012-09-21", + "locale": "en", + "message-documentation": "qqq", + "AnotherMetadata": "AnotherMedatadataValue" + }, + "en": { + "appname-title": "Example Application", + "appname-sub-title": "An example application with jquery.i18n", + "appname-header-introduction": "Introduction", + "appname-about": "About this application", + "appname-footer": "Footer text" + }, + "ml": "path/to/ml.json" +} +``` + +Translation +=========== +To translate the jquery.i18n application, depending on the expertise of the translator, there are multiple ways. + +* Editing the json files directly - Suitable for translators with technical background. Also suitable if your application is small and you want to work with only a small number of languages +* Providing a translation interface along with your application: Suitable for proprietary or private applications with significant amount of translators +* Using open source translation platforms like translatewiki.net. The MediaWiki and jquery.uls from previous examples use translatewiki.net for crowdsourced message translation. Translatewiki.net can update your code repo in regular intervals with updated translations. Highly recommended if your application is opensource and want localized to as many as languages possible with maximum number of translators. + +Usage +===== + +## Switching locale + +While initializing the `jquery.i18n`, the locale for the page can be given using the `locale` option. For example + +```javascript +$.i18n( { + locale: 'he' // Locale is Hebrew +} ); +``` + +In case locale option is not given, `jquery.i18n` plugin will use the language attribute given for the html tag. For example + +```html + +``` + +In this case the locale will be he(Hebrew). If that `lang` attribute is also missing, it will try to use the locale specified by the browser. + +It is possible to switch to another locale after plugin is initialized. See below example: + +```javascript +$.i18n({ + locale: 'he' // Locale is Hebrew +}); +$.i18n( 'message_hello' ); // This will give the Hebrew translation of message key `message_hello`. +$.i18n().locale = 'ml'; // Now onwards locale is 'Malayalam' +$.i18n( 'message_hello' ); // This will give the Malayalam translation of message key `message_hello`. +``` + +## Message Loading + +JSON formatted messages can be loaded to the plugin using multiple ways. + +### Dynamic loading using `load` method. + +Following example shows loading messages for two locales- localex, and localey. Here localex and localey are just examples. They should be valid IS0 639 language codes(eg: en, ml, hi, fr, ta etc) + +```javascript +$.i18n().load( { + 'localex' : { + 'message-key1' : 'message1' // Message for localex. + }, + 'localey' : { + 'message-key1' : 'message1' + } +} ); +``` + +If we want to load the messages for a specific locale, it can be done like this: + +```javascript +$.i18n().load({ + 'message-hello': 'Hello World', + 'message-welcome': 'Welcome' +}, 'en'); +``` + +Note the second argument for the `load` method. It should be a valid language code. + +It is also possible to refer messages from an external URL. See below example + +```javascript +$.i18n().load( { + en: { + message_hello: 'Hello World', + message_welcome: 'Welcome' + }, + hi: 'i18n/messages-hi.json', // Messages for Hindi + de: 'i18n/messages-de.json' +} ); +``` + +Messages for a locale can be also loaded in parts. Example + +```javascript +$.i18n().load( { + en: { + message_hello: 'Hello World', + message_welcome: 'Welcome' + } +} ); + +$.i18n().load( { + // This does not remove the previous messages. + en: { + 'message_header' : 'Header', + 'message_footer' : 'Footer', + // This will overwrite message_welcome message + 'message_welcome' : 'Welcome back' + } +} ); +``` + +Since it is desirable to render interface messages instantly and not after a delay of loading the message files from a server, make sure that the messages are present at client side before using jQuery.i18n. + +The library should expose an API to load an object containing key-value pair of messages. Example: ```$.i18n.load(data)```. This will return a ```jQuery.Promise```. + +jquery.i18n plugin +========================= + +The jQuery plugin defines ```$.i18n()``` and ```$.fn.i18n()``` + +```javascript +$.i18n( 'message-key-sample1' ); +$.i18n( 'message-key-sample1' ); +$.i18n( 'Found $1 {{plural:$1|result|results}}', 10 ); // Message key itself is message text +$.i18n( 'Showing $1 out of $2 {{plural:$2|result|results}}', 5,100 ); +$.i18n(' User X updated {{gender|his|her}} profile', 'male' ); + +$( '#foo' ).i18n(); // to translate the element matching jquery selector based on data-i18n key +``` + +Data API +-------- + +It is possible to display localized messages without any custom JavaScript. For the HTML tags, add an attribute data-i18n with value as the message key. Example: +```html +
    4. . +``` + +It is also possible to have the above li node with fallback text already in place. +```html +
    5. Fallback text
    6. +``` + +The framework will place the localized message corresponding to message-key as the text value of the node. Similar to $('selector').i18n( ... ). +This will not work for dynamically created elements. + +Note that if data-i18n contains html markup, that html will not be used as the element content, instead, the text version will be used. $.fn.i18n is always about replacing text of the element. If you want to change the html of the element, you may want to use: ```$(selector).html($.i18n(messagekey))``` + +Examples +======== + +See http://thottingal.in/projects/js/jquery.i18n/demo/ + +Message format +============== + +## Placeholders + +Messages take parameters. They are represented by $1, $2, $3, … in the message texts, and replaced at run time. Typical parameter values are numbers (Example: "Delete 3 versions?"), or user names (Example: "Page last edited by $1"), page names, links, and so on, or sometimes other messages. + +```javascript +var message = "Welcome, $1"; +$.i18n(message, 'Alice'); // This gives "Welcome, Alice" +``` + + +## Plurals + +To make the syntax of sentence correct, plural forms are required. jquery.i18n support plural forms in the message using the syntax `{{PLURAL:$1|pluralform1|pluralform2|...}}` + +For example: + +```javascript +var message = "Found $1 {{PLURAL:$1|result|results}}"; +$.i18n(message, 1); // This gives "Found 1 result" +$.i18n(message, 4); // This gives "Found 4 results" +``` +Note that {{PLURAL:...}} is not case sensitive. It can be {{plural:...}} too. + +In case of English, there are only 2 plural forms, but many languages use more than 2 plural forms. All the plural forms can be given in the above syntax, separated by pipe(|) + +## Gender +Similar to plural, depending on gender of placeholders, mostly user names, the syntax changes dynamically. An example in English is "Alice changed her profile picture" and "Bob changed his profile picture". To support this {{GENDER...}} syntax can be used as show in example + +```javascript +var message = "$1 changed {{GENDER:$2|his|her}} profile picture"; +$.i18n(message, 'Alice', 'female' ); // This gives "Alice changed her profile picture" +$.i18n(message, 'Bob', 'male' ); // This gives "Bob changed his profile picture" +``` + +Note that {{GENDER:...}} is not case sensitive. It can be {{gender:...}} too. + +## Grammar + + +```javascript +$.i18n( { locale: 'fi' } ); + +var message = "{{grammar:genitive|$1}}"; + +$.i18n(message, 'talo' ); // This gives "talon" + +$.i18n().locale = 'hy'; // Switch to locale Armenian +$.i18n(message, 'Մաունա'); // This gives "Մաունայի" +``` + +## Directionality-safe isolation + +To avoid BIDI corruption that looks like "(Foo_(Bar", which happens when a string is inserted into a context with the reverse directionality, you can use `{{bidi:…}}`. Directionality-neutral characters at the edge of the string can get wrongly interpreted by the BIDI algorithm. This would let you embed your substituted string into a new BIDI context, //e.g.//: + + "`Shalom, {{bidi:$1}}, hi!`" + +The embedded context's directionality is determined by looking at the argument for `$1`, and then explicitly inserted into the Unicode text, ensuring correct rendering (because then the bidi algorithm "knows" the argument text is a separate context). + + +Fallback +======== + +The plugin takes an option 'fallback' with the default value 'en'. The library reuses the fallback data available in MediaWiki for calculating the language fallbacks. Fallbacks are used when a message key is not found in a locale. Example fallbacks: sa->hi->en or tt->tt-cyrl->ru. + +See jquery.i18n.fallbacks.js in the source. + +Magic word support +=================== +* For plural, gender and grammar support, MediaWiki template-like syntax - {{...}} will be used. +* There will be a default implementation for all these in $.i18n.language['default'] +* The plural, gender and grammar methods in ```$.i18n.language[ 'default' ]``` can be overridden or extended in ```$.i18n.language['languageCode']```. +* Language-specific rules about Gender and Grammar can be written in languages/langXYZ.js files +* Plural forms will be dynamically calculated using the CLDR plural parser. + +Extending the parser +-------------------- +Following example illustrates extending the parser to support more magic words + +```javascript +$.extend( $.i18n.parser.emitter, { + // Handle SITENAME keywords + sitename: function () { + return 'Wikipedia'; + }, + // Handle LINK keywords + link: function ( nodes ) { + return '
      ' + nodes[0] + ''; + } +} ); +``` + +This will parse the message +```javascript +$.i18n( '{{link:{{SITENAME}}|http://en.wikipedia.org}}' ); +``` + +to + +```html +Wikipedia +``` + +Message documentation +===================== + +The message keys and messages won't give a enough context about the message being translated to the translator. Whenever a developer adds a new message, it is a usual practice to document the message to a file named qqq.json +with same message key. + +Example qqq.json: +```json +{ + "@metadata": { + "authors": [ + "Developer Name" + ] + }, + "appname-title": "Application name. Transliteration is recommended", + "appname-sub-title": "Brief explanation of the application", + "appname-header-introduction": "Text for the introduction header", + "appname-about": "About this application text", + "appname-footer": "Footer text" +} + +``` + +In MediaWiki and its hundreds of extensions, message documentation is a strictly followed practice. There is a grunt task to check whether all messages are documented or not. See https://www.npmjs.org/package/grunt-banana-checker diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js b/resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js new file mode 100644 index 00000000..3a5b6251 --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js @@ -0,0 +1,88 @@ +/** + * BIDI embedding support for jQuery.i18n + * + * Copyright (C) 2015, David Chan + * + * This code is dual licensed GPLv2 or later and MIT. You don't have to do + * anything special to choose one license or the other and you don't have to + * notify anyone which license you are using. You are free to use this code + * in commercial projects as long as the copyright header is left intact. + * See files GPL-LICENSE and MIT-LICENSE for details. + * + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +( function ( $ ) { + 'use strict'; + var strongDirRegExp; + + /** + * Matches the first strong directionality codepoint: + * - in group 1 if it is LTR + * - in group 2 if it is RTL + * Does not match if there is no strong directionality codepoint. + * + * Generated by UnicodeJS (see tools/strongDir) from the UCD; see + * https://git.wikimedia.org/summary/unicodejs.git . + */ + strongDirRegExp = new RegExp( + '(?:' + + '(' + + '[\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u02bb-\u02c1\u02d0\u02d1\u02e0-\u02e4\u02ee\u0370-\u0373\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0482\u048a-\u052f\u0531-\u0556\u0559-\u055f\u0561-\u0587\u0589\u0903-\u0939\u093b\u093d-\u0940\u0949-\u094c\u094e-\u0950\u0958-\u0961\u0964-\u0980\u0982\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c0\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e1\u09e6-\u09f1\u09f4-\u09fa\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a40\u0a59-\u0a5c\u0a5e\u0a66-\u0a6f\u0a72-\u0a74\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac0\u0ac9\u0acb\u0acc\u0ad0\u0ae0\u0ae1\u0ae6-\u0af0\u0af9\u0b02\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0b5c\u0b5d\u0b5f-\u0b61\u0b66-\u0b77\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0be6-\u0bf2\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c41-\u0c44\u0c58-\u0c5a\u0c60\u0c61\u0c66-\u0c6f\u0c7f\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0cde\u0ce0\u0ce1\u0ce6-\u0cef\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d57\u0d5f-\u0d61\u0d66-\u0d75\u0d79-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd1\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e4f-\u0e5b\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0ed0-\u0ed9\u0edc-\u0edf\u0f00-\u0f17\u0f1a-\u0f34\u0f36\u0f38\u0f3e-\u0f47\u0f49-\u0f6c\u0f7f\u0f85\u0f88-\u0f8c\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce-\u0fda\u1000-\u102c\u1031\u1038\u103b\u103c\u103f-\u1057\u105a-\u105d\u1061-\u1070\u1075-\u1081\u1083\u1084\u1087-\u108c\u108e-\u109c\u109e-\u10c5\u10c7\u10cd\u10d0-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1360-\u137c\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u167f\u1681-\u169a\u16a0-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1735\u1736\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17b6\u17be-\u17c5\u17c7\u17c8\u17d4-\u17da\u17dc\u17e0-\u17e9\u1810-\u1819\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1923-\u1926\u1929-\u192b\u1930\u1931\u1933-\u1938\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a16\u1a19\u1a1a\u1a1e-\u1a55\u1a57\u1a61\u1a63\u1a64\u1a6d-\u1a72\u1a80-\u1a89\u1a90-\u1a99\u1aa0-\u1aad\u1b04-\u1b33\u1b35\u1b3b\u1b3d-\u1b41\u1b43-\u1b4b\u1b50-\u1b6a\u1b74-\u1b7c\u1b82-\u1ba1\u1ba6\u1ba7\u1baa\u1bae-\u1be5\u1be7\u1bea-\u1bec\u1bee\u1bf2\u1bf3\u1bfc-\u1c2b\u1c34\u1c35\u1c3b-\u1c49\u1c4d-\u1c7f\u1cc0-\u1cc7\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u200e\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u214f\u2160-\u2188\u2336-\u237a\u2395\u249c-\u24e9\u26ac\u2800-\u28ff\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d70\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u302e\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u3190-\u31ba\u31f0-\u321c\u3220-\u324f\u3260-\u327b\u327f-\u32b0\u32c0-\u32cb\u32d0-\u32fe\u3300-\u3376\u337b-\u33dd\u33e0-\u33fe\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua60c\ua610-\ua62b\ua640-\ua66e\ua680-\ua69d\ua6a0-\ua6ef\ua6f2-\ua6f7\ua722-\ua787\ua789-\ua7ad\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua824\ua827\ua830-\ua837\ua840-\ua873\ua880-\ua8c3\ua8ce-\ua8d9\ua8f2-\ua8fd\ua900-\ua925\ua92e-\ua946\ua952\ua953\ua95f-\ua97c\ua983-\ua9b2\ua9b4\ua9b5\ua9ba\ua9bb\ua9bd-\ua9cd\ua9cf-\ua9d9\ua9de-\ua9e4\ua9e6-\ua9fe\uaa00-\uaa28\uaa2f\uaa30\uaa33\uaa34\uaa40-\uaa42\uaa44-\uaa4b\uaa4d\uaa50-\uaa59\uaa5c-\uaa7b\uaa7d-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaaeb\uaaee-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab65\uab70-\uabe4\uabe6\uabe7\uabe9-\uabec\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ue000-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b]|\ud800[\udc0d-\udc26]|\ud800[\udc28-\udc3a]|\ud800\udc3c|\ud800\udc3d|\ud800[\udc3f-\udc4d]|\ud800[\udc50-\udc5d]|\ud800[\udc80-\udcfa]|\ud800\udd00|\ud800\udd02|\ud800[\udd07-\udd33]|\ud800[\udd37-\udd3f]|\ud800[\uddd0-\uddfc]|\ud800[\ude80-\ude9c]|\ud800[\udea0-\uded0]|\ud800[\udf00-\udf23]|\ud800[\udf30-\udf4a]|\ud800[\udf50-\udf75]|\ud800[\udf80-\udf9d]|\ud800[\udf9f-\udfc3]|\ud800[\udfc8-\udfd5]|\ud801[\udc00-\udc9d]|\ud801[\udca0-\udca9]|\ud801[\udd00-\udd27]|\ud801[\udd30-\udd63]|\ud801\udd6f|\ud801[\ude00-\udf36]|\ud801[\udf40-\udf55]|\ud801[\udf60-\udf67]|\ud804\udc00|\ud804[\udc02-\udc37]|\ud804[\udc47-\udc4d]|\ud804[\udc66-\udc6f]|\ud804[\udc82-\udcb2]|\ud804\udcb7|\ud804\udcb8|\ud804[\udcbb-\udcc1]|\ud804[\udcd0-\udce8]|\ud804[\udcf0-\udcf9]|\ud804[\udd03-\udd26]|\ud804\udd2c|\ud804[\udd36-\udd43]|\ud804[\udd50-\udd72]|\ud804[\udd74-\udd76]|\ud804[\udd82-\uddb5]|\ud804[\uddbf-\uddc9]|\ud804\uddcd|\ud804[\uddd0-\udddf]|\ud804[\udde1-\uddf4]|\ud804[\ude00-\ude11]|\ud804[\ude13-\ude2e]|\ud804\ude32|\ud804\ude33|\ud804\ude35|\ud804[\ude38-\ude3d]|\ud804[\ude80-\ude86]|\ud804\ude88|\ud804[\ude8a-\ude8d]|\ud804[\ude8f-\ude9d]|\ud804[\ude9f-\udea9]|\ud804[\udeb0-\udede]|\ud804[\udee0-\udee2]|\ud804[\udef0-\udef9]|\ud804\udf02|\ud804\udf03|\ud804[\udf05-\udf0c]|\ud804\udf0f|\ud804\udf10|\ud804[\udf13-\udf28]|\ud804[\udf2a-\udf30]|\ud804\udf32|\ud804\udf33|\ud804[\udf35-\udf39]|\ud804[\udf3d-\udf3f]|\ud804[\udf41-\udf44]|\ud804\udf47|\ud804\udf48|\ud804[\udf4b-\udf4d]|\ud804\udf50|\ud804\udf57|\ud804[\udf5d-\udf63]|\ud805[\udc80-\udcb2]|\ud805\udcb9|\ud805[\udcbb-\udcbe]|\ud805\udcc1|\ud805[\udcc4-\udcc7]|\ud805[\udcd0-\udcd9]|\ud805[\udd80-\uddb1]|\ud805[\uddb8-\uddbb]|\ud805\uddbe|\ud805[\uddc1-\udddb]|\ud805[\ude00-\ude32]|\ud805\ude3b|\ud805\ude3c|\ud805\ude3e|\ud805[\ude41-\ude44]|\ud805[\ude50-\ude59]|\ud805[\ude80-\udeaa]|\ud805\udeac|\ud805\udeae|\ud805\udeaf|\ud805\udeb6|\ud805[\udec0-\udec9]|\ud805[\udf00-\udf19]|\ud805\udf20|\ud805\udf21|\ud805\udf26|\ud805[\udf30-\udf3f]|\ud806[\udca0-\udcf2]|\ud806\udcff|\ud806[\udec0-\udef8]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e]|\ud809[\udc70-\udc74]|\ud809[\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38]|\ud81a[\ude40-\ude5e]|\ud81a[\ude60-\ude69]|\ud81a\ude6e|\ud81a\ude6f|\ud81a[\uded0-\udeed]|\ud81a\udef5|\ud81a[\udf00-\udf2f]|\ud81a[\udf37-\udf45]|\ud81a[\udf50-\udf59]|\ud81a[\udf5b-\udf61]|\ud81a[\udf63-\udf77]|\ud81a[\udf7d-\udf8f]|\ud81b[\udf00-\udf44]|\ud81b[\udf50-\udf7e]|\ud81b[\udf93-\udf9f]|\ud82c\udc00|\ud82c\udc01|\ud82f[\udc00-\udc6a]|\ud82f[\udc70-\udc7c]|\ud82f[\udc80-\udc88]|\ud82f[\udc90-\udc99]|\ud82f\udc9c|\ud82f\udc9f|\ud834[\udc00-\udcf5]|\ud834[\udd00-\udd26]|\ud834[\udd29-\udd66]|\ud834[\udd6a-\udd72]|\ud834\udd83|\ud834\udd84|\ud834[\udd8c-\udda9]|\ud834[\uddae-\udde8]|\ud834[\udf60-\udf71]|\ud835[\udc00-\udc54]|\ud835[\udc56-\udc9c]|\ud835\udc9e|\ud835\udc9f|\ud835\udca2|\ud835\udca5|\ud835\udca6|\ud835[\udca9-\udcac]|\ud835[\udcae-\udcb9]|\ud835\udcbb|\ud835[\udcbd-\udcc3]|\ud835[\udcc5-\udd05]|\ud835[\udd07-\udd0a]|\ud835[\udd0d-\udd14]|\ud835[\udd16-\udd1c]|\ud835[\udd1e-\udd39]|\ud835[\udd3b-\udd3e]|\ud835[\udd40-\udd44]|\ud835\udd46|\ud835[\udd4a-\udd50]|\ud835[\udd52-\udea5]|\ud835[\udea8-\udeda]|\ud835[\udedc-\udf14]|\ud835[\udf16-\udf4e]|\ud835[\udf50-\udf88]|\ud835[\udf8a-\udfc2]|\ud835[\udfc4-\udfcb]|\ud836[\udc00-\uddff]|\ud836[\ude37-\ude3a]|\ud836[\ude6d-\ude74]|\ud836[\ude76-\ude83]|\ud836[\ude85-\ude8b]|\ud83c[\udd10-\udd2e]|\ud83c[\udd30-\udd69]|\ud83c[\udd70-\udd9a]|\ud83c[\udde6-\ude02]|\ud83c[\ude10-\ude3a]|\ud83c[\ude40-\ude48]|\ud83c\ude50|\ud83c\ude51|[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\uded6]|\ud869[\udf00-\udfff]|[\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf34]|\ud86d[\udf40-\udfff]|\ud86e[\udc00-\udc1d]|\ud86e[\udc20-\udfff]|[\ud86f-\ud872][\udc00-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]|[\udb80-\udbbe][\udc00-\udfff]|\udbbf[\udc00-\udffd]|[\udbc0-\udbfe][\udc00-\udfff]|\udbff[\udc00-\udffd]' + + ')|(' + + '[\u0590\u05be\u05c0\u05c3\u05c6\u05c8-\u05ff\u07c0-\u07ea\u07f4\u07f5\u07fa-\u0815\u081a\u0824\u0828\u082e-\u0858\u085c-\u089f\u200f\ufb1d\ufb1f-\ufb28\ufb2a-\ufb4f\u0608\u060b\u060d\u061b-\u064a\u066d-\u066f\u0671-\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u0710\u0712-\u072f\u074b-\u07a5\u07b1-\u07bf\u08a0-\u08e2\ufb50-\ufd3d\ufd40-\ufdcf\ufdf0-\ufdfc\ufdfe\ufdff\ufe70-\ufefe]|\ud802[\udc00-\udd1e]|\ud802[\udd20-\ude00]|\ud802\ude04|\ud802[\ude07-\ude0b]|\ud802[\ude10-\ude37]|\ud802[\ude3b-\ude3e]|\ud802[\ude40-\udee4]|\ud802[\udee7-\udf38]|\ud802[\udf40-\udfff]|\ud803[\udc00-\ude5f]|\ud803[\ude7f-\udfff]|\ud83a[\udc00-\udccf]|\ud83a[\udcd7-\udfff]|\ud83b[\udc00-\uddff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\ude00-\udeef]|\ud83b[\udef2-\udeff]' + + ')' + + ')' + ); + + /** + * Gets directionality of the first strongly directional codepoint + * + * This is the rule the BIDI algorithm uses to determine the directionality of + * paragraphs ( http://unicode.org/reports/tr9/#The_Paragraph_Level ) and + * FSI isolates ( http://unicode.org/reports/tr9/#Explicit_Directional_Isolates ). + * + * TODO: Does not handle BIDI control characters inside the text. + * TODO: Does not handle unallocated characters. + */ + function strongDirFromContent( text ) { + var m = text.match( strongDirRegExp ); + if ( !m ) { + return null; + } + if ( m[2] === undefined ) { + return 'ltr'; + } + return 'rtl'; + } + + $.extend( $.i18n.parser.emitter, { + /** + * Wraps argument with unicode control characters for directionality safety + * + * This solves the problem where directionality-neutral characters at the edge of + * the argument string get interpreted with the wrong directionality from the + * enclosing context, giving renderings that look corrupted like "(Ben_(WMF". + * + * The wrapping is LRE...PDF or RLE...PDF, depending on the detected + * directionality of the argument string, using the BIDI algorithm's own "First + * strong directional codepoint" rule. Essentially, this works round the fact that + * there is no embedding equivalent of U+2068 FSI (isolation with heuristic + * direction inference). The latter is cleaner but still not widely supported. + */ + bidi: function ( nodes ) { + var dir = strongDirFromContent( nodes[0] ); + if ( dir === 'ltr' ) { + // Wrap in LEFT-TO-RIGHT EMBEDDING ... POP DIRECTIONAL FORMATTING + return '\u202A' + nodes[0] + '\u202C'; + } + if ( dir === 'rtl' ) { + // Wrap in RIGHT-TO-LEFT EMBEDDING ... POP DIRECTIONAL FORMATTING + return '\u202B' + nodes[0] + '\u202C'; + } + // No strong directionality: do not wrap + return nodes[0]; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.emitter.js b/resources/lib/jquery.i18n/src/jquery.i18n.emitter.js new file mode 100644 index 00000000..b26f147d --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.emitter.js @@ -0,0 +1,168 @@ +/** + * jQuery Internationalization library + * + * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar + * + * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do + * anything special to choose one license or the other and you don't have to + * notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +( function ( $ ) { + 'use strict'; + + var MessageParserEmitter = function () { + this.language = $.i18n.languages[String.locale] || $.i18n.languages['default']; + }; + + MessageParserEmitter.prototype = { + constructor: MessageParserEmitter, + + /** + * (We put this method definition here, and not in prototype, to make + * sure it's not overwritten by any magic.) Walk entire node structure, + * applying replacements and template functions when appropriate + * + * @param {Mixed} node abstract syntax tree (top node or subnode) + * @param {Array} replacements for $1, $2, ... $n + * @return {Mixed} single-string node or array of nodes suitable for + * jQuery appending. + */ + emit: function ( node, replacements ) { + var ret, subnodes, operation, + messageParserEmitter = this; + + switch ( typeof node ) { + case 'string': + case 'number': + ret = node; + break; + case 'object': + // node is an array of nodes + subnodes = $.map( node.slice( 1 ), function ( n ) { + return messageParserEmitter.emit( n, replacements ); + } ); + + operation = node[0].toLowerCase(); + + if ( typeof messageParserEmitter[operation] === 'function' ) { + ret = messageParserEmitter[operation]( subnodes, replacements ); + } else { + throw new Error( 'unknown operation "' + operation + '"' ); + } + + break; + case 'undefined': + // Parsing the empty string (as an entire expression, or as a + // paramExpression in a template) results in undefined + // Perhaps a more clever parser can detect this, and return the + // empty string? Or is that useful information? + // The logical thing is probably to return the empty string here + // when we encounter undefined. + ret = ''; + break; + default: + throw new Error( 'unexpected type in AST: ' + typeof node ); + } + + return ret; + }, + + /** + * Parsing has been applied depth-first we can assume that all nodes + * here are single nodes Must return a single node to parents -- a + * jQuery with synthetic span However, unwrap any other synthetic spans + * in our children and pass them upwards + * + * @param {Array} nodes Mixed, some single nodes, some arrays of nodes. + * @return String + */ + concat: function ( nodes ) { + var result = ''; + + $.each( nodes, function ( i, node ) { + // strings, integers, anything else + result += node; + } ); + + return result; + }, + + /** + * Return escaped replacement of correct index, or string if + * unavailable. Note that we expect the parsed parameter to be + * zero-based. i.e. $1 should have become [ 0 ]. if the specified + * parameter is not found return the same string (e.g. "$99" -> + * parameter 98 -> not found -> return "$99" ) TODO throw error if + * nodes.length > 1 ? + * + * @param {Array} nodes One element, integer, n >= 0 + * @param {Array} replacements for $1, $2, ... $n + * @return {string} replacement + */ + replace: function ( nodes, replacements ) { + var index = parseInt( nodes[0], 10 ); + + if ( index < replacements.length ) { + // replacement is not a string, don't touch! + return replacements[index]; + } else { + // index not found, fallback to displaying variable + return '$' + ( index + 1 ); + } + }, + + /** + * Transform parsed structure into pluralization n.b. The first node may + * be a non-integer (for instance, a string representing an Arabic + * number). So convert it back with the current language's + * convertNumber. + * + * @param {Array} nodes List [ {String|Number}, {String}, {String} ... ] + * @return {String} selected pluralized form according to current + * language. + */ + plural: function ( nodes ) { + var count = parseFloat( this.language.convertNumber( nodes[0], 10 ) ), + forms = nodes.slice( 1 ); + + return forms.length ? this.language.convertPlural( count, forms ) : ''; + }, + + /** + * Transform parsed structure into gender Usage + * {{gender:gender|masculine|feminine|neutral}}. + * + * @param {Array} nodes List [ {String}, {String}, {String} , {String} ] + * @return {String} selected gender form according to current language + */ + gender: function ( nodes ) { + var gender = nodes[0], + forms = nodes.slice( 1 ); + + return this.language.gender( gender, forms ); + }, + + /** + * Transform parsed structure into grammar conversion. Invoked by + * putting {{grammar:form|word}} in a message + * + * @param {Array} nodes List [{Grammar case eg: genitive}, {String word}] + * @return {String} selected grammatical form according to current + * language. + */ + grammar: function ( nodes ) { + var form = nodes[0], + word = nodes[1]; + + return word && form && this.language.convertGrammar( word, form ); + } + }; + + $.extend( $.i18n.parser.emitter, new MessageParserEmitter() ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js b/resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js new file mode 100644 index 00000000..4584c5f2 --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js @@ -0,0 +1,186 @@ +/** + * jQuery Internationalization library + * + * Copyright (C) 2012 Santhosh Thottingal + * + * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to + * choose one license or the other and you don't have to notify anyone which license you are using. + * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ +( function ( $, undefined ) { + 'use strict'; + + $.i18n = $.i18n || {}; + $.extend( $.i18n.fallbacks, { + ab: [ 'ru' ], + ace: [ 'id' ], + aln: [ 'sq' ], + // Not so standard - als is supposed to be Tosk Albanian, + // but in Wikipedia it's used for a Germanic language. + als: [ 'gsw', 'de' ], + an: [ 'es' ], + anp: [ 'hi' ], + arn: [ 'es' ], + arz: [ 'ar' ], + av: [ 'ru' ], + ay: [ 'es' ], + ba: [ 'ru' ], + bar: [ 'de' ], + 'bat-smg': [ 'sgs', 'lt' ], + bcc: [ 'fa' ], + 'be-x-old': [ 'be-tarask' ], + bh: [ 'bho' ], + bjn: [ 'id' ], + bm: [ 'fr' ], + bpy: [ 'bn' ], + bqi: [ 'fa' ], + bug: [ 'id' ], + 'cbk-zam': [ 'es' ], + ce: [ 'ru' ], + crh: [ 'crh-latn' ], + 'crh-cyrl': [ 'ru' ], + csb: [ 'pl' ], + cv: [ 'ru' ], + 'de-at': [ 'de' ], + 'de-ch': [ 'de' ], + 'de-formal': [ 'de' ], + dsb: [ 'de' ], + dtp: [ 'ms' ], + egl: [ 'it' ], + eml: [ 'it' ], + ff: [ 'fr' ], + fit: [ 'fi' ], + 'fiu-vro': [ 'vro', 'et' ], + frc: [ 'fr' ], + frp: [ 'fr' ], + frr: [ 'de' ], + fur: [ 'it' ], + gag: [ 'tr' ], + gan: [ 'gan-hant', 'zh-hant', 'zh-hans' ], + 'gan-hans': [ 'zh-hans' ], + 'gan-hant': [ 'zh-hant', 'zh-hans' ], + gl: [ 'pt' ], + glk: [ 'fa' ], + gn: [ 'es' ], + gsw: [ 'de' ], + hif: [ 'hif-latn' ], + hsb: [ 'de' ], + ht: [ 'fr' ], + ii: [ 'zh-cn', 'zh-hans' ], + inh: [ 'ru' ], + iu: [ 'ike-cans' ], + jut: [ 'da' ], + jv: [ 'id' ], + kaa: [ 'kk-latn', 'kk-cyrl' ], + kbd: [ 'kbd-cyrl' ], + khw: [ 'ur' ], + kiu: [ 'tr' ], + kk: [ 'kk-cyrl' ], + 'kk-arab': [ 'kk-cyrl' ], + 'kk-latn': [ 'kk-cyrl' ], + 'kk-cn': [ 'kk-arab', 'kk-cyrl' ], + 'kk-kz': [ 'kk-cyrl' ], + 'kk-tr': [ 'kk-latn', 'kk-cyrl' ], + kl: [ 'da' ], + 'ko-kp': [ 'ko' ], + koi: [ 'ru' ], + krc: [ 'ru' ], + ks: [ 'ks-arab' ], + ksh: [ 'de' ], + ku: [ 'ku-latn' ], + 'ku-arab': [ 'ckb' ], + kv: [ 'ru' ], + lad: [ 'es' ], + lb: [ 'de' ], + lbe: [ 'ru' ], + lez: [ 'ru' ], + li: [ 'nl' ], + lij: [ 'it' ], + liv: [ 'et' ], + lmo: [ 'it' ], + ln: [ 'fr' ], + ltg: [ 'lv' ], + lzz: [ 'tr' ], + mai: [ 'hi' ], + 'map-bms': [ 'jv', 'id' ], + mg: [ 'fr' ], + mhr: [ 'ru' ], + min: [ 'id' ], + mo: [ 'ro' ], + mrj: [ 'ru' ], + mwl: [ 'pt' ], + myv: [ 'ru' ], + mzn: [ 'fa' ], + nah: [ 'es' ], + nap: [ 'it' ], + nds: [ 'de' ], + 'nds-nl': [ 'nl' ], + 'nl-informal': [ 'nl' ], + no: [ 'nb' ], + os: [ 'ru' ], + pcd: [ 'fr' ], + pdc: [ 'de' ], + pdt: [ 'de' ], + pfl: [ 'de' ], + pms: [ 'it' ], + pt: [ 'pt-br' ], + 'pt-br': [ 'pt' ], + qu: [ 'es' ], + qug: [ 'qu', 'es' ], + rgn: [ 'it' ], + rmy: [ 'ro' ], + 'roa-rup': [ 'rup' ], + rue: [ 'uk', 'ru' ], + ruq: [ 'ruq-latn', 'ro' ], + 'ruq-cyrl': [ 'mk' ], + 'ruq-latn': [ 'ro' ], + sa: [ 'hi' ], + sah: [ 'ru' ], + scn: [ 'it' ], + sg: [ 'fr' ], + sgs: [ 'lt' ], + sli: [ 'de' ], + sr: [ 'sr-ec' ], + srn: [ 'nl' ], + stq: [ 'de' ], + su: [ 'id' ], + szl: [ 'pl' ], + tcy: [ 'kn' ], + tg: [ 'tg-cyrl' ], + tt: [ 'tt-cyrl', 'ru' ], + 'tt-cyrl': [ 'ru' ], + ty: [ 'fr' ], + udm: [ 'ru' ], + ug: [ 'ug-arab' ], + uk: [ 'ru' ], + vec: [ 'it' ], + vep: [ 'et' ], + vls: [ 'nl' ], + vmf: [ 'de' ], + vot: [ 'fi' ], + vro: [ 'et' ], + wa: [ 'fr' ], + wo: [ 'fr' ], + wuu: [ 'zh-hans' ], + xal: [ 'ru' ], + xmf: [ 'ka' ], + yi: [ 'he' ], + za: [ 'zh-hans' ], + zea: [ 'nl' ], + zh: [ 'zh-hans' ], + 'zh-classical': [ 'lzh' ], + 'zh-cn': [ 'zh-hans' ], + 'zh-hant': [ 'zh-hans' ], + 'zh-hk': [ 'zh-hant', 'zh-hans' ], + 'zh-min-nan': [ 'nan' ], + 'zh-mo': [ 'zh-hk', 'zh-hant', 'zh-hans' ], + 'zh-my': [ 'zh-sg', 'zh-hans' ], + 'zh-sg': [ 'zh-hans' ], + 'zh-tw': [ 'zh-hant', 'zh-hans' ], + 'zh-yue': [ 'yue' ] + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.js b/resources/lib/jquery.i18n/src/jquery.i18n.js new file mode 100644 index 00000000..9236e4e2 --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.js @@ -0,0 +1,287 @@ +/** + * jQuery Internationalization library + * + * Copyright (C) 2012 Santhosh Thottingal + * + * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do + * anything special to choose one license or the other and you don't have to + * notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +( function ( $ ) { + 'use strict'; + + var nav, I18N, + slice = Array.prototype.slice; + /** + * @constructor + * @param {Object} options + */ + I18N = function ( options ) { + // Load defaults + this.options = $.extend( {}, I18N.defaults, options ); + + this.parser = this.options.parser; + this.locale = this.options.locale; + this.messageStore = this.options.messageStore; + this.languages = {}; + + this.init(); + }; + + I18N.prototype = { + /** + * Initialize by loading locales and setting up + * String.prototype.toLocaleString and String.locale. + */ + init: function () { + var i18n = this; + + // Set locale of String environment + String.locale = i18n.locale; + + // Override String.localeString method + String.prototype.toLocaleString = function () { + var localeParts, localePartIndex, value, locale, fallbackIndex, + tryingLocale, message; + + value = this.valueOf(); + locale = i18n.locale; + fallbackIndex = 0; + + while ( locale ) { + // Iterate through locales starting at most-specific until + // localization is found. As in fi-Latn-FI, fi-Latn and fi. + localeParts = locale.split( '-' ); + localePartIndex = localeParts.length; + + do { + tryingLocale = localeParts.slice( 0, localePartIndex ).join( '-' ); + message = i18n.messageStore.get( tryingLocale, value ); + + if ( message ) { + return message; + } + + localePartIndex--; + } while ( localePartIndex ); + + if ( locale === 'en' ) { + break; + } + + locale = ( $.i18n.fallbacks[i18n.locale] && $.i18n.fallbacks[i18n.locale][fallbackIndex] ) || + i18n.options.fallbackLocale; + $.i18n.log( 'Trying fallback locale for ' + i18n.locale + ': ' + locale ); + + fallbackIndex++; + } + + // key not found + return ''; + }; + }, + + /* + * Destroy the i18n instance. + */ + destroy: function () { + $.removeData( document, 'i18n' ); + }, + + /** + * General message loading API This can take a URL string for + * the json formatted messages. Example: + * load('path/to/all_localizations.json'); + * + * To load a localization file for a locale: + * + * load('path/to/de-messages.json', 'de' ); + * + * + * To load a localization file from a directory: + * + * load('path/to/i18n/directory', 'de' ); + * + * The above method has the advantage of fallback resolution. + * ie, it will automatically load the fallback locales for de. + * For most usecases, this is the recommended method. + * It is optional to have trailing slash at end. + * + * A data object containing message key- message translation mappings + * can also be passed. Example: + * + * load( { 'hello' : 'Hello' }, optionalLocale ); + * + * + * A source map containing key-value pair of languagename and locations + * can also be passed. Example: + * + * load( { + * bn: 'i18n/bn.json', + * he: 'i18n/he.json', + * en: 'i18n/en.json' + * } ) + * + * + * If the data argument is null/undefined/false, + * all cached messages for the i18n instance will get reset. + * + * @param {String|Object} source + * @param {String} locale Language tag + * @returns {jQuery.Promise} + */ + load: function ( source, locale ) { + var fallbackLocales, locIndex, fallbackLocale, sourceMap = {}; + if ( !source && !locale ) { + source = 'i18n/' + $.i18n().locale + '.json'; + locale = $.i18n().locale; + } + if ( typeof source === 'string' && + source.split( '.' ).pop() !== 'json' + ) { + // Load specified locale then check for fallbacks when directory is specified in load() + sourceMap[locale] = source + '/' + locale + '.json'; + fallbackLocales = ( $.i18n.fallbacks[locale] || [] ) + .concat( this.options.fallbackLocale ); + for ( locIndex in fallbackLocales ) { + fallbackLocale = fallbackLocales[locIndex]; + sourceMap[fallbackLocale] = source + '/' + fallbackLocale + '.json'; + } + return this.load( sourceMap ); + } else { + return this.messageStore.load( source, locale ); + } + + }, + + /** + * Does parameter and magic word substitution. + * + * @param {string} key Message key + * @param {Array} parameters Message parameters + * @return {string} + */ + parse: function ( key, parameters ) { + var message = key.toLocaleString(); + // FIXME: This changes the state of the I18N object, + // should probably not change the 'this.parser' but just + // pass it to the parser. + this.parser.language = $.i18n.languages[$.i18n().locale] || $.i18n.languages['default']; + if ( message === '' ) { + message = key; + } + return this.parser.parse( message, parameters ); + } + }; + + /** + * Process a message from the $.I18N instance + * for the current document, stored in jQuery.data(document). + * + * @param {string} key Key of the message. + * @param {string} param1 [param...] Variadic list of parameters for {key}. + * @return {string|$.I18N} Parsed message, or if no key was given + * the instance of $.I18N is returned. + */ + $.i18n = function ( key, param1 ) { + var parameters, + i18n = $.data( document, 'i18n' ), + options = typeof key === 'object' && key; + + // If the locale option for this call is different then the setup so far, + // update it automatically. This doesn't just change the context for this + // call but for all future call as well. + // If there is no i18n setup yet, don't do this. It will be taken care of + // by the `new I18N` construction below. + // NOTE: It should only change language for this one call. + // Then cache instances of I18N somewhere. + if ( options && options.locale && i18n && i18n.locale !== options.locale ) { + String.locale = i18n.locale = options.locale; + } + + if ( !i18n ) { + i18n = new I18N( options ); + $.data( document, 'i18n', i18n ); + } + + if ( typeof key === 'string' ) { + if ( param1 !== undefined ) { + parameters = slice.call( arguments, 1 ); + } else { + parameters = []; + } + + return i18n.parse( key, parameters ); + } else { + // FIXME: remove this feature/bug. + return i18n; + } + }; + + $.fn.i18n = function () { + var i18n = $.data( document, 'i18n' ); + + if ( !i18n ) { + i18n = new I18N(); + $.data( document, 'i18n', i18n ); + } + String.locale = i18n.locale; + return this.each( function () { + var $this = $( this ), + messageKey = $this.data( 'i18n' ); + + if ( messageKey ) { + $this.text( i18n.parse( messageKey ) ); + } else { + $this.find( '[data-i18n]' ).i18n(); + } + } ); + }; + + String.locale = String.locale || $( 'html' ).attr( 'lang' ); + + if ( !String.locale ) { + if ( typeof window.navigator !== undefined ) { + nav = window.navigator; + String.locale = nav.language || nav.userLanguage || ''; + } else { + String.locale = ''; + } + } + + $.i18n.languages = {}; + $.i18n.messageStore = $.i18n.messageStore || {}; + $.i18n.parser = { + // The default parser only handles variable substitution + parse: function ( message, parameters ) { + return message.replace( /\$(\d+)/g, function ( str, match ) { + var index = parseInt( match, 10 ) - 1; + return parameters[index] !== undefined ? parameters[index] : '$' + match; + } ); + }, + emitter: {} + }; + $.i18n.fallbacks = {}; + $.i18n.debug = false; + $.i18n.log = function ( /* arguments */ ) { + if ( window.console && $.i18n.debug ) { + window.console.log.apply( window.console, arguments ); + } + }; + /* Static members */ + I18N.defaults = { + locale: String.locale, + fallbackLocale: 'en', + parser: $.i18n.parser, + messageStore: $.i18n.messageStore + }; + + // Expose constructor + $.i18n.constructor = I18N; +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.language.js b/resources/lib/jquery.i18n/src/jquery.i18n.language.js new file mode 100644 index 00000000..e596fbc8 --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.language.js @@ -0,0 +1,472 @@ +/*global pluralRuleParser */ +( function ( $ ) { + 'use strict'; + + var language = { + // CLDR plural rules generated using + // libs/CLDRPluralRuleParser/tools/PluralXML2JSON.html + pluralRules: { + ak: { + one: 'n = 0..1' + }, + am: { + one: 'i = 0 or n = 1' + }, + ar: { + zero: 'n = 0', + one: 'n = 1', + two: 'n = 2', + few: 'n % 100 = 3..10', + many: 'n % 100 = 11..99' + }, + be: { + one: 'n % 10 = 1 and n % 100 != 11', + few: 'n % 10 = 2..4 and n % 100 != 12..14', + many: 'n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14' + }, + bh: { + one: 'n = 0..1' + }, + bn: { + one: 'i = 0 or n = 1' + }, + br: { + one: 'n % 10 = 1 and n % 100 != 11,71,91', + two: 'n % 10 = 2 and n % 100 != 12,72,92', + few: 'n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99', + many: 'n != 0 and n % 1000000 = 0' + }, + bs: { + one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11', + few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14' + }, + cs: { + one: 'i = 1 and v = 0', + few: 'i = 2..4 and v = 0', + many: 'v != 0' + }, + cy: { + zero: 'n = 0', + one: 'n = 1', + two: 'n = 2', + few: 'n = 3', + many: 'n = 6' + }, + da: { + one: 'n = 1 or t != 0 and i = 0,1' + }, + fa: { + one: 'i = 0 or n = 1' + }, + ff: { + one: 'i = 0,1' + }, + fil: { + one: 'i = 0..1 and v = 0' + }, + fr: { + one: 'i = 0,1' + }, + ga: { + one: 'n = 1', + two: 'n = 2', + few: 'n = 3..6', + many: 'n = 7..10' + }, + gd: { + one: 'n = 1,11', + two: 'n = 2,12', + few: 'n = 3..10,13..19' + }, + gu: { + one: 'i = 0 or n = 1' + }, + guw: { + one: 'n = 0..1' + }, + gv: { + one: 'n % 10 = 1', + two: 'n % 10 = 2', + few: 'n % 100 = 0,20,40,60' + }, + he: { + one: 'i = 1 and v = 0', + two: 'i = 2 and v = 0', + many: 'v = 0 and n != 0..10 and n % 10 = 0' + }, + hi: { + one: 'i = 0 or n = 1' + }, + hr: { + one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11', + few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14' + }, + hy: { + one: 'i = 0,1' + }, + is: { + one: 't = 0 and i % 10 = 1 and i % 100 != 11 or t != 0' + }, + iu: { + one: 'n = 1', + two: 'n = 2' + }, + iw: { + one: 'i = 1 and v = 0', + two: 'i = 2 and v = 0', + many: 'v = 0 and n != 0..10 and n % 10 = 0' + }, + kab: { + one: 'i = 0,1' + }, + kn: { + one: 'i = 0 or n = 1' + }, + kw: { + one: 'n = 1', + two: 'n = 2' + }, + lag: { + zero: 'n = 0', + one: 'i = 0,1 and n != 0' + }, + ln: { + one: 'n = 0..1' + }, + lt: { + one: 'n % 10 = 1 and n % 100 != 11..19', + few: 'n % 10 = 2..9 and n % 100 != 11..19', + many: 'f != 0' + }, + lv: { + zero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19', + one: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1' + }, + mg: { + one: 'n = 0..1' + }, + mk: { + one: 'v = 0 and i % 10 = 1 or f % 10 = 1' + }, + mo: { + one: 'i = 1 and v = 0', + few: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19' + }, + mr: { + one: 'i = 0 or n = 1' + }, + mt: { + one: 'n = 1', + few: 'n = 0 or n % 100 = 2..10', + many: 'n % 100 = 11..19' + }, + naq: { + one: 'n = 1', + two: 'n = 2' + }, + nso: { + one: 'n = 0..1' + }, + pa: { + one: 'n = 0..1' + }, + pl: { + one: 'i = 1 and v = 0', + few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14', + many: 'v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14' + }, + pt: { + one: 'i = 1 and v = 0 or i = 0 and t = 1' + }, + // jscs:disable requireCamelCaseOrUpperCaseIdentifiers + pt_PT: { + one: 'n = 1 and v = 0' + }, + // jscs:enable requireCamelCaseOrUpperCaseIdentifiers + ro: { + one: 'i = 1 and v = 0', + few: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19' + }, + ru: { + one: 'v = 0 and i % 10 = 1 and i % 100 != 11', + many: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14' + }, + se: { + one: 'n = 1', + two: 'n = 2' + }, + sh: { + one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11', + few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14' + }, + shi: { + one: 'i = 0 or n = 1', + few: 'n = 2..10' + }, + si: { + one: 'n = 0,1 or i = 0 and f = 1' + }, + sk: { + one: 'i = 1 and v = 0', + few: 'i = 2..4 and v = 0', + many: 'v != 0' + }, + sl: { + one: 'v = 0 and i % 100 = 1', + two: 'v = 0 and i % 100 = 2', + few: 'v = 0 and i % 100 = 3..4 or v != 0' + }, + sma: { + one: 'n = 1', + two: 'n = 2' + }, + smi: { + one: 'n = 1', + two: 'n = 2' + }, + smj: { + one: 'n = 1', + two: 'n = 2' + }, + smn: { + one: 'n = 1', + two: 'n = 2' + }, + sms: { + one: 'n = 1', + two: 'n = 2' + }, + sr: { + one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11', + few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14' + }, + ti: { + one: 'n = 0..1' + }, + tl: { + one: 'i = 0..1 and v = 0' + }, + tzm: { + one: 'n = 0..1 or n = 11..99' + }, + uk: { + one: 'v = 0 and i % 10 = 1 and i % 100 != 11', + few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14', + many: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14' + }, + wa: { + one: 'n = 0..1' + }, + zu: { + one: 'i = 0 or n = 1' + } + }, + + /** + * Plural form transformations, needed for some languages. + * + * @param count + * integer Non-localized quantifier + * @param forms + * array List of plural forms + * @return string Correct form for quantifier in this language + */ + convertPlural: function ( count, forms ) { + var pluralRules, + pluralFormIndex, + index, + explicitPluralPattern = new RegExp( '\\d+=', 'i' ), + formCount, + form; + + if ( !forms || forms.length === 0 ) { + return ''; + } + + // Handle for Explicit 0= & 1= values + for ( index = 0; index < forms.length; index++ ) { + form = forms[index]; + if ( explicitPluralPattern.test( form ) ) { + formCount = parseInt( form.substring( 0, form.indexOf( '=' ) ), 10 ); + if ( formCount === count ) { + return ( form.substr( form.indexOf( '=' ) + 1 ) ); + } + forms[index] = undefined; + } + } + + forms = $.map( forms, function ( form ) { + if ( form !== undefined ) { + return form; + } + } ); + + pluralRules = this.pluralRules[$.i18n().locale]; + + if ( !pluralRules ) { + // default fallback. + return ( count === 1 ) ? forms[0] : forms[1]; + } + + pluralFormIndex = this.getPluralForm( count, pluralRules ); + pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 ); + + return forms[pluralFormIndex]; + }, + + /** + * For the number, get the plural for index + * + * @param number + * @param pluralRules + * @return plural form index + */ + getPluralForm: function ( number, pluralRules ) { + var i, + pluralForms = [ 'zero', 'one', 'two', 'few', 'many', 'other' ], + pluralFormIndex = 0; + + for ( i = 0; i < pluralForms.length; i++ ) { + if ( pluralRules[pluralForms[i]] ) { + if ( pluralRuleParser( pluralRules[pluralForms[i]], number ) ) { + return pluralFormIndex; + } + + pluralFormIndex++; + } + } + + return pluralFormIndex; + }, + + /** + * Converts a number using digitTransformTable. + * + * @param {number} num Value to be converted + * @param {boolean} integer Convert the return value to an integer + */ + convertNumber: function ( num, integer ) { + var tmp, item, i, + transformTable, numberString, convertedNumber; + + // Set the target Transform table: + transformTable = this.digitTransformTable( $.i18n().locale ); + numberString = String( num ); + convertedNumber = ''; + + if ( !transformTable ) { + return num; + } + + // Check if the restore to Latin number flag is set: + if ( integer ) { + if ( parseFloat( num, 10 ) === num ) { + return num; + } + + tmp = []; + + for ( item in transformTable ) { + tmp[transformTable[item]] = item; + } + + transformTable = tmp; + } + + for ( i = 0; i < numberString.length; i++ ) { + if ( transformTable[numberString[i]] ) { + convertedNumber += transformTable[numberString[i]]; + } else { + convertedNumber += numberString[i]; + } + } + + return integer ? parseFloat( convertedNumber, 10 ) : convertedNumber; + }, + + /** + * Grammatical transformations, needed for inflected languages. + * Invoked by putting {{grammar:form|word}} in a message. + * Override this method for languages that need special grammar rules + * applied dynamically. + * + * @param word {String} + * @param form {String} + * @return {String} + */ + convertGrammar: function ( word, form ) { /*jshint unused: false */ + return word; + }, + + /** + * Provides an alternative text depending on specified gender. Usage + * {{gender:[gender|user object]|masculine|feminine|neutral}}. If second + * or third parameter are not specified, masculine is used. + * + * These details may be overriden per language. + * + * @param gender + * string male, female, or anything else for neutral. + * @param forms + * array List of gender forms + * + * @return string + */ + gender: function ( gender, forms ) { + if ( !forms || forms.length === 0 ) { + return ''; + } + + while ( forms.length < 2 ) { + forms.push( forms[forms.length - 1] ); + } + + if ( gender === 'male' ) { + return forms[0]; + } + + if ( gender === 'female' ) { + return forms[1]; + } + + return ( forms.length === 3 ) ? forms[2] : forms[0]; + }, + + /** + * Get the digit transform table for the given language + * See http://cldr.unicode.org/translation/numbering-systems + * @param language + * @returns {Array|boolean} List of digits in the passed language or false + * representation, or boolean false if there is no information. + */ + digitTransformTable: function ( language ) { + var tables = { + ar: '٠١٢٣٤٥٦٧٨٩', + fa: 'Û°Û±Û²Û³Û´ÛµÛ¶Û·Û¸Û¹', + ml: '൦൧൨൩൪൫൬൭൮൯', + kn: '೦೧೨೩೪೫೬೭೮೯', + lo: 'à»à»‘໒໓໔໕໖໗໘໙', + or: '୦୧୨୩୪୫୬୭୮୯', + kh: '០១២៣៤៥៦៧៨៩', + pa: '੦੧੨੩੪੫੬੭੮੯', + gu: '૦૧૨૩૪૫૬૭૮૯', + hi: '०१२३४५६७८९', + my: 'á€áá‚áƒá„á…á†á‡áˆá‰', + ta: '௦௧௨௩௪௫௬௭௮௯', + te: '౦౧౨౩౪౫౬౭౮౯', + th: 'à¹à¹‘๒๓๔๕๖๗๘๙', // FIXME use iso 639 codes + bo: '༠༡༢༣༤༥༦༧༨༩' // FIXME use iso 639 codes + }; + + if ( !tables[language] ) { + return false; + } + + return tables[language].split( '' ); + } + }; + + $.extend( $.i18n.languages, { + 'default': language + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js b/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js new file mode 100644 index 00000000..759295ce --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js @@ -0,0 +1,125 @@ +/** + * jQuery Internationalization library - Message Store + * + * Copyright (C) 2012 Santhosh Thottingal + * + * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to + * choose one license or the other and you don't have to notify anyone which license you are using. + * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +( function ( $, window, undefined ) { + 'use strict'; + + var MessageStore = function () { + this.messages = {}; + this.sources = {}; + }; + + /** + * See https://github.com/wikimedia/jquery.i18n/wiki/Specification#wiki-Message_File_Loading + */ + MessageStore.prototype = { + + /** + * General message loading API This can take a URL string for + * the json formatted messages. + * load('path/to/all_localizations.json'); + * + * This can also load a localization file for a locale + * load( 'path/to/de-messages.json', 'de' ); + * + * A data object containing message key- message translation mappings + * can also be passed Eg: + * + * load( { 'hello' : 'Hello' }, optionalLocale ); + * If the data argument is + * null/undefined/false, + * all cached messages for the i18n instance will get reset. + * + * @param {String|Object} source + * @param {String} locale Language tag + * @return {jQuery.Promise} + */ + load: function ( source, locale ) { + var key = null, + deferred = null, + deferreds = [], + messageStore = this; + + if ( typeof source === 'string' ) { + // This is a URL to the messages file. + $.i18n.log( 'Loading messages from: ' + source ); + deferred = jsonMessageLoader( source ) + .done( function ( localization ) { + messageStore.set( locale, localization ); + } ); + + return deferred.promise(); + } + + if ( locale ) { + // source is an key-value pair of messages for given locale + messageStore.set( locale, source ); + + return $.Deferred().resolve(); + } else { + // source is a key-value pair of locales and their source + for ( key in source ) { + if ( Object.prototype.hasOwnProperty.call( source, key ) ) { + locale = key; + // No {locale} given, assume data is a group of languages, + // call this function again for each language. + deferreds.push( messageStore.load( source[key], locale ) ); + } + } + return $.when.apply( $, deferreds ); + } + + }, + + /** + * Set messages to the given locale. + * If locale exists, add messages to the locale. + * @param locale + * @param messages + */ + set: function ( locale, messages ) { + if ( !this.messages[locale] ) { + this.messages[locale] = messages; + } else { + this.messages[locale] = $.extend( this.messages[locale], messages ); + } + }, + + /** + * + * @param locale + * @param messageKey + * @returns {Boolean} + */ + get: function ( locale, messageKey ) { + return this.messages[locale] && this.messages[locale][messageKey]; + } + }; + + function jsonMessageLoader( url ) { + var deferred = $.Deferred(); + + $.getJSON( url ) + .done( deferred.resolve ) + .fail( function ( jqxhr, settings, exception ) { + $.i18n.log( 'Error in loading messages from ' + url + ' Exception: ' + exception ); + // Ignore 404 exception, because we are handling fallabacks explicitly + deferred.resolve(); + } ); + + return deferred.promise(); + } + + $.extend( $.i18n.messageStore, new MessageStore() ); +}( jQuery, window ) ); diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.parser.js b/resources/lib/jquery.i18n/src/jquery.i18n.parser.js new file mode 100644 index 00000000..3dea2842 --- /dev/null +++ b/resources/lib/jquery.i18n/src/jquery.i18n.parser.js @@ -0,0 +1,309 @@ +/** + * jQuery Internationalization library + * + * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar + * + * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do + * anything special to choose one license or the other and you don't have to + * notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +( function ( $ ) { + 'use strict'; + + var MessageParser = function ( options ) { + this.options = $.extend( {}, $.i18n.parser.defaults, options ); + this.language = $.i18n.languages[String.locale] || $.i18n.languages['default']; + this.emitter = $.i18n.parser.emitter; + }; + + MessageParser.prototype = { + + constructor: MessageParser, + + simpleParse: function ( message, parameters ) { + return message.replace( /\$(\d+)/g, function ( str, match ) { + var index = parseInt( match, 10 ) - 1; + + return parameters[index] !== undefined ? parameters[index] : '$' + match; + } ); + }, + + parse: function ( message, replacements ) { + if ( message.indexOf( '{{' ) < 0 ) { + return this.simpleParse( message, replacements ); + } + + this.emitter.language = $.i18n.languages[$.i18n().locale] || + $.i18n.languages['default']; + + return this.emitter.emit( this.ast( message ), replacements ); + }, + + ast: function ( message ) { + var pipe, colon, backslash, anyCharacter, dollar, digits, regularLiteral, + regularLiteralWithoutBar, regularLiteralWithoutSpace, escapedOrLiteralWithoutBar, + escapedOrRegularLiteral, templateContents, templateName, openTemplate, + closeTemplate, expression, paramExpression, result, + pos = 0; + + // Try parsers until one works, if none work return null + function choice( parserSyntax ) { + return function () { + var i, result; + + for ( i = 0; i < parserSyntax.length; i++ ) { + result = parserSyntax[i](); + + if ( result !== null ) { + return result; + } + } + + return null; + }; + } + + // Try several parserSyntax-es in a row. + // All must succeed; otherwise, return null. + // This is the only eager one. + function sequence( parserSyntax ) { + var i, res, + originalPos = pos, + result = []; + + for ( i = 0; i < parserSyntax.length; i++ ) { + res = parserSyntax[i](); + + if ( res === null ) { + pos = originalPos; + + return null; + } + + result.push( res ); + } + + return result; + } + + // Run the same parser over and over until it fails. + // Must succeed a minimum of n times; otherwise, return null. + function nOrMore( n, p ) { + return function () { + var originalPos = pos, + result = [], + parsed = p(); + + while ( parsed !== null ) { + result.push( parsed ); + parsed = p(); + } + + if ( result.length < n ) { + pos = originalPos; + + return null; + } + + return result; + }; + } + + // Helpers -- just make parserSyntax out of simpler JS builtin types + + function makeStringParser( s ) { + var len = s.length; + + return function () { + var result = null; + + if ( message.substr( pos, len ) === s ) { + result = s; + pos += len; + } + + return result; + }; + } + + function makeRegexParser( regex ) { + return function () { + var matches = message.substr( pos ).match( regex ); + + if ( matches === null ) { + return null; + } + + pos += matches[0].length; + + return matches[0]; + }; + } + + pipe = makeStringParser( '|' ); + colon = makeStringParser( ':' ); + backslash = makeStringParser( '\\' ); + anyCharacter = makeRegexParser( /^./ ); + dollar = makeStringParser( '$' ); + digits = makeRegexParser( /^\d+/ ); + regularLiteral = makeRegexParser( /^[^{}\[\]$\\]/ ); + regularLiteralWithoutBar = makeRegexParser( /^[^{}\[\]$\\|]/ ); + regularLiteralWithoutSpace = makeRegexParser( /^[^{}\[\]$\s]/ ); + + // There is a general pattern: + // parse a thing; + // if it worked, apply transform, + // otherwise return null. + // But using this as a combinator seems to cause problems + // when combined with nOrMore(). + // May be some scoping issue. + function transform( p, fn ) { + return function () { + var result = p(); + + return result === null ? null : fn( result ); + }; + } + + // Used to define "literals" within template parameters. The pipe + // character is the parameter delimeter, so by default + // it is not a literal in the parameter + function literalWithoutBar() { + var result = nOrMore( 1, escapedOrLiteralWithoutBar )(); + + return result === null ? null : result.join( '' ); + } + + function literal() { + var result = nOrMore( 1, escapedOrRegularLiteral )(); + + return result === null ? null : result.join( '' ); + } + + function escapedLiteral() { + var result = sequence( [ backslash, anyCharacter ] ); + + return result === null ? null : result[1]; + } + + choice( [ escapedLiteral, regularLiteralWithoutSpace ] ); + escapedOrLiteralWithoutBar = choice( [ escapedLiteral, regularLiteralWithoutBar ] ); + escapedOrRegularLiteral = choice( [ escapedLiteral, regularLiteral ] ); + + function replacement() { + var result = sequence( [ dollar, digits ] ); + + if ( result === null ) { + return null; + } + + return [ 'REPLACE', parseInt( result[1], 10 ) - 1 ]; + } + + templateName = transform( + // see $wgLegalTitleChars + // not allowing : due to the need to catch "PLURAL:$1" + makeRegexParser( /^[ !"$&'()*,.\/0-9;=?@A-Z\^_`a-z~\x80-\xFF+\-]+/ ), + + function ( result ) { + return result.toString(); + } + ); + + function templateParam() { + var expr, + result = sequence( [ pipe, nOrMore( 0, paramExpression ) ] ); + + if ( result === null ) { + return null; + } + + expr = result[1]; + + // use a "CONCAT" operator if there are multiple nodes, + // otherwise return the first node, raw. + return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0]; + } + + function templateWithReplacement() { + var result = sequence( [ templateName, colon, replacement ] ); + + return result === null ? null : [ result[0], result[2] ]; + } + + function templateWithOutReplacement() { + var result = sequence( [ templateName, colon, paramExpression ] ); + + return result === null ? null : [ result[0], result[2] ]; + } + + templateContents = choice( [ + function () { + var res = sequence( [ + // templates can have placeholders for dynamic + // replacement eg: {{PLURAL:$1|one car|$1 cars}} + // or no placeholders eg: + // {{GRAMMAR:genitive|{{SITENAME}}} + choice( [ templateWithReplacement, templateWithOutReplacement ] ), + nOrMore( 0, templateParam ) + ] ); + + return res === null ? null : res[0].concat( res[1] ); + }, + function () { + var res = sequence( [ templateName, nOrMore( 0, templateParam ) ] ); + + if ( res === null ) { + return null; + } + + return [ res[0] ].concat( res[1] ); + } + ] ); + + openTemplate = makeStringParser( '{{' ); + closeTemplate = makeStringParser( '}}' ); + + function template() { + var result = sequence( [ openTemplate, templateContents, closeTemplate ] ); + + return result === null ? null : result[1]; + } + + expression = choice( [ template, replacement, literal ] ); + paramExpression = choice( [ template, replacement, literalWithoutBar ] ); + + function start() { + var result = nOrMore( 0, expression )(); + + if ( result === null ) { + return null; + } + + return [ 'CONCAT' ].concat( result ); + } + + result = start(); + + /* + * For success, the pos must have gotten to the end of the input + * and returned a non-null. + * n.b. This is part of language infrastructure, so we do not throw an internationalizable message. + */ + if ( result === null || pos !== message.length ) { + throw new Error( 'Parse error at position ' + pos.toString() + ' in input: ' + message ); + } + + return result; + } + + }; + + $.extend( $.i18n.parser, new MessageParser() ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/bs.js b/resources/lib/jquery.i18n/src/languages/bs.js new file mode 100644 index 00000000..5370069e --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/bs.js @@ -0,0 +1,22 @@ +/** + * Bosnian (bosanski) language functions + */ +( function ( $ ) { + 'use strict'; + + $.i18n.languages.bs = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + case 'instrumental': // instrumental + word = 's ' + word; + break; + case 'lokativ': // locative + word = 'o ' + word; + break; + } + + return word; + } + } ); + +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/dsb.js b/resources/lib/jquery.i18n/src/languages/dsb.js new file mode 100644 index 00000000..cc069ebf --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/dsb.js @@ -0,0 +1,22 @@ +/** + * Lower Sorbian (Dolnoserbski) language functions + */ +( function ( $ ) { + 'use strict'; + + $.i18n.languages.dsb = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + case 'instrumental': // instrumental + word = 'z ' + word; + break; + case 'lokatiw': // lokatiw + word = 'wo ' + word; + break; + } + + return word; + } + } ); + +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/fi.js b/resources/lib/jquery.i18n/src/languages/fi.js new file mode 100644 index 00000000..d8e9578a --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/fi.js @@ -0,0 +1,49 @@ +/** + * Finnish (Suomi) language functions + * + * @author Santhosh Thottingal + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.fi = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + // vowel harmony flag + var aou = word.match( /[aou][^äöy]*$/i ), + origWord = word; + if ( word.match( /wiki$/i ) ) { + aou = false; + } + + // append i after final consonant + if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) ) { + word += 'i'; + } + + switch ( form ) { + case 'genitive': + word += 'n'; + break; + case 'elative': + word += ( aou ? 'sta' : 'stä' ); + break; + case 'partitive': + word += ( aou ? 'a' : 'ä' ); + break; + case 'illative': + // Double the last letter and add 'n' + word += word.substr( word.length - 1 ) + 'n'; + break; + case 'inessive': + word += ( aou ? 'ssa' : 'ssä' ); + break; + default: + word = origWord; + break; + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/ga.js b/resources/lib/jquery.i18n/src/languages/ga.js new file mode 100644 index 00000000..1aceab75 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/ga.js @@ -0,0 +1,38 @@ +/** + * Irish (Gaeilge) language functions + */ +( function ( $ ) { + 'use strict'; + + $.i18n.languages.ga = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + if ( form === 'ainmlae' ) { + switch ( word ) { + case 'an Domhnach': + word = 'Dé Domhnaigh'; + break; + case 'an Luan': + word = 'Dé Luain'; + break; + case 'an Mháirt': + word = 'Dé Mháirt'; + break; + case 'an Chéadaoin': + word = 'Dé Chéadaoin'; + break; + case 'an Déardaoin': + word = 'Déardaoin'; + break; + case 'an Aoine': + word = 'Dé hAoine'; + break; + case 'an Satharn': + word = 'Dé Sathairn'; + break; + } + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/he.js b/resources/lib/jquery.i18n/src/languages/he.js new file mode 100644 index 00000000..cbbe90b9 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/he.js @@ -0,0 +1,31 @@ +/** + * Hebrew (עברית) language functions + */ +( function ( $ ) { + 'use strict'; + + $.i18n.languages.he = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + case 'prefixed': + case 'תחילית': // the same word in Hebrew + // Duplicate prefixed "Waw", but only if it's not already double + if ( word.substr( 0, 1 ) === 'ו' && word.substr( 0, 2 ) !== 'וו' ) { + word = 'ו' + word; + } + + // Remove the "He" if prefixed + if ( word.substr( 0, 1 ) === '×”' ) { + word = word.substr( 1, word.length ); + } + + // Add a hyphen (maqaf) before numbers and non-Hebrew letters + if ( word.substr( 0, 1 ) < '×' || word.substr( 0, 1 ) > 'ת' ) { + word = 'Ö¾' + word; + } + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/hsb.js b/resources/lib/jquery.i18n/src/languages/hsb.js new file mode 100644 index 00000000..957616f6 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/hsb.js @@ -0,0 +1,21 @@ +/** + * Upper Sorbian (Hornjoserbsce) language functions + */ +( function ( $ ) { + 'use strict'; + + $.i18n.languages.hsb = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + case 'instrumental': // instrumental + word = 'z ' + word; + break; + case 'lokatiw': // lokatiw + word = 'wo ' + word; + break; + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/hu.js b/resources/lib/jquery.i18n/src/languages/hu.js new file mode 100644 index 00000000..1177b850 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/hu.js @@ -0,0 +1,26 @@ +/** + * Hungarian language functions + * + * @author Santhosh Thottingal + */ +( function ( $ ) { + 'use strict'; + + $.i18n.languages.hu = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + case 'rol': + word += 'ról'; + break; + case 'ba': + word += 'ba'; + break; + case 'k': + word += 'k'; + break; + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/hy.js b/resources/lib/jquery.i18n/src/languages/hy.js new file mode 100644 index 00000000..9c568992 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/hy.js @@ -0,0 +1,25 @@ +/** + * Armenian (Õ€Õ¡ÕµÕ¥Ö€Õ¥Õ¶) language functions + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.hy = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + if ( form === 'genitive' ) { // Õ½Õ¥Õ¼Õ¡Õ¯Õ¡Õ¶ Õ°Õ¸Õ¬Õ¸Õ¾ + if ( word.substr( -1 ) === 'Õ¡' ) { + word = word.substr( 0, word.length - 1 ) + 'Õ¡ÕµÕ«'; + } else if ( word.substr( -1 ) === 'Õ¸' ) { + word = word.substr( 0, word.length - 1 ) + 'Õ¸ÕµÕ«'; + } else if ( word.substr( -4 ) === 'Õ£Õ«Ö€Ö„' ) { + word = word.substr( 0, word.length - 4 ) + 'Õ£Ö€Ö„Õ«'; + } else { + word = word + 'Õ«'; + } + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/la.js b/resources/lib/jquery.i18n/src/languages/la.js new file mode 100644 index 00000000..11c1122d --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/la.js @@ -0,0 +1,54 @@ +/** + * Latin (lingua Latina) language functions + * + * @author Santhosh Thottingal + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.la = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + case 'genitive': + // only a few declensions, and even for those mostly the singular only + word = word.replace( /u[ms]$/i, 'i' ); // 2nd declension singular + word = word.replace( /ommunia$/i, 'ommunium' ); // 3rd declension neuter plural (partly) + word = word.replace( /a$/i, 'ae' ); // 1st declension singular + word = word.replace( /libri$/i, 'librorum' ); // 2nd declension plural (partly) + word = word.replace( /nuntii$/i, 'nuntiorum' ); // 2nd declension plural (partly) + word = word.replace( /tio$/i, 'tionis' ); // 3rd declension singular (partly) + word = word.replace( /ns$/i, 'ntis' ); + word = word.replace( /as$/i, 'atis' ); + word = word.replace( /es$/i, 'ei' ); // 5th declension singular + break; + case 'accusative': + // only a few declensions, and even for those mostly the singular only + word = word.replace( /u[ms]$/i, 'um' ); // 2nd declension singular + word = word.replace( /ommunia$/i, 'am' ); // 3rd declension neuter plural (partly) + word = word.replace( /a$/i, 'ommunia' ); // 1st declension singular + word = word.replace( /libri$/i, 'libros' ); // 2nd declension plural (partly) + word = word.replace( /nuntii$/i, 'nuntios' );// 2nd declension plural (partly) + word = word.replace( /tio$/i, 'tionem' ); // 3rd declension singular (partly) + word = word.replace( /ns$/i, 'ntem' ); + word = word.replace( /as$/i, 'atem' ); + word = word.replace( /es$/i, 'em' ); // 5th declension singular + break; + case 'ablative': + // only a few declensions, and even for those mostly the singular only + word = word.replace( /u[ms]$/i, 'o' ); // 2nd declension singular + word = word.replace( /ommunia$/i, 'ommunibus' ); // 3rd declension neuter plural (partly) + word = word.replace( /a$/i, 'a' ); // 1st declension singular + word = word.replace( /libri$/i, 'libris' ); // 2nd declension plural (partly) + word = word.replace( /nuntii$/i, 'nuntiis' ); // 2nd declension plural (partly) + word = word.replace( /tio$/i, 'tione' ); // 3rd declension singular (partly) + word = word.replace( /ns$/i, 'nte' ); + word = word.replace( /as$/i, 'ate' ); + word = word.replace( /es$/i, 'e' ); // 5th declension singular + break; + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/ml.js b/resources/lib/jquery.i18n/src/languages/ml.js new file mode 100644 index 00000000..f724b7b2 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/ml.js @@ -0,0 +1,98 @@ +/** + * Malayalam language functions + * + * @author Santhosh Thottingal + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.ml = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + form = form.toLowerCase(); + switch ( form ) { + case 'ഉദàµà´¦àµ‡à´¶à´¿à´•': + case 'dative': + if ( word.substr( -1 ) === 'àµ' || + word.substr( -1 ) === 'ൂ' || + word.substr( -1 ) === 'ൗ' || + word.substr( -1 ) === 'ൌ' + ) { + word += 'വിനàµ'; + } else if ( word.substr( -1 ) === 'à´‚' ) { + word = word.substr( 0, word.length - 1 ) + 'à´¤àµà´¤à´¿à´¨àµ'; + } else if ( word.substr( -1 ) === 'ൻ' ) { + // Atomic chillu n. അവൻ -> അവനൠ+ word = word.substr( 0, word.length - 1 ) + 'à´¨àµ'; + } else if ( word.substr( -3 ) === 'à´¨àµ\u200d' ) { + // chillu n. അവൻ -> അവനൠ+ word = word.substr( 0, word.length - 1 ); + } else if ( word.substr( -1 ) === 'ൾ' || word.substr( -3 ) === 'à´³àµ\u200d' ) { + word += 'à´•àµà´•àµ'; + } else if ( word.substr( -1 ) === 'ർ' || word.substr( -3 ) === 'à´°àµ\u200d' ) { + word += 'à´•àµà´•àµ'; + } else if ( word.substr( -1 ) === 'ൽ' ) { + // Atomic chillu ൽ , ഫയൽ -> ഫയലിനൠ+ word = word.substr( 0, word.length - 1 ) + 'ലിനàµ'; + } else if ( word.substr( -3 ) === 'à´²àµ\u200d' ) { + // chillu à´²àµ\u200d , ഫയലàµ\u200d -> ഫയലിനൠ+ word = word.substr( 0, word.length - 2 ) + 'à´¿à´¨àµ'; + } else if ( word.substr( -2 ) === 'àµàµ' ) { + word = word.substr( 0, word.length - 2 ) + 'à´¿à´¨àµ'; + } else if ( word.substr( -1 ) === 'àµ' ) { + word = word.substr( 0, word.length - 1 ) + 'à´¿à´¨àµ'; + } else { + // കാവàµà´¯ -> കാവàµà´¯à´¯àµà´•àµà´•àµ, ഹരി -> ഹരിയàµà´•àµà´•àµ, മല -> മലയàµà´•àµà´•àµ + word += 'à´¯àµà´•àµà´•àµ'; + } + + break; + case 'സംബനàµà´§à´¿à´•': + case 'genitive': + if ( word.substr( -1 ) === 'à´‚' ) { + word = word.substr( 0, word.length - 1 ) + 'à´¤àµà´¤à´¿à´¨àµà´±àµ†'; + } else if ( word.substr( -2 ) === 'àµàµ' ) { + word = word.substr( 0, word.length - 2 ) + 'à´¿à´¨àµà´±àµ†'; + } else if ( word.substr( -1 ) === 'àµ' ) { + word = word.substr( 0, word.length - 1 ) + 'à´¿à´¨àµà´±àµ†'; + } else if ( word.substr( -1 ) === 'àµ' || + word.substr( -1 ) === 'ൂ' || + word.substr( -1 ) === 'ൗ' || + word.substr( -1 ) === 'ൌ' + ) { + word += 'വിനàµà´±àµ†'; + } else if ( word.substr( -1 ) === 'ൻ' ) { + // Atomic chillu n. അവൻ -> അവനàµà´±àµ† + word = word.substr( 0, word.length - 1 ) + 'à´¨àµà´±àµ†'; + } else if ( word.substr( -3 ) === 'à´¨àµ\u200d' ) { + // chillu n. അവൻ -> അവനàµà´±àµ† + word = word.substr( 0, word.length - 1 ) + 'റെ'; + } else if ( word.substr( -3 ) === 'à´³àµ\u200d' ) { + // chillu n. അവൾ -> അവളàµà´Ÿàµ† + word = word.substr( 0, word.length - 2 ) + 'àµà´Ÿàµ†'; + } else if ( word.substr( -1 ) === 'ൾ' ) { + // Atomic chillu n. അവളàµ\u200d -> അവളàµà´Ÿàµ† + word = word.substr( 0, word.length - 1 ) + 'à´³àµà´Ÿàµ†'; + } else if ( word.substr( -1 ) === 'ൽ' ) { + // Atomic l. à´®àµà´¯à´²àµ\u200d -> à´®àµà´¯à´²à´¿à´¨àµà´±àµ† + word = word.substr( 0, word.length - 1 ) + 'ലിനàµà´±àµ†'; + } else if ( word.substr( -3 ) === 'à´²àµ\u200d' ) { + // chillu l. à´®àµà´¯à´²àµ\u200d -> അവളàµà´Ÿàµ† + word = word.substr( 0, word.length - 2 ) + 'à´¿à´¨àµà´±àµ†'; + } else if ( word.substr( -3 ) === 'à´°àµ\u200d' ) { + // chillu r. അവരàµ\u200d -> അവരàµà´Ÿàµ† + word = word.substr( 0, word.length - 2 ) + 'àµà´Ÿàµ†'; + } else if ( word.substr( -1 ) === 'ർ' ) { + // Atomic chillu r. അവർ -> അവരàµà´Ÿàµ† + word = word.substr( 0, word.length - 1 ) + 'à´°àµà´Ÿàµ†'; + } else { + word += 'à´¯àµà´Ÿàµ†'; + } + + break; + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/os.js b/resources/lib/jquery.i18n/src/languages/os.js new file mode 100644 index 00000000..47443671 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/os.js @@ -0,0 +1,76 @@ +/** + * Ossetian (Ирон) language functions + * + * @author Santhosh Thottingal + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.os = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + var endAllative, jot, hyphen, ending; + + // Ending for allative case + endAllative = 'мæ'; + // Variable for 'j' beetwen vowels + jot = ''; + // Variable for "-" for not Ossetic words + hyphen = ''; + // Variable for ending + ending = ''; + + if ( word.match( /тæ$/i ) ) { + // Checking if the $word is in plural form + word = word.substring( 0, word.length - 1 ); + endAllative = 'æм'; + } else if ( word.match( /[аæеёиоыÑÑŽÑ]$/i ) ) { + // Works if word is in singular form. + // Checking if word ends on one of the vowels: е, Ñ‘, и, о, Ñ‹, Ñ, ÑŽ, + // Ñ. + jot = 'й'; + } else if ( word.match( /у$/i ) ) { + // Checking if word ends on 'у'. 'У' can be either consonant 'W' or + // vowel 'U' in cyrillic Ossetic. + // Examples: {{grammar:genitive|аунеу}} = аунеуы, + // {{grammar:genitive|лæппу}} = лæппуйы. + if ( !word.substring( word.length - 2, word.length - 1 ) + .match( /[аæеёиоыÑÑŽÑ]$/i ) ) { + jot = 'й'; + } + } else if ( !word.match( /[бвгджзйклмнопрÑтфхцчшщьъ]$/i ) ) { + hyphen = '-'; + } + + switch ( form ) { + case 'genitive': + ending = hyphen + jot + 'Ñ‹'; + break; + case 'dative': + ending = hyphen + jot + 'æн'; + break; + case 'allative': + ending = hyphen + endAllative; + break; + case 'ablative': + if ( jot === 'й' ) { + ending = hyphen + jot + 'æ'; + } else { + ending = hyphen + jot + 'æй'; + } + break; + case 'superessive': + ending = hyphen + jot + 'ыл'; + break; + case 'equative': + ending = hyphen + jot + 'ау'; + break; + case 'comitative': + ending = hyphen + 'имæ'; + break; + } + + return word + ending; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/ru.js b/resources/lib/jquery.i18n/src/languages/ru.js new file mode 100644 index 00000000..893b2386 --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/ru.js @@ -0,0 +1,29 @@ +/** + * Russian (РуÑÑкий) language functions + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.ru = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + if ( form === 'genitive' ) { // родительный падеж + if ( word.substr( -1 ) === 'ÑŒ' ) { + word = word.substr( 0, word.length - 1 ) + 'Ñ'; + } else if ( word.substr( -2 ) === 'иÑ' ) { + word = word.substr( 0, word.length - 2 ) + 'ии'; + } else if ( word.substr( -2 ) === 'ка' ) { + word = word.substr( 0, word.length - 2 ) + 'ки'; + } else if ( word.substr( -2 ) === 'ти' ) { + word = word.substr( 0, word.length - 2 ) + 'тей'; + } else if ( word.substr( -2 ) === 'ды' ) { + word = word.substr( 0, word.length - 2 ) + 'дов'; + } else if ( word.substr( -3 ) === 'ник' ) { + word = word.substr( 0, word.length - 3 ) + 'ника'; + } + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/sl.js b/resources/lib/jquery.i18n/src/languages/sl.js new file mode 100644 index 00000000..a3aafc3b --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/sl.js @@ -0,0 +1,26 @@ +/** + * Slovenian (SlovenÅ¡Äina) language functions + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.sl = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + // locative + case 'mestnik': + word = 'o ' + word; + + break; + // instrumental + case 'orodnik': + word = 'z ' + word; + + break; + } + + return word; + } + } ); +}( jQuery ) ); diff --git a/resources/lib/jquery.i18n/src/languages/uk.js b/resources/lib/jquery.i18n/src/languages/uk.js new file mode 100644 index 00000000..8e69efcd --- /dev/null +++ b/resources/lib/jquery.i18n/src/languages/uk.js @@ -0,0 +1,39 @@ +/** + * Ukrainian (УкраїнÑька) language functions + */ + +( function ( $ ) { + 'use strict'; + + $.i18n.languages.uk = $.extend( {}, $.i18n.languages['default'], { + convertGrammar: function ( word, form ) { + switch ( form ) { + case 'genitive': // родовий відмінок + if ( word.substr( -1 ) === 'ÑŒ' ) { + word = word.substr( 0, word.length - 1 ) + 'Ñ'; + } else if ( word.substr( -2 ) === 'Ñ–Ñ' ) { + word = word.substr( 0, word.length - 2 ) + 'Ñ–Ñ—'; + } else if ( word.substr( -2 ) === 'ка' ) { + word = word.substr( 0, word.length - 2 ) + 'ки'; + } else if ( word.substr( -2 ) === 'ти' ) { + word = word.substr( 0, word.length - 2 ) + 'тей'; + } else if ( word.substr( -2 ) === 'ды' ) { + word = word.substr( 0, word.length - 2 ) + 'дов'; + } else if ( word.substr( -3 ) === 'ник' ) { + word = word.substr( 0, word.length - 3 ) + 'ника'; + } + + break; + case 'accusative': // знахідний відмінок + if ( word.substr( -2 ) === 'Ñ–Ñ' ) { + word = word.substr( 0, word.length - 2 ) + 'Ñ–ÑŽ'; + } + + break; + } + + return word; + } + } ); + +}( jQuery ) ); diff --git a/resources/lib/json2/json2.js b/resources/lib/json2/json2.js index deb88ec9..58384577 100644 --- a/resources/lib/json2/json2.js +++ b/resources/lib/json2/json2.js @@ -1,6 +1,6 @@ /* json2.js - 2014-02-04 + 2015-05-03 Public Domain. @@ -17,7 +17,9 @@ This file creates a global JSON object containing two methods: stringify - and parse. + and parse. This file is provides the ES5 JSON capability to ES3 systems. + If a project might run on IE8 or earlier, then this file should be included. + This file does nothing on ES5 systems. JSON.stringify(value, replacer, space) value any JavaScript value, usually an object or array. @@ -48,7 +50,9 @@ Date.prototype.toJSON = function (key) { function f(n) { // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; + return n < 10 + ? '0' + n + : n; } return this.getUTCFullYear() + '-' + @@ -94,8 +98,9 @@ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; + return this[key] instanceof Date + ? 'Date(' + this[key] + ')' + : value; }); // text is '["Date(---current time---)"]' @@ -146,10 +151,12 @@ redistribute. */ -/*jslint evil: true, regexp: true */ +/*jslint + eval, for, this +*/ -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, +/*property + JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, lastIndex, length, parse, prototype, push, replace, slice, stringify, test, toJSON, toString, valueOf @@ -165,10 +172,23 @@ if (typeof JSON !== 'object') { (function () { 'use strict'; + + var rx_one = /^[\],:{}\s]*$/, + rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rx_four = /(?:^|:|,)(?:\s*\[)+/g, + rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; function f(n) { // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; + return n < 10 + ? '0' + n + : n; + } + + function this_value() { + return this.valueOf(); } if (typeof Date.prototype.toJSON !== 'function') { @@ -176,25 +196,21 @@ if (typeof JSON !== 'object') { Date.prototype.toJSON = function () { return isFinite(this.valueOf()) - ? this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' + ? this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z' : null; }; - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function () { - return this.valueOf(); - }; + Boolean.prototype.toJSON = this_value; + Number.prototype.toJSON = this_value; + String.prototype.toJSON = this_value; } - var cx, - escapable, - gap, + var gap, indent, meta, rep; @@ -207,13 +223,15 @@ if (typeof JSON !== 'object') { // Otherwise we must also replace the offending characters with safe escape // sequences. - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' - ? c - : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; + rx_escapable.lastIndex = 0; + return rx_escapable.test(string) + ? '"' + string.replace(rx_escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' + ? c + : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' + : '"' + string + '"'; } @@ -253,7 +271,9 @@ if (typeof JSON !== 'object') { // JSON numbers must be finite. Encode non-finite numbers as null. - return isFinite(value) ? String(value) : 'null'; + return isFinite(value) + ? String(value) + : 'null'; case 'boolean': case 'null': @@ -299,8 +319,8 @@ if (typeof JSON !== 'object') { v = partial.length === 0 ? '[]' : gap - ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' - : '[' + partial.join(',') + ']'; + ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' + : '[' + partial.join(',') + ']'; gap = mind; return v; } @@ -314,7 +334,11 @@ if (typeof JSON !== 'object') { k = rep[i]; v = str(k, value); if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); + partial.push(quote(k) + ( + gap + ? ': ' + : ':' + ) + v); } } } @@ -326,7 +350,11 @@ if (typeof JSON !== 'object') { if (Object.prototype.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); + partial.push(quote(k) + ( + gap + ? ': ' + : ':' + ) + v); } } } @@ -338,8 +366,8 @@ if (typeof JSON !== 'object') { v = partial.length === 0 ? '{}' : gap - ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' - : '{' + partial.join(',') + '}'; + ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' + : '{' + partial.join(',') + '}'; gap = mind; return v; } @@ -348,14 +376,13 @@ if (typeof JSON !== 'object') { // If the JSON object does not yet have a stringify method, give it one. if (typeof JSON.stringify !== 'function') { - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; meta = { // table of character substitutions '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', - '"' : '\\"', + '"': '\\"', '\\': '\\\\' }; JSON.stringify = function (value, replacer, space) { @@ -405,7 +432,6 @@ if (typeof JSON !== 'object') { // If the JSON object does not yet have a parse method, give it one. if (typeof JSON.parse !== 'function') { - cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; JSON.parse = function (text, reviver) { // The parse method takes a text and an optional reviver function, and returns @@ -440,11 +466,11 @@ if (typeof JSON !== 'object') { // incorrectly, either silently deleting them, or treating them as line endings. text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { + rx_dangerous.lastIndex = 0; + if (rx_dangerous.test(text)) { + text = text.replace(rx_dangerous, function (a) { return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }); } @@ -461,10 +487,14 @@ if (typeof JSON !== 'object') { // we look to see that the remaining characters are only whitespace or ']' or // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + if ( + rx_one.test( + text + .replace(rx_two, '@') + .replace(rx_three, ']') + .replace(rx_four, '') + ) + ) { // In the third stage we use the eval function to compile the text into a // JavaScript structure. The '{' operator is subject to a syntactic ambiguity diff --git a/resources/lib/mustache/LICENSE b/resources/lib/mustache/LICENSE new file mode 100644 index 00000000..aa1b8316 --- /dev/null +++ b/resources/lib/mustache/LICENSE @@ -0,0 +1,10 @@ +The MIT License + +Copyright (c) 2009 Chris Wanstrath (Ruby) +Copyright (c) 2010-2014 Jan Lehnardt (JavaScript) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/resources/lib/oojs-ui/i18n/af.json b/resources/lib/oojs-ui/i18n/af.json index 6f79e370..67ec517d 100644 --- a/resources/lib/oojs-ui/i18n/af.json +++ b/resources/lib/oojs-ui/i18n/af.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Naudefj" + "Naudefj", + "Fwolff" ] }, "ooui-outline-control-move-down": "Skuif item af", @@ -15,5 +16,8 @@ "ooui-dialog-process-error": "Iets het verkeerd gegaan", "ooui-dialog-process-dismiss": "Sluit", "ooui-dialog-process-retry": "Probeer weer", - "ooui-dialog-process-continue": "Gaan voort" + "ooui-dialog-process-continue": "Gaan voort", + "ooui-selectfile-button-select": "Kies 'n lêer", + "ooui-selectfile-placeholder": "Geen lêer is gekies nie", + "ooui-selectfile-dragdrop-placeholder": "Laat val die lêer hier" } diff --git a/resources/lib/oojs-ui/i18n/ar.json b/resources/lib/oojs-ui/i18n/ar.json index 058a1491..610e1eee 100644 --- a/resources/lib/oojs-ui/i18n/ar.json +++ b/resources/lib/oojs-ui/i18n/ar.json @@ -10,7 +10,9 @@ "زكريا", "مشعل الحربي", "ترجمان05", - "Abanima" + "Abanima", + "محمد أحمد عبد الÙتاح", + "Hiba Alshawi" ] }, "ooui-outline-control-move-down": "انقل العنصر للأسÙÙ„", @@ -24,5 +26,9 @@ "ooui-dialog-process-error": "حدث خطأ", "ooui-dialog-process-dismiss": "أغلق", "ooui-dialog-process-retry": "حاول مرة أخرى", - "ooui-dialog-process-continue": "استمر" + "ooui-dialog-process-continue": "استمر", + "ooui-selectfile-button-select": "أختر ملÙ", + "ooui-selectfile-not-supported": "تحديد الملÙات غير مدعوم", + "ooui-selectfile-placeholder": "لم يختر أي ملÙ", + "ooui-selectfile-dragdrop-placeholder": "ترك مل٠هنا" } diff --git a/resources/lib/oojs-ui/i18n/arq.json b/resources/lib/oojs-ui/i18n/arq.json index 80987818..61eb3844 100644 --- a/resources/lib/oojs-ui/i18n/arq.json +++ b/resources/lib/oojs-ui/i18n/arq.json @@ -8,9 +8,14 @@ "ooui-outline-control-move-up": "طلع الشيئ للÙوق", "ooui-outline-control-remove": "أمحي العنصر", "ooui-toolbar-more": "زيادة", + "ooui-toolgroup-expand": "زيادة", + "ooui-toolgroup-collapse": "قليل", "ooui-dialog-message-accept": "مليح", "ooui-dialog-message-reject": "رجَع", "ooui-dialog-process-error": "حاجه ما خدمتش مليح", "ooui-dialog-process-dismiss": "أرÙضها", - "ooui-dialog-process-retry": "عاود جرب" + "ooui-dialog-process-retry": "عاود جرب", + "ooui-dialog-process-continue": "واصل", + "ooui-selectfile-not-supported": "تحديد الÙيشيات ما هوش محدد", + "ooui-selectfile-placeholder": "ما اختاريتش حتا ملÙ" } diff --git a/resources/lib/oojs-ui/i18n/as.json b/resources/lib/oojs-ui/i18n/as.json new file mode 100644 index 00000000..50532809 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/as.json @@ -0,0 +1,25 @@ +{ + "@metadata": { + "authors": [ + "Gitartha.bordoloi", + "Dibya Dutta", + "IKHazarika" + ] + }, + "ooui-outline-control-move-down": "সমল তললৈ সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à§° কৰক", + "ooui-outline-control-move-up": "সমল ওপৰলৈ সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à§° কৰক", + "ooui-outline-control-remove": "সমল আà¦à¦¤à§°à¦¾à¦“ক", + "ooui-toolbar-more": "অধিক", + "ooui-toolgroup-expand": "অধিক", + "ooui-toolgroup-collapse": "কম দেখাওক", + "ooui-dialog-message-accept": "শà§à¦¦à§à¦§", + "ooui-dialog-message-reject": "বাতিল কৰক", + "ooui-dialog-process-error": "কিবা তà§à§°à§à¦Ÿà¦¿ হৈছে", + "ooui-dialog-process-dismiss": "বাতিল", + "ooui-dialog-process-retry": "পà§à¦¨à§° চেষà§à¦Ÿà¦¾ কৰক", + "ooui-dialog-process-continue": "অবà§à¦¯à¦¾à¦¹à¦¤ ৰাখক", + "ooui-selectfile-button-select": "ফাইল নিৰà§à¦¬à¦¾à¦šà¦¨ কৰক", + "ooui-selectfile-not-supported": "নথি নিৰà§à¦¬à¦¾à¦šà¦¨ সমৰà§à¦¥à¦¨ কৰা নাই", + "ooui-selectfile-placeholder": "কোনো নথি নিৰà§à¦¬à¦¾à¦šà¦¿à¦¤ কৰা হোৱা নাই", + "ooui-selectfile-dragdrop-placeholder": "ইয়াত ফাইল à¦à§°à¦•" +} diff --git a/resources/lib/oojs-ui/i18n/ast.json b/resources/lib/oojs-ui/i18n/ast.json index 87d7688a..11761c6c 100644 --- a/resources/lib/oojs-ui/i18n/ast.json +++ b/resources/lib/oojs-ui/i18n/ast.json @@ -10,9 +10,16 @@ "ooui-outline-control-move-up": "Mover arriba l'elementu", "ooui-outline-control-remove": "Desaniciar elementu", "ooui-toolbar-more": "Más", + "ooui-toolgroup-expand": "Más", + "ooui-toolgroup-collapse": "Menos", "ooui-dialog-message-accept": "Aceutar", "ooui-dialog-message-reject": "Encaboxar", "ooui-dialog-process-error": "Daqué funcionó mal", "ooui-dialog-process-dismiss": "Descartar", - "ooui-dialog-process-retry": "Vuelvi a intentalo" + "ooui-dialog-process-retry": "Vuelvi a intentalo", + "ooui-dialog-process-continue": "Siguir", + "ooui-selectfile-button-select": "Seleicionar un ficheru", + "ooui-selectfile-not-supported": "Nun hai encontu pa la seleición de ficheros", + "ooui-selectfile-placeholder": "Nun se seleicionó nengún ficheru", + "ooui-selectfile-dragdrop-placeholder": "Soltar el ficheru equí" } diff --git a/resources/lib/oojs-ui/i18n/be-tarask.json b/resources/lib/oojs-ui/i18n/be-tarask.json index c5475f85..3548239a 100644 --- a/resources/lib/oojs-ui/i18n/be-tarask.json +++ b/resources/lib/oojs-ui/i18n/be-tarask.json @@ -4,10 +4,23 @@ "EugeneZelenko", "Wizardist", "Чаховіч УладзіÑлаў", - "Zedlik" + "Zedlik", + "Red Winged Duck", + "Renessaince" ] }, - "ooui-outline-control-move-down": "ПераÑунуць ніжÑй", - "ooui-outline-control-move-up": "ПераÑунуць вышÑй", - "ooui-toolbar-more": "Болей" + "ooui-outline-control-move-down": "ПераÑунуць ÑлемÑнт ніжÑй", + "ooui-outline-control-move-up": "ПераÑунуць ÑлемÑнт вышÑй", + "ooui-outline-control-remove": "Выдаліць пункт", + "ooui-toolbar-more": "Болей", + "ooui-toolgroup-expand": "Болей", + "ooui-toolgroup-collapse": "Меней", + "ooui-dialog-message-accept": "Добра", + "ooui-dialog-message-reject": "СкаÑаваць", + "ooui-dialog-process-error": "Ðешта пайшло Ð½Ñ Ñ‚Ð°Ðº", + "ooui-dialog-process-dismiss": "ПрапуÑьціць", + "ooui-dialog-process-retry": "ПаÑпрабаваць зноў", + "ooui-dialog-process-continue": "ПрацÑгваць", + "ooui-selectfile-not-supported": "Выбар файлу не падтрымліваецца", + "ooui-selectfile-placeholder": "Ðіводзін файл не абраны" } diff --git a/resources/lib/oojs-ui/i18n/be.json b/resources/lib/oojs-ui/i18n/be.json index fb0f6880..7db7547b 100644 --- a/resources/lib/oojs-ui/i18n/be.json +++ b/resources/lib/oojs-ui/i18n/be.json @@ -2,9 +2,22 @@ "@metadata": { "authors": [ "Чаховіч УладзіÑлаў", - "Artificial123" + "Artificial123", + "Goshaproject" ] }, + "ooui-outline-control-move-down": "ПерамÑÑціць Ñлемент ўніз", + "ooui-outline-control-move-up": "ПерамÑÑціць Ñлемент уверх", + "ooui-outline-control-remove": "Выдаліць Ñлемент", + "ooui-toolbar-more": "ЯшчÑ", + "ooui-toolgroup-expand": "ЯшчÑ", + "ooui-toolgroup-collapse": "Менш", "ooui-dialog-message-accept": "ОК", - "ooui-dialog-message-reject": "ÐдмÑніць" + "ooui-dialog-message-reject": "ÐдмÑніць", + "ooui-dialog-process-error": "ШтоÑÑŒ пайшло не так…", + "ooui-dialog-process-dismiss": "ПрапуÑціць", + "ooui-dialog-process-retry": "ПаÑпрабаваць ÑÑˆÑ‡Ñ Ñ€Ð°Ð·", + "ooui-dialog-process-continue": "ПрацÑгнуць", + "ooui-selectfile-not-supported": "Выбраны файл не падтрымліваецца", + "ooui-selectfile-placeholder": "Файл не выбраны" } diff --git a/resources/lib/oojs-ui/i18n/bg.json b/resources/lib/oojs-ui/i18n/bg.json index 02d95b52..dce3593c 100644 --- a/resources/lib/oojs-ui/i18n/bg.json +++ b/resources/lib/oojs-ui/i18n/bg.json @@ -4,9 +4,18 @@ "DCLXVI", "Hristofor.mirchev", "පසිඳු කà·à·€à·’න්ද", - "Mitzev" + "Mitzev", + "Aquilax" ] }, "ooui-outline-control-remove": "Премахване на обекта", - "ooui-toolbar-more": "Още" + "ooui-toolbar-more": "Още", + "ooui-toolgroup-expand": "Още", + "ooui-toolgroup-collapse": "По-малко", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Отказ", + "ooui-dialog-process-error": "Ðещо Ñе обърка", + "ooui-dialog-process-dismiss": "Затвори", + "ooui-dialog-process-retry": "Опитайте отново", + "ooui-dialog-process-continue": "Продължаване" } diff --git a/resources/lib/oojs-ui/i18n/bn.json b/resources/lib/oojs-ui/i18n/bn.json index 1cfa6c45..02d57e0c 100644 --- a/resources/lib/oojs-ui/i18n/bn.json +++ b/resources/lib/oojs-ui/i18n/bn.json @@ -8,7 +8,8 @@ "Runab", "Sayak Sarkar", "Aftabuzzaman", - "RYasmeen (WMF)" + "RYasmeen (WMF)", + "NahidSultan" ] }, "ooui-outline-control-move-down": "আইটেম নিচে সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦°", @@ -22,5 +23,9 @@ "ooui-dialog-process-error": "কিছৠà¦à¦•à¦Ÿà¦¾à¦¯à¦¼ তà§à¦°à§à¦Ÿà¦¿ হয়েছে", "ooui-dialog-process-dismiss": "বাতিল করà§à¦¨", "ooui-dialog-process-retry": "আবার চেষà§à¦Ÿà¦¾ করà§à¦¨", - "ooui-dialog-process-continue": "অগà§à¦°à¦¸à¦° হোন" + "ooui-dialog-process-continue": "অগà§à¦°à¦¸à¦° হোন", + "ooui-selectfile-button-select": "à¦à¦•à¦Ÿà¦¿ ফাইল নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨", + "ooui-selectfile-not-supported": "চিতà§à¦° নিরà§à¦¬à¦¾à¦šà¦¨ সমরà§à¦¥à¦¨ করছে না।", + "ooui-selectfile-placeholder": " কোন চিতà§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ হয়নি।", + "ooui-selectfile-dragdrop-placeholder": "à¦à¦–ানে ফাইল ছাড়à§à¦¨" } diff --git a/resources/lib/oojs-ui/i18n/bs.json b/resources/lib/oojs-ui/i18n/bs.json index 130bd8e5..d6f61ae5 100644 --- a/resources/lib/oojs-ui/i18n/bs.json +++ b/resources/lib/oojs-ui/i18n/bs.json @@ -1,10 +1,11 @@ { "@metadata": { "authors": [ - "DzWiki" + "DzWiki", + "Semso98" ] }, - "ooui-outline-control-move-down": "Premjesti stavku dole", + "ooui-outline-control-move-down": "Premjesti stavku dolje", "ooui-outline-control-move-up": "Premjesti stavku gore", "ooui-outline-control-remove": "Ukloni stavku", "ooui-toolbar-more": "ViÅ¡e", diff --git a/resources/lib/oojs-ui/i18n/ca.json b/resources/lib/oojs-ui/i18n/ca.json index ce3afa43..3077b605 100644 --- a/resources/lib/oojs-ui/i18n/ca.json +++ b/resources/lib/oojs-ui/i18n/ca.json @@ -10,7 +10,10 @@ "Vriullop", "Toniher", "Edustus", - "Davidpar" + "Davidpar", + "Maceleiro", + "Kippelboy", + "Macofe" ] }, "ooui-outline-control-move-down": "Baixa l'element", @@ -24,5 +27,9 @@ "ooui-dialog-process-error": "Alguna cosa no ha funcionat", "ooui-dialog-process-dismiss": "Descarta", "ooui-dialog-process-retry": "Torneu-ho a provar", - "ooui-dialog-process-continue": "Continua" + "ooui-dialog-process-continue": "Continua", + "ooui-selectfile-button-select": "Seleccioneu un fitxer", + "ooui-selectfile-not-supported": "El tipus de fitxer no és compatible", + "ooui-selectfile-placeholder": "No s'ha seleccionat cap fitxer", + "ooui-selectfile-dragdrop-placeholder": "Deixeu-hi anar el fitxer (o feu clic a navega)" } diff --git a/resources/lib/oojs-ui/i18n/ckb.json b/resources/lib/oojs-ui/i18n/ckb.json index 0c66619d..d2a998c0 100644 --- a/resources/lib/oojs-ui/i18n/ckb.json +++ b/resources/lib/oojs-ui/i18n/ckb.json @@ -3,9 +3,18 @@ "authors": [ "Calak", "Muhammed taha", - "Serwan" + "Serwan", + "Pirehelokan" ] }, + "ooui-toolbar-more": "زیاتر", + "ooui-toolgroup-expand": "زیاتر", + "ooui-toolgroup-collapse": "کەمتر", "ooui-dialog-message-accept": "باشە", - "ooui-dialog-message-reject": "پاشگەزبوونەوە" + "ooui-dialog-message-reject": "پاشگەزبوونەوە", + "ooui-dialog-process-error": "ھەڵەیەک ڕووی داوە", + "ooui-dialog-process-dismiss": "لێگەڕان", + "ooui-dialog-process-retry": "دیسان Ú¾Û•ÙˆÚµ بدە", + "ooui-dialog-process-continue": "درێژە بدە", + "ooui-selectfile-placeholder": "ھیچ Ùایلێک ھەڵنەبژێراوە" } diff --git a/resources/lib/oojs-ui/i18n/cs.json b/resources/lib/oojs-ui/i18n/cs.json index 1db9aed5..0d86aa64 100644 --- a/resources/lib/oojs-ui/i18n/cs.json +++ b/resources/lib/oojs-ui/i18n/cs.json @@ -25,5 +25,7 @@ "ooui-dialog-process-error": "NÄ›co se pokazilo", "ooui-dialog-process-dismiss": "Zavřít", "ooui-dialog-process-retry": "Zkusit znovu", - "ooui-dialog-process-continue": "PokraÄovat" + "ooui-dialog-process-continue": "PokraÄovat", + "ooui-selectfile-not-supported": "VýbÄ›r souboru není podporován", + "ooui-selectfile-placeholder": "Nebyl vybrán žádný soubor" } diff --git a/resources/lib/oojs-ui/i18n/cu.json b/resources/lib/oojs-ui/i18n/cu.json index aa916af0..d627de06 100644 --- a/resources/lib/oojs-ui/i18n/cu.json +++ b/resources/lib/oojs-ui/i18n/cu.json @@ -5,5 +5,6 @@ ] }, "ooui-toolbar-more": "вѧщє", - "ooui-toolgroup-expand": "вѧщє" + "ooui-toolgroup-expand": "вѧщє", + "ooui-dialog-process-error": "нѣчьто ê™ÑŠÐ»Ñ£ Ñѧ авило" } diff --git a/resources/lib/oojs-ui/i18n/da.json b/resources/lib/oojs-ui/i18n/da.json index 0b847be1..30e3efae 100644 --- a/resources/lib/oojs-ui/i18n/da.json +++ b/resources/lib/oojs-ui/i18n/da.json @@ -7,10 +7,13 @@ "Laketown", "Palnatoke", "Simeondahl", - "Tehnix" + "Tehnix", + "Macofe" ] }, "ooui-outline-control-move-down": "Flyt ned", "ooui-outline-control-move-up": "Flyt op", - "ooui-toolbar-more": "Mere" + "ooui-toolbar-more": "Mere", + "ooui-toolgroup-expand": "Mere", + "ooui-dialog-process-continue": "Fortsæt" } diff --git a/resources/lib/oojs-ui/i18n/de.json b/resources/lib/oojs-ui/i18n/de.json index 15624fd4..b48dfb5e 100644 --- a/resources/lib/oojs-ui/i18n/de.json +++ b/resources/lib/oojs-ui/i18n/de.json @@ -24,5 +24,9 @@ "ooui-dialog-process-error": "Etwas ist schief gelaufen", "ooui-dialog-process-dismiss": "Ausblenden", "ooui-dialog-process-retry": "Erneut versuchen", - "ooui-dialog-process-continue": "Fortfahren" + "ooui-dialog-process-continue": "Fortfahren", + "ooui-selectfile-button-select": "Eine Datei auswählen", + "ooui-selectfile-not-supported": "Die Dateiauswahl wird nicht unterstützt", + "ooui-selectfile-placeholder": "Keine Datei ausgewählt", + "ooui-selectfile-dragdrop-placeholder": "Dateien hier ablegen" } diff --git a/resources/lib/oojs-ui/i18n/dty.json b/resources/lib/oojs-ui/i18n/dty.json new file mode 100644 index 00000000..21742b69 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/dty.json @@ -0,0 +1,18 @@ +{ + "@metadata": { + "authors": [ + "जनक राज भटà¥à¤Ÿ" + ] + }, + "ooui-outline-control-move-down": "वसà¥à¤¤à¥à¤²à¤¾à¤ˆ तल साददे", + "ooui-outline-control-move-up": "वसà¥à¤¤à¥à¤²à¤¾à¤ˆ मथि साददे", + "ooui-outline-control-remove": "वसà¥à¤¤à¥à¤²à¤¾à¤ˆ हटà¥à¤¨à¥à¤¯à¤¾", + "ooui-toolbar-more": "à¤à¤¿à¤•à¥à¤•", + "ooui-toolgroup-expand": "à¤à¤¿à¤•à¥à¤•", + "ooui-toolgroup-collapse": "थोका", + "ooui-dialog-message-accept": "हà¥à¤¨à¥à¤›", + "ooui-dialog-message-reject": "रदà¥à¤¦", + "ooui-dialog-process-dismiss": "खारेज गदà¥à¤¦à¥‡", + "ooui-dialog-process-retry": "दोसरया पà¥à¤°à¤¯à¤¾à¤¸ गर", + "ooui-dialog-process-continue": "जारी राखà¥à¤¯à¤¾" +} diff --git a/resources/lib/oojs-ui/i18n/el.json b/resources/lib/oojs-ui/i18n/el.json index 6fb7dbad..85384179 100644 --- a/resources/lib/oojs-ui/i18n/el.json +++ b/resources/lib/oojs-ui/i18n/el.json @@ -8,7 +8,8 @@ "Geraki", "Glavkos", "Nikosguard", - "Tifa93" + "Tifa93", + "Stam.nikos" ] }, "ooui-outline-control-move-down": "Μετακίνηση στοιχείου Ï€Ïος τα κάτω", @@ -22,5 +23,8 @@ "ooui-dialog-process-error": "Κάτι πήγε στÏαβά", "ooui-dialog-process-dismiss": "ΑπόÏÏιψη", "ooui-dialog-process-retry": "Δοκιμάστε ξανά", - "ooui-dialog-process-continue": "Συνέχεια" + "ooui-dialog-process-continue": "Συνέχεια", + "ooui-selectfile-not-supported": "Επιλογή αÏχείου δεν υποστηÏίζεται", + "ooui-selectfile-placeholder": "Κανένα αÏχείο δεν είναι επιλεγμένο", + "ooui-selectfile-dragdrop-placeholder": "ΣÏÏετε το αÏχείο εδώ" } diff --git a/resources/lib/oojs-ui/i18n/en-ca.json b/resources/lib/oojs-ui/i18n/en-ca.json new file mode 100644 index 00000000..1a8e31be --- /dev/null +++ b/resources/lib/oojs-ui/i18n/en-ca.json @@ -0,0 +1,22 @@ +{ + "@metadata": { + "authors": [ + "Skyllful" + ] + }, + "ooui-outline-control-move-down": "Move item down", + "ooui-outline-control-move-up": "Move item up", + "ooui-outline-control-remove": "Remove item", + "ooui-toolbar-more": "More", + "ooui-toolgroup-expand": "More", + "ooui-toolgroup-collapse": "Less", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Cancel", + "ooui-dialog-process-error": "Something went wrong", + "ooui-dialog-process-dismiss": "Dismiss", + "ooui-dialog-process-retry": "Try again", + "ooui-dialog-process-continue": "Continue", + "ooui-selectfile-not-supported": "File(s) not supported", + "ooui-selectfile-placeholder": "No file selected", + "ooui-selectfile-dragdrop-placeholder": "Drop file here (or click to browse your computer)" +} diff --git a/resources/lib/oojs-ui/i18n/en.json b/resources/lib/oojs-ui/i18n/en.json index 1db3fd85..be008321 100644 --- a/resources/lib/oojs-ui/i18n/en.json +++ b/resources/lib/oojs-ui/i18n/en.json @@ -27,5 +27,9 @@ "ooui-dialog-process-error": "Something went wrong", "ooui-dialog-process-dismiss": "Dismiss", "ooui-dialog-process-retry": "Try again", - "ooui-dialog-process-continue": "Continue" + "ooui-dialog-process-continue": "Continue", + "ooui-selectfile-button-select": "Select a file", + "ooui-selectfile-not-supported": "File selection is not supported", + "ooui-selectfile-placeholder": "No file is selected", + "ooui-selectfile-dragdrop-placeholder": "Drop file here" } diff --git a/resources/lib/oojs-ui/i18n/eo.json b/resources/lib/oojs-ui/i18n/eo.json index 8d9714c6..e7895650 100644 --- a/resources/lib/oojs-ui/i18n/eo.json +++ b/resources/lib/oojs-ui/i18n/eo.json @@ -4,10 +4,23 @@ "Happy5214", "KuboF", "Shirayuki", - "Yekrats" + "Yekrats", + "Kvardek du" ] }, "ooui-outline-control-move-down": "Movi eron suben", "ooui-outline-control-move-up": "Movi eron supren", - "ooui-toolbar-more": "Pli" + "ooui-outline-control-remove": "Forigi eron", + "ooui-toolbar-more": "Pli", + "ooui-toolgroup-expand": "Pli", + "ooui-toolgroup-collapse": "Mapli", + "ooui-dialog-message-accept": "Bone", + "ooui-dialog-message-reject": "Nuligi", + "ooui-dialog-process-error": "Io rompiÄis", + "ooui-dialog-process-dismiss": "Elimini", + "ooui-dialog-process-retry": "Reprovi", + "ooui-dialog-process-continue": "DaÅ­rigi", + "ooui-selectfile-button-select": "Elekti dosieron", + "ooui-selectfile-not-supported": "Dosieroselekto ne estas subtenata.", + "ooui-selectfile-placeholder": "Vi ne selektis dosieron" } diff --git a/resources/lib/oojs-ui/i18n/es.json b/resources/lib/oojs-ui/i18n/es.json index 915791e6..fa11a362 100644 --- a/resources/lib/oojs-ui/i18n/es.json +++ b/resources/lib/oojs-ui/i18n/es.json @@ -29,5 +29,9 @@ "ooui-dialog-process-error": "Algo salió mal", "ooui-dialog-process-dismiss": "Descartar", "ooui-dialog-process-retry": "Intentar de nuevo", - "ooui-dialog-process-continue": "Continuar" + "ooui-dialog-process-continue": "Continuar", + "ooui-selectfile-button-select": "Selecciona un archivo", + "ooui-selectfile-not-supported": "No se admite la selección de archivos", + "ooui-selectfile-placeholder": "Ningún archivo seleccionado", + "ooui-selectfile-dragdrop-placeholder": "Suelta el archivo aquí" } diff --git a/resources/lib/oojs-ui/i18n/et.json b/resources/lib/oojs-ui/i18n/et.json index 6a212b6b..59b7ccd9 100644 --- a/resources/lib/oojs-ui/i18n/et.json +++ b/resources/lib/oojs-ui/i18n/et.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Avjoska", - "Pikne" + "Pikne", + "Suwa" ] }, "ooui-outline-control-move-down": "Liiguta üksust allapoole", @@ -16,5 +17,9 @@ "ooui-dialog-process-error": "Midagi läks valesti", "ooui-dialog-process-dismiss": "Hülga", "ooui-dialog-process-retry": "Proovi uuesti", - "ooui-dialog-process-continue": "Jätka" + "ooui-dialog-process-continue": "Jätka", + "ooui-selectfile-button-select": "Vali fail", + "ooui-selectfile-not-supported": "Faili valiku tugi puudub", + "ooui-selectfile-placeholder": "Faili ei ole valitud", + "ooui-selectfile-dragdrop-placeholder": "Lohista fail siia" } diff --git a/resources/lib/oojs-ui/i18n/eu.json b/resources/lib/oojs-ui/i18n/eu.json index e947582d..e5073251 100644 --- a/resources/lib/oojs-ui/i18n/eu.json +++ b/resources/lib/oojs-ui/i18n/eu.json @@ -4,17 +4,23 @@ "An13sa", "Unai Fdz. de Betoño", "Xabier Armendaritz", - "Subi" + "Subi", + "Sator" ] }, "ooui-outline-control-move-down": "Mugitu itema beherantz", "ooui-outline-control-move-up": "Mugitu itema gorantz", + "ooui-outline-control-remove": "Elementua kendu", "ooui-toolbar-more": "Gehiago", "ooui-toolgroup-expand": "Gehiago", "ooui-toolgroup-collapse": "Gutxiago", "ooui-dialog-message-accept": "Ados", "ooui-dialog-message-reject": "Utzi", "ooui-dialog-process-error": "Zerbaitek huts egin du", + "ooui-dialog-process-dismiss": "Utzi", "ooui-dialog-process-retry": "Saiatu berriro", - "ooui-dialog-process-continue": "Jarraitu" + "ooui-dialog-process-continue": "Jarraitu", + "ooui-selectfile-button-select": "Fitxategi bat aukeratu", + "ooui-selectfile-not-supported": "Fitxategi aukeraketa ez da onartzen", + "ooui-selectfile-placeholder": "Ez da fitxategirik hautatu" } diff --git a/resources/lib/oojs-ui/i18n/fa.json b/resources/lib/oojs-ui/i18n/fa.json index 7cfcfa21..0375c8eb 100644 --- a/resources/lib/oojs-ui/i18n/fa.json +++ b/resources/lib/oojs-ui/i18n/fa.json @@ -11,7 +11,10 @@ "Taha", "درÙØ´ کاویانی", "Armin1392", - "Alirezaaa" + "Alirezaaa", + "Leyth", + "الناز", + "Ùلورانس" ] }, "ooui-outline-control-move-down": "انتقال مورد به پایین", @@ -23,7 +26,11 @@ "ooui-dialog-message-accept": "تأیید", "ooui-dialog-message-reject": "لغو", "ooui-dialog-process-error": "مشکلی وجود دارد", - "ooui-dialog-process-dismiss": "نپذیرÙتن", - "ooui-dialog-process-retry": "دوباره امتحان Ú©Ù†", - "ooui-dialog-process-continue": "ادامه" + "ooui-dialog-process-dismiss": "رد", + "ooui-dialog-process-retry": "دوباره امتحان کنید", + "ooui-dialog-process-continue": "ادامه", + "ooui-selectfile-button-select": "یک Ùایل انتخاب کنید", + "ooui-selectfile-not-supported": "انتخاب پرونده پشتیبانی نمی‌شود", + "ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده است", + "ooui-selectfile-dragdrop-placeholder": "Ùایل را اینجا رها کنید" } diff --git a/resources/lib/oojs-ui/i18n/fi.json b/resources/lib/oojs-ui/i18n/fi.json index 3fb4110c..bdf015f9 100644 --- a/resources/lib/oojs-ui/i18n/fi.json +++ b/resources/lib/oojs-ui/i18n/fi.json @@ -13,19 +13,23 @@ "Silvonen", "Skalman", "Stryn", - "VezonThunder" + "VezonThunder", + "Alluk." ] }, "ooui-outline-control-move-down": "Siirrä kohdetta alaspäin", "ooui-outline-control-move-up": "Siirrä kohdetta ylöspäin", "ooui-outline-control-remove": "Poista kohde", "ooui-toolbar-more": "Lisää", - "ooui-toolgroup-expand": "Enemmän", - "ooui-toolgroup-collapse": "Vähemmän", + "ooui-toolgroup-expand": "Näytä lisää", + "ooui-toolgroup-collapse": "Näytä vähemmän", "ooui-dialog-message-accept": "OK", - "ooui-dialog-message-reject": "Peruuta", + "ooui-dialog-message-reject": "Peru", "ooui-dialog-process-error": "Jokin meni pieleen", "ooui-dialog-process-dismiss": "Hylkää", "ooui-dialog-process-retry": "Yritä uudelleen", - "ooui-dialog-process-continue": "Jatka" + "ooui-dialog-process-continue": "Jatka", + "ooui-selectfile-not-supported": "Tiedoston valitsemista ei tueta", + "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu", + "ooui-selectfile-dragdrop-placeholder": "Pudota tiedosto (tai selaa tiedostoja napsauttamalla)" } diff --git a/resources/lib/oojs-ui/i18n/fr.json b/resources/lib/oojs-ui/i18n/fr.json index 9144cb01..92015a4f 100644 --- a/resources/lib/oojs-ui/i18n/fr.json +++ b/resources/lib/oojs-ui/i18n/fr.json @@ -27,19 +27,25 @@ "Verdy p", "Wyz", "SnowedEarth", - "Jdforrester" + "Jdforrester", + "Wladek92", + "Harmonia Amanda" ] }, - "ooui-outline-control-move-down": "Faire descendre l’élément", - "ooui-outline-control-move-up": "Faire monter l’élément", + "ooui-outline-control-move-down": "Descendre l’élément", + "ooui-outline-control-move-up": "Monter l’élément", "ooui-outline-control-remove": "Supprimer l’élément", "ooui-toolbar-more": "Plus", "ooui-toolgroup-expand": "Plus", "ooui-toolgroup-collapse": "Moins", "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "Annuler", - "ooui-dialog-process-error": "Quelque chose a mal tourné", + "ooui-dialog-process-error": "Quelque chose s'est mal passé", "ooui-dialog-process-dismiss": "Rejeter", - "ooui-dialog-process-retry": "Réessayez", - "ooui-dialog-process-continue": "Continuer" + "ooui-dialog-process-retry": "Réessayer", + "ooui-dialog-process-continue": "Continuer", + "ooui-selectfile-button-select": "Sélectionner un fichier", + "ooui-selectfile-not-supported": "La sélection de fichier n’est pas prise en charge", + "ooui-selectfile-placeholder": "Aucun fichier sélectionné", + "ooui-selectfile-dragdrop-placeholder": "Déposer le fichier ici" } diff --git a/resources/lib/oojs-ui/i18n/gl.json b/resources/lib/oojs-ui/i18n/gl.json index a4339f47..4cb28399 100644 --- a/resources/lib/oojs-ui/i18n/gl.json +++ b/resources/lib/oojs-ui/i18n/gl.json @@ -18,5 +18,9 @@ "ooui-dialog-process-error": "Algo foi mal", "ooui-dialog-process-dismiss": "Agochar", "ooui-dialog-process-retry": "Inténteo de novo", - "ooui-dialog-process-continue": "Continuar" + "ooui-dialog-process-continue": "Continuar", + "ooui-selectfile-button-select": "Seleccionar un ficheiro", + "ooui-selectfile-not-supported": "Non está soportada a selección de ficheiros", + "ooui-selectfile-placeholder": "Non se seleccionou ningún ficheiro", + "ooui-selectfile-dragdrop-placeholder": "Solte un ficheiro aquí" } diff --git a/resources/lib/oojs-ui/i18n/glk.json b/resources/lib/oojs-ui/i18n/glk.json new file mode 100644 index 00000000..9b15046f --- /dev/null +++ b/resources/lib/oojs-ui/i18n/glk.json @@ -0,0 +1,23 @@ +{ + "@metadata": { + "authors": [ + "V6rg" + ] + }, + "ooui-outline-control-move-down": "مأسمکه جابجا بۊکۊن جير", + "ooui-outline-control-move-up": "مأسمکه جابجا بۊکۊن جؤر", + "ooui-outline-control-remove": "مأسمکه حذÙØ£Ú©ÛŠÙ†", + "ooui-toolbar-more": "ويشتر", + "ooui-toolgroup-expand": "ويشتر", + "ooui-toolgroup-collapse": "کمتر", + "ooui-dialog-message-accept": "خؤ", + "ooui-dialog-message-reject": "لغو", + "ooui-dialog-process-error": "Ù‰Ú© مؤشکلي هنأ", + "ooui-dialog-process-dismiss": "وأبدي", + "ooui-dialog-process-retry": "هنده حقسأى بۊکۊنين", + "ooui-dialog-process-continue": "سره", + "ooui-selectfile-button-select": "ىکته Ùاىله دؤجين بۊکۊنين", + "ooui-selectfile-not-supported": "نشأنهىکته Ùاىله دؤجين گۊدن", + "ooui-selectfile-placeholder": "هيچ Ùاىلي دؤجين نۊبؤ", + "ooui-selectfile-dragdrop-placeholder": "Ùاىله ائره Ùدي" +} diff --git a/resources/lib/oojs-ui/i18n/gu.json b/resources/lib/oojs-ui/i18n/gu.json index 2d8315bf..5c48b9ef 100644 --- a/resources/lib/oojs-ui/i18n/gu.json +++ b/resources/lib/oojs-ui/i18n/gu.json @@ -3,15 +3,23 @@ "authors": [ "Ashok modhvadia", "KartikMistry", - "The Discoverer" + "The Discoverer", + "NehalDaveND", + "Dsvyas" ] }, "ooui-outline-control-move-down": "વસà«àª¤à« નીચે ખસેડો", "ooui-outline-control-move-up": "વસà«àª¤à« ઉપર ખસેડો", "ooui-outline-control-remove": "વસà«àª¤à« હટાવો", "ooui-toolbar-more": "વધà«", + "ooui-toolgroup-expand": "વધà«", + "ooui-toolgroup-collapse": "ઓછા", "ooui-dialog-message-accept": "બરાબર", "ooui-dialog-message-reject": "રદ કરો", "ooui-dialog-process-error": "કંઇક ગરબડ થઇ", - "ooui-dialog-process-retry": "ફરી પà«àª°àª¯àª¤à«àª¨ કરો" + "ooui-dialog-process-dismiss": "વિસરà«àªœàª¨", + "ooui-dialog-process-retry": "ફરી પà«àª°àª¯àª¤à«àª¨ કરો", + "ooui-dialog-process-continue": "ચાલૠરાખો", + "ooui-selectfile-not-supported": "ફાઇલ પસંદગીની જોગવાઈ નથી", + "ooui-selectfile-placeholder": "કોઇ ફાઇલ પસંદ નથી કરાઈ" } diff --git a/resources/lib/oojs-ui/i18n/he.json b/resources/lib/oojs-ui/i18n/he.json index cadc416c..650d67dd 100644 --- a/resources/lib/oojs-ui/i18n/he.json +++ b/resources/lib/oojs-ui/i18n/he.json @@ -26,5 +26,9 @@ "ooui-dialog-process-error": "משהו השתבש", "ooui-dialog-process-dismiss": "לוותר", "ooui-dialog-process-retry": "לנסות שוב", - "ooui-dialog-process-continue": "המשך" + "ooui-dialog-process-continue": "המשך", + "ooui-selectfile-button-select": "× × ×œ×‘×—×•×¨ קובץ", + "ooui-selectfile-not-supported": "בחירת ×§×‘×¦×™× ××™× ×” נתמכת", + "ooui-selectfile-placeholder": "×œ× × ×‘×—×¨ ×©×•× ×§×•×‘×¥", + "ooui-selectfile-dragdrop-placeholder": "× × ×œ×©×—×¨×¨ ×ת הקובץ ×›×ן" } diff --git a/resources/lib/oojs-ui/i18n/hi.json b/resources/lib/oojs-ui/i18n/hi.json index ce86aaab..573096f3 100644 --- a/resources/lib/oojs-ui/i18n/hi.json +++ b/resources/lib/oojs-ui/i18n/hi.json @@ -6,7 +6,8 @@ "Rajesh", "Siddhartha Ghai", "Goelujjwal", - "Ankita-ks" + "Ankita-ks", + "Param Mudgal" ] }, "ooui-outline-control-move-down": "पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿ नीचे ले जाà¤à¤", @@ -20,5 +21,7 @@ "ooui-dialog-process-error": "कà¥à¤› गलत हà¥à¤…ा है", "ooui-dialog-process-dismiss": "ख़ारिज करें", "ooui-dialog-process-retry": "पà¥à¤¨à¤ƒ पà¥à¤°à¤¯à¤¾à¤¸ करें", - "ooui-dialog-process-continue": "जारी रखें" + "ooui-dialog-process-continue": "जारी रखें", + "ooui-selectfile-not-supported": "फ़ाइल का चयन समरà¥à¤¥à¤¿à¤¤ नहीं है", + "ooui-selectfile-placeholder": "कोई फाइल चà¥à¤¨à¥€ नही गई हेै" } diff --git a/resources/lib/oojs-ui/i18n/hrx.json b/resources/lib/oojs-ui/i18n/hrx.json new file mode 100644 index 00000000..1534af76 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/hrx.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Midnight Gambler" + ] + }, + "ooui-toolbar-more": "Meahr", + "ooui-toolgroup-expand": "Meahr", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Abbreche", + "ooui-dialog-process-dismiss": "Ausblenne" +} diff --git a/resources/lib/oojs-ui/i18n/hu-formal.json b/resources/lib/oojs-ui/i18n/hu-formal.json new file mode 100644 index 00000000..34aa0ae6 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/hu-formal.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Misibacsi" + ] + }, + "ooui-outline-control-move-down": "Elem mozgatása lefelé", + "ooui-outline-control-move-up": "Elem mozgatása felfelé", + "ooui-outline-control-remove": "Elem eltávolítása", + "ooui-toolbar-more": "Tovább...", + "ooui-toolgroup-expand": "Tovább", + "ooui-toolgroup-collapse": "Kevesebb", + "ooui-dialog-message-accept": "Rendben", + "ooui-dialog-message-reject": "Mégse", + "ooui-dialog-process-error": "Valami elromlott.", + "ooui-dialog-process-dismiss": "Mégse", + "ooui-dialog-process-retry": "Próbálja újra", + "ooui-dialog-process-continue": "Folytatás", + "ooui-selectfile-not-supported": "A fájl kiválasztása nincs támogatva", + "ooui-selectfile-placeholder": "Nincs fájl kiválasztva" +} diff --git a/resources/lib/oojs-ui/i18n/hu.json b/resources/lib/oojs-ui/i18n/hu.json index d50e62da..acd9d3b5 100644 --- a/resources/lib/oojs-ui/i18n/hu.json +++ b/resources/lib/oojs-ui/i18n/hu.json @@ -6,18 +6,22 @@ "Misibacsi", "ViDam", "Tacsipacsi", - "Csega" + "Csega", + "Kishajnalka" ] }, "ooui-outline-control-move-down": "Elem mozgatása lefelé", "ooui-outline-control-move-up": "Elem mozgatása felfelé", "ooui-outline-control-remove": "Elem eltávolítása", - "ooui-toolbar-more": "Tovább...", + "ooui-toolbar-more": "Több", "ooui-toolgroup-expand": "Több", "ooui-toolgroup-collapse": "Kevesebb", "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "Mégse", + "ooui-dialog-process-error": "Valami elromlott", "ooui-dialog-process-dismiss": "Elrejt", "ooui-dialog-process-retry": "Próbáld újra", - "ooui-dialog-process-continue": "Folytatás" + "ooui-dialog-process-continue": "Folytatás", + "ooui-selectfile-not-supported": "A fájl kiválasztása nincs támogatva", + "ooui-selectfile-placeholder": "Nincs fájl kiválasztva" } diff --git a/resources/lib/oojs-ui/i18n/hy.json b/resources/lib/oojs-ui/i18n/hy.json index 2aaf4e46..c2b45a8b 100644 --- a/resources/lib/oojs-ui/i18n/hy.json +++ b/resources/lib/oojs-ui/i18n/hy.json @@ -3,7 +3,8 @@ "authors": [ "Vacio", "Xelgen", - "Ô´Õ¡Õ¾Õ«Õ© ÕÕ¡Ö€Õ¸ÕµÕ¡Õ¶" + "Ô´Õ¡Õ¾Õ«Õ© ÕÕ¡Ö€Õ¸ÕµÕ¡Õ¶", + "Vahe Gharakhanyan" ] }, "ooui-outline-control-move-down": "Ô»Õ»Õ¥ÖÕ¶Õ¥Õ¬ Õ¯Õ¥Õ¿Õ¨", @@ -17,5 +18,7 @@ "ooui-dialog-process-error": "Ô»Õ¶Õ¹-Õ¸Ö€ Õ½Õ­Õ¡Õ¬ Õ§ Õ¿Õ¥Õ²Õ« Õ¸Ö‚Õ¶Õ¥ÖÕ¥Õ¬", "ooui-dialog-process-dismiss": "Õ“Õ¡Õ¯Õ¥Õ¬", "ooui-dialog-process-retry": "Ô¿Ö€Õ¯Õ«Õ¶ ÖƒÕ¸Ö€Õ±Õ¥Õ¬", - "ooui-dialog-process-continue": "Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬" + "ooui-dialog-process-continue": "Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬", + "ooui-selectfile-not-supported": "Õ–Õ¡ÕµÕ¬Õ« Õ¨Õ¶Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¹Õ« ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¸Ö‚Õ´", + "ooui-selectfile-placeholder": "Õ–Õ¡ÕµÕ¬Õ¶ Õ¨Õ¶Õ¿Ö€Õ¾Õ¡Õ® Õ¹Õ§" } diff --git a/resources/lib/oojs-ui/i18n/ia.json b/resources/lib/oojs-ui/i18n/ia.json index b374b6f6..ceb27c9f 100644 --- a/resources/lib/oojs-ui/i18n/ia.json +++ b/resources/lib/oojs-ui/i18n/ia.json @@ -8,9 +8,16 @@ "ooui-outline-control-move-up": "Displaciar elemento in alto", "ooui-outline-control-remove": "Remover elemento", "ooui-toolbar-more": "Plus", + "ooui-toolgroup-expand": "Plus", + "ooui-toolgroup-collapse": "Minus", "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "Cancellar", "ooui-dialog-process-error": "Qualcosa ha vadite mal", "ooui-dialog-process-dismiss": "Clauder", - "ooui-dialog-process-retry": "Reprobar" + "ooui-dialog-process-retry": "Reprobar", + "ooui-dialog-process-continue": "Continuar", + "ooui-selectfile-button-select": "Selige un file", + "ooui-selectfile-not-supported": "Le selection de files non es supportate", + "ooui-selectfile-placeholder": "Nulle file es seligite", + "ooui-selectfile-dragdrop-placeholder": "Depone file hic" } diff --git a/resources/lib/oojs-ui/i18n/id.json b/resources/lib/oojs-ui/i18n/id.json index bd65e71a..400a4325 100644 --- a/resources/lib/oojs-ui/i18n/id.json +++ b/resources/lib/oojs-ui/i18n/id.json @@ -22,5 +22,7 @@ "ooui-dialog-process-error": "Ada yang tidak beres", "ooui-dialog-process-dismiss": "Tutup", "ooui-dialog-process-retry": "Coba lagi", - "ooui-dialog-process-continue": "Lanjutkan" + "ooui-dialog-process-continue": "Lanjutkan", + "ooui-selectfile-not-supported": "Peilihan berkas tidak didukung", + "ooui-selectfile-placeholder": "Tidak ada berkas yang terpilih" } diff --git a/resources/lib/oojs-ui/i18n/ilo.json b/resources/lib/oojs-ui/i18n/ilo.json index b37beae1..287c86d6 100644 --- a/resources/lib/oojs-ui/i18n/ilo.json +++ b/resources/lib/oojs-ui/i18n/ilo.json @@ -15,5 +15,7 @@ "ooui-dialog-process-error": "Adda madi a napasamak", "ooui-dialog-process-dismiss": "Pugsayen", "ooui-dialog-process-retry": "Padasen manen", - "ooui-dialog-process-continue": "Agtuloy" + "ooui-dialog-process-continue": "Agtuloy", + "ooui-selectfile-not-supported": "Saan a masuportaran ti panagpili ti papeles", + "ooui-selectfile-placeholder": "Awan ti napili a papeles" } diff --git a/resources/lib/oojs-ui/i18n/is.json b/resources/lib/oojs-ui/i18n/is.json index 3a4e1454..574c5927 100644 --- a/resources/lib/oojs-ui/i18n/is.json +++ b/resources/lib/oojs-ui/i18n/is.json @@ -16,5 +16,9 @@ "ooui-dialog-process-error": "Eitthvað mistókst", "ooui-dialog-process-dismiss": "Loka", "ooui-dialog-process-retry": "Reyna aftur", - "ooui-dialog-process-continue": "Halda áfram" + "ooui-dialog-process-continue": "Halda áfram", + "ooui-selectfile-button-select": "Velja skrá", + "ooui-selectfile-not-supported": "Skráar val er ekki stutt.", + "ooui-selectfile-placeholder": "Engin skrá er valin", + "ooui-selectfile-dragdrop-placeholder": "Slepptu skránni hérna" } diff --git a/resources/lib/oojs-ui/i18n/it.json b/resources/lib/oojs-ui/i18n/it.json index 0ff8af8f..68a25b5d 100644 --- a/resources/lib/oojs-ui/i18n/it.json +++ b/resources/lib/oojs-ui/i18n/it.json @@ -12,19 +12,26 @@ "Minerva Titani", "Raoli", "Una giornata uggiosa '94", - "Ontsed" + "Ontsed", + "Alexmar983", + "Nemo bis", + "Jdforrester" ] }, "ooui-outline-control-move-down": "Sposta in basso", "ooui-outline-control-move-up": "Sposta in alto", "ooui-outline-control-remove": "Rimuovi elemento", "ooui-toolbar-more": "Altro", - "ooui-toolgroup-expand": "Più", + "ooui-toolgroup-expand": "Altro", "ooui-toolgroup-collapse": "Meno", "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "Annulla", "ooui-dialog-process-error": "Qualcosa è andato storto", "ooui-dialog-process-dismiss": "Nascondi", "ooui-dialog-process-retry": "Riprova", - "ooui-dialog-process-continue": "Continua" + "ooui-dialog-process-continue": "Continua", + "ooui-selectfile-button-select": "Seleziona un file", + "ooui-selectfile-not-supported": "La selezione del file non è supportata", + "ooui-selectfile-placeholder": "Nessun file è selezionato", + "ooui-selectfile-dragdrop-placeholder": "Posiziona i files qui" } diff --git a/resources/lib/oojs-ui/i18n/ja.json b/resources/lib/oojs-ui/i18n/ja.json index ec86124e..d0df0274 100644 --- a/resources/lib/oojs-ui/i18n/ja.json +++ b/resources/lib/oojs-ui/i18n/ja.json @@ -6,7 +6,8 @@ "Penn Station", "Shirayuki", "Takot", - "Los688" + "Los688", + "Sujiniku" ] }, "ooui-outline-control-move-down": "項目を下ã«ç§»å‹•ã•ã›ã‚‹", @@ -20,5 +21,9 @@ "ooui-dialog-process-error": "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸâ€¦", "ooui-dialog-process-dismiss": "é–‰ã˜ã‚‹", "ooui-dialog-process-retry": "ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„", - "ooui-dialog-process-continue": "続行" + "ooui-dialog-process-continue": "続行", + "ooui-selectfile-button-select": "ファイルをé¸æŠž", + "ooui-selectfile-not-supported": "ファイルã®é¸æŠžã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“", + "ooui-selectfile-placeholder": "ファイルãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“", + "ooui-selectfile-dragdrop-placeholder": "ファイルをã“ã“ã«ãƒ‰ãƒ­ãƒƒãƒ—" } diff --git a/resources/lib/oojs-ui/i18n/jv.json b/resources/lib/oojs-ui/i18n/jv.json index 8827af38..677b1c3d 100644 --- a/resources/lib/oojs-ui/i18n/jv.json +++ b/resources/lib/oojs-ui/i18n/jv.json @@ -3,8 +3,22 @@ "authors": [ "Gleki", "NoiX180", - "Pras" + "Pras", + "Jadinegara" ] }, - "ooui-outline-control-move-down": "Pindhahaken butir mangandhap" + "ooui-outline-control-move-down": "Pindhahaken butir mangandhap", + "ooui-outline-control-move-up": "Pindhah kara mêndhuwur", + "ooui-outline-control-remove": "Busak kara", + "ooui-toolbar-more": "Mênèh", + "ooui-toolgroup-expand": "Mênèh", + "ooui-toolgroup-collapse": "Suda", + "ooui-dialog-message-accept": "Oké", + "ooui-dialog-message-reject": "Batal", + "ooui-dialog-process-error": "Ana sing klèru", + "ooui-dialog-process-dismiss": "Tutup", + "ooui-dialog-process-retry": "Jajal manèh", + "ooui-dialog-process-continue": "Tutug", + "ooui-selectfile-not-supported": "Pilihan bêrkas ora disokong", + "ooui-selectfile-placeholder": "Ora ana bêrkas sing kapilih" } diff --git a/resources/lib/oojs-ui/i18n/ka.json b/resources/lib/oojs-ui/i18n/ka.json index 60ef661b..f1a1a473 100644 --- a/resources/lib/oojs-ui/i18n/ka.json +++ b/resources/lib/oojs-ui/i18n/ka.json @@ -22,5 +22,7 @@ "ooui-dialog-process-error": "მáƒáƒ®áƒ“რრáƒáƒ¦áƒáƒª შეცდáƒáƒ›áƒ", "ooui-dialog-process-dismiss": "დáƒáƒ›áƒáƒšáƒ•áƒ", "ooui-dialog-process-retry": "კიდევ სცáƒáƒ“ეთ", - "ooui-dialog-process-continue": "გáƒáƒ’რძელებáƒ" + "ooui-dialog-process-continue": "გáƒáƒ’რძელებáƒ", + "ooui-selectfile-not-supported": "ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ áƒ©áƒ”ვრáƒáƒ  áƒáƒ áƒ˜áƒ¡ მხáƒáƒ áƒ“áƒáƒ­áƒ”რილი", + "ooui-selectfile-placeholder": "ფáƒáƒ˜áƒšáƒ˜ áƒáƒ  áƒáƒ áƒ˜áƒ¡ áƒáƒ áƒ©áƒ”ული" } diff --git a/resources/lib/oojs-ui/i18n/km.json b/resources/lib/oojs-ui/i18n/km.json index c0d72c4f..e64889f4 100644 --- a/resources/lib/oojs-ui/i18n/km.json +++ b/resources/lib/oojs-ui/i18n/km.json @@ -1,11 +1,24 @@ { "@metadata": { "authors": [ - "Sovichet" + "Sovichet", + "គីមស៊្រុន" ] }, - "ooui-outline-control-move-down": "រុញ​ទៅ​ក្រោម", - "ooui-outline-control-move-up": "រុញ​ទៅ​លើ", - "ooui-outline-control-remove": "ដក​វážáŸ’ážáž»â€‹áž…áŸáž‰", - "ooui-toolbar-more": "បន្ážáŸ‚ម" + "ooui-outline-control-move-down": "រុញ​ធាážáž»áž‘ៅ​ក្រោម", + "ooui-outline-control-move-up": "រុញធាážáž»áž‘ៅ​លើ", + "ooui-outline-control-remove": "ដកធាážáž»áž…áŸáž‰", + "ooui-toolbar-more": "បន្ážáŸ‚មទៀáž", + "ooui-toolgroup-expand": "មើលច្រើន", + "ooui-toolgroup-collapse": "មើលážáž·áž…", + "ooui-dialog-message-accept": "យល់ព្រម", + "ooui-dialog-message-reject": "បោះបង់", + "ooui-dialog-process-error": "មានបញ្ហាអ្វីមួយ", + "ooui-dialog-process-dismiss": "បិទ", + "ooui-dialog-process-retry": "ព្យាយាមម្ដងទៀáž", + "ooui-dialog-process-continue": "បន្áž", + "ooui-selectfile-button-select": "ជ្រើសរើសឯកសារ", + "ooui-selectfile-not-supported": "ការជ្រើសរើសឯកសារមិនអាចប្រើបានទáŸ", + "ooui-selectfile-placeholder": "គ្មានឯកសារណាមួយážáŸ’រូវបានជ្រើសរើស", + "ooui-selectfile-dragdrop-placeholder": "ទម្លាក់ឯកសារនៅទីនáŸáŸ‡" } diff --git a/resources/lib/oojs-ui/i18n/ko.json b/resources/lib/oojs-ui/i18n/ko.json index 196dc2c3..38944173 100644 --- a/resources/lib/oojs-ui/i18n/ko.json +++ b/resources/lib/oojs-ui/i18n/ko.json @@ -9,17 +9,24 @@ "고기랑", "Ryuch", "Revi", - "Infinity" + "Infinity", + "Hwangjy9" ] }, "ooui-outline-control-move-down": "í•­ëª©ì„ ì•„ëž˜ë¡œ 옮기기", "ooui-outline-control-move-up": "í•­ëª©ì„ ìœ„ë¡œ 옮기기", - "ooui-outline-control-remove": "항목 지우기", + "ooui-outline-control-remove": "항목 제거", "ooui-toolbar-more": "ë” ë³´ê¸°", "ooui-toolgroup-expand": "ë” ë³´ê¸°", + "ooui-toolgroup-collapse": "ëœ ë³´ê¸°", "ooui-dialog-message-accept": "확ì¸", "ooui-dialog-message-reject": "취소", "ooui-dialog-process-error": "무언가가 잘못ë˜ì—ˆìŠµë‹ˆë‹¤", "ooui-dialog-process-dismiss": "숨기기", - "ooui-dialog-process-retry": "다시 ì‹œë„하세요" + "ooui-dialog-process-retry": "다시 ì‹œë„하세요", + "ooui-dialog-process-continue": "계ì†", + "ooui-selectfile-button-select": "파ì¼ì„ ì„ íƒí•˜ì„¸ìš”", + "ooui-selectfile-not-supported": "íŒŒì¼ ì„ íƒì€ 지ì›í•˜ì§€ 않습니다", + "ooui-selectfile-placeholder": "ì„ íƒí•œ íŒŒì¼ ì—†ìŒ", + "ooui-selectfile-dragdrop-placeholder": "ì—¬ê¸°ì— íŒŒì¼ì„ 놓으세요" } diff --git a/resources/lib/oojs-ui/i18n/krc.json b/resources/lib/oojs-ui/i18n/krc.json index ef92e49f..d4068c87 100644 --- a/resources/lib/oojs-ui/i18n/krc.json +++ b/resources/lib/oojs-ui/i18n/krc.json @@ -15,5 +15,7 @@ "ooui-dialog-process-error": "Ðе ÑÑе да табÑыз кетди", "ooui-dialog-process-dismiss": "Джаб", "ooui-dialog-process-retry": "Энтда Ñынаб кёр", - "ooui-dialog-process-continue": "Бардыр" + "ooui-dialog-process-continue": "Бардыр", + "ooui-selectfile-not-supported": "Файл Ñайлау тутулмайды", + "ooui-selectfile-placeholder": "Бир файл да Ñайланмагъанды" } diff --git a/resources/lib/oojs-ui/i18n/krl.json b/resources/lib/oojs-ui/i18n/krl.json new file mode 100644 index 00000000..6ff25ebe --- /dev/null +++ b/resources/lib/oojs-ui/i18n/krl.json @@ -0,0 +1,10 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "ooui-toolbar-more": "Enämpi", + "ooui-toolgroup-expand": "Enämpi", + "ooui-toolgroup-collapse": "Vähempi" +} diff --git a/resources/lib/oojs-ui/i18n/ksh.json b/resources/lib/oojs-ui/i18n/ksh.json index c975e825..f99c29fd 100644 --- a/resources/lib/oojs-ui/i18n/ksh.json +++ b/resources/lib/oojs-ui/i18n/ksh.json @@ -15,5 +15,8 @@ "ooui-dialog-process-error": "Öhnsjädd es scheif jejange", "ooui-dialog-process-dismiss": "Maach fott, ha_sch jelässe", "ooui-dialog-process-retry": "Norr_ens versöhke", - "ooui-dialog-process-continue": "Wigger maache" + "ooui-dialog-process-continue": "Wigger maache", + "ooui-selectfile-button-select": "Söhg en Dattei uß", + "ooui-selectfile-not-supported": "Mer ogerschtözze et Datteij_Ußwähle nit.", + "ooui-selectfile-placeholder": "Kein Dattei es ußjewählt" } diff --git a/resources/lib/oojs-ui/i18n/ku-latn.json b/resources/lib/oojs-ui/i18n/ku-latn.json index be9a8abd..94b46873 100644 --- a/resources/lib/oojs-ui/i18n/ku-latn.json +++ b/resources/lib/oojs-ui/i18n/ku-latn.json @@ -1,13 +1,16 @@ { "@metadata": { "authors": [ - "George Animal" + "George Animal", + "Bikarhêner" ] }, + "ooui-toolbar-more": "Bêhtir", "ooui-toolgroup-expand": "Bêhtir", "ooui-toolgroup-collapse": "Kêmtir", "ooui-dialog-message-accept": "BaÅŸ e", "ooui-dialog-message-reject": "Betal bike", "ooui-dialog-process-retry": "Dîsa hewl bide", - "ooui-dialog-process-continue": "Bidomîne" + "ooui-dialog-process-continue": "Bidomîne", + "ooui-selectfile-placeholder": "Ti dosye nehatiye hilbijartin" } diff --git a/resources/lib/oojs-ui/i18n/la.json b/resources/lib/oojs-ui/i18n/la.json new file mode 100644 index 00000000..7a9b2d23 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/la.json @@ -0,0 +1,15 @@ +{ + "@metadata": { + "authors": [ + "Jdforrester" + ] + }, + "ooui-toolbar-more": "Plus", + "ooui-toolgroup-expand": "Plus", + "ooui-toolgroup-collapse": "Paucior", + "ooui-dialog-message-accept": "Assentior", + "ooui-dialog-message-reject": "Dimittere", + "ooui-dialog-process-dismiss": "Dimittere", + "ooui-dialog-process-retry": "Retemptare", + "ooui-dialog-process-continue": "Pergere" +} diff --git a/resources/lib/oojs-ui/i18n/lb.json b/resources/lib/oojs-ui/i18n/lb.json index 119d1be9..39bc6701 100644 --- a/resources/lib/oojs-ui/i18n/lb.json +++ b/resources/lib/oojs-ui/i18n/lb.json @@ -21,5 +21,8 @@ "ooui-dialog-process-error": "Et ass eppes schif gaang", "ooui-dialog-process-dismiss": "Verwerfen", "ooui-dialog-process-retry": "Nach eng Kéier probéieren", - "ooui-dialog-process-continue": "Virufueren" + "ooui-dialog-process-continue": "Virufueren", + "ooui-selectfile-button-select": "E Fichier eraussichen", + "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht", + "ooui-selectfile-dragdrop-placeholder": "Fichier hei ofleeën" } diff --git a/resources/lib/oojs-ui/i18n/li.json b/resources/lib/oojs-ui/i18n/li.json new file mode 100644 index 00000000..f05a9571 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/li.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Pahles" + ] + }, + "ooui-outline-control-move-down": "Item nao ónger verplaatse", + "ooui-outline-control-move-up": "Item nao bove verplaetse", + "ooui-outline-control-remove": "Item ewegsjaffe", + "ooui-toolbar-more": "Mieë", + "ooui-toolgroup-expand": "Mieë", + "ooui-toolgroup-collapse": "Minder", + "ooui-dialog-message-accept": "Ok", + "ooui-dialog-message-reject": "Aafbraeke", + "ooui-dialog-process-error": "Dao is get misgegange", + "ooui-dialog-process-dismiss": "Sjlete", + "ooui-dialog-process-retry": "Perbeer obbenuujts", + "ooui-dialog-process-continue": "Doorgaon", + "ooui-selectfile-not-supported": "Selektie van 'n besjtandj waert neet óngersteund", + "ooui-selectfile-placeholder": "Dao is gein besjtandj geselekteerd" +} diff --git a/resources/lib/oojs-ui/i18n/lt.json b/resources/lib/oojs-ui/i18n/lt.json index ecd06a8a..fbd22d0f 100644 --- a/resources/lib/oojs-ui/i18n/lt.json +++ b/resources/lib/oojs-ui/i18n/lt.json @@ -3,8 +3,24 @@ "authors": [ "Audriusa", "Eitvys200", - "Mantak111" + "Mantak111", + "Albertas" ] }, - "ooui-outline-control-remove": "Å alinti elementus" + "ooui-outline-control-move-down": "Perkelti elementÄ… žemyn", + "ooui-outline-control-move-up": "Perkelti elementÄ… aukÅ¡tyn", + "ooui-outline-control-remove": "Å alinti elementus", + "ooui-toolbar-more": "Daugiau", + "ooui-toolgroup-expand": "Daugiau", + "ooui-toolgroup-collapse": "Mažiau", + "ooui-dialog-message-accept": "Gerai", + "ooui-dialog-message-reject": "AtÅ¡aukti", + "ooui-dialog-process-error": "Kažkas nutiko ne taip", + "ooui-dialog-process-dismiss": "PaslÄ—pti", + "ooui-dialog-process-retry": "Bandykite dar kartÄ…", + "ooui-dialog-process-continue": "TÄ™sti", + "ooui-selectfile-button-select": "Pasirinkti failÄ…", + "ooui-selectfile-not-supported": "Failų pasirinkimas nepalaikomas", + "ooui-selectfile-placeholder": "NÄ—ra pasirinktų failų", + "ooui-selectfile-dragdrop-placeholder": "Atitempkite failÄ… Äia" } diff --git a/resources/lib/oojs-ui/i18n/luz.json b/resources/lib/oojs-ui/i18n/luz.json new file mode 100644 index 00000000..d48a9dfa --- /dev/null +++ b/resources/lib/oojs-ui/i18n/luz.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "علی ساکی لرستانی" + ] + }, + "ooui-outline-control-move-down": "انتقال مورد وه دومن", + "ooui-outline-control-move-up": "انتقال مورد وه بالا", + "ooui-outline-control-remove": "حذ٠مورد", + "ooui-toolbar-more": "هنی", + "ooui-toolgroup-expand": "هنی", + "ooui-toolgroup-collapse": "Ú©Ù… تر", + "ooui-dialog-message-accept": "خووه", + "ooui-dialog-message-reject": "لغو", + "ooui-dialog-process-error": "یه چیایی اشتباه ویده", + "ooui-dialog-process-dismiss": "منÙصل کردن", + "ooui-dialog-process-retry": "دوباره تلاش کردن", + "ooui-dialog-process-continue": "ادامه دائن", + "ooui-selectfile-not-supported": "Ùایل انتخابی پشتیبانی نوابیه", + "ooui-selectfile-placeholder": "Ùایلی انتخاب نوابیه" +} diff --git a/resources/lib/oojs-ui/i18n/mk.json b/resources/lib/oojs-ui/i18n/mk.json index 7962336c..46f37fe8 100644 --- a/resources/lib/oojs-ui/i18n/mk.json +++ b/resources/lib/oojs-ui/i18n/mk.json @@ -17,5 +17,9 @@ "ooui-dialog-process-error": "Ðешто не е во ред", "ooui-dialog-process-dismiss": "Тргни", "ooui-dialog-process-retry": "Обиди Ñе пак", - "ooui-dialog-process-continue": "Продолжи" + "ooui-dialog-process-continue": "Продолжи", + "ooui-selectfile-button-select": "Одберете податотека", + "ooui-selectfile-not-supported": "Изборот на податотеки не е поддржан", + "ooui-selectfile-placeholder": "Ðемате одбрано податотека", + "ooui-selectfile-dragdrop-placeholder": "Тука пуштете ја податотеката" } diff --git a/resources/lib/oojs-ui/i18n/ml.json b/resources/lib/oojs-ui/i18n/ml.json index 0ce0c3fd..9649b2eb 100644 --- a/resources/lib/oojs-ui/i18n/ml.json +++ b/resources/lib/oojs-ui/i18n/ml.json @@ -4,10 +4,24 @@ "Kavya Manohar", "Praveenp", "Santhosh.thottingal", - "Vssun" + "Vssun", + "Ranjithsiji" ] }, "ooui-outline-control-move-down": "ഇനം താഴേയàµà´•àµà´•àµ മാറàµà´±àµà´•", "ooui-outline-control-move-up": "ഇനം à´®àµà´•à´³à´¿à´²àµ‡à´¯àµà´•àµà´•àµ മാറàµà´±àµà´•", - "ooui-toolbar-more": "കൂടàµà´¤àµ½" + "ooui-outline-control-remove": "ഇനം നീകàµà´•à´‚ചെയàµà´¯àµà´•", + "ooui-toolbar-more": "കൂടàµà´¤àµ½", + "ooui-toolgroup-expand": "കൂടàµà´¤àµ½", + "ooui-toolgroup-collapse": "à´•àµà´±à´šàµà´šàµ", + "ooui-dialog-message-accept": "ശരി", + "ooui-dialog-message-reject": "റദàµà´¦à´¾à´•àµà´•àµà´•", + "ooui-dialog-process-error": "à´Žà´¨àµà´¤àµ‹ à´ªàµà´°à´¶àµà´¨à´®àµà´£àµà´Ÿà´¾à´¯à´¿", + "ooui-dialog-process-dismiss": "ഒഴിവാകàµà´•àµà´•", + "ooui-dialog-process-retry": "വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•", + "ooui-dialog-process-continue": "à´¤àµà´Ÿà´°àµà´•", + "ooui-selectfile-button-select": "à´ªàµà´°à´®à´¾à´£à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•", + "ooui-selectfile-not-supported": "à´ªàµà´°à´®à´¾à´£à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµ½ പിനàµà´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²", + "ooui-selectfile-placeholder": "à´ªàµà´°à´®à´¾à´£à´™àµà´™àµ¾ à´’à´¨àµà´¨àµà´‚ തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²", + "ooui-selectfile-dragdrop-placeholder": "à´ªàµà´°à´®à´¾à´£à´‚ ഇവിടെ ഇടàµà´•" } diff --git a/resources/lib/oojs-ui/i18n/mr.json b/resources/lib/oojs-ui/i18n/mr.json index 70061907..15a5de39 100644 --- a/resources/lib/oojs-ui/i18n/mr.json +++ b/resources/lib/oojs-ui/i18n/mr.json @@ -6,10 +6,17 @@ "Praju23", "V.narsikar", "Ydyashad", - "संतोष दहिवळ" + "संतोष दहिवळ", + "NehalDaveND", + "Sau6402" ] }, "ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा", "ooui-outline-control-move-up": "घटक (आयटम) वर सरकवा", - "ooui-toolbar-more": "अधिक" + "ooui-toolbar-more": "अधिक", + "ooui-toolgroup-expand": "अधिक", + "ooui-dialog-message-accept": "ठिक आहे", + "ooui-dialog-message-reject": "रदà¥à¤¦ करा", + "ooui-dialog-process-dismiss": "रदà¥à¤¦ करा", + "ooui-dialog-process-continue": "चालू ठेवा" } diff --git a/resources/lib/oojs-ui/i18n/ms.json b/resources/lib/oojs-ui/i18n/ms.json index 823d4936..19ce1c2f 100644 --- a/resources/lib/oojs-ui/i18n/ms.json +++ b/resources/lib/oojs-ui/i18n/ms.json @@ -3,15 +3,22 @@ "authors": [ "Anakmalaysia", "Aurora", - "Pizza1016" + "Pizza1016", + "Karmadunya9-" ] }, "ooui-outline-control-move-down": "Alihkan perkara ke bawah", "ooui-outline-control-move-up": "Alihkan perkara ke atas", "ooui-outline-control-remove": "Buang perkara", "ooui-toolbar-more": "Selebihnya", + "ooui-toolgroup-expand": "Selengkapnya", + "ooui-toolgroup-collapse": "Secukupnya", + "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "Batal", "ooui-dialog-process-error": "Ada masalah", "ooui-dialog-process-dismiss": "Singkir", - "ooui-dialog-process-retry": "Cuba lagi" + "ooui-dialog-process-retry": "Cuba lagi", + "ooui-dialog-process-continue": "Teruskan", + "ooui-selectfile-not-supported": "Pilihan fail tidak disokong", + "ooui-selectfile-placeholder": "Tiada fail yang dipilih" } diff --git a/resources/lib/oojs-ui/i18n/nap.json b/resources/lib/oojs-ui/i18n/nap.json index 91660373..b7e37b49 100644 --- a/resources/lib/oojs-ui/i18n/nap.json +++ b/resources/lib/oojs-ui/i18n/nap.json @@ -3,8 +3,25 @@ "authors": [ "Chelin", "Chrisportelli", - "PiRSquared17" + "PiRSquared17", + "C.R.", + "Candalua" ] }, - "ooui-toolbar-more": "Atro" + "ooui-outline-control-move-down": "Mòve abbascio", + "ooui-outline-control-move-up": "Mòve ncoppa", + "ooui-outline-control-remove": "Leva elemento", + "ooui-toolbar-more": "Atro", + "ooui-toolgroup-expand": "Cchiù", + "ooui-toolgroup-collapse": "Meno", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Scancella", + "ooui-dialog-process-error": "Cocchosa è ghiuta malamente", + "ooui-dialog-process-dismiss": "Passa 'a vacca", + "ooui-dialog-process-retry": "Prova n'ata vota", + "ooui-dialog-process-continue": "Continua", + "ooui-selectfile-button-select": "Sceglie nu file", + "ooui-selectfile-not-supported": "Filtro 'e selezione nun suppurtato", + "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file", + "ooui-selectfile-dragdrop-placeholder": "Lassa 'o file ccà" } diff --git a/resources/lib/oojs-ui/i18n/nb.json b/resources/lib/oojs-ui/i18n/nb.json index 9e773924..d3fad8dc 100644 --- a/resources/lib/oojs-ui/i18n/nb.json +++ b/resources/lib/oojs-ui/i18n/nb.json @@ -21,5 +21,9 @@ "ooui-dialog-process-error": "Noe gikk galt", "ooui-dialog-process-dismiss": "Lukk", "ooui-dialog-process-retry": "Prøv igjen", - "ooui-dialog-process-continue": "Fortsett" + "ooui-dialog-process-continue": "Fortsett", + "ooui-selectfile-button-select": "Velg en fil", + "ooui-selectfile-not-supported": "Filvalg er ikke støttet", + "ooui-selectfile-placeholder": "Ingen fil er valgt", + "ooui-selectfile-dragdrop-placeholder": "Slipp fil her" } diff --git a/resources/lib/oojs-ui/i18n/nl.json b/resources/lib/oojs-ui/i18n/nl.json index 7c7b1767..515eadab 100644 --- a/resources/lib/oojs-ui/i18n/nl.json +++ b/resources/lib/oojs-ui/i18n/nl.json @@ -31,5 +31,7 @@ "ooui-dialog-process-error": "Er is iets misgegaan", "ooui-dialog-process-dismiss": "Sluiten", "ooui-dialog-process-retry": "Opnieuw proberen", - "ooui-dialog-process-continue": "Doorgaan" + "ooui-dialog-process-continue": "Doorgaan", + "ooui-selectfile-not-supported": "Selectie van een bestand wordt niet ondersteund", + "ooui-selectfile-placeholder": "Er is geen bestand geselecteerd" } diff --git a/resources/lib/oojs-ui/i18n/oc.json b/resources/lib/oojs-ui/i18n/oc.json index 4d35b6c9..bccd615f 100644 --- a/resources/lib/oojs-ui/i18n/oc.json +++ b/resources/lib/oojs-ui/i18n/oc.json @@ -9,5 +9,12 @@ "ooui-outline-control-move-up": "Far montar l’element", "ooui-outline-control-remove": "Suprimir l’element", "ooui-toolbar-more": "Mai", - "ooui-dialog-message-reject": "Anullar" + "ooui-toolgroup-expand": "Mai", + "ooui-toolgroup-collapse": "Mens", + "ooui-dialog-message-accept": "D'acòrdi", + "ooui-dialog-message-reject": "Anullar", + "ooui-dialog-process-dismiss": "Regetar", + "ooui-dialog-process-retry": "Ensajatz tornamai", + "ooui-dialog-process-continue": "Contunhar", + "ooui-selectfile-placeholder": "Cap de fichièr pas seleccionat" } diff --git a/resources/lib/oojs-ui/i18n/olo.json b/resources/lib/oojs-ui/i18n/olo.json new file mode 100644 index 00000000..1dc994eb --- /dev/null +++ b/resources/lib/oojs-ui/i18n/olo.json @@ -0,0 +1,23 @@ +{ + "@metadata": { + "authors": [ + "Mashoi7" + ] + }, + "ooui-outline-control-move-down": "Siirrä kohteh alah", + "ooui-outline-control-move-up": "Siirrä kohteh yläh", + "ooui-outline-control-remove": "Ota kohteh iäre", + "ooui-toolbar-more": "Enämbi", + "ooui-toolgroup-expand": "Enämbi", + "ooui-toolgroup-collapse": "Vähembi", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Hylgiä", + "ooui-dialog-process-error": "Mitah haireh rodih", + "ooui-dialog-process-dismiss": "Hylgiä", + "ooui-dialog-process-retry": "Opi vie", + "ooui-dialog-process-continue": "Jatka", + "ooui-selectfile-button-select": "ValliÄe failu", + "ooui-selectfile-not-supported": "Failan valliÄendua ei tuveta", + "ooui-selectfile-placeholder": "Failua ei ole vallittu", + "ooui-selectfile-dragdrop-placeholder": "Kirvota failu täh" +} diff --git a/resources/lib/oojs-ui/i18n/om.json b/resources/lib/oojs-ui/i18n/om.json index ecf95971..a61083b3 100644 --- a/resources/lib/oojs-ui/i18n/om.json +++ b/resources/lib/oojs-ui/i18n/om.json @@ -16,5 +16,7 @@ "ooui-dialog-process-error": "Dogoggorri wayii ummameera", "ooui-dialog-process-dismiss": "Didi", "ooui-dialog-process-retry": "Itti deebi'ii yaali", - "ooui-dialog-process-continue": "Itti fufi" + "ooui-dialog-process-continue": "Itti fufi", + "ooui-selectfile-not-supported": "Faayilii filachuun hin danda'amu.", + "ooui-selectfile-placeholder": "Faayiliin wayiiyyuu hin filatamne" } diff --git a/resources/lib/oojs-ui/i18n/or.json b/resources/lib/oojs-ui/i18n/or.json index dde49bf1..7d96dcb7 100644 --- a/resources/lib/oojs-ui/i18n/or.json +++ b/resources/lib/oojs-ui/i18n/or.json @@ -3,7 +3,8 @@ "authors": [ "Odisha1", "Psubhashish", - "ଶିତିକଣà­à¬  ଦାଶ" + "ଶିତିକଣà­à¬  ଦାଶ", + "Jnanaranjan Sahu" ] }, "ooui-outline-control-move-down": "ବସà­à¬¤à­à¬Ÿà¬¿à¬•à­ ତଳକୠଘà­à¬žà­à¬šà¬¾à¬¨à­à¬¤à­", @@ -17,5 +18,7 @@ "ooui-dialog-process-error": "ଅସà­à¬¬à¬¿à¬§à¬¾à¬Ÿà¬¿à¬ ଘଟିଲା", "ooui-dialog-process-dismiss": "ଖାରଜ", "ooui-dialog-process-retry": "ଆଉ ଥରେ ଚେଷà­à¬Ÿà¬¾ କରନà­à¬¤à­", - "ooui-dialog-process-continue": "ଚାଲà­à¬°à¬–ିବେ" + "ooui-dialog-process-continue": "ଚାଲà­à¬°à¬–ିବେ", + "ooui-selectfile-not-supported": "ଫାଇଲ ବାଛିବା ସà­à¬¬à¬¿à¬§à¬¾ ନାହିà¬", + "ooui-selectfile-placeholder": "କୌଣସି ଫାଇଲ ବଛାଯାଇନାହିà¬" } diff --git a/resources/lib/oojs-ui/i18n/pa.json b/resources/lib/oojs-ui/i18n/pa.json index 8c7a1e7c..a69d76f9 100644 --- a/resources/lib/oojs-ui/i18n/pa.json +++ b/resources/lib/oojs-ui/i18n/pa.json @@ -10,13 +10,18 @@ }, "ooui-outline-control-move-down": "ਨੀਚੇ ਲੈਕੇ ਜਾਓ", "ooui-outline-control-move-up": "ਉੱਤੇ ਲੈਕੇ ਜਾਓ", + "ooui-outline-control-remove": "ਆਈਟਮ ਹਟਾਓ", "ooui-toolbar-more": "ਹੋਰ", "ooui-toolgroup-expand": "ਹੋਰ", - "ooui-toolgroup-collapse": "ਥੋੜੇ", + "ooui-toolgroup-collapse": "ਥੋੜà©à¨¹à©‡", "ooui-dialog-message-accept": "ਠੀਕ ਹੈ", "ooui-dialog-message-reject": "ਰੱਦ ਕਰੋ", "ooui-dialog-process-error": "ਕà©à¨ ਗਲਤ ਹੋ ਗਿਆ", "ooui-dialog-process-dismiss": "ਰੱਦ ਕਰੋ", "ooui-dialog-process-retry": "ਦà©à¨¬à¨¾à¨°à¨¾ ਕੋਸ਼ਿਸ਼ ਕਰੋ", - "ooui-dialog-process-continue": "ਜਾਰੀ ਰੱਖੋ" + "ooui-dialog-process-continue": "ਜਾਰੀ ਰੱਖੋ", + "ooui-selectfile-button-select": "ਫ਼ਾਈਲ ਚà©à¨£à©‹", + "ooui-selectfile-not-supported": "ਚà©à¨£à©€ ਗਈ ਫ਼ਾਈਲ ਖੋਲੀ ਨਹੀਂ ਜਾ ਸਕਦੀ", + "ooui-selectfile-placeholder": "ਕੋਈ ਫ਼ਾਈਲ ਚà©à¨£à©€ ਨਹੀਂ ਗਈ", + "ooui-selectfile-dragdrop-placeholder": "ਫ਼ਾਈਲ ਇੱਥੇ ਸਿੱਟੋ" } diff --git a/resources/lib/oojs-ui/i18n/pl.json b/resources/lib/oojs-ui/i18n/pl.json index fbd0c8cc..9ceb96fd 100644 --- a/resources/lib/oojs-ui/i18n/pl.json +++ b/resources/lib/oojs-ui/i18n/pl.json @@ -16,7 +16,8 @@ "Jacenty359", "Matik7", "Gloria sah", - "Andrzej aa" + "Andrzej aa", + "The Polish" ] }, "ooui-outline-control-move-down": "PrzenieÅ› niżej", @@ -28,7 +29,11 @@ "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "Anuluj", "ooui-dialog-process-error": "CoÅ› poszÅ‚o nie tak", - "ooui-dialog-process-dismiss": "Ukryj", + "ooui-dialog-process-dismiss": "Powrót", "ooui-dialog-process-retry": "Spróbuj ponownie", - "ooui-dialog-process-continue": "Kontynuuj" + "ooui-dialog-process-continue": "Kontynuuj", + "ooui-selectfile-button-select": "Wybierz plik", + "ooui-selectfile-not-supported": "Wybór pliku nie jest obsÅ‚ugiwany", + "ooui-selectfile-placeholder": "Nie wybrano pliku", + "ooui-selectfile-dragdrop-placeholder": "Umieść plik tutaj" } diff --git a/resources/lib/oojs-ui/i18n/pms.json b/resources/lib/oojs-ui/i18n/pms.json index b8fd3a58..c8b5bc7e 100644 --- a/resources/lib/oojs-ui/i18n/pms.json +++ b/resources/lib/oojs-ui/i18n/pms.json @@ -8,5 +8,16 @@ }, "ooui-outline-control-move-down": "Fé calé giù l'element", "ooui-outline-control-move-up": "Fé monté l'element", - "ooui-toolbar-more": "Ëd pi" + "ooui-outline-control-remove": "Gavé j'element", + "ooui-toolbar-more": "Ëd pi", + "ooui-toolgroup-expand": "Pi", + "ooui-toolgroup-collapse": "Men", + "ooui-dialog-message-accept": "Va bin", + "ooui-dialog-message-reject": "Scancelé", + "ooui-dialog-process-error": "Quaicòs a l'é andà mal", + "ooui-dialog-process-dismiss": "Stërmé", + "ooui-dialog-process-retry": "Preuva torna", + "ooui-dialog-process-continue": "Continua", + "ooui-selectfile-not-supported": "La selession d'archivi a l'é nen mantnùa", + "ooui-selectfile-placeholder": "Gnun archivi selessionà" } diff --git a/resources/lib/oojs-ui/i18n/ps.json b/resources/lib/oojs-ui/i18n/ps.json index ebffe539..228291ac 100644 --- a/resources/lib/oojs-ui/i18n/ps.json +++ b/resources/lib/oojs-ui/i18n/ps.json @@ -14,5 +14,9 @@ "ooui-dialog-message-reject": "ناگارل", "ooui-dialog-process-error": "يوه ستونزه Ø±Ø§Ù…Ù†Ú ØªÙ‡ شوه", "ooui-dialog-process-dismiss": "تړل", - "ooui-dialog-process-retry": "بيا Ù‡Ú…Ù‡" + "ooui-dialog-process-retry": "بيا Ù‡Ú…Ù‡", + "ooui-dialog-process-continue": "پرله پورÛ", + "ooui-selectfile-button-select": "يوه دوتنه وټاکئ", + "ooui-selectfile-not-supported": "د Ø¯ÙˆØªÙ†Û Ø¯ Ù¼Ø§Ú©Ù†Û Ù…Ù„Ø§ØªÚ“ نه دی شوی", + "ooui-selectfile-placeholder": "کومه دوتنه نه ده ټاکل شوÛ" } diff --git a/resources/lib/oojs-ui/i18n/pt-br.json b/resources/lib/oojs-ui/i18n/pt-br.json index 94ea0895..bcc31e09 100644 --- a/resources/lib/oojs-ui/i18n/pt-br.json +++ b/resources/lib/oojs-ui/i18n/pt-br.json @@ -9,10 +9,23 @@ "Jaideraf", "Luckas", "OTAVIO1981", - 555 + 555, + "TheEduGobi", + "TheGabrielZaum" ] }, "ooui-outline-control-move-down": "Mover item para baixo", "ooui-outline-control-move-up": "Mover item para cima", - "ooui-toolbar-more": "Mais" + "ooui-outline-control-remove": "Remover item", + "ooui-toolbar-more": "Mais", + "ooui-toolgroup-expand": "Mais", + "ooui-toolgroup-collapse": "Menos", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Cancelar", + "ooui-dialog-process-error": "Algo deu errado", + "ooui-dialog-process-dismiss": "Dispensar", + "ooui-dialog-process-retry": "Tentar novamente", + "ooui-dialog-process-continue": "Continuar", + "ooui-selectfile-not-supported": "O selecionamento de arquivos não é suportado", + "ooui-selectfile-placeholder": "Nenhum arquivo selecionado" } diff --git a/resources/lib/oojs-ui/i18n/pt.json b/resources/lib/oojs-ui/i18n/pt.json index 7b3176fb..8d9071a7 100644 --- a/resources/lib/oojs-ui/i18n/pt.json +++ b/resources/lib/oojs-ui/i18n/pt.json @@ -10,7 +10,8 @@ "Jdforrester", "Luckas", "Vitorvicentevalente", - "SandroHc" + "SandroHc", + "Jkb8" ] }, "ooui-outline-control-move-down": "Mover item para baixo", @@ -24,5 +25,8 @@ "ooui-dialog-process-error": "Algo correu mal", "ooui-dialog-process-dismiss": "Ignorar", "ooui-dialog-process-retry": "Tentar novamente", - "ooui-dialog-process-continue": "Continuar" + "ooui-dialog-process-continue": "Continuar", + "ooui-selectfile-not-supported": "A seleção de ficheiros não é suportada", + "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado", + "ooui-selectfile-dragdrop-placeholder": "Soltar ficheiro aqui" } diff --git a/resources/lib/oojs-ui/i18n/qqq.json b/resources/lib/oojs-ui/i18n/qqq.json index c1b794ab..1a096efc 100644 --- a/resources/lib/oojs-ui/i18n/qqq.json +++ b/resources/lib/oojs-ui/i18n/qqq.json @@ -31,5 +31,9 @@ "ooui-dialog-process-error": "Title for process dialog error description", "ooui-dialog-process-dismiss": "Label for process dialog dismiss error button, visible when describing errors\n{{Identical|Dismiss}}", "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}", - "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}" + "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}", + "ooui-selectfile-button-select": "Label for the file selection widget's select file button", + "ooui-selectfile-not-supported": "Label for the file selection widget if file selection is not supported", + "ooui-selectfile-placeholder": "Label for the file selection widget when no file is currently selected", + "ooui-selectfile-dragdrop-placeholder": "Label for the file selection widget's drop target" } diff --git a/resources/lib/oojs-ui/i18n/ro.json b/resources/lib/oojs-ui/i18n/ro.json index 258f3e74..69daa180 100644 --- a/resources/lib/oojs-ui/i18n/ro.json +++ b/resources/lib/oojs-ui/i18n/ro.json @@ -19,5 +19,9 @@ "ooui-dialog-process-error": "Ceva nu a funcÈ›ionat", "ooui-dialog-process-dismiss": "RenunÈ›are", "ooui-dialog-process-retry": "Reîncearcă", - "ooui-dialog-process-continue": "Continuă" + "ooui-dialog-process-continue": "Continuă", + "ooui-selectfile-button-select": "Alege un fiÈ™ier", + "ooui-selectfile-not-supported": "SelecÈ›ia de fiÈ™iere nu este acceptată", + "ooui-selectfile-placeholder": "Niciun fiÈ™ier selectat", + "ooui-selectfile-dragdrop-placeholder": "TrageÈ›i fiÈ™ierul aici" } diff --git a/resources/lib/oojs-ui/i18n/roa-tara.json b/resources/lib/oojs-ui/i18n/roa-tara.json index f6f422a2..73a5a6c1 100644 --- a/resources/lib/oojs-ui/i18n/roa-tara.json +++ b/resources/lib/oojs-ui/i18n/roa-tara.json @@ -15,5 +15,9 @@ "ooui-dialog-process-error": "Quacche cose ha sciute stuèrte", "ooui-dialog-process-dismiss": "Scitte", "ooui-dialog-process-retry": "Pruève arrete", - "ooui-dialog-process-continue": "Condinue" + "ooui-dialog-process-continue": "Condinue", + "ooui-selectfile-button-select": "Scacchie 'nu file", + "ooui-selectfile-not-supported": "'U scacchiamende d'u file non g'è supportate", + "ooui-selectfile-placeholder": "Nisciune file scacchiate", + "ooui-selectfile-dragdrop-placeholder": "Scitte 'u file aqquà" } diff --git a/resources/lib/oojs-ui/i18n/ru.json b/resources/lib/oojs-ui/i18n/ru.json index 129dd6a2..6c62d360 100644 --- a/resources/lib/oojs-ui/i18n/ru.json +++ b/resources/lib/oojs-ui/i18n/ru.json @@ -16,7 +16,8 @@ "Sunpriat", "Yury Katkov", "Умар", - "КамалиÑÑ‚" + "КамалиÑÑ‚", + "Meshkov.a" ] }, "ooui-outline-control-move-down": "ПеремеÑтить Ñлемент вниз", @@ -30,5 +31,9 @@ "ooui-dialog-process-error": "Что-то пошло не так", "ooui-dialog-process-dismiss": "Закрыть", "ooui-dialog-process-retry": "Попробовать ещё раз", - "ooui-dialog-process-continue": "Продолжить" + "ooui-dialog-process-continue": "Продолжить", + "ooui-selectfile-button-select": "Выберите файл", + "ooui-selectfile-not-supported": "Выбор файла не поддерживаетÑÑ", + "ooui-selectfile-placeholder": "Ðе выбран файл", + "ooui-selectfile-dragdrop-placeholder": "Перетащите файл Ñюда" } diff --git a/resources/lib/oojs-ui/i18n/sa.json b/resources/lib/oojs-ui/i18n/sa.json new file mode 100644 index 00000000..49f038c7 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/sa.json @@ -0,0 +1,14 @@ +{ + "@metadata": { + "authors": [ + "NehalDaveND" + ] + }, + "ooui-outline-control-remove": "वसà¥à¤¤à¥ निषà¥à¤•à¤¾à¤¸à¥à¤¯à¤¤à¤¾à¤®à¥", + "ooui-toolbar-more": "अधिकमà¥", + "ooui-toolgroup-expand": "अधिकमà¥", + "ooui-dialog-message-accept": "असà¥à¤¤à¥", + "ooui-dialog-message-reject": "निरसà¥à¤¯à¤¤à¤¾à¤®à¥", + "ooui-dialog-process-retry": "पà¥à¤¨à¤ƒ चेषà¥à¤Ÿà¥à¤¯à¤¤à¤¾à¤®à¥", + "ooui-dialog-process-continue": "निरनà¥à¤¤à¤°à¤®à¥" +} diff --git a/resources/lib/oojs-ui/i18n/sah.json b/resources/lib/oojs-ui/i18n/sah.json index 85a94cd5..1e1b05d1 100644 --- a/resources/lib/oojs-ui/i18n/sah.json +++ b/resources/lib/oojs-ui/i18n/sah.json @@ -4,5 +4,19 @@ "Gazeb", "HalanTul" ] - } + }, + "ooui-outline-control-move-down": "Ðллара Ñ‚Ò¯Ò»ÑÑ€Ñн биÑÑ€", + "ooui-outline-control-move-up": "Ò®Ó©Ò»Ñ Ñ‚Ð°Ò»Ð°Ð°Ñ€Ð°Ð½ биÑÑ€", + "ooui-outline-control-remove": "Сот", + "ooui-toolbar-more": "Эбии", + "ooui-toolgroup-expand": "Эбии", + "ooui-toolgroup-collapse": "Кыччат", + "ooui-dialog-message-accept": "Сөп", + "ooui-dialog-message-reject": "Салҕаама", + "ooui-dialog-process-error": "Туга ÑÑ€Ñ Ñатаммата", + "ooui-dialog-process-dismiss": "Сап", + "ooui-dialog-process-retry": "Хатылаан көр", + "ooui-dialog-process-continue": "Салгыы", + "ooui-selectfile-not-supported": "БилÑни талыы өйөммөт", + "ooui-selectfile-placeholder": "Биир да Ð±Ð¸Ð»Ñ Ñ‚Ð°Ð»Ñ‹Ð»Ð»Ñ‹Ð±Ð°Ñ‚Ð°Ñ…" } diff --git a/resources/lib/oojs-ui/i18n/sco.json b/resources/lib/oojs-ui/i18n/sco.json index 0a26a5c8..794d71f7 100644 --- a/resources/lib/oojs-ui/i18n/sco.json +++ b/resources/lib/oojs-ui/i18n/sco.json @@ -1,11 +1,22 @@ { "@metadata": { "authors": [ - "John Reid" + "John Reid", + "Foxj" ] }, "ooui-outline-control-move-down": "Muiv eetem doon", "ooui-outline-control-move-up": "Muiv eetem up", "ooui-outline-control-remove": "Remuiv eetem", - "ooui-toolbar-more": "Mair" + "ooui-toolbar-more": "Mair", + "ooui-toolgroup-expand": "Mair", + "ooui-toolgroup-collapse": "Less", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Cancel", + "ooui-dialog-process-error": "Sommit went wrang", + "ooui-dialog-process-dismiss": "Close", + "ooui-dialog-process-retry": "Hae aniter gae", + "ooui-dialog-process-continue": "Conteena", + "ooui-selectfile-not-supported": "Cannae pick ony files", + "ooui-selectfile-placeholder": "Nae file selectit" } diff --git a/resources/lib/oojs-ui/i18n/sh.json b/resources/lib/oojs-ui/i18n/sh.json index b40fa04e..db6fa3c4 100644 --- a/resources/lib/oojs-ui/i18n/sh.json +++ b/resources/lib/oojs-ui/i18n/sh.json @@ -5,5 +5,17 @@ ] }, "ooui-outline-control-move-down": "Pomakni stavku dolje", - "ooui-outline-control-move-up": "Pomakni stavku gore" + "ooui-outline-control-move-up": "Premjesti stavku gore", + "ooui-outline-control-remove": "Ukloni stavku", + "ooui-toolbar-more": "ViÅ¡e", + "ooui-toolgroup-expand": "ViÅ¡e", + "ooui-toolgroup-collapse": "Manje", + "ooui-dialog-message-accept": "U redu", + "ooui-dialog-message-reject": "Otkaži", + "ooui-dialog-process-error": "NeÅ¡to je poÅ¡lo naopako", + "ooui-dialog-process-dismiss": "Odbaci", + "ooui-dialog-process-retry": "PokuÅ¡ajte ponovo", + "ooui-dialog-process-continue": "Nastavi", + "ooui-selectfile-not-supported": "Izbor datoteke nije podržan", + "ooui-selectfile-placeholder": "Nijedna datoteka nije odabrana" } diff --git a/resources/lib/oojs-ui/i18n/sk.json b/resources/lib/oojs-ui/i18n/sk.json index c8246da9..fa658889 100644 --- a/resources/lib/oojs-ui/i18n/sk.json +++ b/resources/lib/oojs-ui/i18n/sk.json @@ -2,11 +2,21 @@ "@metadata": { "authors": [ "Mimarik", - "Teslaton" + "Teslaton", + "Kusavica" ] }, "ooui-outline-control-move-down": "Posunúť položku nadol", "ooui-outline-control-move-up": "Posunúť položku nahor", "ooui-outline-control-remove": "OdstrániÅ¥ položku", - "ooui-toolbar-more": "Viac" + "ooui-toolbar-more": "Viac", + "ooui-toolgroup-expand": "Viac", + "ooui-toolgroup-collapse": "Menej", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "ZruÅ¡iÅ¥", + "ooui-dialog-process-error": "NieÄo sa pokazilo", + "ooui-dialog-process-dismiss": "ZruÅ¡iÅ¥", + "ooui-dialog-process-retry": "SkúsiÅ¥ znova", + "ooui-dialog-process-continue": "PokraÄovaÅ¥", + "ooui-selectfile-placeholder": "Nie je vybraný žiadny súbor" } diff --git a/resources/lib/oojs-ui/i18n/sl.json b/resources/lib/oojs-ui/i18n/sl.json index a40728ad..e113671c 100644 --- a/resources/lib/oojs-ui/i18n/sl.json +++ b/resources/lib/oojs-ui/i18n/sl.json @@ -18,5 +18,7 @@ "ooui-dialog-process-error": "Nekaj je Å¡lo narobe", "ooui-dialog-process-dismiss": "Skrij", "ooui-dialog-process-retry": "Poskusi znova", - "ooui-dialog-process-continue": "Nadaljuj" + "ooui-dialog-process-continue": "Nadaljuj", + "ooui-selectfile-not-supported": "Izbira datoteke ni podprta", + "ooui-selectfile-placeholder": "Nobena datoteka ni izbrana" } diff --git a/resources/lib/oojs-ui/i18n/sq.json b/resources/lib/oojs-ui/i18n/sq.json index ec180199..4bf5dac9 100644 --- a/resources/lib/oojs-ui/i18n/sq.json +++ b/resources/lib/oojs-ui/i18n/sq.json @@ -5,15 +5,22 @@ "Kushtrim", "Elioqoshi", "GretaDoci", - "Gertakapllani" + "Gertakapllani", + "Techlik" ] }, "ooui-outline-control-move-down": "Zhvendose artikullin më poshtë", "ooui-outline-control-move-up": "Zhvendose artikullin më lart", "ooui-outline-control-remove": "Hiq artikullin", "ooui-toolbar-more": "Më tepër...", + "ooui-toolgroup-expand": "Më tepër...", + "ooui-toolgroup-collapse": "Më pak", "ooui-dialog-message-accept": "Në rregull", "ooui-dialog-message-reject": "Anullo", "ooui-dialog-process-error": "Diçka shkoi keq", - "ooui-dialog-process-retry": "Provo përsëri" + "ooui-dialog-process-dismiss": "Largoje", + "ooui-dialog-process-retry": "Provo përsëri", + "ooui-dialog-process-continue": "Vazhdo", + "ooui-selectfile-not-supported": "Skedari i përzgjedhur nuk përkrahet", + "ooui-selectfile-placeholder": "Nuk është zgjedhur asnjë skedar" } diff --git a/resources/lib/oojs-ui/i18n/sr-ec.json b/resources/lib/oojs-ui/i18n/sr-ec.json index c827554e..de52812e 100644 --- a/resources/lib/oojs-ui/i18n/sr-ec.json +++ b/resources/lib/oojs-ui/i18n/sr-ec.json @@ -17,5 +17,7 @@ "ooui-dialog-process-error": "Ðешто је пошло наопако", "ooui-dialog-process-dismiss": "Одбаци", "ooui-dialog-process-retry": "Покушај поново", - "ooui-dialog-process-continue": "ÐаÑтави" + "ooui-dialog-process-continue": "ÐаÑтави", + "ooui-selectfile-button-select": "Изабери датотеку", + "ooui-selectfile-placeholder": "Ðије изабрана ниједна датотека" } diff --git a/resources/lib/oojs-ui/i18n/su.json b/resources/lib/oojs-ui/i18n/su.json new file mode 100644 index 00000000..a8cf762e --- /dev/null +++ b/resources/lib/oojs-ui/i18n/su.json @@ -0,0 +1,21 @@ +{ + "@metadata": { + "authors": [ + "Kandar" + ] + }, + "ooui-outline-control-move-down": "Pindahkeun ka handap", + "ooui-outline-control-move-up": "Pindahkeun ka luhur", + "ooui-outline-control-remove": "Hapus", + "ooui-toolbar-more": "Lobaan", + "ooui-toolgroup-expand": "Lobaan", + "ooui-toolgroup-collapse": "Saeutikan", + "ooui-dialog-message-accept": "Heug", + "ooui-dialog-message-reject": "Bolay", + "ooui-dialog-process-error": "Aya nu teu bener", + "ooui-dialog-process-dismiss": "Tutup", + "ooui-dialog-process-retry": "Cobaan deui", + "ooui-dialog-process-continue": "Teruskeun", + "ooui-selectfile-not-supported": "Pamilihan berkas teu dirojong", + "ooui-selectfile-placeholder": "Taya berkas anu dipilih" +} diff --git a/resources/lib/oojs-ui/i18n/sv.json b/resources/lib/oojs-ui/i18n/sv.json index d499427c..3ffbc489 100644 --- a/resources/lib/oojs-ui/i18n/sv.json +++ b/resources/lib/oojs-ui/i18n/sv.json @@ -11,7 +11,8 @@ "Sendelbach", "Skalman", "WikiPhoenix", - "Lokal Profil" + "Lokal Profil", + "Warrakkk" ] }, "ooui-outline-control-move-down": "Flytta ned objekt", @@ -25,5 +26,9 @@ "ooui-dialog-process-error": "NÃ¥got gick fel", "ooui-dialog-process-dismiss": "Stäng", "ooui-dialog-process-retry": "Försök igen", - "ooui-dialog-process-continue": "Fortsätt" + "ooui-dialog-process-continue": "Fortsätt", + "ooui-selectfile-button-select": "Välj en fil", + "ooui-selectfile-not-supported": "Filval stöds inte", + "ooui-selectfile-placeholder": "Ingen fil är vald", + "ooui-selectfile-dragdrop-placeholder": "Släpp filen här" } diff --git a/resources/lib/oojs-ui/i18n/ta.json b/resources/lib/oojs-ui/i18n/ta.json index 122d4a27..6e7b2494 100644 --- a/resources/lib/oojs-ui/i18n/ta.json +++ b/resources/lib/oojs-ui/i18n/ta.json @@ -5,9 +5,22 @@ "Sank", "Shanmugamp7", "மதனாஹரனà¯", - "ElangoRamanujam" + "ElangoRamanujam", + "Info-farmer" ] }, + "ooui-outline-control-move-down": "உரà¯à®ªà¯à®ªà®Ÿà®¿à®¯à¯ˆ கீழிடà¯", + "ooui-outline-control-move-up": "உரà¯à®ªà¯à®ªà®Ÿà®¿à®¯à¯ˆ மேலிடà¯", + "ooui-outline-control-remove": "உரà¯à®ªà¯à®ªà®Ÿà®¿à®¯à¯ˆ நீகà¯à®•à¯", + "ooui-toolbar-more": "மேலà¯à®®à¯", "ooui-toolgroup-expand": "மேலà¯à®®à¯", - "ooui-dialog-process-continue": "தொடரவà¯à®®à¯" + "ooui-toolgroup-collapse": "கà¯à®±à¯ˆà®µà®¾à®•", + "ooui-dialog-message-accept": "சரி", + "ooui-dialog-message-reject": "கைவிடà¯à®•", + "ooui-dialog-process-error": "à®à®¤à¯‹ தவறாகியà¯à®³à¯à®³à®¤à¯", + "ooui-dialog-process-dismiss": "அகறà¯à®±à¯", + "ooui-dialog-process-retry": "மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®²à¯à®•", + "ooui-dialog-process-continue": "தொடரவà¯à®®à¯", + "ooui-selectfile-not-supported": "கோபà¯à®ªà¯à®¤à¯à®¤à¯‡à®°à¯à®µà¯ ஆதரவாக இலà¯à®²à¯ˆ", + "ooui-selectfile-placeholder": "எகà¯à®•à¯‹à®ªà¯à®ªà¯à®®à¯ தெரிவாகவிலà¯à®²à¯ˆ" } diff --git a/resources/lib/oojs-ui/i18n/te.json b/resources/lib/oojs-ui/i18n/te.json index d4868706..957b0d0f 100644 --- a/resources/lib/oojs-ui/i18n/te.json +++ b/resources/lib/oojs-ui/i18n/te.json @@ -9,5 +9,14 @@ "Visdaviva", "மதனாஹரனà¯" ] - } + }, + "ooui-toolbar-more": "మరినà±à°¨à°¿", + "ooui-toolgroup-expand": "మరినà±à°¨à°¿", + "ooui-toolgroup-collapse": "కొనà±à°¨à°¿", + "ooui-dialog-message-accept": "సరే", + "ooui-dialog-message-reject": "à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿", + "ooui-dialog-process-error": "à°à°¦à±‹ పొరపాటౠజరిగింది", + "ooui-dialog-process-dismiss": "à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿", + "ooui-dialog-process-retry": "మళà±à°³à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±", + "ooui-dialog-process-continue": "కొనసాగించà±" } diff --git a/resources/lib/oojs-ui/i18n/tl.json b/resources/lib/oojs-ui/i18n/tl.json index b3a9f246..c0dbd5fd 100644 --- a/resources/lib/oojs-ui/i18n/tl.json +++ b/resources/lib/oojs-ui/i18n/tl.json @@ -2,13 +2,22 @@ "@metadata": { "authors": [ "AnakngAraw", - "Sky Harbor" + "Sky Harbor", + "Jewel457" ] }, "ooui-outline-control-move-down": "Ilipat ang aytem pababa", "ooui-outline-control-move-up": "Ilipat ang aytem pataas", "ooui-outline-control-remove": "Tanggalin ang aytem", "ooui-toolbar-more": "Marami pa", + "ooui-toolgroup-expand": "Maraming iba pa", + "ooui-toolgroup-collapse": "Kakaunti", "ooui-dialog-message-accept": "Sige", - "ooui-dialog-message-reject": "Huwag ituloy" + "ooui-dialog-message-reject": "Huwag ituloy", + "ooui-dialog-process-error": "May pagkakamali", + "ooui-dialog-process-dismiss": "Isa-isantabi", + "ooui-dialog-process-retry": "Subuking muli", + "ooui-dialog-process-continue": "Magpatuloy", + "ooui-selectfile-not-supported": "Ang pagpili ng file ay hindi kinakatigan", + "ooui-selectfile-placeholder": "Walang piniling file" } diff --git a/resources/lib/oojs-ui/i18n/uk.json b/resources/lib/oojs-ui/i18n/uk.json index 0197a4ce..a38afbfd 100644 --- a/resources/lib/oojs-ui/i18n/uk.json +++ b/resources/lib/oojs-ui/i18n/uk.json @@ -15,7 +15,9 @@ "Tel'et", "Tifinaghes", "Ðта", - "Piramidion" + "Piramidion", + "A1", + "Dars" ] }, "ooui-outline-control-move-down": "ПереміÑтити елемент униз", @@ -29,5 +31,9 @@ "ooui-dialog-process-error": "ЩоÑÑŒ пішло не так", "ooui-dialog-process-dismiss": "Приховати", "ooui-dialog-process-retry": "Спробуйте ще раз", - "ooui-dialog-process-continue": "Продовжити" + "ooui-dialog-process-continue": "Продовжити", + "ooui-selectfile-button-select": "Оберіть файл", + "ooui-selectfile-not-supported": "Вибір файлу не підтримуєтьÑÑ", + "ooui-selectfile-placeholder": "Жодного файлу не вибрано", + "ooui-selectfile-dragdrop-placeholder": "ПоміÑÑ‚Ñ–Ñ‚ÑŒ файл Ñюди" } diff --git a/resources/lib/oojs-ui/i18n/vec.json b/resources/lib/oojs-ui/i18n/vec.json index 4de584bf..ddd27c5e 100644 --- a/resources/lib/oojs-ui/i18n/vec.json +++ b/resources/lib/oojs-ui/i18n/vec.json @@ -9,5 +9,14 @@ "ooui-outline-control-move-down": "Sposta in baso", "ooui-outline-control-move-up": "Sposta in sima", "ooui-toolbar-more": "Altro", - "ooui-dialog-message-accept": "Va ben" + "ooui-toolgroup-expand": "Piassè", + "ooui-toolgroup-collapse": "Manco", + "ooui-dialog-message-accept": "Va ben", + "ooui-dialog-message-reject": "Fa gnente", + "ooui-dialog-process-error": "Xe 'ndà storto calcossa", + "ooui-dialog-process-dismiss": "Scondi", + "ooui-dialog-process-retry": "Proa da novo", + "ooui-dialog-process-continue": "Và vanti", + "ooui-selectfile-button-select": "Siegli un file", + "ooui-selectfile-dragdrop-placeholder": "Mola zo el file chì rento" } diff --git a/resources/lib/oojs-ui/i18n/vi.json b/resources/lib/oojs-ui/i18n/vi.json index d5c1e364..fd630814 100644 --- a/resources/lib/oojs-ui/i18n/vi.json +++ b/resources/lib/oojs-ui/i18n/vi.json @@ -4,19 +4,24 @@ "Cheers!", "Jdforrester", "Minh Nguyen", - "Max20091" + "Max20091", + "Anh88" ] }, "ooui-outline-control-move-down": "Chuyển mục xuống", "ooui-outline-control-move-up": "Chuyển mục lên", - "ooui-outline-control-remove": "Xóa khoản", + "ooui-outline-control-remove": "Xóa mục", "ooui-toolbar-more": "Thêm", "ooui-toolgroup-expand": "Mở rá»™ng", "ooui-toolgroup-collapse": "Rút gá»n", "ooui-dialog-message-accept": "OK", "ooui-dialog-message-reject": "Hủy bá»", - "ooui-dialog-process-error": "Äã bị trục trặc", + "ooui-dialog-process-error": "Có thứ gì đó bị lá»—i", "ooui-dialog-process-dismiss": "Bá» qua", "ooui-dialog-process-retry": "Thá»­ lại", - "ooui-dialog-process-continue": "Tiếp tục" + "ooui-dialog-process-continue": "Tiếp tục", + "ooui-selectfile-button-select": "Chá»n tập tin", + "ooui-selectfile-not-supported": "Không há»— trợ việc chá»n tập tin", + "ooui-selectfile-placeholder": "Không có tập tin nào được chá»n", + "ooui-selectfile-dragdrop-placeholder": "Thả tập tin vào đây" } diff --git a/resources/lib/oojs-ui/i18n/xmf.json b/resources/lib/oojs-ui/i18n/xmf.json new file mode 100644 index 00000000..f5bfa2c6 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/xmf.json @@ -0,0 +1,19 @@ +{ + "@metadata": { + "authors": [ + "David1010" + ] + }, + "ooui-outline-control-move-down": "ელემენტის ქვემáƒáƒ— გáƒáƒ“áƒáƒ¢áƒáƒœáƒ", + "ooui-outline-control-move-up": "ელემენტის ზემáƒáƒ— გáƒáƒ“áƒáƒ¢áƒáƒœáƒ", + "ooui-outline-control-remove": "ელემენტის წáƒáƒ¨áƒšáƒ", + "ooui-toolbar-more": "უმáƒáƒ¡áƒ˜", + "ooui-toolgroup-expand": "უმáƒáƒ¡áƒ˜", + "ooui-toolgroup-collapse": "რáƒáƒ›áƒ“ენიმე", + "ooui-dialog-message-accept": "ჯგირი", + "ooui-dialog-message-reject": "გáƒáƒ£áƒ¥áƒ•áƒáƒ¤áƒ", + "ooui-dialog-process-error": "მáƒáƒ®áƒ“რრáƒáƒ¦áƒáƒª შეცდáƒáƒ›áƒ", + "ooui-dialog-process-dismiss": "დáƒáƒ›áƒáƒšáƒ•áƒ", + "ooui-dialog-process-retry": "კიდევ სცáƒáƒ“ეთ", + "ooui-dialog-process-continue": "გáƒáƒ’რძელებáƒ" +} diff --git a/resources/lib/oojs-ui/i18n/yi.json b/resources/lib/oojs-ui/i18n/yi.json index a850fce2..f206a723 100644 --- a/resources/lib/oojs-ui/i18n/yi.json +++ b/resources/lib/oojs-ui/i18n/yi.json @@ -10,9 +10,14 @@ "ooui-outline-control-move-up": "רוקן עלעמענט ×רויף", "ooui-outline-control-remove": "×ַר×ָפנעמען ×יינס", "ooui-toolbar-more": "× ×ך", + "ooui-toolgroup-expand": "× ×ך", + "ooui-toolgroup-collapse": "ווייניגער", "ooui-dialog-message-accept": "×™×Ö¸", "ooui-dialog-message-reject": "×ַנולירן", "ooui-dialog-process-error": "עפעס ××™×– דורכגעפ×לן", "ooui-dialog-process-dismiss": "צומ×ַכן", - "ooui-dialog-process-retry": "פרובירט × ××›×מ×ל" + "ooui-dialog-process-retry": "פרובירט × ××›×מ×ל", + "ooui-dialog-process-continue": "פֿ×רזעצן", + "ooui-selectfile-not-supported": "טעקע ×ויסווייל נישט געשטיצט", + "ooui-selectfile-placeholder": "קיין טעקע נישט ×ויסגעוויילט" } diff --git a/resources/lib/oojs-ui/i18n/yue.json b/resources/lib/oojs-ui/i18n/yue.json index 81ad9a95..629528de 100644 --- a/resources/lib/oojs-ui/i18n/yue.json +++ b/resources/lib/oojs-ui/i18n/yue.json @@ -1,16 +1,26 @@ { "@metadata": { "authors": [ - "Deryck Chan" + "Deryck Chan", + "William915", + "Shinjiman", + "Ktchankt" ] }, "ooui-outline-control-move-down": "å‘下æ¬", "ooui-outline-control-move-up": "å‘上æ¬", "ooui-outline-control-remove": "æ‹Žèµ°", - "ooui-toolbar-more": "仲有...", + "ooui-toolbar-more": "仲有", + "ooui-toolgroup-expand": "更多", + "ooui-toolgroup-collapse": "少啲", "ooui-dialog-message-accept": "好", "ooui-dialog-message-reject": "å–消", "ooui-dialog-process-error": "å””å°è·¯", "ooui-dialog-process-dismiss": "é–‚å’—ä½¢", - "ooui-dialog-process-retry": "å†è©¦éŽ" + "ooui-dialog-process-retry": "å†è©¦éŽ", + "ooui-dialog-process-continue": "繼續", + "ooui-selectfile-button-select": "æ€æª”案", + "ooui-selectfile-not-supported": "未有文件é¸æ“‡åŠŸèƒ½", + "ooui-selectfile-placeholder": "ç„¡æ€åˆ°æ–‡ä»¶", + "ooui-selectfile-dragdrop-placeholder": "放檔案響度" } diff --git a/resources/lib/oojs-ui/i18n/zh-hans.json b/resources/lib/oojs-ui/i18n/zh-hans.json index ed2f61e4..9934d9d0 100644 --- a/resources/lib/oojs-ui/i18n/zh-hans.json +++ b/resources/lib/oojs-ui/i18n/zh-hans.json @@ -16,19 +16,24 @@ "Yfdyh000", "Zhangjintao", "乌拉跨氪", - "Great Brightstar" + "Great Brightstar", + "Nbdd0121" ] }, - "ooui-outline-control-move-down": "项目下移", - "ooui-outline-control-move-up": "项目上移", + "ooui-outline-control-move-down": "å‘下移动一项", + "ooui-outline-control-move-up": "å‘上移动一项", "ooui-outline-control-remove": "移除项目", "ooui-toolbar-more": "更多", "ooui-toolgroup-expand": "更多", "ooui-toolgroup-collapse": "æ›´å°‘", "ooui-dialog-message-accept": "确定", "ooui-dialog-message-reject": "å–消", - "ooui-dialog-process-error": "å‘生一些错误", - "ooui-dialog-process-dismiss": "解除", + "ooui-dialog-process-error": "å‘生了一些错误", + "ooui-dialog-process-dismiss": "关闭", "ooui-dialog-process-retry": "é‡è¯•", - "ooui-dialog-process-continue": "继续" + "ooui-dialog-process-continue": "继续", + "ooui-selectfile-button-select": "选择一个文件", + "ooui-selectfile-not-supported": "文件选择ä¸å—支æŒ", + "ooui-selectfile-placeholder": "没有选定文件", + "ooui-selectfile-dragdrop-placeholder": "将文件拖动至此" } diff --git a/resources/lib/oojs-ui/i18n/zh-hant.json b/resources/lib/oojs-ui/i18n/zh-hant.json index 3fd8d361..f70efe19 100644 --- a/resources/lib/oojs-ui/i18n/zh-hant.json +++ b/resources/lib/oojs-ui/i18n/zh-hant.json @@ -14,7 +14,8 @@ "Spring Roll Conan", "Waihorace", "Cwlin0416", - "LNDDYL" + "LNDDYL", + "Shangkuanlc" ] }, "ooui-outline-control-move-down": "項目下移", @@ -28,5 +29,9 @@ "ooui-dialog-process-error": "發生ä¸æ˜ŽéŒ¯èª¤", "ooui-dialog-process-dismiss": "關閉", "ooui-dialog-process-retry": "å†è©¦ä¸€æ¬¡", - "ooui-dialog-process-continue": "繼續" + "ooui-dialog-process-continue": "繼續", + "ooui-selectfile-button-select": "é¸æ“‡ä¸€å€‹æª”案", + "ooui-selectfile-not-supported": "無法支æ´æ‰€é¸æ“‡çš„檔案", + "ooui-selectfile-placeholder": "未é¸æ“‡æª”案", + "ooui-selectfile-dragdrop-placeholder": "拖曳檔案到此處" } diff --git a/resources/lib/oojs-ui/oojs-ui-apex-noimages.css b/resources/lib/oojs-ui/oojs-ui-apex-noimages.css new file mode 100644 index 00000000..50129348 --- /dev/null +++ b/resources/lib/oojs-ui/oojs-ui-apex-noimages.css @@ -0,0 +1,2956 @@ +/*! + * OOjs UI v0.12.12 + * https://www.mediawiki.org/wiki/OOjs_UI + * + * Copyright 2011–2015 OOjs UI Team and other contributors. + * Released under the MIT license + * http://oojs.mit-license.org + * + * Date: 2015-10-13T20:38:26Z + */ +@-webkit-keyframes oo-ui-progressBarWidget-slide { + from { + margin-left: -40%; + } + to { + margin-left: 100%; + } +} +@-moz-keyframes oo-ui-progressBarWidget-slide { + from { + margin-left: -40%; + } + to { + margin-left: 100%; + } +} +@-ms-keyframes oo-ui-progressBarWidget-slide { + from { + margin-left: -40%; + } + to { + margin-left: 100%; + } +} +@-o-keyframes oo-ui-progressBarWidget-slide { + from { + margin-left: -40%; + } + to { + margin-left: 100%; + } +} +@keyframes oo-ui-progressBarWidget-slide { + from { + margin-left: -40%; + } + to { + margin-left: 100%; + } +} +/* @noflip */ +.oo-ui-rtl { + direction: rtl; +} +/* @noflip */ +.oo-ui-ltr { + direction: ltr; +} +.oo-ui-element-hidden { + display: none !important; +} +.oo-ui-buttonElement > .oo-ui-buttonElement-button { + cursor: pointer; + display: inline-block; + vertical-align: middle; + font: inherit; + white-space: nowrap; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon, +.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { + display: none; +} +.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button { + cursor: default; +} +.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator, +.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + display: inline-block; + vertical-align: middle; +} +.oo-ui-buttonElement-frameless { + display: inline-block; + position: relative; +} +.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + display: inline-block; + vertical-align: middle; +} +.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { + display: inline-block; + vertical-align: top; + text-align: center; +} +.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + display: inline-block; + vertical-align: middle; +} +.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { + cursor: default; +} +.oo-ui-buttonElement > .oo-ui-buttonElement-button { + color: #333333; +} +.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + margin-left: 0; +} +.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { + width: 0.9375em; + height: 0.9375em; + margin: 0.46875em; +} +.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { + margin-left: 0.46875em; +} +.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + width: 1.875em; + height: 1.875em; +} +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */ + /*.oo-ui-transition(opacity @medium-ease);*/ +} +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus { + outline: none; +} +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon, +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon { + opacity: 1; +} +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label, +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label { + color: #000000; +} +.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + color: #333333; +} +.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + margin-left: 0.25em; +} +.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button { + padding-left: 0.25em; + color: #333333; +} +.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button:focus { + color: #000000; +} +.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + color: #087ecc; +} +.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + color: #76ab36; +} +.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + color: #d45353; +} +.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + opacity: 0.2; +} +.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + color: #cccccc; +} +.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { + margin: 0.1em 0; + padding: 0.2em 0.8em; + border-radius: 0.3em; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); + border: 1px #c9c9c9 solid; + -webkit-transition: border-color 100ms ease; + -moz-transition: border-color 100ms ease; + -ms-transition: border-color 100ms ease; + -o-transition: border-color 100ms ease; + transition: border-color 100ms ease; + background: #eeeeee; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #dddddd 100%); +} +.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus { + border-color: #aaaaaa; + outline: none; +} +.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + line-height: 1.875em; +} +.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { + box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07); + color: black; + border-color: #c9c9c9; + background: #eeeeee; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff)); + background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%); + background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%); + background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%); + background-image: linear-gradient(to bottom, #dddddd 0%, #ffffff 100%); +} +.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + margin-left: -0.5em; + margin-right: -0.5em; +} +.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + margin-right: 0.3em; +} +.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { + /* -0.5 - 0.475 */ + margin-left: -0.005em; + margin-right: -0.005em; +} +.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator, +.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { + margin-left: 0.46875em; + margin-right: -0.275em; +} +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button { + border: 1px solid #a6cee1; + background: #cde7f4; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee)); + background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); + background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); + background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); + background-image: linear-gradient(to bottom, #eaf4fa 0%, #b0d9ee 100%); +} +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { + border-color: #9dc2d4; +} +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { + border: 1px solid #a6cee1; + background: #cde7f4; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa)); + background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); + background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); + background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); + background-image: linear-gradient(to bottom, #b0d9ee 0%, #eaf4fa 100%); +} +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button { + border: 1px solid #b8d892; + background: #daf0be; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a)); + background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); + background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); + background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); + background-image: linear-gradient(to bottom, #f0fbe1 0%, #c3e59a 100%); +} +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus { + border-color: #adcb89; +} +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { + border: 1px solid #b8d892; + background: #daf0be; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1)); + background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); + background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); + background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); + background-image: linear-gradient(to bottom, #c3e59a 0%, #f0fbe1 100%); +} +.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button { + color: #d45353; +} +.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { + opacity: 0.5; + -webkit-transform: translate3d(0, 0, 0); + box-shadow: none; + color: #333333; + background: #eeeeee; + border-color: #cccccc; +} +.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus, +.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:focus { + border-color: #cccccc; + box-shadow: none; +} +.oo-ui-clippableElement-clippable { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-draggableElement { + cursor: -webkit-grab -moz-grab, url(images/grab.cur), move; + /* + * HACK: In order to style horizontally, we must override + * OO.ui.OptionWidget's display rule that is currently set + * to be 'block' + */ +} +.oo-ui-draggableElement-dragging { + cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move; + background: rgba(0, 0, 0, 0.2); + opacity: 0.4; +} +.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget { + display: inline-block; +} +.oo-ui-draggableGroupElement-placeholder { + position: absolute; + display: block; + background: rgba(0, 0, 0, 0.4); +} +.oo-ui-iconElement .oo-ui-iconElement-icon, +.oo-ui-iconElement.oo-ui-iconElement-icon { + background-size: contain; + background-position: center center; + background-repeat: no-repeat; +} +.oo-ui-iconElement .oo-ui-iconElement-icon, +.oo-ui-iconElement.oo-ui-iconElement-icon { + opacity: 0.8; +} +.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator, +.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator { + background-size: contain; + background-position: center center; + background-repeat: no-repeat; +} +.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator, +.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator { + opacity: 0.8; +} +.oo-ui-lookupElement > .oo-ui-menuSelectWidget { + z-index: 1; + width: 100%; +} +.oo-ui-pendingElement-pending { + background-image: /* @embed */ url(themes/apex/images/textures/pending.gif); +} +.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable { + overflow-y: hidden; +} +.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable { + overflow-y: auto; +} +.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded { + padding: 2em; +} +.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 3em; + overflow-y: auto; +} +.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget { + position: absolute; + bottom: 0; + left: 0; + right: 0; +} +.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout { + padding: 1.5em; +} +.oo-ui-bookletLayout-outlinePanel { + border-right: 1px solid #dddddd; +} +.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget { + box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25); +} +.oo-ui-indexLayout > .oo-ui-menuLayout-menu { + height: 3em; +} +.oo-ui-indexLayout > .oo-ui-menuLayout-content { + top: 3em; +} +.oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout { + padding: 1.5em; +} +.oo-ui-fieldLayout { + display: block; + margin-bottom: 1em; +} +.oo-ui-fieldLayout:before, +.oo-ui-fieldLayout:after { + content: " "; + display: table; +} +.oo-ui-fieldLayout:after { + clear: both; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field, +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { + display: block; + float: left; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { + text-align: right; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body { + display: table; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { + display: table-cell; + vertical-align: middle; +} +.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { + display: inline-block; +} +.oo-ui-fieldLayout > .oo-ui-fieldLayout-help { + float: right; +} +.oo-ui-fieldLayout > .oo-ui-fieldLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { + z-index: 1; +} +.oo-ui-fieldLayout > .oo-ui-fieldLayout-help .oo-ui-fieldLayout-help-content { + padding: 0.5em 0.75em; + line-height: 1.5em; +} +.oo-ui-fieldLayout:last-child { + margin-bottom: 0; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { + padding-top: 0.5em; + margin-right: 5%; + width: 35%; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field, +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { + width: 60%; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { + padding: 0.5em; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { + padding: 0.5em 0; +} +.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { + padding: 0.5em 0; +} +.oo-ui-fieldLayout > .oo-ui-popupButtonWidget { + margin-right: 0; + margin-top: 0.25em; +} +.oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child { + margin-right: 0; +} +.oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { + color: #cccccc; +} +.oo-ui-fieldLayout-messages { + list-style: none none; + margin: 0; + padding: 0; + margin-top: 0.25em; + margin-left: 0.25em; +} +.oo-ui-fieldLayout-messages > li { + margin: 0; + padding: 0; +} +.oo-ui-fieldLayout-messages .oo-ui-iconWidget { + display: none; +} +.oo-ui-fieldLayout-messages .oo-ui-fieldLayout-messages-error { + color: #d45353; +} +.oo-ui-fieldLayout-messages .oo-ui-labelWidget { + padding: 0; + line-height: 1.875em; + vertical-align: middle; +} +.oo-ui-actionFieldLayout-input, +.oo-ui-actionFieldLayout-button { + display: table-cell; + vertical-align: middle; +} +.oo-ui-actionFieldLayout-input { + padding-right: 1em; +} +.oo-ui-actionFieldLayout-button { + width: 1%; + white-space: nowrap; +} +.oo-ui-fieldsetLayout { + position: relative; + margin: 0; + padding: 0; + border: none; +} +.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon { + display: block; + position: absolute; +} +.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label { + display: inline-block; +} +.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help { + float: right; +} +.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { + z-index: 1; +} +.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help .oo-ui-fieldsetLayout-help-content { + padding: 0.5em 0.75em; + line-height: 1.5em; +} +.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout, +.oo-ui-fieldsetLayout + .oo-ui-formLayout { + margin-top: 2em; +} +.oo-ui-fieldsetLayout > .oo-ui-labelElement-label { + font-size: 1.1em; + margin-bottom: 0.5em; + padding: 0.25em 0; + font-weight: bold; +} +.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label { + padding-left: 2em; + line-height: 1.8em; +} +.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon { + left: 0; + top: 0.25em; + width: 1.875em; + height: 1.875em; +} +.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget { + margin-right: 0; +} +.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child { + margin-right: 0; +} +.oo-ui-formLayout + .oo-ui-fieldsetLayout, +.oo-ui-formLayout + .oo-ui-formLayout { + margin-top: 2em; +} +.oo-ui-menuLayout { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} +.oo-ui-menuLayout-menu, +.oo-ui-menuLayout-content { + position: absolute; + -webkit-transition: all 200ms ease; + -moz-transition: all 200ms ease; + -ms-transition: all 200ms ease; + -o-transition: all 200ms ease; + transition: all 200ms ease; +} +.oo-ui-menuLayout-menu { + height: 18em; + width: 18em; +} +.oo-ui-menuLayout-content { + top: 18em; + left: 18em; + right: 18em; + bottom: 18em; +} +.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu > .oo-ui-menuLayout-menu { + width: 0 !important; + height: 0 !important; + overflow: hidden; +} +.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu > .oo-ui-menuLayout-content { + top: 0 !important; + left: 0 !important; + right: 0 !important; + bottom: 0 !important; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top > .oo-ui-menuLayout-menu { + width: auto !important; + left: 0; + top: 0; + right: 0; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top > .oo-ui-menuLayout-content { + right: 0 !important; + bottom: 0 !important; + left: 0 !important; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after > .oo-ui-menuLayout-menu { + height: auto !important; + top: 0; + right: 0; + bottom: 0; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after > .oo-ui-menuLayout-content { + bottom: 0 !important; + left: 0 !important; + top: 0 !important; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom > .oo-ui-menuLayout-menu { + width: auto !important; + right: 0; + bottom: 0; + left: 0; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom > .oo-ui-menuLayout-content { + left: 0 !important; + top: 0 !important; + right: 0 !important; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before > .oo-ui-menuLayout-menu { + height: auto !important; + bottom: 0; + left: 0; + top: 0; +} +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before > .oo-ui-menuLayout-content { + top: 0 !important; + right: 0 !important; + bottom: 0 !important; +} +.oo-ui-panelLayout { + position: relative; +} +.oo-ui-panelLayout-scrollable { + overflow-y: auto; +} +.oo-ui-panelLayout-expanded { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} +.oo-ui-panelLayout-padded { + padding: 1.25em; +} +.oo-ui-panelLayout-framed { + border-radius: 0.5em; + box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25); +} +.oo-ui-panelLayout-padded.oo-ui-panelLayout-framed { + margin: 1em 0; +} +.oo-ui-stackLayout-continuous > .oo-ui-panelLayout { + display: block; + position: relative; +} +.oo-ui-horizontalLayout > .oo-ui-widget { + display: inline-block; + vertical-align: middle; +} +.oo-ui-horizontalLayout > .oo-ui-layout { + display: inline-block; +} +.oo-ui-horizontalLayout > .oo-ui-widget { + margin-right: 0.5em; +} +.oo-ui-horizontalLayout > .oo-ui-widget:last-child { + margin-right: 0; +} +.oo-ui-popupTool .oo-ui-popupWidget-popup, +.oo-ui-popupTool .oo-ui-popupWidget-anchor { + z-index: 4; +} +.oo-ui-popupTool .oo-ui-popupWidget { + /* @noflip */ + margin-left: 1.25em; +} +.oo-ui-toolGroupTool > .oo-ui-popupToolGroup { + border: 0; + border-radius: 0; + margin: 0; +} +.oo-ui-toolGroupTool:first-child > .oo-ui-popupToolGroup { + border-top-left-radius: 0.3125em; + border-bottom-left-radius: 0.3125em; +} +.oo-ui-toolGroupTool:last-child > .oo-ui-popupToolGroup { + border-top-right-radius: 0.3125em; + border-bottom-right-radius: 0.3125em; +} +.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle { + height: 1.875em; + padding: 0.3125em; +} +.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { + height: 1.875em; + width: 1.875em; +} +.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { + line-height: 2.1em; +} +.oo-ui-toolGroup { + display: inline-block; + vertical-align: middle; + margin: 0.375em; + border-radius: 0.3125em; + border: 1px solid transparent; + -webkit-transition: border-color 250ms ease; + -moz-transition: border-color 250ms ease; + -ms-transition: border-color 250ms ease; + -o-transition: border-color 250ms ease; + transition: border-color 250ms ease; +} +.oo-ui-toolGroup-empty { + display: none; +} +.oo-ui-toolGroup .oo-ui-tool-link { + text-decoration: none; +} +.oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup { + margin-left: 0; +} +.oo-ui-toolGroup.oo-ui-widget-enabled:hover { + border-color: rgba(0, 0, 0, 0.1); +} +.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title { + color: #000000; +} +.oo-ui-barToolGroup > .oo-ui-iconElement-icon, +.oo-ui-barToolGroup > .oo-ui-labelElement-label { + display: none; +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link { + cursor: pointer; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool { + display: inline-block; + position: relative; + vertical-align: top; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link { + display: block; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel { + display: none; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-iconElement-icon { + display: inline-block; + vertical-align: top; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-tool-title { + display: none; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement.oo-ui-tool-with-label > .oo-ui-tool-link .oo-ui-tool-title { + display: inline; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link { + outline: 0; + cursor: default; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool { + margin: -1px 0 -1px -1px; + border: 1px solid transparent; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool:first-child { + border-top-left-radius: 0.3125em; + border-bottom-left-radius: 0.3125em; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool:last-child { + margin-right: -1px; + border-top-right-radius: 0.3125em; + border-bottom-right-radius: 0.3125em; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link { + height: 1.875em; + padding: 0.3125em; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon { + height: 1.875em; + width: 1.875em; +} +.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title { + line-height: 2.1em; +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled { + border-color: rgba(0, 0, 0, 0.2); + box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07); + background: #f8fbfd; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); + background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: linear-gradient(to bottom, #f1f7fb 0%, #ffffff 100%); +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { + border-left-color: rgba(0, 0, 0, 0.1); +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link:focus { + outline: 0; +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-tool-title { + color: #cccccc; +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon { + opacity: 0.2; +} +.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon { + opacity: 1; +} +.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool:focus { + outline: 0; +} +.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link:focus { + outline: 0; +} +.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title { + color: #cccccc; +} +.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon { + opacity: 0.2; +} +.oo-ui-popupToolGroup { + position: relative; + height: 2.5em; + min-width: 2.5em; +} +.oo-ui-popupToolGroup-handle { + display: block; + cursor: pointer; +} +.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator, +.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { + position: absolute; +} +.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle { + outline: 0; + cursor: default; +} +.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { + display: none; + position: absolute; + z-index: 4; +} +.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools { + display: block; +} +.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools { + left: 0; +} +.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools { + right: 0; +} +.oo-ui-popupToolGroup .oo-ui-tool-link { + display: table; + width: 100%; + vertical-align: middle; + white-space: nowrap; +} +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon, +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel, +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { + display: table-cell; + vertical-align: middle; +} +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel { + text-align: right; +} +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) { + padding-left: 3em; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup { + min-width: 1.875em; +} +.oo-ui-popupToolGroup.oo-ui-iconElement { + min-width: 3.125em; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement { + min-width: 2.5em; +} +.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement { + min-width: 4.375em; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement { + min-width: 3.75em; +} +.oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { + line-height: 2.6em; + margin: 0 1em; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { + margin: 0 0.5em; +} +.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { + margin-left: 3em; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { + margin-left: 2.5em; +} +.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { + margin-right: 2.25em; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { + margin-right: 1.75em; +} +.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator { + width: 0.9375em; + height: 0.9375em; + margin: 0.78125em; + top: 0; + right: 0; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator { + right: -0.3125em; +} +.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { + width: 1.875em; + height: 1.875em; + margin: 0.3125em; + top: 0; + left: 0.3125em; +} +.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { + left: 0; +} +.oo-ui-popupToolGroup-header { + line-height: 2.6em; + margin: 0 0.6em; + font-weight: bold; +} +.oo-ui-popupToolGroup-active.oo-ui-widget-enabled { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07); + background: #f8fbfd; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); + background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: linear-gradient(to bottom, #f1f7fb 0%, #ffffff 100%); +} +.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { + top: 2.5em; + margin: 0 -1px; + border: 1px solid #cccccc; + background-color: white; + box-shadow: 0 0.3125em 1.25em rgba(0, 0, 0, 0.25); +} +.oo-ui-popupToolGroup .oo-ui-tool-link { + padding: 0.3125em 0 0.3125em 0.3125em; +} +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon { + height: 1.875em; + width: 1.875em; + min-width: 1.875em; +} +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { + padding-left: 0.5em; +} +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel, +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { + line-height: 2em; +} +.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel { + color: #888888; +} +.oo-ui-listToolGroup .oo-ui-tool { + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-listToolGroup .oo-ui-tool-link { + cursor: pointer; +} +.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { + cursor: default; +} +.oo-ui-listToolGroup .oo-ui-toolGroup-tools { + padding: 0.3125em; +} +.oo-ui-listToolGroup.oo-ui-popupToolGroup-active { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-listToolGroup .oo-ui-tool { + border: 1px solid transparent; + margin: -1px 0; + padding: 0 0.625em 0 0; +} +.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled { + border-color: rgba(0, 0, 0, 0.1); + box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07); + background: #f8fbfd; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); + background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); + background-image: linear-gradient(to bottom, #f1f7fb 0%, #ffffff 100%); +} +.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { + border-top-color: rgba(0, 0, 0, 0.1); +} +.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon { + opacity: 1; +} +.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { + color: #cccccc; +} +.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-accel { + color: #dddddd; +} +.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon { + opacity: 0.2; +} +.oo-ui-listToolGroup.oo-ui-widget-disabled { + color: #cccccc; +} +.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator, +.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon { + opacity: 0.2; +} +.oo-ui-menuToolGroup { + border-color: rgba(0, 0, 0, 0.1); +} +.oo-ui-menuToolGroup .oo-ui-tool { + display: block; +} +.oo-ui-menuToolGroup .oo-ui-tool-link { + cursor: pointer; +} +.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { + cursor: default; +} +.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle { + min-width: 10em; +} +.oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle { + min-width: 8.125em; +} +.oo-ui-menuToolGroup .oo-ui-toolGroup-tools { + padding: 0.3125em 0 0.3125em 0; +} +.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active { + border-color: rgba(0, 0, 0, 0.25); +} +.oo-ui-menuToolGroup .oo-ui-tool { + padding: 0 1.25em 0 0.3125em; +} +.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon { + background-image: none; +} +.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon { + background-image: url("themes/apex/images/icons/check.png"); + background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/apex/images/icons/check.svg"); + background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/apex/images/icons/check.svg"); + background-image: -o-linear-gradient(transparent, transparent), url("themes/apex/images/icons/check.png"); +} +.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { + background-color: #e1f3ff; +} +.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { + color: #cccccc; +} +.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon { + opacity: 0.2; +} +.oo-ui-menuToolGroup.oo-ui-widget-disabled { + color: #cccccc; + border-color: rgba(0, 0, 0, 0.05); +} +.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator, +.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon { + opacity: 0.2; +} +.oo-ui-toolbar { + clear: both; +} +.oo-ui-toolbar-bar { + line-height: 1em; + position: relative; +} +.oo-ui-toolbar-actions { + float: right; +} +.oo-ui-toolbar-actions .oo-ui-toolbar { + display: inline-block; +} +.oo-ui-toolbar-tools { + display: inline; + white-space: nowrap; +} +.oo-ui-toolbar-narrow .oo-ui-toolbar-tools { + white-space: normal; +} +.oo-ui-toolbar-tools .oo-ui-tool { + white-space: normal; +} +.oo-ui-toolbar-tools, +.oo-ui-toolbar-actions, +.oo-ui-toolbar-shadow { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.oo-ui-toolbar-actions .oo-ui-popupWidget { + -webkit-touch-callout: default; + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; +} +.oo-ui-toolbar-shadow { + background-position: left top; + background-repeat: repeat-x; + position: absolute; + width: 100%; + pointer-events: none; +} +.oo-ui-toolbar-bar { + border-bottom: 1px solid #cccccc; + background: #f8fbfd; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb)); + background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #f1f7fb 100%); +} +.oo-ui-toolbar-bar .oo-ui-toolbar-bar { + border: none; + background: none; +} +.oo-ui-toolbar-actions > .oo-ui-buttonElement-framed, +.oo-ui-toolbar-actions > .oo-ui-buttonElement-framed:last-child { + margin-top: 0.4em; + margin-bottom: 0.4em; + margin-right: 0.5em; +} +.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless.oo-ui-labelElement, +.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless:last-child.oo-ui-labelElement { + margin: 0; +} +.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button, +.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless:last-child.oo-ui-labelElement > .oo-ui-buttonElement-button { + margin: 0; + padding: 0 0.3125em; +} +.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label, +.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless:last-child.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + margin: 0 1em; + line-height: 3.40625em; + /* 43/12.8 */ +} +.oo-ui-toolbar-shadow { + background-image: /* @embed */ url(themes/apex/images/toolbar-shadow.png); + bottom: -9px; + height: 9px; + opacity: 0.5; + -webkit-transition: opacity 500ms ease; + -moz-transition: opacity 500ms ease; + -ms-transition: opacity 500ms ease; + -o-transition: opacity 500ms ease; + transition: opacity 500ms ease; +} +.oo-ui-optionWidget { + position: relative; + display: block; + cursor: pointer; + padding: 0.25em 0.5em; + border: none; +} +.oo-ui-optionWidget.oo-ui-widget-disabled { + cursor: default; +} +.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label { + display: block; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.oo-ui-optionWidget-highlighted { + background-color: #e1f3ff; +} +.oo-ui-optionWidget .oo-ui-labelElement-label { + line-height: 1.5em; +} +.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected { + background-color: #a7dcff; +} +.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed, +.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted, +.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected { + background-color: #a7dcff; +} +.oo-ui-optionWidget.oo-ui-widget-disabled { + color: #cccccc; +} +.oo-ui-decoratedOptionWidget { + padding: 0.5em 2em 0.5em 3em; +} +.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon, +.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator { + position: absolute; +} +.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, +.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { + top: 0; + height: 100%; +} +.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { + width: 1.875em; + left: 0.5em; +} +.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { + width: 0.9375em; + right: 0.5em; +} +.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon, +.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-buttonSelectWidget { + display: inline-block; + white-space: nowrap; + border-radius: 0.3em; + margin-right: 0.5em; +} +.oo-ui-buttonSelectWidget:last-child { + margin-right: 0; +} +.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button { + border-radius: 0; + margin-left: -1px; +} +.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button { + border-bottom-left-radius: 0.3em; + border-top-left-radius: 0.3em; + margin-left: 0; +} +.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button { + border-bottom-right-radius: 0.3em; + border-top-right-radius: 0.3em; +} +.oo-ui-radioSelectWidget { + padding: 0.75em 0 0.5em 0; +} +.oo-ui-buttonOptionWidget { + display: inline-block; + padding: 0; + background-color: transparent; +} +.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button { + position: relative; +} +.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, +.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { + position: static; + display: inline-block; + vertical-align: middle; +} +.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button { + height: 1.875em; +} +.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { + margin-top: 0; +} +.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected, +.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed, +.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted { + background-color: transparent; +} +.oo-ui-radioOptionWidget { + cursor: default; + padding: 0; + background-color: transparent; +} +.oo-ui-radioOptionWidget .oo-ui-radioInputWidget, +.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label { + display: inline-block; + vertical-align: middle; +} +.oo-ui-radioOptionWidget.oo-ui-optionWidget-selected, +.oo-ui-radioOptionWidget.oo-ui-optionWidget-pressed, +.oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted { + background-color: transparent; +} +.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label { + padding-left: 0.5em; +} +.oo-ui-radioOptionWidget .oo-ui-radioInputWidget { + margin-right: 0; +} +.oo-ui-labelWidget { + display: inline-block; + padding: 0.5em 0; +} +.oo-ui-iconWidget { + display: inline-block; + vertical-align: middle; + line-height: 2.5em; + height: 1.875em; + width: 1.875em; +} +.oo-ui-iconWidget.oo-ui-widget-disabled { + opacity: 0.2; +} +.oo-ui-indicatorWidget { + display: inline-block; + vertical-align: middle; + line-height: 2.5em; + height: 0.9375em; + width: 0.9375em; + margin: 0.46875em; +} +.oo-ui-indicatorWidget.oo-ui-widget-disabled { + opacity: 0.2; +} +.oo-ui-buttonWidget { + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; +} +.oo-ui-buttonWidget:last-child { + margin-right: 0; +} +.oo-ui-buttonGroupWidget { + display: inline-block; + white-space: nowrap; + border-radius: 0.3em; + margin-right: 0.5em; +} +.oo-ui-buttonGroupWidget:last-child { + margin-right: 0; +} +.oo-ui-buttonGroupWidget .oo-ui-buttonElement { + margin-right: 0; +} +.oo-ui-buttonGroupWidget .oo-ui-buttonElement:last-child { + margin-right: 0; +} +.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button { + border-radius: 0; + margin-left: -1px; +} +.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button { + border-bottom-left-radius: 0.3em; + border-top-left-radius: 0.3em; + margin-left: 0; +} +.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button { + border-bottom-right-radius: 0.3em; + border-top-right-radius: 0.3em; +} +.oo-ui-toggleButtonWidget { + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; +} +.oo-ui-toggleButtonWidget:last-child { + margin-right: 0; +} +.oo-ui-toggleSwitchWidget { + position: relative; + display: inline-block; + vertical-align: middle; + overflow: hidden; + cursor: pointer; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transform: translateZ(0px); + -moz-transform: translateZ(0px); + -ms-transform: translateZ(0px); + -o-transform: translateZ(0px); + transform: translateZ(0px); + height: 2em; + width: 4em; + border-radius: 1em; + box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd; + border: 1px solid #cccccc; + margin-right: 0.5em; + background: #eeeeee; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff)); + background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%); + background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%); + background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%); + background-image: linear-gradient(to bottom, #dddddd 0%, #ffffff 100%); +} +.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { + cursor: default; +} +.oo-ui-toggleSwitchWidget-grip { + position: absolute; + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { + display: none; +} +.oo-ui-toggleSwitchWidget:last-child { + margin-right: 0; +} +.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { + opacity: 0.5; +} +.oo-ui-toggleSwitchWidget-grip { + top: 0.25em; + left: 0.25em; + width: 1.5em; + height: 1.5em; + margin-top: -1px; + border-radius: 1em; + box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1); + border: 1px #c9c9c9 solid; + -webkit-transition: left 250ms ease, margin-left 250ms ease; + -moz-transition: left 250ms ease, margin-left 250ms ease; + -ms-transition: left 250ms ease, margin-left 250ms ease; + -o-transition: left 250ms ease, margin-left 250ms ease; + transition: left 250ms ease, margin-left 250ms ease; + background: #eeeeee; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #dddddd 100%); +} +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover, +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip { + border-color: #aaaaaa; +} +.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { + border-radius: 1em; + box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07); + -webkit-transition: opacity 250ms ease; + -moz-transition: opacity 250ms ease; + -ms-transition: opacity 250ms ease; + -o-transition: opacity 250ms ease; + transition: opacity 250ms ease; + background: #cde7f4; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa)); + background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); + background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); + background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); + background-image: linear-gradient(to bottom, #b0d9ee 0%, #eaf4fa 100%); +} +.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow { + opacity: 1; +} +.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { + left: 2.25em; + margin-left: -2px; +} +.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { + display: block; + opacity: 0; +} +.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip { + left: 0.25em; + margin-left: 0; +} +.oo-ui-progressBarWidget { + max-width: 50em; + border: 1px solid #cccccc; + border-radius: 0.25em; + overflow: hidden; +} +.oo-ui-progressBarWidget-bar { + height: 1em; + border-right: 1px solid #cccccc; + -webkit-transition: width 250ms ease, margin-left 250ms ease; + -moz-transition: width 250ms ease, margin-left 250ms ease; + -ms-transition: width 250ms ease, margin-left 250ms ease; + -o-transition: width 250ms ease, margin-left 250ms ease; + transition: width 250ms ease, margin-left 250ms ease; + background: #cde7f4; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee)); + background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); + background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); + background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); + background-image: linear-gradient(to bottom, #eaf4fa 0%, #b0d9ee 100%); +} +.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar { + -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear; + -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear; + -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear; + -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear; + animation: oo-ui-progressBarWidget-slide 2s infinite linear; + width: 40%; + margin-left: -10%; + border-left: 1px solid #a6cee1; +} +.oo-ui-progressBarWidget.oo-ui-widget-disabled { + opacity: 0.6; +} +.oo-ui-actionWidget.oo-ui-pendingElement-pending { + background-image: /* @embed */ url(themes/apex/images/textures/pending.gif); +} +.oo-ui-popupWidget { + position: absolute; + /* @noflip */ + left: 0; +} +.oo-ui-popupWidget-popup { + position: relative; + overflow: hidden; + z-index: 1; +} +.oo-ui-popupWidget-anchor { + display: none; + z-index: 1; +} +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { + display: block; + position: absolute; + top: 0; + /* @noflip */ + left: 0; + background-repeat: no-repeat; +} +.oo-ui-popupWidget-head { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.oo-ui-popupWidget-head > .oo-ui-buttonWidget { + float: right; +} +.oo-ui-popupWidget-head > .oo-ui-labelElement-label { + float: left; + cursor: default; +} +.oo-ui-popupWidget-body { + clear: both; + overflow: hidden; +} +.oo-ui-popupWidget-popup { + border: 1px solid #cccccc; + border-radius: 0.25em; + background-color: #ffffff; + box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2); +} +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup { + margin-top: 6px; +} +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before, +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { + content: ""; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-color: transparent; + border-top: 0; +} +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before { + bottom: -7px; + left: -6px; + border-bottom-color: #aaaaaa; + border-width: 7px; +} +.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { + bottom: -7px; + left: -5px; + border-bottom-color: #ffffff; + border-width: 6px; +} +.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup { + -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease; + -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease; + -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease; + -o-transition: width 100ms ease, height 100ms ease, left 100ms ease; + transition: width 100ms ease, height 100ms ease, left 100ms ease; +} +.oo-ui-popupWidget-head { + height: 2.5em; +} +.oo-ui-popupWidget-head > .oo-ui-buttonWidget { + margin: 0.25em; +} +.oo-ui-popupWidget-head > .oo-ui-labelElement-label { + margin: 0.75em 1em; +} +.oo-ui-popupWidget-body-padded { + padding: 0 1em; +} +.oo-ui-popupButtonWidget { + position: relative; +} +.oo-ui-popupButtonWidget .oo-ui-popupWidget { + position: absolute; + cursor: auto; +} +.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget { + /* @noflip */ + left: 1em; +} +.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget { + /* @noflip */ + left: 1.25em; +} +.oo-ui-inputWidget { + margin-right: 0.5em; +} +.oo-ui-inputWidget:last-child { + margin-right: 0; +} +.oo-ui-buttonInputWidget { + display: inline-block; + vertical-align: middle; +} +.oo-ui-buttonInputWidget > button, +.oo-ui-buttonInputWidget > input { + border: 0; + padding: 0; + background-color: transparent; +} +.oo-ui-dropdownInputWidget { + position: relative; + vertical-align: middle; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + max-width: 50em; +} +.oo-ui-dropdownInputWidget select { + display: inline-block; + width: 100%; + resize: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-dropdownInputWidget select { + background: #ffffff; + height: 2.5em; + padding: 0.5em; + font-size: inherit; + font-family: inherit; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25em; +} +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover, +.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus { + border-color: rgba(0, 0, 0, 0.2); + outline: none; +} +.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select { + color: #cccccc; + border-color: #dddddd; + background-color: #f3f3f3; +} +.oo-ui-radioSelectInputWidget .oo-ui-fieldLayout { + margin-bottom: 0; +} +.oo-ui-textInputWidget { + position: relative; + vertical-align: middle; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + max-width: 50em; +} +.oo-ui-textInputWidget input, +.oo-ui-textInputWidget textarea { + display: inline-block; + width: 100%; + resize: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-textInputWidget input[type="search"] { + -webkit-appearance: none; +} +.oo-ui-textInputWidget input[type="search"]::-ms-clear { + display: none; +} +.oo-ui-textInputWidget input[type="search"]::-ms-reveal { + display: none; +} +.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration, +.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button, +.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button, +.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-decoration { + display: none; +} +.oo-ui-textInputWidget > .oo-ui-iconElement-icon, +.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator, +.oo-ui-textInputWidget > .oo-ui-labelElement-label { + display: none; +} +.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon, +.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator { + display: block; + position: absolute; + top: 0; + height: 100%; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon, +.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator { + cursor: text; +} +.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-textInputWidget-type-search > .oo-ui-indicatorElement-indicator { + cursor: pointer; +} +.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label { + display: block; +} +.oo-ui-textInputWidget > .oo-ui-iconElement-icon { + left: 0; +} +.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator { + right: 0; +} +.oo-ui-textInputWidget > .oo-ui-labelElement-label { + position: absolute; + top: 0; +} +.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label { + right: 0; +} +.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label { + left: 0; +} +.oo-ui-textInputWidget input, +.oo-ui-textInputWidget textarea { + padding: 0.5em; + line-height: 1.275em; + font-size: inherit; + font-family: inherit; + background-color: #ffffff; + color: black; + border: 1px solid #cccccc; + box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd; + border-radius: 0.25em; + -webkit-transition: border-color 250ms ease, box-shadow 250ms ease; + -moz-transition: border-color 250ms ease, box-shadow 250ms ease; + -ms-transition: border-color 250ms ease, box-shadow 250ms ease; + -o-transition: border-color 250ms ease, box-shadow 250ms ease; + transition: border-color 250ms ease, box-shadow 250ms ease; +} +.oo-ui-textInputWidget input.oo-ui-pendingElement-pending, +.oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending { + background-color: transparent; +} +.oo-ui-textInputWidget-icon { + width: 2em; +} +.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus, +.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { + outline: none; + border-color: #a7dcff; + box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white; +} +.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly], +.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] { + color: #777777; +} +.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input, +.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea { + background-color: #ffdddd; +} +.oo-ui-textInputWidget.oo-ui-widget-disabled input, +.oo-ui-textInputWidget.oo-ui-widget-disabled textarea { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; +} +.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon, +.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label { + color: #dddddd; + text-shadow: 0 1px 1px #ffffff; +} +.oo-ui-textInputWidget.oo-ui-iconElement input, +.oo-ui-textInputWidget.oo-ui-iconElement textarea { + padding-left: 2.475em; +} +.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon { + width: 1.875em; + margin-left: 0.3em; +} +.oo-ui-textInputWidget.oo-ui-indicatorElement input, +.oo-ui-textInputWidget.oo-ui-indicatorElement textarea { + padding-right: 2.4875em; +} +.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { + width: 0.9375em; + margin-right: 0.775em; +} +.oo-ui-textInputWidget > .oo-ui-labelElement-label { + padding: 0.4em; + line-height: 1.5em; + color: #888888; +} +.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label { + margin-right: 2.0875em; +} +.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label { + margin-left: 2.075em; +} +.oo-ui-menuSelectWidget { + position: absolute; + background: #ffffff; + margin-top: -1px; + border: 1px solid #cccccc; + border-radius: 0 0 0.25em 0.25em; + box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2); +} +.oo-ui-menuSelectWidget input { + position: absolute; + width: 0; + height: 0; + overflow: hidden; + opacity: 0; +} +.oo-ui-menuOptionWidget { + position: relative; +} +.oo-ui-menuOptionWidget .oo-ui-iconElement-icon { + display: none; +} +.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected { + background-color: transparent; +} +.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon { + display: block; +} +.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected { + background-color: transparent; +} +.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted, +.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected { + background-color: #e1f3ff; +} +.oo-ui-menuSectionOptionWidget { + cursor: default; + padding: 0.33em 0.75em; + color: #888888; +} +.oo-ui-dropdownWidget { + display: inline-block; + position: relative; + width: 100%; + max-width: 50em; + margin-right: 0.5em; +} +.oo-ui-dropdownWidget-handle { + width: 100%; + display: inline-block; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator, +.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { + position: absolute; +} +.oo-ui-dropdownWidget > .oo-ui-menuSelectWidget { + z-index: 1; + width: 100%; +} +.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle { + cursor: default; +} +.oo-ui-dropdownWidget:last-child { + margin-right: 0; +} +.oo-ui-dropdownWidget-handle { + height: 2.5em; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25em; +} +.oo-ui-dropdownWidget-handle:hover { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { + right: 0; +} +.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { + left: 0.25em; +} +.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { + line-height: 2.5em; + margin: 0 0.5em; +} +.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { + top: 0; + width: 0.9375em; + height: 0.9375em; + margin: 0.775em; +} +.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { + top: 0; + width: 1.875em; + height: 1.875em; + margin: 0.3em; +} +.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; +} +.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle:focus { + outline: 0; +} +.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { + margin-left: 3em; +} +.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { + margin-right: 2em; +} +.oo-ui-selectFileWidget { + display: inline-block; + vertical-align: middle; + width: 100%; + max-width: 50em; + margin-right: 0.5em; +} +.oo-ui-selectFileWidget-selectButton { + display: table-cell; + vertical-align: middle; +} +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button { + position: relative; + overflow: hidden; +} +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] { + position: absolute; + margin: 0; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 100%; + opacity: 0; + z-index: 1; + cursor: pointer; + /* Push the button part of the native control out of view, as it changes the cursor */ + padding-top: 100px; +} +.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] { + display: none; +} +.oo-ui-selectFileWidget-info { + width: 100%; + display: table-cell; + vertical-align: middle; + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + text-overflow: ellipsis; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType { + float: right; +} +.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator, +.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon, +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton { + position: absolute; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton { + z-index: 2; +} +.oo-ui-selectFileWidget-dropTarget { + cursor: default; +} +.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget { + cursor: pointer; +} +.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton, +.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton { + display: none; +} +.oo-ui-selectFileWidget:last-child { + margin-right: 0; +} +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button { + margin: 0 0 0 0.5em; +} +.oo-ui-selectFileWidget-info { + height: 2.4em; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25em; +} +.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { + right: 0; +} +.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { + left: 0; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label { + line-height: 2.3em; + margin: 0; + overflow: hidden; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + left: 0.5em; + right: 0.5em; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType { + color: #888888; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton { + top: 0; + width: 1.875em; + margin-right: 0; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + height: 2.3em; +} +.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { + top: 0; + width: 0.9375em; + height: 2.3em; + margin-right: 0.775em; +} +.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { + top: 0; + width: 1.875em; + height: 2.3em; + margin-left: 0.3em; +} +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; +} +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon, +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label { + color: #cccccc; +} +.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + left: 2.475em; +} +.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 2.175em; +} +.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton { + right: 0; +} +.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 4.2625em; +} +.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton { + right: 2.0875em; +} +.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label, +.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 0.5em; +} +.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label, +.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 2em; +} +.oo-ui-selectFileWidget-dropTarget { + line-height: 3.5em; + border: 1px dashed #aaaaaa; + padding: 0.5em 1em; + margin-bottom: 0.5em; + background: #ffffff; + text-align: center; + vertical-align: middle; +} +.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover, +.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop oo-ui-selectfilewidget-droptarget { + background-color: #e1f3ff; +} +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget, +.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; +} +.oo-ui-outlineOptionWidget { + position: relative; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 1.1em; + padding: 0.75em; +} +.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label { + padding-right: 1.5em; +} +.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { + opacity: 0.5; +} +.oo-ui-outlineOptionWidget-level-0 { + padding-left: 3.5em; +} +.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon { + left: 1em; +} +.oo-ui-outlineOptionWidget-level-1 { + padding-left: 5em; +} +.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon { + left: 2.5em; +} +.oo-ui-outlineOptionWidget-level-2 { + padding-left: 6.5em; +} +.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon { + left: 4em; +} +.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected { + background-color: #a7dcff; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); +} +.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important { + font-weight: bold; +} +.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder { + font-style: italic; +} +.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon { + opacity: 0.5; +} +.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label { + color: #777777; +} +.oo-ui-outlineControlsWidget { + height: 3em; + background-color: #ffffff; +} +.oo-ui-outlineControlsWidget-items, +.oo-ui-outlineControlsWidget-movers { + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon { + float: left; + background-position: right center; +} +.oo-ui-outlineControlsWidget-items { + float: left; +} +.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget { + float: left; +} +.oo-ui-outlineControlsWidget-movers { + float: right; +} +.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget { + float: right; +} +.oo-ui-outlineControlsWidget-items, +.oo-ui-outlineControlsWidget-movers { + height: 2em; + margin: 0.5em 0.5em 0.5em 0; + padding: 0; +} +.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon { + width: 1.5em; + height: 2em; + margin: 0.5em 0 0.5em 0.5em; + opacity: 0.2; +} +.oo-ui-tabSelectWidget { + text-align: left; + white-space: nowrap; + overflow: hidden; + background-color: #eeeeee; + box-shadow: inset 0 -0.015em 0.1em rgba(0, 0, 0, 0.1); +} +.oo-ui-tabOptionWidget { + display: inline-block; + vertical-align: bottom; + padding: 0.5em 1em; + margin: 0.5em 0 0 0.75em; + border: 1px solid transparent; + border-bottom: none; + border-top-left-radius: 0.5em; + border-top-right-radius: 0.5em; +} +.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label { + padding-right: 1.5em; +} +.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { + opacity: 0.5; +} +.oo-ui-selectWidget-pressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-pressed { + background-color: transparent; +} +.oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover { + background-color: rgba(255, 255, 255, 0.2); + border-color: #dddddd; +} +.oo-ui-tabOptionWidget.oo-ui-widget-enabled:active { + background-color: #ffffff; + border-color: #dddddd; +} +.oo-ui-selectWidget-pressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected, +.oo-ui-selectWidget-depressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected, +.oo-ui-tabOptionWidget.oo-ui-optionWidget-selected:hover { + background-color: #ffffff; + border-color: #dddddd; +} +.oo-ui-capsuleMultiSelectWidget { + display: inline-block; + position: relative; + width: 100%; + max-width: 50em; +} +.oo-ui-capsuleMultiSelectWidget-handle { + width: 100%; + display: inline-block; + position: relative; +} +.oo-ui-capsuleMultiSelectWidget-group { + display: inline; +} +.oo-ui-capsuleMultiSelectWidget > .oo-ui-menuSelectWidget { + z-index: 1; + width: 100%; +} +.oo-ui-capsuleMultiSelectWidget-handle { + background-color: #ffffff; + cursor: text; + min-height: 2.4em; + margin-right: 0.5em; + padding: 0.25em 0; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25em; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-capsuleMultiSelectWidget-handle:last-child { + margin-right: 0; +} +.oo-ui-capsuleMultiSelectWidget-handle .oo-ui-capsuleMultiSelectWidget-group { + margin: 0 0.2em; +} +.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator, +.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon { + position: absolute; + background-position: center center; + background-repeat: no-repeat; +} +.oo-ui-capsuleMultiSelectWidget-handle > input { + border: none; + min-width: 1em; + max-width: 100%; + line-height: 1.675em; + margin: 0; + padding: 0; + font-size: inherit; + font-family: inherit; + background-color: transparent; + color: black; + vertical-align: middle; +} +.oo-ui-capsuleMultiSelectWidget-handle > input:focus { + outline: none; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle { + padding-right: 0.9375em; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator { + right: 0; + top: 0; + width: 0.9375em; + height: 0.9375em; + margin: 0.775em; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle { + padding-left: 1.875em; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon { + left: 0; + top: 0; + width: 1.875em; + height: 1.875em; + margin: 0.3em; +} +.oo-ui-capsuleMultiSelectWidget:hover .oo-ui-capsuleMultiSelectWidget-handle { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; + cursor: default; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon, +.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-capsuleMultiSelectWidget .oo-ui-selectWidget { + border-top-color: #ffffff; +} +.oo-ui-capsuleItemWidget { + position: relative; + display: inline-block; + cursor: default; + white-space: nowrap; + width: auto; + max-width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + vertical-align: middle; + padding: 0 0.4em; + margin: 0 0.1em; + height: 1.7em; + line-height: 1.7em; + background: #eeeeee; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd'); + background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #dddddd 100%); + border: 1px solid #cccccc; + color: #555555; + border-radius: 0.25em; +} +.oo-ui-capsuleItemWidget > .oo-ui-iconElement-icon { + cursor: pointer; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-iconElement-icon { + cursor: default; +} +.oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label { + display: block; + text-overflow: ellipsis; + overflow: hidden; +} +.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-labelElement-label { + padding-right: 1.3375em; +} +.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator { + position: absolute; + right: 0.4em; + top: 0; + width: 0.9375em; + height: 100%; + background-repeat: no-repeat; +} +.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicator-clear { + cursor: pointer; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled { + opacity: 0.5; + -webkit-transform: translate3d(0, 0, 0); + box-shadow: none; + color: #333333; + background: #eeeeee; + border-color: #cccccc; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-comboBoxWidget { + display: inline-block; + position: relative; + width: 100%; + max-width: 50em; + margin-right: 0.5em; +} +.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget { + z-index: 1; + width: 100%; +} +.oo-ui-comboBoxWidget > .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator { + cursor: pointer; +} +.oo-ui-comboBoxWidget:last-child { + margin-right: 0; +} +.oo-ui-comboBoxWidget-handle { + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25em; +} +.oo-ui-comboBoxWidget-handle:hover { + border-color: rgba(0, 0, 0, 0.2); +} +.oo-ui-comboBoxWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator, +.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { + cursor: default; + opacity: 0.2; +} +.oo-ui-comboBoxWidget > .oo-ui-selectWidget { + margin-top: -3px; +} +.oo-ui-searchWidget-query { + position: absolute; + top: 0; + left: 0; + right: 0; +} +.oo-ui-searchWidget-query .oo-ui-textInputWidget { + width: 100%; +} +.oo-ui-searchWidget-results { + position: absolute; + bottom: 0; + left: 0; + right: 0; + overflow-x: hidden; + overflow-y: auto; +} +.oo-ui-searchWidget-query { + height: 4em; + padding: 0 1em; + box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2); +} +.oo-ui-searchWidget-query .oo-ui-textInputWidget { + margin: 0.75em 0; +} +.oo-ui-searchWidget-results { + top: 4em; + padding: 1em; + line-height: 0; +} +.oo-ui-numberInputWidget { + display: inline-block; + position: relative; + max-width: 50em; +} +.oo-ui-numberInputWidget-field { + display: table; + table-layout: fixed; + width: 100%; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget, +.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget { + display: table-cell; + vertical-align: middle; +} +.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget { + width: 100%; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget { + white-space: nowrap; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { + box-sizing: border-box; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget, +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { + margin: 0; + width: 2.5em; +} +.oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right-width: 0; +} +.oo-ui-numberInputWidget-plusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-width: 0; +} +.oo-ui-numberInputWidget .oo-ui-textInputWidget input { + border-radius: 0; +} +.oo-ui-window { + background-color: transparent; + background-image: none; +} +.oo-ui-window-frame { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-window-content:focus { + outline: none; +} +.oo-ui-window-head, +.oo-ui-window-foot { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.oo-ui-window-body { + margin: 0; + padding: 0; + background: none; +} +.oo-ui-window-overlay { + position: absolute; + top: 0; + /* @noflip */ + left: 0; +} +.oo-ui-dialog-content > .oo-ui-window-head, +.oo-ui-dialog-content > .oo-ui-window-body, +.oo-ui-dialog-content > .oo-ui-window-foot { + position: absolute; + left: 0; + right: 0; + overflow: hidden; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-dialog-content > .oo-ui-window-head { + z-index: 1; + top: 0; +} +.oo-ui-dialog-content > .oo-ui-window-body { + z-index: 2; + top: 0; + bottom: 0; +} +.oo-ui-dialog-content > .oo-ui-window-foot { + z-index: 1; + bottom: 0; +} +.oo-ui-dialog-content > .oo-ui-window-body { + box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25); +} +.oo-ui-messageDialog-actions-horizontal { + display: table; + table-layout: fixed; + width: 100%; +} +.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { + display: table-cell; + width: 1%; +} +.oo-ui-messageDialog-actions-vertical { + display: block; +} +.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { + display: block; + overflow: hidden; + text-overflow: ellipsis; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget { + position: relative; + text-align: center; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button { + display: block; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label { + position: relative; + top: auto; + bottom: auto; + display: inline; + white-space: nowrap; +} +.oo-ui-messageDialog-content .oo-ui-window-body { + box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33); +} +.oo-ui-messageDialog-title, +.oo-ui-messageDialog-message { + display: block; + text-align: center; + padding-top: 0.5em; +} +.oo-ui-messageDialog-title { + font-size: 1.5em; + line-height: 1em; + color: #000000; +} +.oo-ui-messageDialog-message { + font-size: 0.9em; + line-height: 1.25em; + color: #666666; +} +.oo-ui-messageDialog-message-verbose { + font-size: 1.1em; + line-height: 1.5em; + text-align: left; +} +.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { + border-right: 1px solid #e5e5e5; + margin: 0; +} +.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child { + border-right-width: 0; +} +.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { + border-bottom: 1px solid #e5e5e5; + margin: 0; +} +.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child { + border-bottom-width: 0; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget { + height: 3.4em; + margin-right: 0; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget:last-child { + margin-right: 0; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label { + text-align: center; + line-height: 3.4em; + padding: 0 2em; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover { + background-color: rgba(0, 0, 0, 0.05); +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget:active { + background-color: rgba(0, 0, 0, 0.1); +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover { + background-color: rgba(8, 126, 204, 0.05); +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active { + background-color: rgba(8, 126, 204, 0.1); +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label { + font-weight: bold; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover { + background-color: rgba(118, 171, 54, 0.05); +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active { + background-color: rgba(118, 171, 54, 0.1); +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover { + background-color: rgba(212, 83, 83, 0.05); +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active { + background-color: rgba(212, 83, 83, 0.1); +} +.oo-ui-processDialog-location { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.oo-ui-processDialog-title { + display: inline; + padding: 0; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget { + white-space: nowrap; +} +.oo-ui-processDialog-actions-safe, +.oo-ui-processDialog-actions-primary { + position: absolute; + top: 0; + bottom: 0; +} +.oo-ui-processDialog-actions-safe { + left: 0; +} +.oo-ui-processDialog-actions-primary { + right: 0; +} +.oo-ui-processDialog-errors { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 2; + overflow-x: hidden; + overflow-y: auto; +} +.oo-ui-processDialog-content .oo-ui-window-head { + height: 3.4em; +} +.oo-ui-processDialog-content .oo-ui-window-body { + top: 3.4em; + box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33); +} +.oo-ui-processDialog-navigation { + position: relative; + height: 3.4em; + padding: 0 1em; +} +.oo-ui-processDialog-location { + padding: 0.75em 0; + height: 1.875em; + cursor: default; + text-align: center; +} +.oo-ui-processDialog-title { + font-weight: bold; + line-height: 1.875em; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button { + min-width: 1.875em; + min-height: 1.875em; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label { + line-height: 1.875em; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { + margin-top: -0.125em; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed { + margin: 0.75em; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button { + padding: 0 1em; + vertical-align: middle; + /* Adjust for border so text aligns with title */ + margin: -1px; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless { + margin: 0; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button { + padding: 0.75em 1em; + vertical-align: middle; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover { + background-color: rgba(0, 0, 0, 0.05); +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active { + background-color: rgba(0, 0, 0, 0.1); +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover { + background-color: rgba(8, 126, 204, 0.05); +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active { + background-color: rgba(8, 126, 204, 0.1); +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label { + font-weight: bold; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover { + background-color: rgba(118, 171, 54, 0.05); +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active { + background-color: rgba(118, 171, 54, 0.1); +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover { + background-color: rgba(212, 83, 83, 0.05); +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active { + background-color: rgba(212, 83, 83, 0.1); +} +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement { + margin-right: 0; +} +.oo-ui-processDialog > .oo-ui-window-frame { + min-height: 5em; +} +.oo-ui-processDialog-errors { + background-color: rgba(255, 255, 255, 0.9); + padding: 3em 3em 1.5em 3em; + text-align: center; +} +.oo-ui-processDialog-errors .oo-ui-buttonWidget { + margin: 2em 1em 2em 1em; +} +.oo-ui-processDialog-errors-title { + font-size: 1.5em; + color: #000000; + margin-bottom: 2em; +} +.oo-ui-processDialog-error { + text-align: left; + margin: 1em; + padding: 1em; + border: 1px solid #ff9e9e; + background-color: #fff7f7; + border-radius: 0.25em; +} +.oo-ui-windowManager-modal > .oo-ui-dialog { + position: fixed; + width: 0; + height: 0; + overflow: hidden; +} +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active { + width: auto; + height: auto; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1em; +} +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame { + position: absolute; + right: 0; + left: 0; + margin: auto; + overflow: hidden; + max-width: 100%; + max-height: 100%; +} +.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { + width: 100%; + height: 100%; + top: 0; + bottom: 0; +} +.oo-ui-windowManager-modal > .oo-ui-dialog { + background-color: rgba(255, 255, 255, 0.5); + opacity: 0; + -webkit-transition: opacity 250ms ease; + -moz-transition: opacity 250ms ease; + -ms-transition: opacity 250ms ease; + -o-transition: opacity 250ms ease; + transition: opacity 250ms ease; +} +.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { + top: 1em; + bottom: 1em; + background-color: #ffffff; + opacity: 0; + -webkit-transform: scale(0.5); + -moz-transform: scale(0.5); + -ms-transform: scale(0.5); + -o-transform: scale(0.5); + transform: scale(0.5); + -webkit-transition: all 250ms ease; + -moz-transition: all 250ms ease; + -ms-transition: all 250ms ease; + -o-transition: all 250ms ease; + transition: all 250ms ease; +} +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { + /* Fade window overlay */ + opacity: 1; +} +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { + /* Fade frame */ + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { + border: 1px solid #cccccc; + border-radius: 0.5em; + box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3); +} diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js new file mode 100644 index 00000000..dab3c78d --- /dev/null +++ b/resources/lib/oojs-ui/oojs-ui-apex.js @@ -0,0 +1,28 @@ +/*! + * OOjs UI v0.12.12 + * https://www.mediawiki.org/wiki/OOjs_UI + * + * Copyright 2011–2015 OOjs UI Team and other contributors. + * Released under the MIT license + * http://oojs.mit-license.org + * + * Date: 2015-10-13T20:38:18Z + */ +/** + * @class + * @extends OO.ui.Theme + * + * @constructor + */ +OO.ui.ApexTheme = function OoUiApexTheme() { + // Parent constructor + OO.ui.ApexTheme.parent.call( this ); +}; + +/* Setup */ + +OO.inheritClass( OO.ui.ApexTheme, OO.ui.Theme ); + +/* Instantiation */ + +OO.ui.theme = new OO.ui.ApexTheme(); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css deleted file mode 100644 index 545c64d0..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css +++ /dev/null @@ -1,64 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-bell { - background-image: url("themes/mediawiki/images/icons/bell.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bell.png"); -} -.oo-ui-icon-bellOn { - background-image: url("themes/mediawiki/images/icons/bellOn-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bellOn-ltr.png"); -} -.oo-ui-icon-eye { - background-image: url("themes/mediawiki/images/icons/eye.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eye.png"); -} -.oo-ui-icon-eyeClosed { - background-image: url("themes/mediawiki/images/icons/eyeClosed.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eyeClosed.png"); -} -.oo-ui-icon-message { - background-image: url("themes/mediawiki/images/icons/message-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/message-ltr.png"); -} -.oo-ui-icon-signature { - background-image: url("themes/mediawiki/images/icons/signature-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/signature-ltr.png"); -} -.oo-ui-icon-speechBubble { - background-image: url("themes/mediawiki/images/icons/speechBubble-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubble-ltr.png"); -} -.oo-ui-icon-speechBubbleAdd { - background-image: url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png"); -} -.oo-ui-icon-speechBubbles { - background-image: url("themes/mediawiki/images/icons/speechBubbles-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbles-ltr.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css deleted file mode 100644 index acd14255..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css +++ /dev/null @@ -1,76 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-article { - background-image: url("themes/mediawiki/images/icons/article-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/article-ltr.png"); -} -.oo-ui-icon-articleCheck { - background-image: url("themes/mediawiki/images/icons/articleCheck-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleCheck-ltr.png"); -} -.oo-ui-icon-articleSearch { - background-image: url("themes/mediawiki/images/icons/articleSearch-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleSearch-ltr.png"); -} -.oo-ui-icon-book { - background-image: url("themes/mediawiki/images/icons/book-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/book-ltr.png"); -} -.oo-ui-icon-citeArticle { - background-image: url("themes/mediawiki/images/icons/citeArticle-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/citeArticle-ltr.png"); -} -.oo-ui-icon-die { - background-image: url("themes/mediawiki/images/icons/die-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/die-ltr.png"); -} -.oo-ui-icon-download { - background-image: url("themes/mediawiki/images/icons/download-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/download-ltr.png"); -} -.oo-ui-icon-folderPlaceholder { - background-image: url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png"); -} -.oo-ui-icon-journal { - background-image: url("themes/mediawiki/images/icons/journal-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/journal-ltr.png"); -} -.oo-ui-icon-newspaper { - background-image: url("themes/mediawiki/images/icons/newspaper-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newspaper-ltr.png"); -} -.oo-ui-icon-upload { - background-image: url("themes/mediawiki/images/icons/upload-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upload-ltr.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css deleted file mode 100644 index 5f4cb821..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css +++ /dev/null @@ -1,166 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-alignCentre { - background-image: url("themes/mediawiki/images/icons/align-center.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-center.png"); -} -.oo-ui-icon-alignLeft { - background-image: url("themes/mediawiki/images/icons/align-float-left.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-left.png"); -} -.oo-ui-icon-alignRight { - background-image: url("themes/mediawiki/images/icons/align-float-right.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-right.png"); -} -.oo-ui-icon-find { - background-image: url("themes/mediawiki/images/icons/find-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/find-ltr.png"); -} -.oo-ui-icon-insert { - background-image: url("themes/mediawiki/images/icons/insert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/insert.png"); -} -.oo-ui-icon-layout { - background-image: url("themes/mediawiki/images/icons/layout-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/layout-ltr.png"); -} -.oo-ui-icon-newline { - background-image: url("themes/mediawiki/images/icons/newline-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newline-ltr.png"); -} -.oo-ui-icon-redirect { - background-image: url("themes/mediawiki/images/icons/redirect-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/redirect-ltr.png"); -} -.oo-ui-icon-noWikiText { - background-image: url("themes/mediawiki/images/icons/noWikiText-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/noWikiText-ltr.png"); -} -.oo-ui-icon-outline { - background-image: url("themes/mediawiki/images/icons/outline-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outline-ltr.png"); -} -.oo-ui-icon-puzzle { - background-image: url("themes/mediawiki/images/icons/puzzle-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/puzzle-ltr.png"); -} -.oo-ui-icon-quotes { - background-image: url("themes/mediawiki/images/icons/quotes-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotes-ltr.png"); -} -.oo-ui-icon-quotesAdd { - background-image: url("themes/mediawiki/images/icons/quotesAdd-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotesAdd-ltr.png"); -} -.oo-ui-icon-searchCaseSensitive { - background-image: url("themes/mediawiki/images/icons/case-sensitive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/case-sensitive.png"); -} -.oo-ui-icon-searchRegularExpression { - background-image: url("themes/mediawiki/images/icons/regular-expression.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/regular-expression.png"); -} -.oo-ui-icon-specialCharacter { - background-image: url("themes/mediawiki/images/icons/specialCharacter.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/specialCharacter.png"); -} -.oo-ui-icon-table { - background-image: url("themes/mediawiki/images/icons/table.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table.png"); -} -.oo-ui-icon-tableAddColumnAfter { - background-image: url("themes/mediawiki/images/icons/table-insert-column-rtl.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-rtl.png"); -} -.oo-ui-icon-tableAddColumnBefore { - background-image: url("themes/mediawiki/images/icons/table-insert-column-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-ltr.png"); -} -.oo-ui-icon-tableAddRowAfter { - background-image: url("themes/mediawiki/images/icons/table-insert-row-after.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-after.png"); -} -.oo-ui-icon-tableAddRowBefore { - background-image: url("themes/mediawiki/images/icons/table-insert-row-before.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-before.png"); -} -.oo-ui-icon-tableCaption { - background-image: url("themes/mediawiki/images/icons/table-caption.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-caption.png"); -} -.oo-ui-icon-tableMergeCells { - background-image: url("themes/mediawiki/images/icons/table-merge-cells.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-merge-cells.png"); -} -.oo-ui-icon-templateAdd { - background-image: url("themes/mediawiki/images/icons/templateAdd-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/templateAdd-ltr.png"); -} -.oo-ui-icon-translation { - background-image: url("themes/mediawiki/images/icons/translation-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/translation-ltr.png"); -} -.oo-ui-icon-wikiText { - background-image: url("themes/mediawiki/images/icons/wikiText.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikiText.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css deleted file mode 100644 index 7f3b236f..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css +++ /dev/null @@ -1,88 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-edit { - background-image: url("themes/mediawiki/images/icons/edit-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr.png"); -} -.oo-ui-icon-edit-progressive { - background-image: url("themes/mediawiki/images/icons/edit-ltr-progressive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-progressive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-progressive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr-progressive.png"); -} -.oo-ui-icon-edit-invert { - background-image: url("themes/mediawiki/images/icons/edit-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr-invert.png"); -} -.oo-ui-icon-editLock { - background-image: url("themes/mediawiki/images/icons/editLock-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editLock-ltr.png"); -} -.oo-ui-icon-editLock-invert { - background-image: url("themes/mediawiki/images/icons/editLock-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editLock-ltr-invert.png"); -} -.oo-ui-icon-editUndo { - background-image: url("themes/mediawiki/images/icons/editUndo-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editUndo-ltr.png"); -} -.oo-ui-icon-editUndo-invert { - background-image: url("themes/mediawiki/images/icons/editUndo-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editUndo-ltr-invert.png"); -} -.oo-ui-icon-link { - background-image: url("themes/mediawiki/images/icons/link-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/link-ltr.png"); -} -.oo-ui-icon-link-invert { - background-image: url("themes/mediawiki/images/icons/link-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/link-ltr-invert.png"); -} -.oo-ui-icon-linkExternal { - background-image: url("themes/mediawiki/images/icons/external-link-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/external-link-ltr.png"); -} -.oo-ui-icon-linkExternal-invert { - background-image: url("themes/mediawiki/images/icons/external-link-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/external-link-ltr-invert.png"); -} -.oo-ui-icon-linkSecure { - background-image: url("themes/mediawiki/images/icons/secure-link.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/secure-link.png"); -} -.oo-ui-icon-linkSecure-invert { - background-image: url("themes/mediawiki/images/icons/secure-link-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/secure-link-invert.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css deleted file mode 100644 index 9708223a..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css +++ /dev/null @@ -1,34 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-indent { - background-image: url("themes/mediawiki/images/icons/indent-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/indent-ltr.png"); -} -.oo-ui-icon-listBullet { - background-image: url("themes/mediawiki/images/icons/listBullet-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listBullet-ltr.png"); -} -.oo-ui-icon-listNumbered { - background-image: url("themes/mediawiki/images/icons/listNumbered-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listNumbered-ltr.png"); -} -.oo-ui-icon-outdent { - background-image: url("themes/mediawiki/images/icons/outdent-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outdent-ltr.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css deleted file mode 100644 index ce739dcb..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css +++ /dev/null @@ -1,495 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-bigger { - background-image: url("themes/mediawiki/images/icons/bigger-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bigger-ltr.png"); -} -.oo-ui-icon-smaller { - background-image: url("themes/mediawiki/images/icons/smaller-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/smaller-ltr.png"); -} -.oo-ui-icon-subscript { - background-image: url("themes/mediawiki/images/icons/subscript-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/subscript-ltr.png"); -} -.oo-ui-icon-superscript { - background-image: url("themes/mediawiki/images/icons/superscript-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/superscript-ltr.png"); -} -.oo-ui-icon-bold { - background-image: url("themes/mediawiki/images/icons/bold-a.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-a.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(ar) { - background-image: url("themes/mediawiki/images/icons/bold-arab-ain.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-ain.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(be) { - background-image: url("themes/mediawiki/images/icons/bold-cyrl-te.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-te.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(cs) { - background-image: url("themes/mediawiki/images/icons/bold-b.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(en) { - background-image: url("themes/mediawiki/images/icons/bold-b.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(he) { - background-image: url("themes/mediawiki/images/icons/bold-b.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(ml) { - background-image: url("themes/mediawiki/images/icons/bold-b.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(pl) { - background-image: url("themes/mediawiki/images/icons/bold-b.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(da) { - background-image: url("themes/mediawiki/images/icons/bold-f.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(de) { - background-image: url("themes/mediawiki/images/icons/bold-f.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(hu) { - background-image: url("themes/mediawiki/images/icons/bold-f.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(ksh) { - background-image: url("themes/mediawiki/images/icons/bold-f.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(nn) { - background-image: url("themes/mediawiki/images/icons/bold-f.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(no) { - background-image: url("themes/mediawiki/images/icons/bold-f.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(sv) { - background-image: url("themes/mediawiki/images/icons/bold-f.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(es) { - background-image: url("themes/mediawiki/images/icons/bold-n.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(gl) { - background-image: url("themes/mediawiki/images/icons/bold-n.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(pt) { - background-image: url("themes/mediawiki/images/icons/bold-n.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(eu) { - background-image: url("themes/mediawiki/images/icons/bold-l.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(fi) { - background-image: url("themes/mediawiki/images/icons/bold-l.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(fa) { - background-image: url("themes/mediawiki/images/icons/bold-arab-dad.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-dad.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(fr) { - background-image: url("themes/mediawiki/images/icons/bold-g.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(it) { - background-image: url("themes/mediawiki/images/icons/bold-g.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(hy) { - background-image: url("themes/mediawiki/images/icons/bold-armn-to.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-armn-to.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(ka) { - background-image: url("themes/mediawiki/images/icons/bold-geor-man.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-geor-man.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(ky) { - background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(ru) { - background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(nl) { - background-image: url("themes/mediawiki/images/icons/bold-v.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-v.png"); -} -/* @noflip */ -.oo-ui-icon-bold:lang(os) { - background-image: url("themes/mediawiki/images/icons/bold-cyrl-be.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-be.png"); -} -.oo-ui-icon-italic { - background-image: url("themes/mediawiki/images/icons/italic-a.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-a.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(ar) { - background-image: url("themes/mediawiki/images/icons/italic-arab-meem.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-meem.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(cs) { - background-image: url("themes/mediawiki/images/icons/italic-i.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(en) { - background-image: url("themes/mediawiki/images/icons/italic-i.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(fr) { - background-image: url("themes/mediawiki/images/icons/italic-i.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(he) { - background-image: url("themes/mediawiki/images/icons/italic-i.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(ml) { - background-image: url("themes/mediawiki/images/icons/italic-i.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(pl) { - background-image: url("themes/mediawiki/images/icons/italic-i.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(pt) { - background-image: url("themes/mediawiki/images/icons/italic-i.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(be) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(da) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(de) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(fi) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(ky) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(nn) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(no) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(os) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(sv) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(ru) { - background-image: url("themes/mediawiki/images/icons/italic-k.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(es) { - background-image: url("themes/mediawiki/images/icons/italic-c.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(gl) { - background-image: url("themes/mediawiki/images/icons/italic-c.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(it) { - background-image: url("themes/mediawiki/images/icons/italic-c.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(nl) { - background-image: url("themes/mediawiki/images/icons/italic-c.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(eu) { - background-image: url("themes/mediawiki/images/icons/italic-e.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-e.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(fa) { - background-image: url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(hu) { - background-image: url("themes/mediawiki/images/icons/italic-d.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-d.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(hy) { - background-image: url("themes/mediawiki/images/icons/italic-armn-sha.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-armn-sha.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(ksh) { - background-image: url("themes/mediawiki/images/icons/italic-s.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-s.png"); -} -/* @noflip */ -.oo-ui-icon-italic:lang(ka) { - background-image: url("themes/mediawiki/images/icons/italic-geor-kan.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-geor-kan.png"); -} -.oo-ui-icon-strikethrough { - background-image: url("themes/mediawiki/images/icons/strikethrough-a.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-a.png"); -} -/* @noflip */ -.oo-ui-icon-strikethrough:lang(en) { - background-image: url("themes/mediawiki/images/icons/strikethrough-s.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-s.png"); -} -/* @noflip */ -.oo-ui-icon-strikethrough:lang(fi) { - background-image: url("themes/mediawiki/images/icons/strikethrough-y.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-y.png"); -} -.oo-ui-icon-underline { - background-image: url("themes/mediawiki/images/icons/underline-a.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-a.png"); -} -/* @noflip */ -.oo-ui-icon-underline:lang(en) { - background-image: url("themes/mediawiki/images/icons/underline-u.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-u.png"); -} -.oo-ui-icon-textLanguage { - background-image: url("themes/mediawiki/images/icons/language.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/language.png"); -} -.oo-ui-icon-textDirLTR { - background-image: url("themes/mediawiki/images/icons/text-dir-lefttoright.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-lefttoright.png"); -} -.oo-ui-icon-textDirRTL { - background-image: url("themes/mediawiki/images/icons/text-dir-righttoleft.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-righttoleft.png"); -} -.oo-ui-icon-textStyle { - background-image: url("themes/mediawiki/images/icons/text-style.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-style.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css deleted file mode 100644 index 23bad66d..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css +++ /dev/null @@ -1,106 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-beta { - background-image: url("themes/mediawiki/images/icons/beta.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/beta.png"); -} -.oo-ui-icon-betaLaunch { - background-image: url("themes/mediawiki/images/icons/betaLaunch.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/betaLaunch.png"); -} -.oo-ui-icon-bookmark { - background-image: url("themes/mediawiki/images/icons/bookmark-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bookmark-ltr.png"); -} -.oo-ui-icon-browser { - background-image: url("themes/mediawiki/images/icons/browser-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/browser-ltr.png"); -} -.oo-ui-icon-clear { - background-image: url("themes/mediawiki/images/icons/clear.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clear.png"); -} -.oo-ui-icon-clock { - background-image: url("themes/mediawiki/images/icons/clock.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clock.png"); -} -.oo-ui-icon-funnel { - background-image: url("themes/mediawiki/images/icons/funnel-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/funnel-ltr.png"); -} -.oo-ui-icon-heart { - background-image: url("themes/mediawiki/images/icons/heart.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/heart.png"); -} -.oo-ui-icon-key { - background-image: url("themes/mediawiki/images/icons/key-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/key-ltr.png"); -} -.oo-ui-icon-keyboard { - background-image: url("themes/mediawiki/images/icons/keyboard-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/keyboard-ltr.png"); -} -.oo-ui-icon-logOut { - background-image: url("themes/mediawiki/images/icons/logOut-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logOut-ltr.png"); -} -.oo-ui-icon-newWindow { - background-image: url("themes/mediawiki/images/icons/newWindow-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newWindow-ltr.png"); -} -.oo-ui-icon-printer { - background-image: url("themes/mediawiki/images/icons/printer-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/printer-ltr.png"); -} -.oo-ui-icon-ribbonPrize { - background-image: url("themes/mediawiki/images/icons/ribbonPrize.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ribbonPrize.png"); -} -.oo-ui-icon-sun { - background-image: url("themes/mediawiki/images/icons/sun-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/sun-ltr.png"); -} -.oo-ui-icon-watchlist { - background-image: url("themes/mediawiki/images/icons/watchlist-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/watchlist-ltr.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css deleted file mode 100644 index 35ad9012..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css +++ /dev/null @@ -1,100 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-stripeFlow { - background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeFlow-ltr.png"); -} -.oo-ui-icon-stripeFlow-invert { - background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.png"); -} -.oo-ui-icon-stripeSideMenu { - background-image: url("themes/mediawiki/images/icons/stripeSideMenu.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSideMenu.png"); -} -.oo-ui-icon-stripeSideMenu-invert { - background-image: url("themes/mediawiki/images/icons/stripeSideMenu-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSideMenu-invert.png"); -} -.oo-ui-icon-stripeSummary { - background-image: url("themes/mediawiki/images/icons/stripeSummary-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSummary-ltr.png"); -} -.oo-ui-icon-stripeSummary-invert { - background-image: url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.png"); -} -.oo-ui-icon-stripeToC { - background-image: url("themes/mediawiki/images/icons/stripeToC-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr.png"); -} -.oo-ui-icon-stripeToC-progressive { - background-image: url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.png"); -} -.oo-ui-icon-stripeToC-invert { - background-image: url("themes/mediawiki/images/icons/stripeToC-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr-invert.png"); -} -.oo-ui-icon-viewCompact { - background-image: url("themes/mediawiki/images/icons/viewCompact.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewCompact.png"); -} -.oo-ui-icon-viewCompact-invert { - background-image: url("themes/mediawiki/images/icons/viewCompact-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewCompact-invert.png"); -} -.oo-ui-icon-viewDetails { - background-image: url("themes/mediawiki/images/icons/viewDetails-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewDetails-ltr.png"); -} -.oo-ui-icon-viewDetails-invert { - background-image: url("themes/mediawiki/images/icons/viewDetails-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewDetails-ltr-invert.png"); -} -.oo-ui-icon-visionSimulator { - background-image: url("themes/mediawiki/images/icons/visionSimulator.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/visionSimulator.png"); -} -.oo-ui-icon-visionSimulator-invert { - background-image: url("themes/mediawiki/images/icons/visionSimulator-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/visionSimulator-invert.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css deleted file mode 100644 index d7dad243..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css +++ /dev/null @@ -1,34 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-map { - background-image: url("themes/mediawiki/images/icons/map-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/map-ltr.png"); -} -.oo-ui-icon-mapPin { - background-image: url("themes/mediawiki/images/icons/mapPin.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPin.png"); -} -.oo-ui-icon-mapPinAdd { - background-image: url("themes/mediawiki/images/icons/mapPinAdd-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPinAdd-ltr.png"); -} -.oo-ui-icon-wikitrail { - background-image: url("themes/mediawiki/images/icons/wikitrail-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikitrail-ltr.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css deleted file mode 100644 index 650cfa2f..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css +++ /dev/null @@ -1,46 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-image { - background-image: url("themes/mediawiki/images/icons/image-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/image-ltr.png"); -} -.oo-ui-icon-imageAdd { - background-image: url("themes/mediawiki/images/icons/imageAdd-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageAdd-ltr.png"); -} -.oo-ui-icon-imageLock { - background-image: url("themes/mediawiki/images/icons/imageLock-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageLock-ltr.png"); -} -.oo-ui-icon-photoGallery { - background-image: url("themes/mediawiki/images/icons/photoGallery-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/photoGallery-ltr.png"); -} -.oo-ui-icon-play { - background-image: url("themes/mediawiki/images/icons/play-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/play-ltr.png"); -} -.oo-ui-icon-stop { - background-image: url("themes/mediawiki/images/icons/stop.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stop.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css deleted file mode 100644 index 97eb0d52..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css +++ /dev/null @@ -1,148 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-block { - background-image: url("themes/mediawiki/images/icons/block.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block.png"); -} -.oo-ui-icon-block-destructive { - background-image: url("themes/mediawiki/images/icons/block-destructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-destructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-destructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block-destructive.png"); -} -.oo-ui-icon-block-invert { - background-image: url("themes/mediawiki/images/icons/block-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block-invert.png"); -} -.oo-ui-icon-blockUndo { - background-image: url("themes/mediawiki/images/icons/blockUndo-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/blockUndo-ltr.png"); -} -.oo-ui-icon-blockUndo-invert { - background-image: url("themes/mediawiki/images/icons/blockUndo-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/blockUndo-ltr-invert.png"); -} -.oo-ui-icon-flag { - background-image: url("themes/mediawiki/images/icons/flag-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flag-ltr.png"); -} -.oo-ui-icon-flag-invert { - background-image: url("themes/mediawiki/images/icons/flag-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flag-ltr-invert.png"); -} -.oo-ui-icon-flagUndo { - background-image: url("themes/mediawiki/images/icons/flagUndo-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flagUndo-ltr.png"); -} -.oo-ui-icon-flagUndo-invert { - background-image: url("themes/mediawiki/images/icons/flagUndo-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flagUndo-ltr-invert.png"); -} -.oo-ui-icon-lock { - background-image: url("themes/mediawiki/images/icons/lock-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr.png"); -} -.oo-ui-icon-lock-destructive { - background-image: url("themes/mediawiki/images/icons/lock-ltr-destructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-destructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-destructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr-destructive.png"); -} -.oo-ui-icon-lock-invert { - background-image: url("themes/mediawiki/images/icons/lock-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr-invert.png"); -} -.oo-ui-icon-star { - background-image: url("themes/mediawiki/images/icons/star.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/star.png"); -} -.oo-ui-icon-star-invert { - background-image: url("themes/mediawiki/images/icons/star-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/star-invert.png"); -} -.oo-ui-icon-trash { - background-image: url("themes/mediawiki/images/icons/trash.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trash.png"); -} -.oo-ui-icon-trash-invert { - background-image: url("themes/mediawiki/images/icons/trash-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trash-invert.png"); -} -.oo-ui-icon-trashUndo { - background-image: url("themes/mediawiki/images/icons/trashUndo-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trashUndo-ltr.png"); -} -.oo-ui-icon-trashUndo-invert { - background-image: url("themes/mediawiki/images/icons/trashUndo-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trashUndo-ltr-invert.png"); -} -.oo-ui-icon-unLock { - background-image: url("themes/mediawiki/images/icons/unLock-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr.png"); -} -.oo-ui-icon-unLock-destructive { - background-image: url("themes/mediawiki/images/icons/unLock-ltr-destructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-destructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-destructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr-destructive.png"); -} -.oo-ui-icon-unLock-invert { - background-image: url("themes/mediawiki/images/icons/unLock-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr-invert.png"); -} -.oo-ui-icon-unStar { - background-image: url("themes/mediawiki/images/icons/unStar.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unStar.png"); -} -.oo-ui-icon-unStar-invert { - background-image: url("themes/mediawiki/images/icons/unStar-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unStar-invert.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css deleted file mode 100644 index 148b54e5..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css +++ /dev/null @@ -1,64 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-arrowNext { - background-image: url("themes/mediawiki/images/icons/arrow-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-ltr.png"); -} -.oo-ui-icon-arrowLast { - background-image: url("themes/mediawiki/images/icons/arrow-rtl.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-rtl.png"); -} -.oo-ui-icon-caretNext { - background-image: url("themes/mediawiki/images/icons/caret-rtl.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-rtl.png"); -} -.oo-ui-icon-caretLast { - background-image: url("themes/mediawiki/images/icons/caret-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-ltr.png"); -} -.oo-ui-icon-caretDown { - background-image: url("themes/mediawiki/images/icons/caretDown.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretDown.png"); -} -.oo-ui-icon-caretUp { - background-image: url("themes/mediawiki/images/icons/caretUp.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretUp.png"); -} -.oo-ui-icon-downTriangle { - background-image: url("themes/mediawiki/images/icons/downTriangle.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/downTriangle.png"); -} -.oo-ui-icon-move { - background-image: url("themes/mediawiki/images/icons/move.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move.png"); -} -.oo-ui-icon-upTriangle { - background-image: url("themes/mediawiki/images/icons/upTriangle.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upTriangle.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css deleted file mode 100644 index 9eabc174..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css +++ /dev/null @@ -1,34 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-userActive { - background-image: url("themes/mediawiki/images/icons/userActive-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userActive-ltr.png"); -} -.oo-ui-icon-userAvatar { - background-image: url("themes/mediawiki/images/icons/userAvatar.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userAvatar.png"); -} -.oo-ui-icon-userInactive { - background-image: url("themes/mediawiki/images/icons/userInactive-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userInactive-ltr.png"); -} -.oo-ui-icon-userTalk { - background-image: url("themes/mediawiki/images/icons/userTalk-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userTalk-ltr.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css deleted file mode 100644 index 0c905d08..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css +++ /dev/null @@ -1,28 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -.oo-ui-icon-logoCC { - background-image: url("themes/mediawiki/images/icons/logo-cc.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-cc.png"); -} -.oo-ui-icon-logoWikimediaCommons { - background-image: url("themes/mediawiki/images/icons/logo-wikimediaCommons.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikimediaCommons.png"); -} -.oo-ui-icon-logoWikipedia { - background-image: url("themes/mediawiki/images/icons/logo-wikipedia.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikipedia.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css index 12e80c11..a19ebeab 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.11.3 + * OOjs UI v0.12.12 * https://www.mediawiki.org/wiki/OOjs_UI * - * Copyright 2011–2015 OOjs Team and other contributors. + * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-05-12T12:15:44Z + * Date: 2015-10-13T20:38:26Z */ @-webkit-keyframes oo-ui-progressBarWidget-slide { from { @@ -82,8 +82,6 @@ .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { display: inline-block; vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; } .oo-ui-buttonElement-frameless { display: inline-block; @@ -109,6 +107,7 @@ } .oo-ui-buttonElement > .oo-ui-buttonElement-button { font-weight: bold; + text-decoration: none; } .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { margin-left: 0; @@ -116,7 +115,6 @@ .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { width: 0.9375em; height: 0.9375em; - margin: 0.46875em; } .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { margin-left: 0.46875em; @@ -136,18 +134,25 @@ margin-left: 0.25em; margin-right: 0.25em; } +.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button { + padding-left: 0.25em; + padding-right: 0.25em; + color: #333333; +} +.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > input.oo-ui-buttonElement-button, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { color: #555555; } +.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > input.oo-ui-buttonElement-button, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { color: #444444; } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label { - color: #347bff; + color: #2962cc; } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #777777; + color: #347bff; } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { @@ -156,10 +161,10 @@ } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label { - color: #00af89; + color: #008064; } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #777777; + color: #00af89; } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { @@ -168,10 +173,10 @@ } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label { - color: #d11d13; + color: #8c130d; } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #777777; + color: #d11d13; } .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label, .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { @@ -181,19 +186,29 @@ .oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button { color: #cccccc; } +.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus { + box-shadow: none; +} .oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon, .oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { opacity: 0.2; } +.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button, +.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button { + padding-left: 2.4em; +} .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { margin: 0.1em 0; - padding: 0.2em 0.8em; + padding: 0.5em 1em; + min-height: 1.2em; + min-width: 1em; border-radius: 2px; - -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; + position: relative; + -webkit-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease; + -moz-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease; + -ms-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease; + -o-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease; + transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease; } .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover, .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus { @@ -201,25 +216,29 @@ } .oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button, .oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - line-height: 1.875em; + line-height: 1.2em; + display: inline-block; } .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - margin-left: -0.5em; - margin-right: -0.5em; + position: absolute; + top: 0.2em; + left: 0.5625em; } -.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - margin-right: 0.3em; +.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + margin-left: 0.3em; } .oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { - /* -0.5 - 0.475 */ - margin-left: -0.005em; - margin-right: -0.005em; + display: inline-block; } .oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator, .oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { margin-left: 0.46875em; margin-right: -0.275em; } +.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { + position: relative; + left: 0.2em; +} .oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button { color: #ffffff; background: #dddddd; @@ -257,7 +276,7 @@ box-shadow: inset 0 0 0 1px #1f4999; border-color: #1f4999; } -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { color: #1f4999; border-color: #1f4999; @@ -278,7 +297,7 @@ box-shadow: inset 0 0 0 1px #005946; border-color: #005946; } -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { color: #005946; border-color: #005946; @@ -299,7 +318,7 @@ box-shadow: inset 0 0 0 1px #73100a; border-color: #73100a; } -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { color: #73100a; border-color: #73100a; @@ -322,7 +341,7 @@ box-shadow: inset 0 0 0 1px #ffffff; border-color: #347bff; } -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { color: #ffffff; background-color: #1f4999; @@ -346,7 +365,7 @@ box-shadow: inset 0 0 0 1px #ffffff; border-color: #00af89; } -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { color: #ffffff; background-color: #005946; @@ -370,7 +389,7 @@ box-shadow: inset 0 0 0 1px #ffffff; border-color: #d11d13; } -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, +.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { color: #ffffff; background-color: #73100a; @@ -411,16 +430,21 @@ .oo-ui-iconElement.oo-ui-iconElement-icon { background-size: contain; background-position: center center; + background-repeat: no-repeat; } .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator, .oo-ui-indicatorElement.oo-ui-indicatorElement-indicator { background-size: contain; background-position: center center; + background-repeat: no-repeat; } .oo-ui-lookupElement > .oo-ui-menuSelectWidget { z-index: 1; width: 100%; } +.oo-ui-pendingElement-pending { + background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif); +} .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable { overflow-y: hidden; } @@ -468,6 +492,12 @@ .oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout { padding: 1.5em; } +.oo-ui-indexLayout > .oo-ui-menuLayout-menu { + height: 2.75em; +} +.oo-ui-indexLayout > .oo-ui-menuLayout-content { + top: 2.75em; +} .oo-ui-fieldLayout { display: block; margin-bottom: 1em; @@ -541,13 +571,30 @@ .oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child { margin-right: 0; } -.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label { +.oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { color: #cccccc; } -.oo-ui-actionFieldLayout-field { +.oo-ui-fieldLayout-messages { + list-style: none none; + margin: 0; + padding: 0; + margin-top: 0.25em; + margin-left: 0.25em; +} +.oo-ui-fieldLayout-messages > li { + margin: 0; + padding: 0; display: table; - table-layout: fixed; - width: 100%; +} +.oo-ui-fieldLayout-messages .oo-ui-iconWidget { + display: table-cell; + border-right: 0.5em solid transparent; +} +.oo-ui-fieldLayout-messages .oo-ui-labelWidget { + display: table-cell; + padding: 0; + line-height: 1.875em; + vertical-align: middle; } .oo-ui-actionFieldLayout-input, .oo-ui-actionFieldLayout-button { @@ -570,8 +617,6 @@ .oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon { display: block; position: absolute; - background-position: center center; - background-repeat: no-repeat; } .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label { display: inline-block; @@ -626,11 +671,11 @@ .oo-ui-menuLayout-menu, .oo-ui-menuLayout-content { position: absolute; - -webkit-transition: all ease-in-out 200ms; - -moz-transition: all ease-in-out 200ms; - -ms-transition: all ease-in-out 200ms; - -o-transition: all ease-in-out 200ms; - transition: all ease-in-out 200ms; + -webkit-transition: all 200ms ease; + -moz-transition: all 200ms ease; + -ms-transition: all 200ms ease; + -o-transition: all 200ms ease; + transition: all 200ms ease; } .oo-ui-menuLayout-menu { height: 18em; @@ -642,57 +687,57 @@ right: 18em; bottom: 18em; } -.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-menu { +.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu > .oo-ui-menuLayout-menu { width: 0 !important; height: 0 !important; overflow: hidden; } -.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-content { +.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu > .oo-ui-menuLayout-content { top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-menu { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top > .oo-ui-menuLayout-menu { width: auto !important; left: 0; top: 0; right: 0; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-content { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top > .oo-ui-menuLayout-content { right: 0 !important; bottom: 0 !important; left: 0 !important; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-menu { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after > .oo-ui-menuLayout-menu { height: auto !important; top: 0; right: 0; bottom: 0; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-content { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after > .oo-ui-menuLayout-content { bottom: 0 !important; left: 0 !important; top: 0 !important; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom > .oo-ui-menuLayout-menu { width: auto !important; right: 0; bottom: 0; left: 0; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom > .oo-ui-menuLayout-content { left: 0 !important; top: 0 !important; right: 0 !important; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-menu { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before > .oo-ui-menuLayout-menu { height: auto !important; bottom: 0; left: 0; top: 0; } -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-content { +.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before > .oo-ui-menuLayout-content { top: 0 !important; right: 0 !important; bottom: 0 !important; @@ -718,10 +763,31 @@ border-radius: 0.2em; box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2); } +.oo-ui-panelLayout-padded.oo-ui-panelLayout-framed { + margin: 1em 0; +} .oo-ui-stackLayout-continuous > .oo-ui-panelLayout { display: block; position: relative; } +.oo-ui-horizontalLayout > .oo-ui-widget { + display: inline-block; + vertical-align: middle; +} +.oo-ui-horizontalLayout > .oo-ui-layout { + display: inline-block; +} +.oo-ui-horizontalLayout > .oo-ui-layout, +.oo-ui-horizontalLayout > .oo-ui-widget { + margin-right: 0.5em; +} +.oo-ui-horizontalLayout > .oo-ui-layout:last-child, +.oo-ui-horizontalLayout > .oo-ui-widget:last-child { + margin-right: 0; +} +.oo-ui-horizontalLayout .oo-ui-fieldLayout { + margin-bottom: 0; +} .oo-ui-popupTool .oo-ui-popupWidget-popup, .oo-ui-popupTool .oo-ui-popupWidget-anchor { z-index: 4; @@ -761,10 +827,6 @@ .oo-ui-toolGroup .oo-ui-tool-link { text-decoration: none; } -.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon { - background-position: center center; - background-repeat: no-repeat; -} .oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup { margin-left: 0; } @@ -800,6 +862,7 @@ display: inline; } .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link { + outline: 0; cursor: default; } .oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link { @@ -865,10 +928,9 @@ .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator, .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { position: absolute; - background-position: center center; - background-repeat: no-repeat; } .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle { + outline: 0; cursor: default; } .oo-ui-popupToolGroup .oo-ui-toolGroup-tools { @@ -876,10 +938,6 @@ position: absolute; z-index: 4; } -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon { - background-repeat: no-repeat; - background-position: center center; -} .oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools { display: block; } @@ -1003,7 +1061,7 @@ } .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { padding-left: 0.5em; - color: #000000; + color: #555555; } .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel, .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { @@ -1088,6 +1146,9 @@ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg"); background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg"); background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png"); + background-size: contain; + background-position: center center; + background-repeat: no-repeat; } .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { background-color: #eeeeee; @@ -1163,13 +1224,19 @@ background: none; box-shadow: none; } -.oo-ui-toolbar-actions > .oo-ui-buttonElement { - margin-top: 0.25em; - margin-bottom: 0.25em; +.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement { + margin: 0; } -.oo-ui-toolbar-actions > .oo-ui-toolbar, -.oo-ui-toolbar-actions > .oo-ui-buttonElement:last-child { - margin-right: 0.5em; +.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button { + border: 0; + border-radius: 0; + margin: 0; + padding: 0 0.3125em; +} +.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { + margin: 0 1em; + line-height: 3.125em; + /* 40/12.8 */ } .oo-ui-optionWidget { position: relative; @@ -1208,8 +1275,6 @@ .oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon, .oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator { position: absolute; - background-repeat: no-repeat; - background-position: center center; } .oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, .oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { @@ -1264,9 +1329,6 @@ display: inline-block; vertical-align: middle; } -.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button { - height: 1.875em; -} .oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { margin-top: 0; } @@ -1307,8 +1369,6 @@ .oo-ui-iconWidget { display: inline-block; vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; line-height: 2.5em; height: 1.875em; width: 1.875em; @@ -1319,8 +1379,6 @@ .oo-ui-indicatorWidget { display: inline-block; vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; line-height: 2.5em; height: 0.9375em; width: 0.9375em; @@ -1388,9 +1446,15 @@ -o-transform: translateZ(0px); transform: translateZ(0px); height: 2em; - width: 4em; + width: 3.5em; border-radius: 1em; - border: 1px #dddddd solid; + border: 1px #555555 solid; + background: #ffffff; + -webkit-transition: background-color 100ms ease; + -moz-transition: background-color 100ms ease; + -ms-transition: background-color 100ms ease; + -o-transition: background-color 100ms ease; + transition: background-color 100ms ease; margin-right: 0.5em; } .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { @@ -1422,55 +1486,63 @@ margin-right: 0; } .oo-ui-toggleSwitchWidget-grip { - top: 0.25em; - left: 0.25em; - width: 1.5em; - height: 1.5em; + top: 0.5em; + left: 0.5em; + width: 1em; + height: 1em; margin-top: -1px; border-radius: 1em; - border: 1px #dddddd solid; - background-color: #f7f7f7; - -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; + background: #555555; + -webkit-transition: left 100ms ease, margin-left 100ms ease; + -moz-transition: left 100ms ease, margin-left 100ms ease; + -ms-transition: left 100ms ease, margin-left 100ms ease; + -o-transition: left 100ms ease, margin-left 100ms ease; + transition: left 100ms ease, margin-left 100ms ease; } .oo-ui-toggleSwitchWidget-glow { - border-radius: 1em; - background-color: #f7f7f7; - -webkit-transition: background-color 0.1s ease-in-out; - -moz-transition: background-color 0.1s ease-in-out; - -ms-transition: background-color 0.1s ease-in-out; - -o-transition: background-color 0.1s ease-in-out; - transition: background-color 0.1s ease-in-out; + display: none; } .oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { - left: 2.25em; + left: 2em; margin-left: -2px; } -.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: block; -} .oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip { - left: 0.25em; + left: 0.5em; margin-left: 0; } -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled { - border: 1px #cccccc solid; +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on { + background: #347bff; + border-color: #347bff; +} +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { + background: #ffffff; +} +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus { + outline: none; + border-color: #347bff; +} +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus.oo-ui-toggleWidget-on { + border-color: #ffffff; + box-shadow: 0 0 0 1px #347bff; } .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover { - border-color: #aaaaaa; + border-color: #2962cc; + box-shadow: 0 0 0 1px #2962cc; } -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip { - background-color: #ffffff; - border-color: #aaaaaa; +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover.oo-ui-toggleWidget-on { + background: #2962cc; + border-color: #2962cc; } -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow { - background-color: #d0d0d0; +.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { + background: #ffffff; } -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - background-color: #ffffff; +.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { + background: #dddddd; + border-color: #dddddd; + outline: 0; +} +.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled .oo-ui-toggleSwitchWidget-grip { + background: #ffffff; } .oo-ui-progressBarWidget { max-width: 50em; @@ -1500,9 +1572,6 @@ .oo-ui-progressBarWidget.oo-ui-widget-disabled { opacity: 0.6; } -.oo-ui-actionWidget.oo-ui-pendingElement-pending { - background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif); -} .oo-ui-popupWidget { position: absolute; /* @noflip */ @@ -1532,10 +1601,10 @@ -ms-user-select: none; user-select: none; } -.oo-ui-popupWidget-head .oo-ui-buttonWidget { +.oo-ui-popupWidget-head > .oo-ui-buttonWidget { float: right; } -.oo-ui-popupWidget-head .oo-ui-labelElement-label { +.oo-ui-popupWidget-head > .oo-ui-labelElement-label { float: left; cursor: default; } @@ -1547,7 +1616,7 @@ border: 1px solid #aaaaaa; border-radius: 0.2em; background-color: #ffffff; - box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 0.15em 0 0 rgba(0, 0, 0, 0.15); } .oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup { margin-top: 9px; @@ -1575,19 +1644,19 @@ border-width: 9px; } .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup { - -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; + -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease; + -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease; + -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease; + -o-transition: width 100ms ease, height 100ms ease, left 100ms ease; + transition: width 100ms ease, height 100ms ease, left 100ms ease; } .oo-ui-popupWidget-head { height: 2.5em; } -.oo-ui-popupWidget-head .oo-ui-buttonWidget { +.oo-ui-popupWidget-head > .oo-ui-buttonWidget { margin: 0.25em; } -.oo-ui-popupWidget-head .oo-ui-labelElement-label { +.oo-ui-popupWidget-head > .oo-ui-labelElement-label { margin: 0.75em 1em; } .oo-ui-popupWidget-body-padded { @@ -1618,6 +1687,12 @@ display: inline-block; vertical-align: middle; } +.oo-ui-buttonInputWidget > button, +.oo-ui-buttonInputWidget > input { + border: 0; + padding: 0; + background-color: transparent; +} .oo-ui-checkboxInputWidget { position: relative; line-height: 1.6em; @@ -1631,18 +1706,18 @@ opacity: 0; z-index: 1; position: relative; + cursor: pointer; margin: 0; width: 1.6em; height: 1.6em; max-width: none; } .oo-ui-checkboxInputWidget input[type="checkbox"] + span { - cursor: pointer; - -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); + -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; @@ -1705,14 +1780,17 @@ box-sizing: border-box; } .oo-ui-dropdownInputWidget select { - height: 2.5em; - padding: 0.5em; + background: #ffffff; + height: 2.275em; font-size: inherit; font-family: inherit; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; border: 1px solid #cccccc; + border-radius: 0.1em; + padding-left: 1em; + vertical-align: middle; } .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover, .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus { @@ -1737,18 +1815,18 @@ opacity: 0; z-index: 1; position: relative; + cursor: pointer; margin: 0; width: 1.6em; height: 1.6em; max-width: none; } .oo-ui-radioInputWidget input[type="radio"] + span { - cursor: pointer; - -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); + -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; @@ -1793,6 +1871,9 @@ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg"); background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png"); } +.oo-ui-radioSelectInputWidget .oo-ui-fieldLayout { + margin-bottom: 0; +} .oo-ui-textInputWidget { position: relative; vertical-align: middle; @@ -1811,6 +1892,21 @@ -moz-box-sizing: border-box; box-sizing: border-box; } +.oo-ui-textInputWidget input[type="search"] { + -webkit-appearance: none; +} +.oo-ui-textInputWidget input[type="search"]::-ms-clear { + display: none; +} +.oo-ui-textInputWidget input[type="search"]::-ms-reveal { + display: none; +} +.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration, +.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button, +.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button, +.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-decoration { + display: none; +} .oo-ui-textInputWidget > .oo-ui-iconElement-icon, .oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator, .oo-ui-textInputWidget > .oo-ui-labelElement-label { @@ -1822,7 +1918,6 @@ position: absolute; top: 0; height: 100%; - background-repeat: no-repeat; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; @@ -1831,6 +1926,9 @@ } .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon, .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator { + cursor: text; +} +.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-textInputWidget-type-search > .oo-ui-indicatorElement-indicator { cursor: pointer; } .oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label { @@ -1855,6 +1953,7 @@ .oo-ui-textInputWidget input, .oo-ui-textInputWidget textarea { padding: 0.5em; + line-height: 1.275em; margin: 0; font-size: inherit; font-family: inherit; @@ -1863,29 +1962,29 @@ border: solid 1px #cccccc; box-shadow: inset 0 0 0 0 #347bff; border-radius: 0.1em; - -webkit-transition: box-shadow 0.1s ease-in-out; - -moz-transition: box-shadow 0.1s ease-in-out; - -ms-transition: box-shadow 0.1s ease-in-out; - -o-transition: box-shadow 0.1s ease-in-out; - transition: box-shadow 0.1s ease-in-out; + -webkit-transition: box-shadow 100ms ease; + -moz-transition: box-shadow 100ms ease; + -ms-transition: box-shadow 100ms ease; + -o-transition: box-shadow 100ms ease; + transition: box-shadow 100ms ease; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -.oo-ui-textInputWidget-decorated input, -.oo-ui-textInputWidget-decorated textarea { - padding-left: 2em; +.oo-ui-textInputWidget input.oo-ui-pendingElement-pending, +.oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending { + background-color: transparent; } .oo-ui-textInputWidget-icon { width: 2em; } .oo-ui-textInputWidget.oo-ui-widget-enabled input, .oo-ui-textInputWidget.oo-ui-widget-enabled textarea { - -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); + -webkit-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); + -moz-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); + -ms-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); + -o-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); + transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1); } .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus, .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { @@ -1928,25 +2027,20 @@ color: #dddddd; text-shadow: 0 1px 1px #ffffff; } -.oo-ui-textInputWidget.oo-ui-pendingElement-pending input, -.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea { - background-color: transparent; - background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif); -} .oo-ui-textInputWidget.oo-ui-iconElement input, .oo-ui-textInputWidget.oo-ui-iconElement textarea { - padding-left: 2.75em; + padding-left: 2.875em; } .oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon { - left: 0.4em; + left: 0; width: 1.875em; - margin-left: 0.1em; + margin-left: 0.5em; height: 100%; background-position: right center; } .oo-ui-textInputWidget.oo-ui-indicatorElement input, .oo-ui-textInputWidget.oo-ui-indicatorElement textarea { - padding-right: 1.875em; + padding-right: 2.4875em; } .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { width: 0.9375em; @@ -1959,10 +2053,10 @@ color: #888888; } .oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label { - margin-right: 2em; + margin-right: 2.0875em; } .oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label { - margin-left: 2.5em; + margin-right: 2.475em; } .oo-ui-menuSelectWidget { position: absolute; @@ -1970,8 +2064,7 @@ margin-top: -1px; border: 1px solid #aaaaaa; border-radius: 0 0 0.2em 0.2em; - padding-bottom: 0.25em; - box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 0.15em 0 0 rgba(0, 0, 0, 0.15); } .oo-ui-menuSelectWidget input { position: absolute; @@ -2015,9 +2108,9 @@ .oo-ui-dropdownWidget { display: inline-block; position: relative; - margin: 0.25em 0; width: 100%; max-width: 50em; + background: #ffffff; margin-right: 0.5em; } .oo-ui-dropdownWidget-handle { @@ -2036,8 +2129,6 @@ .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator, .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { position: absolute; - background-position: center center; - background-repeat: no-repeat; } .oo-ui-dropdownWidget > .oo-ui-menuSelectWidget { z-index: 1; @@ -2050,7 +2141,8 @@ margin-right: 0; } .oo-ui-dropdownWidget-handle { - height: 2.5em; + padding: 0.5em 0; + height: 2.275em; border: 1px solid #cccccc; border-radius: 0.1em; } @@ -2061,7 +2153,7 @@ left: 0.25em; } .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { - line-height: 2.5em; + line-height: 1.275em; margin: 0 1em; } .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { @@ -2085,6 +2177,9 @@ border-color: #dddddd; background-color: #f3f3f3; } +.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle:focus { + outline: 0; +} .oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { opacity: 0.2; } @@ -2097,6 +2192,188 @@ .oo-ui-dropdownWidget .oo-ui-selectWidget { border-top-color: #ffffff; } +.oo-ui-selectFileWidget { + display: inline-block; + vertical-align: middle; + width: 100%; + max-width: 50em; + margin-right: 0.5em; +} +.oo-ui-selectFileWidget-selectButton { + display: table-cell; + vertical-align: middle; +} +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button { + position: relative; + overflow: hidden; +} +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] { + position: absolute; + margin: 0; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 100%; + opacity: 0; + z-index: 1; + cursor: pointer; + /* Push the button part of the native control out of view, as it changes the cursor */ + padding-top: 100px; +} +.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] { + display: none; +} +.oo-ui-selectFileWidget-info { + width: 100%; + display: table-cell; + vertical-align: middle; + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + text-overflow: ellipsis; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType { + float: right; +} +.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator, +.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon, +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton { + position: absolute; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton { + z-index: 2; +} +.oo-ui-selectFileWidget-dropTarget { + cursor: default; +} +.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget { + cursor: pointer; +} +.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton, +.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton { + display: none; +} +.oo-ui-selectFileWidget:last-child { + margin-right: 0; +} +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button { + margin: 0 0 0 0.5em; +} +.oo-ui-selectFileWidget-info { + height: 2.4em; + border: 1px solid #cccccc; + border-radius: 0.1em; +} +.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { + right: 0; +} +.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { + left: 0; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label { + line-height: 2.3em; + margin: 0; + overflow: hidden; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + left: 0.5em; + right: 0.5em; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType { + color: #888888; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton { + top: 0; + width: 1.875em; + margin-right: 0; +} +.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { + height: 2.3em; +} +.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { + top: 0; + width: 0.9375em; + height: 2.3em; + margin-right: 0.775em; +} +.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon { + top: 0; + width: 1.875em; + height: 2.3em; + margin-left: 0.5em; +} +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; +} +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon, +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label { + color: #cccccc; +} +.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + left: 2.875em; +} +.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 2.375em; +} +.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton { + right: 0; +} +.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 4.4625em; +} +.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton { + right: 2.0875em; +} +.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label, +.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 0.5em; +} +.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label, +.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label { + right: 2em; +} +.oo-ui-selectFileWidget-dropTarget { + line-height: 3.5em; + border: 1px dashed #cccccc; + padding: 0.5em 1em; + margin-bottom: 0.5em; + background: #ffffff; + text-align: center; + vertical-align: middle; +} +.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover { + background-color: #eeeeee; +} +.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget { + background: rgba(52, 123, 255, 0.1); +} +.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget, +.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; +} .oo-ui-outlineOptionWidget { position: relative; cursor: pointer; @@ -2162,7 +2439,6 @@ .oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon { float: left; background-position: right center; - background-repeat: no-repeat; } .oo-ui-outlineControlsWidget-items { float: left; @@ -2224,6 +2500,155 @@ background-color: #ffffff; color: #333333; } +.oo-ui-capsuleMultiSelectWidget { + display: inline-block; + position: relative; + width: 100%; + max-width: 50em; +} +.oo-ui-capsuleMultiSelectWidget-handle { + width: 100%; + display: inline-block; + position: relative; +} +.oo-ui-capsuleMultiSelectWidget-group { + display: inline; +} +.oo-ui-capsuleMultiSelectWidget > .oo-ui-menuSelectWidget { + z-index: 1; + width: 100%; +} +.oo-ui-capsuleMultiSelectWidget-handle { + background-color: #ffffff; + cursor: text; + min-height: 2.4em; + margin-right: 0.5em; + padding: 0.25em 0; + border: 1px solid #cccccc; + border-radius: 0.1em; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.oo-ui-capsuleMultiSelectWidget-handle:last-child { + margin-right: 0; +} +.oo-ui-capsuleMultiSelectWidget-handle .oo-ui-capsuleMultiSelectWidget-group { + margin: 0 0.2em; +} +.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator, +.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon { + position: absolute; + background-position: center center; + background-repeat: no-repeat; +} +.oo-ui-capsuleMultiSelectWidget-handle > input { + border: none; + min-width: 1em; + max-width: 100%; + line-height: 1.675em; + margin: 0; + padding: 0; + font-size: inherit; + font-family: inherit; + background-color: transparent; + color: black; + vertical-align: middle; +} +.oo-ui-capsuleMultiSelectWidget-handle > input:focus { + outline: none; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle { + padding-right: 0.9375em; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator { + right: 0; + top: 0; + width: 0.9375em; + height: 0.9375em; + margin: 0.775em; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle { + padding-left: 1.875em; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon { + left: 0; + top: 0; + width: 1.875em; + height: 1.875em; + margin: 0.3em; +} +.oo-ui-capsuleMultiSelectWidget:hover .oo-ui-capsuleMultiSelectWidget-handle { + border-color: #aaaaaa; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; + cursor: default; +} +.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon, +.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} +.oo-ui-capsuleMultiSelectWidget .oo-ui-selectWidget { + border-top-color: #ffffff; +} +.oo-ui-capsuleItemWidget { + position: relative; + display: inline-block; + cursor: default; + white-space: nowrap; + width: auto; + max-width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + vertical-align: middle; + padding: 0 0.4em; + margin: 0 0.1em; + height: 1.7em; + line-height: 1.7em; + background-color: #eeeeee; + border: 1px solid #cccccc; + color: #555555; + border-radius: 0.1em; +} +.oo-ui-capsuleItemWidget > .oo-ui-iconElement-icon { + cursor: pointer; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-iconElement-icon { + cursor: default; +} +.oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label { + display: block; + text-overflow: ellipsis; + overflow: hidden; +} +.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-labelElement-label { + padding-right: 1.3375em; +} +.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator { + position: absolute; + right: 0.4em; + top: 0; + width: 0.9375em; + height: 100%; + background-repeat: no-repeat; +} +.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicator-clear { + cursor: pointer; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; +} +.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator { + opacity: 0.2; +} .oo-ui-comboBoxWidget { display: inline-block; position: relative; @@ -2235,6 +2660,9 @@ z-index: 1; width: 100%; } +.oo-ui-comboBoxWidget > .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator { + cursor: pointer; +} .oo-ui-comboBoxWidget:last-child { margin-right: 0; } @@ -2272,6 +2700,48 @@ padding: 1em; line-height: 0; } +.oo-ui-numberInputWidget { + display: inline-block; + position: relative; + max-width: 50em; +} +.oo-ui-numberInputWidget-field { + display: table; + table-layout: fixed; + width: 100%; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget, +.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget { + display: table-cell; + vertical-align: middle; +} +.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget { + width: 100%; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget { + white-space: nowrap; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { + box-sizing: border-box; +} +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget, +.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button { + margin: 0; + width: 2.5em; +} +.oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right-width: 0; +} +.oo-ui-numberInputWidget-plusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-width: 0; +} +.oo-ui-numberInputWidget .oo-ui-textInputWidget input { + border-radius: 0; +} .oo-ui-window { background: transparent; } @@ -2383,18 +2853,24 @@ } .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { border-right: 1px solid #e5e5e5; + margin: 0; } .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child { border-right-width: 0; } .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { border-bottom: 1px solid #e5e5e5; + margin: 0; } .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child { border-bottom-width: 0; } .oo-ui-messageDialog-actions .oo-ui-actionWidget { height: 3.4em; + margin-right: 0; +} +.oo-ui-messageDialog-actions .oo-ui-actionWidget:last-child { + margin-right: 0; } .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label { text-align: center; @@ -2467,9 +2943,6 @@ .oo-ui-processDialog-content .oo-ui-window-head { height: 3.4em; } -.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending { - background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif); -} .oo-ui-processDialog-content .oo-ui-window-body { top: 3.4em; outline: 1px solid rgba(0, 0, 0, 0.2); @@ -2489,78 +2962,66 @@ font-weight: bold; line-height: 1.875em; } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button { - min-width: 1.875em; - min-height: 1.875em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label { - line-height: 1.875em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { - margin-top: -0.125em; -} .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed, .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed, .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed { - margin: 0.75em 0 0.75em 0.75em; + margin: 0.5em; } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button { - padding: 0 1em; +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless { + margin: 0; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button { + padding: 0.75em 1em; vertical-align: middle; } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-labelElement-label { + line-height: 1.875em; +} +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless:hover { background-color: rgba(0, 0, 0, 0.05); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless:active { background-color: rgba(0, 0, 0, 0.1); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed { - margin: 0.75em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button { - /* Adjust for border so text aligns with title */ - margin: -1px; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:hover { background-color: rgba(8, 126, 204, 0.05); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:active { background-color: rgba(8, 126, 204, 0.1); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label { font-weight: bold; } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover { background-color: rgba(118, 171, 54, 0.05); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active { background-color: rgba(118, 171, 54, 0.1); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive:hover, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive:hover { background-color: rgba(212, 83, 83, 0.05); } -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active { +.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive:active, +.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive:active { background-color: rgba(212, 83, 83, 0.1); } +.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement { + margin-right: 0; +} .oo-ui-processDialog > .oo-ui-window-frame { min-height: 5em; } @@ -2618,11 +3079,11 @@ .oo-ui-windowManager-modal > .oo-ui-dialog { background-color: rgba(255, 255, 255, 0.5); opacity: 0; - -webkit-transition: opacity 250ms ease-in-out; - -moz-transition: opacity 250ms ease-in-out; - -ms-transition: opacity 250ms ease-in-out; - -o-transition: opacity 250ms ease-in-out; - transition: opacity 250ms ease-in-out; + -webkit-transition: opacity 250ms ease; + -moz-transition: opacity 250ms ease; + -ms-transition: opacity 250ms ease; + -o-transition: opacity 250ms ease; + transition: opacity 250ms ease; } .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { top: 1em; @@ -2634,11 +3095,11 @@ -ms-transform: scale(0.5); -o-transform: scale(0.5); transform: scale(0.5); - -webkit-transition: all 250ms ease-in-out; - -moz-transition: all 250ms ease-in-out; - -ms-transition: all 250ms ease-in-out; - -o-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; + -webkit-transition: all 250ms ease; + -moz-transition: all 250ms ease; + -ms-transition: all 250ms ease; + -o-transition: all 250ms ease; + transition: all 250ms ease; } .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { /* Fade window overlay */ diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.css deleted file mode 100644 index 63569f6e..00000000 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.css +++ /dev/null @@ -1,3204 +0,0 @@ -/*! - * OOjs UI v0.11.3 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2015 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2015-05-12T12:15:44Z - */ -@-webkit-keyframes oo-ui-progressBarWidget-slide { - from { - margin-left: -40%; - } - to { - margin-left: 100%; - } -} -@-moz-keyframes oo-ui-progressBarWidget-slide { - from { - margin-left: -40%; - } - to { - margin-left: 100%; - } -} -@-ms-keyframes oo-ui-progressBarWidget-slide { - from { - margin-left: -40%; - } - to { - margin-left: 100%; - } -} -@-o-keyframes oo-ui-progressBarWidget-slide { - from { - margin-left: -40%; - } - to { - margin-left: 100%; - } -} -@keyframes oo-ui-progressBarWidget-slide { - from { - margin-left: -40%; - } - to { - margin-left: 100%; - } -} -/* @noflip */ -.oo-ui-rtl { - direction: rtl; -} -/* @noflip */ -.oo-ui-ltr { - direction: ltr; -} -.oo-ui-element-hidden { - display: none !important; -} -.oo-ui-buttonElement > .oo-ui-buttonElement-button { - cursor: pointer; - display: inline-block; - vertical-align: middle; - font: inherit; - white-space: nowrap; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon, -.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { - display: none; -} -.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button { - cursor: default; -} -.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator, -.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - display: inline-block; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-buttonElement-frameless { - display: inline-block; - position: relative; -} -.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - display: inline-block; - vertical-align: middle; -} -.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { - display: inline-block; - vertical-align: top; - text-align: center; -} -.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - display: inline-block; - vertical-align: middle; -} -.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button, -.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button, -.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - cursor: default; -} -.oo-ui-buttonElement > .oo-ui-buttonElement-button { - font-weight: bold; -} -.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - margin-left: 0; -} -.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { - width: 0.9375em; - height: 0.9375em; - margin: 0.46875em; -} -.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { - margin-left: 0.46875em; -} -.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - width: 1.875em; - height: 1.875em; -} -.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.2); - outline: none; -} -.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator { - margin-right: 0; -} -.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - margin-left: 0.25em; - margin-right: 0.25em; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #555555; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #444444; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label, -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label { - color: #347bff; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #777777; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label, -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #1f4999; - box-shadow: none; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label, -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label { - color: #00af89; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #777777; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label, -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #005946; - box-shadow: none; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label, -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label { - color: #d11d13; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #777777; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label, -.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - color: #73100a; - box-shadow: none; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button { - color: #cccccc; -} -.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon, -.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { - opacity: 0.2; -} -.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button { - margin: 0.1em 0; - padding: 0.2em 0.8em; - border-radius: 2px; - -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; - transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out; -} -.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover, -.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus { - outline: none; -} -.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button, -.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { - line-height: 1.875em; -} -.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - margin-left: -0.5em; - margin-right: -0.5em; -} -.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon { - margin-right: 0.3em; -} -.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { - /* -0.5 - 0.475 */ - margin-left: -0.005em; - margin-right: -0.005em; -} -.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator, -.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator { - margin-left: 0.46875em; - margin-right: -0.275em; -} -.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button { - color: #ffffff; - background: #dddddd; - border: 1px solid #dddddd; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button { - color: #555555; - background-color: #ffffff; - border: 1px solid #cdcdcd; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover { - background-color: #ebebeb; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2); -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active, -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - background-color: #d9d9d9; - border-color: #d9d9d9; - box-shadow: none; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button { - background-color: #999999; - color: #ffffff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button { - color: #347bff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover { - background-color: rgba(52, 123, 255, 0.1); - border-color: rgba(31, 73, 153, 0.5); -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px #1f4999; - border-color: #1f4999; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - color: #1f4999; - border-color: #1f4999; - box-shadow: none; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button { - background-color: #999999; - color: #ffffff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button { - color: #00af89; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover { - background-color: rgba(0, 171, 137, 0.1); - border-color: rgba(0, 89, 70, 0.5); -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px #005946; - border-color: #005946; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - color: #005946; - border-color: #005946; - box-shadow: none; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button { - background-color: #999999; - color: #ffffff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button { - color: #d11d13; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover { - background-color: rgba(209, 29, 19, 0.1); - border-color: rgba(115, 16, 10, 0.5); -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px #73100a; - border-color: #73100a; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - color: #73100a; - border-color: #73100a; - box-shadow: none; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button { - background-color: #999999; - color: #ffffff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button { - color: #ffffff; - background-color: #347bff; - border-color: #347bff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover { - background: #2962cc; - border-color: #2962cc; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px #ffffff; - border-color: #347bff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - color: #ffffff; - background-color: #1f4999; - border-color: #1f4999; - box-shadow: none; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button { - background-color: #999999; - color: #ffffff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button { - color: #ffffff; - background-color: #00af89; - border-color: #00af89; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover { - background: #008064; - border-color: #008064; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px #ffffff; - border-color: #00af89; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - color: #ffffff; - background-color: #005946; - border-color: #005946; - box-shadow: none; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button { - background-color: #999999; - color: #ffffff; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button { - color: #ffffff; - background-color: #d11d13; - border-color: #d11d13; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover { - background: #8c130d; - border-color: #8c130d; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus { - box-shadow: inset 0 0 0 1px #ffffff; - border-color: #d11d13; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active, -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button { - color: #ffffff; - background-color: #73100a; - border-color: #73100a; - box-shadow: none; -} -.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button { - background-color: #999999; - color: #ffffff; -} -.oo-ui-clippableElement-clippable { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-draggableElement { - cursor: -webkit-grab -moz-grab, url(images/grab.cur), move; - /* - * HACK: In order to style horizontally, we must override - * OO.ui.OptionWidget's display rule that is currently set - * to be 'block' - */ -} -.oo-ui-draggableElement-dragging { - cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move; - background: rgba(0, 0, 0, 0.2); - opacity: 0.4; -} -.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget { - display: inline-block; -} -.oo-ui-draggableGroupElement-placeholder { - position: absolute; - display: block; - background: rgba(0, 0, 0, 0.4); -} -.oo-ui-iconElement .oo-ui-iconElement-icon, -.oo-ui-iconElement.oo-ui-iconElement-icon { - background-size: contain; - background-position: center center; -} -.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator, -.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator { - background-size: contain; - background-position: center center; -} -.oo-ui-lookupElement > .oo-ui-menuSelectWidget { - z-index: 1; - width: 100%; -} -.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable { - overflow-y: hidden; -} -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable { - overflow-y: auto; -} -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded { - padding: 2em; -} -.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 3em; - overflow-y: auto; -} -.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget { - position: absolute; - bottom: 0; - left: 0; - right: 0; -} -.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout { - padding: 1.5em; -} -.oo-ui-bookletLayout-outlinePanel { - border-right: 1px solid #dddddd; -} -.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget { - box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25); -} -.oo-ui-indexLayout > .oo-ui-menuLayout-menu { - height: 3em; -} -.oo-ui-indexLayout > .oo-ui-menuLayout-content { - top: 3em; -} -.oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout { - padding: 1.5em; -} -.oo-ui-fieldLayout { - display: block; - margin-bottom: 1em; -} -.oo-ui-fieldLayout:before, -.oo-ui-fieldLayout:after { - content: " "; - display: table; -} -.oo-ui-fieldLayout:after { - clear: both; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { - display: block; - float: left; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { - text-align: right; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body { - display: table; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { - display: table-cell; - vertical-align: middle; -} -.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { - display: inline-block; -} -.oo-ui-fieldLayout > .oo-ui-fieldLayout-help { - float: right; -} -.oo-ui-fieldLayout > .oo-ui-fieldLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - z-index: 1; -} -.oo-ui-fieldLayout > .oo-ui-fieldLayout-help .oo-ui-fieldLayout-help-content { - padding: 0.5em 0.75em; - line-height: 1.5em; -} -.oo-ui-fieldLayout:last-child { - margin-bottom: 0; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { - padding-top: 0.5em; - margin-right: 5%; - width: 35%; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { - width: 60%; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { - padding: 0.5em; - padding-left: 1em; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field { - padding: 0.5em 0; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label { - padding: 0.5em 0; -} -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget { - margin-right: 0; - margin-top: 0.25em; -} -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child { - margin-right: 0; -} -.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label { - color: #cccccc; -} -.oo-ui-actionFieldLayout-field { - display: table; - table-layout: fixed; - width: 100%; -} -.oo-ui-actionFieldLayout-input, -.oo-ui-actionFieldLayout-button { - display: table-cell; - vertical-align: middle; -} -.oo-ui-actionFieldLayout-input { - padding-right: 1em; -} -.oo-ui-actionFieldLayout-button { - width: 1%; - white-space: nowrap; -} -.oo-ui-fieldsetLayout { - position: relative; - margin: 0; - padding: 0; - border: none; -} -.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon { - display: block; - position: absolute; - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label { - display: inline-block; -} -.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help { - float: right; -} -.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - z-index: 1; -} -.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help .oo-ui-fieldsetLayout-help-content { - padding: 0.5em 0.75em; - line-height: 1.5em; -} -.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout, -.oo-ui-fieldsetLayout + .oo-ui-formLayout { - margin-top: 2em; -} -.oo-ui-fieldsetLayout > .oo-ui-labelElement-label { - font-size: 1.1em; - margin-bottom: 0.5em; - padding: 0.25em 0; - font-weight: bold; -} -.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label { - padding-left: 2em; - line-height: 1.8em; -} -.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon { - left: 0; - top: 0.25em; - width: 1.875em; - height: 1.875em; -} -.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget { - margin-right: 0; -} -.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child { - margin-right: 0; -} -.oo-ui-formLayout + .oo-ui-fieldsetLayout, -.oo-ui-formLayout + .oo-ui-formLayout { - margin-top: 2em; -} -.oo-ui-menuLayout { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} -.oo-ui-menuLayout-menu, -.oo-ui-menuLayout-content { - position: absolute; - -webkit-transition: all ease-in-out 200ms; - -moz-transition: all ease-in-out 200ms; - -ms-transition: all ease-in-out 200ms; - -o-transition: all ease-in-out 200ms; - transition: all ease-in-out 200ms; -} -.oo-ui-menuLayout-menu { - height: 18em; - width: 18em; -} -.oo-ui-menuLayout-content { - top: 18em; - left: 18em; - right: 18em; - bottom: 18em; -} -.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-menu { - width: 0 !important; - height: 0 !important; - overflow: hidden; -} -.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-content { - top: 0 !important; - left: 0 !important; - right: 0 !important; - bottom: 0 !important; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-menu { - width: auto !important; - left: 0; - top: 0; - right: 0; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-content { - right: 0 !important; - bottom: 0 !important; - left: 0 !important; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-menu { - height: auto !important; - top: 0; - right: 0; - bottom: 0; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-content { - bottom: 0 !important; - left: 0 !important; - top: 0 !important; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu { - width: auto !important; - right: 0; - bottom: 0; - left: 0; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content { - left: 0 !important; - top: 0 !important; - right: 0 !important; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-menu { - height: auto !important; - bottom: 0; - left: 0; - top: 0; -} -.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-content { - top: 0 !important; - right: 0 !important; - bottom: 0 !important; -} -.oo-ui-panelLayout { - position: relative; -} -.oo-ui-panelLayout-scrollable { - overflow-y: auto; -} -.oo-ui-panelLayout-expanded { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} -.oo-ui-panelLayout-padded { - padding: 1.25em; -} -.oo-ui-panelLayout-framed { - border: 1px solid #aaaaaa; - border-radius: 0.2em; - box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2); -} -.oo-ui-stackLayout-continuous > .oo-ui-panelLayout { - display: block; - position: relative; -} -.oo-ui-popupTool .oo-ui-popupWidget-popup, -.oo-ui-popupTool .oo-ui-popupWidget-anchor { - z-index: 4; -} -.oo-ui-popupTool .oo-ui-popupWidget { - /* @noflip */ - margin-left: 1.25em; -} -.oo-ui-toolGroupTool > .oo-ui-popupToolGroup { - border: 0; - border-radius: 0; - margin: 0; -} -.oo-ui-toolGroupTool > .oo-ui-toolGroup { - border-right: none; -} -.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle { - height: 2.5em; - padding: 0.3125em; -} -.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { - height: 2.5em; - width: 1.875em; -} -.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - line-height: 2.1em; -} -.oo-ui-toolGroup { - display: inline-block; - vertical-align: middle; - border-radius: 0; - border-right: 1px solid #dddddd; -} -.oo-ui-toolGroup-empty { - display: none; -} -.oo-ui-toolGroup .oo-ui-tool-link { - text-decoration: none; -} -.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon { - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup { - margin-left: 0; -} -.oo-ui-toolGroup .oo-ui-toolGroup .oo-ui-widget-enabled { - border-right: none !important; -} -.oo-ui-barToolGroup > .oo-ui-iconElement-icon, -.oo-ui-barToolGroup > .oo-ui-labelElement-label { - display: none; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link { - cursor: pointer; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool { - display: inline-block; - position: relative; - vertical-align: top; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link { - display: block; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel { - display: none; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-iconElement-icon { - display: inline-block; - vertical-align: top; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-tool-title { - display: none; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement.oo-ui-tool-with-label > .oo-ui-tool-link .oo-ui-tool-title { - display: inline; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link { - cursor: default; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link { - height: 1.875em; - padding: 0.625em; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon { - height: 1.875em; - width: 1.875em; -} -.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title { - line-height: 2.1em; - padding: 0 0.4em; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); - background-color: #eeeeee; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title { - color: #555555; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled { - border-color: rgba(0, 0, 0, 0.2); - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); - background-color: #e5e5e5; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled:hover { - background-color: #eeeeee; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { - border-left-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-tool-title { - color: #cccccc; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon { - opacity: 0.2; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-iconElement-icon { - opacity: 0.7; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon { - opacity: 0.9; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:active { - background-color: #e7e7e7; -} -.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title { - color: #cccccc; -} -.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-iconElement-icon { - opacity: 0.2; -} -.oo-ui-popupToolGroup { - position: relative; - height: 3.125em; - min-width: 2em; -} -.oo-ui-popupToolGroup-handle { - display: block; - cursor: pointer; -} -.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator, -.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { - position: absolute; - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle { - cursor: default; -} -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { - display: none; - position: absolute; - z-index: 4; -} -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon { - background-repeat: no-repeat; - background-position: center center; -} -.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools { - display: block; -} -.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools { - left: 0; -} -.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools { - right: 0; -} -.oo-ui-popupToolGroup .oo-ui-tool-link { - display: table; - width: 100%; - vertical-align: middle; - white-space: nowrap; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon, -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel, -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { - display: table-cell; - vertical-align: middle; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel { - text-align: right; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) { - padding-left: 3em; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup { - min-width: 1.875em; -} -.oo-ui-popupToolGroup.oo-ui-iconElement { - min-width: 3.125em; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement { - min-width: 2.5em; -} -.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement { - min-width: 4.375em; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement { - min-width: 3.75em; -} -.oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - line-height: 2.6em; - margin: 0 1em; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - margin: 0 0.5em; -} -.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - margin-left: 3em; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - margin-left: 2.5em; -} -.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - margin-right: 2em; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label { - margin-right: 1.75em; -} -.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:hover { - background-color: #eeeeee; -} -.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:active { - background-color: #e5e5e5; -} -.oo-ui-popupToolGroup-handle { - padding: 0.3125em; - height: 2.5em; -} -.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator { - width: 0.9375em; - height: 1.625em; - margin: 0.78125em 0.5em; - top: 0; - right: 0; - opacity: 0.3; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator { - right: -0.3125em; -} -.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { - width: 1.875em; - height: 2.6em; - margin: 0.25em; - top: 0; - left: 0.3125em; - opacity: 0.7; -} -.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon { - left: 0; -} -.oo-ui-popupToolGroup-header { - line-height: 2.6em; - margin: 0 0.6em; - font-weight: bold; -} -.oo-ui-popupToolGroup-active.oo-ui-widget-enabled { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); - background-color: #eeeeee; -} -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { - top: 3.125em; - margin: 0 -1px; - border: 1px solid #cccccc; - background-color: #ffffff; - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2); - min-width: 16em; -} -.oo-ui-popupToolGroup .oo-ui-tool-link { - padding: 0.4em 0.625em; - box-sizing: border-box; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon { - height: 2.5em; - width: 1.875em; - min-width: 1.875em; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { - padding-left: 0.5em; - color: #000000; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel, -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { - line-height: 2em; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel { - color: #888888; -} -.oo-ui-listToolGroup .oo-ui-tool { - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-listToolGroup .oo-ui-tool-link { - cursor: pointer; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} -.oo-ui-listToolGroup.oo-ui-popupToolGroup-active { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); - background-color: #eeeeee; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:active { - background-color: #e7e7e7; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon { - opacity: 0.9; -} -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled { - border-color: rgba(0, 0, 0, 0.1); - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); - background-color: #e5e5e5; -} -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { - border-top-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); - background-color: #eeeeee; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { - color: #cccccc; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-accel { - color: #dddddd; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon { - opacity: 0.2; -} -.oo-ui-listToolGroup.oo-ui-widget-disabled { - color: #cccccc; -} -.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator, -.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon { - opacity: 0.2; -} -.oo-ui-menuToolGroup .oo-ui-tool { - display: block; -} -.oo-ui-menuToolGroup .oo-ui-tool-link { - cursor: pointer; -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} -.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle { - min-width: 10em; -} -.oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle { - min-width: 8.125em; -} -.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon { - background-image: none; -} -.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon { - background-image: url("themes/mediawiki/images/icons/check.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png"); -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { - background-color: #eeeeee; -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { - color: #cccccc; -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon { - opacity: 0.2; -} -.oo-ui-menuToolGroup.oo-ui-widget-disabled { - color: #cccccc; -} -.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator, -.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon { - opacity: 0.2; -} -.oo-ui-toolbar { - clear: both; -} -.oo-ui-toolbar-bar { - line-height: 1em; - position: relative; -} -.oo-ui-toolbar-actions { - float: right; -} -.oo-ui-toolbar-actions .oo-ui-toolbar { - display: inline-block; -} -.oo-ui-toolbar-tools { - display: inline; - white-space: nowrap; -} -.oo-ui-toolbar-narrow .oo-ui-toolbar-tools { - white-space: normal; -} -.oo-ui-toolbar-tools .oo-ui-tool { - white-space: normal; -} -.oo-ui-toolbar-tools, -.oo-ui-toolbar-actions, -.oo-ui-toolbar-shadow { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-toolbar-actions .oo-ui-popupWidget { - -webkit-touch-callout: default; - -webkit-user-select: all; - -moz-user-select: all; - -ms-user-select: all; - user-select: all; -} -.oo-ui-toolbar-shadow { - background-position: left top; - background-repeat: repeat-x; - position: absolute; - width: 100%; - pointer-events: none; -} -.oo-ui-toolbar-bar { - border-bottom: 1px solid #cccccc; - background-color: #ffffff; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - font-weight: 500; - color: #555555; -} -.oo-ui-toolbar-bar .oo-ui-toolbar-bar { - border: none; - background: none; - box-shadow: none; -} -.oo-ui-toolbar-actions > .oo-ui-buttonElement { - margin-top: 0.25em; - margin-bottom: 0.25em; -} -.oo-ui-toolbar-actions > .oo-ui-toolbar, -.oo-ui-toolbar-actions > .oo-ui-buttonElement:last-child { - margin-right: 0.5em; -} -.oo-ui-optionWidget { - position: relative; - display: block; - cursor: pointer; - padding: 0.25em 0.5em; - border: none; -} -.oo-ui-optionWidget.oo-ui-widget-disabled { - cursor: default; -} -.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label { - display: block; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} -.oo-ui-optionWidget-highlighted { - background-color: #eeeeee; -} -.oo-ui-optionWidget .oo-ui-labelElement-label { - line-height: 1.5em; -} -.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected, -.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed, -.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted, -.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected { - background-color: #d0d0d0; -} -.oo-ui-optionWidget.oo-ui-widget-disabled { - color: #cccccc; -} -.oo-ui-decoratedOptionWidget { - padding: 0.5em 2em 0.5em 3em; -} -.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon, -.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator { - position: absolute; - background-repeat: no-repeat; - background-position: center center; -} -.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, -.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { - top: 0; - height: 100%; -} -.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { - width: 1.875em; - left: 0.5em; -} -.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { - width: 0.9375em; - right: 0.5em; -} -.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon, -.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { - opacity: 0.2; -} -.oo-ui-buttonSelectWidget { - display: inline-block; - white-space: nowrap; - border-radius: 2px; - margin-right: 0.5em; -} -.oo-ui-buttonSelectWidget:last-child { - margin-right: 0; -} -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button { - border-radius: 0; - margin-left: -1px; -} -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button { - border-bottom-left-radius: 2px; - border-top-left-radius: 2px; - margin-left: 0; -} -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button { - border-bottom-right-radius: 2px; - border-top-right-radius: 2px; -} -.oo-ui-buttonOptionWidget { - display: inline-block; - padding: 0; - background-color: transparent; -} -.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button { - position: relative; -} -.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, -.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { - position: static; - display: inline-block; - vertical-align: middle; -} -.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button { - height: 1.875em; -} -.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { - margin-top: 0; -} -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected, -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed, -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted { - background-color: transparent; -} -.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon, -.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { - opacity: 1; -} -.oo-ui-radioOptionWidget { - cursor: default; - padding: 0.25em 0; - background-color: transparent; -} -.oo-ui-radioOptionWidget .oo-ui-radioInputWidget, -.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label { - display: inline-block; - vertical-align: middle; -} -.oo-ui-radioOptionWidget.oo-ui-optionWidget-selected, -.oo-ui-radioOptionWidget.oo-ui-optionWidget-pressed, -.oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted { - background-color: transparent; -} -.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label { - padding: 0.25em; - padding-left: 1em; -} -.oo-ui-radioOptionWidget .oo-ui-radioInputWidget { - margin-right: 0; -} -.oo-ui-labelWidget { - display: inline-block; -} -.oo-ui-iconWidget { - display: inline-block; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; - line-height: 2.5em; - height: 1.875em; - width: 1.875em; -} -.oo-ui-iconWidget.oo-ui-widget-disabled { - opacity: 0.2; -} -.oo-ui-indicatorWidget { - display: inline-block; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; - line-height: 2.5em; - height: 0.9375em; - width: 0.9375em; - margin: 0.46875em; -} -.oo-ui-indicatorWidget.oo-ui-widget-disabled { - opacity: 0.2; -} -.oo-ui-buttonWidget { - display: inline-block; - vertical-align: middle; - margin-right: 0.5em; -} -.oo-ui-buttonWidget:last-child { - margin-right: 0; -} -.oo-ui-buttonGroupWidget { - display: inline-block; - white-space: nowrap; - border-radius: 2px; - margin-right: 0.5em; -} -.oo-ui-buttonGroupWidget:last-child { - margin-right: 0; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonElement { - margin-right: 0; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonElement:last-child { - margin-right: 0; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button { - border-radius: 0; - margin-left: -1px; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button { - border-bottom-left-radius: 2px; - border-top-left-radius: 2px; - margin-left: 0; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button { - border-bottom-right-radius: 2px; - border-top-right-radius: 2px; -} -.oo-ui-toggleButtonWidget { - display: inline-block; - vertical-align: middle; - margin-right: 0.5em; -} -.oo-ui-toggleButtonWidget:last-child { - margin-right: 0; -} -.oo-ui-toggleSwitchWidget { - position: relative; - display: inline-block; - vertical-align: middle; - overflow: hidden; - cursor: pointer; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transform: translateZ(0px); - -moz-transform: translateZ(0px); - -ms-transform: translateZ(0px); - -o-transform: translateZ(0px); - transform: translateZ(0px); - height: 2em; - width: 4em; - border-radius: 1em; - border: 1px #dddddd solid; - margin-right: 0.5em; -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { - cursor: default; -} -.oo-ui-toggleSwitchWidget-grip { - position: absolute; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { - position: absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: none; -} -.oo-ui-toggleSwitchWidget:last-child { - margin-right: 0; -} -.oo-ui-toggleSwitchWidget-grip { - top: 0.25em; - left: 0.25em; - width: 1.5em; - height: 1.5em; - margin-top: -1px; - border-radius: 1em; - border: 1px #dddddd solid; - background-color: #f7f7f7; - -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; - transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out; -} -.oo-ui-toggleSwitchWidget-glow { - border-radius: 1em; - background-color: #f7f7f7; - -webkit-transition: background-color 0.1s ease-in-out; - -moz-transition: background-color 0.1s ease-in-out; - -ms-transition: background-color 0.1s ease-in-out; - -o-transition: background-color 0.1s ease-in-out; - transition: background-color 0.1s ease-in-out; -} -.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { - left: 2.25em; - margin-left: -2px; -} -.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: block; -} -.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip { - left: 0.25em; - margin-left: 0; -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled { - border: 1px #cccccc solid; -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover { - border-color: #aaaaaa; -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip { - background-color: #ffffff; - border-color: #aaaaaa; -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow { - background-color: #d0d0d0; -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - background-color: #ffffff; -} -.oo-ui-progressBarWidget { - max-width: 50em; - border: 1px solid #cccccc; - border-radius: 0.1em; - overflow: hidden; -} -.oo-ui-progressBarWidget-bar { - height: 1em; - background: #dddddd; - -webkit-transition: width 200ms, margin-left 200ms; - -moz-transition: width 200ms, margin-left 200ms; - -ms-transition: width 200ms, margin-left 200ms; - -o-transition: width 200ms, margin-left 200ms; - transition: width 200ms, margin-left 200ms; -} -.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar { - -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear; - -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear; - -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear; - -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear; - animation: oo-ui-progressBarWidget-slide 2s infinite linear; - width: 40%; - margin-left: -10%; - border-left-width: 1px; -} -.oo-ui-progressBarWidget.oo-ui-widget-disabled { - opacity: 0.6; -} -.oo-ui-actionWidget.oo-ui-pendingElement-pending { - background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif); -} -.oo-ui-popupWidget { - position: absolute; - /* @noflip */ - left: 0; -} -.oo-ui-popupWidget-popup { - position: relative; - overflow: hidden; - z-index: 1; -} -.oo-ui-popupWidget-anchor { - display: none; - z-index: 1; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { - display: block; - position: absolute; - top: 0; - /* @noflip */ - left: 0; - background-repeat: no-repeat; -} -.oo-ui-popupWidget-head { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-popupWidget-head .oo-ui-buttonWidget { - float: right; -} -.oo-ui-popupWidget-head .oo-ui-labelElement-label { - float: left; - cursor: default; -} -.oo-ui-popupWidget-body { - clear: both; - overflow: hidden; -} -.oo-ui-popupWidget-popup { - border: 1px solid #aaaaaa; - border-radius: 0.2em; - background-color: #ffffff; - box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2); -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup { - margin-top: 9px; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before, -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { - content: ""; - position: absolute; - width: 0; - height: 0; - border-style: solid; - border-color: transparent; - border-top: 0; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before { - bottom: -10px; - left: -9px; - border-bottom-color: #888888; - border-width: 10px; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after { - bottom: -10px; - left: -8px; - border-bottom-color: #ffffff; - border-width: 9px; -} -.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup { - -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; - transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out; -} -.oo-ui-popupWidget-head { - height: 2.5em; -} -.oo-ui-popupWidget-head .oo-ui-buttonWidget { - margin: 0.25em; -} -.oo-ui-popupWidget-head .oo-ui-labelElement-label { - margin: 0.75em 1em; -} -.oo-ui-popupWidget-body-padded { - padding: 0 1em; -} -.oo-ui-popupButtonWidget { - position: relative; -} -.oo-ui-popupButtonWidget .oo-ui-popupWidget { - position: absolute; - cursor: auto; -} -.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget { - /* @noflip */ - left: 1em; -} -.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget { - /* @noflip */ - left: 1.75em; -} -.oo-ui-inputWidget { - margin-right: 0.5em; -} -.oo-ui-inputWidget:last-child { - margin-right: 0; -} -.oo-ui-buttonInputWidget { - display: inline-block; - vertical-align: middle; -} -.oo-ui-checkboxInputWidget { - position: relative; - line-height: 1.6em; - white-space: nowrap; -} -.oo-ui-checkboxInputWidget * { - font: inherit; - vertical-align: middle; -} -.oo-ui-checkboxInputWidget input[type="checkbox"] { - opacity: 0; - z-index: 1; - position: relative; - margin: 0; - width: 1.6em; - height: 1.6em; - max-width: none; -} -.oo-ui-checkboxInputWidget input[type="checkbox"] + span { - cursor: pointer; - -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - position: absolute; - left: 0; - border-radius: 2px; - width: 1.6em; - height: 1.6em; - background-color: white; - border: 1px solid #777777; - background-image: url("themes/mediawiki/images/icons/check-constructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png"); - background-repeat: no-repeat; - background-position: center center; - background-origin: border-box; - background-size: 0 0; -} -.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span { - background-size: 100% 100%; -} -.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span { - background-color: #dddddd; - border-color: #dddddd; -} -.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span { - border-width: 2px; -} -.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span, -.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span { - border-bottom-width: 3px; -} -.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span { - cursor: default; - background-color: #eeeeee; - border-color: #eeeeee; -} -.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span { - background-image: url("themes/mediawiki/images/icons/check-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png"); -} -.oo-ui-dropdownInputWidget { - position: relative; - vertical-align: middle; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; - max-width: 50em; -} -.oo-ui-dropdownInputWidget select { - display: inline-block; - width: 100%; - resize: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-dropdownInputWidget select { - height: 2.5em; - padding: 0.5em; - font-size: inherit; - font-family: inherit; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #cccccc; -} -.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover, -.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus { - border-color: #aaaaaa; - outline: none; -} -.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select { - color: #cccccc; - border-color: #dddddd; - background-color: #f3f3f3; -} -.oo-ui-radioInputWidget { - position: relative; - line-height: 1.6em; - white-space: nowrap; -} -.oo-ui-radioInputWidget * { - font: inherit; - vertical-align: middle; -} -.oo-ui-radioInputWidget input[type="radio"] { - opacity: 0; - z-index: 1; - position: relative; - margin: 0; - width: 1.6em; - height: 1.6em; - max-width: none; -} -.oo-ui-radioInputWidget input[type="radio"] + span { - cursor: pointer; - -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - position: absolute; - left: 0; - border-radius: 100%; - width: 1.6em; - height: 1.6em; - background: white; - border: 1px solid #777777; - background-image: url("themes/mediawiki/images/icons/circle-constructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png"); - background-repeat: no-repeat; - background-position: center center; - background-origin: border-box; - background-size: 0 0; -} -.oo-ui-radioInputWidget input[type="radio"]:checked + span { - background-size: 100% 100%; -} -.oo-ui-radioInputWidget input[type="radio"]:active + span { - background-color: #dddddd; - border-color: #dddddd; -} -.oo-ui-radioInputWidget input[type="radio"]:focus + span { - border-width: 2px; -} -.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span, -.oo-ui-radioInputWidget input[type="radio"]:hover + span { - border-bottom-width: 3px; -} -.oo-ui-radioInputWidget input[type="radio"]:disabled + span { - cursor: default; - background-color: #eeeeee; - border-color: #eeeeee; -} -.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span { - background-image: url("themes/mediawiki/images/icons/circle-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png"); -} -.oo-ui-textInputWidget { - position: relative; - vertical-align: middle; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; - max-width: 50em; -} -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - display: inline-block; - width: 100%; - resize: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-textInputWidget > .oo-ui-iconElement-icon, -.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator, -.oo-ui-textInputWidget > .oo-ui-labelElement-label { - display: none; -} -.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon, -.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator { - display: block; - position: absolute; - top: 0; - height: 100%; - background-repeat: no-repeat; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon, -.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator { - cursor: pointer; -} -.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label { - display: block; -} -.oo-ui-textInputWidget > .oo-ui-iconElement-icon { - left: 0; -} -.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator { - right: 0; -} -.oo-ui-textInputWidget > .oo-ui-labelElement-label { - position: absolute; - top: 0; -} -.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label { - right: 0; -} -.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label { - left: 0; -} -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - padding: 0.5em; - margin: 0; - font-size: inherit; - font-family: inherit; - background-color: #ffffff; - color: black; - border: solid 1px #cccccc; - box-shadow: inset 0 0 0 0 #347bff; - border-radius: 0.1em; - -webkit-transition: box-shadow 0.1s ease-in-out; - -moz-transition: box-shadow 0.1s ease-in-out; - -ms-transition: box-shadow 0.1s ease-in-out; - -o-transition: box-shadow 0.1s ease-in-out; - transition: box-shadow 0.1s ease-in-out; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-textInputWidget-decorated input, -.oo-ui-textInputWidget-decorated textarea { - padding-left: 2em; -} -.oo-ui-textInputWidget-icon { - width: 2em; -} -.oo-ui-textInputWidget.oo-ui-widget-enabled input, -.oo-ui-textInputWidget.oo-ui-widget-enabled textarea { - -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); - transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1); -} -.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus, -.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { - outline: none; - border-color: #347bff; - box-shadow: inset 0 0 0 0.1em #347bff; -} -.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly], -.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] { - color: #777777; - text-shadow: 0 1px 1px #ffffff; -} -.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus, -.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus { - border-color: #cccccc; - box-shadow: inset 0 0 0 0.1em #cccccc; -} -.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input, -.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea { - border-color: red; - box-shadow: inset 0 0 0 0 red; -} -.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input:focus, -.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea:focus { - border-color: red; - box-shadow: inset 0 0 0 0.1em red; -} -.oo-ui-textInputWidget.oo-ui-widget-disabled input, -.oo-ui-textInputWidget.oo-ui-widget-disabled textarea { - color: #cccccc; - text-shadow: 0 1px 1px #ffffff; - border-color: #dddddd; - background-color: #f3f3f3; -} -.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon, -.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { - opacity: 0.2; -} -.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label { - color: #dddddd; - text-shadow: 0 1px 1px #ffffff; -} -.oo-ui-textInputWidget.oo-ui-pendingElement-pending input, -.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea { - background-color: transparent; - background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif); -} -.oo-ui-textInputWidget.oo-ui-iconElement input, -.oo-ui-textInputWidget.oo-ui-iconElement textarea { - padding-left: 2.75em; -} -.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon { - left: 0.4em; - width: 1.875em; - margin-left: 0.1em; - height: 100%; - background-position: right center; -} -.oo-ui-textInputWidget.oo-ui-indicatorElement input, -.oo-ui-textInputWidget.oo-ui-indicatorElement textarea { - padding-right: 1.875em; -} -.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { - width: 0.9375em; - margin: 0 0.775em; - height: 100%; -} -.oo-ui-textInputWidget > .oo-ui-labelElement-label { - padding: 0.4em; - line-height: 1.5em; - color: #888888; -} -.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label { - margin-right: 2em; -} -.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label { - margin-left: 2.5em; -} -.oo-ui-menuSelectWidget { - position: absolute; - background: #ffffff; - margin-top: -1px; - border: 1px solid #aaaaaa; - border-radius: 0 0 0.2em 0.2em; - padding-bottom: 0.25em; - box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2); -} -.oo-ui-menuSelectWidget input { - position: absolute; - width: 0; - height: 0; - overflow: hidden; - opacity: 0; -} -.oo-ui-menuOptionWidget { - position: relative; - padding: 0.5em 1em; -} -.oo-ui-menuOptionWidget .oo-ui-iconElement-icon { - display: none; -} -.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected { - background-color: transparent; -} -.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon { - display: block; -} -.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected { - background-color: #d8e6fe; - color: rgba(0, 0, 0, 0.8); -} -.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon { - display: none; -} -.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted { - background-color: #eeeeee; - color: black; -} -.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted { - background-color: #d8e6fe; -} -.oo-ui-menuSectionOptionWidget { - cursor: default; - padding: 0.33em 0.75em; - color: #888888; -} -.oo-ui-dropdownWidget { - display: inline-block; - position: relative; - margin: 0.25em 0; - width: 100%; - max-width: 50em; - margin-right: 0.5em; -} -.oo-ui-dropdownWidget-handle { - width: 100%; - display: inline-block; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator, -.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { - position: absolute; - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-dropdownWidget > .oo-ui-menuSelectWidget { - z-index: 1; - width: 100%; -} -.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle { - cursor: default; -} -.oo-ui-dropdownWidget:last-child { - margin-right: 0; -} -.oo-ui-dropdownWidget-handle { - height: 2.5em; - border: 1px solid #cccccc; - border-radius: 0.1em; -} -.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { - right: 0; -} -.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { - left: 0.25em; -} -.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { - line-height: 2.5em; - margin: 0 1em; -} -.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator { - top: 0; - width: 0.9375em; - height: 0.9375em; - margin: 0.775em; -} -.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon { - top: 0; - width: 1.875em; - height: 1.875em; - margin: 0.3em; -} -.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle { - border-color: #aaaaaa; -} -.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle { - color: #cccccc; - text-shadow: 0 1px 1px #ffffff; - border-color: #dddddd; - background-color: #f3f3f3; -} -.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { - opacity: 0.2; -} -.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { - margin-left: 3em; -} -.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label { - margin-right: 2em; -} -.oo-ui-dropdownWidget .oo-ui-selectWidget { - border-top-color: #ffffff; -} -.oo-ui-outlineOptionWidget { - position: relative; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - font-size: 1.1em; - padding: 0.75em; -} -.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label { - padding-right: 1.5em; -} -.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { - opacity: 0.5; -} -.oo-ui-outlineOptionWidget-level-0 { - padding-left: 3.5em; -} -.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon { - left: 1em; -} -.oo-ui-outlineOptionWidget-level-1 { - padding-left: 5em; -} -.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon { - left: 2.5em; -} -.oo-ui-outlineOptionWidget-level-2 { - padding-left: 6.5em; -} -.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon { - left: 4em; -} -.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected { - background-color: #d0d0d0; - text-shadow: 0 1px 1px #ffffff; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important { - font-weight: bold; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder { - font-style: italic; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon { - opacity: 0.5; -} -.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label { - color: #777777; -} -.oo-ui-outlineControlsWidget { - height: 3em; - background-color: #ffffff; -} -.oo-ui-outlineControlsWidget-items, -.oo-ui-outlineControlsWidget-movers { - float: left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon { - float: left; - background-position: right center; - background-repeat: no-repeat; -} -.oo-ui-outlineControlsWidget-items { - float: left; -} -.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget { - float: left; -} -.oo-ui-outlineControlsWidget-movers { - float: right; -} -.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget { - float: right; -} -.oo-ui-outlineControlsWidget-items, -.oo-ui-outlineControlsWidget-movers { - height: 2em; - margin: 0.5em 0.5em 0.5em 0; - padding: 0; -} -.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon { - width: 1.5em; - height: 2em; - margin: 0.5em 0 0.5em 0.5em; - opacity: 0.2; -} -.oo-ui-tabSelectWidget { - text-align: left; - white-space: nowrap; - overflow: hidden; - background-color: #dddddd; -} -.oo-ui-tabOptionWidget { - display: inline-block; - vertical-align: bottom; - padding: 0.35em 1em; - margin: 0.5em 0 0 0.75em; - border: 1px solid transparent; - border-bottom: none; - border-top-left-radius: 2px; - border-top-right-radius: 2px; - color: #666666; - font-weight: bold; -} -.oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover { - background-color: rgba(255, 255, 255, 0.3); -} -.oo-ui-tabOptionWidget.oo-ui-widget-enabled:active { - background-color: rgba(255, 255, 255, 0.8); -} -.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label { - padding-right: 1.5em; -} -.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator { - opacity: 0.5; -} -.oo-ui-selectWidget-pressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected, -.oo-ui-selectWidget-depressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected, -.oo-ui-tabOptionWidget.oo-ui-optionWidget-selected:hover { - background-color: #ffffff; - color: #333333; -} -.oo-ui-comboBoxWidget { - display: inline-block; - position: relative; - width: 100%; - max-width: 50em; - margin-right: 0.5em; -} -.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget { - z-index: 1; - width: 100%; -} -.oo-ui-comboBoxWidget:last-child { - margin-right: 0; -} -.oo-ui-comboBoxWidget .oo-ui-textInputWidget input, -.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea { - height: 2.35em; -} -.oo-ui-searchWidget-query { - position: absolute; - top: 0; - left: 0; - right: 0; -} -.oo-ui-searchWidget-query .oo-ui-textInputWidget { - width: 100%; -} -.oo-ui-searchWidget-results { - position: absolute; - bottom: 0; - left: 0; - right: 0; - overflow-x: hidden; - overflow-y: auto; -} -.oo-ui-searchWidget-query { - height: 4em; - padding: 0 1em; - border-bottom: 1px solid #cccccc; -} -.oo-ui-searchWidget-query .oo-ui-textInputWidget { - margin: 0.75em 0; -} -.oo-ui-searchWidget-results { - top: 4em; - padding: 1em; - line-height: 0; -} -.oo-ui-window { - background: transparent; -} -.oo-ui-window-frame { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-window-content:focus { - outline: none; -} -.oo-ui-window-head, -.oo-ui-window-foot { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-window-body { - margin: 0; - padding: 0; - background: none; -} -.oo-ui-window-overlay { - position: absolute; - top: 0; - /* @noflip */ - left: 0; -} -.oo-ui-dialog-content > .oo-ui-window-head, -.oo-ui-dialog-content > .oo-ui-window-body, -.oo-ui-dialog-content > .oo-ui-window-foot { - position: absolute; - left: 0; - right: 0; - overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-dialog-content > .oo-ui-window-head { - z-index: 1; - top: 0; -} -.oo-ui-dialog-content > .oo-ui-window-body { - z-index: 2; - top: 0; - bottom: 0; -} -.oo-ui-dialog-content > .oo-ui-window-foot { - z-index: 1; - bottom: 0; -} -.oo-ui-dialog-content > .oo-ui-window-body { - outline: 1px solid #aaaaaa; -} -.oo-ui-messageDialog-actions-horizontal { - display: table; - table-layout: fixed; - width: 100%; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - display: table-cell; - width: 1%; -} -.oo-ui-messageDialog-actions-vertical { - display: block; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget { - position: relative; - text-align: center; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button { - display: block; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label { - position: relative; - top: auto; - bottom: auto; - display: inline; - white-space: nowrap; -} -.oo-ui-messageDialog-title, -.oo-ui-messageDialog-message { - display: block; - text-align: center; - padding-top: 0.5em; -} -.oo-ui-messageDialog-title { - font-size: 1.5em; - line-height: 1em; - color: #000000; -} -.oo-ui-messageDialog-message { - font-size: 0.9em; - line-height: 1.25em; - color: #666666; -} -.oo-ui-messageDialog-message-verbose { - font-size: 1.1em; - line-height: 1.5em; - text-align: left; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - border-right: 1px solid #e5e5e5; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child { - border-right-width: 0; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - border-bottom: 1px solid #e5e5e5; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child { - border-bottom-width: 0; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget { - height: 3.4em; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label { - text-align: center; - line-height: 3.4em; - padding: 0 2em; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover { - background-color: rgba(8, 126, 204, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active { - background-color: rgba(8, 126, 204, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label { - font-weight: bold; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} -.oo-ui-processDialog-location { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.oo-ui-processDialog-title { - display: inline; - padding: 0; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget { - white-space: nowrap; -} -.oo-ui-processDialog-actions-safe, -.oo-ui-processDialog-actions-primary { - position: absolute; - top: 0; - bottom: 0; -} -.oo-ui-processDialog-actions-safe { - left: 0; -} -.oo-ui-processDialog-actions-primary { - right: 0; -} -.oo-ui-processDialog-errors { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 2; - overflow-x: hidden; - overflow-y: auto; -} -.oo-ui-processDialog-content .oo-ui-window-head { - height: 3.4em; -} -.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending { - background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif); -} -.oo-ui-processDialog-content .oo-ui-window-body { - top: 3.4em; - outline: 1px solid rgba(0, 0, 0, 0.2); -} -.oo-ui-processDialog-navigation { - position: relative; - height: 3.4em; - padding: 0 1em; -} -.oo-ui-processDialog-location { - padding: 0.75em 0; - height: 1.875em; - cursor: default; - text-align: center; -} -.oo-ui-processDialog-title { - font-weight: bold; - line-height: 1.875em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button { - min-width: 1.875em; - min-height: 1.875em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label { - line-height: 1.875em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon { - margin-top: -0.125em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed { - margin: 0.75em 0 0.75em 0.75em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button { - padding: 0 1em; - vertical-align: middle; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed { - margin: 0.75em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button { - /* Adjust for border so text aligns with title */ - margin: -1px; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover { - background-color: rgba(8, 126, 204, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active { - background-color: rgba(8, 126, 204, 0.1); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label { - font-weight: bold; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} -.oo-ui-processDialog > .oo-ui-window-frame { - min-height: 5em; -} -.oo-ui-processDialog-errors { - background-color: rgba(255, 255, 255, 0.9); - padding: 3em 3em 1.5em 3em; - text-align: center; -} -.oo-ui-processDialog-errors .oo-ui-buttonWidget { - margin: 2em 1em 2em 1em; -} -.oo-ui-processDialog-errors-title { - font-size: 1.5em; - color: #000000; - margin-bottom: 2em; -} -.oo-ui-processDialog-error { - text-align: left; - margin: 1em; - padding: 1em; - border: 1px solid #ff9e9e; - background-color: #fff7f7; - border-radius: 0.25em; -} -.oo-ui-windowManager-modal > .oo-ui-dialog { - position: fixed; - width: 0; - height: 0; - overflow: hidden; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active { - width: auto; - height: auto; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1em; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame { - position: absolute; - right: 0; - left: 0; - margin: auto; - overflow: hidden; - max-width: 100%; - max-height: 100%; -} -.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { - width: 100%; - height: 100%; - top: 0; - bottom: 0; -} -.oo-ui-windowManager-modal > .oo-ui-dialog { - background-color: rgba(255, 255, 255, 0.5); - opacity: 0; - -webkit-transition: opacity 250ms ease-in-out; - -moz-transition: opacity 250ms ease-in-out; - -ms-transition: opacity 250ms ease-in-out; - -o-transition: opacity 250ms ease-in-out; - transition: opacity 250ms ease-in-out; -} -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - top: 1em; - bottom: 1em; - background-color: #ffffff; - opacity: 0; - -webkit-transform: scale(0.5); - -moz-transform: scale(0.5); - -ms-transform: scale(0.5); - -o-transform: scale(0.5); - transform: scale(0.5); - -webkit-transition: all 250ms ease-in-out; - -moz-transition: all 250ms ease-in-out; - -ms-transition: all 250ms ease-in-out; - -o-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { - /* Fade window overlay */ - opacity: 1; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - /* Fade frame */ - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); -} -.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { - border: 1px solid #aaaaaa; - border-radius: 0.2em; - box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2); -} - -.oo-ui-icon-add { - background-image: url("themes/mediawiki/images/icons/add.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add.png"); -} -.oo-ui-image-constructive .oo-ui-icon-add, -.oo-ui-image-constructive.oo-ui-icon-add { - background-image: url("themes/mediawiki/images/icons/add-constructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-constructive.png"); -} -.oo-ui-image-invert .oo-ui-icon-add, -.oo-ui-image-invert.oo-ui-icon-add { - background-image: url("themes/mediawiki/images/icons/add-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-invert.png"); -} -.oo-ui-icon-advanced { - background-image: url("themes/mediawiki/images/icons/advanced.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced.png"); -} -.oo-ui-image-invert .oo-ui-icon-advanced, -.oo-ui-image-invert.oo-ui-icon-advanced { - background-image: url("themes/mediawiki/images/icons/advanced-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced-invert.png"); -} -.oo-ui-icon-alert { - background-image: url("themes/mediawiki/images/icons/alert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert.png"); -} -.oo-ui-image-warning .oo-ui-icon-alert, -.oo-ui-image-warning.oo-ui-icon-alert { - background-image: url("themes/mediawiki/images/icons/alert-warning.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-warning.png"); -} -.oo-ui-image-invert .oo-ui-icon-alert, -.oo-ui-image-invert.oo-ui-icon-alert { - background-image: url("themes/mediawiki/images/icons/alert-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-invert.png"); -} -.oo-ui-icon-cancel { - background-image: url("themes/mediawiki/images/icons/cancel.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/cancel.png"); -} -.oo-ui-image-invert .oo-ui-icon-cancel, -.oo-ui-image-invert.oo-ui-icon-cancel { - background-image: url("themes/mediawiki/images/icons/cancel-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/cancel-invert.png"); -} -.oo-ui-icon-check { - background-image: url("themes/mediawiki/images/icons/check.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png"); -} -.oo-ui-image-constructive .oo-ui-icon-check, -.oo-ui-image-constructive.oo-ui-icon-check { - background-image: url("themes/mediawiki/images/icons/check-constructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png"); -} -.oo-ui-image-progressive .oo-ui-icon-check, -.oo-ui-image-progressive.oo-ui-icon-check { - background-image: url("themes/mediawiki/images/icons/check-progressive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-progressive.png"); -} -.oo-ui-image-invert .oo-ui-icon-check, -.oo-ui-image-invert.oo-ui-icon-check { - background-image: url("themes/mediawiki/images/icons/check-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png"); -} -.oo-ui-icon-circle { - background-image: url("themes/mediawiki/images/icons/circle.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle.png"); -} -.oo-ui-image-constructive .oo-ui-icon-circle, -.oo-ui-image-constructive.oo-ui-icon-circle { - background-image: url("themes/mediawiki/images/icons/circle-constructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png"); -} -.oo-ui-image-invert .oo-ui-icon-circle, -.oo-ui-image-invert.oo-ui-icon-circle { - background-image: url("themes/mediawiki/images/icons/circle-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png"); -} -.oo-ui-icon-close { - background-image: url("themes/mediawiki/images/icons/close-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr.png"); -} -.oo-ui-image-invert .oo-ui-icon-close, -.oo-ui-image-invert.oo-ui-icon-close { - background-image: url("themes/mediawiki/images/icons/close-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr-invert.png"); -} -.oo-ui-icon-code { - background-image: url("themes/mediawiki/images/icons/code.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code.png"); -} -.oo-ui-image-invert .oo-ui-icon-code, -.oo-ui-image-invert.oo-ui-icon-code { - background-image: url("themes/mediawiki/images/icons/code-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code-invert.png"); -} -.oo-ui-icon-collapse { - background-image: url("themes/mediawiki/images/icons/collapse.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse.png"); -} -.oo-ui-image-invert .oo-ui-icon-collapse, -.oo-ui-image-invert.oo-ui-icon-collapse { - background-image: url("themes/mediawiki/images/icons/collapse-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse-invert.png"); -} -.oo-ui-icon-comment { - background-image: url("themes/mediawiki/images/icons/comment.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment.png"); -} -.oo-ui-image-invert .oo-ui-icon-comment, -.oo-ui-image-invert.oo-ui-icon-comment { - background-image: url("themes/mediawiki/images/icons/comment-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment-invert.png"); -} -.oo-ui-icon-ellipsis { - background-image: url("themes/mediawiki/images/icons/ellipsis.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis.png"); -} -.oo-ui-image-invert .oo-ui-icon-ellipsis, -.oo-ui-image-invert.oo-ui-icon-ellipsis { - background-image: url("themes/mediawiki/images/icons/ellipsis-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis-invert.png"); -} -.oo-ui-icon-expand { - background-image: url("themes/mediawiki/images/icons/expand.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand.png"); -} -.oo-ui-image-invert .oo-ui-icon-expand, -.oo-ui-image-invert.oo-ui-icon-expand { - background-image: url("themes/mediawiki/images/icons/expand-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand-invert.png"); -} -.oo-ui-icon-help { - background-image: url("themes/mediawiki/images/icons/help-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png"); -} -/* @noflip */ -.oo-ui-icon-help:lang(he) { - background-image: url("themes/mediawiki/images/icons/help-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png"); -} -/* @noflip */ -.oo-ui-icon-help:lang(yi) { - background-image: url("themes/mediawiki/images/icons/help-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png"); -} -.oo-ui-image-invert .oo-ui-icon-help, -.oo-ui-image-invert.oo-ui-icon-help { - background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png"); -} -/* @noflip */ -.oo-ui-image-invert .oo-ui-icon-help:lang(he), -.oo-ui-image-invert.oo-ui-icon-help:lang(he) { - background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png"); -} -/* @noflip */ -.oo-ui-image-invert .oo-ui-icon-help:lang(yi), -.oo-ui-image-invert.oo-ui-icon-help:lang(yi) { - background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png"); -} -.oo-ui-icon-history { - background-image: url("themes/mediawiki/images/icons/history.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history.png"); -} -.oo-ui-image-invert .oo-ui-icon-history, -.oo-ui-image-invert.oo-ui-icon-history { - background-image: url("themes/mediawiki/images/icons/history-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history-invert.png"); -} -.oo-ui-icon-info { - background-image: url("themes/mediawiki/images/icons/info.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info.png"); -} -.oo-ui-image-invert .oo-ui-icon-info, -.oo-ui-image-invert.oo-ui-icon-info { - background-image: url("themes/mediawiki/images/icons/info-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info-invert.png"); -} -.oo-ui-icon-menu { - background-image: url("themes/mediawiki/images/icons/menu.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu.png"); -} -.oo-ui-image-invert .oo-ui-icon-menu, -.oo-ui-image-invert.oo-ui-icon-menu { - background-image: url("themes/mediawiki/images/icons/menu-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu-invert.png"); -} -.oo-ui-icon-next { - background-image: url("themes/mediawiki/images/icons/move-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr.png"); -} -.oo-ui-image-invert .oo-ui-icon-next, -.oo-ui-image-invert.oo-ui-icon-next { - background-image: url("themes/mediawiki/images/icons/move-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr-invert.png"); -} -.oo-ui-icon-picture { - background-image: url("themes/mediawiki/images/icons/picture.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture.png"); -} -.oo-ui-image-invert .oo-ui-icon-picture, -.oo-ui-image-invert.oo-ui-icon-picture { - background-image: url("themes/mediawiki/images/icons/picture-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture-invert.png"); -} -.oo-ui-icon-previous { - background-image: url("themes/mediawiki/images/icons/move-rtl.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl.png"); -} -.oo-ui-image-invert .oo-ui-icon-previous, -.oo-ui-image-invert.oo-ui-icon-previous { - background-image: url("themes/mediawiki/images/icons/move-rtl-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl-invert.png"); -} -.oo-ui-icon-redo { - background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr.png"); -} -.oo-ui-image-invert .oo-ui-icon-redo, -.oo-ui-image-invert.oo-ui-icon-redo { - background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png"); -} -.oo-ui-icon-remove { - background-image: url("themes/mediawiki/images/icons/remove.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove.png"); -} -.oo-ui-image-destructive .oo-ui-icon-remove, -.oo-ui-image-destructive.oo-ui-icon-remove { - background-image: url("themes/mediawiki/images/icons/remove-destructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-destructive.png"); -} -.oo-ui-image-invert .oo-ui-icon-remove, -.oo-ui-image-invert.oo-ui-icon-remove { - background-image: url("themes/mediawiki/images/icons/remove-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-invert.png"); -} -.oo-ui-icon-search { - background-image: url("themes/mediawiki/images/icons/search-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search-ltr.png"); -} -.oo-ui-image-invert .oo-ui-icon-search, -.oo-ui-image-invert.oo-ui-icon-search { - background-image: url("themes/mediawiki/images/icons/search-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search-ltr-invert.png"); -} -.oo-ui-icon-settings { - background-image: url("themes/mediawiki/images/icons/settings.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings.png"); -} -.oo-ui-image-invert .oo-ui-icon-settings, -.oo-ui-image-invert.oo-ui-icon-settings { - background-image: url("themes/mediawiki/images/icons/settings-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings-invert.png"); -} -.oo-ui-icon-tag { - background-image: url("themes/mediawiki/images/icons/tag.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag.png"); -} -.oo-ui-image-destructive .oo-ui-icon-tag, -.oo-ui-image-destructive.oo-ui-icon-tag { - background-image: url("themes/mediawiki/images/icons/tag-destructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-destructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-destructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-destructive.png"); -} -.oo-ui-image-warning .oo-ui-icon-tag, -.oo-ui-image-warning.oo-ui-icon-tag { - background-image: url("themes/mediawiki/images/icons/tag-warning.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-warning.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-warning.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-warning.png"); -} -.oo-ui-image-constructive .oo-ui-icon-tag, -.oo-ui-image-constructive.oo-ui-icon-tag { - background-image: url("themes/mediawiki/images/icons/tag-constructive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-constructive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-constructive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-constructive.png"); -} -.oo-ui-image-progressive .oo-ui-icon-tag, -.oo-ui-image-progressive.oo-ui-icon-tag { - background-image: url("themes/mediawiki/images/icons/tag-progressive.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-progressive.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-progressive.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-progressive.png"); -} -.oo-ui-image-invert .oo-ui-icon-tag, -.oo-ui-image-invert.oo-ui-icon-tag { - background-image: url("themes/mediawiki/images/icons/tag-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-invert.png"); -} -.oo-ui-icon-undo { - background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl.png"); -} -.oo-ui-image-invert .oo-ui-icon-undo, -.oo-ui-image-invert.oo-ui-icon-undo { - background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png"); -} -.oo-ui-icon-window { - background-image: url("themes/mediawiki/images/icons/window.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window.png"); -} -.oo-ui-image-invert .oo-ui-icon-window, -.oo-ui-image-invert.oo-ui-icon-window { - background-image: url("themes/mediawiki/images/icons/window-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window-invert.png"); -} - -.oo-ui-indicator-alert { - background-image: url("themes/mediawiki/images/indicators/alert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert.png"); -} -.oo-ui-image-invert .oo-ui-indicator-alert, -.oo-ui-image-invert.oo-ui-indicator-alert { - background-image: url("themes/mediawiki/images/indicators/alert-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert-invert.png"); -} -.oo-ui-indicator-up { - background-image: url("themes/mediawiki/images/indicators/arrow-up.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up.png"); -} -.oo-ui-image-invert .oo-ui-indicator-up, -.oo-ui-image-invert.oo-ui-indicator-up { - background-image: url("themes/mediawiki/images/indicators/arrow-up-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up-invert.png"); -} -.oo-ui-indicator-down { - background-image: url("themes/mediawiki/images/indicators/arrow-down.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down.png"); -} -.oo-ui-image-invert .oo-ui-indicator-down, -.oo-ui-image-invert.oo-ui-indicator-down { - background-image: url("themes/mediawiki/images/indicators/arrow-down-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down-invert.png"); -} -.oo-ui-indicator-next { - background-image: url("themes/mediawiki/images/indicators/arrow-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr.png"); -} -.oo-ui-image-invert .oo-ui-indicator-next, -.oo-ui-image-invert.oo-ui-indicator-next { - background-image: url("themes/mediawiki/images/indicators/arrow-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr-invert.png"); -} -.oo-ui-indicator-previous { - background-image: url("themes/mediawiki/images/indicators/arrow-rtl.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl.png"); -} -.oo-ui-image-invert .oo-ui-indicator-previous, -.oo-ui-image-invert.oo-ui-indicator-previous { - background-image: url("themes/mediawiki/images/indicators/arrow-rtl-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl-invert.png"); -} -.oo-ui-indicator-required { - background-image: url("themes/mediawiki/images/indicators/required.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required.png"); -} -.oo-ui-image-invert .oo-ui-indicator-required, -.oo-ui-image-invert.oo-ui-indicator-required { - background-image: url("themes/mediawiki/images/indicators/required-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required-invert.png"); -} -.oo-ui-indicator-search { - background-image: url("themes/mediawiki/images/indicators/search-ltr.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/search-ltr.png"); -} -.oo-ui-image-invert .oo-ui-indicator-search, -.oo-ui-image-invert.oo-ui-indicator-search { - background-image: url("themes/mediawiki/images/indicators/search-ltr-invert.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr-invert.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr-invert.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/search-ltr-invert.png"); -} - -.oo-ui-texture-pending { - background-image: url("themes/mediawiki/images/textures/pending.gif"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/pending.gif"); -} -.oo-ui-texture-transparency { - background-image: url("themes/mediawiki/images/textures/transparency.png"); - background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg"); - background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg"); - background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/transparency.png"); -} diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js index eaca1f15..e6344f24 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.js +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.11.3 + * OOjs UI v0.12.12 * https://www.mediawiki.org/wiki/OOjs_UI * - * Copyright 2011–2015 OOjs Team and other contributors. + * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-05-12T12:15:37Z + * Date: 2015-10-13T20:38:18Z */ /** * @class @@ -16,7 +16,7 @@ */ OO.ui.MediaWikiTheme = function OoUiMediaWikiTheme() { // Parent constructor - OO.ui.MediaWikiTheme.super.call( this ); + OO.ui.MediaWikiTheme.parent.call( this ); }; /* Setup */ @@ -30,7 +30,7 @@ OO.inheritClass( OO.ui.MediaWikiTheme, OO.ui.Theme ); */ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) { // Parent method - var variant, + var variant, isFramed, isActive, variants = { warning: false, invert: false, @@ -39,12 +39,15 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) { destructive: false }, // Parent method - classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element ), - isFramed; + classes = OO.ui.MediaWikiTheme.parent.prototype.getElementClasses.call( this, element ); if ( element.supports( [ 'hasFlag' ] ) ) { isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed(); - if ( isFramed && ( element.isDisabled() || element.hasFlag( 'primary' ) ) ) { + isActive = element.supports( [ 'isActive' ] ) && element.isActive(); + if ( + ( isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ) || + ( !isFramed && element.hasFlag( 'primary' ) ) + ) { variants.invert = true; } else { variants.progressive = element.hasFlag( 'progressive' ); diff --git a/resources/lib/oojs-ui/oojs-ui.js b/resources/lib/oojs-ui/oojs-ui.js index 9692d5cf..aeff69e0 100644 --- a/resources/lib/oojs-ui/oojs-ui.js +++ b/resources/lib/oojs-ui/oojs-ui.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.11.3 + * OOjs UI v0.12.12 * https://www.mediawiki.org/wiki/OOjs_UI * - * Copyright 2011–2015 OOjs Team and other contributors. + * Copyright 2011–2015 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-05-12T12:15:37Z + * Date: 2015-10-13T20:38:18Z */ ( function ( OO ) { @@ -44,37 +44,102 @@ OO.ui.Keys = { SPACE: 32 }; +/** + * @property {Number} + */ +OO.ui.elementId = 0; + +/** + * Generate a unique ID for element + * + * @return {String} [id] + */ +OO.ui.generateElementId = function () { + OO.ui.elementId += 1; + return 'oojsui-' + OO.ui.elementId; +}; + /** * Check if an element is focusable. * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14 * * @param {jQuery} element Element to test - * @return {Boolean} [description] + * @return {boolean} */ OO.ui.isFocusableElement = function ( $element ) { - var node = $element[0], - nodeName = node.nodeName.toLowerCase(), - // Check if the element have tabindex set - isInElementGroup = /^(input|select|textarea|button|object)$/.test( nodeName ), - // Check if the element is a link with href or if it has tabindex - isOtherElement = ( - ( nodeName === 'a' && node.href ) || - !isNaN( $element.attr( 'tabindex' ) ) - ), - // Check if the element is visible - isVisible = ( - // This is quicker than calling $element.is( ':visible' ) - $.expr.filters.visible( node ) && - // Check that all parents are visible - !$element.parents().addBack().filter( function () { - return $.css( this, 'visibility' ) === 'hidden'; - } ).length - ); + var nodeName, + element = $element[ 0 ]; - return ( - ( isInElementGroup ? !node.disabled : isOtherElement ) && - isVisible - ); + // Anything disabled is not focusable + if ( element.disabled ) { + return false; + } + + // Check if the element is visible + if ( !( + // This is quicker than calling $element.is( ':visible' ) + $.expr.filters.visible( element ) && + // Check that all parents are visible + !$element.parents().addBack().filter( function () { + return $.css( this, 'visibility' ) === 'hidden'; + } ).length + ) ) { + return false; + } + + // Check if the element is ContentEditable, which is the string 'true' + if ( element.contentEditable === 'true' ) { + return true; + } + + // Anything with a non-negative numeric tabIndex is focusable. + // Use .prop to avoid browser bugs + if ( $element.prop( 'tabIndex' ) >= 0 ) { + return true; + } + + // Some element types are naturally focusable + // (indexOf is much faster than regex in Chrome and about the + // same in FF: https://jsperf.com/regex-vs-indexof-array2) + nodeName = element.nodeName.toLowerCase(); + if ( [ 'input', 'select', 'textarea', 'button', 'object' ].indexOf( nodeName ) !== -1 ) { + return true; + } + + // Links and areas are focusable if they have an href + if ( ( nodeName === 'a' || nodeName === 'area' ) && $element.attr( 'href' ) !== undefined ) { + return true; + } + + return false; +}; + +/** + * Find a focusable child + * + * @param {jQuery} $container Container to search in + * @param {boolean} [backwards] Search backwards + * @return {jQuery} Focusable child, an empty jQuery object if none found + */ +OO.ui.findFocusable = function ( $container, backwards ) { + var $focusable = $( [] ), + // $focusableCandidates is a superset of things that + // could get matched by isFocusableElement + $focusableCandidates = $container + .find( 'input, select, textarea, button, object, a, area, [contenteditable], [tabindex]' ); + + if ( backwards ) { + $focusableCandidates = Array.prototype.reverse.call( $focusableCandidates ); + } + + $focusableCandidates.each( function () { + var $this = $( this ); + if ( OO.ui.isFocusableElement( $this ) ) { + $focusable = $this; + return false; + } + } ); + return $focusable; }; /** @@ -182,6 +247,38 @@ OO.ui.debounce = function ( func, wait, immediate ) { }; }; +/** + * Proxy for `node.addEventListener( eventName, handler, true )`, if the browser supports it. + * Otherwise falls back to non-capturing event listeners. + * + * @param {HTMLElement} node + * @param {string} eventName + * @param {Function} handler + */ +OO.ui.addCaptureEventListener = function ( node, eventName, handler ) { + if ( node.addEventListener ) { + node.addEventListener( eventName, handler, true ); + } else { + node.attachEvent( 'on' + eventName, handler ); + } +}; + +/** + * Proxy for `node.removeEventListener( eventName, handler, true )`, if the browser supports it. + * Otherwise falls back to non-capturing event listeners. + * + * @param {HTMLElement} node + * @param {string} eventName + * @param {Function} handler + */ +OO.ui.removeCaptureEventListener = function ( node, eventName, handler ) { + if ( node.addEventListener ) { + node.removeEventListener( eventName, handler, true ); + } else { + node.detachEvent( 'on' + eventName, handler ); + } +}; + /** * Reconstitute a JavaScript object corresponding to a widget created by * the PHP implementation. @@ -230,7 +327,15 @@ OO.ui.infuse = function ( idOrNode ) { // Label for process dialog retry action button, visible when describing only recoverable errors 'ooui-dialog-process-retry': 'Try again', // Label for process dialog retry action button, visible when describing only warnings - 'ooui-dialog-process-continue': 'Continue' + 'ooui-dialog-process-continue': 'Continue', + // Label for the file selection widget's select file button + 'ooui-selectfile-button-select': 'Select a file', + // Label for the file selection widget if file selection is not supported + 'ooui-selectfile-not-supported': 'File selection is not supported', + // Label for the file selection widget when no file is currently selected + 'ooui-selectfile-placeholder': 'No file is selected', + // Label for the file selection widget's drop target + 'ooui-selectfile-dragdrop-placeholder': 'Drop file here' }; /** @@ -297,10 +402,102 @@ OO.ui.infuse = function ( idOrNode ) { return msg; }; + /** + * @param {string} url + * @return {boolean} + */ + OO.ui.isSafeUrl = function ( url ) { + var protocol, + // Keep in sync with php/Tag.php + whitelist = [ + 'bitcoin:', 'ftp:', 'ftps:', 'geo:', 'git:', 'gopher:', 'http:', 'https:', 'irc:', 'ircs:', + 'magnet:', 'mailto:', 'mms:', 'news:', 'nntp:', 'redis:', 'sftp:', 'sip:', 'sips:', 'sms:', 'ssh:', + 'svn:', 'tel:', 'telnet:', 'urn:', 'worldwind:', 'xmpp:' + ]; + + if ( url.indexOf( ':' ) === -1 ) { + // No protocol, safe + return true; + } + + protocol = url.split( ':', 1 )[ 0 ] + ':'; + if ( !protocol.match( /^([A-za-z0-9\+\.\-])+:/ ) ) { + // Not a valid protocol, safe + return true; + } + + // Safe if in the whitelist + return whitelist.indexOf( protocol ) !== -1; + }; + } )(); +/*! + * Mixin namespace. + */ + +/** + * Namespace for OOjs UI mixins. + * + * Mixins are named according to the type of object they are intended to + * be mixed in to. For example, OO.ui.mixin.GroupElement is intended to be + * mixed in to an instance of OO.ui.Element, and OO.ui.mixin.GroupWidget + * is intended to be mixed in to an instance of OO.ui.Widget. + * + * @class + * @singleton + */ +OO.ui.mixin = {}; + /** - * Element that can be marked as pending. + * PendingElement is a mixin that is used to create elements that notify users that something is happening + * and that they should wait before proceeding. The pending state is visually represented with a pending + * texture that appears in the head of a pending {@link OO.ui.ProcessDialog process dialog} or in the input + * field of a {@link OO.ui.TextInputWidget text input widget}. + * + * Currently, {@link OO.ui.ActionWidget Action widgets}, which mix in this class, can also be marked as pending, but only when + * used in {@link OO.ui.MessageDialog message dialogs}. The behavior is not currently supported for action widgets used + * in process dialogs. + * + * @example + * function MessageDialog( config ) { + * MessageDialog.parent.call( this, config ); + * } + * OO.inheritClass( MessageDialog, OO.ui.MessageDialog ); + * + * MessageDialog.static.actions = [ + * { action: 'save', label: 'Done', flags: 'primary' }, + * { label: 'Cancel', flags: 'safe' } + * ]; + * + * MessageDialog.prototype.initialize = function () { + * MessageDialog.parent.prototype.initialize.apply( this, arguments ); + * this.content = new OO.ui.PanelLayout( { $: this.$, padded: true } ); + * this.content.$element.append( '

      Click the \'Done\' action widget to see its pending state. Note that action widgets can be marked pending in message dialogs but not process dialogs.

      ' ); + * this.$body.append( this.content.$element ); + * }; + * MessageDialog.prototype.getBodyHeight = function () { + * return 100; + * } + * MessageDialog.prototype.getActionProcess = function ( action ) { + * var dialog = this; + * if ( action === 'save' ) { + * dialog.getActions().get({actions: 'save'})[0].pushPending(); + * return new OO.ui.Process() + * .next( 1000 ) + * .next( function () { + * dialog.getActions().get({actions: 'save'})[0].popPending(); + * } ); + * } + * return MessageDialog.parent.prototype.getActionProcess.call( this, action ); + * }; + * + * var windowManager = new OO.ui.WindowManager(); + * $( 'body' ).append( windowManager.$element ); + * + * var dialog = new MessageDialog(); + * windowManager.addWindows( [ dialog ] ); + * windowManager.openWindow( dialog ); * * @abstract * @class @@ -309,7 +506,7 @@ OO.ui.infuse = function ( idOrNode ) { * @param {Object} [config] Configuration options * @cfg {jQuery} [$pending] Element to mark as pending, defaults to this.$element */ -OO.ui.PendingElement = function OoUiPendingElement( config ) { +OO.ui.mixin.PendingElement = function OoUiMixinPendingElement( config ) { // Configuration initialization config = config || {}; @@ -323,7 +520,7 @@ OO.ui.PendingElement = function OoUiPendingElement( config ) { /* Setup */ -OO.initClass( OO.ui.PendingElement ); +OO.initClass( OO.ui.mixin.PendingElement ); /* Methods */ @@ -332,7 +529,7 @@ OO.initClass( OO.ui.PendingElement ); * * @param {jQuery} $pending The element to set to pending. */ -OO.ui.PendingElement.prototype.setPendingElement = function ( $pending ) { +OO.ui.mixin.PendingElement.prototype.setPendingElement = function ( $pending ) { if ( this.$pending ) { this.$pending.removeClass( 'oo-ui-pendingElement-pending' ); } @@ -344,20 +541,21 @@ OO.ui.PendingElement.prototype.setPendingElement = function ( $pending ) { }; /** - * Check if input is pending. + * Check if an element is pending. * - * @return {boolean} + * @return {boolean} Element is pending */ -OO.ui.PendingElement.prototype.isPending = function () { +OO.ui.mixin.PendingElement.prototype.isPending = function () { return !!this.pending; }; /** - * Increase the pending stack. + * Increase the pending counter. The pending state will remain active until the counter is zero + * (i.e., the number of calls to #pushPending and #popPending is the same). * * @chainable */ -OO.ui.PendingElement.prototype.pushPending = function () { +OO.ui.mixin.PendingElement.prototype.pushPending = function () { if ( this.pending === 0 ) { this.$pending.addClass( 'oo-ui-pendingElement-pending' ); this.updateThemeClasses(); @@ -368,13 +566,12 @@ OO.ui.PendingElement.prototype.pushPending = function () { }; /** - * Reduce the pending stack. - * - * Clamped at zero. + * Decrease the pending counter. The pending state will remain active until the counter is zero + * (i.e., the number of calls to #pushPending and #popPending is the same). * * @chainable */ -OO.ui.PendingElement.prototype.popPending = function () { +OO.ui.mixin.PendingElement.prototype.popPending = function () { if ( this.pending === 1 ) { this.$pending.removeClass( 'oo-ui-pendingElement-pending' ); this.updateThemeClasses(); @@ -399,7 +596,7 @@ OO.ui.PendingElement.prototype.popPending = function () { * @example * // Example: An action set used in a process dialog * function MyProcessDialog( config ) { - * MyProcessDialog.super.call( this, config ); + * MyProcessDialog.parent.call( this, config ); * } * OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog ); * MyProcessDialog.static.title = 'An action set in a process dialog'; @@ -412,7 +609,7 @@ OO.ui.PendingElement.prototype.popPending = function () { * ]; * * MyProcessDialog.prototype.initialize = function () { - * MyProcessDialog.super.prototype.initialize.apply( this, arguments ); + * MyProcessDialog.parent.prototype.initialize.apply( this, arguments ); * this.panel1 = new OO.ui.PanelLayout( { padded: true, expanded: false } ); * this.panel1.$element.append( '

      This dialog uses an action set (continue, help, cancel, back) configured with modes. This is edit mode. Click \'help\' to see help mode.

      ' ); * this.panel2 = new OO.ui.PanelLayout( { padded: true, expanded: false } ); @@ -423,7 +620,7 @@ OO.ui.PendingElement.prototype.popPending = function () { * this.$body.append( this.stackLayout.$element ); * }; * MyProcessDialog.prototype.getSetupProcess = function ( data ) { - * return MyProcessDialog.super.prototype.getSetupProcess.call( this, data ) + * return MyProcessDialog.parent.prototype.getSetupProcess.call( this, data ) * .next( function () { * this.actions.setMode( 'edit' ); * }, this ); @@ -441,7 +638,7 @@ OO.ui.PendingElement.prototype.popPending = function () { * dialog.close(); * } ); * } - * return MyProcessDialog.super.prototype.getActionProcess.call( this, action ); + * return MyProcessDialog.parent.prototype.getActionProcess.call( this, action ); * }; * MyProcessDialog.prototype.getBodyHeight = function () { * return this.panel1.$element.outerHeight( true ); @@ -908,7 +1105,8 @@ OO.ui.ActionSet.prototype.organize = function () { * @cfg {Array} [content] An array of content elements to append (after #text). * Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML. * Instances of OO.ui.Element will have their $element appended. - * @cfg {jQuery} [$content] Content elements to append (after #text) + * @cfg {jQuery} [$content] Content elements to append (after #text). + * @cfg {jQuery} [$element] Wrapper element. Defaults to a new element with #getTagName. * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object). * Data can also be specified with the #setData method. */ @@ -923,8 +1121,7 @@ OO.ui.Element = function OoUiElement( config ) { this.$element = config.$element || $( document.createElement( this.getTagName() ) ); this.elementGroup = null; - this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this ); - this.updateThemeClassesPending = false; + this.debouncedUpdateThemeClassesHandler = OO.ui.debounce( this.debouncedUpdateThemeClasses ); // Initialization if ( Array.isArray( config.classes ) ) { @@ -991,7 +1188,7 @@ OO.ui.Element.static.tagName = 'div'; * DOM node. */ OO.ui.Element.static.infuse = function ( idOrNode ) { - var obj = OO.ui.Element.static.unsafeInfuse( idOrNode, true ); + var obj = OO.ui.Element.static.unsafeInfuse( idOrNode, false ); // Verify that the type matches up. // FIXME: uncomment after T89721 is fixed (see T90929) /* @@ -1007,12 +1204,14 @@ OO.ui.Element.static.infuse = function ( idOrNode ) { * extra property so that only the top-level invocation touches the DOM. * @private * @param {string|HTMLElement|jQuery} idOrNode - * @param {boolean} top True only for top-level invocation. + * @param {jQuery.Promise|boolean} domPromise A promise that will be resolved + * when the top-level widget of this infusion is inserted into DOM, + * replacing the original node; or false for top-level invocation. * @return {OO.ui.Element} */ -OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) { +OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) { // look for a cached result of a previous infusion. - var id, $elem, data, cls, obj; + var id, $elem, data, cls, parts, parent, obj, top, state; if ( typeof idOrNode === 'string' ) { id = idOrNode; $elem = $( document.getElementById( id ) ); @@ -1020,7 +1219,10 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) { $elem = $( idOrNode ); id = $elem.attr( 'id' ); } - data = $elem.data( 'ooui-infused' ); + if ( !$elem.length ) { + throw new Error( 'Widget not found: ' + id ); + } + data = $elem.data( 'ooui-infused' ) || $elem[ 0 ].oouiInfused; if ( data ) { // cached! if ( data === true ) { @@ -1028,9 +1230,6 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) { } return data; } - if ( !$elem.length ) { - throw new Error( 'Widget not found: ' + id ); - } data = $elem.attr( 'data-ooui' ); if ( !data ) { throw new Error( 'No infusion data found: ' + id ); @@ -1047,16 +1246,43 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) { // Special case: this is a raw Tag; wrap existing node, don't rebuild. return new OO.ui.Element( { $element: $elem } ); } - cls = OO.ui[data._]; - if ( !cls ) { - throw new Error( 'Unknown widget type: ' + id ); + parts = data._.split( '.' ); + cls = OO.getProp.apply( OO, [ window ].concat( parts ) ); + if ( cls === undefined ) { + // The PHP output might be old and not including the "OO.ui" prefix + // TODO: Remove this back-compat after next major release + cls = OO.getProp.apply( OO, [ OO.ui ].concat( parts ) ); + if ( cls === undefined ) { + throw new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ ); + } + } + + // Verify that we're creating an OO.ui.Element instance + parent = cls.parent; + + while ( parent !== undefined ) { + if ( parent === OO.ui.Element ) { + // Safe + break; + } + + parent = parent.parent; + } + + if ( parent !== OO.ui.Element ) { + throw new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ ); + } + + if ( domPromise === false ) { + top = $.Deferred(); + domPromise = top.promise(); } $elem.data( 'ooui-infused', true ); // prevent loops data.id = id; // implicit data = OO.copy( data, null, function deserialize( value ) { if ( OO.isPlainObject( value ) ) { if ( value.tag ) { - return OO.ui.Element.static.unsafeInfuse( value.tag, false ); + return OO.ui.Element.static.unsafeInfuse( value.tag, domPromise ); } if ( value.html ) { return new OO.ui.HtmlSnippet( value.html ); @@ -1065,13 +1291,22 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) { } ); // jscs:disable requireCapitalizedConstructors obj = new cls( data ); // rebuild widget + // pick up dynamic state, like focus, value of form inputs, scroll position, etc. + state = obj.gatherPreInfuseState( $elem ); // now replace old DOM with this new DOM. if ( top ) { $elem.replaceWith( obj.$element ); + // This element is now gone from the DOM, but if anyone is holding a reference to it, + // let's allow them to OO.ui.infuse() it and do what they expect (T105828). + // Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design. + $elem[ 0 ].oouiInfused = obj; + top.resolve(); } obj.$element.data( 'ooui-infused', obj ); // set the 'data-ooui' attribute so we can identify infused widgets obj.$element.attr( 'data-ooui', '' ); + // restore dynamic state after the new element is inserted into DOM + domPromise.done( obj.restorePreInfuseState.bind( obj, state ) ); return obj; }; @@ -1128,6 +1363,8 @@ OO.ui.Element.static.getDocument = function ( obj ) { */ OO.ui.Element.static.getWindow = function ( obj ) { var doc = this.getDocument( obj ); + // Support: IE 8 + // Standard Document.defaultView is IE9+ return doc.parentWindow || doc.defaultView; }; @@ -1243,9 +1480,13 @@ OO.ui.Element.static.getRelativePosition = function ( $element, $anchor ) { */ OO.ui.Element.static.getBorders = function ( el ) { var doc = el.ownerDocument, + // Support: IE 8 + // Standard Document.defaultView is IE9+ win = doc.parentWindow || doc.defaultView, style = win && win.getComputedStyle ? win.getComputedStyle( el, null ) : + // Support: IE 8 + // Standard getComputedStyle() is IE9+ el.currentStyle, $el = $( el ), top = parseFloat( style ? style.borderTopWidth : $el.css( 'borderTopWidth' ) ) || 0, @@ -1271,6 +1512,8 @@ OO.ui.Element.static.getBorders = function ( el ) { OO.ui.Element.static.getDimensions = function ( el ) { var $el, $win, doc = el.ownerDocument || el.document, + // Support: IE 8 + // Standard Document.defaultView is IE9+ win = doc.parentWindow || doc.defaultView; if ( win === el || el === doc.documentElement ) { @@ -1351,11 +1594,12 @@ OO.ui.Element.static.getRootScrollableElement = function ( el ) { */ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) { var i, val, - props = [ 'overflow' ], + // props = [ 'overflow' ] doesn't work due to https://bugzilla.mozilla.org/show_bug.cgi?id=889091 + props = [ 'overflow-x', 'overflow-y' ], $parent = $( el ).parent(); if ( dimension === 'x' || dimension === 'y' ) { - props.push( 'overflow-' + dimension ); + props = [ 'overflow-' + dimension ]; } while ( $parent.length ) { @@ -1386,16 +1630,18 @@ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) * @param {Function} [config.complete] Function to call when scrolling completes */ OO.ui.Element.static.scrollIntoView = function ( el, config ) { + var rel, anim, callback, sc, $sc, eld, scd, $win; + // Configuration initialization config = config || {}; - var rel, anim = {}, - callback = typeof config.complete === 'function' && config.complete, - sc = this.getClosestScrollableContainer( el, config.direction ), - $sc = $( sc ), - eld = this.getDimensions( el ), - scd = this.getDimensions( sc ), - $win = $( this.getWindow( el ) ); + anim = {}; + callback = typeof config.complete === 'function' && config.complete; + sc = this.getClosestScrollableContainer( el, config.direction ); + $sc = $( sc ); + eld = this.getDimensions( el ); + scd = this.getDimensions( sc ); + $win = $( this.getWindow( el ) ); // Compute the distances between the edges of el and the edges of the scroll viewport if ( $sc.is( 'html, body' ) ) { @@ -1458,7 +1704,10 @@ OO.ui.Element.static.scrollIntoView = function ( el, config ) { * @param {HTMLElement} el Element to reconsider the scrollbars on */ OO.ui.Element.static.reconsiderScrollbars = function ( el ) { - var i, len, nodes = []; + var i, len, scrollLeft, scrollTop, nodes = []; + // Save scroll position + scrollLeft = el.scrollLeft; + scrollTop = el.scrollTop; // Detach all children while ( el.firstChild ) { nodes.push( el.firstChild ); @@ -1470,6 +1719,9 @@ OO.ui.Element.static.reconsiderScrollbars = function ( el ) { for ( i = 0, len = nodes.length; i < len; i++ ) { el.appendChild( nodes[ i ] ); } + // Restore scroll position (no-op if scrollbars disappeared) + el.scrollLeft = scrollLeft; + el.scrollTop = scrollTop; }; /* Methods */ @@ -1550,18 +1802,16 @@ OO.ui.Element.prototype.supports = function ( methods ) { * guaranteeing that theme updates do not occur within an element's constructor */ OO.ui.Element.prototype.updateThemeClasses = function () { - if ( !this.updateThemeClassesPending ) { - this.updateThemeClassesPending = true; - setTimeout( this.debouncedUpdateThemeClassesHandler ); - } + this.debouncedUpdateThemeClassesHandler(); }; /** * @private + * @localdoc This method is called directly from the QUnit tests instead of #updateThemeClasses, to + * make them synchronous. */ OO.ui.Element.prototype.debouncedUpdateThemeClasses = function () { OO.ui.theme.updateElementClasses( this ); - this.updateThemeClassesPending = false; }; /** @@ -1612,7 +1862,7 @@ OO.ui.Element.prototype.getClosestScrollableElementContainer = function () { /** * Get group element is in. * - * @return {OO.ui.GroupElement|null} Group element, null if none + * @return {OO.ui.mixin.GroupElement|null} Group element, null if none */ OO.ui.Element.prototype.getElementGroup = function () { return this.elementGroup; @@ -1621,7 +1871,7 @@ OO.ui.Element.prototype.getElementGroup = function () { /** * Set group element is in. * - * @param {OO.ui.GroupElement|null} group Group element, null if none + * @param {OO.ui.mixin.GroupElement|null} group Group element, null if none * @chainable */ OO.ui.Element.prototype.setElementGroup = function ( group ) { @@ -1638,12 +1888,41 @@ OO.ui.Element.prototype.scrollElementIntoView = function ( config ) { return OO.ui.Element.static.scrollIntoView( this.$element[ 0 ], config ); }; +/** + * Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of a HTML DOM node + * (and its children) that represent an Element of the same type and configuration as the current + * one, generated by the PHP implementation. + * + * This method is called just before `node` is detached from the DOM. The return value of this + * function will be passed to #restorePreInfuseState after this widget's #$element is inserted into + * DOM to replace `node`. + * + * @protected + * @param {HTMLElement} node + * @return {Object} + */ +OO.ui.Element.prototype.gatherPreInfuseState = function () { + return {}; +}; + +/** + * Restore the pre-infusion dynamic state for this widget. + * + * This method is called after #$element has been inserted into DOM. The parameter is the return + * value of #gatherPreInfuseState. + * + * @protected + * @param {Object} state + */ +OO.ui.Element.prototype.restorePreInfuseState = function () { +}; + /** * Layouts are containers for elements and are used to arrange other widgets of arbitrary type in a way * that is centrally controlled and can be updated dynamically. Layouts can be, and usually are, combined. * See {@link OO.ui.FieldsetLayout FieldsetLayout}, {@link OO.ui.FieldLayout FieldLayout}, {@link OO.ui.FormLayout FormLayout}, * {@link OO.ui.PanelLayout PanelLayout}, {@link OO.ui.StackLayout StackLayout}, {@link OO.ui.PageLayout PageLayout}, - * and {@link OO.ui.BookletLayout BookletLayout} for more information and examples. + * {@link OO.ui.HorizontalLayout HorizontalLayout}, and {@link OO.ui.BookletLayout BookletLayout} for more information and examples. * * @abstract * @class @@ -1658,7 +1937,7 @@ OO.ui.Layout = function OoUiLayout( config ) { config = config || {}; // Parent constructor - OO.ui.Layout.super.call( this, config ); + OO.ui.Layout.parent.call( this, config ); // Mixin constructors OO.EventEmitter.call( this ); @@ -1692,7 +1971,7 @@ OO.ui.Widget = function OoUiWidget( config ) { config = $.extend( { disabled: false }, config ); // Parent constructor - OO.ui.Widget.super.call( this, config ); + OO.ui.Widget.parent.call( this, config ); // Mixin constructors OO.EventEmitter.call( this ); @@ -1711,12 +1990,26 @@ OO.ui.Widget = function OoUiWidget( config ) { OO.inheritClass( OO.ui.Widget, OO.ui.Element ); OO.mixinClass( OO.ui.Widget, OO.EventEmitter ); +/* Static Properties */ + +/** + * Whether this widget will behave reasonably when wrapped in a HTML `

      '; - exit; - } - require_once $autoload; - - $testSuiteFile = 'JSPHP-suite.json'; - if ( !file_exists( $testSuiteFile ) ) { - echo '

      Did you forget to run grunt build?

      '; - exit; - } - $testSuiteJSON = file_get_contents( $testSuiteFile ); - $testSuite = json_decode( $testSuiteJSON, true ); -?> - - - - - OOjs UI Test Suite - - - - - - - - - - - - - - - - - - - - - -
      -
      - - diff --git a/vendor/oyejorge/less.php/CHANGES.md b/vendor/oyejorge/less.php/CHANGES.md new file mode 100644 index 00000000..906a9af1 --- /dev/null +++ b/vendor/oyejorge/less.php/CHANGES.md @@ -0,0 +1,6 @@ +This is where the changelog will go for 1.7.0.9 or higher now. + +# 1.7.0.9 + + - Remove space at beginning of Version.php + - Revert require() paths in test interface \ No newline at end of file diff --git a/vendor/oyejorge/less.php/LICENSE b/vendor/oyejorge/less.php/LICENSE new file mode 100644 index 00000000..82216a5d --- /dev/null +++ b/vendor/oyejorge/less.php/LICENSE @@ -0,0 +1,178 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + diff --git a/vendor/oyejorge/less.php/README.md b/vendor/oyejorge/less.php/README.md new file mode 100644 index 00000000..1c53364d --- /dev/null +++ b/vendor/oyejorge/less.php/README.md @@ -0,0 +1,322 @@ +[Less.php](http://lessphp.gpeasy.com) +======== + +This is a PHP port of the official LESS processor . [![Build Status](https://travis-ci.org/oyejorge/less.php.png?branch=master)](https://travis-ci.org/oyejorge/less.php) + +* [About](#about) +* [Installation](#installation) +* [Basic Use](#basic-use) +* [Caching](#caching) +* [Source Maps](#source-maps) +* [Command Line](#command-line) +* [Integration with other projects](#integration-with-other-projects) +* [Transitioning from Leafo/lessphp](#transitioning-from-leafolessphp) +* [Credits](#credits) + + + +About +--- +The code structure of less.php mirrors that of the official processor which helps us ensure compatibility and allows for easy maintenance. + +Please note, there are a few unsupported LESS features: + +- Evaluation of JavaScript expressions within back-ticks (for obvious reasons). +- Definition of custom functions. + + +Installation +--- + +You can install the library with composer or manually. + +#### Composer + +Step 1. Edit your `composer.json`: + +```json +{ + "require": { + "oyejorge/less.php": "~1.5" + } +} +``` + +Step 2. Install it: + +```bash +$ curl -sS https://getcomposer.org/installer | php +$ php composer.phar install +``` + +#### Manually From Release + +Step 1. [Download the latest release](https://github.com/oyejorge/less.php/releases) and upload the php files to your server. + +Step 2. Include the library: + +```php +require_once '[path to less.php]/Less.php'; +``` + +#### Manually From Source + +Step 1. [Download the source](https://github.com/oyejorge/less.php/archive/master.zip) and upload the files in /lib/Less to a folder on your server. + +Step 2. Include the library and register the Autoloader + +```php +require_once '[path to less.php]/Autoloader.php'; +Less_Autoloader::register(); +``` + +Basic Use +--- + +#### Parsing Strings + +```php +$parser = new Less_Parser(); +$parser->parse( '@color: #4D926F; #header { color: @color; } h2 { color: @color; }' ); +$css = $parser->getCss(); +``` + + +#### Parsing Less Files +The parseFile() function takes two arguments: + +1. The absolute path of the .less file to be parsed +2. The url root to prepend to any relative image or @import urls in the .less file. + +```php +$parser = new Less_Parser(); +$parser->parseFile( '/var/www/mysite/bootstrap.less', 'http://example.com/mysite/' ); +$css = $parser->getCss(); +``` + + +#### Handling Invalid Less +An exception will be thrown if the compiler encounters invalid less + +```php +try{ + $parser = new Less_Parser(); + $parser->parseFile( '/var/www/mysite/bootstrap.less', 'http://example.com/mysite/' ); + $css = $parser->getCss(); +}catch(Exception $e){ + $error_message = $e->getMessage(); +} +``` + + +#### Parsing Multiple Sources +less.php can parse multiple sources to generate a single css file + +```php +$parser = new Less_Parser(); +$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' ); +$parser->parse( '@color: #4D926F; #header { color: @color; } h2 { color: @color; }' ); +$css = $parser->getCss(); +``` + +#### Getting Info About The Parsed Files +less.php can tell you which .less files were imported and parsed. + +```php +$parser = new Less_Parser(); +$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' ); +$css = $parser->getCss(); +$imported_files = $parser->allParsedFiles(); +``` + + +#### Compressing Output +You can tell less.php to remove comments and whitespace to generate minimized css files. + +```php +$options = array( 'compress'=>true ); +$parser = new Less_Parser( $options ); +$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' ); +$css = $parser->getCss(); +``` + +#### Setting Variables +You can use the ModifyVars() method to customize your css if you have variables stored in php associative arrays + +```php +$parser = new Less_Parser(); +$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' ); +$parser->ModifyVars( array('font-size-base'=>'16px') ); +$css = $parser->getCss(); +``` + + +#### Import Directories +By default, less.php will look for @imports in the directory of the file passed to parsefile(). +If you're using parse() or if @imports reside in different directories, you can tell less.php where to look. + +```php +$directories = array( '/var/www/mysite/bootstrap/' => '/mysite/bootstrap/' ); +$parser = new Less_Parser(); +$parser->SetImportDirs( $directories ); +$parser->parseFile( '/var/www/mysite/theme.less', '/mysite/' ); +$css = $parser->getCss(); +``` + + +Caching +--- +Compiling less code into css is a time consuming process, caching your results is highly recommended. + + +#### Caching CSS +Use the Less_Cache class to save and reuse the results of compiled less files. +This method will check the modified time and size of each less file (including imported files) and regenerate a new css file when changes are found. +Note: When changes are found, this method will return a different file name for the new cached content. + +```php +$less_files = array( '/var/www/mysite/bootstrap.less' => '/mysite/' ); +$options = array( 'cache_dir' => '/var/www/writable_folder' ); +$css_file_name = Less_Cache::Get( $less_files, $options ); +$compiled = file_get_contents( '/var/www/writable_folder/'.$css_file_name ); +``` + +#### Caching CSS With Variables +Passing options to Less_Cache::Get() + +```php +$less_files = array( '/var/www/mysite/bootstrap.less' => '/mysite/' ); +$options = array( 'cache_dir' => '/var/www/writable_folder' ); +$variables = array( 'width' => '100px' ); +$css_file_name = Less_Cache::Get( $less_files, $options, $variables ); +$compiled = file_get_contents( '/var/www/writable_folder/'.$css_file_name ); +``` + + +#### Parser Caching +less.php will save serialized parser data for each .less file if a writable folder is passed to the SetCacheDir() method. +Note: This feature only caches intermediate parsing results to improve the performance of repeated css generation. +Your application should cache any css generated by less.php. + +```php +$options = array('cache_dir'=>'/var/www/writable_folder'); +$parser = new Less_Parser( $options ); +$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' ); +$css = $parser->getCss(); +``` + +You can specify the caching technique used by changing the ```cache_method``` option. Supported methods are: +* ```php```: Creates valid PHP files which can be included without any changes (default method). +* ```var_export```: Like "php", but using PHPs ```var_export()``` function without any optimizations. + It's recommended to use "php" instead. +* ```serialize```: Faster, but pretty memory-intense. +* ```callback```: Use custom callback functions to implement your own caching method. Give the "cache_callback_get" and + "cache_callback_set" options with callables (see PHPs ```call_user_func()``` and ```is_callable()``` functions). less.php + will pass the parser object (class ```Less_Parser```), the path to the parsed .less file ("/some/path/to/file.less") and + an identifier that will change every time the .less file is modified. The ```get``` callback must return the ruleset + (an array with ```Less_Tree``` objects) provided as fourth parameter of the ```set``` callback. If something goes wrong, + return ```NULL``` (cache doesn't exist) or ```FALSE```. + + + +Source Maps +--- +Less.php supports v3 sourcemaps + +#### Inline +The sourcemap will be appended to the generated css file. + +```php +$options = array( 'sourceMap' => true ); +$parser = new Less_Parser($options); +$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' ); +$css = $parser->getCss(); +``` + +#### Saving to Map File + +```php +$options = array( + 'sourceMap' => true, + 'sourceMapWriteTo' => '/var/www/mysite/writable_folder/filename.map', + 'sourceMapURL' => '/mysite/writable_folder/filename.map', + ); +$parser = new Less_Parser($options); +$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' ); +$css = $parser->getCss(); +``` + + +Command line +--- +An additional script has been included to use the compiler from the command line. +In the simplest invocation, you specify an input file and the compiled css is written to standard out: + +``` +$ lessc input.less > output.css +``` + +By using the -w flag you can watch a specified input file and have it compile as needed to the output file: + +``` +$ lessc -w input.less output.css +``` + +Errors from watch mode are written to standard out. + +For more help, run `lessc --help` + + +Integration with other projects +--- + +#### Drupal 7 + +This library can be used as drop-in replacement of lessphp to work with [Drupal 7 less module](https://drupal.org/project/less). + +How to install: + +1. [Download the less.php source code](https://github.com/oyejorge/less.php/archive/master.zip) and unzip it so that 'lessc.inc.php' is located at 'sites/all/libraries/lessphp/lessc.inc.php'. +2. Download and install [Drupal 7 less module](https://drupal.org/project/less) as usual. +3. That's it :) + +#### JBST WordPress theme + +JBST has a built-in LESS compiler based on lessphp. Customize your WordPress theme with LESS. + +How to use / install: + +1. [Download the latest release](https://github.com/bassjobsen/jamedo-bootstrap-start-theme) copy the files to your {wordpress/}wp-content/themes folder and activate it. +2. Find the compiler under Appearance > LESS Compiler in your WordPress dashboard +3. Enter your LESS code in the text area and press (re)compile + +Use the built-in compiler to: +- set any [Bootstrap](http://getbootstrap.com/customize/) variable or use Bootstrap's mixins: + -`@navbar-default-color: blue;` + - create a custom button: `.btn-custom { + .button-variant(white; red; blue); +}` +- set any built-in LESS variable: for example `@footer_bg_color: black;` sets the background color of the footer to black +- use built-in mixins: - add a custom font: `.include-custom-font(@family: arial,@font-path, @path: @custom-font-dir, @weight: normal, @style: normal);` + +The compiler can also be download as [plugin](http://wordpress.org/plugins/wp-less-to-css/) + +#### WordPress + +This simple plugin will simply make the library available to other plugins and themes and can be used as a dependency using the [TGM Library](http://tgmpluginactivation.com/) + +How to install: + +1. Install the plugin from your WordPress Dashboard: http://wordpress.org/plugins/lessphp/ +2. That's it :) + + +Transitioning from Leafo/lessphp +--- +Projects looking for an easy transition from leafo/lessphp can use the lessc.inc.php adapter. To use, [Download the less.php source code](https://github.com/oyejorge/less.php/archive/master.zip) and unzip the files into your project so that the new 'lessc.inc.php' replaces the existing 'lessc.inc.php'. + +Note, the 'setPreserveComments' will no longer have any effect on the compiled less. + +Credits +--- +less.php was originally ported to php by [Matt Agar](https://github.com/agar) and then updated by [Martin JantoÅ¡oviÄ](https://github.com/Mordred). diff --git a/vendor/oyejorge/less.php/bin/lessc b/vendor/oyejorge/less.php/bin/lessc new file mode 100644 index 00000000..fa1fb958 --- /dev/null +++ b/vendor/oyejorge/less.php/bin/lessc @@ -0,0 +1,191 @@ +#!/usr/bin/env php + false, 'relativeUrls' => false); +$silent = false; +$watch = false; +$rootpath = ''; + +// Check for arguments +array_shift($argv); +if (!count($argv)) { + $argv[] = '-h'; +} + +// parse arguments +foreach ($argv as $key => $arg) { + if (preg_match('/^--?([a-z][0-9a-z-]*)(?:=([^\s]+))?$/i', $arg, $matches)) { + $option = $matches[1]; + $value = isset($matches[2]) ? $matches[2] : false; + unset($argv[$key]); + + switch ($option) { + case 'h': + case 'help': + echo << 1) { + $output = array_pop($argv); + $inputs = $argv; +} +else { + $inputs = $argv; + $output = false; +} + +if (!count($inputs)) { + echo("lessc: no input files\n"); + exit; +} + +if ($watch) { + if (!$output) { + echo("lessc: you must specify the output file if --watch is given\n"); + exit; + } + + $lastAction = 0; + + echo("lessc: watching input files\n"); + + while (1) { + clearstatcache(); + + $updated = false; + foreach ($inputs as $input) { + if ($input == '-') { + if (count($inputs) == 1) { + echo("lessc: during watching files is not possible to watch stdin\n"); + exit; + } + else { + continue; + } + } + + if (filemtime($input) > $lastAction) { + $updated = true; + break; + } + } + + if ($updated) { + $lastAction = time(); + $parser = new Less_Parser($env); + foreach ($inputs as $input) { + try { + $parser->parseFile($input, $rootpath); + } + catch (Exception $e) { + echo("lessc: " . $e->getMessage() . " \n"); + continue; // Invalid processing + } + } + + file_put_contents($output, $parser->getCss()); + echo("lessc: output file recompiled\n"); + } + + sleep(1); + } +} +else { + $parser = new Less_Parser($env); + foreach ($inputs as $input) { + if ($input == '-') { + $content = file_get_contents('php://stdin'); + $parser->parse($content); + } + else { + try { + $parser->parseFile($input); + } + catch (Exception $e) { + if (!$silent) { + echo("lessc: " . ((string)$e) . " \n"); + } + } + } + } + + if ($output) { + file_put_contents($output, $parser->getCss()); + } + else { + echo $parser->getCss(); + } +} diff --git a/vendor/oyejorge/less.php/composer.json b/vendor/oyejorge/less.php/composer.json new file mode 100644 index 00000000..7724e3f2 --- /dev/null +++ b/vendor/oyejorge/less.php/composer.json @@ -0,0 +1,31 @@ +{ + "name": "oyejorge/less.php", + "description": "PHP port of the Javascript version of LESS http://lesscss.org", + "keywords": [ "less", "css", "php", "stylesheet", "less.js", "lesscss" ], + "homepage": "http://lessphp.gpeasy.com", + "license": "Apache-2.0", + "authors": [ + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + }, + { + "name": "Matt Agar", + "homepage": "https://github.com/agar" + }, + { + "name": "Martin JantoÅ¡oviÄ", + "homepage": "https://github.com/Mordred" + } + ], + "require": { + "PHP" : ">=5.3" + }, + "autoload": { + "psr-0": { "Less": "lib/" }, + "classmap": ["lessc.inc.php"] + }, + "bin": [ + "bin/lessc" + ] +} diff --git a/vendor/oyejorge/less.php/lessc.inc.php b/vendor/oyejorge/less.php/lessc.inc.php new file mode 100644 index 00000000..c77a1c05 --- /dev/null +++ b/vendor/oyejorge/less.php/lessc.inc.php @@ -0,0 +1,268 @@ +importDir = (array)$dirs; + } + + public function addImportDir($dir){ + $this->importDir = (array)$this->importDir; + $this->importDir[] = $dir; + } + + public function setFormatter($name) + { + $this->formatterName = $name; + } + + public function setPreserveComments($preserve) {} + public function registerFunction($name, $func) { + $this->libFunctions[$name] = $func; + } + public function unregisterFunction($name) { + unset($this->libFunctions[$name]); + } + + public function setVariables($variables){ + foreach( $variables as $name => $value ){ + $this->setVariable( $name, $value ); + } + } + + public function setVariable($name, $value){ + $this->registeredVars[$name] = $value; + } + + public function unsetVariable($name){ + unset( $this->registeredVars[$name] ); + } + + public function setOptions($options){ + foreach( $options as $name => $value ){ + $this->setOption( $name, $value); + } + } + + public function setOption($name, $value){ + $this->options[$name] = $value; + } + + public function parse($buffer, $presets = array()){ + + $this->setVariables($presets); + + $parser = new Less_Parser($this->getOptions()); + $parser->setImportDirs($this->getImportDirs()); + foreach ($this->libFunctions as $name => $func) { + $parser->registerFunction($name, $func); + } + $parser->parse($buffer); + if( count( $this->registeredVars ) ) $parser->ModifyVars( $this->registeredVars ); + + return $parser->getCss(); + } + + protected function getOptions(){ + $options = array('relativeUrls'=>false); + switch($this->formatterName){ + case 'compressed': + $options['compress'] = true; + break; + } + return $options; + } + + protected function getImportDirs(){ + $dirs_ = (array)$this->importDir; + $dirs = array(); + foreach($dirs_ as $dir) { + $dirs[$dir] = ''; + } + return $dirs; + } + + public function compile($string, $name = null){ + + $oldImport = $this->importDir; + $this->importDir = (array)$this->importDir; + + $this->allParsedFiles = array(); + + $parser = new Less_Parser($this->getOptions()); + $parser->SetImportDirs($this->getImportDirs()); + if( count( $this->registeredVars ) ){ + $parser->ModifyVars( $this->registeredVars ); + } + foreach ($this->libFunctions as $name => $func) { + $parser->registerFunction($name, $func); + } + $parser->parse($string); + $out = $parser->getCss(); + + $parsed = Less_Parser::AllParsedFiles(); + foreach( $parsed as $file ){ + $this->addParsedFile($file); + } + + $this->importDir = $oldImport; + + return $out; + } + + public function compileFile($fname, $outFname = null) { + if (!is_readable($fname)) { + throw new Exception('load error: failed to find '.$fname); + } + + $pi = pathinfo($fname); + + $oldImport = $this->importDir; + + $this->importDir = (array)$this->importDir; + $this->importDir[] = realpath($pi['dirname']).'/'; + + $this->allParsedFiles = array(); + $this->addParsedFile($fname); + + $parser = new Less_Parser($this->getOptions()); + $parser->SetImportDirs($this->getImportDirs()); + if( count( $this->registeredVars ) ) $parser->ModifyVars( $this->registeredVars ); + foreach ($this->libFunctions as $name => $func) { + $parser->registerFunction($name, $func); + } + $parser->parseFile($fname); + $out = $parser->getCss(); + + $parsed = Less_Parser::AllParsedFiles(); + foreach ($parsed as $file) { + $this->addParsedFile($file); + } + + $this->importDir = $oldImport; + + if ($outFname !== null) { + return file_put_contents($outFname, $out); + } + + return $out; + } + + public function checkedCompile($in, $out) { + if (!is_file($out) || filemtime($in) > filemtime($out)) { + $this->compileFile($in, $out); + return true; + } + return false; + } + + + /** + * Execute lessphp on a .less file or a lessphp cache structure + * + * The lessphp cache structure contains information about a specific + * less file having been parsed. It can be used as a hint for future + * calls to determine whether or not a rebuild is required. + * + * The cache structure contains two important keys that may be used + * externally: + * + * compiled: The final compiled CSS + * updated: The time (in seconds) the CSS was last compiled + * + * The cache structure is a plain-ol' PHP associative array and can + * be serialized and unserialized without a hitch. + * + * @param mixed $in Input + * @param bool $force Force rebuild? + * @return array lessphp cache structure + */ + public function cachedCompile($in, $force = false) { + // assume no root + $root = null; + + if (is_string($in)) { + $root = $in; + } elseif (is_array($in) and isset($in['root'])) { + if ($force or ! isset($in['files'])) { + // If we are forcing a recompile or if for some reason the + // structure does not contain any file information we should + // specify the root to trigger a rebuild. + $root = $in['root']; + } elseif (isset($in['files']) and is_array($in['files'])) { + foreach ($in['files'] as $fname => $ftime ) { + if (!file_exists($fname) or filemtime($fname) > $ftime) { + // One of the files we knew about previously has changed + // so we should look at our incoming root again. + $root = $in['root']; + break; + } + } + } + } else { + // TODO: Throw an exception? We got neither a string nor something + // that looks like a compatible lessphp cache structure. + return null; + } + + if ($root !== null) { + // If we have a root value which means we should rebuild. + $out = array(); + $out['root'] = $root; + $out['compiled'] = $this->compileFile($root); + $out['files'] = $this->allParsedFiles(); + $out['updated'] = time(); + return $out; + } else { + // No changes, pass back the structure + // we were given initially. + return $in; + } + } + + public function ccompile( $in, $out, $less = null) { + if ($less === null) { + $less = new self; + } + return $less->checkedCompile($in, $out); + } + + public static function cexecute($in, $force = false, $less = null) { + if ($less === null) { + $less = new self; + } + return $less->cachedCompile($in, $force); + } + + public function allParsedFiles() { + return $this->allParsedFiles; + } + + protected function addParsedFile($file) { + $this->allParsedFiles[realpath($file)] = filemtime($file); + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/.easymin/ignore_prefixes b/vendor/oyejorge/less.php/lib/Less/.easymin/ignore_prefixes new file mode 100644 index 00000000..ca953b29 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/.easymin/ignore_prefixes @@ -0,0 +1,2 @@ +.easymin +Autoloader.php diff --git a/vendor/oyejorge/less.php/lib/Less/Autoloader.php b/vendor/oyejorge/less.php/lib/Less/Autoloader.php new file mode 100644 index 00000000..b6300c02 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Autoloader.php @@ -0,0 +1,79 @@ + '/'); + } + + + // generate name for compiled css file + $hash = md5(json_encode($less_files)); + $list_file = Less_Cache::$cache_dir . Less_Cache::$prefix . $hash . '.list'; + + + // check cached content + if( !isset($parser_options['use_cache']) || $parser_options['use_cache'] === true ){ + if( file_exists($list_file) ){ + + self::ListFiles($list_file, $list, $cached_name); + $compiled_name = self::CompiledName($list); + + // if $cached_name is the same as the $compiled name, don't regenerate + if( !$cached_name || $cached_name === $compiled_name ){ + + $output_file = self::OutputFile($compiled_name, $parser_options ); + + if( $output_file && file_exists($output_file) ){ + @touch($list_file); + return basename($output_file); // for backwards compatibility, we just return the name of the file + } + } + } + } + + $compiled = self::Cache( $less_files, $parser_options ); + if( !$compiled ){ + return false; + } + + $compiled_name = self::CompiledName( $less_files ); + $output_file = self::OutputFile($compiled_name, $parser_options ); + + + //save the file list + $list = $less_files; + $list[] = $compiled_name; + $cache = implode("\n",$list); + file_put_contents( $list_file, $cache ); + + + //save the css + file_put_contents( $output_file, $compiled ); + + + //clean up + self::CleanCache(); + + return basename($output_file); + } + + /** + * Force the compiler to regenerate the cached css file + * + * @param array $less_files Array of .less files to compile + * @param array $parser_options Array of compiler options + * @param array $modify_vars Array of variables + * @return string Name of the css file + */ + public static function Regen( $less_files, $parser_options = array(), $modify_vars = array() ){ + $parser_options['use_cache'] = false; + return self::Get( $less_files, $parser_options, $modify_vars ); + } + + public static function Cache( &$less_files, $parser_options = array() ){ + + + // get less.php if it exists + $file = dirname(__FILE__) . '/Less.php'; + if( file_exists($file) && !class_exists('Less_Parser') ){ + require_once($file); + } + + $parser_options['cache_dir'] = Less_Cache::$cache_dir; + $parser = new Less_Parser($parser_options); + + + // combine files + foreach($less_files as $file_path => $uri_or_less ){ + + //treat as less markup if there are newline characters + if( strpos($uri_or_less,"\n") !== false ){ + $parser->Parse( $uri_or_less ); + continue; + } + + $parser->ParseFile( $file_path, $uri_or_less ); + } + + $compiled = $parser->getCss(); + + + $less_files = $parser->allParsedFiles(); + + return $compiled; + } + + + private static function OutputFile( $compiled_name, $parser_options ){ + + //custom output file + if( !empty($parser_options['output']) ){ + + //relative to cache directory? + if( preg_match('#[\\\\/]#',$parser_options['output']) ){ + return $parser_options['output']; + } + + return Less_Cache::$cache_dir.$parser_options['output']; + } + + return Less_Cache::$cache_dir.$compiled_name; + } + + + private static function CompiledName( $files ){ + + //save the file list + $temp = array(Less_Version::cache_version); + foreach($files as $file){ + $temp[] = filemtime($file)."\t".filesize($file)."\t".$file; + } + + return Less_Cache::$prefix.sha1(json_encode($temp)).'.css'; + } + + + public static function SetCacheDir( $dir ){ + Less_Cache::$cache_dir = $dir; + } + + public static function CheckCacheDir(){ + + Less_Cache::$cache_dir = str_replace('\\','/',Less_Cache::$cache_dir); + Less_Cache::$cache_dir = rtrim(Less_Cache::$cache_dir,'/').'/'; + + if( !file_exists(Less_Cache::$cache_dir) ){ + if( !mkdir(Less_Cache::$cache_dir) ){ + throw new Less_Exception_Parser('Less.php cache directory couldn\'t be created: '.Less_Cache::$cache_dir); + } + + }elseif( !is_dir(Less_Cache::$cache_dir) ){ + throw new Less_Exception_Parser('Less.php cache directory doesn\'t exist: '.Less_Cache::$cache_dir); + + }elseif( !is_writable(Less_Cache::$cache_dir) ){ + throw new Less_Exception_Parser('Less.php cache directory isn\'t writable: '.Less_Cache::$cache_dir); + + } + + } + + + /** + * Delete unused less.php files + * + */ + public static function CleanCache(){ + static $clean = false; + + if( $clean ){ + return; + } + + $files = scandir(Less_Cache::$cache_dir); + if( $files ){ + $check_time = time() - self::$gc_lifetime; + foreach($files as $file){ + + // don't delete if the file wasn't created with less.php + if( strpos($file,Less_Cache::$prefix) !== 0 ){ + continue; + } + + $full_path = Less_Cache::$cache_dir . $file; + + // make sure the file still exists + // css files may have already been deleted + if( !file_exists($full_path) ){ + continue; + } + $mtime = filemtime($full_path); + + // don't delete if it's a relatively new file + if( $mtime > $check_time ){ + continue; + } + + $parts = explode('.',$file); + $type = array_pop($parts); + + + // delete css files based on the list files + if( $type === 'css' ){ + continue; + } + + + // delete the list file and associated css file + if( $type === 'list' ){ + self::ListFiles($full_path, $list, $css_file_name); + if( $css_file_name ){ + $css_file = Less_Cache::$cache_dir . $css_file_name; + if( file_exists($css_file) ){ + unlink($css_file); + } + } + } + + unlink($full_path); + } + } + + $clean = true; + } + + + /** + * Get the list of less files and generated css file from a list file + * + */ + static function ListFiles($list_file, &$list, &$css_file_name ){ + + $list = explode("\n",file_get_contents($list_file)); + + //pop the cached name that should match $compiled_name + $css_file_name = array_pop($list); + + if( !preg_match('/^' . Less_Cache::$prefix . '[a-f0-9]+\.css$/',$css_file_name) ){ + $list[] = $css_file_name; + $css_file_name = false; + } + + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Colors.php b/vendor/oyejorge/less.php/lib/Less/Colors.php new file mode 100644 index 00000000..ad3f31dc --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Colors.php @@ -0,0 +1,170 @@ +'#f0f8ff', + 'antiquewhite'=>'#faebd7', + 'aqua'=>'#00ffff', + 'aquamarine'=>'#7fffd4', + 'azure'=>'#f0ffff', + 'beige'=>'#f5f5dc', + 'bisque'=>'#ffe4c4', + 'black'=>'#000000', + 'blanchedalmond'=>'#ffebcd', + 'blue'=>'#0000ff', + 'blueviolet'=>'#8a2be2', + 'brown'=>'#a52a2a', + 'burlywood'=>'#deb887', + 'cadetblue'=>'#5f9ea0', + 'chartreuse'=>'#7fff00', + 'chocolate'=>'#d2691e', + 'coral'=>'#ff7f50', + 'cornflowerblue'=>'#6495ed', + 'cornsilk'=>'#fff8dc', + 'crimson'=>'#dc143c', + 'cyan'=>'#00ffff', + 'darkblue'=>'#00008b', + 'darkcyan'=>'#008b8b', + 'darkgoldenrod'=>'#b8860b', + 'darkgray'=>'#a9a9a9', + 'darkgrey'=>'#a9a9a9', + 'darkgreen'=>'#006400', + 'darkkhaki'=>'#bdb76b', + 'darkmagenta'=>'#8b008b', + 'darkolivegreen'=>'#556b2f', + 'darkorange'=>'#ff8c00', + 'darkorchid'=>'#9932cc', + 'darkred'=>'#8b0000', + 'darksalmon'=>'#e9967a', + 'darkseagreen'=>'#8fbc8f', + 'darkslateblue'=>'#483d8b', + 'darkslategray'=>'#2f4f4f', + 'darkslategrey'=>'#2f4f4f', + 'darkturquoise'=>'#00ced1', + 'darkviolet'=>'#9400d3', + 'deeppink'=>'#ff1493', + 'deepskyblue'=>'#00bfff', + 'dimgray'=>'#696969', + 'dimgrey'=>'#696969', + 'dodgerblue'=>'#1e90ff', + 'firebrick'=>'#b22222', + 'floralwhite'=>'#fffaf0', + 'forestgreen'=>'#228b22', + 'fuchsia'=>'#ff00ff', + 'gainsboro'=>'#dcdcdc', + 'ghostwhite'=>'#f8f8ff', + 'gold'=>'#ffd700', + 'goldenrod'=>'#daa520', + 'gray'=>'#808080', + 'grey'=>'#808080', + 'green'=>'#008000', + 'greenyellow'=>'#adff2f', + 'honeydew'=>'#f0fff0', + 'hotpink'=>'#ff69b4', + 'indianred'=>'#cd5c5c', + 'indigo'=>'#4b0082', + 'ivory'=>'#fffff0', + 'khaki'=>'#f0e68c', + 'lavender'=>'#e6e6fa', + 'lavenderblush'=>'#fff0f5', + 'lawngreen'=>'#7cfc00', + 'lemonchiffon'=>'#fffacd', + 'lightblue'=>'#add8e6', + 'lightcoral'=>'#f08080', + 'lightcyan'=>'#e0ffff', + 'lightgoldenrodyellow'=>'#fafad2', + 'lightgray'=>'#d3d3d3', + 'lightgrey'=>'#d3d3d3', + 'lightgreen'=>'#90ee90', + 'lightpink'=>'#ffb6c1', + 'lightsalmon'=>'#ffa07a', + 'lightseagreen'=>'#20b2aa', + 'lightskyblue'=>'#87cefa', + 'lightslategray'=>'#778899', + 'lightslategrey'=>'#778899', + 'lightsteelblue'=>'#b0c4de', + 'lightyellow'=>'#ffffe0', + 'lime'=>'#00ff00', + 'limegreen'=>'#32cd32', + 'linen'=>'#faf0e6', + 'magenta'=>'#ff00ff', + 'maroon'=>'#800000', + 'mediumaquamarine'=>'#66cdaa', + 'mediumblue'=>'#0000cd', + 'mediumorchid'=>'#ba55d3', + 'mediumpurple'=>'#9370d8', + 'mediumseagreen'=>'#3cb371', + 'mediumslateblue'=>'#7b68ee', + 'mediumspringgreen'=>'#00fa9a', + 'mediumturquoise'=>'#48d1cc', + 'mediumvioletred'=>'#c71585', + 'midnightblue'=>'#191970', + 'mintcream'=>'#f5fffa', + 'mistyrose'=>'#ffe4e1', + 'moccasin'=>'#ffe4b5', + 'navajowhite'=>'#ffdead', + 'navy'=>'#000080', + 'oldlace'=>'#fdf5e6', + 'olive'=>'#808000', + 'olivedrab'=>'#6b8e23', + 'orange'=>'#ffa500', + 'orangered'=>'#ff4500', + 'orchid'=>'#da70d6', + 'palegoldenrod'=>'#eee8aa', + 'palegreen'=>'#98fb98', + 'paleturquoise'=>'#afeeee', + 'palevioletred'=>'#d87093', + 'papayawhip'=>'#ffefd5', + 'peachpuff'=>'#ffdab9', + 'peru'=>'#cd853f', + 'pink'=>'#ffc0cb', + 'plum'=>'#dda0dd', + 'powderblue'=>'#b0e0e6', + 'purple'=>'#800080', + 'red'=>'#ff0000', + 'rosybrown'=>'#bc8f8f', + 'royalblue'=>'#4169e1', + 'saddlebrown'=>'#8b4513', + 'salmon'=>'#fa8072', + 'sandybrown'=>'#f4a460', + 'seagreen'=>'#2e8b57', + 'seashell'=>'#fff5ee', + 'sienna'=>'#a0522d', + 'silver'=>'#c0c0c0', + 'skyblue'=>'#87ceeb', + 'slateblue'=>'#6a5acd', + 'slategray'=>'#708090', + 'slategrey'=>'#708090', + 'snow'=>'#fffafa', + 'springgreen'=>'#00ff7f', + 'steelblue'=>'#4682b4', + 'tan'=>'#d2b48c', + 'teal'=>'#008080', + 'thistle'=>'#d8bfd8', + 'tomato'=>'#ff6347', + 'turquoise'=>'#40e0d0', + 'violet'=>'#ee82ee', + 'wheat'=>'#f5deb3', + 'white'=>'#ffffff', + 'whitesmoke'=>'#f5f5f5', + 'yellow'=>'#ffff00', + 'yellowgreen'=>'#9acd32' + ); + + public static function hasOwnProperty($color) { + return isset(self::$colors[$color]); + } + + + public static function color($color) { + return self::$colors[$color]; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Configurable.php b/vendor/oyejorge/less.php/lib/Less/Configurable.php new file mode 100644 index 00000000..aa7fd3eb --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Configurable.php @@ -0,0 +1,69 @@ +defaultOptions); + $this->options = array_merge($this->defaultOptions, $this->options, $options); + } + + + /** + * Get an option value by name + * + * If the option is empty or not set a NULL value will be returned. + * + * @param string $name + * @param mixed $default Default value if confiuration of $name is not present + * @return mixed + */ + public function getOption($name, $default = null){ + if(isset($this->options[$name])){ + return $this->options[$name]; + } + return $default; + } + + + /** + * Set an option + * + * @param string $name + * @param mixed $value + */ + public function setOption($name, $value){ + $this->options[$name] = $value; + } + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Environment.php b/vendor/oyejorge/less.php/lib/Less/Environment.php new file mode 100644 index 00000000..b2203014 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Environment.php @@ -0,0 +1,166 @@ + ',', + ': ' => ':', + '' => '', + ' ' => ' ', + ':' => ' :', + '+' => '+', + '~' => '~', + '>' => '>', + '|' => '|', + '^' => '^', + '^^' => '^^' + ); + + }else{ + + Less_Environment::$_outputMap = array( + ',' => ', ', + ': ' => ': ', + '' => '', + ' ' => ' ', + ':' => ' :', + '+' => ' + ', + '~' => ' ~ ', + '>' => ' > ', + '|' => '|', + '^' => ' ^ ', + '^^' => ' ^^ ' + ); + + } + } + + + public function copyEvalEnv($frames = array() ){ + $new_env = new Less_Environment(); + $new_env->frames = $frames; + return $new_env; + } + + + public static function isMathOn(){ + return !Less_Parser::$options['strictMath'] || Less_Environment::$parensStack; + } + + public static function isPathRelative($path){ + return !preg_match('/^(?:[a-z-]+:|\/)/',$path); + } + + + /** + * Canonicalize a path by resolving references to '/./', '/../' + * Does not remove leading "../" + * @param string path or url + * @return string Canonicalized path + * + */ + public static function normalizePath($path){ + + $segments = explode('/',$path); + $segments = array_reverse($segments); + + $path = array(); + $path_len = 0; + + while( $segments ){ + $segment = array_pop($segments); + switch( $segment ) { + + case '.': + break; + + case '..': + if( !$path_len || ( $path[$path_len-1] === '..') ){ + $path[] = $segment; + $path_len++; + }else{ + array_pop($path); + $path_len--; + } + break; + + default: + $path[] = $segment; + $path_len++; + break; + } + } + + return implode('/',$path); + } + + + public function unshiftFrame($frame){ + array_unshift($this->frames, $frame); + } + + public function shiftFrame(){ + return array_shift($this->frames); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Exception/Chunk.php b/vendor/oyejorge/less.php/lib/Less/Exception/Chunk.php new file mode 100644 index 00000000..9a8b829e --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Exception/Chunk.php @@ -0,0 +1,203 @@ +message = 'ParseError: Unexpected input'; //default message + + $this->index = $index; + + $this->currentFile = $currentFile; + + $this->input = $input; + $this->input_len = strlen($input); + + $this->Chunks(); + $this->genMessage(); + } + + + /** + * See less.js chunks() + * We don't actually need the chunks + * + */ + protected function Chunks(){ + $level = 0; + $parenLevel = 0; + $lastMultiCommentEndBrace = null; + $lastOpening = null; + $lastMultiComment = null; + $lastParen = null; + + for( $this->parserCurrentIndex = 0; $this->parserCurrentIndex < $this->input_len; $this->parserCurrentIndex++ ){ + $cc = $this->CharCode($this->parserCurrentIndex); + if ((($cc >= 97) && ($cc <= 122)) || ($cc < 34)) { + // a-z or whitespace + continue; + } + + switch ($cc) { + + // ( + case 40: + $parenLevel++; + $lastParen = $this->parserCurrentIndex; + continue; + + // ) + case 41: + $parenLevel--; + if( $parenLevel < 0 ){ + return $this->fail("missing opening `(`"); + } + continue; + + // ; + case 59: + //if (!$parenLevel) { $this->emitChunk(); } + continue; + + // { + case 123: + $level++; + $lastOpening = $this->parserCurrentIndex; + continue; + + // } + case 125: + $level--; + if( $level < 0 ){ + return $this->fail("missing opening `{`"); + + } + //if (!$level && !$parenLevel) { $this->emitChunk(); } + continue; + // \ + case 92: + if ($this->parserCurrentIndex < $this->input_len - 1) { $this->parserCurrentIndex++; continue; } + return $this->fail("unescaped `\\`"); + + // ", ' and ` + case 34: + case 39: + case 96: + $matched = 0; + $currentChunkStartIndex = $this->parserCurrentIndex; + for ($this->parserCurrentIndex = $this->parserCurrentIndex + 1; $this->parserCurrentIndex < $this->input_len; $this->parserCurrentIndex++) { + $cc2 = $this->CharCode($this->parserCurrentIndex); + if ($cc2 > 96) { continue; } + if ($cc2 == $cc) { $matched = 1; break; } + if ($cc2 == 92) { // \ + if ($this->parserCurrentIndex == $this->input_len - 1) { + return $this->fail("unescaped `\\`"); + } + $this->parserCurrentIndex++; + } + } + if ($matched) { continue; } + return $this->fail("unmatched `" + chr($cc) + "`", $currentChunkStartIndex); + + // /, check for comment + case 47: + if ($parenLevel || ($this->parserCurrentIndex == $this->input_len - 1)) { continue; } + $cc2 = $this->CharCode($this->parserCurrentIndex+1); + if ($cc2 == 47) { + // //, find lnfeed + for ($this->parserCurrentIndex = $this->parserCurrentIndex + 2; $this->parserCurrentIndex < $this->input_len; $this->parserCurrentIndex++) { + $cc2 = $this->CharCode($this->parserCurrentIndex); + if (($cc2 <= 13) && (($cc2 == 10) || ($cc2 == 13))) { break; } + } + } else if ($cc2 == 42) { + // /*, find */ + $lastMultiComment = $currentChunkStartIndex = $this->parserCurrentIndex; + for ($this->parserCurrentIndex = $this->parserCurrentIndex + 2; $this->parserCurrentIndex < $this->input_len - 1; $this->parserCurrentIndex++) { + $cc2 = $this->CharCode($this->parserCurrentIndex); + if ($cc2 == 125) { $lastMultiCommentEndBrace = $this->parserCurrentIndex; } + if ($cc2 != 42) { continue; } + if ($this->CharCode($this->parserCurrentIndex+1) == 47) { break; } + } + if ($this->parserCurrentIndex == $this->input_len - 1) { + return $this->fail("missing closing `*/`", $currentChunkStartIndex); + } + } + continue; + + // *, check for unmatched */ + case 42: + if (($this->parserCurrentIndex < $this->input_len - 1) && ($this->CharCode($this->parserCurrentIndex+1) == 47)) { + return $this->fail("unmatched `/*`"); + } + continue; + } + } + + if( $level !== 0 ){ + if( ($lastMultiComment > $lastOpening) && ($lastMultiCommentEndBrace > $lastMultiComment) ){ + return $this->fail("missing closing `}` or `*/`", $lastOpening); + } else { + return $this->fail("missing closing `}`", $lastOpening); + } + } else if ( $parenLevel !== 0 ){ + return $this->fail("missing closing `)`", $lastParen); + } + + + //chunk didn't fail + + + //$this->emitChunk(true); + } + + public function CharCode($pos){ + return ord($this->input[$pos]); + } + + + public function fail( $msg, $index = null ){ + + if( !$index ){ + $this->index = $this->parserCurrentIndex; + }else{ + $this->index = $index; + } + $this->message = 'ParseError: '.$msg; + } + + + /* + function emitChunk( $force = false ){ + $len = $this->parserCurrentIndex - $this->emitFrom; + if ((($len < 512) && !$force) || !$len) { + return; + } + $chunks[] = substr($this->input, $this->emitFrom, $this->parserCurrentIndex + 1 - $this->emitFrom ); + $this->emitFrom = $this->parserCurrentIndex + 1; + } + */ + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Exception/Compiler.php b/vendor/oyejorge/less.php/lib/Less/Exception/Compiler.php new file mode 100644 index 00000000..713e030d --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Exception/Compiler.php @@ -0,0 +1,11 @@ +previous = $previous; + parent::__construct($message, $code); + } else { + parent::__construct($message, $code, $previous); + } + + $this->currentFile = $currentFile; + $this->index = $index; + + $this->genMessage(); + } + + + protected function getInput(){ + + if( !$this->input && $this->currentFile && $this->currentFile['filename'] && file_exists($this->currentFile['filename']) ){ + $this->input = file_get_contents( $this->currentFile['filename'] ); + } + } + + + + /** + * Converts the exception to string + * + * @return string + */ + public function genMessage(){ + + if( $this->currentFile && $this->currentFile['filename'] ){ + $this->message .= ' in '.basename($this->currentFile['filename']); + } + + if( $this->index !== null ){ + $this->getInput(); + if( $this->input ){ + $line = self::getLineNumber(); + $this->message .= ' on line '.$line.', column '.self::getColumn(); + + $lines = explode("\n",$this->input); + + $count = count($lines); + $start_line = max(0, $line-3); + $last_line = min($count, $start_line+6); + $num_len = strlen($last_line); + for( $i = $start_line; $i < $last_line; $i++ ){ + $this->message .= "\n".str_pad($i+1,$num_len,'0',STR_PAD_LEFT).'| '.$lines[$i]; + } + } + } + + } + + /** + * Returns the line number the error was encountered + * + * @return integer + */ + public function getLineNumber(){ + if( $this->index ){ + // https://bugs.php.net/bug.php?id=49790 + if (ini_get("mbstring.func_overload")) { + return substr_count(substr($this->input, 0, $this->index), "\n") + 1; + } else { + return substr_count($this->input, "\n", 0, $this->index) + 1; + } + } + return 1; + } + + + /** + * Returns the column the error was encountered + * + * @return integer + */ + public function getColumn(){ + + $part = substr($this->input, 0, $this->index); + $pos = strrpos($part,"\n"); + return $this->index - $pos; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Functions.php b/vendor/oyejorge/less.php/lib/Less/Functions.php new file mode 100644 index 00000000..419bee32 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Functions.php @@ -0,0 +1,1183 @@ +env = $env; + $this->currentFileInfo = $currentFileInfo; + } + + /** + * @param string $op + */ + public static function operate( $op, $a, $b ){ + switch ($op) { + case '+': return $a + $b; + case '-': return $a - $b; + case '*': return $a * $b; + case '/': return $a / $b; + } + } + + public static function clamp($val, $max = 1){ + return min( max($val, 0), $max); + } + + public static function fround( $value ){ + + if( $value === 0 ){ + return $value; + } + + if( Less_Parser::$options['numPrecision'] ){ + $p = pow(10, Less_Parser::$options['numPrecision']); + return round( $value * $p) / $p; + } + return $value; + } + + public static function number($n){ + + if ($n instanceof Less_Tree_Dimension) { + return floatval( $n->unit->is('%') ? $n->value / 100 : $n->value); + } else if (is_numeric($n)) { + return $n; + } else { + throw new Less_Exception_Compiler("color functions take numbers as parameters"); + } + } + + public static function scaled($n, $size = 255 ){ + if( $n instanceof Less_Tree_Dimension && $n->unit->is('%') ){ + return (float)$n->value * $size / 100; + } else { + return Less_Functions::number($n); + } + } + + public function rgb ($r = null, $g = null, $b = null){ + if (is_null($r) || is_null($g) || is_null($b)) { + throw new Less_Exception_Compiler("rgb expects three parameters"); + } + return $this->rgba($r, $g, $b, 1.0); + } + + public function rgba($r = null, $g = null, $b = null, $a = null){ + $rgb = array($r, $g, $b); + $rgb = array_map(array('Less_Functions','scaled'),$rgb); + + $a = self::number($a); + return new Less_Tree_Color($rgb, $a); + } + + public function hsl($h, $s, $l){ + return $this->hsla($h, $s, $l, 1.0); + } + + public function hsla($h, $s, $l, $a){ + + $h = fmod(self::number($h), 360) / 360; // Classic % operator will change float to int + $s = self::clamp(self::number($s)); + $l = self::clamp(self::number($l)); + $a = self::clamp(self::number($a)); + + $m2 = $l <= 0.5 ? $l * ($s + 1) : $l + $s - $l * $s; + + $m1 = $l * 2 - $m2; + + return $this->rgba( self::hsla_hue($h + 1/3, $m1, $m2) * 255, + self::hsla_hue($h, $m1, $m2) * 255, + self::hsla_hue($h - 1/3, $m1, $m2) * 255, + $a); + } + + /** + * @param double $h + */ + public function hsla_hue($h, $m1, $m2){ + $h = $h < 0 ? $h + 1 : ($h > 1 ? $h - 1 : $h); + if ($h * 6 < 1) return $m1 + ($m2 - $m1) * $h * 6; + else if ($h * 2 < 1) return $m2; + else if ($h * 3 < 2) return $m1 + ($m2 - $m1) * (2/3 - $h) * 6; + else return $m1; + } + + public function hsv($h, $s, $v) { + return $this->hsva($h, $s, $v, 1.0); + } + + /** + * @param double $a + */ + public function hsva($h, $s, $v, $a) { + $h = ((Less_Functions::number($h) % 360) / 360 ) * 360; + $s = Less_Functions::number($s); + $v = Less_Functions::number($v); + $a = Less_Functions::number($a); + + $i = floor(($h / 60) % 6); + $f = ($h / 60) - $i; + + $vs = array( $v, + $v * (1 - $s), + $v * (1 - $f * $s), + $v * (1 - (1 - $f) * $s)); + + $perm = array(array(0, 3, 1), + array(2, 0, 1), + array(1, 0, 3), + array(1, 2, 0), + array(3, 1, 0), + array(0, 1, 2)); + + return $this->rgba($vs[$perm[$i][0]] * 255, + $vs[$perm[$i][1]] * 255, + $vs[$perm[$i][2]] * 255, + $a); + } + + public function hue($color = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to hue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $c = $color->toHSL(); + return new Less_Tree_Dimension(Less_Parser::round($c['h'])); + } + + public function saturation($color = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to saturation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $c = $color->toHSL(); + return new Less_Tree_Dimension(Less_Parser::round($c['s'] * 100), '%'); + } + + public function lightness($color = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to lightness must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $c = $color->toHSL(); + return new Less_Tree_Dimension(Less_Parser::round($c['l'] * 100), '%'); + } + + public function hsvhue( $color = null ){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to hsvhue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsv = $color->toHSV(); + return new Less_Tree_Dimension( Less_Parser::round($hsv['h']) ); + } + + + public function hsvsaturation( $color = null ){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to hsvsaturation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsv = $color->toHSV(); + return new Less_Tree_Dimension( Less_Parser::round($hsv['s'] * 100), '%' ); + } + + public function hsvvalue( $color = null ){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to hsvvalue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsv = $color->toHSV(); + return new Less_Tree_Dimension( Less_Parser::round($hsv['v'] * 100), '%' ); + } + + public function red($color = null) { + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to red must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return new Less_Tree_Dimension( $color->rgb[0] ); + } + + public function green($color = null) { + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to green must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return new Less_Tree_Dimension( $color->rgb[1] ); + } + + public function blue($color = null) { + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to blue must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return new Less_Tree_Dimension( $color->rgb[2] ); + } + + public function alpha($color = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to alpha must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $c = $color->toHSL(); + return new Less_Tree_Dimension($c['a']); + } + + public function luma ($color = null) { + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to luma must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return new Less_Tree_Dimension(Less_Parser::round( $color->luma() * $color->alpha * 100), '%'); + } + + public function luminance( $color = null ){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to luminance must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $luminance = + (0.2126 * $color->rgb[0] / 255) + + (0.7152 * $color->rgb[1] / 255) + + (0.0722 * $color->rgb[2] / 255); + + return new Less_Tree_Dimension(Less_Parser::round( $luminance * $color->alpha * 100), '%'); + } + + public function saturate($color = null, $amount = null){ + // filter: saturate(3.2); + // should be kept as is, so check for color + if ($color instanceof Less_Tree_Dimension) { + return null; + } + + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to saturate must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to saturate must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + + $hsl['s'] += $amount->value / 100; + $hsl['s'] = self::clamp($hsl['s']); + + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + /** + * @param Less_Tree_Dimension $amount + */ + public function desaturate($color = null, $amount = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to desaturate must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to desaturate must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + + $hsl['s'] -= $amount->value / 100; + $hsl['s'] = self::clamp($hsl['s']); + + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + + + public function lighten($color = null, $amount=null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to lighten must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to lighten must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + + $hsl['l'] += $amount->value / 100; + $hsl['l'] = self::clamp($hsl['l']); + + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + public function darken($color = null, $amount = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to darken must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to darken must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + $hsl['l'] -= $amount->value / 100; + $hsl['l'] = self::clamp($hsl['l']); + + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + public function fadein($color = null, $amount = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to fadein must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to fadein must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + $hsl['a'] += $amount->value / 100; + $hsl['a'] = self::clamp($hsl['a']); + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + public function fadeout($color = null, $amount = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to fadeout must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to fadeout must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + $hsl['a'] -= $amount->value / 100; + $hsl['a'] = self::clamp($hsl['a']); + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + public function fade($color = null, $amount = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to fade must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to fade must be a percentage' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + + $hsl['a'] = $amount->value / 100; + $hsl['a'] = self::clamp($hsl['a']); + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + + + public function spin($color = null, $amount = null){ + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to spin must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$amount instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The second argument to spin must be a number' . ($amount instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $hsl = $color->toHSL(); + $hue = fmod($hsl['h'] + $amount->value, 360); + + $hsl['h'] = $hue < 0 ? 360 + $hue : $hue; + + return $this->hsla($hsl['h'], $hsl['s'], $hsl['l'], $hsl['a']); + } + + // + // Copyright (c) 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein + // http://sass-lang.com + // + + /** + * @param Less_Tree_Color $color1 + */ + public function mix($color1 = null, $color2 = null, $weight = null){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to mix must be a color' . ($color1 instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to mix must be a color' . ($color2 instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$weight) { + $weight = new Less_Tree_Dimension('50', '%'); + } + if (!$weight instanceof Less_Tree_Dimension) { + throw new Less_Exception_Compiler('The third argument to contrast must be a percentage' . ($weight instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + $p = $weight->value / 100.0; + $w = $p * 2 - 1; + $hsl1 = $color1->toHSL(); + $hsl2 = $color2->toHSL(); + $a = $hsl1['a'] - $hsl2['a']; + + $w1 = (((($w * $a) == -1) ? $w : ($w + $a) / (1 + $w * $a)) + 1) / 2; + $w2 = 1 - $w1; + + $rgb = array($color1->rgb[0] * $w1 + $color2->rgb[0] * $w2, + $color1->rgb[1] * $w1 + $color2->rgb[1] * $w2, + $color1->rgb[2] * $w1 + $color2->rgb[2] * $w2); + + $alpha = $color1->alpha * $p + $color2->alpha * (1 - $p); + + return new Less_Tree_Color($rgb, $alpha); + } + + public function greyscale($color){ + return $this->desaturate($color, new Less_Tree_Dimension(100,'%')); + } + + + public function contrast( $color, $dark = null, $light = null, $threshold = null){ + // filter: contrast(3.2); + // should be kept as is, so check for color + if (!$color instanceof Less_Tree_Color) { + return null; + } + if( !$light ){ + $light = $this->rgba(255, 255, 255, 1.0); + } + if( !$dark ){ + $dark = $this->rgba(0, 0, 0, 1.0); + } + + if (!$dark instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to contrast must be a color' . ($dark instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$light instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The third argument to contrast must be a color' . ($light instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + //Figure out which is actually light and dark! + if( $dark->luma() > $light->luma() ){ + $t = $light; + $light = $dark; + $dark = $t; + } + if( !$threshold ){ + $threshold = 0.43; + } else { + $threshold = Less_Functions::number($threshold); + } + + if( $color->luma() < $threshold ){ + return $light; + } else { + return $dark; + } + } + + public function e ($str){ + if( is_string($str) ){ + return new Less_Tree_Anonymous($str); + } + return new Less_Tree_Anonymous($str instanceof Less_Tree_JavaScript ? $str->expression : $str->value); + } + + public function escape ($str){ + + $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'",'%3F'=>'?','%26'=>'&','%2C'=>',','%2F'=>'/','%40'=>'@','%2B'=>'+','%24'=>'$'); + + return new Less_Tree_Anonymous(strtr(rawurlencode($str->value), $revert)); + } + + + /** + * todo: This function will need some additional work to make it work the same as less.js + * + */ + public function replace( $string, $pattern, $replacement, $flags = null ){ + $result = $string->value; + + $expr = '/'.str_replace('/','\\/',$pattern->value).'/'; + if( $flags && $flags->value){ + $expr .= self::replace_flags($flags->value); + } + + $result = preg_replace($expr,$replacement->value,$result); + + + if( property_exists($string,'quote') ){ + return new Less_Tree_Quoted( $string->quote, $result, $string->escaped); + } + return new Less_Tree_Quoted( '', $result ); + } + + public static function replace_flags($flags){ + $flags = str_split($flags,1); + $new_flags = ''; + + foreach($flags as $flag){ + switch($flag){ + case 'e': + case 'g': + break; + + default: + $new_flags .= $flag; + break; + } + } + + return $new_flags; + } + + public function _percent(){ + $string = func_get_arg(0); + + $args = func_get_args(); + array_shift($args); + $result = $string->value; + + foreach($args as $arg){ + if( preg_match('/%[sda]/i',$result, $token) ){ + $token = $token[0]; + $value = stristr($token, 's') ? $arg->value : $arg->toCSS(); + $value = preg_match('/[A-Z]$/', $token) ? urlencode($value) : $value; + $result = preg_replace('/%[sda]/i',$value, $result, 1); + } + } + $result = str_replace('%%', '%', $result); + + return new Less_Tree_Quoted( $string->quote , $result, $string->escaped); + } + + public function unit( $val, $unit = null) { + if( !($val instanceof Less_Tree_Dimension) ){ + throw new Less_Exception_Compiler('The first argument to unit must be a number' . ($val instanceof Less_Tree_Operation ? '. Have you forgotten parenthesis?' : '.') ); + } + + if( $unit ){ + if( $unit instanceof Less_Tree_Keyword ){ + $unit = $unit->value; + } else { + $unit = $unit->toCSS(); + } + } else { + $unit = ""; + } + return new Less_Tree_Dimension($val->value, $unit ); + } + + public function convert($val, $unit){ + return $val->convertTo($unit->value); + } + + public function round($n, $f = false) { + + $fraction = 0; + if( $f !== false ){ + $fraction = $f->value; + } + + return $this->_math('Less_Parser::round',null, $n, $fraction); + } + + public function pi(){ + return new Less_Tree_Dimension(M_PI); + } + + public function mod($a, $b) { + return new Less_Tree_Dimension( $a->value % $b->value, $a->unit); + } + + + + public function pow($x, $y) { + if( is_numeric($x) && is_numeric($y) ){ + $x = new Less_Tree_Dimension($x); + $y = new Less_Tree_Dimension($y); + }elseif( !($x instanceof Less_Tree_Dimension) || !($y instanceof Less_Tree_Dimension) ){ + throw new Less_Exception_Compiler('Arguments must be numbers'); + } + + return new Less_Tree_Dimension( pow($x->value, $y->value), $x->unit ); + } + + // var mathFunctions = [{name:"ce ... + public function ceil( $n ){ return $this->_math('ceil', null, $n); } + public function floor( $n ){ return $this->_math('floor', null, $n); } + public function sqrt( $n ){ return $this->_math('sqrt', null, $n); } + public function abs( $n ){ return $this->_math('abs', null, $n); } + + public function tan( $n ){ return $this->_math('tan', '', $n); } + public function sin( $n ){ return $this->_math('sin', '', $n); } + public function cos( $n ){ return $this->_math('cos', '', $n); } + + public function atan( $n ){ return $this->_math('atan', 'rad', $n); } + public function asin( $n ){ return $this->_math('asin', 'rad', $n); } + public function acos( $n ){ return $this->_math('acos', 'rad', $n); } + + private function _math() { + $args = func_get_args(); + $fn = array_shift($args); + $unit = array_shift($args); + + if ($args[0] instanceof Less_Tree_Dimension) { + + if( $unit === null ){ + $unit = $args[0]->unit; + }else{ + $args[0] = $args[0]->unify(); + } + $args[0] = (float)$args[0]->value; + return new Less_Tree_Dimension( call_user_func_array($fn, $args), $unit); + } else if (is_numeric($args[0])) { + return call_user_func_array($fn,$args); + } else { + throw new Less_Exception_Compiler("math functions take numbers as parameters"); + } + } + + /** + * @param boolean $isMin + */ + private function _minmax( $isMin, $args ){ + + $arg_count = count($args); + + if( $arg_count < 1 ){ + throw new Less_Exception_Compiler( 'one or more arguments required'); + } + + $j = null; + $unitClone = null; + $unitStatic = null; + + + $order = array(); // elems only contains original argument values. + $values = array(); // key is the unit.toString() for unified tree.Dimension values, + // value is the index into the order array. + + + for( $i = 0; $i < $arg_count; $i++ ){ + $current = $args[$i]; + if( !($current instanceof Less_Tree_Dimension) ){ + if( is_array($args[$i]->value) ){ + $args[] = $args[$i]->value; + } + continue; + } + + if( $current->unit->toString() === '' && !$unitClone ){ + $temp = new Less_Tree_Dimension($current->value, $unitClone); + $currentUnified = $temp->unify(); + }else{ + $currentUnified = $current->unify(); + } + + if( $currentUnified->unit->toString() === "" && !$unitStatic ){ + $unit = $unitStatic; + }else{ + $unit = $currentUnified->unit->toString(); + } + + if( $unit !== '' && !$unitStatic || $unit !== '' && $order[0]->unify()->unit->toString() === "" ){ + $unitStatic = $unit; + } + + if( $unit != '' && !$unitClone ){ + $unitClone = $current->unit->toString(); + } + + if( isset($values['']) && $unit !== '' && $unit === $unitStatic ){ + $j = $values['']; + }elseif( isset($values[$unit]) ){ + $j = $values[$unit]; + }else{ + + if( $unitStatic && $unit !== $unitStatic ){ + throw new Less_Exception_Compiler( 'incompatible types'); + } + $values[$unit] = count($order); + $order[] = $current; + continue; + } + + + if( $order[$j]->unit->toString() === "" && $unitClone ){ + $temp = new Less_Tree_Dimension( $order[$j]->value, $unitClone); + $referenceUnified = $temp->unify(); + }else{ + $referenceUnified = $order[$j]->unify(); + } + if( ($isMin && $currentUnified->value < $referenceUnified->value) || (!$isMin && $currentUnified->value > $referenceUnified->value) ){ + $order[$j] = $current; + } + } + + if( count($order) == 1 ){ + return $order[0]; + } + $args = array(); + foreach($order as $a){ + $args[] = $a->toCSS($this->env); + } + return new Less_Tree_Anonymous( ($isMin?'min(':'max(') . implode(Less_Environment::$_outputMap[','],$args).')'); + } + + public function min(){ + $args = func_get_args(); + return $this->_minmax( true, $args ); + } + + public function max(){ + $args = func_get_args(); + return $this->_minmax( false, $args ); + } + + public function getunit($n){ + return new Less_Tree_Anonymous($n->unit); + } + + public function argb($color) { + if (!$color instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to argb must be a color' . ($dark instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return new Less_Tree_Anonymous($color->toARGB()); + } + + public function percentage($n) { + return new Less_Tree_Dimension($n->value * 100, '%'); + } + + public function color($n) { + + if( $n instanceof Less_Tree_Quoted ){ + $colorCandidate = $n->value; + $returnColor = Less_Tree_Color::fromKeyword($colorCandidate); + if( $returnColor ){ + return $returnColor; + } + if( preg_match('/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/',$colorCandidate) ){ + return new Less_Tree_Color(substr($colorCandidate, 1)); + } + throw new Less_Exception_Compiler("argument must be a color keyword or 3/6 digit hex e.g. #FFF"); + } else { + throw new Less_Exception_Compiler("argument must be a string"); + } + } + + + public function iscolor($n) { + return $this->_isa($n, 'Less_Tree_Color'); + } + + public function isnumber($n) { + return $this->_isa($n, 'Less_Tree_Dimension'); + } + + public function isstring($n) { + return $this->_isa($n, 'Less_Tree_Quoted'); + } + + public function iskeyword($n) { + return $this->_isa($n, 'Less_Tree_Keyword'); + } + + public function isurl($n) { + return $this->_isa($n, 'Less_Tree_Url'); + } + + public function ispixel($n) { + return $this->isunit($n, 'px'); + } + + public function ispercentage($n) { + return $this->isunit($n, '%'); + } + + public function isem($n) { + return $this->isunit($n, 'em'); + } + + /** + * @param string $unit + */ + public function isunit( $n, $unit ){ + return ($n instanceof Less_Tree_Dimension) && $n->unit->is( ( property_exists($unit,'value') ? $unit->value : $unit) ) ? new Less_Tree_Keyword('true') : new Less_Tree_Keyword('false'); + } + + /** + * @param string $type + */ + private function _isa($n, $type) { + return is_a($n, $type) ? new Less_Tree_Keyword('true') : new Less_Tree_Keyword('false'); + } + + public function tint($color, $amount) { + return $this->mix( $this->rgb(255,255,255), $color, $amount); + } + + public function shade($color, $amount) { + return $this->mix($this->rgb(0, 0, 0), $color, $amount); + } + + public function extract($values, $index ){ + $index = (int)$index->value - 1; // (1-based index) + // handle non-array values as an array of length 1 + // return 'undefined' if index is invalid + if( property_exists($values,'value') && is_array($values->value) ){ + if( isset($values->value[$index]) ){ + return $values->value[$index]; + } + return null; + + }elseif( (int)$index === 0 ){ + return $values; + } + + return null; + } + + public function length($values){ + $n = (property_exists($values,'value') && is_array($values->value)) ? count($values->value) : 1; + return new Less_Tree_Dimension($n); + } + + public function datauri($mimetypeNode, $filePathNode = null ) { + + $filePath = ( $filePathNode ? $filePathNode->value : null ); + $mimetype = $mimetypeNode->value; + + $args = 2; + if( !$filePath ){ + $filePath = $mimetype; + $args = 1; + } + + $filePath = str_replace('\\','/',$filePath); + if( Less_Environment::isPathRelative($filePath) ){ + + if( Less_Parser::$options['relativeUrls'] ){ + $temp = $this->currentFileInfo['currentDirectory']; + } else { + $temp = $this->currentFileInfo['entryPath']; + } + + if( !empty($temp) ){ + $filePath = Less_Environment::normalizePath(rtrim($temp,'/').'/'.$filePath); + } + + } + + + // detect the mimetype if not given + if( $args < 2 ){ + + /* incomplete + $mime = require('mime'); + mimetype = mime.lookup(path); + + // use base 64 unless it's an ASCII or UTF-8 format + var charset = mime.charsets.lookup(mimetype); + useBase64 = ['US-ASCII', 'UTF-8'].indexOf(charset) < 0; + if (useBase64) mimetype += ';base64'; + */ + + $mimetype = Less_Mime::lookup($filePath); + + $charset = Less_Mime::charsets_lookup($mimetype); + $useBase64 = !in_array($charset,array('US-ASCII', 'UTF-8')); + if( $useBase64 ){ $mimetype .= ';base64'; } + + }else{ + $useBase64 = preg_match('/;base64$/',$mimetype); + } + + + if( file_exists($filePath) ){ + $buf = @file_get_contents($filePath); + }else{ + $buf = false; + } + + + // IE8 cannot handle a data-uri larger than 32KB. If this is exceeded + // and the --ieCompat flag is enabled, return a normal url() instead. + $DATA_URI_MAX_KB = 32; + $fileSizeInKB = round( strlen($buf) / 1024 ); + if( $fileSizeInKB >= $DATA_URI_MAX_KB ){ + $url = new Less_Tree_Url( ($filePathNode ? $filePathNode : $mimetypeNode), $this->currentFileInfo); + return $url->compile($this); + } + + if( $buf ){ + $buf = $useBase64 ? base64_encode($buf) : rawurlencode($buf); + $filePath = '"data:' . $mimetype . ',' . $buf . '"'; + } + + return new Less_Tree_Url( new Less_Tree_Anonymous($filePath) ); + } + + //svg-gradient + public function svggradient( $direction ){ + + $throw_message = 'svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position]'; + $arguments = func_get_args(); + + if( count($arguments) < 3 ){ + throw new Less_Exception_Compiler( $throw_message ); + } + + $stops = array_slice($arguments,1); + $gradientType = 'linear'; + $rectangleDimension = 'x="0" y="0" width="1" height="1"'; + $useBase64 = true; + $directionValue = $direction->toCSS(); + + + switch( $directionValue ){ + case "to bottom": + $gradientDirectionSvg = 'x1="0%" y1="0%" x2="0%" y2="100%"'; + break; + case "to right": + $gradientDirectionSvg = 'x1="0%" y1="0%" x2="100%" y2="0%"'; + break; + case "to bottom right": + $gradientDirectionSvg = 'x1="0%" y1="0%" x2="100%" y2="100%"'; + break; + case "to top right": + $gradientDirectionSvg = 'x1="0%" y1="100%" x2="100%" y2="0%"'; + break; + case "ellipse": + case "ellipse at center": + $gradientType = "radial"; + $gradientDirectionSvg = 'cx="50%" cy="50%" r="75%"'; + $rectangleDimension = 'x="-50" y="-50" width="101" height="101"'; + break; + default: + throw new Less_Exception_Compiler( "svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center'" ); + } + + $returner = '' . + '' . + '<' . $gradientType . 'Gradient id="gradient" gradientUnits="userSpaceOnUse" ' . $gradientDirectionSvg . '>'; + + for( $i = 0; $i < count($stops); $i++ ){ + if( is_object($stops[$i]) && property_exists($stops[$i],'value') ){ + $color = $stops[$i]->value[0]; + $position = $stops[$i]->value[1]; + }else{ + $color = $stops[$i]; + $position = null; + } + + if( !($color instanceof Less_Tree_Color) || (!(($i === 0 || $i+1 === count($stops)) && $position === null) && !($position instanceof Less_Tree_Dimension)) ){ + throw new Less_Exception_Compiler( $throw_message ); + } + if( $position ){ + $positionValue = $position->toCSS(); + }elseif( $i === 0 ){ + $positionValue = '0%'; + }else{ + $positionValue = '100%'; + } + $alpha = $color->alpha; + $returner .= ''; + } + + $returner .= ''; + + + if( $useBase64 ){ + $returner = "'data:image/svg+xml;base64,".base64_encode($returner)."'"; + }else{ + $returner = "'data:image/svg+xml,".$returner."'"; + } + + return new Less_Tree_URL( new Less_Tree_Anonymous( $returner ) ); + } + + + /** + * Php version of javascript's `encodeURIComponent` function + * + * @param string $string The string to encode + * @return string The encoded string + */ + public static function encodeURIComponent($string){ + $revert = array('%21' => '!', '%2A' => '*', '%27' => "'", '%28' => '(', '%29' => ')'); + return strtr(rawurlencode($string), $revert); + } + + + // Color Blending + // ref: http://www.w3.org/TR/compositing-1 + + public function colorBlend( $mode, $color1, $color2 ){ + $ab = $color1->alpha; // backdrop + $as = $color2->alpha; // source + $r = array(); // result + + $ar = $as + $ab * (1 - $as); + for( $i = 0; $i < 3; $i++ ){ + $cb = $color1->rgb[$i] / 255; + $cs = $color2->rgb[$i] / 255; + $cr = call_user_func( $mode, $cb, $cs ); + if( $ar ){ + $cr = ($as * $cs + $ab * ($cb - $as * ($cb + $cs - $cr))) / $ar; + } + $r[$i] = $cr * 255; + } + + return new Less_Tree_Color($r, $ar); + } + + public function multiply($color1 = null, $color2 = null ){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to multiply must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to multiply must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendMultiply'), $color1, $color2 ); + } + + private function colorBlendMultiply($cb, $cs){ + return $cb * $cs; + } + + public function screen($color1 = null, $color2 = null ){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to screen must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to screen must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendScreen'), $color1, $color2 ); + } + + private function colorBlendScreen( $cb, $cs){ + return $cb + $cs - $cb * $cs; + } + + public function overlay($color1 = null, $color2 = null){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to overlay must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to overlay must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendOverlay'), $color1, $color2 ); + } + + private function colorBlendOverlay($cb, $cs ){ + $cb *= 2; + return ($cb <= 1) + ? $this->colorBlendMultiply($cb, $cs) + : $this->colorBlendScreen($cb - 1, $cs); + } + + public function softlight($color1 = null, $color2 = null){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to softlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to softlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendSoftlight'), $color1, $color2 ); + } + + private function colorBlendSoftlight($cb, $cs ){ + $d = 1; + $e = $cb; + if( $cs > 0.5 ){ + $e = 1; + $d = ($cb > 0.25) ? sqrt($cb) + : ((16 * $cb - 12) * $cb + 4) * $cb; + } + return $cb - (1 - 2 * $cs) * $e * ($d - $cb); + } + + public function hardlight($color1 = null, $color2 = null){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to hardlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to hardlight must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendHardlight'), $color1, $color2 ); + } + + private function colorBlendHardlight( $cb, $cs ){ + return $this->colorBlendOverlay($cs, $cb); + } + + public function difference($color1 = null, $color2 = null) { + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to difference must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to difference must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendDifference'), $color1, $color2 ); + } + + private function colorBlendDifference( $cb, $cs ){ + return abs($cb - $cs); + } + + public function exclusion( $color1 = null, $color2 = null ){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to exclusion must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to exclusion must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendExclusion'), $color1, $color2 ); + } + + private function colorBlendExclusion( $cb, $cs ){ + return $cb + $cs - 2 * $cb * $cs; + } + + public function average($color1 = null, $color2 = null){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to average must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to average must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendAverage'), $color1, $color2 ); + } + + // non-w3c functions: + public function colorBlendAverage($cb, $cs ){ + return ($cb + $cs) / 2; + } + + public function negation($color1 = null, $color2 = null ){ + if (!$color1 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The first argument to negation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + if (!$color2 instanceof Less_Tree_Color) { + throw new Less_Exception_Compiler('The second argument to negation must be a color' . ($color instanceof Less_Tree_Expression ? ' (did you forgot commas?)' : '') ); + } + + return $this->colorBlend( array($this,'colorBlendNegation'), $color1, $color2 ); + } + + public function colorBlendNegation($cb, $cs){ + return 1 - abs($cb + $cs - 1); + } + + // ~ End of Color Blending + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Less.php.combine b/vendor/oyejorge/less.php/lib/Less/Less.php.combine new file mode 100644 index 00000000..d63cc789 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Less.php.combine @@ -0,0 +1,17 @@ + +./Parser.php +./Colors.php +./Environment.php +./Functions.php +./Mime.php +./Tree.php +./Output.php +./Visitor.php +./VisitorReplacing.php +./Configurable.php +./Tree +./Visitor +./Exception/Parser.php +./Exception/ +./Output +./SourceMap diff --git a/vendor/oyejorge/less.php/lib/Less/Mime.php b/vendor/oyejorge/less.php/lib/Less/Mime.php new file mode 100644 index 00000000..109ecd3f --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Mime.php @@ -0,0 +1,41 @@ + 'text/html', + '.html'=> 'text/html', + '.gif' => 'image/gif', + '.jpg' => 'image/jpeg', + '.jpeg'=> 'image/jpeg', + '.png' => 'image/png', + '.ttf' => 'application/x-font-ttf', + '.otf' => 'application/x-font-otf', + '.eot' => 'application/vnd.ms-fontobject', + '.woff' => 'application/x-font-woff', + '.svg' => 'image/svg+xml', + ); + + public static function lookup( $filepath ){ + $parts = explode('.',$filepath); + $ext = '.'.strtolower(array_pop($parts)); + + if( !isset(self::$_types[$ext]) ){ + return null; + } + return self::$_types[$ext]; + } + + public static function charsets_lookup( $type = null ){ + // assumes all text types are UTF-8 + return $type && preg_match('/^text\//',$type) ? 'UTF-8' : ''; + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Output.php b/vendor/oyejorge/less.php/lib/Less/Output.php new file mode 100644 index 00000000..f1b2b2a9 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Output.php @@ -0,0 +1,49 @@ +strs[] = $chunk; + } + + /** + * Is the output empty? + * + * @return boolean + */ + public function isEmpty(){ + return count($this->strs) === 0; + } + + + /** + * Converts the output to string + * + * @return string + */ + public function toString(){ + return implode('',$this->strs); + } + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Output/Mapped.php b/vendor/oyejorge/less.php/lib/Less/Output/Mapped.php new file mode 100644 index 00000000..884490a2 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Output/Mapped.php @@ -0,0 +1,122 @@ +contentsMap = $contentsMap; + $this->generator = $generator; + } + + /** + * Adds a chunk to the stack + * The $index for less.php may be different from less.js since less.php does not chunkify inputs + * + * @param string $chunk + * @param string $fileInfo + * @param integer $index + * @param mixed $mapLines + */ + public function add($chunk, $fileInfo = null, $index = 0, $mapLines = null){ + + //ignore adding empty strings + if( $chunk === '' ){ + return; + } + + + $sourceLines = array(); + $sourceColumns = ' '; + + + if( $fileInfo ){ + + $url = $fileInfo['currentUri']; + + if( isset($this->contentsMap[$url]) ){ + $inputSource = substr($this->contentsMap[$url], 0, $index); + $sourceLines = explode("\n", $inputSource); + $sourceColumns = end($sourceLines); + }else{ + throw new Exception('Filename '.$url.' not in contentsMap'); + } + + } + + $lines = explode("\n", $chunk); + $columns = end($lines); + + if($fileInfo){ + + if(!$mapLines){ + $this->generator->addMapping( + $this->lineNumber + 1, // generated_line + $this->column, // generated_column + count($sourceLines), // original_line + strlen($sourceColumns), // original_column + $fileInfo + ); + }else{ + for($i = 0, $count = count($lines); $i < $count; $i++){ + $this->generator->addMapping( + $this->lineNumber + $i + 1, // generated_line + $i === 0 ? $this->column : 0, // generated_column + count($sourceLines) + $i, // original_line + $i === 0 ? strlen($sourceColumns) : 0, // original_column + $fileInfo + ); + } + } + } + + if(count($lines) === 1){ + $this->column += strlen($columns); + }else{ + $this->lineNumber += count($lines) - 1; + $this->column = strlen($columns); + } + + // add only chunk + parent::add($chunk); + } + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Parser.php b/vendor/oyejorge/less.php/lib/Less/Parser.php new file mode 100644 index 00000000..86d455f1 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Parser.php @@ -0,0 +1,2627 @@ + false, // option - whether to compress + 'strictUnits' => false, // whether units need to evaluate correctly + 'strictMath' => false, // whether math has to be within parenthesis + 'relativeUrls' => true, // option - whether to adjust URL's to be relative + 'urlArgs' => array(), // whether to add args into url tokens + 'numPrecision' => 8, + + 'import_dirs' => array(), + 'import_callback' => null, + 'cache_dir' => null, + 'cache_method' => 'php', // false, 'serialize', 'php', 'var_export', 'callback'; + 'cache_callback_get' => null, + 'cache_callback_set' => null, + + 'sourceMap' => false, // whether to output a source map + 'sourceMapBasepath' => null, + 'sourceMapWriteTo' => null, + 'sourceMapURL' => null, + + 'plugins' => array(), + + ); + + public static $options = array(); + + + private $input; // Less input string + private $input_len; // input string length + private $pos; // current index in `input` + private $saveStack = array(); // holds state for backtracking + private $furthest; + private $mb_internal_encoding = ''; // for remember exists value of mbstring.internal_encoding + + /** + * @var Less_Environment + */ + private $env; + + protected $rules = array(); + + private static $imports = array(); + + public static $has_extends = false; + + public static $next_id = 0; + + /** + * Filename to contents of all parsed the files + * + * @var array + */ + public static $contentsMap = array(); + + + /** + * @param Less_Environment|array|null $env + */ + public function __construct( $env = null ){ + + // Top parser on an import tree must be sure there is one "env" + // which will then be passed around by reference. + if( $env instanceof Less_Environment ){ + $this->env = $env; + }else{ + $this->SetOptions(Less_Parser::$default_options); + $this->Reset( $env ); + } + + // mbstring.func_overload > 1 bugfix + // The encoding value must be set for each source file, + // therefore, to conserve resources and improve the speed of this design is taken here + if (ini_get('mbstring.func_overload')) { + $this->mb_internal_encoding = ini_get('mbstring.internal_encoding'); + @ini_set('mbstring.internal_encoding', 'ascii'); + } + + } + + + /** + * Reset the parser state completely + * + */ + public function Reset( $options = null ){ + $this->rules = array(); + self::$imports = array(); + self::$has_extends = false; + self::$imports = array(); + self::$contentsMap = array(); + + $this->env = new Less_Environment($options); + $this->env->Init(); + + //set new options + if( is_array($options) ){ + $this->SetOptions(Less_Parser::$default_options); + $this->SetOptions($options); + } + } + + /** + * Set one or more compiler options + * options: import_dirs, cache_dir, cache_method + * + */ + public function SetOptions( $options ){ + foreach($options as $option => $value){ + $this->SetOption($option,$value); + } + } + + /** + * Set one compiler option + * + */ + public function SetOption($option,$value){ + + switch($option){ + + case 'import_dirs': + $this->SetImportDirs($value); + return; + + case 'cache_dir': + if( is_string($value) ){ + Less_Cache::SetCacheDir($value); + Less_Cache::CheckCacheDir(); + } + return; + } + + Less_Parser::$options[$option] = $value; + } + + /** + * Registers a new custom function + * + * @param string $name function name + * @param callable $callback callback + */ + public function registerFunction($name, $callback) { + $this->env->functions[$name] = $callback; + } + + /** + * Removed an already registered function + * + * @param string $name function name + */ + public function unregisterFunction($name) { + if( isset($this->env->functions[$name]) ) + unset($this->env->functions[$name]); + } + + + /** + * Get the current css buffer + * + * @return string + */ + public function getCss(){ + + $precision = ini_get('precision'); + @ini_set('precision',16); + $locale = setlocale(LC_NUMERIC, 0); + setlocale(LC_NUMERIC, "C"); + + try { + + $root = new Less_Tree_Ruleset(array(), $this->rules ); + $root->root = true; + $root->firstRoot = true; + + + $this->PreVisitors($root); + + self::$has_extends = false; + $evaldRoot = $root->compile($this->env); + + + + $this->PostVisitors($evaldRoot); + + if( Less_Parser::$options['sourceMap'] ){ + $generator = new Less_SourceMap_Generator($evaldRoot, Less_Parser::$contentsMap, Less_Parser::$options ); + // will also save file + // FIXME: should happen somewhere else? + $css = $generator->generateCSS(); + }else{ + $css = $evaldRoot->toCSS(); + } + + if( Less_Parser::$options['compress'] ){ + $css = preg_replace('/(^(\s)+)|((\s)+$)/', '', $css); + } + + } catch (Exception $exc) { + // Intentional fall-through so we can reset environment + } + + //reset php settings + @ini_set('precision',$precision); + setlocale(LC_NUMERIC, $locale); + + // If you previously defined $this->mb_internal_encoding + // is required to return the encoding as it was before + if ($this->mb_internal_encoding != '') { + @ini_set("mbstring.internal_encoding", $this->mb_internal_encoding); + $this->mb_internal_encoding = ''; + } + + // Rethrow exception after we handled resetting the environment + if (!empty($exc)) { + throw $exc; + } + + + + return $css; + } + + /** + * Run pre-compile visitors + * + */ + private function PreVisitors($root){ + + if( Less_Parser::$options['plugins'] ){ + foreach(Less_Parser::$options['plugins'] as $plugin){ + if( !empty($plugin->isPreEvalVisitor) ){ + $plugin->run($root); + } + } + } + } + + + /** + * Run post-compile visitors + * + */ + private function PostVisitors($evaldRoot){ + + $visitors = array(); + $visitors[] = new Less_Visitor_joinSelector(); + if( self::$has_extends ){ + $visitors[] = new Less_Visitor_processExtends(); + } + $visitors[] = new Less_Visitor_toCSS(); + + + if( Less_Parser::$options['plugins'] ){ + foreach(Less_Parser::$options['plugins'] as $plugin){ + if( property_exists($plugin,'isPreEvalVisitor') && $plugin->isPreEvalVisitor ){ + continue; + } + + if( property_exists($plugin,'isPreVisitor') && $plugin->isPreVisitor ){ + array_unshift( $visitors, $plugin); + }else{ + $visitors[] = $plugin; + } + } + } + + + for($i = 0; $i < count($visitors); $i++ ){ + $visitors[$i]->run($evaldRoot); + } + + } + + + /** + * Parse a Less string into css + * + * @param string $str The string to convert + * @param string $uri_root The url of the file + * @return Less_Tree_Ruleset|Less_Parser + */ + public function parse( $str, $file_uri = null ){ + + if( !$file_uri ){ + $uri_root = ''; + $filename = 'anonymous-file-'.Less_Parser::$next_id++.'.less'; + }else{ + $file_uri = self::WinPath($file_uri); + $filename = $file_uri; + $uri_root = dirname($file_uri); + } + + $previousFileInfo = $this->env->currentFileInfo; + $uri_root = self::WinPath($uri_root); + $this->SetFileInfo($filename, $uri_root); + + $this->input = $str; + $this->_parse(); + + if( $previousFileInfo ){ + $this->env->currentFileInfo = $previousFileInfo; + } + + return $this; + } + + + /** + * Parse a Less string from a given file + * + * @throws Less_Exception_Parser + * @param string $filename The file to parse + * @param string $uri_root The url of the file + * @param bool $returnRoot Indicates whether the return value should be a css string a root node + * @return Less_Tree_Ruleset|Less_Parser + */ + public function parseFile( $filename, $uri_root = '', $returnRoot = false){ + + if( !file_exists($filename) ){ + $this->Error(sprintf('File `%s` not found.', $filename)); + } + + + // fix uri_root? + // Instead of The mixture of file path for the first argument and directory path for the second argument has bee + if( !$returnRoot && !empty($uri_root) && basename($uri_root) == basename($filename) ){ + $uri_root = dirname($uri_root); + } + + + $previousFileInfo = $this->env->currentFileInfo; + + + if( $filename ){ + $filename = self::WinPath(realpath($filename)); + } + $uri_root = self::WinPath($uri_root); + + $this->SetFileInfo($filename, $uri_root); + + self::AddParsedFile($filename); + + if( $returnRoot ){ + $rules = $this->GetRules( $filename ); + $return = new Less_Tree_Ruleset(array(), $rules ); + }else{ + $this->_parse( $filename ); + $return = $this; + } + + if( $previousFileInfo ){ + $this->env->currentFileInfo = $previousFileInfo; + } + + return $return; + } + + + /** + * Allows a user to set variables values + * @param array $vars + * @return Less_Parser + */ + public function ModifyVars( $vars ){ + + $this->input = Less_Parser::serializeVars( $vars ); + $this->_parse(); + + return $this; + } + + + /** + * @param string $filename + */ + public function SetFileInfo( $filename, $uri_root = ''){ + + $filename = Less_Environment::normalizePath($filename); + $dirname = preg_replace('/[^\/\\\\]*$/','',$filename); + + if( !empty($uri_root) ){ + $uri_root = rtrim($uri_root,'/').'/'; + } + + $currentFileInfo = array(); + + //entry info + if( isset($this->env->currentFileInfo) ){ + $currentFileInfo['entryPath'] = $this->env->currentFileInfo['entryPath']; + $currentFileInfo['entryUri'] = $this->env->currentFileInfo['entryUri']; + $currentFileInfo['rootpath'] = $this->env->currentFileInfo['rootpath']; + + }else{ + $currentFileInfo['entryPath'] = $dirname; + $currentFileInfo['entryUri'] = $uri_root; + $currentFileInfo['rootpath'] = $dirname; + } + + $currentFileInfo['currentDirectory'] = $dirname; + $currentFileInfo['currentUri'] = $uri_root.basename($filename); + $currentFileInfo['filename'] = $filename; + $currentFileInfo['uri_root'] = $uri_root; + + + //inherit reference + if( isset($this->env->currentFileInfo['reference']) && $this->env->currentFileInfo['reference'] ){ + $currentFileInfo['reference'] = true; + } + + $this->env->currentFileInfo = $currentFileInfo; + } + + + /** + * @deprecated 1.5.1.2 + * + */ + public function SetCacheDir( $dir ){ + + if( !file_exists($dir) ){ + if( mkdir($dir) ){ + return true; + } + throw new Less_Exception_Parser('Less.php cache directory couldn\'t be created: '.$dir); + + }elseif( !is_dir($dir) ){ + throw new Less_Exception_Parser('Less.php cache directory doesn\'t exist: '.$dir); + + }elseif( !is_writable($dir) ){ + throw new Less_Exception_Parser('Less.php cache directory isn\'t writable: '.$dir); + + }else{ + $dir = self::WinPath($dir); + Less_Cache::$cache_dir = rtrim($dir,'/').'/'; + return true; + } + } + + + /** + * Set a list of directories or callbacks the parser should use for determining import paths + * + * @param array $dirs + */ + public function SetImportDirs( $dirs ){ + Less_Parser::$options['import_dirs'] = array(); + + foreach($dirs as $path => $uri_root){ + + $path = self::WinPath($path); + if( !empty($path) ){ + $path = rtrim($path,'/').'/'; + } + + if ( !is_callable($uri_root) ){ + $uri_root = self::WinPath($uri_root); + if( !empty($uri_root) ){ + $uri_root = rtrim($uri_root,'/').'/'; + } + } + + Less_Parser::$options['import_dirs'][$path] = $uri_root; + } + } + + /** + * @param string $file_path + */ + private function _parse( $file_path = null ){ + $this->rules = array_merge($this->rules, $this->GetRules( $file_path )); + } + + + /** + * Return the results of parsePrimary for $file_path + * Use cache and save cached results if possible + * + * @param string|null $file_path + */ + private function GetRules( $file_path ){ + + $this->SetInput($file_path); + + $cache_file = $this->CacheFile( $file_path ); + if( $cache_file ){ + if( Less_Parser::$options['cache_method'] == 'callback' ){ + if( is_callable(Less_Parser::$options['cache_callback_get']) ){ + $cache = call_user_func_array( + Less_Parser::$options['cache_callback_get'], + array($this, $file_path, $cache_file) + ); + + if( $cache ){ + $this->UnsetInput(); + return $cache; + } + } + + }elseif( file_exists($cache_file) ){ + switch(Less_Parser::$options['cache_method']){ + + // Using serialize + // Faster but uses more memory + case 'serialize': + $cache = unserialize(file_get_contents($cache_file)); + if( $cache ){ + touch($cache_file); + $this->UnsetInput(); + return $cache; + } + break; + + + // Using generated php code + case 'var_export': + case 'php': + $this->UnsetInput(); + return include($cache_file); + } + } + } + + $rules = $this->parsePrimary(); + + if( $this->pos < $this->input_len ){ + throw new Less_Exception_Chunk($this->input, null, $this->furthest, $this->env->currentFileInfo); + } + + $this->UnsetInput(); + + + //save the cache + if( $cache_file ){ + if( Less_Parser::$options['cache_method'] == 'callback' ){ + if( is_callable(Less_Parser::$options['cache_callback_set']) ){ + call_user_func_array( + Less_Parser::$options['cache_callback_set'], + array($this, $file_path, $cache_file, $rules) + ); + } + + }else{ + //msg('write cache file'); + switch(Less_Parser::$options['cache_method']){ + case 'serialize': + file_put_contents( $cache_file, serialize($rules) ); + break; + case 'php': + file_put_contents( $cache_file, '' ); + break; + case 'var_export': + //Requires __set_state() + file_put_contents( $cache_file, '' ); + break; + } + + Less_Cache::CleanCache(); + } + } + + return $rules; + } + + + /** + * Set up the input buffer + * + */ + public function SetInput( $file_path ){ + + if( $file_path ){ + $this->input = file_get_contents( $file_path ); + } + + $this->pos = $this->furthest = 0; + + // Remove potential UTF Byte Order Mark + $this->input = preg_replace('/\\G\xEF\xBB\xBF/', '', $this->input); + $this->input_len = strlen($this->input); + + + if( Less_Parser::$options['sourceMap'] && $this->env->currentFileInfo ){ + $uri = $this->env->currentFileInfo['currentUri']; + Less_Parser::$contentsMap[$uri] = $this->input; + } + + } + + + /** + * Free up some memory + * + */ + public function UnsetInput(){ + unset($this->input, $this->pos, $this->input_len, $this->furthest); + $this->saveStack = array(); + } + + + public function CacheFile( $file_path ){ + + if( $file_path && $this->CacheEnabled() ){ + + $env = get_object_vars($this->env); + unset($env['frames']); + + $parts = array(); + $parts[] = $file_path; + $parts[] = filesize( $file_path ); + $parts[] = filemtime( $file_path ); + $parts[] = $env; + $parts[] = Less_Version::cache_version; + $parts[] = Less_Parser::$options['cache_method']; + return Less_Cache::$cache_dir . Less_Cache::$prefix . base_convert( sha1(json_encode($parts) ), 16, 36) . '.lesscache'; + } + } + + + static function AddParsedFile($file){ + self::$imports[] = $file; + } + + static function AllParsedFiles(){ + return self::$imports; + } + + /** + * @param string $file + */ + static function FileParsed($file){ + return in_array($file,self::$imports); + } + + + function save() { + $this->saveStack[] = $this->pos; + } + + private function restore() { + $this->pos = array_pop($this->saveStack); + } + + private function forget(){ + array_pop($this->saveStack); + } + + + private function isWhitespace($offset = 0) { + return preg_match('/\s/',$this->input[ $this->pos + $offset]); + } + + /** + * Parse from a token, regexp or string, and move forward if match + * + * @param array $toks + * @return array + */ + private function match($toks){ + + // The match is confirmed, add the match length to `this::pos`, + // and consume any extra white-space characters (' ' || '\n') + // which come after that. The reason for this is that LeSS's + // grammar is mostly white-space insensitive. + // + + foreach($toks as $tok){ + + $char = $tok[0]; + + if( $char === '/' ){ + $match = $this->MatchReg($tok); + + if( $match ){ + return count($match) === 1 ? $match[0] : $match; + } + + }elseif( $char === '#' ){ + $match = $this->MatchChar($tok[1]); + + }else{ + // Non-terminal, match using a function call + $match = $this->$tok(); + + } + + if( $match ){ + return $match; + } + } + } + + /** + * @param string[] $toks + * + * @return string + */ + private function MatchFuncs($toks){ + + if( $this->pos < $this->input_len ){ + foreach($toks as $tok){ + $match = $this->$tok(); + if( $match ){ + return $match; + } + } + } + + } + + // Match a single character in the input, + private function MatchChar($tok){ + if( ($this->pos < $this->input_len) && ($this->input[$this->pos] === $tok) ){ + $this->skipWhitespace(1); + return $tok; + } + } + + // Match a regexp from the current start point + private function MatchReg($tok){ + + if( preg_match($tok, $this->input, $match, 0, $this->pos) ){ + $this->skipWhitespace(strlen($match[0])); + return $match; + } + } + + + /** + * Same as match(), but don't change the state of the parser, + * just return the match. + * + * @param string $tok + * @return integer + */ + public function PeekReg($tok){ + return preg_match($tok, $this->input, $match, 0, $this->pos); + } + + /** + * @param string $tok + */ + public function PeekChar($tok){ + //return ($this->input[$this->pos] === $tok ); + return ($this->pos < $this->input_len) && ($this->input[$this->pos] === $tok ); + } + + + /** + * @param integer $length + */ + public function skipWhitespace($length){ + + $this->pos += $length; + + for(; $this->pos < $this->input_len; $this->pos++ ){ + $c = $this->input[$this->pos]; + + if( ($c !== "\n") && ($c !== "\r") && ($c !== "\t") && ($c !== ' ') ){ + break; + } + } + } + + + /** + * @param string $tok + * @param string|null $msg + */ + public function expect($tok, $msg = NULL) { + $result = $this->match( array($tok) ); + if (!$result) { + $this->Error( $msg ? "Expected '" . $tok . "' got '" . $this->input[$this->pos] . "'" : $msg ); + } else { + return $result; + } + } + + /** + * @param string $tok + */ + public function expectChar($tok, $msg = null ){ + $result = $this->MatchChar($tok); + if( !$result ){ + $this->Error( $msg ? "Expected '" . $tok . "' got '" . $this->input[$this->pos] . "'" : $msg ); + }else{ + return $result; + } + } + + // + // Here in, the parsing rules/functions + // + // The basic structure of the syntax tree generated is as follows: + // + // Ruleset -> Rule -> Value -> Expression -> Entity + // + // Here's some LESS code: + // + // .class { + // color: #fff; + // border: 1px solid #000; + // width: @w + 4px; + // > .child {...} + // } + // + // And here's what the parse tree might look like: + // + // Ruleset (Selector '.class', [ + // Rule ("color", Value ([Expression [Color #fff]])) + // Rule ("border", Value ([Expression [Dimension 1px][Keyword "solid"][Color #000]])) + // Rule ("width", Value ([Expression [Operation "+" [Variable "@w"][Dimension 4px]]])) + // Ruleset (Selector [Element '>', '.child'], [...]) + // ]) + // + // In general, most rules will try to parse a token with the `$()` function, and if the return + // value is truly, will return a new node, of the relevant type. Sometimes, we need to check + // first, before parsing, that's when we use `peek()`. + // + + // + // The `primary` rule is the *entry* and *exit* point of the parser. + // The rules here can appear at any level of the parse tree. + // + // The recursive nature of the grammar is an interplay between the `block` + // rule, which represents `{ ... }`, the `ruleset` rule, and this `primary` rule, + // as represented by this simplified grammar: + // + // primary → (ruleset | rule)+ + // ruleset → selector+ block + // block → '{' primary '}' + // + // Only at one point is the primary rule not called from the + // block rule: at the root level. + // + private function parsePrimary(){ + $root = array(); + + while( true ){ + + if( $this->pos >= $this->input_len ){ + break; + } + + $node = $this->parseExtend(true); + if( $node ){ + $root = array_merge($root,$node); + continue; + } + + //$node = $this->MatchFuncs( array( 'parseMixinDefinition', 'parseRule', 'parseRuleset', 'parseMixinCall', 'parseComment', 'parseDirective')); + $node = $this->MatchFuncs( array( 'parseMixinDefinition', 'parseNameValue', 'parseRule', 'parseRuleset', 'parseMixinCall', 'parseComment', 'parseRulesetCall', 'parseDirective')); + + if( $node ){ + $root[] = $node; + }elseif( !$this->MatchReg('/\\G[\s\n;]+/') ){ + break; + } + + if( $this->PeekChar('}') ){ + break; + } + } + + return $root; + } + + + + // We create a Comment node for CSS comments `/* */`, + // but keep the LeSS comments `//` silent, by just skipping + // over them. + private function parseComment(){ + + if( $this->input[$this->pos] !== '/' ){ + return; + } + + if( $this->input[$this->pos+1] === '/' ){ + $match = $this->MatchReg('/\\G\/\/.*/'); + return $this->NewObj4('Less_Tree_Comment',array($match[0], true, $this->pos, $this->env->currentFileInfo)); + } + + //$comment = $this->MatchReg('/\\G\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/'); + $comment = $this->MatchReg('/\\G\/\*(?s).*?\*+\/\n?/');//not the same as less.js to prevent fatal errors + if( $comment ){ + return $this->NewObj4('Less_Tree_Comment',array($comment[0], false, $this->pos, $this->env->currentFileInfo)); + } + } + + private function parseComments(){ + $comments = array(); + + while( $this->pos < $this->input_len ){ + $comment = $this->parseComment(); + if( !$comment ){ + break; + } + + $comments[] = $comment; + } + + return $comments; + } + + + + // + // A string, which supports escaping " and ' + // + // "milky way" 'he\'s the one!' + // + private function parseEntitiesQuoted() { + $j = $this->pos; + $e = false; + $index = $this->pos; + + if( $this->input[$this->pos] === '~' ){ + $j++; + $e = true; // Escaped strings + } + + if( $this->input[$j] != '"' && $this->input[$j] !== "'" ){ + return; + } + + if ($e) { + $this->MatchChar('~'); + } + + // Fix for #124: match escaped newlines + //$str = $this->MatchReg('/\\G"((?:[^"\\\\\r\n]|\\\\.)*)"|\'((?:[^\'\\\\\r\n]|\\\\.)*)\'/'); + $str = $this->MatchReg('/\\G"((?:[^"\\\\\r\n]|\\\\.|\\\\\r\n|\\\\[\n\r\f])*)"|\'((?:[^\'\\\\\r\n]|\\\\.|\\\\\r\n|\\\\[\n\r\f])*)\'/'); + + if( $str ){ + $result = $str[0][0] == '"' ? $str[1] : $str[2]; + return $this->NewObj5('Less_Tree_Quoted',array($str[0], $result, $e, $index, $this->env->currentFileInfo) ); + } + return; + } + + + // + // A catch-all word, such as: + // + // black border-collapse + // + private function parseEntitiesKeyword(){ + + //$k = $this->MatchReg('/\\G[_A-Za-z-][_A-Za-z0-9-]*/'); + $k = $this->MatchReg('/\\G%|\\G[_A-Za-z-][_A-Za-z0-9-]*/'); + if( $k ){ + $k = $k[0]; + $color = $this->fromKeyword($k); + if( $color ){ + return $color; + } + return $this->NewObj1('Less_Tree_Keyword',$k); + } + } + + // duplicate of Less_Tree_Color::FromKeyword + private function FromKeyword( $keyword ){ + $keyword = strtolower($keyword); + + if( Less_Colors::hasOwnProperty($keyword) ){ + // detect named color + return $this->NewObj1('Less_Tree_Color',substr(Less_Colors::color($keyword), 1)); + } + + if( $keyword === 'transparent' ){ + return $this->NewObj3('Less_Tree_Color', array( array(0, 0, 0), 0, true)); + } + } + + // + // A function call + // + // rgb(255, 0, 255) + // + // We also try to catch IE's `alpha()`, but let the `alpha` parser + // deal with the details. + // + // The arguments are parsed with the `entities.arguments` parser. + // + private function parseEntitiesCall(){ + $index = $this->pos; + + if( !preg_match('/\\G([\w-]+|%|progid:[\w\.]+)\(/', $this->input, $name,0,$this->pos) ){ + return; + } + $name = $name[1]; + $nameLC = strtolower($name); + + if ($nameLC === 'url') { + return null; + } + + $this->pos += strlen($name); + + if( $nameLC === 'alpha' ){ + $alpha_ret = $this->parseAlpha(); + if( $alpha_ret ){ + return $alpha_ret; + } + } + + $this->MatchChar('('); // Parse the '(' and consume whitespace. + + $args = $this->parseEntitiesArguments(); + + if( !$this->MatchChar(')') ){ + return; + } + + if ($name) { + return $this->NewObj4('Less_Tree_Call',array($name, $args, $index, $this->env->currentFileInfo) ); + } + } + + /** + * Parse a list of arguments + * + * @return array + */ + private function parseEntitiesArguments(){ + + $args = array(); + while( true ){ + $arg = $this->MatchFuncs( array('parseEntitiesAssignment','parseExpression') ); + if( !$arg ){ + break; + } + + $args[] = $arg; + if( !$this->MatchChar(',') ){ + break; + } + } + return $args; + } + + private function parseEntitiesLiteral(){ + return $this->MatchFuncs( array('parseEntitiesDimension','parseEntitiesColor','parseEntitiesQuoted','parseUnicodeDescriptor') ); + } + + // Assignments are argument entities for calls. + // They are present in ie filter properties as shown below. + // + // filter: progid:DXImageTransform.Microsoft.Alpha( *opacity=50* ) + // + private function parseEntitiesAssignment() { + + $key = $this->MatchReg('/\\G\w+(?=\s?=)/'); + if( !$key ){ + return; + } + + if( !$this->MatchChar('=') ){ + return; + } + + $value = $this->parseEntity(); + if( $value ){ + return $this->NewObj2('Less_Tree_Assignment',array($key[0], $value)); + } + } + + // + // Parse url() tokens + // + // We use a specific rule for urls, because they don't really behave like + // standard function calls. The difference is that the argument doesn't have + // to be enclosed within a string, so it can't be parsed as an Expression. + // + private function parseEntitiesUrl(){ + + + if( $this->input[$this->pos] !== 'u' || !$this->matchReg('/\\Gurl\(/') ){ + return; + } + + $value = $this->match( array('parseEntitiesQuoted','parseEntitiesVariable','/\\Gdata\:.*?[^\)]+/','/\\G(?:(?:\\\\[\(\)\'"])|[^\(\)\'"])+/') ); + if( !$value ){ + $value = ''; + } + + + $this->expectChar(')'); + + + if( isset($value->value) || $value instanceof Less_Tree_Variable ){ + return $this->NewObj2('Less_Tree_Url',array($value, $this->env->currentFileInfo)); + } + + return $this->NewObj2('Less_Tree_Url', array( $this->NewObj1('Less_Tree_Anonymous',$value), $this->env->currentFileInfo) ); + } + + + // + // A Variable entity, such as `@fink`, in + // + // width: @fink + 2px + // + // We use a different parser for variable definitions, + // see `parsers.variable`. + // + private function parseEntitiesVariable(){ + $index = $this->pos; + if ($this->PeekChar('@') && ($name = $this->MatchReg('/\\G@@?[\w-]+/'))) { + return $this->NewObj3('Less_Tree_Variable', array( $name[0], $index, $this->env->currentFileInfo)); + } + } + + + // A variable entity useing the protective {} e.g. @{var} + private function parseEntitiesVariableCurly() { + $index = $this->pos; + + if( $this->input_len > ($this->pos+1) && $this->input[$this->pos] === '@' && ($curly = $this->MatchReg('/\\G@\{([\w-]+)\}/')) ){ + return $this->NewObj3('Less_Tree_Variable',array('@'.$curly[1], $index, $this->env->currentFileInfo)); + } + } + + // + // A Hexadecimal color + // + // #4F3C2F + // + // `rgb` and `hsl` colors are parsed through the `entities.call` parser. + // + private function parseEntitiesColor(){ + if ($this->PeekChar('#') && ($rgb = $this->MatchReg('/\\G#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/'))) { + return $this->NewObj1('Less_Tree_Color',$rgb[1]); + } + } + + // + // A Dimension, that is, a number and a unit + // + // 0.5em 95% + // + private function parseEntitiesDimension(){ + + $c = @ord($this->input[$this->pos]); + + //Is the first char of the dimension 0-9, '.', '+' or '-' + if (($c > 57 || $c < 43) || $c === 47 || $c == 44){ + return; + } + + $value = $this->MatchReg('/\\G([+-]?\d*\.?\d+)(%|[a-z]+)?/'); + if( $value ){ + + if( isset($value[2]) ){ + return $this->NewObj2('Less_Tree_Dimension', array($value[1],$value[2])); + } + return $this->NewObj1('Less_Tree_Dimension',$value[1]); + } + } + + + // + // A unicode descriptor, as is used in unicode-range + // + // U+0?? or U+00A1-00A9 + // + function parseUnicodeDescriptor() { + $ud = $this->MatchReg('/\\G(U\+[0-9a-fA-F?]+)(\-[0-9a-fA-F?]+)?/'); + if( $ud ){ + return $this->NewObj1('Less_Tree_UnicodeDescriptor', $ud[0]); + } + } + + + // + // JavaScript code to be evaluated + // + // `window.location.href` + // + private function parseEntitiesJavascript(){ + $e = false; + $j = $this->pos; + if( $this->input[$j] === '~' ){ + $j++; + $e = true; + } + if( $this->input[$j] !== '`' ){ + return; + } + if( $e ){ + $this->MatchChar('~'); + } + $str = $this->MatchReg('/\\G`([^`]*)`/'); + if( $str ){ + return $this->NewObj3('Less_Tree_Javascript', array($str[1], $this->pos, $e)); + } + } + + + // + // The variable part of a variable definition. Used in the `rule` parser + // + // @fink: + // + private function parseVariable(){ + if ($this->PeekChar('@') && ($name = $this->MatchReg('/\\G(@[\w-]+)\s*:/'))) { + return $name[1]; + } + } + + + // + // The variable part of a variable definition. Used in the `rule` parser + // + // @fink(); + // + private function parseRulesetCall(){ + + if( $this->input[$this->pos] === '@' && ($name = $this->MatchReg('/\\G(@[\w-]+)\s*\(\s*\)\s*;/')) ){ + return $this->NewObj1('Less_Tree_RulesetCall', $name[1] ); + } + } + + + // + // extend syntax - used to extend selectors + // + function parseExtend($isRule = false){ + + $index = $this->pos; + $extendList = array(); + + + if( !$this->MatchReg( $isRule ? '/\\G&:extend\(/' : '/\\G:extend\(/' ) ){ return; } + + do{ + $option = null; + $elements = array(); + while( true ){ + $option = $this->MatchReg('/\\G(all)(?=\s*(\)|,))/'); + if( $option ){ break; } + $e = $this->parseElement(); + if( !$e ){ break; } + $elements[] = $e; + } + + if( $option ){ + $option = $option[1]; + } + + $extendList[] = $this->NewObj3('Less_Tree_Extend', array( $this->NewObj1('Less_Tree_Selector',$elements), $option, $index )); + + }while( $this->MatchChar(",") ); + + $this->expect('/\\G\)/'); + + if( $isRule ){ + $this->expect('/\\G;/'); + } + + return $extendList; + } + + + // + // A Mixin call, with an optional argument list + // + // #mixins > .square(#fff); + // .rounded(4px, black); + // .button; + // + // The `while` loop is there because mixins can be + // namespaced, but we only support the child and descendant + // selector for now. + // + private function parseMixinCall(){ + + $char = $this->input[$this->pos]; + if( $char !== '.' && $char !== '#' ){ + return; + } + + $index = $this->pos; + $this->save(); // stop us absorbing part of an invalid selector + + $elements = $this->parseMixinCallElements(); + + if( $elements ){ + + if( $this->MatchChar('(') ){ + $returned = $this->parseMixinArgs(true); + $args = $returned['args']; + $this->expectChar(')'); + }else{ + $args = array(); + } + + $important = $this->parseImportant(); + + if( $this->parseEnd() ){ + $this->forget(); + return $this->NewObj5('Less_Tree_Mixin_Call', array( $elements, $args, $index, $this->env->currentFileInfo, $important)); + } + } + + $this->restore(); + } + + + private function parseMixinCallElements(){ + $elements = array(); + $c = null; + + while( true ){ + $elemIndex = $this->pos; + $e = $this->MatchReg('/\\G[#.](?:[\w-]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/'); + if( !$e ){ + break; + } + $elements[] = $this->NewObj4('Less_Tree_Element', array($c, $e[0], $elemIndex, $this->env->currentFileInfo)); + $c = $this->MatchChar('>'); + } + + return $elements; + } + + + + /** + * @param boolean $isCall + */ + private function parseMixinArgs( $isCall ){ + $expressions = array(); + $argsSemiColon = array(); + $isSemiColonSeperated = null; + $argsComma = array(); + $expressionContainsNamed = null; + $name = null; + $returner = array('args'=>array(), 'variadic'=> false); + + $this->save(); + + while( true ){ + if( $isCall ){ + $arg = $this->MatchFuncs( array( 'parseDetachedRuleset','parseExpression' ) ); + } else { + $this->parseComments(); + if( $this->input[ $this->pos ] === '.' && $this->MatchReg('/\\G\.{3}/') ){ + $returner['variadic'] = true; + if( $this->MatchChar(";") && !$isSemiColonSeperated ){ + $isSemiColonSeperated = true; + } + + if( $isSemiColonSeperated ){ + $argsSemiColon[] = array('variadic'=>true); + }else{ + $argsComma[] = array('variadic'=>true); + } + break; + } + $arg = $this->MatchFuncs( array('parseEntitiesVariable','parseEntitiesLiteral','parseEntitiesKeyword') ); + } + + if( !$arg ){ + break; + } + + + $nameLoop = null; + if( $arg instanceof Less_Tree_Expression ){ + $arg->throwAwayComments(); + } + $value = $arg; + $val = null; + + if( $isCall ){ + // Variable + if( property_exists($arg,'value') && count($arg->value) == 1 ){ + $val = $arg->value[0]; + } + } else { + $val = $arg; + } + + + if( $val instanceof Less_Tree_Variable ){ + + if( $this->MatchChar(':') ){ + if( $expressions ){ + if( $isSemiColonSeperated ){ + $this->Error('Cannot mix ; and , as delimiter types'); + } + $expressionContainsNamed = true; + } + + // we do not support setting a ruleset as a default variable - it doesn't make sense + // However if we do want to add it, there is nothing blocking it, just don't error + // and remove isCall dependency below + $value = null; + if( $isCall ){ + $value = $this->parseDetachedRuleset(); + } + if( !$value ){ + $value = $this->parseExpression(); + } + + if( !$value ){ + if( $isCall ){ + $this->Error('could not understand value for named argument'); + } else { + $this->restore(); + $returner['args'] = array(); + return $returner; + } + } + + $nameLoop = ($name = $val->name); + }elseif( !$isCall && $this->MatchReg('/\\G\.{3}/') ){ + $returner['variadic'] = true; + if( $this->MatchChar(";") && !$isSemiColonSeperated ){ + $isSemiColonSeperated = true; + } + if( $isSemiColonSeperated ){ + $argsSemiColon[] = array('name'=> $arg->name, 'variadic' => true); + }else{ + $argsComma[] = array('name'=> $arg->name, 'variadic' => true); + } + break; + }elseif( !$isCall ){ + $name = $nameLoop = $val->name; + $value = null; + } + } + + if( $value ){ + $expressions[] = $value; + } + + $argsComma[] = array('name'=>$nameLoop, 'value'=>$value ); + + if( $this->MatchChar(',') ){ + continue; + } + + if( $this->MatchChar(';') || $isSemiColonSeperated ){ + + if( $expressionContainsNamed ){ + $this->Error('Cannot mix ; and , as delimiter types'); + } + + $isSemiColonSeperated = true; + + if( count($expressions) > 1 ){ + $value = $this->NewObj1('Less_Tree_Value', $expressions); + } + $argsSemiColon[] = array('name'=>$name, 'value'=>$value ); + + $name = null; + $expressions = array(); + $expressionContainsNamed = false; + } + } + + $this->forget(); + $returner['args'] = ($isSemiColonSeperated ? $argsSemiColon : $argsComma); + return $returner; + } + + + + // + // A Mixin definition, with a list of parameters + // + // .rounded (@radius: 2px, @color) { + // ... + // } + // + // Until we have a finer grained state-machine, we have to + // do a look-ahead, to make sure we don't have a mixin call. + // See the `rule` function for more information. + // + // We start by matching `.rounded (`, and then proceed on to + // the argument list, which has optional default values. + // We store the parameters in `params`, with a `value` key, + // if there is a value, such as in the case of `@radius`. + // + // Once we've got our params list, and a closing `)`, we parse + // the `{...}` block. + // + private function parseMixinDefinition(){ + $cond = null; + + $char = $this->input[$this->pos]; + if( ($char !== '.' && $char !== '#') || ($char === '{' && $this->PeekReg('/\\G[^{]*\}/')) ){ + return; + } + + $this->save(); + + $match = $this->MatchReg('/\\G([#.](?:[\w-]|\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/'); + if( $match ){ + $name = $match[1]; + + $argInfo = $this->parseMixinArgs( false ); + $params = $argInfo['args']; + $variadic = $argInfo['variadic']; + + + // .mixincall("@{a}"); + // looks a bit like a mixin definition.. + // also + // .mixincall(@a: {rule: set;}); + // so we have to be nice and restore + if( !$this->MatchChar(')') ){ + $this->furthest = $this->pos; + $this->restore(); + return; + } + + + $this->parseComments(); + + if ($this->MatchReg('/\\Gwhen/')) { // Guard + $cond = $this->expect('parseConditions', 'Expected conditions'); + } + + $ruleset = $this->parseBlock(); + + if( is_array($ruleset) ){ + $this->forget(); + return $this->NewObj5('Less_Tree_Mixin_Definition', array( $name, $params, $ruleset, $cond, $variadic)); + } + + $this->restore(); + }else{ + $this->forget(); + } + } + + // + // Entities are the smallest recognized token, + // and can be found inside a rule's value. + // + private function parseEntity(){ + + return $this->MatchFuncs( array('parseEntitiesLiteral','parseEntitiesVariable','parseEntitiesUrl','parseEntitiesCall','parseEntitiesKeyword','parseEntitiesJavascript','parseComment') ); + } + + // + // A Rule terminator. Note that we use `peek()` to check for '}', + // because the `block` rule will be expecting it, but we still need to make sure + // it's there, if ';' was ommitted. + // + private function parseEnd(){ + return $this->MatchChar(';') || $this->PeekChar('}'); + } + + // + // IE's alpha function + // + // alpha(opacity=88) + // + private function parseAlpha(){ + + if ( ! $this->MatchReg('/\\G\(opacity=/i')) { + return; + } + + $value = $this->MatchReg('/\\G[0-9]+/'); + if( $value ){ + $value = $value[0]; + }else{ + $value = $this->parseEntitiesVariable(); + if( !$value ){ + return; + } + } + + $this->expectChar(')'); + return $this->NewObj1('Less_Tree_Alpha',$value); + } + + + // + // A Selector Element + // + // div + // + h1 + // #socks + // input[type="text"] + // + // Elements are the building blocks for Selectors, + // they are made out of a `Combinator` (see combinator rule), + // and an element name, such as a tag a class, or `*`. + // + private function parseElement(){ + $c = $this->parseCombinator(); + $index = $this->pos; + + $e = $this->match( array('/\\G(?:\d+\.\d+|\d+)%/', '/\\G(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/', + '#*', '#&', 'parseAttribute', '/\\G\([^()@]+\)/', '/\\G[\.#](?=@)/', 'parseEntitiesVariableCurly') ); + + if( is_null($e) ){ + $this->save(); + if( $this->MatchChar('(') ){ + if( ($v = $this->parseSelector()) && $this->MatchChar(')') ){ + $e = $this->NewObj1('Less_Tree_Paren',$v); + $this->forget(); + }else{ + $this->restore(); + } + }else{ + $this->forget(); + } + } + + if( !is_null($e) ){ + return $this->NewObj4('Less_Tree_Element',array( $c, $e, $index, $this->env->currentFileInfo)); + } + } + + // + // Combinators combine elements together, in a Selector. + // + // Because our parser isn't white-space sensitive, special care + // has to be taken, when parsing the descendant combinator, ` `, + // as it's an empty space. We have to check the previous character + // in the input, to see if it's a ` ` character. + // + private function parseCombinator(){ + if( $this->pos < $this->input_len ){ + $c = $this->input[$this->pos]; + if ($c === '>' || $c === '+' || $c === '~' || $c === '|' || $c === '^' ){ + + $this->pos++; + if( $this->input[$this->pos] === '^' ){ + $c = '^^'; + $this->pos++; + } + + $this->skipWhitespace(0); + + return $c; + } + + if( $this->pos > 0 && $this->isWhitespace(-1) ){ + return ' '; + } + } + } + + // + // A CSS selector (see selector below) + // with less extensions e.g. the ability to extend and guard + // + private function parseLessSelector(){ + return $this->parseSelector(true); + } + + // + // A CSS Selector + // + // .class > div + h1 + // li a:hover + // + // Selectors are made out of one or more Elements, see above. + // + private function parseSelector( $isLess = false ){ + $elements = array(); + $extendList = array(); + $condition = null; + $when = false; + $extend = false; + $e = null; + $c = null; + $index = $this->pos; + + while( ($isLess && ($extend = $this->parseExtend())) || ($isLess && ($when = $this->MatchReg('/\\Gwhen/') )) || ($e = $this->parseElement()) ){ + if( $when ){ + $condition = $this->expect('parseConditions', 'expected condition'); + }elseif( $condition ){ + //error("CSS guard can only be used at the end of selector"); + }elseif( $extend ){ + $extendList = array_merge($extendList,$extend); + }else{ + //if( count($extendList) ){ + //error("Extend can only be used at the end of selector"); + //} + if( $this->pos < $this->input_len ){ + $c = $this->input[ $this->pos ]; + } + $elements[] = $e; + $e = null; + } + + if( $c === '{' || $c === '}' || $c === ';' || $c === ',' || $c === ')') { break; } + } + + if( $elements ){ + return $this->NewObj5('Less_Tree_Selector',array($elements, $extendList, $condition, $index, $this->env->currentFileInfo)); + } + if( $extendList ) { + $this->Error('Extend must be used to extend a selector, it cannot be used on its own'); + } + } + + private function parseTag(){ + return ( $tag = $this->MatchReg('/\\G[A-Za-z][A-Za-z-]*[0-9]?/') ) ? $tag : $this->MatchChar('*'); + } + + private function parseAttribute(){ + + $val = null; + + if( !$this->MatchChar('[') ){ + return; + } + + $key = $this->parseEntitiesVariableCurly(); + if( !$key ){ + $key = $this->expect('/\\G(?:[_A-Za-z0-9-\*]*\|)?(?:[_A-Za-z0-9-]|\\\\.)+/'); + } + + $op = $this->MatchReg('/\\G[|~*$^]?=/'); + if( $op ){ + $val = $this->match( array('parseEntitiesQuoted','/\\G[0-9]+%/','/\\G[\w-]+/','parseEntitiesVariableCurly') ); + } + + $this->expectChar(']'); + + return $this->NewObj3('Less_Tree_Attribute',array( $key, $op[0], $val)); + } + + // + // The `block` rule is used by `ruleset` and `mixin.definition`. + // It's a wrapper around the `primary` rule, with added `{}`. + // + private function parseBlock(){ + if( $this->MatchChar('{') ){ + $content = $this->parsePrimary(); + if( $this->MatchChar('}') ){ + return $content; + } + } + } + + private function parseBlockRuleset(){ + $block = $this->parseBlock(); + + if( $block ){ + $block = $this->NewObj2('Less_Tree_Ruleset',array( null, $block)); + } + + return $block; + } + + private function parseDetachedRuleset(){ + $blockRuleset = $this->parseBlockRuleset(); + if( $blockRuleset ){ + return $this->NewObj1('Less_Tree_DetachedRuleset',$blockRuleset); + } + } + + // + // div, .class, body > p {...} + // + private function parseRuleset(){ + $selectors = array(); + + $this->save(); + + while( true ){ + $s = $this->parseLessSelector(); + if( !$s ){ + break; + } + $selectors[] = $s; + $this->parseComments(); + + if( $s->condition && count($selectors) > 1 ){ + $this->Error('Guards are only currently allowed on a single selector.'); + } + + if( !$this->MatchChar(',') ){ + break; + } + if( $s->condition ){ + $this->Error('Guards are only currently allowed on a single selector.'); + } + $this->parseComments(); + } + + + if( $selectors ){ + $rules = $this->parseBlock(); + if( is_array($rules) ){ + $this->forget(); + return $this->NewObj2('Less_Tree_Ruleset',array( $selectors, $rules)); //Less_Environment::$strictImports + } + } + + // Backtrack + $this->furthest = $this->pos; + $this->restore(); + } + + /** + * Custom less.php parse function for finding simple name-value css pairs + * ex: width:100px; + * + */ + private function parseNameValue(){ + + $index = $this->pos; + $this->save(); + + + //$match = $this->MatchReg('/\\G([a-zA-Z\-]+)\s*:\s*((?:\'")?[a-zA-Z0-9\-% \.,!]+?(?:\'")?)\s*([;}])/'); + $match = $this->MatchReg('/\\G([a-zA-Z\-]+)\s*:\s*([\'"]?[#a-zA-Z0-9\-%\.,]+?[\'"]?) *(! *important)?\s*([;}])/'); + if( $match ){ + + if( $match[4] == '}' ){ + $this->pos = $index + strlen($match[0])-1; + } + + if( $match[3] ){ + $match[2] .= ' !important'; + } + + return $this->NewObj4('Less_Tree_NameValue',array( $match[1], $match[2], $index, $this->env->currentFileInfo)); + } + + $this->restore(); + } + + + private function parseRule( $tryAnonymous = null ){ + + $merge = false; + $startOfRule = $this->pos; + + $c = $this->input[$this->pos]; + if( $c === '.' || $c === '#' || $c === '&' ){ + return; + } + + $this->save(); + $name = $this->MatchFuncs( array('parseVariable','parseRuleProperty')); + + if( $name ){ + + $isVariable = is_string($name); + + $value = null; + if( $isVariable ){ + $value = $this->parseDetachedRuleset(); + } + + $important = null; + if( !$value ){ + + // prefer to try to parse first if its a variable or we are compressing + // but always fallback on the other one + //if( !$tryAnonymous && is_string($name) && $name[0] === '@' ){ + if( !$tryAnonymous && (Less_Parser::$options['compress'] || $isVariable) ){ + $value = $this->MatchFuncs( array('parseValue','parseAnonymousValue')); + }else{ + $value = $this->MatchFuncs( array('parseAnonymousValue','parseValue')); + } + + $important = $this->parseImportant(); + + // a name returned by this.ruleProperty() is always an array of the form: + // [string-1, ..., string-n, ""] or [string-1, ..., string-n, "+"] + // where each item is a tree.Keyword or tree.Variable + if( !$isVariable && is_array($name) ){ + $nm = array_pop($name); + if( $nm->value ){ + $merge = $nm->value; + } + } + } + + + if( $value && $this->parseEnd() ){ + $this->forget(); + return $this->NewObj6('Less_Tree_Rule',array( $name, $value, $important, $merge, $startOfRule, $this->env->currentFileInfo)); + }else{ + $this->furthest = $this->pos; + $this->restore(); + if( $value && !$tryAnonymous ){ + return $this->parseRule(true); + } + } + }else{ + $this->forget(); + } + } + + function parseAnonymousValue(){ + + if( preg_match('/\\G([^@+\/\'"*`(;{}-]*);/',$this->input, $match, 0, $this->pos) ){ + $this->pos += strlen($match[1]); + return $this->NewObj1('Less_Tree_Anonymous',$match[1]); + } + } + + // + // An @import directive + // + // @import "lib"; + // + // Depending on our environment, importing is done differently: + // In the browser, it's an XHR request, in Node, it would be a + // file-system operation. The function used for importing is + // stored in `import`, which we pass to the Import constructor. + // + private function parseImport(){ + + $this->save(); + + $dir = $this->MatchReg('/\\G@import?\s+/'); + + if( $dir ){ + $options = $this->parseImportOptions(); + $path = $this->MatchFuncs( array('parseEntitiesQuoted','parseEntitiesUrl')); + + if( $path ){ + $features = $this->parseMediaFeatures(); + if( $this->MatchChar(';') ){ + if( $features ){ + $features = $this->NewObj1('Less_Tree_Value',$features); + } + + $this->forget(); + return $this->NewObj5('Less_Tree_Import',array( $path, $features, $options, $this->pos, $this->env->currentFileInfo)); + } + } + } + + $this->restore(); + } + + private function parseImportOptions(){ + + $options = array(); + + // list of options, surrounded by parens + if( !$this->MatchChar('(') ){ + return $options; + } + do{ + $optionName = $this->parseImportOption(); + if( $optionName ){ + $value = true; + switch( $optionName ){ + case "css": + $optionName = "less"; + $value = false; + break; + case "once": + $optionName = "multiple"; + $value = false; + break; + } + $options[$optionName] = $value; + if( !$this->MatchChar(',') ){ break; } + } + }while( $optionName ); + $this->expectChar(')'); + return $options; + } + + private function parseImportOption(){ + $opt = $this->MatchReg('/\\G(less|css|multiple|once|inline|reference)/'); + if( $opt ){ + return $opt[1]; + } + } + + private function parseMediaFeature() { + $nodes = array(); + + do{ + $e = $this->MatchFuncs(array('parseEntitiesKeyword','parseEntitiesVariable')); + if( $e ){ + $nodes[] = $e; + } elseif ($this->MatchChar('(')) { + $p = $this->parseProperty(); + $e = $this->parseValue(); + if ($this->MatchChar(')')) { + if ($p && $e) { + $r = $this->NewObj7('Less_Tree_Rule', array( $p, $e, null, null, $this->pos, $this->env->currentFileInfo, true)); + $nodes[] = $this->NewObj1('Less_Tree_Paren',$r); + } elseif ($e) { + $nodes[] = $this->NewObj1('Less_Tree_Paren',$e); + } else { + return null; + } + } else + return null; + } + } while ($e); + + if ($nodes) { + return $this->NewObj1('Less_Tree_Expression',$nodes); + } + } + + private function parseMediaFeatures() { + $features = array(); + + do{ + $e = $this->parseMediaFeature(); + if( $e ){ + $features[] = $e; + if (!$this->MatchChar(',')) break; + }else{ + $e = $this->parseEntitiesVariable(); + if( $e ){ + $features[] = $e; + if (!$this->MatchChar(',')) break; + } + } + } while ($e); + + return $features ? $features : null; + } + + private function parseMedia() { + if( $this->MatchReg('/\\G@media/') ){ + $features = $this->parseMediaFeatures(); + $rules = $this->parseBlock(); + + if( is_array($rules) ){ + return $this->NewObj4('Less_Tree_Media',array( $rules, $features, $this->pos, $this->env->currentFileInfo)); + } + } + } + + + // + // A CSS Directive + // + // @charset "utf-8"; + // + private function parseDirective(){ + + if( !$this->PeekChar('@') ){ + return; + } + + $rules = null; + $index = $this->pos; + $hasBlock = true; + $hasIdentifier = false; + $hasExpression = false; + $hasUnknown = false; + + + $value = $this->MatchFuncs(array('parseImport','parseMedia')); + if( $value ){ + return $value; + } + + $this->save(); + + $name = $this->MatchReg('/\\G@[a-z-]+/'); + + if( !$name ) return; + $name = $name[0]; + + + $nonVendorSpecificName = $name; + $pos = strpos($name,'-', 2); + if( $name[1] == '-' && $pos > 0 ){ + $nonVendorSpecificName = "@" . substr($name, $pos + 1); + } + + + switch( $nonVendorSpecificName ){ + /* + case "@font-face": + case "@viewport": + case "@top-left": + case "@top-left-corner": + case "@top-center": + case "@top-right": + case "@top-right-corner": + case "@bottom-left": + case "@bottom-left-corner": + case "@bottom-center": + case "@bottom-right": + case "@bottom-right-corner": + case "@left-top": + case "@left-middle": + case "@left-bottom": + case "@right-top": + case "@right-middle": + case "@right-bottom": + hasBlock = true; + break; + */ + case "@charset": + $hasIdentifier = true; + $hasBlock = false; + break; + case "@namespace": + $hasExpression = true; + $hasBlock = false; + break; + case "@keyframes": + $hasIdentifier = true; + break; + case "@host": + case "@page": + case "@document": + case "@supports": + $hasUnknown = true; + break; + } + + if( $hasIdentifier ){ + $value = $this->parseEntity(); + if( !$value ){ + $this->error("expected " . $name . " identifier"); + } + } else if( $hasExpression ){ + $value = $this->parseExpression(); + if( !$value ){ + $this->error("expected " . $name. " expression"); + } + } else if ($hasUnknown) { + + $value = $this->MatchReg('/\\G[^{;]+/'); + if( $value ){ + $value = $this->NewObj1('Less_Tree_Anonymous',trim($value[0])); + } + } + + if( $hasBlock ){ + $rules = $this->parseBlockRuleset(); + } + + if( $rules || (!$hasBlock && $value && $this->MatchChar(';'))) { + $this->forget(); + return $this->NewObj5('Less_Tree_Directive',array($name, $value, $rules, $index, $this->env->currentFileInfo)); + } + + $this->restore(); + } + + + // + // A Value is a comma-delimited list of Expressions + // + // font-family: Baskerville, Georgia, serif; + // + // In a Rule, a Value represents everything after the `:`, + // and before the `;`. + // + private function parseValue(){ + $expressions = array(); + + do{ + $e = $this->parseExpression(); + if( $e ){ + $expressions[] = $e; + if (! $this->MatchChar(',')) { + break; + } + } + }while($e); + + if( $expressions ){ + return $this->NewObj1('Less_Tree_Value',$expressions); + } + } + + private function parseImportant (){ + if( $this->PeekChar('!') && $this->MatchReg('/\\G! *important/') ){ + return ' !important'; + } + } + + private function parseSub (){ + + if( $this->MatchChar('(') ){ + $a = $this->parseAddition(); + if( $a ){ + $this->expectChar(')'); + return $this->NewObj2('Less_Tree_Expression',array( array($a), true) ); //instead of $e->parens = true so the value is cached + } + } + } + + + /** + * Parses multiplication operation + * + * @return Less_Tree_Operation|null + */ + function parseMultiplication(){ + + $return = $m = $this->parseOperand(); + if( $return ){ + while( true ){ + + $isSpaced = $this->isWhitespace( -1 ); + + if( $this->PeekReg('/\\G\/[*\/]/') ){ + break; + } + + $op = $this->MatchChar('/'); + if( !$op ){ + $op = $this->MatchChar('*'); + if( !$op ){ + break; + } + } + + $a = $this->parseOperand(); + + if(!$a) { break; } + + $m->parensInOp = true; + $a->parensInOp = true; + $return = $this->NewObj3('Less_Tree_Operation',array( $op, array( $return, $a ), $isSpaced) ); + } + } + return $return; + + } + + + /** + * Parses an addition operation + * + * @return Less_Tree_Operation|null + */ + private function parseAddition (){ + + $return = $m = $this->parseMultiplication(); + if( $return ){ + while( true ){ + + $isSpaced = $this->isWhitespace( -1 ); + + $op = $this->MatchReg('/\\G[-+]\s+/'); + if( $op ){ + $op = $op[0]; + }else{ + if( !$isSpaced ){ + $op = $this->match(array('#+','#-')); + } + if( !$op ){ + break; + } + } + + $a = $this->parseMultiplication(); + if( !$a ){ + break; + } + + $m->parensInOp = true; + $a->parensInOp = true; + $return = $this->NewObj3('Less_Tree_Operation',array($op, array($return, $a), $isSpaced)); + } + } + + return $return; + } + + + /** + * Parses the conditions + * + * @return Less_Tree_Condition|null + */ + private function parseConditions() { + $index = $this->pos; + $return = $a = $this->parseCondition(); + if( $a ){ + while( true ){ + if( !$this->PeekReg('/\\G,\s*(not\s*)?\(/') || !$this->MatchChar(',') ){ + break; + } + $b = $this->parseCondition(); + if( !$b ){ + break; + } + + $return = $this->NewObj4('Less_Tree_Condition',array('or', $return, $b, $index)); + } + return $return; + } + } + + private function parseCondition() { + $index = $this->pos; + $negate = false; + $c = null; + + if ($this->MatchReg('/\\Gnot/')) $negate = true; + $this->expectChar('('); + $a = $this->MatchFuncs(array('parseAddition','parseEntitiesKeyword','parseEntitiesQuoted')); + + if( $a ){ + $op = $this->MatchReg('/\\G(?:>=|<=|=<|[<=>])/'); + if( $op ){ + $b = $this->MatchFuncs(array('parseAddition','parseEntitiesKeyword','parseEntitiesQuoted')); + if( $b ){ + $c = $this->NewObj5('Less_Tree_Condition',array($op[0], $a, $b, $index, $negate)); + } else { + $this->Error('Unexpected expression'); + } + } else { + $k = $this->NewObj1('Less_Tree_Keyword','true'); + $c = $this->NewObj5('Less_Tree_Condition',array('=', $a, $k, $index, $negate)); + } + $this->expectChar(')'); + return $this->MatchReg('/\\Gand/') ? $this->NewObj3('Less_Tree_Condition',array('and', $c, $this->parseCondition())) : $c; + } + } + + /** + * An operand is anything that can be part of an operation, + * such as a Color, or a Variable + * + */ + private function parseOperand (){ + + $negate = false; + $offset = $this->pos+1; + if( $offset >= $this->input_len ){ + return; + } + $char = $this->input[$offset]; + if( $char === '@' || $char === '(' ){ + $negate = $this->MatchChar('-'); + } + + $o = $this->MatchFuncs(array('parseSub','parseEntitiesDimension','parseEntitiesColor','parseEntitiesVariable','parseEntitiesCall')); + + if( $negate ){ + $o->parensInOp = true; + $o = $this->NewObj1('Less_Tree_Negative',$o); + } + + return $o; + } + + + /** + * Expressions either represent mathematical operations, + * or white-space delimited Entities. + * + * 1px solid black + * @var * 2 + * + * @return Less_Tree_Expression|null + */ + private function parseExpression (){ + $entities = array(); + + do{ + $e = $this->MatchFuncs(array('parseAddition','parseEntity')); + if( $e ){ + $entities[] = $e; + // operations do not allow keyword "/" dimension (e.g. small/20px) so we support that here + if( !$this->PeekReg('/\\G\/[\/*]/') ){ + $delim = $this->MatchChar('/'); + if( $delim ){ + $entities[] = $this->NewObj1('Less_Tree_Anonymous',$delim); + } + } + } + }while($e); + + if( $entities ){ + return $this->NewObj1('Less_Tree_Expression',$entities); + } + } + + + /** + * Parse a property + * eg: 'min-width', 'orientation', etc + * + * @return string + */ + private function parseProperty (){ + $name = $this->MatchReg('/\\G(\*?-?[_a-zA-Z0-9-]+)\s*:/'); + if( $name ){ + return $name[1]; + } + } + + + /** + * Parse a rule property + * eg: 'color', 'width', 'height', etc + * + * @return string + */ + private function parseRuleProperty(){ + $offset = $this->pos; + $name = array(); + $index = array(); + $length = 0; + + + $this->rulePropertyMatch('/\\G(\*?)/', $offset, $length, $index, $name ); + while( $this->rulePropertyMatch('/\\G((?:[\w-]+)|(?:@\{[\w-]+\}))/', $offset, $length, $index, $name )); // ! + + if( (count($name) > 1) && $this->rulePropertyMatch('/\\G\s*((?:\+_|\+)?)\s*:/', $offset, $length, $index, $name) ){ + // at last, we have the complete match now. move forward, + // convert name particles to tree objects and return: + $this->skipWhitespace($length); + + if( $name[0] === '' ){ + array_shift($name); + array_shift($index); + } + foreach($name as $k => $s ){ + if( !$s || $s[0] !== '@' ){ + $name[$k] = $this->NewObj1('Less_Tree_Keyword',$s); + }else{ + $name[$k] = $this->NewObj3('Less_Tree_Variable',array('@' . substr($s,2,-1), $index[$k], $this->env->currentFileInfo)); + } + } + return $name; + } + + + } + + private function rulePropertyMatch( $re, &$offset, &$length, &$index, &$name ){ + preg_match($re, $this->input, $a, 0, $offset); + if( $a ){ + $index[] = $this->pos + $length; + $length += strlen($a[0]); + $offset += strlen($a[0]); + $name[] = $a[1]; + return true; + } + } + + public static function serializeVars( $vars ){ + $s = ''; + + foreach($vars as $name => $value){ + $s .= (($name[0] === '@') ? '' : '@') . $name .': '. $value . ((substr($value,-1) === ';') ? '' : ';'); + } + + return $s; + } + + + /** + * Some versions of php have trouble with method_exists($a,$b) if $a is not an object + * + * @param string $b + */ + public static function is_method($a,$b){ + return is_object($a) && method_exists($a,$b); + } + + + /** + * Round numbers similarly to javascript + * eg: 1.499999 to 1 instead of 2 + * + */ + public static function round($i, $precision = 0){ + + $precision = pow(10,$precision); + $i = $i*$precision; + + $ceil = ceil($i); + $floor = floor($i); + if( ($ceil - $i) <= ($i - $floor) ){ + return $ceil/$precision; + }else{ + return $floor/$precision; + } + } + + + /** + * Create Less_Tree_* objects and optionally generate a cache string + * + * @return mixed + */ + public function NewObj0($class){ + $obj = new $class(); + if( $this->CacheEnabled() ){ + $obj->cache_string = ' new '.$class.'()'; + } + return $obj; + } + + public function NewObj1($class, $arg){ + $obj = new $class( $arg ); + if( $this->CacheEnabled() ){ + $obj->cache_string = ' new '.$class.'('.Less_Parser::ArgString($arg).')'; + } + return $obj; + } + + public function NewObj2($class, $args){ + $obj = new $class( $args[0], $args[1] ); + if( $this->CacheEnabled() ){ + $this->ObjCache( $obj, $class, $args); + } + return $obj; + } + + public function NewObj3($class, $args){ + $obj = new $class( $args[0], $args[1], $args[2] ); + if( $this->CacheEnabled() ){ + $this->ObjCache( $obj, $class, $args); + } + return $obj; + } + + public function NewObj4($class, $args){ + $obj = new $class( $args[0], $args[1], $args[2], $args[3] ); + if( $this->CacheEnabled() ){ + $this->ObjCache( $obj, $class, $args); + } + return $obj; + } + + public function NewObj5($class, $args){ + $obj = new $class( $args[0], $args[1], $args[2], $args[3], $args[4] ); + if( $this->CacheEnabled() ){ + $this->ObjCache( $obj, $class, $args); + } + return $obj; + } + + public function NewObj6($class, $args){ + $obj = new $class( $args[0], $args[1], $args[2], $args[3], $args[4], $args[5] ); + if( $this->CacheEnabled() ){ + $this->ObjCache( $obj, $class, $args); + } + return $obj; + } + + public function NewObj7($class, $args){ + $obj = new $class( $args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6] ); + if( $this->CacheEnabled() ){ + $this->ObjCache( $obj, $class, $args); + } + return $obj; + } + + //caching + public function ObjCache($obj, $class, $args=array()){ + $obj->cache_string = ' new '.$class.'('. self::ArgCache($args).')'; + } + + public function ArgCache($args){ + return implode(',',array_map( array('Less_Parser','ArgString'),$args)); + } + + + /** + * Convert an argument to a string for use in the parser cache + * + * @return string + */ + public static function ArgString($arg){ + + $type = gettype($arg); + + if( $type === 'object'){ + $string = $arg->cache_string; + unset($arg->cache_string); + return $string; + + }elseif( $type === 'array' ){ + $string = ' Array('; + foreach($arg as $k => $a){ + $string .= var_export($k,true).' => '.self::ArgString($a).','; + } + return $string . ')'; + } + + return var_export($arg,true); + } + + public function Error($msg){ + throw new Less_Exception_Parser($msg, null, $this->furthest, $this->env->currentFileInfo); + } + + public static function WinPath($path){ + return str_replace('\\', '/', $path); + } + + public function CacheEnabled(){ + return (Less_Parser::$options['cache_method'] && (Less_Cache::$cache_dir || (Less_Parser::$options['cache_method'] == 'callback'))); + } + +} + + diff --git a/vendor/oyejorge/less.php/lib/Less/SourceMap/Base64VLQ.php b/vendor/oyejorge/less.php/lib/Less/SourceMap/Base64VLQ.php new file mode 100644 index 00000000..f5b200c3 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/SourceMap/Base64VLQ.php @@ -0,0 +1,187 @@ + 0, 'B' => 1, 'C' => 2, 'D' => 3, 'E' => 4, 'F' => 5, 'G' => 6, + 'H' => 7,'I' => 8, 'J' => 9, 'K' => 10, 'L' => 11, 'M' => 12, 'N' => 13, + 'O' => 14, 'P' => 15, 'Q' => 16, 'R' => 17, 'S' => 18, 'T' => 19, 'U' => 20, + 'V' => 21, 'W' => 22, 'X' => 23, 'Y' => 24, 'Z' => 25, 'a' => 26, 'b' => 27, + 'c' => 28, 'd' => 29, 'e' => 30, 'f' => 31, 'g' => 32, 'h' => 33, 'i' => 34, + 'j' => 35, 'k' => 36, 'l' => 37, 'm' => 38, 'n' => 39, 'o' => 40, 'p' => 41, + 'q' => 42, 'r' => 43, 's' => 44, 't' => 45, 'u' => 46, 'v' => 47, 'w' => 48, + 'x' => 49, 'y' => 50, 'z' => 51, 0 => 52, 1 => 53, 2 => 54, 3 => 55, 4 => 56, + 5 => 57, 6 => 58, 7 => 59, 8 => 60, 9 => 61, '+' => 62, '/' => 63, + ); + + /** + * Integer to char map + * + * @var array + */ + private $intToCharMap = array( + 0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', 4 => 'E', 5 => 'F', 6 => 'G', + 7 => 'H', 8 => 'I', 9 => 'J', 10 => 'K', 11 => 'L', 12 => 'M', 13 => 'N', + 14 => 'O', 15 => 'P', 16 => 'Q', 17 => 'R', 18 => 'S', 19 => 'T', 20 => 'U', + 21 => 'V', 22 => 'W', 23 => 'X', 24 => 'Y', 25 => 'Z', 26 => 'a', 27 => 'b', + 28 => 'c', 29 => 'd', 30 => 'e', 31 => 'f', 32 => 'g', 33 => 'h', 34 => 'i', + 35 => 'j', 36 => 'k', 37 => 'l', 38 => 'm', 39 => 'n', 40 => 'o', 41 => 'p', + 42 => 'q', 43 => 'r', 44 => 's', 45 => 't', 46 => 'u', 47 => 'v', 48 => 'w', + 49 => 'x', 50 => 'y', 51 => 'z', 52 => '0', 53 => '1', 54 => '2', 55 => '3', + 56 => '4', 57 => '5', 58 => '6', 59 => '7', 60 => '8', 61 => '9', 62 => '+', + 63 => '/', + ); + + /** + * Constructor + */ + public function __construct(){ + // I leave it here for future reference + // foreach(str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/') as $i => $char) + // { + // $this->charToIntMap[$char] = $i; + // $this->intToCharMap[$i] = $char; + // } + } + + /** + * Convert from a two-complement value to a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + * We generate the value for 32 bit machines, hence -2147483648 becomes 1, not 4294967297, + * even on a 64 bit machine. + * @param string $aValue + */ + public function toVLQSigned($aValue){ + return 0xffffffff & ($aValue < 0 ? ((-$aValue) << 1) + 1 : ($aValue << 1) + 0); + } + + /** + * Convert to a two-complement value from a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + * We assume that the value was generated with a 32 bit machine in mind. + * Hence + * 1 becomes -2147483648 + * even on a 64 bit machine. + * @param integer $aValue + */ + public function fromVLQSigned($aValue){ + return $aValue & 1 ? $this->zeroFill(~$aValue + 2, 1) | (-1 - 0x7fffffff) : $this->zeroFill($aValue, 1); + } + + /** + * Return the base 64 VLQ encoded value. + * + * @param string $aValue The value to encode + * @return string The encoded value + */ + public function encode($aValue){ + $encoded = ''; + $vlq = $this->toVLQSigned($aValue); + do + { + $digit = $vlq & $this->mask; + $vlq = $this->zeroFill($vlq, $this->shift); + if($vlq > 0){ + $digit |= $this->continuationBit; + } + $encoded .= $this->base64Encode($digit); + } while($vlq > 0); + + return $encoded; + } + + /** + * Return the value decoded from base 64 VLQ. + * + * @param string $encoded The encoded value to decode + * @return integer The decoded value + */ + public function decode($encoded){ + $vlq = 0; + $i = 0; + do + { + $digit = $this->base64Decode($encoded[$i]); + $vlq |= ($digit & $this->mask) << ($i * $this->shift); + $i++; + } while($digit & $this->continuationBit); + + return $this->fromVLQSigned($vlq); + } + + /** + * Right shift with zero fill. + * + * @param integer $a number to shift + * @param integer $b number of bits to shift + * @return integer + */ + public function zeroFill($a, $b){ + return ($a >= 0) ? ($a >> $b) : ($a >> $b) & (PHP_INT_MAX >> ($b - 1)); + } + + /** + * Encode single 6-bit digit as base64. + * + * @param integer $number + * @return string + * @throws Exception If the number is invalid + */ + public function base64Encode($number){ + if($number < 0 || $number > 63){ + throw new Exception(sprintf('Invalid number "%s" given. Must be between 0 and 63.', $number)); + } + return $this->intToCharMap[$number]; + } + + /** + * Decode single 6-bit digit from base64 + * + * @param string $char + * @return number + * @throws Exception If the number is invalid + */ + public function base64Decode($char){ + if(!array_key_exists($char, $this->charToIntMap)){ + throw new Exception(sprintf('Invalid base 64 digit "%s" given.', $char)); + } + return $this->charToIntMap[$char]; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/SourceMap/Generator.php b/vendor/oyejorge/less.php/lib/Less/SourceMap/Generator.php new file mode 100644 index 00000000..ff73af06 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/SourceMap/Generator.php @@ -0,0 +1,365 @@ + '', + + // an optional name of the generated code that this source map is associated with. + 'sourceMapFilename' => null, + + // url of the map + 'sourceMapURL' => null, + + // absolute path to a file to write the map to + 'sourceMapWriteTo' => null, + + // output source contents? + 'outputSourceFiles' => false, + + // base path for filename normalization + 'sourceMapRootpath' => '', + + // base path for filename normalization + 'sourceMapBasepath' => '' + ); + + /** + * The base64 VLQ encoder + * + * @var Less_SourceMap_Base64VLQ + */ + protected $encoder; + + /** + * Array of mappings + * + * @var array + */ + protected $mappings = array(); + + /** + * The root node + * + * @var Less_Tree_Ruleset + */ + protected $root; + + /** + * Array of contents map + * + * @var array + */ + protected $contentsMap = array(); + + /** + * File to content map + * + * @var array + */ + protected $sources = array(); + protected $source_keys = array(); + + /** + * Constructor + * + * @param Less_Tree_Ruleset $root The root node + * @param array $options Array of options + */ + public function __construct(Less_Tree_Ruleset $root, $contentsMap, $options = array()){ + $this->root = $root; + $this->contentsMap = $contentsMap; + $this->encoder = new Less_SourceMap_Base64VLQ(); + + $this->SetOptions($options); + + $this->options['sourceMapRootpath'] = $this->fixWindowsPath($this->options['sourceMapRootpath'], true); + $this->options['sourceMapBasepath'] = $this->fixWindowsPath($this->options['sourceMapBasepath'], true); + } + + /** + * Generates the CSS + * + * @return string + */ + public function generateCSS(){ + $output = new Less_Output_Mapped($this->contentsMap, $this); + + // catch the output + $this->root->genCSS($output); + + + $sourceMapUrl = $this->getOption('sourceMapURL'); + $sourceMapFilename = $this->getOption('sourceMapFilename'); + $sourceMapContent = $this->generateJson(); + $sourceMapWriteTo = $this->getOption('sourceMapWriteTo'); + + if( !$sourceMapUrl && $sourceMapFilename ){ + $sourceMapUrl = $this->normalizeFilename($sourceMapFilename); + } + + // write map to a file + if( $sourceMapWriteTo ){ + $this->saveMap($sourceMapWriteTo, $sourceMapContent); + } + + // inline the map + if( !$sourceMapUrl ){ + $sourceMapUrl = sprintf('data:application/json,%s', Less_Functions::encodeURIComponent($sourceMapContent)); + } + + if( $sourceMapUrl ){ + $output->add( sprintf('/*# sourceMappingURL=%s */', $sourceMapUrl) ); + } + + return $output->toString(); + } + + /** + * Saves the source map to a file + * + * @param string $file The absolute path to a file + * @param string $content The content to write + * @throws Exception If the file could not be saved + */ + protected function saveMap($file, $content){ + $dir = dirname($file); + // directory does not exist + if( !is_dir($dir) ){ + // FIXME: create the dir automatically? + throw new Exception(sprintf('The directory "%s" does not exist. Cannot save the source map.', $dir)); + } + // FIXME: proper saving, with dir write check! + if(file_put_contents($file, $content) === false){ + throw new Exception(sprintf('Cannot save the source map to "%s"', $file)); + } + return true; + } + + /** + * Normalizes the filename + * + * @param string $filename + * @return string + */ + protected function normalizeFilename($filename){ + + $filename = $this->fixWindowsPath($filename); + + $rootpath = $this->getOption('sourceMapRootpath'); + $basePath = $this->getOption('sourceMapBasepath'); + + // "Trim" the 'sourceMapBasepath' from the output filename. + if (strpos($filename, $basePath) === 0) { + $filename = substr($filename, strlen($basePath)); + } + + // Remove extra leading path separators. + if(strpos($filename, '\\') === 0 || strpos($filename, '/') === 0){ + $filename = substr($filename, 1); + } + + return $rootpath . $filename; + } + + /** + * Adds a mapping + * + * @param integer $generatedLine The line number in generated file + * @param integer $generatedColumn The column number in generated file + * @param integer $originalLine The line number in original file + * @param integer $originalColumn The column number in original file + * @param string $sourceFile The original source file + */ + public function addMapping($generatedLine, $generatedColumn, $originalLine, $originalColumn, $fileInfo ){ + + $this->mappings[] = array( + 'generated_line' => $generatedLine, + 'generated_column' => $generatedColumn, + 'original_line' => $originalLine, + 'original_column' => $originalColumn, + 'source_file' => $fileInfo['currentUri'] + ); + + $this->sources[$fileInfo['currentUri']] = $fileInfo['filename']; + } + + + /** + * Generates the JSON source map + * + * @return string + * @see https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit# + */ + protected function generateJson(){ + + $sourceMap = array(); + $mappings = $this->generateMappings(); + + // File version (always the first entry in the object) and must be a positive integer. + $sourceMap['version'] = self::VERSION; + + + // An optional name of the generated code that this source map is associated with. + $file = $this->getOption('sourceMapFilename'); + if( $file ){ + $sourceMap['file'] = $file; + } + + + // An optional source root, useful for relocating source files on a server or removing repeated values in the 'sources' entry. This value is prepended to the individual entries in the 'source' field. + $root = $this->getOption('sourceRoot'); + if( $root ){ + $sourceMap['sourceRoot'] = $root; + } + + + // A list of original sources used by the 'mappings' entry. + $sourceMap['sources'] = array(); + foreach($this->sources as $source_uri => $source_filename){ + $sourceMap['sources'][] = $this->normalizeFilename($source_filename); + } + + + // A list of symbol names used by the 'mappings' entry. + $sourceMap['names'] = array(); + + // A string with the encoded mapping data. + $sourceMap['mappings'] = $mappings; + + if( $this->getOption('outputSourceFiles') ){ + // An optional list of source content, useful when the 'source' can't be hosted. + // The contents are listed in the same order as the sources above. + // 'null' may be used if some original sources should be retrieved by name. + $sourceMap['sourcesContent'] = $this->getSourcesContent(); + } + + // less.js compat fixes + if( count($sourceMap['sources']) && empty($sourceMap['sourceRoot']) ){ + unset($sourceMap['sourceRoot']); + } + + return json_encode($sourceMap); + } + + /** + * Returns the sources contents + * + * @return array|null + */ + protected function getSourcesContent(){ + if(empty($this->sources)){ + return; + } + $content = array(); + foreach($this->sources as $sourceFile){ + $content[] = file_get_contents($sourceFile); + } + return $content; + } + + /** + * Generates the mappings string + * + * @return string + */ + public function generateMappings(){ + + if( !count($this->mappings) ){ + return ''; + } + + $this->source_keys = array_flip(array_keys($this->sources)); + + + // group mappings by generated line number. + $groupedMap = $groupedMapEncoded = array(); + foreach($this->mappings as $m){ + $groupedMap[$m['generated_line']][] = $m; + } + ksort($groupedMap); + + $lastGeneratedLine = $lastOriginalIndex = $lastOriginalLine = $lastOriginalColumn = 0; + + foreach($groupedMap as $lineNumber => $line_map){ + while(++$lastGeneratedLine < $lineNumber){ + $groupedMapEncoded[] = ';'; + } + + $lineMapEncoded = array(); + $lastGeneratedColumn = 0; + + foreach($line_map as $m){ + $mapEncoded = $this->encoder->encode($m['generated_column'] - $lastGeneratedColumn); + $lastGeneratedColumn = $m['generated_column']; + + // find the index + if( $m['source_file'] ){ + $index = $this->findFileIndex($m['source_file']); + if( $index !== false ){ + $mapEncoded .= $this->encoder->encode($index - $lastOriginalIndex); + $lastOriginalIndex = $index; + + // lines are stored 0-based in SourceMap spec version 3 + $mapEncoded .= $this->encoder->encode($m['original_line'] - 1 - $lastOriginalLine); + $lastOriginalLine = $m['original_line'] - 1; + + $mapEncoded .= $this->encoder->encode($m['original_column'] - $lastOriginalColumn); + $lastOriginalColumn = $m['original_column']; + } + } + + $lineMapEncoded[] = $mapEncoded; + } + + $groupedMapEncoded[] = implode(',', $lineMapEncoded) . ';'; + } + + return rtrim(implode($groupedMapEncoded), ';'); + } + + /** + * Finds the index for the filename + * + * @param string $filename + * @return integer|false + */ + protected function findFileIndex($filename){ + return $this->source_keys[$filename]; + } + + /** + * fix windows paths + * @param string $path + * @return string + */ + public function fixWindowsPath($path, $addEndSlash = false){ + $slash = ($addEndSlash) ? '/' : ''; + if( !empty($path) ){ + $path = str_replace('\\', '/', $path); + $path = rtrim($path,'/') . $slash; + } + + return $path; + } + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Tree.php b/vendor/oyejorge/less.php/lib/Less/Tree.php new file mode 100644 index 00000000..0de1b407 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree.php @@ -0,0 +1,90 @@ +genCSS($output); + return $output->toString(); + } + + + /** + * Generate CSS by adding it to the output object + * + * @param Less_Output $output The output + * @return void + */ + public function genCSS($output){} + + + /** + * @param Less_Tree_Ruleset[] $rules + */ + public static function outputRuleset( $output, $rules ){ + + $ruleCnt = count($rules); + Less_Environment::$tabLevel++; + + + // Compressed + if( Less_Parser::$options['compress'] ){ + $output->add('{'); + for( $i = 0; $i < $ruleCnt; $i++ ){ + $rules[$i]->genCSS( $output ); + } + + $output->add( '}' ); + Less_Environment::$tabLevel--; + return; + } + + + // Non-compressed + $tabSetStr = "\n".str_repeat( ' ' , Less_Environment::$tabLevel-1 ); + $tabRuleStr = $tabSetStr.' '; + + $output->add( " {" ); + for($i = 0; $i < $ruleCnt; $i++ ){ + $output->add( $tabRuleStr ); + $rules[$i]->genCSS( $output ); + } + Less_Environment::$tabLevel--; + $output->add( $tabSetStr.'}' ); + + } + + public function accept($visitor){} + + + public static function ReferencedArray($rules){ + foreach($rules as $rule){ + if( method_exists($rule, 'markReferenced') ){ + $rule->markReferenced(); + } + } + } + + + /** + * Requires php 5.3+ + */ + public static function __set_state($args){ + + $class = get_called_class(); + $obj = new $class(null,null,null,null); + foreach($args as $key => $val){ + $obj->$key = $val; + } + return $obj; + } + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Alpha.php b/vendor/oyejorge/less.php/lib/Less/Tree/Alpha.php new file mode 100644 index 00000000..935377da --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Alpha.php @@ -0,0 +1,51 @@ +value = $val; + } + + //function accept( $visitor ){ + // $this->value = $visitor->visit( $this->value ); + //} + + public function compile($env){ + + if( is_object($this->value) ){ + $this->value = $this->value->compile($env); + } + + return $this; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + $output->add( "alpha(opacity=" ); + + if( is_string($this->value) ){ + $output->add( $this->value ); + }else{ + $this->value->genCSS( $output); + } + + $output->add( ')' ); + } + + public function toCSS(){ + return "alpha(opacity=" . (is_string($this->value) ? $this->value : $this->value->toCSS()) . ")"; + } + + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Anonymous.php b/vendor/oyejorge/less.php/lib/Less/Tree/Anonymous.php new file mode 100644 index 00000000..8889dc0f --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Anonymous.php @@ -0,0 +1,58 @@ +value = $value; + $this->index = $index; + $this->mapLines = $mapLines; + $this->currentFileInfo = $currentFileInfo; + } + + public function compile(){ + return new Less_Tree_Anonymous($this->value, $this->index, $this->currentFileInfo, $this->mapLines); + } + + public function compare($x){ + if( !is_object($x) ){ + return -1; + } + + $left = $this->toCSS(); + $right = $x->toCSS(); + + if( $left === $right ){ + return 0; + } + + return $left < $right ? -1 : 1; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( $this->value, $this->currentFileInfo, $this->index, $this->mapLines ); + } + + public function toCSS(){ + return $this->value; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Assignment.php b/vendor/oyejorge/less.php/lib/Less/Tree/Assignment.php new file mode 100644 index 00000000..23800064 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Assignment.php @@ -0,0 +1,39 @@ +key = $key; + $this->value = $val; + } + + public function accept( $visitor ){ + $this->value = $visitor->visitObj( $this->value ); + } + + public function compile($env) { + return new Less_Tree_Assignment( $this->key, $this->value->compile($env)); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( $this->key . '=' ); + $this->value->genCSS( $output ); + } + + public function toCss(){ + return $this->key . '=' . $this->value->toCSS(); + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Attribute.php b/vendor/oyejorge/less.php/lib/Less/Tree/Attribute.php new file mode 100644 index 00000000..32b8900d --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Attribute.php @@ -0,0 +1,54 @@ +key = $key; + $this->op = $op; + $this->value = $value; + } + + public function compile($env){ + + $key_obj = is_object($this->key); + $val_obj = is_object($this->value); + + if( !$key_obj && !$val_obj ){ + return $this; + } + + return new Less_Tree_Attribute( + $key_obj ? $this->key->compile($env) : $this->key , + $this->op, + $val_obj ? $this->value->compile($env) : $this->value); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( $this->toCSS() ); + } + + public function toCSS(){ + $value = $this->key; + + if( $this->op ){ + $value .= $this->op; + $value .= (is_object($this->value) ? $this->value->toCSS() : $this->value); + } + + return '[' . $value . ']'; + } +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Call.php b/vendor/oyejorge/less.php/lib/Less/Tree/Call.php new file mode 100644 index 00000000..1560351e --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Call.php @@ -0,0 +1,121 @@ +name = $name; + $this->args = $args; + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + } + + public function accept( $visitor ){ + $this->args = $visitor->visitArray( $this->args ); + } + + // + // When evaluating a function call, + // we either find the function in `tree.functions` [1], + // in which case we call it, passing the evaluated arguments, + // or we simply print it out as it appeared originally [2]. + // + // The *functions.js* file contains the built-in functions. + // + // The reason why we evaluate the arguments, is in the case where + // we try to pass a variable to a function, like: `saturate(@color)`. + // The function should receive the value, not the variable. + // + public function compile($env=null){ + $args = array(); + foreach($this->args as $a){ + $args[] = $a->compile($env); + } + + $nameLC = strtolower($this->name); + switch($nameLC){ + case '%': + $nameLC = '_percent'; + break; + + case 'get-unit': + $nameLC = 'getunit'; + break; + + case 'data-uri': + $nameLC = 'datauri'; + break; + + case 'svg-gradient': + $nameLC = 'svggradient'; + break; + } + + $result = null; + if( $nameLC === 'default' ){ + $result = Less_Tree_DefaultFunc::compile(); + + }else{ + + if( method_exists('Less_Functions',$nameLC) ){ // 1. + try { + + $func = new Less_Functions($env, $this->currentFileInfo); + $result = call_user_func_array( array($func,$nameLC),$args); + + } catch (Exception $e) { + throw new Less_Exception_Compiler('error evaluating function `' . $this->name . '` '.$e->getMessage().' index: '. $this->index); + } + } elseif( isset( $env->functions[$nameLC] ) && is_callable( $env->functions[$nameLC] ) ) { + try { + $result = call_user_func_array( $env->functions[$nameLC], $args ); + } catch (Exception $e) { + throw new Less_Exception_Compiler('error evaluating function `' . $this->name . '` '.$e->getMessage().' index: '. $this->index); + } + } + } + + if( $result !== null ){ + return $result; + } + + + return new Less_Tree_Call( $this->name, $args, $this->index, $this->currentFileInfo ); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + $output->add( $this->name . '(', $this->currentFileInfo, $this->index ); + $args_len = count($this->args); + for($i = 0; $i < $args_len; $i++ ){ + $this->args[$i]->genCSS( $output ); + if( $i + 1 < $args_len ){ + $output->add( ', ' ); + } + } + + $output->add( ')' ); + } + + + //public function toCSS(){ + // return $this->compile()->toCSS(); + //} + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Color.php b/vendor/oyejorge/less.php/lib/Less/Tree/Color.php new file mode 100644 index 00000000..77af07a6 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Color.php @@ -0,0 +1,230 @@ +rgb = $rgb; + $this->alpha = $a; + $this->isTransparentKeyword = true; + return; + } + + $this->rgb = array(); + if( is_array($rgb) ){ + $this->rgb = $rgb; + }else if( strlen($rgb) == 6 ){ + foreach(str_split($rgb, 2) as $c){ + $this->rgb[] = hexdec($c); + } + }else{ + foreach(str_split($rgb, 1) as $c){ + $this->rgb[] = hexdec($c.$c); + } + } + $this->alpha = is_numeric($a) ? $a : 1; + } + + public function compile(){ + return $this; + } + + public function luma(){ + $r = $this->rgb[0] / 255; + $g = $this->rgb[1] / 255; + $b = $this->rgb[2] / 255; + + $r = ($r <= 0.03928) ? $r / 12.92 : pow((($r + 0.055) / 1.055), 2.4); + $g = ($g <= 0.03928) ? $g / 12.92 : pow((($g + 0.055) / 1.055), 2.4); + $b = ($b <= 0.03928) ? $b / 12.92 : pow((($b + 0.055) / 1.055), 2.4); + + return 0.2126 * $r + 0.7152 * $g + 0.0722 * $b; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( $this->toCSS() ); + } + + public function toCSS( $doNotCompress = false ){ + $compress = Less_Parser::$options['compress'] && !$doNotCompress; + $alpha = Less_Functions::fround( $this->alpha ); + + + // + // If we have some transparency, the only way to represent it + // is via `rgba`. Otherwise, we use the hex representation, + // which has better compatibility with older browsers. + // Values are capped between `0` and `255`, rounded and zero-padded. + // + if( $alpha < 1 ){ + if( ( $alpha === 0 || $alpha === 0.0 ) && isset($this->isTransparentKeyword) && $this->isTransparentKeyword ){ + return 'transparent'; + } + + $values = array(); + foreach($this->rgb as $c){ + $values[] = Less_Functions::clamp( round($c), 255); + } + $values[] = $alpha; + + $glue = ($compress ? ',' : ', '); + return "rgba(" . implode($glue, $values) . ")"; + }else{ + + $color = $this->toRGB(); + + if( $compress ){ + + // Convert color to short format + if( $color[1] === $color[2] && $color[3] === $color[4] && $color[5] === $color[6]) { + $color = '#'.$color[1] . $color[3] . $color[5]; + } + } + + return $color; + } + } + + // + // Operations have to be done per-channel, if not, + // channels will spill onto each other. Once we have + // our result, in the form of an integer triplet, + // we create a new Color node to hold the result. + // + + /** + * @param string $op + */ + public function operate( $op, $other) { + $rgb = array(); + $alpha = $this->alpha * (1 - $other->alpha) + $other->alpha; + for ($c = 0; $c < 3; $c++) { + $rgb[$c] = Less_Functions::operate( $op, $this->rgb[$c], $other->rgb[$c]); + } + return new Less_Tree_Color($rgb, $alpha); + } + + public function toRGB(){ + return $this->toHex($this->rgb); + } + + public function toHSL(){ + $r = $this->rgb[0] / 255; + $g = $this->rgb[1] / 255; + $b = $this->rgb[2] / 255; + $a = $this->alpha; + + $max = max($r, $g, $b); + $min = min($r, $g, $b); + $l = ($max + $min) / 2; + $d = $max - $min; + + $h = $s = 0; + if( $max !== $min ){ + $s = $l > 0.5 ? $d / (2 - $max - $min) : $d / ($max + $min); + + switch ($max) { + case $r: $h = ($g - $b) / $d + ($g < $b ? 6 : 0); break; + case $g: $h = ($b - $r) / $d + 2; break; + case $b: $h = ($r - $g) / $d + 4; break; + } + $h /= 6; + } + return array('h' => $h * 360, 's' => $s, 'l' => $l, 'a' => $a ); + } + + //Adapted from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript + public function toHSV() { + $r = $this->rgb[0] / 255; + $g = $this->rgb[1] / 255; + $b = $this->rgb[2] / 255; + $a = $this->alpha; + + $max = max($r, $g, $b); + $min = min($r, $g, $b); + + $v = $max; + + $d = $max - $min; + if ($max === 0) { + $s = 0; + } else { + $s = $d / $max; + } + + $h = 0; + if( $max !== $min ){ + switch($max){ + case $r: $h = ($g - $b) / $d + ($g < $b ? 6 : 0); break; + case $g: $h = ($b - $r) / $d + 2; break; + case $b: $h = ($r - $g) / $d + 4; break; + } + $h /= 6; + } + return array('h'=> $h * 360, 's'=> $s, 'v'=> $v, 'a' => $a ); + } + + public function toARGB(){ + $argb = array_merge( (array) Less_Parser::round($this->alpha * 255), $this->rgb); + return $this->toHex( $argb ); + } + + public function compare($x){ + + if( !property_exists( $x, 'rgb' ) ){ + return -1; + } + + + return ($x->rgb[0] === $this->rgb[0] && + $x->rgb[1] === $this->rgb[1] && + $x->rgb[2] === $this->rgb[2] && + $x->alpha === $this->alpha) ? 0 : -1; + } + + public function toHex( $v ){ + + $ret = '#'; + foreach($v as $c){ + $c = Less_Functions::clamp( Less_Parser::round($c), 255); + if( $c < 16 ){ + $ret .= '0'; + } + $ret .= dechex($c); + } + + return $ret; + } + + + /** + * @param string $keyword + */ + public static function fromKeyword( $keyword ){ + $keyword = strtolower($keyword); + + if( Less_Colors::hasOwnProperty($keyword) ){ + // detect named color + return new Less_Tree_Color(substr(Less_Colors::color($keyword), 1)); + } + + if( $keyword === 'transparent' ){ + return new Less_Tree_Color( array(0, 0, 0), 0, true); + } + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Comment.php b/vendor/oyejorge/less.php/lib/Less/Tree/Comment.php new file mode 100644 index 00000000..7261284a --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Comment.php @@ -0,0 +1,51 @@ +value = $value; + $this->silent = !! $silent; + $this->currentFileInfo = $currentFileInfo; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + //if( $this->debugInfo ){ + //$output->add( tree.debugInfo($env, $this), $this->currentFileInfo, $this->index); + //} + $output->add( trim($this->value) );//TODO shouldn't need to trim, we shouldn't grab the \n + } + + public function toCSS(){ + return Less_Parser::$options['compress'] ? '' : $this->value; + } + + public function isSilent(){ + $isReference = ($this->currentFileInfo && isset($this->currentFileInfo['reference']) && (!isset($this->isReferenced) || !$this->isReferenced) ); + $isCompressed = Less_Parser::$options['compress'] && !preg_match('/^\/\*!/', $this->value); + return $this->silent || $isReference || $isCompressed; + } + + public function compile(){ + return $this; + } + + public function markReferenced(){ + $this->isReferenced = true; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Condition.php b/vendor/oyejorge/less.php/lib/Less/Tree/Condition.php new file mode 100644 index 00000000..929d33be --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Condition.php @@ -0,0 +1,72 @@ +op = trim($op); + $this->lvalue = $l; + $this->rvalue = $r; + $this->index = $i; + $this->negate = $negate; + } + + public function accept($visitor){ + $this->lvalue = $visitor->visitObj( $this->lvalue ); + $this->rvalue = $visitor->visitObj( $this->rvalue ); + } + + public function compile($env) { + $a = $this->lvalue->compile($env); + $b = $this->rvalue->compile($env); + + switch( $this->op ){ + case 'and': + $result = $a && $b; + break; + + case 'or': + $result = $a || $b; + break; + + default: + if( Less_Parser::is_method($a, 'compare') ){ + $result = $a->compare($b); + }elseif( Less_Parser::is_method($b, 'compare') ){ + $result = $b->compare($a); + }else{ + throw new Less_Exception_Compiler('Unable to perform comparison', null, $this->index); + } + + switch ($result) { + case -1: + $result = $this->op === '<' || $this->op === '=<' || $this->op === '<='; + break; + + case 0: + $result = $this->op === '=' || $this->op === '>=' || $this->op === '=<' || $this->op === '<='; + break; + + case 1: + $result = $this->op === '>' || $this->op === '>='; + break; + } + break; + } + + return $this->negate ? !$result : $result; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/DefaultFunc.php b/vendor/oyejorge/less.php/lib/Less/Tree/DefaultFunc.php new file mode 100644 index 00000000..c2dbf749 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/DefaultFunc.php @@ -0,0 +1,34 @@ +ruleset = $ruleset; + $this->frames = $frames; + } + + public function accept($visitor) { + $this->ruleset = $visitor->visitObj($this->ruleset); + } + + public function compile($env){ + if( $this->frames ){ + $frames = $this->frames; + }else{ + $frames = $env->frames; + } + return new Less_Tree_DetachedRuleset($this->ruleset, $frames); + } + + public function callEval($env) { + if( $this->frames ){ + return $this->ruleset->compile( $env->copyEvalEnv( array_merge($this->frames,$env->frames) ) ); + } + return $this->ruleset->compile( $env ); + } +} + diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Dimension.php b/vendor/oyejorge/less.php/lib/Less/Tree/Dimension.php new file mode 100644 index 00000000..b693f57d --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Dimension.php @@ -0,0 +1,201 @@ +value = floatval($value); + + if( $unit && ($unit instanceof Less_Tree_Unit) ){ + $this->unit = $unit; + }elseif( $unit ){ + $this->unit = new Less_Tree_Unit( array($unit) ); + }else{ + $this->unit = new Less_Tree_Unit( ); + } + } + + public function accept( $visitor ){ + $this->unit = $visitor->visitObj( $this->unit ); + } + + public function compile(){ + return $this; + } + + public function toColor() { + return new Less_Tree_Color(array($this->value, $this->value, $this->value)); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + if( Less_Parser::$options['strictUnits'] && !$this->unit->isSingular() ){ + throw new Less_Exception_Compiler("Multiple units in dimension. Correct the units or use the unit function. Bad unit: ".$this->unit->toString()); + } + + $value = Less_Functions::fround( $this->value ); + $strValue = (string)$value; + + if( $value !== 0 && $value < 0.000001 && $value > -0.000001 ){ + // would be output 1e-6 etc. + $strValue = number_format($strValue,10); + $strValue = preg_replace('/\.?0+$/','', $strValue); + } + + if( Less_Parser::$options['compress'] ){ + // Zero values doesn't need a unit + if( $value === 0 && $this->unit->isLength() ){ + $output->add( $strValue ); + return $strValue; + } + + // Float values doesn't need a leading zero + if( $value > 0 && $value < 1 && $strValue[0] === '0' ){ + $strValue = substr($strValue,1); + } + } + + $output->add( $strValue ); + $this->unit->genCSS( $output ); + } + + public function __toString(){ + return $this->toCSS(); + } + + // In an operation between two Dimensions, + // we default to the first Dimension's unit, + // so `1px + 2em` will yield `3px`. + + /** + * @param string $op + */ + public function operate( $op, $other){ + + $value = Less_Functions::operate( $op, $this->value, $other->value); + $unit = clone $this->unit; + + if( $op === '+' || $op === '-' ){ + + if( !$unit->numerator && !$unit->denominator ){ + $unit->numerator = $other->unit->numerator; + $unit->denominator = $other->unit->denominator; + }elseif( !$other->unit->numerator && !$other->unit->denominator ){ + // do nothing + }else{ + $other = $other->convertTo( $this->unit->usedUnits()); + + if( Less_Parser::$options['strictUnits'] && $other->unit->toString() !== $unit->toCSS() ){ + throw new Less_Exception_Compiler("Incompatible units. Change the units or use the unit function. Bad units: '".$unit->toString() . "' and ".$other->unit->toString()+"'."); + } + + $value = Less_Functions::operate( $op, $this->value, $other->value); + } + }elseif( $op === '*' ){ + $unit->numerator = array_merge($unit->numerator, $other->unit->numerator); + $unit->denominator = array_merge($unit->denominator, $other->unit->denominator); + sort($unit->numerator); + sort($unit->denominator); + $unit->cancel(); + }elseif( $op === '/' ){ + $unit->numerator = array_merge($unit->numerator, $other->unit->denominator); + $unit->denominator = array_merge($unit->denominator, $other->unit->numerator); + sort($unit->numerator); + sort($unit->denominator); + $unit->cancel(); + } + return new Less_Tree_Dimension( $value, $unit); + } + + public function compare($other) { + if ($other instanceof Less_Tree_Dimension) { + + if( $this->unit->isEmpty() || $other->unit->isEmpty() ){ + $a = $this; + $b = $other; + } else { + $a = $this->unify(); + $b = $other->unify(); + if( $a->unit->compare($b->unit) !== 0 ){ + return -1; + } + } + $aValue = $a->value; + $bValue = $b->value; + + if ($bValue > $aValue) { + return -1; + } elseif ($bValue < $aValue) { + return 1; + } else { + return 0; + } + } else { + return -1; + } + } + + public function unify() { + return $this->convertTo(array('length'=> 'px', 'duration'=> 's', 'angle' => 'rad' )); + } + + public function convertTo($conversions) { + $value = $this->value; + $unit = clone $this->unit; + + if( is_string($conversions) ){ + $derivedConversions = array(); + foreach( Less_Tree_UnitConversions::$groups as $i ){ + if( isset(Less_Tree_UnitConversions::${$i}[$conversions]) ){ + $derivedConversions = array( $i => $conversions); + } + } + $conversions = $derivedConversions; + } + + + foreach($conversions as $groupName => $targetUnit){ + $group = Less_Tree_UnitConversions::${$groupName}; + + //numerator + foreach($unit->numerator as $i => $atomicUnit){ + $atomicUnit = $unit->numerator[$i]; + if( !isset($group[$atomicUnit]) ){ + continue; + } + + $value = $value * ($group[$atomicUnit] / $group[$targetUnit]); + + $unit->numerator[$i] = $targetUnit; + } + + //denominator + foreach($unit->denominator as $i => $atomicUnit){ + $atomicUnit = $unit->denominator[$i]; + if( !isset($group[$atomicUnit]) ){ + continue; + } + + $value = $value / ($group[$atomicUnit] / $group[$targetUnit]); + + $unit->denominator[$i] = $targetUnit; + } + } + + $unit->cancel(); + + return new Less_Tree_Dimension( $value, $unit); + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Directive.php b/vendor/oyejorge/less.php/lib/Less/Tree/Directive.php new file mode 100644 index 00000000..04a1e467 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Directive.php @@ -0,0 +1,100 @@ +name = $name; + $this->value = $value; + if( $rules ){ + $this->rules = $rules; + $this->rules->allowImports = true; + } + + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + $this->debugInfo = $debugInfo; + } + + + public function accept( $visitor ){ + if( $this->rules ){ + $this->rules = $visitor->visitObj( $this->rules ); + } + if( $this->value ){ + $this->value = $visitor->visitObj( $this->value ); + } + } + + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $value = $this->value; + $rules = $this->rules; + $output->add( $this->name, $this->currentFileInfo, $this->index ); + if( $this->value ){ + $output->add(' '); + $this->value->genCSS($output); + } + if( $this->rules ){ + Less_Tree::outputRuleset( $output, array($this->rules)); + } else { + $output->add(';'); + } + } + + public function compile($env){ + + $value = $this->value; + $rules = $this->rules; + if( $value ){ + $value = $value->compile($env); + } + + if( $rules ){ + $rules = $rules->compile($env); + $rules->root = true; + } + + return new Less_Tree_Directive( $this->name, $value, $rules, $this->index, $this->currentFileInfo, $this->debugInfo ); + } + + + public function variable($name){ + if( $this->rules ){ + return $this->rules->variable($name); + } + } + + public function find($selector){ + if( $this->rules ){ + return $this->rules->find($selector, $this); + } + } + + //rulesets: function () { if (this.rules) return tree.Ruleset.prototype.rulesets.apply(this.rules); }, + + public function markReferenced(){ + $this->isReferenced = true; + if( $this->rules ){ + Less_Tree::ReferencedArray($this->rules->rules); + } + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Element.php b/vendor/oyejorge/less.php/lib/Less/Tree/Element.php new file mode 100644 index 00000000..9cea5e43 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Element.php @@ -0,0 +1,75 @@ +value = $value; + $this->value_is_object = is_object($value); + + if( $combinator ){ + $this->combinator = $combinator; + } + + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + } + + public function accept( $visitor ){ + if( $this->value_is_object ){ //object or string + $this->value = $visitor->visitObj( $this->value ); + } + } + + public function compile($env){ + + if( Less_Environment::$mixin_stack ){ + return new Less_Tree_Element($this->combinator, ($this->value_is_object ? $this->value->compile($env) : $this->value), $this->index, $this->currentFileInfo ); + } + + if( $this->value_is_object ){ + $this->value = $this->value->compile($env); + } + + return $this; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( $this->toCSS(), $this->currentFileInfo, $this->index ); + } + + public function toCSS(){ + + if( $this->value_is_object ){ + $value = $this->value->toCSS(); + }else{ + $value = $this->value; + } + + + if( $value === '' && $this->combinator && $this->combinator === '&' ){ + return ''; + } + + + return Less_Environment::$_outputMap[$this->combinator] . $value; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Expression.php b/vendor/oyejorge/less.php/lib/Less/Tree/Expression.php new file mode 100644 index 00000000..d834354a --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Expression.php @@ -0,0 +1,97 @@ +value = $value; + $this->parens = $parens; + } + + public function accept( $visitor ){ + $this->value = $visitor->visitArray( $this->value ); + } + + public function compile($env) { + + $doubleParen = false; + + if( $this->parens && !$this->parensInOp ){ + Less_Environment::$parensStack++; + } + + $returnValue = null; + if( $this->value ){ + + $count = count($this->value); + + if( $count > 1 ){ + + $ret = array(); + foreach($this->value as $e){ + $ret[] = $e->compile($env); + } + $returnValue = new Less_Tree_Expression($ret); + + }else{ + + if( ($this->value[0] instanceof Less_Tree_Expression) && $this->value[0]->parens && !$this->value[0]->parensInOp ){ + $doubleParen = true; + } + + $returnValue = $this->value[0]->compile($env); + } + + } else { + $returnValue = $this; + } + + if( $this->parens ){ + if( !$this->parensInOp ){ + Less_Environment::$parensStack--; + + }elseif( !Less_Environment::isMathOn() && !$doubleParen ){ + $returnValue = new Less_Tree_Paren($returnValue); + + } + } + return $returnValue; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $val_len = count($this->value); + for( $i = 0; $i < $val_len; $i++ ){ + $this->value[$i]->genCSS( $output ); + if( $i + 1 < $val_len ){ + $output->add( ' ' ); + } + } + } + + public function throwAwayComments() { + + if( is_array($this->value) ){ + $new_value = array(); + foreach($this->value as $v){ + if( $v instanceof Less_Tree_Comment ){ + continue; + } + $new_value[] = $v; + } + $this->value = $new_value; + } + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Extend.php b/vendor/oyejorge/less.php/lib/Less/Tree/Extend.php new file mode 100644 index 00000000..8f21e939 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Extend.php @@ -0,0 +1,77 @@ +selector = $selector; + $this->option = $option; + $this->index = $index; + + switch($option){ + case "all": + $this->allowBefore = true; + $this->allowAfter = true; + break; + default: + $this->allowBefore = false; + $this->allowAfter = false; + break; + } + + $this->object_id = $i++; + $this->parent_ids = array($this->object_id); + } + + public function accept( $visitor ){ + $this->selector = $visitor->visitObj( $this->selector ); + } + + public function compile( $env ){ + Less_Parser::$has_extends = true; + $this->selector = $this->selector->compile($env); + return $this; + //return new Less_Tree_Extend( $this->selector->compile($env), $this->option, $this->index); + } + + public function findSelfSelectors( $selectors ){ + $selfElements = array(); + + + for( $i = 0, $selectors_len = count($selectors); $i < $selectors_len; $i++ ){ + $selectorElements = $selectors[$i]->elements; + // duplicate the logic in genCSS function inside the selector node. + // future TODO - move both logics into the selector joiner visitor + if( $i && $selectorElements && $selectorElements[0]->combinator === "") { + $selectorElements[0]->combinator = ' '; + } + $selfElements = array_merge( $selfElements, $selectors[$i]->elements ); + } + + $this->selfSelectors = array(new Less_Tree_Selector($selfElements)); + } + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Import.php b/vendor/oyejorge/less.php/lib/Less/Tree/Import.php new file mode 100644 index 00000000..e327b756 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Import.php @@ -0,0 +1,307 @@ +options = $options; + $this->index = $index; + $this->path = $path; + $this->features = $features; + $this->currentFileInfo = $currentFileInfo; + + if( is_array($options) ){ + $this->options += array('inline'=>false); + + if( isset($this->options['less']) || $this->options['inline'] ){ + $this->css = !isset($this->options['less']) || !$this->options['less'] || $this->options['inline']; + } else { + $pathValue = $this->getPath(); + if( $pathValue && preg_match('/css([\?;].*)?$/',$pathValue) ){ + $this->css = true; + } + } + } + } + +// +// The actual import node doesn't return anything, when converted to CSS. +// The reason is that it's used at the evaluation stage, so that the rules +// it imports can be treated like any other rules. +// +// In `eval`, we make sure all Import nodes get evaluated, recursively, so +// we end up with a flat structure, which can easily be imported in the parent +// ruleset. +// + + public function accept($visitor){ + + if( $this->features ){ + $this->features = $visitor->visitObj($this->features); + } + $this->path = $visitor->visitObj($this->path); + + if( !$this->options['inline'] && $this->root ){ + $this->root = $visitor->visit($this->root); + } + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + if( $this->css ){ + + $output->add( '@import ', $this->currentFileInfo, $this->index ); + + $this->path->genCSS( $output ); + if( $this->features ){ + $output->add( ' ' ); + $this->features->genCSS( $output ); + } + $output->add( ';' ); + } + } + + public function toCSS(){ + $features = $this->features ? ' ' . $this->features->toCSS() : ''; + + if ($this->css) { + return "@import " . $this->path->toCSS() . $features . ";\n"; + } else { + return ""; + } + } + + /** + * @return string + */ + public function getPath(){ + if ($this->path instanceof Less_Tree_Quoted) { + $path = $this->path->value; + $path = ( isset($this->css) || preg_match('/(\.[a-z]*$)|([\?;].*)$/',$path)) ? $path : $path . '.less'; + } else if ($this->path instanceof Less_Tree_URL) { + $path = $this->path->value->value; + }else{ + return null; + } + + //remove query string and fragment + return preg_replace('/[\?#][^\?]*$/','',$path); + } + + public function compileForImport( $env ){ + return new Less_Tree_Import( $this->path->compile($env), $this->features, $this->options, $this->index, $this->currentFileInfo); + } + + public function compilePath($env) { + $path = $this->path->compile($env); + $rootpath = ''; + if( $this->currentFileInfo && $this->currentFileInfo['rootpath'] ){ + $rootpath = $this->currentFileInfo['rootpath']; + } + + + if( !($path instanceof Less_Tree_URL) ){ + if( $rootpath ){ + $pathValue = $path->value; + // Add the base path if the import is relative + if( $pathValue && Less_Environment::isPathRelative($pathValue) ){ + $path->value = $this->currentFileInfo['uri_root'].$pathValue; + } + } + $path->value = Less_Environment::normalizePath($path->value); + } + + + + return $path; + } + + public function compile( $env ){ + + $evald = $this->compileForImport($env); + + //get path & uri + $path_and_uri = null; + if( is_callable(Less_Parser::$options['import_callback']) ){ + $path_and_uri = call_user_func(Less_Parser::$options['import_callback'],$evald); + } + + if( !$path_and_uri ){ + $path_and_uri = $evald->PathAndUri(); + } + + if( $path_and_uri ){ + list($full_path, $uri) = $path_and_uri; + }else{ + $full_path = $uri = $evald->getPath(); + } + + + //import once + if( $evald->skip( $full_path, $env) ){ + return array(); + } + + if( $this->options['inline'] ){ + //todo needs to reference css file not import + //$contents = new Less_Tree_Anonymous($this->root, 0, array('filename'=>$this->importedFilename), true ); + + Less_Parser::AddParsedFile($full_path); + $contents = new Less_Tree_Anonymous( file_get_contents($full_path), 0, array(), true ); + + if( $this->features ){ + return new Less_Tree_Media( array($contents), $this->features->value ); + } + + return array( $contents ); + } + + + // css ? + if( $evald->css ){ + $features = ( $evald->features ? $evald->features->compile($env) : null ); + return new Less_Tree_Import( $this->compilePath( $env), $features, $this->options, $this->index); + } + + + return $this->ParseImport( $full_path, $uri, $env ); + } + + + /** + * Using the import directories, get the full absolute path and uri of the import + * + * @param Less_Tree_Import $evald + */ + public function PathAndUri(){ + + $evald_path = $this->getPath(); + + if( $evald_path ){ + + $import_dirs = array(); + + if( Less_Environment::isPathRelative($evald_path) ){ + //if the path is relative, the file should be in the current directory + $import_dirs[ $this->currentFileInfo['currentDirectory'] ] = $this->currentFileInfo['uri_root']; + + }else{ + //otherwise, the file should be relative to the server root + $import_dirs[ $this->currentFileInfo['entryPath'] ] = $this->currentFileInfo['entryUri']; + + //if the user supplied entryPath isn't the actual root + $import_dirs[ $_SERVER['DOCUMENT_ROOT'] ] = ''; + + } + + // always look in user supplied import directories + $import_dirs = array_merge( $import_dirs, Less_Parser::$options['import_dirs'] ); + + + foreach( $import_dirs as $rootpath => $rooturi){ + if( is_callable($rooturi) ){ + list($path, $uri) = call_user_func($rooturi, $evald_path); + if( is_string($path) ){ + $full_path = $path; + return array( $full_path, $uri ); + } + }elseif( !empty($rootpath) ){ + + + if( $rooturi ){ + if( strpos($evald_path,$rooturi) === 0 ){ + $evald_path = substr( $evald_path, strlen($rooturi) ); + } + } + + $path = rtrim($rootpath,'/\\').'/'.ltrim($evald_path,'/\\'); + + if( file_exists($path) ){ + $full_path = Less_Environment::normalizePath($path); + $uri = Less_Environment::normalizePath(dirname($rooturi.$evald_path)); + return array( $full_path, $uri ); + } elseif( file_exists($path.'.less') ){ + $full_path = Less_Environment::normalizePath($path.'.less'); + $uri = Less_Environment::normalizePath(dirname($rooturi.$evald_path.'.less')); + return array( $full_path, $uri ); + } + } + } + } + } + + + /** + * Parse the import url and return the rules + * + * @return Less_Tree_Media|array + */ + public function ParseImport( $full_path, $uri, $env ){ + + $import_env = clone $env; + if( (isset($this->options['reference']) && $this->options['reference']) || isset($this->currentFileInfo['reference']) ){ + $import_env->currentFileInfo['reference'] = true; + } + + if( (isset($this->options['multiple']) && $this->options['multiple']) ){ + $import_env->importMultiple = true; + } + + $parser = new Less_Parser($import_env); + $root = $parser->parseFile($full_path, $uri, true); + + + $ruleset = new Less_Tree_Ruleset(array(), $root->rules ); + $ruleset->evalImports($import_env); + + return $this->features ? new Less_Tree_Media($ruleset->rules, $this->features->value) : $ruleset->rules; + } + + + /** + * Should the import be skipped? + * + * @return boolean|null + */ + private function Skip($path, $env){ + + $path = Less_Parser::winPath(realpath($path)); + + if( $path && Less_Parser::FileParsed($path) ){ + + if( isset($this->currentFileInfo['reference']) ){ + return true; + } + + return !isset($this->options['multiple']) && !$env->importMultiple; + } + + } +} + diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Javascript.php b/vendor/oyejorge/less.php/lib/Less/Tree/Javascript.php new file mode 100644 index 00000000..1b03183d --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Javascript.php @@ -0,0 +1,30 @@ +escaped = $escaped; + $this->expression = $string; + $this->index = $index; + } + + public function compile(){ + return new Less_Tree_Anonymous('/* Sorry, can not do JavaScript evaluation in PHP... :( */'); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Keyword.php b/vendor/oyejorge/less.php/lib/Less/Tree/Keyword.php new file mode 100644 index 00000000..e1d98c45 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Keyword.php @@ -0,0 +1,44 @@ +value = $value; + } + + public function compile(){ + return $this; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + if( $this->value === '%') { + throw new Less_Exception_Compiler("Invalid % without number"); + } + + $output->add( $this->value ); + } + + public function compare($other) { + if ($other instanceof Less_Tree_Keyword) { + return $other->value === $this->value ? 0 : 1; + } else { + return -1; + } + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Media.php b/vendor/oyejorge/less.php/lib/Less/Tree/Media.php new file mode 100644 index 00000000..f9ee9d42 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Media.php @@ -0,0 +1,179 @@ +index = $index; + $this->currentFileInfo = $currentFileInfo; + + $selectors = $this->emptySelectors(); + + $this->features = new Less_Tree_Value($features); + + $this->rules = array(new Less_Tree_Ruleset($selectors, $value)); + $this->rules[0]->allowImports = true; + } + + public function accept( $visitor ){ + $this->features = $visitor->visitObj($this->features); + $this->rules = $visitor->visitArray($this->rules); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + $output->add( '@media ', $this->currentFileInfo, $this->index ); + $this->features->genCSS( $output ); + Less_Tree::outputRuleset( $output, $this->rules); + + } + + public function compile($env) { + + $media = new Less_Tree_Media(array(), array(), $this->index, $this->currentFileInfo ); + + $strictMathBypass = false; + if( Less_Parser::$options['strictMath'] === false) { + $strictMathBypass = true; + Less_Parser::$options['strictMath'] = true; + } + + $media->features = $this->features->compile($env); + + if( $strictMathBypass ){ + Less_Parser::$options['strictMath'] = false; + } + + $env->mediaPath[] = $media; + $env->mediaBlocks[] = $media; + + array_unshift($env->frames, $this->rules[0]); + $media->rules = array($this->rules[0]->compile($env)); + array_shift($env->frames); + + array_pop($env->mediaPath); + + return !$env->mediaPath ? $media->compileTop($env) : $media->compileNested($env); + } + + public function variable($name) { + return $this->rules[0]->variable($name); + } + + public function find($selector) { + return $this->rules[0]->find($selector, $this); + } + + public function emptySelectors(){ + $el = new Less_Tree_Element('','&', $this->index, $this->currentFileInfo ); + $sels = array( new Less_Tree_Selector(array($el), array(), null, $this->index, $this->currentFileInfo) ); + $sels[0]->mediaEmpty = true; + return $sels; + } + + public function markReferenced(){ + $this->rules[0]->markReferenced(); + $this->isReferenced = true; + Less_Tree::ReferencedArray($this->rules[0]->rules); + } + + // evaltop + public function compileTop($env) { + $result = $this; + + if (count($env->mediaBlocks) > 1) { + $selectors = $this->emptySelectors(); + $result = new Less_Tree_Ruleset($selectors, $env->mediaBlocks); + $result->multiMedia = true; + } + + $env->mediaBlocks = array(); + $env->mediaPath = array(); + + return $result; + } + + public function compileNested($env) { + $path = array_merge($env->mediaPath, array($this)); + + // Extract the media-query conditions separated with `,` (OR). + foreach ($path as $key => $p) { + $value = $p->features instanceof Less_Tree_Value ? $p->features->value : $p->features; + $path[$key] = is_array($value) ? $value : array($value); + } + + // Trace all permutations to generate the resulting media-query. + // + // (a, b and c) with nested (d, e) -> + // a and d + // a and e + // b and c and d + // b and c and e + + $permuted = $this->permute($path); + $expressions = array(); + foreach($permuted as $path){ + + for( $i=0, $len=count($path); $i < $len; $i++){ + $path[$i] = Less_Parser::is_method($path[$i], 'toCSS') ? $path[$i] : new Less_Tree_Anonymous($path[$i]); + } + + for( $i = count($path) - 1; $i > 0; $i-- ){ + array_splice($path, $i, 0, array(new Less_Tree_Anonymous('and'))); + } + + $expressions[] = new Less_Tree_Expression($path); + } + $this->features = new Less_Tree_Value($expressions); + + + + // Fake a tree-node that doesn't output anything. + return new Less_Tree_Ruleset(array(), array()); + } + + public function permute($arr) { + if (!$arr) + return array(); + + if (count($arr) == 1) + return $arr[0]; + + $result = array(); + $rest = $this->permute(array_slice($arr, 1)); + foreach ($rest as $r) { + foreach ($arr[0] as $a) { + $result[] = array_merge( + is_array($a) ? $a : array($a), + is_array($r) ? $r : array($r) + ); + } + } + + return $result; + } + + public function bubbleSelectors($selectors) { + + if( !$selectors) return; + + $this->rules = array(new Less_Tree_Ruleset( $selectors, array($this->rules[0]))); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Call.php b/vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Call.php new file mode 100644 index 00000000..d7e2a137 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Call.php @@ -0,0 +1,202 @@ +selector = new Less_Tree_Selector($elements); + $this->arguments = $args; + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + $this->important = $important; + } + + //function accept($visitor){ + // $this->selector = $visitor->visit($this->selector); + // $this->arguments = $visitor->visit($this->arguments); + //} + + + public function compile($env){ + + $rules = array(); + $match = false; + $isOneFound = false; + $candidates = array(); + $defaultUsed = false; + $conditionResult = array(); + + $args = array(); + foreach($this->arguments as $a){ + $args[] = array('name'=> $a['name'], 'value' => $a['value']->compile($env) ); + } + + foreach($env->frames as $frame){ + + $mixins = $frame->find($this->selector); + + if( !$mixins ){ + continue; + } + + $isOneFound = true; + $defNone = 0; + $defTrue = 1; + $defFalse = 2; + + // To make `default()` function independent of definition order we have two "subpasses" here. + // At first we evaluate each guard *twice* (with `default() == true` and `default() == false`), + // and build candidate list with corresponding flags. Then, when we know all possible matches, + // we make a final decision. + + $mixins_len = count($mixins); + for( $m = 0; $m < $mixins_len; $m++ ){ + $mixin = $mixins[$m]; + + if( $this->IsRecursive( $env, $mixin ) ){ + continue; + } + + if( $mixin->matchArgs($args, $env) ){ + + $candidate = array('mixin' => $mixin, 'group' => $defNone); + + if( $mixin instanceof Less_Tree_Ruleset ){ + + for( $f = 0; $f < 2; $f++ ){ + Less_Tree_DefaultFunc::value($f); + $conditionResult[$f] = $mixin->matchCondition( $args, $env); + } + if( $conditionResult[0] || $conditionResult[1] ){ + if( $conditionResult[0] != $conditionResult[1] ){ + $candidate['group'] = $conditionResult[1] ? $defTrue : $defFalse; + } + + $candidates[] = $candidate; + } + }else{ + $candidates[] = $candidate; + } + + $match = true; + } + } + + Less_Tree_DefaultFunc::reset(); + + + $count = array(0, 0, 0); + for( $m = 0; $m < count($candidates); $m++ ){ + $count[ $candidates[$m]['group'] ]++; + } + + if( $count[$defNone] > 0 ){ + $defaultResult = $defFalse; + } else { + $defaultResult = $defTrue; + if( ($count[$defTrue] + $count[$defFalse]) > 1 ){ + throw new Exception( 'Ambiguous use of `default()` found when matching for `'. $this->format($args) + '`' ); + } + } + + + $candidates_length = count($candidates); + $length_1 = ($candidates_length == 1); + + for( $m = 0; $m < $candidates_length; $m++){ + $candidate = $candidates[$m]['group']; + if( ($candidate === $defNone) || ($candidate === $defaultResult) ){ + try{ + $mixin = $candidates[$m]['mixin']; + if( !($mixin instanceof Less_Tree_Mixin_Definition) ){ + $mixin = new Less_Tree_Mixin_Definition('', array(), $mixin->rules, null, false); + $mixin->originalRuleset = $mixins[$m]->originalRuleset; + } + $rules = array_merge($rules, $mixin->evalCall($env, $args, $this->important)->rules); + } catch (Exception $e) { + //throw new Less_Exception_Compiler($e->getMessage(), $e->index, null, $this->currentFileInfo['filename']); + throw new Less_Exception_Compiler($e->getMessage(), null, null, $this->currentFileInfo); + } + } + } + + if( $match ){ + if( !$this->currentFileInfo || !isset($this->currentFileInfo['reference']) || !$this->currentFileInfo['reference'] ){ + Less_Tree::ReferencedArray($rules); + } + + return $rules; + } + } + + if( $isOneFound ){ + throw new Less_Exception_Compiler('No matching definition was found for `'.$this->Format( $args ).'`', null, $this->index, $this->currentFileInfo); + + }else{ + throw new Less_Exception_Compiler(trim($this->selector->toCSS()) . " is undefined in ".$this->currentFileInfo['filename'], null, $this->index); + } + + } + + /** + * Format the args for use in exception messages + * + */ + private function Format($args){ + $message = array(); + if( $args ){ + foreach($args as $a){ + $argValue = ''; + if( $a['name'] ){ + $argValue += $a['name']+':'; + } + if( is_object($a['value']) ){ + $argValue += $a['value']->toCSS(); + }else{ + $argValue += '???'; + } + $message[] = $argValue; + } + } + return implode(', ',$message); + } + + + /** + * Are we in a recursive mixin call? + * + * @return bool + */ + private function IsRecursive( $env, $mixin ){ + + foreach($env->frames as $recur_frame){ + if( !($mixin instanceof Less_Tree_Mixin_Definition) ){ + + if( $mixin === $recur_frame ){ + return true; + } + + if( isset($recur_frame->originalRuleset) && $mixin->ruleset_id === $recur_frame->originalRuleset ){ + return true; + } + } + } + + return false; + } + +} + + diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Definition.php b/vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Definition.php new file mode 100644 index 00000000..b16d6887 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Mixin/Definition.php @@ -0,0 +1,241 @@ +name = $name; + $this->selectors = array(new Less_Tree_Selector(array( new Less_Tree_Element(null, $name)))); + + $this->params = $params; + $this->condition = $condition; + $this->variadic = $variadic; + $this->rules = $rules; + + if( $params ){ + $this->arity = count($params); + foreach( $params as $p ){ + if (! isset($p['name']) || ($p['name'] && !isset($p['value']))) { + $this->required++; + } + } + } + + $this->frames = $frames; + $this->SetRulesetIndex(); + } + + + + //function accept( $visitor ){ + // $this->params = $visitor->visit($this->params); + // $this->rules = $visitor->visit($this->rules); + // $this->condition = $visitor->visit($this->condition); + //} + + + public function toCSS(){ + return ''; + } + + // less.js : /lib/less/tree/mixin.js : tree.mixin.Definition.evalParams + public function compileParams($env, $mixinFrames, $args = array() , &$evaldArguments = array() ){ + $frame = new Less_Tree_Ruleset(null, array()); + $params = $this->params; + $mixinEnv = null; + $argsLength = 0; + + if( $args ){ + $argsLength = count($args); + for($i = 0; $i < $argsLength; $i++ ){ + $arg = $args[$i]; + + if( $arg && $arg['name'] ){ + $isNamedFound = false; + + foreach($params as $j => $param){ + if( !isset($evaldArguments[$j]) && $arg['name'] === $params[$j]['name']) { + $evaldArguments[$j] = $arg['value']->compile($env); + array_unshift($frame->rules, new Less_Tree_Rule( $arg['name'], $arg['value']->compile($env) ) ); + $isNamedFound = true; + break; + } + } + if ($isNamedFound) { + array_splice($args, $i, 1); + $i--; + $argsLength--; + continue; + } else { + throw new Less_Exception_Compiler("Named argument for " . $this->name .' '.$args[$i]['name'] . ' not found'); + } + } + } + } + + $argIndex = 0; + foreach($params as $i => $param){ + + if ( isset($evaldArguments[$i]) ){ continue; } + + $arg = null; + if( isset($args[$argIndex]) ){ + $arg = $args[$argIndex]; + } + + if (isset($param['name']) && $param['name']) { + + if( isset($param['variadic']) ){ + $varargs = array(); + for ($j = $argIndex; $j < $argsLength; $j++) { + $varargs[] = $args[$j]['value']->compile($env); + } + $expression = new Less_Tree_Expression($varargs); + array_unshift($frame->rules, new Less_Tree_Rule($param['name'], $expression->compile($env))); + }else{ + $val = ($arg && $arg['value']) ? $arg['value'] : false; + + if ($val) { + $val = $val->compile($env); + } else if ( isset($param['value']) ) { + + if( !$mixinEnv ){ + $mixinEnv = new Less_Environment(); + $mixinEnv->frames = array_merge( array($frame), $mixinFrames); + } + + $val = $param['value']->compile($mixinEnv); + $frame->resetCache(); + } else { + throw new Less_Exception_Compiler("Wrong number of arguments for " . $this->name . " (" . $argsLength . ' for ' . $this->arity . ")"); + } + + array_unshift($frame->rules, new Less_Tree_Rule($param['name'], $val)); + $evaldArguments[$i] = $val; + } + } + + if ( isset($param['variadic']) && $args) { + for ($j = $argIndex; $j < $argsLength; $j++) { + $evaldArguments[$j] = $args[$j]['value']->compile($env); + } + } + $argIndex++; + } + + ksort($evaldArguments); + $evaldArguments = array_values($evaldArguments); + + return $frame; + } + + public function compile($env) { + if( $this->frames ){ + return new Less_Tree_Mixin_Definition($this->name, $this->params, $this->rules, $this->condition, $this->variadic, $this->frames ); + } + return new Less_Tree_Mixin_Definition($this->name, $this->params, $this->rules, $this->condition, $this->variadic, $env->frames ); + } + + public function evalCall($env, $args = NULL, $important = NULL) { + + Less_Environment::$mixin_stack++; + + $_arguments = array(); + + if( $this->frames ){ + $mixinFrames = array_merge($this->frames, $env->frames); + }else{ + $mixinFrames = $env->frames; + } + + $frame = $this->compileParams($env, $mixinFrames, $args, $_arguments); + + $ex = new Less_Tree_Expression($_arguments); + array_unshift($frame->rules, new Less_Tree_Rule('@arguments', $ex->compile($env))); + + + $ruleset = new Less_Tree_Ruleset(null, $this->rules); + $ruleset->originalRuleset = $this->ruleset_id; + + + $ruleSetEnv = new Less_Environment(); + $ruleSetEnv->frames = array_merge( array($this, $frame), $mixinFrames ); + $ruleset = $ruleset->compile( $ruleSetEnv ); + + if( $important ){ + $ruleset = $ruleset->makeImportant(); + } + + Less_Environment::$mixin_stack--; + + return $ruleset; + } + + + public function matchCondition($args, $env) { + + if( !$this->condition ){ + return true; + } + + // set array to prevent error on array_merge + if(!is_array($this->frames)) { + $this->frames = array(); + } + + $frame = $this->compileParams($env, array_merge($this->frames,$env->frames), $args ); + + $compile_env = new Less_Environment(); + $compile_env->frames = array_merge( + array($frame) // the parameter variables + , $this->frames // the parent namespace/mixin frames + , $env->frames // the current environment frames + ); + + $compile_env->functions = $env->functions; + + return (bool)$this->condition->compile($compile_env); + } + + public function matchArgs($args, $env = NULL){ + $argsLength = count($args); + + if( !$this->variadic ){ + if( $argsLength < $this->required ){ + return false; + } + if( $argsLength > count($this->params) ){ + return false; + } + }else{ + if( $argsLength < ($this->required - 1)){ + return false; + } + } + + $len = min($argsLength, $this->arity); + + for( $i = 0; $i < $len; $i++ ){ + if( !isset($this->params[$i]['name']) && !isset($this->params[$i]['variadic']) ){ + if( $args[$i]['value']->compile($env)->toCSS() != $this->params[$i]['value']->compile($env)->toCSS() ){ + return false; + } + } + } + + return true; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/NameValue.php b/vendor/oyejorge/less.php/lib/Less/Tree/NameValue.php new file mode 100644 index 00000000..e65737c2 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/NameValue.php @@ -0,0 +1,41 @@ + color:#FF0000; + * + * @package Less + * @subpackage tree + */ +class Less_Tree_NameValue extends Less_Tree{ + + public $name; + public $value; + public $index; + public $currentFileInfo; + public $type = 'NameValue'; + + public function __construct($name, $value = null, $index = null, $currentFileInfo = null ){ + $this->name = $name; + $this->value = $value; + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + } + + public function genCSS( $output ){ + + $output->add( + $this->name + . Less_Environment::$_outputMap[': '] + . $this->value + . (((Less_Environment::$lastRule && Less_Parser::$options['compress'])) ? "" : ";") + , $this->currentFileInfo, $this->index); + } + + public function compile ($env){ + return $this; + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Negative.php b/vendor/oyejorge/less.php/lib/Less/Tree/Negative.php new file mode 100644 index 00000000..507443ec --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Negative.php @@ -0,0 +1,37 @@ +value = $node; + } + + //function accept($visitor) { + // $this->value = $visitor->visit($this->value); + //} + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( '-' ); + $this->value->genCSS( $output ); + } + + public function compile($env) { + if( Less_Environment::isMathOn() ){ + $ret = new Less_Tree_Operation('*', array( new Less_Tree_Dimension(-1), $this->value ) ); + return $ret->compile($env); + } + return new Less_Tree_Negative( $this->value->compile($env) ); + } +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Operation.php b/vendor/oyejorge/less.php/lib/Less/Tree/Operation.php new file mode 100644 index 00000000..e69e0da6 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Operation.php @@ -0,0 +1,70 @@ +op = trim($op); + $this->operands = $operands; + $this->isSpaced = $isSpaced; + } + + public function accept($visitor) { + $this->operands = $visitor->visitArray($this->operands); + } + + public function compile($env){ + $a = $this->operands[0]->compile($env); + $b = $this->operands[1]->compile($env); + + + if( Less_Environment::isMathOn() ){ + + if( $a instanceof Less_Tree_Dimension && $b instanceof Less_Tree_Color ){ + $a = $a->toColor(); + + }elseif( $b instanceof Less_Tree_Dimension && $a instanceof Less_Tree_Color ){ + $b = $b->toColor(); + + } + + if( !method_exists($a,'operate') ){ + throw new Less_Exception_Compiler("Operation on an invalid type"); + } + + return $a->operate( $this->op, $b); + } + + return new Less_Tree_Operation($this->op, array($a, $b), $this->isSpaced ); + } + + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $this->operands[0]->genCSS( $output ); + if( $this->isSpaced ){ + $output->add( " " ); + } + $output->add( $this->op ); + if( $this->isSpaced ){ + $output->add( ' ' ); + } + $this->operands[1]->genCSS( $output ); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Paren.php b/vendor/oyejorge/less.php/lib/Less/Tree/Paren.php new file mode 100644 index 00000000..01864550 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Paren.php @@ -0,0 +1,35 @@ +value = $value; + } + + public function accept($visitor){ + $this->value = $visitor->visitObj($this->value); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( '(' ); + $this->value->genCSS( $output ); + $output->add( ')' ); + } + + public function compile($env) { + return new Less_Tree_Paren($this->value->compile($env)); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Quoted.php b/vendor/oyejorge/less.php/lib/Less/Tree/Quoted.php new file mode 100644 index 00000000..80063b5e --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Quoted.php @@ -0,0 +1,81 @@ +escaped = $escaped; + $this->value = $content; + if( $str ){ + $this->quote = $str[0]; + } + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + if( !$this->escaped ){ + $output->add( $this->quote, $this->currentFileInfo, $this->index ); + } + $output->add( $this->value ); + if( !$this->escaped ){ + $output->add( $this->quote ); + } + } + + public function compile($env){ + + $value = $this->value; + if( preg_match_all('/`([^`]+)`/', $this->value, $matches) ){ + foreach($matches as $i => $match){ + $js = new Less_Tree_JavaScript($matches[1], $this->index, true); + $js = $js->compile()->value; + $value = str_replace($matches[0][$i], $js, $value); + } + } + + if( preg_match_all('/@\{([\w-]+)\}/',$value,$matches) ){ + foreach($matches[1] as $i => $match){ + $v = new Less_Tree_Variable('@' . $match, $this->index, $this->currentFileInfo ); + $v = $v->compile($env); + $v = ($v instanceof Less_Tree_Quoted) ? $v->value : $v->toCSS(); + $value = str_replace($matches[0][$i], $v, $value); + } + } + + return new Less_Tree_Quoted($this->quote . $value . $this->quote, $value, $this->escaped, $this->index, $this->currentFileInfo); + } + + public function compare($x) { + + if( !Less_Parser::is_method($x, 'toCSS') ){ + return -1; + } + + $left = $this->toCSS(); + $right = $x->toCSS(); + + if ($left === $right) { + return 0; + } + + return $left < $right ? -1 : 1; + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Rule.php b/vendor/oyejorge/less.php/lib/Less/Tree/Rule.php new file mode 100644 index 00000000..ee4a9e25 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Rule.php @@ -0,0 +1,115 @@ +name = $name; + $this->value = ($value instanceof Less_Tree_Value || $value instanceof Less_Tree_Ruleset) ? $value : new Less_Tree_Value(array($value)); + $this->important = $important ? ' ' . trim($important) : ''; + $this->merge = $merge; + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + $this->inline = $inline; + $this->variable = ( is_string($name) && $name[0] === '@'); + } + + public function accept($visitor) { + $this->value = $visitor->visitObj( $this->value ); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + $output->add( $this->name . Less_Environment::$_outputMap[': '], $this->currentFileInfo, $this->index); + try{ + $this->value->genCSS( $output); + + }catch( Less_Exception_Parser $e ){ + $e->index = $this->index; + $e->currentFile = $this->currentFileInfo; + throw $e; + } + $output->add( $this->important . (($this->inline || (Less_Environment::$lastRule && Less_Parser::$options['compress'])) ? "" : ";"), $this->currentFileInfo, $this->index); + } + + public function compile ($env){ + + $name = $this->name; + if( is_array($name) ){ + // expand 'primitive' name directly to get + // things faster (~10% for benchmark.less): + if( count($name) === 1 && $name[0] instanceof Less_Tree_Keyword ){ + $name = $name[0]->value; + }else{ + $name = $this->CompileName($env,$name); + } + } + + $strictMathBypass = Less_Parser::$options['strictMath']; + if( $name === "font" && !Less_Parser::$options['strictMath'] ){ + Less_Parser::$options['strictMath'] = true; + } + + try { + $evaldValue = $this->value->compile($env); + + if( !$this->variable && $evaldValue->type === "DetachedRuleset") { + throw new Less_Exception_Compiler("Rulesets cannot be evaluated on a property.", null, $this->index, $this->currentFileInfo); + } + + if( Less_Environment::$mixin_stack ){ + $return = new Less_Tree_Rule($name, $evaldValue, $this->important, $this->merge, $this->index, $this->currentFileInfo, $this->inline); + }else{ + $this->name = $name; + $this->value = $evaldValue; + $return = $this; + } + + }catch( Less_Exception_Parser $e ){ + if( !is_numeric($e->index) ){ + $e->index = $this->index; + $e->currentFile = $this->currentFileInfo; + } + throw $e; + } + + Less_Parser::$options['strictMath'] = $strictMathBypass; + + return $return; + } + + + public function CompileName( $env, $name ){ + $output = new Less_Output(); + foreach($name as $n){ + $n->compile($env)->genCSS($output); + } + return $output->toString(); + } + + public function makeImportant(){ + return new Less_Tree_Rule($this->name, $this->value, '!important', $this->merge, $this->index, $this->currentFileInfo, $this->inline); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Ruleset.php b/vendor/oyejorge/less.php/lib/Less/Tree/Ruleset.php new file mode 100644 index 00000000..93d3d6b7 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Ruleset.php @@ -0,0 +1,643 @@ +ruleset_id = Less_Parser::$next_id++; + $this->originalRuleset = $this->ruleset_id; + + if( $this->selectors ){ + foreach($this->selectors as $sel){ + if( $sel->_oelements ){ + $this->first_oelements[$sel->_oelements[0]] = true; + } + } + } + } + + public function __construct($selectors, $rules, $strictImports = null){ + $this->selectors = $selectors; + $this->rules = $rules; + $this->lookups = array(); + $this->strictImports = $strictImports; + $this->SetRulesetIndex(); + } + + public function accept( $visitor ){ + if( $this->paths ){ + $paths_len = count($this->paths); + for($i = 0,$paths_len; $i < $paths_len; $i++ ){ + $this->paths[$i] = $visitor->visitArray($this->paths[$i]); + } + }elseif( $this->selectors ){ + $this->selectors = $visitor->visitArray($this->selectors); + } + + if( $this->rules ){ + $this->rules = $visitor->visitArray($this->rules); + } + } + + public function compile($env){ + + $ruleset = $this->PrepareRuleset($env); + + + // Store the frames around mixin definitions, + // so they can be evaluated like closures when the time comes. + $rsRuleCnt = count($ruleset->rules); + for( $i = 0; $i < $rsRuleCnt; $i++ ){ + if( $ruleset->rules[$i] instanceof Less_Tree_Mixin_Definition || $ruleset->rules[$i] instanceof Less_Tree_DetachedRuleset ){ + $ruleset->rules[$i] = $ruleset->rules[$i]->compile($env); + } + } + + $mediaBlockCount = 0; + if( $env instanceof Less_Environment ){ + $mediaBlockCount = count($env->mediaBlocks); + } + + // Evaluate mixin calls. + $this->EvalMixinCalls( $ruleset, $env, $rsRuleCnt ); + + + // Evaluate everything else + for( $i=0; $i<$rsRuleCnt; $i++ ){ + if(! ($ruleset->rules[$i] instanceof Less_Tree_Mixin_Definition || $ruleset->rules[$i] instanceof Less_Tree_DetachedRuleset) ){ + $ruleset->rules[$i] = $ruleset->rules[$i]->compile($env); + } + } + + // Evaluate everything else + for( $i=0; $i<$rsRuleCnt; $i++ ){ + $rule = $ruleset->rules[$i]; + + // for rulesets, check if it is a css guard and can be removed + if( $rule instanceof Less_Tree_Ruleset && $rule->selectors && count($rule->selectors) === 1 ){ + + // check if it can be folded in (e.g. & where) + if( $rule->selectors[0]->isJustParentSelector() ){ + array_splice($ruleset->rules,$i--,1); + $rsRuleCnt--; + + for($j = 0; $j < count($rule->rules); $j++ ){ + $subRule = $rule->rules[$j]; + if( !($subRule instanceof Less_Tree_Rule) || !$subRule->variable ){ + array_splice($ruleset->rules, ++$i, 0, array($subRule)); + $rsRuleCnt++; + } + } + + } + } + } + + + // Pop the stack + $env->shiftFrame(); + + if ($mediaBlockCount) { + $len = count($env->mediaBlocks); + for($i = $mediaBlockCount; $i < $len; $i++ ){ + $env->mediaBlocks[$i]->bubbleSelectors($ruleset->selectors); + } + } + + return $ruleset; + } + + /** + * Compile Less_Tree_Mixin_Call objects + * + * @param Less_Tree_Ruleset $ruleset + * @param integer $rsRuleCnt + */ + private function EvalMixinCalls( $ruleset, $env, &$rsRuleCnt ){ + for($i=0; $i < $rsRuleCnt; $i++){ + $rule = $ruleset->rules[$i]; + + if( $rule instanceof Less_Tree_Mixin_Call ){ + $rule = $rule->compile($env); + + $temp = array(); + foreach($rule as $r){ + if( ($r instanceof Less_Tree_Rule) && $r->variable ){ + // do not pollute the scope if the variable is + // already there. consider returning false here + // but we need a way to "return" variable from mixins + if( !$ruleset->variable($r->name) ){ + $temp[] = $r; + } + }else{ + $temp[] = $r; + } + } + $temp_count = count($temp)-1; + array_splice($ruleset->rules, $i, 1, $temp); + $rsRuleCnt += $temp_count; + $i += $temp_count; + $ruleset->resetCache(); + + }elseif( $rule instanceof Less_Tree_RulesetCall ){ + + $rule = $rule->compile($env); + $rules = array(); + foreach($rule->rules as $r){ + if( ($r instanceof Less_Tree_Rule) && $r->variable ){ + continue; + } + $rules[] = $r; + } + + array_splice($ruleset->rules, $i, 1, $rules); + $temp_count = count($rules); + $rsRuleCnt += $temp_count - 1; + $i += $temp_count-1; + $ruleset->resetCache(); + } + + } + } + + + /** + * Compile the selectors and create a new ruleset object for the compile() method + * + */ + private function PrepareRuleset($env){ + + $hasOnePassingSelector = false; + $selectors = array(); + if( $this->selectors ){ + Less_Tree_DefaultFunc::error("it is currently only allowed in parametric mixin guards,"); + + foreach($this->selectors as $s){ + $selector = $s->compile($env); + $selectors[] = $selector; + if( $selector->evaldCondition ){ + $hasOnePassingSelector = true; + } + } + + Less_Tree_DefaultFunc::reset(); + } else { + $hasOnePassingSelector = true; + } + + if( $this->rules && $hasOnePassingSelector ){ + $rules = $this->rules; + }else{ + $rules = array(); + } + + $ruleset = new Less_Tree_Ruleset($selectors, $rules, $this->strictImports); + + $ruleset->originalRuleset = $this->ruleset_id; + + $ruleset->root = $this->root; + $ruleset->firstRoot = $this->firstRoot; + $ruleset->allowImports = $this->allowImports; + + + // push the current ruleset to the frames stack + $env->unshiftFrame($ruleset); + + + // Evaluate imports + if( $ruleset->root || $ruleset->allowImports || !$ruleset->strictImports ){ + $ruleset->evalImports($env); + } + + return $ruleset; + } + + function evalImports($env) { + + $rules_len = count($this->rules); + for($i=0; $i < $rules_len; $i++){ + $rule = $this->rules[$i]; + + if( $rule instanceof Less_Tree_Import ){ + $rules = $rule->compile($env); + if( is_array($rules) ){ + array_splice($this->rules, $i, 1, $rules); + $temp_count = count($rules)-1; + $i += $temp_count; + $rules_len += $temp_count; + }else{ + array_splice($this->rules, $i, 1, array($rules)); + } + + $this->resetCache(); + } + } + } + + function makeImportant(){ + + $important_rules = array(); + foreach($this->rules as $rule){ + if( $rule instanceof Less_Tree_Rule || $rule instanceof Less_Tree_Ruleset ){ + $important_rules[] = $rule->makeImportant(); + }else{ + $important_rules[] = $rule; + } + } + + return new Less_Tree_Ruleset($this->selectors, $important_rules, $this->strictImports ); + } + + public function matchArgs($args){ + return !$args; + } + + // lets you call a css selector with a guard + public function matchCondition( $args, $env ){ + $lastSelector = end($this->selectors); + + if( !$lastSelector->evaldCondition ){ + return false; + } + if( $lastSelector->condition && !$lastSelector->condition->compile( $env->copyEvalEnv( $env->frames ) ) ){ + return false; + } + return true; + } + + function resetCache(){ + $this->_rulesets = null; + $this->_variables = null; + $this->lookups = array(); + } + + public function variables(){ + $this->_variables = array(); + foreach( $this->rules as $r){ + if ($r instanceof Less_Tree_Rule && $r->variable === true) { + $this->_variables[$r->name] = $r; + } + } + } + + public function variable($name){ + + if( is_null($this->_variables) ){ + $this->variables(); + } + return isset($this->_variables[$name]) ? $this->_variables[$name] : null; + } + + public function find( $selector, $self = null ){ + + $key = implode(' ',$selector->_oelements); + + if( !isset($this->lookups[$key]) ){ + + if( !$self ){ + $self = $this->ruleset_id; + } + + $this->lookups[$key] = array(); + + $first_oelement = $selector->_oelements[0]; + + foreach($this->rules as $rule){ + if( $rule instanceof Less_Tree_Ruleset && $rule->ruleset_id != $self ){ + + if( isset($rule->first_oelements[$first_oelement]) ){ + + foreach( $rule->selectors as $ruleSelector ){ + $match = $selector->match($ruleSelector); + if( $match ){ + if( $selector->elements_len > $match ){ + $this->lookups[$key] = array_merge($this->lookups[$key], $rule->find( new Less_Tree_Selector(array_slice($selector->elements, $match)), $self)); + } else { + $this->lookups[$key][] = $rule; + } + break; + } + } + } + } + } + } + + return $this->lookups[$key]; + } + + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + if( !$this->root ){ + Less_Environment::$tabLevel++; + } + + $tabRuleStr = $tabSetStr = ''; + if( !Less_Parser::$options['compress'] ){ + if( Less_Environment::$tabLevel ){ + $tabRuleStr = "\n".str_repeat( ' ' , Less_Environment::$tabLevel ); + $tabSetStr = "\n".str_repeat( ' ' , Less_Environment::$tabLevel-1 ); + }else{ + $tabSetStr = $tabRuleStr = "\n"; + } + } + + + $ruleNodes = array(); + $rulesetNodes = array(); + foreach($this->rules as $rule){ + + $class = get_class($rule); + if( ($class === 'Less_Tree_Media') || ($class === 'Less_Tree_Directive') || ($this->root && $class === 'Less_Tree_Comment') || ($class === 'Less_Tree_Ruleset' && $rule->rules) ){ + $rulesetNodes[] = $rule; + }else{ + $ruleNodes[] = $rule; + } + } + + // If this is the root node, we don't render + // a selector, or {}. + if( !$this->root ){ + + /* + debugInfo = tree.debugInfo(env, this, tabSetStr); + + if (debugInfo) { + output.add(debugInfo); + output.add(tabSetStr); + } + */ + + $paths_len = count($this->paths); + for( $i = 0; $i < $paths_len; $i++ ){ + $path = $this->paths[$i]; + $firstSelector = true; + + foreach($path as $p){ + $p->genCSS( $output, $firstSelector ); + $firstSelector = false; + } + + if( $i + 1 < $paths_len ){ + $output->add( ',' . $tabSetStr ); + } + } + + $output->add( (Less_Parser::$options['compress'] ? '{' : " {") . $tabRuleStr ); + } + + // Compile rules and rulesets + $ruleNodes_len = count($ruleNodes); + $rulesetNodes_len = count($rulesetNodes); + for( $i = 0; $i < $ruleNodes_len; $i++ ){ + $rule = $ruleNodes[$i]; + + // @page{ directive ends up with root elements inside it, a mix of rules and rulesets + // In this instance we do not know whether it is the last property + if( $i + 1 === $ruleNodes_len && (!$this->root || $rulesetNodes_len === 0 || $this->firstRoot ) ){ + Less_Environment::$lastRule = true; + } + + $rule->genCSS( $output ); + + if( !Less_Environment::$lastRule ){ + $output->add( $tabRuleStr ); + }else{ + Less_Environment::$lastRule = false; + } + } + + if( !$this->root ){ + $output->add( $tabSetStr . '}' ); + Less_Environment::$tabLevel--; + } + + $firstRuleset = true; + $space = ($this->root ? $tabRuleStr : $tabSetStr); + for( $i = 0; $i < $rulesetNodes_len; $i++ ){ + + if( $ruleNodes_len && $firstRuleset ){ + $output->add( $space ); + }elseif( !$firstRuleset ){ + $output->add( $space ); + } + $firstRuleset = false; + $rulesetNodes[$i]->genCSS( $output); + } + + if( !Less_Parser::$options['compress'] && $this->firstRoot ){ + $output->add( "\n" ); + } + + } + + + function markReferenced(){ + if( !$this->selectors ){ + return; + } + foreach($this->selectors as $selector){ + $selector->markReferenced(); + } + } + + public function joinSelectors( $context, $selectors ){ + $paths = array(); + if( is_array($selectors) ){ + foreach($selectors as $selector) { + $this->joinSelector( $paths, $context, $selector); + } + } + return $paths; + } + + public function joinSelector( &$paths, $context, $selector){ + + $hasParentSelector = false; + + foreach($selector->elements as $el) { + if( $el->value === '&') { + $hasParentSelector = true; + } + } + + if( !$hasParentSelector ){ + if( $context ){ + foreach($context as $context_el){ + $paths[] = array_merge($context_el, array($selector) ); + } + }else { + $paths[] = array($selector); + } + return; + } + + + // The paths are [[Selector]] + // The first list is a list of comma seperated selectors + // The inner list is a list of inheritance seperated selectors + // e.g. + // .a, .b { + // .c { + // } + // } + // == [[.a] [.c]] [[.b] [.c]] + // + + // the elements from the current selector so far + $currentElements = array(); + // the current list of new selectors to add to the path. + // We will build it up. We initiate it with one empty selector as we "multiply" the new selectors + // by the parents + $newSelectors = array(array()); + + + foreach( $selector->elements as $el){ + + // non parent reference elements just get added + if( $el->value !== '&' ){ + $currentElements[] = $el; + } else { + // the new list of selectors to add + $selectorsMultiplied = array(); + + // merge the current list of non parent selector elements + // on to the current list of selectors to add + if( $currentElements ){ + $this->mergeElementsOnToSelectors( $currentElements, $newSelectors); + } + + // loop through our current selectors + foreach($newSelectors as $sel){ + + // if we don't have any parent paths, the & might be in a mixin so that it can be used + // whether there are parents or not + if( !$context ){ + // the combinator used on el should now be applied to the next element instead so that + // it is not lost + if( $sel ){ + $sel[0]->elements = array_slice($sel[0]->elements,0); + $sel[0]->elements[] = new Less_Tree_Element($el->combinator, '', $el->index, $el->currentFileInfo ); + } + $selectorsMultiplied[] = $sel; + }else { + + // and the parent selectors + foreach($context as $parentSel){ + // We need to put the current selectors + // then join the last selector's elements on to the parents selectors + + // our new selector path + $newSelectorPath = array(); + // selectors from the parent after the join + $afterParentJoin = array(); + $newJoinedSelectorEmpty = true; + + //construct the joined selector - if & is the first thing this will be empty, + // if not newJoinedSelector will be the last set of elements in the selector + if( $sel ){ + $newSelectorPath = $sel; + $lastSelector = array_pop($newSelectorPath); + $newJoinedSelector = $selector->createDerived( array_slice($lastSelector->elements,0) ); + $newJoinedSelectorEmpty = false; + } + else { + $newJoinedSelector = $selector->createDerived(array()); + } + + //put together the parent selectors after the join + if ( count($parentSel) > 1) { + $afterParentJoin = array_merge($afterParentJoin, array_slice($parentSel,1) ); + } + + if ( $parentSel ){ + $newJoinedSelectorEmpty = false; + + // join the elements so far with the first part of the parent + $newJoinedSelector->elements[] = new Less_Tree_Element( $el->combinator, $parentSel[0]->elements[0]->value, $el->index, $el->currentFileInfo); + + $newJoinedSelector->elements = array_merge( $newJoinedSelector->elements, array_slice($parentSel[0]->elements, 1) ); + } + + if (!$newJoinedSelectorEmpty) { + // now add the joined selector + $newSelectorPath[] = $newJoinedSelector; + } + + // and the rest of the parent + $newSelectorPath = array_merge($newSelectorPath, $afterParentJoin); + + // add that to our new set of selectors + $selectorsMultiplied[] = $newSelectorPath; + } + } + } + + // our new selectors has been multiplied, so reset the state + $newSelectors = $selectorsMultiplied; + $currentElements = array(); + } + } + + // if we have any elements left over (e.g. .a& .b == .b) + // add them on to all the current selectors + if( $currentElements ){ + $this->mergeElementsOnToSelectors($currentElements, $newSelectors); + } + foreach( $newSelectors as $new_sel){ + if( $new_sel ){ + $paths[] = $new_sel; + } + } + } + + function mergeElementsOnToSelectors( $elements, &$selectors){ + + if( !$selectors ){ + $selectors[] = array( new Less_Tree_Selector($elements) ); + return; + } + + + foreach( $selectors as &$sel){ + + // if the previous thing in sel is a parent this needs to join on to it + if( $sel ){ + $last = count($sel)-1; + $sel[$last] = $sel[$last]->createDerived( array_merge($sel[$last]->elements, $elements) ); + }else{ + $sel[] = new Less_Tree_Selector( $elements ); + } + } + } +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/RulesetCall.php b/vendor/oyejorge/less.php/lib/Less/Tree/RulesetCall.php new file mode 100644 index 00000000..ed4c7237 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/RulesetCall.php @@ -0,0 +1,26 @@ +variable = $variable; + } + + public function accept($visitor) {} + + public function compile( $env ){ + $variable = new Less_Tree_Variable($this->variable); + $detachedRuleset = $variable->compile($env); + return $detachedRuleset->callEval($env); + } +} + diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Selector.php b/vendor/oyejorge/less.php/lib/Less/Tree/Selector.php new file mode 100644 index 00000000..6b9dae61 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Selector.php @@ -0,0 +1,168 @@ +elements = $elements; + $this->elements_len = count($elements); + $this->extendList = $extendList; + $this->condition = $condition; + if( $currentFileInfo ){ + $this->currentFileInfo = $currentFileInfo; + } + $this->isReferenced = $isReferenced; + if( !$condition ){ + $this->evaldCondition = true; + } + + $this->CacheElements(); + } + + public function accept($visitor) { + $this->elements = $visitor->visitArray($this->elements); + $this->extendList = $visitor->visitArray($this->extendList); + if( $this->condition ){ + $this->condition = $visitor->visitObj($this->condition); + } + + if( $visitor instanceof Less_Visitor_extendFinder ){ + $this->CacheElements(); + } + } + + public function createDerived( $elements, $extendList = null, $evaldCondition = null ){ + $newSelector = new Less_Tree_Selector( $elements, ($extendList ? $extendList : $this->extendList), null, $this->index, $this->currentFileInfo, $this->isReferenced); + $newSelector->evaldCondition = $evaldCondition ? $evaldCondition : $this->evaldCondition; + return $newSelector; + } + + + public function match( $other ){ + + if( !$other->_oelements || ($this->elements_len < $other->_oelements_len) ){ + return 0; + } + + for( $i = 0; $i < $other->_oelements_len; $i++ ){ + if( $this->elements[$i]->value !== $other->_oelements[$i]) { + return 0; + } + } + + return $other->_oelements_len; // return number of matched elements + } + + + public function CacheElements(){ + + $this->_oelements = array(); + $css = ''; + + foreach($this->elements as $v){ + + $css .= $v->combinator; + if( !$v->value_is_object ){ + $css .= $v->value; + continue; + } + + if( !property_exists($v->value,'value') || !is_string($v->value->value) ){ + $this->cacheable = false; + return; + } + $css .= $v->value->value; + } + + $this->_oelements_len = preg_match_all('/[,&#\.\w-](?:[\w-]|(?:\\\\.))*/', $css, $matches); + if( $this->_oelements_len ){ + $this->_oelements = $matches[0]; + + if( $this->_oelements[0] === '&' ){ + array_shift($this->_oelements); + $this->_oelements_len--; + } + } + } + + public function isJustParentSelector(){ + return !$this->mediaEmpty && + count($this->elements) === 1 && + $this->elements[0]->value === '&' && + ($this->elements[0]->combinator === ' ' || $this->elements[0]->combinator === ''); + } + + public function compile($env) { + + $elements = array(); + foreach($this->elements as $el){ + $elements[] = $el->compile($env); + } + + $extendList = array(); + foreach($this->extendList as $el){ + $extendList[] = $el->compile($el); + } + + $evaldCondition = false; + if( $this->condition ){ + $evaldCondition = $this->condition->compile($env); + } + + return $this->createDerived( $elements, $extendList, $evaldCondition ); + } + + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output, $firstSelector = true ){ + + if( !$firstSelector && $this->elements[0]->combinator === "" ){ + $output->add(' ', $this->currentFileInfo, $this->index); + } + + foreach($this->elements as $element){ + $element->genCSS( $output ); + } + } + + public function markReferenced(){ + $this->isReferenced = true; + } + + public function getIsReferenced(){ + return !isset($this->currentFileInfo['reference']) || !$this->currentFileInfo['reference'] || $this->isReferenced; + } + + public function getIsOutput(){ + return $this->evaldCondition; + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/UnicodeDescriptor.php b/vendor/oyejorge/less.php/lib/Less/Tree/UnicodeDescriptor.php new file mode 100644 index 00000000..8c4707ef --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/UnicodeDescriptor.php @@ -0,0 +1,29 @@ +value = $value; + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( $this->value ); + } + + public function compile(){ + return $this; + } +} + diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Unit.php b/vendor/oyejorge/less.php/lib/Less/Tree/Unit.php new file mode 100644 index 00000000..e13b100e --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Unit.php @@ -0,0 +1,147 @@ +numerator = $numerator; + $this->denominator = $denominator; + $this->backupUnit = $backupUnit; + } + + public function __clone(){ + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + + if( $this->numerator ){ + $output->add( $this->numerator[0] ); + }elseif( $this->denominator ){ + $output->add( $this->denominator[0] ); + }elseif( !Less_Parser::$options['strictUnits'] && $this->backupUnit ){ + $output->add( $this->backupUnit ); + return ; + } + } + + public function toString(){ + $returnStr = implode('*',$this->numerator); + foreach($this->denominator as $d){ + $returnStr .= '/'.$d; + } + return $returnStr; + } + + public function __toString(){ + return $this->toString(); + } + + + /** + * @param Less_Tree_Unit $other + */ + public function compare($other) { + return $this->is( $other->toString() ) ? 0 : -1; + } + + public function is($unitString){ + return $this->toString() === $unitString; + } + + public function isLength(){ + $css = $this->toCSS(); + return !!preg_match('/px|em|%|in|cm|mm|pc|pt|ex/',$css); + } + + public function isAngle() { + return isset( Less_Tree_UnitConversions::$angle[$this->toCSS()] ); + } + + public function isEmpty(){ + return !$this->numerator && !$this->denominator; + } + + public function isSingular() { + return count($this->numerator) <= 1 && !$this->denominator; + } + + + public function usedUnits(){ + $result = array(); + + foreach(Less_Tree_UnitConversions::$groups as $groupName){ + $group = Less_Tree_UnitConversions::${$groupName}; + + foreach($this->numerator as $atomicUnit){ + if( isset($group[$atomicUnit]) && !isset($result[$groupName]) ){ + $result[$groupName] = $atomicUnit; + } + } + + foreach($this->denominator as $atomicUnit){ + if( isset($group[$atomicUnit]) && !isset($result[$groupName]) ){ + $result[$groupName] = $atomicUnit; + } + } + } + + return $result; + } + + public function cancel(){ + $counter = array(); + $backup = null; + + foreach($this->numerator as $atomicUnit){ + if( !$backup ){ + $backup = $atomicUnit; + } + $counter[$atomicUnit] = ( isset($counter[$atomicUnit]) ? $counter[$atomicUnit] : 0) + 1; + } + + foreach($this->denominator as $atomicUnit){ + if( !$backup ){ + $backup = $atomicUnit; + } + $counter[$atomicUnit] = ( isset($counter[$atomicUnit]) ? $counter[$atomicUnit] : 0) - 1; + } + + $this->numerator = array(); + $this->denominator = array(); + + foreach($counter as $atomicUnit => $count){ + if( $count > 0 ){ + for( $i = 0; $i < $count; $i++ ){ + $this->numerator[] = $atomicUnit; + } + }elseif( $count < 0 ){ + for( $i = 0; $i < -$count; $i++ ){ + $this->denominator[] = $atomicUnit; + } + } + } + + if( !$this->numerator && !$this->denominator && $backup ){ + $this->backupUnit = $backup; + } + + sort($this->numerator); + sort($this->denominator); + } + + +} + diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/UnitConversions.php b/vendor/oyejorge/less.php/lib/Less/Tree/UnitConversions.php new file mode 100644 index 00000000..c86b2907 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/UnitConversions.php @@ -0,0 +1,35 @@ + 1, + 'cm'=> 0.01, + 'mm'=> 0.001, + 'in'=> 0.0254, + 'px'=> 0.000264583, // 0.0254 / 96, + 'pt'=> 0.000352778, // 0.0254 / 72, + 'pc'=> 0.004233333, // 0.0254 / 72 * 12 + ); + + public static $duration = array( + 's'=> 1, + 'ms'=> 0.001 + ); + + public static $angle = array( + 'rad' => 0.1591549430919, // 1/(2*M_PI), + 'deg' => 0.002777778, // 1/360, + 'grad'=> 0.0025, // 1/400, + 'turn'=> 1 + ); + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Url.php b/vendor/oyejorge/less.php/lib/Less/Tree/Url.php new file mode 100644 index 00000000..ef9c3c68 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Url.php @@ -0,0 +1,76 @@ +value = $value; + $this->currentFileInfo = $currentFileInfo; + $this->isEvald = $isEvald; + } + + public function accept( $visitor ){ + $this->value = $visitor->visitObj($this->value); + } + + /** + * @see Less_Tree::genCSS + */ + public function genCSS( $output ){ + $output->add( 'url(' ); + $this->value->genCSS( $output ); + $output->add( ')' ); + } + + /** + * @param Less_Functions $ctx + */ + public function compile($ctx){ + $val = $this->value->compile($ctx); + + if( !$this->isEvald ){ + // Add the base path if the URL is relative + if( Less_Parser::$options['relativeUrls'] + && $this->currentFileInfo + && is_string($val->value) + && Less_Environment::isPathRelative($val->value) + ){ + $rootpath = $this->currentFileInfo['uri_root']; + if ( !$val->quote ){ + $rootpath = preg_replace('/[\(\)\'"\s]/', '\\$1', $rootpath ); + } + $val->value = $rootpath . $val->value; + } + + $val->value = Less_Environment::normalizePath( $val->value); + } + + // Add cache buster if enabled + if( Less_Parser::$options['urlArgs'] ){ + if( !preg_match('/^\s*data:/',$val->value) ){ + $delimiter = strpos($val->value,'?') === false ? '?' : '&'; + $urlArgs = $delimiter . Less_Parser::$options['urlArgs']; + $hash_pos = strpos($val->value,'#'); + if( $hash_pos !== false ){ + $val->value = substr_replace($val->value,$urlArgs, $hash_pos, 0); + } else { + $val->value .= $urlArgs; + } + } + } + + return new Less_Tree_URL($val, $this->currentFileInfo, true); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Value.php b/vendor/oyejorge/less.php/lib/Less/Tree/Value.php new file mode 100644 index 00000000..9f077bc5 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Value.php @@ -0,0 +1,48 @@ +value = $value; + } + + public function accept($visitor) { + $this->value = $visitor->visitArray($this->value); + } + + public function compile($env){ + + $ret = array(); + $i = 0; + foreach($this->value as $i => $v){ + $ret[] = $v->compile($env); + } + if( $i > 0 ){ + return new Less_Tree_Value($ret); + } + return $ret[0]; + } + + /** + * @see Less_Tree::genCSS + */ + function genCSS( $output ){ + $len = count($this->value); + for($i = 0; $i < $len; $i++ ){ + $this->value[$i]->genCSS( $output ); + if( $i+1 < $len ){ + $output->add( Less_Environment::$_outputMap[','] ); + } + } + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Variable.php b/vendor/oyejorge/less.php/lib/Less/Tree/Variable.php new file mode 100644 index 00000000..cc0182cd --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Tree/Variable.php @@ -0,0 +1,52 @@ +name = $name; + $this->index = $index; + $this->currentFileInfo = $currentFileInfo; + } + + public function compile($env) { + + if( $this->name[1] === '@' ){ + $v = new Less_Tree_Variable(substr($this->name, 1), $this->index + 1, $this->currentFileInfo); + $name = '@' . $v->compile($env)->value; + }else{ + $name = $this->name; + } + + if ($this->evaluating) { + throw new Less_Exception_Compiler("Recursive variable definition for " . $name, null, $this->index, $this->currentFileInfo); + } + + $this->evaluating = true; + + foreach($env->frames as $frame){ + if( $v = $frame->variable($name) ){ + $r = $v->value->compile($env); + $this->evaluating = false; + return $r; + } + } + + throw new Less_Exception_Compiler("variable " . $name . " is undefined in file ".$this->currentFileInfo["filename"], null, $this->index, $this->currentFileInfo); + } + +} diff --git a/vendor/oyejorge/less.php/lib/Less/Version.php b/vendor/oyejorge/less.php/lib/Less/Version.php new file mode 100644 index 00000000..704ec6e0 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Version.php @@ -0,0 +1,15 @@ +_visitFnCache = get_class_methods(get_class($this)); + $this->_visitFnCache = array_flip($this->_visitFnCache); + } + + public function visitObj( $node ){ + + $funcName = 'visit'.$node->type; + if( isset($this->_visitFnCache[$funcName]) ){ + + $visitDeeper = true; + $this->$funcName( $node, $visitDeeper ); + + if( $visitDeeper ){ + $node->accept($this); + } + + $funcName = $funcName . "Out"; + if( isset($this->_visitFnCache[$funcName]) ){ + $this->$funcName( $node ); + } + + }else{ + $node->accept($this); + } + + return $node; + } + + public function visitArray( $nodes ){ + + array_map( array($this,'visitObj'), $nodes); + return $nodes; + } +} + diff --git a/vendor/oyejorge/less.php/lib/Less/Visitor/extendFinder.php b/vendor/oyejorge/less.php/lib/Less/Visitor/extendFinder.php new file mode 100644 index 00000000..22b3aac9 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Visitor/extendFinder.php @@ -0,0 +1,114 @@ +contexts = array(); + $this->allExtendsStack = array(array()); + parent::__construct(); + } + + /** + * @param Less_Tree_Ruleset $root + */ + public function run($root){ + $root = $this->visitObj($root); + $root->allExtends =& $this->allExtendsStack[0]; + return $root; + } + + public function visitRule($ruleNode, &$visitDeeper ){ + $visitDeeper = false; + } + + public function visitMixinDefinition( $mixinDefinitionNode, &$visitDeeper ){ + $visitDeeper = false; + } + + public function visitRuleset($rulesetNode){ + + if( $rulesetNode->root ){ + return; + } + + $allSelectorsExtendList = array(); + + // get &:extend(.a); rules which apply to all selectors in this ruleset + if( $rulesetNode->rules ){ + foreach($rulesetNode->rules as $rule){ + if( $rule instanceof Less_Tree_Extend ){ + $allSelectorsExtendList[] = $rule; + $rulesetNode->extendOnEveryPath = true; + } + } + } + + + // now find every selector and apply the extends that apply to all extends + // and the ones which apply to an individual extend + foreach($rulesetNode->paths as $selectorPath){ + $selector = end($selectorPath); //$selectorPath[ count($selectorPath)-1]; + + $j = 0; + foreach($selector->extendList as $extend){ + $this->allExtendsStackPush($rulesetNode, $selectorPath, $extend, $j); + } + foreach($allSelectorsExtendList as $extend){ + $this->allExtendsStackPush($rulesetNode, $selectorPath, $extend, $j); + } + } + + $this->contexts[] = $rulesetNode->selectors; + } + + public function allExtendsStackPush($rulesetNode, $selectorPath, $extend, &$j){ + $this->foundExtends = true; + $extend = clone $extend; + $extend->findSelfSelectors( $selectorPath ); + $extend->ruleset = $rulesetNode; + if( $j === 0 ){ + $extend->firstExtendOnThisSelectorPath = true; + } + + $end_key = count($this->allExtendsStack)-1; + $this->allExtendsStack[$end_key][] = $extend; + $j++; + } + + + public function visitRulesetOut( $rulesetNode ){ + if( !is_object($rulesetNode) || !$rulesetNode->root ){ + array_pop($this->contexts); + } + } + + public function visitMedia( $mediaNode ){ + $mediaNode->allExtends = array(); + $this->allExtendsStack[] =& $mediaNode->allExtends; + } + + public function visitMediaOut(){ + array_pop($this->allExtendsStack); + } + + public function visitDirective( $directiveNode ){ + $directiveNode->allExtends = array(); + $this->allExtendsStack[] =& $directiveNode->allExtends; + } + + public function visitDirectiveOut(){ + array_pop($this->allExtendsStack); + } +} + + diff --git a/vendor/oyejorge/less.php/lib/Less/Visitor/import.php b/vendor/oyejorge/less.php/lib/Less/Visitor/import.php new file mode 100644 index 00000000..f79a36da --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Visitor/import.php @@ -0,0 +1,139 @@ +env = $evalEnv; + $this->importCount = 0; + parent::__construct(); + } + + + function run( $root ){ + $root = $this->visitObj($root); + $this->isFinished = true; + + //if( $this->importCount === 0) { + // $this->_finish(); + //} + } + + function visitImport($importNode, &$visitDeeper ){ + $importVisitor = $this; + $inlineCSS = $importNode->options['inline']; + + if( !$importNode->css || $inlineCSS ){ + $evaldImportNode = $importNode->compileForImport($this->env); + + if( $evaldImportNode && (!$evaldImportNode->css || $inlineCSS) ){ + $importNode = $evaldImportNode; + $this->importCount++; + $env = clone $this->env; + + if( (isset($importNode->options['multiple']) && $importNode->options['multiple']) ){ + $env->importMultiple = true; + } + + //get path & uri + $path_and_uri = null; + if( is_callable(Less_Parser::$options['import_callback']) ){ + $path_and_uri = call_user_func(Less_Parser::$options['import_callback'],$importNode); + } + + if( !$path_and_uri ){ + $path_and_uri = $importNode->PathAndUri(); + } + + if( $path_and_uri ){ + list($full_path, $uri) = $path_and_uri; + }else{ + $full_path = $uri = $importNode->getPath(); + } + + + //import once + if( $importNode->skip( $full_path, $env) ){ + return array(); + } + + if( $importNode->options['inline'] ){ + //todo needs to reference css file not import + //$contents = new Less_Tree_Anonymous($importNode->root, 0, array('filename'=>$importNode->importedFilename), true ); + + Less_Parser::AddParsedFile($full_path); + $contents = new Less_Tree_Anonymous( file_get_contents($full_path), 0, array(), true ); + + if( $importNode->features ){ + return new Less_Tree_Media( array($contents), $importNode->features->value ); + } + + return array( $contents ); + } + + + // css ? + if( $importNode->css ){ + $features = ( $importNode->features ? $importNode->features->compile($env) : null ); + return new Less_Tree_Import( $importNode->compilePath( $env), $features, $importNode->options, $this->index); + } + + return $importNode->ParseImport( $full_path, $uri, $env ); + } + + } + + $visitDeeper = false; + return $importNode; + } + + + function visitRule( $ruleNode, &$visitDeeper ){ + $visitDeeper = false; + return $ruleNode; + } + + function visitDirective($directiveNode, $visitArgs){ + array_unshift($this->env->frames,$directiveNode); + return $directiveNode; + } + + function visitDirectiveOut($directiveNode) { + array_shift($this->env->frames); + } + + function visitMixinDefinition($mixinDefinitionNode, $visitArgs) { + array_unshift($this->env->frames,$mixinDefinitionNode); + return $mixinDefinitionNode; + } + + function visitMixinDefinitionOut($mixinDefinitionNode) { + array_shift($this->env->frames); + } + + function visitRuleset($rulesetNode, $visitArgs) { + array_unshift($this->env->frames,$rulesetNode); + return $rulesetNode; + } + + function visitRulesetOut($rulesetNode) { + array_shift($this->env->frames); + } + + function visitMedia($mediaNode, $visitArgs) { + array_unshift($this->env->frames, $mediaNode->ruleset); + return $mediaNode; + } + + function visitMediaOut($mediaNode) { + array_shift($this->env->frames); + } + +} +*/ + + diff --git a/vendor/oyejorge/less.php/lib/Less/Visitor/joinSelector.php b/vendor/oyejorge/less.php/lib/Less/Visitor/joinSelector.php new file mode 100644 index 00000000..f62af1a9 --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Visitor/joinSelector.php @@ -0,0 +1,70 @@ +visitObj($root); + } + + public function visitRule( $ruleNode, &$visitDeeper ){ + $visitDeeper = false; + } + + public function visitMixinDefinition( $mixinDefinitionNode, &$visitDeeper ){ + $visitDeeper = false; + } + + public function visitRuleset( $rulesetNode ){ + + $paths = array(); + + if( !$rulesetNode->root ){ + $selectors = array(); + + if( $rulesetNode->selectors && $rulesetNode->selectors ){ + foreach($rulesetNode->selectors as $selector){ + if( $selector->getIsOutput() ){ + $selectors[] = $selector; + } + } + } + + if( !$selectors ){ + $rulesetNode->selectors = null; + $rulesetNode->rules = null; + }else{ + $context = end($this->contexts); //$context = $this->contexts[ count($this->contexts) - 1]; + $paths = $rulesetNode->joinSelectors( $context, $selectors); + } + + $rulesetNode->paths = $paths; + } + + $this->contexts[] = $paths; //different from less.js. Placed after joinSelectors() so that $this->contexts will get correct $paths + } + + public function visitRulesetOut(){ + array_pop($this->contexts); + } + + public function visitMedia($mediaNode) { + $context = end($this->contexts); //$context = $this->contexts[ count($this->contexts) - 1]; + + if( !count($context) || (is_object($context[0]) && $context[0]->multiMedia) ){ + $mediaNode->rules[0]->root = true; + } + } + +} + diff --git a/vendor/oyejorge/less.php/lib/Less/Visitor/processExtends.php b/vendor/oyejorge/less.php/lib/Less/Visitor/processExtends.php new file mode 100644 index 00000000..c01f9c5d --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Visitor/processExtends.php @@ -0,0 +1,469 @@ +run( $root ); + if( !$extendFinder->foundExtends){ + return $root; + } + + $root->allExtends = $this->doExtendChaining( $root->allExtends, $root->allExtends); + + $this->allExtendsStack = array(); + $this->allExtendsStack[] = &$root->allExtends; + + return $this->visitObj( $root ); + } + + private function doExtendChaining( $extendsList, $extendsListTarget, $iterationCount = 0){ + // + // chaining is different from normal extension.. if we extend an extend then we are not just copying, altering and pasting + // the selector we would do normally, but we are also adding an extend with the same target selector + // this means this new extend can then go and alter other extends + // + // this method deals with all the chaining work - without it, extend is flat and doesn't work on other extend selectors + // this is also the most expensive.. and a match on one selector can cause an extension of a selector we had already processed if + // we look at each selector at a time, as is done in visitRuleset + + $extendsToAdd = array(); + + + //loop through comparing every extend with every target extend. + // a target extend is the one on the ruleset we are looking at copy/edit/pasting in place + // e.g. .a:extend(.b) {} and .b:extend(.c) {} then the first extend extends the second one + // and the second is the target. + // the seperation into two lists allows us to process a subset of chains with a bigger set, as is the + // case when processing media queries + for( $extendIndex = 0, $extendsList_len = count($extendsList); $extendIndex < $extendsList_len; $extendIndex++ ){ + for( $targetExtendIndex = 0; $targetExtendIndex < count($extendsListTarget); $targetExtendIndex++ ){ + + $extend = $extendsList[$extendIndex]; + $targetExtend = $extendsListTarget[$targetExtendIndex]; + + // look for circular references + if( in_array($targetExtend->object_id, $extend->parent_ids,true) ){ + continue; + } + + // find a match in the target extends self selector (the bit before :extend) + $selectorPath = array( $targetExtend->selfSelectors[0] ); + $matches = $this->findMatch( $extend, $selectorPath); + + + if( $matches ){ + + // we found a match, so for each self selector.. + foreach($extend->selfSelectors as $selfSelector ){ + + + // process the extend as usual + $newSelector = $this->extendSelector( $matches, $selectorPath, $selfSelector); + + // but now we create a new extend from it + $newExtend = new Less_Tree_Extend( $targetExtend->selector, $targetExtend->option, 0); + $newExtend->selfSelectors = $newSelector; + + // add the extend onto the list of extends for that selector + end($newSelector)->extendList = array($newExtend); + //$newSelector[ count($newSelector)-1]->extendList = array($newExtend); + + // record that we need to add it. + $extendsToAdd[] = $newExtend; + $newExtend->ruleset = $targetExtend->ruleset; + + //remember its parents for circular references + $newExtend->parent_ids = array_merge($newExtend->parent_ids,$targetExtend->parent_ids,$extend->parent_ids); + + // only process the selector once.. if we have :extend(.a,.b) then multiple + // extends will look at the same selector path, so when extending + // we know that any others will be duplicates in terms of what is added to the css + if( $targetExtend->firstExtendOnThisSelectorPath ){ + $newExtend->firstExtendOnThisSelectorPath = true; + $targetExtend->ruleset->paths[] = $newSelector; + } + } + } + } + } + + if( $extendsToAdd ){ + // try to detect circular references to stop a stack overflow. + // may no longer be needed. $this->extendChainCount++; + if( $iterationCount > 100) { + + try{ + $selectorOne = $extendsToAdd[0]->selfSelectors[0]->toCSS(); + $selectorTwo = $extendsToAdd[0]->selector->toCSS(); + }catch(Exception $e){ + $selectorOne = "{unable to calculate}"; + $selectorTwo = "{unable to calculate}"; + } + + throw new Less_Exception_Parser("extend circular reference detected. One of the circular extends is currently:"+$selectorOne+":extend(" + $selectorTwo+")"); + } + + // now process the new extends on the existing rules so that we can handle a extending b extending c ectending d extending e... + $extendsToAdd = $this->doExtendChaining( $extendsToAdd, $extendsListTarget, $iterationCount+1); + } + + return array_merge($extendsList, $extendsToAdd); + } + + + protected function visitRule( $ruleNode, &$visitDeeper ){ + $visitDeeper = false; + } + + protected function visitMixinDefinition( $mixinDefinitionNode, &$visitDeeper ){ + $visitDeeper = false; + } + + protected function visitSelector( $selectorNode, &$visitDeeper ){ + $visitDeeper = false; + } + + protected function visitRuleset($rulesetNode){ + + + if( $rulesetNode->root ){ + return; + } + + $allExtends = end($this->allExtendsStack); + $paths_len = count($rulesetNode->paths); + + // look at each selector path in the ruleset, find any extend matches and then copy, find and replace + foreach($allExtends as $allExtend){ + for($pathIndex = 0; $pathIndex < $paths_len; $pathIndex++ ){ + + // extending extends happens initially, before the main pass + if( isset($rulesetNode->extendOnEveryPath) && $rulesetNode->extendOnEveryPath ){ + continue; + } + + $selectorPath = $rulesetNode->paths[$pathIndex]; + + if( end($selectorPath)->extendList ){ + continue; + } + + $this->ExtendMatch( $rulesetNode, $allExtend, $selectorPath); + + } + } + } + + + private function ExtendMatch( $rulesetNode, $extend, $selectorPath ){ + $matches = $this->findMatch($extend, $selectorPath); + + if( $matches ){ + foreach($extend->selfSelectors as $selfSelector ){ + $rulesetNode->paths[] = $this->extendSelector($matches, $selectorPath, $selfSelector); + } + } + } + + + + private function findMatch($extend, $haystackSelectorPath ){ + + + if( !$this->HasMatches($extend, $haystackSelectorPath) ){ + return false; + } + + + // + // look through the haystack selector path to try and find the needle - extend.selector + // returns an array of selector matches that can then be replaced + // + $needleElements = $extend->selector->elements; + $potentialMatches = array(); + $potentialMatches_len = 0; + $potentialMatch = null; + $matches = array(); + + + + // loop through the haystack elements + $haystack_path_len = count($haystackSelectorPath); + for($haystackSelectorIndex = 0; $haystackSelectorIndex < $haystack_path_len; $haystackSelectorIndex++ ){ + $hackstackSelector = $haystackSelectorPath[$haystackSelectorIndex]; + + $haystack_elements_len = count($hackstackSelector->elements); + for($hackstackElementIndex = 0; $hackstackElementIndex < $haystack_elements_len; $hackstackElementIndex++ ){ + + $haystackElement = $hackstackSelector->elements[$hackstackElementIndex]; + + // if we allow elements before our match we can add a potential match every time. otherwise only at the first element. + if( $extend->allowBefore || ($haystackSelectorIndex === 0 && $hackstackElementIndex === 0) ){ + $potentialMatches[] = array('pathIndex'=> $haystackSelectorIndex, 'index'=> $hackstackElementIndex, 'matched'=> 0, 'initialCombinator'=> $haystackElement->combinator); + $potentialMatches_len++; + } + + for($i = 0; $i < $potentialMatches_len; $i++ ){ + + $potentialMatch = &$potentialMatches[$i]; + $potentialMatch = $this->PotentialMatch( $potentialMatch, $needleElements, $haystackElement, $hackstackElementIndex ); + + + // if we are still valid and have finished, test whether we have elements after and whether these are allowed + if( $potentialMatch && $potentialMatch['matched'] === $extend->selector->elements_len ){ + $potentialMatch['finished'] = true; + + if( !$extend->allowAfter && ($hackstackElementIndex+1 < $haystack_elements_len || $haystackSelectorIndex+1 < $haystack_path_len) ){ + $potentialMatch = null; + } + } + + // if null we remove, if not, we are still valid, so either push as a valid match or continue + if( $potentialMatch ){ + if( $potentialMatch['finished'] ){ + $potentialMatch['length'] = $extend->selector->elements_len; + $potentialMatch['endPathIndex'] = $haystackSelectorIndex; + $potentialMatch['endPathElementIndex'] = $hackstackElementIndex + 1; // index after end of match + $potentialMatches = array(); // we don't allow matches to overlap, so start matching again + $potentialMatches_len = 0; + $matches[] = $potentialMatch; + } + continue; + } + + array_splice($potentialMatches, $i, 1); + $potentialMatches_len--; + $i--; + } + } + } + + return $matches; + } + + + // Before going through all the nested loops, lets check to see if a match is possible + // Reduces Bootstrap 3.1 compile time from ~6.5s to ~5.6s + private function HasMatches($extend, $haystackSelectorPath){ + + if( !$extend->selector->cacheable ){ + return true; + } + + $first_el = $extend->selector->_oelements[0]; + + foreach($haystackSelectorPath as $hackstackSelector){ + if( !$hackstackSelector->cacheable ){ + return true; + } + + if( in_array($first_el, $hackstackSelector->_oelements) ){ + return true; + } + } + + return false; + } + + + /** + * @param integer $hackstackElementIndex + */ + private function PotentialMatch( $potentialMatch, $needleElements, $haystackElement, $hackstackElementIndex ){ + + + if( $potentialMatch['matched'] > 0 ){ + + // selectors add " " onto the first element. When we use & it joins the selectors together, but if we don't + // then each selector in haystackSelectorPath has a space before it added in the toCSS phase. so we need to work out + // what the resulting combinator will be + $targetCombinator = $haystackElement->combinator; + if( $targetCombinator === '' && $hackstackElementIndex === 0 ){ + $targetCombinator = ' '; + } + + if( $needleElements[ $potentialMatch['matched'] ]->combinator !== $targetCombinator ){ + return null; + } + } + + // if we don't match, null our match to indicate failure + if( !$this->isElementValuesEqual( $needleElements[$potentialMatch['matched'] ]->value, $haystackElement->value) ){ + return null; + } + + $potentialMatch['finished'] = false; + $potentialMatch['matched']++; + + return $potentialMatch; + } + + + private function isElementValuesEqual( $elementValue1, $elementValue2 ){ + + if( $elementValue1 === $elementValue2 ){ + return true; + } + + if( is_string($elementValue1) || is_string($elementValue2) ) { + return false; + } + + if( $elementValue1 instanceof Less_Tree_Attribute ){ + return $this->isAttributeValuesEqual( $elementValue1, $elementValue2 ); + } + + $elementValue1 = $elementValue1->value; + if( $elementValue1 instanceof Less_Tree_Selector ){ + return $this->isSelectorValuesEqual( $elementValue1, $elementValue2 ); + } + + return false; + } + + + /** + * @param Less_Tree_Selector $elementValue1 + */ + private function isSelectorValuesEqual( $elementValue1, $elementValue2 ){ + + $elementValue2 = $elementValue2->value; + if( !($elementValue2 instanceof Less_Tree_Selector) || $elementValue1->elements_len !== $elementValue2->elements_len ){ + return false; + } + + for( $i = 0; $i < $elementValue1->elements_len; $i++ ){ + + if( $elementValue1->elements[$i]->combinator !== $elementValue2->elements[$i]->combinator ){ + if( $i !== 0 || ($elementValue1->elements[$i]->combinator || ' ') !== ($elementValue2->elements[$i]->combinator || ' ') ){ + return false; + } + } + + if( !$this->isElementValuesEqual($elementValue1->elements[$i]->value, $elementValue2->elements[$i]->value) ){ + return false; + } + } + + return true; + } + + + /** + * @param Less_Tree_Attribute $elementValue1 + */ + private function isAttributeValuesEqual( $elementValue1, $elementValue2 ){ + + if( $elementValue1->op !== $elementValue2->op || $elementValue1->key !== $elementValue2->key ){ + return false; + } + + if( !$elementValue1->value || !$elementValue2->value ){ + if( $elementValue1->value || $elementValue2->value ) { + return false; + } + return true; + } + + $elementValue1 = ($elementValue1->value->value ? $elementValue1->value->value : $elementValue1->value ); + $elementValue2 = ($elementValue2->value->value ? $elementValue2->value->value : $elementValue2->value ); + + return $elementValue1 === $elementValue2; + } + + + private function extendSelector($matches, $selectorPath, $replacementSelector){ + + //for a set of matches, replace each match with the replacement selector + + $currentSelectorPathIndex = 0; + $currentSelectorPathElementIndex = 0; + $path = array(); + $selectorPath_len = count($selectorPath); + + for($matchIndex = 0, $matches_len = count($matches); $matchIndex < $matches_len; $matchIndex++ ){ + + + $match = $matches[$matchIndex]; + $selector = $selectorPath[ $match['pathIndex'] ]; + + $firstElement = new Less_Tree_Element( + $match['initialCombinator'], + $replacementSelector->elements[0]->value, + $replacementSelector->elements[0]->index, + $replacementSelector->elements[0]->currentFileInfo + ); + + if( $match['pathIndex'] > $currentSelectorPathIndex && $currentSelectorPathElementIndex > 0 ){ + $last_path = end($path); + $last_path->elements = array_merge( $last_path->elements, array_slice( $selectorPath[$currentSelectorPathIndex]->elements, $currentSelectorPathElementIndex)); + $currentSelectorPathElementIndex = 0; + $currentSelectorPathIndex++; + } + + $newElements = array_merge( + array_slice($selector->elements, $currentSelectorPathElementIndex, ($match['index'] - $currentSelectorPathElementIndex) ) // last parameter of array_slice is different than the last parameter of javascript's slice + , array($firstElement) + , array_slice($replacementSelector->elements,1) + ); + + if( $currentSelectorPathIndex === $match['pathIndex'] && $matchIndex > 0 ){ + $last_key = count($path)-1; + $path[$last_key]->elements = array_merge($path[$last_key]->elements,$newElements); + }else{ + $path = array_merge( $path, array_slice( $selectorPath, $currentSelectorPathIndex, $match['pathIndex'] )); + $path[] = new Less_Tree_Selector( $newElements ); + } + + $currentSelectorPathIndex = $match['endPathIndex']; + $currentSelectorPathElementIndex = $match['endPathElementIndex']; + if( $currentSelectorPathElementIndex >= count($selectorPath[$currentSelectorPathIndex]->elements) ){ + $currentSelectorPathElementIndex = 0; + $currentSelectorPathIndex++; + } + } + + if( $currentSelectorPathIndex < $selectorPath_len && $currentSelectorPathElementIndex > 0 ){ + $last_path = end($path); + $last_path->elements = array_merge( $last_path->elements, array_slice($selectorPath[$currentSelectorPathIndex]->elements, $currentSelectorPathElementIndex)); + $currentSelectorPathIndex++; + } + + $slice_len = $selectorPath_len - $currentSelectorPathIndex; + $path = array_merge($path, array_slice($selectorPath, $currentSelectorPathIndex, $slice_len)); + + return $path; + } + + + protected function visitMedia( $mediaNode ){ + $newAllExtends = array_merge( $mediaNode->allExtends, end($this->allExtendsStack) ); + $this->allExtendsStack[] = $this->doExtendChaining($newAllExtends, $mediaNode->allExtends); + } + + protected function visitMediaOut(){ + array_pop( $this->allExtendsStack ); + } + + protected function visitDirective( $directiveNode ){ + $newAllExtends = array_merge( $directiveNode->allExtends, end($this->allExtendsStack) ); + $this->allExtendsStack[] = $this->doExtendChaining($newAllExtends, $directiveNode->allExtends); + } + + protected function visitDirectiveOut(){ + array_pop($this->allExtendsStack); + } + +} \ No newline at end of file diff --git a/vendor/oyejorge/less.php/lib/Less/Visitor/toCSS.php b/vendor/oyejorge/less.php/lib/Less/Visitor/toCSS.php new file mode 100644 index 00000000..18d328ff --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/Visitor/toCSS.php @@ -0,0 +1,292 @@ +visitObj($root); + } + + public function visitRule( $ruleNode ){ + if( $ruleNode->variable ){ + return array(); + } + return $ruleNode; + } + + public function visitMixinDefinition($mixinNode){ + // mixin definitions do not get eval'd - this means they keep state + // so we have to clear that state here so it isn't used if toCSS is called twice + $mixinNode->frames = array(); + return array(); + } + + public function visitExtend(){ + return array(); + } + + public function visitComment( $commentNode ){ + if( $commentNode->isSilent() ){ + return array(); + } + return $commentNode; + } + + public function visitMedia( $mediaNode, &$visitDeeper ){ + $mediaNode->accept($this); + $visitDeeper = false; + + if( !$mediaNode->rules ){ + return array(); + } + return $mediaNode; + } + + public function visitDirective( $directiveNode ){ + if( isset($directiveNode->currentFileInfo['reference']) && (!property_exists($directiveNode,'isReferenced') || !$directiveNode->isReferenced) ){ + return array(); + } + if( $directiveNode->name === '@charset' ){ + // Only output the debug info together with subsequent @charset definitions + // a comment (or @media statement) before the actual @charset directive would + // be considered illegal css as it has to be on the first line + if( isset($this->charset) && $this->charset ){ + + //if( $directiveNode->debugInfo ){ + // $comment = new Less_Tree_Comment('/* ' . str_replace("\n",'',$directiveNode->toCSS())." */\n"); + // $comment->debugInfo = $directiveNode->debugInfo; + // return $this->visit($comment); + //} + + + return array(); + } + $this->charset = true; + } + return $directiveNode; + } + + public function checkPropertiesInRoot( $rulesetNode ){ + + if( !$rulesetNode->firstRoot ){ + return; + } + + foreach($rulesetNode->rules as $ruleNode){ + if( $ruleNode instanceof Less_Tree_Rule && !$ruleNode->variable ){ + $msg = "properties must be inside selector blocks, they cannot be in the root. Index ".$ruleNode->index.($ruleNode->currentFileInfo ? (' Filename: '.$ruleNode->currentFileInfo['filename']) : null); + throw new Less_Exception_Compiler($msg); + } + } + } + + + public function visitRuleset( $rulesetNode, &$visitDeeper ){ + + $visitDeeper = false; + + $this->checkPropertiesInRoot( $rulesetNode ); + + if( $rulesetNode->root ){ + return $this->visitRulesetRoot( $rulesetNode ); + } + + $rulesets = array(); + $rulesetNode->paths = $this->visitRulesetPaths($rulesetNode); + + + // Compile rules and rulesets + $nodeRuleCnt = count($rulesetNode->rules); + for( $i = 0; $i < $nodeRuleCnt; ){ + $rule = $rulesetNode->rules[$i]; + + if( property_exists($rule,'rules') ){ + // visit because we are moving them out from being a child + $rulesets[] = $this->visitObj($rule); + array_splice($rulesetNode->rules,$i,1); + $nodeRuleCnt--; + continue; + } + $i++; + } + + + // accept the visitor to remove rules and refactor itself + // then we can decide now whether we want it or not + if( $nodeRuleCnt > 0 ){ + $rulesetNode->accept($this); + + if( $rulesetNode->rules ){ + + if( count($rulesetNode->rules) > 1 ){ + $this->_mergeRules( $rulesetNode->rules ); + $this->_removeDuplicateRules( $rulesetNode->rules ); + } + + // now decide whether we keep the ruleset + if( $rulesetNode->paths ){ + //array_unshift($rulesets, $rulesetNode); + array_splice($rulesets,0,0,array($rulesetNode)); + } + } + + } + + + if( count($rulesets) === 1 ){ + return $rulesets[0]; + } + return $rulesets; + } + + + /** + * Helper function for visitiRuleset + * + * return array|Less_Tree_Ruleset + */ + private function visitRulesetRoot( $rulesetNode ){ + $rulesetNode->accept( $this ); + if( $rulesetNode->firstRoot || $rulesetNode->rules ){ + return $rulesetNode; + } + return array(); + } + + + /** + * Helper function for visitRuleset() + * + * @return array + */ + private function visitRulesetPaths($rulesetNode){ + + $paths = array(); + foreach($rulesetNode->paths as $p){ + if( $p[0]->elements[0]->combinator === ' ' ){ + $p[0]->elements[0]->combinator = ''; + } + + foreach($p as $pi){ + if( $pi->getIsReferenced() && $pi->getIsOutput() ){ + $paths[] = $p; + break; + } + } + } + + return $paths; + } + + protected function _removeDuplicateRules( &$rules ){ + // remove duplicates + $ruleCache = array(); + for( $i = count($rules)-1; $i >= 0 ; $i-- ){ + $rule = $rules[$i]; + if( $rule instanceof Less_Tree_Rule || $rule instanceof Less_Tree_NameValue ){ + + if( !isset($ruleCache[$rule->name]) ){ + $ruleCache[$rule->name] = $rule; + }else{ + $ruleList =& $ruleCache[$rule->name]; + + if( $ruleList instanceof Less_Tree_Rule || $ruleList instanceof Less_Tree_NameValue ){ + $ruleList = $ruleCache[$rule->name] = array( $ruleCache[$rule->name]->toCSS() ); + } + + $ruleCSS = $rule->toCSS(); + if( array_search($ruleCSS,$ruleList) !== false ){ + array_splice($rules,$i,1); + }else{ + $ruleList[] = $ruleCSS; + } + } + } + } + } + + protected function _mergeRules( &$rules ){ + $groups = array(); + + //obj($rules); + + $rules_len = count($rules); + for( $i = 0; $i < $rules_len; $i++ ){ + $rule = $rules[$i]; + + if( ($rule instanceof Less_Tree_Rule) && $rule->merge ){ + + $key = $rule->name; + if( $rule->important ){ + $key .= ',!'; + } + + if( !isset($groups[$key]) ){ + $groups[$key] = array(); + }else{ + array_splice($rules, $i--, 1); + $rules_len--; + } + + $groups[$key][] = $rule; + } + } + + + foreach($groups as $parts){ + + if( count($parts) > 1 ){ + $rule = $parts[0]; + $spacedGroups = array(); + $lastSpacedGroup = array(); + $parts_mapped = array(); + foreach($parts as $p){ + if( $p->merge === '+' ){ + if( $lastSpacedGroup ){ + $spacedGroups[] = self::toExpression($lastSpacedGroup); + } + $lastSpacedGroup = array(); + } + $lastSpacedGroup[] = $p; + } + + $spacedGroups[] = self::toExpression($lastSpacedGroup); + $rule->value = self::toValue($spacedGroups); + } + } + + } + + public static function toExpression($values){ + $mapped = array(); + foreach($values as $p){ + $mapped[] = $p->value; + } + return new Less_Tree_Expression( $mapped ); + } + + public static function toValue($values){ + //return new Less_Tree_Value($values); ?? + + $mapped = array(); + foreach($values as $p){ + $mapped[] = $p; + } + return new Less_Tree_Value($mapped); + } +} + diff --git a/vendor/oyejorge/less.php/lib/Less/VisitorReplacing.php b/vendor/oyejorge/less.php/lib/Less/VisitorReplacing.php new file mode 100644 index 00000000..5923170e --- /dev/null +++ b/vendor/oyejorge/less.php/lib/Less/VisitorReplacing.php @@ -0,0 +1,75 @@ +type; + if( isset($this->_visitFnCache[$funcName]) ){ + + $visitDeeper = true; + $node = $this->$funcName( $node, $visitDeeper ); + + if( $node ){ + if( $visitDeeper && is_object($node) ){ + $node->accept($this); + } + + $funcName = $funcName . "Out"; + if( isset($this->_visitFnCache[$funcName]) ){ + $this->$funcName( $node ); + } + } + + }else{ + $node->accept($this); + } + + return $node; + } + + public function visitArray( $nodes ){ + + $newNodes = array(); + foreach($nodes as $node){ + $evald = $this->visitObj($node); + if( $evald ){ + if( is_array($evald) ){ + self::flatten($evald,$newNodes); + }else{ + $newNodes[] = $evald; + } + } + } + return $newNodes; + } + + public function flatten( $arr, &$out ){ + + foreach($arr as $item){ + if( !is_array($item) ){ + $out[] = $item; + continue; + } + + foreach($item as $nestedItem){ + if( is_array($nestedItem) ){ + self::flatten( $nestedItem, $out); + }else{ + $out[] = $nestedItem; + } + } + } + + return $out; + } + +} + + diff --git a/vendor/psr/log/Psr/Log/LoggerAwareTrait.php b/vendor/psr/log/Psr/Log/LoggerAwareTrait.php deleted file mode 100644 index f087a3da..00000000 --- a/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +++ /dev/null @@ -1,22 +0,0 @@ -logger = $logger; - } -} diff --git a/vendor/psr/log/Psr/Log/LoggerTrait.php b/vendor/psr/log/Psr/Log/LoggerTrait.php deleted file mode 100644 index 59124960..00000000 --- a/vendor/psr/log/Psr/Log/LoggerTrait.php +++ /dev/null @@ -1,131 +0,0 @@ -log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param array $context - * @return null - */ - public function alert($message, array $context = array()) - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param array $context - * @return null - */ - public function critical($message, array $context = array()) - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param array $context - * @return null - */ - public function error($message, array $context = array()) - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param array $context - * @return null - */ - public function warning($message, array $context = array()) - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string $message - * @param array $context - * @return null - */ - public function notice($message, array $context = array()) - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param array $context - * @return null - */ - public function info($message, array $context = array()) - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string $message - * @param array $context - * @return null - */ - public function debug($message, array $context = array()) - { - $this->log(LogLevel::DEBUG, $message, $context); - } - - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string $message - * @param array $context - * @return null - */ - abstract public function log($level, $message, array $context = array()); -} diff --git a/vendor/ruflin/elastica/CHANGELOG.md b/vendor/ruflin/elastica/CHANGELOG.md new file mode 100644 index 00000000..1ea98234 --- /dev/null +++ b/vendor/ruflin/elastica/CHANGELOG.md @@ -0,0 +1,1038 @@ +# Change Log +All notable changes to this project will be documented in this file based on the [Keep a Changelog](http://keepachangelog.com/) Standard. This project adheres to [Semantic Versioning](http://semver.org/). + +## [Unreleased](https://github.com/ruflin/Elastica/compare/2.2.0...HEAD) + +### Backward Compatibility Breaks + +### Bugfixes + +### Added + +### Improvements + +### Deprecated + + +## [2.2.0](https://github.com/ruflin/Elastica/releases/tag/2.2.0) - 2015-07-08 + + +### Backward Compatibility Breaks +- Usage of constant DEBUG and method Elastica\Util::debugEnabled is removed. [#868](https://github.com/ruflin/Elastica/pull/868) +- Elastica\Response::getTransferInfo will not return "request_header" by default. [#868](https://github.com/ruflin/Elastica/pull/868) +- The Image Plugin is currently not compatible with Elasticearch 1.6.0 + +### Bugfixes +- Fixed segmentation fault in PHP7 [#868](https://github.com/ruflin/Elastica/pull/868) +- Removed deprecation for Elastica\Type::deleteByQuery [#875](https://github.com/ruflin/Elastica/pull/875) + +### Improvements +- `CallbackStrategy` now will accept any `callable` as callback, not only instance of `Closure`. [#871](https://github.com/ruflin/Elastica/pull/871) +- `StrategyFactory` now will try to find predefined strategy before looking to global namespace. [#877](https://github.com/ruflin/Elastica/pull/877) +- Update elasticsearch dependency to elasticsearch 1.6.0 https://www.elastic.co/downloads/past-releases/elasticsearch-1-6-0 +- All elasticsearch plugin dependencies were updated to the newest version. +- Methods of classes in `QueryBuilder\DSL` namespace now have exact same signatures as corresponding constructors. [#878](https://github.com/ruflin/Elastica/pull/878) +- Constructor of `Aggregation\Filter` now accepts filter as second parameter [#878](https://github.com/ruflin/Elastica/pull/878) +- Constructor of `Filter\AbstractMulti` (`BoolAnd`, `BooldOr`) now accepts array of filters as parameter [#878](https://github.com/ruflin/Elastica/pull/878) +- Constructor of `Query\Match` now accepts arguments [#878](https://github.com/ruflin/Elastica/pull/878) +- Coverage Reporting improved with Codecov [#888](https://github.com/ruflin/Elastica/pull/888) +- Added 'query_cache' option for search [#886](https://github.com/ruflin/Elastica/pull/886) + +## [2.1.0](https://github.com/ruflin/Elastica/releases/tag/2.1.0) - 2015-06-01 + +### Added +- Multiple rescore query [#820](https://github.com/ruflin/Elastica/issues/820/) +- Support for a custom connection timeout through a connectTimeout parameter. [#841](https://github.com/ruflin/Elastica/issues/841/) +- SignificantTerms Aggregation [#847](https://github.com/ruflin/Elastica/issues/847/) +- Support for 'precision_threshold' and 'rehash' options for the Cardinality Aggregation [#851] +- Support for retrieving id node #852 +- Scroll Iterator [#842](https://github.com/ruflin/Elastica/issues/842/) +- Gitter Elastica Chat Room add for Elastica discussions: https://gitter.im/ruflin/Elastica +- Introduce PHP7 compatibility and tests. #837 +- `Tool\CrossIndex` for reindexing and copying data and mapping between indices [#853](https://github.com/ruflin/Elastica/pull/853) +- CONTIRUBTING.md file added for contributor guidelines. #854 + +### Improvements +- Introduction of Changelog standard based on http://keepachangelog.com/. changes.txt moved to CHANGELOG.md [#844](https://github.com/ruflin/Elastica/issues/844/) +- Make host for all tests dynamic to prepare it for a more dynamic test environment #846 +- Node information is retrieved based on id instead of name as multiple nodes can have the same name. #852 +- Guzzle Http dependency updated to 5.3.* +- Remove NO_DEV builds from travis build matrix to speed up building. All builds include no dev packages. +- Introduction of benchmark test group to make it easy to run benchmark tests. +- Make the docker images directly [available](https://hub.docker.com/u/ruflin/) on the docker registry. This speeds up fetching of the images and automates the build of the images. + +### Backward Compatibility Breaks +- `Elastica\ScanAndScroll::$_lastScrollId` removed: `key()` now always returns the next scroll id [#842](https://github.com/ruflin/Elastica/issues/842/) + + +### Deprecated +- Facets are deprecated. You are encouraged to migrate to aggregations instead. [#855](https://github.com/ruflin/Elastica/pull/855/) +- Elastica\Query\Builder is deprecated. Use new Elastica\QueryBuilder instead. [#855](https://github.com/ruflin/Elastica/pull/855/) +- For PHP 7 compatibility Elastica\Query\Bool was renamed to *\BoolQuery, Elastica\Filter\Bool was renamed to BoolFilter, Elastica\Transport\Null was renamed to NullTransport as Null and Bool are reserved phrases in PHP 7. Proxy objects for all three exist to keep backward compatibility. It is recommended to start using the new objects as the proxy classes will be deprecated as soon as PHP 7 is stable. #837 + + + +## [2.0.0](https://github.com/ruflin/Elastica/releases/tag/2.0.0) - 2015-05-11 + + +### Backward Compatibility Breaks +- Elastica\Query\QueryString::setLowercaseExpandedTerms removed [#813](https://github.com/ruflin/Elastica/issues/813/) +- Update elasticsearch dependency to elasticsearch 1.5.2 https://www.elastic.co/downloads/past-releases/elasticsearch-1-5-2 [#834](https://github.com/ruflin/Elastica/issues/834/) +- Added deprecation notice to Elastica\Transport\Thrift, Elastica\Transport\Memcached and Elastica\Type::deleteByQuery [#817](https://github.com/ruflin/Elastica/issues/817/) +- Escape new symbols in Util::escapeTerm [#795](https://github.com/ruflin/Elastica/issues/795/) + +### Bugfixes +- Fix empty bool query to act as match all query [#817](https://github.com/ruflin/Elastica/issues/817/) +- Fixed short match construction in query DSL [#796](https://github.com/ruflin/Elastica/issues/796/) +- Index optimize method to return Response object. [#797](https://github.com/ruflin/Elastica/issues/797/) +- Fix fluent interface inconsistency [#788](https://github.com/ruflin/Elastica/issues/788/) + + +### Improvements +- Add testing on PHP 7 on Travis [#826](https://github.com/ruflin/Elastica/issues/826/) +- Allow bool in Query::setSource function [#818](https://github.com/ruflin/Elastica/issues/818/) http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-source-filtering.html +- deleteByQuery() implemented in Elastica\Index [#816](https://github.com/ruflin/Elastica/issues/816/) +- Add MLT query against documents [#814](https://github.com/ruflin/Elastica/issues/814/) +- Added Elastica\Query\SimpleQueryString::setMinimumShouldMatch [#813](https://github.com/ruflin/Elastica/issues/813/) +- Added Elastica\Query\FunctionScore::setMinScore [#813](https://github.com/ruflin/Elastica/issues/813/) +- Added Elastica\Query\MoreLikeThis::setMinimumShouldMatch [#813](https://github.com/ruflin/Elastica/issues/813/) +- Added new methods to Elastica\Aggregation\DateHistogram: setOffset, setTimezone [#813](https://github.com/ruflin/Elastica/issues/813/) +- Following methods in Elastica\Aggregation\DateHistogram marked as deprecated: setPreOffset, setPostOffset, setPreZone, setPostZone, setPreZoneAdjustLargeInterval [#813](https://github.com/ruflin/Elastica/issues/813/) +- Add Elastica\Facet\DateHistogram::setFactor() [#806](https://github.com/ruflin/Elastica/issues/806/) +- Added Elastica\Query\QueryString::setTimezone [#813](https://github.com/ruflin/Elastica/issues/813/) +- Add .editorconfig [#807](https://github.com/ruflin/Elastica/issues/807/) +- Added Elastica\Suggest\Completion [#808](https://github.com/ruflin/Elastica/issues/808/) +- Fix elasticsearch links to elastic domain [#809](https://github.com/ruflin/Elastica/issues/809/) +- Added Elastica\Query\Image [#787](https://github.com/ruflin/Elastica/issues/787/) +- Add Scrutinizer Code Quality status badge +- Added support for percentiles aggregation [#786](https://github.com/ruflin/Elastica/issues/786/) + + + +## Changelog before 2.0.0 +The changelog before version 2.0.0 was organised by date. All changes can be found below. + +2015-02-17 +- Release v1.4.3.0 +- Added Elastica\Query\MatchPhrase [#599](https://github.com/ruflin/Elastica/issues/599/) +- Added Elastica\Query\MatchPhrasePrefix [#599](https://github.com/ruflin/Elastica/issues/599/) + +2015-02-04 +- Reset PHP 5.3 tests and enable compatibility for PHP 5.3 again + +2015-02-16 +- Update elasticsearch compatibility to 1.4.3 [#782](https://github.com/ruflin/Elastica/issues/782/) +- Add support for scripted metric aggrations [#780](https://github.com/ruflin/Elastica/issues/780/) + +2015-02-14 +- Added availability to specify regexp options in \Elastica\Filters\Regexp [#583](https://github.com/ruflin/Elastica/issues/583/) [#777](https://github.com/ruflin/Elastica/issues/777/) +- Add HHVM as build in travis [#649](https://github.com/ruflin/Elastica/issues/649/) + +2015-02-11 +- Fixed issue with OutOfMemory exception in travis builds [#775](https://github.com/ruflin/Elastica/issues/775/) +- Add support for filters aggregation [#773](https://github.com/ruflin/Elastica/issues/773/) + +2015-01-27 +- Housekeeping, coding standard [#764](https://github.com/ruflin/Elastica/issues/764/) +- Exception\ElasticsearchException now can be catched like all other exceptions as Exception\ExceptionInterface [#762](https://github.com/ruflin/Elastica/issues/762/) + +2015-01-25 +- Release v1.4.2.0 + +2015-01-23 +- Added Elastica\Query\Regexp [#757](https://github.com/ruflin/Elastica/issues/757/) + +2015-01-19 +- Update to elasticsearch 1.4.2 [#378](https://github.com/ruflin/Elastica/issues/378/) +- Remove support for PHP 5.3 + +2015-01-14 +- added @return annotation to top_hits aggregation DSL method [#752](https://github.com/ruflin/Elastica/issues/752/) + +2015-01-07 +- Added Elastica\Aggregation\TopHits [#718](https://github.com/ruflin/Elastica/issues/718/) + +2015-01-05 +- Vagrantfile updated [#742](https://github.com/ruflin/Elastica/issues/742/) +- Plugins updated to ES 1.3.4 +- Since new version of thrift plugin is compatible with ES 1.3.4, plugin added back to test environment + +2014-12-30 +- Added: Filter\Range::setExecution, Filter\Terms::setExecution, Filter\Missing::setExistence, Filter\Missing::setNullValue, Filter\HasChild::setMinumumChildrenCount, Filter\HasChild::Filter\HasChild::setMaximumChildrenCount, Filter\Indices::addIndex +- Filter\HasChild::setType, Filter\HasParent::setType now support Type instance as argument +- Filter\Indices::setIndices, Filter\Indices::addIndex now support Index instance as argument +- (BC break) Removed as added by mistake: Filter\HasChild::setScope, Filter\HasParent::setScope, Filter\Nested::setScoreMode, Filter\Bool::setBoost + +2014-12-23 +- Additional Request Body Options for Percolator [#737](https://github.com/ruflin/Elastica/issues/737/) + +2014-12-19 +- making sure id is urlencoded when using updateDocument [#734](https://github.com/ruflin/Elastica/issues/734/) +- Implement the `weight` in the function score query [#735](https://github.com/ruflin/Elastica/issues/735/) + +2014-12-09 +- Changed setRealWorldErrorLikelihood to setRealWordErrorLikelihood [#729](https://github.com/ruflin/Elastica/issues/729/) + +2014-11-23 +- allow to customize the key on a range aggregation [#728](https://github.com/ruflin/Elastica/issues/728/) + +2014-12-14 +- Added fluent interface to Elastica\Query::setRescore [#733](https://github.com/ruflin/Elastica/issues/733/) + +2014-11-30 +- Added transport to support egeloen/http-adapter [#727](https://github.com/ruflin/Elastica/issues/727/) + +2014-11-20 +- add cache control parameters support to Elastica\Filter\Bool [#725](https://github.com/ruflin/Elastica/issues/725/) + +2014-11-19 +- Avoid remove previously added params when adding a suggest to the query [#726](https://github.com/ruflin/Elastica/issues/726/) + +2014-11-16 +- Added Elastica\QueryBuilder [#724](https://github.com/ruflin/Elastica/issues/724/) +- Update to elasticsearch 1.4.0 +- Disable official support for PHP 5.3 + +2014-11-13 +- fixed reserved words in queries which composed of upper case letters (Util::replaceBooleanWords) [#722](https://github.com/ruflin/Elastica/issues/722/) + +2014-10-31 +- Adding PSR-4 autoloading support [#714](https://github.com/ruflin/Elastica/issues/714/) + +2014-10-29 +- Updated Type::getDocument() exception handling. \Elastica\Exception\ResponseException will be thrown instead of \Elastica\Exception\NotFoundException if the ES response contains any error (i.e: Missing index) (BC break) [#687](https://github.com/ruflin/Elastica/issues/687/) + +2014-10-22 +- Added Util::convertDateTimeObject to Util class to easily convert \DateTime objects to required format [#709](https://github.com/ruflin/Elastica/issues/709/) + +2014-10-15 +- Remove ResponseException catch in Type::getDocument() [#704](https://github.com/ruflin/Elastica/issues/704/) + +2014-10-10 +- Fixed Response::isOk() to work better with bulk update api [#702](https://github.com/ruflin/Elastica/issues/702/) +- Adding magic __call() [#700](https://github.com/ruflin/Elastica/issues/700/) + +2014-10-05 +- ResultSet creation moved to static ResultSet::create() method [#690](https://github.com/ruflin/Elastica/issues/690/) +- Accept an options array at Type::updateDocument() [#686](https://github.com/ruflin/Elastica/issues/686/) +- Improve exception handling in Type::getDocument() [#693](https://github.com/ruflin/Elastica/issues/693/) + +2014-10-04 +- Release v1.3.4.0 +- Update to elasticsearch 1.3.4 [#691](https://github.com/ruflin/Elastica/issues/691/) + +2014-09-22 +- Update the branch alias in composer.json to match the library version [#683](https://github.com/ruflin/Elastica/issues/683/) + +2014-09-16 +- Update license in composer.json to match project [#681](https://github.com/ruflin/Elastica/issues/681/) + +2014-09-08 +- Delete execution permission from non-executable files [#677](https://github.com/ruflin/Elastica/issues/677/) + +2014-08-25 +- Top-level filter parameter in search has been renamed to post_filter [#669](https://github.com/ruflin/Elastica/issues/669/) [#670](https://github.com/ruflin/Elastica/issues/670/) +- Deprecated: Elastica\Query::setFilter() is deprecated. Use Elastica\Query::setPostFilter() instead. [#669](https://github.com/ruflin/Elastica/issues/669/) +- Deprecated: Elastica\Query::setPostFilter() passing filter as array is deprecated. Pass instance of AbstractFilter instead. [#669](https://github.com/ruflin/Elastica/issues/669/) + +2014-08-22 +- Fixed escaping of / character in Elastica\Util::escapeTerm(), removed usage of JSON_UNESCAPED_SLASHES in Elastica\JSON [#660](https://github.com/ruflin/Elastica/issues/660/) + +2014-08-06 +- Add connection pool and connection strategy + +2014-07-26 +- Release v1.3.0.0 +- Prepare Elastica Release v1.3.0.0 + +2014-07-25 +- Update to elasticsearch version 1.3.0 https://www.elastic.co/downloads/past-releases/1-3-0 + +2014-07-14 + - Add setQuery() method to Elastica\Query\ConstantScore [#653](https://github.com/ruflin/Elastica/issues/653/) + +2014-07-12 + - Be able to configure ES host/port via ENV var in test env [#652](https://github.com/ruflin/Elastica/issues/652/) + +2014-07-07 + - Fix FunstionScore Query random_score without seed bug. [#647](https://github.com/ruflin/Elastica/issues/647/) + +2014-07-02 +- Add setPostFilter method to Elastica\Query (http://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html) [#645](https://github.com/ruflin/Elastica/issues/645/) + +2014-06-30 +- Add Reverse Nested aggregation (http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-reverse-nested-aggregation.html). [#642](https://github.com/ruflin/Elastica/issues/642/) + +2014-06-14 +- Release v1.2.1.0 +- Removed the requirement to set arguments filter and/or query in Filtered, according to the documentation: http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html [#616](https://github.com/ruflin/Elastica/issues/616/) + +2014-06-13 +- Stop ClientTest->testDeleteIdsIdxStringTypeString from failing 1/3 of the time [#634](https://github.com/ruflin/Elastica/issues/634/) +- Stop ScanAndScrollTest->testQuerySizeOverride from failing frequently for no reason [#635](https://github.com/ruflin/Elastica/issues/635/) +- rework Document and Script so they can share some infrastructure allowing scripts to specify things like _retry_on_conflict and _routing [#629](https://github.com/ruflin/Elastica/issues/629/) + +2014-06-11 +- Allow bulk API deletes to be routed [#631](https://github.com/ruflin/Elastica/issues/631/) + +2014-06-10 +- Update travis to elasticsearch 1.2.1, disable Thrift plugin as not compatible and fix incompatible tests + +2014-06-04 +- Implement Boosting Query (http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html) [#625](https://github.com/ruflin/Elastica/issues/625/) + +2014-06-02 +- add retry_on_conflict support to bulk [#623](https://github.com/ruflin/Elastica/issues/623/) + +2014-06-01 +- toString updated to consider doc_as_upsert if sent an array source [#622](https://github.com/ruflin/Elastica/issues/622/) + +2014-05-27 +- Fix Aggragations/Filter to work with es v1.2.0 [#619](https://github.com/ruflin/Elastica/issues/619/) + +2014-05-25 +- Added Guzzle transport as an alternative to the default Http transport [#618](https://github.com/ruflin/Elastica/issues/618/) +- Added Elastica\ScanAndScroll Iterator (http://www.elastic.co/guide/en/elasticsearch/guide/current/scan-scroll.html) [#617](https://github.com/ruflin/Elastica/issues/617/) + +2014-05-13 +- Add JSON compat library; Elasticsearch JSON flags and nicer error handling [#614](https://github.com/ruflin/Elastica/issues/614/) + +2014-05-12 +- Update dev builds to phpunit 4.1.* + +2014-05-11 +- Set processIsolation and backupGlobals to false to speed up tests. processIsolation was very slow with phpunit 4.0.19. + +2014-05-05 +- Fix get settings on alaised index [#608](https://github.com/ruflin/Elastica/issues/608/) +- Added named function for source filtering [#605](https://github.com/ruflin/Elastica/issues/605/) +- Scroll type constant to Elastica\Search added [#607](https://github.com/ruflin/Elastica/issues/607/) + +2014-04-28 +- Added setAnalyzer method to Query\FuzzyLikeThis Class and fixed issue with params not being merged [#611](https://github.com/ruflin/Elastica/issues/611/) +- Typo fixes [#600](https://github.com/ruflin/Elastica/issues/600/), [#602](https://github.com/ruflin/Elastica/issues/602/) +- Remove unreachable return statement [#598](https://github.com/ruflin/Elastica/issues/598/) + +2014-04-27 +- Release v1.1.1.1 +- Fix missing use in TermsStats->setOrder() [#597](https://github.com/ruflin/Elastica/issues/597/) +- Replace all instances of ElasticSearch with Elasticsearch [#597](https://github.com/ruflin/Elastica/issues/597/) + +2014-04-24 +- Fixing the Bool filter with Bool filter children bug [#594](https://github.com/ruflin/Elastica/issues/594/) + +2014-04-22 +- Remove useless echo in the Memcache Transport object [#595](https://github.com/ruflin/Elastica/issues/595/) + +2014-04-21 +- escape \ by \\ [#592](https://github.com/ruflin/Elastica/issues/592/) + +2014-04-20 +- Handling of HasChild type parsing bug [#585](https://github.com/ruflin/Elastica/issues/585/) +- Consolidate Index getMapping tests [#591](https://github.com/ruflin/Elastica/issues/591/) +- Fix Type::getMapping when using an aliased index [#588](https://github.com/ruflin/Elastica/issues/588/) + +2014-04-19 +- Release v1.1.1.0 +- Update to elasticsearch 1.1.1 https://www.elastic.co/downloads/past-releases/1-1-1 +- Remove CustomFiltersScore and CustomScore query as removed in elasticsearch 1.1.0 https://github.com/elasticsearch/elasticsearch/pull/5076/files +- Update Node Info to use plugins instead of plugin (https://github.com/elasticsearch/elasticsearch/pull/5072) +- Fix mapping issue for aliases [#588](https://github.com/ruflin/Elastica/issues/588/) + +2014-04-17 +- Only trap real JSON parse errors in Response class [#586](https://github.com/ruflin/Elastica/issues/586/) + +2014-04-09 +- Added Cardinality aggregation [#581](https://github.com/ruflin/Elastica/issues/581/) + +2014-04-07 +- Support for Terms filter lookup options [#579](https://github.com/ruflin/Elastica/issues/579/) + +2014-03-29 +- Update to elasticsearch 1.1.0 https://www.elastic.co/downloads/past-releases/1-1-0 + +2014-03-26 +- Fixed Query\Match Fuzziness parameter type [#576](https://github.com/ruflin/Elastica/issues/576/) + +2014-03-24 +- Release v1.0.1.2 +- Added Filter\Indices [#574](https://github.com/ruflin/Elastica/issues/574/) + +2014-03-25 +- Allow json string as data srouce for Bulk\Action on update [#575](https://github.com/ruflin/Elastica/issues/575/) + +2014-03-20 +- Allow for request params in delete by query calls [#573](https://github.com/ruflin/Elastica/issues/573/) + +2014-03-17 +- Added filters: AbstractGeoShape, GeoShapePreIndexed, GeoShapeProvided [#568](https://github.com/ruflin/Elastica/issues/568/) + +2014-03-15 +- Percolate existing documents and add percolate options ([#570](https://github.com/ruflin/Elastica/issues/570/)) + +2014-03-14 +- Added Query\Rescore [#441](https://github.com/ruflin/Elastica/issues/441/) + +2014-03-13 +- Added missing query options for MultiMatch (operator, minimum_should_match, zero_terms_query, cutoff_frequency, type, fuzziness, prefix_length, max_expansions, analyzer) [#569](https://github.com/ruflin/Elastica/issues/569/) +- Added missing query options for Match (zero_terms_query, cutoff_frequency) [#569](https://github.com/ruflin/Elastica/issues/569/) + +2014-03-11 +- Fixed request body reuse in http transport [#567](https://github.com/ruflin/Elastica/issues/567/) + +2014-03-08 +- Release v1.0.1.1 +- Enable goecluster-facet again as now compatible with elasticsearch 1.0 on travis +- Run elasticsearch in the background to not have log output in travis build +- Set memache php version as environment variable +- Update to memcache 3.0.8 for travis + +2014-03-07 +- Add snapshot / restore functionality (Elastica\Snapshot) [#566](https://github.com/ruflin/Elastica/issues/566/) + +2014-03-04 +- Add PHP 5.6 to travis test environment +- Improve performance of Elastica/Status->getIndicesWithAlias and aliasExists on clusters with many indices [#563](https://github.com/ruflin/Elastica/issues/563/) + +2014-03-02 +- Release v1.0.1.0 +- Fixed Type->deleteByQuery() not working with Query objects [#554](https://github.com/ruflin/Elastica/issues/554/) + +2014-02-27 +- Update to elasticsearch 1.0.1. Update Thrift and Geocluster plugin. + +2014-02-25 +- Add JSON_UNESCAPED_UNICODE and JSON_UNESCAPED_SLASHES options in Elastica/Transport/Http, Elastica/Bulk/Action [#559](https://github.com/ruflin/Elastica/issues/559/) + +2014-02-20 +- Fixed unregister percolator (still used _percolator instead of .percolator). removed duplicate slash from register percolator route. [#558](https://github.com/ruflin/Elastica/issues/558/) + +2014-02-17 +- Throw PartialShardFailureException if response has failed shards +- Elastica/Aggregations/GlobalAggragation not allowed as sub aggragation [#555](https://github.com/ruflin/Elastica/issues/555/) + +2014-02-14 +- Add methods setSize, setShardSize to Elastica/Aggregation/Terms +- Elastica/Aggregation/GlobalAggregationTest fixed bug where JSON returned [] instead of {} +- Elastica/ResultSet added method hasAggregations + +2014-02-13 +- Moved from Apache License to MIT license + +2014-02-12 +- Release v1.0.0.0 +- Updated to elasticsearch 1.0: https://www.elastic.co/blog/1-0-0-released/ + +2014-02-11 +- Add aggregations + +2014-02-08 +- Setting shard timeout doesn't work [#547](https://github.com/ruflin/Elastica/issues/547/) + +2014-02-04 +- Remove Elastica\Query\Field and Elastica\Query\Text, which are not supported in ES 1.0.0.RC1 +- Minor tweaking of request and result handling classes to adjust for changes in ES 1.0.0.RC1 +- Update mapper-attachments plugin to version 2.0.0.RC1 in .travis.yml +- Adjust tests to account for changes in ES 1.0.0.RC1 +- Prevent the geocluster-facet plugin from being installed in test/bin/run_elasticsearch.sh as the plugin has not yet been updated for ES 1.0.0.RC1 + +2014-01-06 +- Update to elasticsearch v1.0.0.RC2 + +2014-01-02 +- Added Elastica\Query\DisMax +- Update to elasticsearch v1.0.0.RC1 + +2014-01-02 +- Release v0.90.10 + +2014-01-31 +- Fix _bulk delete proxy methods if type or index not explicitly defined. + +2014-01-28 +- Add _bulk delete proxy methods to Index and Type for consistency. +- Use the HTTP response code of GET requests (getDocument), instead of extists/found json property. + +2014-01-22 +- Add getParam & getProperties methods to Elastica\Type\Mapping + +2014-01-21 +- Code coverage generation for coveralls.io added: https://coveralls.io/r/ruflin/Elastica +- Add support for shard timeout to the Bulk api. + +2014-01-17 +- Fix typo in constant name: Elastica\Query\FunctionScore::DECAY_GUASS becomes DECAY_GAUSS + +2014-01-13 +- Add support for _bulk update + +2014-01-14 +- added \Elastica\Exception\ResponseException::getElasticsearchException() +- Changed logger default log level to debug from info + +2014-01-13 +- Update to elasticsearch 0.90.10 +- Add Elastica\Facet\TermsStats::setOrder() + +2014-01-08 +- Adding analyze function to Index to expose the _analyze API + +2014-01-07 +- Document::setDocAsUpsert() now returns the Document + +2013-12-18 +- Update to Elasticsearch 0.90.8 +- Add support for simple_query_string query + +2013-12-15 +- Add support for filter inside HasChild filter +- Add support for filter inside HasParent filter + +2013-12-12 +- Always send scroll_id via HTTP body instead of as a query param +- Fix the manner in which suggestion results are returned in \Elastica\ResultSet and adjust associated tests to account for the fix. +- Add \Elastica\Resultset::hasSuggests() + +2013-12-11 +- Pass arguments to optimize as query +- Add refreshAll on Client + +2013-12-07 +- Added Result::hasFields() and Result::hasParam() methods for consistency with Document + +2013-12-07 +- Escape slash in Util::escapeTerm, as it is used for regexp from Elastic 0.90 + +2013-12-05 +- Add *.iml to .gitignore +- Refactor suggest implementation (\Elastica\Suggest, \Elastica\Suggest\AbstractSuggest, and \Elastica\Suggest\Term) to more closely resemble query implementation. (BC break) +- \Elastica\Search::addSuggest() has been renamed to \Elastica\Search::setSuggest() +- \Elastica\Query::addSuggest() has been renamed to \Elastica\Query::setSuggest() +- Add \Elastica\Suggest\Phrase, \Elastica\Suggest\CandidateGenerator\AbstractCandidateGenerator, and \Elastica\Suggest\CandidateGenerator\DirectGenerator + (see http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-phrase.html) + +2013-12-04 +- Remove boost from FunctionScore::addFunction because this is not supported by elasticsearch + +2013-12-02 +- Issue [#491](https://github.com/ruflin/Elastica/issues/491/) resolved + +2013-12-01 +- Issue [#501](https://github.com/ruflin/Elastica/issues/501/) resolved +- satooshi/php-coveralls package added for coverall.io +- Multiple badges for downloads and latest stable release added + +2013-11-30 +- Remove facets param from query if is empty array +- Add size param to API for TermsStats + +2013-11-23 +- Release v0.90.7.0 + +2013-11-19 +- Updated geocluster-facet to 0.0.9 + +2013-11-18 +- Added \Elastica\Filter\Regexp + +2013-11-16 +- Remove wrong documentation for "no limit" [#496](https://github.com/ruflin/Elastica/issues/496/) +- Update to elasticsearch 0.90.7 + +2013-11-03 +- Issue [#490](https://github.com/ruflin/Elastica/issues/490/): Set Elastica\Query\FunctionScore::DECAY_EXPONENTIAL to "exp" instead of "exponential" + +2013-10-29 +- Elastica_Type::exists() added + See http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-types-exists.html#indices-types-exists + +2013-10-27 +- Adapted possible values (not only in) for minimum_should_match param based on elasticsearch documetnation http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html + +2013-10-27 +- Release v0.90.5.0 + +2013-10-26 +- Update to elasticsearch 0.90.5 + +2013-10-21 +- Fix \Elastica\Filter\HasParent usage of \Elastica\Query as to not collide with \Elastica\Filter\Query, bring \Elasitca\Filter\HasChild into line + +2013-10-01 +- Also pass the current client object to the failure callback in \Elastica\Client. + +2013-09-20 +- Update to geocluster-facet 0.0.8 +- Add support for term suggest API + See http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-term.html + +2013-09-18 +- Fix \Elastica\Filter\HasChild usage of \Elastica\Query as to not collide with \Elastica\Filter\Query namespace + +2013-09-17 +- Update to elasticsearch 0.90.4 +- Add support for function_score query +- Skip geocluster-facet test if the plugin is not installed +- Correct \Elastica\Test\ClientTest to catch the proper exception type on connection failure +- Fix unit test errors + +2013-09-14 +- Nested filter supports now the setFilter method + +2013-09-03 +- Support isset() calls on Result objects + +2013-08-27 +- Add \ArrayAccess on the ResultSet object + +2013-08-25 +- Update to elasticsearch 0.90.3 + +2013-08-25 +- Release v0.90.2.0 + +2013-08-20 +- Support for "proxy" param for http connections + +2013-08-17 +- Add support for fields parameter in Elastica_Type::getDocument() + +2013-08-13 +- Add a getQuery method on the FilteredQuery object + +2013-08-01 +- Second param to \Elastica\Search.php:count($query = '', $fullResult = false) added. If second param is set to true, full ResultSet is returned including facets. + +2013-07-16 +- Plugin geocluster-facet support added + +2013-07-02 +- Add Query\Common +- Can now create a query by passing an array to Type::search() + +2013-07-01 +- Add Filter\GeohashCell + +2013-06-30 +- Revamped upsert so that Scripts are now first class citizens. (BC break) + See http://elastica.io/migration/0.90.2/upsert.html +- Implemented doc_as_upsert. + +2013-06-29 +- Update to elasticsearch 0.90.2 +- Enabled ES_WAIT_ON_MAPPING_CHANGE for travis builds + +2013-06-25 +- Added upsert support when updating a document with a partial document or a script. + +2013-06-23 +- Add filtered queries to the percolator API. + +2013-06-21 +- Correct class name for TermTest unit test +- Implement terms lookup feature for terms filter + +2013-06-14 +- Fix support for making scroll queries once the scroll has been started. + +2013-06-07 +- Release 0.90.1.0 + +2013-06-05 +- Changed package name to lowercase to prevent potential issues with case sensitive file systems and to refelect the package name from packagist.org. + If you are requiring elastica in your project you might want to change the name in the require to lowercase, although it will still work if written in uppercase. + The composer autoloader will handle the package correctly and you will not notice any difference. + If you are requiring or including a file by hand with require() or include() from the composer vendor folder, pay attention that the package name in + the path will change to lowercase. +- Add Bulk\Action\UpdateDocument. +- Update Bulk\Action\AbstractDocument and Bulk\Action to enable use of OP_TYPE_UPDATE. +- Update .travis.yml to use Elasticsearch version 0.9.1, as bulk update is a new feature in 0.9.1. + +2013-06-04 +- Elastica\Client::_configureParams() changed to _prepareConnectionParams(), which now takes the config array as an argument + +2013-06-03 +- Add getPlugins and hasPlugin methods to Node\Info + +2013-05-30 +- Update Index\Status::getAliases() to use new API +- Update Index\Status::getSettings() to use new API + +2013-05-29 +- Add _meta to mapping. [#330](https://github.com/ruflin/Elastica/issues/330/) + +2013-05-27 +- Added parameters to implement scroll + +2013-05-23 +- add support PSR-3(https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) +- Elastica\Log implement LoggerInterface(extends Psr\Log\AbstractLogger) + if you want use logging need install https://github.com/php-fig/log for example (composer require psr/log:dev-master) + if use Elastica\Log inside Elastica\Client nothing more is needed + if use Elastica\Log outside we need use as(https://github.com/php-fig/log) for example Elastica\Log::info($message) or Elastica\Log::log(LogLevel::INFO,$message) +- Elastica\Client add setLogger for setting custom Logger for example Monolog(https://github.com/Seldaek/monolog) + +2013-05-18 +- Elastica\Index::exists fixed for 0.90.0. HEAD request method introduced +- Elastica\Filter\AbstractMulti::getFilters() added +- Implement Elastica\Type\Mapping::enableAllField +- Refresh for Elastica\Index::flush implemented [#316](https://github.com/ruflin/Elastica/issues/316/) +- Added optional parameter to filter result while percolate [#384](https://github.com/ruflin/Elastica/issues/384/) + +2013-05-07 +- Added EXPERIMENTAL DocumentObjectInterface to be used with Type::addObject()/addObjects() + +2013-04-23 +- Removed Elastica\Exception\AbstractException +- All Exceptions now implement Elastica\Exception\ExceptionInterface + +2013-04-17 +- Query\Fuzzy to comply with DSL spec. Multi-field queries now throw an exception. Implemented: Query\Fuzzy::setField, Query\Fuzzy::setFieldOption. +- Query\Fuzzy::addField has been deprecated. + +2013-04-12 +- Adding max score information in ResultSet +- Adding test for the ResultSet class + +2013-03-20 +- Removal of unsupported minimum_number_should_match for Boolean Filter + +2013-02-25 +- Added Elastica\Bulk class responsible for performing bulk requests. New bulk requests implemented: Client::deleteDocuments(), Bulk::sendUdp() + +2013-02-20 +- Release candidate 0.20.5.0.RC1 + +2013-02-14 +- Added factory for transports that is used by the Connection class +- The transport instances now has support for parameters that can be injected by specifying an array as a transport when creating the Elastica client + +2013-02-08 +- Terms->setScript() Added, namespace Elastica\Facet + +2013-01-31 +- Removed deprecated method Type::getType() +- Removed deprecated old constructor call in Filter\GeoDistance::__construct() +- Removed deprecated method Filter\Script::setQuery() +- Removed deprecated methods Query\QueryString::setTieBraker() and Query\QueryString::setQueryString() +- Removed deprecated methods Query\Builder::minimumShouldMatch() and Query\Builder::tieBreaker() + +2013-01-25 +- Add get/set/has/remove methods to Document +- Add magic methods __get/__set/__isset/__unset to Document +- Document::add method became deprecated, use set instead +- Populate document id created by elasticsearch on addDocument()/addDocuments() call if no document id was set +- Populate updated fields in document on Client::updateDocument() call if fields options is set + +2013-01-24 +- Added serialization support. Objects can be added to elastica directly when a serializer callable is configured on \Elastica\Type + +2013-01-21 +- Added Thrift transport. Ir requires installing munkie/elasticsearch-thrift-php package and elasticsearch-tranport-thrift plugin should be installed in elastcisearch + +2013-01-13 +- Add version option to Elastica_Search::search +- Remove compatibility for PHP 5.2 +- Changed all syntax using namespaces, in compliance with PSR-2. +- Usage of composer for lib and test autoloading +- Added PHPUnit as a dev dependency in composer.json +- All tests were rewritten for new syntax. +- All tests where moved in Elastica\Test namespace +- All tests now inherit from Elastica\Test\Base +- Removed all executable flags on files where not needed. +- Update to elasticsearch 0.20.2 +- Refactored Elastica_Script and added it support in Elastica_Query_CustomFiltersScore, Elastica_Query_CustomScore and Elastica_Filter_Script +- Refactored Elastica_Client::updateDocument() method to support partial document update. $data can be Elastic_Script, Elastic_Document or array. +- Elastica_Type::updateDocument() now takes Elastica_Document instead of Elastica_Script (BC break). Script can be set to document to perform script update. + +2012-12-23 +- Elastica_Client config param "servers" to "connections" renamed. "headers" and "curl" are now a config param inside "connections" +- Elastica_Connection added to allow connection management (enabled / disable) +- Refactoring of Elastica_Request. Takes Elastica_Connection in constructor instead of Elastica_Client +- Elastica_Transport refactored +- Elastica_Log refactored +- Renamed Elastica_Exception_Client to Elastica_Exception_Connection +- Use Elastica_Connection for the following constants: DEFAULT_PORT, DEFAULT_HOST, DEFAULT_TRANSPORT, TIMEOUT + +2012-11-28 +- Added Elastica_Filter_GeoDistanceRange filter + +2012-11-23 +- Simplified Elastica_Document data handling by extending Elastica_Param + +2012-11-10 +- Added Elastica_Cluster_Health, Elastica_Cluster_Health_Index and Elastica_Cluster_Health_Shard which wrap the _cluster/health endpoint. +- Added Elastica_Document::setId() +- Added options parameter to Elastica_Type::getDocument() +- Added Elastica_Query_Filtered::getFilter() + +2012-10-30 +- Elastica_Search implement Elastica_Searchable interface + +2012-10-28 +- Add Elastica_Filter_HasParent and Elastic_Query_HasParent + +2012-08-11 +- Release v0.19.8.0 +- Elastica_Query_Prefix added + +2012-07-26 +- Change Elastica_Filter_GeoDistance::__construct(), accepts geohash parameter (BC break, before: ($key, $latitude, $longitude, $distance), after: ($key, $location, $distance) where $location is array('lat' => $latitude, 'lon' => $longitude) or a geohash) + +2012-07-17 +- Changed naming for several methods to camelCase +- Enforced PSR1 code style, as per https://github.com/pmjones/fig-standards/blob/psr-1-style-guide/proposed/PSR-1-basic.md +- Added Elastica_Script::toArray +- Added Elastica_ScriptFields +- Elastica_Query::setScriptFields now takes Elastica_ScriptFields or associative array as argument, the old implementation was bogus. + +2012-06-24 +- Simplify Elastica_Type::search and Elastica_Index::search by using Elastica_Search +- Implement Elastica_Filter_Abstract::setCache and Elastica_Filter_Abstract::setCacheKey +- Add Elastica_Param::hasParam +- Remove unsupported use of minimum number should match for Boolean Filter +- Remove old style path creation through params in Elastica_Index::create and Elastica_Search::search + +2012-06-22 +- Add Elastica_Filter_Limit +- Add getters+setters for Index Setting blocks 'read', 'write' and 'metadata' +- Add Elastica_Filter_MatchAll + +2012-06-20 +- Facet scope added + +2012-06-09 +- Change $_parent to null to also support 0 for an id +- Fix Elasitca_Document->toArray() + +2012-05-01 +- Release v0.19.3.0 +- MoreLikeThis Query in Elastica_Document +- Add query param for request (allows GET params) + +2012-03-04 +- Node info call update. The receive os info and more, param is needed. By default, only basics are returned +- Release v0.19.0.0 which is compatible with ES 0.19.0 https://www.elastic.co/downloads/past-releases/0-19-0 + +2012-02-21 +- Allow percolate queries in bulk requests +- Fix memory leak in curl requests + +2012-01-23 +- Packagist added http://packagist.org/ + +2012-01-15 +- Vagrantfile for vagrant environment with elasticsearch added. Run: vagrant up + +2012-01-08 +- Allow to set curl params over client config [#106](https://github.com/ruflin/Elastica/issues/106/) [#107](https://github.com/ruflin/Elastica/issues/107/) +- Add the possiblity to add path or url in config for a request [#120](https://github.com/ruflin/Elastica/issues/120/) + +2012-01-04 +- Elastica_Index::exists() and Elastica_Cluster::getIndexNames() added + +2012-01-01 +- Elastica_Cluster_Settings added +- Read only feature for cluster and index added. This feature is elasticsearch >0.19.0 only. ES 0.19.0 release is not out yet + +2011-12-29 +- Elastica_Type::deleteByQuery implemented + +2011-12-20 +- Release v0.18.6.0 + +2011-12-19 +- Percolator for Type and Documents added + +2011-12-06 +- Elastica_Percolator added. See tests for more details + +2011-12-02 +- Rename Elastica_Type::getType() to Elastica_Type::getName(), getType() is now deprecated + +2011-12-01 +- Elastica_Filter_Term::addTerm renamed to setTerm, Elastica_Filter_Term::setTerm renamed to setRawTerm +- Elastica_Query_Term::addTerm renamed to setTerm, Elastica_Query_Term::setTerm renamed to setRawTerm + +2011-11-30 +- Release v0.18.5.0 + +2011-11-28 +- Elastica_Filter_Nested added + +2011-11-26 +- Elastica_Search::addIndices(), Elastica_Search::addTypes() added + +2011-11-20 +- Release v0.18.4.1 +- Elastica_Log added for logging. Has to be passed as client config to enable +- Elastica blogging introduced: http://ruflin.com/en/elastica + +2011-11-17 +- Release v0.18.4.0 +- Support for Travis CI added: http://travis-ci.org/ruflin/Elastica + +2011-11-07 +- Elastica_Index_Stats added + +2011-11-05 +- Elastica_Query_Nested added + +2011-10-29 +- TTL for document and mapping added + +2011-10-28 +- Refactored Elastica_Query_CustomScore::addCSParam to ::addParams +- Rename Elastica_Query_CustomScore::addParam to ::addCSParam +- Release v0.18.1.0 + +2011-10-20 +- Release v0.17.9.0 +- Elastica_Filter_Type added + +2011-10-19 +- Elastica_Query_CustomFilterScore added + +2011-10-15 +- API Documentation changed to DocBlox + +2011-10-10 +- Bug fixing +- Release v0.17.8.0 added + +2011-09-19 +- Release v0.17.7.0 added +- Release v0.17.6.1 added + +2011-09-18 +- Elastica_Exception_ExpectedFieldNotFound renamed to Elastica_Exception_NotFound + +2011-08-25 +- Https transport layer added + +2011-08-22 +- Typo in Terms query fixed (issue [#74](https://github.com/ruflin/Elastica/issues/74/)) + +2011-08-15 +- Refactoring HTTP connection to keep alive connection -> speed improvement during using the same client +- Release v0.17.6.0 added + +2011-08-09 +- Automatic creation of id for documents added. This was more a bug +- Release v0.17.4.0 added + +2011-08-08 +- Elastica_Query_Text added +- Params (constructor) of Elastica_Filter_GeoBoundingBox changed (array instead of single params) + +2011-08-07 +- Elastica_Query_MoreLikeThis added by @juneym. Still work under progress +- Refactoring Queries and Filters to use Elastica_Param. Adding tests + +2011-08-05 +- Elastica_Filter_Abstract enhanced for more general usage (set/get/addParam(s)) added + +2011-08-04 +- Release v0.17.3.0 added +- Elastica_Index_Settings::set/get response updated. get('...') does not require 'index.' in front anymore +- Nodes and Cluster shutdown added +- Elastica_Node::getIp() and getPort() added + +2011-07-30 +- Readd merge_factor to settings. Now working as expected. Index has to be closed first. + +2011-07-29 +- Release tag v0.17.2.0 added. Elastica is compatible with elasticsearch 0.17.2 + +2011-07-22 +- Elastica_Index_Settings::getMergePolicyMergeFactor and set removed because of enhanced merge policy implementation in ES 0.17.0 https://github.com/elasticsearch/elasticsearch/issues/998 +- Release tav v0.17.1.0 added + +2011-07-21 +- Elastica_Query_HasChild and _parent feature added by fabian +- Elastica_Filter_GeoBoundingBox added by fabian + +2011-07-20 +- Elastica_Query_Builder added by chrisdegrim + +2011-07-19 +- Release tag v0.17.0.0 added. Elastica is compatible with elasticsearch 0.17.0 + +2011-07-18 +- ResultSet::hasFacets added +- QueryString useDisMax added + +2011-07-15 +- Facet/DateHistogram and Facet/Historgram added +- Documentation pages added unter http://ruflin.github.com/Elastica +- Release tag v0.16.4.0 added + +2011-06-19 +- Add support for multiple servers to Elastica_Client (issue [#39](https://github.com/ruflin/Elastica/issues/39/)) + +2011-06-16 +- Support for multiple index, type queries and _all queries added through Elastica_Search object +- Elastica_Index::clearCache added to clean cache +- Elastica_Index::flush added + +2011-06-07 +- Elastica_Index::setNumberOfShards removed as not supported after creating index + +2011-05-11 +- Refactor client constructor. Elastica_Client::__construct(array $config) now takes a config array instead of host and port + +2011-05-08 +- Elastica_Query_QueryString::escapeTerm move to Elastica_Util::escapeTerm + +2011-04-29 +- Added getParam to Elastica_Result that more values can be retrieved from the hit array +- Elastica_Filter_Ids added http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-filter.html +- getMergePolicyMergeFactor and getRefreshInterval to Elastica_Type_Settings added. If no value is set, default values are returned + +2011-04-28 +- Release of version 0.16.0.0 (see new version naming structure in README) + +2011-04-27 +- Refactoring of Elastica_Type::setMapping. No source parameter anymore. +- Elastica_Type_Mapping object introduced to set more fine grained mapping + +2011-04-17 +- Elastica_Filter_Exists added + +2011-04-14 +- Elastica_Type getCount replace by count() +- Count has now optional query parametere + +2011-04-01 +- Renaming of functions in Elastica_Query_Terms and Ela-stica_Query_Filter to fit new naming convention. setTerms, addTerm have different API now! + +2011-03-31 +- Deprecated code removed +- Break backward compatibility to 0.15.1 (versions introduced by wlp1979) + +2011-03-30 +- Filtered query introduced +- setRawArguments in Elastica_Query is now setParam +- open / close for index added +- Remove Elastica_Filter and Elastica_Facets because not needed anymore + +2011-03-29 +- Renaming Elastica_Filter->addQuery, addFilter to setQuery, setFilter +- Add parts of Facets API +- Add facet Terms +- Renaming Elastica_Query->addFilter to setFilter + +2011-03-24 +- Renaming of Elastica_Status_Index to Elastica_Index_Status => API Change! +- IndexSettings added for improved bulk updating http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html + +2011-03-21 +- Node object added +- Node_Info and Node_Stats added +- Refactoring of Cluster object + +2011-03-13 +- changes.txt introduced +- getResponse in Elastica_Response renamed to getData. getResponse now deprecated +- Index status objects added +- getIndexName in Elastica_Index renamed to getName. getIndexName is deprecated diff --git a/vendor/ruflin/elastica/CONTRIBUTING.md b/vendor/ruflin/elastica/CONTRIBUTING.md new file mode 100644 index 00000000..aff25716 --- /dev/null +++ b/vendor/ruflin/elastica/CONTRIBUTING.md @@ -0,0 +1,75 @@ +Contributing +============ +Help is very welcomed. Code contributions must be done in respect of [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). +More details on how to contribute and guidelines for [pull requests](http://elastica.io/contribute/pull-request.html) can be found [here](http://elastica.io/contribute/). + +See [Coding guidelines](http://elastica.io/contribute/coding-guidelines.html) for tips on how to do so. +All changes must be documented in the [CHANGELOG.md](https://github.com/ruflin/Elastica/blob/master/CHANGELOG.md). + + +Issues +------ +* Bugs & Feature requests: If you found a bug, open an issue on [Github](https://github.com/ruflin/Elastica/issues). Please search for already reported similary issues before opening a new one. You should include code examples (with dependencies if needed) and your Elastica version to the issue description. +* Questions & Problems: If you have questions or a specific problem, use the [Elastica Gitter](https://gitter.im/ruflin/Elastica) Chat or open an issue on [Stackoverflow](http://stackoverflow.com/questions/tagged/elastica). Make sure to assign the tag Elastica. + + +Setup +----- +Elastica currently allows two setups for development. Either through vagrant or docker-compose. To use the vagrant environment, run `vagrant up`. To use the docker environment, check out the Makefile for the necessary commands. +* Run your changes / tests in the virtual environment to make sure it is reproducible. +* Run the tests before creating the pull request using vagrant or docker-compose locally. + +Commands +-------- +To run the commands below, you must have docker-compose [installed](https://docs.docker.com/compose/install/). The first time the commands are run it takes some time to download all the partial images. Form then on the commands should run very fast. The advantage in using the commands below is that no local tools and libraries have to be installed and it is guaranteed that everytone is using the same tools. + +## Run Tests + +To run all tests inside the docker environment, run the following command: + +``` +make run RUN="make phpunit" +``` + +If you want to run just a specific test or a one specific file, run the following command by replacing your file with the existingpath: + +``` + make run RUN="phpunit -c ./test lib/Elastica/Test/SearchTest.php" +``` + +## Check style of your code +This command will call php-cs-fixer with the predefined settings for the elastica project. No local setup of the tools is needed as everything will happen directly in the container. +``` +make run RUN="make lint" +``` + + + + +Coding +------ + +### Rules +* Pull requests are made to master. Changes are never pushed directly (without pull request) into master. +* We use the Forking Workflow. https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow +* Follow the coding guidelines. +* Use a feature branch for every pull request. Don't open a pull request from your master branch. + +### Pull Requests +* One change per pull requests: Keep your pull requests as small as possible. Only one change should happen per pull request. This makes it easier to review and provided feedback. If you have a large pull request, try to split it up in multiple smaller requests. +* Commit messages: Make sure that your commit messages have meaning and provide an understanding on what was changed without looking at the code. +* Pull requests should be opened as early as possible as pull requests are also here for communication / discussing changes. Add a comment when your pull request is ready to be merged. +* Tests: Your addition / change must be tested and the builds must be green. Test your changes locally. Add unit tests and if possible functional tests. Don't forget to add the group to your tests. The 4 available groups are @functional, @unit, @shutdown, @benchmark +* Update the CHANGELOG.md file with your changes +* Backward Compatibility breaks: In case you break backward compatibility, provide details on why this is needed. +* Merge: No one should ever merge his own pull request + + +### Name Spaces & Classes +Most name spaces and classes are self explanotary and use cases can be taken from classes which already exist. + +#### Tool Namespace +The namespace Tool is used for making more complex functionality of Elastica available to the users. In general it maps existing functionality of Elastica and offers simplified functions. + +#### Util Class +The util class is used for all static functions which are used in the Elastica library but don't access the library itself. diff --git a/vendor/ruflin/elastica/Dockerfile b/vendor/ruflin/elastica/Dockerfile new file mode 100644 index 00000000..c5055c5e --- /dev/null +++ b/vendor/ruflin/elastica/Dockerfile @@ -0,0 +1,58 @@ +# PHP 6 Docker file with Composer installed +FROM composer/composer + +RUN apt-get update +RUN apt-get upgrade -y +RUN apt-get install -y nano +RUN apt-get install -y cloc + +# XSL and Graphviz for PhpDocumentor +RUN apt-get install -y php5-xsl +# TODO: Debian is putting the xsl extension in a different directory, should be in: /usr/local/lib/php/extensions/no-debug-non-zts-20131226 +RUN echo "extension=/usr/lib/php5/20131226/xsl.so" >> /usr/local/etc/php/conf.d/xsl.ini +RUN apt-get install -y graphviz + + +RUN echo "date.timezone=UTC" >> /usr/local/etc/php/conf.d/timezone.ini + +# Xdebug for coverage report +RUN apt-get install -y php5-xdebug +RUN echo "zend_extension=/usr/lib/php5/20131226/xdebug.so" >> /usr/local/etc/php/conf.d/xdebug.ini + +# Memcache +RUN apt-get install -y php5-memcache +RUN echo "extension=/usr/lib/php5/20131226/memcache.so" >> /usr/local/etc/php/conf.d/memcache.ini + +# Add composer bin to the environment +ENV PATH=/root/composer/vendor/bin:$PATH + +# Overcome github access limits. GITHUB_OAUTH_TOKEN environment variable must be set with private token +RUN composer self-update + +# Install development tools +RUN composer global require "phpunit/phpunit=~4.7" +RUN composer global require "pdepend/pdepend=~2.0" +RUN composer global require "phpmd/phpmd=~2.2" +RUN composer global require "mayflower/php-codebrowser=~1.1" +RUN composer global require "sebastian/phpcpd=~2.0" +RUN composer global require "squizlabs/php_codesniffer=~2.3" +RUN composer global require "phploc/phploc=~2.1" +RUN composer global require "fabpot/php-cs-fixer=1.8.1" + + +# Documentor dependencies +RUN composer global require "phpdocumentor/template-zend=~1.3" +RUN composer global require "phpdocumentor/phpdocumentor=~2.8" + +# Install depdencies +WORKDIR /app +COPY composer.json /app/ +RUN composer install + +# Guzzle is not included composer.json because of PHP 5.3 +RUN composer require "guzzlehttp/guzzle=~6.0" + +ENTRYPOINT [] + +ENV ES_HOST elasticsearch +ENV PROXY_HOST nginx diff --git a/vendor/ruflin/elastica/LICENSE.txt b/vendor/ruflin/elastica/LICENSE.txt new file mode 100644 index 00000000..21580de7 --- /dev/null +++ b/vendor/ruflin/elastica/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Nicolas Ruflin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/vendor/ruflin/elastica/Makefile b/vendor/ruflin/elastica/Makefile new file mode 100644 index 00000000..c033784b --- /dev/null +++ b/vendor/ruflin/elastica/Makefile @@ -0,0 +1,108 @@ +#/bin/bash + +BASEDIR = $(shell pwd) +SOURCE = "${BASEDIR}/lib" +IMAGE = "elastica" + + +### Setups around project sources. These commands should run ### +init: prepare + composer install + +prepare: + mkdir -p ${BASEDIR}/build/api + mkdir -p ${BASEDIR}/build/code-browser + mkdir -p ${BASEDIR}/build/coverage + mkdir -p ${BASEDIR}/build/logs + mkdir -p ${BASEDIR}/build/docs + mkdir -p ${BASEDIR}/build/pdepend + +update: init + +clean: + rm -r -f ${BASEDIR}/build + #rm ${BASEDIR}/cache.properties + + +# Handling virtual environment + +build: + docker-compose build + +setup: build + docker-compose scale elasticsearch=3 + +start: + docker-compose up + +stop: + docker-compose stop + +destroy: clean + docker-compose kill + docker-compose rm + +# Runs commands inside virtual environemnt. Example usage inside docker: make run RUN="make phpunit" +run: + docker-compose run elastica $(RUN) + + +### Quality checks / development tools ### + +checkstyle: + phpcs --standard=PSR2 ${SOURCE} + +checkstyle-ci: prepare + phpcs --report=checkstyle --report-file=${BASEDIR}/build/logs/checkstyle.xml --standard=PSR2 ${SOURCE} > /dev/null + +code-browser: prepare + phpcb --log ${BASEDIR}/build/logs --source ${SOURCE} --output ${BASEDIR}/build/code-browser + +# Copy paste detector +cpd: prepare + phpcpd --log-pmd ${BASEDIR}/build/logs/pmd-cpd.xml ${SOURCE} + +messdetector: prepare + phpmd ${SOURCE} text codesize,unusedcode,naming,design ${BASEDIR}/build/phpmd.xml + +messdetector-ci: prepare + phpmd ${SOURCE} xml codesize,unusedcode,naming,design --reportfile ${BASEDIR}/build/logs/pmd.xml + +dependencies: prepare + pdepend --jdepend-xml=${BASEDIR}/build/logs/jdepend.xml \ + --jdepend-chart=${BASEDIR}/build/pdepend/dependencies.svg \ + --overview-pyramid=${BASEDIR}/build/pdepend/overview-pyramid.svg \ + ${SOURCE} + +phpunit: prepare + phpunit -c test/ --coverage-clover build/coverage/unit-coverage.xml --group unit + phpunit -c test/ --coverage-clover build/coverage/functional-coverage.xml --group functional + phpunit -c test/ --coverage-clover build/coverage/shutdown-coverage.xml --group shutdown + +doc: prepare + phpdoc run -d lib/ -t build/docs + +# Uses the preconfigured standards in .php_cs +lint: + php-cs-fixer fix + +syntax-check: + php -lf ${SOURCE} **/*.php + php -lf ${BASEDIR}/test **/*.php + + +loc: + cloc --by-file --xml --exclude-dir=build -out=build/cloc.xml . + +phploc: + phploc --log-csv $(BASEDIR)/build/logs/phploc.csv $(SOURCE) + + + +# Visualise repo +gource: + gource --log-format git \ + --seconds-per-day 0.1 \ + --title 'Elastica (https://github.com/ruflin/Elastica)' \ + --user-scale 1 \ + --max-user-speed 50 diff --git a/vendor/ruflin/elastica/README.md b/vendor/ruflin/elastica/README.md new file mode 100644 index 00000000..b6cf5376 --- /dev/null +++ b/vendor/ruflin/elastica/README.md @@ -0,0 +1,31 @@ +Elastica: elasticsearch PHP Client +================================== + +[![Latest Stable Version](https://poser.pugx.org/ruflin/Elastica/v/stable.png)](https://packagist.org/packages/ruflin/elastica) +[![Build Status](https://secure.travis-ci.org/ruflin/Elastica.png?branch=master)](http://travis-ci.org/ruflin/Elastica) +[![codecov.io](http://codecov.io/github/ruflin/Elastica/coverage.svg?branch=master)](http://codecov.io/github/ruflin/Elastica?branch=master) +[![Dependency Status](https://www.versioneye.com/php/ruflin:elastica/dev-master/badge.svg)](https://www.versioneye.com/php/ruflin:elastica/dev-master) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/ruflin/Elastica/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/ruflin/Elastica/?branch=master) +[![Total Downloads](https://poser.pugx.org/ruflin/Elastica/downloads.png)](https://packagist.org/packages/ruflin/elastica) +[![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=ruflin&url=https://github.com/ruflin/Elastica&title=Elastica&language=PHP&tags=github&category=software) +[![Join the chat at https://gitter.im/ruflin/Elastica](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ruflin/Elastica?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +All documentation for Elastica can be found under [Elastica.io](http://Elastica.io/). +If you have questions, don't hesitate to ask them on [Stackoverflow](http://stackoverflow.com/questions/tagged/elastica) and add the Tag "Elastica" or +in our [Gitter](https://gitter.im/ruflin/Elastica) channel. +All library issues should go to the [issue tracker from github](https://github.com/ruflin/Elastica/issues). + +Contributing +------------ +Contributions are always welcome. For details on how to contribute, check the [CONTRIBUTING](https://github.com/ruflin/Elastica/blob/master/CONTRIBUTING.md) file. + +Dependencies +------------ +| Project | Version | Required | +|---------|---------|----------| +|[Elasticsearch](https://github.com/elasticsearch/elasticsearch/tree/v1.6.0)|1.6.0|yes| +|[Elasticsearch mapper attachments plugin](https://github.com/elasticsearch/elasticsearch-mapper-attachments/tree/v2.6.0)|2.6.0|no| +|[Elasticsearch thrift transport plugin](https://github.com/elasticsearch/elasticsearch-transport-thrift/tree/v2.6.0)|2.6.0|no| +|[Elasticsearch memcached transport plugin](https://github.com/elastic/elasticsearch-transport-memcached/tree/v2.6.0)|2.6.0|no| +|[Elasticsearch geocluster facet plugin](https://github.com/zenobase/geocluster-facet/tree/0.0.12)|0.0.12|no| +|[Elasticsearch image plugin](https://github.com/SibaTokyo/elasticsearch-image/tree/1.4.0)|1.4.0|no| diff --git a/vendor/ruflin/elastica/Vagrantfile b/vendor/ruflin/elastica/Vagrantfile new file mode 100644 index 00000000..2deebbd4 --- /dev/null +++ b/vendor/ruflin/elastica/Vagrantfile @@ -0,0 +1,18 @@ + +Vagrant.require_version ">= 1.4.0" + +Vagrant.configure("2") do |config| + + config.vm.box = "ubuntu/precise32" + + config.vm.network :private_network, ip: "10.10.10.10" + + config.vm.provision "shell" do |sh| + sh.inline = "/bin/bash /vagrant/ansible/provision.sh" + end + + config.vm.provider :virtualbox do |vb| + vb.customize ["modifyvm", :id, "--memory", "1024"] + end + +end diff --git a/vendor/ruflin/elastica/ansible/es-playbook.yml b/vendor/ruflin/elastica/ansible/es-playbook.yml new file mode 100644 index 00000000..3a471b64 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/es-playbook.yml @@ -0,0 +1,20 @@ +--- + +- name: Create a virtual machine + connection: local + hosts: localhost + sudo: true + vars: + - ES_VER: "1.6.0" + - ES_SHORT_VER: "1.6" + - ES_MAPPER_ATTACHMENTS_VER: "2.6.0" + - ES_TRANSPORT_MEMCACHED_VER: "2.6.0" + - ES_TRANSPORT_THRIFT_VER: "2.6.0" + - ES_GEOCLUSTER_FACET_VER: "0.0.12" + - ES_IMAGE_PLUGIN_VER: "1.4.0" + - ES_PROJECT_ROOT: "{{ lookup('env', 'ES_PROJECT_ROOT') }}" + roles: + - base + - elasticsearch + - nginx + - php diff --git a/vendor/ruflin/elastica/ansible/provision.sh b/vendor/ruflin/elastica/ansible/provision.sh new file mode 100644 index 00000000..6ea8e575 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/provision.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +set -o xtrace + +install_ansible() { + sudo apt-get update + sudo apt-get install python python-pip python-dev -y + sudo pip install ansible==1.8.2 + sudo mkdir -p /etc/ansible/ + echo "localhost" | sudo tee /etc/ansible/hosts +} + +run_playbook() { + # Write to stdout directly + export PYTHONUNBUFFERED=1 + + # No cows >_< + export ANSIBLE_NOCOWS=1 + + # Root of git repo + if [ -z "$ES_PROJECT_ROOT" ]; then + export ES_PROJECT_ROOT="$(dirname $(dirname $(readlink -f $0)))" + fi + + if [ ! -x $(which ansible-playbook) ]; then + echo "Ansible is not installed" + return 1 + fi + + ansible-playbook $ES_PROJECT_ROOT/ansible/es-playbook.yml -v | tee /tmp/ansible-playbook-progress + + if grep -q "FATAL\|ERROR" /tmp/ansible-playbook-progress; then + return 1 + fi +} + +check_cluster() { + curl -m 5 -s -o /dev/null "http://localhost:9200" && + curl -m 5 -s -o /dev/null "http://localhost:9201" + return $? +} + +travis_retry() { + # We don't use builtin Travis CI function, because this script is also used for vagrant provision. + # But main idea of restarts is so simple, so lets override it without name change. + + $@ && return 0 + + echo "The command $@ failed. Retrying, 2 of 3" + sleep 60s && $@ && return 0 + + echo "The command $@ failed. Retrying, 3 of 3" + sleep 60s && $@ && return 0 + + echo "The command $@ failed." + return 1 +} + +travis_retry install_ansible || exit 1 + +travis_retry run_playbook || exit 1 + +travis_retry check_cluster || exit 1 diff --git a/vendor/ruflin/elastica/ansible/roles/base/tasks/main.yml b/vendor/ruflin/elastica/ansible/roles/base/tasks/main.yml new file mode 100644 index 00000000..061b8155 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/base/tasks/main.yml @@ -0,0 +1,13 @@ +--- + +- name: install base packages + apt: > + force=yes + name={{ item }} + state=present + update_cache=no + with_items: + - curl + - git + - htop + - vim diff --git a/vendor/ruflin/elastica/ansible/roles/elasticsearch/handlers/main.yml b/vendor/ruflin/elastica/ansible/roles/elasticsearch/handlers/main.yml new file mode 100644 index 00000000..97cccdd2 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/elasticsearch/handlers/main.yml @@ -0,0 +1,6 @@ +--- + +- name: restart elasticsearch + service: > + name=elasticsearch + state=restarted diff --git a/vendor/ruflin/elastica/ansible/roles/elasticsearch/tasks/main.yml b/vendor/ruflin/elastica/ansible/roles/elasticsearch/tasks/main.yml new file mode 100644 index 00000000..c2041343 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/elasticsearch/tasks/main.yml @@ -0,0 +1,101 @@ +--- + +- name: import ppa:webupd8team/java gpg key + apt_key: > + id=EEA14886 + keyserver=keyserver.ubuntu.com + state=present + +- name: add ppa:webupd8team/java repository + apt_repository: > + repo="deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" + state=present + update_cache=yes + +- name: accept oracle license + shell: > + echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections + +- name: install java + apt: > + force=yes + name={{ item }} + state=present + update_cache=no + with_items: + - oracle-java7-installer + - oracle-java7-set-default + +- name: import elasticsearch gpg key + apt_key: > + id=D88E42B4 + url=https://packages.elasticsearch.org/GPG-KEY-elasticsearch + state=present + +- name: add elasticsearch repository + apt_repository: > + repo="deb http://packages.elasticsearch.org/elasticsearch/{{ ES_SHORT_VER }}/debian stable main" + state=present + update_cache=yes + +- name: install elasticsearch + apt: > + force=yes + name=elasticsearch={{ ES_VER }} + state=present + update_cache=no + +- name: install image plugin + command: > + creates=/usr/share/elasticsearch/plugins/image + /usr/share/elasticsearch/bin/plugin --url https://github.com/SibaTokyo/elasticsearch-image/releases/download/{{ ES_IMAGE_PLUGIN_VER }}/elasticsearch-image-{{ ES_IMAGE_PLUGIN_VER }}.zip -install image + +- name: install mapper-attachments plugin + command: > + creates=/usr/share/elasticsearch/plugins/mapper-attachments + /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-mapper-attachments/{{ ES_MAPPER_ATTACHMENTS_VER }} + +- name: install geocluster-facet plugin + command: > + creates=/usr/share/elasticsearch/plugins/geocluster-facet + /usr/share/elasticsearch/bin/plugin -install geocluster-facet --url https://github.com/zenobase/geocluster-facet/releases/download/{{ ES_GEOCLUSTER_FACET_VER }}/geocluster-facet-{{ ES_GEOCLUSTER_FACET_VER }}.jar + +- name: install transport-thrift plugin + command: > + creates=/usr/share/elasticsearch/plugins/transport-thrift + /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-transport-thrift/{{ ES_TRANSPORT_THRIFT_VER }} + +- name: install transport-memcached plugin + command: > + creates=/usr/share/elasticsearch/plugins/transport-memcached + /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-transport-memcached/{{ ES_TRANSPORT_MEMCACHED_VER }} + +- name: remove default config + file: > + path={{ item }} + state=absent + with_items: + - /etc/default/elasticsearch + - /etc/elasticsearch/elasticsearch.yml + +- name: create custom config + template: > + dest=/etc/elasticsearch/{{ item }} + src={{ item }} + with_items: + - config-0.yml + - config-1.yml + - logging.yml + notify: restart elasticsearch + +- name: create elasticsearch service script + template: > + dest=/etc/init.d/elasticsearch + src=elasticsearch.service + notify: restart elasticsearch + +- name: start elasticsearch + service: > + enabled=yes + name=elasticsearch + state=started diff --git a/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-0.yml b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-0.yml new file mode 100644 index 00000000..aa956910 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-0.yml @@ -0,0 +1,10 @@ +{% extends "config-default.yml" %} + +{% block config %} + +http.port: 9200 +transport.tcp.port: 9300 +thrift.port: 9500 +memcached.port: 11211 + +{% endblock %} diff --git a/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-1.yml b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-1.yml new file mode 100644 index 00000000..a54d719e --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-1.yml @@ -0,0 +1,10 @@ +{% extends "config-default.yml" %} + +{% block config %} + +http.port: 9201 +transport.tcp.port: 9301 +thrift.port: 9501 +memcached.port: 11212 + +{% endblock %} diff --git a/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-default.yml b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-default.yml new file mode 100644 index 00000000..0917f244 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/config-default.yml @@ -0,0 +1,40 @@ +{% block default_config %} + +index.number_of_shards: 2 +index.number_of_replicas: 0 + +# Dont write data to hdd in tests +index.store.type: memory + +# Required plugins +plugin.mandatory: mapper-attachments, geocluster-facet, transport-thrift, transport-memcached, image + +# For bulk tests +bulk.udp.enabled: true +bulk.udp.bulk_actions: 5 + +# For script tests +script.inline: on +script.indexed: on + +# Disable dynamic memory allocation +bootstrap.mlockall: true + +# Dont accept connections not from localhost +network.host: "127.0.0.1" + +# Limit threadpool by set number of available processors to 1 +# Without this, travis builds will be failed with OutOfMemory error +processors: 1 + +# All nodes will be called Elastica +node.name: Elastica + +# Added for snapshot tests +path.repo: ["/tmp/test_register", "/tmp/test_repository"] + +{% endblock %} + +{% block config %} +# Node specific config should be overwritten in child template +{% endblock %} diff --git a/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/elasticsearch.service b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/elasticsearch.service new file mode 100644 index 00000000..0268e230 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/elasticsearch.service @@ -0,0 +1,229 @@ +#!/bin/sh +# +# /etc/init.d/elasticsearch -- startup script for Elasticsearch +# +# Written by Miquel van Smoorenburg . +# Modified for Debian GNU/Linux by Ian Murdock . +# Modified for Tomcat by Stefan Gybas . +# Modified for Tomcat6 by Thierry Carrez . +# Additional improvements by Jason Brittain . +# Modified by Nicolas Huray for Elasticsearch . +# Modified by Igor Denisenko for Elastica +# +### BEGIN INIT INFO +# Provides: elasticsearch +# Required-Start: $network $remote_fs $named +# Required-Stop: $network $remote_fs $named +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Starts elasticsearch +# Description: Starts elasticsearch using start-stop-daemon +### END INIT INFO + +PATH="/bin:/usr/bin:/sbin:/usr/sbin" +NAME="elasticsearch" +DESC="Elasticsearch Server" + +if [ `id -u` -ne 0 ]; then + echo "You need root privileges to run this script" + exit 1 +fi + + +. /lib/lsb/init-functions + +if [ -r /etc/default/rcS ]; then + . /etc/default/rcS +fi + + +# Run Elasticsearch as this user ID and group ID +ES_USER="elasticsearch" +ES_GROUP="elasticsearch" + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined) +JDK_DIRS="/usr/lib/jvm/java-8-oracle/ /usr/lib/jvm/j2sdk1.8-oracle/ /usr/lib/jvm/jdk-7-oracle-x64 /usr/lib/jvm/java-7-oracle /usr/lib/jvm/j2sdk1.7-oracle/ /usr/lib/jvm/java-7-openjdk /usr/lib/jvm/java-7-openjdk-amd64/ /usr/lib/jvm/java-7-openjdk-armhf /usr/lib/jvm/java-7-openjdk-i386/ /usr/lib/jvm/default-java" + +# Look for the right JVM to use +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +# Directory where the Elasticsearch binary distribution resides +ES_HOME="/usr/share/$NAME" + +# Heap size defaults to 256m min, 1g max +# Be modest. Entire cluster will allocate (3*ES_HEAP_SIZE) memory +ES_HEAP_SIZE="256m" +export ES_HEAP_SIZE + +# Heap new generation +# ES_HEAP_NEWSIZE= +# export ES_HEAP_NEWSIZE + +# max direct memory +# ES_DIRECT_SIZE= +# export ES_DIRECT_SIZE + +# Additional Java OPTS +ES_JAVA_OPTS="-server" +export ES_JAVA_OPTS + +# Maximum number of open files +MAX_OPEN_FILES="65535" + +# Maximum amount of locked memory +MAX_LOCKED_MEMORY="unlimited" + +# Elasticsearch log directory +LOG_DIR="/var/log/$NAME" + +# Elasticsearch data directory +DATA_DIR="/var/lib/$NAME" + +# Elasticsearch work directory +WORK_DIR="/tmp/$NAME" + +# Elasticsearch configuration directory +CONF_DIR="/etc/$NAME" + +# Define other required variables +DAEMON="$ES_HOME/bin/elasticsearch" + +# Check DAEMON exists +if [ ! -x $DAEMON ]; then + exit 0 +fi + +checkJava() { + if [ -x "$JAVA_HOME/bin/java" ]; then + JAVA="$JAVA_HOME/bin/java" + else + JAVA=`which java` + fi + + if [ ! -x "$JAVA" ]; then + echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME" + exit 1 + fi +} + +case "$1" in + start) + checkJava + + if [ -n "$MAX_LOCKED_MEMORY" -a -z "$ES_HEAP_SIZE" ]; then + log_failure_msg "MAX_LOCKED_MEMORY is set - ES_HEAP_SIZE must also be set" + exit 1 + fi + + + mkdir -p "$LOG_DIR" "$DATA_DIR" "$WORK_DIR" + chown "$ES_USER":"$ES_GROUP" "$LOG_DIR" "$DATA_DIR" "$WORK_DIR" + + if [ -n "$MAX_OPEN_FILES" ];then + ulimit -n $MAX_OPEN_FILES + fi + + if [ -n "$MAX_LOCKED_MEMORY" ];then + ulimit -l $MAX_LOCKED_MEMORY + fi + + ulimit -s 1024 + + for node in 0 1; do + log_daemon_msg "Starting elasticsearch node #$node" + + PID_FILE="/var/run/$NAME-$node.pid" + CONF_FILE="$CONF_DIR/config-$node.yml" + + DAEMON="$ES_HOME/bin/elasticsearch" + DAEMON_OPTS=" + -Des.config=$CONF_FILE \ + -Des.path.home=$ES_HOME \ + -Des.path.logs=$LOG_DIR \ + -Des.path.data=$DATA_DIR \ + -Des.path.work=$WORK_DIR \ + -Des.path.conf=$CONF_DIR \ + -p $PID_FILE + " + + pid=`pidofproc -p $PID_FILE elasticsearch` + if [ -n "$pid" ] ; then + log_begin_msg "Elasticsearch node #$node already running" + continue + fi + + touch "$PID_FILE" + chown "$ES_USER":"$ES_GROUP" "$PID_FILE" + + # Start Daemon + start-stop-daemon --start -b --user "$ES_USER" -c "$ES_USER" --pidfile "$PID_FILE" --exec "$DAEMON" -- "$DAEMON_OPTS" + return=$? + if [ $return -eq 0 ]; then + i=0 + timeout=10 + # Wait for the process to be properly started before exiting + until { cat "$PID_FILE" | xargs kill -0; } >/dev/null 2>&1 + do + sleep 1 + i=$(($i + 1)) + [ $i -gt $timeout ] && log_end_msg 1 + done + else + log_end_msg $return + fi + done + ;; + stop) + for node in 0 1; do + log_daemon_msg "Stopping elasticsearch node #$node" + + PID_FILE="/var/run/$NAME-$node.pid" + + if [ -f "$PID_FILE" ]; then + start-stop-daemon --stop --pidfile "$PID_FILE" \ + --user "$ES_USER" \ + --retry=TERM/20/KILL/5 >/dev/null + if [ $? -eq 1 ]; then + log_progress_msg "$DESC is not running but pid file exists, cleaning up" + elif [ $? -eq 3 ]; then + PID="`cat $PID_FILE`" + log_failure_msg "Failed to stop $DESC (pid $PID)" + exit 1 + fi + rm -f "$PID_FILE" + else + log_progress_msg "(not running)" + fi + done + + log_end_msg 0 + ;; + status) + for node in 0 1; do + PID_FILE="/var/run/$NAME-$node.pid" + status_of_proc -p $PID_FILE "Elasticsearch node #$node" "Elasticsearch node #$node" + done + exit 0 + ;; + restart|force-reload) + for node in 0 1; do + PID_FILE="/var/run/$NAME-$node.pid" + if [ -f "$PID_FILE" ]; then + $0 stop + sleep 1 + fi + done + $0 start + ;; + *) + log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}" + exit 1 + ;; +esac + +exit 0 diff --git a/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/logging.yml b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/logging.yml new file mode 100644 index 00000000..9e00d01c --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/elasticsearch/templates/logging.yml @@ -0,0 +1,56 @@ +# you can override this using by setting a system property, for example -Des.logger.level=DEBUG +es.logger.level: INFO +rootLogger: ${es.logger.level}, console, file +logger: + # log action execution errors for easier debugging + action: DEBUG + # reduce the logging for aws, too much is logged under the default INFO + com.amazonaws: WARN + + # gateway + #gateway: DEBUG + #index.gateway: DEBUG + + # peer shard recovery + #indices.recovery: DEBUG + + # discovery + #discovery: TRACE + + index.search.slowlog: TRACE, index_search_slow_log_file + index.indexing.slowlog: TRACE, index_indexing_slow_log_file + +additivity: + index.search.slowlog: false + index.indexing.slowlog: false + +appender: + console: + type: console + layout: + type: consolePattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" + + file: + type: dailyRollingFile + file: ${path.logs}/${cluster.name}.log + datePattern: "'.'yyyy-MM-dd" + layout: + type: pattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" + + index_search_slow_log_file: + type: dailyRollingFile + file: ${path.logs}/${cluster.name}_index_search_slowlog.log + datePattern: "'.'yyyy-MM-dd" + layout: + type: pattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" + + index_indexing_slow_log_file: + type: dailyRollingFile + file: ${path.logs}/${cluster.name}_index_indexing_slowlog.log + datePattern: "'.'yyyy-MM-dd" + layout: + type: pattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" diff --git a/vendor/ruflin/elastica/ansible/roles/nginx/handlers/main.yml b/vendor/ruflin/elastica/ansible/roles/nginx/handlers/main.yml new file mode 100644 index 00000000..fc583f27 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/nginx/handlers/main.yml @@ -0,0 +1,6 @@ +--- + +- name: restart nginx + service: > + name=nginx + state=restarted diff --git a/vendor/ruflin/elastica/ansible/roles/nginx/tasks/main.yml b/vendor/ruflin/elastica/ansible/roles/nginx/tasks/main.yml new file mode 100644 index 00000000..6b260531 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/nginx/tasks/main.yml @@ -0,0 +1,26 @@ +--- + +- name: install nginx + apt: > + force=yes + name=nginx + state=present + update_cache=no + +- name: create mime.types + template: > + dest=/etc/nginx/mime.types + src=mime.types.j2 + notify: restart nginx + +- name: create nginx.conf + template: > + dest=/etc/nginx/nginx.conf + src=nginx.conf.j2 + notify: restart nginx + +- name: start nginx + service: > + enabled=yes + name=nginx + state=started diff --git a/vendor/ruflin/elastica/ansible/roles/nginx/templates/mime.types.j2 b/vendor/ruflin/elastica/ansible/roles/nginx/templates/mime.types.j2 new file mode 100644 index 00000000..6c64bf73 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/nginx/templates/mime.types.j2 @@ -0,0 +1,109 @@ +types { + +# Audio + audio/midi mid midi kar; + audio/mp4 aac f4a f4b m4a; + audio/mpeg mp3; + audio/ogg oga ogg opus; + audio/x-realaudio ra; + audio/x-wav wav; + +# Images + image/bmp bmp; + image/gif gif; + image/jpeg jpeg jpg; + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico cur; + image/x-jng jng; + +# JavaScript + application/javascript js; + application/json json; + +# Manifest files + application/x-web-app-manifest+json webapp; + text/cache-manifest manifest appcache; + +# Microsoft Office + application/msword doc; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; + application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; + +# Video + video/3gpp 3gpp 3gp; + video/mp4 mp4 m4v f4v f4p; + video/mpeg mpeg mpg; + video/ogg ogv; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; + +# Web feeds + application/xml atom rdf rss xml; + +# Web fonts + application/font-woff woff; + application/font-woff2 woff2; + application/vnd.ms-fontobject eot; + application/x-font-ttf ttc ttf; + font/opentype otf; + +# Other + application/java-archive jar war ear; + application/mac-binhex40 hqx; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.wap.wmlc wmlc; + application/xhtml+xml xhtml; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-chrome-extension crx; + application/x-opera-extension oex; + application/x-xpinstall xpi; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-bittorrent torrent; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + application/octet-stream safariextz; + + text/css css; + text/html html htm shtml; + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/vtt vtt; + text/x-component htc; + text/x-vcard vcf; + +} diff --git a/vendor/ruflin/elastica/ansible/roles/nginx/templates/nginx.conf.j2 b/vendor/ruflin/elastica/ansible/roles/nginx/templates/nginx.conf.j2 new file mode 100644 index 00000000..17966f7a --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/nginx/templates/nginx.conf.j2 @@ -0,0 +1,35 @@ +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + charset_types text/xml text/plain text/vnd.wap.wml application/x-javascript application/rss+xml text/css application/javascript application/json; + + server { + listen 80; + + root {{ ES_PROJECT_ROOT }}; + + location / { + autoindex on; + } + } + + server { + listen 127.0.0.1:12345; + + location / { + proxy_pass http://127.0.0.1:9200; + } + } + + server { + listen 127.0.0.1:12346; + + location / { + return 403; + } + } +} diff --git a/vendor/ruflin/elastica/ansible/roles/php/tasks/main.yml b/vendor/ruflin/elastica/ansible/roles/php/tasks/main.yml new file mode 100644 index 00000000..fff65d52 --- /dev/null +++ b/vendor/ruflin/elastica/ansible/roles/php/tasks/main.yml @@ -0,0 +1,43 @@ +--- +- name: import ppa:ondrej/php5 gpg key + apt_key: > + id=E5267A6C + keyserver=keyserver.ubuntu.com + state=present + +- name: add ppa:ondrej/php5 repository + apt_repository: > + repo="deb http://ppa.launchpad.net/ondrej/php5/ubuntu precise main" + state=present + update_cache=yes + +- name: install php + apt: > + force=yes + name={{ item }} + state=present + update_cache=no + with_items: + - php5-cli + - php5-curl + - php5-xdebug + - php5-memcache + +- name: install phar packages + get_url: > + dest={{ item.dest }} + url={{ item.url }} + mode=0755 + with_items: + - { dest: "/usr/local/bin/php-cs-fixer", url: "http://get.sensiolabs.org/php-cs-fixer.phar" } + - { dest: "/usr/local/bin/phpdoc", url: "http://phpdoc.org/phpDocumentor.phar" } + - { dest: "/usr/local/bin/phpunit", url: "https://phar.phpunit.de/phpunit.phar" } + - { dest: "/usr/local/bin/composer", url: "https://getcomposer.org/composer.phar" } + +- name: install dependencies from composer.json + composer: > + command=install + optimize_autoloader=yes + prefer_source=yes + no_dev=no + working_dir={{ ES_PROJECT_ROOT }} diff --git a/vendor/ruflin/elastica/composer.json b/vendor/ruflin/elastica/composer.json new file mode 100644 index 00000000..8bffc334 --- /dev/null +++ b/vendor/ruflin/elastica/composer.json @@ -0,0 +1,43 @@ +{ + "name": "ruflin/elastica", + "description": "Elasticsearch Client", + "keywords": ["search","client"], + "homepage": "http://elastica.io/", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Ruflin", + "homepage": "http://ruflin.com/" + } + ], + "require": { + "php": ">=5.3.3", + "psr/log": "~1.0" + }, + "require-dev": { + "munkie/elasticsearch-thrift-php": "1.4.*", + "guzzlehttp/guzzle": "5.3.*" + }, + "suggest": { + "munkie/elasticsearch-thrift-php": "Allow using thrift transport", + "guzzlehttp/guzzle": "Allow using guzzle 5.3.x as the http transport (Requires php 5.4)", + "egeloen/http-adapter": "Allow using httpadapter transport", + "monolog/monolog": "Logging request" + }, + "autoload": { + "psr-4": { + "Elastica\\": "lib/Elastica/" + } + }, + "autoload-dev": { + "psr-4": { + "Elastica\\Test\\": "test/lib/Elastica/Test/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + } +} diff --git a/vendor/ruflin/elastica/docker-compose.yml b/vendor/ruflin/elastica/docker-compose.yml new file mode 100644 index 00000000..674d6e9e --- /dev/null +++ b/vendor/ruflin/elastica/docker-compose.yml @@ -0,0 +1,27 @@ +elastica: + #build: . # In case the image must be built locally + image: ruflin/elastica + ports: + - "9200:9200" + volumes: + - .:/app + links: + - nginx + - elasticsearch + environment: + - ES_HOST=elasticsearch + - PROXY_HOST=nginx +elasticsearch: + #build: ./env/elasticsearch/ # In case image must be built locally + image: ruflin/elasticsearch-elastica +nginx: + image: nginx + volumes: + - ./env/nginx/nginx.conf:/etc/nginx/nginx.conf + - ./env/nginx/mime.types:/etc/nginx/mime.types + ports: + - "12345" + - "12346" + - "80" + links: + - elasticsearch diff --git a/vendor/ruflin/elastica/env/elasticsearch/Dockerfile b/vendor/ruflin/elastica/env/elasticsearch/Dockerfile new file mode 100644 index 00000000..ae2665a0 --- /dev/null +++ b/vendor/ruflin/elastica/env/elasticsearch/Dockerfile @@ -0,0 +1,26 @@ +FROM elasticsearch:1.6.0 +MAINTAINER Nicolas Ruflin + +# Dependencies +ENV ES_MAPPER_ATTACHMENTS_VER 2.6.0 +ENV ES_TRANSPORT_MEMCACHED_VER 2.6.0 +ENV ES_TRANSPORT_THRIFT_VER 2.6.0 +ENV ES_GEOCLUSTER_FACET_VER 0.0.12 +ENV ES_IMAGE_PLUGIN_VER 1.4.0 +ENV ES_PLUGIN_BIN /usr/share/elasticsearch/bin/plugin + +# Install Plugins +RUN ${ES_PLUGIN_BIN} -install elasticsearch/elasticsearch-mapper-attachments/${ES_MAPPER_ATTACHMENTS_VER} +RUN ${ES_PLUGIN_BIN} -install image --url https://github.com/SibaTokyo/elasticsearch-image/releases/download/${ES_IMAGE_PLUGIN_VER}/elasticsearch-image-${ES_IMAGE_PLUGIN_VER}.zip +RUN ${ES_PLUGIN_BIN} -install geocluster-facet --url https://github.com/zenobase/geocluster-facet/releases/download/${ES_GEOCLUSTER_FACET_VER}/geocluster-facet-${ES_GEOCLUSTER_FACET_VER}.jar +RUN ${ES_PLUGIN_BIN} -install elasticsearch/elasticsearch-transport-thrift/${ES_TRANSPORT_THRIFT_VER} +RUN ${ES_PLUGIN_BIN} -install elasticsearch/elasticsearch-transport-memcached/${ES_TRANSPORT_MEMCACHED_VER} + +# Debug interface +RUN ${ES_PLUGIN_BIN} -install mobz/elasticsearch-head + +# Copy config files +COPY *.yml /usr/share/elasticsearch/config/ + +# Expose standard ports, thrift, udp, memcache +EXPOSE 9200 9300 9500 9700 9800 11211 diff --git a/vendor/ruflin/elastica/env/elasticsearch/elasticsearch.yml b/vendor/ruflin/elastica/env/elasticsearch/elasticsearch.yml new file mode 100644 index 00000000..bd0368da --- /dev/null +++ b/vendor/ruflin/elastica/env/elasticsearch/elasticsearch.yml @@ -0,0 +1,39 @@ + +index.number_of_shards: 2 +index.number_of_replicas: 0 + +# Dont write data to hdd in tests +index.store.type: memory + +# Required plugins +plugin.mandatory: mapper-attachments, geocluster-facet, transport-thrift, transport-memcached, image + +# For bulk tests +bulk.udp.enabled: true +bulk.udp.bulk_actions: 5 + +# For script tests +script.inline: on +script.indexed: on + +# Disable dynamic memory allocation +bootstrap.mlockall: true + +# Dont accept connections not from localhost +#network.host: "127.0.0.1" + +# Limit threadpool by set number of available processors to 1 +# Without this, travis builds will be failed with OutOfMemory error +processors: 1 + +# All nodes will be called Elastica +node.name: Elastica + +# Ports config +http.port: 9200 +transport.tcp.port: 9300 +thrift.port: 9500 +memcached.port: 11211 + +# Added for snapshot tests +path.repo: ["/tmp/test_register", "/tmp/test_repository"] \ No newline at end of file diff --git a/vendor/ruflin/elastica/env/elasticsearch/logging.yml b/vendor/ruflin/elastica/env/elasticsearch/logging.yml new file mode 100644 index 00000000..9e00d01c --- /dev/null +++ b/vendor/ruflin/elastica/env/elasticsearch/logging.yml @@ -0,0 +1,56 @@ +# you can override this using by setting a system property, for example -Des.logger.level=DEBUG +es.logger.level: INFO +rootLogger: ${es.logger.level}, console, file +logger: + # log action execution errors for easier debugging + action: DEBUG + # reduce the logging for aws, too much is logged under the default INFO + com.amazonaws: WARN + + # gateway + #gateway: DEBUG + #index.gateway: DEBUG + + # peer shard recovery + #indices.recovery: DEBUG + + # discovery + #discovery: TRACE + + index.search.slowlog: TRACE, index_search_slow_log_file + index.indexing.slowlog: TRACE, index_indexing_slow_log_file + +additivity: + index.search.slowlog: false + index.indexing.slowlog: false + +appender: + console: + type: console + layout: + type: consolePattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" + + file: + type: dailyRollingFile + file: ${path.logs}/${cluster.name}.log + datePattern: "'.'yyyy-MM-dd" + layout: + type: pattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" + + index_search_slow_log_file: + type: dailyRollingFile + file: ${path.logs}/${cluster.name}_index_search_slowlog.log + datePattern: "'.'yyyy-MM-dd" + layout: + type: pattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" + + index_indexing_slow_log_file: + type: dailyRollingFile + file: ${path.logs}/${cluster.name}_index_indexing_slowlog.log + datePattern: "'.'yyyy-MM-dd" + layout: + type: pattern + conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" diff --git a/vendor/ruflin/elastica/env/nginx/mime.types b/vendor/ruflin/elastica/env/nginx/mime.types new file mode 100644 index 00000000..6c64bf73 --- /dev/null +++ b/vendor/ruflin/elastica/env/nginx/mime.types @@ -0,0 +1,109 @@ +types { + +# Audio + audio/midi mid midi kar; + audio/mp4 aac f4a f4b m4a; + audio/mpeg mp3; + audio/ogg oga ogg opus; + audio/x-realaudio ra; + audio/x-wav wav; + +# Images + image/bmp bmp; + image/gif gif; + image/jpeg jpeg jpg; + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico cur; + image/x-jng jng; + +# JavaScript + application/javascript js; + application/json json; + +# Manifest files + application/x-web-app-manifest+json webapp; + text/cache-manifest manifest appcache; + +# Microsoft Office + application/msword doc; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; + application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; + +# Video + video/3gpp 3gpp 3gp; + video/mp4 mp4 m4v f4v f4p; + video/mpeg mpeg mpg; + video/ogg ogv; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; + +# Web feeds + application/xml atom rdf rss xml; + +# Web fonts + application/font-woff woff; + application/font-woff2 woff2; + application/vnd.ms-fontobject eot; + application/x-font-ttf ttc ttf; + font/opentype otf; + +# Other + application/java-archive jar war ear; + application/mac-binhex40 hqx; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.wap.wmlc wmlc; + application/xhtml+xml xhtml; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-chrome-extension crx; + application/x-opera-extension oex; + application/x-xpinstall xpi; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-bittorrent torrent; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + application/octet-stream safariextz; + + text/css css; + text/html html htm shtml; + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/vtt vtt; + text/x-component htc; + text/x-vcard vcf; + +} diff --git a/vendor/ruflin/elastica/env/nginx/nginx.conf b/vendor/ruflin/elastica/env/nginx/nginx.conf new file mode 100644 index 00000000..edf177d3 --- /dev/null +++ b/vendor/ruflin/elastica/env/nginx/nginx.conf @@ -0,0 +1,38 @@ + +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + charset_types text/xml text/plain text/vnd.wap.wml application/x-javascript application/rss+xml text/css application/javascript application/json; + + server { + listen 80; + + #root {{ ES_PROJECT_ROOT }}; + + location / { + autoindex on; + } + } + + server { + listen 12345; + + location / { + proxy_pass http://elasticsearch:9200; + } + } + + server { + listen 12346; + + location / { + return 403; + } + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/AbstractUpdateAction.php b/vendor/ruflin/elastica/lib/Elastica/AbstractUpdateAction.php new file mode 100644 index 00000000..468087af --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/AbstractUpdateAction.php @@ -0,0 +1,568 @@ + + */ +class AbstractUpdateAction extends Param +{ + /** + * @var \Elastica\Document + */ + protected $_upsert; + + /** + * Sets the id of the document. + * + * @param string $id + * + * @return $this + */ + public function setId($id) + { + return $this->setParam('_id', $id); + } + + /** + * Returns document id. + * + * @return string|int Document id + */ + public function getId() + { + return ($this->hasParam('_id')) ? $this->getParam('_id') : null; + } + + /** + * @return bool + */ + public function hasId() + { + return '' !== (string) $this->getId(); + } + + /** + * Sets lifetime of document. + * + * @param string $ttl + * + * @return $this + */ + public function setTtl($ttl) + { + return $this->setParam('_ttl', $ttl); + } + + /** + * @return string + */ + public function getTtl() + { + return $this->getParam('_ttl'); + } + + /** + * @return bool + */ + public function hasTtl() + { + return $this->hasParam('_ttl'); + } + + /** + * Sets the document type name. + * + * @param string $type Type name + * + * @return $this + */ + public function setType($type) + { + if ($type instanceof Type) { + $this->setIndex($type->getIndex()); + $type = $type->getName(); + } + + return $this->setParam('_type', $type); + } + + /** + * Return document type name. + * + * @throws \Elastica\Exception\InvalidException + * + * @return string Document type name + */ + public function getType() + { + return $this->getParam('_type'); + } + + /** + * Sets the document index name. + * + * @param string $index Index name + * + * @return $this + */ + public function setIndex($index) + { + if ($index instanceof Index) { + $index = $index->getName(); + } + + return $this->setParam('_index', $index); + } + + /** + * Get the document index name. + * + * @throws \Elastica\Exception\InvalidException + * + * @return string Index name + */ + public function getIndex() + { + return $this->getParam('_index'); + } + + /** + * Sets the version of a document for use with optimistic concurrency control. + * + * @param int $version Document version + * + * @return $this + * + * @link https://www.elastic.co/blog/versioning + */ + public function setVersion($version) + { + return $this->setParam('_version', (int) $version); + } + + /** + * Returns document version. + * + * @return string|int Document version + */ + public function getVersion() + { + return $this->getParam('_version'); + } + + /** + * @return bool + */ + public function hasVersion() + { + return $this->hasParam('_version'); + } + + /** + * Sets the version_type of a document + * Default in ES is internal, but you can set to external to use custom versioning. + * + * @param int $versionType Document version type + * + * @return $this + */ + public function setVersionType($versionType) + { + return $this->setParam('_version_type', $versionType); + } + + /** + * Returns document version type. + * + * @return string|int Document version type + */ + public function getVersionType() + { + return $this->getParam('_version_type'); + } + + /** + * @return bool + */ + public function hasVersionType() + { + return $this->hasParam('_version_type'); + } + + /** + * Sets parent document id. + * + * @param string|int $parent Parent document id + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-parent-field.html + */ + public function setParent($parent) + { + return $this->setParam('_parent', $parent); + } + + /** + * Returns the parent document id. + * + * @return string|int Parent document id + */ + public function getParent() + { + return $this->getParam('_parent'); + } + + /** + * @return bool + */ + public function hasParent() + { + return $this->hasParam('_parent'); + } + + /** + * Set operation type. + * + * @param string $opType Only accept create + * + * @return $this + */ + public function setOpType($opType) + { + return $this->setParam('_op_type', $opType); + } + + /** + * Get operation type. + * + * @return string + */ + public function getOpType() + { + return $this->getParam('_op_type'); + } + + /** + * @return bool + */ + public function hasOpType() + { + return $this->hasParam('_op_type'); + } + + /** + * Set percolate query param. + * + * @param string $value percolator filter + * + * @return $this + */ + public function setPercolate($value = '*') + { + return $this->setParam('_percolate', $value); + } + + /** + * Get percolate parameter. + * + * @return string + */ + public function getPercolate() + { + return $this->getParam('_percolate'); + } + + /** + * @return bool + */ + public function hasPercolate() + { + return $this->hasParam('_percolate'); + } + + /** + * Set routing query param. + * + * @param string $value routing + * + * @return $this + */ + public function setRouting($value) + { + return $this->setParam('_routing', $value); + } + + /** + * Get routing parameter. + * + * @return string + */ + public function getRouting() + { + return $this->getParam('_routing'); + } + + /** + * @return bool + */ + public function hasRouting() + { + return $this->hasParam('_routing'); + } + + /** + * @param array|string $fields + * + * @return $this + */ + public function setFields($fields) + { + if (is_array($fields)) { + $fields = implode(',', $fields); + } + + return $this->setParam('_fields', (string) $fields); + } + + /** + * @return $this + */ + public function setFieldsSource() + { + return $this->setFields('_source'); + } + + /** + * @return string + */ + public function getFields() + { + return $this->getParam('_fields'); + } + + /** + * @return bool + */ + public function hasFields() + { + return $this->hasParam('_fields'); + } + + /** + * @param int $num + * + * @return $this + */ + public function setRetryOnConflict($num) + { + return $this->setParam('_retry_on_conflict', (int) $num); + } + + /** + * @return int + */ + public function getRetryOnConflict() + { + return $this->getParam('_retry_on_conflict'); + } + + /** + * @return bool + */ + public function hasRetryOnConflict() + { + return $this->hasParam('_retry_on_conflict'); + } + + /** + * @param string $timestamp + * + * @return $this + */ + public function setTimestamp($timestamp) + { + return $this->setParam('_timestamp', $timestamp); + } + + /** + * @return int + */ + public function getTimestamp() + { + return $this->getParam('_timestamp'); + } + + /** + * @return bool + */ + public function hasTimestamp() + { + return $this->hasParam('_timestamp'); + } + + /** + * @param bool $refresh + * + * @return $this + */ + public function setRefresh($refresh = true) + { + return $this->setParam('_refresh', (bool) $refresh); + } + + /** + * @return bool + */ + public function getRefresh() + { + return $this->getParam('_refresh'); + } + + /** + * @return bool + */ + public function hasRefresh() + { + return $this->hasParam('_refresh'); + } + + /** + * @param string $timeout + * + * @return $this + */ + public function setTimeout($timeout) + { + return $this->setParam('_timeout', $timeout); + } + + /** + * @return bool + */ + public function getTimeout() + { + return $this->getParam('_timeout'); + } + + /** + * @return string + */ + public function hasTimeout() + { + return $this->hasParam('_timeout'); + } + + /** + * @param string $timeout + * + * @return $this + */ + public function setConsistency($timeout) + { + return $this->setParam('_consistency', $timeout); + } + + /** + * @return string + */ + public function getConsistency() + { + return $this->getParam('_consistency'); + } + + /** + * @return string + */ + public function hasConsistency() + { + return $this->hasParam('_consistency'); + } + + /** + * @param string $timeout + * + * @return $this + */ + public function setReplication($timeout) + { + return $this->setParam('_replication', $timeout); + } + + /** + * @return string + */ + public function getReplication() + { + return $this->getParam('_replication'); + } + + /** + * @return bool + */ + public function hasReplication() + { + return $this->hasParam('_replication'); + } + + /** + * @param \Elastica\Document|array $data + * + * @return $this + */ + public function setUpsert($data) + { + $document = Document::create($data); + $this->_upsert = $document; + + return $this; + } + + /** + * @return \Elastica\Document + */ + public function getUpsert() + { + return $this->_upsert; + } + + /** + * @return bool + */ + public function hasUpsert() + { + return null !== $this->_upsert; + } + + /** + * @param array $fields if empty array all options will be returned, field names can be either with underscored either without, i.e. _percolate, routing + * @param bool $withUnderscore should option keys contain underscore prefix + * + * @return array + */ + public function getOptions(array $fields = array(), $withUnderscore = false) + { + if (!empty($fields)) { + $data = array(); + foreach ($fields as $field) { + $key = '_'.ltrim($field, '_'); + if ($this->hasParam($key) && '' !== (string) $this->getParam($key)) { + $data[$key] = $this->getParam($key); + } + } + } else { + $data = $this->getParams(); + } + if (!$withUnderscore) { + foreach ($data as $key => $value) { + $data[ltrim($key, '_')] = $value; + unset($data[$key]); + } + } + + return $data; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractAggregation.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractAggregation.php new file mode 100644 index 00000000..4cbb6b74 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractAggregation.php @@ -0,0 +1,97 @@ +setName($name); + } + + /** + * Set the name of this aggregation. + * + * @param string $name + * + * @return $this + */ + public function setName($name) + { + $this->_name = $name; + + return $this; + } + + /** + * Retrieve the name of this aggregation. + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Retrieve all subaggregations belonging to this aggregation. + * + * @return array + */ + public function getAggs() + { + return $this->_aggs; + } + + /** + * Add a sub-aggregation. + * + * @param AbstractAggregation $aggregation + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function addAggregation(AbstractAggregation $aggregation) + { + if ($aggregation instanceof GlobalAggregation) { + throw new InvalidException('Global aggregators can only be placed as top level aggregators'); + } + + $this->_aggs[$aggregation->getName()] = $aggregation->toArray(); + + return $this; + } + + /** + * @return array + */ + public function toArray() + { + $array = parent::toArray(); + if (array_key_exists('global_aggregation', $array)) { + // compensate for class name GlobalAggregation + $array = array('global' => new \stdClass()); + } + if (sizeof($this->_aggs)) { + $array['aggs'] = $this->_aggs; + } + + return $array; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractSimpleAggregation.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractSimpleAggregation.php new file mode 100644 index 00000000..02a0fddb --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractSimpleAggregation.php @@ -0,0 +1,37 @@ +setParam('field', $field); + } + + /** + * Set a script for this aggregation. + * + * @param string|Script $script + * + * @return $this + */ + public function setScript($script) + { + if ($script instanceof Script) { + $params = array_merge($this->getParams(), $script->toArray()); + + return $this->setParams($params); + } + + return $this->setParam('script', $script); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractTermsAggregation.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractTermsAggregation.php new file mode 100644 index 00000000..57b56964 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/AbstractTermsAggregation.php @@ -0,0 +1,97 @@ +setParam('min_doc_count', $count); + } + + /** + * Filter documents to include based on a regular expression. + * + * @param string $pattern a regular expression + * @param string $flags Java Pattern flags + * + * @return $this + */ + public function setInclude($pattern, $flags = null) + { + if (is_null($flags)) { + return $this->setParam('include', $pattern); + } + + return $this->setParam('include', array( + 'pattern' => $pattern, + 'flags' => $flags, + )); + } + + /** + * Filter documents to exclude based on a regular expression. + * + * @param string $pattern a regular expression + * @param string $flags Java Pattern flags + * + * @return $this + */ + public function setExclude($pattern, $flags = null) + { + if (is_null($flags)) { + return $this->setParam('exclude', $pattern); + } + + return $this->setParam('exclude', array( + 'pattern' => $pattern, + 'flags' => $flags, + )); + } + + /** + * Sets the amount of terms to be returned. + * + * @param int $size The amount of terms to be returned. + * + * @return $this + */ + public function setSize($size) + { + return $this->setParam('size', $size); + } + + /** + * Sets how many terms the coordinating node will request from each shard. + * + * @param int $shard_size The amount of terms to be returned. + * + * @return $this + */ + public function setShardSize($shard_size) + { + return $this->setParam('shard_size', $shard_size); + } + + /** + * Instruct Elasticsearch to use direct field data or ordinals of the field values to execute this aggregation. + * The execution hint will be ignored if it is not applicable. + * + * @param string $hint map or ordinals + * + * @return $this + */ + public function setExecutionHint($hint) + { + return $this->setParam('execution_hint', $hint); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/Avg.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Avg.php new file mode 100644 index 00000000..abc2f7a1 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Avg.php @@ -0,0 +1,11 @@ +setParam('precision_threshold', $precisionThreshold); + } + + /** + * @param bool $rehash + * + * @return $this + */ + public function setRehash($rehash) + { + if (!is_bool($rehash)) { + throw new \InvalidArgumentException('rehash only supports boolean values'); + } + + return $this->setParam('rehash', $rehash); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/DateHistogram.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/DateHistogram.php new file mode 100644 index 00000000..8636f34c --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/DateHistogram.php @@ -0,0 +1,130 @@ +setParam('pre_zone', $preZone); + } + + /** + * Set post-rounding based on interval. + * + * @deprecated Option "post_zone" is deprecated as of ES 1.5. Use "time_zone" instead + * + * @param string $postZone + * + * @return $this + */ + public function setPostZone($postZone) + { + return $this->setParam('post_zone', $postZone); + } + + /** + * Set time_zone option. + * + * @param string + * + * @return $this + */ + public function setTimezone($timezone) + { + return $this->setParam('time_zone', $timezone); + } + + /** + * Set pre-zone adjustment for larger time intervals (day and above). + * + * @deprecated Option "pre_zone_adjust_large_interval" is deprecated as of ES 1.5 + * + * @param string $adjust + * + * @return $this + */ + public function setPreZoneAdjustLargeInterval($adjust) + { + return $this->setParam('pre_zone_adjust_large_interval', $adjust); + } + + /** + * Adjust for granularity of date data. + * + * @param int $factor set to 1000 if date is stored in seconds rather than milliseconds + * + * @return $this + */ + public function setFactor($factor) + { + return $this->setParam('factor', $factor); + } + + /** + * Set the offset for pre-rounding. + * + * @deprecated Option "pre_offset" is deprecated as of ES 1.5. Use "offset" instead + * + * @param string $offset "1d", for example + * + * @return $this + */ + public function setPreOffset($offset) + { + return $this->setParam('pre_offset', $offset); + } + + /** + * Set the offset for post-rounding. + * + * @deprecated Option "post_offset" is deprecated as of ES 1.5. Use "offset" instead + * + * @param string $offset "1d", for example + * + * @return $this + */ + public function setPostOffset($offset) + { + return $this->setParam('post_offset', $offset); + } + + /** + * Set offset option. + * + * @param string + * + * @return $this + */ + public function setOffset($offset) + { + return $this->setParam('offset', $offset); + } + + /** + * Set the format for returned bucket key_as_string values. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket-daterange-aggregation.html#date-format-pattern + * + * @param string $format see link for formatting options + * + * @return $this + */ + public function setFormat($format) + { + return $this->setParam('format', $format); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/DateRange.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/DateRange.php new file mode 100644 index 00000000..deb5881d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/DateRange.php @@ -0,0 +1,22 @@ +setParam('format', $format); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/ExtendedStats.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ExtendedStats.php new file mode 100644 index 00000000..2b108bd1 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ExtendedStats.php @@ -0,0 +1,11 @@ +setFilter($filter); + } + } + + /** + * Set the filter for this aggregation. + * + * @param AbstractFilter $filter + * + * @return $this + */ + public function setFilter(AbstractFilter $filter) + { + return $this->setParam('filter', $filter->toArray()); + } + + /** + * @return array + */ + public function toArray() + { + $array = array( + 'filter' => $this->getParam('filter'), + ); + + if ($this->_aggs) { + $array['aggs'] = $this->_aggs; + } + + return $array; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/Filters.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Filters.php new file mode 100644 index 00000000..e0fbf060 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Filters.php @@ -0,0 +1,59 @@ +toArray(); + } else { + $filterArray[$name] = $filter->toArray(); + } + + return $this->addParam('filters', $filterArray); + } + + /** + * @return array + */ + public function toArray() + { + $array = array(); + $filters = $this->getParam('filters'); + + foreach ($filters as $filter) { + // Detect between anonymous filters and named ones + $key = key($filter); + + if (is_string($key)) { + $array['filters']['filters'][$key] = current($filter); + } else { + $array['filters']['filters'][] = current($filter); + } + } + + if ($this->_aggs) { + $array['aggs'] = $this->_aggs; + } + + return $array; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/GeoDistance.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/GeoDistance.php new file mode 100644 index 00000000..c50018a0 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/GeoDistance.php @@ -0,0 +1,104 @@ +setField($field)->setOrigin($origin); + } + + /** + * Set the field for this aggregation. + * + * @param string $field the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Set the origin point from which distances will be calculated. + * + * @param string|array $origin valid formats are array("lat" => 52.3760, "lon" => 4.894), "52.3760, 4.894", and array(4.894, 52.3760) + * + * @return $this + */ + public function setOrigin($origin) + { + return $this->setParam('origin', $origin); + } + + /** + * Add a distance range to this aggregation. + * + * @param int $fromValue a distance + * @param int $toValue a distance + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function addRange($fromValue = null, $toValue = null) + { + if (is_null($fromValue) && is_null($toValue)) { + throw new InvalidException('Either fromValue or toValue must be set. Both cannot be null.'); + } + + $range = array(); + + if (!is_null($fromValue)) { + $range['from'] = $fromValue; + } + + if (!is_null($toValue)) { + $range['to'] = $toValue; + } + + return $this->addParam('ranges', $range); + } + + /** + * Set the unit of distance measure for this aggregation. + * + * @param string $unit defaults to km + * + * @return $this + */ + public function setUnit($unit) + { + return $this->setParam('unit', $unit); + } + + /** + * Set the method by which distances will be calculated. + * + * @param string $distanceType see DISTANCE_TYPE_* constants for options. Defaults to sloppy_arc. + * + * @return $this + */ + public function setDistanceType($distanceType) + { + return $this->setParam('distance_type', $distanceType); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/GeohashGrid.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/GeohashGrid.php new file mode 100644 index 00000000..e7a40471 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/GeohashGrid.php @@ -0,0 +1,68 @@ +setField($field); + } + + /** + * Set the field for this aggregation. + * + * @param string $field the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Set the precision for this aggregation. + * + * @param int $precision an integer between 1 and 12, inclusive. Defaults to 5. + * + * @return $this + */ + public function setPrecision($precision) + { + return $this->setParam('precision', $precision); + } + + /** + * Set the maximum number of buckets to return. + * + * @param int $size defaults to 10,000 + * + * @return $this + */ + public function setSize($size) + { + return $this->setParam('size', $size); + } + + /** + * Set the number of results returned from each shard. + * + * @param int $shardSize + * + * @return $this + */ + public function setShardSize($shardSize) + { + return $this->setParam('shard_size', $shardSize); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/GlobalAggregation.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/GlobalAggregation.php new file mode 100644 index 00000000..523844d2 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/GlobalAggregation.php @@ -0,0 +1,11 @@ +setField($field); + $this->setInterval($interval); + } + + /** + * Set the interval by which documents will be bucketed. + * + * @param int $interval + * + * @return $this + */ + public function setInterval($interval) + { + return $this->setParam('interval', $interval); + } + + /** + * Set the bucket sort order. + * + * @param string $order "_count", "_term", or the name of a sub-aggregation or sub-aggregation response field + * @param string $direction "asc" or "desc" + * + * @return $this + */ + public function setOrder($order, $direction) + { + return $this->setParam('order', array($order => $direction)); + } + + /** + * Set the minimum number of documents which must fall into a bucket in order for the bucket to be returned. + * + * @param int $count set to 0 to include empty buckets + * + * @return $this + */ + public function setMinimumDocumentCount($count) + { + return $this->setParam('min_doc_count', $count); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/IpRange.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/IpRange.php new file mode 100644 index 00000000..7a4ef7c8 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/IpRange.php @@ -0,0 +1,72 @@ +setField($field); + } + + /** + * Set the field for this aggregation. + * + * @param string $field the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Add an ip range to this aggregation. + * + * @param string $fromValue a valid ipv4 address. Low end of this range, exclusive (greater than) + * @param string $toValue a valid ipv4 address. High end of this range, exclusive (less than) + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function addRange($fromValue = null, $toValue = null) + { + if (is_null($fromValue) && is_null($toValue)) { + throw new InvalidException('Either fromValue or toValue must be set. Both cannot be null.'); + } + $range = array(); + if (!is_null($fromValue)) { + $range['from'] = $fromValue; + } + if (!is_null($toValue)) { + $range['to'] = $toValue; + } + + return $this->addParam('ranges', $range); + } + + /** + * Add an ip range in the form of a CIDR mask. + * + * @param string $mask a valid CIDR mask + * + * @return $this + */ + public function addMaskRange($mask) + { + return $this->addParam('ranges', array('mask' => $mask)); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/Max.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Max.php new file mode 100644 index 00000000..fc0294ca --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Max.php @@ -0,0 +1,11 @@ +setField($field); + } + + /** + * Set the field for this aggregation. + * + * @param string $field the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/Nested.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Nested.php new file mode 100644 index 00000000..76407bc8 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Nested.php @@ -0,0 +1,32 @@ +setPath($path); + } + + /** + * Set the nested path for this aggregation. + * + * @param string $path + * + * @return $this + */ + public function setPath($path) + { + return $this->setParam('path', $path); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/Percentiles.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Percentiles.php new file mode 100644 index 00000000..22079634 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Percentiles.php @@ -0,0 +1,59 @@ +setField($field); + } + } + + /** + * Set compression parameter. + * + * @param float $value + * + * @return $this + */ + public function setCompression($value) + { + return $this->setParam('compression', (float) $value); + } + + /** + * Set which percents must be returned. + * + * @param float[] $percents + * + * @return $this + */ + public function setPercents(array $percents) + { + return $this->setParam('percents', $percents); + } + + /** + * Add yet another percent to result. + * + * @param float $percent + * + * @return $this + */ + public function addPercent($percent) + { + return $this->addParam('percents', (float) $percent); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/Range.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Range.php new file mode 100644 index 00000000..becafb28 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Range.php @@ -0,0 +1,58 @@ +addParam('ranges', $range); + } + + /** + * If set to true, a unique string key will be associated with each bucket, and ranges will be returned as an associative array. + * + * @param bool $keyed + * + * @return $this + */ + public function setKeyedResponse($keyed = true) + { + return $this->setParam('keyed', (bool) $keyed); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/ReverseNested.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ReverseNested.php new file mode 100644 index 00000000..5216ae85 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ReverseNested.php @@ -0,0 +1,49 @@ +setPath($path); + } + } + + /** + * Set the nested path for this aggregation. + * + * @param string $path + * + * @return $this + */ + public function setPath($path) + { + return $this->setParam('path', $path); + } + + /** + * {@inheritDoc} + */ + public function toArray() + { + $array = parent::toArray(); + + // ensure we have an object for the reverse_nested key. + // if we don't have a path, then this would otherwise get encoded as an empty array, which is invalid. + $array['reverse_nested'] = (object) $array['reverse_nested']; + + return $array; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/ScriptedMetric.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ScriptedMetric.php new file mode 100644 index 00000000..3e51f056 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ScriptedMetric.php @@ -0,0 +1,82 @@ +setInitScript($initScript); + } + if ($mapScript) { + $this->setMapScript($mapScript); + } + if ($combineScript) { + $this->setCombineScript($combineScript); + } + if ($reduceScript) { + $this->setReduceScript($reduceScript); + } + } + + /** + * Set the field for this aggregation. + * + * @param string $script the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setCombineScript($script) + { + return $this->setParam('combine_script', $script); + } + + /** + * Set the field for this aggregation. + * + * @param string $script the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setInitScript($script) + { + return $this->setParam('init_script', $script); + } + + /** + * Set the field for this aggregation. + * + * @param string $script the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setMapScript($script) + { + return $this->setParam('map_script', $script); + } + + /** + * Set the field for this aggregation. + * + * @param string $script the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setReduceScript($script) + { + return $this->setParam('reduce_script', $script); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/SignificantTerms.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/SignificantTerms.php new file mode 100644 index 00000000..fa394791 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/SignificantTerms.php @@ -0,0 +1,27 @@ +setParam('background_filter', $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/Stats.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Stats.php new file mode 100644 index 00000000..f512628c --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/Stats.php @@ -0,0 +1,11 @@ +setParam('order', array($order => $direction)); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/TopHits.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/TopHits.php new file mode 100644 index 00000000..91a48a48 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/TopHits.php @@ -0,0 +1,156 @@ +setParam('size', (int) $size); + } + + /** + * The offset from the first result you want to fetch. + * + * @param int $from + * + * @return $this + */ + public function setFrom($from) + { + return $this->setParam('from', (int) $from); + } + + /** + * How the top matching hits should be sorted. By default the hits are sorted by the score of the main query. + * + * @param array $sortArgs + * + * @return $this + */ + public function setSort(array $sortArgs) + { + return $this->setParam('sort', $sortArgs); + } + + /** + * Allows to control how the _source field is returned with every hit. + * + * @param array $fields + * + * @return $this + */ + public function setSource(array $fields) + { + return $this->setParam('_source', $fields); + } + + /** + * Returns a version for each search hit. + * + * @param bool $version + * + * @return $this + */ + public function setVersion($version) + { + return $this->setParam('version', (bool) $version); + } + + /** + * Enables explanation for each hit on how its score was computed. + * + * @param bool $explain + * + * @return $this + */ + public function setExplain($explain) + { + return $this->setParam('explain', (bool) $explain); + } + + /** + * Set script fields. + * + * @param array|\Elastica\ScriptFields $scriptFields + * + * @return $this + */ + public function setScriptFields($scriptFields) + { + if (is_array($scriptFields)) { + $scriptFields = new ScriptFields($scriptFields); + } + + return $this->setParam('script_fields', $scriptFields->toArray()); + } + + /** + * Adds a Script to the aggregation. + * + * @param string $name + * @param \Elastica\Script $script + * + * @return $this + */ + public function addScriptField($name, Script $script) + { + $this->_params['script_fields'][$name] = $script->toArray(); + + return $this; + } + + /** + * Sets highlight arguments for the results. + * + * @param array $highlightArgs + * + * @return $this + */ + public function setHighlight(array $highlightArgs) + { + return $this->setParam('highlight', $highlightArgs); + } + + /** + * Allows to return the field data representation of a field for each hit. + * + * @param array $fields + * + * @return $this + */ + public function setFieldDataFields(array $fields) + { + return $this->setParam('fielddata_fields', $fields); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Aggregation/ValueCount.php b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ValueCount.php new file mode 100644 index 00000000..8706a1be --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Aggregation/ValueCount.php @@ -0,0 +1,32 @@ +setField($field); + } + + /** + * Set the field for this aggregation. + * + * @param string $field the name of the document field on which to perform this aggregation + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk.php b/vendor/ruflin/elastica/lib/Elastica/Bulk.php new file mode 100644 index 00000000..e7693dce --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk.php @@ -0,0 +1,442 @@ +_client = $client; + } + + /** + * @param string|\Elastica\Index $index + * + * @return $this + */ + public function setIndex($index) + { + if ($index instanceof Index) { + $index = $index->getName(); + } + + $this->_index = (string) $index; + + return $this; + } + + /** + * @return string + */ + public function getIndex() + { + return $this->_index; + } + + /** + * @return bool + */ + public function hasIndex() + { + return '' !== $this->getIndex(); + } + + /** + * @param string|\Elastica\Type $type + * + * @return $this + */ + public function setType($type) + { + if ($type instanceof Type) { + $this->setIndex($type->getIndex()->getName()); + $type = $type->getName(); + } + + $this->_type = (string) $type; + + return $this; + } + + /** + * @return string + */ + public function getType() + { + return $this->_type; + } + + /** + * @return bool + */ + public function hasType() + { + return '' !== $this->_type; + } + + /** + * @return string + */ + public function getPath() + { + $path = ''; + if ($this->hasIndex()) { + $path .= $this->getIndex().'/'; + if ($this->hasType()) { + $path .= $this->getType().'/'; + } + } + $path .= '_bulk'; + + return $path; + } + + /** + * @param \Elastica\Bulk\Action $action + * + * @return $this + */ + public function addAction(Action $action) + { + $this->_actions[] = $action; + + return $this; + } + + /** + * @param \Elastica\Bulk\Action[] $actions + * + * @return $this + */ + public function addActions(array $actions) + { + foreach ($actions as $action) { + $this->addAction($action); + } + + return $this; + } + + /** + * @return \Elastica\Bulk\Action[] + */ + public function getActions() + { + return $this->_actions; + } + + /** + * @param \Elastica\Document $document + * @param string $opType + * + * @return $this + */ + public function addDocument(Document $document, $opType = null) + { + $action = AbstractDocumentAction::create($document, $opType); + + return $this->addAction($action); + } + + /** + * @param \Elastica\Document[] $documents + * @param string $opType + * + * @return $this + */ + public function addDocuments(array $documents, $opType = null) + { + foreach ($documents as $document) { + $this->addDocument($document, $opType); + } + + return $this; + } + + /** + * @param \Elastica\Script $data + * @param string $opType + * + * @return $this + */ + public function addScript(Script $script, $opType = null) + { + $action = AbstractDocumentAction::create($script, $opType); + + return $this->addAction($action); + } + + /** + * @param \Elastica\Document[] $scripts + * @param string $opType + * + * @return $this + */ + public function addScripts(array $scripts, $opType = null) + { + foreach ($scripts as $document) { + $this->addScript($document, $opType); + } + + return $this; + } + + /** + * @param \Elastica\Script|\Elastica\Document\array $data + * @param string $opType + * + * @return $this + */ + public function addData($data, $opType = null) + { + if (!is_array($data)) { + $data = array($data); + } + + foreach ($data as $actionData) { + if ($actionData instanceof Script) { + $this->addScript($actionData, $opType); + } elseif ($actionData instanceof Document) { + $this->addDocument($actionData, $opType); + } else { + throw new \InvalidArgumentException('Data should be a Document, a Script or an array containing Documents and/or Scripts'); + } + } + + return $this; + } + + /** + * @param array $data + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function addRawData(array $data) + { + foreach ($data as $row) { + if (is_array($row)) { + $opType = key($row); + $metadata = reset($row); + if (Action::isValidOpType($opType)) { + // add previous action + if (isset($action)) { + $this->addAction($action); + } + $action = new Action($opType, $metadata); + } elseif (isset($action)) { + $action->setSource($row); + $this->addAction($action); + $action = null; + } else { + throw new InvalidException('Invalid bulk data, source must follow action metadata'); + } + } else { + throw new InvalidException('Invalid bulk data, should be array of array, Document or Bulk/Action'); + } + } + + // add last action if available + if (isset($action)) { + $this->addAction($action); + } + + return $this; + } + + /** + * Set a url parameter on the request bulk request. + * + * @param string $name name of the parameter + * @param string $value value of the parameter + * + * @return $this + */ + public function setRequestParam($name, $value) + { + $this->_requestParams[$name] = $value; + + return $this; + } + + /** + * Set the amount of time that the request will wait the shards to come on line. + * Requires Elasticsearch version >= 0.90.8. + * + * @param string $time timeout in Elasticsearch time format + * + * @return $this + */ + public function setShardTimeout($time) + { + return $this->setRequestParam('timeout', $time); + } + + /** + * @return string + */ + public function __toString() + { + return $this->toString(); + } + + /** + * @return string + */ + public function toString() + { + $data = ''; + foreach ($this->getActions() as $action) { + $data .= $action->toString(); + } + + return $data; + } + + /** + * @return array + */ + public function toArray() + { + $data = array(); + foreach ($this->getActions() as $action) { + foreach ($action->toArray() as $row) { + $data[] = $row; + } + } + + return $data; + } + + /** + * @return \Elastica\Bulk\ResponseSet + */ + public function send() + { + $path = $this->getPath(); + $data = $this->toString(); + + $response = $this->_client->request($path, Request::PUT, $data, $this->_requestParams); + + return $this->_processResponse($response); + } + + /** + * @param \Elastica\Response $response + * + * @throws \Elastica\Exception\Bulk\ResponseException + * @throws \Elastica\Exception\InvalidException + * + * @return \Elastica\Bulk\ResponseSet + */ + protected function _processResponse(Response $response) + { + $responseData = $response->getData(); + + $actions = $this->getActions(); + + $bulkResponses = array(); + + if (isset($responseData['items']) && is_array($responseData['items'])) { + foreach ($responseData['items'] as $key => $item) { + if (!isset($actions[$key])) { + throw new InvalidException('No response found for action #'.$key); + } + + $action = $actions[$key]; + + $opType = key($item); + $bulkResponseData = reset($item); + + if ($action instanceof AbstractDocumentAction) { + $data = $action->getData(); + if ($data instanceof Document && $data->isAutoPopulate() + || $this->_client->getConfigValue(array('document', 'autoPopulate'), false) + ) { + if (!$data->hasId() && isset($bulkResponseData['_id'])) { + $data->setId($bulkResponseData['_id']); + } + if (isset($bulkResponseData['_version'])) { + $data->setVersion($bulkResponseData['_version']); + } + } + } + + $bulkResponses[] = new BulkResponse($bulkResponseData, $action, $opType); + } + } + + $bulkResponseSet = new ResponseSet($response, $bulkResponses); + + if ($bulkResponseSet->hasError()) { + throw new BulkResponseException($bulkResponseSet); + } + + return $bulkResponseSet; + } + + /** + * @param string $host + * @param int $port + * + * @throws \Elastica\Exception\Bulk\UdpException + */ + public function sendUdp($host = null, $port = null) + { + if (null === $host) { + $host = $this->_client->getConfigValue(array('udp', 'host'), self::UDP_DEFAULT_HOST); + } + if (null === $port) { + $port = $this->_client->getConfigValue(array('udp', 'port'), self::UDP_DEFAULT_PORT); + } + + $message = $this->toString(); + $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + $result = socket_sendto($socket, $message, strlen($message), 0, $host, $port); + socket_close($socket); + if (false === $result) { + throw new UdpException('UDP request failed'); + } + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk/Action.php b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action.php new file mode 100644 index 00000000..25d02adc --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action.php @@ -0,0 +1,228 @@ +setOpType($opType); + $this->setMetadata($metadata); + $this->setSource($source); + } + + /** + * @param string $type + * + * @return $this + */ + public function setOpType($type) + { + $this->_opType = $type; + + return $this; + } + + /** + * @return string + */ + public function getOpType() + { + return $this->_opType; + } + + /** + * @param array $metadata + * + * @return $this + */ + public function setMetadata(array $metadata) + { + $this->_metadata = $metadata; + + return $this; + } + + /** + * @return array + */ + public function getMetadata() + { + return $this->_metadata; + } + + /** + * @return array + */ + public function getActionMetadata() + { + return array($this->_opType => $this->getMetadata()); + } + + /** + * @param array $source + * + * @return $this + */ + public function setSource($source) + { + $this->_source = $source; + + return $this; + } + + /** + * @return array + */ + public function getSource() + { + return $this->_source; + } + + /** + * @return bool + */ + public function hasSource() + { + return !empty($this->_source); + } + + /** + * @param string|\Elastica\Index $index + * + * @return $this + */ + public function setIndex($index) + { + if ($index instanceof Index) { + $index = $index->getName(); + } + $this->_metadata['_index'] = $index; + + return $this; + } + + /** + * @param string|\Elastica\Type $type + * + * @return $this + */ + public function setType($type) + { + if ($type instanceof Type) { + $this->setIndex($type->getIndex()->getName()); + $type = $type->getName(); + } + $this->_metadata['_type'] = $type; + + return $this; + } + + /** + * @param string $id + * + * @return $this + */ + public function setId($id) + { + $this->_metadata['_id'] = $id; + + return $this; + } + + /** + * @param string $routing + * + * @return $this + */ + public function setRouting($routing) + { + $this->_metadata['_routing'] = $routing; + + return $this; + } + + /** + * @return array + */ + public function toArray() + { + $data[] = $this->getActionMetadata(); + if ($this->hasSource()) { + $data[] = $this->getSource(); + } + + return $data; + } + + /** + * @return string + */ + public function toString() + { + $string = JSON::stringify($this->getActionMetadata(), JSON_FORCE_OBJECT).Bulk::DELIMITER; + if ($this->hasSource()) { + $source = $this->getSource(); + if (is_string($source)) { + $string .= $source; + } elseif (is_array($source) && array_key_exists('doc', $source) && is_string($source['doc'])) { + $docAsUpsert = (isset($source['doc_as_upsert'])) ? ', "doc_as_upsert": '.$source['doc_as_upsert'] : ''; + $string .= '{"doc": '.$source['doc'].$docAsUpsert.'}'; + } else { + $string .= JSON::stringify($source, 'JSON_ELASTICSEARCH'); + } + $string .= Bulk::DELIMITER; + } + + return $string; + } + + /** + * @param string $opType + * + * @return bool + */ + public static function isValidOpType($opType) + { + return in_array($opType, self::$opTypes); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/AbstractDocument.php b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/AbstractDocument.php new file mode 100644 index 00000000..3127ff9c --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/AbstractDocument.php @@ -0,0 +1,166 @@ +setData($document); + } + + /** + * @param \Elastica\Document $document + * + * @return $this + */ + public function setDocument(Document $document) + { + $this->_data = $document; + + $metadata = $this->_getMetadata($document); + + $this->setMetadata($metadata); + + return $this; + } + + /** + * @param \Elastica\Script $script + * + * @return $this + */ + public function setScript(Script $script) + { + if (!($this instanceof UpdateDocument)) { + throw new \BadMethodCallException('setScript() can only be used for UpdateDocument'); + } + + $this->_data = $script; + + $metadata = $this->_getMetadata($script); + $this->setMetadata($metadata); + + return $this; + } + + /** + * @param \Elastica\Script|\Elastica\Document $data + * + * @throws \InvalidArgumentException + * + * @return $this + */ + public function setData($data) + { + if ($data instanceof Script) { + $this->setScript($data); + } elseif ($data instanceof Document) { + $this->setDocument($data); + } else { + throw new \InvalidArgumentException('Data should be a Document or a Script.'); + } + + return $this; + } + + /** + * Note: This is for backwards compatibility. + * + * @return \Elastica\Document|null + */ + public function getDocument() + { + if ($this->_data instanceof Document) { + return $this->_data; + } + + return; + } + + /** + * Note: This is for backwards compatibility. + * + * @return \Elastica\Script|null + */ + public function getScript() + { + if ($this->_data instanceof Script) { + return $this->_data; + } + + return; + } + + /** + * @return \Elastica\Document|\Elastica\Script + */ + public function getData() + { + return $this->_data; + } + + /** + * @param \Elastica\AbstractUpdateAction $source + * + * @return array + */ + abstract protected function _getMetadata(AbstractUpdateAction $source); + + /** + * @param \Elastica\Document|\Elastica\Script $data + * @param string $opType + * + * @return static + */ + public static function create($data, $opType = null) + { + //Check type + if (!($data instanceof Document) && !($data instanceof Script)) { + throw new \InvalidArgumentException('The data needs to be a Document or a Script.'); + } + + if (null === $opType && $data->hasOpType()) { + $opType = $data->getOpType(); + } + + //Check that scripts can only be used for updates + if ($data instanceof Script) { + if ($opType === null) { + $opType = self::OP_TYPE_UPDATE; + } elseif ($opType != self::OP_TYPE_UPDATE) { + throw new \InvalidArgumentException('Scripts can only be used with the update operation type.'); + } + } + + switch ($opType) { + case self::OP_TYPE_DELETE: + $action = new DeleteDocument($data); + break; + case self::OP_TYPE_CREATE: + $action = new CreateDocument($data); + break; + case self::OP_TYPE_UPDATE: + $action = new UpdateDocument($data); + break; + case self::OP_TYPE_INDEX: + default: + $action = new IndexDocument($data); + break; + } + + return $action; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/CreateDocument.php b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/CreateDocument.php new file mode 100644 index 00000000..82581856 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/CreateDocument.php @@ -0,0 +1,10 @@ +getOptions($params, true); + + return $metadata; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/IndexDocument.php b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/IndexDocument.php new file mode 100644 index 00000000..0cf30e61 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/IndexDocument.php @@ -0,0 +1,53 @@ +setSource($document->getData()); + + return $this; + } + + /** + * @param \Elastica\AbstractUpdateAction $source + * + * @return array + */ + protected function _getMetadata(AbstractUpdateAction $action) + { + $params = array( + 'index', + 'type', + 'id', + 'version', + 'version_type', + 'routing', + 'percolate', + 'parent', + 'ttl', + 'timestamp', + 'retry_on_conflict', + ); + + $metadata = $action->getOptions($params, true); + + return $metadata; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/UpdateDocument.php b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/UpdateDocument.php new file mode 100644 index 00000000..2b133acb --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk/Action/UpdateDocument.php @@ -0,0 +1,65 @@ + $document->getData()); + + if ($document->getDocAsUpsert()) { + $source['doc_as_upsert'] = true; + } elseif ($document->hasUpsert()) { + $upsert = $document->getUpsert()->getData(); + + if (!empty($upsert)) { + $source['upsert'] = $upsert; + } + } + + $this->setSource($source); + + return $this; + } + + /** + * @param \Elastica\Script $script + * + * @return $this + */ + public function setScript(Script $script) + { + parent::setScript($script); + + $source = $script->toArray(); + + if ($script->hasUpsert()) { + $upsert = $script->getUpsert()->getData(); + + if (!empty($upsert)) { + $source['upsert'] = $upsert; + } + } + + $this->setSource($source); + + return $this; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk/Response.php b/vendor/ruflin/elastica/lib/Elastica/Bulk/Response.php new file mode 100644 index 00000000..855a72c5 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk/Response.php @@ -0,0 +1,46 @@ +_action = $action; + $this->_opType = $opType; + } + + /** + * @return \Elastica\Bulk\Action + */ + public function getAction() + { + return $this->_action; + } + + /** + * @return string + */ + public function getOpType() + { + return $this->_opType; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Bulk/ResponseSet.php b/vendor/ruflin/elastica/lib/Elastica/Bulk/ResponseSet.php new file mode 100644 index 00000000..1837203f --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Bulk/ResponseSet.php @@ -0,0 +1,141 @@ +getData()); + + $this->_bulkResponses = $bulkResponses; + } + + /** + * @return \Elastica\Bulk\Response[] + */ + public function getBulkResponses() + { + return $this->_bulkResponses; + } + + /** + * Returns first found error. + * + * @return string + */ + public function getError() + { + $error = ''; + + foreach ($this->getBulkResponses() as $bulkResponse) { + if ($bulkResponse->hasError()) { + $error = $bulkResponse->getError(); + break; + } + } + + return $error; + } + + /** + * @return bool + */ + public function isOk() + { + $return = true; + + foreach ($this->getBulkResponses() as $bulkResponse) { + if (!$bulkResponse->isOk()) { + $return = false; + break; + } + } + + return $return; + } + + /** + * @return bool + */ + public function hasError() + { + $return = false; + + foreach ($this->getBulkResponses() as $bulkResponse) { + if ($bulkResponse->hasError()) { + $return = true; + break; + } + } + + return $return; + } + + /** + * @return bool|\Elastica\Bulk\Response + */ + public function current() + { + if ($this->valid()) { + return $this->_bulkResponses[$this->key()]; + } else { + return false; + } + } + + /** + * + */ + public function next() + { + $this->_position++; + } + + /** + * @return int + */ + public function key() + { + return $this->_position; + } + + /** + * @return bool + */ + public function valid() + { + return isset($this->_bulkResponses[$this->key()]); + } + + /** + * + */ + public function rewind() + { + $this->_position = 0; + } + + /** + * @return int + */ + public function count() + { + return count($this->_bulkResponses); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Client.php b/vendor/ruflin/elastica/lib/Elastica/Client.php new file mode 100644 index 00000000..b30bdb43 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Client.php @@ -0,0 +1,719 @@ + + */ +class Client +{ + /** + * Config with defaults. + * + * log: Set to true, to enable logging, set a string to log to a specific file + * retryOnConflict: Use in \Elastica\Client::updateDocument + * + * @var array + */ + protected $_config = array( + 'host' => null, + 'port' => null, + 'path' => null, + 'url' => null, + 'proxy' => null, + 'transport' => null, + 'persistent' => true, + 'timeout' => null, + 'connections' => array(), // host, port, path, timeout, transport, persistent, timeout, config -> (curl, headers, url) + 'roundRobin' => false, + 'log' => false, + 'retryOnConflict' => 0, + ); + + /** + * @var callback + */ + protected $_callback = null; + + /** + * @var \Elastica\Request + */ + protected $_lastRequest; + + /** + * @var \Elastica\Response + */ + protected $_lastResponse; + + /** + * @var LoggerInterface + */ + protected $_logger = null; + /** + * @var Connection\ConnectionPool + */ + protected $_connectionPool = null; + + /** + * Creates a new Elastica client. + * + * @param array $config OPTIONAL Additional config options + * @param callback $callback OPTIONAL Callback function which can be used to be notified about errors (for example connection down) + */ + public function __construct(array $config = array(), $callback = null) + { + $this->setConfig($config); + $this->_callback = $callback; + $this->_initConnections(); + } + + /** + * Inits the client connections. + */ + protected function _initConnections() + { + $connections = array(); + + foreach ($this->getConfig('connections') as $connection) { + $connections[] = Connection::create($this->_prepareConnectionParams($connection)); + } + + if (isset($this->_config['servers'])) { + foreach ($this->getConfig('servers') as $server) { + $connections[] = Connection::create($this->_prepareConnectionParams($server)); + } + } + + // If no connections set, create default connection + if (empty($connections)) { + $connections[] = Connection::create($this->_prepareConnectionParams($this->getConfig())); + } + + if (!isset($this->_config['connectionStrategy'])) { + if ($this->getConfig('roundRobin') === true) { + $this->setConfigValue('connectionStrategy', 'RoundRobin'); + } else { + $this->setConfigValue('connectionStrategy', 'Simple'); + } + } + + $strategy = Connection\Strategy\StrategyFactory::create($this->getConfig('connectionStrategy')); + + $this->_connectionPool = new Connection\ConnectionPool($connections, $strategy, $this->_callback); + } + + /** + * Creates a Connection params array from a Client or server config array. + * + * @param array $config + * + * @return array + */ + protected function _prepareConnectionParams(array $config) + { + $params = array(); + $params['config'] = array(); + foreach ($config as $key => $value) { + if (in_array($key, array('curl', 'headers', 'url'))) { + $params['config'][$key] = $value; + } else { + $params[$key] = $value; + } + } + + return $params; + } + + /** + * Sets specific config values (updates and keeps default values). + * + * @param array $config Params + * + * @return $this + */ + public function setConfig(array $config) + { + foreach ($config as $key => $value) { + $this->_config[$key] = $value; + } + + return $this; + } + + /** + * Returns a specific config key or the whole + * config array if not set. + * + * @param string $key Config key + * + * @throws \Elastica\Exception\InvalidException + * + * @return array|string Config value + */ + public function getConfig($key = '') + { + if (empty($key)) { + return $this->_config; + } + + if (!array_key_exists($key, $this->_config)) { + throw new InvalidException('Config key is not set: '.$key); + } + + return $this->_config[$key]; + } + + /** + * Sets / overwrites a specific config value. + * + * @param string $key Key to set + * @param mixed $value Value + * + * @return $this + */ + public function setConfigValue($key, $value) + { + return $this->setConfig(array($key => $value)); + } + + /** + * @param array|string $keys config key or path of config keys + * @param mixed $default default value will be returned if key was not found + * + * @return mixed + */ + public function getConfigValue($keys, $default = null) + { + $value = $this->_config; + foreach ((array) $keys as $key) { + if (isset($value[$key])) { + $value = $value[$key]; + } else { + return $default; + } + } + + return $value; + } + + /** + * Returns the index for the given connection. + * + * @param string $name Index name to create connection to + * + * @return \Elastica\Index Index for the given name + */ + public function getIndex($name) + { + return new Index($this, $name); + } + + /** + * Adds a HTTP Header. + * + * @param string $header The HTTP Header + * @param string $headerValue The HTTP Header Value + * + * @throws \Elastica\Exception\InvalidException If $header or $headerValue is not a string + * + * @return $this + */ + public function addHeader($header, $headerValue) + { + if (is_string($header) && is_string($headerValue)) { + $this->_config['headers'][$header] = $headerValue; + } else { + throw new InvalidException('Header must be a string'); + } + + return $this; + } + + /** + * Remove a HTTP Header. + * + * @param string $header The HTTP Header to remove + * + * @throws \Elastica\Exception\InvalidException If $header is not a string + * + * @return $this + */ + public function removeHeader($header) + { + if (is_string($header)) { + if (array_key_exists($header, $this->_config['headers'])) { + unset($this->_config['headers'][$header]); + } + } else { + throw new InvalidException('Header must be a string'); + } + + return $this; + } + + /** + * Uses _bulk to send documents to the server. + * + * Array of \Elastica\Document as input. Index and type has to be + * set inside the document, because for bulk settings documents, + * documents can belong to any type and index + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @throws \Elastica\Exception\InvalidException If docs is empty + * + * @return \Elastica\Bulk\ResponseSet Response object + */ + public function updateDocuments(array $docs) + { + if (empty($docs)) { + throw new InvalidException('Array has to consist of at least one element'); + } + + $bulk = new Bulk($this); + + $bulk->addDocuments($docs, \Elastica\Bulk\Action::OP_TYPE_UPDATE); + + return $bulk->send(); + } + + /** + * Uses _bulk to send documents to the server. + * + * Array of \Elastica\Document as input. Index and type has to be + * set inside the document, because for bulk settings documents, + * documents can belong to any type and index + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @throws \Elastica\Exception\InvalidException If docs is empty + * + * @return \Elastica\Bulk\ResponseSet Response object + */ + public function addDocuments(array $docs) + { + if (empty($docs)) { + throw new InvalidException('Array has to consist of at least one element'); + } + + $bulk = new Bulk($this); + + $bulk->addDocuments($docs); + + return $bulk->send(); + } + + /** + * Update document, using update script. Requires elasticsearch >= 0.19.0. + * + * @param int $id document id + * @param array|\Elastica\Script|\Elastica\Document $data raw data for request body + * @param string $index index to update + * @param string $type type of index to update + * @param array $options array of query params to use for query. For possible options check es api + * + * @return \Elastica\Response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html + */ + public function updateDocument($id, $data, $index, $type, array $options = array()) + { + $path = $index.'/'.$type.'/'.$id.'/_update'; + + if ($data instanceof Script) { + $requestData = $data->toArray(); + } elseif ($data instanceof Document) { + $requestData = array('doc' => $data->getData()); + + if ($data->getDocAsUpsert()) { + $requestData['doc_as_upsert'] = true; + } + + $docOptions = $data->getOptions( + array( + 'version', + 'version_type', + 'routing', + 'percolate', + 'parent', + 'fields', + 'retry_on_conflict', + 'consistency', + 'replication', + 'refresh', + 'timeout', + ) + ); + $options += $docOptions; + // set fields param to source only if options was not set before + if ($data instanceof Document && ($data->isAutoPopulate() + || $this->getConfigValue(array('document', 'autoPopulate'), false)) + && !isset($options['fields']) + ) { + $options['fields'] = '_source'; + } + } else { + $requestData = $data; + } + + //If an upsert document exists + if ($data instanceof Script || $data instanceof Document) { + if ($data->hasUpsert()) { + $requestData['upsert'] = $data->getUpsert()->getData(); + } + } + + if (!isset($options['retry_on_conflict'])) { + $retryOnConflict = $this->getConfig('retryOnConflict'); + $options['retry_on_conflict'] = $retryOnConflict; + } + + $response = $this->request($path, Request::POST, $requestData, $options); + + if ($response->isOk() + && $data instanceof Document + && ($data->isAutoPopulate() || $this->getConfigValue(array('document', 'autoPopulate'), false)) + ) { + $responseData = $response->getData(); + if (isset($responseData['_version'])) { + $data->setVersion($responseData['_version']); + } + if (isset($options['fields'])) { + $this->_populateDocumentFieldsFromResponse($response, $data, $options['fields']); + } + } + + return $response; + } + + /** + * @param \Elastica\Response $response + * @param \Elastica\Document $document + * @param string $fields Array of field names to be populated or '_source' if whole document data should be updated + */ + protected function _populateDocumentFieldsFromResponse(Response $response, Document $document, $fields) + { + $responseData = $response->getData(); + if ('_source' == $fields) { + if (isset($responseData['get']['_source']) && is_array($responseData['get']['_source'])) { + $document->setData($responseData['get']['_source']); + } + } else { + $keys = explode(',', $fields); + $data = $document->getData(); + foreach ($keys as $key) { + if (isset($responseData['get']['fields'][$key])) { + $data[$key] = $responseData['get']['fields'][$key]; + } elseif (isset($data[$key])) { + unset($data[$key]); + } + } + $document->setData($data); + } + } + + /** + * Bulk deletes documents. + * + * @param array|\Elastica\Document[] $docs + * + * @throws \Elastica\Exception\InvalidException + * + * @return \Elastica\Bulk\ResponseSet + */ + public function deleteDocuments(array $docs) + { + if (empty($docs)) { + throw new InvalidException('Array has to consist of at least one element'); + } + + $bulk = new Bulk($this); + $bulk->addDocuments($docs, Action::OP_TYPE_DELETE); + + return $bulk->send(); + } + + /** + * Returns the status object for all indices. + * + * @return \Elastica\Status Status object + */ + public function getStatus() + { + return new Status($this); + } + + /** + * Returns the current cluster. + * + * @return \Elastica\Cluster Cluster object + */ + public function getCluster() + { + return new Cluster($this); + } + + /** + * @param \Elastica\Connection $connection + * + * @return $this + */ + public function addConnection(Connection $connection) + { + $this->_connectionPool->addConnection($connection); + + return $this; + } + + /** + * Determines whether a valid connection is available for use. + * + * @return bool + */ + public function hasConnection() + { + return $this->_connectionPool->hasConnection(); + } + + /** + * @throws \Elastica\Exception\ClientException + * + * @return \Elastica\Connection + */ + public function getConnection() + { + return $this->_connectionPool->getConnection(); + } + + /** + * @return \Elastica\Connection[] + */ + public function getConnections() + { + return $this->_connectionPool->getConnections(); + } + + /** + * @return \Elastica\Connection\Strategy\StrategyInterface + */ + public function getConnectionStrategy() + { + return $this->_connectionPool->getStrategy(); + } + + /** + * @param array|\Elastica\Connection[] $connections + * + * @return $this + */ + public function setConnections(array $connections) + { + $this->_connectionPool->setConnections($connections); + + return $this; + } + + /** + * Deletes documents with the given ids, index, type from the index. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + * + * @param array $ids Document ids + * @param string|\Elastica\Index $index Index name + * @param string|\Elastica\Type $type Type of documents + * @param string|false $routing Optional routing key for all ids + * + * @throws \Elastica\Exception\InvalidException + * + * @return \Elastica\Bulk\ResponseSet Response object + */ + public function deleteIds(array $ids, $index, $type, $routing = false) + { + if (empty($ids)) { + throw new InvalidException('Array has to consist of at least one id'); + } + + $bulk = new Bulk($this); + $bulk->setIndex($index); + $bulk->setType($type); + + foreach ($ids as $id) { + $action = new Action(Action::OP_TYPE_DELETE); + $action->setId($id); + + if (!empty($routing)) { + $action->setRouting($routing); + } + + $bulk->addAction($action); + } + + return $bulk->send(); + } + + /** + * Bulk operation. + * + * Every entry in the params array has to exactly on array + * of the bulk operation. An example param array would be: + * + * array( + * array('index' => array('_index' => 'test', '_type' => 'user', '_id' => '1')), + * array('user' => array('name' => 'hans')), + * array('delete' => array('_index' => 'test', '_type' => 'user', '_id' => '2')) + * ); + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + * + * @param array $params Parameter array + * + * @throws \Elastica\Exception\ResponseException + * @throws \Elastica\Exception\InvalidException + * + * @return \Elastica\Bulk\ResponseSet Response object + */ + public function bulk(array $params) + { + if (empty($params)) { + throw new InvalidException('Array has to consist of at least one param'); + } + + $bulk = new Bulk($this); + + $bulk->addRawData($params); + + return $bulk->send(); + } + + /** + * Makes calls to the elasticsearch server based on this index. + * + * It's possible to make any REST query directly over this method + * + * @param string $path Path to call + * @param string $method Rest method to use (GET, POST, DELETE, PUT) + * @param array $data OPTIONAL Arguments as array + * @param array $query OPTIONAL Query params + * + * @throws Exception\ConnectionException|\Exception + * + * @return \Elastica\Response Response object + */ + public function request($path, $method = Request::GET, $data = array(), array $query = array()) + { + $connection = $this->getConnection(); + try { + $request = new Request($path, $method, $data, $query, $connection); + + $this->_log($request); + + $response = $request->send(); + + $this->_lastRequest = $request; + $this->_lastResponse = $response; + + return $response; + } catch (ConnectionException $e) { + $this->_connectionPool->onFail($connection, $e, $this); + + // In case there is no valid connection left, throw exception which caused the disabling of the connection. + if (!$this->hasConnection()) { + throw $e; + } + + return $this->request($path, $method, $data, $query); + } + } + + /** + * Optimizes all search indices. + * + * @param array $args OPTIONAL Optional arguments + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-optimize.html + */ + public function optimizeAll($args = array()) + { + return $this->request('_optimize', Request::POST, array(), $args); + } + + /** + * Refreshes all search indices. + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html + */ + public function refreshAll() + { + return $this->request('_refresh', Request::POST); + } + + /** + * logging. + * + * @param string|\Elastica\Request $context + * + * @throws Exception\RuntimeException + */ + protected function _log($context) + { + $log = $this->getConfig('log'); + if ($log && !class_exists('Psr\Log\AbstractLogger')) { + throw new RuntimeException('Class Psr\Log\AbstractLogger not found'); + } elseif (!$this->_logger && $log) { + $this->setLogger(new Log($this->getConfig('log'))); + } + if ($this->_logger) { + if ($context instanceof Request) { + $data = $context->toArray(); + } else { + $data = array('message' => $context); + } + $this->_logger->debug('logging Request', $data); + } + } + + /** + * @return \Elastica\Request + */ + public function getLastRequest() + { + return $this->_lastRequest; + } + + /** + * @return \Elastica\Response + */ + public function getLastResponse() + { + return $this->_lastResponse; + } + + /** + * set Logger. + * + * @param LoggerInterface $logger + * + * @return $this + */ + public function setLogger(LoggerInterface $logger) + { + $this->_logger = $logger; + + return $this; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Cluster.php b/vendor/ruflin/elastica/lib/Elastica/Cluster.php new file mode 100644 index 00000000..990aeeb2 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Cluster.php @@ -0,0 +1,192 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster.html + */ +class Cluster +{ + /** + * Client. + * + * @var \Elastica\Client Client object + */ + protected $_client = null; + + /** + * Cluster state response. + * + * @var \Elastica\Response + */ + protected $_response; + + /** + * Cluster state data. + * + * @var array + */ + protected $_data; + + /** + * Creates a cluster object. + * + * @param \Elastica\Client $client Connection client object + */ + public function __construct(Client $client) + { + $this->_client = $client; + $this->refresh(); + } + + /** + * Refreshes all cluster information (state). + */ + public function refresh() + { + $path = '_cluster/state'; + $this->_response = $this->_client->request($path, Request::GET); + $this->_data = $this->getResponse()->getData(); + } + + /** + * Returns the response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Return list of index names. + * + * @return array List of index names + */ + public function getIndexNames() + { + $metaData = $this->_data['metadata']['indices']; + + $indices = array(); + foreach ($metaData as $key => $value) { + $indices[] = $key; + } + + return $indices; + } + + /** + * Returns the full state of the cluster. + * + * @return array State array + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-state.html + */ + public function getState() + { + return $this->_data; + } + + /** + * Returns a list of existing node names. + * + * @return array List of node names + */ + public function getNodeNames() + { + $data = $this->getState(); + $nodeNames = array(); + foreach ($data['nodes'] as $node) { + $nodeNames[] = $node['name']; + } + + return $nodeNames; + } + + /** + * Returns all nodes of the cluster. + * + * @return \Elastica\Node[] + */ + public function getNodes() + { + $nodes = array(); + $data = $this->getState(); + + foreach ($data['nodes'] as $id => $name) { + $nodes[] = new Node($id, $this->getClient()); + } + + return $nodes; + } + + /** + * Returns the client object. + * + * @return \Elastica\Client Client object + */ + public function getClient() + { + return $this->_client; + } + + /** + * Returns the cluster information (not implemented yet). + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-info.html + * + * @param array $args Additional arguments + * + * @throws \Elastica\Exception\NotImplementedException + */ + public function getInfo(array $args) + { + throw new NotImplementedException('not implemented yet'); + } + + /** + * Return Cluster health. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html + * + * @return \Elastica\Cluster\Health + */ + public function getHealth() + { + return new Health($this->getClient()); + } + + /** + * Return Cluster settings. + * + * @return \Elastica\Cluster\Settings + */ + public function getSettings() + { + return new Settings($this->getClient()); + } + + /** + * Shuts down the complete cluster. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-shutdown.html + * + * @param string $delay OPTIONAL Seconds to shutdown cluster after (default = 1s) + * + * @return \Elastica\Response + */ + public function shutdown($delay = '1s') + { + $path = '_shutdown?delay='.$delay; + + return $this->_client->request($path, Request::POST); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Cluster/Health.php b/vendor/ruflin/elastica/lib/Elastica/Cluster/Health.php new file mode 100644 index 00000000..d5d25ff1 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Cluster/Health.php @@ -0,0 +1,185 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html + */ +class Health +{ + /** + * @var \Elastica\Client Client object. + */ + protected $_client = null; + + /** + * @var array The cluster health data. + */ + protected $_data = null; + + /** + * @param \Elastica\Client $client The Elastica client. + */ + public function __construct(Client $client) + { + $this->_client = $client; + $this->refresh(); + } + + /** + * Retrieves the health data from the cluster. + * + * @return array + */ + protected function _retrieveHealthData() + { + $path = '_cluster/health?level=shards'; + $response = $this->_client->request($path, Request::GET); + + return $response->getData(); + } + + /** + * Gets the health data. + * + * @return array + */ + public function getData() + { + return $this->_data; + } + + /** + * Refreshes the health data for the cluster. + * + * @return $this + */ + public function refresh() + { + $this->_data = $this->_retrieveHealthData(); + + return $this; + } + + /** + * Gets the name of the cluster. + * + * @return string + */ + public function getClusterName() + { + return $this->_data['cluster_name']; + } + + /** + * Gets the status of the cluster. + * + * @return string green, yellow or red. + */ + public function getStatus() + { + return $this->_data['status']; + } + + /** + * TODO determine the purpose of this. + * + * @return bool + */ + public function getTimedOut() + { + return $this->_data['timed_out']; + } + + /** + * Gets the number of nodes in the cluster. + * + * @return int + */ + public function getNumberOfNodes() + { + return $this->_data['number_of_nodes']; + } + + /** + * Gets the number of data nodes in the cluster. + * + * @return int + */ + public function getNumberOfDataNodes() + { + return $this->_data['number_of_data_nodes']; + } + + /** + * Gets the number of active primary shards. + * + * @return int + */ + public function getActivePrimaryShards() + { + return $this->_data['active_primary_shards']; + } + + /** + * Gets the number of active shards. + * + * @return int + */ + public function getActiveShards() + { + return $this->_data['active_shards']; + } + + /** + * Gets the number of relocating shards. + * + * @return int + */ + public function getRelocatingShards() + { + return $this->_data['relocating_shards']; + } + + /** + * Gets the number of initializing shards. + * + * @return int + */ + public function getInitializingShards() + { + return $this->_data['initializing_shards']; + } + + /** + * Gets the number of unassigned shards. + * + * @return int + */ + public function getUnassignedShards() + { + return $this->_data['unassigned_shards']; + } + + /** + * Gets the status of the indices. + * + * @return \Elastica\Cluster\Health\Index[] + */ + public function getIndices() + { + $indices = array(); + foreach ($this->_data['indices'] as $indexName => $index) { + $indices[] = new Index($indexName, $index); + } + + return $indices; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Index.php b/vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Index.php new file mode 100644 index 00000000..ef55bd00 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Index.php @@ -0,0 +1,137 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html + */ +class Index +{ + /** + * @var string The name of the index. + */ + protected $_name; + + /** + * @var array The index health data. + */ + protected $_data; + + /** + * @param string $name The name of the index. + * @param array $data The index health data. + */ + public function __construct($name, $data) + { + $this->_name = $name; + $this->_data = $data; + } + + /** + * Gets the name of the index. + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Gets the status of the index. + * + * @return string green, yellow or red. + */ + public function getStatus() + { + return $this->_data['status']; + } + + /** + * Gets the number of nodes in the index. + * + * @return int + */ + public function getNumberOfShards() + { + return $this->_data['number_of_shards']; + } + + /** + * Gets the number of data nodes in the index. + * + * @return int + */ + public function getNumberOfReplicas() + { + return $this->_data['number_of_replicas']; + } + + /** + * Gets the number of active primary shards. + * + * @return int + */ + public function getActivePrimaryShards() + { + return $this->_data['active_primary_shards']; + } + + /** + * Gets the number of active shards. + * + * @return int + */ + public function getActiveShards() + { + return $this->_data['active_shards']; + } + + /** + * Gets the number of relocating shards. + * + * @return int + */ + public function getRelocatingShards() + { + return $this->_data['relocating_shards']; + } + + /** + * Gets the number of initializing shards. + * + * @return int + */ + public function getInitializingShards() + { + return $this->_data['initializing_shards']; + } + + /** + * Gets the number of unassigned shards. + * + * @return int + */ + public function getUnassignedShards() + { + return $this->_data['unassigned_shards']; + } + + /** + * Gets the health of the shards in this index. + * + * @return \Elastica\Cluster\Health\Shard[] + */ + public function getShards() + { + $shards = array(); + foreach ($this->_data['shards'] as $shardNumber => $shard) { + $shards[] = new Shard($shardNumber, $shard); + } + + return $shards; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Shard.php b/vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Shard.php new file mode 100644 index 00000000..e1d2c8dc --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Cluster/Health/Shard.php @@ -0,0 +1,102 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html + */ +class Shard +{ + /** + * @var int The shard index/number. + */ + protected $_shardNumber; + + /** + * @var array The shard health data. + */ + protected $_data; + + /** + * @param int $shardNumber The shard index/number. + * @param array $data The shard health data. + */ + public function __construct($shardNumber, $data) + { + $this->_shardNumber = $shardNumber; + $this->_data = $data; + } + + /** + * Gets the index/number of this shard. + * + * @return int + */ + public function getShardNumber() + { + return $this->_shardNumber; + } + + /** + * Gets the status of this shard. + * + * @return string green, yellow or red. + */ + public function getStatus() + { + return $this->_data['status']; + } + + /** + * Is the primary active? + * + * @return bool + */ + public function isPrimaryActive() + { + return $this->_data['primary_active']; + } + + /** + * Is this shard active? + * + * @return bool + */ + public function isActive() + { + return $this->_data['active_shards'] == 1; + } + + /** + * Is this shard relocating? + * + * @return bool + */ + public function isRelocating() + { + return $this->_data['relocating_shards'] == 1; + } + + /** + * Is this shard initialized? + * + * @return bool + */ + public function isInitialized() + { + return $this->_data['initializing_shards'] == 1; + } + + /** + * Is this shard unassigned? + * + * @return bool + */ + public function isUnassigned() + { + return $this->_data['unassigned_shards'] == 1; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Cluster/Settings.php b/vendor/ruflin/elastica/lib/Elastica/Cluster/Settings.php new file mode 100644 index 00000000..c597417f --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Cluster/Settings.php @@ -0,0 +1,202 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html + */ +class Settings +{ + /** + * @var \Elastica\Client Client object + */ + protected $_client = null; + + /** + * Creates a cluster object. + * + * @param \Elastica\Client $client Connection client object + */ + public function __construct(Client $client) + { + $this->_client = $client; + } + + /** + * Returns settings data. + * + * @return array Settings data (persistent and transient) + */ + public function get() + { + return $this->request()->getData(); + } + + /** + * Returns the current persistent settings of the cluster. + * + * If param is set, only specified setting is return. + * + * @param string $setting OPTIONAL Setting name to return + * + * @return array|string|null Settings data + */ + public function getPersistent($setting = '') + { + $data = $this->get(); + $settings = $data['persistent']; + + if (!empty($setting)) { + if (isset($settings[$setting])) { + return $settings[$setting]; + } else { + return; + } + } + + return $settings; + } + + /** + * Returns the current transient settings of the cluster. + * + * If param is set, only specified setting is return. + * + * @param string $setting OPTIONAL Setting name to return + * + * @return array|string|null Settings data + */ + public function getTransient($setting = '') + { + $data = $this->get(); + $settings = $data['transient']; + + if (!empty($setting)) { + if (isset($settings[$setting])) { + return $settings[$setting]; + } else { + if (strpos($setting, '.') !== false) { + // convert dot notation to nested arrays + $keys = explode('.', $setting); + foreach ($keys as $key) { + if (isset($settings[$key])) { + $settings = $settings[$key]; + } else { + return; + } + } + + return $settings; + } + + return; + } + } + + return $settings; + } + + /** + * Sets persistent setting. + * + * @param string $key + * @param string $value + * + * @return \Elastica\Response + */ + public function setPersistent($key, $value) + { + return $this->set( + array( + 'persistent' => array( + $key => $value, + ), + ) + ); + } + + /** + * Sets transient settings. + * + * @param string $key + * @param string $value + * + * @return \Elastica\Response + */ + public function setTransient($key, $value) + { + return $this->set( + array( + 'transient' => array( + $key => $value, + ), + ) + ); + } + + /** + * Sets the cluster to read only. + * + * Second param can be used to set it persistent + * + * @param bool $readOnly + * @param bool $persistent + * + * @return \Elastica\Response $response + */ + public function setReadOnly($readOnly = true, $persistent = false) + { + $key = 'cluster.blocks.read_only'; + + if ($persistent) { + $response = $this->setPersistent($key, $readOnly); + } else { + $response = $this->setTransient($key, $readOnly); + } + + return $response; + } + + /** + * Set settings for cluster. + * + * @param array $settings Raw settings (including persistent or transient) + * + * @return \Elastica\Response + */ + public function set(array $settings) + { + return $this->request($settings, Request::PUT); + } + + /** + * Get the client. + * + * @return \Elastica\Client + */ + public function getClient() + { + return $this->_client; + } + + /** + * Sends settings request. + * + * @param array $data OPTIONAL Data array + * @param string $method OPTIONAL Transfer method (default = \Elastica\Request::GET) + * + * @return \Elastica\Response Response object + */ + public function request(array $data = array(), $method = Request::GET) + { + $path = '_cluster/settings'; + + return $this->getClient()->request($path, $method, $data); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Connection.php b/vendor/ruflin/elastica/lib/Elastica/Connection.php new file mode 100644 index 00000000..0084b6ee --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Connection.php @@ -0,0 +1,320 @@ + + */ +class Connection extends Param +{ + /** + * Default elastic search port. + */ + const DEFAULT_PORT = 9200; + + /** + * Default host. + */ + const DEFAULT_HOST = 'localhost'; + + /** + * Default transport. + * + * @var string + */ + const DEFAULT_TRANSPORT = 'Http'; + + /** + * Number of seconds after a timeout occurs for every request + * If using indexing of file large value necessary. + */ + const TIMEOUT = 300; + + /** + * Number of seconds after a connection timeout occurs for every request during the connection phase. + * + * @see Connection::setConnectTimeout(); + */ + const CONNECT_TIMEOUT = 0; + + /** + * Creates a new connection object. A connection is enabled by default. + * + * @param array $params OPTIONAL Connection params: host, port, transport, timeout. All are optional + */ + public function __construct(array $params = array()) + { + $this->setParams($params); + $this->setEnabled(true); + + // Set empty config param if not exists + if (!$this->hasParam('config')) { + $this->setParam('config', array()); + } + } + + /** + * @return int Server port + */ + public function getPort() + { + return $this->hasParam('port') ? $this->getParam('port') : self::DEFAULT_PORT; + } + + /** + * @param int $port + * + * @return $this + */ + public function setPort($port) + { + return $this->setParam('port', (int) $port); + } + + /** + * @return string Host + */ + public function getHost() + { + return $this->hasParam('host') ? $this->getParam('host') : self::DEFAULT_HOST; + } + + /** + * @param string $host + * + * @return $this + */ + public function setHost($host) + { + return $this->setParam('host', $host); + } + + /** + * @return string|null Host + */ + public function getProxy() + { + return $this->hasParam('proxy') ? $this->getParam('proxy') : null; + } + + /** + * Set proxy for http connections. Null is for environmental proxy, + * empty string to disable proxy and proxy string to set actual http proxy. + * + * @see http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPROXY + * + * @param string|null $proxy + * + * @return $this + */ + public function setProxy($proxy) + { + return $this->setParam('proxy', $proxy); + } + + /** + * @return string|array + */ + public function getTransport() + { + return $this->hasParam('transport') ? $this->getParam('transport') : self::DEFAULT_TRANSPORT; + } + + /** + * @param string|array $transport + * + * @return $this + */ + public function setTransport($transport) + { + return $this->setParam('transport', $transport); + } + + /** + * @return string + */ + public function getPath() + { + return $this->hasParam('path') ? $this->getParam('path') : ''; + } + + /** + * @param string $path + * + * @return $this + */ + public function setPath($path) + { + return $this->setParam('path', $path); + } + + /** + * @param int $timeout Timeout in seconds + * + * @return $this + */ + public function setTimeout($timeout) + { + return $this->setParam('timeout', $timeout); + } + + /** + * @return int Connection timeout in seconds + */ + public function getTimeout() + { + return (int) $this->hasParam('timeout') ? $this->getParam('timeout') : self::TIMEOUT; + } + + /** + * Number of seconds after a connection timeout occurs for every request during the connection phase. + * Use a small value if you need a fast fail in case of dead, unresponsive or unreachable servers (~5 sec). + * + * Set to zero to switch to the default built-in connection timeout (300 seconds in curl). + * + * @see http://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html + * + * @param int $timeout Connect timeout in seconds + * + * @return $this + */ + public function setConnectTimeout($timeout) + { + return $this->setParam('connectTimeout', $timeout); + } + + /** + * @return int Connection timeout in seconds + */ + public function getConnectTimeout() + { + return (int) $this->hasParam('connectTimeout') ? $this->getParam('connectTimeout') : self::CONNECT_TIMEOUT; + } + + /** + * Enables a connection. + * + * @param bool $enabled OPTIONAL (default = true) + * + * @return $this + */ + public function setEnabled($enabled = true) + { + return $this->setParam('enabled', $enabled); + } + + /** + * @return bool True if enabled + */ + public function isEnabled() + { + return (bool) $this->getParam('enabled'); + } + + /** + * Returns an instance of the transport type. + * + * @throws \Elastica\Exception\InvalidException If invalid transport type + * + * @return \Elastica\Transport\AbstractTransport Transport object + */ + public function getTransportObject() + { + $transport = $this->getTransport(); + + return AbstractTransport::create($transport, $this); + } + + /** + * @return bool Returns true if connection is persistent. True by default + */ + public function isPersistent() + { + return (bool) $this->hasParam('persistent') ? $this->getParam('persistent') : true; + } + + /** + * @param array $config + * + * @return $this + */ + public function setConfig(array $config) + { + return $this->setParam('config', $config); + } + + /** + * @param string $key + * @param mixed $value + * + * @return $this + */ + public function addConfig($key, $value) + { + $this->_params['config'][$key] = $value; + + return $this; + } + + /** + * @param string $key + * + * @return bool + */ + public function hasConfig($key) + { + $config = $this->getConfig(); + + return isset($config[$key]); + } + + /** + * Returns a specific config key or the whole + * config array if not set. + * + * @param string $key Config key + * + * @throws \Elastica\Exception\InvalidException + * + * @return array|string Config value + */ + public function getConfig($key = '') + { + $config = $this->getParam('config'); + if (empty($key)) { + return $config; + } + + if (!array_key_exists($key, $config)) { + throw new InvalidException('Config key is not set: '.$key); + } + + return $config[$key]; + } + + /** + * @param \Elastica\Connection|array $params Params to create a connection + * + * @throws Exception\InvalidException + * + * @return self + */ + public static function create($params = array()) + { + $connection = null; + + if ($params instanceof self) { + $connection = $params; + } elseif (is_array($params)) { + $connection = new self($params); + } else { + throw new InvalidException('Invalid data type'); + } + + return $connection; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Connection/ConnectionPool.php b/vendor/ruflin/elastica/lib/Elastica/Connection/ConnectionPool.php new file mode 100644 index 00000000..b5fa681d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Connection/ConnectionPool.php @@ -0,0 +1,122 @@ +_connections = $connections; + + $this->_strategy = $strategy; + + $this->_callback = $callback; + } + + /** + * @param \Elastica\Connection $connection + * + * @return $this + */ + public function addConnection(Connection $connection) + { + $this->_connections[] = $connection; + + return $this; + } + + /** + * @param array|\Elastica\Connection[] $connections + * + * @return $this + */ + public function setConnections(array $connections) + { + $this->_connections = $connections; + + return $this; + } + + /** + * @return bool + */ + public function hasConnection() + { + foreach ($this->_connections as $connection) { + if ($connection->isEnabled()) { + return true; + } + } + + return false; + } + + /** + * @return array + */ + public function getConnections() + { + return $this->_connections; + } + + /** + * @throws \Elastica\Exception\ClientException + * + * @return \Elastica\Connection + */ + public function getConnection() + { + return $this->_strategy->getConnection($this->getConnections()); + } + + /** + * @param \Elastica\Connection $connection + * @param \Exception $e + * @param Client $client + */ + public function onFail(Connection $connection, Exception $e, Client $client) + { + $connection->setEnabled(false); + + if ($this->_callback) { + call_user_func($this->_callback, $connection, $e, $client); + } + } + + /** + * @return \Elastica\Connection\Strategy\StrategyInterface + */ + public function getStrategy() + { + return $this->_strategy; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/CallbackStrategy.php b/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/CallbackStrategy.php new file mode 100644 index 00000000..ccaeb6dd --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/CallbackStrategy.php @@ -0,0 +1,51 @@ +_callback = $callback; + } + + /** + * @param array|\Elastica\Connection[] $connections + * + * @return \Elastica\Connection + */ + public function getConnection($connections) + { + return call_user_func_array($this->_callback, array($connections)); + } + + /** + * @param callable $callback + * + * @return bool + */ + public static function isValid($callback) + { + return is_callable($callback); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/RoundRobin.php b/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/RoundRobin.php new file mode 100644 index 00000000..92cd570e --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/RoundRobin.php @@ -0,0 +1,24 @@ +isEnabled()) { + return $connection; + } + } + + throw new ClientException('No enabled connection'); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/StrategyFactory.php b/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/StrategyFactory.php new file mode 100644 index 00000000..7590ab11 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Connection/Strategy/StrategyFactory.php @@ -0,0 +1,45 @@ + + */ +class Document extends AbstractUpdateAction +{ + const OP_TYPE_CREATE = Action::OP_TYPE_CREATE; + + /** + * Document data. + * + * @var array Document data + */ + protected $_data = array(); + + /** + * Whether to use this document to upsert if the document does not exist. + * + * @var bool + */ + protected $_docAsUpsert = false; + + /** + * @var bool + */ + protected $_autoPopulate = false; + + /** + * Creates a new document. + * + * @param int|string $id OPTIONAL $id Id is create if empty + * @param array|string $data OPTIONAL Data array + * @param string $type OPTIONAL Type name + * @param string $index OPTIONAL Index name + */ + public function __construct($id = '', $data = array(), $type = '', $index = '') + { + $this->setId($id); + $this->setData($data); + $this->setType($type); + $this->setIndex($index); + } + + /** + * @param string $key + * + * @return mixed + */ + public function __get($key) + { + return $this->get($key); + } + + /** + * @param string $key + * @param mixed $value + */ + public function __set($key, $value) + { + $this->set($key, $value); + } + + /** + * @param string $key + * + * @return bool + */ + public function __isset($key) + { + return $this->has($key) && null !== $this->get($key); + } + + /** + * @param string $key + */ + public function __unset($key) + { + $this->remove($key); + } + + /** + * @param string $key + * + * @throws \Elastica\Exception\InvalidException + * + * @return mixed + */ + public function get($key) + { + if (!$this->has($key)) { + throw new InvalidException("Field {$key} does not exist"); + } + + return $this->_data[$key]; + } + + /** + * @param string $key + * @param mixed $value + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function set($key, $value) + { + if (!is_array($this->_data)) { + throw new InvalidException('Document data is serialized data. Data creation is forbidden.'); + } + $this->_data[$key] = $value; + + return $this; + } + + /** + * @param string $key + * + * @return bool + */ + public function has($key) + { + return is_array($this->_data) && array_key_exists($key, $this->_data); + } + + /** + * @param string $key + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function remove($key) + { + if (!$this->has($key)) { + throw new InvalidException("Field {$key} does not exist"); + } + unset($this->_data[$key]); + + return $this; + } + + /** + * Adds the given key/value pair to the document. + * + * @deprecated + * + * @param string $key Document entry key + * @param mixed $value Document entry value + * + * @return $this + */ + public function add($key, $value) + { + return $this->set($key, $value); + } + + /** + * Adds a file to the index. + * + * To use this feature you have to call the following command in the + * elasticsearch directory: + * + * ./bin/plugin -install elasticsearch/elasticsearch-mapper-attachments/1.6.0 + * + * This installs the tika file analysis plugin. More infos about supported formats + * can be found here: {@link http://tika.apache.org/0.7/formats.html} + * + * @param string $key Key to add the file to + * @param string $filepath Path to add the file + * @param string $mimeType OPTIONAL Header mime type + * + * @return $this + */ + public function addFile($key, $filepath, $mimeType = '') + { + $value = base64_encode(file_get_contents($filepath)); + + if (!empty($mimeType)) { + $value = array('_content_type' => $mimeType, '_name' => $filepath, '_content' => $value); + } + + $this->set($key, $value); + + return $this; + } + + /** + * Add file content. + * + * @param string $key Document key + * @param string $content Raw file content + * + * @return $this + */ + public function addFileContent($key, $content) + { + return $this->set($key, base64_encode($content)); + } + + /** + * Adds a geopoint to the document. + * + * Geohashes are not yet supported + * + * @param string $key Field key + * @param float $latitude Latitude value + * @param float $longitude Longitude value + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html + * + * @return $this + */ + public function addGeoPoint($key, $latitude, $longitude) + { + $value = array('lat' => $latitude, 'lon' => $longitude); + + $this->set($key, $value); + + return $this; + } + + /** + * Overwrites the current document data with the given data. + * + * @param array|string $data Data array + * + * @return $this + */ + public function setData($data) + { + $this->_data = $data; + + return $this; + } + + /** + * Returns the document data. + * + * @return array|string Document data + */ + public function getData() + { + return $this->_data; + } + + /** + * @deprecated + * + * @param \Elastica\Script $data + * + * @throws NotImplementedException + */ + public function setScript($data) + { + throw new NotImplementedException('setScript() is no longer available as of 0.90.2. See http://elastica.io/migration/0.90.2/upsert.html to migrate'); + } + + /** + * @throws NotImplementedException + * + * @deprecated + */ + public function getScript() + { + throw new NotImplementedException('getScript() is no longer available as of 0.90.2. See http://elastica.io/migration/0.90.2/upsert.html to migrate'); + } + + /** + * @throws NotImplementedException + * + * @deprecated + */ + public function hasScript() + { + throw new NotImplementedException('hasScript() is no longer available as of 0.90.2. See http://elastica.io/migration/0.90.2/upsert.html to migrate'); + } + + /** + * @param bool $value + * + * @return $this + */ + public function setDocAsUpsert($value) + { + $this->_docAsUpsert = (bool) $value; + + return $this; + } + + /** + * @return bool + */ + public function getDocAsUpsert() + { + return $this->_docAsUpsert; + } + + /** + * @param bool $autoPopulate + * + * @return $this + */ + public function setAutoPopulate($autoPopulate = true) + { + $this->_autoPopulate = (bool) $autoPopulate; + + return $this; + } + + /** + * @return bool + */ + public function isAutoPopulate() + { + return $this->_autoPopulate; + } + + /** + * Returns the document as an array. + * + * @return array + */ + public function toArray() + { + $doc = $this->getParams(); + $doc['_source'] = $this->getData(); + + return $doc; + } + + /** + * @param array|\Elastica\Document $data + * + * @throws \Elastica\Exception\InvalidException + * + * @return self + */ + public static function create($data) + { + if ($data instanceof self) { + return $data; + } elseif (is_array($data)) { + return new self('', $data); + } else { + throw new InvalidException('Failed to create document. Invalid data passed.'); + } + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/Response/ActionException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/Response/ActionException.php new file mode 100644 index 00000000..5db0e49f --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/Response/ActionException.php @@ -0,0 +1,65 @@ +_response = $response; + + parent::__construct($this->getErrorMessage($response)); + } + + /** + * @return \Elastica\Bulk\Action + */ + public function getAction() + { + return $this->getResponse()->getAction(); + } + + /** + * @return \Elastica\Bulk\Response + */ + public function getResponse() + { + return $this->_response; + } + + /** + * @param \Elastica\Bulk\Response $response + * + * @return string + */ + public function getErrorMessage(Response $response) + { + $error = $response->getError(); + $opType = $response->getOpType(); + $data = $response->getData(); + + $path = ''; + if (isset($data['_index'])) { + $path .= '/'.$data['_index']; + } + if (isset($data['_type'])) { + $path .= '/'.$data['_type']; + } + if (isset($data['_id'])) { + $path .= '/'.$data['_id']; + } + $message = "$opType: $path caused $error"; + + return $message; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/ResponseException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/ResponseException.php new file mode 100644 index 00000000..54b5702b --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/ResponseException.php @@ -0,0 +1,98 @@ +_init($responseSet); + + $message = 'Error in one or more bulk request actions:'.PHP_EOL.PHP_EOL; + $message .= $this->getActionExceptionsAsString(); + + parent::__construct($message); + } + + /** + * @param \Elastica\Bulk\ResponseSet $responseSet + */ + protected function _init(ResponseSet $responseSet) + { + $this->_responseSet = $responseSet; + + foreach ($responseSet->getBulkResponses() as $bulkResponse) { + if ($bulkResponse->hasError()) { + $this->_actionExceptions[] = new ActionException($bulkResponse); + } + } + } + + /** + * Returns bulk response set object. + * + * @return \Elastica\Bulk\ResponseSet + */ + public function getResponseSet() + { + return $this->_responseSet; + } + + /** + * Returns array of failed actions. + * + * @return array Array of failed actions + */ + public function getFailures() + { + $errors = array(); + + foreach ($this->getActionExceptions() as $actionException) { + $errors[] = $actionException->getMessage(); + } + + return $errors; + } + + /** + * @return \Elastica\Exception\Bulk\Response\ActionException[] + */ + public function getActionExceptions() + { + return $this->_actionExceptions; + } + + /** + * @return string + */ + public function getActionExceptionsAsString() + { + $message = ''; + foreach ($this->getActionExceptions() as $actionException) { + $message .= $actionException->getMessage().PHP_EOL; + } + + return $message; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/UdpException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/UdpException.php new file mode 100644 index 00000000..e332b92f --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/Bulk/UdpException.php @@ -0,0 +1,8 @@ + + */ +class ClientException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/GuzzleException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/GuzzleException.php new file mode 100644 index 00000000..614ad139 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/GuzzleException.php @@ -0,0 +1,50 @@ + + */ +class GuzzleException extends ConnectionException +{ + /** + * @var TransferException + */ + protected $_guzzleException; + + /** + * @param \GuzzleHttp\Exception\TransferException $guzzleException + * @param \Elastica\Request $request + * @param \Elastica\Response $response + */ + public function __construct(TransferException $guzzleException, Request $request = null, Response $response = null) + { + $this->_guzzleException = $guzzleException; + $message = $this->getErrorMessage($this->getGuzzleException()); + parent::__construct($message, $request, $response); + } + + /** + * @param \GuzzleHttp\Exception\TransferException $guzzleException + * + * @return string + */ + public function getErrorMessage(TransferException $guzzleException) + { + return $guzzleException->getMessage(); + } + + /** + * @return TransferException + */ + public function getGuzzleException() + { + return $this->_guzzleException; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/HttpException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/HttpException.php new file mode 100644 index 00000000..28e78e77 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/HttpException.php @@ -0,0 +1,86 @@ + + */ +class HttpException extends ConnectionException +{ + /** + * Error code / message. + * + * @var string Error code / message + */ + protected $_error = 0; + + /** + * Construct Exception. + * + * @param string $error Error + * @param \Elastica\Request $request + * @param \Elastica\Response $response + */ + public function __construct($error, Request $request = null, Response $response = null) + { + $this->_error = $error; + + $message = $this->getErrorMessage($this->getError()); + parent::__construct($message, $request, $response); + } + + /** + * Returns the error message corresponding to the error code + * cUrl error code reference can be found here {@link http://curl.haxx.se/libcurl/c/libcurl-errors.html}. + * + * @param string $error Error code + * + * @return string Error message + */ + public function getErrorMessage($error) + { + switch ($error) { + case CURLE_UNSUPPORTED_PROTOCOL: + $error = 'Unsupported protocol'; + break; + case CURLE_FAILED_INIT: + $error = 'Internal cUrl error?'; + break; + case CURLE_URL_MALFORMAT: + $error = 'Malformed URL'; + break; + case CURLE_COULDNT_RESOLVE_PROXY: + $error = "Couldn't resolve proxy"; + break; + case CURLE_COULDNT_RESOLVE_HOST: + $error = "Couldn't resolve host"; + break; + case CURLE_COULDNT_CONNECT: + $error = "Couldn't connect to host, Elasticsearch down?"; + break; + case 28: + $error = 'Operation timed out'; + break; + default: + $error = 'Unknown error:'.$error; + break; + } + + return $error; + } + + /** + * Return Error code / message. + * + * @return string Error code / message + */ + public function getError() + { + return $this->_error; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/MemcacheException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/MemcacheException.php new file mode 100644 index 00000000..24181379 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/MemcacheException.php @@ -0,0 +1,13 @@ + + */ +class MemcacheException extends ConnectionException +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/ThriftException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/ThriftException.php new file mode 100644 index 00000000..499cbd7d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/Connection/ThriftException.php @@ -0,0 +1,49 @@ + + */ +class ThriftException extends ConnectionException +{ + /** + * @var TException + */ + protected $_thriftException; + + /** + * @param \Thrift\Exception\TException $thriftException + * @param \Elastica\Request $request + * @param \Elastica\Response $response + */ + public function __construct(TException $thriftException, Request $request = null, Response $response = null) + { + $this->_thriftException = $thriftException; + $message = $this->getErrorMessage($this->getThriftException()); + parent::__construct($message, $request, $response); + } + + /** + * @param \Thrift\Exception\TException $thriftException + * + * @return string + */ + public function getErrorMessage(TException $thriftException) + { + return $thriftException->getMessage(); + } + /** + * @return TException + */ + public function getThriftException() + { + return $this->_thriftException; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/ConnectionException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/ConnectionException.php new file mode 100644 index 00000000..b2376d2f --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/ConnectionException.php @@ -0,0 +1,58 @@ + + */ +class ConnectionException extends \RuntimeException implements ExceptionInterface +{ + /** + * @var \Elastica\Request Request object + */ + protected $_request; + + /** + * @var \Elastica\Response Response object + */ + protected $_response; + + /** + * Construct Exception. + * + * @param string $message Message + * @param \Elastica\Request $request + * @param \Elastica\Response $response + */ + public function __construct($message, Request $request = null, Response $response = null) + { + $this->_request = $request; + $this->_response = $response; + + parent::__construct($message); + } + + /** + * Returns request object. + * + * @return \Elastica\Request Request object + */ + public function getRequest() + { + return $this->_request; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/ElasticsearchException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/ElasticsearchException.php new file mode 100644 index 00000000..59cca0c6 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/ElasticsearchException.php @@ -0,0 +1,91 @@ + + */ +class ElasticsearchException extends \Exception implements ExceptionInterface +{ + const REMOTE_TRANSPORT_EXCEPTION = 'RemoteTransportException'; + + /** + * @var string|null Elasticsearch exception name + */ + private $_exception; + + /** + * @var bool Whether exception was local to server node or remote + */ + private $_isRemote = false; + + /** + * Constructs elasticsearch exception. + * + * @param int $code Error code + * @param string $error Error message from elasticsearch + */ + public function __construct($code, $error) + { + $this->_parseError($error); + parent::__construct($error, $code); + } + + /** + * Parse error message from elasticsearch. + * + * @param string $error Error message + */ + protected function _parseError($error) + { + $errors = explode(']; nested: ', $error); + + if (count($errors) == 1) { + $this->_exception = $this->_extractException($errors[0]); + } else { + if ($this->_extractException($errors[0]) == self::REMOTE_TRANSPORT_EXCEPTION) { + $this->_isRemote = true; + $this->_exception = $this->_extractException($errors[1]); + } else { + $this->_exception = $this->_extractException($errors[0]); + } + } + } + + /** + * Extract exception name from error response. + * + * @param string $error + * + * @return null|string + */ + protected function _extractException($error) + { + if (preg_match('/^(\w+)\[.*\]/', $error, $matches)) { + return $matches[1]; + } else { + return; + } + } + + /** + * Returns elasticsearch exception name. + * + * @return string|null + */ + public function getExceptionName() + { + return $this->_exception; + } + + /** + * Returns whether exception was local to server node or remote. + * + * @return bool + */ + public function isRemoteTransportException() + { + return $this->_isRemote; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/ExceptionInterface.php b/vendor/ruflin/elastica/lib/Elastica/Exception/ExceptionInterface.php new file mode 100644 index 00000000..02f43092 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/ExceptionInterface.php @@ -0,0 +1,11 @@ + + */ +interface ExceptionInterface +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/InvalidException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/InvalidException.php new file mode 100644 index 00000000..996a9389 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/InvalidException.php @@ -0,0 +1,11 @@ + + */ +class InvalidException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/JSONParseException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/JSONParseException.php new file mode 100644 index 00000000..010adf45 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/JSONParseException.php @@ -0,0 +1,9 @@ + + */ +class NotFoundException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/NotImplementedException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/NotImplementedException.php new file mode 100644 index 00000000..591417b6 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/NotImplementedException.php @@ -0,0 +1,13 @@ + + */ +class NotImplementedException extends \BadMethodCallException implements ExceptionInterface +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/PartialShardFailureException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/PartialShardFailureException.php new file mode 100644 index 00000000..bb3fa44a --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/PartialShardFailureException.php @@ -0,0 +1,28 @@ + + */ +class PartialShardFailureException extends ResponseException +{ + /** + * Construct Exception. + * + * @param \Elastica\Request $request + * @param \Elastica\Response $response + */ + public function __construct(Request $request, Response $response) + { + parent::__construct($request, $response); + + $shardsStatistics = $response->getShardsStatistics(); + $this->message = JSON::stringify($shardsStatistics['failed']); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/QueryBuilderException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/QueryBuilderException.php new file mode 100644 index 00000000..ae03c831 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/QueryBuilderException.php @@ -0,0 +1,11 @@ + + */ +class QueryBuilderException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/ResponseException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/ResponseException.php new file mode 100644 index 00000000..57502307 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/ResponseException.php @@ -0,0 +1,70 @@ + + */ +class ResponseException extends \RuntimeException implements ExceptionInterface +{ + /** + * @var \Elastica\Request Request object + */ + protected $_request = null; + + /** + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Construct Exception. + * + * @param \Elastica\Request $request + * @param \Elastica\Response $response + */ + public function __construct(Request $request, Response $response) + { + $this->_request = $request; + $this->_response = $response; + parent::__construct($response->getError()); + } + + /** + * Returns request object. + * + * @return \Elastica\Request Request object + */ + public function getRequest() + { + return $this->_request; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Returns elasticsearch exception. + * + * @return ElasticsearchException + */ + public function getElasticsearchException() + { + $response = $this->getResponse(); + $transfer = $response->getTransferInfo(); + $code = array_key_exists('http_code', $transfer) ? $transfer['http_code'] : 0; + + return new ElasticsearchException($code, $response->getError()); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Exception/RuntimeException.php b/vendor/ruflin/elastica/lib/Elastica/Exception/RuntimeException.php new file mode 100644 index 00000000..af18faff --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Exception/RuntimeException.php @@ -0,0 +1,11 @@ + + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/AbstractFacet.php b/vendor/ruflin/elastica/lib/Elastica/Facet/AbstractFacet.php new file mode 100644 index 00000000..743cefe1 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/AbstractFacet.php @@ -0,0 +1,145 @@ + + * @author Jasper van Wanrooy + * + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +abstract class AbstractFacet extends Param +{ + /** + * @var string Holds the name of the facet. + */ + protected $_name = ''; + + /** + * @var array Holds all facet parameters. + */ + protected $_facet = array(); + + /** + * Constructs a Facet object. + * + * @param string $name The name of the facet. + */ + public function __construct($name) + { + $this->setName($name); + } + + /** + * Sets the name of the facet. It is automatically set by + * the constructor. + * + * @param string $name The name of the facet. + * + * @throws \Elastica\Exception\InvalidException If name is empty + * + * @return $this + */ + public function setName($name) + { + if (empty($name)) { + throw new InvalidException('Facet name has to be set'); + } + $this->_name = $name; + + return $this; + } + + /** + * Gets the name of the facet. + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Sets a filter for this facet. + * + * @param \Elastica\Filter\AbstractFilter $filter A filter to apply on the facet. + * + * @return $this + */ + public function setFilter(AbstractFilter $filter) + { + return $this->_setFacetParam('facet_filter', $filter->toArray()); + } + + /** + * Sets the flag to either run the facet globally or bound to the + * current search query. When not set, it defaults to the + * Elasticsearch default value. + * + * @param bool $global Flag to either run the facet globally. + * + * @return $this + */ + public function setGlobal($global = true) + { + return $this->_setFacetParam('global', (bool) $global); + } + + /** + * Sets the path to the nested document. + * + * @param string $nestedPath Nested path + * + * @return $this + */ + public function setNested($nestedPath) + { + return $this->_setFacetParam('nested', $nestedPath); + } + + /** + * Sets the scope. + * + * @param string $scope Scope + * + * @return $this + */ + public function setScope($scope) + { + return $this->_setFacetParam('scope', $scope); + } + + /** + * Basic definition of all specs of the facet. Each implementation + * should override this function in order to set it's specific + * settings. + * + * @return array + */ + public function toArray() + { + return $this->_facet; + } + + /** + * Sets a param for the facet. Each facet implementation needs to take + * care of handling their own params. + * + * @param string $key The key of the param to set. + * @param mixed $value The value of the param. + * + * @return $this + */ + protected function _setFacetParam($key, $value) + { + $this->_facet[$key] = $value; + + return $this; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/DateHistogram.php b/vendor/ruflin/elastica/lib/Elastica/Facet/DateHistogram.php new file mode 100644 index 00000000..c47eddab --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/DateHistogram.php @@ -0,0 +1,58 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-date-histogram-facet.html + * @link https://github.com/elasticsearch/elasticsearch/issues/591 + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class DateHistogram extends Histogram +{ + /** + * Set the time_zone parameter. + * + * @param string $tzOffset + * + * @return $this + */ + public function setTimezone($tzOffset) + { + return $this->setParam('time_zone', $tzOffset); + } + + /** + * Set the factor parameter. + * + * @param int $factor + * + * @return $this + */ + public function setFactor($factor) + { + return $this->setParam('factor', $factor); + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @throws \Elastica\Exception\InvalidException When the right fields haven't been set. + * + * @return array + */ + public function toArray() + { + /* + * Set the range in the abstract as param. + */ + $this->_setFacetParam('date_histogram', $this->_params); + + return $this->_facet; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/Filter.php b/vendor/ruflin/elastica/lib/Elastica/Facet/Filter.php new file mode 100644 index 00000000..26f032b4 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/Filter.php @@ -0,0 +1,27 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-filter-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class Filter extends AbstractFacet +{ + /** + * Set the filter for the facet. + * + * @param \Elastica\Filter\AbstractFilter $filter + * + * @return $this + */ + public function setFilter(AbstractFilter $filter) + { + return $this->_setFacetParam('filter', $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/GeoCluster.php b/vendor/ruflin/elastica/lib/Elastica/Facet/GeoCluster.php new file mode 100644 index 00000000..71fa5094 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/GeoCluster.php @@ -0,0 +1,66 @@ + + * + * @link https://github.com/zenobase/geocluster-facet + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class GeoCluster extends AbstractFacet +{ + /** + * @param string $fieldName + * + * @return $this + */ + public function setField($fieldName) + { + $this->setParam('field', $fieldName); + + return $this; + } + + /** + * @param float $factor + * + * @return $this + */ + public function setFactor($factor) + { + $this->setParam('factor', $factor); + + return $this; + } + + /** + * @param bool $showIds + * + * @return $this + */ + public function setShowIds($showIds) + { + $this->setParam('showIds', $showIds); + + return $this; + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @throws \Elastica\Exception\InvalidException When the right fields haven't been set. + * + * @return array + */ + public function toArray() + { + $this->_setFacetParam('geo_cluster', $this->_params); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/GeoDistance.php b/vendor/ruflin/elastica/lib/Elastica/Facet/GeoDistance.php new file mode 100644 index 00000000..664d33a6 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/GeoDistance.php @@ -0,0 +1,69 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-geo-distance-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class GeoDistance extends AbstractFacet +{ + /** + * Sets the ranges for the facet all at once. + * Sample ranges: + * array ( + * array('to' => 50), + * array('from' => 20, 'to' => 70), + * array('from' => 70, 'to' => 120), + * array('from' => 150) + * ). + * + * @param array $ranges Numerical array with range definitions. + * + * @return $this + */ + public function setRanges(array $ranges) + { + return $this->setParam('ranges', $ranges); + } + + /** + * Set the relative GeoPoint for the facet. + * + * @param string $typeField index type and field e.g foo.bar + * @param float $latitude + * @param float $longitude + * + * @return $this + */ + public function setGeoPoint($typeField, $latitude, $longitude) + { + return $this->setParam($typeField, array( + 'lat' => $latitude, + 'lon' => $longitude, + )); + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @throws \Elastica\Exception\InvalidException When the right fields haven't been set. + * + * @return array + */ + public function toArray() + { + /* + * Set the geo_distance in the abstract as param. + */ + $this->_setFacetParam('geo_distance', $this->_params); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/Histogram.php b/vendor/ruflin/elastica/lib/Elastica/Facet/Histogram.php new file mode 100644 index 00000000..1b76ea89 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/Histogram.php @@ -0,0 +1,96 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-histogram-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class Histogram extends AbstractFacet +{ + /** + * Sets the field for histogram. + * + * @param string $field The name of the field for the histogram + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Set the value for interval. + * + * @param string $interval + * + * @return $this + */ + public function setInterval($interval) + { + return $this->setParam('interval', $interval); + } + + /** + * Set the fields for key_field and value_field. + * + * @param string $keyField Key field + * @param string $valueField Value field + * + * @return $this + */ + public function setKeyValueFields($keyField, $valueField) + { + return $this->setParam('key_field', $keyField)->setParam('value_field', $valueField); + } + + /** + * Sets the key and value for this facet by script. + * + * @param string $keyScript Script to check whether it falls into the range. + * @param string $valueScript Script to use for statistical calculations. + * + * @return $this + */ + public function setKeyValueScripts($keyScript, $valueScript) + { + return $this->setParam('key_script', $keyScript) + ->setParam('value_script', $valueScript); + } + + /** + * Set the "params" essential to the a script. + * + * @param array $params Associative array (key/value pair) + * + * @return $this + */ + public function setScriptParams(array $params) + { + return $this->setParam('params', $params); + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @throws \Elastica\Exception\InvalidException When the right fields haven't been set. + * + * @return array + */ + public function toArray() + { + /* + * Set the range in the abstract as param. + */ + $this->_setFacetParam('histogram', $this->_params); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/Query.php b/vendor/ruflin/elastica/lib/Elastica/Facet/Query.php new file mode 100644 index 00000000..522090d5 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/Query.php @@ -0,0 +1,27 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-query-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class Query extends AbstractFacet +{ + /** + * Set the query for the facet. + * + * @param \Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery(AbstractQuery $query) + { + return $this->_setFacetParam('query', $query->toArray()); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/Range.php b/vendor/ruflin/elastica/lib/Elastica/Facet/Range.php new file mode 100644 index 00000000..f81caf3d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/Range.php @@ -0,0 +1,143 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-range-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class Range extends AbstractFacet +{ + /** + * Sets the field for the range. + * + * @param string $field The name of the field for range. + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Sets the fields by their separate key and value fields. + * + * @param string $keyField The key_field param for the range. + * @param string $valueField The key_value param for the range. + * + * @return $this + */ + public function setKeyValueFields($keyField, $valueField) + { + return $this->setParam('key_field', $keyField) + ->setParam('value_field', $valueField); + } + + /** + * Sets the key and value for this facet by script. + * + * @param string $keyScript Script to check whether it falls into the range. + * @param string $valueScript Script to use for statistical calculations. + * + * @return $this + */ + public function setKeyValueScripts($keyScript, $valueScript) + { + return $this->setParam('key_script', $keyScript) + ->setParam('value_script', $valueScript); + } + + /** + * Sets the ranges for the facet all at once. Sample ranges: + * array ( + * array('to' => 50), + * array('from' => 20, 'to' 70), + * array('from' => 70, 'to' => 120), + * array('from' => 150) + * ). + * + * @param array $ranges Numerical array with range definitions. + * + * @return $this + */ + public function setRanges(array $ranges) + { + return $this->setParam('ranges', $ranges); + } + + /** + * Adds a range to the range facet. + * + * @param mixed $from The from for the range. + * @param mixed $to The to for the range. + * + * @return $this + */ + public function addRange($from = null, $to = null) + { + if (!isset($this->_params['ranges']) || !is_array($this->_params['ranges'])) { + $this->_params['ranges'] = array(); + } + + $range = array(); + if (isset($from)) { + $range['from'] = $from; + } + if (isset($to)) { + $range['to'] = $to; + } + $this->_params['ranges'][] = $range; + + return $this; + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @throws \Elastica\Exception\InvalidException When the right fields haven't been set. + * + * @return array + */ + public function toArray() + { + /* + * Check the facet for validity. + * There are three ways to set the key and value field for the range: + * - a single field for both key and value; or + * - separate fields for key and value; or + * - separate scripts for key and value. + */ + $fieldTypesSet = 0; + if (isset($this->_params['field'])) { + $fieldTypesSet++; + } + if (isset($this->_params['key_field'])) { + $fieldTypesSet++; + } + if (isset($this->_params['key_script'])) { + $fieldTypesSet++; + } + + if ($fieldTypesSet === 0) { + throw new InvalidException('Neither field, key_field nor key_script is set.'); + } elseif ($fieldTypesSet > 1) { + throw new InvalidException('Either field, key_field and key_value or key_script and value_script should be set.'); + } + + /* + * Set the range in the abstract as param. + */ + $this->_setFacetParam('range', $this->_params); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/Statistical.php b/vendor/ruflin/elastica/lib/Elastica/Facet/Statistical.php new file mode 100644 index 00000000..bb4eef8b --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/Statistical.php @@ -0,0 +1,64 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-statistical-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class Statistical extends AbstractFacet +{ + /** + * Sets the field for the statistical query. + * + * @param string $field The field name for the statistical query. + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Sets multiple fields for the statistical query. + * + * @param array $fields Numerical array with the fields for the statistical query. + * + * @return $this + */ + public function setFields(array $fields) + { + return $this->setParam('fields', $fields); + } + + /** + * Sets a script to calculate statistical information. + * + * @param string $script The script to do calculations on the statistical values + * + * @return $this + */ + public function setScript($script) + { + return $this->setParam('script', $script); + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @return array + */ + public function toArray() + { + $this->_setFacetParam('statistical', $this->_params); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/Terms.php b/vendor/ruflin/elastica/lib/Elastica/Facet/Terms.php new file mode 100644 index 00000000..6af8867b --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/Terms.php @@ -0,0 +1,137 @@ + + * @author Jasper van Wanrooy + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class Terms extends AbstractFacet +{ + /** + * Holds the types of ordering which are allowed + * by Elasticsearch. + * + * @var array + */ + protected $_orderTypes = array('count', 'term', 'reverse_count', 'reverse_term'); + + /** + * Sets the field for the terms. + * + * @param string $field The field name for the terms. + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Sets the script for the term. + * + * @param string $script The script for the term. + * + * @return $this + */ + public function setScript($script) + { + $script = Script::create($script); + foreach ($script->toArray() as $param => $value) { + $this->setParam($param, $value); + } + + return $this; + } + + /** + * Sets multiple fields for the terms. + * + * @param array $fields Numerical array with the fields for the terms. + * + * @return $this + */ + public function setFields(array $fields) + { + return $this->setParam('fields', $fields); + } + + /** + * Sets the flag to return all available terms. When they + * don't have a hit, they have a count of zero. + * + * @param bool $allTerms Flag to fetch all terms. + * + * @return $this + */ + public function setAllTerms($allTerms) + { + return $this->setParam('all_terms', (bool) $allTerms); + } + + /** + * Sets the ordering type for this facet. Elasticsearch + * internal default is count. + * + * @param string $type The order type to set use for sorting of the terms. + * + * @throws \Elastica\Exception\InvalidException When an invalid order type was set. + * + * @return $this + */ + public function setOrder($type) + { + if (!in_array($type, $this->_orderTypes)) { + throw new InvalidException('Invalid order type: '.$type); + } + + return $this->setParam('order', $type); + } + + /** + * Set an array with terms which are omitted in the search. + * + * @param array $exclude Numerical array which includes all terms which needs to be ignored. + * + * @return $this + */ + public function setExclude(array $exclude) + { + return $this->setParam('exclude', $exclude); + } + + /** + * Sets the amount of terms to be returned. + * + * @param int $size The amount of terms to be returned. + * + * @return $this + */ + public function setSize($size) + { + return $this->setParam('size', (int) $size); + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @return array + */ + public function toArray() + { + $this->_setFacetParam('terms', $this->_params); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Facet/TermsStats.php b/vendor/ruflin/elastica/lib/Elastica/Facet/TermsStats.php new file mode 100644 index 00000000..22d284c5 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Facet/TermsStats.php @@ -0,0 +1,107 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-terms-stats-facet.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ +class TermsStats extends AbstractFacet +{ + /** + * Holds the types of ordering which are allowed + * by Elasticsearch. + * + * @var array + */ + protected $_orderTypes = array('term', 'reverse_term', 'count', 'reverse_count', + 'total', 'reverse_total', 'min', 'reverse_min', 'max', 'reverse_max', 'mean', + 'reverse_mean', ); + + /** + * Sets the key field for the query. + * + * @param string $keyField The key field name for the query. + * + * @return $this + */ + public function setKeyField($keyField) + { + return $this->setParam('key_field', $keyField); + } + + /** + * Sets a script to calculate statistical information on a per term basis. + * + * @param string $valueScript The script to do calculations on the statistical values + * + * @return $this + */ + public function setValueScript($valueScript) + { + return $this->setParam('value_script', $valueScript); + } + + /** + * Sets the ordering type for this facet. Elasticsearch + * internal default is count. + * + * @param string $type The order type to set use for sorting of the terms. + * + * @throws \Elastica\Exception\InvalidException When an invalid order type was set. + * + * @return $this + */ + public function setOrder($type) + { + if (!in_array($type, $this->_orderTypes)) { + throw new InvalidException('Invalid order type: '.$type); + } + + return $this->setParam('order', $type); + } + + /** + * Sets a field to compute basic statistical results on. + * + * @param string $valueField The field to compute statistical values for + * + * @return $this + */ + public function setValueField($valueField) + { + return $this->setParam('value_field', $valueField); + } + + /** + * Sets the amount of terms to be returned. + * + * @param int $size The amount of terms to be returned. + * + * @return $this + */ + public function setSize($size) + { + return $this->setParam('size', (int) $size); + } + + /** + * Creates the full facet definition, which includes the basic + * facet definition of the parent. + * + * @see \Elastica\Facet\AbstractFacet::toArray() + * + * @return array + */ + public function toArray() + { + $this->_setFacetParam('terms_stats', $this->_params); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractFilter.php b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractFilter.php new file mode 100644 index 00000000..7c7dc4f7 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractFilter.php @@ -0,0 +1,59 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filters.html + */ +abstract class AbstractFilter extends Param +{ + /** + * Sets the filter cache. + * + * @param bool $cached Cached + * + * @return $this + */ + public function setCached($cached = true) + { + return $this->setParam('_cache', (bool) $cached); + } + + /** + * Sets the filter cache key. + * + * @param string $cacheKey Cache key + * + * @throws \Elastica\Exception\InvalidException If given key is empty + * + * @return $this + */ + public function setCacheKey($cacheKey) + { + $cacheKey = (string) $cacheKey; + + if (empty($cacheKey)) { + throw new InvalidException('Invalid parameter. Has to be a non empty string'); + } + + return $this->setParam('_cache_key', (string) $cacheKey); + } + + /** + * Sets the filter name. + * + * @param string $name Name + * + * @return $this + */ + public function setName($name) + { + return $this->setParam('_name', $name); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoDistance.php b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoDistance.php new file mode 100644 index 00000000..b208afb4 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoDistance.php @@ -0,0 +1,198 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-filter.html + */ +abstract class AbstractGeoDistance extends AbstractFilter +{ + const LOCATION_TYPE_GEOHASH = 'geohash'; + const LOCATION_TYPE_LATLON = 'latlon'; + + /** + * Location type. + * + * Decides if this filter uses latitude/longitude or geohash for the location. + * Values are "latlon" or "geohash". + * + * @var string + */ + protected $_locationType = null; + + /** + * Key. + * + * @var string + */ + protected $_key = null; + + /** + * Latitude. + * + * @var float + */ + protected $_latitude = null; + + /** + * Longitude. + * + * @var float + */ + protected $_longitude = null; + + /** + * Geohash. + * + * @var string + */ + protected $_geohash = null; + + /** + * Create GeoDistance object. + * + * @param string $key Key + * @param array|string $location Location as array or geohash: array('lat' => 48.86, 'lon' => 2.35) OR 'drm3btev3e86' + * + * @internal param string $distance Distance + */ + public function __construct($key, $location) + { + // Key + $this->setKey($key); + $this->setLocation($location); + } + + /** + * @param string $key + * + * @return $this + */ + public function setKey($key) + { + $this->_key = $key; + + return $this; + } + + /** + * @param array|string $location + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function setLocation($location) + { + // Location + if (is_array($location)) { // Latitude/Longitude + // Latitude + if (isset($location['lat'])) { + $this->setLatitude($location['lat']); + } else { + throw new InvalidException('$location[\'lat\'] has to be set'); + } + + // Longitude + if (isset($location['lon'])) { + $this->setLongitude($location['lon']); + } else { + throw new InvalidException('$location[\'lon\'] has to be set'); + } + } elseif (is_string($location)) { // Geohash + $this->setGeohash($location); + } else { // Invalid location + throw new InvalidException('$location has to be an array (latitude/longitude) or a string (geohash)'); + } + + return $this; + } + + /** + * @param float $latitude + * + * @return $this + */ + public function setLatitude($latitude) + { + $this->_latitude = (float) $latitude; + $this->_locationType = self::LOCATION_TYPE_LATLON; + + return $this; + } + + /** + * @param float $longitude + * + * @return $this + */ + public function setLongitude($longitude) + { + $this->_longitude = (float) $longitude; + $this->_locationType = self::LOCATION_TYPE_LATLON; + + return $this; + } + + /** + * @param string $geohash + * + * @return $this + */ + public function setGeohash($geohash) + { + $this->_geohash = $geohash; + $this->_locationType = self::LOCATION_TYPE_GEOHASH; + + return $this; + } + + /** + * @throws \Elastica\Exception\InvalidException + * + * @return array|string + */ + protected function _getLocationData() + { + if ($this->_locationType === self::LOCATION_TYPE_LATLON) { // Latitude/longitude + $location = array(); + + if (isset($this->_latitude)) { // Latitude + $location['lat'] = $this->_latitude; + } else { + throw new InvalidException('Latitude has to be set'); + } + + if (isset($this->_longitude)) { // Geohash + $location['lon'] = $this->_longitude; + } else { + throw new InvalidException('Longitude has to be set'); + } + } elseif ($this->_locationType === self::LOCATION_TYPE_GEOHASH) { // Geohash + $location = $this->_geohash; + } else { // Invalid location type + throw new InvalidException('Invalid location type'); + } + + return $location; + } + + /** + * @see \Elastica\Param::toArray() + * + * @throws \Elastica\Exception\InvalidException + * + * @return array + */ + public function toArray() + { + $this->setParam($this->_key, $this->_getLocationData()); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoShape.php b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoShape.php new file mode 100644 index 00000000..4f5c0f93 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractGeoShape.php @@ -0,0 +1,52 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-filter.html + */ +abstract class AbstractGeoShape extends AbstractFilter +{ + const RELATION_INTERSECT = 'intersects'; + const RELATION_DISJOINT = 'disjoint'; + const RELATION_CONTAINS = 'within'; + + /** + * @var string + * + * elasticsearch path of the pre-indexed shape + */ + protected $_path; + + /** + * @var string + * + * the relation of the 2 shaped: intersects, disjoint, within + */ + protected $_relation = self::RELATION_INTERSECT; + + /** + * @param string $relation + * + * @return $this + */ + public function setRelation($relation) + { + $this->_relation = $relation; + + return $this; + } + + /** + * @return string + */ + public function getRelation() + { + return $this->_relation; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractMulti.php b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractMulti.php new file mode 100644 index 00000000..06f6daea --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/AbstractMulti.php @@ -0,0 +1,89 @@ + + */ +abstract class AbstractMulti extends AbstractFilter +{ + /** + * Filters. + * + * @var array + */ + protected $_filters = array(); + + /** + * @param \Elastica\Filter\AbstractFilter $filters + */ + public function __construct(array $filters = array()) + { + if (!empty($filters)) { + $this->setFilters($filters); + } + } + + /** + * Add filter. + * + * @param \Elastica\Filter\AbstractFilter $filter + * + * @return $this + */ + public function addFilter(AbstractFilter $filter) + { + $this->_filters[] = $filter->toArray(); + + return $this; + } + + /** + * Set filters. + * + * @param array $filters + * + * @return $this + */ + public function setFilters(array $filters) + { + $this->_filters = array(); + + foreach ($filters as $filter) { + $this->addFilter($filter); + } + + return $this; + } + + /** + * @return array Filters + */ + public function getFilters() + { + return $this->_filters; + } + + /** + * @see \Elastica\Param::toArray() + * + * @return array + */ + public function toArray() + { + $data = parent::toArray(); + $name = $this->_getBaseName(); + $filterData = $data[$name]; + + if (empty($filterData)) { + $filterData = $this->_filters; + } else { + $filterData['filters'] = $this->_filters; + } + + $data[$name] = $filterData; + + return $data; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Bool.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Bool.php new file mode 100644 index 00000000..0d30f83f --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Bool.php @@ -0,0 +1,15 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html + */ +class Bool extends BoolFilter +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/BoolAnd.php b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolAnd.php new file mode 100644 index 00000000..8a08ea9c --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolAnd.php @@ -0,0 +1,20 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-and-filter.html + */ +class BoolAnd extends AbstractMulti +{ + /** + * @return string + */ + protected function _getBaseName() + { + return 'and'; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/BoolFilter.php b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolFilter.php new file mode 100644 index 00000000..5a488b77 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolFilter.php @@ -0,0 +1,133 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html + */ +class BoolFilter extends AbstractFilter +{ + /** + * Must. + * + * @var array + */ + protected $_must = array(); + + /** + * Should. + * + * @var array + */ + protected $_should = array(); + + /** + * Must not. + * + * @var array + */ + protected $_mustNot = array(); + + /** + * Adds should filter. + * + * @param array|\Elastica\Filter\AbstractFilter $args Filter data + * + * @return $this + */ + public function addShould($args) + { + return $this->_addFilter('should', $args); + } + + /** + * Adds must filter. + * + * @param array|\Elastica\Filter\AbstractFilter $args Filter data + * + * @return $this + */ + public function addMust($args) + { + return $this->_addFilter('must', $args); + } + + /** + * Adds mustNot filter. + * + * @param array|\Elastica\Filter\AbstractFilter $args Filter data + * + * @return $this + */ + public function addMustNot($args) + { + return $this->_addFilter('mustNot', $args); + } + + /** + * Adds general filter based on type. + * + * @param string $type Filter type + * @param array|\Elastica\Filter\AbstractFilter $args Filter data + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + protected function _addFilter($type, $args) + { + if ($args instanceof AbstractFilter) { + $args = $args->toArray(); + } elseif (!is_array($args)) { + throw new InvalidException('Invalid parameter. Has to be array or instance of Elastica\Filter'); + } else { + $parsedArgs = array(); + foreach ($args as $filter) { + if ($filter instanceof AbstractFilter) { + $parsedArgs[] = $filter->toArray(); + } + } + $args = $parsedArgs; + } + + $varName = '_'.$type; + $this->{$varName}[] = $args; + + return $this; + } + + /** + * Converts bool filter to array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array Filter array + */ + public function toArray() + { + $args = array(); + + if (!empty($this->_must)) { + $args['bool']['must'] = $this->_must; + } + + if (!empty($this->_should)) { + $args['bool']['should'] = $this->_should; + } + + if (!empty($this->_mustNot)) { + $args['bool']['must_not'] = $this->_mustNot; + } + + if (isset($args['bool'])) { + $args['bool'] = array_merge($args['bool'], $this->getParams()); + } + + return $args; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/BoolNot.php b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolNot.php new file mode 100644 index 00000000..81db7f65 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolNot.php @@ -0,0 +1,42 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-not-filter.html + */ +class BoolNot extends AbstractFilter +{ + /** + * Creates Not filter query. + * + * @param \Elastica\Filter\AbstractFilter $filter Filter object + */ + public function __construct(AbstractFilter $filter) + { + $this->setFilter($filter); + } + + /** + * Set filter. + * + * @param \Elastica\Filter\AbstractFilter $filter + * + * @return $this + */ + public function setFilter(AbstractFilter $filter) + { + return $this->setParam('filter', $filter->toArray()); + } + + /** + * @return string + */ + protected function _getBaseName() + { + return 'not'; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/BoolOr.php b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolOr.php new file mode 100644 index 00000000..9091e496 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/BoolOr.php @@ -0,0 +1,20 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-or-filter.html + */ +class BoolOr extends AbstractMulti +{ + /** + * @return string + */ + protected function _getBaseName() + { + return 'or'; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Exists.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Exists.php new file mode 100644 index 00000000..d6dc9962 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Exists.php @@ -0,0 +1,34 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html + */ +class Exists extends AbstractFilter +{ + /** + * Construct exists filter. + * + * @param string $field + */ + public function __construct($field) + { + $this->setField($field); + } + + /** + * Set field. + * + * @param string $field + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/GeoBoundingBox.php b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoBoundingBox.php new file mode 100644 index 00000000..f67febe3 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoBoundingBox.php @@ -0,0 +1,49 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-bounding-box-filter.html + */ +class GeoBoundingBox extends AbstractFilter +{ + /** + * Construct BoundingBoxFilter. + * + * @param string $key Key + * @param array $coordinates Array with top left coordinate as first and bottom right coordinate as second element + */ + public function __construct($key, array $coordinates) + { + $this->addCoordinates($key, $coordinates); + } + + /** + * Add coordinates. + * + * @param string $key Key + * @param array $coordinates Array with top left coordinate as first and bottom right coordinate as second element + * + * @throws \Elastica\Exception\InvalidException If $coordinates doesn't have two elements + * + * @return $this + */ + public function addCoordinates($key, array $coordinates) + { + if (!isset($coordinates[0]) || !isset($coordinates[1])) { + throw new InvalidException('expected $coordinates to be an array with two elements'); + } + + $this->setParam($key, array( + 'top_left' => $coordinates[0], + 'bottom_right' => $coordinates[1], + )); + + return $this; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistance.php b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistance.php new file mode 100644 index 00000000..f4cb51d9 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistance.php @@ -0,0 +1,76 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-filter.html + */ +class GeoDistance extends AbstractGeoDistance +{ + const DISTANCE_TYPE_ARC = 'arc'; + const DISTANCE_TYPE_PLANE = 'plane'; + const DISTANCE_TYPE_SLOPPY_ARC = 'sloppy_arc'; + + const OPTIMIZE_BBOX_MEMORY = 'memory'; + const OPTIMIZE_BBOX_INDEXED = 'indexed'; + const OPTIMIZE_BBOX_NONE = 'none'; + + /** + * Create GeoDistance object. + * + * @param string $key Key + * @param array|string $location Location as array or geohash: array('lat' => 48.86, 'lon' => 2.35) OR 'drm3btev3e86' + * @param string $distance Distance + * + * @throws \Elastica\Exception\InvalidException + */ + public function __construct($key, $location, $distance) + { + parent::__construct($key, $location); + + $this->setDistance($distance); + } + + /** + * @param string $distance + * + * @return $this + */ + public function setDistance($distance) + { + $this->setParam('distance', $distance); + + return $this; + } + + /** + * See DISTANCE_TYPE_* constants. + * + * @param string $distanceType + * + * @return $this + */ + public function setDistanceType($distanceType) + { + $this->setParam('distance_type', $distanceType); + + return $this; + } + + /** + * See OPTIMIZE_BBOX_* constants. + * + * @param string $optimizeBbox + * + * @return $this + */ + public function setOptimizeBbox($optimizeBbox) + { + $this->setParam('optimize_bbox', $optimizeBbox); + + return $this; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistanceRange.php b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistanceRange.php new file mode 100644 index 00000000..f5cbbeb7 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoDistanceRange.php @@ -0,0 +1,103 @@ +setRanges($ranges); + } + } + + /** + * @param array $ranges + * + * @return $this + */ + public function setRanges(array $ranges) + { + $this->_ranges = array(); + + foreach ($ranges as $key => $value) { + $this->setRange($key, $value); + } + + return $this; + } + + /** + * @param string $key + * @param mixed $value + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function setRange($key, $value) + { + switch ($key) { + case self::RANGE_TO: + case self::RANGE_FROM: + case self::RANGE_GT: + case self::RANGE_GTE: + case self::RANGE_LT: + case self::RANGE_LTE: + break; + case self::RANGE_INCLUDE_LOWER: + case self::RANGE_INCLUDE_UPPER: + $value = (boolean) $value; + break; + default: + throw new InvalidException('Invalid range parameter given: '.$key); + } + $this->_ranges[$key] = $value; + + return $this; + } + + /** + * @return array + */ + public function toArray() + { + foreach ($this->_ranges as $key => $value) { + $this->setParam($key, $value); + } + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/GeoPolygon.php b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoPolygon.php new file mode 100644 index 00000000..86ca2b80 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoPolygon.php @@ -0,0 +1,56 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-polygon-filter.html + */ +class GeoPolygon extends AbstractFilter +{ + /** + * Key. + * + * @var string Key + */ + protected $_key = ''; + + /** + * Points making up polygon. + * + * @var array Points making up polygon + */ + protected $_points = array(); + + /** + * Construct polygon filter. + * + * @param string $key Key + * @param array $points Points making up polygon + */ + public function __construct($key, array $points) + { + $this->_key = $key; + $this->_points = $points; + } + + /** + * Converts filter to array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array + */ + public function toArray() + { + return array( + 'geo_polygon' => array( + $this->_key => array( + 'points' => $this->_points, + ), + ), + ); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapePreIndexed.php b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapePreIndexed.php new file mode 100644 index 00000000..d07cffff --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapePreIndexed.php @@ -0,0 +1,84 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-filter.html + */ +class GeoShapePreIndexed extends AbstractGeoShape +{ + /** + * elasticsearch id of the pre-indexed shape. + * + * @var string + */ + protected $_indexedId; + + /** + * elasticsearch type of the pre-indexed shape. + * + * @var string + */ + protected $_indexedType; + + /** + * elasticsearch index of the pre-indexed shape. + * + * @var string + */ + protected $_indexedIndex; + + /** + * elasticsearch path/field name of the pre-indexed shape. + * + * @var string + */ + protected $_indexedPath; + + /** + * Construct geo_shape filter with a pre-indexed shape. + * + * @param string $path The path/field of the shape searched + * @param string $indexedId Id of the pre-indexed shape + * @param string $indexedType Type of the pre-indexed shape + * @param string $indexedIndex Index of the pre-indexed shape + * @param string $indexedPath Path of the pre-indexed shape + */ + public function __construct($path, $indexedId, $indexedType, $indexedIndex, $indexedPath) + { + $this->_path = $path; + $this->_indexedId = $indexedId; + $this->_indexedType = $indexedType; + $this->_indexedIndex = $indexedIndex; + $this->_indexedPath = $indexedPath; + } + + /** + * Converts filter to array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array + */ + public function toArray() + { + return array( + 'geo_shape' => array( + $this->_path => array( + 'indexed_shape' => array( + 'id' => $this->_indexedId, + 'type' => $this->_indexedType, + 'index' => $this->_indexedIndex, + 'path' => $this->_indexedPath, + ), + 'relation' => $this->_relation, + ), + ), + ); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapeProvided.php b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapeProvided.php new file mode 100644 index 00000000..0f25beeb --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/GeoShapeProvided.php @@ -0,0 +1,73 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-filter.html + */ +class GeoShapeProvided extends AbstractGeoShape +{ + const TYPE_ENVELOPE = 'envelope'; + const TYPE_MULTIPOINT = 'multipoint'; + const TYPE_POINT = 'point'; + const TYPE_MULTIPOLYGON = 'multipolygon'; + const TYPE_LINESTRING = 'linestring'; + const TYPE_POLYGON = 'polygon'; + + /** + * Type of the geo_shape. + * + * @var string + */ + protected $_shapeType; + + /** + * Coordinates making up geo_shape. + * + * @var array Coordinates making up geo_shape + */ + protected $_coordinates; + + /** + * Construct geo_shape filter. + * + * @param string $path The path/field of the shape searched + * @param array $coordinates Points making up the shape + * @param string $shapeType Type of the geo_shape: + * point, envelope, linestring, polygon, + * multipoint or multipolygon + */ + public function __construct($path, array $coordinates, $shapeType = self::TYPE_ENVELOPE) + { + $this->_path = $path; + $this->_shapeType = $shapeType; + $this->_coordinates = $coordinates; + } + + /** + * Converts filter to array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array + */ + public function toArray() + { + return array( + 'geo_shape' => array( + $this->_path => array( + 'shape' => array( + 'type' => $this->_shapeType, + 'coordinates' => $this->_coordinates, + ), + 'relation' => $this->_relation, + ), + ), + ); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/GeohashCell.php b/vendor/ruflin/elastica/lib/Elastica/Filter/GeohashCell.php new file mode 100644 index 00000000..dd147152 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/GeohashCell.php @@ -0,0 +1,47 @@ + 40.3, 'lon' => 45.2] + * @param string|int $precision Integer length of geohash prefix or distance (3, or "50m") + * @param bool $neighbors If true, filters cells next to the given cell. + */ + public function __construct($key, $location, $precision = -1, $neighbors = false) + { + parent::__construct($key, $location); + $this->setPrecision($precision); + $this->setNeighbors($neighbors); + } + + /** + * Set the precision for this filter. + * + * @param string|int $precision Integer length of geohash prefix or distance (3, or "50m") + * + * @return $this + */ + public function setPrecision($precision) + { + return $this->setParam('precision', $precision); + } + + /** + * Set the neighbors option for this filter. + * + * @param bool $neighbors If true, filters cells next to the given cell. + * + * @return $this + */ + public function setNeighbors($neighbors) + { + return $this->setParam('neighbors', (bool) $neighbors); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/HasChild.php b/vendor/ruflin/elastica/lib/Elastica/Filter/HasChild.php new file mode 100644 index 00000000..2c4cc0d6 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/HasChild.php @@ -0,0 +1,95 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-has-child-filter.html + */ +class HasChild extends AbstractFilter +{ + /** + * Construct HasChild filter. + * + * @param string|\Elastica\Query|\Elastica\Filter\AbstractFilter $query Query string or a Elastica\Query object or a filter + * @param string|\Elastica\Type $type Child document type + */ + public function __construct($query, $type = null) + { + $this->setType($type); + if ($query instanceof AbstractFilter) { + $this->setFilter($query); + } else { + $this->setQuery($query); + } + } + + /** + * Sets query object. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery($query) + { + $query = \Elastica\Query::create($query); + $data = $query->toArray(); + + return $this->setParam('query', $data['query']); + } + + /** + * Sets the filter object. + * + * @param \Elastica\Filter\AbstractFilter $filter + * + * @return $this + */ + public function setFilter($filter) + { + return $this->setParam('filter', $filter->toArray()); + } + + /** + * Set type of the child document. + * + * @param string|\Elastica\Type $type Child document type + * + * @return $this + */ + public function setType($type) + { + if ($type instanceof \Elastica\Type) { + $type = $type->getName(); + } + + return $this->setParam('type', (string) $type); + } + + /** + * Set minimum number of children are required to match for the parent doc to be considered a match. + * + * @param int $count + * + * @return $this + */ + public function setMinimumChildrenCount($count) + { + return $this->setParam('min_children', (int) $count); + } + + /** + * Set maximum number of children are required to match for the parent doc to be considered a match. + * + * @param int $count + * + * @return $this + */ + public function setMaximumChildrenCount($count) + { + return $this->setParam('max_children', (int) $count); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/HasParent.php b/vendor/ruflin/elastica/lib/Elastica/Filter/HasParent.php new file mode 100644 index 00000000..73a2dc5a --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/HasParent.php @@ -0,0 +1,69 @@ +setFilter($query); + } else { + $this->setQuery($query); + } + $this->setType($type); + } + + /** + * Sets query object. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery($query) + { + $query = \Elastica\Query::create($query); + $data = $query->toArray(); + + return $this->setParam('query', $data['query']); + } + + /** + * Sets filter object. + * + * @param \Elastica\Filter\AbstractFilter $filter + * + * @return $this + */ + public function setFilter($filter) + { + return $this->setParam('filter', $filter->toArray()); + } + + /** + * Set type of the parent document. + * + * @param string|\Elastica\Type $type Parent document type + * + * @return $this + */ + public function setType($type) + { + if ($type instanceof \Elastica\Type) { + $type = $type->getName(); + } + + return $this->setParam('type', (string) $type); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Ids.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Ids.php new file mode 100644 index 00000000..bfb8cc48 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Ids.php @@ -0,0 +1,94 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-filter.html + */ +class Ids extends AbstractFilter +{ + /** + * Creates filter object. + * + * @param string|\Elastica\Type $type Type to filter on + * @param array $ids List of ids + */ + public function __construct($type = null, array $ids = array()) + { + $this->setType($type); + $this->setIds($ids); + } + + /** + * Adds one more filter to the and filter. + * + * @param string $id Adds id to filter + * + * @return $this + */ + public function addId($id) + { + return $this->addParam('values', $id); + } + + /** + * Adds one more type to query. + * + * @param string|\Elastica\Type $type Type name or object + * + * @return $this + */ + public function addType($type) + { + if ($type instanceof ElasticaType) { + $type = $type->getName(); + } elseif (empty($type) && !is_numeric($type)) { + // TODO: Shouldn't this throw an exception? + // A type can be 0, but cannot be empty + return $this; + } + + return $this->addParam('type', $type); + } + + /** + * Set type. + * + * @param string|\Elastica\Type $type Type name or object + * + * @return $this + */ + public function setType($type) + { + if ($type instanceof ElasticaType) { + $type = $type->getName(); + } elseif (empty($type) && !is_numeric($type)) { + // TODO: Shouldn't this throw an exception or let handling of invalid params to ES? + // A type can be 0, but cannot be empty + return $this; + } + + return $this->setParam('type', $type); + } + + /** + * Sets the ids to filter. + * + * @param array|string $ids List of ids + * + * @return $this + */ + public function setIds($ids) + { + if (!is_array($ids)) { + $ids = array($ids); + } + + return $this->setParam('values', $ids); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Indices.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Indices.php new file mode 100644 index 00000000..ffaf5975 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Indices.php @@ -0,0 +1,78 @@ +setIndices($indices)->setFilter($filter); + } + + /** + * Set the indices on which this filter should be applied. + * + * @param mixed[] $indices + * + * @return $this + */ + public function setIndices(array $indices) + { + $this->setParam('indices', array()); + foreach ($indices as $index) { + $this->addIndex($index); + } + + return $this; + } + + /** + * Adds one more index on which this filter should be applied. + * + * @param string|\Elastica\Index $index + * + * @return $this + */ + public function addIndex($index) + { + if ($index instanceof ElasticaIndex) { + $index = $index->getName(); + } + + return $this->addParam('indices', (string) $index); + } + + /** + * Set the filter to be applied to docs in the specified indices. + * + * @param AbstractFilter $filter + * + * @return $this + */ + public function setFilter(AbstractFilter $filter) + { + return $this->setParam('filter', $filter->toArray()); + } + + /** + * Set the filter to be applied to docs in indices which do not match those specified in the "indices" parameter. + * + * @param AbstractFilter $filter + * + * @return $this + */ + public function setNoMatchFilter(AbstractFilter $filter) + { + return $this->setParam('no_match_filter', $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Limit.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Limit.php new file mode 100644 index 00000000..bf3f8e13 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Limit.php @@ -0,0 +1,34 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-limit-filter.html + */ +class Limit extends AbstractFilter +{ + /** + * Construct limit filter. + * + * @param int $limit Limit + */ + public function __construct($limit) + { + $this->setLimit($limit); + } + + /** + * Set the limit. + * + * @param int $limit Limit + * + * @return $this + */ + public function setLimit($limit) + { + return $this->setParam('value', (int) $limit); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/MatchAll.php b/vendor/ruflin/elastica/lib/Elastica/Filter/MatchAll.php new file mode 100644 index 00000000..607c5fd1 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/MatchAll.php @@ -0,0 +1,20 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-all-filter.html + */ +class MatchAll extends AbstractFilter +{ + /** + * Creates match all filter. + */ + public function __construct() + { + $this->_params = new \stdClass(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Missing.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Missing.php new file mode 100644 index 00000000..9b157b2c --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Missing.php @@ -0,0 +1,60 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-missing-filter.html + */ +class Missing extends AbstractFilter +{ + /** + * Construct missing filter. + * + * @param string $field OPTIONAL + */ + public function __construct($field = '') + { + if (strlen($field)) { + $this->setField($field); + } + } + + /** + * Set field. + * + * @param string $field + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', (string) $field); + } + + /** + * Set "existence" parameter. + * + * @param bool $existence + * + * @return $this + */ + public function setExistence($existence) + { + return $this->setParam('existence', (bool) $existence); + } + + /** + * Set "null_value" parameter. + * + * @param bool $nullValue + * + * @return $this + */ + public function setNullValue($nullValue) + { + return $this->setParam('null_value', (bool) $nullValue); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Nested.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Nested.php new file mode 100644 index 00000000..ad21bc7e --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Nested.php @@ -0,0 +1,62 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html + */ +class Nested extends AbstractFilter +{ + /** + * Adds field to mlt filter. + * + * @param string $path Nested object path + * + * @return $this + */ + public function setPath($path) + { + return $this->setParam('path', $path); + } + + /** + * Sets nested query. + * + * @param \Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery(AbstractQuery $query) + { + return $this->setParam('query', $query->toArray()); + } + + /** + * Sets nested filter. + * + * @param \Elastica\Filter\AbstractFilter $filter + * + * @return $this + */ + public function setFilter(AbstractFilter $filter) + { + return $this->setParam('filter', $filter->toArray()); + } + + /** + * Set join option. + * + * @param bool $join + * + * @return $this + */ + public function setJoin($join) + { + return $this->setParam('join', (bool) $join); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/NumericRange.php b/vendor/ruflin/elastica/lib/Elastica/Filter/NumericRange.php new file mode 100644 index 00000000..08342616 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/NumericRange.php @@ -0,0 +1,13 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-filter.html + */ +class NumericRange extends Range +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Prefix.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Prefix.php new file mode 100644 index 00000000..e845fd73 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Prefix.php @@ -0,0 +1,80 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-filter.html + */ +class Prefix extends AbstractFilter +{ + /** + * Holds the name of the field for the prefix. + * + * @var string + */ + protected $_field = ''; + + /** + * Holds the prefix string. + * + * @var string + */ + protected $_prefix = ''; + + /** + * Creates prefix filter. + * + * @param string $field Field name + * @param string $prefix Prefix string + */ + public function __construct($field = '', $prefix = '') + { + $this->setField($field); + $this->setPrefix($prefix); + } + + /** + * Sets the name of the prefix field. + * + * @param string $field Field name + * + * @return $this + */ + public function setField($field) + { + $this->_field = $field; + + return $this; + } + + /** + * Sets the prefix string. + * + * @param string $prefix Prefix string + * + * @return $this + */ + public function setPrefix($prefix) + { + $this->_prefix = $prefix; + + return $this; + } + + /** + * Converts object to an array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array data array + */ + public function toArray() + { + $this->setParam($this->_field, $this->_prefix); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Query.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Query.php new file mode 100644 index 00000000..acb6a124 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Query.php @@ -0,0 +1,91 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-filter.html + */ +class Query extends AbstractFilter +{ + /** + * Query. + * + * @var array + */ + protected $_query; + + /** + * Construct query filter. + * + * @param array|\Elastica\Query\AbstractQuery $query + */ + public function __construct($query = null) + { + if (!is_null($query)) { + $this->setQuery($query); + } + } + + /** + * Set query. + * + * @param array|\Elastica\Query\AbstractQuery $query + * + * @throws \Elastica\Exception\InvalidException If parameter is invalid + * + * @return $this + */ + public function setQuery($query) + { + if (!$query instanceof AbstractQuery && !is_array($query)) { + throw new InvalidException('expected an array or instance of Elastica\Query\AbstractQuery'); + } + + if ($query instanceof AbstractQuery) { + $query = $query->toArray(); + } + + $this->_query = $query; + + return $this; + } + + /** + * @see \Elastica\Param::_getBaseName() + */ + protected function _getBaseName() + { + if (empty($this->_params)) { + return 'query'; + } else { + return 'fquery'; + } + } + + /** + * @see \Elastica\Param::toArray() + */ + public function toArray() + { + $data = parent::toArray(); + + $name = $this->_getBaseName(); + $filterData = $data[$name]; + + if (empty($filterData)) { + $filterData = $this->_query; + } else { + $filterData['query'] = $this->_query; + } + + $data[$name] = $filterData; + + return $data; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Range.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Range.php new file mode 100644 index 00000000..1e7bf132 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Range.php @@ -0,0 +1,73 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-filter.html + */ +class Range extends AbstractFilter +{ + /** + * Fields. + * + * @var array Fields + */ + protected $_fields = array(); + + /** + * Construct range filter. + * + * @param string $fieldName Field name + * @param array $args Field arguments + */ + public function __construct($fieldName = '', array $args = array()) + { + if ($fieldName) { + $this->addField($fieldName, $args); + } + } + + /** + * Ads a field with arguments to the range query. + * + * @param string $fieldName Field name + * @param array $args Field arguments + * + * @return $this + */ + public function addField($fieldName, array $args) + { + $this->_fields[$fieldName] = $args; + + return $this; + } + + /** + * Set execution mode. + * + * @param string $execution Options: "index" or "fielddata" + * + * @return $this + */ + public function setExecution($execution) + { + return $this->setParam('execution', (string) $execution); + } + + /** + * Converts object to array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array Filter array + */ + public function toArray() + { + $this->setParams(array_merge($this->getParams(), $this->_fields)); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Regexp.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Regexp.php new file mode 100644 index 00000000..612dc434 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Regexp.php @@ -0,0 +1,112 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-filter.html + */ +class Regexp extends AbstractFilter +{ + /** + * Holds the name of the field for the regular expression. + * + * @var string + */ + protected $_field = ''; + + /** + * Holds the regexp string. + * + * @var string + */ + protected $_regexp = ''; + + /** + * Holds the regexp options. + * + * @var array + */ + protected $_options = array(); + + /** + * Create Regexp object. + * + * @param string $field Field name + * @param string $regexp Regular expression + * @param array $options Regular expression options + * + * @throws \Elastica\Exception\InvalidException + */ + public function __construct($field = '', $regexp = '', $options = array()) + { + $this->setField($field); + $this->setRegexp($regexp); + $this->setOptions($options); + } + + /** + * Sets the name of the regexp field. + * + * @param string $field Field name + * + * @return $this + */ + public function setField($field) + { + $this->_field = $field; + + return $this; + } + + /** + * Sets the regular expression query string. + * + * @param string $regexp Regular expression + * + * @return $this + */ + public function setRegexp($regexp) + { + $this->_regexp = $regexp; + + return $this; + } + + /** + * Sets the regular expression query options. + * + * @param array $options Regular expression options + * + * @return $this + */ + public function setOptions($options) + { + $this->_options = $options; + + return $this; + } + + /** + * Converts object to an array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array data array + */ + public function toArray() + { + if (count($this->_options) > 0) { + $options = array('value' => $this->_regexp); + $options = array_merge($options, $this->_options); + + $this->setParam($this->_field, $options); + } else { + $this->setParam($this->_field, $this->_regexp); + } + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Script.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Script.php new file mode 100644 index 00000000..2c8d34bf --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Script.php @@ -0,0 +1,47 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-filter.html + */ +class Script extends AbstractFilter +{ + /** + * Query object. + * + * @var array|\Elastica\Query\AbstractQuery + */ + protected $_query = null; + + /** + * Construct script filter. + * + * @param array|string|\Elastica\Script $script OPTIONAL Script + */ + public function __construct($script = null) + { + if ($script) { + $this->setScript($script); + } + } + + /** + * Sets script object. + * + * @param \Elastica\Script|string|array $script + * + * @return $this + */ + public function setScript($script) + { + $script = Elastica\Script::create($script); + + return $this->setParams($script->toArray()); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Term.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Term.php new file mode 100644 index 00000000..2a387318 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Term.php @@ -0,0 +1,47 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-filter.html + */ +class Term extends AbstractFilter +{ + /** + * Construct term filter. + * + * @param array $term Term array + */ + public function __construct(array $term = array()) + { + $this->setRawTerm($term); + } + + /** + * Sets/overwrites key and term directly. + * + * @param array $term Key value pair + * + * @return $this + */ + public function setRawTerm(array $term) + { + return $this->setParams($term); + } + + /** + * Adds a term to the term query. + * + * @param string $key Key to query + * @param string|array $value Values(s) for the query. Boost can be set with array + * + * @return $this + */ + public function setTerm($key, $value) + { + return $this->setRawTerm(array($key => $value)); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Terms.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Terms.php new file mode 100644 index 00000000..c099ab3d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Terms.php @@ -0,0 +1,149 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-filter.html + */ +class Terms extends AbstractFilter +{ + /** + * Terms. + * + * @var array Terms + */ + protected $_terms = array(); + + /** + * Params. + * + * @var array Params + */ + protected $_params = array(); + + /** + * Terms key. + * + * @var string Terms key + */ + protected $_key = ''; + + /** + * Creates terms filter. + * + * @param string $key Terms key + * @param array $terms Terms values + */ + public function __construct($key = '', array $terms = array()) + { + $this->setTerms($key, $terms); + } + + /** + * Sets key and terms for the filter. + * + * @param string $key Terms key + * @param array $terms Terms for the query. + * + * @return $this + */ + public function setTerms($key, array $terms) + { + $this->_key = $key; + $this->_terms = array_values($terms); + + return $this; + } + + /** + * Set the lookup parameters for this filter. + * + * @param string $key terms key + * @param string|\Elastica\Type $type document type from which to fetch the terms values + * @param string $id id of the document from which to fetch the terms values + * @param string $path the field from which to fetch the values for the filter + * @param string|array|\Elastica\Index $options An array of options or the index from which to fetch the terms values. Defaults to the current index. + * + * @return $this + */ + public function setLookup($key, $type, $id, $path, $options = array()) + { + $this->_key = $key; + if ($type instanceof \Elastica\Type) { + $type = $type->getName(); + } + $this->_terms = array( + 'type' => $type, + 'id' => $id, + 'path' => $path, + ); + + $index = $options; + if (is_array($options)) { + if (isset($options['index'])) { + $index = $options['index']; + unset($options['index']); + } + $this->_terms = array_merge($options, $this->_terms); + } + + if (!is_null($index)) { + if ($index instanceof \Elastica\Index) { + $index = $index->getName(); + } + $this->_terms['index'] = $index; + } + + return $this; + } + + /** + * Adds an additional term to the query. + * + * @param string $term Filter term + * + * @return $this + */ + public function addTerm($term) + { + $this->_terms[] = $term; + + return $this; + } + + /** + * Converts object to an array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @throws \Elastica\Exception\InvalidException + * + * @return array + */ + public function toArray() + { + if (empty($this->_key)) { + throw new InvalidException('Terms key has to be set'); + } + $this->_params[$this->_key] = $this->_terms; + + return array('terms' => $this->_params); + } + + /** + * Set execution mode. + * + * @param string $execution Options: "bool", "and", "or", "plain" or "fielddata" + * + * @return $this + */ + public function setExecution($execution) + { + return $this->setParam('execution', (string) $execution); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Filter/Type.php b/vendor/ruflin/elastica/lib/Elastica/Filter/Type.php new file mode 100644 index 00000000..f9c17813 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Filter/Type.php @@ -0,0 +1,59 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-type-filter.html + */ +class Type extends AbstractFilter +{ + /** + * Type name. + * + * @var string + */ + protected $_type = null; + + /** + * Construct Type Filter. + * + * @param string $type Type name + */ + public function __construct($type = null) + { + if ($type) { + $this->setType($type); + } + } + + /** + * Ads a field with arguments to the range query. + * + * @param string $typeName Type name + * + * @return $this + */ + public function setType($typeName) + { + $this->_type = $typeName; + + return $this; + } + + /** + * Convert object to array. + * + * @see \Elastica\Filter\AbstractFilter::toArray() + * + * @return array Filter array + */ + public function toArray() + { + return array( + 'type' => array('value' => $this->_type), + ); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Index.php b/vendor/ruflin/elastica/lib/Elastica/Index.php new file mode 100644 index 00000000..3b8d431b --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Index.php @@ -0,0 +1,515 @@ + + */ +class Index implements SearchableInterface +{ + /** + * Index name. + * + * @var string Index name + */ + protected $_name = ''; + + /** + * Client object. + * + * @var \Elastica\Client Client object + */ + protected $_client = null; + + /** + * Creates a new index object. + * + * All the communication to and from an index goes of this object + * + * @param \Elastica\Client $client Client object + * @param string $name Index name + * + * @throws \Elastica\Exception\InvalidException + */ + public function __construct(Client $client, $name) + { + $this->_client = $client; + + if (!is_scalar($name)) { + throw new InvalidException('Index name should be a scalar type'); + } + $this->_name = (string) $name; + } + + /** + * Returns a type object for the current index with the given name. + * + * @param string $type Type name + * + * @return \Elastica\Type Type object + */ + public function getType($type) + { + return new Type($this, $type); + } + + /** + * Returns the current status of the index. + * + * @return \Elastica\Index\Status Index status + */ + public function getStatus() + { + return new IndexStatus($this); + } + + /** + * Return Index Stats. + * + * @return \Elastica\Index\Stats + */ + public function getStats() + { + return new IndexStats($this); + } + + /** + * Gets all the type mappings for an index. + * + * @return array + */ + public function getMapping() + { + $path = '_mapping'; + + $response = $this->request($path, Request::GET); + $data = $response->getData(); + + // Get first entry as if index is an Alias, the name of the mapping is the real name and not alias name + $mapping = array_shift($data); + + if (isset($mapping['mappings'])) { + return $mapping['mappings']; + } + + return array(); + } + + /** + * Returns the index settings object. + * + * @return \Elastica\Index\Settings Settings object + */ + public function getSettings() + { + return new IndexSettings($this); + } + + /** + * Uses _bulk to send documents to the server. + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @return \Elastica\Bulk\ResponseSet + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + */ + public function updateDocuments(array $docs) + { + foreach ($docs as $doc) { + $doc->setIndex($this->getName()); + } + + return $this->getClient()->updateDocuments($docs); + } + + /** + * Uses _bulk to send documents to the server. + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @return \Elastica\Bulk\ResponseSet + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + */ + public function addDocuments(array $docs) + { + foreach ($docs as $doc) { + $doc->setIndex($this->getName()); + } + + return $this->getClient()->addDocuments($docs); + } + + /** + * Deletes entries in the db based on a query. + * + * @param \Elastica\Query|string $query Query object + * @param array $options Optional params + * + * @return \Elastica\Response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html + */ + public function deleteByQuery($query, array $options = array()) + { + if (is_string($query)) { + // query_string queries are not supported for delete by query operations + $options['q'] = $query; + + return $this->request('_query', Request::DELETE, array(), $options); + } + $query = Query::create($query); + + return $this->request('_query', Request::DELETE, array('query' => $query->getQuery()), $options); + } + + /** + * Deletes the index. + * + * @return \Elastica\Response Response object + */ + public function delete() + { + $response = $this->request('', Request::DELETE); + + return $response; + } + + /** + * Uses _bulk to delete documents from the server. + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @return \Elastica\Bulk\ResponseSet + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + */ + public function deleteDocuments(array $docs) + { + foreach ($docs as $doc) { + $doc->setIndex($this->getName()); + } + + return $this->getClient()->deleteDocuments($docs); + } + + /** + * Optimizes search index. + * + * Detailed arguments can be found here in the link + * + * @param array $args OPTIONAL Additional arguments + * + * @return array Server response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-optimize.html + */ + public function optimize($args = array()) + { + return $this->request('_optimize', Request::POST, array(), $args); + } + + /** + * Refreshes the index. + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html + */ + public function refresh() + { + return $this->request('_refresh', Request::POST, array()); + } + + /** + * Creates a new index with the given arguments. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html + * + * @param array $args OPTIONAL Arguments to use + * @param bool|array $options OPTIONAL + * bool=> Deletes index first if already exists (default = false). + * array => Associative array of options (option=>value) + * + * @throws \Elastica\Exception\InvalidException + * @throws \Elastica\Exception\ResponseException + * + * @return array Server response + */ + public function create(array $args = array(), $options = null) + { + $path = ''; + $query = array(); + + if (is_bool($options)) { + if ($options) { + try { + $this->delete(); + } catch (ResponseException $e) { + // Table can't be deleted, because doesn't exist + } + } + } else { + if (is_array($options)) { + foreach ($options as $key => $value) { + switch ($key) { + case 'recreate' : + try { + $this->delete(); + } catch (ResponseException $e) { + // Table can't be deleted, because doesn't exist + } + break; + case 'routing' : + $query = array('routing' => $value); + break; + default: + throw new InvalidException('Invalid option '.$key); + break; + } + } + } + } + + return $this->request($path, Request::PUT, $args, $query); + } + + /** + * Checks if the given index is already created. + * + * @return bool True if index exists + */ + public function exists() + { + $response = $this->getClient()->request($this->getName(), Request::HEAD); + $info = $response->getTransferInfo(); + + return (bool) ($info['http_code'] == 200); + } + + /** + * @param string|array|\Elastica\Query $query + * @param int|array $options + * + * @return \Elastica\Search + */ + public function createSearch($query = '', $options = null) + { + $search = new Search($this->getClient()); + $search->addIndex($this); + $search->setOptionsAndQuery($options, $query); + + return $search; + } + + /** + * Searches in this index. + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * @param int|array $options OPTIONAL Limit or associative array of options (option=>value) + * + * @return \Elastica\ResultSet ResultSet with all results inside + * + * @see \Elastica\SearchableInterface::search + */ + public function search($query = '', $options = null) + { + $search = $this->createSearch($query, $options); + + return $search->search(); + } + + /** + * Counts results of query. + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * + * @return int number of documents matching the query + * + * @see \Elastica\SearchableInterface::count + */ + public function count($query = '') + { + $search = $this->createSearch($query); + + return $search->count(); + } + + /** + * Opens an index. + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html + */ + public function open() + { + return $this->request('_open', Request::POST); + } + + /** + * Closes the index. + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html + */ + public function close() + { + return $this->request('_close', Request::POST); + } + + /** + * Returns the index name. + * + * @return string Index name + */ + public function getName() + { + return $this->_name; + } + + /** + * Returns index client. + * + * @return \Elastica\Client Index client object + */ + public function getClient() + { + return $this->_client; + } + + /** + * Adds an alias to the current index. + * + * @param string $name Alias name + * @param bool $replace OPTIONAL If set, an existing alias will be replaced + * + * @return \Elastica\Response Response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html + */ + public function addAlias($name, $replace = false) + { + $path = '_aliases'; + + $data = array('actions' => array()); + + if ($replace) { + $status = new Status($this->getClient()); + foreach ($status->getIndicesWithAlias($name) as $index) { + $data['actions'][] = array('remove' => array('index' => $index->getName(), 'alias' => $name)); + } + } + + $data['actions'][] = array('add' => array('index' => $this->getName(), 'alias' => $name)); + + return $this->getClient()->request($path, Request::POST, $data); + } + + /** + * Removes an alias pointing to the current index. + * + * @param string $name Alias name + * + * @return \Elastica\Response Response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html + */ + public function removeAlias($name) + { + $path = '_aliases'; + + $data = array('actions' => array(array('remove' => array('index' => $this->getName(), 'alias' => $name)))); + + return $this->getClient()->request($path, Request::POST, $data); + } + + /** + * Clears the cache of an index. + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-clearcache.html + */ + public function clearCache() + { + $path = '_cache/clear'; + // TODO: add additional cache clean arguments + return $this->request($path, Request::POST); + } + + /** + * Flushes the index to storage. + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-flush.html + */ + public function flush($refresh = false) + { + $path = '_flush'; + + return $this->request($path, Request::POST, array(), array('refresh' => $refresh)); + } + + /** + * Can be used to change settings during runtime. One example is to use it for bulk updating. + * + * @param array $data Data array + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html + */ + public function setSettings(array $data) + { + return $this->request('_settings', Request::PUT, $data); + } + + /** + * Makes calls to the elasticsearch server based on this index. + * + * @param string $path Path to call + * @param string $method Rest method to use (GET, POST, DELETE, PUT) + * @param array $data OPTIONAL Arguments as array + * @param array $query OPTIONAL Query params + * + * @return \Elastica\Response Response object + */ + public function request($path, $method, $data = array(), array $query = array()) + { + $path = $this->getName().'/'.$path; + + return $this->getClient()->request($path, $method, $data, $query); + } + + /** + * Analyzes a string. + * + * Detailed arguments can be found here in the link + * + * @param string $text String to be analyzed + * @param array $args OPTIONAL Additional arguments + * + * @return array Server response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html + */ + public function analyze($text, $args = array()) + { + $data = $this->request('_analyze', Request::POST, $text, $args)->getData(); + + return $data['tokens']; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Index/Settings.php b/vendor/ruflin/elastica/lib/Elastica/Index/Settings.php new file mode 100644 index 00000000..f97e360a --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Index/Settings.php @@ -0,0 +1,366 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html + */ +class Settings +{ + /** + * Response. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Stats info. + * + * @var array Stats info + */ + protected $_data = array(); + + /** + * Index. + * + * @var \Elastica\Index Index object + */ + protected $_index = null; + + const DEFAULT_REFRESH_INTERVAL = '1s'; + + /** + * Construct. + * + * @param \Elastica\Index $index Index object + */ + public function __construct(BaseIndex $index) + { + $this->_index = $index; + } + + /** + * Returns the current settings of the index. + * + * If param is set, only specified setting is return. + * 'index.' is added in front of $setting. + * + * @param string $setting OPTIONAL Setting name to return + * + * @return array|string|null Settings data + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html + */ + public function get($setting = '') + { + $requestData = $this->request()->getData(); + $data = reset($requestData); + + if (empty($data['settings']) || empty($data['settings']['index'])) { + // should not append, the request should throw a ResponseException + throw new NotFoundException('Index '.$this->getIndex()->getName().' not found'); + } + $settings = $data['settings']['index']; + + if (!$setting) { + // return all array + return $settings; + } + + if (isset($settings[$setting])) { + return $settings[$setting]; + } else { + if (strpos($setting, '.') !== false) { + // translate old dot-notation settings to nested arrays + $keys = explode('.', $setting); + foreach ($keys as $key) { + if (isset($settings[$key])) { + $settings = $settings[$key]; + } else { + return; + } + } + + return $settings; + } + + return; + } + } + + /** + * Sets the number of replicas. + * + * @param int $replicas Number of replicas + * + * @return \Elastica\Response Response object + */ + public function setNumberOfReplicas($replicas) + { + $replicas = (int) $replicas; + + $data = array('number_of_replicas' => $replicas); + + return $this->set($data); + } + + /** + * Sets the index to read only. + * + * @param bool $readOnly (default = true) + * + * @return \Elastica\Response + */ + public function setReadOnly($readOnly = true) + { + return $this->set(array('blocks.write' => $readOnly)); + } + + /** + * getReadOnly. + * + * @return bool + */ + public function getReadOnly() + { + return $this->get('blocks.write') === 'true'; // ES returns a string for this setting + } + + /** + * @return bool + */ + public function getBlocksRead() + { + return (bool) $this->get('blocks.read'); + } + + /** + * @param bool $state OPTIONAL (default = true) + * + * @return \Elastica\Response + */ + public function setBlocksRead($state = true) + { + $state = $state ? 1 : 0; + + return $this->set(array('blocks.read' => $state)); + } + + /** + * @return bool + */ + public function getBlocksWrite() + { + return (bool) $this->get('blocks.write'); + } + + /** + * @param bool $state OPTIONAL (default = true) + * + * @return \Elastica\Response + */ + public function setBlocksWrite($state = true) + { + $state = $state ? 1 : 0; + + return $this->set(array('blocks.write' => $state)); + } + + /** + * @return bool + */ + public function getBlocksMetadata() + { + // TODO will have to be replace by block.metadata.write once https://github.com/elasticsearch/elasticsearch/pull/9203 has been fixed + // the try/catch will have to be remove too + try { + return (bool) $this->get('blocks.metadata'); + } catch (ResponseException $e) { + if (strpos($e->getMessage(), 'ClusterBlockException') !== false) { + // hacky way to test if the metadata is blocked since bug 9203 is not fixed + return true; + } else { + throw $e; + } + } + } + + /** + * @param bool $state OPTIONAL (default = true) + * + * @return \Elastica\Response + */ + public function setBlocksMetadata($state = true) + { + // TODO will have to be replace by block.metadata.write once https://github.com/elasticsearch/elasticsearch/pull/9203 has been fixed + $state = $state ? 1 : 0; + + return $this->set(array('blocks.metadata' => $state)); + } + + /** + * Sets the index refresh interval. + * + * Value can be for example 3s for 3 seconds or + * 5m for 5 minutes. -1 refreshing is disabled. + * + * @param int $interval Number of milliseconds + * + * @return \Elastica\Response Response object + */ + public function setRefreshInterval($interval) + { + return $this->set(array('refresh_interval' => $interval)); + } + + /** + * Returns the refresh interval. + * + * If no interval is set, the default interval is returned + * + * @return string Refresh interval + */ + public function getRefreshInterval() + { + $interval = $this->get('refresh_interval'); + + if (empty($interval)) { + $interval = self::DEFAULT_REFRESH_INTERVAL; + } + + return $interval; + } + + /** + * Return merge policy. + * + * @return string Merge policy type + */ + public function getMergePolicyType() + { + return $this->get('merge.policy.type'); + } + + /** + * Sets merge policy. + * + * @param string $type Merge policy type + * + * @return \Elastica\Response Response object + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html + */ + public function setMergePolicyType($type) + { + $this->getIndex()->close(); + $response = $this->set(array('merge.policy.type' => $type)); + $this->getIndex()->open(); + + return $response; + } + + /** + * Sets the specific merge policies. + * + * To have this changes made the index has to be closed and reopened + * + * @param string $key Merge policy key (for ex. expunge_deletes_allowed) + * @param string $value + * + * @return \Elastica\Response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html + */ + public function setMergePolicy($key, $value) + { + $this->getIndex()->close(); + $response = $this->set(array('merge.policy.'.$key => $value)); + $this->getIndex()->open(); + + return $response; + } + + /** + * Returns the specific merge policy value. + * + * @param string $key Merge policy key (for ex. expunge_deletes_allowed) + * + * @return string Refresh interval + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html + */ + public function getMergePolicy($key) + { + $settings = $this->get(); + if (isset($settings['merge']['policy'][$key])) { + return $settings['merge']['policy'][$key]; + } + + return; + } + + /** + * Can be used to set/update settings. + * + * @param array $data Arguments + * + * @return \Elastica\Response Response object + */ + public function set(array $data) + { + return $this->request($data, Request::PUT); + } + + /** + * Returns the index object. + * + * @return \Elastica\Index Index object + */ + public function getIndex() + { + return $this->_index; + } + + /** + * Updates the given settings for the index. + * + * With elasticsearch 0.16 the following settings are supported + * - index.term_index_interval + * - index.term_index_divisor + * - index.translog.flush_threshold_ops + * - index.translog.flush_threshold_size + * - index.translog.flush_threshold_period + * - index.refresh_interval + * - index.merge.policy + * - index.auto_expand_replicas + * + * @param array $data OPTIONAL Data array + * @param string $method OPTIONAL Transfer method (default = \Elastica\Request::GET) + * + * @return \Elastica\Response Response object + */ + public function request(array $data = array(), $method = Request::GET) + { + $path = '_settings'; + + if (!empty($data)) { + $data = array('index' => $data); + } + + return $this->getIndex()->request($path, $method, $data); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Index/Stats.php b/vendor/ruflin/elastica/lib/Elastica/Index/Stats.php new file mode 100644 index 00000000..d86903dc --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Index/Stats.php @@ -0,0 +1,108 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-stats.html + */ +class Stats +{ + /** + * Response. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Stats info. + * + * @var array Stats info + */ + protected $_data = array(); + + /** + * Index. + * + * @var \Elastica\Index Index object + */ + protected $_index = null; + + /** + * Construct. + * + * @param \Elastica\Index $index Index object + */ + public function __construct(BaseIndex $index) + { + $this->_index = $index; + $this->refresh(); + } + + /** + * Returns the raw stats info. + * + * @return array Stats info + */ + public function getData() + { + return $this->_data; + } + + /** + * Returns the entry in the data array based on the params. + * Various params possible. + * + * @return mixed Data array entry or null if not found + */ + public function get() + { + $data = $this->getData(); + + foreach (func_get_args() as $arg) { + if (isset($data[$arg])) { + $data = $data[$arg]; + } else { + return; + } + } + + return $data; + } + + /** + * Returns the index object. + * + * @return \Elastica\Index Index object + */ + public function getIndex() + { + return $this->_index; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Reloads all status data of this object. + */ + public function refresh() + { + $path = '_stats'; + $this->_response = $this->getIndex()->request($path, Request::GET); + $this->_data = $this->getResponse()->getData(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Index/Status.php b/vendor/ruflin/elastica/lib/Elastica/Index/Status.php new file mode 100644 index 00000000..0b9dff48 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Index/Status.php @@ -0,0 +1,150 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-status.html + */ +class Status +{ + /** + * Response. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Stats info. + * + * @var array Stats info + */ + protected $_data = array(); + + /** + * Index. + * + * @var \Elastica\Index Index object + */ + protected $_index = null; + + /** + * Construct. + * + * @param \Elastica\Index $index Index object + */ + public function __construct(BaseIndex $index) + { + $this->_index = $index; + $this->refresh(); + } + + /** + * Returns all status info. + * + * @return array Status info + */ + public function getData() + { + return $this->_data; + } + + /** + * Returns the entry in the data array based on the params. + * Various params possible. + * + * @return mixed Data array entry or null if not found + */ + public function get() + { + $data = $this->getData(); + $data = $data['indices'][$this->getIndex()->getName()]; + + foreach (func_get_args() as $arg) { + if (isset($data[$arg])) { + $data = $data[$arg]; + } else { + return; + } + } + + return $data; + } + + /** + * Returns all index aliases. + * + * @return array Aliases + */ + public function getAliases() + { + $responseData = $this->getIndex()->request('_aliases', \Elastica\Request::GET)->getData(); + + $data = $responseData[$this->getIndex()->getName()]; + if (!empty($data['aliases'])) { + return array_keys($data['aliases']); + } + + return array(); + } + + /** + * Returns all index settings. + * + * @return array Index settings + */ + public function getSettings() + { + $responseData = $this->getIndex()->request('_settings', \Elastica\Request::GET)->getData(); + + return $responseData[$this->getIndex()->getName()]['settings']; + } + + /** + * Checks if the index has the given alias. + * + * @param string $name Alias name + * + * @return bool + */ + public function hasAlias($name) + { + return in_array($name, $this->getAliases()); + } + + /** + * Returns the index object. + * + * @return \Elastica\Index Index object + */ + public function getIndex() + { + return $this->_index; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Reloads all status data of this object. + */ + public function refresh() + { + $path = '_status'; + $this->_response = $this->getIndex()->request($path, Request::GET); + $this->_data = $this->getResponse()->getData(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/JSON.php b/vendor/ruflin/elastica/lib/Elastica/JSON.php new file mode 100644 index 00000000..921bc484 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/JSON.php @@ -0,0 +1,67 @@ + 1 && $args[1] === 'JSON_ELASTICSEARCH') { + // Use built in JSON constants if available (php >= 5.4) + $args[1] = defined('JSON_UNESCAPED_UNICODE') ? JSON_UNESCAPED_UNICODE : 256; + } + + // run encode and output + return call_user_func_array('json_encode', $args); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Log.php b/vendor/ruflin/elastica/lib/Elastica/Log.php new file mode 100644 index 00000000..c2f0c18a --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Log.php @@ -0,0 +1,81 @@ + + */ +class Log extends AbstractLogger +{ + /** + * Log path or true if enabled. + * + * @var string|bool + */ + protected $_log = true; + + /** + * Last logged message. + * + * @var string Last logged message + */ + protected $_lastMessage = ''; + + /** + * Inits log object. + * + * @param string|bool String to set a specific file for logging + */ + public function __construct($log = '') + { + $this->setLog($log); + } + + /** + * Log a message. + * + * @param mixed $level + * @param string $message + * @param array $context + * + * @return null|void + */ + public function log($level, $message, array $context = array()) + { + $context['error_message'] = $message; + $this->_lastMessage = JSON::stringify($context); + + if (!empty($this->_log) && is_string($this->_log)) { + error_log($this->_lastMessage.PHP_EOL, 3, $this->_log); + } else { + error_log($this->_lastMessage); + } + } + + /** + * Enable/disable log or set log path. + * + * @param bool|string $log Enables log or sets log path + * + * @return $this + */ + public function setLog($log) + { + $this->_log = $log; + + return $this; + } + + /** + * Return last logged message. + * + * @return string Last logged message + */ + public function getLastMessage() + { + return $this->_lastMessage; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Multi/ResultSet.php b/vendor/ruflin/elastica/lib/Elastica/Multi/ResultSet.php new file mode 100644 index 00000000..4d4186af --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Multi/ResultSet.php @@ -0,0 +1,205 @@ +rewind(); + $this->_init($response, $searches); + } + + /** + * @param \Elastica\Response $response + * @param array|\Elastica\Search[] $searches + * + * @throws \Elastica\Exception\InvalidException + */ + protected function _init(Response $response, array $searches) + { + $this->_response = $response; + $responseData = $response->getData(); + + if (isset($responseData['responses']) && is_array($responseData['responses'])) { + reset($searches); + foreach ($responseData['responses'] as $key => $responseData) { + $currentSearch = each($searches); + + if ($currentSearch === false) { + throw new InvalidException('No result found for search #'.$key); + } elseif (!$currentSearch['value'] instanceof BaseSearch) { + throw new InvalidException('Invalid object for search #'.$key.' provided. Should be Elastica\Search'); + } + + $search = $currentSearch['value']; + $query = $search->getQuery(); + + $response = new Response($responseData); + $this->_resultSets[$currentSearch['key']] = new BaseResultSet($response, $query); + } + } + } + + /** + * @return array|\Elastica\ResultSet[] + */ + public function getResultSets() + { + return $this->_resultSets; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * There is at least one result set with error. + * + * @return bool + */ + public function hasError() + { + foreach ($this->getResultSets() as $resultSet) { + if ($resultSet->getResponse()->hasError()) { + return true; + } + } + + return false; + } + + /** + * @return bool|\Elastica\ResultSet + */ + public function current() + { + if ($this->valid()) { + return $this->_resultSets[$this->key()]; + } else { + return false; + } + } + + /** + */ + public function next() + { + $this->_position++; + } + + /** + * @return int + */ + public function key() + { + return $this->_position; + } + + /** + * @return bool + */ + public function valid() + { + return isset($this->_resultSets[$this->key()]); + } + + /** + */ + public function rewind() + { + $this->_position = 0; + } + + /** + * @return int + */ + public function count() + { + return count($this->_resultSets); + } + + /** + * @param string|int $offset + * + * @return bool true on success or false on failure. + */ + public function offsetExists($offset) + { + return isset($this->_resultSets[$offset]); + } + + /** + * @param mixed $offset + * + * @return mixed Can return all value types. + */ + public function offsetGet($offset) + { + return isset($this->_resultSets[$offset]) ? $this->_resultSets[$offset] : null; + } + + /** + * @param mixed $offset + * @param mixed $value + */ + public function offsetSet($offset, $value) + { + if (is_null($offset)) { + $this->_resultSets[] = $value; + } else { + $this->_resultSets[$offset] = $value; + } + } + + /** + * @param mixed $offset + */ + public function offsetUnset($offset) + { + unset($this->_resultSets[$offset]); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Multi/Search.php b/vendor/ruflin/elastica/lib/Elastica/Multi/Search.php new file mode 100644 index 00000000..294fc0a7 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Multi/Search.php @@ -0,0 +1,203 @@ +setClient($client); + } + + /** + * @return \Elastica\Client + */ + public function getClient() + { + return $this->_client; + } + + /** + * @param \Elastica\Client $client + * + * @return $this + */ + public function setClient(Client $client) + { + $this->_client = $client; + + return $this; + } + + /** + * @return $this + */ + public function clearSearches() + { + $this->_searches = array(); + + return $this; + } + + /** + * @param \Elastica\Search $search + * @param string $key Optional key + * + * @return $this + */ + public function addSearch(BaseSearch $search, $key = null) + { + if ($key) { + $this->_searches[$key] = $search; + } else { + $this->_searches[] = $search; + } + + return $this; + } + + /** + * @param array|\Elastica\Search[] $searches + * + * @return $this + */ + public function addSearches(array $searches) + { + foreach ($searches as $key => $search) { + $this->addSearch($search, $key); + } + + return $this; + } + + /** + * @param array|\Elastica\Search[] $searches + * + * @return $this + */ + public function setSearches(array $searches) + { + $this->clearSearches(); + $this->addSearches($searches); + + return $this; + } + + /** + * @return array|\Elastica\Search[] + */ + public function getSearches() + { + return $this->_searches; + } + + /** + * @param string $searchType + * + * @return $this + */ + public function setSearchType($searchType) + { + $this->_options[BaseSearch::OPTION_SEARCH_TYPE] = $searchType; + + return $this; + } + + /** + * @return \Elastica\Multi\ResultSet + */ + public function search() + { + $data = $this->_getData(); + + $response = $this->getClient()->request( + '_msearch', + Request::POST, + $data, + $this->_options + ); + + return new ResultSet($response, $this->getSearches()); + } + + /** + * @return string + */ + protected function _getData() + { + $data = ''; + foreach ($this->getSearches() as $search) { + $data .= $this->_getSearchData($search); + } + + return $data; + } + + /** + * @param \Elastica\Search $search + * + * @return string + */ + protected function _getSearchData(BaseSearch $search) + { + $header = $this->_getSearchDataHeader($search); + $header = (empty($header)) ? new \stdClass() : $header; + $query = $search->getQuery(); + + $data = JSON::stringify($header)."\n"; + $data .= JSON::stringify($query->toArray())."\n"; + + return $data; + } + + /** + * @param \Elastica\Search $search + * + * @return array + */ + protected function _getSearchDataHeader(BaseSearch $search) + { + $header = $search->getOptions(); + + if ($search->hasIndices()) { + $header['index'] = $search->getIndices(); + } + + if ($search->hasTypes()) { + $header['types'] = $search->getTypes(); + } + + return $header; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Node.php b/vendor/ruflin/elastica/lib/Elastica/Node.php new file mode 100644 index 00000000..1453418d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Node.php @@ -0,0 +1,161 @@ + + */ +class Node +{ + /** + * Client. + * + * @var \Elastica\Client + */ + protected $_client = null; + + /** + * @var string Unique node id + */ + protected $_id = ''; + + /** + * Node name. + * + * @var string Node name + */ + protected $_name = ''; + + /** + * Node stats. + * + * @var \Elastica\Node\Stats Node Stats + */ + protected $_stats = null; + + /** + * Node info. + * + * @var \Elastica\Node\Info Node info + */ + protected $_info = null; + + /** + * Create a new node object. + * + * @param string $id Node id or name + * @param \Elastica\Client $client Node object + */ + public function __construct($id, Client $client) + { + $this->_client = $client; + $this->setId($id); + } + + /** + * @return string Unique node id. Can also be name if id not exists. + */ + public function getId() + { + return $this->_id; + } + + /** + * @param string $id Node id + * + * @return $this Refreshed object + */ + public function setId($id) + { + $this->_id = $id; + + return $this->refresh(); + } + + /** + * Get the name of the node. + * + * @return string Node name + */ + public function getName() + { + if (empty($this->_name)) { + $this->_name = $this->getInfo()->getName(); + } + + return $this->_name; + } + + /** + * Returns the current client object. + * + * @return \Elastica\Client Client + */ + public function getClient() + { + return $this->_client; + } + + /** + * Return stats object of the current node. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html + * + * @return \Elastica\Node\Stats Node stats + */ + public function getStats() + { + if (!$this->_stats) { + $this->_stats = new Stats($this); + } + + return $this->_stats; + } + + /** + * Return info object of the current node. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-info.html + * + * @return \Elastica\Node\Info Node info object + */ + public function getInfo() + { + if (!$this->_info) { + $this->_info = new Info($this); + } + + return $this->_info; + } + + /** + * Refreshes all node information. + * + * This should be called after updating a node to refresh all information + */ + public function refresh() + { + $this->_stats = null; + $this->_info = null; + } + + /** + * Shuts this node down. + * + * @param string $delay OPTIONAL Delay after which node is shut down (default = 1s) + * + * @return \Elastica\Response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-shutdown.html + */ + public function shutdown($delay = '1s') + { + $path = '_cluster/nodes/'.$this->getId().'/_shutdown?delay='.$delay; + + return $this->_client->request($path, Request::POST); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Node/Info.php b/vendor/ruflin/elastica/lib/Elastica/Node/Info.php new file mode 100644 index 00000000..25734641 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Node/Info.php @@ -0,0 +1,220 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-status.html + */ +class Info +{ + /** + * Response. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Stats data. + * + * @var array stats data + */ + protected $_data = array(); + + /** + * Node. + * + * @var \Elastica\Node Node object + */ + protected $_node = null; + + /** + * Query parameters. + * + * @var array + */ + protected $_params = array(); + + /** + * Create new info object for node. + * + * @param \Elastica\Node $node Node object + * @param array $params List of params to return. Can be: settings, os, process, jvm, thread_pool, network, transport, http + */ + public function __construct(BaseNode $node, array $params = array()) + { + $this->_node = $node; + $this->refresh($params); + } + + /** + * Returns the entry in the data array based on the params. + * Several params possible. + * + * Example 1: get('os', 'mem', 'total') returns total memory of the system the + * node is running on + * Example 2: get('os', 'mem') returns an array with all mem infos + * + * @return mixed Data array entry or null if not found + */ + public function get() + { + $data = $this->getData(); + + foreach (func_get_args() as $arg) { + if (isset($data[$arg])) { + $data = $data[$arg]; + } else { + return; + } + } + + return $data; + } + + /** + * Return port of the node. + * + * @return string Returns Node port + */ + public function getPort() + { + // Returns string in format: inet[/192.168.1.115:9201] + $data = $this->get('http_address'); + $data = substr($data, 6, strlen($data) - 7); + $data = explode(':', $data); + + return $data[1]; + } + + /** + * Return IP of the node. + * + * @return string Returns Node ip address + */ + public function getIp() + { + // Returns string in format: inet[/192.168.1.115:9201] + $data = $this->get('http_address'); + $data = substr($data, 6, strlen($data) - 7); + $data = explode(':', $data); + + return $data[0]; + } + + /** + * Return data regarding plugins installed on this node. + * + * @return array plugin data + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-info.html + */ + public function getPlugins() + { + if (!in_array('plugins', $this->_params)) { + //Plugin data was not retrieved when refresh() was called last. Get it now. + $this->_params[] = 'plugins'; + $this->refresh($this->_params); + } + + return $this->get('plugins'); + } + + /** + * Check if the given plugin is installed on this node. + * + * @param string $name plugin name + * + * @return bool true if the plugin is installed, false otherwise + */ + public function hasPlugin($name) + { + foreach ($this->getPlugins() as $plugin) { + if ($plugin['name'] == $name) { + return true; + } + } + + return false; + } + + /** + * Return all info data. + * + * @return array Data array + */ + public function getData() + { + return $this->_data; + } + + /** + * Return node object. + * + * @return \Elastica\Node Node object + */ + public function getNode() + { + return $this->_node; + } + + /** + * @return string Unique node id + */ + public function getId() + { + return $this->_id; + } + + /** + * @return string Node name + */ + public function getName() + { + return $this->_data['name']; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Reloads all nodes information. Has to be called if informations changed. + * + * @param array $params Params to return (default none). Possible options: settings, os, process, jvm, thread_pool, network, transport, http, plugin + * + * @return \Elastica\Response Response object + */ + public function refresh(array $params = array()) + { + $this->_params = $params; + + $path = '_nodes/'.$this->getNode()->getId(); + + if (!empty($params)) { + $path .= '?'; + foreach ($params as $param) { + $path .= $param.'=true&'; + } + } + + $this->_response = $this->getNode()->getClient()->request($path, Request::GET); + $data = $this->getResponse()->getData(); + + $this->_data = reset($data['nodes']); + $this->_id = key($data['nodes']); + $this->getNode()->setId($this->getId()); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Node/Stats.php b/vendor/ruflin/elastica/lib/Elastica/Node/Stats.php new file mode 100644 index 00000000..1af94b07 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Node/Stats.php @@ -0,0 +1,113 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-status.html + */ +class Stats +{ + /** + * Response. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Stats data. + * + * @var array stats data + */ + protected $_data = array(); + + /** + * Node. + * + * @var \Elastica\Node Node object + */ + protected $_node = null; + + /** + * Create new stats for node. + * + * @param \Elastica\Node $node Elastica node object + */ + public function __construct(BaseNode $node) + { + $this->_node = $node; + $this->refresh(); + } + + /** + * Returns all node stats as array based on the arguments. + * + * Several arguments can be use + * get('index', 'test', 'example') + * + * @return array Node stats for the given field or null if not found + */ + public function get() + { + $data = $this->getData(); + + foreach (func_get_args() as $arg) { + if (isset($data[$arg])) { + $data = $data[$arg]; + } else { + return; + } + } + + return $data; + } + + /** + * Returns all stats data. + * + * @return array Data array + */ + public function getData() + { + return $this->_data; + } + + /** + * Returns node object. + * + * @return \Elastica\Node Node object + */ + public function getNode() + { + return $this->_node; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Reloads all nodes information. Has to be called if informations changed. + * + * @return \Elastica\Response Response object + */ + public function refresh() + { + $path = '_nodes/'.$this->getNode()->getName().'/stats'; + $this->_response = $this->getNode()->getClient()->request($path, Request::GET); + $data = $this->getResponse()->getData(); + $this->_data = reset($data['nodes']); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Param.php b/vendor/ruflin/elastica/lib/Elastica/Param.php new file mode 100644 index 00000000..484fbbc3 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Param.php @@ -0,0 +1,167 @@ + + */ +class Param +{ + /** + * Params. + * + * @var array + */ + protected $_params = array(); + + /** + * Raw Params. + * + * @var array + */ + protected $_rawParams = array(); + + /** + * Converts the params to an array. A default implementation exist to create + * the an array out of the class name (last part of the class name) + * and the params. + * + * @return array Filter array + */ + public function toArray() + { + $data = array($this->_getBaseName() => $this->getParams()); + + if (!empty($this->_rawParams)) { + $data = array_merge($data, $this->_rawParams); + } + + return $data; + } + + /** + * Param's name + * Picks the last part of the class name and makes it snake_case + * You can override this method if you want to change the name. + * + * @return string name + */ + protected function _getBaseName() + { + return Util::getParamName($this); + } + + /** + * Sets params not inside params array. + * + * @param string $key + * @param mixed $value + * + * @return $this + */ + protected function _setRawParam($key, $value) + { + $this->_rawParams[$key] = $value; + + return $this; + } + + /** + * Sets (overwrites) the value at the given key. + * + * @param string $key Key to set + * @param mixed $value Key Value + * + * @return $this + */ + public function setParam($key, $value) + { + $this->_params[$key] = $value; + + return $this; + } + + /** + * Sets (overwrites) all params of this object. + * + * @param array $params Parameter list + * + * @return $this + */ + public function setParams(array $params) + { + $this->_params = $params; + + return $this; + } + + /** + * Adds a param to the list. + * + * This function can be used to add an array of params + * + * @param string $key Param key + * @param mixed $value Value to set + * + * @return $this + */ + public function addParam($key, $value) + { + if ($key != null) { + if (!isset($this->_params[$key])) { + $this->_params[$key] = array(); + } + + $this->_params[$key][] = $value; + } else { + $this->_params = $value; + } + + return $this; + } + + /** + * Returns a specific param. + * + * @param string $key Key to return + * + * @throws \Elastica\Exception\InvalidException If requested key is not set + * + * @return mixed Key value + */ + public function getParam($key) + { + if (!$this->hasParam($key)) { + throw new InvalidException('Param '.$key.' does not exist'); + } + + return $this->_params[$key]; + } + + /** + * Test if a param is set. + * + * @param string $key Key to test + * + * @return bool True if the param is set, false otherwise + */ + public function hasParam($key) + { + return isset($this->_params[$key]); + } + + /** + * Returns the params array. + * + * @return array Params + */ + public function getParams() + { + return $this->_params; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Percolator.php b/vendor/ruflin/elastica/lib/Elastica/Percolator.php new file mode 100644 index 00000000..98d0490a --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Percolator.php @@ -0,0 +1,194 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html + */ +class Percolator +{ + const EXTRA_FILTER = 'filter'; + const EXTRA_QUERY = 'query'; + const EXTRA_SIZE = 'size'; + const EXTRA_TRACK_SCORES = 'track_scores'; + const EXTRA_SORT = 'sort'; + const EXTRA_FACETS = 'facets'; + const EXTRA_AGGS = 'aggs'; + const EXTRA_HIGHLIGHT = 'highlight'; + + private $_extraRequestBodyOptions = array( + self::EXTRA_FILTER, + self::EXTRA_QUERY, + self::EXTRA_SIZE, + self::EXTRA_TRACK_SCORES, + self::EXTRA_SORT, + self::EXTRA_FACETS, + self::EXTRA_AGGS, + self::EXTRA_HIGHLIGHT, + ); + + /** + * Index object. + * + * @var \Elastica\Index + */ + protected $_index = null; + + /** + * Construct new percolator. + * + * @param \Elastica\Index $index + */ + public function __construct(Index $index) + { + $this->_index = $index; + } + + /** + * Registers a percolator query, with optional extra fields to include in the registered query. + * + * @param string $name Query name + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query Query to add + * @param array $fields Extra fields to include in the registered query + * and can be used to filter executed queries. + * + * @return \Elastica\Response + */ + public function registerQuery($name, $query, $fields = array()) + { + $path = $this->_index->getName().'/.percolator/'.$name; + $query = Query::create($query); + + $data = array_merge($query->toArray(), $fields); + + return $this->_index->getClient()->request($path, Request::PUT, $data); + } + + /** + * Removes a percolator query. + * + * @param string $name query name + * + * @return \Elastica\Response + */ + public function unregisterQuery($name) + { + $path = $this->_index->getName().'/.percolator/'.$name; + + return $this->_index->getClient()->request($path, Request::DELETE); + } + + /** + * Match a document to percolator queries. + * + * @param \Elastica\Document $doc + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query Query to filter the percolator queries which + * are executed. + * @param string $type + * @param array $params Supports setting additional request body options to the percolate request. + * [ Percolator::EXTRA_FILTER, + * Percolator::EXTRA_QUERY, + * Percolator::EXTRA_SIZE, + * Percolator::EXTRA_TRACK_SCORES, + * Percolator::EXTRA_SORT, + * Percolator::EXTRA_FACETS, + * Percolator::EXTRA_AGGS, + * Percolator::EXTRA_HIGHLIGHT ] + * + * @return array With matching registered queries. + */ + public function matchDoc(Document $doc, $query = null, $type = 'type', $params = array()) + { + $path = $this->_index->getName().'/'.$type.'/_percolate'; + $data = array('doc' => $doc->getData()); + + $this->_applyAdditionalRequestBodyOptions($params, $data); + + return $this->_percolate($path, $query, $data, $params); + } + + /** + * Percolating an existing document. + * + * @param string $id + * @param string $type + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query Query to filter the percolator queries which + * are executed. + * @param array $params Supports setting additional request body options to the percolate request. + * [ Percolator::EXTRA_FILTER, + * Percolator::EXTRA_QUERY, + * Percolator::EXTRA_SIZE, + * Percolator::EXTRA_TRACK_SCORES, + * Percolator::EXTRA_SORT, + * Percolator::EXTRA_FACETS, + * Percolator::EXTRA_AGGS, + * Percolator::EXTRA_HIGHLIGHT ] + * + * @return array With matching registered queries. + */ + public function matchExistingDoc($id, $type, $query = null, $params = array()) + { + $id = urlencode($id); + $path = $this->_index->getName().'/'.$type.'/'.$id.'/_percolate'; + + $data = array(); + $this->_applyAdditionalRequestBodyOptions($params, $data); + + return $this->_percolate($path, $query, $data, $params); + } + + /** + * Process the provided parameters and apply them to the data array. + * + * @param &$params + * @param &$data + */ + protected function _applyAdditionalRequestBodyOptions(&$params, &$data) + { + foreach ($params as $key => $value) { + if (in_array($key, $this->_extraRequestBodyOptions)) { + $data[$key] = $params[$key]; + unset($params[$key]); + } + } + } + + /** + * @param string $path + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query] $query [description] + * @param array $data + * @param array $params + * + * @return array + */ + protected function _percolate($path, $query, $data = array(), $params = array()) + { + // Add query to filter the percolator queries which are executed. + if ($query) { + $query = Query::create($query); + $data['query'] = $query->getQuery(); + } + + $response = $this->getIndex()->getClient()->request($path, Request::GET, $data, $params); + $data = $response->getData(); + + if (isset($data['matches'])) { + return $data['matches']; + } + + return array(); + } + + /** + * Return index object. + * + * @return \Elastica\Index + */ + public function getIndex() + { + return $this->_index; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query.php b/vendor/ruflin/elastica/lib/Elastica/Query.php new file mode 100644 index 00000000..175c8c95 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query.php @@ -0,0 +1,488 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html + */ +class Query extends Param +{ + /** + * Params. + * + * @var array Params + */ + protected $_params = array(); + + /** + * Suggest query or not. + * + * @var int Suggest + */ + protected $_suggest = 0; + + /** + * Creates a query object. + * + * @param array|\Elastica\Query\AbstractQuery $query OPTIONAL Query object (default = null) + */ + public function __construct($query = null) + { + if (is_array($query)) { + $this->setRawQuery($query); + } elseif ($query instanceof AbstractQuery) { + $this->setQuery($query); + } elseif ($query instanceof Suggest) { + $this->setSuggest($query); + } + } + + /** + * Transforms a string or an array to a query object. + * + * If query is empty, + * + * @param mixed $query + * + * @throws \Elastica\Exception\NotImplementedException + * + * @return self + */ + public static function create($query) + { + switch (true) { + case $query instanceof self: + return $query; + case $query instanceof AbstractQuery: + return new self($query); + case $query instanceof AbstractFilter: + $newQuery = new self(); + $newQuery->setPostFilter($query); + + return $newQuery; + case empty($query): + return new self(new MatchAll()); + case is_array($query): + return new self($query); + case is_string($query): + return new self(new QueryString($query)); + case $query instanceof AbstractSuggest: + return new self(new Suggest($query)); + + case $query instanceof Suggest: + return new self($query); + + } + + // TODO: Implement queries without + throw new NotImplementedException(); + } + + /** + * Sets query as raw array. Will overwrite all already set arguments. + * + * @param array $query Query array + * + * @return $this + */ + public function setRawQuery(array $query) + { + $this->_params = $query; + + return $this; + } + + /** + * Sets the query. + * + * @param \Elastica\Query\AbstractQuery $query Query object + * + * @return $this + */ + public function setQuery(AbstractQuery $query) + { + return $this->setParam('query', $query->toArray()); + } + + /** + * Gets the query array. + * + * @return array + **/ + public function getQuery() + { + return $this->getParam('query'); + } + + /** + * Set Filter. + * + * @param \Elastica\Filter\AbstractFilter $filter Filter object + * + * @return $this + * + * @link https://github.com/elasticsearch/elasticsearch/issues/7422 + * @deprecated + */ + public function setFilter(AbstractFilter $filter) + { + trigger_error('Deprecated: Elastica\Query::setFilter() is deprecated. Use Elastica\Query::setPostFilter() instead.', E_USER_DEPRECATED); + + return $this->setPostFilter($filter); + } + + /** + * Sets the start from which the search results should be returned. + * + * @param int $from + * + * @return $this + */ + public function setFrom($from) + { + return $this->setParam('from', $from); + } + + /** + * Sets sort arguments for the query + * Replaces existing values. + * + * @param array $sortArgs Sorting arguments + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html + */ + public function setSort(array $sortArgs) + { + return $this->setParam('sort', $sortArgs); + } + + /** + * Adds a sort param to the query. + * + * @param mixed $sort Sort parameter + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html + */ + public function addSort($sort) + { + return $this->addParam('sort', $sort); + } + + /** + * Sets highlight arguments for the query. + * + * @param array $highlightArgs Set all highlight arguments + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html + */ + public function setHighlight(array $highlightArgs) + { + return $this->setParam('highlight', $highlightArgs); + } + + /** + * Adds a highlight argument. + * + * @param mixed $highlight Add highlight argument + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html + */ + public function addHighlight($highlight) + { + return $this->addParam('highlight', $highlight); + } + + /** + * Sets maximum number of results for this query. + * + * @param int $size OPTIONAL Maximal number of results for query (default = 10) + * + * @return $this + */ + public function setSize($size = 10) + { + return $this->setParam('size', $size); + } + + /** + * Alias for setSize. + * + * @deprecated Use the setSize() method, this method will be removed in future releases + * + * @param int $limit OPTIONAL Maximal number of results for query (default = 10) + * + * @return $this + */ + public function setLimit($limit = 10) + { + return $this->setSize($limit); + } + + /** + * Enables explain on the query. + * + * @param bool $explain OPTIONAL Enabled or disable explain (default = true) + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-explain.html + */ + public function setExplain($explain = true) + { + return $this->setParam('explain', $explain); + } + + /** + * Enables version on the query. + * + * @param bool $version OPTIONAL Enabled or disable version (default = true) + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-version.html + */ + public function setVersion($version = true) + { + return $this->setParam('version', $version); + } + + /** + * Sets the fields to be returned by the search + * NOTICE php will encode modified(or named keys) array into object format in json format request + * so the fields array must a sequence(list) type of array. + * + * @param array $fields Fields to be returned + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-fields.html + */ + public function setFields(array $fields) + { + return $this->setParam('fields', $fields); + } + + /** + * Set script fields. + * + * @param array|\Elastica\ScriptFields $scriptFields Script fields + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-script-fields.html + */ + public function setScriptFields($scriptFields) + { + if (is_array($scriptFields)) { + $scriptFields = new ScriptFields($scriptFields); + } + + return $this->setParam('script_fields', $scriptFields->toArray()); + } + + /** + * Adds a Script to the query. + * + * @param string $name + * @param \Elastica\Script $script Script object + * + * @return $this + */ + public function addScriptField($name, Script $script) + { + $this->_params['script_fields'][$name] = $script->toArray(); + + return $this; + } + + /** + * Sets all facets for this query object. Replaces existing facets. + * + * @param array $facets List of facet objects + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets.html + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ + public function setFacets(array $facets) + { + $this->_params['facets'] = array(); + foreach ($facets as $facet) { + $this->addFacet($facet); + } + + return $this; + } + + /** + * Adds a Facet to the query. + * + * @param \Elastica\Facet\AbstractFacet $facet Facet object + * + * @return $this + * + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ + public function addFacet(AbstractFacet $facet) + { + $this->_params['facets'][$facet->getName()] = $facet->toArray(); + + return $this; + } + + /** + * Adds an Aggregation to the query. + * + * @param AbstractAggregation $agg + * + * @return $this + */ + public function addAggregation(AbstractAggregation $agg) + { + if (!array_key_exists('aggs', $this->_params)) { + $this->_params['aggs'] = array(); + } + $this->_params['aggs'][$agg->getName()] = $agg->toArray(); + + return $this; + } + + /** + * Converts all query params to an array. + * + * @return array Query array + */ + public function toArray() + { + if (!isset($this->_params['query']) && ($this->_suggest == 0)) { + $this->setQuery(new MatchAll()); + } + + if (isset($this->_params['facets']) && 0 === count($this->_params['facets'])) { + unset($this->_params['facets']); + } + + if (isset($this->_params['post_filter']) && 0 === count($this->_params['post_filter'])) { + unset($this->_params['post_filter']); + } + + return $this->_params; + } + + /** + * Allows filtering of documents based on a minimum score. + * + * @param int $minScore Minimum score to filter documents by + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function setMinScore($minScore) + { + if (!is_numeric($minScore)) { + throw new InvalidException('has to be numeric param'); + } + + return $this->setParam('min_score', $minScore); + } + + /** + * Add a suggest term. + * + * @param \Elastica\Suggest $suggest suggestion object + * + * @return $this + */ + public function setSuggest(Suggest $suggest) + { + $this->setParams(array_merge( + $this->getParams(), + $suggest->toArray() + )); + + $this->_suggest = 1; + + return $this; + } + + /** + * Add a Rescore. + * + * @param mixed $rescore suggestion object + * + * @return $this + */ + public function setRescore($rescore) + { + if (is_array($rescore)) { + $buffer = array(); + + foreach ($rescore as $rescoreQuery) { + $buffer [] = $rescoreQuery->toArray(); + } + } else { + $buffer = $rescore->toArray(); + } + + return $this->setParam('rescore', $buffer); + } + + /** + * Sets the _source field to be returned with every hit. + * + * @param array|bool $params Fields to be returned or false to disable source + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-source-filtering.html + */ + public function setSource($params) + { + return $this->setParam('_source', $params); + } + + /** + * Sets post_filter argument for the query. The filter is applied after the query has executed. + * + * @param array|\Elastica\Filter\AbstractFilter $filter + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-post-filter.html + */ + public function setPostFilter($filter) + { + if ($filter instanceof AbstractFilter) { + $filter = $filter->toArray(); + } else { + trigger_error('Deprecated: Elastica\Query::setPostFilter() passing filter as array is deprecated. Pass instance of AbstractFilter instead.', E_USER_DEPRECATED); + } + + return $this->setParam('post_filter', $filter); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/AbstractQuery.php b/vendor/ruflin/elastica/lib/Elastica/Query/AbstractQuery.php new file mode 100644 index 00000000..fd1c29b0 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/AbstractQuery.php @@ -0,0 +1,13 @@ + + */ +abstract class AbstractQuery extends Param +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Bool.php b/vendor/ruflin/elastica/lib/Elastica/Query/Bool.php new file mode 100644 index 00000000..c5bccc54 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Bool.php @@ -0,0 +1,15 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html + */ +class Bool extends BoolQuery +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/BoolQuery.php b/vendor/ruflin/elastica/lib/Elastica/Query/BoolQuery.php new file mode 100644 index 00000000..7b8bd4da --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/BoolQuery.php @@ -0,0 +1,111 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html + */ +class BoolQuery extends AbstractQuery +{ + /** + * Add should part to query. + * + * @param \Elastica\Query\AbstractQuery|array $args Should query + * + * @return $this + */ + public function addShould($args) + { + return $this->_addQuery('should', $args); + } + + /** + * Add must part to query. + * + * @param \Elastica\Query\AbstractQuery|array $args Must query + * + * @return $this + */ + public function addMust($args) + { + return $this->_addQuery('must', $args); + } + + /** + * Add must not part to query. + * + * @param \Elastica\Query\AbstractQuery|array $args Must not query + * + * @return $this + */ + public function addMustNot($args) + { + return $this->_addQuery('must_not', $args); + } + + /** + * Adds a query to the current object. + * + * @param string $type Query type + * @param \Elastica\Query\AbstractQuery|array $args Query + * + * @throws \Elastica\Exception\InvalidException If not valid query + * + * @return $this + */ + protected function _addQuery($type, $args) + { + if ($args instanceof AbstractQuery) { + $args = $args->toArray(); + } + + if (!is_array($args)) { + throw new InvalidException('Invalid parameter. Has to be array or instance of Elastica\Query\AbstractQuery'); + } + + return $this->addParam($type, $args); + } + + /** + * Sets boost value of this query. + * + * @param float $boost Boost value + * + * @return $this + */ + public function setBoost($boost) + { + return $this->setParam('boost', $boost); + } + + /** + * Set the minimum number of of should match. + * + * @param int $minimumNumberShouldMatch Should match minimum + * + * @return $this + */ + public function setMinimumNumberShouldMatch($minimumNumberShouldMatch) + { + return $this->setParam('minimum_number_should_match', $minimumNumberShouldMatch); + } + + /** + * Converts array to an object in case no queries are added. + * + * @return array + */ + public function toArray() + { + if (empty($this->_params)) { + $this->_params = new \stdClass(); + } + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Boosting.php b/vendor/ruflin/elastica/lib/Elastica/Query/Boosting.php new file mode 100644 index 00000000..95dcde3d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Boosting.php @@ -0,0 +1,50 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html + */ +class Boosting extends AbstractQuery +{ + const NEGATIVE_BOOST = 0.2; + + /** + * Set the positive query for this Boosting Query. + * + * @param AbstractQuery $query + * + * @return $this + */ + public function setPositiveQuery(AbstractQuery $query) + { + return $this->setParam('positive', $query->toArray()); + } + + /** + * Set the negative query for this Boosting Query. + * + * @param AbstractQuery $query + * + * @return $this + */ + public function setNegativeQuery(AbstractQuery $query) + { + return $this->setParam('negative', $query->toArray()); + } + + /** + * Set the negative_boost parameter for this Boosting Query. + * + * @param Float $negativeBoost + * + * @return $this + */ + public function setNegativeBoost($negativeBoost) + { + return $this->setParam('negative_boost', (float) $negativeBoost); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Builder.php b/vendor/ruflin/elastica/lib/Elastica/Query/Builder.php new file mode 100644 index 00000000..55b6b903 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Builder.php @@ -0,0 +1,935 @@ + + * + * @link http://www.elastic.co/ + * @deprecated This builder is deprecated and will be removed. Use new Elastica\QueryBuilder instead. + **/ +class Builder extends AbstractQuery +{ + /** + * Query string. + * + * @var string + */ + private $_string = '{'; + + /** + * Factory method. + * + * @param string $string JSON encoded string to use as query. + * + * @return self + */ + public static function factory($string = null) + { + return new self($string); + } + + /** + * Constructor. + * + * @param string $string JSON encoded string to use as query. + */ + public function __construct($string = null) + { + if (!$string == null) { + $this->_string .= substr($string, 1, -1); + } + } + + /** + * Output the query string. + * + * @return string + */ + public function __toString() + { + return rtrim($this->_string, ',').'}'; + } + + /** + * {@inheritdoc} + */ + public function toArray() + { + try { + return JSON::parse($input = $this->__toString()); + } catch (JSONParseException $e) { + throw new InvalidException(sprintf( + 'The produced query is not a valid json string : "%s"', + $input + )); + } + } + + /** + * Allow wildcards (*, ?) as the first character in a query. + * + * @param bool $bool Defaults to true. + * + * @return $this + */ + public function allowLeadingWildcard($bool = true) + { + return $this->field('allow_leading_wildcard', (bool) $bool); + } + + /** + * Enable best effort analysis of wildcard terms. + * + * @param bool $bool Defaults to true. + * + * @return $this + */ + public function analyzeWildcard($bool = true) + { + return $this->field('analyze_wildcard', (bool) $bool); + } + + /** + * Set the analyzer name used to analyze the query string. + * + * @param string $analyzer Analyzer to use. + * + * @return $this + */ + public function analyzer($analyzer) + { + return $this->field('analyzer', $analyzer); + } + + /** + * Autogenerate phrase queries. + * + * @param bool $bool Defaults to true. + * + * @return $this + */ + public function autoGeneratePhraseQueries($bool = true) + { + return $this->field('auto_generate_phrase_queries', (bool) $bool); + } + + /** + * Bool Query. + * + * A query that matches documents matching boolean combinations of other queries. + * + * The bool query maps to Lucene BooleanQuery. + * + * It is built using one or more boolean clauses, each clause with a typed + * occurrence. + * + * The occurrence types are: must, should, must_not. + * + * @return $this + */ + public function bool() + { + return $this->fieldOpen('bool'); + } + + /** + * Close a 'bool' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function boolClose() + { + return $this->fieldClose(); + } + + /** + * Sets the boost value of the query. + * + * @param float $boost Defaults to 1.0. + * + * @return $this + */ + public function boost($boost = 1.0) + { + return $this->field('boost', (float) $boost); + } + + /** + * Close a previously opened brace. + * + * @return $this + */ + public function close() + { + $this->_string = rtrim($this->_string, ' ,').'},'; + + return $this; + } + + /** + * Constant Score Query. + * + * A query that wraps a filter or another query and simply returns a constant + * score equal to the query boost for every document in the filter. + * + * Maps to Lucene ConstantScoreQuery. + * + * @return $this + */ + public function constantScore() + { + return $this->fieldOpen('constant_score'); + } + + /** + * Close a 'constant_score' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function constantScoreClose() + { + return $this->fieldClose(); + } + + /** + * The default field for query terms if no prefix field is specified. + * + * @param string $field Defaults to _all. + * + * @return $this + */ + public function defaultField($field = '_all') + { + return $this->field('default_field', $field); + } + + /** + * The default operator used if no explicit operator is specified. + * + * For example, with a default operator of OR, the query "capital of Hungary" + * is translated to "capital OR of OR Hungary", and with default operator of + * AND, the same query is translated to "capital AND of AND Hungary". + * + * @param string $operator Defaults to OR. + * + * @return $this + */ + public function defaultOperator($operator = 'OR') + { + return $this->field('default_operator', $operator); + } + + /** + * Dis Max Query. + * + * A query that generates the union of documents produced by its subqueries, + * and that scores each document with the maximum score for that document as + * produced by any subquery, plus a tie breaking increment for any additional + * matching subqueries. + * + * @return $this + */ + public function disMax() + { + return $this->fieldOpen('dis_max'); + } + + /** + * Close a 'dis_max' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function disMaxClose() + { + return $this->fieldClose(); + } + + /** + * Enable position increments in result queries. + * + * @param bool $bool Defaults to true. + * + * @return $this + */ + public function enablePositionIncrements($bool = true) + { + return $this->field('enable_position_increments', (bool) $bool); + } + + /** + * Enables explanation for each hit on how its score was computed. + * + * @param bool $value Turn on / off explain. + * + * @return $this + */ + public function explain($value = true) + { + return $this->field('explain', $value); + } + + /** + * Open 'facets' block. + * + * Facets provide aggregated data based on a search query. + * + * In the simple case, a facet can return facet counts for various facet + * values for a specific field. + * + * Elasticsearch supports more advanced facet implementations, such as + * statistical or date histogram facets. + * + * @return $this + */ + public function facets() + { + return $this->fieldOpen('facets'); + } + + /** + * Close a facets block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function facetsClose() + { + return $this->close(); + } + + /** + * Add a specific field / value entry. + * + * @param string $name Field to add. + * @param mixed $value Value to set. + * + * @return $this + */ + public function field($name, $value) + { + if (is_bool($value)) { + $value = '"'.var_export($value, true).'"'; + } elseif (is_array($value)) { + $value = '["'.implode('","', $value).'"]'; + } else { + $value = '"'.$value.'"'; + } + + $this->_string .= '"'.$name.'":'.$value.','; + + return $this; + } + + /** + * Close a field block. + * + * Alias of close() for ease of reading in source. + * Passed parameters will be ignored, however they can be useful in source for + * seeing which field is being closed. + * + * Builder::factory() + * ->query() + * ->range() + * ->fieldOpen('created') + * ->gte('2011-07-18 00:00:00') + * ->lt('2011-07-19 00:00:00') + * ->fieldClose('created') + * ->rangeClose() + * ->queryClose(); + * + * @return $this + */ + public function fieldClose() + { + return $this->close(); + } + + /** + * Open a node for the specified name. + * + * @param string $name Field name. + * + * @return $this + */ + public function fieldOpen($name) + { + $this->_string .= '"'.$name.'":'; + $this->open(); + + return $this; + } + + /** + * Explicitly define fields to return. + * + * @param array $fields Array of fields to return. + * + * @return $this + */ + public function fields(array $fields) + { + $this->_string .= '"fields":['; + + foreach ($fields as $field) { + $this->_string .= '"'.$field.'",'; + } + + $this->_string = rtrim($this->_string, ',').'],'; + + return $this; + } + + /** + * Open a 'filter' block. + * + * @return $this + */ + public function filter() + { + return $this->fieldOpen('filter'); + } + + /** + * Close a filter block. + * + * @return $this + */ + public function filterClose() + { + return $this->close(); + } + + /** + * Query. + * + * @return $this + */ + public function filteredQuery() + { + return $this->fieldOpen('filtered'); + } + + /** + * Close a 'filtered_query' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function filteredQueryClose() + { + return $this->fieldClose(); + } + + /** + * Set the from parameter (offset). + * + * @param int $value Result number to start from. + * + * @return $this + */ + public function from($value = 0) + { + return $this->field('from', $value); + } + + /** + * Set the minimum similarity for fuzzy queries. + * + * @param float $value Defaults to 0.5. + * + * @return $this + */ + public function fuzzyMinSim($value = 0.5) + { + return $this->field('fuzzy_min_sim', (float) $value); + } + + /** + * Set the prefix length for fuzzy queries. + * + * @param int $value Defaults to 0. + * + * @return $this + */ + public function fuzzyPrefixLength($value = 0) + { + return $this->field('fuzzy_prefix_length', (int) $value); + } + + /** + * Add a greater than (gt) clause. + * + * Used in range blocks. + * + * @param mixed $value Value to be gt. + * + * @return $this + */ + public function gt($value) + { + return $this->field('gt', $value); + } + + /** + * Add a greater than or equal to (gte) clause. + * + * Used in range blocks. + * + * @param mixed $value Value to be gte to. + * + * @return $this + */ + public function gte($value) + { + return $this->field('gte', $value); + } + + /** + * Automatically lower-case terms of wildcard, prefix, fuzzy, and range queries. + * + * @param bool $bool Defaults to true. + * + * @return $this + */ + public function lowercaseExpandedTerms($bool = true) + { + return $this->field('lowercase_expanded_terms', (bool) $bool); + } + + /** + * Add a less than (lt) clause. + * + * Used in range blocks. + * + * @param mixed $value Value to be lt. + * + * @return $this + */ + public function lt($value) + { + return $this->field('lt', $value); + } + + /** + * Add a less than or equal to (lte) clause. + * + * Used in range blocks. + * + * @param mixed $value Value to be lte to. + * + * @return $this + */ + public function lte($value) + { + return $this->field('lte', $value); + } + + /** + * Match All Query. + * + * A query that matches all documents. + * + * Maps to Lucene MatchAllDocsQuery. + * + * @param float $boost Boost to use. + * + * @return $this + */ + public function matchAll($boost = null) + { + $this->fieldOpen('match_all'); + + if (!$boost == null && is_numeric($boost)) { + $this->field('boost', (float) $boost); + } + + return $this->close(); + } + + /** + * The minimum number of should clauses to match. + * + * @param int $minimum Minimum number that should match. + * + * @return $this + */ + public function minimumNumberShouldMatch($minimum) + { + return $this->field('minimum_number_should_match', (int) $minimum); + } + + /** + * The clause (query) must appear in matching documents. + * + * @return $this + */ + public function must() + { + return $this->fieldOpen('must'); + } + + /** + * Close a 'must' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function mustClose() + { + return $this->fieldClose(); + } + + /** + * The clause (query) must not appear in the matching documents. + * + * Note that it is not possible to search on documents that only consists of + * a must_not clauses. + * + * @return $this + */ + public function mustNot() + { + return $this->fieldOpen('must_not'); + } + + /** + * Close a 'must_not' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function mustNotClose() + { + return $this->fieldClose(); + } + + /** + * Add an opening brace. + * + * @return $this + */ + public function open() + { + $this->_string .= '{'; + + return $this; + } + + /** + * Sets the default slop for phrases. + * + * If zero, then exact phrase matches are required. + * + * @param int $value Defaults to 0. + * + * @return $this + */ + public function phraseSlop($value = 0) + { + return $this->field('phrase_slop', (int) $value); + } + + /** + * Query. + * + * @return $this + */ + public function prefix() + { + return $this->fieldOpen('prefix'); + } + + /** + * Close a 'prefix' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function prefixClose() + { + return $this->fieldClose(); + } + + /** + * Queries to run within a dis_max query. + * + * @param array $queries Array of queries. + * + * @return $this + */ + public function queries(array $queries) + { + $this->_string .= '"queries":['; + + foreach ($queries as $query) { + $this->_string .= $query.','; + } + + $this->_string = rtrim($this->_string, ' ,').'],'; + + return $this; + } + + /** + * Open a query block. + * + * @return $this + */ + public function query() + { + return $this->fieldOpen('query'); + } + + /** + * Close a query block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function queryClose() + { + return $this->close(); + } + + /** + * Query String Query. + * + * A query that uses a query parser in order to parse its content + * + * @return $this + */ + public function queryString() + { + return $this->fieldOpen('query_string'); + } + + /** + * Close a 'query_string' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function queryStringClose() + { + return $this->fieldClose(); + } + + /** + * Open a range block. + * + * @return $this + */ + public function range() + { + return $this->fieldOpen('range'); + } + + /** + * Close a range block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function rangeClose() + { + return $this->close(); + } + + /** + * The clause (query) should appear in the matching document. + * + * A boolean query with no must clauses, one or more should clauses must + * match a document. + * + * @return $this + */ + public function should() + { + return $this->fieldOpen('should'); + } + + /** + * Close a 'should' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function shouldClose() + { + return $this->fieldClose(); + } + + /** + * Set the size parameter (number of records to return). + * + * @param int $value Number of records to return. + * + * @return $this + */ + public function size($value = 10) + { + return $this->field('size', $value); + } + + /** + * Allows to add one or more sort on specific fields. + * + * @return $this + */ + public function sort() + { + return $this->fieldOpen('sort'); + } + + /** + * Close a sort block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function sortClose() + { + return $this->close(); + } + + /** + * Add a field to sort on. + * + * @param string $name Field to sort. + * @param bool $reverse Reverse direction. + * + * @return $this + */ + public function sortField($name, $reverse = false) + { + return $this + ->fieldOpen('sort') + ->fieldOpen($name) + ->field('reverse', $reverse) + ->close() + ->close(); + } + + /** + * Sort on multiple fields. + * + * @param array $fields Associative array where the keys are field names to sort on, and the + * values are the sort order: "asc" or "desc" + * + * @return $this + */ + public function sortFields(array $fields) + { + $this->_string .= '"sort":['; + + foreach ($fields as $fieldName => $order) { + $this->_string .= '{"'.$fieldName.'":"'.$order.'"},'; + } + + $this->_string = rtrim($this->_string, ',').'],'; + + return $this; + } + + /** + * Term Query. + * + * Matches documents that have fields that contain a term (not analyzed). + * + * The term query maps to Lucene TermQuery. + * + * @return $this + */ + public function term() + { + return $this->fieldOpen('term'); + } + + /** + * Close a 'term' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function termClose() + { + return $this->fieldClose(); + } + + /** + * Open a 'text_phrase' block. + * + * @return $this + */ + public function textPhrase() + { + return $this->fieldOpen('text_phrase'); + } + + /** + * Close a 'text_phrase' block. + * + * @return $this + */ + public function textPhraseClose() + { + return $this->close(); + } + + /** + * When using dis_max, the disjunction max tie breaker. + * + * @param float $multiplier Multiplier to use. + * + * @return $this + */ + public function tieBreakerMultiplier($multiplier) + { + return $this->field('tie_breaker_multiplier', (float) $multiplier); + } + + /** + * Query. + * + * @return $this + */ + public function wildcard() + { + return $this->fieldOpen('wildcard'); + } + + /** + * Close a 'wildcard' block. + * + * Alias of close() for ease of reading in source. + * + * @return $this + */ + public function wildcardClose() + { + return $this->fieldClose(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Common.php b/vendor/ruflin/elastica/lib/Elastica/Query/Common.php new file mode 100644 index 00000000..9ca58d2e --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Common.php @@ -0,0 +1,172 @@ +setField($field); + $this->setQuery($query); + $this->setCutoffFrequency($cutoffFrequency); + } + + /** + * Set the field on which to query. + * + * @param string $field the field on which to query + * + * @return $this + */ + public function setField($field) + { + $this->_field = $field; + + return $this; + } + + /** + * Set the query string for this query. + * + * @param string $query + * + * @return $this + */ + public function setQuery($query) + { + return $this->setQueryParam('query', $query); + } + + /** + * Set the frequency below which terms will be put in the low frequency group. + * + * @param float $frequency percentage in decimal form (.001 == 0.1%) + * + * @return $this + */ + public function setCutoffFrequency($frequency) + { + return $this->setQueryParam('cutoff_frequency', (float) $frequency); + } + + /** + * Set the logic operator for low frequency terms. + * + * @param string $operator see OPERATOR_* class constants for options + * + * @return $this + */ + public function setLowFrequencyOperator($operator) + { + return $this->setQueryParam('low_freq_operator', $operator); + } + + /** + * Set the logic operator for high frequency terms. + * + * @param string $operator see OPERATOR_* class constants for options + * + * @return $this + */ + public function setHighFrequencyOperator($operator) + { + return $this->setQueryParam('high_frequency_operator', $operator); + } + + /** + * Set the minimum_should_match parameter. + * + * @param int|string $minimum minimum number of low frequency terms which must be present + * + * @return $this + * + * @link Possible values for minimum_should_match http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html + */ + public function setMinimumShouldMatch($minimum) + { + return $this->setQueryParam('minimum_should_match', $minimum); + } + + /** + * Set the boost for this query. + * + * @param float $boost + * + * @return $this + */ + public function setBoost($boost) + { + return $this->setQueryParam('boost', (float) $boost); + } + + /** + * Set the analyzer for this query. + * + * @param string $analyzer + * + * @return $this + */ + public function setAnalyzer($analyzer) + { + return $this->setQueryParam('analyzer', $analyzer); + } + + /** + * Enable / disable computation of score factor based on the fraction of all query terms contained in the document. + * + * @param bool $disable disable_coord is false by default + * + * @return $this + */ + public function setDisableCoord($disable = true) + { + return $this->setQueryParam('disable_coord', (bool) $disable); + } + + /** + * Set a parameter in the body of this query. + * + * @param string $key parameter key + * @param mixed $value parameter value + * + * @return $this + */ + public function setQueryParam($key, $value) + { + $this->_queryParams[$key] = $value; + + return $this; + } + + /** + * @return array + */ + public function toArray() + { + $this->setParam($this->_field, $this->_queryParams); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/ConstantScore.php b/vendor/ruflin/elastica/lib/Elastica/Query/ConstantScore.php new file mode 100644 index 00000000..3578606d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/ConstantScore.php @@ -0,0 +1,70 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-constant-score-query.html + */ +class ConstantScore extends AbstractQuery +{ + /** + * Construct constant score query. + * + * @param null|\Elastica\Filter\AbstractFilter|array $filter + */ + public function __construct($filter = null) + { + if (!is_null($filter)) { + $this->setFilter($filter); + } + } + + /** + * Set filter. + * + * @param array|\Elastica\Filter\AbstractFilter $filter + * + * @return $this + */ + public function setFilter($filter) + { + if ($filter instanceof AbstractFilter) { + $filter = $filter->toArray(); + } + + return $this->setParam('filter', $filter); + } + + /** + * Set query. + * + * @param array|\Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery($query) + { + if ($query instanceof AbstractQuery) { + $query = $query->toArray(); + } + + return $this->setParam('query', $query); + } + + /** + * Set boost. + * + * @param float $boost + * + * @return $this + */ + public function setBoost($boost) + { + return $this->setParam('boost', $boost); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/DisMax.php b/vendor/ruflin/elastica/lib/Elastica/Query/DisMax.php new file mode 100644 index 00000000..b3c5f252 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/DisMax.php @@ -0,0 +1,62 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html + */ +class DisMax extends AbstractQuery +{ + /** + * Adds a query to the current object. + * + * @param \Elastica\Query\AbstractQuery|array $args Query + * + * @throws \Elastica\Exception\InvalidException If not valid query + * + * @return $this + */ + public function addQuery($args) + { + if ($args instanceof AbstractQuery) { + $args = $args->toArray(); + } + + if (!is_array($args)) { + throw new InvalidException('Invalid parameter. Has to be array or instance of Elastica\Query\AbstractQuery'); + } + + return $this->addParam('queries', $args); + } + + /** + * Set boost. + * + * @param float $boost + * + * @return $this + */ + public function setBoost($boost) + { + return $this->setParam('boost', $boost); + } + + /** + * Sets tie breaker to multiplier value to balance the scores between lower and higher scoring fields. + * + * If not set, defaults to 0.0 + * + * @param float $tieBreaker + * + * @return $this + */ + public function setTieBreaker($tieBreaker = 0.0) + { + return $this->setParam('tie_breaker', $tieBreaker); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Filtered.php b/vendor/ruflin/elastica/lib/Elastica/Query/Filtered.php new file mode 100644 index 00000000..ac085037 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Filtered.php @@ -0,0 +1,97 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html + */ +class Filtered extends AbstractQuery +{ + /** + * Constructs a filtered query. + * + * @param \Elastica\Query\AbstractQuery $query OPTIONAL Query object + * @param \Elastica\Filter\AbstractFilter $filter OPTIONAL Filter object + */ + public function __construct(AbstractQuery $query = null, AbstractFilter $filter = null) + { + $this->setQuery($query); + $this->setFilter($filter); + } + + /** + * Sets a query. + * + * @param \Elastica\Query\AbstractQuery $query Query object + * + * @return $this + */ + public function setQuery(AbstractQuery $query = null) + { + return $this->setParam('query', $query); + } + + /** + * Sets the filter. + * + * @param \Elastica\Filter\AbstractFilter $filter Filter object + * + * @return $this + */ + public function setFilter(AbstractFilter $filter = null) + { + return $this->setParam('filter', $filter); + } + + /** + * Gets the filter. + * + * @return \Elastica\Filter\AbstractFilter + */ + public function getFilter() + { + return $this->getParam('filter'); + } + + /** + * Gets the query. + * + * @return \Elastica\Query\AbstractQuery + */ + public function getQuery() + { + return $this->getParam('query'); + } + + /** + * Converts query to array. + * + * @return array Query array + * + * @see \Elastica\Query\AbstractQuery::toArray() + */ + public function toArray() + { + $filtered = array(); + + if ($this->hasParam('query') && $this->getParam('query') instanceof AbstractQuery) { + $filtered['query'] = $this->getParam('query')->toArray(); + } + + if ($this->hasParam('filter') && $this->getParam('filter') instanceof AbstractFilter) { + $filtered['filter'] = $this->getParam('filter')->toArray(); + } + + if (empty($filtered)) { + throw new InvalidException('A query and/or filter is required'); + } + + return array('filtered' => $filtered); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/FunctionScore.php b/vendor/ruflin/elastica/lib/Elastica/Query/FunctionScore.php new file mode 100644 index 00000000..b11454fb --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/FunctionScore.php @@ -0,0 +1,260 @@ +setParam('query', $query->toArray()); + } + + /** + * @param AbstractFilter $filter + * + * @return $this + */ + public function setFilter(AbstractFilter $filter) + { + return $this->setParam('filter', $filter->toArray()); + } + + /** + * Add a function to the function_score query. + * + * @param string $functionType valid values are DECAY_* constants and script_score + * @param array|float $functionParams the body of the function. See documentation for proper syntax. + * @param AbstractFilter $filter optional filter to apply to the function + * @param float $weight function weight + * + * @return $this + */ + public function addFunction($functionType, $functionParams, AbstractFilter $filter = null, $weight = null) + { + $function = array( + $functionType => $functionParams, + ); + if (!is_null($filter)) { + $function['filter'] = $filter->toArray(); + } + if ($weight !== null) { + $function['weight'] = $weight; + } + + $this->_functions[] = $function; + + return $this; + } + + /** + * Add a script_score function to the query. + * + * @param Script $script a Script object + * @param AbstractFilter $filter an optional filter to apply to the function + * @param float $weight the weight of the function + * + * @return $this + */ + public function addScriptScoreFunction(Script $script, AbstractFilter $filter = null, $weight = null) + { + return $this->addFunction('script_score', $script->toArray(), $filter, $weight); + } + + /** + * Add a decay function to the query. + * + * @param string $function see DECAY_* constants for valid options + * @param string $field the document field on which to perform the decay function + * @param string $origin the origin value for this decay function + * @param string $scale a scale to define the rate of decay for this function + * @param string $offset If defined, this function will only be computed for documents with a distance from the origin greater than this value + * @param float $decay optionally defines how documents are scored at the distance given by the $scale parameter + * @param float $scaleWeight optional factor by which to multiply the score at the value provided by the $scale parameter + * @param float $weight optional factor by which to multiply the score at the value provided by the $scale parameter + * @param AbstractFilter $filter a filter associated with this function + * + * @return $this + */ + public function addDecayFunction( + $function, + $field, + $origin, + $scale, + $offset = null, + $decay = null, + $weight = null, + AbstractFilter $filter = null + ) { + $functionParams = array( + $field => array( + 'origin' => $origin, + 'scale' => $scale, + ), + ); + if (!is_null($offset)) { + $functionParams[$field]['offset'] = $offset; + } + if (!is_null($decay)) { + $functionParams[$field]['decay'] = (float) $decay; + } + + return $this->addFunction($function, $functionParams, $filter, $weight); + } + + /** + * Add a boost_factor function to the query. + * + * @param float $boostFactor the boost factor value + * @param AbstractFilter $filter a filter associated with this function + * + * @deprecated + */ + public function addBoostFactorFunction($boostFactor, AbstractFilter $filter = null) + { + $this->addWeightFunction($boostFactor, $filter); + } + + /** + * @param float $weight the weight of the function + * @param AbstractFilter $filter a filter associated with this function + */ + public function addWeightFunction($weight, AbstractFilter $filter = null) + { + $this->addFunction('weight', $weight, $filter); + } + + /** + * Add a random_score function to the query. + * + * @param number $seed the seed value + * @param AbstractFilter $filter a filter associated with this function + * @param float $weight an optional boost value associated with this function + */ + public function addRandomScoreFunction($seed, AbstractFilter $filter = null, $weight = null) + { + $this->addFunction('random_score', array('seed' => $seed), $filter, $weight); + } + + /** + * Set an overall boost value for this query. + * + * @param float $boost + * + * @return $this + */ + public function setBoost($boost) + { + return $this->setParam('boost', (float) $boost); + } + + /** + * Restrict the combined boost of the function_score query and its child query. + * + * @param float $maxBoost + * + * @return $this + */ + public function setMaxBoost($maxBoost) + { + return $this->setParam('max_boost', (float) $maxBoost); + } + + /** + * The boost mode determines how the score of this query is combined with that of the child query. + * + * @param string $mode see BOOST_MODE_* constants for valid options. Default is multiply. + * + * @return $this + */ + public function setBoostMode($mode) + { + return $this->setParam('boost_mode', $mode); + } + + /** + * If set, this query will return results in random order. + * + * @param int $seed Set a seed value to return results in the same random order for consistent pagination. + * + * @return $this + */ + public function setRandomScore($seed = null) + { + $seedParam = new \stdClass(); + if (!is_null($seed)) { + $seedParam->seed = $seed; + } + + return $this->setParam('random_score', $seedParam); + } + + /** + * Set the score method. + * + * @param string $mode see SCORE_MODE_* constants for valid options. Default is multiply. + * + * @return $this + */ + public function setScoreMode($mode) + { + return $this->setParam('score_mode', $mode); + } + + /** + * Set min_score option. + * + * @param float $minScore + * + * @return $this + */ + public function setMinScore($minScore) + { + return $this->setParam('min_score', (float) $minScore); + } + + /** + * @return array + */ + public function toArray() + { + if (sizeof($this->_functions)) { + $this->setParam('functions', $this->_functions); + } + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Fuzzy.php b/vendor/ruflin/elastica/lib/Elastica/Query/Fuzzy.php new file mode 100644 index 00000000..a3a46693 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Fuzzy.php @@ -0,0 +1,87 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html + */ +class Fuzzy extends AbstractQuery +{ + /** + * Construct a fuzzy query. + * + * @param string $fieldName Field name + * @param string $value String to search for + */ + public function __construct($fieldName = null, $value = null) + { + if ($fieldName and $value) { + $this->setField($fieldName, $value); + } + } + + /** + * Set field for fuzzy query. + * + * @param string $fieldName Field name + * @param string $value String to search for + * + * @return $this + */ + public function setField($fieldName, $value) + { + if (!is_string($value) or !is_string($fieldName)) { + throw new InvalidException('The field and value arguments must be of type string.'); + } + if (count($this->getParams()) > 0 and array_shift(array_keys($this->getParams())) != $fieldName) { + throw new InvalidException('Fuzzy query can only support a single field.'); + } + + return $this->setParam($fieldName, array('value' => $value)); + } + + /** + * Set optional parameters on the existing query. + * + * @param string $param option name + * @param mixed $value Value of the parameter + * + * @return $this + */ + public function setFieldOption($param, $value) + { + //Retrieve the single existing field for alteration. + $params = $this->getParams(); + if (count($params) < 1) { + throw new InvalidException('No field has been set'); + } + $keyArray = array_keys($params); + $params[$keyArray[0]][$param] = $value; + + return $this->setParam($keyArray[0], $params[$keyArray[0]]); + } + + /** + * Deprecated method of setting a field. + * + * @deprecated + */ + public function addField($fieldName, $args) + { + if (!array_key_exists('value', $args)) { + throw new InvalidException('Fuzzy query can only support a single field.'); + } + $this->setField($fieldName, $args['value']); + unset($args['value']); + foreach ($args as $param => $value) { + $this->setFieldOption($param, $value); + } + + return $this; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/FuzzyLikeThis.php b/vendor/ruflin/elastica/lib/Elastica/Query/FuzzyLikeThis.php new file mode 100644 index 00000000..2de480a8 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/FuzzyLikeThis.php @@ -0,0 +1,217 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-flt-query.html + */ +class FuzzyLikeThis extends AbstractQuery +{ + /** + * Field names. + * + * @var array Field names + */ + protected $_fields = array(); + + /** + * Like text. + * + * @var string Like text + */ + protected $_likeText = ''; + + /** + * Ignore term frequency. + * + * @var bool ignore term frequency + */ + protected $_ignoreTF = false; + + /** + * Max query terms value. + * + * @var int Max query terms value + */ + protected $_maxQueryTerms = 25; + + /** + * minimum similarity. + * + * @var int minimum similarity + */ + protected $_minSimilarity = 0.5; + + /** + * Prefix Length. + * + * @var int Prefix Length + */ + protected $_prefixLength = 0; + + /** + * Boost. + * + * @var float Boost + */ + protected $_boost = 1.0; + + /** + * Analyzer. + * + * @var sting Analyzer + */ + protected $_analyzer; + + /** + * Adds field to flt query. + * + * @param array $fields Field names + * + * @return $this + */ + public function addFields(array $fields) + { + $this->_fields = $fields; + + return $this; + } + + /** + * Set the "like_text" value. + * + * @param string $text + * + * @return $this + */ + public function setLikeText($text) + { + $text = trim($text); + $this->_likeText = $text; + + return $this; + } + + /** + * Set the "ignore_tf" value (ignore term frequency). + * + * @param bool $ignoreTF + * + * @return $this + */ + public function setIgnoreTF($ignoreTF) + { + $this->_ignoreTF = (bool) $ignoreTF; + + return $this; + } + + /** + * Set the minimum similarity. + * + * @param int $value + * + * @return $this + */ + public function setMinSimilarity($value) + { + $value = (float) $value; + $this->_minSimilarity = $value; + + return $this; + } + + /** + * Set boost. + * + * @param float $value Boost value + * + * @return $this + */ + public function setBoost($value) + { + $this->_boost = (float) $value; + + return $this; + } + + /** + * Set Prefix Length. + * + * @param int $value Prefix length + * + * @return $this + */ + public function setPrefixLength($value) + { + $this->_prefixLength = (int) $value; + + return $this; + } + + /** + * Set max_query_terms. + * + * @param int $value Max query terms value + * + * @return $this + */ + public function setMaxQueryTerms($value) + { + $this->_maxQueryTerms = (int) $value; + + return $this; + } + + /** + * Set analyzer. + * + * @param string $text Analyzer text + * + * @return $this + */ + public function setAnalyzer($text) + { + $text = trim($text); + $this->_analyzer = $text; + + return $this; + } + + /** + * Converts fuzzy like this query to array. + * + * @return array Query array + * + * @see \Elastica\Query\AbstractQuery::toArray() + */ + public function toArray() + { + if (!empty($this->_fields)) { + $args['fields'] = $this->_fields; + } + + if (!empty($this->_boost)) { + $args['boost'] = $this->_boost; + } + + if (!empty($this->_analyzer)) { + $args['analyzer'] = $this->_analyzer; + } + + $args['min_similarity'] = ($this->_minSimilarity > 0) ? $this->_minSimilarity : 0; + + $args['like_text'] = $this->_likeText; + $args['prefix_length'] = $this->_prefixLength; + $args['ignore_tf'] = $this->_ignoreTF; + $args['max_query_terms'] = $this->_maxQueryTerms; + + $data = parent::toArray(); + $args = array_merge($args, $data['fuzzy_like_this']); + + return array('fuzzy_like_this' => $args); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/HasChild.php b/vendor/ruflin/elastica/lib/Elastica/Query/HasChild.php new file mode 100644 index 00000000..190fa592 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/HasChild.php @@ -0,0 +1,65 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-has-child-query.html + */ +class HasChild extends AbstractQuery +{ + /** + * Construct HasChild Query. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * @param string $type Parent document type + */ + public function __construct($query, $type = null) + { + $this->setType($type); + $this->setQuery($query); + } + + /** + * Sets query object. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery($query) + { + $query = BaseQuery::create($query); + $data = $query->toArray(); + + return $this->setParam('query', $data['query']); + } + + /** + * Set type of the parent document. + * + * @param string $type Parent document type + * + * @return $this + */ + public function setType($type) + { + return $this->setParam('type', $type); + } + + /** + * Sets the scope. + * + * @param string $scope Scope + * + * @return $this + */ + public function setScope($scope) + { + return $this->setParam('_scope', $scope); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/HasParent.php b/vendor/ruflin/elastica/lib/Elastica/Query/HasParent.php new file mode 100644 index 00000000..03aae13b --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/HasParent.php @@ -0,0 +1,63 @@ +setQuery($query); + $this->setType($type); + } + + /** + * Sets query object. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery($query) + { + $query = BaseQuery::create($query); + $data = $query->toArray(); + + return $this->setParam('query', $data['query']); + } + + /** + * Set type of the parent document. + * + * @param string $type Parent document type + * + * @return $this + */ + public function setType($type) + { + return $this->setParam('type', $type); + } + + /** + * Sets the scope. + * + * @param string $scope Scope + * + * @return $this + */ + public function setScope($scope) + { + return $this->setParam('_scope', $scope); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Ids.php b/vendor/ruflin/elastica/lib/Elastica/Query/Ids.php new file mode 100644 index 00000000..5d76efcf --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Ids.php @@ -0,0 +1,121 @@ + + * @author Tim Rupp + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html + */ +class Ids extends AbstractQuery +{ + /** + * Params. + * + * @var array Params + */ + protected $_params = array(); + + /** + * Creates filter object. + * + * @param string|\Elastica\Type $type Type to filter on + * @param array $ids List of ids + */ + public function __construct($type = null, array $ids = array()) + { + $this->setType($type); + $this->setIds($ids); + } + + /** + * Adds one more filter to the and filter. + * + * @param string $id Adds id to filter + * + * @return $this + */ + public function addId($id) + { + $this->_params['values'][] = $id; + + return $this; + } + + /** + * Adds one more type to query. + * + * @param string|\Elastica\Type $type Type name or object + * + * @return $this + */ + public function addType($type) + { + if ($type instanceof Type) { + $type = $type->getName(); + } elseif (empty($type) && !is_numeric($type)) { + // A type can be 0, but cannot be empty + return $this; + } + + $this->_params['type'][] = $type; + + return $this; + } + + /** + * Set type. + * + * @param string|\Elastica\Type $type Type name or object + * + * @return $this + */ + public function setType($type) + { + if ($type instanceof Type) { + $type = $type->getName(); + } elseif (empty($type) && !is_numeric($type)) { + // A type can be 0, but cannot be empty + return $this; + } + + $this->_params['type'] = $type; + + return $this; + } + + /** + * Sets the ids to filter. + * + * @param array|string $ids List of ids + * + * @return $this + */ + public function setIds($ids) + { + if (is_array($ids)) { + $this->_params['values'] = $ids; + } else { + $this->_params['values'] = array($ids); + } + + return $this; + } + + /** + * Converts filter to array. + * + * @see \Elastica\Query\AbstractQuery::toArray() + * + * @return array Query array + */ + public function toArray() + { + return array('ids' => $this->_params); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Image.php b/vendor/ruflin/elastica/lib/Elastica/Query/Image.php new file mode 100644 index 00000000..bf7d028b --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Image.php @@ -0,0 +1,187 @@ + + * + * @link https://github.com/kzwang/elasticsearch-image + * + * To use this feature you have to call the following command in the + * elasticsearch directory: + * + * ./bin/plugin --url https://github.com/SibaTokyo/elasticsearch-image/releases/download/1.4.0/elasticsearch-image-1.4.0.zip --install image + * + * This installs the image plugin. More infos + * can be found here: {@link https://github.com/SibaTokyo/elasticsearch-image} + */ +class Image extends AbstractQuery +{ + public function __construct(array $image = array()) + { + $this->setParams($image); + } + + /** + * Sets a param for the given field. + * + * @param string $field + * @param string $key + * @param string $value + * + * @return $this + */ + public function setFieldParam($field, $key, $value) + { + if (!isset($this->_params[$field])) { + $this->_params[$field] = array(); + } + + $this->_params[$field][$key] = $value; + + return $this; + } + + /** + * Set field boost value. + * + * If not set, defaults to 1.0. + * + * @param string $field + * @param float $boost + * + * @return $this + */ + public function setFieldBoost($field, $boost = 1.0) + { + return $this->setFieldParam($field, 'boost', (float) $boost); + } + + /** + * Set field feature value. + * + * If not set, defaults CEDD. + * + * @param string $field + * @param string $feature + * + * @return $this + */ + public function setFieldFeature($field, $feature = 'CEDD') + { + return $this->setFieldParam($field, 'feature', $feature); + } + + /** + * Set field hash value. + * + * If not set, defaults BIT_SAMPLING. + * + * @param string $field + * @param string $hash + * + * @return $this + */ + public function setFieldHash($field, $hash = 'BIT_SAMPLING') + { + return $this->setFieldParam($field, 'hash', $hash); + } + + /** + * Set field image value. + * + * @param string $field + * @param string $path File will be base64_encode + * + * @throws \Exception + * + * @return $this + */ + public function setFieldImage($field, $path) + { + if (!file_exists($path) || !is_readable($path)) { + throw new \Exception(sprintf("File %s can't be open", $path)); + } + + return $this->setFieldParam($field, 'image', base64_encode(file_get_contents($path))); + } + + /** + * Set field index value. + * + * @param string $field + * @param string $index + * + * @return $this + */ + public function setFieldIndex($field, $index) + { + return $this->setFieldParam($field, 'index', $index); + } + + /** + * Set field type value. + * + * @param string $field + * @param string $type + * + * @return $this + */ + public function setFieldType($field, $type) + { + return $this->setFieldParam($field, 'type', $type); + } + + /** + * Set field id value. + * + * @param string $field + * @param string $id + * + * @return $this + */ + public function setFieldId($field, $id) + { + return $this->setFieldParam($field, 'id', $id); + } + + /** + * Set field path value. + * + * @param string $field + * @param string $path + * + * @return $this + */ + public function setFieldPath($field, $path) + { + return $this->setFieldParam($field, 'path', $path); + } + + /** + * Define quickly a reference image already in your elasticsearch database. + * + * If not set, path will be the same as $field. + * + * @param string $field + * @param string $index + * @param string $type + * @param string $id + * @param string $path + * + * @return $this + */ + public function setImageByReference($field, $index, $type, $id, $path = null) + { + if (null === $path) { + $path = $field; + } + + $this->setFieldIndex($field, $index); + $this->setFieldType($field, $type); + $this->setFieldId($field, $id); + + return $this->setFieldPath($field, $path); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Match.php b/vendor/ruflin/elastica/lib/Elastica/Query/Match.php new file mode 100644 index 00000000..abb40970 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Match.php @@ -0,0 +1,222 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html + */ +class Match extends AbstractQuery +{ + const ZERO_TERM_NONE = 'none'; + const ZERO_TERM_ALL = 'all'; + + /** + * @param string $field + * @param mixed $values + */ + public function __construct($field = null, $values = null) + { + if ($field !== null && $values !== null) { + $this->setParam($field, $values); + } + } + + /** + * Sets a param for the message array. + * + * @param string $field + * @param mixed $values + * + * @return $this + */ + public function setField($field, $values) + { + return $this->setParam($field, $values); + } + + /** + * Sets a param for the given field. + * + * @param string $field + * @param string $key + * @param string $value + * + * @return $this + */ + public function setFieldParam($field, $key, $value) + { + if (!isset($this->_params[$field])) { + $this->_params[$field] = array(); + } + + $this->_params[$field][$key] = $value; + + return $this; + } + + /** + * Sets the query string. + * + * @param string $field + * @param string $query + * + * @return $this + */ + public function setFieldQuery($field, $query) + { + return $this->setFieldParam($field, 'query', $query); + } + + /** + * Set field type. + * + * @param string $field + * @param string $type + * + * @return $this + */ + public function setFieldType($field, $type) + { + return $this->setFieldParam($field, 'type', $type); + } + + /** + * Set field operator. + * + * @param string $field + * @param string $operator + * + * @return $this + */ + public function setFieldOperator($field, $operator) + { + return $this->setFieldParam($field, 'operator', $operator); + } + + /** + * Set field analyzer. + * + * @param string $field + * @param string $analyzer + * + * @return $this + */ + public function setFieldAnalyzer($field, $analyzer) + { + return $this->setFieldParam($field, 'analyzer', $analyzer); + } + + /** + * Set field boost value. + * + * If not set, defaults to 1.0. + * + * @param string $field + * @param float $boost + * + * @return $this + */ + public function setFieldBoost($field, $boost = 1.0) + { + return $this->setFieldParam($field, 'boost', (float) $boost); + } + + /** + * Set field minimum should match. + * + * @param string $field + * @param int|string $minimumShouldMatch + * + * @return $this + * + * @link Possible values for minimum_should_match http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html + */ + public function setFieldMinimumShouldMatch($field, $minimumShouldMatch) + { + return $this->setFieldParam($field, 'minimum_should_match', $minimumShouldMatch); + } + + /** + * Set field fuzziness. + * + * @param string $field + * @param mixed $fuzziness + * + * @return $this + */ + public function setFieldFuzziness($field, $fuzziness) + { + return $this->setFieldParam($field, 'fuzziness', $fuzziness); + } + + /** + * Set field fuzzy rewrite. + * + * @param string $field + * @param string $fuzzyRewrite + * + * @return $this + */ + public function setFieldFuzzyRewrite($field, $fuzzyRewrite) + { + return $this->setFieldParam($field, 'fuzzy_rewrite', $fuzzyRewrite); + } + + /** + * Set field prefix length. + * + * @param string $field + * @param int $prefixLength + * + * @return $this + */ + public function setFieldPrefixLength($field, $prefixLength) + { + return $this->setFieldParam($field, 'prefix_length', (int) $prefixLength); + } + + /** + * Set field max expansions. + * + * @param string $field + * @param int $maxExpansions + * + * @return $this + */ + public function setFieldMaxExpansions($field, $maxExpansions) + { + return $this->setFieldParam($field, 'max_expansions', (int) $maxExpansions); + } + + /** + * Set zero terms query. + * + * If not set, default to 'none' + * + * @param string $field + * @param string $zeroTermQuery + * + * @return $this + */ + public function setFieldZeroTermsQuery($field, $zeroTermQuery = 'none') + { + return $this->setFieldParam($field, 'zero_terms_query', $zeroTermQuery); + } + + /** + * Set cutoff frequency. + * + * @param string $field + * @param float $cutoffFrequency + * + * @return $this + */ + public function setFieldCutoffFrequency($field, $cutoffFrequency) + { + return $this->setFieldParam($field, 'cutoff_frequency', $cutoffFrequency); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/MatchAll.php b/vendor/ruflin/elastica/lib/Elastica/Query/MatchAll.php new file mode 100644 index 00000000..d01aaee8 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/MatchAll.php @@ -0,0 +1,20 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-all-query.html + */ +class MatchAll extends AbstractQuery +{ + /** + * Creates match all query. + */ + public function __construct() + { + $this->_params = new \stdClass(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrase.php b/vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrase.php new file mode 100644 index 00000000..54302f90 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrase.php @@ -0,0 +1,13 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html#_phrase + */ +class MatchPhrase extends Match +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrasePrefix.php b/vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrasePrefix.php new file mode 100644 index 00000000..61764bda --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/MatchPhrasePrefix.php @@ -0,0 +1,13 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html#_match_phrase_prefix + */ +class MatchPhrasePrefix extends Match +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/MoreLikeThis.php b/vendor/ruflin/elastica/lib/Elastica/Query/MoreLikeThis.php new file mode 100644 index 00000000..cd375db5 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/MoreLikeThis.php @@ -0,0 +1,198 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html + */ +class MoreLikeThis extends AbstractQuery +{ + /** + * Set fields to which to restrict the mlt query. + * + * @param array $fields Field names + * + * @return \Elastica\Query\MoreLikeThis Current object + */ + public function setFields(array $fields) + { + return $this->setParam('fields', $fields); + } + + /** + * Set document ids for the mlt query. + * + * @param array $ids Document ids + * + * @return \Elastica\Query\MoreLikeThis Current object + */ + public function setIds(array $ids) + { + return $this->setParam('ids', $ids); + } + + /** + * Set the "like_text" value. + * + * @param string $likeText + * + * @return $this + */ + public function setLikeText($likeText) + { + $likeText = trim($likeText); + + return $this->setParam('like_text', $likeText); + } + + /** + * Set boost. + * + * @param float $boost Boost value + * + * @return $this + */ + public function setBoost($boost) + { + return $this->setParam('boost', (float) $boost); + } + + /** + * Set max_query_terms. + * + * @param int $maxQueryTerms Max query terms value + * + * @return $this + */ + public function setMaxQueryTerms($maxQueryTerms) + { + return $this->setParam('max_query_terms', (int) $maxQueryTerms); + } + + /** + * Set percent terms to match. + * + * @param float $percentTermsToMatch Percentage + * + * @return $this + * + * @deprecated Option "percent_terms_to_match" deprecated as of ES 1.5. Use "minimum_should_match" instead. + */ + public function setPercentTermsToMatch($percentTermsToMatch) + { + return $this->setParam('percent_terms_to_match', (float) $percentTermsToMatch); + } + + /** + * Set min term frequency. + * + * @param int $minTermFreq + * + * @return $this + */ + public function setMinTermFrequency($minTermFreq) + { + return $this->setParam('min_term_freq', (int) $minTermFreq); + } + + /** + * set min document frequency. + * + * @param int $minDocFreq + * + * @return $this + */ + public function setMinDocFrequency($minDocFreq) + { + return $this->setParam('min_doc_freq', (int) $minDocFreq); + } + + /** + * set max document frequency. + * + * @param int $maxDocFreq + * + * @return $this + */ + public function setMaxDocFrequency($maxDocFreq) + { + return $this->setParam('max_doc_freq', (int) $maxDocFreq); + } + + /** + * Set min word length. + * + * @param int $minWordLength + * + * @return $this + */ + public function setMinWordLength($minWordLength) + { + return $this->setParam('min_word_length', (int) $minWordLength); + } + + /** + * Set max word length. + * + * @param int $maxWordLength + * + * @return $this + */ + public function setMaxWordLength($maxWordLength) + { + return $this->setParam('max_word_length', (int) $maxWordLength); + } + + /** + * Set boost terms. + * + * @param bool $boostTerms + * + * @return $this + */ + public function setBoostTerms($boostTerms) + { + return $this->setParam('boost_terms', (bool) $boostTerms); + } + + /** + * Set analyzer. + * + * @param string $analyzer + * + * @return $this + */ + public function setAnalyzer($analyzer) + { + $analyzer = trim($analyzer); + + return $this->setParam('analyzer', $analyzer); + } + + /** + * Set stop words. + * + * @param array $stopWords + * + * @return $this + */ + public function setStopWords(array $stopWords) + { + return $this->setParam('stop_words', $stopWords); + } + + /** + * Set minimum_should_match option. + * + * @param int|string $minimumShouldMatch + * + * @return $this + */ + public function setMinimumShouldMatch($minimumShouldMatch) + { + return $this->setParam('minimum_should_match', $minimumShouldMatch); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/MultiMatch.php b/vendor/ruflin/elastica/lib/Elastica/Query/MultiMatch.php new file mode 100644 index 00000000..0771f370 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/MultiMatch.php @@ -0,0 +1,191 @@ + + * @author Wong Wing Lun + * @author Tristan Maindron + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html + */ +class MultiMatch extends AbstractQuery +{ + const TYPE_BEST_FIELDS = 'best_fields'; + const TYPE_MOST_FIELDS = 'most_fields'; + const TYPE_CROSS_FIELDS = 'cross_fields'; + const TYPE_PHRASE = 'phrase'; + const TYPE_PHRASE_PREFIX = 'phrase_prefix'; + + const OPERATOR_OR = 'or'; + const OPERATOR_AND = 'and'; + + const ZERO_TERM_NONE = 'none'; + const ZERO_TERM_ALL = 'all'; + + /** + * Sets the query. + * + * @param string $query Query + * + * @return $this + */ + public function setQuery($query = '') + { + return $this->setParam('query', $query); + } + + /** + * Sets Fields to be used in the query. + * + * @param array $fields Fields + * + * @return $this + */ + public function setFields($fields = array()) + { + return $this->setParam('fields', $fields); + } + + /** + * Sets use dis max indicating to either create a dis_max query or a bool query. + * + * If not set, defaults to true. + * + * @param bool $useDisMax + * + * @return $this + */ + public function setUseDisMax($useDisMax = true) + { + return $this->setParam('use_dis_max', $useDisMax); + } + + /** + * Sets tie breaker to multiplier value to balance the scores between lower and higher scoring fields. + * + * If not set, defaults to 0.0. + * + * @param float $tieBreaker + * + * @return $this + */ + public function setTieBreaker($tieBreaker = 0.0) + { + return $this->setParam('tie_breaker', $tieBreaker); + } + + /** + * Sets operator for Match Query. + * + * If not set, defaults to 'or' + * + * @param string $operator + * + * @return $this + */ + public function setOperator($operator = 'or') + { + return $this->setParam('operator', $operator); + } + + /** + * Set field minimum should match for Match Query. + * + * @param mixed $minimumShouldMatch + * + * @return $this + */ + public function setMinimumShouldMatch($minimumShouldMatch) + { + return $this->setParam('minimum_should_match', $minimumShouldMatch); + } + + /** + * Set zero terms query for Match Query. + * + * If not set, default to 'none' + * + * @param string $zeroTermQuery + * + * @return $this + */ + public function setZeroTermsQuery($zeroTermQuery = 'none') + { + return $this->setParam('zero_terms_query', $zeroTermQuery); + } + + /** + * Set cutoff frequency for Match Query. + * + * @param float $cutoffFrequency + * + * @return $this + */ + public function setCutoffFrequency($cutoffFrequency) + { + return $this->setParam('cutoff_frequency', $cutoffFrequency); + } + + /** + * Set type. + * + * @param string $field + * @param string $type + * + * @return $this + */ + public function setType($type) + { + return $this->setParam('type', $type); + } + + /** + * Set fuzziness. + * + * @param float $fuzziness + * + * @return $this + */ + public function setFuzziness($fuzziness) + { + return $this->setParam('fuzziness', (float) $fuzziness); + } + + /** + * Set prefix length. + * + * @param int $prefixLength + * + * @return $this + */ + public function setPrefixLength($prefixLength) + { + return $this->setParam('prefix_length', (int) $prefixLength); + } + + /** + * Set max expansions. + * + * @param int $maxExpansions + * + * @return $this + */ + public function setMaxExpansions($maxExpansions) + { + return $this->setParam('max_expansions', (int) $maxExpansions); + } + + /** + * Set analyzer. + * + * @param string $analyzer + * + * @return $this + */ + public function setAnalyzer($analyzer) + { + return $this->setParam('analyzer', $analyzer); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Nested.php b/vendor/ruflin/elastica/lib/Elastica/Query/Nested.php new file mode 100644 index 00000000..b072cfc8 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Nested.php @@ -0,0 +1,48 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html + */ +class Nested extends AbstractQuery +{ + /** + * Adds field to mlt query. + * + * @param string $path Nested object path + * + * @return $this + */ + public function setPath($path) + { + return $this->setParam('path', $path); + } + + /** + * Sets nested query. + * + * @param \Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery(AbstractQuery $query) + { + return $this->setParam('query', $query->toArray()); + } + + /** + * Set score method. + * + * @param string $scoreMode Options: avg, total, max and none. + * + * @return $this + */ + public function setScoreMode($scoreMode) + { + return $this->setParam('score_mode', $scoreMode); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Prefix.php b/vendor/ruflin/elastica/lib/Elastica/Query/Prefix.php new file mode 100644 index 00000000..c2b903ea --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Prefix.php @@ -0,0 +1,47 @@ +setRawPrefix($prefix); + } + + /** + * setRawPrefix can be used instead of setPrefix if some more special + * values for a prefix have to be set. + * + * @param array $prefix Prefix array + * + * @return $this + */ + public function setRawPrefix(array $prefix) + { + return $this->setParams($prefix); + } + + /** + * Adds a prefix to the prefix query. + * + * @param string $key Key to query + * @param string|array $value Values(s) for the query. Boost can be set with array + * @param float $boost OPTIONAL Boost value (default = 1.0) + * + * @return $this + */ + public function setPrefix($key, $value, $boost = 1.0) + { + return $this->setRawPrefix(array($key => array('value' => $value, 'boost' => $boost))); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/QueryString.php b/vendor/ruflin/elastica/lib/Elastica/Query/QueryString.php new file mode 100644 index 00000000..89ea77cd --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/QueryString.php @@ -0,0 +1,282 @@ +, Jasper van Wanrooy + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html + */ +class QueryString extends AbstractQuery +{ + /** + * Query string. + * + * @var string Query string + */ + protected $_queryString = ''; + + /** + * Creates query string object. Calls setQuery with argument. + * + * @param string $queryString OPTIONAL Query string for object + */ + public function __construct($queryString = '') + { + $this->setQuery($queryString); + } + + /** + * Sets a new query string for the object. + * + * @param string $query Query string + * + * @throws \Elastica\Exception\InvalidException If given parameter is not a string + * + * @return $this + */ + public function setQuery($query = '') + { + if (!is_string($query)) { + throw new InvalidException('Parameter has to be a string'); + } + + return $this->setParam('query', $query); + } + + /** + * Sets the default field. + * + * If no field is set, _all is chosen + * + * @param string $field Field + * + * @return $this + */ + public function setDefaultField($field) + { + return $this->setParam('default_field', $field); + } + + /** + * Sets the default operator AND or OR. + * + * If no operator is set, OR is chosen + * + * @param string $operator Operator + * + * @return $this + */ + public function setDefaultOperator($operator) + { + return $this->setParam('default_operator', $operator); + } + + /** + * Sets the analyzer to analyze the query with. + * + * @param string $analyzer Analyser to use + * + * @return $this + */ + public function setAnalyzer($analyzer) + { + return $this->setParam('analyzer', $analyzer); + } + + /** + * Sets the parameter to allow * and ? as first characters. + * + * If not set, defaults to true. + * + * @param bool $allow + * + * @return $this + */ + public function setAllowLeadingWildcard($allow = true) + { + return $this->setParam('allow_leading_wildcard', (bool) $allow); + } + + /** + * Sets the parameter to enable the position increments in result queries. + * + * If not set, defaults to true. + * + * @param bool $enabled + * + * @return $this + */ + public function setEnablePositionIncrements($enabled = true) + { + return $this->setParam('enable_position_increments', (bool) $enabled); + } + + /** + * Sets the fuzzy prefix length parameter. + * + * If not set, defaults to 0. + * + * @param int $length + * + * @return $this + */ + public function setFuzzyPrefixLength($length = 0) + { + return $this->setParam('fuzzy_prefix_length', (int) $length); + } + + /** + * Sets the fuzzy minimal similarity parameter. + * + * If not set, defaults to 0.5 + * + * @param float $minSim + * + * @return $this + */ + public function setFuzzyMinSim($minSim = 0.5) + { + return $this->setParam('fuzzy_min_sim', (float) $minSim); + } + + /** + * Sets the phrase slop. + * + * If zero, exact phrases are required. + * If not set, defaults to zero. + * + * @param int $phraseSlop + * + * @return $this + */ + public function setPhraseSlop($phraseSlop = 0) + { + return $this->setParam('phrase_slop', (int) $phraseSlop); + } + + /** + * Sets the boost value of the query. + * + * If not set, defaults to 1.0. + * + * @param float $boost + * + * @return $this + */ + public function setBoost($boost = 1.0) + { + return $this->setParam('boost', (float) $boost); + } + + /** + * Allows analyzing of wildcard terms. + * + * If not set, defaults to true + * + * @param bool $analyze + * + * @return $this + */ + public function setAnalyzeWildcard($analyze = true) + { + return $this->setParam('analyze_wildcard', (bool) $analyze); + } + + /** + * Sets the param to automatically generate phrase queries. + * + * If not set, defaults to true. + * + * @param bool $autoGenerate + * + * @return $this + */ + public function setAutoGeneratePhraseQueries($autoGenerate = true) + { + return $this->setParam('auto_generate_phrase_queries', (bool) $autoGenerate); + } + + /** + * Sets the fields. If no fields are set, _all is chosen. + * + * @param array $fields Fields + * + * @throws \Elastica\Exception\InvalidException If given parameter is not an array + * + * @return $this + */ + public function setFields(array $fields) + { + if (!is_array($fields)) { + throw new InvalidException('Parameter has to be an array'); + } + + return $this->setParam('fields', $fields); + } + + /** + * Whether to use bool or dis_max queries to internally combine results for multi field search. + * + * @param bool $value Determines whether to use + * + * @return $this + */ + public function setUseDisMax($value = true) + { + return $this->setParam('use_dis_max', (bool) $value); + } + + /** + * When using dis_max, the disjunction max tie breaker. + * + * If not set, defaults to 0. + * + * @param int $tieBreaker + * + * @return $this + */ + public function setTieBreaker($tieBreaker = 0) + { + return $this->setParam('tie_breaker', (float) $tieBreaker); + } + + /** + * Set a re-write condition. See https://github.com/elasticsearch/elasticsearch/issues/1186 for additional information. + * + * @param string $rewrite + * + * @return $this + */ + public function setRewrite($rewrite = '') + { + return $this->setParam('rewrite', $rewrite); + } + + /** + * Set timezone option. + * + * @param string $timezone + * + * @return $this + */ + public function setTimezone($timezone) + { + return $this->setParam('time_zone', $timezone); + } + + /** + * Converts query to array. + * + * @see \Elastica\Query\AbstractQuery::toArray() + * + * @return array Query array + */ + public function toArray() + { + return array('query_string' => array_merge(array('query' => $this->_queryString), $this->getParams())); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Range.php b/vendor/ruflin/elastica/lib/Elastica/Query/Range.php new file mode 100644 index 00000000..b2f9175a --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Range.php @@ -0,0 +1,38 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html + */ +class Range extends AbstractQuery +{ + /** + * Constructor. + * + * @param string $fieldName Field name + * @param array $args Field arguments + */ + public function __construct($fieldName = null, array $args = array()) + { + if ($fieldName) { + $this->addField($fieldName, $args); + } + } + + /** + * Adds a range field to the query. + * + * @param string $fieldName Field name + * @param array $args Field arguments + * + * @return $this + */ + public function addField($fieldName, array $args) + { + return $this->setParam($fieldName, $args); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Regexp.php b/vendor/ruflin/elastica/lib/Elastica/Query/Regexp.php new file mode 100644 index 00000000..22a48560 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Regexp.php @@ -0,0 +1,40 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html + */ +class Regexp extends AbstractQuery +{ + /** + * Construct regexp query. + * + * @param string $key OPTIONAL Regexp key + * @param string $value OPTIONAL Regexp value + * @param float $boost OPTIONAL Boost value (default = 1) + */ + public function __construct($key = '', $value = null, $boost = 1.0) + { + if (!empty($key)) { + $this->setValue($key, $value, $boost); + } + } + + /** + * Sets the query expression for a key with its boost value. + * + * @param string $key + * @param string $value + * @param float $boost + * + * @return $this + */ + public function setValue($key, $value, $boost = 1.0) + { + return $this->setParam($key, array('value' => $value, 'boost' => $boost)); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Simple.php b/vendor/ruflin/elastica/lib/Elastica/Query/Simple.php new file mode 100644 index 00000000..6ba9310d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Simple.php @@ -0,0 +1,54 @@ + + */ +class Simple extends AbstractQuery +{ + /** + * Query. + * + * @var array Query + */ + protected $_query = array(); + + /** + * Constructs a query based on an array. + * + * @param array $query Query array + */ + public function __construct(array $query) + { + $this->setQuery($query); + } + + /** + * Sets new query array. + * + * @param array $query Query array + * + * @return $this + */ + public function setQuery(array $query) + { + $this->_query = $query; + + return $this; + } + + /** + * Converts query to array. + * + * @return array Query array + * + * @see \Elastica\Query\AbstractQuery::toArray() + */ + public function toArray() + { + return $this->_query; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/SimpleQueryString.php b/vendor/ruflin/elastica/lib/Elastica/Query/SimpleQueryString.php new file mode 100644 index 00000000..c2302d44 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/SimpleQueryString.php @@ -0,0 +1,83 @@ +setQuery($query); + if (sizeof($fields)) { + $this->setFields($fields); + } + } + + /** + * Set the querystring for this query. + * + * @param string $query see ES documentation for querystring syntax + * + * @return $this + */ + public function setQuery($query) + { + return $this->setParam('query', $query); + } + + /** + * @param string[] $fields the fields on which to perform this query. Defaults to index.query.default_field. + * + * @return $this + */ + public function setFields(array $fields) + { + return $this->setParam('fields', $fields); + } + + /** + * Set the default operator to use if no explicit operator is defined in the query string. + * + * @param string $operator see OPERATOR_* constants for options + * + * @return $this + */ + public function setDefaultOperator($operator) + { + return $this->setParam('default_operator', $operator); + } + + /** + * Set the analyzer used to analyze each term of the query. + * + * @param string $analyzer + * + * @return $this + */ + public function setAnalyzer($analyzer) + { + return $this->setParam('analyzer', $analyzer); + } + + /** + * Set minimum_should_match option. + * + * @param int|string $minimumShouldMatch + * + * @return $this + */ + public function setMinimumShouldMatch($minimumShouldMatch) + { + return $this->setParam('minimum_should_match', $minimumShouldMatch); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Term.php b/vendor/ruflin/elastica/lib/Elastica/Query/Term.php new file mode 100644 index 00000000..8cfe0a88 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Term.php @@ -0,0 +1,49 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html + */ +class Term extends AbstractQuery +{ + /** + * Constructs the Term query object. + * + * @param array $term OPTIONAL Calls setTerm with the given $term array + */ + public function __construct(array $term = array()) + { + $this->setRawTerm($term); + } + + /** + * Set term can be used instead of addTerm if some more special + * values for a term have to be set. + * + * @param array $term Term array + * + * @return $this + */ + public function setRawTerm(array $term) + { + return $this->setParams($term); + } + + /** + * Adds a term to the term query. + * + * @param string $key Key to query + * @param string|array $value Values(s) for the query. Boost can be set with array + * @param float $boost OPTIONAL Boost value (default = 1.0) + * + * @return $this + */ + public function setTerm($key, $value, $boost = 1.0) + { + return $this->setRawTerm(array($key => array('value' => $value, 'boost' => $boost))); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Terms.php b/vendor/ruflin/elastica/lib/Elastica/Query/Terms.php new file mode 100644 index 00000000..54f26461 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Terms.php @@ -0,0 +1,107 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html + */ +class Terms extends AbstractQuery +{ + /** + * Terms. + * + * @var array Terms + */ + protected $_terms = array(); + + /** + * Params. + * + * @var array Params + */ + protected $_params = array(); + + /** + * Terms key. + * + * @var string Terms key + */ + protected $_key = ''; + + /** + * Construct terms query. + * + * @param string $key OPTIONAL Terms key + * @param array $terms OPTIONAL Terms list + */ + public function __construct($key = '', array $terms = array()) + { + $this->setTerms($key, $terms); + } + + /** + * Sets key and terms for the query. + * + * @param string $key Terms key + * @param array $terms Terms for the query. + * + * @return $this + */ + public function setTerms($key, array $terms) + { + $this->_key = $key; + $this->_terms = array_values($terms); + + return $this; + } + + /** + * Adds a single term to the list. + * + * @param string $term Term + * + * @return $this + */ + public function addTerm($term) + { + $this->_terms[] = $term; + + return $this; + } + + /** + * Sets the minimum matching values. + * + * @param int $minimum Minimum value + * + * @return $this + */ + public function setMinimumMatch($minimum) + { + return $this->setParam('minimum_match', (int) $minimum); + } + + /** + * Converts the terms object to an array. + * + * @see \Elastica\Query\AbstractQuery::toArray() + * + * @throws \Elastica\Exception\InvalidException If term key is empty + * + * @return array Query array + */ + public function toArray() + { + if (empty($this->_key)) { + throw new InvalidException('Terms key has to be set'); + } + $this->setParam($this->_key, $this->_terms); + + return parent::toArray(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/TopChildren.php b/vendor/ruflin/elastica/lib/Elastica/Query/TopChildren.php new file mode 100644 index 00000000..6f15c79d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/TopChildren.php @@ -0,0 +1,53 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-top-children-query.html + */ +class TopChildren extends AbstractQuery +{ + /** + * Construct topChildren query. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * @param string $type Parent document type + */ + public function __construct($query, $type = null) + { + $this->setQuery($query); + $this->setType($type); + } + + /** + * Sets query object. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setQuery($query) + { + $query = BaseQuery::create($query); + $data = $query->toArray(); + + return $this->setParam('query', $data['query']); + } + + /** + * Set type of the parent document. + * + * @param string $type Parent document type + * + * @return $this + */ + public function setType($type) + { + return $this->setParam('type', $type); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Query/Wildcard.php b/vendor/ruflin/elastica/lib/Elastica/Query/Wildcard.php new file mode 100644 index 00000000..bfa5e751 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Query/Wildcard.php @@ -0,0 +1,40 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html + */ +class Wildcard extends AbstractQuery +{ + /** + * Construct wildcard query. + * + * @param string $key OPTIONAL Wildcard key + * @param string $value OPTIONAL Wildcard value + * @param float $boost OPTIONAL Boost value (default = 1) + */ + public function __construct($key = '', $value = null, $boost = 1.0) + { + if (!empty($key)) { + $this->setValue($key, $value, $boost); + } + } + + /** + * Sets the query expression for a key with its boost value. + * + * @param string $key + * @param string $value + * @param float $boost + * + * @return $this + */ + public function setValue($key, $value, $boost = 1.0) + { + return $this->setParam($key, array('value' => $value, 'boost' => $boost)); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder.php new file mode 100644 index 00000000..477c4525 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder.php @@ -0,0 +1,114 @@ + + */ +class QueryBuilder +{ + /** + * @var Version + */ + private $_version; + + /** + * @var Facade[] + */ + private $_facades = array(); + + /** + * Constructor. + * + * @param Version $version + */ + public function __construct(Version $version = null) + { + $this->_version = $version ?: new Version150(); + + $this->addDSL(new DSL\Query()); + $this->addDSL(new DSL\Filter()); + $this->addDSL(new DSL\Aggregation()); + $this->addDSL(new DSL\Suggest()); + } + + /** + * Returns Facade for custom DSL object. + * + * @param $dsl + * @param array $arguments + * + * @throws QueryBuilderException + * + * @return Facade + */ + public function __call($dsl, array $arguments) + { + if (false === isset($this->_facades[$dsl])) { + throw new QueryBuilderException('DSL "'.$dsl.'" not supported'); + } + + return $this->_facades[$dsl]; + } + + /** + * Adds a new DSL object. + * + * @param DSL $dsl + */ + public function addDSL(DSL $dsl) + { + $this->_facades[$dsl->getType()] = new Facade($dsl, $this->_version); + } + + /* + * convenience methods + */ + + /** + * Query DSL. + * + * @return DSL\Query + */ + public function query() + { + return $this->_facades[DSL::TYPE_QUERY]; + } + + /** + * Filter DSL. + * + * @return DSL\Filter + */ + public function filter() + { + return $this->_facades[DSL::TYPE_FILTER]; + } + + /** + * Aggregation DSL. + * + * @return DSL\Aggregation + */ + public function aggregation() + { + return $this->_facades[DSL::TYPE_AGGREGATION]; + } + + /** + * Suggest DSL. + * + * @return DSL\Suggest + */ + public function suggest() + { + return $this->_facades[DSL::TYPE_SUGGEST]; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL.php new file mode 100644 index 00000000..976de5f4 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL.php @@ -0,0 +1,22 @@ + + */ +interface DSL +{ + const TYPE_QUERY = 'query'; + const TYPE_FILTER = 'filter'; + const TYPE_AGGREGATION = 'aggregation'; + const TYPE_SUGGEST = 'suggest'; + + /** + * must return type for QueryBuilder usage. + * + * @return string + */ + public function getType(); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Aggregation.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Aggregation.php new file mode 100644 index 00000000..8393b8aa --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Aggregation.php @@ -0,0 +1,470 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html + */ +class Aggregation implements DSL +{ + /** + * must return type for QueryBuilder usage. + * + * @return string + */ + public function getType() + { + return DSL::TYPE_AGGREGATION; + } + + /** + * min aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-min-aggregation.html + * + * @param string $name + * + * @return Min + */ + public function min($name) + { + return new Min($name); + } + + /** + * max aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-max-aggregation.html + * + * @param string $name + * + * @return Max + */ + public function max($name) + { + return new Max($name); + } + + /** + * sum aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum-aggregation.html + * + * @param string $name + * + * @return Sum + */ + public function sum($name) + { + return new Sum($name); + } + + /** + * avg aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html + * + * @param string $name + * + * @return Avg + */ + public function avg($name) + { + return new Avg($name); + } + + /** + * stats aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html + * + * @param string $name + * + * @return Stats + */ + public function stats($name) + { + return new Stats($name); + } + + /** + * extended stats aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-extendedstats-aggregation.html + * + * @param string $name + * + * @return ExtendedStats + */ + public function extended_stats($name) + { + return new ExtendedStats($name); + } + + /** + * value count aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html + * + * @param string $name + * @param string $field + * + * @return ValueCount + */ + public function value_count($name, $field) + { + return new ValueCount($name, $field); + } + + /** + * percentiles aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html + * + * @param string $name the name of this aggregation + * @param string $field the field on which to perform this aggregation + * + * @return Percentiles + */ + public function percentiles($name, $field = null) + { + return new Percentiles($name, $field); + } + + /** + * percentile ranks aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-rank-aggregation.html + * + * @param string $name + */ + public function percentile_ranks($name) + { + throw new NotImplementedException(); + } + + /** + * cardinality aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html + * + * @param string $name + * + * @return Cardinality + */ + public function cardinality($name) + { + return new Cardinality($name); + } + + /** + * geo bounds aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-geobounds-aggregation.html + * + * @param string $name + */ + public function geo_bounds($name) + { + throw new NotImplementedException(); + } + + /** + * top hits aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html + * + * @param string $name + * + * @return TopHits + */ + public function top_hits($name) + { + return new TopHits($name); + } + + /** + * scripted metric aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html + * + * @param string $name + * @param string|null $initScript + * @param string|null $mapScript + * @param string|null $combineScript + * @param string|null $reduceScript + * + * @return ScriptedMetric + */ + public function scripted_metric($name, $initScript = null, $mapScript = null, $combineScript = null, $reduceScript = null) + { + return new ScriptedMetric($name, $initScript, $mapScript, $combineScript, $reduceScript); + } + + /** + * global aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-global-aggregation.html + * + * @param string $name + * + * @return GlobalAggregation + */ + public function global_agg($name) + { + return new GlobalAggregation($name); + } + + /** + * filter aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html + * + * @param string $name + * @param AbstractFilter $filter + * + * @return FilterAggregation + */ + public function filter($name, AbstractFilter $filter = null) + { + return new FilterAggregation($name, $filter); + } + + /** + * filters aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html + * + * @param string $name + * + * @return Filters + */ + public function filters($name) + { + return new Filters($name); + } + + /** + * missing aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-missing-aggregation.html + * + * @param string $name + * @param string $field + * + * @return Missing + */ + public function missing($name, $field) + { + return new Missing($name, $field); + } + + /** + * nested aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-nested-aggregation.html + * + * @param string $name + * @param string $path the nested path for this aggregation + * + * @return Nested + */ + public function nested($name, $path) + { + return new Nested($name, $path); + } + + /** + * reverse nested aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-reverse-nested-aggregation.html + * + * @param string $name The name of this aggregation + * @param string $path Optional path to the nested object for this aggregation. Defaults to the root of the main document. + * + * @return ReverseNested + */ + public function reverse_nested($name, $path = null) + { + return new ReverseNested($name); + } + + /** + * children aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-children-aggregation.html + * + * @param string $name + */ + public function children($name) + { + throw new NotImplementedException(); + } + + /** + * terms aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html + * + * @param string $name + * + * @return Terms + */ + public function terms($name) + { + return new Terms($name); + } + + /** + * significant terms aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html + * + * @param string $name + * + * @return SignificantTerms + */ + public function significant_terms($name) + { + return new SignificantTerms($name); + } + + /** + * range aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-range-aggregation.html + * + * @param string $name + * + * @return Range + */ + public function range($name) + { + return new Range($name); + } + + /** + * date range aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-daterange-aggregation.html + * + * @param string $name + * + * @return DateRange + */ + public function date_range($name) + { + return new DateRange($name); + } + + /** + * ipv4 range aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-iprange-aggregation.html + * + * @param string $name + * @param string $field + * + * @return IpRange + */ + public function ipv4_range($name, $field) + { + return new IpRange($name, $field); + } + + /** + * histogram aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-histogram-aggregation.html + * + * @param string $name the name of this aggregation + * @param string $field the name of the field on which to perform the aggregation + * @param int $interval the interval by which documents will be bucketed + * + * @return Histogram + */ + public function histogram($name, $field, $interval) + { + return new Histogram($name, $field, $interval); + } + + /** + * date histogram aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html + * + * @param string $name the name of this aggregation + * @param string $field the name of the field on which to perform the aggregation + * @param int $interval the interval by which documents will be bucketed + * + * @return DateHistogram + */ + public function date_histogram($name, $field, $interval) + { + return new DateHistogram($name, $field, $interval); + } + + /** + * geo distance aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geodistance-aggregation.html + * + * @param string $name the name if this aggregation + * @param string $field the field on which to perform this aggregation + * @param string|array $origin the point from which distances will be calculated + * + * @return GeoDistance + */ + public function geo_distance($name, $field, $origin) + { + return new GeoDistance($name, $field, $origin); + } + + /** + * geohash grid aggregation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html + * + * @param string $name the name of this aggregation + * @param string $field the field on which to perform this aggregation + * + * @return GeohashGrid + */ + public function geohash_grid($name, $field) + { + return new GeohashGrid($name, $field); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Filter.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Filter.php new file mode 100644 index 00000000..1c41239f --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Filter.php @@ -0,0 +1,480 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filters.html + */ +class Filter implements DSL +{ + /** + * must return type for QueryBuilder usage. + * + * @return string + */ + public function getType() + { + return self::TYPE_FILTER; + } + + /** + * and filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-and-filter.html + * + * @param AbstractFilter[] $filters + * + * @return BoolAnd + */ + public function bool_and(array $filters = array()) + { + return new BoolAnd($filters); + } + + /** + * bool filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html + * + * @return \Elastica\Filter\Bool + */ + public function bool() + { + return new BoolFilter(); + } + + /** + * exists filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html + * + * @param string $field + * + * @return Exists + */ + public function exists($field) + { + return new Exists($field); + } + + /** + * geo bounding box filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-bounding-box-filter.html + * + * @param string $key + * @param array $coordinates + * + * @return GeoBoundingBox + */ + public function geo_bounding_box($key, array $coordinates) + { + return new GeoBoundingBox($key, $coordinates); + } + + /** + * geo distance filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-filter.html + * + * @param string $key Key + * @param array|string $location Location as array or geohash: array('lat' => 48.86, 'lon' => 2.35) OR 'drm3btev3e86' + * @param string $distance Distance + * + * @return GeoDistance + */ + public function geo_distance($key, $location, $distance) + { + return new GeoDistance($key, $location, $distance); + } + + /** + * geo distance rangefilter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-range-filter.html + * + * @param string $key + * @param array|string $location + * @param array $ranges + * + * @return GeoDistanceRange + */ + public function geo_distance_range($key, $location, array $ranges = array()) + { + return new GeoDistanceRange($key, $location, $ranges); + } + + /** + * geo polygon filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-polygon-filter.html + * + * @param string $key Key + * @param array $points Points making up polygon + * + * @return GeoPolygon + */ + public function geo_polygon($key, array $points) + { + return new GeoPolygon($key, $points); + } + + /** + * provided geo shape filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-filter.html#_provided_shape_definition + * + * @param string $path + * @param array $coordinates + * @param string $shapeType + * + * @return GeoShapeProvided + */ + public function geo_shape_provided($path, array $coordinates, $shapeType = GeoShapeProvided::TYPE_ENVELOPE) + { + return new GeoShapeProvided($path, $coordinates, $shapeType); + } + + /** + * pre indexed geo shape filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-filter.html#_pre_indexed_shape + * + * @param string $path The path/field of the shape searched + * @param string $indexedId Id of the pre-indexed shape + * @param string $indexedType Type of the pre-indexed shape + * @param string $indexedIndex Index of the pre-indexed shape + * @param string $indexedPath Path of the pre-indexed shape + * + * @return GeoShapePreIndexed + */ + public function geo_shape_pre_indexed($path, $indexedId, $indexedType, $indexedIndex, $indexedPath) + { + return new GeoShapePreIndexed($path, $indexedId, $indexedType, $indexedIndex, $indexedPath); + } + + /** + * geohash cell filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geohash-cell-filter.html + * + * @param string $key The field on which to filter + * @param array|string $location Location as coordinates array or geohash string ['lat' => 40.3, 'lon' => 45.2] + * @param int|string $precision length of geohash prefix or distance (3, or "50m") + * @param bool $neighbors If true, filters cells next to the given cell. + * + * @return GeohashCell + */ + public function geohash_cell($key, $location, $precision = -1, $neighbors = false) + { + return new GeohashCell($key, $location, $precision, $neighbors); + } + + /** + * has child filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-has-child-filter.html + * + * @param AbstractQuery|AbstractFilter $query + * @param string $type + * + * @return HasChild + */ + public function has_child($query, $type = null) + { + return new HasChild($query, $type); + } + + /** + * has parent filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-has-parent-filter.html + * + * @param AbstractQuery|AbstractFilter $query + * @param string $type + * + * @return HasParent + */ + public function has_parent($query, $type) + { + return new HasParent($query, $type); + } + + /** + * ids filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-filter.html + * + * @param string|\Elastica\Type $type + * @param array $ids + * + * @return Ids + */ + public function ids($type = null, array $ids = array()) + { + return new Ids($type, $ids); + } + + /** + * indices filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-indices-filter.html + * + * @param AbstractFilter $filter filter which will be applied to docs in the specified indices + * @param string[] $indices + * + * @return Indices + */ + public function indices(AbstractFilter $filter, array $indices) + { + return new Indices($filter, $indices); + } + + /** + * limit filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-limit-filter.html + * + * @param int $limit Limit + * + * @return Limit + */ + public function limit($limit) + { + return new Limit($limit); + } + + /** + * match all filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-all-filter.html + * + * @return MatchAll + */ + public function match_all() + { + return new MatchAll(); + } + + /** + * missing filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-missing-filter.html + * + * @param string $field + * + * @return Missing + */ + public function missing($field = '') + { + return new Missing($field); + } + + /** + * nested filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html + * + * @return Nested + */ + public function nested() + { + return new Nested(); + } + + /** + * not filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-not-filter.html + * + * @param AbstractFilter $filter + * + * @return BoolNot + */ + public function bool_not(AbstractFilter $filter) + { + return new BoolNot($filter); + } + + /** + * numeric range filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/0.90/query-dsl-numeric-range-filter.html + * + * @param string $fieldName Field name + * @param array $args Field arguments + * + * @return NumericRange + */ + public function numeric_range($fieldName = '', array $args = array()) + { + return new NumericRange($fieldName, $args); + } + + /** + * or filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-or-filter.html + * + * @param AbstractFilter[] $filters + * + * @return BoolOr + */ + public function bool_or(array $filters = array()) + { + return new BoolOr($filters); + } + + /** + * prefix filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-filter.html + * + * @param string $field + * @param string $prefix + * + * @return Prefix + */ + public function prefix($field = '', $prefix = '') + { + return new Prefix($field, $prefix); + } + + /** + * query filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-filter.html + * + * @param array|AbstractQuery $query + * + * @return QueryFilter + */ + public function query($query = null) + { + return new QueryFilter($query); + } + + /** + * range filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-filter.html + * + * @param string $fieldName + * @param array $args + * + * @return Range + */ + public function range($fieldName = '', array $args = array()) + { + return new Range($fieldName, $args); + } + + /** + * regexp filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-filter.html + * + * @param string $field Field name + * @param string $regexp Regular expression + * @param array $options Regular expression options + * + * @return Regexp + */ + public function regexp($field = '', $regexp = '', $options = array()) + { + return new Regexp($field, $regexp, $options); + } + + /** + * script filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-filter.html + * + * @param array|string|\Elastica\Script $script + * + * @return Script + */ + public function script($script = null) + { + return new Script($script); + } + + /** + * term filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-filter.html + * + * @param array $term + * + * @return Term + */ + public function term(array $term = array()) + { + return new Term($term); + } + + /** + * terms filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-filter.html + * + * @param string $key + * @param array $terms + * + * @return Terms + */ + public function terms($key = '', array $terms = array()) + { + return new Terms($key, $terms); + } + + /** + * type filter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-type-filter.html + * + * @param string $type + * + * @return Type + */ + public function type($type = null) + { + return new Type($type); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Query.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Query.php new file mode 100644 index 00000000..7d1aca68 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Query.php @@ -0,0 +1,586 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-queries.html + */ +class Query implements DSL +{ + /** + * must return type for QueryBuilder usage. + * + * @return string + */ + public function getType() + { + return self::TYPE_QUERY; + } + + /** + * match query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html + * + * @param string $field + * @param mixed $values + * + * @return Match + */ + public function match($field = null, $values = null) + { + return new Match($field, $values); + } + + /** + * multi match query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html + * + * @return \Elastica\Query\MultiMatch + */ + public function multi_match() + { + return new MultiMatch(); + } + + /** + * bool query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html + * + * @return \Elastica\Query\BoolQuery + */ + public function bool() + { + return new BoolQuery(); + } + + /** + * boosting query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html + * + * @return Boosting + */ + public function boosting() + { + return new Boosting(); + } + + /** + * common terms query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-common-terms-query.html + * + * @param string $field + * @param string $query + * @param float $cutoffFrequency percentage in decimal form (.001 == 0.1%) + * + * @return Common + */ + public function common_terms($field, $query, $cutoffFrequency) + { + return new Common($field, $query, $cutoffFrequency); + } + + /** + * custom filters score query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/0.90/query-dsl-custom-filters-score-query.html + */ + public function custom_filters_score() + { + throw new NotImplementedException(); + } + + /** + * custom score query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/0.90/query-dsl-custom-score-query.html + */ + public function custom_score() + { + throw new NotImplementedException(); + } + + /** + * custom boost factor query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/0.90/query-dsl-custom-boost-factor-query.html + */ + public function custom_boost_factor() + { + throw new NotImplementedException(); + } + + /** + * constant score query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-constant-score-query.html + * + * @param null|\Elastica\Filter\AbstractFilter|array $filter + * + * @return ConstantScore + */ + public function constant_score($filter = null) + { + return new ConstantScore($filter); + } + + /** + * dis max query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html + * + * @return DisMax + */ + public function dis_max() + { + return new DisMax(); + } + + /** + * field query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/0.90/query-dsl-field-query.html + */ + public function field() + { + throw new NotImplementedException(); + } + + /** + * filtered query. + * + * @param AbstractFilter $filter + * @param AbstractQuery $query + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html + * + * @return Filtered + */ + public function filtered(AbstractQuery $query = null, AbstractFilter $filter = null) + { + return new Filtered($query, $filter); + } + + /** + * fuzzy like this query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-flt-query.html + * + * @return FuzzyLikeThis + */ + public function fuzzy_like_this() + { + return new FuzzyLikeThis(); + } + + /** + * fuzzy like this field query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-flt-field-query.html + */ + public function fuzzy_like_this_field() + { + throw new NotImplementedException(); + } + + /** + * function score query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html + * + * @return FunctionScore + */ + public function function_score() + { + return new FunctionScore(); + } + + /** + * fuzzy query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html + * + * @param string $fieldName Field name + * @param string $value String to search for + * + * @return Fuzzy + */ + public function fuzzy($fieldName = null, $value = null) + { + return new Fuzzy($fieldName, $value); + } + + /** + * geo shape query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-query.html + */ + public function geo_shape() + { + throw new NotImplementedException(); + } + + /** + * has child query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-has-child-query.html + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * @param string $type Parent document type + * + * @return HasChild + */ + public function has_child($query, $type = null) + { + return new HasChild($query, $type); + } + + /** + * has parent query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-has-parent-query.html + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * @param string $type Parent document type + * + * @return HasParent + */ + public function has_parent($query, $type) + { + return new HasParent($query, $type); + } + + /** + * ids query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html + * + * @param array|string|\Elastica\Type $type + * @param array $ids + * + * @return Ids + */ + public function ids($type = null, array $ids = array()) + { + return new Ids($type, $ids); + } + + /** + * indices query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-indices-query.html + */ + public function indices() + { + throw new NotImplementedException(); + } + + /** + * match all query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-all-query.html + * + * @return MatchAll + */ + public function match_all() + { + return new MatchAll(); + } + + /** + * more like this query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html + * + * @return MoreLikeThis + */ + public function more_like_this() + { + return new MoreLikeThis(); + } + + /** + * more_like_this_field query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-mlt-field-query.html + * @deprecated More Like This Field query is deprecated as of ES 1.4 and will be removed in ES 2.0 + */ + public function more_like_this_field() + { + throw new NotImplementedException(); + } + + /** + * nested query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html + * + * @return Nested + */ + public function nested() + { + return new Nested(); + } + + /** + * prefix query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html + * + * @param array $prefix Prefix array + * + * @return Prefix + */ + public function prefix(array $prefix = array()) + { + return new Prefix($prefix); + } + + /** + * query string query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html + * + * @param string $queryString OPTIONAL Query string for object + * + * @return QueryString + */ + public function query_string($queryString = '') + { + return new QueryString($queryString); + } + + /** + * simple_query_string query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html + * + * @param string $query + * @param array $fields + * + * @return SimpleQueryString + */ + public function simple_query_string($query, array $fields = array()) + { + return new SimpleQueryString($query, $fields); + } + + /** + * range query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html + * + * @param string $fieldName + * @param array $args + * + * @return Range + */ + public function range($fieldName = null, array $args = array()) + { + return new Range($fieldName, $args); + } + + /** + * regexp query. + * + * @param string $key + * @param string $value + * @param float $boost + * + * @return Regexp + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html + */ + public function regexp($key = '', $value = null, $boost = 1.0) + { + return new Regexp($key, $value, $boost); + } + + /** + * span first query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-first-query.html + */ + public function span_first() + { + throw new NotImplementedException(); + } + + /** + * span multi term query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-multi-term-query.html + */ + public function span_multi_term() + { + throw new NotImplementedException(); + } + + /** + * span near query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-near-query.html + */ + public function span_near() + { + throw new NotImplementedException(); + } + + /** + * span not query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-not-query.html + */ + public function span_not() + { + throw new NotImplementedException(); + } + + /** + * span or query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-or-query.html + */ + public function span_or() + { + throw new NotImplementedException(); + } + + /** + * span term query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-term-query.html + */ + public function span_term() + { + throw new NotImplementedException(); + } + + /** + * term query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html + * + * @param array $term + * + * @return Term + */ + public function term(array $term = array()) + { + return new Term($term); + } + + /** + * terms query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html + * + * @param string $key + * @param array $terms + * + * @return Terms + */ + public function terms($key = '', array $terms = array()) + { + return new Terms($key, $terms); + } + + /** + * top children query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-top-children-query.html + * + * @param string|AbstractQuery|\Elastica\Query $query + * @param string $type + * + * @return TopChildren + */ + public function top_children($query, $type = null) + { + return new TopChildren($query, $type); + } + + /** + * wildcard query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html + * + * @param string $key OPTIONAL Wildcard key + * @param string $value OPTIONAL Wildcard value + * @param float $boost OPTIONAL Boost value (default = 1) + * + * @return Wildcard + */ + public function wildcard($key = '', $value = null, $boost = 1.0) + { + return new Wildcard($key, $value, $boost); + } + + /** + * text query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/0.90/query-dsl-text-query.html + */ + public function text() + { + throw new NotImplementedException(); + } + + /** + * minimum should match query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html + */ + public function minimum_should_match() + { + throw new NotImplementedException(); + } + + /** + * template query. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-template-query.html + */ + public function template() + { + throw new NotImplementedException(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Suggest.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Suggest.php new file mode 100644 index 00000000..9a54ccde --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/DSL/Suggest.php @@ -0,0 +1,83 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html + */ +class Suggest implements DSL +{ + /** + * must return type for QueryBuilder usage. + * + * @return string + */ + public function getType() + { + return self::TYPE_SUGGEST; + } + + /** + * term suggester. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-term.html + * + * @param $name + * @param $field + * + * @return Term + */ + public function term($name, $field) + { + return new Term($name, $field); + } + + /** + * phrase suggester. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-phrase.html + * + * @param $name + * @param $field + * + * @return Phrase + */ + public function phrase($name, $field) + { + return new Phrase($name, $field); + } + + /** + * completion suggester. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html + * + * @param string $name + * @param string $field + * + * @return Completion + */ + public function completion($name, $field) + { + return new Completion($name, $field); + } + + /** + * context suggester. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/suggester-context.html + */ + public function context() + { + throw new NotImplementedException(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Facade.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Facade.php new file mode 100644 index 00000000..b0f6da82 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Facade.php @@ -0,0 +1,64 @@ + + **/ +class Facade +{ + /** + * @var DSL + */ + private $_dsl; + + /** + * @var Version + */ + private $_version; + + /** + * Constructor. + * + * @param DSL $dsl + * @param Version $version + */ + public function __construct(DSL $dsl, Version $version) + { + $this->_dsl = $dsl; + $this->_version = $version; + } + + /** + * Executes DSL methods. + * + * @param string $name + * @param array $arguments + * + * @throws QueryBuilderException + * + * @return mixed + */ + public function __call($name, array $arguments) + { + // defined check + if (false === method_exists($this->_dsl, $name)) { + throw new QueryBuilderException( + 'undefined '.$this->_dsl->getType().' "'.$name.'"' + ); + } + + // version support check + if (false === $this->_version->supports($name, $this->_dsl->getType())) { + $reflection = new \ReflectionClass($this->_version); + throw new QueryBuilderException( + $this->_dsl->getType().' "'.$name.'" in '.$reflection->getShortName().' not supported' + ); + } + + return call_user_func_array(array($this->_dsl, $name), $arguments); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version.php new file mode 100644 index 00000000..5230600d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version.php @@ -0,0 +1,101 @@ + + */ +abstract class Version +{ + /** + * supported query methods. + * + * @var string[] + */ + protected $queries = array(); + + /** + * supported filter methods. + * + * @var string[] + */ + protected $filters = array(); + + /** + * supported aggregation methods. + * + * @var string[] + */ + protected $aggregations = array(); + + /** + * supported $suggester methods. + * + * @var string[] + */ + protected $suggesters = array(); + + /** + * returns true if $name is supported, false otherwise. + * + * @param string $name + * @param $type + * + * @return bool + */ + public function supports($name, $type) + { + switch ($type) { + case DSL::TYPE_QUERY: + $supports = in_array($name, $this->queries); + break; + case DSL::TYPE_FILTER: + $supports = in_array($name, $this->filters); + break; + case DSL::TYPE_AGGREGATION: + $supports = in_array($name, $this->aggregations); + break; + case DSL::TYPE_SUGGEST: + $supports = in_array($name, $this->suggesters); + break; + default: + // disables version check in Facade for custom DSL objects + $supports = true; + } + + return $supports; + } + + /** + * @return string[] + */ + public function getAggregations() + { + return $this->aggregations; + } + + /** + * @return string[] + */ + public function getFilters() + { + return $this->filters; + } + + /** + * @return string[] + */ + public function getQueries() + { + return $this->queries; + } + + /** + * @return string[] + */ + public function getSuggesters() + { + return $this->suggesters; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version090.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version090.php new file mode 100644 index 00000000..193ba852 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version090.php @@ -0,0 +1,97 @@ + + */ +class Version090 extends Version +{ + protected $queries = array( + 'match', + 'multi_match', + 'bool', + 'boosting', + 'common_terms', + 'custom_filters_score', + 'custom_score', + 'custom_boost_factor', + 'constant_score', + 'dis_max', + 'field', + 'filtered', + 'fuzzy_like_this', + 'fuzzy_like_this_field', + 'function_score', + 'fuzzy', + 'geo_shape', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'match_all', + 'more_like_this', + 'more_like_this_field', + 'nested', + 'prefix', + 'query_string', + 'simple_query_string', + 'range', + 'regexp', + 'span_first', + 'span_multi_term', + 'span_near', + 'span_not', + 'span_or', + 'span_term', + 'term', + 'terms', + 'top_children', + 'wildcard', + 'text', + 'minimum_should_match', + ); + + protected $filters = array( + 'bool_and', // original: bool + 'bool', + 'exists', + 'geo_bounding_box', + 'geo_distance', + 'geo_distance_range', + 'geo_polygon', + 'geo_shape_provided', // original: geo_shape + 'geo_shape_pre_indexed', // original: geo_shape + 'geohash_cell', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'limit', + 'match_all', + 'missing', + 'nested', + 'bool_not', // original: not + 'numeric_range', + 'bool_or', // original: or + 'prefix', + 'query', + 'range', + 'regexp', + 'script', + 'term', + 'terms', + 'type', + ); + + protected $suggesters = array( + 'term', + 'phrase', + 'completion', + ); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version100.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version100.php new file mode 100644 index 00000000..66a5c9cd --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version100.php @@ -0,0 +1,123 @@ + + */ +class Version100 extends Version +{ + protected $queries = array( + 'match', + 'multi_match', + 'bool', + 'boosting', + 'common_terms', + 'constant_score', + 'dis_max', + 'filtered', + 'fuzzy_like_this', + 'fuzzy_like_this_field', + 'function_score', + 'fuzzy', + 'geo_shape', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'match_all', + 'more_like_this', + 'more_like_this_field', + 'nested', + 'prefix', + 'query_string', + 'simple_query_string', + 'range', + 'regexp', + 'span_first', + 'span_multi_term', + 'span_near', + 'span_not', + 'span_or', + 'span_term', + 'term', + 'terms', + 'top_children', + 'wildcard', + 'minimum_should_match', + + // removed in 1.0.0 + // 'text' + // 'field' + // 'custom_filters_score' + // 'custom_score' + // 'custom_boost_factor' + ); + + protected $filters = array( + 'bool_and', // original: bool + 'bool', + 'exists', + 'geo_bounding_box', + 'geo_distance', + 'geo_distance_range', + 'geo_polygon', + 'geo_shape_provided', // original: geo_shape + 'geo_shape_pre_indexed', // original: geo_shape + 'geohash_cell', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'limit', + 'match_all', + 'missing', + 'nested', + 'bool_not', // original: not + 'bool_or', // original: or + 'prefix', + 'query', + 'range', + 'regexp', + 'script', + 'term', + 'terms', + 'type', + + // removed in 1.0.0 + // 'numeric_range' + ); + + protected $aggregations = array( + 'min', + 'max', + 'sum', + 'avg', + 'stats', + 'extended_stats', + 'value_count', + 'global_agg', // original: global + 'filter', + 'missing', + 'nested', + 'terms', + 'range', + 'date_range', + 'ipv4_range', + 'histogram', + 'date_histogram', + 'geo_distance', + 'geohash_grid', + ); + + protected $suggesters = array( + 'term', + 'phrase', + 'completion', + ); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version110.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version110.php new file mode 100644 index 00000000..b6465e76 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version110.php @@ -0,0 +1,131 @@ + + */ +class Version110 extends Version +{ + protected $queries = array( + 'match', + 'multi_match', + 'bool', + 'boosting', + 'common_terms', + 'constant_score', + 'dis_max', + 'filtered', + 'fuzzy_like_this', + 'fuzzy_like_this_field', + 'function_score', + 'fuzzy', + 'geo_shape', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'match_all', + 'more_like_this', + 'more_like_this_field', + 'nested', + 'prefix', + 'query_string', + 'simple_query_string', + 'range', + 'regexp', + 'span_first', + 'span_multi_term', + 'span_near', + 'span_not', + 'span_or', + 'span_term', + 'term', + 'terms', + 'top_children', + 'wildcard', + 'minimum_should_match', + + // removed in 1.0.0 + // 'text' + // 'field' + // 'custom_filters_score' + // 'custom_score' + // 'custom_boost_factor' + + // new in 1.1.0 + 'template', + ); + + protected $filters = array( + 'bool_and', // original: bool + 'bool', + 'exists', + 'geo_bounding_box', + 'geo_distance', + 'geo_distance_range', + 'geo_polygon', + 'geo_shape_provided', // original: geo_shape + 'geo_shape_pre_indexed', // original: geo_shape + 'geohash_cell', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'limit', + 'match_all', + 'missing', + 'nested', + 'bool_not', // original: not + 'bool_or', // original: or + 'prefix', + 'query', + 'range', + 'regexp', + 'script', + 'term', + 'terms', + 'type', + + // removed in 1.0.0 + // 'numeric_range' + ); + + protected $aggregations = array( + 'min', + 'max', + 'sum', + 'avg', + 'stats', + 'extended_stats', + 'value_count', + 'global_agg', // original: global + 'filter', + 'missing', + 'nested', + 'terms', + 'range', + 'date_range', + 'ipv4_range', + 'histogram', + 'date_histogram', + 'geo_distance', + 'geohash_grid', + + // new in 1.1.0 + 'percentiles', + 'cardinality', + 'significant_terms', + ); + + protected $suggesters = array( + 'term', + 'phrase', + 'completion', + ); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version120.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version120.php new file mode 100644 index 00000000..f74e3bdc --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version120.php @@ -0,0 +1,137 @@ + + */ +class Version120 extends Version +{ + protected $queries = array( + 'match', + 'multi_match', + 'bool', + 'boosting', + 'common_terms', + 'constant_score', + 'dis_max', + 'filtered', + 'fuzzy_like_this', + 'fuzzy_like_this_field', + 'function_score', + 'fuzzy', + 'geo_shape', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'match_all', + 'more_like_this', + 'more_like_this_field', + 'nested', + 'prefix', + 'query_string', + 'simple_query_string', + 'range', + 'regexp', + 'span_first', + 'span_multi_term', + 'span_near', + 'span_not', + 'span_or', + 'span_term', + 'term', + 'terms', + 'top_children', + 'wildcard', + 'minimum_should_match', + + // removed in 1.0.0 + // 'text' + // 'field' + // 'custom_filters_score' + // 'custom_score' + // 'custom_boost_factor' + + // new in 1.1.0 + 'template', + ); + + protected $filters = array( + 'bool_and', // original: bool + 'bool', + 'exists', + 'geo_bounding_box', + 'geo_distance', + 'geo_distance_range', + 'geo_polygon', + 'geo_shape_provided', // original: geo_shape + 'geo_shape_pre_indexed', // original: geo_shape + 'geohash_cell', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'limit', + 'match_all', + 'missing', + 'nested', + 'bool_not', // original: not + 'bool_or', // original: or + 'prefix', + 'query', + 'range', + 'regexp', + 'script', + 'term', + 'terms', + 'type', + + // removed in 1.0.0 + // 'numeric_range' + ); + + protected $aggregations = array( + 'min', + 'max', + 'sum', + 'avg', + 'stats', + 'extended_stats', + 'value_count', + 'global_agg', // original: global + 'filter', + 'missing', + 'nested', + 'terms', + 'range', + 'date_range', + 'ipv4_range', + 'histogram', + 'date_histogram', + 'geo_distance', + 'geohash_grid', + + // new in 1.1.0 + 'percentiles', + 'cardinality', + 'significant_terms', + + // new in 1.2.0 + 'reverse_nested', + ); + + protected $suggesters = array( + 'term', + 'phrase', + 'completion', + + // new in 1.2.0 + 'context', + ); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version130.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version130.php new file mode 100644 index 00000000..ad52e3e7 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version130.php @@ -0,0 +1,142 @@ + + */ +class Version130 extends Version +{ + protected $queries = array( + 'match', + 'multi_match', + 'bool', + 'boosting', + 'common_terms', + 'constant_score', + 'dis_max', + 'filtered', + 'fuzzy_like_this', + 'fuzzy_like_this_field', + 'function_score', + 'fuzzy', + 'geo_shape', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'match_all', + 'more_like_this', + 'more_like_this_field', + 'nested', + 'prefix', + 'query_string', + 'simple_query_string', + 'range', + 'regexp', + 'span_first', + 'span_multi_term', + 'span_near', + 'span_not', + 'span_or', + 'span_term', + 'term', + 'terms', + 'top_children', + 'wildcard', + 'minimum_should_match', + + // removed in 1.0.0 + // 'text' + // 'field' + // 'custom_filters_score' + // 'custom_score' + // 'custom_boost_factor' + + // new in 1.1.0 + 'template', + ); + + protected $filters = array( + 'bool_and', // original: bool + 'bool', + 'exists', + 'geo_bounding_box', + 'geo_distance', + 'geo_distance_range', + 'geo_polygon', + 'geo_shape_provided', // original: geo_shape + 'geo_shape_pre_indexed', // original: geo_shape + 'geohash_cell', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'limit', + 'match_all', + 'missing', + 'nested', + 'bool_not', // original: not + 'bool_or', // original: or + 'prefix', + 'query', + 'range', + 'regexp', + 'script', + 'term', + 'terms', + 'type', + + // removed in 1.0.0 + // 'numeric_range' + ); + + protected $aggregations = array( + 'min', + 'max', + 'sum', + 'avg', + 'stats', + 'extended_stats', + 'value_count', + 'global_agg', // original: global + 'filter', + 'missing', + 'nested', + 'terms', + 'range', + 'date_range', + 'ipv4_range', + 'histogram', + 'date_histogram', + 'geo_distance', + 'geohash_grid', + + // new in 1.1.0 + 'percentiles', + 'cardinality', + 'significant_terms', + + // new in 1.2.0 + 'reverse_nested', + + // new in 1.3.0 + 'percentile_ranks', + 'geo_bounds', + 'top_hits', + ); + + protected $suggesters = array( + 'term', + 'phrase', + 'completion', + + // new in 1.2.0 + 'context', + ); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version140.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version140.php new file mode 100644 index 00000000..7b5d73e3 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version140.php @@ -0,0 +1,145 @@ + + */ +class Version140 extends Version130 +{ + protected $queries = array( + 'match', + 'multi_match', + 'bool', + 'boosting', + 'common_terms', + 'constant_score', + 'dis_max', + 'filtered', + 'fuzzy_like_this', + 'fuzzy_like_this_field', + 'function_score', + 'fuzzy', + 'geo_shape', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'match_all', + 'more_like_this', + 'more_like_this_field', + 'nested', + 'prefix', + 'query_string', + 'simple_query_string', + 'range', + 'regexp', + 'span_first', + 'span_multi_term', + 'span_near', + 'span_not', + 'span_or', + 'span_term', + 'term', + 'terms', + 'top_children', + 'wildcard', + 'minimum_should_match', + + // removed in 1.0.0 + // 'text' + // 'field' + // 'custom_filters_score' + // 'custom_score' + // 'custom_boost_factor' + + // new in 1.1.0 + 'template', + ); + + protected $filters = array( + 'bool_and', // original: bool + 'bool', + 'exists', + 'geo_bounding_box', + 'geo_distance', + 'geo_distance_range', + 'geo_polygon', + 'geo_shape_provided', // original: geo_shape + 'geo_shape_pre_indexed', // original: geo_shape + 'geohash_cell', + 'has_child', + 'has_parent', + 'ids', + 'indices', + 'limit', + 'match_all', + 'missing', + 'nested', + 'bool_not', // original: not + 'bool_or', // original: or + 'prefix', + 'query', + 'range', + 'regexp', + 'script', + 'term', + 'terms', + 'type', + + // removed in 1.0.0 + // 'numeric_range' + ); + + protected $aggregations = array( + 'min', + 'max', + 'sum', + 'avg', + 'stats', + 'extended_stats', + 'value_count', + 'global_agg', // original: global + 'filter', + 'missing', + 'nested', + 'terms', + 'range', + 'date_range', + 'ipv4_range', + 'histogram', + 'date_histogram', + 'geo_distance', + 'geohash_grid', + + // new in 1.1.0 + 'percentiles', + 'cardinality', + 'significant_terms', + + // new in 1.2.0 + 'reverse_nested', + + // new in 1.3.0 + 'percentile_ranks', + 'geo_bounds', + 'top_hits', + + // new in 1.4.0 + 'scripted_metric', + 'filters', + 'children', + ); + + protected $suggesters = array( + 'term', + 'phrase', + 'completion', + + // new in 1.2.0 + 'context', + ); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version150.php b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version150.php new file mode 100644 index 00000000..fcb5e087 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/QueryBuilder/Version/Version150.php @@ -0,0 +1,14 @@ + + */ +class Version150 extends Version140 +{ + // nothing was added nor removed +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Request.php b/vendor/ruflin/elastica/lib/Elastica/Request.php new file mode 100644 index 00000000..ab26ff09 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Request.php @@ -0,0 +1,204 @@ + + */ +class Request extends Param +{ + const HEAD = 'HEAD'; + const POST = 'POST'; + const PUT = 'PUT'; + const GET = 'GET'; + const DELETE = 'DELETE'; + + /** + * @var \Elastica\Connection + */ + protected $_connection; + + /** + * Construct. + * + * @param string $path Request path + * @param string $method OPTIONAL Request method (use const's) (default = self::GET) + * @param array $data OPTIONAL Data array + * @param array $query OPTIONAL Query params + * @param Connection $connection + * + * @return \Elastica\Request OPTIONAL Connection object + */ + public function __construct($path, $method = self::GET, $data = array(), array $query = array(), Connection $connection = null) + { + $this->setPath($path); + $this->setMethod($method); + $this->setData($data); + $this->setQuery($query); + + if ($connection) { + $this->setConnection($connection); + } + } + + /** + * Sets the request method. Use one of the for consts. + * + * @param string $method Request method + * + * @return $this + */ + public function setMethod($method) + { + return $this->setParam('method', $method); + } + + /** + * Get request method. + * + * @return string Request method + */ + public function getMethod() + { + return $this->getParam('method'); + } + + /** + * Sets the request data. + * + * @param array $data Request data + * + * @return $this + */ + public function setData($data) + { + return $this->setParam('data', $data); + } + + /** + * Return request data. + * + * @return array Request data + */ + public function getData() + { + return $this->getParam('data'); + } + + /** + * Sets the request path. + * + * @param string $path Request path + * + * @return $this + */ + public function setPath($path) + { + return $this->setParam('path', $path); + } + + /** + * Return request path. + * + * @return string Request path + */ + public function getPath() + { + return $this->getParam('path'); + } + + /** + * Return query params. + * + * @return array Query params + */ + public function getQuery() + { + return $this->getParam('query'); + } + + /** + * @param array $query + * + * @return $this + */ + public function setQuery(array $query = array()) + { + return $this->setParam('query', $query); + } + + /** + * @param \Elastica\Connection $connection + * + * @return $this + */ + public function setConnection(Connection $connection) + { + $this->_connection = $connection; + + return $this; + } + + /** + * Return Connection Object. + * + * @throws Exception\InvalidException If no valid connection was setted + * + * @return \Elastica\Connection + */ + public function getConnection() + { + if (empty($this->_connection)) { + throw new InvalidException('No valid connection object set'); + } + + return $this->_connection; + } + + /** + * Sends request to server. + * + * @return \Elastica\Response Response object + */ + public function send() + { + $transport = $this->getConnection()->getTransportObject(); + + // Refactor: Not full toArray needed in exec? + return $transport->exec($this, $this->getConnection()->toArray()); + } + + /** + * @return array + */ + public function toArray() + { + $data = $this->getParams(); + if ($this->_connection) { + $data['connection'] = $this->_connection->getParams(); + } + + return $data; + } + + /** + * Converts request to curl request format. + * + * @return string + */ + public function toString() + { + return JSON::stringify($this->toArray()); + } + + /** + * @return string + */ + public function __toString() + { + return $this->toString(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Rescore/AbstractRescore.php b/vendor/ruflin/elastica/lib/Elastica/Rescore/AbstractRescore.php new file mode 100644 index 00000000..0839424d --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Rescore/AbstractRescore.php @@ -0,0 +1,36 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-rescore.html + */ +abstract class AbstractRescore extends Param +{ + /** + * Overridden to return rescore as name. + * + * @return string name + */ + protected function _getBaseName() + { + return 'rescore'; + } + + /** + * Sets window_size. + * + * @param int $size + * + * @return $this + */ + public function setWindowSize($size) + { + return $this->setParam('window_size', $size); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Rescore/Query.php b/vendor/ruflin/elastica/lib/Elastica/Rescore/Query.php new file mode 100644 index 00000000..3b0a1071 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Rescore/Query.php @@ -0,0 +1,91 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-rescore.html + */ +class Query extends AbstractRescore +{ + /** + * Constructor. + * + * @param string|\Elastica\Query\AbstractQuery $rescoreQuery + * @param string|\Elastica\Query\AbstractQuery $query + */ + public function __construct($query = null) + { + $this->setParam('query', array()); + $this->setRescoreQuery($query); + } + + /** + * Override default implementation so params are in the format + * expected by elasticsearch. + * + * @return array Rescore array + */ + public function toArray() + { + $data = $this->getParams(); + + if (!empty($this->_rawParams)) { + $data = array_merge($data, $this->_rawParams); + } + + return $data; + } + + /** + * Sets rescoreQuery object. + * + * @param string|\Elastica\Query|\Elastica\Query\AbstractQuery $query + * + * @return $this + */ + public function setRescoreQuery($rescoreQuery) + { + $query = BaseQuery::create($rescoreQuery); + $data = $query->toArray(); + + $query = $this->getParam('query'); + $query['rescore_query'] = $data['query']; + + return $this->setParam('query', $query); + } + + /** + * Sets query_weight. + * + * @param float $weight + * + * @return $this + */ + public function setQueryWeight($weight) + { + $query = $this->getParam('query'); + $query['query_weight'] = $weight; + + return $this->setParam('query', $query); + } + + /** + * Sets rescore_query_weight. + * + * @param float $size + * + * @return $this + */ + public function setRescoreQueryWeight($weight) + { + $query = $this->getParam('query'); + $query['rescore_query_weight'] = $weight; + + return $this->setParam('query', $query); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Response.php b/vendor/ruflin/elastica/lib/Elastica/Response.php new file mode 100644 index 00000000..b537fe80 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Response.php @@ -0,0 +1,308 @@ + is given to result set, returned by ... + * + * @author Nicolas Ruflin + */ +class Response +{ + /** + * Query time. + * + * @var float Query time + */ + protected $_queryTime = null; + + /** + * Response string (json). + * + * @var string Response + */ + protected $_responseString = ''; + + /** + * Error. + * + * @var bool Error + */ + protected $_error = false; + + /** + * Transfer info. + * + * @var array transfer info + */ + protected $_transferInfo = array(); + + /** + * Response. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * HTTP response status code. + * + * @var int + */ + protected $_status = null; + + /** + * Construct. + * + * @param string|array $responseString Response string (json) + * @param int $responseStatus http status code + */ + public function __construct($responseString, $responseStatus = null) + { + if (is_array($responseString)) { + $this->_response = $responseString; + } else { + $this->_responseString = $responseString; + } + $this->_status = $responseStatus; + } + + /** + * Error message. + * + * @return string Error message + */ + public function getError() + { + $message = ''; + $response = $this->getData(); + + if (isset($response['error'])) { + $message = $response['error']; + } + + return $message; + } + + /** + * True if response has error. + * + * @return bool True if response has error + */ + public function hasError() + { + $response = $this->getData(); + + if (isset($response['error'])) { + return true; + } + + return false; + } + + /** + * True if response has failed shards. + * + * @return bool True if response has failed shards + */ + public function hasFailedShards() + { + try { + $shardsStatistics = $this->getShardsStatistics(); + } catch (NotFoundException $e) { + return false; + } + + return array_key_exists('failures', $shardsStatistics); + } + + /** + * Checks if the query returned ok. + * + * @return bool True if ok + */ + public function isOk() + { + $data = $this->getData(); + + // Bulk insert checks. Check every item + if (isset($data['status'])) { + if ($data['status'] >= 200 && $data['status'] <= 300) { + return true; + } + + return false; + } + + if (isset($data['items'])) { + if (isset($data['errors']) && true === $data['errors']) { + return false; + } + + foreach ($data['items'] as $item) { + if (isset($item['index']['ok']) && false == $item['index']['ok']) { + return false; + } elseif (isset($item['index']['status']) && ($item['index']['status'] < 200 || $item['index']['status'] >= 300)) { + return false; + } + } + + return true; + } + + if ($this->_status >= 200 && $this->_status <= 300) { + // http status is ok + return true; + } + + return (isset($data['ok']) && $data['ok']); + } + + /** + * @return int + */ + public function getStatus() + { + return $this->_status; + } + + /** + * Response data array. + * + * @return array Response data array + */ + public function getData() + { + if ($this->_response == null) { + $response = $this->_responseString; + if ($response === false) { + $this->_error = true; + } else { + try { + $response = JSON::parse($response); + } catch (JSONParseException $e) { + // leave reponse as is if parse fails + } + } + + if (empty($response)) { + $response = array(); + } + + if (is_string($response)) { + $response = array('message' => $response); + } + + $this->_response = $response; + } + + return $this->_response; + } + + /** + * Gets the transfer information. + * + * @return array Information about the curl request. + */ + public function getTransferInfo() + { + return $this->_transferInfo; + } + + /** + * Sets the transfer info of the curl request. This function is called + * from the \Elastica\Client::_callService . + * + * @param array $transferInfo The curl transfer information. + * + * @return $this + */ + public function setTransferInfo(array $transferInfo) + { + $this->_transferInfo = $transferInfo; + + return $this; + } + + /** + * Returns query execution time. + * + * @return float Query time + */ + public function getQueryTime() + { + return $this->_queryTime; + } + + /** + * Sets the query time. + * + * @param float $queryTime Query time + * + * @return $this + */ + public function setQueryTime($queryTime) + { + $this->_queryTime = $queryTime; + + return $this; + } + + /** + * Time request took. + * + * @throws \Elastica\Exception\NotFoundException + * + * @return int Time request took + */ + public function getEngineTime() + { + $data = $this->getData(); + + if (!isset($data['took'])) { + throw new NotFoundException('Unable to find the field [took]from the response'); + } + + return $data['took']; + } + + /** + * Get the _shard statistics for the response. + * + * @throws \Elastica\Exception\NotFoundException + * + * @return array + */ + public function getShardsStatistics() + { + $data = $this->getData(); + + if (!isset($data['_shards'])) { + throw new NotFoundException('Unable to find the field [_shards] from the response'); + } + + return $data['_shards']; + } + + /** + * Get the _scroll value for the response. + * + * @throws \Elastica\Exception\NotFoundException + * + * @return string + */ + public function getScrollId() + { + $data = $this->getData(); + + if (!isset($data['_scroll_id'])) { + throw new NotFoundException('Unable to find the field [_scroll_id] from the response'); + } + + return $data['_scroll_id']; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Result.php b/vendor/ruflin/elastica/lib/Elastica/Result.php new file mode 100644 index 00000000..6b3c68f2 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Result.php @@ -0,0 +1,217 @@ + + */ +class Result +{ + /** + * Hit array. + * + * @var array Hit array + */ + protected $_hit = array(); + + /** + * Constructs a single results object. + * + * @param array $hit Hit data + */ + public function __construct(array $hit) + { + $this->_hit = $hit; + } + + /** + * Returns a param from the result hit array. + * + * This function can be used to retrieve all data for which a specific + * function doesn't exist. + * If the param does not exist, an empty array is returned + * + * @param string $name Param name + * + * @return array Result data + */ + public function getParam($name) + { + if (isset($this->_hit[$name])) { + return $this->_hit[$name]; + } + + return array(); + } + + /** + * Test if a param from the result hit is set. + * + * @param string $name Param name to test + * + * @return bool True if the param is set, false otherwise + */ + public function hasParam($name) + { + return isset($this->_hit[$name]); + } + + /** + * Returns the hit id. + * + * @return string Hit id + */ + public function getId() + { + return $this->getParam('_id'); + } + + /** + * Returns the type of the result. + * + * @return string Result type + */ + public function getType() + { + return $this->getParam('_type'); + } + + /** + * Returns list of fields. + * + * @return array Fields list + */ + public function getFields() + { + return $this->getParam('fields'); + } + + /** + * Returns whether result has fields. + * + * @return bool + */ + public function hasFields() + { + return $this->hasParam('fields'); + } + + /** + * Returns the index name of the result. + * + * @return string Index name + */ + public function getIndex() + { + return $this->getParam('_index'); + } + + /** + * Returns the score of the result. + * + * @return float Result score + */ + public function getScore() + { + return $this->getParam('_score'); + } + + /** + * Returns the raw hit array. + * + * @return array Hit array + */ + public function getHit() + { + return $this->_hit; + } + + /** + * Returns the version information from the hit. + * + * @return string|int Document version + */ + public function getVersion() + { + return $this->getParam('_version'); + } + + /** + * Returns result data. + * + * Checks for partial result data with getFields, falls back to getSource + * + * @return array Result data array + */ + public function getData() + { + if (isset($this->_hit['fields']) && !isset($this->_hit['_source'])) { + return $this->getFields(); + } + + return $this->getSource(); + } + + /** + * Returns the result source. + * + * @return array Source data array + */ + public function getSource() + { + return $this->getParam('_source'); + } + + /** + * Returns result data. + * + * @return array Result data array + */ + public function getHighlights() + { + return $this->getParam('highlight'); + } + + /** + * Returns explanation on how its score was computed. + * + * @return array explanations + */ + public function getExplanation() + { + return $this->getParam('_explanation'); + } + + /** + * Magic function to directly access keys inside the result. + * + * Returns null if key does not exist + * + * @param string $key Key name + * + * @return mixed Key value + */ + public function __get($key) + { + $source = $this->getData(); + + return array_key_exists($key, $source) ? $source[$key] : null; + } + + /** + * Magic function to support isset() calls. + * + * @param string $key Key name + * + * @return bool + */ + public function __isset($key) + { + $source = $this->getData(); + + return array_key_exists($key, $source) && $source[$key] !== null; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/ResultSet.php b/vendor/ruflin/elastica/lib/Elastica/ResultSet.php new file mode 100644 index 00000000..ae4141b9 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/ResultSet.php @@ -0,0 +1,433 @@ + + */ +class ResultSet implements \Iterator, \Countable, \ArrayAccess +{ + /** + * Class for the static create method to use. + * + * @var string + */ + protected static $_class = 'Elastica\\ResultSet'; + + /** + * Results. + * + * @var array Results + */ + protected $_results = array(); + + /** + * Current position. + * + * @var int Current position + */ + protected $_position = 0; + + /** + * Response. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Query. + * + * @var \Elastica\Query Query object + */ + protected $_query; + + /** + * @var int + */ + protected $_took = 0; + + /** + * @var bool + */ + protected $_timedOut = false; + + /** + * @var int + */ + protected $_totalHits = 0; + + /** + * @var float + */ + protected $_maxScore = 0; + + /** + * Constructs ResultSet object. + * + * @param \Elastica\Response $response Response object + * @param \Elastica\Query $query Query object + */ + public function __construct(Response $response, Query $query) + { + $this->rewind(); + $this->_init($response); + $this->_query = $query; + } + + /** + * Creates a new ResultSet object. Can be configured to return a different + * implementation of the ResultSet class. + * + * @param Response $response + * @param Query $query + * + * @return ResultSet + */ + public static function create(Response $response, Query $query) + { + $class = static::$_class; + + return new $class($response, $query); + } + + /** + * Sets the class to be used for the static create method. + * + * @param string $class + */ + public static function setClass($class) + { + static::$_class = $class; + } + + /** + * Loads all data into the results object (initialisation). + * + * @param \Elastica\Response $response Response object + */ + protected function _init(Response $response) + { + $this->_response = $response; + $result = $response->getData(); + $this->_totalHits = isset($result['hits']['total']) ? $result['hits']['total'] : 0; + $this->_maxScore = isset($result['hits']['max_score']) ? $result['hits']['max_score'] : 0; + $this->_took = isset($result['took']) ? $result['took'] : 0; + $this->_timedOut = !empty($result['timed_out']); + if (isset($result['hits']['hits'])) { + foreach ($result['hits']['hits'] as $hit) { + $this->_results[] = new Result($hit); + } + } + } + + /** + * Returns all results. + * + * @return Result[] Results + */ + public function getResults() + { + return $this->_results; + } + + /** + * Returns true if the response contains suggestion results; false otherwise. + * + * @return bool + */ + public function hasSuggests() + { + $data = $this->_response->getData(); + + return isset($data['suggest']); + } + + /** + * Return all suggests. + * + * @return array suggest results + */ + public function getSuggests() + { + $data = $this->_response->getData(); + + return isset($data['suggest']) ? $data['suggest'] : array(); + } + + /** + * Returns whether facets exist. + * + * @return bool Facet existence + * + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ + public function hasFacets() + { + $data = $this->_response->getData(); + + return isset($data['facets']); + } + + /** + * Returns whether aggregations exist. + * + * @return bool Aggregation existence + */ + public function hasAggregations() + { + $data = $this->_response->getData(); + + return isset($data['aggregations']); + } + + /** + * Returns all aggregation results. + * + * @return array + */ + public function getAggregations() + { + $data = $this->_response->getData(); + + return isset($data['aggregations']) ? $data['aggregations'] : array(); + } + + /** + * Retrieve a specific aggregation from this result set. + * + * @param string $name the name of the desired aggregation + * + * @throws Exception\InvalidException if an aggregation by the given name cannot be found + * + * @return array + */ + public function getAggregation($name) + { + $data = $this->_response->getData(); + + if (isset($data['aggregations']) && isset($data['aggregations'][$name])) { + return $data['aggregations'][$name]; + } + throw new InvalidException("This result set does not contain an aggregation named {$name}."); + } + + /** + * Returns all facets results. + * + * @return array Facet results + * + * @deprecated Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead. + */ + public function getFacets() + { + $data = $this->_response->getData(); + + return isset($data['facets']) ? $data['facets'] : array(); + } + + /** + * Returns the total number of found hits. + * + * @return int Total hits + */ + public function getTotalHits() + { + return (int) $this->_totalHits; + } + + /** + * Returns the max score of the results found. + * + * @return float Max Score + */ + public function getMaxScore() + { + return (float) $this->_maxScore; + } + + /** + * Returns the total number of ms for this search to complete. + * + * @return int Total time + */ + public function getTotalTime() + { + return (int) $this->_took; + } + + /** + * Returns true iff the query has timed out. + * + * @return bool Timed out + */ + public function hasTimedOut() + { + return (bool) $this->_timedOut; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * @return \Elastica\Query + */ + public function getQuery() + { + return $this->_query; + } + + /** + * Returns size of current set. + * + * @return int Size of set + */ + public function count() + { + return sizeof($this->_results); + } + + /** + * Returns size of current suggests. + * + * @return int Size of suggests + */ + public function countSuggests() + { + return sizeof($this->getSuggests()); + } + + /** + * Returns the current object of the set. + * + * @return \Elastica\Result|bool Set object or false if not valid (no more entries) + */ + public function current() + { + if ($this->valid()) { + return $this->_results[$this->key()]; + } else { + return false; + } + } + + /** + * Sets pointer (current) to the next item of the set. + */ + public function next() + { + $this->_position++; + + return $this->current(); + } + + /** + * Returns the position of the current entry. + * + * @return int Current position + */ + public function key() + { + return $this->_position; + } + + /** + * Check if an object exists at the current position. + * + * @return bool True if object exists + */ + public function valid() + { + return isset($this->_results[$this->key()]); + } + + /** + * Resets position to 0, restarts iterator. + */ + public function rewind() + { + $this->_position = 0; + } + + /** + * Whether a offset exists. + * + * @link http://php.net/manual/en/arrayaccess.offsetexists.php + * + * @param int $offset + * + * @return bool true on success or false on failure. + */ + public function offsetExists($offset) + { + return isset($this->_results[$offset]); + } + + /** + * Offset to retrieve. + * + * @link http://php.net/manual/en/arrayaccess.offsetget.php + * + * @param int $offset + * + * @throws Exception\InvalidException If offset doesn't exist + * + * @return Result|null + */ + public function offsetGet($offset) + { + if ($this->offsetExists($offset)) { + return $this->_results[$offset]; + } else { + throw new InvalidException('Offset does not exist.'); + } + } + + /** + * Offset to set. + * + * @link http://php.net/manual/en/arrayaccess.offsetset.php + * + * @param int $offset + * @param Result $value + * + * @throws Exception\InvalidException + */ + public function offsetSet($offset, $value) + { + if (!($value instanceof Result)) { + throw new InvalidException('ResultSet is a collection of Result only.'); + } + + if (!isset($this->_results[$offset])) { + throw new InvalidException('Offset does not exist.'); + } + + $this->_results[$offset] = $value; + } + + /** + * Offset to unset. + * + * @link http://php.net/manual/en/arrayaccess.offsetunset.php + * + * @param int $offset + */ + public function offsetUnset($offset) + { + unset($this->_results[$offset]); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/ScanAndScroll.php b/vendor/ruflin/elastica/lib/Elastica/ScanAndScroll.php new file mode 100644 index 00000000..6713856e --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/ScanAndScroll.php @@ -0,0 +1,80 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/guide/current/scan-scroll.html + */ +class ScanAndScroll extends Scroll +{ + /** + * @var int + */ + public $sizePerShard; + + /** + * Constructor. + * + * @param Search $search + * @param string $expiryTime + * @param int $sizePerShard + */ + public function __construct(Search $search, $expiryTime = '1m', $sizePerShard = 1000) + { + $this->sizePerShard = $sizePerShard; + + parent::__construct($search, $expiryTime); + } + + /** + * Initial scan search. + * + * @link http://php.net/manual/en/iterator.rewind.php + */ + public function rewind() + { + // reset state + $this->_nextScrollId = null; + $this->_options = array(null, null, null, null); + + $this->_saveOptions(); + + // initial scan request + $this->_search->getQuery()->setSize($this->sizePerShard); + $this->_search->setOption(Search::OPTION_SCROLL, $this->expiryTime); + $this->_search->setOption(Search::OPTION_SCROLL_ID, null); + $this->_search->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_SCAN); + $this->_setScrollId($this->_search->search()); + + $this->_revertOptions(); + + // first scroll request + $this->next(); + } + + /** + * Save all search options manipulated by Scroll. + */ + protected function _saveOptions() + { + $query = $this->_search->getQuery(); + if ($query->hasParam('size')) { + $this->_options[3] = $query->getParam('size'); + } + + parent::_saveOptions(); + } + + /** + * Revert search options to previously saved state. + */ + protected function _revertOptions() + { + $this->_search->getQuery()->setSize($this->_options[3]); + + parent::_revertOptions(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Script.php b/vendor/ruflin/elastica/lib/Elastica/Script.php new file mode 100644 index 00000000..6df3d583 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Script.php @@ -0,0 +1,163 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html + */ +class Script extends AbstractUpdateAction +{ + const LANG_MVEL = 'mvel'; + const LANG_JS = 'js'; + const LANG_GROOVY = 'groovy'; + const LANG_PYTHON = 'python'; + const LANG_NATIVE = 'native'; + + /** + * @var string + */ + private $_script; + + /** + * @var string + */ + private $_lang; + + /** + * @param string $script + * @param array|null $params + * @param string|null $lang + */ + public function __construct($script, array $params = null, $lang = null, $id = null) + { + $this->setScript($script); + + if ($params) { + $this->setParams($params); + } + + if ($lang) { + $this->setLang($lang); + } + + if ($id) { + $this->setId($id); + } + } + + /** + * @param string $lang + * + * @return $this + */ + public function setLang($lang) + { + $this->_lang = $lang; + + return $this; + } + + /** + * @return string + */ + public function getLang() + { + return $this->_lang; + } + + /** + * @param string $script + * + * @return $this + */ + public function setScript($script) + { + $this->_script = $script; + + return $this; + } + + /** + * @return string + */ + public function getScript() + { + return $this->_script; + } + + /** + * @param string|array|\Elastica\Script $data + * + * @throws \Elastica\Exception\InvalidException + * + * @return self + */ + public static function create($data) + { + if ($data instanceof self) { + $script = $data; + } elseif (is_array($data)) { + $script = self::_createFromArray($data); + } elseif (is_string($data)) { + $script = new self($data); + } else { + throw new InvalidException('Failed to create script. Invalid data passed.'); + } + + return $script; + } + + /** + * @param array $data + * + * @throws \Elastica\Exception\InvalidException + * + * @return self + */ + protected static function _createFromArray(array $data) + { + if (!isset($data['script'])) { + throw new InvalidException("\$data['script'] is required"); + } + + $script = new self($data['script']); + + if (isset($data['lang'])) { + $script->setLang($data['lang']); + } + + if (isset($data['params'])) { + if (!is_array($data['params'])) { + throw new InvalidException("\$data['params'] should be array"); + } + $script->setParams($data['params']); + } + + return $script; + } + + /** + * @return array + */ + public function toArray() + { + $array = array( + 'script' => $this->_script, + ); + + if (!empty($this->_params)) { + $array['params'] = $this->_params; + } + + if ($this->_lang) { + $array['lang'] = $this->_lang; + } + + return $array; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/ScriptFields.php b/vendor/ruflin/elastica/lib/Elastica/ScriptFields.php new file mode 100644 index 00000000..41b5b913 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/ScriptFields.php @@ -0,0 +1,65 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-script-fields.html + */ +class ScriptFields extends Param +{ + /** + * @param \Elastica\Script[]|array $scripts OPTIONAL + */ + public function __construct(array $scripts = array()) + { + if ($scripts) { + $this->setScripts($scripts); + } + } + + /** + * @param string $name Name of the Script field + * @param \Elastica\Script $script + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function addScript($name, Script $script) + { + if (!is_string($name) || !strlen($name)) { + throw new InvalidException('The name of a Script is required and must be a string'); + } + $this->setParam($name, $script->toArray()); + + return $this; + } + + /** + * @param \Elastica\Script[]|array $scripts Associative array of string => Elastica\Script + * + * @return $this + */ + public function setScripts(array $scripts) + { + $this->_params = array(); + foreach ($scripts as $name => $script) { + $this->addScript($name, $script); + } + + return $this; + } + + /** + * @return array + */ + public function toArray() + { + return $this->_params; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Scroll.php b/vendor/ruflin/elastica/lib/Elastica/Scroll.php new file mode 100644 index 00000000..44fa73e9 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Scroll.php @@ -0,0 +1,174 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html + */ +class Scroll implements \Iterator +{ + /** + * @var string + */ + public $expiryTime; + + /** + * @var Search + */ + protected $_search; + + /** + * @var null|string + */ + protected $_nextScrollId = null; + + /** + * @var null|ResultSet + */ + protected $_currentResultSet = null; + + /** + * 0: scroll
      + * 1: scroll id
      + * 2: search type. + * + * @var array + */ + protected $_options = array(null, null, null); + + /** + * Constructor. + * + * @param Search $search + * @param string $expiryTime + */ + public function __construct(Search $search, $expiryTime = '1m') + { + $this->_search = $search; + $this->expiryTime = $expiryTime; + } + + /** + * Returns current result set. + * + * @link http://php.net/manual/en/iterator.current.php + * + * @return ResultSet + */ + public function current() + { + return $this->_currentResultSet; + } + + /** + * Next scroll search. + * + * @link http://php.net/manual/en/iterator.next.php + */ + public function next() + { + $this->_saveOptions(); + + $this->_search->setOption(Search::OPTION_SCROLL, $this->expiryTime); + $this->_search->setOption(Search::OPTION_SCROLL_ID, $this->_nextScrollId); + $this->_search->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_SCROLL); + $this->_setScrollId($this->_search->search()); + + $this->_revertOptions(); + } + + /** + * Returns scroll id. + * + * @link http://php.net/manual/en/iterator.key.php + * + * @return string + */ + public function key() + { + return $this->_nextScrollId; + } + + /** + * Returns true if current result set contains at least one hit. + * + * @link http://php.net/manual/en/iterator.valid.php + * + * @return bool + */ + public function valid() + { + return + $this->_nextScrollId !== null + && $this->_currentResultSet !== null + && $this->_currentResultSet->count() > 0; + } + + /** + * Initial scroll search. + * + * @link http://php.net/manual/en/iterator.rewind.php + */ + public function rewind() + { + // reset state + $this->_nextScrollId = null; + $this->_options = array(null, null, null); + + // initial search + $this->_saveOptions(); + + $this->_search->setOption(Search::OPTION_SCROLL, $this->expiryTime); + $this->_search->setOption(Search::OPTION_SCROLL_ID, null); + $this->_search->setOption(Search::OPTION_SEARCH_TYPE, null); + $this->_setScrollId($this->_search->search()); + + $this->_revertOptions(); + } + + /** + * Prepares Scroll for next request. + * + * @param ResultSet $resultSet + */ + protected function _setScrollId(ResultSet $resultSet) + { + $this->_currentResultSet = $resultSet; + + $this->_nextScrollId = null; + if ($resultSet->getResponse()->isOk()) { + $this->_nextScrollId = $resultSet->getResponse()->getScrollId(); + } + } + + /** + * Save all search options manipulated by Scroll. + */ + protected function _saveOptions() + { + if ($this->_search->hasOption(Search::OPTION_SCROLL)) { + $this->_options[0] = $this->_search->getOption(Search::OPTION_SCROLL); + } + + if ($this->_search->hasOption(Search::OPTION_SCROLL_ID)) { + $this->_options[1] = $this->_search->getOption(Search::OPTION_SCROLL_ID); + } + + if ($this->_search->hasOption(Search::OPTION_SEARCH_TYPE)) { + $this->_options[2] = $this->_search->getOption(Search::OPTION_SEARCH_TYPE); + } + } + + /** + * Revert search options to previously saved state. + */ + protected function _revertOptions() + { + $this->_search->setOption(Search::OPTION_SCROLL, $this->_options[0]); + $this->_search->setOption(Search::OPTION_SCROLL_ID, $this->_options[1]); + $this->_search->setOption(Search::OPTION_SEARCH_TYPE, $this->_options[2]); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Search.php b/vendor/ruflin/elastica/lib/Elastica/Search.php new file mode 100644 index 00000000..7306eb75 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Search.php @@ -0,0 +1,553 @@ + + */ +class Search +{ + /* + * Options + */ + const OPTION_SEARCH_TYPE = 'search_type'; + const OPTION_ROUTING = 'routing'; + const OPTION_PREFERENCE = 'preference'; + const OPTION_VERSION = 'version'; + const OPTION_TIMEOUT = 'timeout'; + const OPTION_FROM = 'from'; + const OPTION_SIZE = 'size'; + const OPTION_SCROLL = 'scroll'; + const OPTION_SCROLL_ID = 'scroll_id'; + const OPTION_QUERY_CACHE = 'query_cache'; + + /* + * Search types + */ + const OPTION_SEARCH_TYPE_COUNT = 'count'; + const OPTION_SEARCH_TYPE_SCAN = 'scan'; + const OPTION_SEARCH_TYPE_DFS_QUERY_THEN_FETCH = 'dfs_query_then_fetch'; + const OPTION_SEARCH_TYPE_DFS_QUERY_AND_FETCH = 'dfs_query_and_fetch'; + const OPTION_SEARCH_TYPE_QUERY_THEN_FETCH = 'query_then_fetch'; + const OPTION_SEARCH_TYPE_QUERY_AND_FETCH = 'query_and_fetch'; + const OPTION_SEARCH_TYPE_SUGGEST = 'suggest'; + const OPTION_SEARCH_TYPE_SCROLL = 'scroll'; + const OPTION_SEARCH_IGNORE_UNAVAILABLE = 'ignore_unavailable'; + + /** + * Array of indices. + * + * @var array + */ + protected $_indices = array(); + + /** + * Array of types. + * + * @var array + */ + protected $_types = array(); + + /** + * @var \Elastica\Query + */ + protected $_query; + + /** + * @var array + */ + protected $_options = array(); + + /** + * Client object. + * + * @var \Elastica\Client + */ + protected $_client; + + /** + * Constructs search object. + * + * @param \Elastica\Client $client Client object + */ + public function __construct(Client $client) + { + $this->_client = $client; + } + + /** + * Adds a index to the list. + * + * @param \Elastica\Index|string $index Index object or string + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function addIndex($index) + { + if ($index instanceof Index) { + $index = $index->getName(); + } + + if (!is_scalar($index)) { + throw new InvalidException('Invalid param type'); + } + + $this->_indices[] = (string) $index; + + return $this; + } + + /** + * Add array of indices at once. + * + * @param array $indices + * + * @return $this + */ + public function addIndices(array $indices = array()) + { + foreach ($indices as $index) { + $this->addIndex($index); + } + + return $this; + } + + /** + * Adds a type to the current search. + * + * @param \Elastica\Type|string $type Type name or object + * + * @throws \Elastica\Exception\InvalidException + * + * @return $this + */ + public function addType($type) + { + if ($type instanceof Type) { + $type = $type->getName(); + } + + if (!is_string($type)) { + throw new InvalidException('Invalid type type'); + } + + $this->_types[] = $type; + + return $this; + } + + /** + * Add array of types. + * + * @param array $types + * + * @return $this + */ + public function addTypes(array $types = array()) + { + foreach ($types as $type) { + $this->addType($type); + } + + return $this; + } + + /** + * @param string|array|\Elastica\Query|\Elastica\Suggest|\Elastica\Query\AbstractQuery|\Elastica\Filter\AbstractFilter $query| + * + * @return $this + */ + public function setQuery($query) + { + $this->_query = Query::create($query); + + return $this; + } + + /** + * @param string $key + * @param mixed $value + * + * @return $this + */ + public function setOption($key, $value) + { + $this->_validateOption($key); + + $this->_options[$key] = $value; + + return $this; + } + + /** + * @param array $options + * + * @return $this + */ + public function setOptions(array $options) + { + $this->clearOptions(); + + foreach ($options as $key => $value) { + $this->setOption($key, $value); + } + + return $this; + } + + /** + * @return $this + */ + public function clearOptions() + { + $this->_options = array(); + + return $this; + } + + /** + * @param string $key + * @param mixed $value + * + * @return $this + */ + public function addOption($key, $value) + { + $this->_validateOption($key); + + if (!isset($this->_options[$key])) { + $this->_options[$key] = array(); + } + + $this->_options[$key][] = $value; + + return $this; + } + + /** + * @param string $key + * + * @return bool + */ + public function hasOption($key) + { + return isset($this->_options[$key]); + } + + /** + * @param string $key + * + * @throws \Elastica\Exception\InvalidException + * + * @return mixed + */ + public function getOption($key) + { + if (!$this->hasOption($key)) { + throw new InvalidException('Option '.$key.' does not exist'); + } + + return $this->_options[$key]; + } + + /** + * @return array + */ + public function getOptions() + { + return $this->_options; + } + + /** + * @param string $key + * + * @throws \Elastica\Exception\InvalidException + * + * @return bool + */ + protected function _validateOption($key) + { + switch ($key) { + case self::OPTION_SEARCH_TYPE: + case self::OPTION_ROUTING: + case self::OPTION_PREFERENCE: + case self::OPTION_VERSION: + case self::OPTION_TIMEOUT: + case self::OPTION_FROM: + case self::OPTION_SIZE: + case self::OPTION_SCROLL: + case self::OPTION_SCROLL_ID: + case self::OPTION_SEARCH_TYPE_SUGGEST: + case self::OPTION_SEARCH_IGNORE_UNAVAILABLE: + case self::OPTION_QUERY_CACHE: + return true; + } + + throw new InvalidException('Invalid option '.$key); + } + + /** + * Return client object. + * + * @return \Elastica\Client Client object + */ + public function getClient() + { + return $this->_client; + } + + /** + * Return array of indices. + * + * @return array List of index names + */ + public function getIndices() + { + return $this->_indices; + } + + /** + * @return bool + */ + public function hasIndices() + { + return count($this->_indices) > 0; + } + + /** + * @param Index|string $index + * + * @return bool + */ + public function hasIndex($index) + { + if ($index instanceof Index) { + $index = $index->getName(); + } + + return in_array($index, $this->_indices); + } + + /** + * Return array of types. + * + * @return array List of types + */ + public function getTypes() + { + return $this->_types; + } + + /** + * @return bool + */ + public function hasTypes() + { + return count($this->_types) > 0; + } + + /** + * @param \Elastica\Type|string $type + * + * @return bool + */ + public function hasType($type) + { + if ($type instanceof Type) { + $type = $type->getName(); + } + + return in_array($type, $this->_types); + } + + /** + * @return \Elastica\Query + */ + public function getQuery() + { + if (null === $this->_query) { + $this->_query = Query::create(''); + } + + return $this->_query; + } + + /** + * Creates new search object. + * + * @param \Elastica\SearchableInterface $searchObject + * + * @return Search + */ + public static function create(SearchableInterface $searchObject) + { + return $searchObject->createSearch(); + } + + /** + * Combines indices and types to the search request path. + * + * @return string Search path + */ + public function getPath() + { + if (isset($this->_options[self::OPTION_SCROLL_ID])) { + return '_search/scroll'; + } + + $indices = $this->getIndices(); + + $path = ''; + $types = $this->getTypes(); + + if (empty($indices)) { + if (!empty($types)) { + $path .= '_all'; + } + } else { + $path .= implode(',', $indices); + } + + if (!empty($types)) { + $path .= '/'.implode(',', $types); + } + + // Add full path based on indices and types -> could be all + return $path.'/_search'; + } + + /** + * Search in the set indices, types. + * + * @param mixed $query + * @param int|array $options OPTIONAL Limit or associative array of options (option=>value) + * + * @throws \Elastica\Exception\InvalidException + * + * @return \Elastica\ResultSet + */ + public function search($query = '', $options = null) + { + $this->setOptionsAndQuery($options, $query); + + $query = $this->getQuery(); + $path = $this->getPath(); + + $params = $this->getOptions(); + + // Send scroll_id via raw HTTP body to handle cases of very large (> 4kb) ids. + if ('_search/scroll' == $path) { + $data = $params[self::OPTION_SCROLL_ID]; + unset($params[self::OPTION_SCROLL_ID]); + } else { + $data = $query->toArray(); + } + + $response = $this->getClient()->request( + $path, + Request::GET, + $data, + $params + ); + + return ResultSet::create($response, $query); + } + + /** + * @param mixed $query + * @param $fullResult (default = false) By default only the total hit count is returned. If set to true, the full ResultSet including aggregations is returned. + * + * @return int|ResultSet + */ + public function count($query = '', $fullResult = false) + { + $this->setOptionsAndQuery(null, $query); + + $query = $this->getQuery(); + $path = $this->getPath(); + + $response = $this->getClient()->request( + $path, + Request::GET, + $query->toArray(), + array(self::OPTION_SEARCH_TYPE => self::OPTION_SEARCH_TYPE_COUNT) + ); + $resultSet = ResultSet::create($response, $query); + + return $fullResult ? $resultSet : $resultSet->getTotalHits(); + } + + /** + * @param array|int $options + * @param string|array|\Elastica\Query $query + * + * @return $this + */ + public function setOptionsAndQuery($options = null, $query = '') + { + if ('' != $query) { + $this->setQuery($query); + } + + if (is_int($options)) { + $this->getQuery()->setSize($options); + } elseif (is_array($options)) { + if (isset($options['limit'])) { + $this->getQuery()->setSize($options['limit']); + unset($options['limit']); + } + if (isset($options['explain'])) { + $this->getQuery()->setExplain($options['explain']); + unset($options['explain']); + } + $this->setOptions($options); + } + + return $this; + } + + /** + * @param Suggest $suggest + * + * @return $this + */ + public function setSuggest(Suggest $suggest) + { + return $this->setOptionsAndQuery(array(self::OPTION_SEARCH_TYPE_SUGGEST => 'suggest'), $suggest); + } + + /** + * Returns the Scroll Iterator. + * + * @see Elastica\Scroll + * + * @param string $expiryTime + * + * @return Scroll + */ + public function scroll($expiryTime = '1m') + { + return new Scroll($this, $expiryTime); + } + + /** + * Returns the ScanAndScroll Iterator. + * + * @see Elastica\ScanAndScroll + * + * @param string $expiryTime + * @param int $sizePerShard + * + * @return ScanAndScroll + */ + public function scanAndScroll($expiryTime = '1m', $sizePerShard = 1000) + { + return new ScanAndScroll($this, $expiryTime, $sizePerShard); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/SearchableInterface.php b/vendor/ruflin/elastica/lib/Elastica/SearchableInterface.php new file mode 100644 index 00000000..abfacb85 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/SearchableInterface.php @@ -0,0 +1,52 @@ + + */ +interface SearchableInterface +{ + /** + * Searches results for a query. + * + * TODO: Improve sample code + * { + * "from" : 0, + * "size" : 10, + * "sort" : { + * "postDate" : {"reverse" : true}, + * "user" : { }, + * "_score" : { } + * }, + * "query" : { + * "term" : { "user" : "kimchy" } + * } + * } + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * + * @return \Elastica\ResultSet ResultSet with all results inside + */ + public function search($query = '', $options = null); + + /** + * Counts results for a query. + * + * If no query is set, matchall query is created + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * + * @return int number of documents matching the query + */ + public function count($query = ''); + + /** + * @param \Elastica\Query $query + * @param array $options + * + * @return \Elastica\Search + */ + public function createSearch($query = '', $options = null); +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Snapshot.php b/vendor/ruflin/elastica/lib/Elastica/Snapshot.php new file mode 100644 index 00000000..80924b79 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Snapshot.php @@ -0,0 +1,176 @@ +_client = $client; + } + + /** + * Register a snapshot repository. + * + * @param string $name the name of the repository + * @param string $type the repository type ("fs" for file system) + * @param array $settings Additional repository settings. If type "fs" is used, the "location" setting must be provided. + * + * @return Response + */ + public function registerRepository($name, $type, $settings = array()) + { + $data = array( + 'type' => $type, + 'settings' => $settings, + ); + + return $this->request($name, Request::PUT, $data); + } + + /** + * Retrieve a repository record by name. + * + * @param string $name the name of the desired repository + * + * @throws Exception\ResponseException + * @throws Exception\NotFoundException + * + * @return array + */ + public function getRepository($name) + { + try { + $response = $this->request($name); + } catch (ResponseException $e) { + if ($e->getResponse()->getStatus() == 404) { + throw new NotFoundException("Repository '".$name."' does not exist."); + } + throw $e; + } + $data = $response->getData(); + + return $data[$name]; + } + + /** + * Retrieve all repository records. + * + * @return array + */ + public function getAllRepositories() + { + return $this->request('_all')->getData(); + } + + /** + * Create a new snapshot. + * + * @param string $repository the name of the repository in which this snapshot should be stored + * @param string $name the name of this snapshot + * @param array $options optional settings for this snapshot + * @param bool $waitForCompletion if true, the request will not return until the snapshot operation is complete + * + * @return Response + */ + public function createSnapshot($repository, $name, $options = array(), $waitForCompletion = false) + { + return $this->request($repository.'/'.$name, Request::PUT, $options, array('wait_for_completion' => $waitForCompletion)); + } + + /** + * Retrieve data regarding a specific snapshot. + * + * @param string $repository the name of the repository from which to retrieve the snapshot + * @param string $name the name of the desired snapshot + * + * @throws Exception\ResponseException + * @throws Exception\NotFoundException + * + * @return array + */ + public function getSnapshot($repository, $name) + { + try { + $response = $this->request($repository.'/'.$name); + } catch (ResponseException $e) { + if ($e->getResponse()->getStatus() == 404) { + throw new NotFoundException("Snapshot '".$name."' does not exist in repository '".$repository."'."); + } + throw $e; + } + $data = $response->getData(); + + return $data['snapshots'][0]; + } + + /** + * Retrieve data regarding all snapshots in the given repository. + * + * @param string $repository the repository name + * + * @return array + */ + public function getAllSnapshots($repository) + { + return $this->request($repository.'/_all')->getData(); + } + + /** + * Delete a snapshot. + * + * @param string $repository the repository in which the snapshot resides + * @param string $name the name of the snapshot to be deleted + * + * @return Response + */ + public function deleteSnapshot($repository, $name) + { + return $this->request($repository.'/'.$name, Request::DELETE); + } + + /** + * Restore a snapshot. + * + * @param string $repository the name of the repository + * @param string $name the name of the snapshot + * @param array $options options for the restore operation + * @param bool $waitForCompletion if true, the request will not return until the restore operation is complete + * + * @return Response + */ + public function restoreSnapshot($repository, $name, $options = array(), $waitForCompletion = false) + { + return $this->request($repository.'/'.$name.'/_restore', Request::POST, $options, array('wait_for_completion' => $waitForCompletion)); + } + + /** + * Perform a snapshot request. + * + * @param string $path the URL + * @param string $method the HTTP method + * @param array $data request body data + * @param array $query query string parameters + * + * @return Response + */ + public function request($path, $method = Request::GET, $data = array(), array $query = array()) + { + return $this->_client->request('/_snapshot/'.$path, $method, $data, $query); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Status.php b/vendor/ruflin/elastica/lib/Elastica/Status.php new file mode 100644 index 00000000..c22a5f61 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Status.php @@ -0,0 +1,177 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-status.html + */ +class Status +{ + /** + * Contains all status infos. + * + * @var \Elastica\Response Response object + */ + protected $_response = null; + + /** + * Data. + * + * @var array Data + */ + protected $_data = array(); + + /** + * Client object. + * + * @var \Elastica\Client Client object + */ + protected $_client = null; + + /** + * Constructs Status object. + * + * @param \Elastica\Client $client Client object + */ + public function __construct(Client $client) + { + $this->_client = $client; + $this->refresh(); + } + + /** + * Returns status data. + * + * @return array Status data + */ + public function getData() + { + return $this->_data; + } + + /** + * Returns status objects of all indices. + * + * @return array|\Elastica\Index\Status[] List of Elastica\Client\Index objects + */ + public function getIndexStatuses() + { + $statuses = array(); + foreach ($this->getIndexNames() as $name) { + $index = new Index($this->_client, $name); + $statuses[] = new IndexStatus($index); + } + + return $statuses; + } + + /** + * Returns a list of the existing index names. + * + * @return array Index names list + */ + public function getIndexNames() + { + return array_keys($this->_data['indices']); + } + + /** + * Checks if the given index exists. + * + * @param string $name Index name to check + * + * @return bool True if index exists + */ + public function indexExists($name) + { + return in_array($name, $this->getIndexNames()); + } + + /** + * Checks if the given alias exists. + * + * @param string $name Alias name + * + * @return bool True if alias exists + */ + public function aliasExists($name) + { + return count($this->getIndicesWithAlias($name)) > 0; + } + + /** + * Returns an array with all indices that the given alias name points to. + * + * @param string $alias Alias name + * + * @return array|\Elastica\Index[] List of Elastica\Index + */ + public function getIndicesWithAlias($alias) + { + $response = null; + try { + $response = $this->_client->request('/_alias/'.$alias); + } catch (ResponseException $e) { + $transferInfo = $e->getResponse()->getTransferInfo(); + // 404 means the index alias doesn't exist which means no indexes have it. + if ($transferInfo['http_code'] === 404) { + return array(); + } + // If we don't have a 404 then this is still unexpected so rethrow the exception. + throw $e; + } + $indices = array(); + foreach ($response->getData() as $name => $unused) { + $indices[] = new Index($this->_client, $name); + } + + return $indices; + } + + /** + * Returns response object. + * + * @return \Elastica\Response Response object + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Return shards info. + * + * @return array Shards info + */ + public function getShards() + { + return $this->_data['shards']; + } + + /** + * Refresh status object. + */ + public function refresh() + { + $path = '_status'; + $this->_response = $this->_client->request($path, Request::GET); + $this->_data = $this->getResponse()->getData(); + } + + /** + * Refresh serverStatus object. + */ + public function getServerStatus() + { + $path = ''; + $response = $this->_client->request($path, Request::GET); + + return $response->getData(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Suggest.php b/vendor/ruflin/elastica/lib/Elastica/Suggest.php new file mode 100644 index 00000000..73b1ea36 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Suggest.php @@ -0,0 +1,65 @@ +addSuggestion($suggestion); + } + } + + /** + * Set the global text for this suggester. + * + * @param string $text + * + * @return $this + */ + public function setGlobalText($text) + { + return $this->setParam('text', $text); + } + + /** + * Add a suggestion to this suggest clause. + * + * @param AbstractSuggest $suggestion + * + * @return $this + */ + public function addSuggestion(AbstractSuggest $suggestion) + { + return $this->setParam($suggestion->getName(), $suggestion->toArray()); + } + + /** + * @param Suggest|AbstractSuggest $suggestion + * + * @throws Exception\NotImplementedException + * + * @return self + */ + public static function create($suggestion) + { + switch (true) { + case $suggestion instanceof self: + return $suggestion; + case $suggestion instanceof AbstractSuggest: + return new self($suggestion); + } + throw new NotImplementedException(); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Suggest/AbstractSuggest.php b/vendor/ruflin/elastica/lib/Elastica/Suggest/AbstractSuggest.php new file mode 100644 index 00000000..00f21e44 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Suggest/AbstractSuggest.php @@ -0,0 +1,97 @@ +_name = $name; + $this->setField($field); + } + + /** + * Suggest text must be set either globally or per suggestion. + * + * @param string $text + * + * @return $this + */ + public function setText($text) + { + $this->_text = $text; + + return $this; + } + + /** + * @param string $field + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * @param int $size + * + * @return $this + */ + public function setSize($size) + { + return $this->setParam('size', $size); + } + + /** + * @param int $size maximum number of suggestions to be retrieved from each shard + * + * @return $this + */ + public function setShardSize($size) + { + return $this->setParam('shard_size', $size); + } + + /** + * Retrieve the name of this suggestion. + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * @return array + */ + public function toArray() + { + $array = parent::toArray(); + if (isset($this->_text)) { + $array['text'] = $this->_text; + } + + return $array; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Suggest/CandidateGenerator/AbstractCandidateGenerator.php b/vendor/ruflin/elastica/lib/Elastica/Suggest/CandidateGenerator/AbstractCandidateGenerator.php new file mode 100644 index 00000000..6fba49db --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Suggest/CandidateGenerator/AbstractCandidateGenerator.php @@ -0,0 +1,8 @@ +setField($field); + } + + /** + * Set the field name from which to fetch candidate suggestions. + * + * @param string $field + * + * @return $this + */ + public function setField($field) + { + return $this->setParam('field', $field); + } + + /** + * Set the maximum corrections to be returned per suggest text token. + * + * @param int $size + * + * @return $this + */ + public function setSize($size) + { + return $this->setParam('size', $size); + } + + /** + * @param string $mode see SUGGEST_MODE_* constants for options + * + * @return $this + */ + public function setSuggestMode($mode) + { + return $this->setParam('suggest_mode', $mode); + } + + /** + * @param int $max can only be a value between 1 and 2. Defaults to 2. + * + * @return $this + */ + public function setMaxEdits($max) + { + return $this->setParam('max_edits', $max); + } + + /** + * @param int $length defaults to 1 + * + * @return $this + */ + public function setPrefixLength($length) + { + return $this->setParam('prefix_len', $length); + } + + /** + * @param int $min defaults to 4 + * + * @return $this + */ + public function setMinWordLength($min) + { + return $this->setParam('min_word_len', $min); + } + + /** + * @param int $max + * + * @return $this + */ + public function setMaxInspections($max) + { + return $this->setParam('max_inspections', $max); + } + + /** + * @param float $min + * + * @return $this + */ + public function setMinDocFrequency($min) + { + return $this->setParam('min_doc_freq', $min); + } + + /** + * @param float $max + * + * @return $this + */ + public function setMaxTermFrequency($max) + { + return $this->setParam('max_term_freq', $max); + } + + /** + * Set an analyzer to be applied to the original token prior to candidate generation. + * + * @param string $pre an analyzer + * + * @return $this + */ + public function setPreFilter($pre) + { + return $this->setParam('pre_filter', $pre); + } + + /** + * Set an analyzer to be applied to generated tokens before they are passed to the phrase scorer. + * + * @param string $post + * + * @return $this + */ + public function setPostFilter($post) + { + return $this->setParam('post_filter', $post); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Suggest/Completion.php b/vendor/ruflin/elastica/lib/Elastica/Suggest/Completion.php new file mode 100644 index 00000000..0f0b3e61 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Suggest/Completion.php @@ -0,0 +1,26 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html + */ +class Completion extends AbstractSuggest +{ + /** + * Set fuzzy parameter. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html#fuzzy + * + * @param array $fuzzy + * + * @return $this + */ + public function setFuzzy(array $fuzzy) + { + return $this->setParam('fuzzy', $fuzzy); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Suggest/Phrase.php b/vendor/ruflin/elastica/lib/Elastica/Suggest/Phrase.php new file mode 100644 index 00000000..544f3678 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Suggest/Phrase.php @@ -0,0 +1,164 @@ +setParam('analyzer', $analyzer); + } + + /** + * Set the max size of the n-grams (shingles) in the field. + * + * @param int $size + * + * @return $this + */ + public function setGramSize($size) + { + return $this->setParam('gram_size', $size); + } + + /** + * Set the likelihood of a term being misspelled even if the term exists in the dictionary. + * + * @param float $likelihood Defaults to 0.95, meaning 5% of the words are misspelled. + * + * @return $this + */ + public function setRealWordErrorLikelihood($likelihood) + { + return $this->setParam('real_word_error_likelihood', $likelihood); + } + + /** + * Set the factor applied to the input phrases score to be used as a threshold for other suggestion candidates. + * Only candidates which score higher than this threshold will be included in the result. + * + * @param float $confidence Defaults to 1.0. + * + * @return $this + */ + public function setConfidence($confidence) + { + return $this->setParam('confidence', $confidence); + } + + /** + * Set the maximum percentage of the terms considered to be misspellings in order to form a correction. + * + * @param float $max + * + * @return $this + */ + public function setMaxErrors($max) + { + return $this->setParam('max_errors', $max); + } + + /** + * @param string $separator + * + * @return $this + */ + public function setSeparator($separator) + { + return $this->setParam('separator', $separator); + } + + /** + * Set suggestion highlighting. + * + * @param string $preTag + * @param string $postTag + * + * @return $this + */ + public function setHighlight($preTag, $postTag) + { + return $this->setParam('highlight', array( + 'pre_tag' => $preTag, + 'post_tag' => $postTag, + )); + } + + /** + * @param float $discount + * + * @return $this + */ + public function setStupidBackoffSmoothing($discount = 0.4) + { + return $this->setSmoothingModel('stupid_backoff', array( + 'discount' => $discount, + )); + } + + /** + * @param float $alpha + * + * @return $this + */ + public function setLaplaceSmoothing($alpha = 0.5) + { + return $this->setSmoothingModel('laplace', array( + 'alpha' => $alpha, + )); + } + + /** + * @param float $trigramLambda + * @param float $bigramLambda + * @param float $unigramLambda + * + * @return $this + */ + public function setLinearInterpolationSmoothing($trigramLambda, $bigramLambda, $unigramLambda) + { + return $this->setSmoothingModel('linear_interpolation', array( + 'trigram_lambda' => $trigramLambda, + 'bigram_lambda' => $bigramLambda, + 'unigram_lambda' => $unigramLambda, + )); + } + + /** + * @param string $model the name of the smoothing model + * @param array $params + * + * @return $this + */ + public function setSmoothingModel($model, array $params) + { + return $this->setParam('smoothing', array( + $model => $params, + )); + } + + /** + * @param AbstractCandidateGenerator $generator + * + * @return $this + */ + public function addCandidateGenerator(AbstractCandidateGenerator $generator) + { + $generator = $generator->toArray(); + $keys = array_keys($generator); + $values = array_values($generator); + + return $this->addParam($keys[0], $values[0]); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Suggest/Term.php b/vendor/ruflin/elastica/lib/Elastica/Suggest/Term.php new file mode 100644 index 00000000..9f082873 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Suggest/Term.php @@ -0,0 +1,129 @@ +setParam('analyzer', $analyzer); + } + + /** + * @param string $sort see SORT_* constants for options + * + * @return $this + */ + public function setSort($sort) + { + return $this->setParam('sort', $sort); + } + + /** + * @param string $mode see SUGGEST_MODE_* constants for options + * + * @return $this + */ + public function setSuggestMode($mode) + { + return $this->setParam('suggest_mode', $mode); + } + + /** + * If true, suggest terms will be lower cased after text analysis. + * + * @param bool $lowercase + * + * @return $this + */ + public function setLowercaseTerms($lowercase = true) + { + return $this->setParam('lowercase_terms', (bool) $lowercase); + } + + /** + * Set the maximum edit distance candidate suggestions can have in order to be considered as a suggestion. + * + * @param int $max Either 1 or 2. Any other value will result in an error. + * + * @return $this + */ + public function setMaxEdits($max) + { + return $this->setParam('max_edits', (int) $max); + } + + /** + * The number of minimum prefix characters that must match in order to be a suggestion candidate. + * + * @param int $length Defaults to 1. + * + * @return $this + */ + public function setPrefixLength($length) + { + return $this->setParam('prefix_len', (int) $length); + } + + /** + * The minimum length a suggest text term must have in order to be included. + * + * @param int $length Defaults to 4. + * + * @return $this + */ + public function setMinWordLength($length) + { + return $this->setParam('min_word_len', (int) $length); + } + + /** + * @param int $max Defaults to 5. + * + * @return $this + */ + public function setMaxInspections($max) + { + return $this->setParam('max_inspections', $max); + } + + /** + * Set the minimum number of documents in which a suggestion should appear. + * + * @param int|float $min Defaults to 0. If the value is greater than 1, it must be a whole number. + * + * @return $this + */ + public function setMinDocFrequency($min) + { + return $this->setParam('min_doc_freq', $min); + } + + /** + * Set the maximum number of documents in which a suggest text token can exist in order to be included. + * + * @param float $max + * + * @return $this + */ + public function setMaxTermFrequency($max) + { + return $this->setParam('max_term_freq', $max); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Tool/CrossIndex.php b/vendor/ruflin/elastica/lib/Elastica/Tool/CrossIndex.php new file mode 100644 index 00000000..89fc0532 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Tool/CrossIndex.php @@ -0,0 +1,160 @@ + + */ +class CrossIndex +{ + /** + * Type option. + * + * type: string | string[] | \Elastica\Type | \Elastica\Type[] | null + * default: null (means all types) + */ + const OPTION_TYPE = 'type'; + + /** + * Query option. + * + * type: see \Elastica\Query::create() + * default: Elastica\Query\MatchAll + */ + const OPTION_QUERY = 'query'; + + /** + * Expiry time option. + * + * type: string (see Elastica\ScanAndScroll) + * default: '1m' + */ + const OPTION_EXPIRY_TIME = 'expiryTime'; + + /** + * Size per shard option. + * + * type: int (see Elastica\ScanAndScroll) + * default: 1000 + */ + const OPTION_SIZE_PER_SHARD = 'sizePerShard'; + + /** + * Reindex documents from an old index to a new index. + * + * @link https://www.elastic.co/guide/en/elasticsearch/guide/master/reindex.html + * + * @param \Elastica\Index $oldIndex + * @param \Elastica\Index $newIndex + * @param array $options keys: CrossIndex::OPTION_* constants + * + * @return \Elastica\Index The new index object + */ + public static function reindex( + Index $oldIndex, + Index $newIndex, + array $options = array() + ) { + // prepare search + $search = new Search($oldIndex->getClient()); + + $options = array_merge( + array( + self::OPTION_TYPE => null, + self::OPTION_QUERY => new MatchAll(), + self::OPTION_EXPIRY_TIME => '1m', + self::OPTION_SIZE_PER_SHARD => 1000, + ), + $options + ); + + $search->addIndex($oldIndex); + if (isset($options[self::OPTION_TYPE])) { + $type = $options[self::OPTION_TYPE]; + $search->addTypes(is_array($type) ? $type : array($type)); + } + $search->setQuery($options[self::OPTION_QUERY]); + + // search on old index and bulk insert in new index + $scanAndScroll = new ScanAndScroll( + $search, + $options[self::OPTION_EXPIRY_TIME], + $options[self::OPTION_SIZE_PER_SHARD] + ); + foreach ($scanAndScroll as $resultSet) { + $bulk = new Bulk($newIndex->getClient()); + $bulk->setIndex($newIndex); + + foreach ($resultSet as $result) { + $action = new Bulk\Action(); + $action->setType($result->getType()); + $action->setId($result->getId()); + $action->setSource($result->getData()); + + $bulk->addAction($action); + } + + $bulk->send(); + } + + $newIndex->refresh(); + + return $newIndex; + } + + /** + * Copies type mappings and documents from an old index to a new index. + * + * @see \Elastica\Tool\CrossIndex::reindex() + * + * @param \Elastica\Index $oldIndex + * @param \Elastica\Index $newIndex + * @param array $options keys: CrossIndex::OPTION_* constants + * + * @return \Elastica\Index The new index object + */ + public static function copy( + Index $oldIndex, + Index $newIndex, + array $options = array() + ) { + // normalize types to array of string + $types = array(); + if (isset($options[self::OPTION_TYPE])) { + $types = $options[self::OPTION_TYPE]; + $types = is_array($types) ? $types : array($types); + + $types = array_map( + function ($type) { + if ($type instanceof Type) { + $type = $type->getName(); + } + + return (string) $type; + }, + $types + ); + } + + // copy mapping + foreach ($oldIndex->getMapping() as $type => $mapping) { + if (!empty($types) && !in_array($type, $types, true)) { + continue; + } + + $type = new Type($newIndex, $type); + $type->setMapping($mapping['properties']); + } + + // copy documents + return self::reindex($oldIndex, $newIndex, $options); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/AbstractTransport.php b/vendor/ruflin/elastica/lib/Elastica/Transport/AbstractTransport.php new file mode 100644 index 00000000..c40b5107 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/AbstractTransport.php @@ -0,0 +1,113 @@ + + */ +abstract class AbstractTransport extends Param +{ + /** + * @var \Elastica\Connection + */ + protected $_connection; + + /** + * Construct transport. + * + * @param \Elastica\Connection $connection Connection object + */ + public function __construct(Connection $connection = null) + { + if ($connection) { + $this->setConnection($connection); + } + } + + /** + * @return \Elastica\Connection Connection object + */ + public function getConnection() + { + return $this->_connection; + } + + /** + * @param \Elastica\Connection $connection Connection object + * + * @return $this + */ + public function setConnection(Connection $connection) + { + $this->_connection = $connection; + + return $this; + } + + /** + * Executes the transport request. + * + * @param \Elastica\Request $request Request object + * @param array $params Hostname, port, path, ... + * + * @return \Elastica\Response Response object + */ + abstract public function exec(Request $request, array $params); + + /** + * Create a transport. + * + * The $transport parameter can be one of the following values: + * + * * string: The short name of a transport. For instance "Http", "Memcache" or "Thrift" + * * object: An already instantiated instance of a transport + * * array: An array with a "type" key which must be set to one of the two options. All other + * keys in the array will be set as parameters in the transport instance + * + * @param mixed $transport A transport definition + * @param \Elastica\Connection $connection A connection instance + * @param array $params Parameters for the transport class + * + * @throws \Elastica\Exception\InvalidException + * + * @return AbstractTransport + */ + public static function create($transport, Connection $connection, array $params = array()) + { + if (is_array($transport) && isset($transport['type'])) { + $transportParams = $transport; + unset($transportParams['type']); + + $params = array_replace($params, $transportParams); + $transport = $transport['type']; + } + + if (is_string($transport)) { + $className = 'Elastica\\Transport\\'.$transport; + + if (!class_exists($className)) { + throw new InvalidException('Invalid transport'); + } + + $transport = new $className(); + } + + if ($transport instanceof self) { + $transport->setConnection($connection); + + foreach ($params as $key => $value) { + $transport->setParam($key, $value); + } + } else { + throw new InvalidException('Invalid transport'); + } + + return $transport; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/Guzzle.php b/vendor/ruflin/elastica/lib/Elastica/Transport/Guzzle.php new file mode 100644 index 00000000..5c98d83b --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/Guzzle.php @@ -0,0 +1,179 @@ + + */ +class Guzzle extends AbstractTransport +{ + /** + * Http scheme. + * + * @var string Http scheme + */ + protected $_scheme = 'http'; + + /** + * Curl resource to reuse. + * + * @var resource Guzzle resource to reuse + */ + protected static $_guzzleClientConnection = null; + + /** + * Makes calls to the elasticsearch server. + * + * All calls that are made to the server are done through this function + * + * @param \Elastica\Request $request + * @param array $params Host, Port, ... + * + * @throws \Elastica\Exception\ConnectionException + * @throws \Elastica\Exception\ResponseException + * @throws \Elastica\Exception\Connection\HttpException + * + * @return \Elastica\Response Response object + */ + public function exec(Request $request, array $params) + { + $connection = $this->getConnection(); + + $client = $this->_getGuzzleClient($this->_getBaseUrl($connection), $connection->isPersistent()); + + $options = array( + 'exceptions' => false, // 4xx and 5xx is expected and NOT an exceptions in this context + ); + if ($connection->getTimeout()) { + $options['timeout'] = $connection->getTimeout(); + } + + $proxy = $connection->getProxy(); + + // See: https://github.com/facebook/hhvm/issues/4875 + if (is_null($proxy) && defined('HHVM_VERSION')) { + $proxy = getenv('http_proxy') ?: null; + } + + if (!is_null($proxy)) { + $options['proxy'] = $proxy; + } + + $req = $client->createRequest($request->getMethod(), $this->_getActionPath($request), $options); + $req->setHeaders($connection->hasConfig('headers') ? $connection->getConfig('headers') : array()); + + $data = $request->getData(); + if (!empty($data) || '0' === $data) { + if ($req->getMethod() == Request::GET) { + $req->setMethod(Request::POST); + } + + if ($this->hasParam('postWithRequestBody') && $this->getParam('postWithRequestBody') == true) { + $request->setMethod(Request::POST); + $req->setMethod(Request::POST); + } + + if (is_array($data)) { + $content = JSON::stringify($data, 'JSON_ELASTICSEARCH'); + } else { + $content = $data; + } + $req->setBody(Stream::factory($content)); + } + + try { + $start = microtime(true); + $res = $client->send($req); + $end = microtime(true); + } catch (TransferException $ex) { + throw new GuzzleException($ex, $request, new Response($ex->getMessage())); + } + + $response = new Response((string) $res->getBody(), $res->getStatusCode()); + $response->setQueryTime($end - $start); + + $response->setTransferInfo( + array( + 'request_header' => $request->getMethod(), + 'http_code' => $res->getStatusCode(), + ) + ); + + if ($response->hasError()) { + throw new ResponseException($request, $response); + } + + if ($response->hasFailedShards()) { + throw new PartialShardFailureException($request, $response); + } + + return $response; + } + + /** + * Return Guzzle resource. + * + * @param bool $persistent False if not persistent connection + * + * @return resource Connection resource + */ + protected function _getGuzzleClient($baseUrl, $persistent = true) + { + if (!$persistent || !self::$_guzzleClientConnection) { + self::$_guzzleClientConnection = new Client(array('base_url' => $baseUrl)); + } + + return self::$_guzzleClientConnection; + } + + /** + * Builds the base url for the guzzle connection. + * + * @param \Elastica\Connection $connection + */ + protected function _getBaseUrl(Connection $connection) + { + // If url is set, url is taken. Otherwise port, host and path + $url = $connection->hasConfig('url') ? $connection->getConfig('url') : ''; + + if (!empty($url)) { + $baseUri = $url; + } else { + $baseUri = $this->_scheme.'://'.$connection->getHost().':'.$connection->getPort().'/'.$connection->getPath(); + } + + return rtrim($baseUri, '/'); + } + + /** + * Builds the action path url for each request. + * + * @param \Elastica\Request $request + */ + protected function _getActionPath(Request $request) + { + $action = $request->getPath(); + if ($action) { + $action = '/'.ltrim($action, '/'); + } + $query = $request->getQuery(); + + if (!empty($query)) { + $action .= '?'.http_build_query($query); + } + + return $action; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php b/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php new file mode 100644 index 00000000..1a33c0a6 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php @@ -0,0 +1,190 @@ + + */ +class Http extends AbstractTransport +{ + /** + * Http scheme. + * + * @var string Http scheme + */ + protected $_scheme = 'http'; + + /** + * Curl resource to reuse. + * + * @var resource Curl resource to reuse + */ + protected static $_curlConnection = null; + + /** + * Makes calls to the elasticsearch server. + * + * All calls that are made to the server are done through this function + * + * @param \Elastica\Request $request + * @param array $params Host, Port, ... + * + * @throws \Elastica\Exception\ConnectionException + * @throws \Elastica\Exception\ResponseException + * @throws \Elastica\Exception\Connection\HttpException + * + * @return \Elastica\Response Response object + */ + public function exec(Request $request, array $params) + { + $connection = $this->getConnection(); + + $conn = $this->_getConnection($connection->isPersistent()); + + // If url is set, url is taken. Otherwise port, host and path + $url = $connection->hasConfig('url') ? $connection->getConfig('url') : ''; + + if (!empty($url)) { + $baseUri = $url; + } else { + $baseUri = $this->_scheme.'://'.$connection->getHost().':'.$connection->getPort().'/'.$connection->getPath(); + } + + $baseUri .= $request->getPath(); + + $query = $request->getQuery(); + + if (!empty($query)) { + $baseUri .= '?'.http_build_query($query); + } + + curl_setopt($conn, CURLOPT_URL, $baseUri); + curl_setopt($conn, CURLOPT_TIMEOUT, $connection->getTimeout()); + curl_setopt($conn, CURLOPT_FORBID_REUSE, 0); + + /* @see Connection::setConnectTimeout() */ + $connectTimeout = $connection->getConnectTimeout(); + if ($connectTimeout > 0) { + curl_setopt($conn, CURLOPT_CONNECTTIMEOUT, $connectTimeout); + } + + $proxy = $connection->getProxy(); + + // See: https://github.com/facebook/hhvm/issues/4875 + if (is_null($proxy) && defined('HHVM_VERSION')) { + $proxy = getenv('http_proxy') ?: null; + } + + if (!is_null($proxy)) { + curl_setopt($conn, CURLOPT_PROXY, $proxy); + } + + $this->_setupCurl($conn); + + $headersConfig = $connection->hasConfig('headers') ? $connection->getConfig('headers') : array(); + + if (!empty($headersConfig)) { + $headers = array(); + while (list($header, $headerValue) = each($headersConfig)) { + array_push($headers, $header.': '.$headerValue); + } + + curl_setopt($conn, CURLOPT_HTTPHEADER, $headers); + } + + // TODO: REFACTOR + $data = $request->getData(); + $httpMethod = $request->getMethod(); + + if (!empty($data) || '0' === $data) { + if ($this->hasParam('postWithRequestBody') && $this->getParam('postWithRequestBody') == true) { + $httpMethod = Request::POST; + } + + if (is_array($data)) { + $content = JSON::stringify($data, 'JSON_ELASTICSEARCH'); + } else { + $content = $data; + } + + // Escaping of / not necessary. Causes problems in base64 encoding of files + $content = str_replace('\/', '/', $content); + + curl_setopt($conn, CURLOPT_POSTFIELDS, $content); + } else { + curl_setopt($conn, CURLOPT_POSTFIELDS, ''); + } + + curl_setopt($conn, CURLOPT_NOBODY, $httpMethod == 'HEAD'); + + curl_setopt($conn, CURLOPT_CUSTOMREQUEST, $httpMethod); + + $start = microtime(true); + + // cURL opt returntransfer leaks memory, therefore OB instead. + ob_start(); + curl_exec($conn); + $responseString = ob_get_clean(); + + $end = microtime(true); + + // Checks if error exists + $errorNumber = curl_errno($conn); + + $response = new Response($responseString, curl_getinfo($conn, CURLINFO_HTTP_CODE)); + $response->setQueryTime($end - $start); + $response->setTransferInfo(curl_getinfo($conn)); + + if ($response->hasError()) { + throw new ResponseException($request, $response); + } + + if ($response->hasFailedShards()) { + throw new PartialShardFailureException($request, $response); + } + + if ($errorNumber > 0) { + throw new HttpException($errorNumber, $request, $response); + } + + return $response; + } + + /** + * Called to add additional curl params. + * + * @param resource $curlConnection Curl connection + */ + protected function _setupCurl($curlConnection) + { + if ($this->getConnection()->hasConfig('curl')) { + foreach ($this->getConnection()->getConfig('curl') as $key => $param) { + curl_setopt($curlConnection, $key, $param); + } + } + } + + /** + * Return Curl resource. + * + * @param bool $persistent False if not persistent connection + * + * @return resource Connection resource + */ + protected function _getConnection($persistent = true) + { + if (!$persistent || !self::$_curlConnection) { + self::$_curlConnection = curl_init(); + } + + return self::$_curlConnection; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/HttpAdapter.php b/vendor/ruflin/elastica/lib/Elastica/Transport/HttpAdapter.php new file mode 100644 index 00000000..efc27ab5 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/HttpAdapter.php @@ -0,0 +1,156 @@ +httpAdapter = $httpAdapter; + } + + /** + * Makes calls to the elasticsearch server. + * + * All calls that are made to the server are done through this function + * + * @param \Elastica\Request $elasticaRequest + * @param array $params Host, Port, ... + * + * @throws \Elastica\Exception\ConnectionException + * @throws \Elastica\Exception\ResponseException + * @throws \Elastica\Exception\Connection\HttpException + * + * @return \Elastica\Response Response object + */ + public function exec(ElasticaRequest $elasticaRequest, array $params) + { + $connection = $this->getConnection(); + + if ($timeout = $connection->getTimeout()) { + $this->httpAdapter->getConfiguration()->setTimeout($timeout); + } + + $httpAdapterRequest = $this->_createHttpAdapterRequest($elasticaRequest, $connection); + + $start = microtime(true); + $httpAdapterResponse = $this->httpAdapter->sendRequest($httpAdapterRequest); + $end = microtime(true); + + $elasticaResponse = $this->_createElasticaResponse($httpAdapterResponse, $connection); + $elasticaResponse->setQueryTime($end - $start); + + $elasticaResponse->setTransferInfo( + array( + 'request_header' => $httpAdapterRequest->getMethod(), + 'http_code' => $httpAdapterResponse->getStatusCode(), + ) + ); + + if ($elasticaResponse->hasError()) { + throw new ResponseException($elasticaRequest, $elasticaResponse); + } + + if ($elasticaResponse->hasFailedShards()) { + throw new PartialShardFailureException($elasticaRequest, $elasticaResponse); + } + + return $elasticaResponse; + } + + /** + * @param HttpAdapterResponse $httpAdapterResponse + * + * @return ElasticaResponse + */ + protected function _createElasticaResponse(HttpAdapterResponse $httpAdapterResponse) + { + return new ElasticaResponse((string) $httpAdapterResponse->getBody(), $httpAdapterResponse->getStatusCode()); + } + + /** + * @param ElasticaRequest $elasticaRequest + * @param Connection $connection + * + * @return HttpAdapterRequest + */ + protected function _createHttpAdapterRequest(ElasticaRequest $elasticaRequest, Connection $connection) + { + $data = $elasticaRequest->getData(); + $body = null; + $method = $elasticaRequest->getMethod(); + $headers = $connection->hasConfig('headers') ?: array(); + if (!empty($data) || '0' === $data) { + if ($method == ElasticaRequest::GET) { + $method = ElasticaRequest::POST; + } + + if ($this->hasParam('postWithRequestBody') && $this->getParam('postWithRequestBody') == true) { + $elasticaRequest->setMethod(ElasticaRequest::POST); + $method = ElasticaRequest::POST; + } + + if (is_array($data)) { + $body = JSON::stringify($data, 'JSON_ELASTICSEARCH'); + } else { + $body = $data; + } + } + + $url = $this->_getUri($elasticaRequest, $connection); + $streamBody = new StringStream($body); + + return new HttpAdapterRequest($url, $method, HttpAdapterRequest::PROTOCOL_VERSION_1_1, $headers, $streamBody); + } + + /** + * @param ElasticaRequest $request + * @param \Elastica\Connection $connection + * + * @return string + */ + protected function _getUri(ElasticaRequest $request, Connection $connection) + { + $url = $connection->hasConfig('url') ? $connection->getConfig('url') : ''; + + if (!empty($url)) { + $baseUri = $url; + } else { + $baseUri = $this->_scheme.'://'.$connection->getHost().':'.$connection->getPort().'/'.$connection->getPath(); + } + + $baseUri .= $request->getPath(); + + $query = $request->getQuery(); + + if (!empty($query)) { + $baseUri .= '?'.http_build_query($query); + } + + return $baseUri; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/Https.php b/vendor/ruflin/elastica/lib/Elastica/Transport/Https.php new file mode 100644 index 00000000..b2b489dd --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/Https.php @@ -0,0 +1,27 @@ + + */ +class Https extends Http +{ + /** + * Https scheme. + * + * @var string https scheme + */ + protected $_scheme = 'https'; + + /** + * Overloads setupCurl to set SSL params. + * + * @param resource $connection Curl connection resource + */ + protected function _setupCurl($connection) + { + parent::_setupCurl($connection); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/Memcache.php b/vendor/ruflin/elastica/lib/Elastica/Transport/Memcache.php new file mode 100644 index 00000000..fb56cdf4 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/Memcache.php @@ -0,0 +1,109 @@ + + * + * @deprecated The memcached transport is deprecated as of ES 1.5, and will be removed in ES 2.0 + */ +class Memcache extends AbstractTransport +{ + const MAX_KEY_LENGTH = 250; + + /** + * Makes calls to the elasticsearch server. + * + * @param \Elastica\Request $request + * @param array $params Host, Port, ... + * + * @throws \Elastica\Exception\ResponseException + * @throws \Elastica\Exception\InvalidException + * + * @return \Elastica\Response Response object + */ + public function exec(Request $request, array $params) + { + $memcache = new \Memcache(); + $memcache->connect($this->getConnection()->getHost(), $this->getConnection()->getPort()); + + $data = $request->getData(); + + $content = ''; + + if (!empty($data) || '0' === $data) { + if (is_array($data)) { + $content = JSON::stringify($data); + } else { + $content = $data; + } + + // Escaping of / not necessary. Causes problems in base64 encoding of files + $content = str_replace('\/', '/', $content); + } + + $responseString = ''; + + $start = microtime(true); + + switch ($request->getMethod()) { + case Request::POST: + case Request::PUT: + $key = $request->getPath(); + $this->_checkKeyLength($key); + $memcache->set($key, $content); + break; + case Request::GET: + $key = $request->getPath().'?source='.$content; + $this->_checkKeyLength($key); + $responseString = $memcache->get($key); + break; + case Request::DELETE: + $key = $request->getPath().'?source='.$content; + $this->_checkKeyLength($key); + $responseString = $memcache->delete($key); + break; + default: + case Request::HEAD: + throw new InvalidException('Method '.$request->getMethod().' is not supported in memcache transport'); + } + + $end = microtime(true); + + $response = new Response($responseString); + $response->setQueryTime($end - $start); + + if ($response->hasError()) { + throw new ResponseException($request, $response); + } + + if ($response->hasFailedShards()) { + throw new PartialShardFailureException($request, $response); + } + + return $response; + } + + /** + * Check if key that will be used dont exceed 250 symbols. + * + * @param string $key + * + * @throws Elastica\Exception\Connection\MemcacheException If key is too long + */ + private function _checkKeyLength($key) + { + if (strlen($key) >= self::MAX_KEY_LENGTH) { + throw new MemcacheException('Memcache key is too long'); + } + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/Null.php b/vendor/ruflin/elastica/lib/Elastica/Transport/Null.php new file mode 100644 index 00000000..70dd9af1 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/Null.php @@ -0,0 +1,13 @@ + + */ +class Null extends NullTransport +{ +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/NullTransport.php b/vendor/ruflin/elastica/lib/Elastica/Transport/NullTransport.php new file mode 100644 index 00000000..d24f2110 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/NullTransport.php @@ -0,0 +1,46 @@ + + */ +class NullTransport extends AbstractTransport +{ + /** + * Null transport. + * + * @param \Elastica\Request $request + * @param array $params Hostname, port, path, ... + * + * @return \Elastica\Response Response empty object + */ + public function exec(Request $request, array $params) + { + $response = array( + 'took' => 0, + 'timed_out' => false, + '_shards' => array( + 'total' => 0, + 'successful' => 0, + 'failed' => 0, + ), + 'hits' => array( + 'total' => 0, + 'max_score' => null, + 'hits' => array(), + ), + 'params' => $params, + ); + + return new Response(JSON::stringify($response)); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Transport/Thrift.php b/vendor/ruflin/elastica/lib/Elastica/Transport/Thrift.php new file mode 100644 index 00000000..5790f665 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Transport/Thrift.php @@ -0,0 +1,176 @@ + + * + * @deprecated The thrift transport is deprecated as of ES 1.5, and will be removed in ES 2.0 + */ +class Thrift extends AbstractTransport +{ + /** + * @var RestClient[] + */ + protected $_clients = array(); + + /** + * Construct transport. + * + * @param \Elastica\Connection $connection Connection object + * + * @throws \Elastica\Exception\RuntimeException + */ + public function __construct(Connection $connection = null) + { + parent::__construct($connection); + if (!class_exists('Elasticsearch\\RestClient')) { + throw new RuntimeException('Elasticsearch\\RestClient class not found. Check that suggested package munkie/elasticsearch-thrift-php is required in composer.json'); + } + } + + /** + * @param string $host + * @param int $port + * @param int $sendTimeout msec + * @param int $recvTimeout msec + * @param bool $framedTransport + * + * @return \Elasticsearch\RestClient + */ + protected function _createClient($host, $port, $sendTimeout = null, $recvTimeout = null, $framedTransport = false) + { + $socket = new TSocket($host, $port, true); + + if (null !== $sendTimeout) { + $socket->setSendTimeout($sendTimeout); + } + + if (null !== $recvTimeout) { + $socket->setRecvTimeout($recvTimeout); + } + + if ($framedTransport) { + $transport = new TFramedTransport($socket); + } else { + $transport = new TBufferedTransport($socket); + } + $protocol = new TBinaryProtocolAccelerated($transport); + + $client = new RestClient($protocol); + + $transport->open(); + + return $client; + } + + /** + * @param string $host + * @param int $port + * @param int $sendTimeout + * @param int $recvTimeout + * @param bool $framedTransport + * + * @return \Elasticsearch\RestClient + */ + protected function _getClient($host, $port, $sendTimeout = null, $recvTimeout = null, $framedTransport = false) + { + $key = $host.':'.$port; + if (!isset($this->_clients[$key])) { + $this->_clients[$key] = $this->_createClient($host, $port, $sendTimeout, $recvTimeout, $framedTransport); + } + + return $this->_clients[$key]; + } + + /** + * Makes calls to the elasticsearch server. + * + * @param \Elastica\Request $request + * @param array $params Host, Port, ... + * + * @throws \Elastica\Exception\Connection\ThriftException + * @throws \Elastica\Exception\ResponseException + * + * @return \Elastica\Response Response object + */ + public function exec(Request $request, array $params) + { + $connection = $this->getConnection(); + + $sendTimeout = $connection->hasConfig('sendTimeout') ? $connection->getConfig('sendTimeout') : null; + $recvTimeout = $connection->hasConfig('recvTimeout') ? $connection->getConfig('recvTimeout') : null; + $framedTransport = $connection->hasConfig('framedTransport') ? (bool) $connection->getConfig('framedTransport') : false; + + try { + $client = $this->_getClient( + $connection->getHost(), + $connection->getPort(), + $sendTimeout, + $recvTimeout, + $framedTransport + ); + + $restRequest = new RestRequest(); + $restRequest->method = array_search($request->getMethod(), Method::$__names); + $restRequest->uri = $request->getPath(); + + $query = $request->getQuery(); + if (!empty($query)) { + $restRequest->parameters = $query; + } + + $data = $request->getData(); + if (!empty($data) || '0' === $data) { + if (is_array($data)) { + $content = JSON::stringify($data); + } else { + $content = $data; + } + $restRequest->body = $content; + } + + /* @var $result RestResponse */ + $start = microtime(true); + + $result = $client->execute($restRequest); + $response = new Response($result->body); + + $end = microtime(true); + } catch (TException $e) { + $response = new Response(''); + throw new ThriftException($e, $request, $response); + } + + $response->setQueryTime($end - $start); + + if ($response->hasError()) { + throw new ResponseException($request, $response); + } + + if ($response->hasFailedShards()) { + throw new PartialShardFailureException($request, $response); + } + + return $response; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Type.php b/vendor/ruflin/elastica/lib/Elastica/Type.php new file mode 100644 index 00000000..8abec330 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Type.php @@ -0,0 +1,572 @@ + index -> type -> document + * + * @author Nicolas Ruflin + */ +class Type implements SearchableInterface +{ + /** + * Index. + * + * @var \Elastica\Index Index object + */ + protected $_index = null; + + /** + * Type name. + * + * @var string Type name + */ + protected $_name = ''; + + /** + * @var array|string A callable that serializes an object passed to it + */ + protected $_serializer; + + /** + * Creates a new type object inside the given index. + * + * @param \Elastica\Index $index Index Object + * @param string $name Type name + */ + public function __construct(Index $index, $name) + { + $this->_index = $index; + $this->_name = $name; + } + + /** + * Adds the given document to the search index. + * + * @param \Elastica\Document $doc Document with data + * + * @return \Elastica\Response + */ + public function addDocument(Document $doc) + { + $path = urlencode($doc->getId()); + + $type = Request::PUT; + + // If id is empty, POST has to be used to automatically create id + if (empty($path)) { + $type = Request::POST; + } + + $options = $doc->getOptions( + array( + 'version', + 'version_type', + 'routing', + 'percolate', + 'parent', + 'ttl', + 'timestamp', + 'op_type', + 'consistency', + 'replication', + 'refresh', + 'timeout', + ) + ); + + $response = $this->request($path, $type, $doc->getData(), $options); + + $data = $response->getData(); + // set autogenerated id to document + if (($doc->isAutoPopulate() + || $this->getIndex()->getClient()->getConfigValue(array('document', 'autoPopulate'), false)) + && $response->isOk() + ) { + if (!$doc->hasId()) { + if (isset($data['_id'])) { + $doc->setId($data['_id']); + } + } + if (isset($data['_version'])) { + $doc->setVersion($data['_version']); + } + } + + return $response; + } + + /** + * @param $object + * @param Document $doc + * + * @throws Exception\RuntimeException + * + * @return Response + */ + public function addObject($object, Document $doc = null) + { + if (!isset($this->_serializer)) { + throw new RuntimeException('No serializer defined'); + } + + $data = call_user_func($this->_serializer, $object); + if (!$doc) { + $doc = new Document(); + } + $doc->setData($data); + + return $this->addDocument($doc); + } + + /** + * Update document, using update script. Requires elasticsearch >= 0.19.0. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html + * + * @param \Elastica\Document|\Elastica\Script $data Document with update data + * @param array $options array of query params to use for query. For possible options check es api + * + * @throws \Elastica\Exception\InvalidException + * + * @return \Elastica\Response + */ + public function updateDocument($data, array $options = array()) + { + if (!($data instanceof Document) && !($data instanceof Script)) { + throw new \InvalidArgumentException('Data should be a Document or Script'); + } + + if (!$data->hasId()) { + throw new InvalidException('Document or Script id is not set'); + } + + $id = urlencode($data->getId()); + + return $this->getIndex()->getClient()->updateDocument( + $id, + $data, + $this->getIndex()->getName(), + $this->getName(), + $options + ); + } + + /** + * Uses _bulk to send documents to the server. + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @return \Elastica\Bulk\ResponseSet + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + */ + public function updateDocuments(array $docs) + { + foreach ($docs as $doc) { + $doc->setType($this->getName()); + } + + return $this->getIndex()->updateDocuments($docs); + } + + /** + * Uses _bulk to send documents to the server. + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @return \Elastica\Bulk\ResponseSet + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + */ + public function addDocuments(array $docs) + { + foreach ($docs as $doc) { + $doc->setType($this->getName()); + } + + return $this->getIndex()->addDocuments($docs); + } + + /** + * Uses _bulk to send documents to the server. + * + * @param objects[] $objects + * + * @return \Elastica\Bulk\ResponseSet + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + */ + public function addObjects(array $objects) + { + if (!isset($this->_serializer)) { + throw new RuntimeException('No serializer defined'); + } + + $docs = array(); + foreach ($objects as $object) { + $data = call_user_func($this->_serializer, $object); + $doc = new Document(); + $doc->setData($data); + $doc->setType($this->getName()); + $docs[] = $doc; + } + + return $this->getIndex()->addDocuments($docs); + } + + /** + * Get the document from search index. + * + * @param string $id Document id + * @param array $options Options for the get request. + * + * @throws \Elastica\Exception\NotFoundException + * @throws \Elastica\Exception\ResponseException + * + * @return \Elastica\Document + */ + public function getDocument($id, $options = array()) + { + $path = urlencode($id); + + $response = $this->request($path, Request::GET, array(), $options); + $result = $response->getData(); + + if (!isset($result['found']) || $result['found'] === false) { + throw new NotFoundException('doc id '.$id.' not found'); + } + + if (isset($result['fields'])) { + $data = $result['fields']; + } elseif (isset($result['_source'])) { + $data = $result['_source']; + } else { + $data = array(); + } + + $document = new Document($id, $data, $this->getName(), $this->getIndex()); + $document->setVersion($result['_version']); + + return $document; + } + + /** + * @param string $id + * @param array|string $data + * + * @return Document + */ + public function createDocument($id = '', $data = array()) + { + $document = new Document($id, $data); + $document->setType($this); + + return $document; + } + + /** + * Returns the type name. + * + * @return string Type name + */ + public function getName() + { + return $this->_name; + } + + /** + * Sets value type mapping for this type. + * + * @param \Elastica\Type\Mapping|array $mapping Elastica\Type\MappingType object or property array with all mappings + * + * @return \Elastica\Response + */ + public function setMapping($mapping) + { + $mapping = Mapping::create($mapping); + $mapping->setType($this); + + return $mapping->send(); + } + + /** + * Returns current mapping for the given type. + * + * @return array Current mapping + */ + public function getMapping() + { + $path = '_mapping'; + + $response = $this->request($path, Request::GET); + $data = $response->getData(); + + $mapping = array_shift($data); + if (isset($mapping['mappings'])) { + return $mapping['mappings']; + } + + return array(); + } + + /** + * Create search object. + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * @param int|array $options OPTIONAL Limit or associative array of options (option=>value) + * + * @return \Elastica\Search + */ + public function createSearch($query = '', $options = null) + { + $search = new Search($this->getIndex()->getClient()); + $search->addIndex($this->getIndex()); + $search->addType($this); + $search->setOptionsAndQuery($options, $query); + + return $search; + } + + /** + * Do a search on this type. + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * @param int|array $options OPTIONAL Limit or associative array of options (option=>value) + * + * @return \Elastica\ResultSet ResultSet with all results inside + * + * @see \Elastica\SearchableInterface::search + */ + public function search($query = '', $options = null) + { + $search = $this->createSearch($query, $options); + + return $search->search(); + } + + /** + * Count docs by query. + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * + * @return int number of documents matching the query + * + * @see \Elastica\SearchableInterface::count + */ + public function count($query = '') + { + $search = $this->createSearch($query); + + return $search->count(); + } + + /** + * Returns index client. + * + * @return \Elastica\Index Index object + */ + public function getIndex() + { + return $this->_index; + } + + /** + * @param \Elastica\Document $document + * + * @return \Elastica\Response + */ + public function deleteDocument(Document $document) + { + $options = $document->getOptions( + array( + 'version', + 'version_type', + 'routing', + 'parent', + 'replication', + 'consistency', + 'refresh', + 'timeout', + ) + ); + + return $this->deleteById($document->getId(), $options); + } + + /** + * Uses _bulk to delete documents from the server. + * + * @param array|\Elastica\Document[] $docs Array of Elastica\Document + * + * @return \Elastica\Bulk\ResponseSet + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html + */ + public function deleteDocuments(array $docs) + { + foreach ($docs as $doc) { + $doc->setType($this->getName()); + } + + return $this->getIndex()->deleteDocuments($docs); + } + + /** + * Deletes an entry by its unique identifier. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html + * + * @param int|string $id Document id + * @param array $options + * + * @throws \InvalidArgumentException + * @throws \Elastica\Exception\NotFoundException + * + * @return \Elastica\Response Response object + */ + public function deleteById($id, array $options = array()) + { + if (empty($id) || !trim($id)) { + throw new \InvalidArgumentException(); + } + + $id = urlencode($id); + + $response = $this->request($id, Request::DELETE, array(), $options); + + $responseData = $response->getData(); + + if (isset($responseData['found']) && false == $responseData['found']) { + throw new NotFoundException('Doc id '.$id.' not found and can not be deleted'); + } + + return $response; + } + + /** + * Deletes the given list of ids from this type. + * + * @param array $ids + * @param string|false $routing Optional routing key for all ids + * + * @return \Elastica\Response Response object + */ + public function deleteIds(array $ids, $routing = false) + { + return $this->getIndex()->getClient()->deleteIds($ids, $this->getIndex(), $this, $routing); + } + + /** + * Deletes entries in the db based on a query. + * + * @param \Elastica\Query|string $query Query object + * @param array $options Optional params + * + * @return \Elastica\Response + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html + */ + public function deleteByQuery($query, array $options = array()) + { + if (is_string($query)) { + // query_string queries are not supported for delete by query operations + $options['q'] = $query; + + return $this->request('_query', Request::DELETE, array(), $options); + } + $query = Query::create($query); + + return $this->request('_query', Request::DELETE, array('query' => $query->getQuery()), $options); + } + + /** + * Deletes the index type. + * + * @return \Elastica\Response + */ + public function delete() + { + $response = $this->request('', Request::DELETE); + + return $response; + } + + /** + * More like this query based on the given object. + * + * The id in the given object has to be set + * + * @param \Elastica\Document $doc Document to query for similar objects + * @param array $params OPTIONAL Additional arguments for the query + * @param string|array|\Elastica\Query $query OPTIONAL Query to filter the moreLikeThis results + * + * @return \Elastica\ResultSet ResultSet with all results inside + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/search-more-like-this.html + */ + public function moreLikeThis(Document $doc, $params = array(), $query = array()) + { + $path = $doc->getId().'/_mlt'; + + $query = Query::create($query); + + $response = $this->request($path, Request::GET, $query->toArray(), $params); + + return ResultSet::create($response, $query); + } + + /** + * Makes calls to the elasticsearch server based on this type. + * + * @param string $path Path to call + * @param string $method Rest method to use (GET, POST, DELETE, PUT) + * @param array $data OPTIONAL Arguments as array + * @param array $query OPTIONAL Query params + * + * @return \Elastica\Response Response object + */ + public function request($path, $method, $data = array(), array $query = array()) + { + $path = $this->getName().'/'.$path; + + return $this->getIndex()->request($path, $method, $data, $query); + } + + /** + * Sets the serializer callable used in addObject. + * + * @see \Elastica\Type::addObject + * + * @param array|string $serializer @see \Elastica\Type::_serializer + * + * @return $this + */ + public function setSerializer($serializer) + { + $this->_serializer = $serializer; + + return $this; + } + + /** + * Checks if the given type exists in Index. + * + * @return bool True if type exists + */ + public function exists() + { + $response = $this->getIndex()->request($this->getName(), Request::HEAD); + $info = $response->getTransferInfo(); + + return (bool) ($info['http_code'] == 200); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Type/AbstractType.php b/vendor/ruflin/elastica/lib/Elastica/Type/AbstractType.php new file mode 100644 index 00000000..648102d2 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Type/AbstractType.php @@ -0,0 +1,205 @@ + + */ +abstract class AbstractType implements SearchableInterface +{ + const MAX_DOCS_PER_REQUEST = 1000; + + /** + * Index name. + * + * @var string Index name + */ + protected $_indexName = ''; + + /** + * Index name. + * + * @var string Index name + */ + protected $_typeName = ''; + + /** + * Client. + * + * @var \Elastica\Client Client object + */ + protected $_client = null; + + /** + * Index. + * + * @var \Elastica\Index Index object + */ + protected $_index = null; + + /** + * Type. + * + * @var \Elastica\Type Type object + */ + protected $_type = null; + + /** + * Mapping. + * + * @var array Mapping + */ + protected $_mapping = array(); + + /** + * Index params. + * + * @var array Index params + */ + protected $_indexParams = array(); + + /** + * Source. + * + * @var bool Source + */ + protected $_source = true; + + /** + * Creates index object with client connection. + * + * Reads index and type name from protected vars _indexName and _typeName. + * Has to be set in child class + * + * @param \Elastica\Client $client OPTIONAL Client object + * + * @throws \Elastica\Exception\InvalidException + */ + public function __construct(Client $client = null) + { + if (!$client) { + $client = new Client(); + } + + if (empty($this->_indexName)) { + throw new InvalidException('Index name has to be set'); + } + + if (empty($this->_typeName)) { + throw new InvalidException('Type name has to be set'); + } + + $this->_client = $client; + $this->_index = new Index($this->_client, $this->_indexName); + $this->_type = new BaseType($this->_index, $this->_typeName); + } + + /** + * Creates the index and sets the mapping for this type. + * + * @param bool $recreate OPTIONAL Recreates the index if true (default = false) + */ + public function create($recreate = false) + { + $this->getIndex()->create($this->_indexParams, $recreate); + + $mapping = new Mapping($this->getType()); + $mapping->setProperties($this->_mapping); + $mapping->setSource(array('enabled' => $this->_source)); + $mapping->send(); + } + + /** + * @param \Elastica\Query $query + * @param array|int $options + * + * @return \Elastica\Search + */ + public function createSearch($query = '', $options = null) + { + return $this->getType()->createSearch($query, $options); + } + + /** + * Search on the type. + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * + * @return \Elastica\ResultSet ResultSet with all results inside + * + * @see \Elastica\SearchableInterface::search + */ + public function search($query = '', $options = null) + { + return $this->getType()->search($query, $options = null); + } + + /** + * Count docs in the type based on query. + * + * @param string|array|\Elastica\Query $query Array with all query data inside or a Elastica\Query object + * + * @return int number of documents matching the query + * + * @see \Elastica\SearchableInterface::count + */ + public function count($query = '') + { + return $this->getType()->count($query); + } + + /** + * Returns the search index. + * + * @return \Elastica\Index Index object + */ + public function getIndex() + { + return $this->_index; + } + + /** + * Returns type object. + * + * @return \Elastica\Type Type object + */ + public function getType() + { + return $this->_type; + } + + /** + * Converts given time to format: 1995-12-31T23:59:59Z. + * + * This is the lucene date format + * + * @param int $date Date input (could be string etc.) -> must be supported by strtotime + * + * @return string Converted date string + */ + public function convertDate($date) + { + return Util::convertDate($date); + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Type/Mapping.php b/vendor/ruflin/elastica/lib/Elastica/Type/Mapping.php new file mode 100644 index 00000000..509f0ce2 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Type/Mapping.php @@ -0,0 +1,297 @@ + + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html + */ +class Mapping +{ + /** + * Mapping. + * + * @var array Mapping + */ + protected $_mapping = array(); + + /** + * Type. + * + * @var \Elastica\Type Type object + */ + protected $_type = null; + + /** + * Construct Mapping. + * + * @param \Elastica\Type $type OPTIONAL Type object + * @param array $properties OPTIONAL Properties + */ + public function __construct(Type $type = null, array $properties = array()) + { + if ($type) { + $this->setType($type); + } + + if (!empty($properties)) { + $this->setProperties($properties); + } + } + + /** + * Sets the mapping type + * Enter description here ... + * + * @param \Elastica\Type $type Type object + * + * @return $this + */ + public function setType(Type $type) + { + $this->_type = $type; + + return $this; + } + + /** + * Sets the mapping properties. + * + * @param array $properties Properties + * + * @return $this + */ + public function setProperties(array $properties) + { + return $this->setParam('properties', $properties); + } + + /** + * Gets the mapping properties. + * + * @return array $properties Properties + */ + public function getProperties() + { + return $this->getParam('properties'); + } + + /** + * Sets the mapping _meta. + * + * @param array $meta metadata + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-meta.html + */ + public function setMeta(array $meta) + { + return $this->setParam('_meta', $meta); + } + + /** + * Returns mapping type. + * + * @return \Elastica\Type Type + */ + public function getType() + { + return $this->_type; + } + + /** + * Sets source values. + * + * To disable source, argument is + * array('enabled' => false) + * + * @param array $source Source array + * + * @return $this + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html + */ + public function setSource(array $source) + { + return $this->setParam('_source', $source); + } + + /** + * Disables the source in the index. + * + * Param can be set to true to enable again + * + * @param bool $enabled OPTIONAL (default = false) + * + * @return $this + */ + public function disableSource($enabled = false) + { + return $this->setSource(array('enabled' => $enabled)); + } + + /** + * Sets raw parameters. + * + * Possible options: + * _uid + * _id + * _type + * _source + * _all + * _analyzer + * _boost + * _parent + * _routing + * _index + * _size + * properties + * + * @param string $key Key name + * @param mixed $value Key value + * + * @return $this + */ + public function setParam($key, $value) + { + $this->_mapping[$key] = $value; + + return $this; + } + + /** + * Get raw parameters. + * + * @see setParam + * + * @param string $key Key name + * + * @return mixed $value Key value + */ + public function getParam($key) + { + return isset($this->_mapping[$key]) ? $this->_mapping[$key] : null; + } + + /** + * Sets params for the "_all" field. + * + * @param array $params _all Params (enabled, store, term_vector, analyzer) + * + * @return $this + */ + public function setAllField(array $params) + { + return $this->setParam('_all', $params); + } + + /** + * Enables the "_all" field. + * + * @param bool $enabled OPTIONAL (default = true) + * + * @return $this + */ + public function enableAllField($enabled = true) + { + return $this->setAllField(array('enabled' => $enabled)); + } + + /** + * Set TTL. + * + * @param array $params TTL Params (enabled, default, ...) + * + * @return $this + */ + public function setTtl(array $params) + { + return $this->setParam('_ttl', $params); + } + + /** + * Enables TTL for all documents in this type. + * + * @param bool $enabled OPTIONAL (default = true) + * + * @return $this + */ + public function enableTtl($enabled = true) + { + return $this->setTTL(array('enabled' => $enabled)); + } + + /** + * Set parent type. + * + * @param string $type Parent type + * + * @return $this + */ + public function setParent($type) + { + return $this->setParam('_parent', array('type' => $type)); + } + + /** + * Converts the mapping to an array. + * + * @throws \Elastica\Exception\InvalidException + * + * @return array Mapping as array + */ + public function toArray() + { + $type = $this->getType(); + + if (empty($type)) { + throw new InvalidException('Type has to be set'); + } + + return array($type->getName() => $this->_mapping); + } + + /** + * Submits the mapping and sends it to the server. + * + * @return \Elastica\Response Response object + */ + public function send() + { + $path = '_mapping'; + + return $this->getType()->request($path, Request::PUT, $this->toArray()); + } + + /** + * Creates a mapping object. + * + * @param array|\Elastica\Type\Mapping $mapping Mapping object or properties array + * + * @throws \Elastica\Exception\InvalidException If invalid type + * + * @return self + */ + public static function create($mapping) + { + if (is_array($mapping)) { + $mappingObject = new self(); + $mappingObject->setProperties($mapping); + } else { + $mappingObject = $mapping; + } + + if (!$mappingObject instanceof self) { + throw new InvalidException('Invalid object type'); + } + + return $mappingObject; + } +} diff --git a/vendor/ruflin/elastica/lib/Elastica/Util.php b/vendor/ruflin/elastica/lib/Elastica/Util.php new file mode 100644 index 00000000..a49f2d78 --- /dev/null +++ b/vendor/ruflin/elastica/lib/Elastica/Util.php @@ -0,0 +1,194 @@ + + * @author Thibault Duplessis + * @author Oleg Zinchenko + * @author Roberto Nygaard + */ +class Util +{ + /** + * Replace the following reserved words: AND OR NOT + * and + * escapes the following terms: + - && || ! ( ) { } [ ] ^ " ~ * ? : \. + * + * @link http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Boolean%20operators + * @link http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Escaping%20Special%20Characters + * + * @param string $term Query term to replace and escape + * + * @return string Replaced and escaped query term + */ + public static function replaceBooleanWordsAndEscapeTerm($term) + { + $result = $term; + $result = self::replaceBooleanWords($result); + $result = self::escapeTerm($result); + + return $result; + } + + /** + * Escapes the following terms (because part of the query language) + * + - && || ! ( ) { } [ ] ^ " ~ * ? : \ < >. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters + * + * @param string $term Query term to escape + * + * @return string Escaped query term + */ + public static function escapeTerm($term) + { + $result = $term; + // \ escaping has to be first, otherwise escaped later once again + $chars = array('\\', '+', '-', '&&', '||', '!', '(', ')', '{', '}', '[', ']', '^', '"', '~', '*', '?', ':', '/', '<', '>'); + + foreach ($chars as $char) { + $result = str_replace($char, '\\'.$char, $result); + } + + return $result; + } + + /** + * Replace the following reserved words (because part of the query language) + * AND OR NOT. + * + * @link http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Boolean%20operators + * + * @param string $term Query term to replace + * + * @return string Replaced query term + */ + public static function replaceBooleanWords($term) + { + $replacementMap = array(' AND ' => ' && ', ' OR ' => ' || ', ' NOT ' => ' !'); + $result = strtr($term, $replacementMap); + + return $result; + } + + /** + * Converts a snake_case string to CamelCase. + * + * For example: hello_world to HelloWorld + * + * @param string $string snake_case string + * + * @return string CamelCase string + */ + public static function toCamelCase($string) + { + return str_replace(' ', '', ucwords(str_replace('_', ' ', $string))); + } + + /** + * Converts a CamelCase string to snake_case. + * + * For Example HelloWorld to hello_world + * + * @param string $string CamelCase String to Convert + * + * @return string SnakeCase string + */ + public static function toSnakeCase($string) + { + $string = preg_replace('/([A-Z])/', '_$1', $string); + + return strtolower(substr($string, 1)); + } + + /** + * Converts given time to format: 1995-12-31T23:59:59Z. + * + * This is the lucene date format + * + * @param int $date Date input (could be string etc.) -> must be supported by strtotime + * + * @return string Converted date string + */ + public static function convertDate($date) + { + if (is_int($date)) { + $timestamp = $date; + } else { + $timestamp = strtotime($date); + } + $string = date('Y-m-d\TH:i:s\Z', $timestamp); + + return $string; + } + + /** + * Convert a \DateTime object to format: 1995-12-31T23:59:59Z+02:00. + * + * Converts it to the lucene format, including the appropriate TimeZone + * + * @param \DateTime $dateTime + * @param bool $includeTimezone + * + * @return string + */ + public static function convertDateTimeObject(\DateTime $dateTime, $includeTimezone = true) + { + $formatString = 'Y-m-d\TH:i:s'.($includeTimezone === true ? 'P' : '\Z'); + $string = $dateTime->format($formatString); + + return $string; + } + + /** + * Tries to guess the name of the param, based on its class + * Example: \Elastica\Filter\HasChildFilter => has_child. + * + * @param string|object Class or Class name + * + * @return string parameter name + */ + public static function getParamName($class) + { + if (is_object($class)) { + $class = get_class($class); + } + + $parts = explode('\\', $class); + $last = array_pop($parts); + $last = preg_replace('/(Facet|Query|Filter)$/', '', $last); + $name = self::toSnakeCase($last); + + return $name; + } + + /** + * Converts Request to Curl console command. + * + * @param Request $request + * + * @return string + */ + public static function convertRequestToCurlCommand(Request $request) + { + $message = 'curl -X'.strtoupper($request->getMethod()).' '; + $message .= '\'http://'.$request->getConnection()->getHost().':'.$request->getConnection()->getPort().'/'; + $message .= $request->getPath(); + + $query = $request->getQuery(); + if (!empty($query)) { + $message .= '?'.http_build_query($query); + } + + $message .= '\''; + + $data = $request->getData(); + if (!empty($data)) { + $message .= ' -d \''.JSON::stringify($data).'\''; + } + + return $message; + } +} diff --git a/vendor/ruflin/elastica/phpdoc.dist.xml b/vendor/ruflin/elastica/phpdoc.dist.xml new file mode 100644 index 00000000..585a4687 --- /dev/null +++ b/vendor/ruflin/elastica/phpdoc.dist.xml @@ -0,0 +1,13 @@ + + + Elastica + + ./build/api + + + ./build/api + + + ./lib + + diff --git a/vendor/ruflin/elastica/test/bootstrap.php b/vendor/ruflin/elastica/test/bootstrap.php new file mode 100644 index 00000000..8a29cf0f --- /dev/null +++ b/vendor/ruflin/elastica/test/bootstrap.php @@ -0,0 +1,5 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testAvgAggregation() + { + $agg = new Avg('avg'); + $agg->setField('price'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregations(); + $this->assertEquals((5 + 8 + 1 + 3) / 4.0, $results['avg']['value']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/BaseAggregationTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/BaseAggregationTest.php new file mode 100644 index 00000000..48003d7e --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/BaseAggregationTest.php @@ -0,0 +1,8 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('color' => 'blue')), + new Document(2, array('color' => 'blue')), + new Document(3, array('color' => 'red')), + new Document(4, array('color' => 'green')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testCardinalityAggregation() + { + $agg = new Cardinality('cardinality'); + $agg->setField('color'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('cardinality'); + + $this->assertEquals(3, $results['value']); + } + + /** + * @dataProvider invalidPrecisionThresholdProvider + * @expectedException \InvalidArgumentException + * + * @param $threshold + */ + public function testInvalidPrecisionThreshold($threshold) + { + $agg = new Cardinality('threshold'); + $agg->setPrecisionThreshold($threshold); + } + + /** + * @dataProvider validPrecisionThresholdProvider + * + * @param $threshold + */ + public function testPrecisionThreshold($threshold) + { + $agg = new Cardinality('threshold'); + $agg->setPrecisionThreshold($threshold); + + $this->assertNotNull($agg->getParam('precision_threshold')); + $this->assertInternalType('int', $agg->getParam('precision_threshold')); + } + + public function invalidPrecisionThresholdProvider() + { + return array( + 'string' => array('100'), + 'float' => array(7.8), + 'boolean' => array(true), + 'array' => array(array()), + 'object' => array(new \StdClass()), + ); + } + + public function validPrecisionThresholdProvider() + { + return array( + 'negative-int' => array(-140), + 'zero' => array(0), + 'positive-int' => array(150), + 'more-than-max' => array(40001), + ); + } + + /** + * @dataProvider validRehashProvider + * + * @param bool $rehash + */ + public function testRehash($rehash) + { + $agg = new Cardinality('rehash'); + $agg->setRehash($rehash); + + $this->assertNotNull($agg->getParam('rehash')); + $this->assertInternalType('boolean', $agg->getParam('rehash')); + } + + /** + * @dataProvider invalidRehashProvider + * @expectedException \InvalidArgumentException + * + * @param mixed $rehash + */ + public function testInvalidRehash($rehash) + { + $agg = new Cardinality('rehash'); + $agg->setRehash($rehash); + } + + public function invalidRehashProvider() + { + return array( + 'string' => array('100'), + 'int' => array(100), + 'float' => array(7.8), + 'array' => array(array()), + 'object' => array(new \StdClass()), + ); + } + + public function validRehashProvider() + { + return array( + 'true' => array(true), + 'false' => array(false), + ); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateHistogramTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateHistogramTest.php new file mode 100644 index 00000000..ca115ccc --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateHistogramTest.php @@ -0,0 +1,103 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(new Mapping(null, array( + 'created' => array('type' => 'date'), + ))); + + $type->addDocuments(array( + new Document(1, array('created' => '2014-01-29T00:20:00')), + new Document(2, array('created' => '2014-01-29T02:20:00')), + new Document(3, array('created' => '2014-01-29T03:20:00')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testDateHistogramAggregation() + { + $agg = new DateHistogram('hist', 'created', '1h'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('hist'); + + $this->assertEquals(3, sizeof($results['buckets'])); + } + + /** + * @group unit + */ + public function testSetOffset() + { + $agg = new DateHistogram('hist', 'created', '1h'); + + $agg->setOffset('3m'); + + $expected = array( + 'date_histogram' => array( + 'field' => 'created', + 'interval' => '1h', + 'offset' => '3m', + ), + ); + + $this->assertEquals($expected, $agg->toArray()); + + $this->assertInstanceOf('Elastica\Aggregation\DateHistogram', $agg->setOffset('3m')); + } + + /** + * @group functional + */ + public function testSetOffsetWorks() + { + $agg = new DateHistogram('hist', 'created', '1m'); + $agg->setOffset('+40s'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('hist'); + + $this->assertEquals('2014-01-29T00:19:40.000Z', $results['buckets'][0]['key_as_string']); + } + + /** + * @group unit + */ + public function testSetTimezone() + { + $agg = new DateHistogram('hist', 'created', '1h'); + + $agg->setTimezone('-02:30'); + + $expected = array( + 'date_histogram' => array( + 'field' => 'created', + 'interval' => '1h', + 'time_zone' => '-02:30', + ), + ); + + $this->assertEquals($expected, $agg->toArray()); + + $this->assertInstanceOf('Elastica\Aggregation\DateHistogram', $agg->setTimezone('-02:30')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateRangeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateRangeTest.php new file mode 100644 index 00000000..b8078a4c --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/DateRangeTest.php @@ -0,0 +1,52 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(new Mapping(null, array( + 'created' => array('type' => 'date'), + ))); + + $type->addDocuments(array( + new Document(1, array('created' => 1390962135000)), + new Document(2, array('created' => 1390965735000)), + new Document(3, array('created' => 1390954935000)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testDateRangeAggregation() + { + $agg = new DateRange('date'); + $agg->setField('created'); + $agg->addRange(1390958535000)->addRange(null, 1390958535000); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('date'); + + foreach ($results['buckets'] as $bucket) { + if (array_key_exists('to', $bucket)) { + $this->assertEquals(1, $bucket['doc_count']); + } elseif (array_key_exists('from', $bucket)) { + $this->assertEquals(2, $bucket['doc_count']); + } + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ExtendedStatsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ExtendedStatsTest.php new file mode 100644 index 00000000..8c336245 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ExtendedStatsTest.php @@ -0,0 +1,45 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testExtendedStatsAggregation() + { + $agg = new ExtendedStats('stats'); + $agg->setField('price'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('stats'); + + $this->assertEquals(4, $results['count']); + $this->assertEquals(1, $results['min']); + $this->assertEquals(8, $results['max']); + $this->assertEquals((5 + 8 + 1 + 3) / 4.0, $results['avg']); + $this->assertEquals((5 + 8 + 1 + 3), $results['sum']); + $this->assertTrue(array_key_exists('sum_of_squares', $results)); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FilterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FilterTest.php new file mode 100644 index 00000000..9198bb95 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FilterTest.php @@ -0,0 +1,113 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5, 'color' => 'blue')), + new Document(2, array('price' => 8, 'color' => 'blue')), + new Document(3, array('price' => 1, 'color' => 'red')), + new Document(4, array('price' => 3, 'color' => 'green')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $expected = array( + 'filter' => array('range' => array('stock' => array('gt' => 0))), + 'aggs' => array( + 'avg_price' => array('avg' => array('field' => 'price')), + ), + ); + + $agg = new Filter('in_stock_products'); + $agg->setFilter(new Range('stock', array('gt' => 0))); + $avg = new Avg('avg_price'); + $avg->setField('price'); + $agg->addAggregation($avg); + + $this->assertEquals($expected, $agg->toArray()); + } + + /** + * @group functional + */ + public function testFilterAggregation() + { + $agg = new Filter('filter'); + $agg->setFilter(new Term(array('color' => 'blue'))); + $avg = new Avg('price'); + $avg->setField('price'); + $agg->addAggregation($avg); + + $query = new Query(); + $query->addAggregation($agg); + + $results = $this->_getIndexForTest()->search($query)->getAggregation('filter'); + $results = $results['price']['value']; + + $this->assertEquals((5 + 8) / 2.0, $results); + } + + /** + * @group functional + */ + public function testFilterNoSubAggregation() + { + $agg = new Avg('price'); + $agg->setField('price'); + + $query = new Query(); + $query->addAggregation($agg); + + $results = $this->_getIndexForTest()->search($query)->getAggregation('price'); + $results = $results['value']; + + $this->assertEquals((5 + 8 + 1 + 3) / 4.0, $results); + } + + /** + * @group unit + */ + public function testConstruct() + { + $agg = new Filter('foo', new Term(array('color' => 'blue'))); + + $expected = array( + 'filter' => array( + 'term' => array( + 'color' => 'blue', + ), + ), + ); + + $this->assertEquals($expected, $agg->toArray()); + } + + /** + * @group unit + */ + public function testConstructWithoutFilter() + { + $agg = new Filter('foo'); + $this->assertEquals('foo', $agg->getName()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FiltersTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FiltersTest.php new file mode 100644 index 00000000..36ebcd45 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/FiltersTest.php @@ -0,0 +1,120 @@ +_createIndex('filter'); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5, 'color' => 'blue')), + new Document(2, array('price' => 8, 'color' => 'blue')), + new Document(3, array('price' => 1, 'color' => 'red')), + new Document(4, array('price' => 3, 'color' => 'green')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArrayUsingNamedFilters() + { + $expected = array( + 'filters' => array( + 'filters' => array( + 'blue' => array( + 'term' => array('color' => 'blue'), + ), + 'red' => array( + 'term' => array('color' => 'red'), + ), + ), + ), + 'aggs' => array( + 'avg_price' => array('avg' => array('field' => 'price')), + ), + ); + + $agg = new Filters('by_color'); + $agg->addFilter(new Term(array('color' => 'blue')), 'blue'); + $agg->addFilter(new Term(array('color' => 'red')), 'red'); + + $avg = new Avg('avg_price'); + $avg->setField('price'); + $agg->addAggregation($avg); + + $this->assertEquals($expected, $agg->toArray()); + } + + /** + * @group unit + */ + public function testToArrayUsingAnonymousFilters() + { + $expected = array( + 'filters' => array( + 'filters' => array( + array( + 'term' => array('color' => 'blue'), + ), + array( + 'term' => array('color' => 'red'), + ), + ), + ), + 'aggs' => array( + 'avg_price' => array('avg' => array('field' => 'price')), + ), + ); + + $agg = new Filters('by_color'); + $agg->addFilter(new Term(array('color' => 'blue'))); + $agg->addFilter(new Term(array('color' => 'red'))); + + $avg = new Avg('avg_price'); + $avg->setField('price'); + $agg->addAggregation($avg); + + $this->assertEquals($expected, $agg->toArray()); + } + + /** + * @group functional + */ + public function testFilterAggregation() + { + $agg = new Filters('by_color'); + $agg->addFilter(new Term(array('color' => 'blue')), 'blue'); + $agg->addFilter(new Term(array('color' => 'red')), 'red'); + + $avg = new Avg('avg_price'); + $avg->setField('price'); + $agg->addAggregation($avg); + + $query = new Query(); + $query->addAggregation($agg); + + $results = $this->_getIndexForTest()->search($query)->getAggregation('by_color'); + + $resultsForBlue = $results['buckets']['blue']; + $resultsForRed = $results['buckets']['red']; + + $this->assertEquals(2, $resultsForBlue['doc_count']); + $this->assertEquals(1, $resultsForRed['doc_count']); + + $this->assertEquals((5 + 8) / 2, $resultsForBlue['avg_price']['value']); + $this->assertEquals(1, $resultsForRed['avg_price']['value']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeoDistanceTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeoDistanceTest.php new file mode 100644 index 00000000..f8a02d1d --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeoDistanceTest.php @@ -0,0 +1,46 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(new Mapping(null, array( + 'location' => array('type' => 'geo_point'), + ))); + + $type->addDocuments(array( + new Document(1, array('location' => array('lat' => 32.849437, 'lon' => -117.271732))), + new Document(2, array('location' => array('lat' => 32.798320, 'lon' => -117.246648))), + new Document(3, array('location' => array('lat' => 37.782439, 'lon' => -122.392560))), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testGeoDistanceAggregation() + { + $agg = new GeoDistance('geo', 'location', array('lat' => 32.804654, 'lon' => -117.242594)); + $agg->addRange(null, 100); + $agg->setUnit('mi'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('geo'); + + $this->assertEquals(2, $results['buckets'][0]['doc_count']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeohashGridTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeohashGridTest.php new file mode 100644 index 00000000..6e0d43fd --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GeohashGridTest.php @@ -0,0 +1,46 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(new Mapping(null, array( + 'location' => array('type' => 'geo_point'), + ))); + + $type->addDocuments(array( + new Document(1, array('location' => array('lat' => 32.849437, 'lon' => -117.271732))), + new Document(2, array('location' => array('lat' => 32.798320, 'lon' => -117.246648))), + new Document(3, array('location' => array('lat' => 37.782439, 'lon' => -122.392560))), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testGeohashGridAggregation() + { + $agg = new GeohashGrid('hash', 'location'); + $agg->setPrecision(3); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('hash'); + + $this->assertEquals(2, $results['buckets'][0]['doc_count']); + $this->assertEquals(1, $results['buckets'][1]['doc_count']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GlobalAggregationTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GlobalAggregationTest.php new file mode 100644 index 00000000..6ab086d0 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/GlobalAggregationTest.php @@ -0,0 +1,27 @@ + new \stdClass(), + 'aggs' => array( + 'avg_price' => array('avg' => array('field' => 'price')), + ), + ); + + $agg = new GlobalAggregation('all_products'); + $avg = new Avg('avg_price'); + $avg->setField('price'); + $agg->addAggregation($avg); + $this->assertEquals($expected, $agg->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/HistogramTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/HistogramTest.php new file mode 100644 index 00000000..ffdf73a4 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/HistogramTest.php @@ -0,0 +1,47 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5, 'color' => 'blue')), + new Document(2, array('price' => 8, 'color' => 'blue')), + new Document(3, array('price' => 1, 'color' => 'red')), + new Document(4, array('price' => 30, 'color' => 'green')), + new Document(5, array('price' => 40, 'color' => 'red')), + new Document(6, array('price' => 35, 'color' => 'green')), + new Document(7, array('price' => 42, 'color' => 'red')), + new Document(8, array('price' => 41, 'color' => 'blue')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testHistogramAggregation() + { + $agg = new Histogram('hist', 'price', 10); + $agg->setMinimumDocumentCount(0); // should return empty buckets + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('hist'); + + $buckets = $results['buckets']; + $this->assertEquals(5, sizeof($buckets)); + $this->assertEquals(30, $buckets[3]['key']); + $this->assertEquals(2, $buckets[3]['doc_count']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/IpRangeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/IpRangeTest.php new file mode 100644 index 00000000..2f3099f6 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/IpRangeTest.php @@ -0,0 +1,57 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(new Mapping(null, array( + 'address' => array('type' => 'ip'), + ))); + + $type->addDocuments(array( + new Document(1, array('address' => '192.168.1.100')), + new Document(2, array('address' => '192.168.1.150')), + new Document(3, array('address' => '192.168.1.200')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testIpRangeAggregation() + { + $agg = new IpRange('ip', 'address'); + $agg->addRange('192.168.1.101'); + $agg->addRange(null, '192.168.1.200'); + + $cidrRange = '192.168.1.0/24'; + $agg->addMaskRange($cidrRange); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('ip'); + + foreach ($results['buckets'] as $bucket) { + if (array_key_exists('key', $bucket) && $bucket['key'] == $cidrRange) { + // the CIDR mask + $this->assertEquals(3, $bucket['doc_count']); + } else { + // the normal ip ranges + $this->assertEquals(2, $bucket['doc_count']); + } + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MaxTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MaxTest.php new file mode 100644 index 00000000..f057b81d --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MaxTest.php @@ -0,0 +1,79 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $expected = array( + 'max' => array( + 'field' => 'price', + 'script' => '_value * conversion_rate', + 'params' => array( + 'conversion_rate' => 1.2, + ), + ), + 'aggs' => array( + 'subagg' => array('max' => array('field' => 'foo')), + ), + ); + + $agg = new Max('min_price_in_euros'); + $agg->setField('price'); + $agg->setScript(new Script('_value * conversion_rate', array('conversion_rate' => 1.2))); + $max = new Max('subagg'); + $max->setField('foo'); + $agg->addAggregation($max); + + $this->assertEquals($expected, $agg->toArray()); + } + + /** + * @group functional + */ + public function testMaxAggregation() + { + $index = $this->_getIndexForTest(); + + $agg = new Max('min_price'); + $agg->setField('price'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $index->search($query)->getAggregation('min_price'); + + $this->assertEquals(8, $results['value']); + + // test using a script + $agg->setScript(new Script('_value * conversion_rate', array('conversion_rate' => 1.2))); + $query = new Query(); + $query->addAggregation($agg); + $results = $index->search($query)->getAggregation('min_price'); + + $this->assertEquals(8 * 1.2, $results['value']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MinTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MinTest.php new file mode 100644 index 00000000..ce0ad5e7 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MinTest.php @@ -0,0 +1,40 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testMinAggregation() + { + $agg = new Min('min_price'); + $agg->setField('price'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('min_price'); + + $this->assertEquals(1, $results['value']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MissingTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MissingTest.php new file mode 100644 index 00000000..85461879 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/MissingTest.php @@ -0,0 +1,39 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5, 'color' => 'blue')), + new Document(2, array('price' => 8, 'color' => 'blue')), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3, 'color' => 'green')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testMissingAggregation() + { + $agg = new Missing('missing', 'color'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('missing'); + + $this->assertEquals(1, $results['doc_count']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/NestedTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/NestedTest.php new file mode 100644 index 00000000..58c5d13a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/NestedTest.php @@ -0,0 +1,63 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(new Mapping(null, array( + 'resellers' => array( + 'type' => 'nested', + 'properties' => array( + 'name' => array('type' => 'string'), + 'price' => array('type' => 'double'), + ), + ), + ))); + + $type->addDocuments(array( + new Document(1, array( + 'resellers' => array( + 'name' => 'spacely sprockets', + 'price' => 5.55, + ), + )), + new Document(2, array( + 'resellers' => array( + 'name' => 'cogswell cogs', + 'price' => 4.98, + ), + )), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testNestedAggregation() + { + $agg = new Nested('resellers', 'resellers'); + $min = new Min('min_price'); + $min->setField('price'); + $agg->addAggregation($min); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('resellers'); + + $this->assertEquals(4.98, $results['min_price']['value']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/PercentilesTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/PercentilesTest.php new file mode 100644 index 00000000..ee4dd2c5 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/PercentilesTest.php @@ -0,0 +1,125 @@ +assertEquals('price_percentile', $aggr->getName()); + + $aggr = new Percentiles('price_percentile', 'price'); + $this->assertEquals('price', $aggr->getParam('field')); + } + + /** + * @group functional + */ + public function testSetField() + { + $aggr = new Percentiles('price_percentile'); + $aggr->setField('price'); + + $this->assertEquals('price', $aggr->getParam('field')); + $this->assertInstanceOf('Elastica\Aggregation\Percentiles', $aggr->setField('price')); + } + + /** + * @group functional + */ + public function testSetCompression() + { + $aggr = new Percentiles('price_percentile'); + $aggr->setCompression(200); + $this->assertEquals(200, $aggr->getParam('compression')); + $this->assertInstanceOf('Elastica\Aggregation\Percentiles', $aggr->setCompression(200)); + } + + /** + * @group functional + */ + public function testSetPercents() + { + $percents = array(1, 2, 3); + $aggr = new Percentiles('price_percentile'); + $aggr->setPercents($percents); + $this->assertEquals($percents, $aggr->getParam('percents')); + $this->assertInstanceOf('Elastica\Aggregation\Percentiles', $aggr->setPercents($percents)); + } + + /** + * @group functional + */ + public function testAddPercent() + { + $percents = array(1, 2, 3); + $aggr = new Percentiles('price_percentile'); + $aggr->setPercents($percents); + $this->assertEquals($percents, $aggr->getParam('percents')); + $aggr->addPercent(4); + $percents[] = 4; + $this->assertEquals($percents, $aggr->getParam('percents')); + $this->assertInstanceOf('Elastica\Aggregation\Percentiles', $aggr->addPercent(4)); + } + + /** + * @group functional + */ + public function testSetScript() + { + $script = 'doc["load_time"].value / 20'; + $aggr = new Percentiles('price_percentile'); + $aggr->setScript($script); + $this->assertEquals($script, $aggr->getParam('script')); + $this->assertInstanceOf('Elastica\Aggregation\Percentiles', $aggr->setScript($script)); + } + + /** + * @group functional + */ + public function testActualWork() + { + // prepare + $index = $this->_createIndex(); + $type = $index->getType('offer'); + $type->addDocuments(array( + new Document(1, array('price' => 100)), + new Document(2, array('price' => 200)), + new Document(3, array('price' => 300)), + new Document(4, array('price' => 400)), + new Document(5, array('price' => 500)), + new Document(6, array('price' => 600)), + new Document(7, array('price' => 700)), + new Document(8, array('price' => 800)), + new Document(9, array('price' => 900)), + new Document(10, array('price' => 1000)), + )); + $index->refresh(); + + // execute + $aggr = new Percentiles('price_percentile'); + $aggr->setField('price'); + + $query = new Query(); + $query->addAggregation($aggr); + + $resultSet = $type->search($query); + $aggrResult = $resultSet->getAggregation('price_percentile'); + + // hope it's ok to hardcode results... + $this->assertEquals(109.0, $aggrResult['values']['1.0']); + $this->assertEquals(145.0, $aggrResult['values']['5.0']); + $this->assertEquals(325.0, $aggrResult['values']['25.0']); + $this->assertEquals(550.0, $aggrResult['values']['50.0']); + $this->assertEquals(775.0, $aggrResult['values']['75.0']); + $this->assertEquals(955.0, $aggrResult['values']['95.0']); + $this->assertEquals(991.0, $aggrResult['values']['99.0']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/RangeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/RangeTest.php new file mode 100644 index 00000000..f96e4096 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/RangeTest.php @@ -0,0 +1,78 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + new Document(5, array('price' => 1.5)), + new Document(6, array('price' => 2)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testRangeAggregation() + { + $agg = new Range('range'); + $agg->setField('price'); + $agg->addRange(1.5, 5); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('range'); + + $this->assertEquals(2, $results['buckets'][0]['doc_count']); + } + + /** + * @group unit + */ + public function testRangeAggregationWithKey() + { + $agg = new Range('range'); + $agg->setField('price'); + $agg->addRange(null, 50, 'cheap'); + $agg->addRange(50, 100, 'average'); + $agg->addRange(100, null, 'expensive'); + + $expected = array( + 'range' => array( + 'field' => 'price', + 'ranges' => array( + array( + 'to' => 50, + 'key' => 'cheap', + ), + array( + 'from' => 50, + 'to' => 100, + 'key' => 'average', + ), + array( + 'from' => 100, + 'key' => 'expensive', + ), + ), + ), + ); + + $this->assertEquals($expected, $agg->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ReverseNestedTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ReverseNestedTest.php new file mode 100644 index 00000000..0e2ed2e6 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ReverseNestedTest.php @@ -0,0 +1,134 @@ +_createIndex(); + $mapping = new Mapping(); + $mapping->setProperties(array( + 'comments' => array( + 'type' => 'nested', + 'properties' => array( + 'name' => array('type' => 'string'), + 'body' => array('type' => 'string'), + ), + ), + )); + $type = $index->getType('test'); + $type->setMapping($mapping); + + $type->addDocuments(array( + new Document(1, array( + 'comments' => array( + array( + 'name' => 'bob', + 'body' => 'this is bobs comment', + ), + array( + 'name' => 'john', + 'body' => 'this is johns comment', + ), + ), + 'tags' => array('foo', 'bar'), + )), + new Document(2, array( + 'comments' => array( + array( + 'name' => 'bob', + 'body' => 'this is another comment from bob', + ), + array( + 'name' => 'susan', + 'body' => 'this is susans comment', + ), + ), + 'tags' => array('foo', 'baz'), + )), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testPathNotSetIfNull() + { + $agg = new ReverseNested('nested'); + $this->assertFalse($agg->hasParam('path')); + } + + /** + * @group unit + */ + public function testPathSetIfNotNull() + { + $agg = new ReverseNested('nested', 'some_field'); + $this->assertEquals('some_field', $agg->getParam('path')); + } + + /** + * @group functional + */ + public function testReverseNestedAggregation() + { + $agg = new Nested('comments', 'comments'); + $names = new Terms('name'); + $names->setField('comments.name'); + + $tags = new Terms('tags'); + $tags->setField('tags'); + + $reverseNested = new ReverseNested('main'); + $reverseNested->addAggregation($tags); + + $names->addAggregation($reverseNested); + + $agg->addAggregation($names); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('comments'); + + $this->assertArrayHasKey('name', $results); + $nameResults = $results['name']; + + $this->assertCount(3, $nameResults['buckets']); + + // bob + $this->assertEquals('bob', $nameResults['buckets'][0]['key']); + $tags = array( + array('key' => 'foo', 'doc_count' => 2), + array('key' => 'bar', 'doc_count' => 1), + array('key' => 'baz', 'doc_count' => 1), + ); + $this->assertEquals($tags, $nameResults['buckets'][0]['main']['tags']['buckets']); + + // john + $this->assertEquals('john', $nameResults['buckets'][1]['key']); + $tags = array( + array('key' => 'bar', 'doc_count' => 1), + array('key' => 'foo', 'doc_count' => 1), + ); + $this->assertEquals($tags, $nameResults['buckets'][1]['main']['tags']['buckets']); + + // susan + $this->assertEquals('susan', $nameResults['buckets'][2]['key']); + $tags = array( + array('key' => 'baz', 'doc_count' => 1), + array('key' => 'foo', 'doc_count' => 1), + ); + $this->assertEquals($tags, $nameResults['buckets'][2]['main']['tags']['buckets']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptTest.php new file mode 100644 index 00000000..bf32b251 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptTest.php @@ -0,0 +1,87 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document('1', array('price' => 5)), + new Document('2', array('price' => 8)), + new Document('3', array('price' => 1)), + new Document('4', array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testAggregationScript() + { + $agg = new Sum('sum'); + // x = (0..1) is groovy-specific syntax, to see if lang is recognized + $script = new Script("x = (0..1); return doc['price'].value", null, 'groovy'); + $agg->setScript($script); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('sum'); + + $this->assertEquals(5 + 8 + 1 + 3, $results['value']); + } + + /** + * @group functional + */ + public function testAggregationScriptAsString() + { + $agg = new Sum('sum'); + $agg->setScript("doc['price'].value"); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('sum'); + + $this->assertEquals(5 + 8 + 1 + 3, $results['value']); + } + + /** + * @group unit + */ + public function testSetScript() + { + $aggregation = 'sum'; + $string = "doc['price'].value"; + $params = array( + 'param1' => 'one', + 'param2' => 1, + ); + $lang = 'groovy'; + + $agg = new Sum($aggregation); + $script = new Script($string, $params, $lang); + $agg->setScript($script); + + $array = $agg->toArray(); + + $expected = array( + $aggregation => array( + 'script' => $string, + 'params' => $params, + 'lang' => $lang, + ), + ); + $this->assertEquals($expected, $array); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptedMetricTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptedMetricTest.php new file mode 100644 index 00000000..31f5798b --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ScriptedMetricTest.php @@ -0,0 +1,50 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(new Mapping(null, array( + 'start' => array('type' => 'long'), + 'end' => array('type' => 'long'), + ))); + + $type->addDocuments(array( + new Document(1, array('start' => 100, 'end' => 200)), + new Document(2, array('start' => 200, 'end' => 250)), + new Document(3, array('start' => 300, 'end' => 450)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testScriptedMetricAggregation() + { + $agg = new ScriptedMetric( + 'scripted', + "_agg['durations'] = [:]", + "key = doc['start'].value+ \":\"+ doc['end'].value; _agg.durations[key] = doc['end'].value - doc['start'].value;", + 'values = []; for (item in _agg.durations) { values.add(item.value) }; return values' + ); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('scripted'); + + $this->assertEquals(array(100, 50, 150), $results['value'][0]); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SignificantTermsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SignificantTermsTest.php new file mode 100644 index 00000000..8960768b --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SignificantTermsTest.php @@ -0,0 +1,72 @@ +_createIndex(); + $colors = array('blue', 'blue', 'red', 'red', 'green', 'yellow', 'white', 'cyan', 'magenta'); + $temperatures = array(1500, 1500, 1500, 1500, 2500, 3500, 4500, 5500, 6500, 7500, 7500, 8500, 9500); + $docs = array(); + for ($i = 0;$i < 250;$i++) { + $docs[] = new Document($i, array('color' => $colors[$i % count($colors)], 'temperature' => $temperatures[$i % count($temperatures)])); + } + $index->getType('test')->addDocuments($docs); + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testSignificantTermsAggregation() + { + $agg = new SignificantTerms('significantTerms'); + $agg->setField('temperature'); + $agg->setSize(1); + + $termsQuery = new Terms(); + $termsQuery->setTerms('color', array('blue', 'red', 'green', 'yellow', 'white')); + + $query = new Query($termsQuery); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('significantTerms'); + + $this->assertEquals(1, count($results['buckets'])); + $this->assertEquals(63, $results['buckets'][0]['doc_count']); + $this->assertEquals(79, $results['buckets'][0]['bg_count']); + $this->assertEquals('1500', $results['buckets'][0]['key_as_string']); + } + + /** + * @group functional + */ + public function testSignificantTermsAggregationWithBackgroundFilter() + { + $agg = new SignificantTerms('significantTerms'); + $agg->setField('temperature'); + $agg->setSize(1); + $termsFilter = new TermsFilter(); + $termsFilter->setTerms('color', array('blue', 'red', 'green', 'yellow')); + $agg->setBackgroundFilter($termsFilter); + + $termsQuery = new Terms(); + $termsQuery->setTerms('color', array('blue', 'red', 'green', 'yellow', 'white')); + + $query = new Query($termsQuery); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('significantTerms'); + + $this->assertEquals(15, $results['buckets'][0]['doc_count']); + $this->assertEquals(12, $results['buckets'][0]['bg_count']); + $this->assertEquals('4500', $results['buckets'][0]['key_as_string']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/StatsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/StatsTest.php new file mode 100644 index 00000000..45c9d08c --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/StatsTest.php @@ -0,0 +1,44 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testStatsAggregation() + { + $agg = new Stats('stats'); + $agg->setField('price'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('stats'); + + $this->assertEquals(4, $results['count']); + $this->assertEquals(1, $results['min']); + $this->assertEquals(8, $results['max']); + $this->assertEquals((5 + 8 + 1 + 3) / 4.0, $results['avg']); + $this->assertEquals((5 + 8 + 1 + 3), $results['sum']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SumTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SumTest.php new file mode 100644 index 00000000..b60e6e14 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/SumTest.php @@ -0,0 +1,40 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testSumAggregation() + { + $agg = new Sum('sum'); + $agg->setField('price'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('sum'); + + $this->assertEquals(5 + 8 + 1 + 3, $results['value']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TermsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TermsTest.php new file mode 100644 index 00000000..58eb02c2 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TermsTest.php @@ -0,0 +1,41 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('color' => 'blue')), + new Document(2, array('color' => 'blue')), + new Document(3, array('color' => 'red')), + new Document(4, array('color' => 'green')), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testTermsAggregation() + { + $agg = new Terms('terms'); + $agg->setField('color'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('terms'); + + $this->assertEquals(2, $results['buckets'][0]['doc_count']); + $this->assertEquals('blue', $results['buckets'][0]['key']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TopHitsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TopHitsTest.php new file mode 100644 index 00000000..afe23e27 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/TopHitsTest.php @@ -0,0 +1,385 @@ +_createIndex(); + + $index->getType('questions')->addDocuments(array( + new Document(1, array( + 'tags' => array('linux'), + 'last_activity_date' => '2015-01-05', + 'title' => 'Question about linux #1', + )), + new Document(2, array( + 'tags' => array('linux'), + 'last_activity_date' => '2014-12-23', + 'title' => 'Question about linux #2', + )), + new Document(3, array( + 'tags' => array('windows'), + 'last_activity_date' => '2015-01-05', + 'title' => 'Question about windows #1', + )), + new Document(4, array( + 'tags' => array('windows'), + 'last_activity_date' => '2014-12-23', + 'title' => 'Question about windows #2', + )), + new Document(5, array( + 'tags' => array('osx', 'apple'), + 'last_activity_date' => '2014-12-23', + 'title' => 'Question about osx', + )), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testSetSize() + { + $agg = new TopHits('agg_name'); + $returnValue = $agg->setSize(12); + $this->assertEquals(12, $agg->getParam('size')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + /** + * @group unit + */ + public function testSetFrom() + { + $agg = new TopHits('agg_name'); + $returnValue = $agg->setFrom(12); + $this->assertEquals(12, $agg->getParam('from')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + /** + * @group unit + */ + public function testSetSort() + { + $sort = array('last_activity_date' => array('order' => 'desc')); + $agg = new TopHits('agg_name'); + $returnValue = $agg->setSort($sort); + $this->assertEquals($sort, $agg->getParam('sort')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + /** + * @group unit + */ + public function testSetSource() + { + $fields = array('title', 'tags'); + $agg = new TopHits('agg_name'); + $returnValue = $agg->setSource($fields); + $this->assertEquals($fields, $agg->getParam('_source')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + /** + * @group unit + */ + public function testSetVersion() + { + $agg = new TopHits('agg_name'); + $returnValue = $agg->setVersion(true); + $this->assertTrue($agg->getParam('version')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + + $agg->setVersion(false); + $this->assertFalse($agg->getParam('version')); + } + + /** + * @group unit + */ + public function testSetExplain() + { + $agg = new TopHits('agg_name'); + $returnValue = $agg->setExplain(true); + $this->assertTrue($agg->getParam('explain')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + + $agg->setExplain(false); + $this->assertFalse($agg->getParam('explain')); + } + + /** + * @group unit + */ + public function testSetHighlight() + { + $highlight = array( + 'fields' => array( + 'title', + ), + ); + $agg = new TopHits('agg_name'); + $returnValue = $agg->setHighlight($highlight); + $this->assertEquals($highlight, $agg->getParam('highlight')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + /** + * @group unit + */ + public function testSetFieldDataFields() + { + $fields = array('title', 'tags'); + $agg = new TopHits('agg_name'); + $returnValue = $agg->setFieldDataFields($fields); + $this->assertEquals($fields, $agg->getParam('fielddata_fields')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + /** + * @group unit + */ + public function testSetScriptFields() + { + $script = new Script('1 + 2'); + $scriptFields = new ScriptFields(array('three' => $script)); + + $agg = new TopHits('agg_name'); + $returnValue = $agg->setScriptFields($scriptFields); + $this->assertEquals($scriptFields->toArray(), $agg->getParam('script_fields')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + /** + * @group unit + */ + public function testAddScriptField() + { + $script = new Script('2+3'); + $agg = new TopHits('agg_name'); + $returnValue = $agg->addScriptField('five', $script); + $this->assertEquals(array('five' => $script->toArray()), $agg->getParam('script_fields')); + $this->assertInstanceOf('Elastica\Aggregation\TopHits', $returnValue); + } + + protected function getOuterAggregationResult($innerAggr) + { + $outerAggr = new Terms('top_tags'); + $outerAggr->setField('tags'); + $outerAggr->setMinimumDocumentCount(2); + $outerAggr->addAggregation($innerAggr); + + $query = new Query(new MatchAll()); + $query->addAggregation($outerAggr); + + return $this->_getIndexForTest()->search($query)->getAggregation('top_tags'); + } + + /** + * @group functional + */ + public function testAggregateUpdatedRecently() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setSize(1); + $aggr->setSort(array('last_activity_date' => array('order' => 'desc'))); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $resultDocs[] = $doc['_id']; + } + } + $this->assertEquals(array(1, 3), $resultDocs); + } + + /** + * @group functional + */ + public function testAggregateUpdatedFarAgo() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setSize(1); + $aggr->setSort(array('last_activity_date' => array('order' => 'asc'))); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $resultDocs[] = $doc['_id']; + } + } + $this->assertEquals(array(2, 4), $resultDocs); + } + + /** + * @group functional + */ + public function testAggregateTwoDocumentPerTag() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setSize(2); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $resultDocs[] = $doc['_id']; + } + } + $this->assertEquals(array(1, 2, 3, 4), $resultDocs); + } + + /** + * @group functional + */ + public function testAggregateTwoDocumentPerTagWithOffset() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setSize(2); + $aggr->setFrom(1); + $aggr->setSort(array('last_activity_date' => array('order' => 'desc'))); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $resultDocs[] = $doc['_id']; + } + } + $this->assertEquals(array(2, 4), $resultDocs); + } + + /** + * @group functional + */ + public function testAggregateWithLimitedSource() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setSource(array('title')); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $this->assertArrayHasKey('title', $doc['_source']); + $this->assertArrayNotHasKey('tags', $doc['_source']); + $this->assertArrayNotHasKey('last_activity_date', $doc['_source']); + } + } + } + + /** + * @group functional + */ + public function testAggregateWithVersion() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setVersion(true); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $this->assertArrayHasKey('_version', $doc); + } + } + } + + /** + * @group functional + */ + public function testAggregateWithExplain() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setExplain(true); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $this->assertArrayHasKey('_explanation', $doc); + } + } + } + + /** + * @group functional + */ + public function testAggregateWithScriptFields() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setSize(1); + $aggr->setScriptFields(array('three' => new Script('1 + 2'))); + $aggr->addScriptField('five', new Script('3 + 2')); + + $resultDocs = array(); + $outerAggrResult = $this->getOuterAggregationResult($aggr); + foreach ($outerAggrResult['buckets'] as $bucket) { + foreach ($bucket['top_tag_hits']['hits']['hits'] as $doc) { + $this->assertEquals(3, $doc['fields']['three'][0]); + $this->assertEquals(5, $doc['fields']['five'][0]); + } + } + } + + /** + * @group functional + */ + public function testAggregateWithHighlight() + { + $queryString = new SimpleQueryString('linux', array('title')); + + $aggr = new TopHits('top_tag_hits'); + $aggr->setHighlight(array('fields' => array('title' => new \stdClass()))); + + $query = new Query($queryString); + $query->addAggregation($aggr); + + $resultSet = $this->_getIndexForTest()->search($query); + $aggrResult = $resultSet->getAggregation('top_tag_hits'); + + foreach ($aggrResult['hits']['hits'] as $doc) { + $this->assertArrayHasKey('highlight', $doc); + $this->assertRegExp('#linux#', $doc['highlight']['title'][0]); + } + } + + /** + * @group functional + */ + public function testAggregateWithFieldData() + { + $aggr = new TopHits('top_tag_hits'); + $aggr->setFieldDataFields(array('title')); + + $query = new Query(new MatchAll()); + $query->addAggregation($aggr); + + $resultSet = $this->_getIndexForTest()->search($query); + $aggrResult = $resultSet->getAggregation('top_tag_hits'); + + foreach ($aggrResult['hits']['hits'] as $doc) { + $this->assertArrayHasKey('fields', $doc); + $this->assertArrayHasKey('title', $doc['fields']); + $this->assertArrayNotHasKey('tags', $doc['fields']); + $this->assertArrayNotHasKey('last_activity_date', $doc['fields']); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ValueCountTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ValueCountTest.php new file mode 100644 index 00000000..21b63cbe --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Aggregation/ValueCountTest.php @@ -0,0 +1,40 @@ +_createIndex(); + + $index->getType('test')->addDocuments(array( + new Document(1, array('price' => 5)), + new Document(2, array('price' => 8)), + new Document(3, array('price' => 1)), + new Document(4, array('price' => 3)), + new Document(5, array('price' => 3)), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group functional + */ + public function testValueCountAggregation() + { + $agg = new ValueCount('count', 'price'); + + $query = new Query(); + $query->addAggregation($agg); + $results = $this->_getIndexForTest()->search($query)->getAggregation('count'); + + $this->assertEquals(5, $results['value']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Base.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Base.php new file mode 100644 index 00000000..c826c747 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Base.php @@ -0,0 +1,142 @@ + $this->_getHost(), + 'port' => $this->_getPort(), + ); + + $config = array_merge($config, $params); + + return new Client($config, $callback); + } + + /** + * @return string Host to es for elastica tests + */ + protected function _getHost() + { + return getenv('ES_HOST') ?: Connection::DEFAULT_HOST; + } + + /** + * @return int Port to es for elastica tests + */ + protected function _getPort() + { + return getenv('ES_PORT') ?: Connection::DEFAULT_PORT; + } + + /** + * @return string Proxy url string + */ + protected function _getProxyUrl() + { + $proxyHost = getenv('PROXY_HOST') ?: Connection::DEFAULT_HOST; + + return 'http://'.$proxyHost.':12345'; + } + + /** + * @return string Proxy url string to proxy which returns 403 + */ + protected function _getProxyUrl403() + { + $proxyHost = getenv('PROXY_HOST') ?: Connection::DEFAULT_HOST; + + return 'http://'.$proxyHost.':12346'; + } + + /** + * @param string $name Index name + * @param bool $delete Delete index if it exists + * @param int $shards Number of shards to create + * + * @return \Elastica\Index + */ + protected function _createIndex($name = null, $delete = true, $shards = 1) + { + if (is_null($name)) { + $name = preg_replace('/[^a-z]/i', '', strtolower(get_called_class())).uniqid(); + } + + $client = $this->_getClient(); + $index = $client->getIndex('elastica_'.$name); + $index->create(array('index' => array('number_of_shards' => $shards, 'number_of_replicas' => 0)), $delete); + + return $index; + } + + protected function _waitForAllocation(Index $index) + { + do { + $settings = $index->getStatus()->get(); + $allocated = true; + foreach ($settings['shards'] as $shard) { + if ($shard[0]['routing']['state'] != 'STARTED') { + $allocated = false; + } + } + } while (!$allocated); + } + + protected function setUp() + { + parent::setUp(); + + $hasGroup = $this->_isUnitGroup() || $this->_isFunctionalGroup() || $this->_isShutdownGroup() || $this->_isBenchmarkGroup(); + $this->assertTrue($hasGroup, 'Every test must have one of "unit", "functional", "shutdown" or "benchmark" group'); + } + + protected function tearDown() + { + if ($this->_isFunctionalGroup()) { + $this->_getClient()->getIndex('_all')->delete(); + $this->_getClient()->getIndex('_all')->clearCache(); + } + + parent::tearDown(); + } + + protected function _isUnitGroup() + { + $groups = \PHPUnit_Util_Test::getGroups(get_class($this), $this->getName(false)); + + return in_array('unit', $groups); + } + + protected function _isFunctionalGroup() + { + $groups = \PHPUnit_Util_Test::getGroups(get_class($this), $this->getName(false)); + + return in_array('functional', $groups); + } + + protected function _isShutdownGroup() + { + $groups = \PHPUnit_Util_Test::getGroups(get_class($this), $this->getName(false)); + + return in_array('shutdown', $groups); + } + + protected function _isBenchmarkGroup() + { + $groups = \PHPUnit_Util_Test::getGroups(get_class($this), $this->getName(false)); + + return in_array('benchmark', $groups); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ActionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ActionTest.php new file mode 100644 index 00000000..e4588e70 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ActionTest.php @@ -0,0 +1,66 @@ +assertEquals('index', $action->getOpType()); + $this->assertFalse($action->hasSource()); + + $expected = '{"index":{}}'."\n"; + $this->assertEquals($expected, $action->toString()); + + $action->setIndex('index'); + + $expected = '{"index":{"_index":"index"}}'."\n"; + $this->assertEquals($expected, $action->toString()); + + $action->setType('type'); + + $expected = '{"index":{"_index":"index","_type":"type"}}'."\n"; + $this->assertEquals($expected, $action->toString()); + + $action->setId(1); + $expected = '{"index":{"_index":"index","_type":"type","_id":1}}'."\n"; + $this->assertEquals($expected, $action->toString()); + + $action->setRouting(1); + $expected = '{"index":{"_index":"index","_type":"type","_id":1,"_routing":1}}'."\n"; + $this->assertEquals($expected, $action->toString()); + + $client = $this->_getClient(); + $index = new Index($client, 'index2'); + $type = new Type($index, 'type2'); + + $action->setIndex($index); + + $expected = '{"index":{"_index":"index2","_type":"type","_id":1,"_routing":1}}'."\n"; + $this->assertEquals($expected, $action->toString()); + + $action->setType($type); + + $expected = '{"index":{"_index":"index2","_type":"type2","_id":1,"_routing":1}}'."\n"; + $this->assertEquals($expected, $action->toString()); + + $action->setSource(array('user' => 'name')); + + $expected = '{"index":{"_index":"index2","_type":"type2","_id":1,"_routing":1}}'."\n"; + $expected .= '{"user":"name"}'."\n"; + + $this->assertEquals($expected, $action->toString()); + $this->assertTrue($action->hasSource()); + + $this->assertFalse(Action::isValidOpType('foo')); + $this->assertTrue(Action::isValidOpType('delete')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ResponseSetTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ResponseSetTest.php new file mode 100644 index 00000000..949dcf7a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Bulk/ResponseSetTest.php @@ -0,0 +1,200 @@ +_createResponseSet($responseData, $actions); + $this->assertEquals($expected, $responseSet->isOk()); + } + + /** + * @group unit + */ + public function testGetError() + { + list($responseData, $actions) = $this->_getFixture(); + $responseData['items'][1]['index']['ok'] = false; + $responseData['items'][1]['index']['error'] = 'SomeExceptionMessage'; + $responseData['items'][2]['index']['ok'] = false; + $responseData['items'][2]['index']['error'] = 'AnotherExceptionMessage'; + + try { + $this->_createResponseSet($responseData, $actions); + $this->fail('Bulk request should fail'); + } catch (ResponseException $e) { + $responseSet = $e->getResponseSet(); + + $this->assertInstanceOf('Elastica\\Bulk\\ResponseSet', $responseSet); + + $this->assertTrue($responseSet->hasError()); + $this->assertNotEquals('AnotherExceptionMessage', $responseSet->getError()); + $this->assertEquals('SomeExceptionMessage', $responseSet->getError()); + + $actionExceptions = $e->getActionExceptions(); + $this->assertEquals(2, count($actionExceptions)); + + $this->assertInstanceOf('Elastica\Exception\Bulk\Response\ActionException', $actionExceptions[0]); + $this->assertSame($actions[1], $actionExceptions[0]->getAction()); + $this->assertContains('SomeExceptionMessage', $actionExceptions[0]->getMessage()); + $this->assertTrue($actionExceptions[0]->getResponse()->hasError()); + + $this->assertInstanceOf('Elastica\Exception\Bulk\Response\ActionException', $actionExceptions[1]); + $this->assertSame($actions[2], $actionExceptions[1]->getAction()); + $this->assertContains('AnotherExceptionMessage', $actionExceptions[1]->getMessage()); + $this->assertTrue($actionExceptions[1]->getResponse()->hasError()); + } + } + + /** + * @group unit + */ + public function testGetBulkResponses() + { + list($responseData, $actions) = $this->_getFixture(); + + $responseSet = $this->_createResponseSet($responseData, $actions); + + $bulkResponses = $responseSet->getBulkResponses(); + $this->assertInternalType('array', $bulkResponses); + $this->assertEquals(3, count($bulkResponses)); + + foreach ($bulkResponses as $i => $bulkResponse) { + $this->assertInstanceOf('Elastica\\Bulk\\Response', $bulkResponse); + $bulkResponseData = $bulkResponse->getData(); + $this->assertInternalType('array', $bulkResponseData); + $this->assertArrayHasKey('_id', $bulkResponseData); + $this->assertEquals($responseData['items'][$i]['index']['_id'], $bulkResponseData['_id']); + $this->assertSame($actions[$i], $bulkResponse->getAction()); + $this->assertEquals('index', $bulkResponse->getOpType()); + } + } + + /** + * @group unit + */ + public function testIterator() + { + list($responseData, $actions) = $this->_getFixture(); + + $responseSet = $this->_createResponseSet($responseData, $actions); + + $this->assertEquals(3, count($responseSet)); + + foreach ($responseSet as $i => $bulkResponse) { + $this->assertInstanceOf('Elastica\Bulk\Response', $bulkResponse); + $bulkResponseData = $bulkResponse->getData(); + $this->assertInternalType('array', $bulkResponseData); + $this->assertArrayHasKey('_id', $bulkResponseData); + $this->assertEquals($responseData['items'][$i]['index']['_id'], $bulkResponseData['_id']); + $this->assertSame($actions[$i], $bulkResponse->getAction()); + $this->assertEquals('index', $bulkResponse->getOpType()); + } + + $this->assertFalse($responseSet->valid()); + $this->assertNotInstanceOf('Elastica\Bulk\Response', $responseSet->current()); + $this->assertFalse($responseSet->current()); + + $responseSet->next(); + + $this->assertFalse($responseSet->valid()); + $this->assertNotInstanceOf('Elastica\Bulk\Response', $responseSet->current()); + $this->assertFalse($responseSet->current()); + + $responseSet->rewind(); + + $this->assertEquals(0, $responseSet->key()); + $this->assertTrue($responseSet->valid()); + $this->assertInstanceOf('Elastica\Bulk\Response', $responseSet->current()); + } + + public function isOkDataProvider() + { + list($responseData, $actions) = $this->_getFixture(); + + $return = array(); + $return[] = array($responseData, $actions, true); + $responseData['items'][2]['index']['ok'] = false; + $return[] = array($responseData, $actions, false); + + return $return; + } + + /** + * @param array $responseData + * @param array $actions + * + * @return \Elastica\Bulk\ResponseSet + */ + protected function _createResponseSet(array $responseData, array $actions) + { + $client = $this->getMock('Elastica\\Client', array('request')); + + $client->expects($this->once()) + ->method('request') + ->withAnyParameters() + ->will($this->returnValue(new Response($responseData))); + + $bulk = new Bulk($client); + $bulk->addActions($actions); + + return $bulk->send(); + } + + /** + * @return array + */ + protected function _getFixture() + { + $responseData = array( + 'took' => 5, + 'items' => array( + array( + 'index' => array( + '_index' => 'index', + '_type' => 'type', + '_id' => '1', + '_version' => 1, + 'ok' => true, + ), + ), + array( + 'index' => array( + '_index' => 'index', + '_type' => 'type', + '_id' => '2', + '_version' => 1, + 'ok' => true, + ), + ), + array( + 'index' => array( + '_index' => 'index', + '_type' => 'type', + '_id' => '3', + '_version' => 1, + 'ok' => true, + ), + ), + ), + ); + $bulkResponses = array( + new Action(), + new Action(), + new Action(), + ); + + return array($responseData, $bulkResponses); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/BulkTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/BulkTest.php new file mode 100644 index 00000000..c3ff15bc --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/BulkTest.php @@ -0,0 +1,792 @@ +_createIndex(); + $indexName = $index->getName(); + $type = $index->getType('bulk_test'); + $type2 = $index->getType('bulk_test2'); + $client = $index->getClient(); + + $newDocument1 = $type->createDocument(1, array('name' => 'Mister Fantastic')); + $newDocument2 = new Document(2, array('name' => 'Invisible Woman')); + $newDocument3 = $type->createDocument(3, array('name' => 'The Human Torch')); + $newDocument4 = $type->createDocument(null, array('name' => 'The Thing')); + + $newDocument3->setOpType(Document::OP_TYPE_CREATE); + + $documents = array( + $newDocument1, + $newDocument2, + $newDocument3, + $newDocument4, + ); + + $bulk = new Bulk($client); + $bulk->setType($type2); + $bulk->addDocuments($documents); + + $actions = $bulk->getActions(); + + $this->assertInstanceOf('Elastica\Bulk\Action\IndexDocument', $actions[0]); + $this->assertEquals('index', $actions[0]->getOpType()); + $this->assertSame($newDocument1, $actions[0]->getDocument()); + + $this->assertInstanceOf('Elastica\Bulk\Action\IndexDocument', $actions[1]); + $this->assertEquals('index', $actions[1]->getOpType()); + $this->assertSame($newDocument2, $actions[1]->getDocument()); + + $this->assertInstanceOf('Elastica\Bulk\Action\CreateDocument', $actions[2]); + $this->assertEquals('create', $actions[2]->getOpType()); + $this->assertSame($newDocument3, $actions[2]->getDocument()); + + $this->assertInstanceOf('Elastica\Bulk\Action\IndexDocument', $actions[3]); + $this->assertEquals('index', $actions[3]->getOpType()); + $this->assertSame($newDocument4, $actions[3]->getDocument()); + + $data = $bulk->toArray(); + + $expected = array( + array('index' => array('_index' => $indexName, '_type' => 'bulk_test', '_id' => 1)), + array('name' => 'Mister Fantastic'), + array('index' => array('_id' => 2)), + array('name' => 'Invisible Woman'), + array('create' => array('_index' => $indexName, '_type' => 'bulk_test', '_id' => 3)), + array('name' => 'The Human Torch'), + array('index' => array('_index' => $indexName, '_type' => 'bulk_test')), + array('name' => 'The Thing'), + ); + $this->assertEquals($expected, $data); + + $expected = '{"index":{"_index":"'.$indexName.'","_type":"bulk_test","_id":1}} +{"name":"Mister Fantastic"} +{"index":{"_id":2}} +{"name":"Invisible Woman"} +{"create":{"_index":"'.$indexName.'","_type":"bulk_test","_id":3}} +{"name":"The Human Torch"} +{"index":{"_index":"'.$indexName.'","_type":"bulk_test"}} +{"name":"The Thing"} +'; + + $expected = str_replace(PHP_EOL, "\n", $expected); + $this->assertEquals($expected, (string) str_replace(PHP_EOL, "\n", (string) $bulk)); + + $response = $bulk->send(); + + $this->assertInstanceOf('Elastica\Bulk\ResponseSet', $response); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + foreach ($response as $i => $bulkResponse) { + $this->assertInstanceOf('Elastica\Bulk\Response', $bulkResponse); + $this->assertTrue($bulkResponse->isOk()); + $this->assertFalse($bulkResponse->hasError()); + $this->assertSame($actions[$i], $bulkResponse->getAction()); + } + + $type->getIndex()->refresh(); + $type2->getIndex()->refresh(); + + $this->assertEquals(3, $type->count()); + $this->assertEquals(1, $type2->count()); + + $bulk = new Bulk($client); + $bulk->addDocument($newDocument3, Action::OP_TYPE_DELETE); + + $data = $bulk->toArray(); + + $expected = array( + array('delete' => array('_index' => $indexName, '_type' => 'bulk_test', '_id' => 3)), + ); + $this->assertEquals($expected, $data); + + $bulk->send(); + + $type->getIndex()->refresh(); + + $this->assertEquals(2, $type->count()); + + try { + $type->getDocument(3); + $this->fail('Document #3 should be deleted'); + } catch (NotFoundException $e) { + $this->assertTrue(true); + } + } + + /** + * @group functional + */ + public function testUnicodeBulkSend() + { + $index = $this->_createIndex(); + $type = $index->getType('bulk_test'); + $type2 = $index->getType('bulk_test2'); + $client = $index->getClient(); + + $newDocument1 = $type->createDocument(1, array('name' => 'СегоднÑ, Ñ Ð²Ð¸Ð¶Ñƒ, оÑобенно груÑтен твой взглÑд,')); + $newDocument2 = new Document(2, array('name' => 'И руки оÑобенно тонки, колени обнÑв.')); + $newDocument3 = $type->createDocument(3, array('name' => 'ПоÑлушай: далеко, далеко, на озере Чад / ИзыÑканный бродит жираф.')); + + $documents = array( + $newDocument1, + $newDocument2, + $newDocument3, + ); + + $bulk = new Bulk($client); + $bulk->setType($type2); + $bulk->addDocuments($documents); + + $actions = $bulk->getActions(); + + $this->assertSame($newDocument1, $actions[0]->getDocument()); + $this->assertSame($newDocument2, $actions[1]->getDocument()); + $this->assertSame($newDocument3, $actions[2]->getDocument()); + } + + /** + * @group functional + */ + public function testSetIndexType() + { + $client = $this->_getClient(); + $index = $client->getIndex('index'); + $type = $index->getType('type'); + + $index2 = $client->getIndex('index2'); + $type2 = $index2->getType('type2'); + + $bulk = new Bulk($client); + + $this->assertFalse($bulk->hasIndex()); + $this->assertFalse($bulk->hasType()); + + $bulk->setIndex($index); + $this->assertTrue($bulk->hasIndex()); + $this->assertFalse($bulk->hasType()); + $this->assertEquals('index', $bulk->getIndex()); + + $bulk->setType($type2); + $this->assertTrue($bulk->hasIndex()); + $this->assertTrue($bulk->hasType()); + $this->assertEquals('index2', $bulk->getIndex()); + $this->assertEquals('type2', $bulk->getType()); + + $bulk->setType($type); + $this->assertTrue($bulk->hasIndex()); + $this->assertTrue($bulk->hasType()); + $this->assertEquals('index', $bulk->getIndex()); + $this->assertEquals('type', $bulk->getType()); + + $bulk->setIndex($index2); + $this->assertTrue($bulk->hasIndex()); + $this->assertTrue($bulk->hasType()); + $this->assertEquals('index2', $bulk->getIndex()); + $this->assertEquals('type', $bulk->getType()); + } + + /** + * @group unit + */ + public function testAddActions() + { + $client = $this->_getClient(); + $bulk = new Bulk($client); + + $action1 = new Action(Action::OP_TYPE_DELETE); + $action1->setIndex('index'); + $action1->setType('type'); + $action1->setId(1); + + $action2 = new Action(Action::OP_TYPE_INDEX); + $action2->setIndex('index'); + $action2->setType('type'); + $action2->setId(1); + $action2->setSource(array('name' => 'Batman')); + + $actions = array( + $action1, + $action2, + ); + + $bulk->addActions($actions); + + $getActions = $bulk->getActions(); + + $this->assertSame($action1, $getActions[0]); + $this->assertSame($action2, $getActions[1]); + } + + /** + * @group unit + */ + public function testAddRawData() + { + $bulk = new Bulk($this->_getClient()); + + $rawData = array( + array('index' => array('_index' => 'test', '_type' => 'user', '_id' => '1')), + array('user' => array('name' => 'hans')), + array('delete' => array('_index' => 'test', '_type' => 'user', '_id' => '2')), + array('delete' => array('_index' => 'test', '_type' => 'user', '_id' => '3')), + array('create' => array('_index' => 'test', '_type' => 'user', '_id' => '4')), + array('user' => array('name' => 'mans')), + array('delete' => array('_index' => 'test', '_type' => 'user', '_id' => '5')), + ); + + $bulk->addRawData($rawData); + + $actions = $bulk->getActions(); + + $this->assertInternalType('array', $actions); + $this->assertEquals(5, count($actions)); + + $this->assertInstanceOf('Elastica\Bulk\Action', $actions[0]); + $this->assertEquals('index', $actions[0]->getOpType()); + $this->assertEquals($rawData[0]['index'], $actions[0]->getMetadata()); + $this->assertTrue($actions[0]->hasSource()); + $this->assertEquals($rawData[1], $actions[0]->getSource()); + + $this->assertInstanceOf('Elastica\Bulk\Action', $actions[1]); + $this->assertEquals('delete', $actions[1]->getOpType()); + $this->assertEquals($rawData[2]['delete'], $actions[1]->getMetadata()); + $this->assertFalse($actions[1]->hasSource()); + + $this->assertInstanceOf('Elastica\Bulk\Action', $actions[2]); + $this->assertEquals('delete', $actions[2]->getOpType()); + $this->assertEquals($rawData[3]['delete'], $actions[2]->getMetadata()); + $this->assertFalse($actions[2]->hasSource()); + + $this->assertInstanceOf('Elastica\Bulk\Action', $actions[3]); + $this->assertEquals('create', $actions[3]->getOpType()); + $this->assertEquals($rawData[4]['create'], $actions[3]->getMetadata()); + $this->assertTrue($actions[3]->hasSource()); + $this->assertEquals($rawData[5], $actions[3]->getSource()); + + $this->assertInstanceOf('Elastica\Bulk\Action', $actions[4]); + $this->assertEquals('delete', $actions[4]->getOpType()); + $this->assertEquals($rawData[6]['delete'], $actions[4]->getMetadata()); + $this->assertFalse($actions[4]->hasSource()); + } + + /** + * @group unit + * @dataProvider invalidRawDataProvider + * @expectedException \Elastica\Exception\InvalidException + */ + public function testInvalidRawData($rawData, $failMessage) + { + $bulk = new Bulk($this->_getClient()); + + $bulk->addRawData($rawData); + + $this->fail($failMessage); + } + + public function invalidRawDataProvider() + { + return array( + array( + array( + array('index' => array('_index' => 'test', '_type' => 'user', '_id' => '1')), + array('user' => array('name' => 'hans')), + array('user' => array('name' => 'mans')), + ), + 'Two sources for one action', + ), + array( + array( + array('index' => array('_index' => 'test', '_type' => 'user', '_id' => '1')), + array('user' => array('name' => 'hans')), + array('upsert' => array('_index' => 'test', '_type' => 'user', '_id' => '2')), + ), + 'Invalid optype for action', + ), + array( + array( + array('user' => array('name' => 'mans')), + ), + 'Source without action', + ), + array( + array( + array(), + ), + 'Empty array', + ), + array( + array( + 'dummy', + ), + 'String as data', + ), + ); + } + + /** + * @group unit + */ + public function testCreateAbstractDocumentWithInvalidData() + { + //Wrong class type + try { + $badDocument = new \stdClass(); + AbstractDocument::create($badDocument); + $this->fail('Tried to create an abstract document with an object that is not a Document or Script, but no exception was thrown'); + } catch (\Exception $e) { + //Excepted exception was thrown. + } + + //Try to create document with a script + try { + $script = new Script(); + AbstractDocument::create($script, AbstractDocument::OP_TYPE_CREATE); + $this->fail('Tried to create an abstract document with a Script, but no exception was thrown'); + } catch (\Exception $e) { + //Excepted exception was thrown. + } + } + + /** + * @group functional + */ + public function testErrorRequest() + { + $index = $this->_createIndex(); + $type = $index->getType('bulk_test'); + $client = $index->getClient(); + + $documents = array( + $type->createDocument(1, array('name' => 'Mister Fantastic')), + $type->createDocument(2, array('name' => 'Invisible Woman')), + $type->createDocument(2, array('name' => 'The Human Torch')), + ); + + $documents[2]->setOpType(Document::OP_TYPE_CREATE); + + $bulk = new Bulk($client); + $bulk->addDocuments($documents); + + try { + $bulk->send(); + $bulk->fail('3rd document create should produce error'); + } catch (ResponseException $e) { + $this->assertContains('DocumentAlreadyExists', $e->getMessage()); + $failures = $e->getFailures(); + $this->assertInternalType('array', $failures); + $this->assertArrayHasKey(0, $failures); + $this->assertContains('DocumentAlreadyExists', $failures[0]); + } + } + + /** + * @group functional + */ + public function testRawDocumentDataRequest() + { + $index = $this->_createIndex(); + $type = $index->getType('bulk_test'); + $client = $index->getClient(); + + $documents = array( + new Document(null, '{"name":"Mister Fantastic"}'), + new Document(null, '{"name":"Invisible Woman"}'), + new Document(null, '{"name":"The Human Torch"}'), + ); + + $bulk = new Bulk($client); + $bulk->addDocuments($documents); + $bulk->setType($type); + + $expectedJson = '{"index":{}} +{"name":"Mister Fantastic"} +{"index":{}} +{"name":"Invisible Woman"} +{"index":{}} +{"name":"The Human Torch"} +'; + $expectedJson = str_replace(PHP_EOL, "\n", $expectedJson); + $this->assertEquals($expectedJson, $bulk->toString()); + + $response = $bulk->send(); + $this->assertTrue($response->isOk()); + + $type->getIndex()->refresh(); + + $response = $type->search(); + $this->assertEquals(3, $response->count()); + + foreach (array('Mister', 'Invisible', 'Torch') as $name) { + $result = $type->search($name); + $this->assertEquals(1, count($result->getResults())); + } + } + + /** + * @group functional + * @dataProvider udpDataProvider + */ + public function testUdp($clientConfig, $host, $port, $shouldFail = false) + { + if (!function_exists('socket_create')) { + $this->markTestSkipped('Function socket_create() does not exist.'); + } + $client = $this->_getClient($clientConfig); + $index = $client->getIndex('elastica_test'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + $type = $index->getType('udp_test'); + $client = $index->getClient(); + + $type->setMapping(array('name' => array('type' => 'string'))); + + $docs = array( + $type->createDocument(1, array('name' => 'Mister Fantastic')), + $type->createDocument(2, array('name' => 'Invisible Woman')), + $type->createDocument(3, array('name' => 'The Human Torch')), + $type->createDocument(4, array('name' => 'The Thing')), + $type->createDocument(5, array('name' => 'Mole Man')), + $type->createDocument(6, array('name' => 'The Skrulls')), + ); + + $bulk = new Bulk($client); + $bulk->addDocuments($docs); + + $bulk->sendUdp($host, $port); + + $i = 0; + $limit = 20; + do { + usleep(200000); + } while ($type->count() < 6 && ++$i < $limit); + + if ($shouldFail) { + $this->assertEquals($limit, $i, 'Invalid udp connection data. Test should fail'); + } else { + $this->assertLessThan($limit, $i, 'It took too much time waiting for UDP request result'); + + foreach ($docs as $doc) { + $getDoc = $type->getDocument($doc->getId()); + $this->assertEquals($doc->getData(), $getDoc->getData()); + } + } + } + + /** + * @group functional + */ + public function testUpdate() + { + $index = $this->_createIndex(); + $type = $index->getType('bulk_test'); + $client = $index->getClient(); + + $doc1 = $type->createDocument(1, array('name' => 'John')); + $doc2 = $type->createDocument(2, array('name' => 'Paul')); + $doc3 = $type->createDocument(3, array('name' => 'George')); + $doc4 = $type->createDocument(4, array('name' => 'Ringo')); + $documents = array($doc1, $doc2, $doc3, $doc4); + + //index some documents + $bulk = new Bulk($client); + $bulk->setType($type); + $bulk->addDocuments($documents); + $response = $bulk->send(); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $index->refresh(); + + //test updating via document + $doc2 = $type->createDocument(2, array('name' => 'The Walrus')); + $bulk = new Bulk($client); + $bulk->setType($type); + $updateAction = new \Elastica\Bulk\Action\UpdateDocument($doc2); + $bulk->addAction($updateAction); + $response = $bulk->send(); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $index->refresh(); + + $doc = $type->getDocument(2); + $docData = $doc->getData(); + $this->assertEquals('The Walrus', $docData['name']); + + //test updating via script + $script = new \Elastica\Script('ctx._source.name += param1;', array('param1' => ' was Paul'), null, 2); + $doc2 = new Document(); + $script->setUpsert($doc2); + $updateAction = Action\AbstractDocument::create($script, Action::OP_TYPE_UPDATE); + $bulk = new Bulk($client); + $bulk->setType($type); + $bulk->addAction($updateAction); + $response = $bulk->send(); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $index->refresh(); + + $doc2 = $type->getDocument(2); + $this->assertEquals('The Walrus was Paul', $doc2->name); + + //test upsert + $script = new \Elastica\Script('ctx._scource.counter += count', array('count' => 1), null, 5); + $doc = new Document('', array('counter' => 1)); + $script->setUpsert($doc); + $updateAction = Action\AbstractDocument::create($script, Action::OP_TYPE_UPDATE); + $bulk = new Bulk($client); + $bulk->setType($type); + $bulk->addAction($updateAction); + $response = $bulk->send(); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $index->refresh(); + $doc = $type->getDocument(5); + $this->assertEquals(1, $doc->counter); + + //test doc_as_upsert + $doc = new \Elastica\Document(6, array('test' => 'test')); + $doc->setDocAsUpsert(true); + $updateAction = Action\AbstractDocument::create($doc, Action::OP_TYPE_UPDATE); + $bulk = new Bulk($client); + $bulk->setType($type); + $bulk->addAction($updateAction); + $response = $bulk->send(); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $index->refresh(); + $doc = $type->getDocument(6); + $this->assertEquals('test', $doc->test); + + //test doc_as_upsert with set of documents (use of addDocuments) + $doc1 = new \Elastica\Document(7, array('test' => 'test1')); + $doc1->setDocAsUpsert(true); + $doc2 = new \Elastica\Document(8, array('test' => 'test2')); + $doc2->setDocAsUpsert(true); + $docs = array($doc1, $doc2); + $bulk = new Bulk($client); + $bulk->setType($type); + $bulk->addDocuments($docs, \Elastica\Bulk\Action::OP_TYPE_UPDATE); + $response = $bulk->send(); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $index->refresh(); + $doc = $type->getDocument(7); + $this->assertEquals('test1', $doc->test); + $doc = $type->getDocument(8); + $this->assertEquals('test2', $doc->test); + + //test updating via document with json string as data + $doc3 = $type->createDocument(2); + $bulk = new Bulk($client); + $bulk->setType($type); + $doc3->setData('{"name" : "Paul it is"}'); + $updateAction = new \Elastica\Bulk\Action\UpdateDocument($doc3); + $bulk->addAction($updateAction); + $response = $bulk->send(); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $index->refresh(); + + $doc = $type->getDocument(2); + $docData = $doc->getData(); + $this->assertEquals('Paul it is', $docData['name']); + + $index->delete(); + } + + /** + * @group unit + */ + public function testGetPath() + { + $client = $this->_getClient(); + $bulk = new Bulk($client); + + $this->assertEquals('_bulk', $bulk->getPath()); + + $indexName = 'testIndex'; + + $bulk->setIndex($indexName); + $this->assertEquals($indexName.'/_bulk', $bulk->getPath()); + + $typeName = 'testType'; + $bulk->setType($typeName); + $this->assertEquals($indexName.'/'.$typeName.'/_bulk', $bulk->getPath()); + } + + /** + * @group functional + */ + public function testRetry() + { + $index = $this->_createIndex(); + $type = $index->getType('bulk_test'); + $client = $index->getClient(); + + $doc1 = $type->createDocument(1, array('name' => 'Mister Fantastic')); + $doc1->setOpType(Action::OP_TYPE_UPDATE); + $doc1->setRetryOnConflict(5); + + $bulk = new Bulk($client); + $bulk->addDocument($doc1); + + $actions = $bulk->getActions(); + + $metadata = $actions[0]->getMetadata(); + $this->assertEquals(5, $metadata[ '_retry_on_conflict' ]); + + $script = new \Elastica\Script(''); + $script->setRetryOnConflict(5); + + $bulk = new Bulk($client); + $bulk->addScript($script); + + $actions = $bulk->getActions(); + + $metadata = $actions[0]->getMetadata(); + $this->assertEquals(5, $metadata[ '_retry_on_conflict' ]); + } + + /** + * @group unit + */ + public function testSetShardTimeout() + { + $bulk = new Bulk($this->_getClient()); + $this->assertInstanceOf('Elastica\Bulk', $bulk->setShardTimeout(10)); + } + + /** + * @group unit + */ + public function testSetRequestParam() + { + $bulk = new Bulk($this->_getClient()); + $this->assertInstanceOf('Elastica\Bulk', $bulk->setRequestParam('key', 'value')); + } + + /** + * @group benchmark + */ + public function testMemoryUsage() + { + $type = $this->_createIndex()->getType('test'); + + $data = array( + 'text1' => 'Very long text for a string', + 'text2' => 'But this is not very long', + 'text3' => 'random or not random?', + ); + + $startMemory = memory_get_usage(); + + for ($n = 1; $n < 10; $n++) { + $docs = array(); + + for ($i = 1; $i <= 3000; $i++) { + $docs[] = new Document(uniqid(), $data); + } + + $type->addDocuments($docs); + $docs = array(); + } + + unset($docs); + + $endMemory = memory_get_usage(); + + $this->assertLessThan(1.3, $endMemory / $startMemory); + } + + public function udpDataProvider() + { + return array( + array( + array(), + null, + null, + ), + array( + array(), + $this->_getHost(), + null, + ), + array( + array(), + null, + 9700, + ), + array( + array(), + $this->_getHost(), + 9700, + ), + array( + array( + 'udp' => array( + 'host' => $this->_getHost(), + 'port' => 9700, + ), + ), + null, + null, + ), + array( + array( + 'udp' => array( + 'host' => $this->_getHost(), + 'port' => 9800, + ), + ), + $this->_getHost(), + 9700, + ), + array( + array( + 'udp' => array( + 'host' => $this->_getHost(), + 'port' => 9800, + ), + ), + null, + null, + true, + ), + array( + array(), + $this->_getHost(), + 9800, + true, + ), + ); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ClientTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ClientTest.php new file mode 100644 index 00000000..a5f2b46f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ClientTest.php @@ -0,0 +1,1160 @@ +_getClient(); + $this->assertCount(1, $client->getConnections()); + } + + /** + * @group functional + */ + public function testConnectionsArray() + { + // Creates a new index 'xodoa' and a type 'user' inside this index + $client = $this->_getClient(array('connections' => array(array('host' => $this->_getHost(), 'port' => 9200)))); + $index = $client->getIndex('elastica_test1'); + $index->create(array(), true); + + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc1 = new Document(1, + array('username' => 'hans', 'test' => array('2', '3', '5')) + ); + $type->addDocument($doc1); + + // Adds a list of documents with _bulk upload to the index + $docs = array(); + $docs[] = new Document(2, + array('username' => 'john', 'test' => array('1', '3', '6')) + ); + $docs[] = new Document(3, + array('username' => 'rolf', 'test' => array('2', '3', '7')) + ); + $type->addDocuments($docs); + + // Refresh index + $index->refresh(); + + $resultSet = $type->search('rolf'); + } + + /** + * @group functional + */ + public function testTwoServersSame() + { + // Creates a new index 'xodoa' and a type 'user' inside this index + $client = $this->_getClient(array('connections' => array( + array('host' => $this->_getHost(), 'port' => 9200), + array('host' => $this->_getHost(), 'port' => 9200), + ))); + $index = $client->getIndex('elastica_test1'); + $index->create(array(), true); + + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc1 = new Document(1, + array('username' => 'hans', 'test' => array('2', '3', '5')) + ); + $type->addDocument($doc1); + + // Adds a list of documents with _bulk upload to the index + $docs = array(); + $docs[] = new Document(2, + array('username' => 'john', 'test' => array('1', '3', '6')) + ); + $docs[] = new Document(3, + array('username' => 'rolf', 'test' => array('2', '3', '7')) + ); + $type->addDocuments($docs); + + // Refresh index + $index->refresh(); + + $resultSet = $type->search('rolf'); + } + + /** + * @group unit + */ + public function testConnectionParamsArePreparedForConnectionsOption() + { + $url = 'https://'.$this->_getHost().':9200'; + $client = $this->_getClient(array('connections' => array(array('url' => $url)))); + $connection = $client->getConnection(); + + $this->assertEquals($url, $connection->getConfig('url')); + } + + /** + * @group unit + */ + public function testConnectionParamsArePreparedForServersOption() + { + $url = 'https://'.$this->_getHost().':9200'; + $client = $this->_getClient(array('servers' => array(array('url' => $url)))); + $connection = $client->getConnection(); + + $this->assertEquals($url, $connection->getConfig('url')); + } + + /** + * @group unit + */ + public function testConnectionParamsArePreparedForDefaultOptions() + { + $url = 'https://'.$this->_getHost().':9200'; + $client = $this->_getClient(array('url' => $url)); + $connection = $client->getConnection(); + + $this->assertEquals($url, $connection->getConfig('url')); + } + + /** + * @group functional + */ + public function testBulk() + { + $client = $this->_getClient(); + + $params = array( + array('index' => array('_index' => 'test', '_type' => 'user', '_id' => '1')), + array('user' => array('name' => 'hans')), + array('index' => array('_index' => 'test', '_type' => 'user', '_id' => '2')), + array('user' => array('name' => 'peter')), + ); + + $client->bulk($params); + } + + /** + * @group functional + */ + public function testOptimizeAll() + { + $client = $this->_getClient(); + $response = $client->optimizeAll(); + + $this->assertFalse($response->hasError()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testAddDocumentsEmpty() + { + $client = $this->_getClient(); + $client->addDocuments(array()); + } + + /** + * Test bulk operations on Index. + * + * @group functional + */ + public function testBulkIndex() + { + $index = $this->_getClient()->getIndex('cryptocurrencies'); + + $anonCoin = new Document(1, array('name' => 'anoncoin'), 'altcoin'); + $ixCoin = new Document(2, array('name' => 'ixcoin'), 'altcoin'); + + $index->addDocuments(array($anonCoin, $ixCoin)); + + $this->assertEquals('anoncoin', $index->getType('altcoin')->getDocument(1)->get('name')); + $this->assertEquals('ixcoin', $index->getType('altcoin')->getDocument(2)->get('name')); + + $index->updateDocuments(array( + new Document(1, array('name' => 'AnonCoin'), 'altcoin'), + new Document(2, array('name' => 'iXcoin'), 'altcoin'), + )); + + $this->assertEquals('AnonCoin', $index->getType('altcoin')->getDocument(1)->get('name')); + $this->assertEquals('iXcoin', $index->getType('altcoin')->getDocument(2)->get('name')); + + $ixCoin->setIndex(null); // Make sure the index gets set properly if missing + $index->deleteDocuments(array($anonCoin, $ixCoin)); + + $this->setExpectedException('Elastica\Exception\NotFoundException'); + $index->getType('altcoin')->getDocument(1); + $index->getType('altcoin')->getDocument(2); + } + + /** + * Test bulk operations on Type. + * + * @group functional + */ + public function testBulkType() + { + $type = $this->_getClient()->getIndex('cryptocurrencies')->getType('altcoin'); + + $liteCoin = new Document(1, array('name' => 'litecoin')); + $nameCoin = new Document(2, array('name' => 'namecoin')); + + $type->addDocuments(array($liteCoin, $nameCoin)); + + $this->assertEquals('litecoin', $type->getDocument(1)->get('name')); + $this->assertEquals('namecoin', $type->getDocument(2)->get('name')); + + $type->updateDocuments(array( + new Document(1, array('name' => 'LiteCoin')), + new Document(2, array('name' => 'NameCoin')), + )); + + $this->assertEquals('LiteCoin', $type->getDocument(1)->get('name')); + $this->assertEquals('NameCoin', $type->getDocument(2)->get('name')); + + $nameCoin->setType(null); // Make sure the type gets set properly if missing + $type->deleteDocuments(array($liteCoin, $nameCoin)); + + $this->setExpectedException('Elastica\Exception\NotFoundException'); + $type->getDocument(1); + $type->getDocument(2); + } + + /** + * @group functional + */ + public function testUpdateDocuments() + { + $indexName = 'test'; + $typeName = 'people'; + + $client = $this->_getClient(); + $type = $client->getIndex($indexName)->getType($typeName); + + $initialValue = 28; + $modifiedValue = 27; + + $doc1 = new Document( + 1, + array('name' => 'hans', 'age' => $initialValue), + $typeName, + $indexName + ); + $doc2 = new Document( + 2, + array('name' => 'anna', 'age' => $initialValue), + $typeName, + $indexName + ); + $data = array($doc1, $doc2); + $client->addDocuments($data); + + foreach ($data as $i => $doc) { + $data[$i]->age = $modifiedValue; + } + $client->updateDocuments($data); + + $docData1 = $type->getDocument(1)->getData(); + $docData2 = $type->getDocument(2)->getData(); + + $this->assertEquals($modifiedValue, $docData1['age']); + $this->assertEquals($modifiedValue, $docData2['age']); + } + + /** + * Test deleteIds method using string parameters. + * + * This test ensures that the deleteIds method of + * the \Elastica\Client can properly accept and use + * an $index parameter and $type parameter that are + * strings + * + * This test is a bit more verbose than just sending the + * values to deleteIds and checking for exceptions or + * warnings. + * + * It will add a document, search for it, then delete it + * using the parameter types we are interested in, and then + * re-search to verify that they have been deleted + * + * @group functional + */ + public function testDeleteIdsIdxStringTypeString() + { + $data = array('username' => 'hans'); + $userSearch = 'username:hans'; + + $index = $this->_createIndex(null, true, 2); + + // Create the index, deleting it first if it already exists + $index->create(array(), true); + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc = new Document(null, $data); + $doc->setRouting(1); + $result = $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $resultData = $result->getData(); + $ids = array($resultData['_id']); + + // Check to make sure the document is in the index + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(1, $totalHits); + + // And verify that the variables we are doing to send to + // deleteIds are the type we are testing for + $idxString = $index->getName(); + $typeString = $type->getName(); + $this->assertTrue(is_string($idxString)); + $this->assertTrue(is_string($typeString)); + + // Try to delete doc with a routing value which hashes to + // a different shard then the id. + $resp = $index->getClient()->deleteIds($ids, $index, $type, 2); + + // Refresh the index + $index->refresh(); + + // Research the index to verify that the items are still there + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(1, $totalHits); + + // Using the existing $index and $type variables which + // are \Elastica\Index and \Elastica\Type objects respectively + $resp = $index->getClient()->deleteIds($ids, $index, $type, 1); + + // Refresh the index to clear out deleted ID information + $index->refresh(); + + // Research the index to verify that the items have been deleted + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(0, $totalHits); + } + + /** + * Test deleteIds method using string parameter for $index + * and object parameter for $type. + * + * This test ensures that the deleteIds method of + * the \Elastica\Client can properly accept and use + * an $index parameter that is a string and a $type + * parameter that is of type \Elastica\Type + * + * This test is a bit more verbose than just sending the + * values to deleteIds and checking for exceptions or + * warnings. + * + * It will add a document, search for it, then delete it + * using the parameter types we are interested in, and then + * re-search to verify that they have been deleted + * + * @group functional + */ + public function testDeleteIdsIdxStringTypeObject() + { + $data = array('username' => 'hans'); + $userSearch = 'username:hans'; + + $index = $this->_createIndex(); + + // Create the index, deleting it first if it already exists + $index->create(array(), true); + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc = new Document(null, $data); + $result = $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $resultData = $result->getData(); + $ids = array($resultData['_id']); + + // Check to make sure the document is in the index + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(1, $totalHits); + + // And verify that the variables we are doing to send to + // deleteIds are the type we are testing for + $idxString = $index->getName(); + $this->assertTrue(is_string($idxString)); + $this->assertInstanceOf('Elastica\Type', $type); + + // Using the existing $index and $type variables which + // are \Elastica\Index and \Elastica\Type objects respectively + $resp = $index->getClient()->deleteIds($ids, $index, $type); + + // Refresh the index to clear out deleted ID information + $index->refresh(); + + // Research the index to verify that the items have been deleted + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(0, $totalHits); + } + + /** + * Test deleteIds method using object parameter for $index + * and string parameter for $type. + * + * This test ensures that the deleteIds method of + * the \Elastica\Client can properly accept and use + * an $index parameter that is of type Elasitca_Index + * and a $type parameter that is a string + * + * This test is a bit more verbose than just sending the + * values to deleteIds and checking for exceptions or + * warnings. + * + * It will add a document, search for it, then delete it + * using the parameter types we are interested in, and then + * re-search to verify that they have been deleted + * + * @group functional + */ + public function testDeleteIdsIdxObjectTypeString() + { + $data = array('username' => 'hans'); + $userSearch = 'username:hans'; + + $index = $this->_createIndex(); + + // Create the index, deleting it first if it already exists + $index->create(array(), true); + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc = new Document(null, $data); + $result = $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $resultData = $result->getData(); + $ids = array($resultData['_id']); + + // Check to make sure the document is in the index + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(1, $totalHits); + + // And verify that the variables we are doing to send to + // deleteIds are the type we are testing for + $typeString = $type->getName(); + $this->assertInstanceOf('Elastica\Index', $index); + $this->assertTrue(is_string($typeString)); + + // Using the existing $index and $type variables which + // are \Elastica\Index and \Elastica\Type objects respectively + $resp = $index->getClient()->deleteIds($ids, $index, $type); + + // Refresh the index to clear out deleted ID information + $index->refresh(); + + // Research the index to verify that the items have been deleted + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(0, $totalHits); + } + + /** + * Test deleteIds method using object parameter for $index + * and object parameter for $type. + * + * This test ensures that the deleteIds method of + * the \Elastica\Client can properly accept and use + * an $index parameter that is an object and a $type + * parameter that is of type \Elastica\Type + * + * This test is a bit more verbose than just sending the + * values to deleteIds and checking for exceptions or + * warnings. + * + * It will add a document, search for it, then delete it + * using the parameter types we are interested in, and then + * re-search to verify that they have been deleted + * + * @group functional + */ + public function testDeleteIdsIdxObjectTypeObject() + { + $data = array('username' => 'hans'); + $userSearch = 'username:hans'; + + $index = $this->_createIndex(); + + // Create the index, deleting it first if it already exists + $index->create(array(), true); + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc = new Document(null, $data); + $result = $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $resultData = $result->getData(); + $ids = array($resultData['_id']); + + // Check to make sure the document is in the index + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(1, $totalHits); + + // And verify that the variables we are doing to send to + // deleteIds are the type we are testing for + $this->assertInstanceOf('Elastica\Index', $index); + $this->assertInstanceOf('Elastica\Type', $type); + + // Using the existing $index and $type variables which + // are \Elastica\Index and \Elastica\Type objects respectively + $resp = $index->getClient()->deleteIds($ids, $index, $type); + + // Refresh the index to clear out deleted ID information + $index->refresh(); + + // Research the index to verify that the items have been deleted + $resultSet = $type->search($userSearch); + $totalHits = $resultSet->getTotalHits(); + $this->assertEquals(0, $totalHits); + } + + /** + * @group functional + */ + public function testOneInvalidConnection() + { + $client = $this->_getClient(); + + // First connection work, second should not work + $connection1 = new Connection(array('port' => '9100', 'timeout' => 2, 'host' => $this->_getHost())); + $connection2 = new Connection(array('port' => '9200', 'timeout' => 2, 'host' => $this->_getHost())); + + $client->setConnections(array($connection1, $connection2)); + + $client->request('_status', Request::GET); + + $connections = $client->getConnections(); + + // two connections are setup + $this->assertEquals(2, count($connections)); + + // One connection has to be disabled + $this->assertTrue($connections[0]->isEnabled() == false || $connections[1]->isEnabled() == false); + } + + /** + * @group functional + */ + public function testTwoInvalidConnection() + { + $client = $this->_getClient(); + + // First connection work, second should not work + $connection1 = new Connection(array('port' => '9101', 'timeout' => 2)); + $connection2 = new Connection(array('port' => '9102', 'timeout' => 2)); + + $client->setConnections(array($connection1, $connection2)); + + try { + $client->request('_status', Request::GET); + $this->fail('Should throw exception as no connection valid'); + } catch (HttpException $e) { + } + + $connections = $client->getConnections(); + + // two connections are setup + $this->assertEquals(2, count($connections)); + + // One connection has to be disabled + $this->assertTrue($connections[0]->isEnabled() == false || $connections[1]->isEnabled() == false); + } + + /** + * Tests if the callback works in case a connection is down. + * + * @group functional + */ + public function testCallback() + { + $count = 0; + $object = $this; + + // Callback function which verifies that disabled connection objects are returned + $callback = function ($connection, $exception, $client) use (&$object, &$count) { + $object->assertInstanceOf('Elastica\Connection', $connection); + $object->assertInstanceOf('Elastica\Exception\ConnectionException', $exception); + $object->assertInstanceOf('Elastica\Client', $client); + $object->assertFalse($connection->isEnabled()); + $count++; + }; + + $client = $this->_getClient(array(), $callback); + + // First connection work, second should not work + $connection1 = new Connection(array('port' => '9101', 'timeout' => 2)); + $connection2 = new Connection(array('port' => '9102', 'timeout' => 2)); + + $client->setConnections(array($connection1, $connection2)); + + $this->assertEquals(0, $count); + + try { + $client->request('_status', Request::GET); + $this->fail('Should throw exception as no connection valid'); + } catch (HttpException $e) { + $this->assertTrue(true); + } + + // Two disabled connections (from closure call) + $this->assertEquals(2, $count); + } + + /** + * @group functional + */ + public function testUrlConstructor() + { + $url = 'http://'.$this->_getHost().':9200/'; + + // Url should overwrite invalid host + $client = $this->_getClient(array('url' => $url, 'port' => '9101', 'timeout' => 2)); + + $response = $client->request('_status'); + $this->assertInstanceOf('Elastica\Response', $response); + } + + /** + * @group functional + */ + public function testUpdateDocumentByDocument() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + $newDocument = new Document(1, array('field1' => 'value1', 'field2' => 'value2')); + $type->addDocument($newDocument); + + $updateDocument = new Document(1, array('field2' => 'value2changed', 'field3' => 'value3added')); + $client->updateDocument(1, $updateDocument, $index->getName(), $type->getName()); + + $document = $type->getDocument(1); + + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('value2changed', $data['field2']); + $this->assertArrayHasKey('field3', $data); + $this->assertEquals('value3added', $data['field3']); + } + + /** + * @group functional + */ + public function testUpdateDocumentByScript() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + $newDocument = new Document(1, array('field1' => 'value1', 'field2' => 10, 'field3' => 'should be removed', 'field4' => 'should be changed')); + $type->addDocument($newDocument); + + $script = new Script('ctx._source.field2 += 5; ctx._source.remove("field3"); ctx._source.field4 = "changed"'); + $client->updateDocument(1, $script, $index->getName(), $type->getName()); + + $document = $type->getDocument(1); + + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals(15, $data['field2']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('changed', $data['field4']); + $this->assertArrayNotHasKey('field3', $data); + } + + /** + * @group functional + */ + public function testUpdateDocumentByScriptWithUpsert() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + $script = new Script('ctx._source.field2 += count; ctx._source.remove("field3"); ctx._source.field4 = "changed"'); + $script->setParam('count', 5); + $script->setUpsert(array('field1' => 'value1', 'field2' => 10, 'field3' => 'should be removed', 'field4' => 'value4')); + + // should use document fields because document does not exist, script is avoided + $client->updateDocument(1, $script, $index->getName(), $type->getName(), array('fields' => '_source')); + + $document = $type->getDocument(1); + + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals(10, $data['field2']); + $this->assertArrayHasKey('field3', $data); + $this->assertEquals('should be removed', $data['field3']); + $this->assertArrayHasKey('field4', $data); + $this->assertEquals('value4', $data['field4']); + + // should use script because document exists, document values are ignored + $client->updateDocument(1, $script, $index->getName(), $type->getName(), array('fields' => '_source')); + + $document = $type->getDocument(1); + + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals(15, $data['field2']); + $this->assertArrayHasKey('field4', $data); + $this->assertEquals('changed', $data['field4']); + $this->assertArrayNotHasKey('field3', $data); + } + + /** + * @group functional + */ + public function testUpdateDocumentByRawData() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + $newDocument = new Document(1, array('field1' => 'value1')); + $type->addDocument($newDocument); + + $rawData = array( + 'doc' => array( + 'field2' => 'value2', + ), + ); + + $response = $client->updateDocument(1, $rawData, $index->getName(), $type->getName(), array('retry_on_conflict' => 1)); + $this->assertTrue($response->isOk()); + + $document = $type->getDocument(1); + + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('value2', $data['field2']); + } + + /** + * @group functional + */ + public function testUpdateDocumentByDocumentWithUpsert() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + $newDocument = new Document(1, array('field1' => 'value1updated', 'field2' => 'value2updated')); + $upsert = new Document(1, array('field1' => 'value1', 'field2' => 'value2')); + $newDocument->setUpsert($upsert); + $client->updateDocument(1, $newDocument, $index->getName(), $type->getName(), array('fields' => '_source')); + + $document = $type->getDocument(1); + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('value2', $data['field2']); + + // should use update document because document exists, upsert document values are ignored + $client->updateDocument(1, $newDocument, $index->getName(), $type->getName(), array('fields' => '_source')); + + $document = $type->getDocument(1); + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1updated', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('value2updated', $data['field2']); + } + + /** + * @group functional + */ + public function testDocAsUpsert() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + //Confirm document one does not exist + try { + $document = $type->getDocument(1); + $this->fail('Exception was not thrown. Maybe the document exists?'); + } catch (\Exception $e) { + //Ignore the exception because we expect the document to not exist. + } + + $newDocument = new Document(1, array('field1' => 'value1', 'field2' => 'value2')); + $newDocument->setDocAsUpsert(true); + $client->updateDocument(1, $newDocument, $index->getName(), $type->getName(), array('fields' => '_source')); + + $document = $type->getDocument(1); + $this->assertInstanceOf('Elastica\Document', $document); + $data = $document->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('value2', $data['field2']); + } + + /** + * @group functional + */ + public function testUpdateWithInvalidType() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + //Try to update using a stdClass object + $badDocument = new \stdClass(); + + try { + $client->updateDocument(1, $badDocument, $index->getName(), $type->getName()); + $this->fail('Tried to update using an object that is not a Document or a Script but no exception was thrown'); + } catch (\Exception $e) { + //Good. An exception was thrown. + } + } + + /** + * @group functional + */ + public function testDeleteDocuments() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + $docs = array( + new Document(1, array('field' => 'value1'), $type, $index), + new Document(2, array('field' => 'value2'), $type, $index), + new Document(3, array('field' => 'value3'), $type, $index), + ); + + $response = $client->addDocuments($docs); + + $this->assertInstanceOf('Elastica\Bulk\ResponseSet', $response); + $this->assertEquals(3, count($response)); + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + $this->assertEquals('', $response->getError()); + + $index->refresh(); + + $this->assertEquals(3, $type->count()); + + $deleteDocs = array( + $docs[0], + $docs[2], + ); + + $response = $client->deleteDocuments($deleteDocs); + + $this->assertInstanceOf('Elastica\Bulk\ResponseSet', $response); + $this->assertEquals(2, count($response)); + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + $this->assertEquals('', $response->getError()); + + $index->refresh(); + + $this->assertEquals(1, $type->count()); + } + + /** + * @group functional + */ + public function testLastRequestResponse() + { + $client = $this->_getClient(); + $response = $client->request('_status'); + + $this->assertInstanceOf('Elastica\Response', $response); + + $lastRequest = $client->getLastRequest(); + + $this->assertInstanceOf('Elastica\Request', $lastRequest); + $this->assertEquals('_status', $lastRequest->getPath()); + + $lastResponse = $client->getLastResponse(); + $this->assertInstanceOf('Elastica\Response', $lastResponse); + $this->assertSame($response, $lastResponse); + } + + /** + * @group functional + */ + public function testUpdateDocumentPopulateFields() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $client = $index->getClient(); + + $newDocument = new Document(1, array('field1' => 'value1', 'field2' => 10, 'field3' => 'should be removed', 'field4' => 'value4')); + $newDocument->setAutoPopulate(); + $type->addDocument($newDocument); + + $script = new Script('ctx._source.field2 += count; ctx._source.remove("field3"); ctx._source.field4 = "changed"'); + $script->setParam('count', 5); + $script->setUpsert($newDocument); + + $client->updateDocument( + 1, + $script, + $index->getName(), + $type->getName(), + array('fields' => '_source') + ); + + $data = $type->getDocument(1)->getData(); + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals(15, $data['field2']); + $this->assertArrayHasKey('field4', $data); + $this->assertEquals('changed', $data['field4']); + $this->assertArrayNotHasKey('field3', $data); + + $script = new Script('ctx._source.field2 += count; ctx._source.remove("field4"); ctx._source.field1 = field1;'); + $script->setParam('count', 5); + $script->setParam('field1', 'updated'); + $script->setUpsert($newDocument); + + $client->updateDocument( + 1, + $script, + $index->getName(), + $type->getName(), + array('fields' => 'field2,field4') + ); + + $document = $type->getDocument(1); + + $data = $document->getData(); + + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('updated', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals(20, $data['field2']); + $this->assertArrayNotHasKey('field3', $data); + $this->assertArrayNotHasKey('field4', $data); + } + + /** + * @group functional + */ + public function testAddDocumentsWithoutIds() + { + $docs = array(); + for ($i = 0; $i < 10; $i++) { + $docs[] = new Document(null, array('pos' => $i)); + } + + foreach ($docs as $doc) { + $this->assertFalse($doc->hasId()); + } + + $index = $this->_createIndex(); + + $client = $index->getClient(); + $client->setConfigValue('document', array('autoPopulate' => true)); + + $type = $index->getType('pos'); + $type->addDocuments($docs); + + foreach ($docs as $doc) { + $this->assertTrue($doc->hasId()); + $this->assertTrue($doc->hasVersion()); + $this->assertEquals(1, $doc->getVersion()); + } + } + + /** + * @group unit + */ + public function testConfigValue() + { + $config = array( + 'level1' => array( + 'level2' => array( + 'level3' => 'value3', + ), + 'level21' => 'value21', + ), + 'level11' => 'value11', + ); + $client = $this->_getClient($config); + + $this->assertNull($client->getConfigValue('level12')); + $this->assertFalse($client->getConfigValue('level12', false)); + $this->assertEquals(10, $client->getConfigValue('level12', 10)); + + $this->assertEquals('value11', $client->getConfigValue('level11')); + $this->assertNotNull($client->getConfigValue('level11')); + $this->assertNotEquals(false, $client->getConfigValue('level11', false)); + $this->assertNotEquals(10, $client->getConfigValue('level11', 10)); + + $this->assertEquals('value3', $client->getConfigValue(array('level1', 'level2', 'level3'))); + $this->assertInternalType('array', $client->getConfigValue(array('level1', 'level2'))); + } + + /** + * @group functional + */ + public function testArrayQuery() + { + $client = $this->_getClient(); + + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + $type->addDocument(new Document(1, array('username' => 'ruflin'))); + $index->refresh(); + + $query = array( + 'query' => array( + 'query_string' => array( + 'query' => 'ruflin', + ), + ), + ); + + $path = $index->getName().'/'.$type->getName().'/_search'; + + $response = $client->request($path, Request::GET, $query); + $responseArray = $response->getData(); + + $this->assertEquals(1, $responseArray['hits']['total']); + } + + /** + * @group functional + */ + public function testJSONQuery() + { + $client = $this->_getClient(); + + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + $type->addDocument(new Document(1, array('username' => 'ruflin'))); + $index->refresh(); + + $query = '{"query":{"query_string":{"query":"ruflin"}}}'; + + $path = $index->getName().'/'.$type->getName().'/_search'; + + $response = $client->request($path, Request::GET, $query); + $responseArray = $response->getData(); + + $this->assertEquals(1, $responseArray['hits']['total']); + } + + /** + * @group unit + */ + public function testAddHeader() + { + $client = $this->_getClient(); + + // add one header + $client->addHeader('foo', 'bar'); + $this->assertEquals(array('foo' => 'bar'), $client->getConfigValue('headers')); + + // check class + $this->assertInstanceOf('Elastica\Client', $client->addHeader('foo', 'bar')); + + // check invalid parameters + try { + $client->addHeader(new \stdClass(), 'foo'); + $this->fail('Header name is not a string but exception not thrown'); + } catch (InvalidException $ex) { + } + + try { + $client->addHeader('foo', new \stdClass()); + $this->fail('Header value is not a string but exception not thrown'); + } catch (InvalidException $ex) { + } + } + + /** + * @group unit + */ + public function testRemoveHeader() + { + $client = $this->_getClient(); + + // set headers + $headers = array( + 'first' => 'first value', + 'second' => 'second value', + ); + foreach ($headers as $key => $value) { + $client->addHeader($key, $value); + } + $this->assertEquals($headers, $client->getConfigValue('headers')); + + // remove one + $client->removeHeader('first'); + unset($headers['first']); + $this->assertEquals($headers, $client->getConfigValue('headers')); + + // check class + $this->assertInstanceOf('Elastica\Client', $client->removeHeader('second')); + + // check invalid parameter + try { + $client->removeHeader(new \stdClass()); + $this->fail('Header name is not a string but exception not thrown'); + } catch (InvalidException $ex) { + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/IndexTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/IndexTest.php new file mode 100644 index 00000000..00a121fc --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/IndexTest.php @@ -0,0 +1,144 @@ + 'yellow', + 'number_of_shards' => 1, + 'number_of_replicas' => 2, + 'active_primary_shards' => 3, + 'active_shards' => 4, + 'relocating_shards' => 5, + 'initializing_shards' => 6, + 'unassigned_shards' => 7, + 'shards' => array( + '0' => array( + 'status' => 'yellow', + 'primary_active' => false, + 'active_shards' => 0, + 'relocating_shards' => 1, + 'initializing_shards' => 0, + 'unassigned_shards' => 1, + ), + '1' => array( + 'status' => 'yellow', + 'primary_active' => true, + 'active_shards' => 1, + 'relocating_shards' => 0, + 'initializing_shards' => 0, + 'unassigned_shards' => 1, + ), + '2' => array( + 'status' => 'green', + 'primary_active' => true, + 'active_shards' => 1, + 'relocating_shards' => 0, + 'initializing_shards' => 0, + 'unassigned_shards' => 0, + ), + ), + ); + + $this->_index = new HealthIndex('test', $data); + } + + /** + * @group unit + */ + public function testGetName() + { + $this->assertEquals('test', $this->_index->getName()); + } + + /** + * @group unit + */ + public function testGetStatus() + { + $this->assertEquals('yellow', $this->_index->getStatus()); + } + + /** + * @group unit + */ + public function testGetNumberOfShards() + { + $this->assertEquals(1, $this->_index->getNumberOfShards()); + } + + /** + * @group unit + */ + public function testGetNumberOfReplicas() + { + $this->assertEquals(2, $this->_index->getNumberOfReplicas()); + } + + /** + * @group unit + */ + public function testGetActivePrimaryShards() + { + $this->assertEquals(3, $this->_index->getActivePrimaryShards()); + } + + /** + * @group unit + */ + public function testGetActiveShards() + { + $this->assertEquals(4, $this->_index->getActiveShards()); + } + + /** + * @group unit + */ + public function testGetRelocatingShards() + { + $this->assertEquals(5, $this->_index->getRelocatingShards()); + } + + /** + * @group unit + */ + public function testGetInitializingShards() + { + $this->assertEquals(6, $this->_index->getInitializingShards()); + } + + /** + * @group unit + */ + public function testGetUnassignedShards() + { + $this->assertEquals(7, $this->_index->getUnassignedShards()); + } + + /** + * @group unit + */ + public function testGetShards() + { + $shards = $this->_index->getShards(); + + $this->assertInternalType('array', $shards); + $this->assertEquals(3, count($shards)); + + foreach ($shards as $shard) { + $this->assertInstanceOf('Elastica\Cluster\Health\Shard', $shard); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/ShardTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/ShardTest.php new file mode 100644 index 00000000..5a436623 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/Health/ShardTest.php @@ -0,0 +1,85 @@ + 'red', + 'primary_active' => true, + 'active_shards' => 1, + 'relocating_shards' => 0, + 'initializing_shards' => 0, + 'unassigned_shards' => 1, + ); + + $this->_shard = new HealthShard(2, $shardData); + } + + /** + * @group unit + */ + public function testGetShardNumber() + { + $this->assertEquals(2, $this->_shard->getShardNumber()); + } + + /** + * @group unit + */ + public function testGetStatus() + { + $this->assertEquals('red', $this->_shard->getStatus()); + } + + /** + * @group unit + */ + public function testisPrimaryActive() + { + $this->assertTrue($this->_shard->isPrimaryActive()); + } + + /** + * @group unit + */ + public function testIsActive() + { + $this->assertTrue($this->_shard->isActive()); + } + + /** + * @group unit + */ + public function testIsRelocating() + { + $this->assertFalse($this->_shard->isRelocating()); + } + + /** + * @group unit + */ + public function testIsInitialized() + { + $this->assertFalse($this->_shard->isInitialized()); + } + + /** + * @group unit + */ + public function testIsUnassigned() + { + $this->assertTrue($this->_shard->isUnassigned()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/HealthTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/HealthTest.php new file mode 100644 index 00000000..bb3e82ec --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/HealthTest.php @@ -0,0 +1,147 @@ + 'test_cluster', + 'status' => 'green', + 'timed_out' => false, + 'number_of_nodes' => 10, + 'number_of_data_nodes' => 8, + 'active_primary_shards' => 3, + 'active_shards' => 4, + 'relocating_shards' => 2, + 'initializing_shards' => 7, + 'unassigned_shards' => 5, + 'indices' => array( + 'index_one' => array( + ), + 'index_two' => array( + ), + ), + ); + + $health = $this + ->getMockBuilder('Elastica\Cluster\Health') + ->setConstructorArgs(array($this->_getClient())) + ->setMethods(array('_retrieveHealthData')) + ->getMock(); + + $health + ->expects($this->any()) + ->method('_retrieveHealthData') + ->will($this->returnValue($data)); + + // need to explicitly refresh because the mocking won't refresh the data in the constructor + $health->refresh(); + + $this->_health = $health; + } + + /** + * @group unit + */ + public function testGetClusterName() + { + $this->assertEquals('test_cluster', $this->_health->getClusterName()); + } + + /** + * @group unit + */ + public function testGetStatus() + { + $this->assertEquals('green', $this->_health->getStatus()); + } + + /** + * @group unit + */ + public function testGetTimedOut() + { + $this->assertFalse($this->_health->getTimedOut()); + } + + /** + * @group unit + */ + public function testGetNumberOfNodes() + { + $this->assertEquals(10, $this->_health->getNumberOfNodes()); + } + + /** + * @group unit + */ + public function testGetNumberOfDataNodes() + { + $this->assertEquals(8, $this->_health->getNumberOfDataNodes()); + } + + /** + * @group unit + */ + public function testGetActivePrimaryShards() + { + $this->assertEquals(3, $this->_health->getActivePrimaryShards()); + } + + /** + * @group unit + */ + public function testGetActiveShards() + { + $this->assertEquals(4, $this->_health->getActiveShards()); + } + + /** + * @group unit + */ + public function testGetRelocatingShards() + { + $this->assertEquals(2, $this->_health->getRelocatingShards()); + } + + /** + * @group unit + */ + public function testGetInitializingShards() + { + $this->assertEquals(7, $this->_health->getInitializingShards()); + } + + /** + * @group unit + */ + public function testGetUnassignedShards() + { + $this->assertEquals(5, $this->_health->getUnassignedShards()); + } + + /** + * @group unit + */ + public function testGetIndices() + { + $indices = $this->_health->getIndices(); + + $this->assertInternalType('array', $indices); + $this->assertEquals(2, count($indices)); + + foreach ($indices as $index) { + $this->assertInstanceOf('Elastica\Cluster\Health\Index', $index); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/SettingsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/SettingsTest.php new file mode 100644 index 00000000..2a52fc8f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Cluster/SettingsTest.php @@ -0,0 +1,117 @@ +_createIndex(); + + if (count($index->getClient()->getCluster()->getNodes()) < 2) { + $this->markTestSkipped('At least two master nodes have to be running for this test'); + } + + $settings = new Settings($index->getClient()); + + $settings->setTransient('discovery.zen.minimum_master_nodes', 2); + $data = $settings->get(); + $this->assertEquals(2, $data['transient']['discovery']['zen']['minimum_master_nodes']); + + $settings->setTransient('discovery.zen.minimum_master_nodes', 1); + $data = $settings->get(); + $this->assertEquals(1, $data['transient']['discovery']['zen']['minimum_master_nodes']); + } + + /** + * @group functional + */ + public function testSetPersistent() + { + $index = $this->_createIndex(); + + if (count($index->getClient()->getCluster()->getNodes()) < 2) { + $this->markTestSkipped('At least two master nodes have to be running for this test'); + } + + $settings = new Settings($index->getClient()); + + $settings->setPersistent('discovery.zen.minimum_master_nodes', 2); + $data = $settings->get(); + $this->assertEquals(2, $data['persistent']['discovery']['zen']['minimum_master_nodes']); + + $settings->setPersistent('discovery.zen.minimum_master_nodes', 1); + $data = $settings->get(); + $this->assertEquals(1, $data['persistent']['discovery']['zen']['minimum_master_nodes']); + } + + /** + * @group functional + */ + public function testSetReadOnly() + { + // Create two indices to check that the complete cluster is read only + $settings = new Settings($this->_getClient()); + $settings->setReadOnly(false); + $index1 = $this->_createIndex(); + $index2 = $this->_createIndex(); + + $doc1 = new Document(null, array('hello' => 'world')); + $doc2 = new Document(null, array('hello' => 'world')); + $doc3 = new Document(null, array('hello' => 'world')); + $doc4 = new Document(null, array('hello' => 'world')); + $doc5 = new Document(null, array('hello' => 'world')); + $doc6 = new Document(null, array('hello' => 'world')); + + // Check that adding documents work + $index1->getType('test')->addDocument($doc1); + $index2->getType('test')->addDocument($doc2); + + $response = $settings->setReadOnly(true); + $this->assertFalse($response->hasError()); + $setting = $settings->getTransient('cluster.blocks.read_only'); + $this->assertEquals('true', $setting); + + // Make sure both index are read only + try { + $index1->getType('test')->addDocument($doc3); + $this->fail('should throw read only exception'); + } catch (ResponseException $e) { + $message = $e->getMessage(); + $this->assertContains('ClusterBlockException', $message); + $this->assertContains('cluster read-only', $message); + } + + try { + $index2->getType('test')->addDocument($doc4); + $this->fail('should throw read only exception'); + } catch (ResponseException $e) { + $message = $e->getMessage(); + $this->assertContains('ClusterBlockException', $message); + $this->assertContains('cluster read-only', $message); + } + + $response = $settings->setReadOnly(false); + $this->assertFalse($response->hasError()); + $setting = $settings->getTransient('cluster.blocks.read_only'); + $this->assertEquals('false', $setting); + + // Check that adding documents works again + $index1->getType('test')->addDocument($doc5); + $index2->getType('test')->addDocument($doc6); + + $index1->refresh(); + $index2->refresh(); + + // 2 docs should be in each index + $this->assertEquals(2, $index1->count()); + $this->assertEquals(2, $index2->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ClusterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ClusterTest.php new file mode 100644 index 00000000..ebd89f01 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ClusterTest.php @@ -0,0 +1,83 @@ +_getClient(); + + $cluster = new Cluster($client); + + foreach ($cluster->getNodeNames() as $name) { + $this->assertEquals('Elastica', $name); + } + } + + /** + * @group functional + */ + public function testGetNodes() + { + $client = $this->_getClient(); + $cluster = $client->getCluster(); + + $nodes = $cluster->getNodes(); + + foreach ($nodes as $node) { + $this->assertInstanceOf('Elastica\Node', $node); + } + + $this->assertGreaterThan(0, count($nodes)); + } + + /** + * @group functional + */ + public function testGetState() + { + $client = $this->_getClient(); + $cluster = $client->getCluster(); + $state = $cluster->getState(); + $this->assertInternalType('array', $state); + } + + /** + * @group functional + */ + public function testGetIndexNames() + { + $client = $this->_getClient(); + $cluster = $client->getCluster(); + + $index = $this->_createIndex(); + $index->delete(); + $cluster->refresh(); + + // Checks that index does not exist + $indexNames = $cluster->getIndexNames(); + $this->assertNotContains($index->getName(), $indexNames); + + $index = $this->_createIndex(); + $cluster->refresh(); + + // Now index should exist + $indexNames = $cluster->getIndexNames(); + $this->assertContains($index->getname(), $indexNames); + } + + /** + * @group functional + */ + public function testGetHealth() + { + $client = $this->_getClient(); + $this->assertInstanceOf('Elastica\Cluster\Health', $client->getCluster()->getHealth()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/ConnectionPoolTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/ConnectionPoolTest.php new file mode 100644 index 00000000..ee03587a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/ConnectionPoolTest.php @@ -0,0 +1,112 @@ +createPool(); + + $this->assertEquals($this->getConnections(), $pool->getConnections()); + } + + /** + * @group unit + */ + public function testSetConnections() + { + $pool = $this->createPool(); + + $connections = $this->getConnections(5); + + $pool->setConnections($connections); + + $this->assertEquals($connections, $pool->getConnections()); + + $this->assertInstanceOf('Elastica\Connection\ConnectionPool', $pool->setConnections($connections)); + } + + /** + * @group unit + */ + public function testAddConnection() + { + $pool = $this->createPool(); + $pool->setConnections(array()); + + $connections = $this->getConnections(5); + + foreach ($connections as $connection) { + $pool->addConnection($connection); + } + + $this->assertEquals($connections, $pool->getConnections()); + + $this->assertInstanceOf('Elastica\Connection\ConnectionPool', $pool->addConnection($connections[0])); + } + + /** + * @group unit + */ + public function testHasConnection() + { + $pool = $this->createPool(); + + $this->assertTrue($pool->hasConnection()); + } + + /** + * @group unit + */ + public function testFailHasConnections() + { + $pool = $this->createPool(); + + $pool->setConnections(array()); + + $this->assertFalse($pool->hasConnection()); + } + + /** + * @group unit + */ + public function testGetConnection() + { + $pool = $this->createPool(); + + $this->assertInstanceOf('Elastica\Connection', $pool->getConnection()); + } + + protected function getConnections($quantity = 1) + { + $params = array(); + $connections = array(); + + for ($i = 0; $i < $quantity; $i++) { + $connections[] = new Connection($params); + } + + return $connections; + } + + protected function createPool() + { + $connections = $this->getConnections(); + $strategy = StrategyFactory::create('Simple'); + + $pool = new ConnectionPool($connections, $strategy); + + return $pool; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTest.php new file mode 100644 index 00000000..de8290ae --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTest.php @@ -0,0 +1,97 @@ +getConnection(array()); + + $this->assertEquals(1, $count); + } + + /** + * @group unit + */ + public function testIsValid() + { + // closure is valid + $isValid = CallbackStrategy::isValid(function () {}); + $this->assertTrue($isValid); + + // object implementing __invoke + $isValid = CallbackStrategy::isValid(new CallbackStrategyTestHelper()); + $this->assertTrue($isValid); + + // static method as string + $isValid = CallbackStrategy::isValid('Elastica\Test\Connection\Strategy\CallbackStrategyTestHelper::getFirstConnectionStatic'); + $this->assertTrue($isValid); + + // static method as array + $isValid = CallbackStrategy::isValid(array('Elastica\Test\Connection\Strategy\CallbackStrategyTestHelper', 'getFirstConnectionStatic')); + $this->assertTrue($isValid); + + // object method + $isValid = CallbackStrategy::isValid(array(new CallbackStrategyTestHelper(), 'getFirstConnectionStatic')); + $this->assertTrue($isValid); + + // function name + $isValid = CallbackStrategy::isValid('array_pop'); + $this->assertTrue($isValid); + } + + /** + * @group unit + */ + public function testFailIsValid() + { + $isValid = CallbackStrategy::isValid(new \stdClass()); + $this->assertFalse($isValid); + + $isValid = CallbackStrategy::isValid('array_pop_pop_pop_pop_pop_pop'); + $this->assertFalse($isValid); + } + + /** + * @group functional + */ + public function testConnection() + { + $count = 0; + + $config = array('connectionStrategy' => function ($connections) use (&$count) { + ++$count; + + return current($connections); + }); + + $client = $this->_getClient($config); + $response = $client->request('/_aliases'); + + $this->assertEquals(1, $count); + + $this->assertTrue($response->isOk()); + + $strategy = $client->getConnectionStrategy(); + + $this->assertInstanceOf('Elastica\Connection\Strategy\CallbackStrategy', $strategy); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTestHelper.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTestHelper.php new file mode 100644 index 00000000..b15efe91 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/CallbackStrategyTestHelper.php @@ -0,0 +1,20 @@ + 'RoundRobin'); + $client = $this->_getClient($config); + $response = $client->request('/_aliases'); + /* @var $response Response */ + + $this->_checkResponse($response); + + $this->_checkStrategy($client); + } + + /** + * @group unit + */ + public function testOldStrategySetted() + { + $config = array('roundRobin' => true); + $client = $this->_getClient($config); + + $this->_checkStrategy($client); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\ConnectionException + */ + public function testFailConnection() + { + $config = array('connectionStrategy' => 'RoundRobin', 'host' => '255.255.255.0', 'timeout' => $this->_timeout); + $client = $this->_getClient($config); + + $this->_checkStrategy($client); + + $client->request('/_aliases'); + } + + /** + * @group functional + */ + public function testWithOneFailConnection() + { + $connections = array( + new Connection(array('host' => '255.255.255.0', 'timeout' => $this->_timeout)), + new Connection(array('host' => $this->_getHost(), 'timeout' => $this->_timeout)), + ); + + $count = 0; + $callback = function ($connection, $exception, $client) use (&$count) { + ++$count; + }; + + $client = $this->_getClient(array('connectionStrategy' => 'RoundRobin'), $callback); + $client->setConnections($connections); + + $response = $client->request('/_aliases'); + /* @var $response Response */ + + $this->_checkResponse($response); + + $this->_checkStrategy($client); + + $this->assertLessThan(count($connections), $count); + } + + /** + * @group functional + */ + public function testWithNoValidConnection() + { + $connections = array( + new Connection(array('host' => '255.255.255.0', 'timeout' => $this->_timeout)), + new Connection(array('host' => '45.45.45.45', 'port' => '80', 'timeout' => $this->_timeout)), + new Connection(array('host' => '10.123.213.123', 'timeout' => $this->_timeout)), + ); + + $count = 0; + $client = $this->_getClient(array('roundRobin' => true), function () use (&$count) { + ++$count; + }); + + $client->setConnections($connections); + + try { + $client->request('/_aliases'); + $this->fail('Should throw exception as no connection valid'); + } catch (ConnectionException $e) { + $this->assertEquals(count($connections), $count); + $this->_checkStrategy($client); + } + } + + protected function _checkStrategy($client) + { + $strategy = $client->getConnectionStrategy(); + + $this->assertInstanceOf('Elastica\Connection\Strategy\RoundRobin', $strategy); + } + + protected function _checkResponse($response) + { + $this->assertTrue($response->isOk()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/SimpleTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/SimpleTest.php new file mode 100644 index 00000000..3b6ac89d --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/SimpleTest.php @@ -0,0 +1,113 @@ +_getClient(); + $response = $client->request('/_aliases'); + /* @var $response \Elastica\Response */ + + $this->_checkResponse($response); + + $this->_checkStrategy($client); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\ConnectionException + */ + public function testFailConnection() + { + $config = array('host' => '255.255.255.0', 'timeout' => $this->_timeout); + $client = $this->_getClient($config); + + $this->_checkStrategy($client); + + $client->request('/_aliases'); + } + + /** + * @group functional + */ + public function testWithOneFailConnection() + { + $connections = array( + new Connection(array('host' => '255.255.255.0', 'timeout' => $this->_timeout)), + new Connection(array('host' => $this->_getHost(), 'timeout' => $this->_timeout)), + ); + + $count = 0; + $callback = function ($connection, $exception, $client) use (&$count) { + ++$count; + }; + + $client = $this->_getClient(array(), $callback); + $client->setConnections($connections); + + $response = $client->request('/_aliases'); + /* @var $response Response */ + + $this->_checkResponse($response); + + $this->_checkStrategy($client); + + $this->assertLessThan(count($connections), $count); + } + + /** + * @group functional + */ + public function testWithNoValidConnection() + { + $connections = array( + new Connection(array('host' => '255.255.255.0', 'timeout' => $this->_timeout)), + new Connection(array('host' => '45.45.45.45', 'port' => '80', 'timeout' => $this->_timeout)), + new Connection(array('host' => '10.123.213.123', 'timeout' => $this->_timeout)), + ); + + $count = 0; + $client = $this->_getClient(array(), function () use (&$count) { + ++$count; + }); + + $client->setConnections($connections); + + try { + $client->request('/_aliases'); + $this->fail('Should throw exception as no connection valid'); + } catch (ConnectionException $e) { + $this->assertEquals(count($connections), $count); + } + } + + protected function _checkStrategy($client) + { + $strategy = $client->getConnectionStrategy(); + + $this->assertInstanceOf('Elastica\Connection\Strategy\Simple', $strategy); + } + + protected function _checkResponse($response) + { + $this->assertTrue($response->isOk()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/StrategyFactoryTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/StrategyFactoryTest.php new file mode 100644 index 00000000..978f8fd5 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Connection/Strategy/StrategyFactoryTest.php @@ -0,0 +1,84 @@ +assertInstanceOf('Elastica\Connection\Strategy\CallbackStrategy', $strategy); + } + + /** + * @group unit + */ + public function testCreateByName() + { + $strategyName = 'Simple'; + + $strategy = StrategyFactory::create($strategyName); + + $this->assertInstanceOf('Elastica\Connection\Strategy\Simple', $strategy); + } + + /** + * @group unit + */ + public function testCreateByClass() + { + $strategy = new EmptyStrategy(); + + $this->assertEquals($strategy, StrategyFactory::create($strategy)); + } + + /** + * @group unit + */ + public function testCreateByClassName() + { + $strategyName = '\\Elastica\Test\Connection\Strategy\\EmptyStrategy'; + + $strategy = StrategyFactory::create($strategyName); + + $this->assertInstanceOf($strategyName, $strategy); + } + + /** + * @group unit + * @expectedException \InvalidArgumentException + */ + public function testFailCreate() + { + $strategy = new \stdClass(); + + StrategyFactory::create($strategy); + } + + /** + * @group unit + */ + public function testNoCollisionWithGlobalNamespace() + { + // create collision + if (!class_exists('Simple')) { + class_alias('Elastica\Util', 'Simple'); + } + $strategy = StrategyFactory::create('Simple'); + $this->assertInstanceOf('Elastica\Connection\Strategy\Simple', $strategy); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ConnectionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ConnectionTest.php new file mode 100644 index 00000000..7600524b --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ConnectionTest.php @@ -0,0 +1,121 @@ +assertEquals(Connection::DEFAULT_HOST, $connection->getHost()); + $this->assertEquals(Connection::DEFAULT_PORT, $connection->getPort()); + $this->assertEquals(Connection::DEFAULT_TRANSPORT, $connection->getTransport()); + $this->assertInstanceOf('Elastica\Transport\AbstractTransport', $connection->getTransportObject()); + $this->assertEquals(Connection::TIMEOUT, $connection->getTimeout()); + $this->assertEquals(Connection::CONNECT_TIMEOUT, $connection->getConnectTimeout()); + $this->assertEquals(array(), $connection->getConfig()); + $this->assertTrue($connection->isEnabled()); + } + + /** + * @group unit + */ + public function testEnabledDisable() + { + $connection = new Connection(); + $this->assertTrue($connection->isEnabled()); + $connection->setEnabled(false); + $this->assertFalse($connection->isEnabled()); + $connection->setEnabled(true); + $this->assertTrue($connection->isEnabled()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\ConnectionException + */ + public function testInvalidConnection() + { + $connection = new Connection(array('port' => 9999)); + + $request = new Request('_status', Request::GET); + $request->setConnection($connection); + + // Throws exception because no valid connection + $request->send(); + } + + /** + * @group unit + */ + public function testCreate() + { + $connection = Connection::create(); + $this->assertInstanceOf('Elastica\Connection', $connection); + + $connection = Connection::create(array()); + $this->assertInstanceOf('Elastica\Connection', $connection); + + $port = 9999; + $connection = Connection::create(array('port' => $port)); + $this->assertInstanceOf('Elastica\Connection', $connection); + $this->assertEquals($port, $connection->getPort()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + * @expectedException \Elastica\Exception\InvalidException + */ + public function testCreateInvalid() + { + Connection::create('test'); + } + + /** + * @group unit + */ + public function testGetConfig() + { + $url = 'test'; + $connection = new Connection(array('config' => array('url' => $url))); + $this->assertTrue($connection->hasConfig('url')); + $this->assertEquals($url, $connection->getConfig('url')); + } + + /** + * @group unit + */ + public function testGetConfigWithArrayUsedForTransport() + { + $connection = new Connection(array('transport' => array('type' => 'Http'))); + $this->assertInstanceOf('Elastica\Transport\Http', $connection->getTransportObject()); + } + + /** + * @group unit + * @expectedException Elastica\Exception\InvalidException + * @expectedExceptionMessage Invalid transport + */ + public function testGetInvalidConfigWithArrayUsedForTransport() + { + $connection = new Connection(array('transport' => array('type' => 'invalidtransport'))); + $connection->getTransportObject(); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testGetConfigInvalidValue() + { + $connection = new Connection(); + $connection->getConfig('url'); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/DocumentTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/DocumentTest.php new file mode 100644 index 00000000..969c5b22 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/DocumentTest.php @@ -0,0 +1,349 @@ +markTestSkipped("File {$fileName} does not exist."); + } + $doc = new Document(); + $returnValue = $doc->addFile('key', $fileName); + $this->assertInstanceOf('Elastica\Document', $returnValue); + } + + /** + * @group unit + */ + public function testAddGeoPoint() + { + $doc = new Document(); + $returnValue = $doc->addGeoPoint('point', 38.89859, -77.035971); + $this->assertInstanceOf('Elastica\Document', $returnValue); + } + + /** + * @group unit + */ + public function testSetData() + { + $doc = new Document(); + $returnValue = $doc->setData(array('data')); + $this->assertInstanceOf('Elastica\Document', $returnValue); + } + + /** + * @group unit + */ + public function testToArray() + { + $id = 17; + $data = array('hello' => 'world'); + $type = 'testtype'; + $index = 'textindex'; + + $doc = new Document($id, $data, $type, $index); + + $result = array('_index' => $index, '_type' => $type, '_id' => $id, '_source' => $data); + $this->assertEquals($result, $doc->toArray()); + } + + /** + * @group unit + */ + public function testSetType() + { + $document = new Document(); + $document->setType('type'); + + $this->assertEquals('type', $document->getType()); + + $index = new Index($this->_getClient(), 'index'); + $type = $index->getType('type'); + + $document->setIndex('index2'); + $this->assertEquals('index2', $document->getIndex()); + + $document->setType($type); + + $this->assertEquals('index', $document->getIndex()); + $this->assertEquals('type', $document->getType()); + } + + /** + * @group unit + */ + public function testSetIndex() + { + $document = new Document(); + $document->setIndex('index2'); + $document->setType('type2'); + + $this->assertEquals('index2', $document->getIndex()); + $this->assertEquals('type2', $document->getType()); + + $index = new Index($this->_getClient(), 'index'); + + $document->setIndex($index); + + $this->assertEquals('index', $document->getIndex()); + $this->assertEquals('type2', $document->getType()); + } + + /** + * @group unit + */ + public function testHasId() + { + $document = new Document(); + $this->assertFalse($document->hasId()); + $document->setId(''); + $this->assertFalse($document->hasId()); + $document->setId(0); + $this->assertTrue($document->hasId()); + $document->setId('hello'); + $this->assertTrue($document->hasId()); + } + + /** + * @group unit + */ + public function testGetOptions() + { + $document = new Document(); + $document->setIndex('index'); + $document->setOpType('create'); + $document->setParent('2'); + $document->setId(1); + + $options = $document->getOptions(array('index', 'type', 'id', 'parent')); + + $this->assertInternalType('array', $options); + $this->assertEquals(3, count($options)); + $this->assertArrayHasKey('index', $options); + $this->assertArrayHasKey('id', $options); + $this->assertArrayHasKey('parent', $options); + $this->assertEquals('index', $options['index']); + $this->assertEquals(1, $options['id']); + $this->assertEquals('2', $options['parent']); + $this->assertArrayNotHasKey('type', $options); + $this->assertArrayNotHasKey('op_type', $options); + $this->assertArrayNotHasKey('_index', $options); + $this->assertArrayNotHasKey('_id', $options); + $this->assertArrayNotHasKey('_parent', $options); + + $options = $document->getOptions(array('parent', 'op_type', 'percolate'), true); + + $this->assertInternalType('array', $options); + $this->assertEquals(2, count($options)); + $this->assertArrayHasKey('_parent', $options); + $this->assertArrayHasKey('_op_type', $options); + $this->assertEquals('2', $options['_parent']); + $this->assertEquals('create', $options['_op_type']); + $this->assertArrayNotHasKey('percolate', $options); + $this->assertArrayNotHasKey('op_type', $options); + $this->assertArrayNotHasKey('parent', $options); + } + + /** + * @group unit + */ + public function testGetSetHasRemove() + { + $document = new Document(1, array('field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3', 'field4' => null)); + + $this->assertEquals('value1', $document->get('field1')); + $this->assertEquals('value2', $document->get('field2')); + $this->assertEquals('value3', $document->get('field3')); + $this->assertNull($document->get('field4')); + try { + $document->get('field5'); + $this->fail('Undefined field get should throw exception'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + + $this->assertTrue($document->has('field1')); + $this->assertTrue($document->has('field2')); + $this->assertTrue($document->has('field3')); + $this->assertTrue($document->has('field4')); + $this->assertFalse($document->has('field5'), 'Field5 should not be isset, because it is not set'); + + $data = $document->getData(); + + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('value2', $data['field2']); + $this->assertArrayHasKey('field3', $data); + $this->assertEquals('value3', $data['field3']); + $this->assertArrayHasKey('field4', $data); + $this->assertNull($data['field4']); + + $returnValue = $document->set('field1', 'changed1'); + $this->assertInstanceOf('Elastica\Document', $returnValue); + $returnValue = $document->remove('field3'); + $this->assertInstanceOf('Elastica\Document', $returnValue); + try { + $document->remove('field5'); + $this->fail('Undefined field unset should throw exception'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + + $this->assertEquals('changed1', $document->get('field1')); + $this->assertFalse($document->has('field3')); + + $newData = $document->getData(); + + $this->assertNotEquals($data, $newData); + } + + /** + * @group unit + */ + public function testDataPropertiesOverloading() + { + $document = new Document(1, array('field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3', 'field4' => null)); + + $this->assertEquals('value1', $document->field1); + $this->assertEquals('value2', $document->field2); + $this->assertEquals('value3', $document->field3); + $this->assertNull($document->field4); + try { + $document->field5; + $this->fail('Undefined field get should throw exception'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + + $this->assertTrue(isset($document->field1)); + $this->assertTrue(isset($document->field2)); + $this->assertTrue(isset($document->field3)); + $this->assertFalse(isset($document->field4), 'Field4 should not be isset, because it is null'); + $this->assertFalse(isset($document->field5), 'Field5 should not be isset, because it is not set'); + + $data = $document->getData(); + + $this->assertArrayHasKey('field1', $data); + $this->assertEquals('value1', $data['field1']); + $this->assertArrayHasKey('field2', $data); + $this->assertEquals('value2', $data['field2']); + $this->assertArrayHasKey('field3', $data); + $this->assertEquals('value3', $data['field3']); + $this->assertArrayHasKey('field4', $data); + $this->assertNull($data['field4']); + + $document->field1 = 'changed1'; + unset($document->field3); + try { + unset($document->field5); + $this->fail('Undefined field unset should throw exception'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + + $this->assertEquals('changed1', $document->field1); + $this->assertFalse(isset($document->field3)); + + $newData = $document->getData(); + + $this->assertNotEquals($data, $newData); + } + + /** + * @group unit + */ + public function testSetTtl() + { + $document = new Document(); + + $this->assertFalse($document->hasTtl()); + $options = $document->getOptions(); + $this->assertArrayNotHasKey('ttl', $options); + + $document->setTtl('1d'); + + $newOptions = $document->getOptions(); + + $this->assertArrayHasKey('ttl', $newOptions); + $this->assertEquals('1d', $newOptions['ttl']); + $this->assertNotEquals($options, $newOptions); + + $this->assertTrue($document->hasTtl()); + $this->assertEquals('1d', $document->getTtl()); + } + + /** + * @group unit + */ + public function testSerializedData() + { + $data = '{"user":"rolf"}'; + $document = new Document(1, $data); + + $this->assertFalse($document->has('user')); + + try { + $document->get('user'); + $this->fail('User field should not be available'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + + try { + $document->remove('user'); + $this->fail('User field should not be available for removal'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + + try { + $document->set('name', 'shawn'); + $this->fail('Document should not allow to set new data'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + } + + /** + * @group unit + */ + public function testUpsert() + { + $document = new Document(); + + $upsert = new Document(); + $upsert->setData(array('someproperty' => 'somevalue')); + + $this->assertFalse($document->hasUpsert()); + + $document->setUpsert($upsert); + + $this->assertTrue($document->hasUpsert()); + $this->assertSame($upsert, $document->getUpsert()); + } + + /** + * @group unit + */ + public function testDocAsUpsert() + { + $document = new Document(); + + $this->assertFalse($document->getDocAsUpsert()); + $this->assertSame($document, $document->setDocAsUpsert(true)); + $this->assertTrue($document->getDocAsUpsert()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ExampleTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ExampleTest.php new file mode 100644 index 00000000..efdc04eb --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ExampleTest.php @@ -0,0 +1,61 @@ +_getClient(); + $index = $client->getIndex('ruflin'); + $type = $index->getType('users'); + + $id = 2; + $data = array('firstname' => 'Nicolas', 'lastname' => 'Ruflin'); + $doc = new Document($id, $data); + + $type->addDocument($doc); + } + + /** + * @group functional + */ + public function testExample() + { + // Creates a new index 'xodoa' and a type 'user' inside this index + $client = $this->_getClient(); + $index = $client->getIndex('elastica_test'); + $index->create(array(), true); + + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc1 = new Document(1, + array('username' => 'hans', 'test' => array('2', '3', '5')) + ); + $type->addDocument($doc1); + + // Adds a list of documents with _bulk upload to the index + $docs = array(); + $docs[] = new Document(2, + array('username' => 'john', 'test' => array('1', '3', '6')) + ); + $docs[] = new Document(3, + array('username' => 'rolf', 'test' => array('2', '3', '7')) + ); + $type->addDocuments($docs); + + // Refresh index + $index->refresh(); + + $resultSet = $type->search('rolf'); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/AbstractExceptionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/AbstractExceptionTest.php new file mode 100644 index 00000000..ea84218a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/AbstractExceptionTest.php @@ -0,0 +1,31 @@ + Elastica\Exception\RuntimeExceptionTest + $name = preg_replace('/^Elastica\\\\Test/', 'Elastica', $reflection->getName()); + + // Elastica\Exception\RuntimeExceptionTest => Elastica\Exception\RuntimeException + $name = preg_replace('/Test$/', '', $name); + + return $name; + } + + /** + * @group unit + */ + public function testInheritance() + { + $className = $this->_getExceptionClass(); + $reflection = new \ReflectionClass($className); + $this->assertTrue($reflection->isSubclassOf('Exception')); + $this->assertTrue($reflection->implementsInterface('Elastica\Exception\ExceptionInterface')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Bulk/Response/ActionExceptionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Bulk/Response/ActionExceptionTest.php new file mode 100644 index 00000000..38a2f873 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/Bulk/Response/ActionExceptionTest.php @@ -0,0 +1,8 @@ +assertEquals($message, $exception->getMessage()); + $this->assertEquals($code, $exception->getCode()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/PartialShardFailureExceptionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/PartialShardFailureExceptionTest.php new file mode 100644 index 00000000..afcca1ec --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/PartialShardFailureExceptionTest.php @@ -0,0 +1,54 @@ +_getClient(); + $index = $client->getIndex('elastica_partial_failure'); + $index->create(array( + 'index' => array( + 'number_of_shards' => 5, + 'number_of_replicas' => 0, + ), + ), true); + + $type = $index->getType('folks'); + + $type->addDocument(new Document('', array('name' => 'ruflin'))); + $type->addDocument(new Document('', array('name' => 'bobrik'))); + $type->addDocument(new Document('', array('name' => 'kimchy'))); + + $index->refresh(); + + $query = Query::create(array( + 'query' => array( + 'filtered' => array( + 'filter' => array( + 'script' => array( + 'script' => 'doc["undefined"] > 8', // compiles, but doesn't work + ), + ), + ), + ), + )); + + try { + $index->search($query); + + $this->fail('PartialShardFailureException should have been thrown'); + } catch (PartialShardFailureException $e) { + $resultSet = new ResultSet($e->getResponse(), $query); + $this->assertEquals(0, count($resultSet->getResults())); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/QueryBuilderExceptionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/QueryBuilderExceptionTest.php new file mode 100644 index 00000000..375731ba --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/QueryBuilderExceptionTest.php @@ -0,0 +1,6 @@ +_createIndex('woo', true); + + try { + $this->_createIndex('woo', false); + $this->fail('Index created when it should fail'); + } catch (ResponseException $ex) { + $this->assertEquals('IndexAlreadyExistsException', $ex->getElasticsearchException()->getExceptionName()); + $this->assertEquals(400, $ex->getElasticsearchException()->getCode()); + } + } + + /** + * @group functional + */ + public function testBadType() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(array( + 'num' => array( + 'type' => 'long', + ), + )); + + try { + $type->addDocument(new Document('', array( + 'num' => 'not number at all', + ))); + $this->fail('Indexing with wrong type should fail'); + } catch (ResponseException $ex) { + $this->assertEquals('MapperParsingException', $ex->getElasticsearchException()->getExceptionName()); + $this->assertEquals(400, $ex->getElasticsearchException()->getCode()); + } + } + + /** + * @group functional + */ + public function testWhatever() + { + $index = $this->_createIndex(); + $index->delete(); + + try { + $index->search(); + } catch (ResponseException $ex) { + $this->assertEquals('IndexMissingException', $ex->getElasticsearchException()->getExceptionName()); + $this->assertEquals(404, $ex->getElasticsearchException()->getCode()); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/RuntimeExceptionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/RuntimeExceptionTest.php new file mode 100644 index 00000000..9dd18951 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Exception/RuntimeExceptionTest.php @@ -0,0 +1,6 @@ +assertInstanceOf('Elastica\Facet\Histogram', $facet); + $this->assertInstanceOf('Elastica\Facet\AbstractFacet', $facet); + unset($facet); + } + + /** + * @group functional + */ + public function testQuery() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no'), + 'dtmPosted' => array('type' => 'date', 'store' => 'no', 'format' => 'yyyy-MM-dd HH:mm:ss'), + )); + $type->setMapping($mapping); + + $doc = new Document(1, array('name' => 'nicolas ruflin', 'dtmPosted' => '2011-06-23 21:53:00')); + $type->addDocument($doc); + $doc = new Document(2, array('name' => 'raul martinez jr', 'dtmPosted' => '2011-06-23 09:53:00')); + $type->addDocument($doc); + $doc = new Document(3, array('name' => 'rachelle clemente', 'dtmPosted' => '2011-07-08 08:53:00')); + $type->addDocument($doc); + $doc = new Document(4, array('name' => 'elastica search', 'dtmPosted' => '2011-07-08 01:53:00')); + $type->addDocument($doc); + + $facet = new DateHistogram('dateHist1'); + $facet->setInterval('day'); + $facet->setField('dtmPosted'); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(4, $response->getTotalHits()); + $this->assertEquals(2, count($facets['dateHist1']['entries'])); + } + + /** + * @group functional + */ + public function testFactor() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no'), + 'dtmPosted' => array('type' => 'long', 'store' => 'no'), + )); + $type->setMapping($mapping); + + $doc = new Document(1, array('name' => 'nicolas ruflin', 'dtmPosted' => 1308865980)); + $type->addDocument($doc); + $doc = new Document(2, array('name' => 'raul martinez jr', 'dtmPosted' => 1308822780)); + $type->addDocument($doc); + $doc = new Document(3, array('name' => 'rachelle clemente', 'dtmPosted' => 1310115180)); + $type->addDocument($doc); + $doc = new Document(4, array('name' => 'elastica search', 'dtmPosted' => 1310089980)); + $type->addDocument($doc); + + $facet = new DateHistogram('dateHist1'); + $facet->setInterval('day'); + $facet->setField('dtmPosted'); + $facet->setFactor(1000); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(4, $response->getTotalHits()); + $this->assertEquals(2, count($facets['dateHist1']['entries'])); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/FilterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/FilterTest.php new file mode 100644 index 00000000..622923fe --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/FilterTest.php @@ -0,0 +1,42 @@ +_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $type->addDocument(new Document(1, array('color' => 'red'))); + $type->addDocument(new Document(2, array('color' => 'green'))); + $type->addDocument(new Document(3, array('color' => 'blue'))); + + $index->refresh(); + + $filter = new Term(array('color' => 'red')); + + $facet = new Filter('test'); + $facet->setFilter($filter); + + $query = new Query(); + $query->addFacet($facet); + + $resultSet = $type->search($query); + + $facets = $resultSet->getFacets(); + + $this->assertEquals(1, $facets['test']['count']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/GeoClusterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/GeoClusterTest.php new file mode 100644 index 00000000..f771ac32 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/GeoClusterTest.php @@ -0,0 +1,57 @@ +_getClient(); + $nodes = $client->getCluster()->getNodes(); + if (!$nodes[0]->getInfo()->hasPlugin('geocluster-facet')) { + $this->markTestSkipped('geocluster-facet plugin not installed'); + } + + $index = $this->_createIndex(); + $type = $index->getType('testQuery'); + $geoField = 'location'; + + $type->setMapping(new Mapping($type, array( + $geoField => array('type' => 'geo_point', 'lat_lon' => true), + ))); + + $doc = new Document(1, array('name' => 'item1', 'location' => array(20, 20))); + $type->addDocument($doc); + + $doc = new Document(2, array('name' => 'item2', 'location' => array(20, 20))); + $type->addDocument($doc); + + $doc = new Document(3, array('name' => 'item3', 'location' => array(20, 20))); + $type->addDocument($doc); + + $index->refresh(); + + $facet = new GeoCluster('clusters'); + $facet + ->setField($geoField) + ->setFactor(1) + ->setShowIds(false); + $query = new Query(); + $query->setFacets(array($facet)); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(1, count($facets['clusters']['clusters'])); + + $index->delete(); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/QueryTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/QueryTest.php new file mode 100644 index 00000000..8e0231aa --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/QueryTest.php @@ -0,0 +1,42 @@ +_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $type->addDocument(new Document(1, array('color' => 'red'))); + $type->addDocument(new Document(2, array('color' => 'green'))); + $type->addDocument(new Document(3, array('color' => 'blue'))); + + $index->refresh(); + + $termQuery = new Term(array('color' => 'red')); + + $facet = new FacetQuery('test'); + $facet->setQuery($termQuery); + + $query = new Query(); + $query->addFacet($facet); + + $resultSet = $type->search($query); + + $facets = $resultSet->getFacets(); + + $this->assertEquals(1, $facets['test']['count']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/StatisticalTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/StatisticalTest.php new file mode 100644 index 00000000..dc374289 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/StatisticalTest.php @@ -0,0 +1,82 @@ +_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('price' => 10)); + $type->addDocument($doc); + $doc = new Document(2, array('price' => 35)); + $type->addDocument($doc); + $doc = new Document(2, array('price' => 45)); + $type->addDocument($doc); + + $facet = new Statistical('stats'); + $facet->setField('price'); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(55, $facets['stats']['total']); + $this->assertEquals(10, $facets['stats']['min']); + $this->assertEquals(45, $facets['stats']['max']); + } + + /** + * @group functional + */ + public function testStatisticalWithSetFields() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('price' => 10, 'price2' => 20)); + $type->addDocument($doc); + $doc = new Document(2, array('price' => 35, 'price2' => 70)); + $type->addDocument($doc); + $doc = new Document(2, array('price' => 45, 'price2' => 90)); + $type->addDocument($doc); + + $facet = new Statistical('stats'); + $facet->setFields(array('price', 'price2')); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(165, $facets['stats']['total']); + $this->assertEquals(10, $facets['stats']['min']); + $this->assertEquals(90, $facets['stats']['max']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsStatsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsStatsTest.php new file mode 100644 index 00000000..e3377930 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsStatsTest.php @@ -0,0 +1,113 @@ +_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('name' => 'tom', 'paid' => 7)); + $type->addDocument($doc); + $doc = new Document(2, array('name' => 'tom', 'paid' => 2)); + $type->addDocument($doc); + $doc = new Document(3, array('name' => 'tom', 'paid' => 5)); + $type->addDocument($doc); + $doc = new Document(4, array('name' => 'mike', 'paid' => 13)); + $type->addDocument($doc); + $doc = new Document(5, array('name' => 'mike', 'paid' => 1)); + $type->addDocument($doc); + $doc = new Document(6, array('name' => 'mike', 'paid' => 15)); + $type->addDocument($doc); + + $facet = new TermsStats('test'); + $facet->setKeyField('name'); + $facet->setValueField('paid'); + $facet->setOrder('reverse_total'); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(14, $facets[ 'test' ][ 'terms' ][0]['total']); + $this->assertEquals(29, $facets[ 'test' ][ 'terms' ][1]['total']); + } + + /** + * @group functional + */ + public function testQuery() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('name' => 'tom', 'paid' => 7)); + $type->addDocument($doc); + $doc = new Document(2, array('name' => 'tom', 'paid' => 2)); + $type->addDocument($doc); + $doc = new Document(3, array('name' => 'tom', 'paid' => 5)); + $type->addDocument($doc); + $doc = new Document(4, array('name' => 'mike', 'paid' => 13)); + $type->addDocument($doc); + $doc = new Document(5, array('name' => 'mike', 'paid' => 1)); + $type->addDocument($doc); + $doc = new Document(6, array('name' => 'mike', 'paid' => 15)); + $type->addDocument($doc); + + $facet = new TermsStats('test'); + $facet->setKeyField('name'); + $facet->setValueField('paid'); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(2, count($facets[ 'test' ][ 'terms' ])); + foreach ($facets[ 'test' ][ 'terms' ] as $facet) { + if ($facet[ 'term' ] === 'tom') { + $this->assertEquals(14, $facet[ 'total' ]); + } + if ($facet[ 'term' ] === 'mike') { + $this->assertEquals(29, $facet[ 'total' ]); + } + } + } + + /** + * @group unit + */ + public function testSetSize() + { + $facet = new TermsStats('test'); + $facet->setSize(100); + + $data = $facet->toArray(); + + $this->assertArrayHasKey('size', $data['terms_stats']); + $this->assertEquals(100, $data['terms_stats']['size']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsTest.php new file mode 100644 index 00000000..f4c95796 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Facet/TermsTest.php @@ -0,0 +1,74 @@ +_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('name' => 'nicolas ruflin')); + $type->addDocument($doc); + $doc = new Document(2, array('name' => 'ruflin test')); + $type->addDocument($doc); + $doc = new Document(2, array('name' => 'nicolas helloworld')); + $type->addDocument($doc); + + $facet = new Terms('test'); + $facet->setField('name'); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(3, count($facets['test']['terms'])); + } + + /** + * @group functional + */ + public function testFacetScript() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('name' => 'rodolfo', 'last_name' => 'moraes')); + $type->addDocument($doc); + $doc = new Document(2, array('name' => 'jose', 'last_name' => 'honjoya')); + $type->addDocument($doc); + + $facet = new Terms('test'); + $facet->setField('name'); + $facet->setScript('term + " "+doc["last_name"].value'); + + $query = new Query(); + $query->addFacet($facet); + $query->setQuery(new MatchAll()); + + $index->refresh(); + + $response = $type->search($query); + $facets = $response->getFacets(); + + $this->assertEquals(2, count($facets['test']['terms'])); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/AbstractTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/AbstractTest.php new file mode 100644 index 00000000..3ba64dd1 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/AbstractTest.php @@ -0,0 +1,81 @@ +getStub(); + + $stubFilter->setCached(true); + $arrayFilter = current($stubFilter->toArray()); + $this->assertTrue($arrayFilter['_cache']); + + $stubFilter->setCached(false); + $arrayFilter = current($stubFilter->toArray()); + $this->assertFalse($arrayFilter['_cache']); + } + + /** + * @group unit + */ + public function testSetCachedDefaultValue() + { + $stubFilter = $this->getStub(); + + $stubFilter->setCached(); + $arrayFilter = current($stubFilter->toArray()); + $this->assertTrue($arrayFilter['_cache']); + } + + /** + * @group unit + */ + public function testSetCacheKey() + { + $stubFilter = $this->getStub(); + + $cacheKey = 'myCacheKey'; + + $stubFilter->setCacheKey($cacheKey); + $arrayFilter = current($stubFilter->toArray()); + $this->assertEquals($cacheKey, $arrayFilter['_cache_key']); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testSetCacheKeyEmptyKey() + { + $stubFilter = $this->getStub(); + + $cacheKey = ''; + + $stubFilter->setCacheKey($cacheKey); + } + + /** + * @group unit + */ + public function testSetName() + { + $stubFilter = $this->getStub(); + + $name = 'myFilter'; + + $stubFilter->setName($name); + $arrayFilter = current($stubFilter->toArray()); + $this->assertEquals($name, $arrayFilter['_name']); + } + + private function getStub() + { + return $this->getMockForAbstractClass('Elastica\Filter\AbstractFilter'); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolAndTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolAndTest.php new file mode 100644 index 00000000..a8f47633 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolAndTest.php @@ -0,0 +1,86 @@ +assertEquals(array('and' => array()), $and->toArray()); + + $idsFilter = new Ids(); + $idsFilter->setIds(12); + + $and->addFilter($idsFilter); + $and->addFilter($idsFilter); + + $expectedArray = array( + 'and' => array( + $idsFilter->toArray(), + $idsFilter->toArray(), + ), + ); + + $this->assertEquals($expectedArray, $and->toArray()); + } + + /** + * @group functional + */ + public function testSetCache() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'hello world')), + new Document(2, array('name' => 'nicolas ruflin')), + new Document(3, array('name' => 'ruflin')), + )); + + $and = new BoolAnd(); + + $idsFilter1 = new Ids(); + $idsFilter1->setIds(1); + + $idsFilter2 = new Ids(); + $idsFilter2->setIds(1); + + $and->addFilter($idsFilter1); + $and->addFilter($idsFilter2); + + $index->refresh(); + $and->setCached(true); + + $resultSet = $type->search($and); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group unit + */ + public function testConstruct() + { + $ids1 = new Ids('foo', array(1, 2)); + $ids2 = new Ids('bar', array(3, 4)); + + $and1 = new BoolAnd(array($ids1, $ids2)); + + $and2 = new BoolAnd(); + $and2->addFilter($ids1); + $and2->addFilter($ids2); + + $this->assertEquals($and1->toArray(), $and2->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolFilterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolFilterTest.php new file mode 100644 index 00000000..ec7728af --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolFilterTest.php @@ -0,0 +1,200 @@ +setIds(1); + $idsFilter2 = new Ids(); + $idsFilter2->setIds(2); + $idsFilter3 = new Ids(); + $idsFilter3->setIds(3); + + $childBool = new BoolFilter(); + $childBool->addShould(array($idsFilter1, $idsFilter2)); + $mainBool->addShould(array($childBool, $idsFilter3)); + + $expectedArray = array( + 'bool' => array( + 'should' => array( + array( + array( + 'bool' => array( + 'should' => array( + array( + $idsFilter1->toArray(), + $idsFilter2->toArray(), + ), + ), + ), + ), + $idsFilter3->toArray(), + ), + ), + ), + ); + $out[] = array($mainBool, $expectedArray); + + // case #1 _cache parameter should be supported + $bool = new BoolFilter(); + $terms = new Terms('field1', array('value1', 'value2')); + $termsNot = new Terms('field2', array('value1', 'value2')); + $bool->addMust($terms); + $bool->addMustNot($termsNot); + $bool->setCached(true); + $bool->setCacheKey('my-cache-key'); + $expected = array( + 'bool' => array( + 'must' => array( + $terms->toArray(), + ), + 'must_not' => array( + $termsNot->toArray(), + ), + '_cache' => true, + '_cache_key' => 'my-cache-key', + ), + ); + $out[] = array($bool, $expected); + + return $out; + } + + /** + * @group unit + * @dataProvider getTestToArrayData() + * + * @param Bool $bool + * @param array $expectedArray + */ + public function testToArray(BoolFilter $bool, $expectedArray) + { + $this->assertEquals($expectedArray, $bool->toArray()); + } + + /** + * @group functional + */ + public function testBoolFilter() + { + $index = $this->_createIndex(); + $type = $index->getType('book'); + + //index some test data + $type->addDocuments(array( + new Document(1, array('author' => 'Michael Shermer', 'title' => 'The Believing Brain', 'publisher' => 'Robinson')), + new Document(2, array('author' => 'Jared Diamond', 'title' => 'Guns, Germs and Steel', 'publisher' => 'Vintage')), + new Document(3, array('author' => 'Jared Diamond', 'title' => 'Collapse', 'publisher' => 'Penguin')), + new Document(4, array('author' => 'Richard Dawkins', 'title' => 'The Selfish Gene', 'publisher' => 'OUP Oxford')), + new Document(5, array('author' => 'Anthony Burges', 'title' => 'A Clockwork Orange', 'publisher' => 'Penguin')), + )); + + $index->refresh(); + + //use the terms lookup feature to query for some data + //build query + //must + // should + // author = jared + // author = richard + // must_not + // publisher = penguin + + //construct the query + $query = new Query(); + $mainBoolFilter = new BoolFilter(); + $shouldFilter = new BoolFilter(); + $authorFilter1 = new Term(); + $authorFilter1->setTerm('author', 'jared'); + $authorFilter2 = new Term(); + $authorFilter2->setTerm('author', 'richard'); + $shouldFilter->addShould(array($authorFilter1, $authorFilter2)); + + $mustNotFilter = new BoolFilter(); + $publisherFilter = new Term(); + $publisherFilter->setTerm('publisher', 'penguin'); + $mustNotFilter->addMustNot($publisherFilter); + + $mainBoolFilter->addMust(array($shouldFilter, $mustNotFilter)); + $query->setPostFilter($mainBoolFilter); + //execute the query + $results = $index->search($query); + + //check the number of results + $this->assertEquals($results->count(), 2, 'Bool filter with child Bool filters: number of results check'); + + //count compare the id's + $ids = array(); + /** @var \Elastica\Result $result **/ + foreach ($results as $result) { + $ids[] = $result->getId(); + } + $this->assertEquals($ids, array('2', '4'), 'Bool filter with child Bool filters: result ID check'); + + $index->delete(); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testAddMustInvalidException() + { + $filter = new BoolFilter(); + $filter->addMust('fail!'); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testAddMustNotInvalidException() + { + $filter = new BoolFilter(); + $filter->addMustNot('fail!'); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testAddShouldInvalidException() + { + $filter = new BoolFilter(); + $filter->addShould('fail!'); + } + + /** + * Small unit test to check if also the old object name works. + * + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testOldObject() + { + if (version_compare(phpversion(), 7, '>=')) { + self::markTestSkipped('These objects are not supported in PHP 7'); + } + + $filter = new \Elastica\Filter\Bool(); + $filter->addShould('fail!'); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolNotTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolNotTest.php new file mode 100644 index 00000000..75461496 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolNotTest.php @@ -0,0 +1,27 @@ +setIds(12); + $filter = new BoolNot($idsFilter); + + $expectedArray = array( + 'not' => array( + 'filter' => $idsFilter->toArray(), + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolOrTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolOrTest.php new file mode 100644 index 00000000..6462d1fa --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/BoolOrTest.php @@ -0,0 +1,90 @@ +getMockForAbstractClass('Elastica\Filter\AbstractFilter'); + $orFilter = new BoolOr(); + $returnValue = $orFilter->addFilter($filter); + $this->assertInstanceOf('Elastica\Filter\BoolOr', $returnValue); + } + + /** + * @group unit + */ + public function testToArray() + { + $orFilter = new BoolOr(); + + $filter1 = new Ids(); + $filter1->setIds('1'); + + $filter2 = new Ids(); + $filter2->setIds('2'); + + $orFilter->addFilter($filter1); + $orFilter->addFilter($filter2); + + $expectedArray = array( + 'or' => array( + $filter1->toArray(), + $filter2->toArray(), + ), + ); + + $this->assertEquals($expectedArray, $orFilter->toArray()); + } + + /** + * @group unit + */ + public function testConstruct() + { + $ids1 = new Ids('foo', array(1, 2)); + $ids2 = new Ids('bar', array(3, 4)); + + $and1 = new BoolOr(array($ids1, $ids2)); + + $and2 = new BoolOr(); + $and2->addFilter($ids1); + $and2->addFilter($ids2); + + $this->assertEquals($and1->toArray(), $and2->toArray()); + } + + /** + * @group functional + */ + public function testOrFilter() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $doc1 = new Document('', array('categoryId' => 1)); + $doc2 = new Document('', array('categoryId' => 2)); + $doc3 = new Document('', array('categoryId' => 3)); + + $type->addDocument($doc1); + $type->addDocument($doc2); + $type->addDocument($doc3); + + $index->refresh(); + + $boolOr = new \Elastica\Filter\BoolOr(); + $boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '1'))); + $boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '2'))); + + $resultSet = $type->search($boolOr); + $this->assertEquals(2, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ExistsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ExistsTest.php new file mode 100644 index 00000000..25afa724 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ExistsTest.php @@ -0,0 +1,36 @@ + array('field' => $field)); + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group unit + */ + public function testSetField() + { + $field = 'test'; + $filter = new Exists($field); + + $this->assertEquals($field, $filter->getParam('field')); + + $newField = 'hello world'; + $this->assertInstanceOf('Elastica\Filter\Exists', $filter->setField($newField)); + + $this->assertEquals($newField, $filter->getParam('field')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoBoundingBoxTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoBoundingBoxTest.php new file mode 100644 index 00000000..8fdde965 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoBoundingBoxTest.php @@ -0,0 +1,55 @@ +addCoordinates($key, $coords); + $expectedArray = array('top_left' => $coords[0], 'bottom_right' => $coords[1]); + $this->assertEquals($expectedArray, $filter->getParam($key)); + + $returnValue = $filter->addCoordinates($key, $coords); + $this->assertInstanceOf('Elastica\Filter\GeoBoundingBox', $returnValue); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testAddCoordinatesInvalidException() + { + $filter = new GeoBoundingBox('foo', array()); + } + + /** + * @group unit + */ + public function testToArray() + { + $key = 'pin.location'; + $coords = array('40.73, -74.1', '40.01, -71.12'); + $filter = new GeoBoundingBox($key, $coords); + + $expectedArray = array( + 'geo_bounding_box' => array( + $key => array( + 'top_left' => $coords[0], + 'bottom_right' => $coords[1], + ), + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceRangeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceRangeTest.php new file mode 100644 index 00000000..203a45de --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceRangeTest.php @@ -0,0 +1,220 @@ +_createIndex(); + $type = $index->getType('test'); + + // Set mapping + $type->setMapping(array('point' => array('type' => 'geo_point'))); + + // Add doc 1 + $doc1 = new Document(1, + array( + 'name' => 'ruflin', + ) + ); + + $doc1->addGeoPoint('point', 17, 19); + $type->addDocument($doc1); + + // Add doc 2 + $doc2 = new Document(2, + array( + 'name' => 'ruflin', + ) + ); + + $doc2->addGeoPoint('point', 30, 40); + $type->addDocument($doc2); + + $index->optimize(); + $index->refresh(); + + // Only one point should be in radius + $query = new Query(); + $geoFilter = new GeoDistanceRange( + 'point', + array('lat' => 30, 'lon' => 40), + array('from' => '0km', 'to' => '2km') + ); + + $query = new Query(new MatchAll()); + $query->setPostFilter($geoFilter); + $this->assertEquals(1, $type->search($query)->count()); + + // Both points should be inside + $query = new Query(); + $geoFilter = new GeoDistanceRange( + 'point', + array('lat' => 30, 'lon' => 40), + array('gte' => '0km', 'lte' => '40000km') + ); + $query = new Query(new MatchAll()); + $query->setPostFilter($geoFilter); + $index->refresh(); + + $this->assertEquals(2, $type->search($query)->count()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testInvalidRange() + { + $geoFilter = new GeoDistanceRange( + 'point', + array('lat' => 30, 'lon' => 40), + array('invalid' => '0km', 'lte' => '40000km') + ); + } + + /** + * @group unit + * @dataProvider invalidLocationDataProvider + * @expectedException \Elastica\Exception\InvalidException + */ + public function testInvalidLocation($location) + { + $geoFilter = new GeoDistanceRange( + 'point', + $location, + array('gt' => '0km', 'lte' => '40000km') + ); + } + + /** + * @group unit + * @dataProvider constructDataProvider + */ + public function testConstruct($key, $location, $ranges, $expected) + { + $filter = new GeoDistanceRange($key, $location, $ranges); + + $data = $filter->toArray(); + + $this->assertEquals($expected, $data); + } + + public function invalidLocationDataProvider() + { + return array( + array( + array('lat' => 1.0), + ), + array( + array('lon' => 1.0), + ), + array( + array(), + ), + array( + new \stdClass(), + ), + array( + null, + ), + array( + true, + ), + array( + false, + ), + ); + } + + public function constructDataProvider() + { + return array( + array( + 'location', + 'u09tvqx', + array( + 'from' => '10km', + 'to' => '20km', + ), + array( + 'geo_distance_range' => array( + 'from' => '10km', + 'to' => '20km', + 'location' => 'u09tvqx', + ), + ), + ), + array( + 'location', + 'u09tvqx', + array( + 'to' => '20km', + 'include_upper' => 0, + 'from' => '10km', + 'include_lower' => 1, + ), + array( + 'geo_distance_range' => array( + 'to' => '20km', + 'include_upper' => false, + 'from' => '10km', + 'include_lower' => true, + 'location' => 'u09tvqx', + ), + ), + ), + array( + 'location', + array( + 'lon' => 2.35, + 'lat' => 48.86, + ), + array( + 'lte' => '20km', + 'gt' => '10km', + ), + array( + 'geo_distance_range' => array( + 'lte' => '20km', + 'gt' => '10km', + 'location' => array( + 'lat' => 48.86, + 'lon' => 2.35, + ), + ), + ), + ), + array( + 'location', + array( + 'lat' => 48.86, + 'lon' => 2.35, + ), + array( + 'lt' => '20km', + 'gte' => '10km', + ), + array( + 'geo_distance_range' => array( + 'lt' => '20km', + 'gte' => '10km', + 'location' => array( + 'lat' => 48.86, + 'lon' => 2.35, + ), + ), + ), + ), + ); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceTest.php new file mode 100644 index 00000000..b61b4adc --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoDistanceTest.php @@ -0,0 +1,141 @@ +_createIndex(); + + $type = $index->getType('test'); + + // Set mapping + $type->setMapping(array('point' => array('type' => 'geo_point'))); + + // Add doc 1 + $doc1 = new Document(1, + array( + 'name' => 'ruflin', + ) + ); + + $doc1->addGeoPoint('point', 17, 19); + $type->addDocument($doc1); + + // Add doc 2 + $doc2 = new Document(2, + array( + 'name' => 'ruflin', + ) + ); + + $doc2->addGeoPoint('point', 30, 40); + $type->addDocument($doc2); + + $index->optimize(); + $index->refresh(); + + // Only one point should be in radius + $query = new Query(); + $geoFilter = new GeoDistance('point', array('lat' => 30, 'lon' => 40), '1km'); + + $query = new Query(new MatchAll()); + $query->setPostFilter($geoFilter); + $this->assertEquals(1, $type->search($query)->count()); + + // Both points should be inside + $query = new Query(); + $geoFilter = new GeoDistance('point', array('lat' => 30, 'lon' => 40), '40000km'); + $query = new Query(new MatchAll()); + $query->setPostFilter($geoFilter); + $index->refresh(); + + $this->assertEquals(2, $type->search($query)->count()); + } + + /** + * @group unit + */ + public function testConstructLatlon() + { + $key = 'location'; + $location = array( + 'lat' => 48.86, + 'lon' => 2.35, + ); + $distance = '10km'; + + $filter = new GeoDistance($key, $location, $distance); + + $expected = array( + 'geo_distance' => array( + $key => $location, + 'distance' => $distance, + ), + ); + + $data = $filter->toArray(); + + $this->assertEquals($expected, $data); + } + + /** + * @group unit + */ + public function testConstructGeohash() + { + $key = 'location'; + $location = 'u09tvqx'; + $distance = '10km'; + + $filter = new GeoDistance($key, $location, $distance); + + $expected = array( + 'geo_distance' => array( + $key => $location, + 'distance' => $distance, + ), + ); + + $data = $filter->toArray(); + + $this->assertEquals($expected, $data); + } + + /** + * @group unit + */ + public function testSetDistanceType() + { + $filter = new GeoDistance('location', array('lat' => 48.86, 'lon' => 2.35), '10km'); + $distanceType = GeoDistance::DISTANCE_TYPE_ARC; + $filter->setDistanceType($distanceType); + + $data = $filter->toArray(); + + $this->assertEquals($distanceType, $data['geo_distance']['distance_type']); + } + + /** + * @group unit + */ + public function testSetOptimizeBbox() + { + $filter = new GeoDistance('location', array('lat' => 48.86, 'lon' => 2.35), '10km'); + $optimizeBbox = GeoDistance::OPTIMIZE_BBOX_MEMORY; + $filter->setOptimizeBbox($optimizeBbox); + + $data = $filter->toArray(); + + $this->assertEquals($optimizeBbox, $data['geo_distance']['optimize_bbox']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoPolygonTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoPolygonTest.php new file mode 100644 index 00000000..b56f73b0 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoPolygonTest.php @@ -0,0 +1,65 @@ +_createIndex(); + + $type = $index->getType('test'); + + // Set mapping + $type->setMapping(array('location' => array('type' => 'geo_point'))); + + // Add doc 1 + $doc1 = new Document(1, + array( + 'name' => 'ruflin', + ) + ); + + $doc1->addGeoPoint('location', 17, 19); + $type->addDocument($doc1); + + // Add doc 2 + $doc2 = new Document(2, + array( + 'name' => 'ruflin', + ) + ); + + $doc2->addGeoPoint('location', 30, 40); + $type->addDocument($doc2); + + $index->refresh(); + + // Only one point should be in polygon + $query = new Query(); + $points = array(array(16, 16), array(16, 20), array(20, 20), array(20, 16), array(16, 16)); + $geoFilter = new GeoPolygon('location', $points); + + $query = new Query(new MatchAll()); + $query->setPostFilter($geoFilter); + $this->assertEquals(1, $type->search($query)->count()); + + // Both points should be inside + $query = new Query(); + $points = array(array(16, 16), array(16, 40), array(40, 40), array(40, 16), array(16, 16)); + $geoFilter = new GeoPolygon('location', $points); + + $query = new Query(new MatchAll()); + $query->setPostFilter($geoFilter); + + $this->assertEquals(2, $type->search($query)->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapePreIndexedTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapePreIndexedTest.php new file mode 100644 index 00000000..96453527 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapePreIndexedTest.php @@ -0,0 +1,102 @@ +_createIndex(); + $indexName = $index->getName(); + $type = $index->getType('type'); + $otherType = $index->getType('other_type'); + + // create mapping + $mapping = new \Elastica\Type\Mapping($type, array( + 'location' => array( + 'type' => 'geo_shape', + ), + )); + $type->setMapping($mapping); + + // create other type mapping + $otherMapping = new \Elastica\Type\Mapping($type, array( + 'location' => array( + 'type' => 'geo_shape', + ), + )); + $otherType->setMapping($otherMapping); + + // add type docs + $type->addDocument(new \Elastica\Document('1', array( + 'location' => array( + 'type' => 'envelope', + 'coordinates' => array( + array(0.0, 50.0), + array(50.0, 0.0), + ), + ), + ))); + + // add other type docs + $otherType->addDocument(new \Elastica\Document('2', array( + 'location' => array( + 'type' => 'envelope', + 'coordinates' => array( + array(25.0, 75.0), + array(75.0, 25.0), + ), + ), + ))); + + $index->optimize(); + $index->refresh(); + + $gsp = new GeoShapePreIndexed( + 'location', '1', 'type', $indexName, 'location' + ); + $gsp->setRelation(AbstractGeoShape::RELATION_INTERSECT); + + $expected = array( + 'geo_shape' => array( + 'location' => array( + 'indexed_shape' => array( + 'id' => '1', + 'type' => 'type', + 'index' => $indexName, + 'path' => 'location', + ), + 'relation' => $gsp->getRelation(), + ), + ), + ); + + $this->assertEquals($expected, $gsp->toArray()); + + $query = new Filtered(new MatchAll(), $gsp); + $results = $index->getType('type')->search($query); + + $this->assertEquals(1, $results->count()); + + $index->delete(); + } + + /** + * @group unit + */ + public function testSetRelation() + { + $gsp = new GeoShapePreIndexed('location', '1', 'type', 'indexName', 'location'); + $gsp->setRelation(AbstractGeoShape::RELATION_INTERSECT); + $this->assertEquals(AbstractGeoShape::RELATION_INTERSECT, $gsp->getRelation()); + $this->assertInstanceOf('Elastica\Filter\GeoShapePreIndexed', $gsp->setRelation(AbstractGeoShape::RELATION_INTERSECT)); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapeProvidedTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapeProvidedTest.php new file mode 100644 index 00000000..d631e44e --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeoShapeProvidedTest.php @@ -0,0 +1,103 @@ +_createIndex(); + $type = $index->getType('test'); + + // create mapping + $mapping = new Mapping($type, array( + 'location' => array( + 'type' => 'geo_shape', + ), + )); + $type->setMapping($mapping); + + // add docs + $type->addDocument(new Document(1, array( + 'location' => array( + 'type' => 'envelope', + 'coordinates' => array( + array(-50.0, 50.0), + array(50.0, -50.0), + ), + ), + ))); + + $index->optimize(); + $index->refresh(); + + $envelope = array( + array(25.0, 75.0), + array(75.0, 25.0), + ); + $gsp = new GeoShapeProvided('location', $envelope); + + $expected = array( + 'geo_shape' => array( + 'location' => array( + 'shape' => array( + 'type' => GeoShapeProvided::TYPE_ENVELOPE, + 'coordinates' => $envelope, + ), + 'relation' => AbstractGeoShape::RELATION_INTERSECT, + ), + ), + ); + + $this->assertEquals($expected, $gsp->toArray()); + + $query = new Filtered(new MatchAll(), $gsp); + $results = $type->search($query); + + $this->assertEquals(1, $results->count()); + } + + /** + * @group unit + */ + public function testConstructPolygon() + { + $polygon = array(array(102.0, 2.0), array(103.0, 2.0), array(103.0, 3.0), array(103.0, 3.0), array(102.0, 2.0)); + $gsp = new GeoShapeProvided('location', $polygon, GeoShapeProvided::TYPE_POLYGON); + + $expected = array( + 'geo_shape' => array( + 'location' => array( + 'shape' => array( + 'type' => GeoShapeProvided::TYPE_POLYGON, + 'coordinates' => $polygon, + ), + 'relation' => $gsp->getRelation(), + ), + ), + ); + + $this->assertEquals($expected, $gsp->toArray()); + } + + /** + * @group unit + */ + public function testSetRelation() + { + $gsp = new GeoShapeProvided('location', array(array(25.0, 75.0), array(75.0, 25.0))); + $gsp->setRelation(AbstractGeoShape::RELATION_INTERSECT); + $this->assertEquals(AbstractGeoShape::RELATION_INTERSECT, $gsp->getRelation()); + $this->assertInstanceOf('Elastica\Filter\GeoShapeProvided', $gsp->setRelation(AbstractGeoShape::RELATION_INTERSECT)); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeohashCellTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeohashCellTest.php new file mode 100644 index 00000000..7ef0d04f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/GeohashCellTest.php @@ -0,0 +1,68 @@ + 37.789018, 'lon' => -122.391506), '50m'); + $expected = array( + 'geohash_cell' => array( + 'pin' => array( + 'lat' => 37.789018, + 'lon' => -122.391506, + ), + 'precision' => '50m', + 'neighbors' => false, + ), + ); + $this->assertEquals($expected, $filter->toArray()); + } + + /** + * @group functional + */ + public function testFilter() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $mapping = new Mapping($type, array( + 'pin' => array( + 'type' => 'geo_point', + 'geohash' => true, + 'geohash_prefix' => true, + ), + )); + $type->setMapping($mapping); + + $type->addDocument(new Document(1, array('pin' => '9q8yyzm0zpw8'))); + $type->addDocument(new Document(2, array('pin' => '9mudgb0yued0'))); + $index->refresh(); + + $filter = new GeohashCell('pin', array('lat' => 32.828326, 'lon' => -117.255854)); + $query = new Query(); + $query->setPostFilter($filter); + $results = $type->search($query); + + $this->assertEquals(1, $results->count()); + + //test precision parameter + $filter = new GeohashCell('pin', '9', 1); + $query = new Query(); + $query->setPostFilter($filter); + $results = $type->search($query); + + $this->assertEquals(2, $results->count()); + + $index->delete(); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasChildTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasChildTest.php new file mode 100644 index 00000000..00af1def --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasChildTest.php @@ -0,0 +1,213 @@ + array( + 'query' => $q->toArray(), + 'type' => $type, + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testSetType() + { + $index = $this->prepareSearchData(); + + $filter = new HasChild(new MatchAll(), 'type_name'); + $this->assertEquals('type_name', $filter->getParam('type')); + + $filter->setType('new_type_name'); + $this->assertEquals('new_type_name', $filter->getParam('type')); + + $type = $index->getType('foo'); + $filter = new HasChild(new MatchAll(), $type); + $this->assertEquals('foo', $filter->getParam('type')); + + $type = $index->getType('bar'); + $filter->setType($type); + $this->assertEquals('bar', $filter->getParam('type')); + + $returnValue = $filter->setType('last'); + $this->assertInstanceOf('Elastica\Filter\HasChild', $returnValue); + } + + /** + * @group unit + */ + public function testSetMinimumChildrenCount() + { + $query = new MatchAll(); + $filter = new HasChild($query, 'test'); + + $filter->setMinimumChildrenCount(2); + $this->assertEquals(2, $filter->getParam('min_children')); + + $returnValue = $filter->setMinimumChildrenCount(2); + $this->assertInstanceOf('Elastica\Filter\HasChild', $returnValue); + } + + /** + * @group unit + */ + public function testSetMaximumChildrenCount() + { + $query = new MatchAll(); + $filter = new HasChild($query, 'test'); + + $filter->setMaximumChildrenCount(10); + $this->assertEquals(10, $filter->getParam('max_children')); + + $returnValue = $filter->setMaximumChildrenCount(10); + $this->assertInstanceOf('Elastica\Filter\HasChild', $returnValue); + } + + /** + * @group unit + */ + public function testFilterInsideHasChild() + { + $f = new \Elastica\Filter\MatchAll(); + + $type = 'test'; + + $filter = new HasChild($f, $type); + + $expectedArray = array( + 'has_child' => array( + 'filter' => $f->toArray(), + 'type' => $type, + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testFilterInsideHasChildSearch() + { + $index = $this->prepareSearchData(); + + $f = new \Elastica\Filter\Term(); + $f->setTerm('user', 'child1'); + $filter = new HasChild($f, 'child'); + + $searchQuery = new \Elastica\Query(); + $searchQuery->setPostFilter($filter); + $searchResults = $index->search($searchQuery); + + $this->assertEquals(1, $searchResults->count()); + + $result = $searchResults->current()->getData(); + $expected = array('id' => 'parent1', 'user' => 'parent1', 'email' => 'parent1@test.com'); + + $this->assertEquals($expected, $result); + } + + /** + * @group functional + */ + public function testQueryInsideHasChildSearch() + { + $index = $this->prepareSearchData(); + + $f = new \Elastica\Query\Term(); + $f->setTerm('user', 'child1'); + $filter = new HasChild($f, 'child'); + + $searchQuery = new \Elastica\Query(); + $searchQuery->setPostFilter($filter); + $searchResults = $index->search($searchQuery); + + $this->assertEquals(1, $searchResults->count()); + + $result = $searchResults->current()->getData(); + $expected = array('id' => 'parent1', 'user' => 'parent1', 'email' => 'parent1@test.com'); + + $this->assertEquals($expected, $result); + } + + /** + * @group functional + */ + public function testTypeInsideHasChildSearch() + { + $index = $this->prepareSearchData(); + + $f = new \Elastica\Query\Match(); + $f->setField('alt.name', 'testname'); + $filter = new HasChild($f, 'child'); + + $searchQuery = new \Elastica\Query(); + $searchQuery->setPostFilter($filter); + $searchResults = $index->search($searchQuery); + + $this->assertEquals(1, $searchResults->count()); + + $result = $searchResults->current()->getData(); + $expected = array('id' => 'parent2', 'user' => 'parent2', 'email' => 'parent2@test.com'); + + $this->assertEquals($expected, $result); + } + + private function prepareSearchData() + { + $client = $this->_getClient(); + $index = $client->getIndex('has_child_test'); + $index->create(array(), true); + + $parentType = $index->getType('parent'); + + $childType = $index->getType('child'); + $childMapping = new \Elastica\Type\Mapping($childType); + $childMapping->setParent('parent'); + $childMapping->send(); + + $altType = $index->getType('alt'); + $altDoc = new Document('alt1', array('name' => 'altname')); + $altType->addDocument($altDoc); + + $parent1 = new Document('parent1', array('id' => 'parent1', 'user' => 'parent1', 'email' => 'parent1@test.com')); + $parentType->addDocument($parent1); + $parent2 = new Document('parent2', array('id' => 'parent2', 'user' => 'parent2', 'email' => 'parent2@test.com')); + $parentType->addDocument($parent2); + + $child1 = new Document('child1', array('id' => 'child1', 'user' => 'child1', 'email' => 'child1@test.com')); + $child1->setParent('parent1'); + $childType->addDocument($child1); + $child2 = new Document('child2', array('id' => 'child2', 'user' => 'child2', 'email' => 'child2@test.com')); + $child2->setParent('parent2'); + $childType->addDocument($child2); + $child3 = new Document('child3', array('id' => 'child3', 'user' => 'child3', 'email' => 'child3@test.com', 'alt' => array(array('name' => 'testname')))); + $child3->setParent('parent2'); + $childType->addDocument($child3); + + $index->refresh(); + + return $index; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasParentTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasParentTest.php new file mode 100644 index 00000000..50143dda --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/HasParentTest.php @@ -0,0 +1,153 @@ + array( + 'query' => $q->toArray(), + 'type' => $type, + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testSetType() + { + $index = $this->prepareSearchData(); + + $filter = new HasParent(new MatchAll(), 'type_name'); + $this->assertEquals('type_name', $filter->getParam('type')); + + $filter->setType('new_type_name'); + $this->assertEquals('new_type_name', $filter->getParam('type')); + + $type = $index->getType('foo'); + $filter = new HasParent(new MatchAll(), $type); + $this->assertEquals('foo', $filter->getParam('type')); + + $type = $index->getType('bar'); + $filter->setType($type); + $this->assertEquals('bar', $filter->getParam('type')); + + $returnValue = $filter->setType('last'); + $this->assertInstanceOf('Elastica\Filter\HasParent', $returnValue); + } + + /** + * @group unit + */ + public function testFilterInsideHasParent() + { + $f = new \Elastica\Filter\MatchAll(); + + $type = 'test'; + + $filter = new HasParent($f, $type); + + $expectedArray = array( + 'has_parent' => array( + 'filter' => $f->toArray(), + 'type' => $type, + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testFilterInsideHasParentSearch() + { + $index = $this->prepareSearchData(); + + $f = new \Elastica\Filter\Term(); + $f->setTerm('user', 'parent1'); + $filter = new HasParent($f, 'parent'); + + $searchQuery = new \Elastica\Query(); + $searchQuery->setPostFilter($filter); + $searchResults = $index->search($searchQuery); + + $this->assertEquals(1, $searchResults->count()); + + $result = $searchResults->current()->getData(); + $expected = array('id' => 'child1', 'user' => 'child1', 'email' => 'child1@test.com'); + + $this->assertEquals($expected, $result); + } + + /** + * @group functional + */ + public function testQueryInsideHasParentSearch() + { + $index = $this->prepareSearchData(); + + $f = new \Elastica\Query\Term(); + $f->setTerm('user', 'parent1'); + $filter = new HasParent($f, 'parent'); + + $searchQuery = new \Elastica\Query(); + $searchQuery->setPostFilter($filter); + $searchResults = $index->search($searchQuery); + + $this->assertEquals(1, $searchResults->count()); + + $result = $searchResults->current()->getData(); + $expected = array('id' => 'child1', 'user' => 'child1', 'email' => 'child1@test.com'); + + $this->assertEquals($expected, $result); + } + + private function prepareSearchData() + { + $client = $this->_getClient(); + $index = $client->getIndex('has_parent_test'); + $index->create(array(), true); + + $parentType = $index->getType('parent'); + + $childType = $index->getType('child'); + $childMapping = new \Elastica\Type\Mapping($childType); + $childMapping->setParent('parent'); + $childMapping->send(); + + $parent1 = new Document('parent1', array('id' => 'parent1', 'user' => 'parent1', 'email' => 'parent1@test.com')); + $parentType->addDocument($parent1); + $parent2 = new Document('parent2', array('id' => 'parent2', 'user' => 'parent2', 'email' => 'parent2@test.com')); + $parentType->addDocument($parent2); + + $child1 = new Document('child1', array('id' => 'child1', 'user' => 'child1', 'email' => 'child1@test.com')); + $child1->setParent('parent1'); + $childType->addDocument($child1); + $child2 = new Document('child2', array('id' => 'child2', 'user' => 'child2', 'email' => 'child2@test.com')); + $child2->setParent('parent2'); + $childType->addDocument($child2); + + $index->refresh(); + + return $index; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IdsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IdsTest.php new file mode 100644 index 00000000..8395f39a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IdsTest.php @@ -0,0 +1,244 @@ +_createIndex(); + + // Add documents to first type + $docs = array(); + for ($i = 1; $i < 100; $i++) { + $docs[] = new Document($i, array('name' => 'ruflin')); + } + $index->getType('helloworld1')->addDocuments($docs); + + // Add documents to second type + $docs = array(); + for ($i = 1; $i < 100; $i++) { + $docs[] = new Document($i, array('name' => 'ruflin')); + } + // This is a special id that will only be in the second type + $docs[] = new Document(101, array('name' => 'ruflin')); + $index->getType('helloworld2')->addDocuments($docs); + + $index->optimize(); + $index->refresh(); + + return $index; + } + + protected function _getTypeForTest() + { + return $this->_getIndexForTest()->getType('helloworld1'); + } + + /** + * @group functional + */ + public function testSetIdsSearchSingle() + { + $filter = new Ids(); + $filter->setIds('1'); + + $query = Query::create($filter); + $resultSet = $this->_getTypeForTest()->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetIdsSearchArray() + { + $filter = new Ids(); + $filter->setIds(array(1, 7, 13)); + + $query = Query::create($filter); + $resultSet = $this->_getTypeForTest()->search($query); + + $this->assertEquals(3, $resultSet->count()); + } + + /** + * @group functional + */ + public function testAddIdsSearchSingle() + { + $filter = new Ids(); + $filter->addId('39'); + + $query = Query::create($filter); + $resultSet = $this->_getTypeForTest()->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testAddIdsSearchSingleNotInType() + { + $filter = new Ids(); + $filter->addId('39'); + + // Add an ID that is not in the index + $filter->addId(104); + + $query = Query::create($filter); + $resultSet = $this->_getTypeForTest()->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testComboIdsSearchArray() + { + $filter = new Ids(); + $filter->setIds(array(1, 7, 13)); + $filter->addId('39'); + + $query = Query::create($filter); + $resultSet = $this->_getTypeForTest()->search($query); + + $this->assertEquals(4, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchSingle() + { + $filter = new Ids(); + $filter->setIds('1'); + $filter->setType('helloworld1'); + + $query = Query::create($filter); + $resultSet = $this->_getIndexForTest()->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchArray() + { + $filter = new Ids(); + $filter->setIds(array('1', '2')); + $filter->setType('helloworld1'); + + $query = Query::create($filter); + $resultSet = $this->_getIndexForTest()->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchSingleDocInOtherType() + { + $filter = new Ids(); + + // Doc 4 is in the second type... + $filter->setIds('101'); + $filter->setType('helloworld1'); + + $query = Query::create($filter); + $resultSet = $this->_getTypeForTest()->search($query); + + // ...therefore 0 results should be returned + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchArrayDocInOtherType() + { + $filter = new Ids(); + + // Doc 4 is in the second type... + $filter->setIds(array('1', '101')); + $filter->setType('helloworld1'); + + $query = Query::create($filter); + $resultSet = $this->_getTypeForTest()->search($query); + + // ...therefore only 1 result should be returned + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeArraySearchArray() + { + $filter = new Ids(); + $filter->setIds(array('1', '4')); + $filter->setType(array('helloworld1', 'helloworld2')); + + $query = Query::create($filter); + $resultSet = $this->_getIndexForTest()->search($query); + + $this->assertEquals(4, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeArraySearchSingle() + { + $filter = new Ids(); + $filter->setIds('4'); + $filter->setType(array('helloworld1', 'helloworld2')); + + $query = Query::create($filter); + $resultSet = $this->_getIndexForTest()->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group unit + */ + public function testFilterTypeAndTypeCollision() + { + // This test ensures that Elastica\Type and Elastica\Filter\Type + // do not collide when used together, which at one point + // happened because of a use statement in Elastica\Filter\Ids + // Test goal is to make sure a Fatal Error is not triggered + $filterType = new Type(); + $filter = new Ids(); + } + + /** + * @group unit + */ + public function testAddType() + { + $type = $this->_getClient()->getIndex('indexname')->getType('typename'); + + $filter = new Ids(); + + $filter->addType('foo'); + $this->assertEquals(array('foo'), $filter->getParam('type')); + + $filter->addType($type); + $this->assertEquals(array('foo', $type->getName()), $filter->getParam('type')); + + $returnValue = $filter->addType('bar'); + $this->assertInstanceOf('Elastica\Filter\Ids', $returnValue); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IndicesTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IndicesTest.php new file mode 100644 index 00000000..bc78aa6b --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/IndicesTest.php @@ -0,0 +1,125 @@ + array( + 'indices' => array('index1', 'index2'), + 'filter' => array( + 'term' => array('tag' => 'wow'), + ), + 'no_match_filter' => array( + 'term' => array('tag' => 'such filter'), + ), + ), + ); + $filter = new Indices(new Term(array('tag' => 'wow')), array('index1', 'index2')); + $filter->setNoMatchFilter(new Term(array('tag' => 'such filter'))); + $this->assertEquals($expected, $filter->toArray()); + } + + /** + * @group functional + */ + public function testIndicesFilter() + { + $docs = array( + new Document(1, array('color' => 'blue')), + new Document(2, array('color' => 'green')), + new Document(3, array('color' => 'blue')), + new Document(4, array('color' => 'yellow')), + ); + + $index1 = $this->_createIndex(); + $index1->addAlias('indices_filter'); + $index1->getType('test')->addDocuments($docs); + $index1->refresh(); + + $index2 = $this->_createIndex(); + $index2->addAlias('indices_filter'); + $index2->getType('test')->addDocuments($docs); + $index2->refresh(); + + $filter = new Indices(new BoolNot(new Term(array('color' => 'blue'))), array($index1->getName())); + $filter->setNoMatchFilter(new BoolNot(new Term(array('color' => 'yellow')))); + $query = new Query(); + $query->setPostFilter($filter); + + // search over the alias + $index = $this->_getClient()->getIndex('indices_filter'); + $results = $index->search($query); + + // ensure that the proper docs have been filtered out for each index + $this->assertEquals(5, $results->count()); + foreach ($results->getResults() as $result) { + $data = $result->getData(); + $color = $data['color']; + if ($result->getIndex() === $index1->getName()) { + $this->assertNotEquals('blue', $color); + } else { + $this->assertNotEquals('yellow', $color); + } + } + } + + /** + * @group unit + */ + public function testSetIndices() + { + $client = $this->_getClient(); + $index1 = $client->getIndex('index1'); + $index2 = $client->getIndex('index2'); + + $indices = array('one', 'two'); + $filter = new Indices(new Term(array('color' => 'blue')), $indices); + $this->assertEquals($indices, $filter->getParam('indices')); + + $indices[] = 'three'; + $filter->setIndices($indices); + $this->assertEquals($indices, $filter->getParam('indices')); + + $filter->setIndices(array($index1, $index2)); + $expected = array($index1->getName(), $index2->getName()); + $this->assertEquals($expected, $filter->getParam('indices')); + + $returnValue = $filter->setIndices($indices); + $this->assertInstanceOf('Elastica\Filter\Indices', $returnValue); + } + + /** + * @group unit + */ + public function testAddIndex() + { + $client = $this->_getClient(); + $index = $client->getIndex('someindex'); + + $filter = new Indices(new Term(array('color' => 'blue')), array()); + + $filter->addIndex($index); + $expected = array($index->getName()); + $this->assertEquals($expected, $filter->getParam('indices')); + + $filter->addIndex('foo'); + $expected = array($index->getName(), 'foo'); + $this->assertEquals($expected, $filter->getParam('indices')); + + $returnValue = $filter->addIndex('bar'); + $this->assertInstanceOf('Elastica\Filter\Indices', $returnValue); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/LimitTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/LimitTest.php new file mode 100644 index 00000000..0cdfee39 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/LimitTest.php @@ -0,0 +1,34 @@ +assertEquals(10, $filter->getParam('value')); + + $this->assertInstanceOf('Elastica\Filter\Limit', $filter->setLimit(20)); + $this->assertEquals(20, $filter->getParam('value')); + } + + /** + * @group unit + */ + public function testToArray() + { + $filter = new Limit(15); + + $expectedArray = array( + 'limit' => array('value' => 15), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MatchAllTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MatchAllTest.php new file mode 100644 index 00000000..9bfd511f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MatchAllTest.php @@ -0,0 +1,20 @@ + new \stdClass()); + + $this->assertEquals($expectedArray, $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MissingTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MissingTest.php new file mode 100644 index 00000000..f87df790 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MissingTest.php @@ -0,0 +1,78 @@ + array('field' => 'field_name')); + $this->assertEquals($expectedArray, $filter->toArray()); + + $filter = new Missing('field_name'); + $filter->setExistence(true); + $expectedArray = array('missing' => array('field' => 'field_name', 'existence' => true)); + $this->assertEquals($expectedArray, $filter->toArray()); + + $filter = new Missing('field_name'); + $filter->setNullValue(true); + $expectedArray = array('missing' => array('field' => 'field_name', 'null_value' => true)); + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group unit + */ + public function testSetField() + { + $filter = new Missing('field_name'); + + $this->assertEquals('field_name', $filter->getParam('field')); + + $filter->setField('new_field_name'); + $this->assertEquals('new_field_name', $filter->getParam('field')); + + $returnValue = $filter->setField('very_new_field_name'); + $this->assertInstanceOf('Elastica\Filter\Missing', $returnValue); + } + + /** + * @group unit + */ + public function testSetExistence() + { + $filter = new Missing('field_name'); + + $filter->setExistence(true); + $this->assertTrue($filter->getParam('existence')); + + $filter->setExistence(false); + $this->assertFalse($filter->getParam('existence')); + + $returnValue = $filter->setExistence(true); + $this->assertInstanceOf('Elastica\Filter\Missing', $returnValue); + } + + /** + * @group unit + */ + public function testSetNullValue() + { + $filter = new Missing('field_name'); + + $filter->setNullValue(true); + $this->assertTrue($filter->getParam('null_value')); + + $filter->setNullValue(false); + $this->assertFalse($filter->getParam('null_value')); + + $returnValue = $filter->setNullValue(true); + $this->assertInstanceOf('Elastica\Filter\Missing', $returnValue); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MultiTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MultiTest.php new file mode 100644 index 00000000..cc8a56e8 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/MultiTest.php @@ -0,0 +1,109 @@ +getStub(); + + $this->assertEmpty($stub->getFilters()); + } + + /** + * @group unit + */ + public function testAddFilter() + { + $stub = $this->getStub(); + + $filter = new MatchAll(); + $stub->addFilter($filter); + + $expected = array( + $filter->toArray(), + ); + + $this->assertEquals($expected, $stub->getFilters()); + } + + /** + * @group unit + */ + public function testSetFilters() + { + $stub = $this->getStub(); + + $filter = new MatchAll(); + $stub->setFilters(array($filter)); + + $expected = array( + $filter->toArray(), + ); + + $this->assertEquals($expected, $stub->getFilters()); + } + + /** + * @group unit + */ + public function testToArray() + { + $stub = $this->getStub(); + + $filter = new MatchAll(); + $stub->addFilter($filter); + + $expected = array( + $stub->getBaseName() => array( + $filter->toArray(), + ), + ); + + $this->assertEquals($expected, $stub->toArray()); + } + + /** + * @group unit + */ + public function testToArrayWithParam() + { + $stub = $this->getStub(); + + $stub->setCached(true); + + $filter = new MatchAll(); + $stub->addFilter($filter); + + $expected = array( + $stub->getBaseName() => array( + '_cache' => true, + 'filters' => array( + $filter->toArray(), + ), + ), + ); + + $this->assertEquals($expected, $stub->toArray()); + } + + private function getStub() + { + return $this->getMockForAbstractClass('Elastica\Test\Filter\AbstractMultiDebug'); + } +} + +class AbstractMultiDebug extends AbstractMulti +{ + public function getBaseName() + { + return parent::_getBaseName(); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedFilterWithSetFilterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedFilterWithSetFilterTest.php new file mode 100644 index 00000000..96a49a77 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedFilterWithSetFilterTest.php @@ -0,0 +1,110 @@ +_createIndex(); + $type = $index->getType('user'); + + $type->setMapping(new Mapping(null, array( + 'firstname' => array('type' => 'string', 'store' => 'yes'), + // default is store => no expected + 'lastname' => array('type' => 'string'), + 'hobbies' => array( + 'type' => 'nested', + 'include_in_parent' => true, + 'properties' => array('hobby' => array('type' => 'string')), + ), + ))); + + $type->addDocuments(array( + new Document(1, array( + 'firstname' => 'Nicolas', + 'lastname' => 'Ruflin', + 'hobbies' => array( + array('hobby' => 'opensource'), + ), + )), + new Document(2, array( + 'firstname' => 'Nicolas', + 'lastname' => 'Ippolito', + 'hobbies' => array( + array('hobby' => 'opensource'), + array('hobby' => 'guitar'), + ), + )), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $filter = new Nested(); + $this->assertEquals(array('nested' => array()), $filter->toArray()); + $query = new Terms(); + $query->setTerms('hobby', array('guitar')); + $filter->setPath('hobbies'); + $filter->setFilter($query); + + $expectedArray = array( + 'nested' => array( + 'path' => 'hobbies', + 'filter' => array('terms' => array( + 'hobby' => array('guitar'), + )), + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testShouldReturnTheRightNumberOfResult() + { + $filter = new Nested(); + $this->assertEquals(array('nested' => array()), $filter->toArray()); + $query = new Terms(); + $query->setTerms('hobby', array('guitar')); + $filter->setPath('hobbies'); + $filter->setFilter($query); + + $client = $this->_getClient(); + $search = new Search($client); + $index = $this->_getIndexForTest(); + $search->addIndex($index); + $resultSet = $search->search($filter); + + $this->assertEquals(1, $resultSet->getTotalHits()); + + $filter = new Nested(); + $this->assertEquals(array('nested' => array()), $filter->toArray()); + $query = new Terms(); + $query->setTerms('hobby', array('opensource')); + $filter->setPath('hobbies'); + $filter->setFilter($query); + + $client = $this->_getClient(); + $search = new Search($client); + $index = $this->_getIndexForTest(); + $search->addIndex($index); + $resultSet = $search->search($filter); + $this->assertEquals(2, $resultSet->getTotalHits()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedTest.php new file mode 100644 index 00000000..8eb42d37 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NestedTest.php @@ -0,0 +1,127 @@ +_createIndex('elastica_test_filter_nested'); + $type = $index->getType('user'); + $mapping = new Mapping(); + $mapping->setProperties( + array( + 'firstname' => array('type' => 'string', 'store' => 'yes'), + // default is store => no expected + 'lastname' => array('type' => 'string'), + 'hobbies' => array( + 'type' => 'nested', + 'include_in_parent' => true, + 'properties' => array('hobby' => array('type' => 'string')), + ), + ) + ); + $type->setMapping($mapping); + + $response = $type->addDocuments(array( + new Document(1, + array( + 'firstname' => 'Nicolas', + 'lastname' => 'Ruflin', + 'hobbies' => array( + array('hobby' => 'opensource'), + ), + ) + ), + new Document(2, + array( + 'firstname' => 'Nicolas', + 'lastname' => 'Ippolito', + 'hobbies' => array( + array('hobby' => 'opensource'), + array('hobby' => 'guitar'), + ), + ) + ), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $filter = new Nested(); + $this->assertEquals(array('nested' => array()), $filter->toArray()); + $query = new Terms(); + $query->setTerms('hobby', array('guitar')); + $filter->setPath('hobbies'); + $filter->setQuery($query); + + $expectedArray = array( + 'nested' => array( + 'path' => 'hobbies', + 'query' => array('terms' => array( + 'hobby' => array('guitar'), + )), + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testShouldReturnTheRightNumberOfResult() + { + $filter = new Nested(); + $this->assertEquals(array('nested' => array()), $filter->toArray()); + $query = new Terms(); + $query->setTerms('hobby', array('guitar')); + $filter->setPath('hobbies'); + $filter->setQuery($query); + + $search = new Search($this->_getClient()); + $search->addIndex($this->_getIndexForTest()); + $resultSet = $search->search($filter); + $this->assertEquals(1, $resultSet->getTotalHits()); + + $filter = new Nested(); + $this->assertEquals(array('nested' => array()), $filter->toArray()); + $query = new Terms(); + $query->setTerms('hobby', array('opensource')); + $filter->setPath('hobbies'); + $filter->setQuery($query); + + $search = new Search($this->_getClient()); + $search->addIndex($this->_getIndexForTest()); + $resultSet = $search->search($filter); + $this->assertEquals(2, $resultSet->getTotalHits()); + } + + /** + * @group unit + */ + public function testSetJoin() + { + $filter = new Nested(); + + $this->assertTrue($filter->setJoin(true)->getParam('join')); + + $this->assertFalse($filter->setJoin(false)->getParam('join')); + + $returnValue = $filter->setJoin(true); + $this->assertInstanceOf('Elastica\Filter\Nested', $returnValue); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NumericRangeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NumericRangeTest.php new file mode 100644 index 00000000..590b5137 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/NumericRangeTest.php @@ -0,0 +1,37 @@ +addField('fieldName', array('to' => 'value')); + $this->assertInstanceOf('Elastica\Filter\NumericRange', $returnValue); + } + + /** + * @group unit + */ + public function testToArray() + { + $filter = new NumericRange(); + + $fromTo = array('from' => 'ra', 'to' => 'ru'); + $filter->addField('name', $fromTo); + + $expectedArray = array( + 'numeric_range' => array( + 'name' => $fromTo, + ), + ); + + $this->assertEquals($expectedArray, $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/PrefixTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/PrefixTest.php new file mode 100644 index 00000000..aab37615 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/PrefixTest.php @@ -0,0 +1,138 @@ + array( + $field => $prefix, + ), + ); + + $this->assertequals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testDifferentPrefixes() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $index->create(array(), true); + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no', 'index' => 'not_analyzed'), + ) + ); + $type->setMapping($mapping); + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + new Document(5, array('name' => 'New Orleans')), + )); + + $index->refresh(); + + $query = new Prefix('name', 'Ba'); + $resultSet = $index->search($query); + $this->assertEquals(3, $resultSet->count()); + + // Lower case should not return a result + $query = new Prefix('name', 'ba'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + + $query = new Prefix('name', 'Baden'); + $resultSet = $index->search($query); + $this->assertEquals(2, $resultSet->count()); + + $query = new Prefix('name', 'Baden B'); + $resultSet = $index->search($query); + $this->assertEquals(1, $resultSet->count()); + + $query = new Prefix('name', 'Baden Bas'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testDifferentPrefixesLowercase() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $indexParams = array( + 'analysis' => array( + 'analyzer' => array( + 'lw' => array( + 'type' => 'custom', + 'tokenizer' => 'keyword', + 'filter' => array('lowercase'), + ), + ), + ), + ); + + $index->create($indexParams, true); + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no', 'analyzer' => 'lw'), + ) + ); + $type->setMapping($mapping); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + new Document(5, array('name' => 'New Orleans')), + )); + + $index->refresh(); + + $query = new Prefix('name', 'ba'); + $resultSet = $index->search($query); + $this->assertEquals(3, $resultSet->count()); + + // Upper case should not return a result + $query = new Prefix('name', 'Ba'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + + $query = new Prefix('name', 'baden'); + $resultSet = $index->search($query); + $this->assertEquals(2, $resultSet->count()); + + $query = new Prefix('name', 'baden b'); + $resultSet = $index->search($query); + $this->assertEquals(1, $resultSet->count()); + + $query = new Prefix('name', 'baden bas'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/QueryTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/QueryTest.php new file mode 100644 index 00000000..23754510 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/QueryTest.php @@ -0,0 +1,51 @@ + array( + 'query_string' => array( + 'query' => 'foo bar', + ), + ), + ); + + $this->assertEquals($expected, $filter->toArray()); + } + + /** + * @group unit + */ + public function testExtended() + { + $query = new QueryString('foo bar'); + $filter = new Query($query); + $filter->setCached(true); + + $expected = array( + 'fquery' => array( + 'query' => array( + 'query_string' => array( + 'query' => 'foo bar', + ), + ), + '_cache' => true, + ), + ); + + $this->assertEquals($expected, $filter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RangeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RangeTest.php new file mode 100644 index 00000000..b7cad3ac --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RangeTest.php @@ -0,0 +1,61 @@ +addField('fieldName', array('to' => 'value')); + $this->assertInstanceOf('Elastica\Filter\Range', $returnValue); + } + + /** + * @group unit + */ + public function testToArray() + { + $field = 'field_name'; + $range = array('gte' => 10, 'lte' => 99); + + $filter = new Range(); + $filter->addField($field, $range); + $expectedArray = array('range' => array($field => $range)); + $this->assertEquals($expectedArray, $filter->toArray()); + } + + /** + * @group unit + */ + public function testSetExecution() + { + $field = 'field_name'; + $range = array('gte' => 10, 'lte' => 99); + $filter = new Range('field_name', $range); + + $filter->setExecution('fielddata'); + $this->assertEquals('fielddata', $filter->getParam('execution')); + + $returnValue = $filter->setExecution('index'); + $this->assertInstanceOf('Elastica\Filter\Range', $returnValue); + } + + /** + * Tests that parent fields are not overwritten by the toArray method. + * + * @group unit + */ + public function testSetCachedNotOverwritten() + { + $filter = new Range('field_name', array()); + $filter->setCached(true); + $array = $filter->toArray(); + $this->assertTrue($array['range']['_cache']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RegexpTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RegexpTest.php new file mode 100644 index 00000000..6e3a0395 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/RegexpTest.php @@ -0,0 +1,162 @@ + array( + $field => $regexp, + ), + ); + + $this->assertequals($expectedArray, $filter->toArray()); + } + + /** + * @group unit + */ + public function testToArrayWithOptions() + { + $field = 'name'; + $regexp = 'ruf'; + $options = array( + 'flags' => 'ALL', + ); + + $filter = new Regexp($field, $regexp, $options); + + $expectedArray = array( + 'regexp' => array( + $field => array( + 'value' => $regexp, + 'flags' => 'ALL', + ), + ), + ); + + $this->assertequals($expectedArray, $filter->toArray()); + } + + /** + * @group functional + */ + public function testDifferentRegexp() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $index->create(array(), true); + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no', 'index' => 'not_analyzed'), + ) + ); + $type->setMapping($mapping); + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + new Document(5, array('name' => 'New Orleans')), + )); + + $index->refresh(); + + $query = new Regexp('name', 'Ba.*'); + $resultSet = $index->search($query); + $this->assertEquals(3, $resultSet->count()); + + // Lower case should not return a result + $query = new Regexp('name', 'ba.*'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + + $query = new Regexp('name', 'Baden.*'); + $resultSet = $index->search($query); + $this->assertEquals(2, $resultSet->count()); + + $query = new Regexp('name', 'Baden B.*'); + $resultSet = $index->search($query); + $this->assertEquals(1, $resultSet->count()); + + $query = new Regexp('name', 'Baden Bas.*'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testDifferentRegexpLowercase() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $indexParams = array( + 'analysis' => array( + 'analyzer' => array( + 'lw' => array( + 'type' => 'custom', + 'tokenizer' => 'keyword', + 'filter' => array('lowercase'), + ), + ), + ), + ); + + $index->create($indexParams, true); + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no', 'analyzer' => 'lw'), + ) + ); + $type->setMapping($mapping); + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + new Document(5, array('name' => 'New Orleans')), + )); + + $index->refresh(); + + $query = new Regexp('name', 'ba.*'); + $resultSet = $index->search($query); + $this->assertEquals(3, $resultSet->count()); + + // Upper case should not return a result + $query = new Regexp('name', 'Ba.*'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + + $query = new Regexp('name', 'baden.*'); + $resultSet = $index->search($query); + $this->assertEquals(2, $resultSet->count()); + + $query = new Regexp('name', 'baden b.*'); + $resultSet = $index->search($query); + $this->assertEquals(1, $resultSet->count()); + + $query = new Regexp('name', 'baden bas.*'); + $resultSet = $index->search($query); + $this->assertEquals(0, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ScriptTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ScriptTest.php new file mode 100644 index 00000000..fdec0381 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/ScriptTest.php @@ -0,0 +1,57 @@ +toArray(); + $this->assertInternalType('array', $array); + + $expected = array( + 'script' => array( + 'script' => $string, + ), + ); + $this->assertEquals($expected, $array); + } + + /** + * @group unit + */ + public function testSetScript() + { + $string = '_score * 2.0'; + $params = array( + 'param1' => 'one', + 'param2' => 1, + ); + $lang = 'mvel'; + $script = new Script($string, $params, $lang); + + $filter = new ScriptFilter(); + $filter->setScript($script); + + $array = $filter->toArray(); + + $expected = array( + 'script' => array( + 'script' => $string, + 'params' => $params, + 'lang' => $lang, + ), + ); + $this->assertEquals($expected, $array); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermTest.php new file mode 100644 index 00000000..9c8f5a2a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermTest.php @@ -0,0 +1,24 @@ +setTerm($key, $value); + + $data = $query->toArray(); + + $this->assertInternalType('array', $data['term']); + $this->assertEquals(array($key => $value), $data['term']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermsTest.php new file mode 100644 index 00000000..bb37ba96 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TermsTest.php @@ -0,0 +1,129 @@ +_createIndex(); + $type1 = $index->getType('musicians'); + $type2 = $index->getType('bands'); + + //index some test data + $type1->addDocuments(array( + new Document(1, array('name' => 'robert', 'lastName' => 'plant')), + new Document(2, array('name' => 'jimmy', 'lastName' => 'page')), + new Document(3, array('name' => 'john paul', 'lastName' => 'jones')), + new Document(4, array('name' => 'john', 'lastName' => 'bonham')), + new Document(5, array('name' => 'jimi', 'lastName' => 'hendrix')), + )); + + $type2->addDocument(new Document('led zeppelin', array('members' => array('plant', 'page', 'jones', 'bonham')))); + $index->refresh(); + + //use the terms lookup feature to query for some data + $termsFilter = new Terms(); + $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', null); + $query = new Query(); + $query->setPostFilter($termsFilter); + $results = $index->search($query); + $this->assertEquals($results->count(), 4, 'Terms lookup with null index'); + + $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', $index); + $query->setPostFilter($termsFilter); + $results = $index->search($query); + $this->assertEquals($results->count(), 4, 'Terms lookup with index as object'); + + //Query with index given as string + $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', $index->getName()); + $query->setPostFilter($termsFilter); + $results = $index->search($query); + $this->assertEquals($results->count(), 4, 'Terms lookup with index as string'); + + //Query with array of options + $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', array('index' => $index, 'cache' => false)); + $query->setPostFilter($termsFilter); + $results = $index->search($query); + $this->assertEquals($results->count(), 4, 'Terms lookup with options array'); + + $index->delete(); + } + + /** + * @group unit + */ + public function testSetExecution() + { + $filter = new Terms('color', array('blue', 'green')); + + $filter->setExecution('bool'); + $this->assertEquals('bool', $filter->getParam('execution')); + + $returnValue = $filter->setExecution('bool'); + $this->assertInstanceOf('Elastica\Filter\Terms', $returnValue); + } + + /** + * @group unit + */ + public function testSetTerms() + { + $field = 'color'; + $terms = array('blue', 'green'); + + $filter = new Terms(); + $filter->setTerms($field, $terms); + $expected = array('terms' => array($field => $terms)); + $this->assertEquals($expected, $filter->toArray()); + + $returnValue = $filter->setTerms($field, $terms); + $this->assertInstanceOf('Elastica\Filter\Terms', $returnValue); + } + + /** + * @group unit + */ + public function testAddTerm() + { + $filter = new Terms('color', array('blue')); + + $filter->addTerm('green'); + $expected = array('terms' => array('color' => array('blue', 'green'))); + $this->assertEquals($expected, $filter->toArray()); + + $returnValue = $filter->addTerm('cyan'); + $this->assertInstanceOf('Elastica\Filter\Terms', $returnValue); + } + + /** + * @group unit + */ + public function testToArray() + { + $filter = new Terms('color', array()); + $expected = array('terms' => array('color' => array())); + $this->assertEquals($expected, $filter->toArray()); + + $filter = new Terms('color', array('cyan')); + $expected = array('terms' => array('color' => array('cyan'))); + $this->assertEquals($expected, $filter->toArray()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testToArrayInvalidException() + { + $filter = new Terms(); + $filter->toArray(); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TypeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TypeTest.php new file mode 100644 index 00000000..8da19273 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Filter/TypeTest.php @@ -0,0 +1,32 @@ +setType('type_name'); + $this->assertInstanceOf('Elastica\Filter\Type', $returnValue); + } + + /** + * @group unit + */ + public function testToArray() + { + $typeFilter = new Type('type_name'); + + $expectedArray = array( + 'type' => array('value' => 'type_name'), + ); + + $this->assertEquals($expectedArray, $typeFilter->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/SettingsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/SettingsTest.php new file mode 100644 index 00000000..1562c7a0 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/SettingsTest.php @@ -0,0 +1,338 @@ +_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + $index->refresh(); + $settings = $index->getSettings(); + + $this->assertInternalType('array', $settings->get()); + $this->assertNotNull($settings->get('number_of_replicas')); + $this->assertNotNull($settings->get('number_of_shards')); + $this->assertNull($settings->get('kjqwerjlqwer')); + + $index->delete(); + } + + /** + * @group functional + */ + public function testGetWithAlias() + { + $indexName = 'elasticatest'; + $aliasName = 'elasticatest_alias'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + $index->refresh(); + + $index->addAlias($aliasName); + $index = $client->getIndex($aliasName); + $settings = $index->getSettings(); + + $this->assertInternalType('array', $settings->get()); + $this->assertNotNull($settings->get('number_of_replicas')); + $this->assertNotNull($settings->get('number_of_shards')); + $this->assertNull($settings->get('kjqwerjlqwer')); + + $index->delete(); + } + + /** + * @group functional + */ + public function testSetNumberOfReplicas() + { + $indexName = 'test'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + $settings = $index->getSettings(); + + $settings->setNumberOfReplicas(2); + $index->refresh(); + $this->assertEquals(2, $settings->get('number_of_replicas')); + + $settings->setNumberOfReplicas(3); + $index->refresh(); + $this->assertEquals(3, $settings->get('number_of_replicas')); + + $index->delete(); + } + + /** + * @group functional + */ + public function testSetRefreshInterval() + { + $indexName = 'test'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + + $settings = $index->getSettings(); + + $settings->setRefreshInterval('2s'); + $index->refresh(); + $this->assertEquals('2s', $settings->get('refresh_interval')); + + $settings->setRefreshInterval('5s'); + $index->refresh(); + $this->assertEquals('5s', $settings->get('refresh_interval')); + + $index->delete(); + } + + /** + * @group functional + */ + public function testGetRefreshInterval() + { + $indexName = 'test'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + + $settings = $index->getSettings(); + + $this->assertEquals(IndexSettings::DEFAULT_REFRESH_INTERVAL, $settings->getRefreshInterval()); + + $interval = '2s'; + $settings->setRefreshInterval($interval); + $index->refresh(); + $this->assertEquals($interval, $settings->getRefreshInterval()); + $this->assertEquals($interval, $settings->get('refresh_interval')); + + $index->delete(); + } + + /** + * @group functional + */ + public function testSetMergePolicy() + { + $indexName = 'test'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + //wait for the shards to be allocated + $this->_waitForAllocation($index); + + $settings = $index->getSettings(); + + $settings->setMergePolicy('expunge_deletes_allowed', 15); + $this->assertEquals(15, $settings->getMergePolicy('expunge_deletes_allowed')); + + $settings->setMergePolicy('expunge_deletes_allowed', 10); + $this->assertEquals(10, $settings->getMergePolicy('expunge_deletes_allowed')); + + $index->delete(); + } + + /** + * @group functional + */ + public function testSetMergeFactor() + { + $indexName = 'test'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + + //wait for the shards to be allocated + $this->_waitForAllocation($index); + + $settings = $index->getSettings(); + + $response = $settings->setMergePolicy('merge_factor', 15); + $this->assertEquals(15, $settings->getMergePolicy('merge_factor')); + $this->assertInstanceOf('Elastica\Response', $response); + $this->assertTrue($response->isOk()); + + $settings->setMergePolicy('merge_factor', 10); + $this->assertEquals(10, $settings->getMergePolicy('merge_factor')); + + $index->delete(); + } + + /** + * @group functional + */ + public function testSetMergePolicyType() + { + $indexName = 'test'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + + //wait for the shards to be allocated + $this->_waitForAllocation($index); + + $settings = $index->getSettings(); + + $settings->setMergePolicyType('log_byte_size'); + $this->assertEquals('log_byte_size', $settings->getMergePolicyType()); + + $response = $settings->setMergePolicy('merge_factor', 15); + $this->assertEquals(15, $settings->getMergePolicy('merge_factor')); + $this->assertInstanceOf('Elastica\Response', $response); + $this->assertTrue($response->isOk()); + + $index->delete(); + } + + /** + * @group functional + */ + public function testSetReadOnly() + { + $index = $this->_createIndex(); + //wait for the shards to be allocated + $this->_waitForAllocation($index); + $index->getSettings()->setReadOnly(false); + + // Add document to normal index + $doc1 = new Document(null, array('hello' => 'world')); + $doc2 = new Document(null, array('hello' => 'world')); + $doc3 = new Document(null, array('hello' => 'world')); + + $type = $index->getType('test'); + $type->addDocument($doc1); + $this->assertFalse($index->getSettings()->getReadOnly()); + + // Try to add doc to read only index + $index->getSettings()->setReadOnly(true); + $this->assertTrue($index->getSettings()->getReadOnly()); + + try { + $type->addDocument($doc2); + $this->fail('Should throw exception because of read only'); + } catch (ResponseException $e) { + $message = $e->getMessage(); + $this->assertContains('ClusterBlockException', $message); + $this->assertContains('index write', $message); + } + + // Remove read only, add document + $response = $index->getSettings()->setReadOnly(false); + $this->assertTrue($response->isOk()); + + $type->addDocument($doc3); + $index->refresh(); + + $this->assertEquals(2, $type->count()); + + $index->delete(); + } + + /** + * @group functional + */ + public function testGetSetBlocksRead() + { + $index = $this->_createIndex(); + $index->refresh(); + $settings = $index->getSettings(); + + $this->assertFalse($settings->getBlocksRead()); + + $settings->setBlocksRead(true); + $this->assertTrue($settings->getBlocksRead()); + + $settings->setBlocksRead(false); + $this->assertFalse($settings->getBlocksRead()); + + $settings->setBlocksRead(); + $this->assertTrue($settings->getBlocksRead()); + + $index->delete(); + } + + /** + * @group functional + */ + public function testGetSetBlocksWrite() + { + $index = $this->_createIndex(); + $index->refresh(); + $settings = $index->getSettings(); + + $this->assertFalse($settings->getBlocksWrite()); + + $settings->setBlocksWrite(true); + $this->assertTrue($settings->getBlocksWrite()); + + $settings->setBlocksWrite(false); + $this->assertFalse($settings->getBlocksWrite()); + + $settings->setBlocksWrite(); + $this->assertTrue($settings->getBlocksWrite()); + + $index->delete(); + } + + /** + * @group functional + */ + public function testGetSetBlocksMetadata() + { + $index = $this->_createIndex(); + $index->refresh(); + $settings = $index->getSettings(); + + $this->assertFalse($settings->getBlocksMetadata()); + + $settings->setBlocksMetadata(true); + $this->assertTrue($settings->getBlocksMetadata()); + + $settings->setBlocksMetadata(false); + $this->assertFalse($settings->getBlocksMetadata()); + + $settings->setBlocksMetadata(); + $this->assertTrue($settings->getBlocksMetadata()); + + $settings->setBlocksMetadata(false); // Cannot delete index otherwise + $index->delete(); + } + + /** + * @group functional + */ + public function testNotFoundIndex() + { + $client = $this->_getClient(); + $index = $client->getIndex('not_found_index'); + //wait for the shards to be allocated + + try { + $settings = $index->getSettings()->get(); + $this->fail('Should throw exception because of index not found'); + } catch (ResponseException $e) { + $message = $e->getMessage(); + $this->assertContains('IndexMissingException', $message); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatsTest.php new file mode 100644 index 00000000..d0bb7838 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatsTest.php @@ -0,0 +1,24 @@ +_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + $stats = $index->getStats(); + $this->assertInstanceOf('Elastica\Index\Stats', $stats); + + $this->assertTrue($stats->getResponse()->isOk()); + $this->assertEquals(0, $stats->get('_all', 'indices', 'test', 'primaries', 'docs', 'count')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatusTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatusTest.php new file mode 100644 index 00000000..24f22ffd --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Index/StatusTest.php @@ -0,0 +1,74 @@ +_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + + $status = new IndexStatus($index); + + $aliases = $status->getAliases(); + + $this->assertTrue(empty($aliases)); + $this->assertInternalType('array', $aliases); + + $index->addAlias($aliasName); + $status->refresh(); + + $aliases = $status->getAliases(); + + $this->assertTrue(in_array($aliasName, $aliases)); + } + + /** + * @group functional + */ + public function testHasAlias() + { + $indexName = 'test'; + $aliasName = 'test-alias'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + + $status = new IndexStatus($index); + + $this->assertFalse($status->hasAlias($aliasName)); + + $index->addAlias($aliasName); + $status->refresh(); + + $this->assertTrue($status->hasAlias($aliasName)); + } + + /** + * @group functional + */ + public function testGetSettings() + { + $indexName = 'test'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + $status = $index->getStatus(); + + $settings = $status->getSettings(); + $this->assertInternalType('array', $settings); + $this->assertTrue(isset($settings['index']['number_of_shards'])); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/IndexTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/IndexTest.php new file mode 100644 index 00000000..25ac53c2 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/IndexTest.php @@ -0,0 +1,901 @@ +_createIndex(); + $doc = new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'hanswurst', 'test' => array('2', '3', '5'))); + + $type = $index->getType('test'); + + $mapping = array('id' => array('type' => 'integer', 'store' => true), 'email' => array('type' => 'string', 'store' => 'no'), + 'username' => array('type' => 'string', 'store' => 'no'), 'test' => array('type' => 'integer', 'store' => 'no'),); + $type->setMapping($mapping); + + $type->addDocument($doc); + $index->optimize(); + + $storedMapping = $index->getMapping(); + + $this->assertEquals($storedMapping['test']['properties']['id']['type'], 'integer'); + $this->assertEquals($storedMapping['test']['properties']['id']['store'], true); + $this->assertEquals($storedMapping['test']['properties']['email']['type'], 'string'); + $this->assertEquals($storedMapping['test']['properties']['username']['type'], 'string'); + $this->assertEquals($storedMapping['test']['properties']['test']['type'], 'integer'); + + $result = $type->search('hanswurst'); + } + + /** + * @group functional + */ + public function testGetMappingAlias() + { + $index = $this->_createIndex(); + $indexName = $index->getName(); + + $aliasName = 'test-mapping-alias'; + $index->addAlias($aliasName); + + $type = new Type($index, 'test'); + $mapping = new Mapping($type, array( + 'id' => array('type' => 'integer', 'store' => 'yes'), + )); + $type->setMapping($mapping); + + $client = $index->getClient(); + + // Index mapping + $mapping1 = $client->getIndex($indexName)->getMapping(); + + // Alias mapping + $mapping2 = $client->getIndex($aliasName)->getMapping(); + + // Make sure, a mapping is set + $this->assertNotEmpty($mapping1); + + // Alias and index mapping should be identical + $this->assertEquals($mapping1, $mapping2); + } + + /** + * @group functional + */ + public function testParent() + { + $index = $this->_createIndex(); + + $typeBlog = new Type($index, 'blog'); + + $typeComment = new Type($index, 'comment'); + + $mapping = new Mapping(); + $mapping->setParam('_parent', array('type' => 'blog')); + $typeComment->setMapping($mapping); + + $entry1 = new Document(1); + $entry1->set('title', 'Hello world'); + $typeBlog->addDocument($entry1); + + $entry2 = new Document(2); + $entry2->set('title', 'Foo bar'); + $typeBlog->addDocument($entry2); + + $entry3 = new Document(3); + $entry3->set('title', 'Till dawn'); + $typeBlog->addDocument($entry3); + + $comment = new Document(1); + $comment->set('author', 'Max'); + $comment->setParent(2); // Entry Foo bar + $typeComment->addDocument($comment); + + $index->optimize(); + + $query = new HasChild('Max', 'comment'); + $resultSet = $typeBlog->search($query); + $this->assertEquals(1, $resultSet->count()); + $this->assertEquals(array('title' => 'Foo bar'), $resultSet->current()->getData()); + } + + /** + * @group functional + */ + public function testAddPdfFile() + { + $this->_checkAttachmentsPlugin(); + $indexMapping = array('file' => array('type' => 'attachment', 'store' => 'no'), 'text' => array('type' => 'string', 'store' => 'no')); + + $indexParams = array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)); + + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + + $index->create($indexParams, true); + $type->setMapping($indexMapping); + + $doc1 = new Document(1); + $doc1->addFile('file', BASE_PATH.'/data/test.pdf', 'application/pdf'); + $doc1->set('text', 'basel world'); + $type->addDocument($doc1); + + $doc2 = new Document(2); + $doc2->set('text', 'running in basel'); + $type->addDocument($doc2); + + $index->optimize(); + + $resultSet = $type->search('xodoa'); + $this->assertEquals(1, $resultSet->count()); + + $resultSet = $type->search('basel'); + $this->assertEquals(2, $resultSet->count()); + + // Author is ruflin + $resultSet = $type->search('ruflin'); + $this->assertEquals(1, $resultSet->count()); + + // String does not exist in file + $resultSet = $type->search('guschti'); + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testAddPdfFileContent() + { + $this->_checkAttachmentsPlugin(); + $indexMapping = array('file' => array('type' => 'attachment', 'store' => 'no'), 'text' => array('type' => 'string', 'store' => 'no')); + + $indexParams = array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)); + + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + + $index->create($indexParams, true); + $type->setMapping($indexMapping); + + $doc1 = new Document(1); + $doc1->addFileContent('file', file_get_contents(BASE_PATH.'/data/test.pdf')); + $doc1->set('text', 'basel world'); + $type->addDocument($doc1); + + $doc2 = new Document(2); + $doc2->set('text', 'running in basel'); + $type->addDocument($doc2); + + $index->optimize(); + + $resultSet = $type->search('xodoa'); + $this->assertEquals(1, $resultSet->count()); + + $resultSet = $type->search('basel'); + $this->assertEquals(2, $resultSet->count()); + + // Author is ruflin + $resultSet = $type->search('ruflin'); + $this->assertEquals(1, $resultSet->count()); + + // String does not exist in file + $resultSet = $type->search('guschti'); + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testAddWordxFile() + { + $this->_checkAttachmentsPlugin(); + $indexMapping = array('file' => array('type' => 'attachment'), 'text' => array('type' => 'string', 'store' => 'no')); + + $indexParams = array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)); + + $index = $this->_createIndex(); + $type = new Type($index, 'content'); + + $index->create($indexParams, true); + $type->setMapping($indexMapping); + + $doc1 = new Document(1); + $doc1->addFile('file', BASE_PATH.'/data/test.docx'); + $doc1->set('text', 'basel world'); + $type->addDocument($doc1); + + $index->optimize(); + $index->refresh(); + + $doc2 = new Document(2); + $doc2->set('text', 'running in basel'); + $type->addDocument($doc2); + + $index->optimize(); + $index->refresh(); + + $resultSet = $type->search('basel'); + $this->assertEquals(2, $resultSet->count()); + + $resultSet = $type->search('ruflin'); + $this->assertEquals(0, $resultSet->count()); + + $resultSet = $type->search('xodoa'); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testExcludeFileSource() + { + $this->_checkAttachmentsPlugin(); + $indexMapping = array('file' => array('type' => 'attachment', 'store' => 'yes'), 'text' => array('type' => 'string', 'store' => 'yes'), + 'title' => array('type' => 'string', 'store' => 'yes'),); + + $indexParams = array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)); + + $index = $this->_createIndex(); + $type = new Type($index, 'content'); + + $mapping = Mapping::create($indexMapping); + $mapping->setSource(array('excludes' => array('file'))); + + $mapping->setType($type); + + $index->create($indexParams, true); + $type->setMapping($mapping); + + $docId = 1; + $text = 'Basel World'; + $title = 'No Title'; + + $doc1 = new Document($docId); + $doc1->addFile('file', BASE_PATH.'/data/test.docx'); + $doc1->set('text', $text); + $doc1->set('title', $title); + $type->addDocument($doc1); + + // Optimization necessary, as otherwise source still in realtime get + $index->optimize(); + + $data = $type->getDocument($docId)->getData(); + $this->assertEquals($data['title'], $title); + $this->assertEquals($data['text'], $text); + $this->assertFalse(isset($data['file'])); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\ResponseException + */ + public function testAddRemoveAlias() + { + $client = $this->_getClient(); + + $indexName1 = 'test1'; + $aliasName = 'test-alias'; + $typeName = 'test'; + + $index = $client->getIndex($indexName1); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $doc = new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'ruflin')); + + $type = $index->getType($typeName); + $type->addDocument($doc); + $index->refresh(); + + $resultSet = $type->search('ruflin'); + + $this->assertEquals(1, $resultSet->count()); + + $data = $index->addAlias($aliasName, true)->getData(); + $this->assertTrue($data['acknowledged']); + + $index2 = $client->getIndex($aliasName); + $type2 = $index2->getType($typeName); + + $resultSet2 = $type2->search('ruflin'); + $this->assertEquals(1, $resultSet2->count()); + + $response = $index->removeAlias($aliasName)->getData(); + $this->assertTrue($response['acknowledged']); + + $client->getIndex($aliasName)->getType($typeName)->search('ruflin'); + } + + /** + * @group functional + */ + public function testCount() + { + $index = $this->_createIndex(); + + // Add document to normal index + $doc1 = new Document(null, array('name' => 'ruflin')); + $doc2 = new Document(null, array('name' => 'nicolas')); + + $type = $index->getType('test'); + $type->addDocument($doc1); + $type->addDocument($doc2); + + $index->refresh(); + + $this->assertEquals(2, $index->count()); + + $query = new Term(); + $key = 'name'; + $value = 'nicolas'; + $query->setTerm($key, $value); + + $this->assertEquals(1, $index->count($query)); + } + + /** + * @group functional + */ + public function testDeleteByQueryWithQueryString() + { + $index = $this->_createIndex(); + $type1 = new Type($index, 'test1'); + $type1->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type1->addDocument(new Document(2, array('name' => 'ruflin'))); + $type2 = new Type($index, 'test2'); + $type2->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type2->addDocument(new Document(2, array('name' => 'ruflin'))); + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(4, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(2, $response->count()); + + // Delete first document + $response = $index->deleteByQuery('nicolas'); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + // Makes sure, document is deleted + $response = $index->search('ruflin*'); + $this->assertEquals(2, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(0, $response->count()); + } + + /** + * @group functional + */ + public function testDeleteByQueryWithQuery() + { + $index = $this->_createIndex(); + $type1 = new Type($index, 'test1'); + $type1->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type1->addDocument(new Document(2, array('name' => 'ruflin'))); + $type2 = new Type($index, 'test2'); + $type2->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type2->addDocument(new Document(2, array('name' => 'ruflin'))); + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(4, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(2, $response->count()); + + // Delete first document + $response = $index->deleteByQuery(new SimpleQueryString('nicolas')); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + // Makes sure, document is deleted + $response = $index->search('ruflin*'); + $this->assertEquals(2, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(0, $response->count()); + } + + /** + * @group functional + */ + public function testDeleteByQueryWithQueryAndOptions() + { + $index = $this->_createIndex(null, true, 2); + $type1 = new Type($index, 'test1'); + $type1->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type1->addDocument(new Document(2, array('name' => 'ruflin'))); + $type2 = new Type($index, 'test2'); + $type2->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type2->addDocument(new Document(2, array('name' => 'ruflin'))); + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(4, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(2, $response->count()); + + // Route to the wrong document id; should not delete + $response = $index->deleteByQuery(new SimpleQueryString('nicolas'), array('routing' => '2')); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(4, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(2, $response->count()); + + // Delete first document + $response = $index->deleteByQuery(new SimpleQueryString('nicolas'), array('routing' => '1')); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + // Makes sure, document is deleted + $response = $index->search('ruflin*'); + $this->assertEquals(2, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(0, $response->count()); + } + + /** + * @group functional + */ + public function testDeleteIndexDeleteAlias() + { + $indexName = 'test'; + $aliasName = 'test-aliase'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + + $index->create(array(), true); + $index->addAlias($aliasName); + + $status = new Status($client); + $this->assertTrue($status->indexExists($indexName)); + $this->assertTrue($status->aliasExists($aliasName)); + + // Deleting index should also remove alias + $index->delete(); + + $status->refresh(); + $this->assertFalse($status->indexExists($indexName)); + $this->assertFalse($status->aliasExists($aliasName)); + } + + /** + * @group functional + */ + public function testAddAliasTwoIndices() + { + $indexName1 = 'test1'; + $indexName2 = 'test2'; + $aliasName = 'test-alias'; + + $client = $this->_getClient(); + $index1 = $client->getIndex($indexName1); + $index2 = $client->getIndex($indexName2); + + $index1->create(array(), true); + $this->_waitForAllocation($index1); + $index1->addAlias($aliasName); + $index2->create(array(), true); + $this->_waitForAllocation($index2); + + $index1->refresh(); + $index2->refresh(); + $index1->optimize(); + $index2->optimize(); + + $status = new Status($client); + + $this->assertTrue($status->indexExists($indexName1)); + $this->assertTrue($status->indexExists($indexName2)); + + $this->assertTrue($status->aliasExists($aliasName)); + $this->assertTrue($index1->getStatus()->hasAlias($aliasName)); + $this->assertFalse($index2->getStatus()->hasAlias($aliasName)); + + $index2->addAlias($aliasName); + $this->assertTrue($index1->getStatus()->hasAlias($aliasName)); + $this->assertTrue($index2->getStatus()->hasAlias($aliasName)); + } + + /** + * @group functional + */ + public function testReplaceAlias() + { + $indexName1 = 'test1'; + $indexName2 = 'test2'; + $aliasName = 'test-alias'; + + $client = $this->_getClient(); + $index1 = $client->getIndex($indexName1); + $index2 = $client->getIndex($indexName2); + + $index1->create(array(), true); + $index1->addAlias($aliasName); + $index2->create(array(), true); + + $index1->refresh(); + $index2->refresh(); + + $status = new Status($client); + + $this->assertTrue($status->indexExists($indexName1)); + $this->assertTrue($status->indexExists($indexName2)); + $this->assertTrue($status->aliasExists($aliasName)); + $this->assertTrue($index1->getStatus()->hasAlias($aliasName)); + $this->assertFalse($index2->getStatus()->hasAlias($aliasName)); + + $index2->addAlias($aliasName, true); + $this->assertFalse($index1->getStatus()->hasAlias($aliasName)); + $this->assertTrue($index2->getStatus()->hasAlias($aliasName)); + } + + /** + * @group functional + */ + public function testAddDocumentVersion() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = new Type($index, 'test'); + + $doc1 = new Document(1); + $doc1->set('title', 'Hello world'); + + $return = $type->addDocument($doc1); + $data = $return->getData(); + $this->assertEquals(1, $data['_version']); + + $return = $type->addDocument($doc1); + $data = $return->getData(); + $this->assertEquals(2, $data['_version']); + } + + /** + * @group functional + */ + public function testClearCache() + { + $index = $this->_createIndex(); + $response = $index->clearCache(); + $this->assertFalse($response->hasError()); + } + + /** + * @group functional + */ + public function testFlush() + { + $index = $this->_createIndex(); + $response = $index->flush(); + $this->assertFalse($response->hasError()); + } + + /** + * @group functional + */ + public function testExists() + { + $index = $this->_createIndex(); + + $this->assertTrue($index->exists()); + + $index->delete(); + + $this->assertFalse($index->exists()); + } + + /** + * Test $index->delete() return value for unknown index. + * + * Tests if deleting an index that does not exist in Elasticsearch, + * correctly returns a boolean true from the hasError() method of + * the \Elastica\Response object + * + * @group functional + */ + public function testDeleteMissingIndexHasError() + { + $client = $this->_getClient(); + $index = $client->getIndex('index_does_not_exist'); + + try { + $index->delete(); + $this->fail('This should never be reached. Deleting an unknown index will throw an exception'); + } catch (ResponseException $error) { + $response = $error->getResponse(); + $this->assertTrue($response->hasError()); + $request = $error->getRequest(); + $this->assertInstanceOf('Elastica\Request', $request); + } + } + + /** + * Tests to see if the test type mapping exists when calling $index->getMapping(). + * + * @group functional + */ + public function testIndexGetMapping() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $mapping = array('id' => array('type' => 'integer', 'store' => true), 'email' => array('type' => 'string', 'store' => 'no'), + 'username' => array('type' => 'string', 'store' => 'no'), 'test' => array('type' => 'integer', 'store' => 'no'),); + + $type->setMapping($mapping); + $index->refresh(); + $indexMappings = $index->getMapping(); + + $this->assertEquals($indexMappings['test']['properties']['id']['type'], 'integer'); + $this->assertEquals($indexMappings['test']['properties']['id']['store'], true); + $this->assertEquals($indexMappings['test']['properties']['email']['type'], 'string'); + $this->assertEquals($indexMappings['test']['properties']['username']['type'], 'string'); + $this->assertEquals($indexMappings['test']['properties']['test']['type'], 'integer'); + } + + /** + * Tests to see if the index is empty when there are no types set. + * + * @group functional + */ + public function testEmptyIndexGetMapping() + { + $index = $this->_createIndex(); + $indexMappings = $index->getMapping(); + + $this->assertTrue(empty($indexMappings['elastica_test'])); + } + + /** + * Test to see if search Default Limit works. + * + * @group functional + */ + public function testLimitDefaultIndex() + { + $client = $this->_getClient(); + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $docs = array(); + + $docs[] = new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(2, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(3, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(4, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(5, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(6, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(7, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(8, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(9, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(10, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(11, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + + $type = $index->getType('zeroType'); + $type->addDocuments($docs); + $index->refresh(); + + // default limit results (default limit is 10) + $resultSet = $index->search('farrelley'); + $this->assertEquals(10, $resultSet->count()); + + // limit = 1 + $resultSet = $index->search('farrelley', 1); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @expectedException \Elastica\Exception\InvalidException + * + * @group functional + */ + public function testCreateArray() + { + $client = $this->_getClient(); + $indexName = 'test'; + + //Testing recreate (backward compatibility) + $index = $client->getIndex($indexName); + $index->create(array(), true); + $this->_waitForAllocation($index); + $status = new Status($client); + $this->assertTrue($status->indexExists($indexName)); + + //Testing create index with array options + $opts = array('recreate' => true, 'routing' => 'r1,r2'); + $index->create(array(), $opts); + $this->_waitForAllocation($index); + $status = new Status($client); + $this->assertTrue($status->indexExists($indexName)); + + //Testing invalid options + $opts = array('recreate' => true, 'routing' => 'r1,r2', 'testing_invalid_option' => true); + $index->create(array(), $opts); + $this->_waitForAllocation($index); + $status = new Status($client); + $this->assertTrue($status->indexExists($indexName)); + } + + /** + * @group functional + */ + public function testCreateSearch() + { + $client = $this->_getClient(); + $index = new Index($client, 'test'); + + $query = new QueryString('test'); + $options = 5; + + $search = $index->createSearch($query, $options); + + $expected = array( + 'query' => array( + 'query_string' => array( + 'query' => 'test', + ), + ), + 'size' => 5, + ); + $this->assertEquals($expected, $search->getQuery()->toArray()); + $this->assertEquals(array('test'), $search->getIndices()); + $this->assertTrue($search->hasIndices()); + $this->assertTrue($search->hasIndex('test')); + $this->assertTrue($search->hasIndex($index)); + $this->assertEquals(array(), $search->getTypes()); + $this->assertFalse($search->hasTypes()); + $this->assertFalse($search->hasType('test_type')); + + $type = new Type($index, 'test_type2'); + $this->assertFalse($search->hasType($type)); + } + + /** + * @group functional + */ + public function testSearch() + { + $index = $this->_createIndex(); + + $type = new Type($index, 'user'); + + $docs = array(); + $docs[] = new Document(1, array('username' => 'hans', 'test' => array('2', '3', '5'))); + $docs[] = new Document(2, array('username' => 'john', 'test' => array('1', '3', '6'))); + $docs[] = new Document(3, array('username' => 'rolf', 'test' => array('2', '3', '7'))); + $type->addDocuments($docs); + $index->refresh(); + + $resultSet = $index->search('rolf'); + $this->assertEquals(1, $resultSet->count()); + + $count = $index->count('rolf'); + $this->assertEquals(1, $count); + + // Test if source is returned + $result = $resultSet->current(); + $this->assertEquals(3, $result->getId()); + $data = $result->getData(); + $this->assertEquals('rolf', $data['username']); + + $count = $index->count(); + $this->assertEquals(3, $count); + } + + /** + * @group functional + */ + public function testOptimize() + { + $index = $this->_createIndex(); + + $type = new Type($index, 'optimize'); + + $docs = array(); + $docs[] = new Document(1, array('foo' => 'bar')); + $docs[] = new Document(2, array('foo' => 'bar')); + $type->addDocuments($docs); + $index->refresh(); + + $stats = $index->getStats()->getData(); + $this->assertEquals(0, $stats['_all']['primaries']['docs']['deleted']); + + $type->deleteById(1); + $index->refresh(); + + $stats = $index->getStats()->getData(); + $this->assertEquals(1, $stats['_all']['primaries']['docs']['deleted']); + + $index->optimize(array('max_num_segments' => 1)); + + $stats = $index->getStats()->getData(); + $this->assertEquals(0, $stats['_all']['primaries']['docs']['deleted']); + } + + /** + * @group functional + */ + public function testAnalyze() + { + $index = $this->_createIndex(); + $index->optimize(); + sleep(2); + $returnedTokens = $index->analyze('foo'); + + $tokens = array( + array( + 'token' => 'foo', + 'start_offset' => 0, + 'end_offset' => 3, + 'type' => '', + 'position' => 1, + ), + ); + + $this->assertEquals($tokens, $returnedTokens); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testThrowExceptionIfNotScalar() + { + $client = $this->_getClient(); + $client->getIndex(new \stdClass()); + } + + /** + * @group unit + */ + public function testConvertScalarsToString() + { + $client = $this->_getClient(); + $index = $client->getIndex(1); + + $this->assertEquals('1', $index->getName()); + $this->assertInternalType('string', $index->getName()); + } + + /** + * Check for the presence of the mapper-attachments plugin and skip the current test if it is not found. + */ + protected function _checkAttachmentsPlugin() + { + $nodes = $this->_getClient()->getCluster()->getNodes(); + if (!$nodes[0]->getInfo()->hasPlugin('mapper-attachments')) { + $this->markTestSkipped('mapper-attachments plugin not installed'); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/LogTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/LogTest.php new file mode 100644 index 00000000..fdfc5c00 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/LogTest.php @@ -0,0 +1,196 @@ +assertInstanceOf('Psr\Log\LoggerInterface', $log); + } + + /** + * @group unit + */ + public function testSetLogConfigPath() + { + $logPath = '/tmp/php.log'; + $client = $this->_getClient(array('log' => $logPath)); + $this->assertEquals($logPath, $client->getConfig('log')); + } + + /** + * @group unit + */ + public function testSetLogConfigEnable() + { + $client = $this->_getClient(array('log' => true)); + $this->assertTrue($client->getConfig('log')); + } + + /** + * @group unit + */ + public function testSetLogConfigEnable1() + { + $client = $this->_getClient(); + $client->setLogger(new Log()); + $this->assertFalse($client->getConfig('log')); + } + + /** + * @group unit + */ + public function testEmptyLogConfig() + { + $client = $this->_getClient(); + $this->assertEmpty($client->getConfig('log')); + } + + /** + * @group unit + */ + public function testGetLastMessage() + { + $log = new Log('/tmp/php.log'); + + $log->log(LogLevel::DEBUG, $this->_message, $this->_context); + + $this->_context['error_message'] = $this->_message; + $message = json_encode($this->_context); + + $this->assertEquals($message, $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessage2() + { + $client = $this->_getClient(array('log' => true)); + $log = new Log($client); + + // Set log path temp path as otherwise test fails with output + $errorLog = ini_get('error_log'); + ini_set('error_log', sys_get_temp_dir().DIRECTORY_SEPARATOR.'php.log'); + + $this->_context['error_message'] = $this->_message; + $message = json_encode($this->_context); + + $log->log(LogLevel::DEBUG, $this->_message, $this->_context); + ini_set('error_log', $errorLog); + + $this->assertEquals($message, $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageInfo() + { + $log = $this->initLog(); + $log->info($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageCritical() + { + $log = $this->initLog(); + $log->critical($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageAlert() + { + $log = $this->initLog(); + $log->alert($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageDebug() + { + $log = $this->initLog(); + $log->debug($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageEmergency() + { + $log = $this->initLog(); + $log->emergency($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageError() + { + $log = $this->initLog(); + $log->error($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageNotice() + { + $log = $this->initLog(); + $log->notice($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + /** + * @group unit + */ + public function testGetLastMessageWarning() + { + $log = $this->initLog(); + $log->warning($this->_message, $this->_context); + $this->assertEquals($this->getMessage(), $log->getLastMessage()); + } + + private function initLog() + { + $log = new Log('/tmp/php.log'); + + return $log; + } + + private function getMessage() + { + $this->_context['error_message'] = $this->_message; + + return json_encode($this->_context); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Multi/SearchTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Multi/SearchTest.php new file mode 100644 index 00000000..765c8c1d --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Multi/SearchTest.php @@ -0,0 +1,575 @@ +_getClient(); + + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $docs = array(); + $docs[] = new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(2, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(3, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(4, array('id' => 1, 'email' => 'test@test.com', 'username' => 'kate')); + $docs[] = new Document(5, array('id' => 1, 'email' => 'test@test.com', 'username' => 'kate')); + $docs[] = new Document(6, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')); + $docs[] = new Document(7, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')); + $docs[] = new Document(8, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')); + $docs[] = new Document(9, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')); + $docs[] = new Document(10, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')); + $docs[] = new Document(11, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')); + $type = $index->getType('zeroType'); + $type->addDocuments($docs); + $index->refresh(); + + return $type; + } + + /** + * @group unit + */ + public function testConstruct() + { + $client = $this->_getClient(); + $multiSearch = new MultiSearch($client); + + $this->assertInstanceOf('Elastica\Multi\Search', $multiSearch); + $this->assertSame($client, $multiSearch->getClient()); + } + + /** + * @group unit + */ + public function testSetSearches() + { + $client = $this->_getClient(); + $multiSearch = new MultiSearch($client); + + $search1 = new Search($client); + $search2 = new Search($client); + $search3 = new Search($client); + + $multiSearch->setSearches(array($search1, $search2, $search3)); + + $searches = $multiSearch->getSearches(); + + $this->assertInternalType('array', $searches); + $this->assertCount(3, $searches); + $this->assertArrayHasKey(0, $searches); + $this->assertSame($search1, $searches[0]); + $this->assertArrayHasKey(1, $searches); + $this->assertSame($search2, $searches[1]); + $this->assertArrayHasKey(2, $searches); + $this->assertSame($search3, $searches[2]); + + $multiSearch->clearSearches(); + $searches = $multiSearch->getSearches(); + + $this->assertInternalType('array', $searches); + $this->assertCount(0, $searches); + } + + /** + * @group unit + */ + public function testSetSearchesByKeys() + { + $client = $this->_getClient(); + $multiSearch = new MultiSearch($client); + + $search1 = new Search($client); + $search2 = new Search($client); + $search3 = new Search($client); + + $multiSearch->setSearches(array('search1' => $search1, 'search2' => $search2, $search3)); + + $searches = $multiSearch->getSearches(); + + $this->assertInternalType('array', $searches); + $this->assertCount(3, $searches); + $this->assertArrayHasKey('search1', $searches); + $this->assertSame($search1, $searches['search1']); + $this->assertArrayHasKey('search2', $searches); + $this->assertSame($search2, $searches['search2']); + $this->assertArrayHasKey(0, $searches); + $this->assertSame($search3, $searches[0]); + + $multiSearch->clearSearches(); + $searches = $multiSearch->getSearches(); + + $this->assertInternalType('array', $searches); + $this->assertCount(0, $searches); + } + + /** + * @group functional + */ + public function testSearch() + { + $type = $this->_createType(); + $index = $type->getIndex(); + $client = $index->getClient(); + + $multiSearch = new MultiSearch($client); + + $search1 = new Search($client); + $search1->addIndex($index)->addType($type); + $query1 = new Query(); + $termQuery1 = new Term(); + $termQuery1->setTerm('username', 'farrelley'); + $query1->setQuery($termQuery1); + $query1->setSize(2); + $search1->setQuery($query1); + + $multiSearch->addSearch($search1); + + $this->assertCount(1, $multiSearch->getSearches()); + + $search2 = new Search($client); + $search2->addIndex($index)->addType($type); + $query2 = new Query(); + $termQuery2 = new Term(); + $termQuery2->setTerm('username', 'bunny'); + $query2->setQuery($termQuery2); + $query2->setSize(3); + $search2->setQuery($query2); + + $multiSearch->addSearch($search2); + + $this->assertCount(2, $multiSearch->getSearches()); + + $searches = $multiSearch->getSearches(); + $this->assertSame($search1, $searches[0]); + $this->assertSame($search2, $searches[1]); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + foreach ($multiResultSet as $resultSet) { + $this->assertInstanceOf('Elastica\ResultSet', $resultSet); + } + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertCount(2, $resultSets[0]); + $this->assertSame($query1, $resultSets[0]->getQuery()); + $this->assertEquals(3, $resultSets[0]->getTotalHits()); + + $this->assertArrayHasKey(1, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[1]); + $this->assertCount(3, $resultSets[1]); + $this->assertSame($query2, $resultSets[1]->getQuery()); + $this->assertEquals(6, $resultSets[1]->getTotalHits()); + + $this->assertFalse($multiResultSet->hasError()); + + $search1->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_COUNT); + $search2->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_COUNT); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertCount(0, $resultSets[0]); + $this->assertSame($query1, $resultSets[0]->getQuery()); + $this->assertEquals(3, $resultSets[0]->getTotalHits()); + + $this->assertArrayHasKey(1, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[1]); + $this->assertCount(0, $resultSets[1]); + $this->assertSame($query2, $resultSets[1]->getQuery()); + $this->assertEquals(6, $resultSets[1]->getTotalHits()); + } + + /** + * @group functional + */ + public function testSearchWithKeys() + { + $type = $this->_createType(); + $index = $type->getIndex(); + $client = $index->getClient(); + + $multiSearch = new MultiSearch($client); + + $search1 = new Search($client); + $search1->addIndex($index)->addType($type); + $query1 = new Query(); + $termQuery1 = new Term(); + $termQuery1->setTerm('username', 'farrelley'); + $query1->setQuery($termQuery1); + $query1->setSize(2); + $search1->setQuery($query1); + + $multiSearch->addSearch($search1, 'search1'); + + $this->assertCount(1, $multiSearch->getSearches()); + + $search2 = new Search($client); + $search2->addIndex($index)->addType($type); + $query2 = new Query(); + $termQuery2 = new Term(); + $termQuery2->setTerm('username', 'bunny'); + $query2->setQuery($termQuery2); + $query2->setSize(3); + $search2->setQuery($query2); + + $multiSearch->addSearch($search2, 'search2'); + + $this->assertCount(2, $multiSearch->getSearches()); + + $searches = $multiSearch->getSearches(); + $this->assertSame($search1, $searches['search1']); + $this->assertSame($search2, $searches['search2']); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + foreach ($multiResultSet as $resultSet) { + $this->assertInstanceOf('Elastica\ResultSet', $resultSet); + } + + $this->assertInstanceOf('Elastica\ResultSet', $multiResultSet['search1']); + $this->assertInstanceOf('Elastica\ResultSet', $multiResultSet['search2']); + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey('search1', $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets['search1']); + $this->assertCount(2, $resultSets['search1']); + $this->assertSame($query1, $resultSets['search1']->getQuery()); + $this->assertEquals(3, $resultSets['search1']->getTotalHits()); + + $this->assertArrayHasKey('search2', $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets['search2']); + $this->assertCount(3, $resultSets['search2']); + $this->assertSame($query2, $resultSets['search2']->getQuery()); + $this->assertEquals(6, $resultSets['search2']->getTotalHits()); + + $this->assertFalse($multiResultSet->hasError()); + + $search1->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_COUNT); + $search2->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_COUNT); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey('search1', $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets['search1']); + $this->assertCount(0, $resultSets['search1']); + $this->assertSame($query1, $resultSets['search1']->getQuery()); + $this->assertEquals(3, $resultSets['search1']->getTotalHits()); + + $this->assertArrayHasKey('search2', $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets['search2']); + $this->assertCount(0, $resultSets['search2']); + $this->assertSame($query2, $resultSets['search2']->getQuery()); + $this->assertEquals(6, $resultSets['search2']->getTotalHits()); + } + + /** + * @group functional + */ + public function testSearchWithError() + { + $type = $this->_createType(); + $index = $type->getIndex(); + $client = $index->getClient(); + + $multiSearch = new MultiSearch($client); + + $searchGood = new Search($client); + $searchGood->setQuery('bunny'); + $searchGood->addIndex($index)->addType($type); + + $multiSearch->addSearch($searchGood); + + $searchBad = new Search($client); + $searchBadQuery = new Range(); + $searchBadQuery->addField('bad', array('from' => 0)); + $searchBadQuery->setParam('_cache', true); + $searchBad->setQuery($searchBadQuery); + $searchBad->addIndex($index)->addType($type); + + $multiSearch->addSearch($searchBad); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $resultSets = $multiResultSet->getResultSets(); + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertSame($searchGood->getQuery(), $resultSets[0]->getQuery()); + $this->assertSame(6, $resultSets[0]->getTotalHits()); + $this->assertCount(6, $resultSets[0]); + + $this->assertArrayHasKey(1, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[1]); + $this->assertSame($searchBad->getQuery(), $resultSets[1]->getQuery()); + $this->assertSame(0, $resultSets[1]->getTotalHits()); + $this->assertCount(0, $resultSets[1]); + $this->assertTrue($resultSets[1]->getResponse()->hasError()); + + $this->assertTrue($multiResultSet->hasError()); + } + + /** + * @group functional + */ + public function testSearchWithErrorWithKeys() + { + $type = $this->_createType(); + $index = $type->getIndex(); + $client = $index->getClient(); + + $multiSearch = new MultiSearch($client); + + $searchGood = new Search($client); + $searchGood->setQuery('bunny'); + $searchGood->addIndex($index)->addType($type); + + $multiSearch->addSearch($searchGood, 'search1'); + + $searchBad = new Search($client); + $searchBadQuery = new Range(); + $searchBadQuery->addField('bad', array('from' => 0)); + $searchBadQuery->setParam('_cache', true); + $searchBad->setQuery($searchBadQuery); + $searchBad->addIndex($index)->addType($type); + + $multiSearch->addSearch($searchBad); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $resultSets = $multiResultSet->getResultSets(); + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey('search1', $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets['search1']); + $this->assertSame($searchGood->getQuery(), $resultSets['search1']->getQuery()); + $this->assertSame(6, $resultSets['search1']->getTotalHits()); + $this->assertCount(6, $resultSets['search1']); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertSame($searchBad->getQuery(), $resultSets[0]->getQuery()); + $this->assertSame(0, $resultSets[0]->getTotalHits()); + $this->assertCount(0, $resultSets[0]); + $this->assertTrue($resultSets[0]->getResponse()->hasError()); + + $this->assertTrue($multiResultSet->hasError()); + } + + /** + * @group functional + */ + public function testGlobalSearchTypeSearch() + { + $type = $this->_createType(); + $index = $type->getIndex(); + $client = $index->getClient(); + + $multiSearch = new MultiSearch($client); + + $search1 = new Search($client); + $search1->addIndex($index)->addType($type); + $query1 = new Query(); + $termQuery1 = new Term(); + $termQuery1->setTerm('username', 'farrelley'); + $query1->setQuery($termQuery1); + $query1->setSize(2); + $search1->setQuery($query1); + + $multiSearch->addSearch($search1); + + $this->assertCount(1, $multiSearch->getSearches()); + + $search2 = new Search($client); + $search2->addIndex($index)->addType($type); + $query2 = new Query(); + $termQuery2 = new Term(); + $termQuery2->setTerm('username', 'bunny'); + $query2->setQuery($termQuery2); + $query2->setSize(3); + $search2->setQuery($query2); + + $multiSearch->addSearch($search2); + + $multiSearch->setSearchType(Search::OPTION_SEARCH_TYPE_COUNT); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertCount(0, $resultSets[0]); + $this->assertSame($query1, $resultSets[0]->getQuery()); + $this->assertEquals(3, $resultSets[0]->getTotalHits()); + + $this->assertArrayHasKey(1, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[1]); + $this->assertCount(0, $resultSets[1]); + $this->assertSame($query2, $resultSets[1]->getQuery()); + $this->assertEquals(6, $resultSets[1]->getTotalHits()); + + $search1->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_QUERY_AND_FETCH); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertCount(2, $resultSets[0]); + $this->assertSame($query1, $resultSets[0]->getQuery()); + $this->assertEquals(3, $resultSets[0]->getTotalHits()); + + $this->assertArrayHasKey(1, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[1]); + $this->assertCount(0, $resultSets[1]); + $this->assertSame($query2, $resultSets[1]->getQuery()); + $this->assertEquals(6, $resultSets[1]->getTotalHits()); + } + + /** + * @group functional + */ + public function testGlobalSearchTypeSearchWithKeys() + { + $type = $this->_createType(); + $index = $type->getIndex(); + $client = $index->getClient(); + + $multiSearch = new MultiSearch($client); + + $search1 = new Search($client); + $search1->addIndex($index)->addType($type); + $query1 = new Query(); + $termQuery1 = new Term(); + $termQuery1->setTerm('username', 'farrelley'); + $query1->setQuery($termQuery1); + $query1->setSize(2); + $search1->setQuery($query1); + + $multiSearch->addSearch($search1); + + $this->assertCount(1, $multiSearch->getSearches()); + + $search2 = new Search($client); + $search2->addIndex($index)->addType($type); + $query2 = new Query(); + $termQuery2 = new Term(); + $termQuery2->setTerm('username', 'bunny'); + $query2->setQuery($termQuery2); + $query2->setSize(3); + $search2->setQuery($query2); + + $multiSearch->addSearch($search2); + + $multiSearch->setSearchType(Search::OPTION_SEARCH_TYPE_COUNT); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertCount(0, $resultSets[0]); + $this->assertSame($query1, $resultSets[0]->getQuery()); + $this->assertEquals(3, $resultSets[0]->getTotalHits()); + + $this->assertArrayHasKey(1, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[1]); + $this->assertCount(0, $resultSets[1]); + $this->assertSame($query2, $resultSets[1]->getQuery()); + $this->assertEquals(6, $resultSets[1]->getTotalHits()); + + $search1->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_QUERY_AND_FETCH); + + $multiResultSet = $multiSearch->search(); + + $this->assertInstanceOf('Elastica\Multi\ResultSet', $multiResultSet); + $this->assertCount(2, $multiResultSet); + $this->assertInstanceOf('Elastica\Response', $multiResultSet->getResponse()); + + $resultSets = $multiResultSet->getResultSets(); + + $this->assertInternalType('array', $resultSets); + + $this->assertArrayHasKey(0, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[0]); + $this->assertCount(2, $resultSets[0]); + $this->assertSame($query1, $resultSets[0]->getQuery()); + $this->assertEquals(3, $resultSets[0]->getTotalHits()); + + $this->assertArrayHasKey(1, $resultSets); + $this->assertInstanceOf('Elastica\ResultSet', $resultSets[1]); + $this->assertCount(0, $resultSets[1]); + $this->assertSame($query2, $resultSets[1]->getQuery()); + $this->assertEquals(6, $resultSets[1]->getTotalHits()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Node/InfoTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Node/InfoTest.php new file mode 100644 index 00000000..812f141e --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Node/InfoTest.php @@ -0,0 +1,79 @@ +_getClient(); + $names = $client->getCluster()->getNodeNames(); + $name = reset($names); + + $node = new Node($name, $client); + $info = new NodeInfo($node); + + $this->assertNull($info->get('os', 'mem', 'total')); + + // Load os infos + $info = new NodeInfo($node, array('os')); + + $this->assertNotNull($info->get('os', 'mem', 'total_in_bytes')); + $this->assertInternalType('array', $info->get('os', 'mem')); + $this->assertNull($info->get('test', 'notest', 'notexist')); + } + + /** + * @group functional + */ + public function testHasPlugin() + { + $client = $this->_getClient(); + $nodes = $client->getCluster()->getNodes(); + $node = $nodes[0]; + $info = $node->getInfo(); + + $pluginName = 'mapper-attachments'; + + $this->assertTrue($info->hasPlugin($pluginName)); + $this->assertFalse($info->hasPlugin('foo')); + } + + /** + * @group functional + */ + public function testGetId() + { + $client = $this->_getClient(); + $nodes = $client->getCluster()->getNodes(); + + $ids = array(); + + foreach ($nodes as $node) { + $id = $node->getInfo()->getId(); + + // Checks that the ids are unique + $this->assertFalse(in_array($id, $ids)); + $ids[] = $id; + } + } + + /** + * @group functional + */ + public function testGetName() + { + $client = $this->_getClient(); + $nodes = $client->getCluster()->getNodes(); + + foreach ($nodes as $node) { + $this->assertEquals('Elastica', $node->getInfo()->getName()); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/NodeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/NodeTest.php new file mode 100644 index 00000000..fbd2d297 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/NodeTest.php @@ -0,0 +1,75 @@ +_getClient(); + $names = $client->getCluster()->getNodeNames(); + $name = reset($names); + + $node = new Node($name, $client); + $this->assertInstanceOf('Elastica\Node', $node); + } + + /** + * @group functional + */ + public function testGetInfo() + { + $client = $this->_getClient(); + $names = $client->getCluster()->getNodeNames(); + $name = reset($names); + + $node = new Node($name, $client); + + $info = $node->getInfo(); + + $this->assertInstanceOf('Elastica\Node\Info', $info); + } + + /** + * @group functional + */ + public function testGetStats() + { + $client = $this->_getClient(); + $names = $client->getCluster()->getNodeNames(); + $name = reset($names); + + $node = new Node($name, $client); + + $stats = $node->getStats(); + + $this->assertInstanceOf('Elastica\Node\Stats', $stats); + } + + /** + * @group functional + */ + public function testGetName() + { + $nodes = $this->_getClient()->getCluster()->getNodes(); + // At least 1 instance must exist + $this->assertGreaterThan(0, $nodes); + + foreach ($nodes as $node) { + $this->assertEquals($node->getName(), 'Elastica'); + } + } + + /** + * @group functional + */ + public function testGetId() + { + $node = new Node('Elastica', $this->_getClient()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ParamTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ParamTest.php new file mode 100644 index 00000000..eade8118 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ParamTest.php @@ -0,0 +1,115 @@ +assertInstanceOf('Elastica\Param', $param); + $this->assertEquals(array($this->_getFilterName($param) => array()), $param->toArray()); + } + + /** + * @group unit + */ + public function testSetParams() + { + $param = new Param(); + $params = array('hello' => 'word', 'nicolas' => 'ruflin'); + $param->setParams($params); + + $this->assertInstanceOf('Elastica\Param', $param); + $this->assertEquals(array($this->_getFilterName($param) => $params), $param->toArray()); + } + + /** + * @group unit + */ + public function testSetGetParam() + { + $param = new Param(); + + $key = 'name'; + $value = 'nicolas ruflin'; + + $params = array($key => $value); + $param->setParam($key, $value); + + $this->assertEquals($params, $param->getParams()); + $this->assertEquals($value, $param->getParam($key)); + } + + /** + * @group unit + */ + public function testAddParam() + { + $param = new Param(); + + $key = 'name'; + $value = 'nicolas ruflin'; + + $param->addParam($key, $value); + + $this->assertEquals(array($key => array($value)), $param->getParams()); + $this->assertEquals(array($value), $param->getParam($key)); + } + + /** + * @group unit + */ + public function testAddParam2() + { + $param = new Param(); + + $key = 'name'; + $value1 = 'nicolas'; + $value2 = 'ruflin'; + + $param->addParam($key, $value1); + $param->addParam($key, $value2); + + $this->assertEquals(array($key => array($value1, $value2)), $param->getParams()); + $this->assertEquals(array($value1, $value2), $param->getParam($key)); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testGetParamInvalid() + { + $param = new Param(); + + $param->getParam('notest'); + } + + /** + * @group unit + */ + public function testHasParam() + { + $param = new Param(); + + $key = 'name'; + $value = 'nicolas ruflin'; + + $this->assertFalse($param->hasParam($key)); + + $param->setParam($key, $value); + $this->assertTrue($param->hasParam($key)); + } + + protected function _getFilterName($filter) + { + return Util::getParamName($filter); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/PercolatorTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/PercolatorTest.php new file mode 100644 index 00000000..2a5a88c3 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/PercolatorTest.php @@ -0,0 +1,328 @@ +_createIndex(); + $percolatorName = $index->getName(); + + $percolator = new Percolator($index); + + $query = new Term(array('field1' => 'value1')); + $response = $percolator->registerQuery($percolatorName, $query); + + $data = $response->getData(); + + $expectedArray = array( + '_type' => '.percolator', + '_index' => $index->getName(), + '_id' => $percolatorName, + '_version' => 1, + 'created' => 1, + ); + + $this->assertEquals($expectedArray, $data); + + $index->delete(); + } + + /** + * @group functional + */ + public function testMatchDoc() + { + $index = $this->_createIndex(); + + $percolator = new Percolator($index); + + $percolatorName = $index->getName(); + + $query = new Term(array('name' => 'ruflin')); + $response = $percolator->registerQuery($percolatorName, $query); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $doc1 = new Document(); + $doc1->set('name', 'ruflin'); + + $doc2 = new Document(); + $doc2->set('name', 'nicolas'); + + $index->refresh(); + + $matches1 = $percolator->matchDoc($doc1); + + $this->assertCount(1, $matches1); + $firstPercolatorFound = false; + foreach ($matches1 as $match) { + if ($match['_id'] == $percolatorName) { + $firstPercolatorFound = true; + } + } + $this->assertTrue($firstPercolatorFound); + + $matches2 = $percolator->matchDoc($doc2); + $this->assertEmpty($matches2); + + $index->delete(); + } + + /** + * Test case for using filtered percolator queries based on the Elasticsearch documentation examples. + * + * @group functional + */ + public function testFilteredMatchDoc() + { + // step one: register create index and setup the percolator query from the ES documentation. + $index = $this->_createIndex(); + $percolator = new Percolator($index); + $baseQuery = new Term(array('field1' => 'value1')); + $fields = array('color' => 'blue'); + + $response = $percolator->registerQuery('kuku', $baseQuery, $fields); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + // refreshing is required in order to ensure the query is really ready for execution. + $index->refresh(); + + // step two: match a document which should match the kuku query when filtered on the blue color + $doc = new Document(); + $doc->set('field1', 'value1'); + + $matches = $percolator->matchDoc($doc, new Term(array('color' => 'blue'))); + $this->assertCount(1, $matches, 'No or too much registered query matched.'); + $this->assertEquals('kuku', $matches[0]['_id'], 'A wrong registered query has matched.'); + + // step three: validate that using a different color, no registered query matches. + $matches = $percolator->matchDoc($doc, new Term(array('color' => 'green'))); + $this->assertCount(0, $matches, 'A registered query matched, although nothing should match at all.'); + + $index->delete(); + } + + /** + * Test case for using filtered percolator queries based on the Elasticsearch documentation examples. + * + * @group functional + */ + public function testRegisterAndUnregisterPercolator() + { + // step one: register create index and setup the percolator query from the ES documentation. + $index = $this->_createIndex(); + $percolator = new Percolator($index); + $baseQuery = new Term(array('field1' => 'value1')); + $fields = array('color' => 'blue'); + + $response = $percolator->registerQuery('kuku', $baseQuery, $fields); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + // refreshing is required in order to ensure the query is really ready for execution. + $index->refresh(); + + // step two: match a document which should match the kuku query when filtered on the blue color + $doc = new Document(); + $doc->set('field1', 'value1'); + + $matches = $percolator->matchDoc($doc, new Term(array('color' => 'blue'))); + $this->assertCount(1, $matches, 'No or too much registered query matched.'); + $this->assertEquals('kuku', $matches[0]['_id'], 'A wrong registered query has matched.'); + + // step three: validate that using a different color, no registered query matches. + $matches = $percolator->matchDoc($doc, new Term(array('color' => 'green'))); + $this->assertCount(0, $matches, 'A registered query matched, although nothing should match at all.'); + + // unregister percolator query + $response = $percolator->unregisterQuery('kuku'); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + // refreshing is required in order to ensure the query is really ready for execution. + $index->refresh(); + + $matches = $percolator->matchDoc($doc, new Term(array('color' => 'blue'))); + $this->assertCount(0, $matches, 'Percolator query did not get deleted.'); + + $index->delete(); + } + + protected function _getDefaultPercolator($percolatorName = 'existingDoc') + { + $index = $this->_createIndex(); + $percolator = new Percolator($index); + + $query = new Term(array('name' => 'foobar')); + $percolator->registerQuery($percolatorName, $query, array('field1' => array('tag1', 'tag2'))); + + return $percolator; + } + + protected function _addDefaultDocuments($index, $type = 'testing') + { + $type = $index->getType('testing'); + $type->addDocuments(array( + new Document(1, array('name' => 'foobar')), + new Document(2, array('name' => 'barbaz')), + )); + $index->refresh(); + + return $type; + } + + /** + * @group functional + */ + public function testPercolateExistingDocWithoutAnyParameter() + { + $percolator = $this->_getDefaultPercolator(); + $index = $percolator->getIndex(); + $type = $this->_addDefaultDocuments($index); + + $matches = $percolator->matchExistingDoc(1, $type->getName()); + + $this->assertCount(1, $matches); + $this->assertEquals('existingDoc', $matches[0]['_id']); + $index->delete(); + } + + /** + * @group functional + */ + public function testPercolateExistingDocWithPercolateFormatIds() + { + $percolator = $this->_getDefaultPercolator(); + $index = $percolator->getIndex(); + $type = $this->_addDefaultDocuments($index); + + $parameter = array('percolate_format' => 'ids'); + $matches = $percolator->matchExistingDoc(1, $type->getName(), null, $parameter); + + $this->assertCount(1, $matches); + $this->assertEquals('existingDoc', $matches[0]); + $index->delete(); + } + + /** + * @group functional + */ + public function testPercolateExistingDocWithIdThatShouldBeUrlEncoded() + { + $percolator = $this->_getDefaultPercolator(); + $index = $percolator->getIndex(); + $type = $this->_addDefaultDocuments($index); + + // id with whitespace, should be urlencoded + $id = 'foo bar 1'; + + $type->addDocument(new Document($id, array('name' => 'foobar'))); + $index->refresh(); + + $matches = $percolator->matchExistingDoc($id, $type->getName()); + + $this->assertCount(1, $matches); + $index->delete(); + } + + /** + * @group functional + */ + public function testPercolateWithAdditionalRequestBodyOptions() + { + $index = $this->_createIndex(); + $percolator = new Percolator($index); + + $query = new Term(array('name' => 'foo')); + $response = $percolator->registerQuery('percotest', $query, array('field1' => array('tag1', 'tag2'))); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $query = new Term(array('name' => 'foo')); + $response = $percolator->registerQuery('percotest1', $query, array('field1' => array('tag2'))); + + $this->assertTrue($response->isOk()); + $this->assertFalse($response->hasError()); + + $doc1 = new Document(); + $doc1->set('name', 'foo'); + + $index->refresh(); + + $options = array( + 'track_scores' => true, + 'sort' => array('_score' => 'desc'), + 'size' => 1, + ); + + $matches = $percolator->matchDoc($doc1, new Term(array('field1' => 'tag2')), 'type', $options); + + $this->assertCount(1, $matches); + $this->assertEquals('percotest1', $matches[0]['_id']); + $this->assertArrayHasKey('_score', $matches[0]); + } + + /** + * @group functional + */ + public function testPercolateExistingDocWithAdditionalRequestBodyOptions() + { + $percolatorName = 'existingDoc'; + $percolator = $this->_getDefaultPercolator($percolatorName); + + $query = new Term(array('name' => 'foobar')); + $percolator->registerQuery($percolatorName.'1', $query, array('field1' => array('tag2'))); + + $index = $percolator->getIndex(); + $type = $this->_addDefaultDocuments($index); + + $options = array( + 'track_scores' => true, + 'sort' => array('_score' => 'desc'), + 'size' => 1, + ); + + $matches = $percolator->matchExistingDoc(1, $type->getName(), new Term(array('field1' => 'tag2')), $options); + + $this->assertCount(1, $matches); + $this->assertEquals('existingDoc1', $matches[0]['_id']); + $this->assertArrayHasKey('_score', $matches[0]); + $index->delete(); + } + + protected function _createIndex($name = null, $delete = true, $shards = 1) + { + $index = parent::_createIndex($name, $delete, $shards); + $type = $index->getType('.percolator'); + + $mapping = new Type\Mapping($type, + array( + 'name' => array('type' => 'string'), + 'field1' => array('type' => 'string'), + ) + ); + $mapping->disableSource(); + + $type->setMapping($mapping); + + return $index; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoolQueryTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoolQueryTest.php new file mode 100644 index 00000000..211d0c23 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoolQueryTest.php @@ -0,0 +1,171 @@ +setIds(1); + + $idsQuery2 = new Ids(); + $idsQuery2->setIds(2); + + $idsQuery3 = new Ids(); + $idsQuery3->setIds(3); + + $boost = 1.2; + $minMatch = 2; + + $query->setBoost($boost); + $query->setMinimumNumberShouldMatch($minMatch); + $query->addMust($idsQuery1); + $query->addMustNot($idsQuery2); + $query->addShould($idsQuery3->toArray()); + + $expectedArray = array( + 'bool' => array( + 'must' => array($idsQuery1->toArray()), + 'should' => array($idsQuery3->toArray()), + 'minimum_number_should_match' => $minMatch, + 'must_not' => array($idsQuery2->toArray()), + 'boost' => $boost, + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * Test to resolve the following issue. + * + * @link https://groups.google.com/forum/?fromgroups#!topic/elastica-php-client/zK_W_hClfvU + * + * @group unit + */ + public function testToArrayStructure() + { + $boolQuery = new BoolQuery(); + + $term1 = new Term(); + $term1->setParam('interests', 84); + + $term2 = new Term(); + $term2->setParam('interests', 92); + + $boolQuery->addShould($term1)->addShould($term2); + + $jsonString = '{"bool":{"should":[{"term":{"interests":84}},{"term":{"interests":92}}]}}'; + $this->assertEquals($jsonString, json_encode($boolQuery->toArray())); + } + + /** + * @group functional + */ + public function testSearch() + { + $client = $this->_getClient(); + $index = new Index($client, 'test'); + $index->create(array(), true); + + $type = new Type($index, 'helloworld'); + + $doc = new Document(1, array('id' => 1, 'email' => 'hans@test.com', 'username' => 'hans', 'test' => array('2', '3', '5'))); + $type->addDocument($doc); + $doc = new Document(2, array('id' => 2, 'email' => 'emil@test.com', 'username' => 'emil', 'test' => array('1', '3', '6'))); + $type->addDocument($doc); + $doc = new Document(3, array('id' => 3, 'email' => 'ruth@test.com', 'username' => 'ruth', 'test' => array('2', '3', '7'))); + $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $boolQuery = new BoolQuery(); + $termQuery1 = new Term(array('test' => '2')); + $boolQuery->addMust($termQuery1); + $resultSet = $type->search($boolQuery); + + $this->assertEquals(2, $resultSet->count()); + + $termQuery2 = new Term(array('test' => '5')); + $boolQuery->addMust($termQuery2); + $resultSet = $type->search($boolQuery); + + $this->assertEquals(1, $resultSet->count()); + + $termQuery3 = new Term(array('username' => 'hans')); + $boolQuery->addMust($termQuery3); + $resultSet = $type->search($boolQuery); + + $this->assertEquals(1, $resultSet->count()); + + $termQuery4 = new Term(array('username' => 'emil')); + $boolQuery->addMust($termQuery4); + $resultSet = $type->search($boolQuery); + + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testEmptyBoolQuery() + { + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + + $docNumber = 3; + for ($i = 0; $i < $docNumber; $i++) { + $doc = new Document($i, array('email' => 'test@test.com')); + $type->addDocument($doc); + } + + $index->refresh(); + + $boolQuery = new BoolQuery(); + + $resultSet = $type->search($boolQuery); + + $this->assertEquals($resultSet->count(), $docNumber); + } + + /** + * @group functional + */ + public function testOldObject() + { + if (version_compare(phpversion(), 7, '>=')) { + self::markTestSkipped('These objects are not supported in PHP 7'); + } + + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + + $docNumber = 3; + for ($i = 0; $i < $docNumber; $i++) { + $doc = new Document($i, array('email' => 'test@test.com')); + $type->addDocument($doc); + } + + $index->refresh(); + + $boolQuery = new \Elastica\Query\Bool(); + + $resultSet = $type->search($boolQuery); + + $this->assertEquals($resultSet->count(), $docNumber); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoostingTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoostingTest.php new file mode 100644 index 00000000..8133fd37 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoostingTest.php @@ -0,0 +1,89 @@ + 'Vital Lama', 'price' => 5.2), + array('name' => 'Vital Match', 'price' => 2.1), + array('name' => 'Mercury Vital', 'price' => 7.5), + array('name' => 'Fist Mercury', 'price' => 3.8), + array('name' => 'Lama Vital 2nd', 'price' => 3.2), + ); + + protected function _getTestIndex() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $type->setMapping(array( + 'name' => array('type' => 'string', 'index' => 'analyzed'), + 'price' => array('type' => 'float'), + )); + $docs = array(); + foreach ($this->sampleData as $key => $value) { + $docs[] = new Document($key, $value); + } + $type->addDocuments($docs); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $keyword = 'vital'; + $negativeKeyword = 'Mercury'; + + $query = new Boosting(); + $positiveQuery = new Term(array('name' => $keyword)); + $negativeQuery = new Term(array('name' => $negativeKeyword)); + $query->setPositiveQuery($positiveQuery); + $query->setNegativeQuery($negativeQuery); + $query->setNegativeBoost(0.3); + + $expected = array( + 'boosting' => array( + 'positive' => $positiveQuery->toArray(), + 'negative' => $negativeQuery->toArray(), + 'negative_boost' => 0.3, + ), + ); + $this->assertEquals($expected, $query->toArray()); + } + + /** + * @group functional + */ + public function testNegativeBoost() + { + $keyword = 'vital'; + $negativeKeyword = 'mercury'; + + $query = new Boosting(); + $positiveQuery = new Term(array('name' => $keyword)); + $negativeQuery = new Term(array('name' => $negativeKeyword)); + $query->setPositiveQuery($positiveQuery); + $query->setNegativeQuery($negativeQuery); + $query->setNegativeBoost(0.2); + + $response = $this->_getTestIndex()->search($query); + $results = $response->getResults(); + + $this->assertEquals($response->getTotalHits(), 4); + + $lastResult = $results[3]->getData(); + $this->assertEquals($lastResult['name'], $this->sampleData[2]['name']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BuilderTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BuilderTest.php new file mode 100644 index 00000000..a96e8b3a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BuilderTest.php @@ -0,0 +1,273 @@ +assertInstanceOf( + 'Elastica\Query\Builder', + Builder::factory('some string') + ); + } + + public function getQueryData() + { + return array( + array('allowLeadingWildcard', false, '{"allow_leading_wildcard":"false"}'), + array('allowLeadingWildcard', true, '{"allow_leading_wildcard":"true"}'), + array('analyzeWildcard', false, '{"analyze_wildcard":"false"}'), + array('analyzeWildcard', true, '{"analyze_wildcard":"true"}'), + array('analyzer', 'someAnalyzer', '{"analyzer":"someAnalyzer"}'), + array('autoGeneratePhraseQueries', true, '{"auto_generate_phrase_queries":"true"}'), + array('autoGeneratePhraseQueries', false, '{"auto_generate_phrase_queries":"false"}'), + array('boost', 2, '{"boost":"2"}'), + array('boost', 4.2, '{"boost":"4.2"}'), + array('defaultField', 'fieldName', '{"default_field":"fieldName"}'), + array('defaultOperator', 'OR', '{"default_operator":"OR"}'), + array('defaultOperator', 'AND', '{"default_operator":"AND"}'), + array('enablePositionIncrements', true, '{"enable_position_increments":"true"}'), + array('enablePositionIncrements', false, '{"enable_position_increments":"false"}'), + array('explain', true, '{"explain":"true"}'), + array('explain', false, '{"explain":"false"}'), + array('from', 42, '{"from":"42"}'), + array('fuzzyMinSim', 4.2, '{"fuzzy_min_sim":"4.2"}'), + array('fuzzyPrefixLength', 2, '{"fuzzy_prefix_length":"2"}'), + array('gt', 10, '{"gt":"10"}'), + array('gte', 11, '{"gte":"11"}'), + array('lowercaseExpandedTerms', true, '{"lowercase_expanded_terms":"true"}'), + array('lt', 10, '{"lt":"10"}'), + array('lte', 11, '{"lte":"11"}'), + array('minimumNumberShouldMatch', 21, '{"minimum_number_should_match":"21"}'), + array('phraseSlop', 6, '{"phrase_slop":"6"}'), + array('size', 7, '{"size":"7"}'), + array('tieBreakerMultiplier', 7, '{"tie_breaker_multiplier":"7"}'), + array('matchAll', 1.1, '{"match_all":{"boost":"1.1"}}'), + array('fields', array('age', 'sex', 'location'), '{"fields":["age","sex","location"]}'), + ); + } + + /** + * @group unit + * @dataProvider getQueryData + * @covers \Elastica\Query\Builder::__toString + * @covers \Elastica\Query\Builder::allowLeadingWildcard + * @covers \Elastica\Query\Builder::analyzeWildcard + * @covers \Elastica\Query\Builder::analyzer + * @covers \Elastica\Query\Builder::autoGeneratePhraseQueries + * @covers \Elastica\Query\Builder::boost + * @covers \Elastica\Query\Builder::defaultField + * @covers \Elastica\Query\Builder::defaultOperator + * @covers \Elastica\Query\Builder::enablePositionIncrements + * @covers \Elastica\Query\Builder::explain + * @covers \Elastica\Query\Builder::from + * @covers \Elastica\Query\Builder::fuzzyMinSim + * @covers \Elastica\Query\Builder::fuzzyPrefixLength + * @covers \Elastica\Query\Builder::gt + * @covers \Elastica\Query\Builder::gte + * @covers \Elastica\Query\Builder::lowercaseExpandedTerms + * @covers \Elastica\Query\Builder::lt + * @covers \Elastica\Query\Builder::lte + * @covers \Elastica\Query\Builder::minimumNumberShouldMatch + * @covers \Elastica\Query\Builder::phraseSlop + * @covers \Elastica\Query\Builder::size + * @covers \Elastica\Query\Builder::tieBreakerMultiplier + * @covers \Elastica\Query\Builder::matchAll + * @covers \Elastica\Query\Builder::fields + */ + public function testAllowLeadingWildcard($method, $argument, $result) + { + $builder = new Builder(); + $this->assertSame($builder, $builder->$method($argument)); + $this->assertSame($result, (string) $builder); + } + + public function getQueryTypes() + { + return array( + array('bool', 'bool'), + array('constantScore', 'constant_score'), + array('disMax', 'dis_max'), + array('facets', 'facets'), + array('filter', 'filter'), + array('filteredQuery', 'filtered'), + array('must', 'must'), + array('mustNot', 'must_not'), + array('prefix', 'prefix'), + array('query', 'query'), + array('queryString', 'query_string'), + array('range', 'range'), + array('should', 'should'), + array('sort', 'sort'), + array('term', 'term'), + array('textPhrase', 'text_phrase'), + array('wildcard', 'wildcard'), + ); + } + + /** + * @group unit + * @dataProvider getQueryTypes + * @covers \Elastica\Query\Builder::fieldClose + * @covers \Elastica\Query\Builder::close + * @covers \Elastica\Query\Builder::bool + * @covers \Elastica\Query\Builder::boolClose + * @covers \Elastica\Query\Builder::constantScore + * @covers \Elastica\Query\Builder::constantScoreClose + * @covers \Elastica\Query\Builder::disMax + * @covers \Elastica\Query\Builder::disMaxClose + * @covers \Elastica\Query\Builder::facets + * @covers \Elastica\Query\Builder::facetsClose + * @covers \Elastica\Query\Builder::filter + * @covers \Elastica\Query\Builder::filterClose + * @covers \Elastica\Query\Builder::filteredQuery + * @covers \Elastica\Query\Builder::filteredQueryClose + * @covers \Elastica\Query\Builder::must + * @covers \Elastica\Query\Builder::mustClose + * @covers \Elastica\Query\Builder::mustNot + * @covers \Elastica\Query\Builder::mustNotClose + * @covers \Elastica\Query\Builder::prefix + * @covers \Elastica\Query\Builder::prefixClose + * @covers \Elastica\Query\Builder::query + * @covers \Elastica\Query\Builder::queryClose + * @covers \Elastica\Query\Builder::queryString + * @covers \Elastica\Query\Builder::queryStringClose + * @covers \Elastica\Query\Builder::range + * @covers \Elastica\Query\Builder::rangeClose + * @covers \Elastica\Query\Builder::should + * @covers \Elastica\Query\Builder::shouldClose + * @covers \Elastica\Query\Builder::sort + * @covers \Elastica\Query\Builder::sortClose + * @covers \Elastica\Query\Builder::term + * @covers \Elastica\Query\Builder::termClose + * @covers \Elastica\Query\Builder::textPhrase + * @covers \Elastica\Query\Builder::textPhraseClose + * @covers \Elastica\Query\Builder::wildcard + * @covers \Elastica\Query\Builder::wildcardClose + */ + public function testQueryTypes($method, $queryType) + { + $builder = new Builder(); + $this->assertSame($builder, $builder->$method()); // open + $this->assertSame($builder, $builder->{$method.'Close'}()); // close + $this->assertSame('{"'.$queryType.'":{}}', (string) $builder); + } + + /** + * @group unit + * @covers \Elastica\Query\Builder::fieldOpen + * @covers \Elastica\Query\Builder::fieldClose + * @covers \Elastica\Query\Builder::open + * @covers \Elastica\Query\Builder::close + */ + public function testFieldOpenAndClose() + { + $builder = new Builder(); + $this->assertSame($builder, $builder->fieldOpen('someField')); + $this->assertSame($builder, $builder->fieldClose()); + $this->assertSame('{"someField":{}}', (string) $builder); + } + + /** + * @group unit + * @covers \Elastica\Query\Builder::sortField + */ + public function testSortField() + { + $builder = new Builder(); + $this->assertSame($builder, $builder->sortField('name', true)); + $this->assertSame('{"sort":{"name":{"reverse":"true"}}}', (string) $builder); + } + + /** + * @group unit + * @covers \Elastica\Query\Builder::sortFields + */ + public function testSortFields() + { + $builder = new Builder(); + $this->assertSame($builder, $builder->sortFields(array('field1' => 'asc', 'field2' => 'desc', 'field3' => 'asc'))); + $this->assertSame('{"sort":[{"field1":"asc"},{"field2":"desc"},{"field3":"asc"}]}', (string) $builder); + } + + /** + * @group unit + * @covers \Elastica\Query\Builder::queries + */ + public function testQueries() + { + $queries = array(); + + $builder = new Builder(); + $b1 = clone $builder; + $b2 = clone $builder; + + $queries[] = $b1->term()->field('age', 34)->termClose(); + $queries[] = $b2->term()->field('name', 'christer')->termClose(); + + $this->assertSame($builder, $builder->queries($queries)); + $this->assertSame('{"queries":[{"term":{"age":"34"}},{"term":{"name":"christer"}}]}', (string) $builder); + } + + public function getFieldData() + { + return array( + array('name', 'value', '{"name":"value"}'), + array('name', true, '{"name":"true"}'), + array('name', false, '{"name":"false"}'), + array('name', array(1, 2, 3), '{"name":["1","2","3"]}'), + array('name', array('foo', 'bar', 'baz'), '{"name":["foo","bar","baz"]}'), + ); + } + + /** + * @group unit + * @dataProvider getFieldData + * @covers \Elastica\Query\Builder::field + */ + public function testField($name, $value, $result) + { + $builder = new Builder(); + $this->assertSame($builder, $builder->field($name, $value)); + $this->assertSame($result, (string) $builder); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + * @expectedExceptionMessage The produced query is not a valid json string : "{{}" + * @covers \Elastica\Query\Builder::toArray + */ + public function testToArrayWithInvalidData() + { + $builder = new Builder(); + $builder->open('foo'); + $builder->toArray(); + } + + /** + * @group unit + * @covers \Elastica\Query\Builder::toArray + */ + public function testToArray() + { + $builder = new Builder(); + $builder->query()->term()->field('category.id', array(1, 2, 3))->termClose()->queryClose(); + $expected = array( + 'query' => array( + 'term' => array( + 'category.id' => array(1, 2, 3), + ), + ), + ); + $this->assertEquals($expected, $builder->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/CommonTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/CommonTest.php new file mode 100644 index 00000000..016213a8 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/CommonTest.php @@ -0,0 +1,63 @@ +setLowFrequencyOperator(Common::OPERATOR_AND); + + $expected = array( + 'common' => array( + 'body' => array( + 'query' => 'test query', + 'cutoff_frequency' => .001, + 'low_freq_operator' => 'and', + ), + ), + ); + + $this->assertEquals($expected, $query->toArray()); + } + + /** + * @group functional + */ + public function testQuery() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $docs = array( + new Document(1, array('body' => 'foo baz')), + new Document(2, array('body' => 'foo bar baz')), + new Document(3, array('body' => 'foo bar baz bat')), + ); + //add documents to create common terms + for ($i = 4; $i < 24; $i++) { + $docs[] = new Document($i, array('body' => 'foo bar')); + } + $type->addDocuments($docs); + $index->refresh(); + + $query = new Common('body', 'foo bar baz bat', .5); + $results = $type->search($query)->getResults(); + + //documents containing only common words should not be returned + $this->assertEquals(3, sizeof($results)); + + $query->setMinimumShouldMatch(2); + $results = $type->search($query); + + //only the document containing both low frequency terms should match + $this->assertEquals(1, $results->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ConstantScoreTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ConstantScoreTest.php new file mode 100644 index 00000000..a3a213b9 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ConstantScoreTest.php @@ -0,0 +1,162 @@ + array( + 'filter' => array( + 'term' => array( + 'foo', + 'bar', + ), + ), + ), + ), + ), + array( + array( + 'and' => array( + array( + 'query' => array( + 'query_string' => array( + 'query' => 'foo', + 'default_field' => 'something', + ), + ), + ), + array( + 'query' => array( + 'query_string' => array( + 'query' => 'bar', + 'default_field' => 'something', + ), + ), + ), + ), + ), + '{"constant_score":{"filter":{"and":[{"query":{"query_string":{"query":"foo","default_field":"something"}}},{"query":{"query_string":{"query":"bar","default_field":"something"}}}]}}}', + ), + ); + } + /** + * @group unit + * @dataProvider dataProviderSampleQueries + */ + public function testSimple($filter, $expected) + { + $query = new ConstantScore(); + $query->setFilter($filter); + if (is_string($expected)) { + $expected = json_decode($expected, true); + } + $this->assertEquals($expected, $query->toArray()); + } + + /** + * @group unit + */ + public function testToArray() + { + $query = new ConstantScore(); + + $boost = 1.2; + $filter = new Ids(); + $filter->setIds(array(1)); + + $query->setFilter($filter); + $query->setBoost($boost); + + $expectedArray = array( + 'constant_score' => array( + 'filter' => $filter->toArray(), + 'boost' => $boost, + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group unit + */ + public function testConstruct() + { + $filter = new Ids(); + $filter->setIds(array(1)); + + $query = new ConstantScore($filter); + + $expectedArray = array( + 'constant_score' => array( + 'filter' => $filter->toArray(), + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group functional + */ + public function testQuery() + { + $index = $this->_createIndex(); + + $type = $index->getType('constant_score'); + $type->addDocuments(array( + new Document(1, array('id' => 1, 'email' => 'hans@test.com', 'username' => 'hans')), + new Document(2, array('id' => 2, 'email' => 'emil@test.com', 'username' => 'emil')), + new Document(3, array('id' => 3, 'email' => 'ruth@test.com', 'username' => 'ruth')), + )); + + // Refresh index + $index->refresh(); + + $boost = 1.3; + $query_match = new MatchAll(); + + $query = new ConstantScore(); + $query->setQuery($query_match); + $query->setBoost($boost); + + $expectedArray = array( + 'constant_score' => array( + 'query' => $query_match->toArray(), + 'boost' => $boost, + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + $resultSet = $type->search($query); + + $results = $resultSet->getResults(); + + $this->assertEquals($resultSet->count(), 3); + $this->assertEquals($results[1]->getScore(), 1); + } + + /** + * @group unit + */ + public function testConstructEmpty() + { + $query = new ConstantScore(); + $expectedArray = array('constant_score' => array()); + + $this->assertEquals($expectedArray, $query->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/DisMaxTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/DisMaxTest.php new file mode 100644 index 00000000..2c128018 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/DisMaxTest.php @@ -0,0 +1,84 @@ +setIds(1); + + $idsQuery2 = new Ids(); + $idsQuery2->setIds(2); + + $idsQuery3 = new Ids(); + $idsQuery3->setIds(3); + + $boost = 1.2; + $tieBreaker = 2; + + $query->setBoost($boost); + $query->setTieBreaker($tieBreaker); + $query->addQuery($idsQuery1); + $query->addQuery($idsQuery2); + $query->addQuery($idsQuery3->toArray()); + + $expectedArray = array( + 'dis_max' => array( + 'tie_breaker' => $tieBreaker, + 'boost' => $boost, + 'queries' => array( + $idsQuery1->toArray(), + $idsQuery2->toArray(), + $idsQuery3->toArray(), + ), + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group functional + */ + public function testQuery() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + )); + + $index->refresh(); + + $queryString1 = new QueryString('Bade*'); + $queryString2 = new QueryString('Base*'); + + $boost = 1.2; + $tieBreaker = 2; + + $query = new DisMax(); + $query->setBoost($boost); + $query->setTieBreaker($tieBreaker); + $query->addQuery($queryString1); + $query->addQuery($queryString2); + $resultSet = $type->search($query); + + $this->assertEquals(3, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/EscapeStringTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/EscapeStringTest.php new file mode 100644 index 00000000..536a7bb3 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/EscapeStringTest.php @@ -0,0 +1,36 @@ +_createIndex(); + $index->getSettings()->setNumberOfReplicas(0); + + $type = new Type($index, 'helloworld'); + + $doc = new Document(1, array( + 'email' => 'test@test.com', 'username' => 'test 7/6 123', 'test' => array('2', '3', '5'), ) + ); + $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $queryString = new QueryString(Util::escapeTerm('test 7/6')); + $resultSet = $type->search($queryString); + + $this->assertEquals(1, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FilteredTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FilteredTest.php new file mode 100644 index 00000000..c4bea6f2 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FilteredTest.php @@ -0,0 +1,124 @@ +_createIndex(); + $type = $index->getType('helloworld'); + + $type->addDocuments(array( + new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'hanswurst', 'test' => array('2', '3', '5'))), + new Document(2, array('id' => 2, 'email' => 'test@test.com', 'username' => 'peter', 'test' => array('2', '3', '5'))), + )); + + $queryString = new QueryString('test*'); + + $filter1 = new Term(); + $filter1->setTerm('username', 'peter'); + + $filter2 = new Term(); + $filter2->setTerm('username', 'qwerqwer'); + + $query1 = new Filtered($queryString, $filter1); + $query2 = new Filtered($queryString, $filter2); + $index->refresh(); + + $resultSet = $type->search($queryString); + $this->assertEquals(2, $resultSet->count()); + + $resultSet = $type->search($query1); + $this->assertEquals(1, $resultSet->count()); + + $resultSet = $type->search($query2); + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group unit + */ + public function testFilteredGetter() + { + $queryString = new QueryString('test*'); + + $filter1 = new Term(); + $filter1->setTerm('username', 'peter'); + + $filter2 = new Term(); + $filter2->setTerm('username', 'qwerqwer'); + + $query1 = new Filtered($queryString, $filter1); + $query2 = new Filtered($queryString, $filter2); + + $this->assertEquals($query1->getQuery(), $queryString); + $this->assertEquals($query2->getQuery(), $queryString); + $this->assertEquals($query1->getFilter(), $filter1); + $this->assertEquals($query2->getFilter(), $filter2); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testFilteredWithoutArgumentsShouldRaiseException() + { + $query = new Filtered(); + $query->toArray(); + } + + /** + * @group functional + */ + public function testFilteredSearchNoQuery() + { + $index = $this->_createIndex(); + $type = $index->getType('helloworld'); + + $type->addDocuments(array( + new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'hanswurst', 'test' => array('2', '3', '5'))), + new Document(2, array('id' => 2, 'email' => 'test@test.com', 'username' => 'peter', 'test' => array('2', '3', '5'))), + )); + + $index->refresh(); + + $filter = new Term(); + $filter->setTerm('username', 'peter'); + + $query = new Filtered(null, $filter); + + $resultSet = $type->search($query); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testFilteredSearchNoFilter() + { + $index = $this->_createIndex(); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'hanswurst', 'test' => array('2', '3', '5'))); + $type->addDocument($doc); + $doc = new Document(2, array('id' => 2, 'email' => 'test@test.com', 'username' => 'peter', 'test' => array('2', '3', '5'))); + $type->addDocument($doc); + + $queryString = new QueryString('hans*'); + + $query = new Filtered($queryString); + $index->refresh(); + + $resultSet = $type->search($query); + $this->assertEquals(1, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FunctionScoreTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FunctionScoreTest.php new file mode 100644 index 00000000..25600034 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FunctionScoreTest.php @@ -0,0 +1,324 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->setMapping(array( + 'name' => array('type' => 'string', 'index' => 'not_analyzed'), + 'location' => array('type' => 'geo_point'), + 'price' => array('type' => 'float'), + )); + + $type->addDocuments(array( + new Document(1, array( + 'name' => "Mr. Frostie's", + 'location' => array('lat' => 32.799605, 'lon' => -117.243027), + 'price' => 4.5, + )), + new Document(2, array( + 'name' => "Miller's Field", + 'location' => array('lat' => 32.795964, 'lon' => -117.255028), + 'price' => 9.5, + )), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $priceOrigin = 0; + $locationScale = '2mi'; + $priceScale = 9.25; + $query = new FunctionScore(); + $childQuery = new MatchAll(); + $query->setQuery($childQuery); + $query->addDecayFunction(FunctionScore::DECAY_GAUSS, 'location', $this->locationOrigin, $locationScale); + $query->addDecayFunction(FunctionScore::DECAY_GAUSS, 'price', $priceOrigin, $priceScale); + $expected = array( + 'function_score' => array( + 'query' => $childQuery->toArray(), + 'functions' => array( + array( + 'gauss' => array( + 'location' => array( + 'origin' => $this->locationOrigin, + 'scale' => $locationScale, + ), + ), + ), + array( + 'gauss' => array( + 'price' => array( + 'origin' => $priceOrigin, + 'scale' => $priceScale, + ), + ), + ), + ), + ), + ); + $this->assertEquals($expected, $query->toArray()); + } + + /** + * @group unit + */ + public function testDecayWeight() + { + $priceOrigin = 0; + $locationScale = '2mi'; + $priceScale = 9.25; + $query = new FunctionScore(); + $childQuery = new MatchAll(); + $query->setQuery($childQuery); + $query->addDecayFunction( + FunctionScore::DECAY_GAUSS, + 'location', + $this->locationOrigin, + $locationScale, + null, + null, + .5 + ); + $query->addDecayFunction(FunctionScore::DECAY_GAUSS, 'price', $priceOrigin, $priceScale, null, null, 2); + $expected = array( + 'function_score' => array( + 'query' => $childQuery->toArray(), + 'functions' => array( + array( + 'gauss' => array( + 'location' => array( + 'origin' => $this->locationOrigin, + 'scale' => $locationScale, + ), + ), + 'weight' => .5, + ), + array( + 'gauss' => array( + 'price' => array( + 'origin' => $priceOrigin, + 'scale' => $priceScale, + ), + ), + 'weight' => 2, + ), + ), + ), + ); + $this->assertEquals($expected, $query->toArray()); + } + + /** + * @group functional + */ + public function testGauss() + { + $query = new FunctionScore(); + $query->addDecayFunction(FunctionScore::DECAY_GAUSS, 'location', $this->locationOrigin, '4mi'); + $query->addDecayFunction(FunctionScore::DECAY_GAUSS, 'price', 0, 10); + $response = $this->_getIndexForTest()->search($query); + $results = $response->getResults(); + + // the document with the closest location and lowest price should be scored highest + $result0 = $results[0]->getData(); + $this->assertEquals("Mr. Frostie's", $result0['name']); + } + + /** + * @group functional + */ + public function testWeight() + { + $filter = new Term(array('price' => 4.5)); + $query = new FunctionScore(); + $query->addBoostFactorFunction(5.0, $filter); + $expected = array( + 'function_score' => array( + 'functions' => array( + array( + 'weight' => 5.0, + 'filter' => array( + 'term' => array( + 'price' => 4.5, + ), + ), + ), + ), + ), + ); + + $this->assertEquals($expected, $query->toArray()); + + $response = $this->_getIndexForTest()->search($query); + $results = $response->getResults(); + + // the document with price = 4.5 should be scored highest + $result0 = $results[0]->getData(); + $this->assertEquals("Mr. Frostie's", $result0['name']); + } + + /** + * @group functional + */ + public function testRandomScore() + { + $filter = new Term(array('price' => 4.5)); + $query = new FunctionScore(); + $query->addRandomScoreFunction(2, $filter); + $expected = array( + 'function_score' => array( + 'functions' => array( + array( + 'random_score' => array( + 'seed' => 2, + ), + 'filter' => array( + 'term' => array( + 'price' => 4.5, + ), + ), + ), + ), + ), + ); + + $this->assertEquals($expected, $query->toArray()); + + $response = $this->_getIndexForTest()->search($query); + $results = $response->getResults(); + + // the document with the random score should have a score > 1, means it is the first result + $result0 = $results[0]->getData(); + + $this->assertEquals("Miller's Field", $result0['name']); + } + + /** + * @group unit + */ + public function testRandomScoreWeight() + { + $filter = new Term(array('price' => 4.5)); + $query = new FunctionScore(); + $query->addRandomScoreFunction(2, $filter, 2); + $expected = array( + 'function_score' => array( + 'functions' => array( + array( + 'random_score' => array( + 'seed' => 2, + ), + 'filter' => array( + 'term' => array( + 'price' => 4.5, + ), + ), + 'weight' => 2, + ), + ), + ), + ); + + $this->assertEquals($expected, $query->toArray()); + } + + /** + * @group functional + */ + public function testRandomScoreWithoutSeed() + { + $query = new FunctionScore(); + $query->setRandomScore(); + + $response = $this->_getIndexForTest()->search($query); + + $this->assertEquals(2, $response->count()); + } + + /** + * @group functional + */ + public function testScriptScore() + { + $scriptString = "_score * doc['price'].value"; + $script = new Script($scriptString); + $query = new FunctionScore(); + $query->addScriptScoreFunction($script); + $expected = array( + 'function_score' => array( + 'functions' => array( + array( + 'script_score' => array( + 'script' => $scriptString, + ), + ), + ), + ), + ); + + $this->assertEquals($expected, $query->toArray()); + + $response = $this->_getIndexForTest()->search($query); + $results = $response->getResults(); + + // the document the highest price should be scored highest + $result0 = $results[0]->getData(); + $this->assertEquals("Miller's Field", $result0['name']); + } + + /** + * @group functional + */ + public function testSetMinScore() + { + $expected = array( + 'function_score' => array( + 'min_score' => 0.8, + 'functions' => array( + array( + 'gauss' => array( + 'price' => array( + 'origin' => 0, + 'scale' => 10, + ), + ), + ), + ), + ), + ); + + $query = new FunctionScore(); + $query->addDecayFunction(FunctionScore::DECAY_GAUSS, 'price', 0, 10); + $returnedValue = $query->setMinScore(0.8); + + $this->assertEquals($expected, $query->toArray()); + $this->assertInstanceOf('Elastica\Query\FunctionScore', $returnedValue); + + $response = $this->_getIndexForTest()->search($query); + $results = $response->getResults(); + + $this->assertCount(1, $results); + $this->assertEquals(1, $results[0]->getId()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyLikeThisTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyLikeThisTest.php new file mode 100644 index 00000000..fe11e788 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyLikeThisTest.php @@ -0,0 +1,300 @@ +_getClient(); + $index = new Index($client, 'test'); + $index->create(array(), true); + $index->getSettings()->setNumberOfReplicas(0); + //$index->getSettings()->setNumberOfShards(1); + + $type = new Type($index, 'helloworldfuzzy'); + $mapping = new Mapping($type, array( + 'email' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + 'content' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + )); + + $mapping->setSource(array('enabled' => false)); + $type->setMapping($mapping); + + $doc = new Document(1000, array('email' => 'testemail@gmail.com', 'content' => 'This is a sample post. Hello World Fuzzy Like This!')); + $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $fltQuery = new FuzzyLikeThis(); + $fltQuery->setLikeText('sample gmail'); + $fltQuery->addFields(array('email', 'content')); + $fltQuery->setMinSimilarity(0.3); + $fltQuery->setMaxQueryTerms(3); + $resultSet = $type->search($fltQuery); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group unit + */ + public function testSetPrefixLength() + { + $query = new FuzzyLikeThis(); + + $length = 3; + $query->setPrefixLength($length); + + $data = $query->toArray(); + + $this->assertEquals($length, $data['fuzzy_like_this']['prefix_length']); + } + + /** + * @group unit + */ + public function testAddFields() + { + $query = new FuzzyLikeThis(); + + $fields = array('test1', 'test2'); + $query->addFields($fields); + + $data = $query->toArray(); + + $this->assertEquals($fields, $data['fuzzy_like_this']['fields']); + } + + /** + * @group unit + */ + public function testSetLikeText() + { + $query = new FuzzyLikeThis(); + + $text = ' hello world'; + $query->setLikeText($text); + + $data = $query->toArray(); + + $this->assertEquals(trim($text), $data['fuzzy_like_this']['like_text']); + } + + /** + * @group unit + */ + public function testSetIgnoreTF() + { + $query = new FuzzyLikeThis(); + + $ignoreTF = false; + $query->setIgnoreTF($ignoreTF); + $data = $query->toArray(); + $this->assertEquals($ignoreTF, $data['fuzzy_like_this']['ignore_tf']); + + $ignoreTF = true; + $query->setIgnoreTF($ignoreTF); + $data = $query->toArray(); + $this->assertEquals($ignoreTF, $data['fuzzy_like_this']['ignore_tf']); + } + + /** + * @group unit + */ + public function testSetIgnoreTFDefault() + { + $query = new FuzzyLikeThis(); + + $data = $query->toArray(); + + $defaultIgnoreTF = false; + $this->assertEquals($defaultIgnoreTF, $data['fuzzy_like_this']['ignore_tf']); + } + + /** + * @group unit + */ + public function testSetMinSimilarity() + { + $query = new FuzzyLikeThis(); + + $similarity = 2; + $query->setMinSimilarity($similarity); + + $data = $query->toArray(); + + $this->assertEquals($similarity, $data['fuzzy_like_this']['min_similarity']); + } + + /** + * @group unit + */ + public function testSetBoost() + { + $query = new FuzzyLikeThis(); + + $boost = 2.2; + $query->setBoost($boost); + + $data = $query->toArray(); + + $this->assertEquals($boost, $data['fuzzy_like_this']['boost']); + } + + /** + * @group unit + */ + public function testAddAnalyzerViasetParam() + { + $analyzer = 'snowball'; + + $query = new FuzzyLikeThis(); + $query->setParam('analyzer', $analyzer); + + $data = $query->toArray(); + $this->assertEquals($analyzer, $data['fuzzy_like_this']['analyzer']); + } + + /** + * @group unit + */ + public function testSetAnalyzer() + { + $analyzer = 'snowball'; + + $query = new FuzzyLikeThis(); + $query->setAnalyzer($analyzer); + + $data = $query->toArray(); + $this->assertEquals($analyzer, $data['fuzzy_like_this']['analyzer']); + } + + /** + * @group unit + */ + public function testAnalyzerNotPresentInArrayToMaintainDefaultOfField() + { + $query = new FuzzyLikeThis(); + + $data = $query->toArray(); + $this->assertArrayNotHasKey('analyzer', $data); + } + + /** + * @group unit + */ + public function testArgArrayFieldsOverwrittenBySetParams() + { + $query = new FuzzyLikeThis(); + $query->setMaxQueryTerms(100); + $query->setParam('max_query_terms', 200); + + $data = $query->toArray(); + $this->assertEquals(200, $data['fuzzy_like_this']['max_query_terms']); + } + + /** + * @group functional + */ + public function testSearchSetAnalyzer() + { + $client = $this->_getClient(); + $index = new Index($client, 'test'); + $index->create(array('analysis' => array( + 'analyzer' => array( + 'searchAnalyzer' => array( + 'type' => 'custom', + 'tokenizer' => 'standard', + 'filter' => array('myStopWords'), + ), + ), + 'filter' => array( + 'myStopWords' => array( + 'type' => 'stop', + 'stopwords' => array('The'), + ), + ), + )), true); + + $index->getSettings()->setNumberOfReplicas(0); + //$index->getSettings()->setNumberOfShards(1); + + $type = new Type($index, 'helloworldfuzzy'); + $mapping = new Mapping($type, array( + 'email' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + 'content' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + )); + + $mapping->setSource(array('enabled' => false)); + $type->setMapping($mapping); + + $type->addDocuments(array( + new Document(1000, array('email' => 'testemail@gmail.com', 'content' => 'The Fuzzy Test!')), + new Document(1001, array('email' => 'testemail@gmail.com', 'content' => 'Elastica Fuzzy Test')), + )); + + // Refresh index + $index->refresh(); + + $fltQuery = new FuzzyLikeThis(); + $fltQuery->addFields(array('email', 'content')); + $fltQuery->setLikeText('The'); + + $fltQuery->setMinSimilarity(0.1); + $fltQuery->setMaxQueryTerms(3); + + // Test before analyzer applied, should return 1 result + $resultSet = $type->search($fltQuery); + $this->assertEquals(1, $resultSet->count()); + + $fltQuery->setParam('analyzer', 'searchAnalyzer'); + + $resultSet = $type->search($fltQuery); + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testNoLikeTextProvidedShouldReturnNoResults() + { + $client = $this->_getClient(); + $index = new Index($client, 'test'); + $index->create(array(), true); + $index->getSettings()->setNumberOfReplicas(0); + + $type = new Type($index, 'helloworldfuzzy'); + $mapping = new Mapping($type, array( + 'email' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + 'content' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + )); + + $mapping->setSource(array('enabled' => false)); + $type->setMapping($mapping); + + $doc = new Document(1000, array('email' => 'testemail@gmail.com', 'content' => 'This is a sample post. Hello World Fuzzy Like This!')); + $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $fltQuery = new FuzzyLikeThis(); + $fltQuery->setLikeText(''); + $fltQuery->addFields(array('email', 'content')); + $fltQuery->setMinSimilarity(0.3); + $fltQuery->setMaxQueryTerms(3); + $resultSet = $type->search($fltQuery); + + $this->assertEquals(0, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyTest.php new file mode 100644 index 00000000..e9107232 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/FuzzyTest.php @@ -0,0 +1,136 @@ +addField('user', array('value' => 'Nicolas', 'boost' => 1.0)); + $expectedArray = array( + 'fuzzy' => array( + 'user' => array( + 'value' => 'Nicolas', + 'boost' => 1.0, + ), + ), + ); + $this->assertEquals($expectedArray, $fuzzy->toArray(), 'Deprecated method failed'); + + $fuzzy = new Fuzzy('user', 'Nicolas'); + $expectedArray = array( + 'fuzzy' => array( + 'user' => array( + 'value' => 'Nicolas', + ), + ), + ); + $this->assertEquals($expectedArray, $fuzzy->toArray()); + + $fuzzy = new Fuzzy(); + $fuzzy->setField('user', 'Nicolas')->setFieldOption('boost', 1.0); + $expectedArray = array( + 'fuzzy' => array( + 'user' => array( + 'value' => 'Nicolas', + 'boost' => 1.0, + ), + ), + ); + $this->assertEquals($expectedArray, $fuzzy->toArray()); + } + + /** + * @group functional + */ + public function testQuery() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + )); + + $index->refresh(); + + $field = 'name'; + + $query = new Fuzzy(); + $query->setField($field, 'Baden'); + + $resultSet = $index->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group unit + */ + public function testBadArguments() + { + $this->setExpectedException('Elastica\Exception\InvalidException'); + $query = new Fuzzy(); + $query->addField('name', array(array('value' => 'Baden'))); + + $this->setExpectedException('Elastica\Exception\InvalidException'); + $query = new Fuzzy(); + $query->setField('name', array()); + + $this->setExpectedException('Elastica\Exception\InvalidException'); + $query = new Fuzzy(); + $query->setField('name', 'value'); + $query->setField('name1', 'value1'); + } + + /** + * @group functional + */ + public function testFuzzyWithFacets() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + )); + + $index->refresh(); + + $field = 'name'; + + $fuzzyQuery = new Fuzzy(); + $fuzzyQuery->setField($field, 'Baden'); + + $facet = new \Elastica\Facet\Terms('test'); + $facet->setField('name'); + + $query = new \Elastica\Query($fuzzyQuery); + $query->addFacet($facet); + + $resultSet = $index->search($query); + + // Assert query worked ok + $this->assertEquals(2, $resultSet->count()); + + // Check Facets + $this->assertTrue($resultSet->hasFacets()); + $facets = $resultSet->getFacets(); + $this->assertEquals(2, $facets['test']['total']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasChildTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasChildTest.php new file mode 100644 index 00000000..a717b1ab --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasChildTest.php @@ -0,0 +1,117 @@ + array( + 'query' => $q->toArray(), + 'type' => $type, + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group unit + */ + public function testSetScope() + { + $q = new MatchAll(); + + $type = 'test'; + + $scope = 'foo'; + + $query = new HasChild($q, $type); + $query->setScope($scope); + + $expectedArray = array( + 'has_child' => array( + 'query' => $q->toArray(), + 'type' => $type, + '_scope' => $scope, + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group functional + */ + public function testTypeInsideHasChildSearch() + { + $index = $this->_getTestIndex(); + + $f = new Match(); + $f->setField('alt.name', 'testname'); + $query = new HasChild($f, 'child'); + + $searchQuery = new Query(); + $searchQuery->setQuery($query); + $searchResults = $index->search($searchQuery); + + $this->assertEquals(1, $searchResults->count()); + + $result = $searchResults->current()->getData(); + $expected = array('id' => 'parent2', 'user' => 'parent2', 'email' => 'parent2@test.com'); + + $this->assertEquals($expected, $result); + } + + protected function _getTestIndex() + { + $index = $this->_createIndex('has_child_test'); + + $parentType = $index->getType('parent'); + + $childType = $index->getType('child'); + $childMapping = new Mapping($childType); + $childMapping->setParent('parent'); + $childMapping->send(); + + $altType = $index->getType('alt'); + $altDoc = new Document('alt1', array('name' => 'altname')); + $altType->addDocument($altDoc); + + $parent1 = new Document('parent1', array('id' => 'parent1', 'user' => 'parent1', 'email' => 'parent1@test.com')); + $parentType->addDocument($parent1); + $parent2 = new Document('parent2', array('id' => 'parent2', 'user' => 'parent2', 'email' => 'parent2@test.com')); + $parentType->addDocument($parent2); + + $child1 = new Document('child1', array('id' => 'child1', 'user' => 'child1', 'email' => 'child1@test.com')); + $child1->setParent('parent1'); + $childType->addDocument($child1); + $child2 = new Document('child2', array('id' => 'child2', 'user' => 'child2', 'email' => 'child2@test.com')); + $child2->setParent('parent2'); + $childType->addDocument($child2); + $child3 = new Document('child3', array('id' => 'child3', 'user' => 'child3', 'email' => 'child3@test.com', 'alt' => array(array('name' => 'testname')))); + $child3->setParent('parent2'); + $childType->addDocument($child3); + + $index->refresh(); + + return $index; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasParentTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasParentTest.php new file mode 100644 index 00000000..31a89852 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HasParentTest.php @@ -0,0 +1,108 @@ + array( + 'query' => $q->toArray(), + 'type' => $type, + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group unit + */ + public function testSetScope() + { + $q = new MatchAll(); + + $type = 'test'; + + $scope = 'foo'; + + $query = new HasParent($q, $type); + $query->setScope($scope); + + $expectedArray = array( + 'has_parent' => array( + 'query' => $q->toArray(), + 'type' => $type, + '_scope' => $scope, + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group functional + */ + public function testHasParent() + { + $index = $this->_createIndex(); + + $shopType = $index->getType('shop'); + $productType = $index->getType('product'); + $mapping = new Mapping(); + $mapping->setParent('shop'); + $productType->setMapping($mapping); + + $shopType->addDocuments( + array( + new Document('zurich', array('brand' => 'google')), + new Document('london', array('brand' => 'apple')), + ) + ); + + $doc1 = new Document(1, array('device' => 'chromebook')); + $doc1->setParent('zurich'); + + $doc2 = new Document(2, array('device' => 'macmini')); + $doc2->setParent('london'); + + $productType->addDocument($doc1); + $productType->addDocument($doc2); + + $index->refresh(); + + // All documents + $parentQuery = new HasParent(new MatchAll(), $shopType->getName()); + $search = new Search($index->getClient()); + $results = $search->search($parentQuery); + $this->assertEquals(2, $results->count()); + + $match = new Match(); + $match->setField('brand', 'google'); + + $parentQuery = new HasParent($match, $shopType->getName()); + $search = new Search($index->getClient()); + $results = $search->search($parentQuery); + $this->assertEquals(1, $results->count()); + $result = $results->current(); + $data = $result->getData(); + $this->assertEquals($data['device'], 'chromebook'); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HighlightTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HighlightTest.php new file mode 100644 index 00000000..c6850019 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/HighlightTest.php @@ -0,0 +1,48 @@ +_createIndex(); + $type = $index->getType('helloworld'); + + $phrase = 'My name is ruflin'; + + $type->addDocuments(array( + new Document(1, array('id' => 1, 'phrase' => $phrase, 'username' => 'hanswurst', 'test' => array('2', '3', '5'))), + new Document(2, array('id' => 2, 'phrase' => $phrase, 'username' => 'peter', 'test' => array('2', '3', '5'))), + )); + + $queryString = new QueryString('rufl*'); + $query = new Query($queryString); + $query->setHighlight(array( + 'pre_tags' => array(''), + 'post_tags' => array(''), + 'fields' => array( + 'phrase' => array( + 'fragment_size' => 200, + 'number_of_fragments' => 1, + ), + ), + )); + + $index->refresh(); + + $resultSet = $type->search($query); + foreach ($resultSet as $result) { + $highlight = $result->getHighlights(); + $this->assertEquals(array('phrase' => array(0 => 'My name is ruflin')), $highlight); + } + $this->assertEquals(2, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/IdsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/IdsTest.php new file mode 100644 index 00000000..7b39020f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/IdsTest.php @@ -0,0 +1,187 @@ +_createIndex(); + + $type1 = $index->getType('helloworld1'); + $type2 = $index->getType('helloworld2'); + + $doc = new Document(1, array('name' => 'hello world')); + $type1->addDocument($doc); + + $doc = new Document(2, array('name' => 'nicolas ruflin')); + $type1->addDocument($doc); + + $doc = new Document(3, array('name' => 'ruflin')); + $type1->addDocument($doc); + + $doc = new Document(4, array('name' => 'hello world again')); + $type2->addDocument($doc); + + $index->refresh(); + + $this->_type = $type1; + $this->_index = $index; + } + + /** + * @group functional + */ + public function testSetIdsSearchSingle() + { + $query = new Ids(); + $query->setIds('1'); + + $resultSet = $this->_type->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetIdsSearchArray() + { + $query = new Ids(); + $query->setIds(array('1', '2')); + + $resultSet = $this->_type->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group functional + */ + public function testAddIdsSearchSingle() + { + $query = new Ids(); + $query->addId('3'); + + $resultSet = $this->_type->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testComboIdsSearchArray() + { + $query = new Ids(); + + $query->setIds(array('1', '2')); + $query->addId('3'); + + $resultSet = $this->_type->search($query); + + $this->assertEquals(3, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchSingle() + { + $query = new Ids(); + + $query->setIds('1'); + $query->setType('helloworld1'); + + $resultSet = $this->_index->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchArray() + { + $query = new Ids(); + + $query->setIds(array('1', '2')); + $query->setType('helloworld1'); + + $resultSet = $this->_index->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchSingleDocInOtherType() + { + $query = new Ids(); + + // Doc 4 is in the second type... + $query->setIds('4'); + $query->setType('helloworld1'); + + $resultSet = $this->_index->search($query); + + // ...therefore 0 results should be returned + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeSingleSearchArrayDocInOtherType() + { + $query = new Ids(); + + // Doc 4 is in the second type... + $query->setIds(array('1', '4')); + $query->setType('helloworld1'); + + $resultSet = $this->_index->search($query); + + // ...therefore only 1 result should be returned + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeArraySearchArray() + { + $query = new Ids(); + + $query->setIds(array('1', '4')); + $query->setType(array('helloworld1', 'helloworld2')); + + $resultSet = $this->_index->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group functional + */ + public function testSetTypeArraySearchSingle() + { + $query = new Ids(); + + $query->setIds('4'); + $query->setType(array('helloworld1', 'helloworld2')); + + $resultSet = $this->_index->search($query); + + $this->assertEquals(1, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ImageTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ImageTest.php new file mode 100644 index 00000000..989e4e4a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/ImageTest.php @@ -0,0 +1,159 @@ +_testFileContent = base64_encode(file_get_contents(BASE_PATH.'/data/test.jpg')); + } + + /** + * @group unit + */ + public function testToArrayFromReference() + { + $client = $this->_getClient(); + $index = new Index($client, 'test'); + $type = new Type($index, 'helloworld'); + $field = 'image'; + + $query = new Image(); + $query->setFieldFeature($field, 'CEDD'); + $query->setFieldHash($field, 'BIT_SAMPLING'); + $query->setFieldBoost($field, 100); + + $query->setImageByReference($field, $index->getName(), $type->getName(), 10); + + $jsonString = '{"image":{"image":{"feature":"CEDD","hash":"BIT_SAMPLING","boost":100,"index":"test","type":"helloworld","id":10,"path":"image"}}}'; + $this->assertEquals($jsonString, json_encode($query->toArray())); + } + + /** + * @group unit + */ + public function testToArrayFromImage() + { + $field = 'image'; + + $query = new Image(); + $query->setFieldFeature($field, 'CEDD'); + $query->setFieldHash($field, 'BIT_SAMPLING'); + $query->setFieldBoost($field, 100); + + $query->setFieldImage($field, BASE_PATH.'/data/test.jpg'); + + $jsonString = '{"image":{"image":{"feature":"CEDD","hash":"BIT_SAMPLING","boost":100,"image":"\/9j\/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP\/sABFEdWNreQABAAQAAAA8AAD\/4QN6aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI\/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OWQ4MjQ5N2MtNzViMS0wYzQ5LTg4ZjMtMDdiNmRhMjU0ZWRhIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA4NjBGM0Y1QkJGQTExRTM4MjQ0QzMzNjU2MjUxOEJGIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA4NjBGM0Y0QkJGQTExRTM4MjQ0QzMzNjU2MjUxOEJGIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ZDgyNDk3Yy03NWIxLTBjNDktODhmMy0wN2I2ZGEyNTRlZGEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OWQ4MjQ5N2MtNzViMS0wYzQ5LTg4ZjMtMDdiNmRhMjU0ZWRhIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+\/+4ADkFkb2JlAGTAAAAAAf\/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f\/8AAEQgAZABkAwERAAIRAQMRAf\/EAKwAAAEFAQEBAQAAAAAAAAAAAAgAAwQFBwYCAQkBAQEAAwEBAAAAAAAAAAAAAAABAgQFAwYQAAEDAgMCBQwOCQQDAAAAAAIBAwQABRESBiEHMUFhExRRcYEisnPDNIQVRRaRodEyQlJikiOzVGYnCLFyo9NklKQlGIIzQ2VTdhcRAAIBAgQEBAYDAQAAAAAAAAABAhEDITESBEFRMgVhcZFCgaHR4SITsVJiFf\/aAAwDAQACEQMRAD8AJyHDhlDYImG1JWwVVUBVVVRTkqge6DC+ztfMH3KgF0GF9na+YPuUAugwvs7XzB9ygF0GF9na+YPuUBR6n1NpDTTAuXUmgdcTFmK22JvuYfFbRMcOVdnLXje3MLa\/JmEpqOZmty32GbiparFGaa24OS1QzXlyNoiJ85a50+5y9q9Tyd7kiva3v6jQ8xwraY\/E5gh9tDrBdxueBP2s6ax74rK6YtXq0DFx2LJjIjzafrAooaJ1sa2LfcU+pUM1eXE0i3nY7jEblwUjyYzqYg62gEK+wnDyV0IzUlVOqPVNMkdBhfZ2vmD7lZFF0GF9na+YPuUBD6JF88c3zIc30fNkyphjnwxwwqkJkHxKP3oO5SoUfoBUAqA47eXr5rSlqEY6C7eJuIwmC2iKJ755xE+AGPZXZWpu9z+qOHU8jzuXNK8Qe813vd2UlV243WaWJmvbOGqcarsQQHsCKVw4Qnclh+UmamLZ3dn3UKQCd1lkprwx42CCnIrpIqqvWSuva7Uve\/Q9la5l0W6rT6hgCSQPiLnlL2iTCth9ss+PqX9aOcv27W725spEEimsDtJpRyvoicaInan2NvJWjf7dKKrB6l8\/uYuDRWaT1fdNN3BJcIlNhxU6XCVcG3hTh\/VcT4Jdhdlali+7bqsiRk0ETZrvBvFsj3KCfORZI5wVdipxKJJxEK7FSu9bmpxTWRtJ1VSbWZSF6b8m8JVA9B8Sj96DuUqAfoDNdab+dKaZvDtnGPIuk6MqDMSNkRtolTHIpuEKKaIqYoOOHHtoCz3bb07frsriMO3yIPm7ms\/SCbLPz2bDLkIuDJx0Bh2u9SHf9VXG5kalHEyYhp8WOwqiOCfKXE+zXzO4u67jkaM5VdTSt3ulAtdrB54E84zBFyUfGIr2wMovUFOHqlX0Gy2ytQ\/08\/oe8I0R3LTIinBW6ZEphGxLthx61Ggiw6Mw8zwIQrXk20zMxXexpMLZLG7xRysSTyShRMERxdouf68MC5a5HcLCi9a45+fP4nhcjTEsdx2oTbuEywun9DIBZcUV4nAVBdRP1kUS7FTt12jcfiWzLgbJXWNghem\/JvCVQPQfEo\/eg7lKgH6AC1m2u6h3hnajeVty63h9hySqZlFDkGpHgvCqCi4VQEvp3dvYNA2a+yLI7KcclxlN1ZTgubY7ZqCjlEMPfLjXncdIvyI8gfbLGR+4W1hzaDzzAn1lMca+b28azinzRoxWISEIUwxw4Vxr642mTxSqQfbCowTI+IqvUVNtYSM4nI70GG39JXNC4W2VcFeoQEhItae9VbMjG50syPdfKNnXtmUOFxxxov1TZPH9FcfaOl2J423+SCVr6A2yF6b8m8JVA9B8Sj96DuUqAfoAOtGF+MtrT\/v3vrXaoDAmRhlRH4x+9fbJsusYqK\/prGSqqBgjgj9ul82YqMm3vZCBeHPHcwVOyoV8zGsJeMX\/AAaGQRdjlNTobctgkJl4BdbVOMTTH2uCvrIyUkmsmbWZbtJjtrMhKbGsWyj2wRxrBmSM73v3lqHpd+Pm+muBDHaHjUcUJxewKVz+43KW6cZYfUwuukfM4PczbHJuuor+XFm3tOyHC6iqPNB7Z1ztjGt1eB5WlWQRdd42yF6b8m8JVA9B8Sj96DuUqA5jeTvJtWhLSzMnMPSn5hmzBjsiioTwgpojhqqIA7Npe1QA2borLf77vMtFwYiOOMx5x3C5TEAkjtoucyTnFTLiRnlEccaoDBqAH7fhpB60X71jihjbLqSJLUU2NS8MMS6gvImxfjJypXG31jTLWsma16NHUh7ud4Q2VUt1wNUtxkqsv7V5kiXFUJE282q7dnvV5Kz2W9UFon08Hy+xjCdDaIdyYkNi82Ym04mIOAqEJIvGhJsrtp1VVkexYDLbRMcajZUVWotV2qzQilXGQLDSJ2grtM1+K2HCS14Xr0barJ\/V+RXJLMH7VWp52qr10lwVajtpzcONjjzbeOOK4cJku0q+d3O4c5apYcvBGpOdXU3XdTo0tPWJX5LeS43DK48K++BtE+jbXl2qq8q11e3bdwhql1S+S4GzZhRVZ21dA9SF6b8m8JVA9B8Sj96DuUqA5feRu0tOvLbGh3CVIhlCcJ+K7GUNjhAoduJiWYUx4NnXoAbdz+p9R6f3m2yyx5riwJVwdt1wgqZLGcwU2+dFtVwE0IEJCTbxLilUBg1AVmpVsnmKYF7Fpy1uN83IbfVEA0NUERxXjIlRE5axkk1R5ElSmIKWoLQ9Y7m9HUSSOhKraEqkQCq4oKl8LBNmbjrlbrt8oOsMY\/NGq7b4Huz6juduPC2z3IxLtVts+1XrguI+1WjC7KHS3EwToXbu8PWxt5EupgnxgFsS9lBr1e8vP3My1y5lCy1e7\/cubYGTd7ia4YBmePsrtQE66ola6UpvCsn6mGLZtu7XdAtoNu66gyOXAVQmIIKhtslxEZcBmnFh2qcvDXT23b6PVcz4I2LdmmLNTrqnuKgIXpvybwlUD0HxKP3oO5SoB+gAo0Qf43WlPvC\/9c9VAa9QGC79NZjcLoOnIp5oVtJHJypwHKVO1DlRoVxX5S8lcff39UtCyWZq35VwMrLUN3Pmbc235yJ0xYhxDxJxTNcoNtn75MVWvXbbqcaLqRhCbQTunN2OloOmIlquFriy3hHnJTjrYuKr57XMDVMcEXYmHEldCduM+pI29KeZIa3XbvWjQwsETMm3aGZPYVVSvJbS1\/VE\/XHkYlvp3zav3fa8LTWlQtsK2JDjyBZKIiqrjqmhe8NtPgJxV7xilkZJULrcV+Ya86v1H6ranjRxnyGnHrdPiCTYuKymZxpxsiPAsmJCQrhs4KpTfKAVAQvTfk3hKoHoPiUfvQdylQD9ABHoYvxxtP8A7E\/9c9VAW28PV7WltNPzhUSnO\/QW5lfhPmi5VVPignbFyJWvub6twb48DCc9KqChcZZqpm44rjpkRuOltIzJcxEvKSrjXz0at1ZpGk\/l10Ot0vD2sZ7eMO2kUe0iSYoclUwdewX\/AMQrkH5Sr1K7Gzte5nvZhxCMroGyKgOe1ToPR2o4stLzZ4cx6QwrBynGGykICIuXK8qZxUVXEcF2LQAafl6JR3zaYRSXY7KDMvCuEV5NvXwoA7KAVAQvTfk3hKoHoPiUfvQdylQD9AA9oUvx0tKfeN\/656qAjN48yyXqZJ09emnIc+P9JalLATNvKirJil71xMVyOBwphtTai15XbMbkaSMZxTWJiZ7utS3a+x7PazbkdKcQFliuVGWse3dMC29oO3BMcV2Vzf8Anzi+aNd2WFhp2w27T9jhWW3BzcKA0LLI8aonCRdUiXElXq11IxSVEbKVFQsayKKgESISKK7UXYqUAAmu7A9uz1+o2K\/xJsq2yykQXoh85IikJqoty21Hm0MUVRIcxIqcOHBQBhblNb3bW+7i16juwMNz5ZPg8MUSFr6F82kVBMjVMUDFdvDQHc0BC9N+TeEqgeg+JR+9B3KVAP0ADOgy\/Ha0J95H\/rnqoDT1Fpiwajt62+9wm50VVQxFxFQgNOA2zFUNs04iBUWoCn0Xu4tGkpEx+HMmTSlZRBZ7ovkyCYrkBzKJqir8dSXZw0B1dAKgFQHl1VFo1HhQVVOvhQH567obLA1XvYsNnvIrJhzpjzs0CVfpUaBx9RNeHAyDAuSgP0Et9ut9tiNwrdFZhQ2UwajR2xaaBFXHtQBEFNvUSgJFAQvTfk3hKoHoPiUfvQdylQD9AABrKPedG7y7o2RlBu1tujs6A+qIiqJPq8w+CFsICEk9tKoO2\/yy3qIiY+aNibV6M5t5f9+oD5\/lpvV\/6j+Wc\/f0B5X82u9Xi80fyzn7+gPJfm43qim3zR\/LOfv6AZP83+9ZODzP\/LO\/v6Ag3P8ANvvZm2+TC5y2xkktk0siPHNHQQ0wUm1N0xQuoqitARPyqafn3XfDbJ0dslhWRqRJmPInaijjJstipcGYzc2Jx4L1KAO2gFQEL035N4SqBmJ546KzzfR+byDkzZ8cMEwxwoQe\/vf8N+0oU5bWfqdjH9c\/V7NgvRfO3NZsMdvN8\/twx4cKA5j8BuP1K\/pKA+fgL9yv6OgF+An3J\/o6A8r\/APAOP1I7PQ6A8F\/j1x+o\/Z6FQHgv8deP1F7PQqA7rRnq\/wCal9S\/MfmrOubzRzfMc5gmObo\/a5sOrtoC\/wD73\/DftKAX97\/hv2lARP7p50\/4Of5j5eTJn9nHGhD\/2Q=="}}}'; + $this->assertEquals($jsonString, json_encode($query->toArray())); + } + + /** + * @group functional + */ + public function testFromReference() + { + $this->markTestSkipped('Tests skipped as plugin not working properly with ES 1.6.0. See https://github.com/ruflin/Elastica/pull/881'); + $field = 'image'; + + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + $field => array( + 'type' => 'image', + 'store' => false, + 'include_in_all' => false, + 'feature' => array( + 'CEDD' => array( + 'hash' => 'BIT_SAMPLING', + ), + ), + ), + ) + ); + + $type->setMapping($mapping); + + $type->addDocuments(array( + new Document(1, array($field => $this->_testFileContent)), + new Document(2, array($field => $this->_testFileContent)), + new Document(3, array($field => $this->_testFileContent)), + )); + + $index->refresh(); + + $query = new Image(); + $query->setFieldFeature($field, 'CEDD'); + $query->setFieldHash($field, 'BIT_SAMPLING'); + $query->setFieldBoost($field, 100); + $query->setImageByReference($field, $index->getName(), $type->getName(), 1); + + $resultSet = $index->search($query); + $this->assertEquals(3, $resultSet->count()); + } + + /** + * @group functional + */ + public function testFromImage() + { + $this->markTestSkipped('Tests skipped as plugin not working properly with ES 1.6.0. See https://github.com/ruflin/Elastica/pull/881'); + + $field = 'image'; + + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + $field => array( + 'type' => 'image', + 'store' => false, + 'include_in_all' => false, + 'feature' => array( + 'CEDD' => array( + 'hash' => 'BIT_SAMPLING', + ), + ), + ), + ) + ); + + $type->setMapping($mapping); + + $type->addDocuments(array( + new Document(1, array($field => $this->_testFileContent)), + new Document(2, array($field => $this->_testFileContent)), + new Document(3, array($field => $this->_testFileContent)), + )); + + $index->refresh(); + + $query = new Image(); + $query->setFieldFeature($field, 'CEDD'); + $query->setFieldHash($field, 'BIT_SAMPLING'); + $query->setFieldBoost($field, 100); + $query->setFieldImage($field, BASE_PATH.'/data/test.jpg'); + + $resultSet = $index->search($query); + $this->assertEquals(3, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchAllTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchAllTest.php new file mode 100644 index 00000000..7eb0fae0 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchAllTest.php @@ -0,0 +1,49 @@ + new \stdClass()); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group functional + */ + public function testMatchAllIndicesTypes() + { + $index1 = $this->_createIndex(); + $index2 = $this->_createIndex(); + + $client = $index1->getClient(); + + $search1 = new Search($client); + $resultSet1 = $search1->search(new MatchAll()); + + $doc1 = new Document(1, array('name' => 'ruflin')); + $doc2 = new Document(1, array('name' => 'ruflin')); + $index1->getType('test')->addDocument($doc1); + $index2->getType('test')->addDocument($doc2); + + $index1->refresh(); + $index2->refresh(); + + $search2 = new Search($client); + $resultSet2 = $search2->search(new MatchAll()); + + $this->assertEquals($resultSet1->getTotalHits() + 2, $resultSet2->getTotalHits()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchTest.php new file mode 100644 index 00000000..98fdf26a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MatchTest.php @@ -0,0 +1,339 @@ +setFieldQuery($field, $testQuery); + $query->setFieldType($field, $type); + $query->setFieldOperator($field, $operator); + $query->setFieldAnalyzer($field, $analyzer); + $query->setFieldBoost($field, $boost); + $query->setFieldMinimumShouldMatch($field, $minimumShouldMatch); + $query->setFieldFuzziness($field, $fuzziness); + $query->setFieldFuzzyRewrite($field, $fuzzyRewrite); + $query->setFieldPrefixLength($field, $prefixLength); + $query->setFieldMaxExpansions($field, $maxExpansions); + + $expectedArray = array( + 'match' => array( + $field => array( + 'query' => $testQuery, + 'type' => $type, + 'operator' => $operator, + 'analyzer' => $analyzer, + 'boost' => $boost, + 'minimum_should_match' => $minimumShouldMatch, + 'fuzziness' => $fuzziness, + 'fuzzy_rewrite' => $fuzzyRewrite, + 'prefix_length' => $prefixLength, + 'max_expansions' => $maxExpansions, + ), + ), + ); + + $this->assertEquals($expectedArray, $query->toArray()); + } + + /** + * @group functional + */ + public function testMatch() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'New Hampshire')), + new Document(4, array('name' => 'Basel Land')), + )); + + $index->refresh(); + + $field = 'name'; + $operator = 'or'; + + $query = new Match(); + $query->setFieldQuery($field, 'Basel New'); + $query->setFieldOperator($field, $operator); + + $resultSet = $index->search($query); + + $this->assertEquals(4, $resultSet->count()); + } + + /** + * @group functional + */ + public function testMatchSetFieldBoost() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'New Hampshire')), + new Document(4, array('name' => 'Basel Land')), + )); + + $index->refresh(); + + $field = 'name'; + $operator = 'or'; + + $query = new Match(); + $query->setFieldQuery($field, 'Basel New'); + $query->setFieldOperator($field, $operator); + $query->setFieldBoost($field, 1.2); + + $resultSet = $index->search($query); + + $this->assertEquals(4, $resultSet->count()); + } + + /** + * @group functional + */ + public function testMatchSetFieldBoostWithString() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'New Hampshire')), + new Document(4, array('name' => 'Basel Land')), + )); + + $index->refresh(); + + $field = 'name'; + $operator = 'or'; + + $query = new Match(); + $query->setFieldQuery($field, 'Basel New'); + $query->setFieldOperator($field, $operator); + $query->setFieldBoost($field, '1.2'); + + $resultSet = $index->search($query); + + $this->assertEquals(4, $resultSet->count()); + } + + /** + * @group functional + */ + public function testMatchZeroTerm() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + )); + + $index->refresh(); + + $query = new Match(); + $query->setFieldQuery('name', ''); + $query->setFieldZeroTermsQuery('name', Match::ZERO_TERM_ALL); + + $resultSet = $index->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group functional + */ + public function testMatchPhrase() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'New Hampshire')), + new Document(4, array('name' => 'Basel Land')), + )); + + $index->refresh(); + + $field = 'name'; + $type = 'phrase'; + + $query = new Match(); + $query->setFieldQuery($field, 'New York'); + $query->setFieldType($field, $type); + + $resultSet = $index->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testMatchPhraseAlias() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'New Hampshire')), + new Document(4, array('name' => 'Basel Land')), + )); + + $index->refresh(); + + $field = 'name'; + + $query = new MatchPhrase(); + $query->setFieldQuery($field, 'New York'); + + $resultSet = $index->search($query); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testMatchPhrasePrefix() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'New Hampshire')), + new Document(4, array('name' => 'Basel Land')), + )); + + $index->refresh(); + + $field = 'name'; + $type = 'phrase_prefix'; + + $query = new Match(); + $query->setFieldQuery($field, 'New'); + $query->setFieldType($field, $type); + + $resultSet = $index->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group functional + */ + public function testMatchPhrasePrefixAlias() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'New Hampshire')), + new Document(4, array('name' => 'Basel Land')), + )); + + $index->refresh(); + + $field = 'name'; + + $query = new MatchPhrasePrefix(); + $query->setFieldQuery($field, 'New'); + + $resultSet = $index->search($query); + + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group unit + */ + public function testMatchFuzzinessType() + { + $field = 'test'; + $query = new Match(); + + $fuzziness = 'AUTO'; + $query->setFieldFuzziness($field, $fuzziness); + + $parameters = $query->getParam($field); + $this->assertEquals($fuzziness, $parameters['fuzziness']); + + $fuzziness = 0.3; + $query->setFieldFuzziness($field, $fuzziness); + + $parameters = $query->getParam($field); + $this->assertEquals($fuzziness, $parameters['fuzziness']); + } + + /** + * @group unit + */ + public function testConstruct() + { + $match = new Match(null, 'values'); + $this->assertEquals(array('match' => array()), $match->toArray()); + + $match = new Match('field', null); + $this->assertEquals(array('match' => array()), $match->toArray()); + + $match1 = new Match('field', 'values'); + $match2 = new Match(); + $match2->setField('field', 'values'); + $this->assertEquals($match1->toArray(), $match2->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MoreLikeThisTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MoreLikeThisTest.php new file mode 100644 index 00000000..5dfe9379 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MoreLikeThisTest.php @@ -0,0 +1,240 @@ +_getClient(); + $index = new Index($client, 'test'); + $index->create(array(), true); + $index->getSettings()->setNumberOfReplicas(0); + //$index->getSettings()->setNumberOfShards(1); + + $type = new Type($index, 'helloworldmlt'); + $mapping = new Mapping($type, array( + 'email' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + 'content' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), + )); + + $mapping->setSource(array('enabled' => false)); + $type->setMapping($mapping); + + $doc = new Document(1000, array('email' => 'testemail@gmail.com', 'content' => 'This is a sample post. Hello World Fuzzy Like This!')); + $type->addDocument($doc); + + $doc = new Document(1001, array('email' => 'nospam@gmail.com', 'content' => 'This is a fake nospam email address for gmail')); + $type->addDocument($doc); + + // Refresh index + $index->refresh(); + + $mltQuery = new MoreLikeThis(); + $mltQuery->setLikeText('fake gmail sample'); + $mltQuery->setFields(array('email', 'content')); + $mltQuery->setMaxQueryTerms(1); + $mltQuery->setMinDocFrequency(1); + $mltQuery->setMinTermFrequency(1); + + $query = new Query(); + $query->setFields(array('email', 'content')); + $query->setQuery($mltQuery); + + $resultSet = $type->search($query); + $resultSet->getResponse()->getData(); + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group unit + */ + public function testSetFields() + { + $query = new MoreLikeThis(); + + $fields = array('firstname', 'lastname'); + $query->setFields($fields); + + $data = $query->toArray(); + $this->assertEquals($fields, $data['more_like_this']['fields']); + } + + /** + * @group unit + */ + public function testSetIds() + { + $query = new MoreLikeThis(); + $ids = array(1, 2, 3); + $query->setIds($ids); + + $data = $query->toArray(); + $this->assertEquals($ids, $data['more_like_this']['ids']); + } + + /** + * @group unit + */ + public function testSetLikeText() + { + $query = new MoreLikeThis(); + $query->setLikeText(' hello world'); + + $data = $query->toArray(); + $this->assertEquals('hello world', $data['more_like_this']['like_text']); + } + + /** + * @group unit + */ + public function testSetBoost() + { + $query = new MoreLikeThis(); + + $boost = 1.3; + $query->setBoost($boost); + + $this->assertEquals($boost, $query->getParam('boost')); + } + + /** + * @group unit + */ + public function testSetMaxQueryTerms() + { + $query = new MoreLikeThis(); + + $max = 3; + $query->setMaxQueryTerms($max); + + $this->assertEquals($max, $query->getParam('max_query_terms')); + } + + /** + * @group unit + */ + public function testSetPercentTermsToMatch() + { + $query = new MoreLikeThis(); + + $match = 0.8; + $query->setPercentTermsToMatch($match); + + $this->assertEquals($match, $query->getParam('percent_terms_to_match')); + } + + /** + * @group unit + */ + public function testSetMinimumShouldMatch() + { + $query = new MoreLikeThis(); + + $match = '80%'; + $query->setMinimumShouldMatch($match); + + $this->assertEquals($match, $query->getParam('minimum_should_match')); + } + + /** + * @group unit + */ + public function testSetMinDocFrequency() + { + $query = new MoreLikeThis(); + + $freq = 2; + $query->setMinDocFrequency($freq); + + $this->assertEquals($freq, $query->getParam('min_doc_freq')); + } + + /** + * @group unit + */ + public function testSetMaxDocFrequency() + { + $query = new MoreLikeThis(); + + $freq = 2; + $query->setMaxDocFrequency($freq); + + $this->assertEquals($freq, $query->getParam('max_doc_freq')); + } + + /** + * @group unit + */ + public function testSetMinWordLength() + { + $query = new MoreLikeThis(); + + $length = 4; + $query->setMinWordLength($length); + + $this->assertEquals($length, $query->getParam('min_word_length')); + } + + /** + * @group unit + */ + public function testSetMaxWordLength() + { + $query = new MoreLikeThis(); + + $length = 5; + $query->setMaxWordLength($length); + + $this->assertEquals($length, $query->getParam('max_word_length')); + } + + /** + * @group unit + */ + public function testSetBoostTerms() + { + $query = new MoreLikeThis(); + + $boost = false; + $query->setBoostTerms($boost); + + $this->assertEquals($boost, $query->getParam('boost_terms')); + } + + /** + * @group unit + */ + public function testSetAnalyzer() + { + $query = new MoreLikeThis(); + + $analyzer = 'UpperCase'; + $query->setAnalyzer($analyzer); + + $this->assertEquals($analyzer, $query->getParam('analyzer')); + } + + /** + * @group unit + */ + public function testSetStopWords() + { + $query = new MoreLikeThis(); + + $stopWords = array('no', 'yes', 'test'); + $query->setStopWords($stopWords); + + $this->assertEquals($stopWords, $query->getParam('stop_words')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MultiMatchTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MultiMatchTest.php new file mode 100644 index 00000000..e32f91af --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/MultiMatchTest.php @@ -0,0 +1,214 @@ + 1, 'name' => 'Rodolfo', 'last_name' => 'Moraes', 'full_name' => 'Rodolfo Moraes'), + array('id' => 2, 'name' => 'Tristan', 'last_name' => 'Maindron', 'full_name' => 'Tristan Maindron'), + array('id' => 3, 'name' => 'Monique', 'last_name' => 'Maindron', 'full_name' => 'Monique Maindron'), + array('id' => 4, 'name' => 'John', 'last_name' => 'not Doe', 'full_name' => 'John not Doe'), + ); + + /** + * @group functional + */ + public function testMinimumShouldMatch() + { + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Tristan Maindron'); + $multiMatch->setFields(array('full_name', 'name')); + $multiMatch->setMinimumShouldMatch('2<100%'); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testAndOperator() + { + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Monique Maindron'); + $multiMatch->setFields(array('full_name', 'name')); + $multiMatch->setOperator(MultiMatch::OPERATOR_AND); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testType() + { + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Trist'); + $multiMatch->setFields(array('full_name', 'name')); + $multiMatch->setType(MultiMatch::TYPE_PHRASE_PREFIX); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testFuzzy() + { + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Tritsan'); // Mispell on purpose + $multiMatch->setFields(array('full_name', 'name')); + $multiMatch->setFuzziness(2); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(1, $resultSet->count()); + + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Tritsan'); // Mispell on purpose + $multiMatch->setFields(array('full_name', 'name')); + $multiMatch->setFuzziness(0); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testFuzzyWithOptions1() + { + // Here Elasticsearch will not accept mispells + // on the first 6 letters. + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Tritsan'); // Mispell on purpose + $multiMatch->setFields(array('full_name', 'name')); + $multiMatch->setFuzziness(2); + $multiMatch->setPrefixLength(6); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(0, $resultSet->count()); + } + + /** + * @group functional + */ + public function testFuzzyWithOptions2() + { + // Here with a 'M' search we should hit 'Moraes' first + // and then stop because MaxExpansion = 1. + // If MaxExpansion was set to 2, we could hit "Maindron" too. + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('M'); + $multiMatch->setFields(array('name')); + $multiMatch->setType(MultiMatch::TYPE_PHRASE_PREFIX); + $multiMatch->setPrefixLength(0); + $multiMatch->setMaxExpansions(1); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testZeroTerm() + { + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('not'); // This is a stopword. + $multiMatch->setFields(array('full_name', 'last_name')); + $multiMatch->setZeroTermsQuery(MultiMatch::ZERO_TERM_NONE); + $multiMatch->setAnalyzer('stops'); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(0, $resultSet->count()); + + $multiMatch->setZeroTermsQuery(MultiMatch::ZERO_TERM_ALL); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(4, $resultSet->count()); + } + + /** + * @group functional + */ + public function testBaseMultiMatch() + { + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Rodolfo'); + $multiMatch->setFields(array('name', 'last_name')); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(1, $resultSet->count()); + + $multiMatch = new MultiMatch(); + $multiMatch->setQuery('Moraes'); + $multiMatch->setFields(array('name', 'last_name')); + $resultSet = $this->_getResults($multiMatch); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * Executes the query with the current multimatch. + */ + private function _getResults(MultiMatch $multiMatch) + { + return $this->_generateIndex()->search(new Query($multiMatch)); + } + + /** + * Builds an index for testing. + */ + private function _generateIndex() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $index->create(array( + 'analysis' => array( + 'analyzer' => array( + 'noStops' => array( + 'type' => 'standard', + 'stopwords' => '_none_', + ), + 'stops' => array( + 'type' => 'standard', + 'stopwords' => array('not'), + ), + ), + ), + ), true); + + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no', 'analyzer' => 'noStops'), + 'last_name' => array('type' => 'string', 'store' => 'no', 'analyzer' => 'noStops'), + 'full_name' => array('type' => 'string', 'store' => 'no', 'analyzer' => 'noStops'), + )); + + $type->setMapping($mapping); + + foreach (self::$data as $key => $docData) { + $type->addDocument(new Document($key, $docData)); + } + + // Refresh index + $index->refresh(); + + return $index; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/NestedTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/NestedTest.php new file mode 100644 index 00000000..1b5fc368 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/NestedTest.php @@ -0,0 +1,30 @@ +assertInstanceOf('Elastica\Query\Nested', $nested->setQuery($queryString)); + $this->assertInstanceOf('Elastica\Query\Nested', $nested->setPath($path)); + $expected = array( + 'nested' => array( + 'query' => $queryString->toArray(), + 'path' => $path, + ), + ); + + $this->assertEquals($expected, $nested->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PostFilterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PostFilterTest.php new file mode 100644 index 00000000..178c803e --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PostFilterTest.php @@ -0,0 +1,64 @@ +_createIndex(); + $docs = array( + new Document(1, array('color' => 'green', 'make' => 'ford')), + new Document(2, array('color' => 'blue', 'make' => 'volvo')), + new Document(3, array('color' => 'red', 'make' => 'ford')), + new Document(4, array('color' => 'green', 'make' => 'renault')), + ); + $index->getType('test')->addDocuments($docs); + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $query = new Query(); + + $post_filter = new Term(array('color' => 'green')); + $query->setPostFilter($post_filter); + + $data = $query->toArray(); + + $this->assertArrayHasKey('post_filter', $data); + $this->assertEquals(array('term' => array('color' => 'green')), $data['post_filter']); + } + + /** + * @group functional + */ + public function testQuery() + { + $query = new Query(); + + $match = new Match(); + $match->setField('make', 'ford'); + + $query->setQuery($match); + + $filter = new Term(); + $filter->setTerm('color', 'green'); + + $query->setPostFilter($filter); + + $results = $this->_getTestIndex()->search($query); + + $this->assertEquals(1, $results->getTotalHits()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PrefixTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PrefixTest.php new file mode 100644 index 00000000..e12ead05 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/PrefixTest.php @@ -0,0 +1,27 @@ +setPrefix($key, $value, $boost); + + $data = $query->toArray(); + + $this->assertInternalType('array', $data['prefix']); + $this->assertInternalType('array', $data['prefix'][$key]); + $this->assertEquals($data['prefix'][$key]['value'], $value); + $this->assertEquals($data['prefix'][$key]['boost'], $boost); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/QueryStringTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/QueryStringTest.php new file mode 100644 index 00000000..5b549a30 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/QueryStringTest.php @@ -0,0 +1,189 @@ + $str, + ); + + $this->assertEquals(array('query_string' => $expected), $query->toArray()); + + $fields = array(); + $max = rand() % 10 + 1; + for ($i = 0; $i < $max; $i++) { + $fields[] = md5(rand()); + } + + $query->setFields($fields); + $expected['fields'] = $fields; + $this->assertEquals(array('query_string' => $expected), $query->toArray()); + + foreach (array(false, true) as $val) { + $query->setUseDisMax($val); + $expected['use_dis_max'] = $val; + + $this->assertEquals(array('query_string' => $expected), $query->toArray()); + } + } + + /** + * @group functional + */ + public function testSearch() + { + $index = $this->_createIndex(); + $index->getSettings()->setNumberOfReplicas(0); + $type = $index->getType('helloworld'); + + $doc = new Document(1, array('email' => 'test@test.com', 'username' => 'hanswurst', 'test' => array('2', '3', '5'))); + $type->addDocument($doc); + $index->refresh(); + + $queryString = new QueryString('test*'); + $resultSet = $type->search($queryString); + + $this->assertEquals(1, $resultSet->count()); + } + + /** + * Tests if search in multiple fields is possible. + * + * @group functional + */ + public function testSearchFields() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $doc = new Document(1, array('title' => 'hello world', 'firstname' => 'nicolas', 'lastname' => 'ruflin', 'price' => '102', 'year' => '2012')); + $type->addDocument($doc); + $index->refresh(); + + $query = new QueryString(); + $query = $query->setQuery('ruf*'); + $query = $query->setDefaultField('title'); + $query = $query->setFields(array('title', 'firstname', 'lastname', 'price', 'year')); + + $resultSet = $type->search($query); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group unit + */ + public function testSetDefaultOperator() + { + $operator = 'AND'; + $query = new QueryString('test'); + $query->setDefaultOperator($operator); + + $data = $query->toArray(); + + $this->assertEquals($data['query_string']['default_operator'], $operator); + } + + /** + * @group unit + */ + public function testSetDefaultField() + { + $default = 'field1'; + $query = new QueryString('test'); + $query->setDefaultField($default); + + $data = $query->toArray(); + + $this->assertEquals($data['query_string']['default_field'], $default); + } + + /** + * @group unit + */ + public function testSetRewrite() + { + $rewrite = 'scoring_boolean'; + $query = new QueryString('test'); + $query->setRewrite($rewrite); + + $data = $query->toArray(); + + $this->assertEquals($data['query_string']['rewrite'], $rewrite); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testSetQueryInvalid() + { + $query = new QueryString(); + $query->setQuery(array()); + } + + /** + * @group unit + */ + public function testSetTimezone() + { + $timezone = 'Europe/Paris'; + $text = 'date:[2012 TO 2014]'; + + $query = new QueryString($text); + $query->setTimezone($timezone); + + $expected = array( + 'query_string' => array( + 'query' => $text, + 'time_zone' => $timezone, + ), + ); + + $this->assertEquals($expected, $query->toArray()); + $this->assertInstanceOf('Elastica\Query\QueryString', $query->setTimezone($timezone)); + } + + /** + * @group unit + */ + public function testSetPhraseSlop() + { + $phraseSlop = 9; + + $query = new QueryString('test'); + $query->setPhraseSlop($phraseSlop); + + $data = $query->toArray(); + $this->assertEquals($phraseSlop, $data['query_string']['phrase_slop']); + } + + /** + * @group functional + */ + public function testSetBoost() + { + $index = $this->_createIndex(); + $query = new QueryString('test'); + $query->setBoost(9.3); + + $doc = new Document('', array('name' => 'test')); + $index->getType('test')->addDocument($doc); + $index->refresh(); + + $resultSet = $index->search($query); + + $this->assertEquals(1, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RangeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RangeTest.php new file mode 100644 index 00000000..108ef0c9 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RangeTest.php @@ -0,0 +1,79 @@ +_getClient(); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('age' => 16, 'height' => 140)), + new Document(2, array('age' => 21, 'height' => 155)), + new Document(3, array('age' => 33, 'height' => 160)), + new Document(4, array('age' => 68, 'height' => 160)), + )); + + $index->optimize(); + $index->refresh(); + + $query = new Range('age', array('from' => 10, 'to' => 20)); + $result = $type->search($query)->count(); + $this->assertEquals(1, $result); + + $query = new Range(); + $query->addField('height', array('gte' => 160)); + + $result = $type->search($query)->count(); + $this->assertEquals(2, $result); + } + + /** + * @group unit + */ + public function testToArray() + { + $range = new Range(); + + $field = array('from' => 20, 'to' => 40); + $range->addField('age', $field); + + $expectedArray = array( + 'range' => array( + 'age' => $field, + ), + ); + + $this->assertEquals($expectedArray, $range->toArray()); + } + + /** + * @group unit + */ + public function testConstruct() + { + $ranges = array('from' => 20, 'to' => 40); + $range = new Range( + 'age', + $ranges + ); + + $expectedArray = array( + 'range' => array( + 'age' => $ranges, + ), + ); + + $this->assertEquals($expectedArray, $range->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RegexpTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RegexpTest.php new file mode 100644 index 00000000..c67e6317 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RegexpTest.php @@ -0,0 +1,31 @@ + array( + $field => array( + 'value' => $value, + 'boost' => $boost, + ), + ), + ); + + $this->assertequals($expectedArray, $query->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RescoreTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RescoreTest.php new file mode 100644 index 00000000..87842b0f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/RescoreTest.php @@ -0,0 +1,236 @@ +setFieldQuery('test1', 'foo'); + $secQuery = new Term(); + $secQuery = $secQuery->setTerm('test2', 'bar', 2); + $queryRescore = new QueryRescore($secQuery); + $query->setQuery($mainQuery); + $query->setRescore($queryRescore); + $data = $query->toArray(); + + $expected = array( + 'query' => array( + 'match' => array( + 'test1' => array( + 'query' => 'foo', + ), + ), + ), + 'rescore' => array( + 'query' => array( + 'rescore_query' => array( + 'term' => array( + 'test2' => array( + 'value' => 'bar', + 'boost' => 2, + ), + ), + ), + ), + ), + ); + + $this->assertEquals($expected, $data); + } + + /** + * @group unit + */ + public function testSetSize() + { + $query = new Query(); + $mainQuery = new Match(); + $mainQuery = $mainQuery->setFieldQuery('test1', 'foo'); + $secQuery = new Term(); + $secQuery = $secQuery->setTerm('test2', 'bar', 2); + $queryRescore = new QueryRescore($secQuery); + $queryRescore->setWindowSize(50); + $query->setQuery($mainQuery); + $query->setRescore($queryRescore); + $data = $query->toArray(); + + $expected = array( + 'query' => array( + 'match' => array( + 'test1' => array( + 'query' => 'foo', + ), + ), + ), + 'rescore' => array( + 'window_size' => 50, + 'query' => array( + 'rescore_query' => array( + 'term' => array( + 'test2' => array( + 'value' => 'bar', + 'boost' => 2, + ), + ), + ), + ), + ), + ); + + $this->assertEquals($expected, $data); + } + + /** + * @group unit + */ + public function testSetWeights() + { + $query = new Query(); + $mainQuery = new Match(); + $mainQuery = $mainQuery->setFieldQuery('test1', 'foo'); + $secQuery = new Term(); + $secQuery = $secQuery->setTerm('test2', 'bar', 2); + $queryRescore = new QueryRescore($secQuery); + $queryRescore->setWindowSize(50); + $queryRescore->setQueryWeight(.7); + $queryRescore->setRescoreQueryWeight(1.2); + $query->setQuery($mainQuery); + $query->setRescore($queryRescore); + $data = $query->toArray(); + + $expected = array( + 'query' => array( + 'match' => array( + 'test1' => array( + 'query' => 'foo', + ), + ), + ), + 'rescore' => array( + 'window_size' => 50, + 'query' => array( + 'rescore_query' => array( + 'term' => array( + 'test2' => array( + 'value' => 'bar', + 'boost' => 2, + ), + ), + ), + 'query_weight' => 0.7, + 'rescore_query_weight' => 1.2, + ), + ), + ); + + $this->assertEquals($expected, $data); + } + + /** + * @group functional + */ + public function testMultipleQueries() + { + $query = new Query(); + $mainQuery = new Match(); + $mainQuery = $mainQuery->setFieldQuery('test1', 'foo'); + + $secQuery1 = new Term(); + $secQuery1 = $secQuery1->setTerm('test2', 'bar', 1); + $rescoreQuery1 = new QueryRescore(); + $rescoreQuery1->setRescoreQuery($secQuery1); + + $secQuery2 = new Term(); + $secQuery2 = $secQuery2->setTerm('test2', 'tom', 2); + $rescoreQuery2 = new QueryRescore(); + $rescoreQuery2->setRescoreQuery($secQuery2); + + $query->setQuery($mainQuery); + $query->setRescore(array($rescoreQuery1, $rescoreQuery2)); + $data = $query->toArray(); + + $expected = array( + 'query' => array( + 'match' => array( + 'test1' => array( + 'query' => 'foo', + ), + ), + ), + 'rescore' => array( + array( + 'query' => array( + 'rescore_query' => array( + 'term' => array( + 'test2' => array( + 'value' => 'bar', + 'boost' => 1, + ), + ), + ), + ), + ), + array( + 'query' => array( + 'rescore_query' => array( + 'term' => array( + 'test2' => array( + 'value' => 'tom', + 'boost' => 2, + ), + ), + ), + ), + ), + ), + ); + + $this->assertEquals($expected, $data); + + $index = $this->_createIndex(); + $index->refresh(); + $results = $index->search($query); + $response = $results->getResponse(); + + $this->assertEquals(true, $response->isOk()); + $this->assertEquals(0, $results->getTotalHits()); + } + + /** + * @group functional + */ + public function testQuery() + { + $query = new Query(); + $mainQuery = new Match(); + $mainQuery = $mainQuery->setFieldQuery('test1', 'foo'); + $secQuery = new Term(); + $secQuery = $secQuery->setTerm('test2', 'bar', 2); + $queryRescore = new QueryRescore($secQuery); + $queryRescore->setWindowSize(50); + $queryRescore->setQueryWeight(.7); + $queryRescore->setRescoreQueryWeight(1.2); + $query->setQuery($mainQuery); + $query->setRescore($queryRescore); + $data = $query->toArray(); + + $index = $this->_createIndex(); + $index->refresh(); + $results = $index->search($query); + $response = $results->getResponse(); + + $this->assertEquals(true, $response->isOk()); + $this->assertEquals(0, $results->getTotalHits()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleQueryStringTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleQueryStringTest.php new file mode 100644 index 00000000..80316547 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleQueryStringTest.php @@ -0,0 +1,103 @@ +setDefaultOperator(SimpleQueryString::OPERATOR_OR); + $query->setAnalyzer('whitespace'); + + $expected = array( + 'simple_query_string' => array( + 'query' => $string, + 'fields' => $fields, + 'analyzer' => 'whitespace', + 'default_operator' => SimpleQueryString::OPERATOR_OR, + ), + ); + + $this->assertEquals($expected, $query->toArray()); + } + + /** + * @group functional + */ + public function testQuery() + { + $index = $this->_createIndex(); + $docs = array( + new Document(1, array('make' => 'Gibson', 'model' => 'Les Paul')), + new Document(2, array('make' => 'Gibson', 'model' => 'SG Standard')), + new Document(3, array('make' => 'Gibson', 'model' => 'SG Supreme')), + new Document(4, array('make' => 'Gibson', 'model' => 'SG Faded')), + new Document(5, array('make' => 'Fender', 'model' => 'Stratocaster')), + ); + $index->getType('guitars')->addDocuments($docs); + $index->refresh(); + + $query = new SimpleQueryString('gibson +sg +-faded', array('make', 'model')); + $results = $index->search($query); + + $this->assertEquals(2, $results->getTotalHits()); + + $query->setFields(array('model')); + $results = $index->search($query); + + // We should not get any hits, since the "make" field was not included in the query. + $this->assertEquals(0, $results->getTotalHits()); + } + + /** + * @group unit + */ + public function testSetMinimumShouldMatch() + { + $expected = array( + 'simple_query_string' => array( + 'query' => 'DONT PANIC', + 'minimum_should_match' => '75%', + ), + ); + + $query = new SimpleQueryString($expected['simple_query_string']['query']); + $query->setMinimumShouldMatch($expected['simple_query_string']['minimum_should_match']); + + $this->assertEquals($expected, $query->toArray()); + $this->assertInstanceOf('Elastica\Query\SimpleQueryString', $query->setMinimumShouldMatch('75%')); + } + + /** + * @group functional + */ + public function testSetMinimumShouldMatchWorks() + { + $index = $this->_createIndex(); + $type = $index->getType('foobars'); + $type->addDocuments(array( + new Document(1, array('body' => 'foo')), + new Document(2, array('body' => 'bar')), + new Document(3, array('body' => 'foo bar')), + new Document(4, array('body' => 'foo baz bar')), + )); + $index->refresh(); + + $query = new SimpleQueryString('foo bar'); + $query->setMinimumShouldMatch(2); + $results = $type->search($query); + + $this->assertCount(2, $results); + $this->assertEquals(3, $results[0]->getId()); + $this->assertEquals(4, $results[1]->getId()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleTest.php new file mode 100644 index 00000000..b4f1dc8d --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/SimpleTest.php @@ -0,0 +1,19 @@ + array('world'), 'name' => 'ruflin'); + $query = new Simple($testQuery); + + $this->assertEquals($testQuery, $query->toArray()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermTest.php new file mode 100644 index 00000000..da15f0f2 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermTest.php @@ -0,0 +1,27 @@ +setTerm($key, $value, $boost); + + $data = $query->toArray(); + + $this->assertInternalType('array', $data['term']); + $this->assertInternalType('array', $data['term'][$key]); + $this->assertEquals($data['term'][$key]['value'], $value); + $this->assertEquals($data['term'][$key]['boost'], $boost); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermsTest.php new file mode 100644 index 00000000..f0c2b4b4 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/TermsTest.php @@ -0,0 +1,65 @@ +_createIndex(); + $type = $index->getType('helloworld'); + + $type->addDocuments(array( + new Document(1, array('name' => 'hello world')), + new Document(2, array('name' => 'nicolas ruflin')), + new Document(3, array('name' => 'ruflin')), + )); + + $query = new Terms(); + $query->setTerms('name', array('nicolas', 'hello')); + + $index->refresh(); + + $resultSet = $type->search($query); + + $this->assertEquals(2, $resultSet->count()); + + $query->addTerm('ruflin'); + $resultSet = $type->search($query); + + $this->assertEquals(3, $resultSet->count()); + } + + /** + * @group unit + */ + public function testSetMinimum() + { + $key = 'name'; + $terms = array('nicolas', 'ruflin'); + $minimum = 2; + + $query = new Terms($key, $terms); + $query->setMinimumMatch($minimum); + + $data = $query->toArray(); + $this->assertEquals($minimum, $data['terms']['minimum_match']); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testInvalidParams() + { + $query = new Terms(); + + $query->toArray(); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/WildcardTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/WildcardTest.php new file mode 100644 index 00000000..7a0c379e --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/WildcardTest.php @@ -0,0 +1,106 @@ +assertEmpty($wildcard->getParams()); + } + + /** + * @group unit + */ + public function testToArray() + { + $key = 'name'; + $value = 'Ru*lin'; + $boost = 2.0; + + $wildcard = new Wildcard($key, $value, $boost); + + $expectedArray = array( + 'wildcard' => array( + $key => array( + 'value' => $value, + 'boost' => $boost, + ), + ), + ); + + $this->assertEquals($expectedArray, $wildcard->toArray()); + } + + /** + * @group functional + */ + public function testSearchWithAnalyzer() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $indexParams = array( + 'analysis' => array( + 'analyzer' => array( + 'lw' => array( + 'type' => 'custom', + 'tokenizer' => 'keyword', + 'filter' => array('lowercase'), + ), + ), + ), + ); + + $index->create($indexParams, true); + $type = $index->getType('test'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no', 'analyzer' => 'lw'), + ) + ); + $type->setMapping($mapping); + + $type->addDocuments(array( + new Document(1, array('name' => 'Basel-Stadt')), + new Document(2, array('name' => 'New York')), + new Document(3, array('name' => 'Baden')), + new Document(4, array('name' => 'Baden Baden')), + new Document(5, array('name' => 'New Orleans')), + )); + + $index->refresh(); + + $query = new Wildcard(); + $query->setValue('name', 'ba*'); + $resultSet = $index->search($query); + + $this->assertEquals(3, $resultSet->count()); + + $query = new Wildcard(); + $query->setValue('name', 'baden*'); + $resultSet = $index->search($query); + + $this->assertEquals(2, $resultSet->count()); + + $query = new Wildcard(); + $query->setValue('name', 'baden b*'); + $resultSet = $index->search($query); + + $this->assertEquals(1, $resultSet->count()); + + $query = new Wildcard(); + $query->setValue('name', 'baden bas*'); + $resultSet = $index->search($query); + + $this->assertEquals(0, $resultSet->count()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AbstractDSLTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AbstractDSLTest.php new file mode 100644 index 00000000..3e44f463 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AbstractDSLTest.php @@ -0,0 +1,97 @@ +assertTrue(method_exists($dsl, $methodName)); + + // Check returned value + $return = call_user_func_array(array($dsl, $methodName), $arguments); + $this->assertTrue(class_exists($className), 'Class not exists but NotImplementedException is not thrown'); + $this->assertInstanceOf($className, $return); + + // Check method signature + $class = new \ReflectionClass($className); + $method = new \ReflectionMethod(get_class($dsl), $methodName); + if (!$class->hasMethod('__construct')) { + $this->assertEmpty($method->getParameters(), 'Constructor is not defined, but method has some parameters'); + } else { + $this->_assertParametersEquals($class->getMethod('__construct')->getParameters(), $method->getParameters()); + } + } + + /** + * @param DSL $dsl + * @param string $name + */ + protected function _assertNotImplemented(DSL $dsl, $methodName, $arguments) + { + try { + call_user_func(array($dsl, $methodName), $arguments); + $this->fail('NotImplementedException is not thrown'); + } catch (NotImplementedException $ex) { + // expected + } + } + + /** + * @param \ReflectionParameter[] $left + * @param \ReflectionParameter[] $right + */ + protected function _assertParametersEquals($left, $right) + { + $this->assertEquals(count($left), count($right), 'Parameters count mismatch'); + + for ($i = 0; $i < count($left); $i++) { + $this->assertEquals($left[$i]->getName(), $right[$i]->getName(), 'Parameters names mismatch'); + $this->assertEquals($left[$i]->isOptional(), $right[$i]->isOptional(), 'Parameters optionality mismatch'); + $this->assertEquals($this->_getHintName($left[$i]), $this->_getHintName($right[$i]), 'Parameters typehints mismatch'); + $this->assertEquals($this->_getDefaultValue($left[$i]), $this->_getDefaultValue($right[$i]), 'Default values mismatch'); + } + } + + /** + * @param \ReflectionParameter $param + * + * @return string|null + */ + protected function _getDefaultValue(\ReflectionParameter $param) + { + if ($param->isOptional()) { + return $param->getDefaultValue(); + } + } + + /** + * @param \ReflectionParameter $param + * + * @return string|null + */ + protected function _getHintName(\ReflectionParameter $param) + { + if (version_compare(phpversion(), '5.4', '>=') && $param->isCallable()) { + return 'callable'; + } + + if ($param->isArray()) { + return 'array'; + } + + if ($class = $param->getClass()) { + return $class->getName(); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AggregationTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AggregationTest.php new file mode 100644 index 00000000..67c70862 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/AggregationTest.php @@ -0,0 +1,58 @@ +assertInstanceOf('Elastica\QueryBuilder\DSL', $aggregationDSL); + $this->assertEquals(DSL::TYPE_AGGREGATION, $aggregationDSL->getType()); + } + + /** + * @group unit + */ + public function testInterface() + { + $aggregationDSL = new DSL\Aggregation(); + + $this->_assertImplemented($aggregationDSL, 'avg', 'Elastica\Aggregation\Avg', array('name')); + $this->_assertImplemented($aggregationDSL, 'cardinality', 'Elastica\Aggregation\Cardinality', array('name')); + $this->_assertImplemented($aggregationDSL, 'date_histogram', 'Elastica\Aggregation\DateHistogram', array('name', 'field', 1)); + $this->_assertImplemented($aggregationDSL, 'date_range', 'Elastica\Aggregation\DateRange', array('name')); + $this->_assertImplemented($aggregationDSL, 'extended_stats', 'Elastica\Aggregation\ExtendedStats', array('name')); + $this->_assertImplemented($aggregationDSL, 'filter', 'Elastica\Aggregation\Filter', array('name', new Exists('field'))); + $this->_assertImplemented($aggregationDSL, 'filters', 'Elastica\Aggregation\Filters', array('name')); + $this->_assertImplemented($aggregationDSL, 'geo_distance', 'Elastica\Aggregation\GeoDistance', array('name', 'field', 'origin')); + $this->_assertImplemented($aggregationDSL, 'geohash_grid', 'Elastica\Aggregation\GeohashGrid', array('name', 'field')); + $this->_assertImplemented($aggregationDSL, 'global_agg', 'Elastica\Aggregation\GlobalAggregation', array('name')); + $this->_assertImplemented($aggregationDSL, 'histogram', 'Elastica\Aggregation\Histogram', array('name', 'field', 1)); + $this->_assertImplemented($aggregationDSL, 'ipv4_range', 'Elastica\Aggregation\IpRange', array('name', 'field')); + $this->_assertImplemented($aggregationDSL, 'max', 'Elastica\Aggregation\Max', array('name')); + $this->_assertImplemented($aggregationDSL, 'min', 'Elastica\Aggregation\Min', array('name')); + $this->_assertImplemented($aggregationDSL, 'missing', 'Elastica\Aggregation\Missing', array('name', 'field')); + $this->_assertImplemented($aggregationDSL, 'nested', 'Elastica\Aggregation\Nested', array('name', 'path')); + $this->_assertImplemented($aggregationDSL, 'percentiles', 'Elastica\Aggregation\Percentiles', array('name')); + $this->_assertImplemented($aggregationDSL, 'range', 'Elastica\Aggregation\Range', array('name')); + $this->_assertImplemented($aggregationDSL, 'reverse_nested', 'Elastica\Aggregation\ReverseNested', array('name')); + $this->_assertImplemented($aggregationDSL, 'scripted_metric', 'Elastica\Aggregation\ScriptedMetric', array('name')); + $this->_assertImplemented($aggregationDSL, 'significant_terms', 'Elastica\Aggregation\SignificantTerms', array('name')); + $this->_assertImplemented($aggregationDSL, 'stats', 'Elastica\Aggregation\Stats', array('name')); + $this->_assertImplemented($aggregationDSL, 'sum', 'Elastica\Aggregation\Sum', array('name')); + $this->_assertImplemented($aggregationDSL, 'terms', 'Elastica\Aggregation\Terms', array('name')); + $this->_assertImplemented($aggregationDSL, 'top_hits', 'Elastica\Aggregation\TopHits', array('name')); + $this->_assertImplemented($aggregationDSL, 'value_count', 'Elastica\Aggregation\ValueCount', array('name', 'field')); + + $this->_assertNotImplemented($aggregationDSL, 'children', array('name')); + $this->_assertNotImplemented($aggregationDSL, 'geo_bounds', array('name')); + $this->_assertNotImplemented($aggregationDSL, 'percentile_ranks', array('name')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/FilterTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/FilterTest.php new file mode 100644 index 00000000..755bd18a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/FilterTest.php @@ -0,0 +1,58 @@ +assertInstanceOf('Elastica\QueryBuilder\DSL', $filterDSL); + $this->assertEquals(DSL::TYPE_FILTER, $filterDSL->getType()); + } + + /** + * @group unit + */ + public function testInterface() + { + $filterDSL = new DSL\Filter(); + + $this->_assertImplemented($filterDSL, 'bool', 'Elastica\Filter\BoolFilter', array()); + $this->_assertImplemented($filterDSL, 'bool_and', 'Elastica\Filter\BoolAnd', array(array(new Exists('field')))); + $this->_assertImplemented($filterDSL, 'bool_not', 'Elastica\Filter\BoolNot', array(new Exists('field'))); + $this->_assertImplemented($filterDSL, 'bool_or', 'Elastica\Filter\BoolOr', array(array(new Exists('field')))); + $this->_assertImplemented($filterDSL, 'exists', 'Elastica\Filter\Exists', array('field')); + $this->_assertImplemented($filterDSL, 'geo_bounding_box', 'Elastica\Filter\GeoBoundingBox', array('field', array(1, 2))); + $this->_assertImplemented($filterDSL, 'geo_distance', 'Elastica\Filter\GeoDistance', array('key', 'location', 'distance')); + $this->_assertImplemented($filterDSL, 'geo_distance_range', 'Elastica\Filter\GeoDistanceRange', array('key', 'location')); + $this->_assertImplemented($filterDSL, 'geo_polygon', 'Elastica\Filter\GeoPolygon', array('key', array())); + $this->_assertImplemented($filterDSL, 'geo_shape_pre_indexed', 'Elastica\Filter\GeoShapePreIndexed', array('path', 'indexedId', 'indexedType', 'indexedIndex', 'indexedPath')); + $this->_assertImplemented($filterDSL, 'geo_shape_provided', 'Elastica\Filter\GeoShapeProvided', array('path', array())); + $this->_assertImplemented($filterDSL, 'geohash_cell', 'Elastica\Filter\GeohashCell', array('field', 'location')); + $this->_assertImplemented($filterDSL, 'has_child', 'Elastica\Filter\HasChild', array(new Match(), 'type')); + $this->_assertImplemented($filterDSL, 'has_parent', 'Elastica\Filter\HasParent', array(new Match(), 'type')); + $this->_assertImplemented($filterDSL, 'ids', 'Elastica\Filter\Ids', array('type', array())); + $this->_assertImplemented($filterDSL, 'indices', 'Elastica\Filter\Indices', array(new Exists('field'), array())); + $this->_assertImplemented($filterDSL, 'limit', 'Elastica\Filter\Limit', array(1)); + $this->_assertImplemented($filterDSL, 'match_all', 'Elastica\Filter\MatchAll', array()); + $this->_assertImplemented($filterDSL, 'missing', 'Elastica\Filter\Missing', array('field')); + $this->_assertImplemented($filterDSL, 'nested', 'Elastica\Filter\Nested', array()); + $this->_assertImplemented($filterDSL, 'numeric_range', 'Elastica\Filter\NumericRange', array()); + $this->_assertImplemented($filterDSL, 'prefix', 'Elastica\Filter\Prefix', array('field', 'prefix')); + $this->_assertImplemented($filterDSL, 'query', 'Elastica\Filter\Query', array(new Match())); + $this->_assertImplemented($filterDSL, 'range', 'Elastica\Filter\Range', array('field', array())); + $this->_assertImplemented($filterDSL, 'regexp', 'Elastica\Filter\Regexp', array('field', 'regex')); + $this->_assertImplemented($filterDSL, 'script', 'Elastica\Filter\Script', array('script')); + $this->_assertImplemented($filterDSL, 'term', 'Elastica\Filter\Term', array()); + $this->_assertImplemented($filterDSL, 'terms', 'Elastica\Filter\Terms', array('field', array())); + $this->_assertImplemented($filterDSL, 'type', 'Elastica\Filter\Type', array('type')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/QueryTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/QueryTest.php new file mode 100644 index 00000000..d4669119 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/QueryTest.php @@ -0,0 +1,85 @@ +assertInstanceOf('Elastica\QueryBuilder\DSL', $queryDSL); + $this->assertEquals(DSL::TYPE_QUERY, $queryDSL->getType()); + } + + /** + * @group unit + */ + public function testMatch() + { + $queryDSL = new DSL\Query(); + + $match = $queryDSL->match('field', 'match'); + $this->assertEquals('match', $match->getParam('field')); + $this->assertInstanceOf('Elastica\Query\Match', $match); + } + + /** + * @group unit + */ + public function testInterface() + { + $queryDSL = new DSL\Query(); + + $this->_assertImplemented($queryDSL, 'bool', 'Elastica\Query\BoolQuery', array()); + $this->_assertImplemented($queryDSL, 'boosting', 'Elastica\Query\Boosting', array()); + $this->_assertImplemented($queryDSL, 'common_terms', 'Elastica\Query\Common', array('field', 'query', 0.001)); + $this->_assertImplemented($queryDSL, 'constant_score', 'Elastica\Query\ConstantScore', array(new Match())); + $this->_assertImplemented($queryDSL, 'dis_max', 'Elastica\Query\DisMax', array()); + $this->_assertImplemented($queryDSL, 'filtered', 'Elastica\Query\Filtered', array(new Match(), new Exists('field'))); + $this->_assertImplemented($queryDSL, 'function_score', 'Elastica\Query\FunctionScore', array()); + $this->_assertImplemented($queryDSL, 'fuzzy', 'Elastica\Query\Fuzzy', array('field', 'type')); + $this->_assertImplemented($queryDSL, 'fuzzy_like_this', 'Elastica\Query\FuzzyLikeThis', array()); + $this->_assertImplemented($queryDSL, 'has_child', 'Elastica\Query\HasChild', array(new Match())); + $this->_assertImplemented($queryDSL, 'has_parent', 'Elastica\Query\HasParent', array(new Match(), 'type')); + $this->_assertImplemented($queryDSL, 'ids', 'Elastica\Query\Ids', array('type', array())); + $this->_assertImplemented($queryDSL, 'match', 'Elastica\Query\Match', array('field', 'values')); + $this->_assertImplemented($queryDSL, 'match_all', 'Elastica\Query\MatchAll', array()); + $this->_assertImplemented($queryDSL, 'more_like_this', 'Elastica\Query\MoreLikeThis', array()); + $this->_assertImplemented($queryDSL, 'multi_match', 'Elastica\Query\MultiMatch', array()); + $this->_assertImplemented($queryDSL, 'nested', 'Elastica\Query\Nested', array()); + $this->_assertImplemented($queryDSL, 'prefix', 'Elastica\Query\Prefix', array()); + $this->_assertImplemented($queryDSL, 'query_string', 'Elastica\Query\QueryString', array()); + $this->_assertImplemented($queryDSL, 'range', 'Elastica\Query\Range', array('field', array())); + $this->_assertImplemented($queryDSL, 'regexp', 'Elastica\Query\Regexp', array('field', 'value', 1.0)); + $this->_assertImplemented($queryDSL, 'simple_query_string', 'Elastica\Query\SimpleQueryString', array('query')); + $this->_assertImplemented($queryDSL, 'term', 'Elastica\Query\Term', array()); + $this->_assertImplemented($queryDSL, 'terms', 'Elastica\Query\Terms', array('field', array())); + $this->_assertImplemented($queryDSL, 'top_children', 'Elastica\Query\TopChildren', array(new Match(), 'type')); + $this->_assertImplemented($queryDSL, 'wildcard', 'Elastica\Query\Wildcard', array()); + + $this->_assertNotImplemented($queryDSL, 'custom_boost_factor', array()); + $this->_assertNotImplemented($queryDSL, 'custom_filters_score', array()); + $this->_assertNotImplemented($queryDSL, 'custom_score', array()); + $this->_assertNotImplemented($queryDSL, 'field', array()); + $this->_assertNotImplemented($queryDSL, 'fuzzy_like_this_field', array()); + $this->_assertNotImplemented($queryDSL, 'geo_shape', array()); + $this->_assertNotImplemented($queryDSL, 'indices', array()); + $this->_assertNotImplemented($queryDSL, 'minimum_should_match', array()); + $this->_assertNotImplemented($queryDSL, 'more_like_this_field', array()); + $this->_assertNotImplemented($queryDSL, 'span_first', array()); + $this->_assertNotImplemented($queryDSL, 'span_multi_term', array()); + $this->_assertNotImplemented($queryDSL, 'span_near', array()); + $this->_assertNotImplemented($queryDSL, 'span_not', array()); + $this->_assertNotImplemented($queryDSL, 'span_or', array()); + $this->_assertNotImplemented($queryDSL, 'span_term', array()); + $this->_assertNotImplemented($queryDSL, 'template', array()); + $this->_assertNotImplemented($queryDSL, 'text', array()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/SuggestTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/SuggestTest.php new file mode 100644 index 00000000..b70e0ba7 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/DSL/SuggestTest.php @@ -0,0 +1,32 @@ +assertInstanceOf('Elastica\QueryBuilder\DSL', $suggestDSL); + $this->assertEquals(DSL::TYPE_SUGGEST, $suggestDSL->getType()); + } + + /** + * @group unit + */ + public function testInterface() + { + $suggestDSL = new DSL\Suggest(); + + $this->_assertImplemented($suggestDSL, 'completion', 'Elastica\Suggest\Completion', array('name', 'field')); + $this->_assertImplemented($suggestDSL, 'phrase', 'Elastica\Suggest\Phrase', array('name', 'field')); + $this->_assertImplemented($suggestDSL, 'term', 'Elastica\Suggest\Term', array('name', 'field')); + + $this->_assertNotImplemented($suggestDSL, 'context', array()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/VersionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/VersionTest.php new file mode 100644 index 00000000..d92848a7 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilder/VersionTest.php @@ -0,0 +1,67 @@ +assertVersions($version, $dsl); + } + } + + private function assertVersions(Version $version, array $dsl) + { + foreach ($version->getQueries() as $query) { + $this->assertTrue( + method_exists($dsl[0], $query), + 'query "'.$query.'" in '.get_class($version).' must be defined in '.get_class($dsl[0]) + ); + } + + foreach ($version->getFilters() as $filter) { + $this->assertTrue( + method_exists($dsl[1], $filter), + 'filter "'.$filter.'" in '.get_class($version).' must be defined in '.get_class($dsl[1]) + ); + } + + foreach ($version->getAggregations() as $aggregation) { + $this->assertTrue( + method_exists($dsl[2], $aggregation), + 'aggregation "'.$aggregation.'" in '.get_class($version).' must be defined in '.get_class($dsl[2]) + ); + } + + foreach ($version->getSuggesters() as $suggester) { + $this->assertTrue( + method_exists($dsl[3], $suggester), + 'suggester "'.$suggester.'" in '.get_class($version).' must be defined in '.get_class($dsl[3]) + ); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilderTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilderTest.php new file mode 100644 index 00000000..6cbfd37b --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryBuilderTest.php @@ -0,0 +1,88 @@ +addDSL(new CustomDSL()); + + $this->assertTrue($qb->custom()->custom_method(), 'custom DSL execution failed'); + + // test custom DSL exception message + $exceptionMessage = ''; + try { + $qb->invalid(); + } catch (QueryBuilderException $exception) { + $exceptionMessage = $exception->getMessage(); + } + + $this->assertEquals('DSL "invalid" not supported', $exceptionMessage); + } + + /** + * @group unit + */ + public function testFacade() + { + $qb = new QueryBuilder(); + + // test one example QueryBuilder flow for each default DSL type + $this->assertInstanceOf('Elastica\Query\AbstractQuery', $qb->query()->match()); + $this->assertInstanceOf('Elastica\Filter\AbstractFilter', $qb->filter()->bool()); + $this->assertInstanceOf('Elastica\Aggregation\AbstractAggregation', $qb->aggregation()->avg('name')); + $this->assertInstanceOf('Elastica\Suggest\AbstractSuggest', $qb->suggest()->term('name', 'field')); + } + + /** + * @group unit + */ + public function testFacadeException() + { + $qb = new QueryBuilder(new QueryBuilder\Version\Version100()); + + // undefined + $exceptionMessage = ''; + try { + $qb->query()->invalid(); + } catch (QueryBuilderException $exception) { + $exceptionMessage = $exception->getMessage(); + } + + $this->assertEquals('undefined query "invalid"', $exceptionMessage); + + // unsupported + $exceptionMessage = ''; + try { + $qb->aggregation()->top_hits('top_hits'); + } catch (QueryBuilderException $exception) { + $exceptionMessage = $exception->getMessage(); + } + + $this->assertEquals('aggregation "top_hits" in Version100 not supported', $exceptionMessage); + } +} + +class CustomDSL implements QueryBuilder\DSL +{ + public function getType() + { + return 'custom'; + } + + public function custom_method() + { + return true; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryTest.php new file mode 100644 index 00000000..a39ab23a --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/QueryTest.php @@ -0,0 +1,458 @@ +toArray(); + + $this->assertInternalType('array', $queryArray); + + $this->assertEquals('2011-07-18 00:00:00', $queryArray['query']['filtered']['filter']['range']['due']['gte']); + } + + /** + * @group unit + */ + public function testRawQuery() + { + $textQuery = new Term(array('title' => 'test')); + + $query1 = Query::create($textQuery); + + $query2 = new Query(); + $query2->setRawQuery(array('query' => array('term' => array('title' => 'test')))); + + $this->assertEquals($query1->toArray(), $query2->toArray()); + } + + /** + * @group unit + */ + public function testSuggestShouldNotRemoveOtherParameters() + { + $query1 = new Query(); + $query2 = new Query(); + + $suggest = new Suggest(); + $suggest->setGlobalText('test'); + + $query1->setSize(40); + $query1->setSuggest($suggest); + + $query2->setSuggest($suggest); + $query2->setSize(40); + + $this->assertEquals($query1->toArray(), $query2->toArray()); + } + + /** + * @group unit + */ + public function testSetSuggestMustReturnQueryInstance() + { + $query = new Query(); + $suggest = new Suggest(); + $this->assertInstanceOf('Elastica\Query', $query->setSuggest($suggest)); + } + + /** + * @group unit + */ + public function testArrayQuery() + { + $query = array( + 'query' => array( + 'text' => array( + 'title' => 'test', + ), + ), + ); + + $query1 = Query::create($query); + + $query2 = new Query(); + $query2->setRawQuery(array('query' => array('text' => array('title' => 'test')))); + + $this->assertEquals($query1->toArray(), $query2->toArray()); + } + + /** + * @group functional + */ + public function testSetSort() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'hello world')), + new Document(2, array('firstname' => 'guschti', 'lastname' => 'ruflin')), + new Document(3, array('firstname' => 'nicolas', 'lastname' => 'ruflin')), + )); + + $queryTerm = new Term(); + $queryTerm->setTerm('lastname', 'ruflin'); + + $index->refresh(); + + $query = Query::create($queryTerm); + + // ASC order + $query->setSort(array(array('firstname' => array('order' => 'asc')))); + $resultSet = $type->search($query); + $this->assertEquals(2, $resultSet->count()); + + $first = $resultSet->current()->getData(); + $second = $resultSet->next()->getData(); + + $this->assertEquals('guschti', $first['firstname']); + $this->assertEquals('nicolas', $second['firstname']); + + // DESC order + $query->setSort(array('firstname' => array('order' => 'desc'))); + $resultSet = $type->search($query); + $this->assertEquals(2, $resultSet->count()); + + $first = $resultSet->current()->getData(); + $second = $resultSet->next()->getData(); + + $this->assertEquals('nicolas', $first['firstname']); + $this->assertEquals('guschti', $second['firstname']); + } + + /** + * @group unit + */ + public function testAddSort() + { + $query = new Query(); + $sortParam = array('firstname' => array('order' => 'asc')); + $query->addSort($sortParam); + + $this->assertEquals($query->getParam('sort'), array($sortParam)); + } + + /** + * @group unit + */ + public function testSetRawQuery() + { + $query = new Query(); + + $params = array('query' => 'test'); + $query->setRawQuery($params); + + $this->assertEquals($params, $query->toArray()); + } + + /** + * @group unit + */ + public function testSetFields() + { + $query = new Query(); + + $params = array('query' => 'test'); + + $query->setFields(array('firstname', 'lastname')); + + $data = $query->toArray(); + + $this->assertContains('firstname', $data['fields']); + $this->assertContains('lastname', $data['fields']); + $this->assertCount(2, $data['fields']); + } + + /** + * @group unit + */ + public function testGetQuery() + { + $query = new Query(); + + try { + $query->getQuery(); + $this->fail('should throw exception because query does not exist'); + } catch (InvalidException $e) { + $this->assertTrue(true); + } + + $termQuery = new Term(); + $termQuery->setTerm('text', 'value'); + $query->setQuery($termQuery); + + $this->assertEquals($termQuery->toArray(), $query->getQuery()); + } + + /** + * @group unit + */ + public function testSetFacets() + { + $query = new Query(); + + $facet = new Terms('text'); + $query->setFacets(array($facet)); + + $data = $query->toArray(); + + $this->assertArrayHasKey('facets', $data); + $this->assertEquals(array('text' => array('terms' => array())), $data['facets']); + + $query->setFacets(array()); + + $this->assertArrayNotHasKey('facets', $query->toArray()); + } + + /** + * @group unit + */ + public function testSetQueryToArrayCast() + { + $query = new Query(); + $termQuery = new Term(); + $termQuery->setTerm('text', 'value'); + $query->setQuery($termQuery); + + $termQuery->setTerm('text', 'another value'); + + $anotherQuery = new Query(); + $anotherQuery->setQuery($termQuery); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group unit + */ + public function testSetQueryToArrayChangeQuery() + { + $query = new Query(); + $termQuery = new Term(); + $termQuery->setTerm('text', 'value'); + $query->setQuery($termQuery); + + $queryArray = $query->toArray(); + + $termQuery = $query->getQuery(); + $termQuery['term']['text']['value'] = 'another value'; + + $this->assertEquals($queryArray, $query->toArray()); + } + + /** + * @group unit + */ + public function testSetScriptFieldsToArrayCast() + { + $query = new Query(); + $scriptFields = new ScriptFields(); + $scriptFields->addScript('script', new Script('script')); + + $query->setScriptFields($scriptFields); + + $scriptFields->addScript('another script', new Script('another script')); + + $anotherQuery = new Query(); + $anotherQuery->setScriptFields($scriptFields); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group unit + */ + public function testAddScriptFieldsToArrayCast() + { + $query = new Query(); + $scriptField = new Script('script'); + + $query->addScriptField('script', $scriptField); + + $scriptField->setScript('another script'); + + $anotherQuery = new Query(); + $anotherQuery->addScriptField('script', $scriptField); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group unit + */ + public function testAddFacetToArrayCast() + { + $query = new Query(); + $facet = new Terms('text'); + + $query->addFacet($facet); + + $facet->setName('another text'); + + $anotherQuery = new Query(); + $anotherQuery->addFacet($facet); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group unit + */ + public function testAddAggregationToArrayCast() + { + $query = new Query(); + $aggregation = new \Elastica\Aggregation\Terms('text'); + + $query->addAggregation($aggregation); + + $aggregation->setName('another text'); + + $anotherQuery = new Query(); + $anotherQuery->addAggregation($aggregation); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group unit + */ + public function testSetSuggestToArrayCast() + { + $query = new Query(); + $suggest = new Suggest(); + $suggest->setGlobalText('text'); + + $query->setSuggest($suggest); + + $suggest->setGlobalText('another text'); + + $anotherQuery = new Query(); + $anotherQuery->setSuggest($suggest); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group unit + */ + public function testSetRescoreToArrayCast() + { + $query = new Query(); + $rescore = new \Elastica\Rescore\Query(); + $rescore->setQueryWeight(1); + + $query->setRescore($rescore); + + $rescore->setQueryWeight(2); + + $anotherQuery = new Query(); + $anotherQuery->setRescore($rescore); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group unit + */ + public function testSetPostFilterToArrayCast() + { + $query = new Query(); + $postFilter = new \Elastica\Filter\Terms(); + $postFilter->setTerms('key', array('term')); + $query->setPostFilter($postFilter); + + $postFilter->setTerms('another key', array('another term')); + + $anotherQuery = new Query(); + $anotherQuery->setPostFilter($postFilter); + + $this->assertNotEquals($query->toArray(), $anotherQuery->toArray()); + } + + /** + * @group functional + */ + public function testNoSource() + { + $index = $this->_createIndex(); + + $type = new Type($index, 'user'); + + // Adds 1 document to the index + $doc1 = new Document(1, + array('username' => 'ruflin', 'test' => array('2', '3', '5')) + ); + $type->addDocument($doc1); + + // To update index + $index->refresh(); + + $query = Query::create('ruflin'); + $resultSet = $type->search($query); + + // Disable source + $query->setSource(false); + + $resultSetNoSource = $type->search($query); + + $this->assertEquals(1, $resultSet->count()); + $this->assertEquals(1, $resultSetNoSource->count()); + + // Tests if no source is in response except id + $result = $resultSetNoSource->current(); + $this->assertEquals(1, $result->getId()); + $this->assertEmpty($result->getData()); + + // Tests if source is in response except id + $result = $resultSet->current(); + $this->assertEquals(1, $result->getId()); + $this->assertNotEmpty($result->getData()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/RequestTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/RequestTest.php new file mode 100644 index 00000000..987f2391 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/RequestTest.php @@ -0,0 +1,95 @@ + 'params'); + $data = array('key' => 'value'); + + $request = new Request($path, $method, $data, $query); + + $this->assertEquals($path, $request->getPath()); + $this->assertEquals($method, $request->getMethod()); + $this->assertEquals($query, $request->getQuery()); + $this->assertEquals($data, $request->getData()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testInvalidConnection() + { + $request = new Request('', Request::GET); + $request->send(); + } + + /** + * @group functional + */ + public function testSend() + { + $connection = new Connection(); + $connection->setHost($this->_getHost()); + $connection->setPort('9200'); + + $request = new Request('_status', Request::GET, array(), array(), $connection); + + $response = $request->send(); + + $this->assertInstanceOf('Elastica\Response', $response); + } + + /** + * @group unit + */ + public function testToString() + { + $path = 'test'; + $method = Request::POST; + $query = array('no' => 'params'); + $data = array('key' => 'value'); + + $connection = new Connection(); + $connection->setHost($this->_getHost()); + $connection->setPort('9200'); + + $request = new Request($path, $method, $data, $query, $connection); + + $data = $request->toArray(); + + $this->assertInternalType('array', $data); + $this->assertArrayHasKey('method', $data); + $this->assertArrayHasKey('path', $data); + $this->assertArrayHasKey('query', $data); + $this->assertArrayHasKey('data', $data); + $this->assertArrayHasKey('connection', $data); + $this->assertEquals($request->getMethod(), $data['method']); + $this->assertEquals($request->getPath(), $data['path']); + $this->assertEquals($request->getQuery(), $data['query']); + $this->assertEquals($request->getData(), $data['data']); + $this->assertInternalType('array', $data['connection']); + $this->assertArrayHasKey('host', $data['connection']); + $this->assertArrayHasKey('port', $data['connection']); + $this->assertEquals($request->getConnection()->getHost(), $data['connection']['host']); + $this->assertEquals($request->getConnection()->getPort(), $data['connection']['port']); + + $string = $request->toString(); + + $this->assertInternalType('string', $string); + + $string = (string) $request; + $this->assertInternalType('string', $string); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ResponseTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ResponseTest.php new file mode 100644 index 00000000..e7b83ade --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ResponseTest.php @@ -0,0 +1,205 @@ +assertInstanceOf('Elastica\Facet\Histogram', $facet); + $this->assertInstanceOf('Elastica\Facet\AbstractFacet', $facet); + unset($facet); + } + + /** + * @group functional + */ + public function testResponse() + { + $index = $this->_createIndex(); + $type = $index->getType('helloworld'); + + $mapping = new Mapping($type, array( + 'name' => array('type' => 'string', 'store' => 'no'), + 'dtmPosted' => array('type' => 'date', 'store' => 'no', 'format' => 'yyyy-MM-dd HH:mm:ss'), + )); + $type->setMapping($mapping); + + $type->addDocuments(array( + new Document(1, array('name' => 'nicolas ruflin', 'dtmPosted' => '2011-06-23 21:53:00')), + new Document(2, array('name' => 'raul martinez jr', 'dtmPosted' => '2011-06-23 09:53:00')), + new Document(3, array('name' => 'rachelle clemente', 'dtmPosted' => '2011-07-08 08:53:00')), + new Document(4, array('name' => 'elastica search', 'dtmPosted' => '2011-07-08 01:53:00')), + )); + + $query = new Query(); + $query->setQuery(new MatchAll()); + $index->refresh(); + + $resultSet = $type->search($query); + + $engineTime = $resultSet->getResponse()->getEngineTime(); + $shardsStats = $resultSet->getResponse()->getShardsStatistics(); + + $this->assertInternalType('int', $engineTime); + $this->assertTrue(is_array($shardsStats)); + $this->assertArrayHasKey('total', $shardsStats); + $this->assertArrayHasKey('successful', $shardsStats); + } + + /** + * @group functional + */ + public function testIsOk() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $doc = new Document(1, array('name' => 'ruflin')); + $response = $type->addDocument($doc); + + $this->assertTrue($response->isOk()); + } + + /** + * @group functional + */ + public function testIsOkMultiple() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $docs = array( + new Document(1, array('name' => 'ruflin')), + new Document(2, array('name' => 'ruflin')), + ); + $response = $type->addDocuments($docs); + + $this->assertTrue($response->isOk()); + } + + /** + * @group unit + */ + public function testIsOkBulkWithErrorsField() + { + $response = new Response(json_encode(array( + 'took' => 213, + 'errors' => false, + 'items' => array( + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707891', '_version' => 4, 'status' => 200)), + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707893', '_version' => 4, 'status' => 200)), + ), + ))); + + $this->assertTrue($response->isOk()); + } + + /** + * @group unit + */ + public function testIsNotOkBulkWithErrorsField() + { + $response = new Response(json_encode(array( + 'took' => 213, + 'errors' => true, + 'items' => array( + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707891', '_version' => 4, 'status' => 200)), + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707893', '_version' => 4, 'status' => 200)), + ), + ))); + + $this->assertFalse($response->isOk()); + } + + /** + * @group unit + */ + public function testIsOkBulkItemsWithOkField() + { + $response = new Response(json_encode(array( + 'took' => 213, + 'items' => array( + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707891', '_version' => 4, 'ok' => true)), + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707893', '_version' => 4, 'ok' => true)), + ), + ))); + + $this->assertTrue($response->isOk()); + } + + /** + * @group unit + */ + public function testIsNotOkBulkItemsWithOkField() + { + $response = new Response(json_encode(array( + 'took' => 213, + 'items' => array( + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707891', '_version' => 4, 'ok' => true)), + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707893', '_version' => 4, 'ok' => false)), + ), + ))); + + $this->assertFalse($response->isOk()); + } + + /** + * @group unit + */ + public function testIsOkBulkItemsWithStatusField() + { + $response = new Response(json_encode(array( + 'took' => 213, + 'items' => array( + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707891', '_version' => 4, 'status' => 200)), + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707893', '_version' => 4, 'status' => 200)), + ), + ))); + + $this->assertTrue($response->isOk()); + } + + /** + * @group unit + */ + public function testIsNotOkBulkItemsWithStatusField() + { + $response = new Response(json_encode(array( + 'took' => 213, + 'items' => array( + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707891', '_version' => 4, 'status' => 200)), + array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707893', '_version' => 4, 'status' => 301)), + ), + ))); + + $this->assertFalse($response->isOk()); + } + + /** + * @group functional + */ + public function testGetDataEmpty() + { + $index = $this->_createIndex(); + + $response = $index->request( + 'non-existant-type/_mapping', + Request::GET + )->getData(); + + $this->assertEquals(0, count($response)); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ResultSetTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ResultSetTest.php new file mode 100644 index 00000000..be76d4a2 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ResultSetTest.php @@ -0,0 +1,95 @@ +_createIndex(); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'elastica search')), + new Document(2, array('name' => 'elastica library')), + new Document(3, array('name' => 'elastica test')), + )); + $index->refresh(); + + $resultSet = $type->search('elastica search'); + + $this->assertInstanceOf('Elastica\ResultSet', $resultSet); + $this->assertEquals(3, $resultSet->getTotalHits()); + $this->assertGreaterThan(0, $resultSet->getMaxScore()); + $this->assertInternalType('array', $resultSet->getResults()); + $this->assertEquals(3, count($resultSet)); + } + + /** + * @group functional + */ + public function testArrayAccess() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $type->addDocuments(array( + new Document(1, array('name' => 'elastica search')), + new Document(2, array('name' => 'elastica library')), + new Document(3, array('name' => 'elastica test')), + )); + $index->refresh(); + + $resultSet = $type->search('elastica search'); + + $this->assertInstanceOf('Elastica\ResultSet', $resultSet); + $this->assertInstanceOf('Elastica\Result', $resultSet[0]); + $this->assertInstanceOf('Elastica\Result', $resultSet[1]); + $this->assertInstanceOf('Elastica\Result', $resultSet[2]); + + $this->assertFalse(isset($resultSet[3])); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\InvalidException + */ + public function testInvalidOffsetCreation() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $doc = new Document(1, array('name' => 'elastica search')); + $type->addDocument($doc); + $index->refresh(); + + $resultSet = $type->search('elastica search'); + + $result = new Result(array('_id' => 'fakeresult')); + $resultSet[1] = $result; + } + + /** + * @group functional + * @expectedException \Elastica\Exception\InvalidException + */ + public function testInvalidOffsetGet() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $doc = new Document(1, array('name' => 'elastica search')); + $type->addDocument($doc); + $index->refresh(); + + $resultSet = $type->search('elastica search'); + + return $resultSet[3]; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ResultTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ResultTest.php new file mode 100644 index 00000000..a905fcc5 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ResultTest.php @@ -0,0 +1,131 @@ +_createIndex(); + $type = $index->getType($typeName); + + // Adds 1 document to the index + $docId = 3; + $doc1 = new Document($docId, array('username' => 'hans')); + $type->addDocument($doc1); + + // Refreshes index + $index->refresh(); + + $resultSet = $type->search('hans'); + + $this->assertEquals(1, $resultSet->count()); + + $result = $resultSet->current(); + + $this->assertInstanceOf('Elastica\Result', $result); + $this->assertEquals($index->getName(), $result->getIndex()); + $this->assertEquals($typeName, $result->getType()); + $this->assertEquals($docId, $result->getId()); + $this->assertGreaterThan(0, $result->getScore()); + $this->assertInternalType('array', $result->getData()); + $this->assertTrue(isset($result->username)); + $this->assertEquals('hans', $result->username); + } + + /** + * @group functional + */ + public function testGetIdNoSource() + { + // Creates a new index 'xodoa' and a type 'user' inside this index + $indexName = 'xodoa'; + $typeName = 'user'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + $type = $index->getType($typeName); + + $mapping = new Mapping($type); + $mapping->disableSource(); + $mapping->send(); + + // Adds 1 document to the index + $docId = 3; + $doc1 = new Document($docId, array('username' => 'hans')); + $type->addDocument($doc1); + + // Refreshes index + $index->refresh(); + + $resultSet = $type->search('hans'); + + $this->assertEquals(1, $resultSet->count()); + + $result = $resultSet->current(); + + $this->assertEquals(array(), $result->getSource()); + $this->assertInstanceOf('Elastica\Result', $result); + $this->assertEquals($indexName, $result->getIndex()); + $this->assertEquals($typeName, $result->getType()); + $this->assertEquals($docId, $result->getId()); + $this->assertGreaterThan(0, $result->getScore()); + $this->assertInternalType('array', $result->getData()); + } + + /** + * @group functional + */ + public function testGetTotalTimeReturnsExpectedResults() + { + $typeName = 'user'; + $index = $this->_createIndex(); + $type = $index->getType($typeName); + + // Adds 1 document to the index + $docId = 3; + $doc1 = new Document($docId, array('username' => 'hans')); + $type->addDocument($doc1); + + // Refreshes index + $index->refresh(); + + $resultSet = $type->search('hans'); + + $this->assertNotNull($resultSet->getTotalTime(), 'Get Total Time should never be a null value'); + $this->assertEquals( + 'integer', + getType($resultSet->getTotalTime()), + 'Total Time should be an integer' + ); + } + + /** + * @group unit + */ + public function testHasFields() + { + $data = array('value set'); + + $result = new Result(array()); + $this->assertFalse($result->hasFields()); + + $result = new Result(array('_source' => $data)); + $this->assertFalse($result->hasFields()); + + $result = new Result(array('fields' => $data)); + $this->assertTrue($result->hasFields()); + $this->assertEquals($data, $result->getFields()); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ScanAndScrollTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScanAndScrollTest.php new file mode 100644 index 00000000..9f06f9e6 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScanAndScrollTest.php @@ -0,0 +1,78 @@ +_prepareSearch(), '1m', 2); + $docCount = 0; + + /** @var ResultSet $resultSet */ + foreach ($scanAndScroll as $scrollId => $resultSet) { + $docCount += $resultSet->count(); + } + + /* + * number of loops and documents per iteration may fluctuate + * => only test end results + */ + $this->assertEquals(12, $docCount); + } + + /** + * query size revert options. + * + * @group functional + */ + public function testQuerySizeRevert() + { + $search = $this->_prepareSearch(); + $search->getQuery()->setSize(9); + + $scanAndScroll = new ScanAndScroll($search); + + $scanAndScroll->rewind(); + $this->assertEquals(9, $search->getQuery()->getParam('size')); + + $scanAndScroll->next(); + $this->assertEquals(9, $search->getQuery()->getParam('size')); + } + + /** + * index: 12 docs, 2 shards. + * + * @return Search + */ + private function _prepareSearch() + { + $index = $this->_createIndex('', true, 2); + $index->refresh(); + + $docs = array(); + for ($x = 1; $x <= 12; $x++) { + $docs[] = new Document($x, array('id' => $x, 'key' => 'value')); + } + + $type = $index->getType('scanAndScrollTest'); + $type->addDocuments($docs); + $index->refresh(); + + $search = new Search($this->_getClient()); + $search->addIndex($index)->addType($type); + + return $search; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptFieldsTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptFieldsTest.php new file mode 100644 index 00000000..5448209d --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptFieldsTest.php @@ -0,0 +1,93 @@ +addScript('test', $script); + $this->assertEquals($scriptFields->getParam('test'), $script->toArray()); + + // setScripts + $scriptFields = new ScriptFields(); + $scriptFields->setScripts(array( + 'test' => $script, + )); + $this->assertEquals($scriptFields->getParam('test'), $script->toArray()); + + // Constructor + $scriptFields = new ScriptFields(array( + 'test' => $script, + )); + $this->assertEquals($scriptFields->getParam('test'), $script->toArray()); + } + + /** + * @group unit + */ + public function testSetScriptFields() + { + $query = new Query(); + $script = new Script('1 + 2'); + + $scriptFields = new ScriptFields(array( + 'test' => $script, + )); + $query->setScriptFields($scriptFields); + $this->assertEquals($query->getParam('script_fields'), $scriptFields->toArray()); + + $query->setScriptFields(array( + 'test' => $script, + )); + $this->assertEquals($query->getParam('script_fields'), $scriptFields->toArray()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testNameException() + { + $script = new Script('1 + 2'); + $scriptFields = new ScriptFields(array($script)); + } + + /** + * @group functional + */ + public function testQuery() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $doc = new Document(1, array('firstname' => 'guschti', 'lastname' => 'ruflin')); + $type->addDocument($doc); + $index->refresh(); + + $query = new Query(); + $script = new Script('1 + 2'); + $scriptFields = new ScriptFields(array( + 'test' => $script, + )); + $query->setScriptFields($scriptFields); + + $resultSet = $type->search($query); + $first = $resultSet->current()->getData(); + + // 1 + 2 + $this->assertEquals(3, $first['test'][0]); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptTest.php new file mode 100644 index 00000000..b42d8646 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScriptTest.php @@ -0,0 +1,169 @@ + $value, + ); + $this->assertEquals($value, $script->getScript()); + $this->assertEquals($expected, $script->toArray()); + + $params = array( + 'param1' => 'one', + 'param2' => 10, + ); + + $script = new Script($value, $params); + + $expected = array( + 'script' => $value, + 'params' => $params, + ); + + $this->assertEquals($value, $script->getScript()); + $this->assertEquals($params, $script->getParams()); + $this->assertEquals($expected, $script->toArray()); + + $lang = 'mvel'; + + $script = new Script($value, $params, $lang); + + $expected = array( + 'script' => $value, + 'params' => $params, + 'lang' => $lang, + ); + + $this->assertEquals($value, $script->getScript()); + $this->assertEquals($params, $script->getParams()); + $this->assertEquals($lang, $script->getLang()); + $this->assertEquals($expected, $script->toArray()); + } + + /** + * @group unit + */ + public function testCreateString() + { + $string = '_score * 2.0'; + $script = Script::create($string); + + $this->assertInstanceOf('Elastica\Script', $script); + + $this->assertEquals($string, $script->getScript()); + + $expected = array( + 'script' => $string, + ); + $this->assertEquals($expected, $script->toArray()); + } + + /** + * @group unit + */ + public function testCreateScript() + { + $data = new Script('_score * 2.0'); + + $script = Script::create($data); + + $this->assertInstanceOf('Elastica\Script', $script); + $this->assertSame($data, $script); + } + + /** + * @group unit + */ + public function testCreateArray() + { + $string = '_score * 2.0'; + $lang = 'mvel'; + $params = array( + 'param1' => 'one', + 'param2' => 1, + ); + $array = array( + 'script' => $string, + 'lang' => $lang, + 'params' => $params, + ); + + $script = Script::create($array); + + $this->assertInstanceOf('Elastica\Script', $script); + + $this->assertEquals($string, $script->getScript()); + $this->assertEquals($params, $script->getParams()); + $this->assertEquals($lang, $script->getLang()); + + $this->assertEquals($array, $script->toArray()); + } + + /** + * @group unit + * @dataProvider dataProviderCreateInvalid + * @expectedException \Elastica\Exception\InvalidException + */ + public function testCreateInvalid($data) + { + Script::create($data); + } + + /** + * @return array + */ + public function dataProviderCreateInvalid() + { + return array( + array( + new \stdClass(), + ), + array( + array('params' => array('param1' => 'one')), + ), + array( + array('script' => '_score * 2.0', 'params' => 'param'), + ), + ); + } + + /** + * @group unit + */ + public function testSetLang() + { + $script = new Script('foo', array(), Script::LANG_GROOVY); + $this->assertEquals(Script::LANG_GROOVY, $script->getLang()); + + $script->setLang(Script::LANG_PYTHON); + $this->assertEquals(Script::LANG_PYTHON, $script->getLang()); + + $this->assertInstanceOf('Elastica\Script', $script->setLang(Script::LANG_PYTHON)); + } + + /** + * @group unit + */ + public function testSetScript() + { + $script = new Script('foo'); + $this->assertEquals('foo', $script->getScript()); + + $script->setScript('bar'); + $this->assertEquals('bar', $script->getScript()); + + $this->assertInstanceOf('Elastica\Script', $script->setScript('foo')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ScrollTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScrollTest.php new file mode 100644 index 00000000..df5b0317 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ScrollTest.php @@ -0,0 +1,105 @@ +_prepareSearch()); + $count = 1; + + /** @var ResultSet $resultSet */ + foreach ($scroll as $scrollId => $resultSet) { + $this->assertNotEmpty($scrollId); + + $results = $resultSet->getResults(); + switch (true) { + case $count === 1: + // hits: 1 - 5 + $this->assertEquals(5, $resultSet->count()); + $this->assertEquals('1', $results[0]->getId()); + $this->assertEquals('5', $results[4]->getId()); + break; + case $count === 2: + // hits: 6 - 10 + $this->assertEquals(5, $resultSet->count()); + $this->assertEquals('6', $results[0]->getId()); + $this->assertEquals('10', $results[4]->getId()); + break; + case $count === 3: + // hit: 11 + $this->assertEquals(1, $resultSet->count()); + $this->assertEquals('11', $results[0]->getId()); + break; + case $count === 4: + $this->assertEquals(0, $resultSet->count()); + break; + default: + $this->fail('too many iterations'); + } + + $count++; + } + } + + /** + * Scroll must not overwrite options. + * + * @group functional + */ + public function testSearchRevert() + { + $search = $this->_prepareSearch(); + + $search->setOption(Search::OPTION_SCROLL, 'must'); + $search->setOption(Search::OPTION_SCROLL_ID, 'not'); + $search->setOption(Search::OPTION_SEARCH_TYPE, 'change'); + $old = $search->getOptions(); + + $scroll = new Scroll($search); + + $scroll->rewind(); + $this->assertEquals($old, $search->getOptions()); + + $scroll->next(); + $this->assertEquals($old, $search->getOptions()); + } + + /** + * index: 11 docs + * query size: 5. + * + * @return Search + */ + private function _prepareSearch() + { + $index = $this->_createIndex(); + $index->refresh(); + + $docs = array(); + for ($x = 1; $x <= 11; $x++) { + $docs[] = new Document($x, array('id' => $x, 'key' => 'value')); + } + + $type = $index->getType('scrollTest'); + $type->addDocuments($docs); + $index->refresh(); + + $search = new Search($this->_getClient()); + $search->addIndex($index)->addType($type); + $search->getQuery()->setSize(5); + + return $search; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/SearchTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/SearchTest.php new file mode 100644 index 00000000..905f8462 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/SearchTest.php @@ -0,0 +1,647 @@ +_getClient(); + $search = new Search($client); + + $this->assertInstanceOf('Elastica\Search', $search); + $this->assertSame($client, $search->getClient()); + } + + /** + * @group functional + */ + public function testAddIndex() + { + $client = $this->_getClient(); + $search = new Search($client); + + $index1 = $this->_createIndex(); + $index2 = $this->_createIndex(); + + $search->addIndex($index1); + $indices = $search->getIndices(); + + $this->assertEquals(1, count($indices)); + + $search->addIndex($index2); + $indices = $search->getIndices(); + + $this->assertEquals(2, count($indices)); + + $this->assertTrue(in_array($index1->getName(), $indices)); + $this->assertTrue(in_array($index2->getName(), $indices)); + + // Add string + $search->addIndex('test3'); + $indices = $search->getIndices(); + + $this->assertEquals(3, count($indices)); + $this->assertTrue(in_array('test3', $indices)); + } + + /** + * @group unit + */ + public function testAddIndices() + { + $client = $this->_getClient(); + $search = new Search($client); + + $indices = array(); + $indices[] = $client->getIndex('elastica_test1'); + $indices[] = $client->getIndex('elastica_test2'); + + $search->addIndices($indices); + + $this->assertEquals(2, count($search->getIndices())); + } + + /** + * @group functional + */ + public function testAddType() + { + $client = $this->_getClient(); + $search = new Search($client); + + $index = $this->_createIndex(); + + $type1 = $index->getType('type1'); + $type2 = $index->getType('type2'); + + $this->assertEquals(array(), $search->getTypes()); + + $search->addType($type1); + $types = $search->getTypes(); + + $this->assertEquals(1, count($types)); + + $search->addType($type2); + $types = $search->getTypes(); + + $this->assertEquals(2, count($types)); + + $this->assertTrue(in_array($type1->getName(), $types)); + $this->assertTrue(in_array($type2->getName(), $types)); + + // Add string + $search->addType('test3'); + $types = $search->getTypes(); + + $this->assertEquals(3, count($types)); + $this->assertTrue(in_array('test3', $types)); + } + + /** + * @group unit + */ + public function testAddTypes() + { + $client = $this->_getClient(); + $search = new Search($client); + + $index = $client->getIndex('foo'); + + $types = array(); + $types[] = $index->getType('type1'); + $types[] = $index->getType('type2'); + + $search->addTypes($types); + + $this->assertEquals(2, count($search->getTypes())); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testAddTypeInvalid() + { + $client = $this->_getClient(); + $search = new Search($client); + + $search->addType(new \stdClass()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\InvalidException + */ + public function testAddIndexInvalid() + { + $client = $this->_getClient(); + $search = new Search($client); + + $search->addIndex(new \stdClass()); + } + + /** + * @group unit + */ + public function testAddNumericIndex() + { + $client = $this->_getClient(); + $search = new Search($client); + + $search->addIndex(1); + + $this->assertContains('1', $search->getIndices(), 'Make sure it has been added and converted to string'); + } + + /** + * @group functional + */ + public function testGetPath() + { + $client = $this->_getClient(); + $search1 = new Search($client); + $search2 = new Search($client); + + $index1 = $this->_createIndex(); + $index2 = $this->_createIndex(); + + $type1 = $index1->getType('type1'); + $type2 = $index1->getType('type2'); + + // No index + $this->assertEquals('/_search', $search1->getPath()); + + // Only index + $search1->addIndex($index1); + $this->assertEquals($index1->getName().'/_search', $search1->getPath()); + + // MUltiple index, no types + $search1->addIndex($index2); + $this->assertEquals($index1->getName().','.$index2->getName().'/_search', $search1->getPath()); + + // Single type, no index + $search2->addType($type1); + $this->assertEquals('_all/'.$type1->getName().'/_search', $search2->getPath()); + + // Multiple types + $search2->addType($type2); + $this->assertEquals('_all/'.$type1->getName().','.$type2->getName().'/_search', $search2->getPath()); + + // Combine index and types + $search2->addIndex($index1); + $this->assertEquals($index1->getName().'/'.$type1->getName().','.$type2->getName().'/_search', $search2->getPath()); + } + + /** + * @group functional + */ + public function testSearchRequest() + { + $client = $this->_getClient(); + $search1 = new Search($client); + + $index1 = $this->_createIndex(); + $index2 = $this->_createIndex(); + + $type1 = $index1->getType('hello1'); + + $result = $search1->search(array()); + $this->assertFalse($result->getResponse()->hasError()); + + $search1->addIndex($index1); + + $result = $search1->search(array()); + $this->assertFalse($result->getResponse()->hasError()); + + $search1->addIndex($index2); + + $result = $search1->search(array()); + $this->assertFalse($result->getResponse()->hasError()); + + $search1->addType($type1); + + $result = $search1->search(array()); + $this->assertFalse($result->getResponse()->hasError()); + } + + /** + * @group functional + */ + public function testSearchScrollRequest() + { + $client = $this->_getClient(); + + $index = $this->_createIndex(); + $type = $index->getType('scrolltest'); + + $docs = array(); + for ($x = 1; $x <= 10; $x++) { + $docs[] = new Document($x, array('id' => $x, 'testscroll' => 'jbafford')); + } + + $type->addDocuments($docs); + $index->refresh(); + + $search = new Search($client); + $search->addIndex($index)->addType($type); + $result = $search->search(array(), array( + Search::OPTION_SEARCH_TYPE => Search::OPTION_SEARCH_TYPE_SCAN, + Search::OPTION_SCROLL => '5m', + Search::OPTION_SIZE => 5, + )); + $this->assertFalse($result->getResponse()->hasError()); + + $scrollId = $result->getResponse()->getScrollId(); + $this->assertNotEmpty($scrollId); + + //There are 10 items, and we're scrolling with a size of 5 + //So we should get two results of 5 items, and then no items + //We should also have sent the raw scroll_id as the HTTP request body + $search = new Search($client); + $result = $search->search(array(), array( + Search::OPTION_SCROLL => '5m', + Search::OPTION_SCROLL_ID => $scrollId, + )); + $this->assertFalse($result->getResponse()->hasError()); + $this->assertEquals(5, count($result->getResults())); + $this->assertArrayNotHasKey(Search::OPTION_SCROLL_ID, $search->getClient()->getLastRequest()->getQuery()); + $this->assertEquals($scrollId, $search->getClient()->getLastRequest()->getData()); + + $result = $search->search(array(), array( + Search::OPTION_SCROLL => '5m', + Search::OPTION_SCROLL_ID => $scrollId, + )); + $this->assertFalse($result->getResponse()->hasError()); + $this->assertEquals(5, count($result->getResults())); + $this->assertArrayNotHasKey(Search::OPTION_SCROLL_ID, $search->getClient()->getLastRequest()->getQuery()); + $this->assertEquals($scrollId, $search->getClient()->getLastRequest()->getData()); + + $result = $search->search(array(), array( + Search::OPTION_SCROLL => '5m', + Search::OPTION_SCROLL_ID => $scrollId, + )); + $this->assertFalse($result->getResponse()->hasError()); + $this->assertEquals(0, count($result->getResults())); + $this->assertArrayNotHasKey(Search::OPTION_SCROLL_ID, $search->getClient()->getLastRequest()->getQuery()); + $this->assertEquals($scrollId, $search->getClient()->getLastRequest()->getData()); + } + + /** + * Default Limit tests for \Elastica\Search. + * + * @group functional + */ + public function testLimitDefaultSearch() + { + $client = $this->_getClient(); + $search = new Search($client); + + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $type = $index->getType('zeroType'); + $type->addDocuments(array( + new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(2, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(3, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(4, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(5, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(6, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(7, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(8, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(9, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(10, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(11, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + )); + $index->refresh(); + + $search->addIndex($index)->addType($type); + + // default limit results (default limit is 10) + $resultSet = $search->search('farrelley'); + $this->assertEquals(10, $resultSet->count()); + + // limit = 1 + $resultSet = $search->search('farrelley', 1); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\InvalidException + */ + public function testArrayConfigSearch() + { + $client = $this->_getClient(); + $search = new Search($client); + + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $docs = array(); + for ($i = 0; $i < 11; $i++) { + $docs[] = new Document($i, array('id' => 1, 'email' => 'test@test.com', 'username' => 'test')); + } + + $type = $index->getType('zeroType'); + $type->addDocuments($docs); + $index->refresh(); + + $search->addIndex($index)->addType($type); + //Backward compatibility, integer => limit + // default limit results (default limit is 10) + $resultSet = $search->search('test'); + $this->assertEquals(10, $resultSet->count()); + + // limit = 1 + $resultSet = $search->search('test', 1); + $this->assertEquals(1, $resultSet->count()); + + //Array with limit + $resultSet = $search->search('test', array('limit' => 2)); + $this->assertEquals(2, $resultSet->count()); + + //Array with size + $resultSet = $search->search('test', array('size' => 2)); + $this->assertEquals(2, $resultSet->count()); + + //Array with from + $resultSet = $search->search('test', array('from' => 10)); + $this->assertEquals(10, $resultSet->current()->getId()); + + //Array with routing + $resultSet = $search->search('test', array('routing' => 'r1,r2')); + $this->assertEquals(10, $resultSet->count()); + + //Array with limit and routing + $resultSet = $search->search('test', array('limit' => 5, 'routing' => 'r1,r2')); + $this->assertEquals(5, $resultSet->count()); + + //Search types + $resultSet = $search->search('test', array('limit' => 5, 'search_type' => 'count')); + $this->assertTrue(($resultSet->count() === 0) && $resultSet->getTotalHits() === 11); + + //Timeout - this one is a bit more tricky to test + $mockResponse = new \Elastica\Response(json_encode(array('timed_out' => true))); + $client = $this->getMockBuilder('Elastica\\Client') + ->disableOriginalConstructor() + ->getMock(); + $client->method('request') + ->will($this->returnValue($mockResponse)); + $search = new Search($client); + $script = new Script('Thread.sleep(100); return _score;'); + $query = new FunctionScore(); + $query->addScriptScoreFunction($script); + $resultSet = $search->search($query, array('timeout' => 50)); + $this->assertTrue($resultSet->hasTimedOut()); + + // Throws InvalidException + $resultSet = $search->search('test', array('invalid_option' => 'invalid_option_value')); + } + + /** + * @group functional + */ + public function testSearchWithVersionOption() + { + $index = $this->_createIndex(); + $doc = new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'ruflin')); + $index->getType('test')->addDocument($doc); + $index->refresh(); + + $search = new Search($index->getClient()); + $search->addIndex($index); + + // Version param should not be inside by default + $results = $search->search(new MatchAll()); + $hit = $results->current(); + $this->assertEquals(array(), $hit->getParam('_version')); + + // Added version param to result + $results = $search->search(new MatchAll(), array('version' => true)); + $hit = $results->current(); + $this->assertEquals(1, $hit->getParam('_version')); + } + + /** + * @group functional + */ + public function testCountRequest() + { + $client = $this->_getClient(); + $search = new Search($client); + + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $type = $index->getType('zeroType'); + $type->addDocuments(array( + new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(2, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(3, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(4, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(5, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(6, array('id' => 1, 'email' => 'test@test.com', 'username' => 'marley')), + new Document(7, array('id' => 1, 'email' => 'test@test.com', 'username' => 'marley')), + new Document(8, array('id' => 1, 'email' => 'test@test.com', 'username' => 'marley')), + new Document(9, array('id' => 1, 'email' => 'test@test.com', 'username' => 'marley')), + new Document(10, array('id' => 1, 'email' => 'test@test.com', 'username' => 'marley')), + new Document(11, array('id' => 1, 'email' => 'test@test.com', 'username' => 'marley')), + )); + $index->refresh(); + + $search->addIndex($index)->addType($type); + + $count = $search->count('farrelley'); + $this->assertEquals(5, $count); + + $count = $search->count('marley'); + $this->assertEquals(6, $count); + + $count = $search->count(); + $this->assertEquals(6, $count, 'Uses previous query set'); + + $count = $search->count(new MatchAll()); + $this->assertEquals(11, $count); + + $count = $search->count('bunny'); + $this->assertEquals(0, $count); + } + + /** + * @group functional + */ + public function testEmptySearch() + { + $client = $this->_getClient(); + $search = new Search($client); + + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + $type = $index->getType('zeroType'); + $type->addDocuments(array( + new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(2, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(3, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(4, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(5, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(6, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(7, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')), + new Document(8, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')), + new Document(9, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')), + new Document(10, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')), + new Document(11, array('id' => 1, 'email' => 'test@test.com', 'username' => 'bunny')), + )); + $index->refresh(); + + $search->addIndex($index)->addType($type); + $resultSet = $search->search(); + $this->assertInstanceOf('Elastica\ResultSet', $resultSet); + $this->assertCount(10, $resultSet); + $this->assertEquals(11, $resultSet->getTotalHits()); + + $query = new QueryString('bunny'); + $search->setQuery($query); + + $resultSet = $search->search(); + + $this->assertCount(4, $resultSet); + $this->assertEquals(4, $resultSet->getTotalHits()); + $source = $resultSet->current()->getSource(); + $this->assertEquals('bunny', $source['username']); + } + + /** + * @group functional + */ + public function testCount() + { + $index = $this->_createIndex(); + $search = new Search($index->getClient()); + $type = $index->getType('test'); + + $doc = new Document(1, array('id' => 1, 'username' => 'ruflin')); + + $type->addDocument($doc); + $index->refresh(); + + $search->addIndex($index); + $search->addType($type); + + $result1 = $search->count(new \Elastica\Query\MatchAll()); + $this->assertEquals(1, $result1); + + $result2 = $search->count(new \Elastica\Query\MatchAll(), true); + $this->assertInstanceOf('\Elastica\ResultSet', $result2); + $this->assertEquals(1, $result2->getTotalHits()); + } + + /** + * @group functional + */ + public function testScanAndScroll() + { + $search = new Search($this->_getClient()); + $this->assertInstanceOf('Elastica\ScanAndScroll', $search->scanAndScroll()); + } + + /** + * @group functional + */ + public function testIgnoreUnavailableOption() + { + $client = $this->_getClient(); + $index = $client->getIndex('elastica_7086b4c2ee585bbb6740ece5ed7ece01'); + $query = new MatchAll(); + + $search = new Search($client); + $search->addIndex($index); + + $exception = null; + try { + $search->search($query); + } catch (ResponseException $e) { + $exception = $e; + } + $this->assertEquals('IndexMissingException', $exception->getElasticsearchException()->getExceptionName()); + + $results = $search->search($query, array(Search::OPTION_SEARCH_IGNORE_UNAVAILABLE => true)); + $this->assertInstanceOf('\Elastica\ResultSet', $results); + } + + /** + * @group functional + */ + public function testQueryCacheOption() + { + $client = $this->_getClient(); + + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + $type = $index->getType('zeroType'); + $type->addDocuments(array( + new Document(1, array('id' => 1, 'username' => 'farrelley')), + new Document(2, array('id' => 2, 'username' => 'bunny')), + )); + $index->refresh(); + + $aggregation = new Aggregation\Terms('username'); + $aggregation->setField('username'); + + $query = new Query(); + $query->addAggregation($aggregation); + + $search = new Search($client); + $search->addIndex($index); + $search->setQuery($query); + $search->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_COUNT); + $search->setOption(Search::OPTION_QUERY_CACHE, true); + + // before search query cache should be empty + $statsData = $index->getStats()->getData(); + $queryCache = $statsData['_all']['primaries']['query_cache']; + + $this->assertEquals(0, $queryCache['memory_size_in_bytes']); + $this->assertEquals(0, $queryCache['evictions']); + $this->assertEquals(0, $queryCache['hit_count']); + $this->assertEquals(0, $queryCache['miss_count']); + + // first search should result in cache miss and save data to cache + $search->search(); + $index->getStats()->refresh(); + $statsData = $index->getStats()->getData(); + $queryCache = $statsData['_all']['primaries']['query_cache']; + + $this->assertNotEquals(0, $queryCache['memory_size_in_bytes']); + $this->assertEquals(0, $queryCache['evictions']); + $this->assertEquals(0, $queryCache['hit_count']); + $this->assertEquals(1, $queryCache['miss_count']); + + // next search should result in cache hit + $search->search(); + $index->getStats()->refresh(); + $statsData = $index->getStats()->getData(); + $queryCache = $statsData['_all']['primaries']['query_cache']; + + $this->assertNotEquals(0, $queryCache['memory_size_in_bytes']); + $this->assertEquals(0, $queryCache['evictions']); + $this->assertEquals(1, $queryCache['hit_count']); + $this->assertEquals(1, $queryCache['miss_count']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/ShutdownTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/ShutdownTest.php new file mode 100644 index 00000000..93d6e32b --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/ShutdownTest.php @@ -0,0 +1,74 @@ +_getClient(); + $cluster = $client->getCluster(); + $nodes = $cluster->getNodes(); + + $nodesCount = count($nodes); + + if ($nodesCount < 2) { + $this->markTestIncomplete('At least two nodes have to be running, because 1 node is shutdown'); + } + + $portFound = false; + // sayonara, wolverine, we'd never love you + foreach ($nodes as $node) { + if ((int) $node->getInfo()->getPort() === 9201) { + $portFound = true; + $node->shutdown('1s'); + break; + } + } + + if (!$portFound) { + $this->markTestSkipped('This test was skipped as in the new docker environment all elasticsearch instances run on the same port'); + } + + // Wait until node is shutdown + sleep(5); + + // Get nodes again + $client = $this->_getClient(); + $cluster = $client->getCluster(); + $nodes = $cluster->getNodes(); + + // Only one left + $this->assertCount($nodesCount - 1, $nodes); + } + + /** + * @group shutdown + * @depends testNodeShutdown + * @expectedException \Elastica\Exception\Connection\HttpException + */ + public function testClusterShutdown() + { + // Get cluster nodes + $client = $this->_getClient(); + $cluster = $client->getCluster(); + $nodes = $cluster->getNodes(); + + // Shutdown cluster + $cluster->shutdown('1s'); + + // Wait... + sleep(5); + + // Now exception must be thrown + $client->getStatus(); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/SnapshotTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/SnapshotTest.php new file mode 100644 index 00000000..fa190e8c --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/SnapshotTest.php @@ -0,0 +1,109 @@ +_snapshot = new Snapshot($this->_getClient()); + + $this->_index = $this->_createIndex(); + $this->_docs = array( + new Document('1', array('city' => 'San Diego')), + new Document('2', array('city' => 'San Luis Obispo')), + new Document('3', array('city' => 'San Francisco')), + ); + $this->_index->getType('test')->addDocuments($this->_docs); + $this->_index->refresh(); + } + + /** + * @group functional + */ + public function testRegisterRepository() + { + $name = 'test_register'; + $location = '/tmp/test_register'; + + $response = $this->_snapshot->registerRepository($name, 'fs', array('location' => $location)); + $this->assertTrue($response->isOk()); + + $response = $this->_snapshot->getRepository($name); + $this->assertEquals($location, $response['settings']['location']); + + // attempt to retrieve a repository which does not exist + $this->setExpectedException('Elastica\Exception\NotFoundException'); + $this->_snapshot->getRepository('foobar'); + } + + /** + * @group functional + */ + public function testSnapshotAndRestore() + { + $repositoryName = 'test_repository'; + $location = "/tmp/{$repositoryName}"; + + // register the repository + $response = $this->_snapshot->registerRepository($repositoryName, 'fs', array('location' => $location)); + $this->assertTrue($response->isOk()); + + // create a snapshot of our test index + $snapshotName = 'test_snapshot_1'; + $response = $this->_snapshot->createSnapshot($repositoryName, $snapshotName, array('indices' => $this->_index->getName()), true); + + // ensure that the snapshot was created properly + $this->assertTrue($response->isOk()); + $this->assertArrayHasKey('snapshot', $response->getData()); + $data = $response->getData(); + $this->assertContains($this->_index->getName(), $data['snapshot']['indices']); + $this->assertEquals(1, sizeof($data['snapshot']['indices'])); // only the specified index should be present + $this->assertEquals($snapshotName, $data['snapshot']['snapshot']); + + // retrieve data regarding the snapshot + $response = $this->_snapshot->getSnapshot($repositoryName, $snapshotName); + $this->assertContains($this->_index->getName(), $response['indices']); + + // delete our test index + $this->_index->delete(); + + // restore the index from our snapshot + $response = $this->_snapshot->restoreSnapshot($repositoryName, $snapshotName, array(), true); + $this->assertTrue($response->isOk()); + + $this->_index->refresh(); + $this->_index->optimize(); + + // ensure that the index has been restored + $count = $this->_index->getType('test')->count(); + $this->assertEquals(sizeof($this->_docs), $count); + + // delete the snapshot + $response = $this->_snapshot->deleteSnapshot($repositoryName, $snapshotName); + $this->assertTrue($response->isOk()); + + // ensure that the snapshot has been deleted + $this->setExpectedException('Elastica\Exception\NotFoundException'); + $this->_snapshot->getSnapshot($repositoryName, $snapshotName); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/StatusTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/StatusTest.php new file mode 100644 index 00000000..fe6bb091 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/StatusTest.php @@ -0,0 +1,133 @@ +_createIndex(); + $status = new Status($index->getClient()); + $this->assertInstanceOf('Elastica\Response', $status->getResponse()); + } + + /** + * @group functional + */ + public function testGetIndexStatuses() + { + $index = $this->_createIndex(); + + $status = new Status($index->getClient()); + $statuses = $status->getIndexStatuses(); + + $this->assertInternalType('array', $statuses); + + foreach ($statuses as $indexStatus) { + $this->assertInstanceOf('Elastica\Index\Status', $indexStatus); + } + } + + /** + * @group functional + */ + public function testGetIndexNames() + { + $indexName = 'test'; + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + $index->create(array(), true); + $index = $this->_createIndex(); + $index->refresh(); + $index->optimize(); + + $status = new Status($index->getClient()); + $names = $status->getIndexNames(); + + $this->assertInternalType('array', $names); + $this->assertContains($index->getName(), $names); + + foreach ($names as $name) { + $this->assertInternalType('string', $name); + } + } + + /** + * @group functional + */ + public function testIndexExists() + { + $indexName = 'elastica_test'; + $aliasName = 'elastica_test-alias'; + + $client = $this->_getClient(); + $index = $client->getIndex($indexName); + + try { + // Make sure index is deleted first + $index->delete(); + } catch (ResponseException $e) { + } + + $status = new Status($client); + $this->assertFalse($status->indexExists($indexName)); + $index->create(); + + $status->refresh(); + $this->assertTrue($status->indexExists($indexName)); + } + + /** + * @group functional + */ + public function testAliasExists() + { + $aliasName = 'elastica_test-alias'; + + $index1 = $this->_createIndex(); + $indexName = $index1->getName(); + + $status = new Status($index1->getClient()); + + foreach ($status->getIndicesWithAlias($aliasName) as $tmpIndex) { + $tmpIndex->removeAlias($aliasName); + } + + $this->assertFalse($status->aliasExists($aliasName)); + + $index1->addAlias($aliasName); + $status->refresh(); + $this->assertTrue($status->aliasExists($aliasName)); + + $indicesWithAlias = $status->getIndicesWithAlias($aliasName); + $this->assertEquals(array($indexName), array_map( + function ($index) { + return $index->getName(); + }, $indicesWithAlias)); + } + + /** + * @group functional + */ + public function testServerStatus() + { + $client = $this->_getClient(); + $status = $client->getStatus(); + $serverStatus = $status->getServerStatus(); + + $this->assertTrue(!empty($serverStatus)); + $this->assertTrue('array' == gettype($serverStatus)); + $this->assertArrayHasKey('status', $serverStatus); + $this->assertTrue($serverStatus['status'] == 200); + $this->assertArrayHasKey('version', $serverStatus); + + $versionInfo = $serverStatus['version']; + $this->assertArrayHasKey('number', $versionInfo); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/CompletionTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/CompletionTest.php new file mode 100644 index 00000000..6120743c --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/CompletionTest.php @@ -0,0 +1,140 @@ +_createIndex(); + $type = $index->getType('song'); + + $type->setMapping(array( + 'fieldName' => array( + 'type' => 'completion', + 'payloads' => true, + ), + )); + + $type->addDocuments(array( + new Document(1, array( + 'fieldName' => array( + 'input' => array('Nevermind', 'Nirvana'), + 'output' => 'Nevermind - Nirvana', + 'payload' => array( + 'year' => 1991, + ), + ), + )), + new Document(2, array( + 'fieldName' => array( + 'input' => array('Bleach', 'Nirvana'), + 'output' => 'Bleach - Nirvana', + 'payload' => array( + 'year' => 1989, + ), + ), + )), + new Document(3, array( + 'fieldName' => array( + 'input' => array('Incesticide', 'Nirvana'), + 'output' => 'Incesticide - Nirvana', + 'payload' => array( + 'year' => 1992, + ), + ), + )), + )); + + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $suggest = new Completion('suggestName', 'fieldName'); + $suggest->setText('foo'); + $suggest->setSize(10); + $expected = array( + 'text' => 'foo', + 'completion' => array( + 'size' => 10, + 'field' => 'fieldName', + ), + ); + $this->assertEquals($expected, $suggest->toArray()); + } + + /** + * @group functional + */ + public function testSuggestWorks() + { + $suggest = new Completion('suggestName', 'fieldName'); + $suggest->setText('Never'); + + $index = $this->_getIndexForTest(); + $resultSet = $index->search(Query::create($suggest)); + + $this->assertTrue($resultSet->hasSuggests()); + + $suggests = $resultSet->getSuggests(); + $options = $suggests['suggestName'][0]['options']; + + $this->assertCount(1, $options); + $this->assertEquals('Nevermind - Nirvana', $options[0]['text']); + $this->assertEquals(1991, $options[0]['payload']['year']); + } + + /** + * @group functional + */ + public function testFuzzySuggestWorks() + { + $suggest = new Completion('suggestName', 'fieldName'); + $suggest->setFuzzy(array('fuzziness' => 2)); + $suggest->setText('Neavermint'); + + $index = $this->_getIndexForTest(); + $resultSet = $index->search(Query::create($suggest)); + + $this->assertTrue($resultSet->hasSuggests()); + + $suggests = $resultSet->getSuggests(); + $options = $suggests['suggestName'][0]['options']; + + $this->assertCount(1, $options); + $this->assertEquals('Nevermind - Nirvana', $options[0]['text']); + } + + /** + * @group unit + */ + public function testSetFuzzy() + { + $suggest = new Completion('suggestName', 'fieldName'); + + $fuzzy = array( + 'unicode_aware' => true, + 'fuzziness' => 3, + ); + + $suggest->setFuzzy($fuzzy); + + $this->assertEquals($fuzzy, $suggest->getParam('fuzzy')); + + $this->assertInstanceOf('Elastica\\Suggest\\Completion', $suggest->setFuzzy($fuzzy)); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/PhraseTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/PhraseTest.php new file mode 100644 index 00000000..9ce345d4 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/PhraseTest.php @@ -0,0 +1,82 @@ +_createIndex(); + $type = $index->getType('testSuggestType'); + $type->addDocuments(array( + new Document(1, array('text' => 'Github is pretty cool')), + new Document(2, array('text' => 'Elasticsearch is bonsai cool')), + new Document(3, array('text' => 'This is a test phrase')), + new Document(4, array('text' => 'Another sentence for testing')), + new Document(5, array('text' => 'Some more words here')), + )); + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $suggest = new Suggest(); + $phraseSuggest = new Phrase('suggest1', 'text'); + $phraseSuggest->setText('elasticsearch is bansai coor'); + $phraseSuggest->setAnalyzer('simple'); + $suggest->addSuggestion($phraseSuggest); + $suggest->setGlobalText('global!'); + + $expected = array( + 'suggest' => array( + 'text' => 'global!', + 'suggest1' => array( + 'text' => 'elasticsearch is bansai coor', + 'phrase' => array( + 'field' => 'text', + 'analyzer' => 'simple', + ), + ), + ), + ); + + $this->assertEquals($expected, $suggest->toArray()); + } + + /** + * @group functional + */ + public function testPhraseSuggest() + { + $suggest = new Suggest(); + $phraseSuggest = new Phrase('suggest1', 'text'); + $phraseSuggest->setText('elasticsearch is bansai coor'); + $phraseSuggest->setAnalyzer('simple')->setHighlight('', '')->setStupidBackoffSmoothing(0.4); + $phraseSuggest->addCandidateGenerator(new DirectGenerator('text')); + $suggest->addSuggestion($phraseSuggest); + + $index = $this->_getIndexForTest(); + $result = $index->search($suggest); + $suggests = $result->getSuggests(); + + // 3 suggestions should be returned: One in which both misspellings are corrected, and two in which only one misspelling is corrected. + $this->assertEquals(3, sizeof($suggests['suggest1'][0]['options'])); + + $this->assertEquals('elasticsearch is bonsai cool', $suggests['suggest1'][0]['options'][0]['highlighted']); + $this->assertEquals('elasticsearch is bonsai cool', $suggests['suggest1'][0]['options'][0]['text']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/TermTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/TermTest.php new file mode 100644 index 00000000..f1250e6f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Suggest/TermTest.php @@ -0,0 +1,105 @@ +_createIndex(); + $type = $index->getType('testSuggestType'); + $type->addDocuments(array( + new Document(1, array('id' => 1, 'text' => 'GitHub')), + new Document(2, array('id' => 1, 'text' => 'Elastic')), + new Document(3, array('id' => 1, 'text' => 'Search')), + new Document(4, array('id' => 1, 'text' => 'Food')), + new Document(5, array('id' => 1, 'text' => 'Flood')), + new Document(6, array('id' => 1, 'text' => 'Folks')), + )); + $index->refresh(); + + return $index; + } + + /** + * @group unit + */ + public function testToArray() + { + $suggest = new Suggest(); + $suggest1 = new Term('suggest1', '_all'); + $suggest->addSuggestion($suggest1->setText('Foor')); + $suggest2 = new Term('suggest2', '_all'); + $suggest->addSuggestion($suggest2->setText('Girhub')); + + $expected = array( + 'suggest' => array( + 'suggest1' => array( + 'term' => array( + 'field' => '_all', + ), + 'text' => 'Foor', + ), + 'suggest2' => array( + 'term' => array( + 'field' => '_all', + ), + 'text' => 'Girhub', + ), + ), + ); + + $this->assertEquals($expected, $suggest->toArray()); + } + + /** + * @group functional + */ + public function testSuggestResults() + { + $suggest = new Suggest(); + $suggest1 = new Term('suggest1', '_all'); + $suggest->addSuggestion($suggest1->setText('Foor seach')); + $suggest2 = new Term('suggest2', '_all'); + $suggest->addSuggestion($suggest2->setText('Girhub')); + + $index = $this->_getIndexForTest(); + $result = $index->search($suggest); + + $this->assertEquals(2, $result->countSuggests()); + + $suggests = $result->getSuggests(); + + // Ensure that two suggestion results are returned for suggest1 + $this->assertEquals(2, sizeof($suggests['suggest1'])); + + $this->assertEquals('github', $suggests['suggest2'][0]['options'][0]['text']); + $this->assertEquals('food', $suggests['suggest1'][0]['options'][0]['text']); + } + + /** + * @group functional + */ + public function testSuggestNoResults() + { + $termSuggest = new Term('suggest1', '_all'); + $termSuggest->setText('Foobar')->setSize(4); + + $index = $this->_getIndexForTest(); + $result = $index->search($termSuggest); + + $this->assertEquals(1, $result->countSuggests()); + + // Assert that no suggestions were returned + $suggests = $result->getSuggests(); + $this->assertEquals(0, sizeof($suggests['suggest1'][0]['options'])); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Tool/CrossIndexTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Tool/CrossIndexTest.php new file mode 100644 index 00000000..f8fbf280 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Tool/CrossIndexTest.php @@ -0,0 +1,135 @@ +_createIndex(null, true, 2); + $this->_addDocs($oldIndex->getType('crossIndexTest'), 10); + + $newIndex = $this->_createIndex(null, true, 2); + + $this->assertInstanceOf( + 'Elastica\Index', + CrossIndex::reindex($oldIndex, $newIndex) + ); + + $this->assertEquals(10, $newIndex->count()); + } + + /** + * Test reindex type option. + */ + public function testReindexTypeOption() + { + $oldIndex = $this->_createIndex('', true, 2); + $type1 = $oldIndex->getType('crossIndexTest_1'); + $type2 = $oldIndex->getType('crossIndexTest_2'); + + $docs1 = $this->_addDocs($type1, 10); + $docs2 = $this->_addDocs($type2, 10); + + $newIndex = $this->_createIndex(null, true, 2); + + // \Elastica\Type + CrossIndex::reindex($oldIndex, $newIndex, array( + CrossIndex::OPTION_TYPE => $type1, + )); + $this->assertEquals(10, $newIndex->count()); + $newIndex->deleteDocuments($docs1); + + // string + CrossIndex::reindex($oldIndex, $newIndex, array( + CrossIndex::OPTION_TYPE => 'crossIndexTest_2', + )); + $this->assertEquals(10, $newIndex->count()); + $newIndex->deleteDocuments($docs2); + + // array + CrossIndex::reindex($oldIndex, $newIndex, array( + CrossIndex::OPTION_TYPE => array( + 'crossIndexTest_1', + $type2, + ), + )); + $this->assertEquals(20, $newIndex->count()); + } + + /** + * Test default copy. + */ + public function testCopy() + { + $oldIndex = $this->_createIndex(null, true, 2); + $newIndex = $this->_createIndex(null, true, 2); + + $oldType = $oldIndex->getType('copy_test'); + $oldMapping = array( + 'name' => array( + 'type' => 'string', + 'store' => true, + ), + ); + $oldType->setMapping($oldMapping); + $docs = $this->_addDocs($oldType, 10); + + // mapping + $this->assertInstanceOf( + 'Elastica\Index', + CrossIndex::copy($oldIndex, $newIndex) + ); + + $newMapping = $newIndex->getType('copy_test')->getMapping(); + if (!isset($newMapping['copy_test']['properties']['name'])) { + $this->fail('could not request new mapping'); + } + + $this->assertEquals( + $oldMapping['name'], + $newMapping['copy_test']['properties']['name'] + ); + + // document copy + $this->assertEquals(10, $newIndex->count()); + $newIndex->deleteDocuments($docs); + + // ignore mapping + $ignoredType = $oldIndex->getType('copy_test_1'); + $this->_addDocs($ignoredType, 10); + + CrossIndex::copy($oldIndex, $newIndex, array( + CrossIndex::OPTION_TYPE => $oldType, + )); + + $this->assertFalse($newIndex->getType($ignoredType->getName())->exists()); + $this->assertEquals(10, $newIndex->count()); + } + + /** + * @param Type $type + * @param int $docs + * + * @return array + */ + private function _addDocs(Type $type, $docs) + { + $insert = array(); + for ($i = 1; $i <= $docs; $i++) { + $insert[] = new Document($i, array('_id' => $i, 'key' => 'value')); + } + + $type->addDocuments($insert); + $type->getIndex()->refresh(); + + return $insert; + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/AbstractTransportTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/AbstractTransportTest.php new file mode 100644 index 00000000..20573cc7 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/AbstractTransportTest.php @@ -0,0 +1,80 @@ + 'Http')), + array(array('type' => new Http())), + array(new Http()), + ); + } + + /** + * @group unit + * @dataProvider getValidDefinitions + */ + public function testCanCreateTransportInstances($transport) + { + $connection = new Connection(); + $params = array(); + $transport = AbstractTransport::create($transport, $connection, $params); + $this->assertInstanceOf('Elastica\Transport\AbstractTransport', $transport); + $this->assertSame($connection, $transport->getConnection()); + } + + public function getInvalidDefinitions() + { + return array( + array(array('transport' => 'Http')), + array('InvalidTransport'), + ); + } + + /** + * @group unit + * @dataProvider getInvalidDefinitions + * @expectedException Elastica\Exception\InvalidException + * @expectedExceptionMessage Invalid transport + */ + public function testThrowsExecptionOnInvalidTransportDefinition($transport) + { + AbstractTransport::create($transport, new Connection()); + } + + /** + * @group unit + */ + public function testCanInjectParamsWhenUsingArray() + { + $connection = new Connection(); + $params = array( + 'param1' => 'some value', + 'param3' => 'value3', + ); + + $transport = AbstractTransport::create(array( + 'type' => 'Http', + 'param1' => 'value1', + 'param2' => 'value2', + ), $connection, $params); + + $this->assertSame('value1', $transport->getParam('param1')); + $this->assertSame('value2', $transport->getParam('param2')); + $this->assertSame('value3', $transport->getParam('param3')); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/GuzzleTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/GuzzleTest.php new file mode 100644 index 00000000..04e7ee2d --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/GuzzleTest.php @@ -0,0 +1,180 @@ + false, 'transport' => 'Guzzle'), + 'GET', + ), + array( + array('persistent' => false, 'transport' => array('type' => 'Guzzle', 'postWithRequestBody' => false)), + 'GET', + ), + array( + array('persistent' => false, 'transport' => array('type' => 'Guzzle', 'postWithRequestBody' => true)), + 'POST', + ), + ); + } + + /** + * @group functional + * @dataProvider getConfig + */ + public function testDynamicHttpMethodBasedOnConfigParameter(array $config, $httpMethod) + { + $client = $this->_getClient($config); + + $index = $client->getIndex('dynamic_http_method_test'); + $index->create(array(), true); + $type = $index->getType('test'); + $type->addDocument(new Document(1, array('test' => 'test'))); + $index->refresh(); + $resultSet = $index->search('test'); + $info = $resultSet->getResponse()->getTransferInfo(); + $this->assertStringStartsWith($httpMethod, $info['request_header']); + } + + /** + * @group functional + * @dataProvider getConfig + */ + public function testDynamicHttpMethodOnlyAffectsRequestsWithBody(array $config, $httpMethod) + { + $client = $this->_getClient($config); + + $status = $client->getStatus(); + $info = $status->getResponse()->getTransferInfo(); + $this->assertStringStartsWith('GET', $info['request_header']); + } + + /** + * @group functional + */ + public function testWithEnvironmentalProxy() + { + putenv('http_proxy='.$this->_getProxyUrl().'/'); + + $client = $this->_getClient(array('transport' => 'Guzzle', 'persistent' => false)); + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + + $client->getConnection()->setProxy(null); // will not change anything + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + + putenv('http_proxy='); + } + + /** + * @group functional + */ + public function testWithEnabledEnvironmentalProxy() + { + putenv('http_proxy='.$this->_getProxyUrl403().'/'); + + $client = $this->_getClient(array('transport' => 'Guzzle', 'persistent' => false)); + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(403, $transferInfo['http_code']); + + $client = $this->_getClient(array('transport' => 'Guzzle', 'persistent' => false)); + $client->getConnection()->setProxy(''); + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + + putenv('http_proxy='); + } + + /** + * @group functional + */ + public function testWithProxy() + { + $client = $this->_getClient(array('transport' => 'Guzzle', 'persistent' => false)); + $client->getConnection()->setProxy($this->_getProxyUrl()); + + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + } + + /** + * @group functional + */ + public function testWithoutProxy() + { + $client = $this->_getClient(array('transport' => 'Guzzle', 'persistent' => false)); + $client->getConnection()->setProxy(''); + + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + } + + /** + * @group functional + */ + public function testBodyReuse() + { + $client = $this->_getClient(array('transport' => 'Guzzle', 'persistent' => false)); + + $index = $client->getIndex('elastica_body_reuse_test'); + $index->create(array(), true); + $this->_waitForAllocation($index); + + $type = $index->getType('test'); + $type->addDocument(new Document(1, array('test' => 'test'))); + + $index->refresh(); + + $resultSet = $index->search(array( + 'query' => array( + 'query_string' => array( + 'query' => 'pew pew pew', + ), + ), + )); + + $this->assertEquals(0, $resultSet->getTotalHits()); + + $response = $index->request('/_search', 'POST'); + $resultSet = new ResultSet($response, Query::create(array())); + + $this->assertEquals(1, $resultSet->getTotalHits()); + } + + /** + * @group unit + * @expectedException Elastica\Exception\Connection\GuzzleException + */ + public function testInvalidConnection() + { + $client = $this->_getClient(array('transport' => 'Guzzle', 'port' => 4500, 'persistent' => false)); + $response = $client->request('_status', 'GET'); + } + + protected function tearDown() + { + parent::tearDown(); + putenv('http_proxy='); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/HttpTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/HttpTest.php new file mode 100644 index 00000000..53ee105f --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/HttpTest.php @@ -0,0 +1,246 @@ + 'Http', 'curl' => array(CURLINFO_HEADER_OUT => true)), + 'GET', + ), + array( + array('transport' => array('type' => 'Http', 'postWithRequestBody' => false, 'curl' => array(CURLINFO_HEADER_OUT => true))), + 'GET', + ), + array( + array('transport' => array('type' => 'Http', 'postWithRequestBody' => true, 'curl' => array(CURLINFO_HEADER_OUT => true))), + 'POST', + ), + ); + } + + /** + * @group functional + * @dataProvider getConfig + */ + public function testDynamicHttpMethodBasedOnConfigParameter(array $config, $httpMethod) + { + $client = $this->_getClient($config); + + $index = $client->getIndex('dynamic_http_method_test'); + $index->create(array(), true); + $this->_waitForAllocation($index); + + $type = $index->getType('test'); + $type->addDocument(new Document(1, array('test' => 'test'))); + + $index->refresh(); + + $resultSet = $index->search('test'); + + $info = $resultSet->getResponse()->getTransferInfo(); + $this->assertStringStartsWith($httpMethod, $info['request_header']); + } + + /** + * @group functional + * @dataProvider getConfig + */ + public function testDynamicHttpMethodOnlyAffectsRequestsWithBody(array $config, $httpMethod) + { + $client = $this->_getClient($config); + + $status = $client->getStatus(); + $info = $status->getResponse()->getTransferInfo(); + $this->assertStringStartsWith('GET', $info['request_header']); + } + + /** + * @group functional + */ + public function testCurlNobodyOptionIsResetAfterHeadRequest() + { + $client = $this->_getClient(); + $index = $client->getIndex('curl_test'); + $index->create(array(), true); + $this->_waitForAllocation($index); + + $type = $index->getType('item'); + // Force HEAD request to set CURLOPT_NOBODY = true + $index->exists(); + + $id = 1; + $data = array('id' => $id, 'name' => 'Item 1'); + $doc = new \Elastica\Document($id, $data); + + $type->addDocument($doc); + + $index->refresh(); + + $doc = $type->getDocument($id); + + // Document should be retrieved correctly + $this->assertSame($data, $doc->getData()); + $this->assertEquals($id, $doc->getId()); + } + + /** + * @group functional + */ + public function testUnicodeData() + { + $client = $this->_getClient(); + $index = $client->getIndex('curl_test'); + $index->create(array(), true); + $this->_waitForAllocation($index); + + $type = $index->getType('item'); + + // Force HEAD request to set CURLOPT_NOBODY = true + $index->exists(); + + $id = 22; + $data = array('id' => $id, 'name' => ' + СегоднÑ, Ñ Ð²Ð¸Ð¶Ñƒ, оÑобенно груÑтен твой взглÑд, / + И руки оÑобенно тонки, колени обнÑв. / + ПоÑлушай: далеко, далеко, на озере Чад / + ИзыÑканный бродит жираф.'); + + $doc = new \Elastica\Document($id, $data); + + $type->addDocument($doc); + + $index->refresh(); + + $doc = $type->getDocument($id); + + // Document should be retrieved correctly + $this->assertSame($data, $doc->getData()); + $this->assertEquals($id, $doc->getId()); + } + + /** + * @group functional + */ + public function testWithEnvironmentalProxy() + { + putenv('http_proxy='.$this->_getProxyUrl().'/'); + + $client = $this->_getClient(); + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + + $client->getConnection()->setProxy(null); // will not change anything + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + + putenv('http_proxy='); + } + + /** + * @group functional + */ + public function testWithEnabledEnvironmentalProxy() + { + putenv('http_proxy='.$this->_getProxyUrl403().'/'); + $client = $this->_getClient(); + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(403, $transferInfo['http_code']); + $client = $this->_getClient(); + $client->getConnection()->setProxy(''); + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + putenv('http_proxy='); + } + + /** + * @group functional + */ + public function testWithProxy() + { + $client = $this->_getClient(); + $client->getConnection()->setProxy($this->_getProxyUrl()); + + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + } + + /** + * @group functional + */ + public function testWithoutProxy() + { + $client = $this->_getClient(); + $client->getConnection()->setProxy(''); + + $transferInfo = $client->request('/_nodes')->getTransferInfo(); + $this->assertEquals(200, $transferInfo['http_code']); + } + + /** + * @group functional + */ + public function testBodyReuse() + { + $client = $this->_getClient(); + + $index = $client->getIndex('elastica_body_reuse_test'); + $index->create(array(), true); + $this->_waitForAllocation($index); + + $type = $index->getType('test'); + $type->addDocument(new Document(1, array('test' => 'test'))); + + $index->refresh(); + + $resultSet = $index->search(array( + 'query' => array( + 'query_string' => array( + 'query' => 'pew pew pew', + ), + ), + )); + + $this->assertEquals(0, $resultSet->getTotalHits()); + + $response = $index->request('/_search', 'POST'); + $resultSet = new ResultSet($response, Query::create(array())); + + $this->assertEquals(1, $resultSet->getTotalHits()); + } + + /** + * @group functional + */ + public function testPostWith0Body() + { + $client = $this->_getClient(); + + $index = $client->getIndex('elastica_0_body'); + $index->create(array(), true); + $this->_waitForAllocation($index); + $index->refresh(); + + $tokens = $index->analyze('0'); + + $this->assertNotEmpty($tokens); + } + + protected function tearDown() + { + parent::tearDown(); + putenv('http_proxy='); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/MemcacheTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/MemcacheTest.php new file mode 100644 index 00000000..30897073 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/MemcacheTest.php @@ -0,0 +1,176 @@ +_getClient(array( + 'host' => $this->_getHost(), + 'port' => 11211, + 'transport' => 'Memcache', + )); + } + + /** + * @group functional + */ + public function testConstruct() + { + $client = $this->_getMemcacheClient(); + $this->assertEquals($this->_getHost(), $client->getConnection()->getHost()); + $this->assertEquals(11211, $client->getConnection()->getPort()); + } + + /** + * @group functional + */ + public function testCreateDocument() + { + $index = $this->_createIndex(); + $this->_waitForAllocation($index); + $type = $index->getType('foo'); + + // Create document + $document = new Document(1, array('username' => 'John Doe')); + $type->addDocument($document); + $index->refresh(); + + // Check it was saved + $document = $type->getDocument(1); + $this->assertEquals('John Doe', $document->get('username')); + } + + /** + * @group functional + * @expectedException Elastica\Exception\NotFoundException + */ + public function testDeleteDocument() + { + $index = $this->_createIndex(); + $this->_waitForAllocation($index); + $type = $index->getType('foo'); + + // Create document + $document = new Document(1, array('username' => 'John Doe')); + $type->addDocument($document); + $index->refresh(); + + // Delete document + $type->deleteById(1); + + // Check if document is not exists + $document = $type->getDocument(1); + } + + /** + * @group functional + */ + public function testUpdateDocument() + { + $index = $this->_createIndex(); + $this->_waitForAllocation($index); + $type = $index->getType('foo'); + + // Create document + $document = new Document(1, array('username' => 'John Doe')); + $type->addDocument($document); + $index->refresh(); + + // Check it was saved + $savedDocument = $type->getDocument(1); + $this->assertEquals('John Doe', $savedDocument->get('username')); + + // Update document + $newDocument = new Document(1, array('username' => 'Doe John')); + $type->updateDocument($newDocument); + $index->refresh(); + + // Check it was updated + $newSavedDocument = $type->getDocument(1); + $this->assertEquals('Doe John', $newSavedDocument->get('username')); + } + + /** + * @group functional + */ + public function testSearchDocument() + { + $index = $this->_createIndex(); + $this->_waitForAllocation($index); + $type = $index->getType('fruits'); + + // Create documents + $docs = array( + new Document(1, array('name' => 'banana')), + new Document(2, array('name' => 'apple')), + new Document(3, array('name' => 'orange')), + ); + $type->addDocuments($docs); + $index->refresh(); + + // Search documents + $queryString = new QueryString('orange'); + $query = new Query($queryString); + $resultSet = $type->search($query); + + // Check if correct document was found + $this->assertEquals(1, $resultSet->getTotalHits()); + $this->assertEquals(3, $resultSet[0]->getId()); + $data = $resultSet[0]->getData(); + $this->assertEquals('orange', $data['name']); + } + + /** + * @group functional + * @expectedException Elastica\Exception\InvalidException + * @expectedExceptionMessage is not supported in memcache transport + */ + public function testHeadRequest() + { + $client = $this->_getMemcacheClient(); + $client->request('foo', Request::HEAD); + } + + /** + * @group functional + * @expectedException Elastica\Exception\InvalidException + * @expectedExceptionMessage is not supported in memcache transport + */ + public function testInvalidRequest() + { + $client = $this->_getMemcacheClient(); + $client->request('foo', 'its_fail'); + } + + /** + * @group functional + * @expectedException Elastica\Exception\Connection\MemcacheException + * @expectedExceptionMessage is too long + */ + public function testRequestWithLongPath() + { + $client = $this->_getMemcacheClient(); + $index = $client->getIndex('memcache-test'); + $index->create(); + + $this->_waitForAllocation($index); + + $queryString = new QueryString(str_repeat('z', 300)); + $query = new Query($queryString); + $index->search($query); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/NullTransportTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/NullTransportTest.php new file mode 100644 index 00000000..cea3e3ba --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/NullTransportTest.php @@ -0,0 +1,96 @@ + + */ +class NullTransportTest extends BaseTest +{ + /** + * @group functional + */ + public function testEmptyResult() + { + // Creates a client with any destination, and verify it returns a response object when executed + $client = $this->_getClient(); + $connection = new Connection(array('transport' => 'NullTransport')); + $client->setConnections(array($connection)); + + $index = $client->getIndex('elasticaNullTransportTest1'); + + $resultSet = $index->search(new Query()); + $this->assertNotNull($resultSet); + + $response = $resultSet->getResponse(); + $this->assertNotNull($response); + + // Validate most of the expected fields in the response data. Consumers of the response + // object have a reasonable expectation of finding "hits", "took", etc + $responseData = $response->getData(); + $this->assertContains('took', $responseData); + $this->assertEquals(0, $responseData['took']); + $this->assertContains('_shards', $responseData); + $this->assertContains('hits', $responseData); + $this->assertContains('total', $responseData['hits']); + $this->assertEquals(0, $responseData['hits']['total']); + $this->assertContains('params', $responseData); + + $took = $response->getEngineTime(); + $this->assertEquals(0, $took); + + $errorString = $response->getError(); + $this->assertEmpty($errorString); + + $shards = $response->getShardsStatistics(); + $this->assertContains('total', $shards); + $this->assertEquals(0, $shards['total']); + $this->assertContains('successful', $shards); + $this->assertEquals(0, $shards['successful']); + $this->assertContains('failed', $shards); + $this->assertEquals(0, $shards['failed']); + } + + /** + * @group functional + */ + public function testExec() + { + $request = new Request('/test'); + $params = array('name' => 'ruflin'); + $transport = new NullTransport(); + $response = $transport->exec($request, $params); + + $this->assertInstanceOf('\Elastica\Response', $response); + + $data = $response->getData(); + $this->assertEquals($params, $data['params']); + } + + /** + * @group functional + */ + public function testOldObject() + { + if (version_compare(phpversion(), 7, '>=')) { + self::markTestSkipped('These objects are not supported in PHP 7'); + } + + $request = new Request('/test'); + $params = array('name' => 'ruflin'); + $transport = new \Elastica\Transport\Null(); + $response = $transport->exec($request, $params); + + $this->assertInstanceOf('\Elastica\Response', $response); + + $data = $response->getData(); + $this->assertEquals($params, $data['params']); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/ThriftTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/ThriftTest.php new file mode 100644 index 00000000..b73ef4f7 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/ThriftTest.php @@ -0,0 +1,135 @@ +_getHost(); + $port = 9500; + $client = $this->_getClient(array('host' => $host, 'port' => $port, 'transport' => 'Thrift')); + + $this->assertEquals($host, $client->getConnection()->getHost()); + $this->assertEquals($port, $client->getConnection()->getPort()); + } + + /** + * @group functional + * @dataProvider configProvider + */ + public function testSearchRequest($config) + { + $this->_checkPlugin(); + + // Creates a new index 'xodoa' and a type 'user' inside this index + $client = $this->_getClient($config); + + $index = $client->getIndex('elastica_test1'); + $index->create(array(), true); + + $type = $index->getType('user'); + + // Adds 1 document to the index + $doc1 = new Document(1, + array('username' => 'hans', 'test' => array('2', '3', '5')) + ); + $doc1->setVersion(0); + $type->addDocument($doc1); + + // Adds a list of documents with _bulk upload to the index + $docs = array(); + $docs[] = new Document(2, + array('username' => 'john', 'test' => array('1', '3', '6')) + ); + $docs[] = new Document(3, + array('username' => 'rolf', 'test' => array('2', '3', '7')) + ); + $type->addDocuments($docs); + + // Refresh index + $index->refresh(); + $resultSet = $type->search('rolf'); + + $this->assertEquals(1, $resultSet->getTotalHits()); + } + + /** + * @group unit + * @expectedException \Elastica\Exception\ConnectionException + */ + public function testInvalidHostRequest() + { + $this->_checkPlugin(); + + $client = $this->_getClient(array('host' => 'unknown', 'port' => 9555, 'transport' => 'Thrift')); + $client->getStatus(); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\ResponseException + */ + public function testInvalidElasticRequest() + { + $this->_checkPlugin(); + + $connection = new Connection(); + $connection->setHost($this->_getHost()); + $connection->setPort(9500); + $connection->setTransport('Thrift'); + + $client = $this->_getClient(); + $client->addConnection($connection); + + $index = new Index($client, 'missing_index'); + $index->getStatus(); + } + + public function configProvider() + { + return array( + array( + array( + 'host' => $this->_getHost(), + 'port' => 9500, + 'transport' => 'Thrift', + ), + ), + array( + array( + 'host' => $this->_getHost(), + 'port' => 9500, + 'transport' => 'Thrift', + 'config' => array( + 'framedTransport' => false, + 'sendTimeout' => 10000, + 'recvTimeout' => 20000, + ), + ), + ), + ); + } + + protected function _checkPlugin() + { + $nodes = $this->_getClient()->getCluster()->getNodes(); + if (!$nodes[0]->getInfo()->hasPlugin('transport-thrift')) { + $this->markTestSkipped('transport-thrift plugin not installed.'); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/TransportBenchmarkTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/TransportBenchmarkTest.php new file mode 100644 index 00000000..11a16a34 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Transport/TransportBenchmarkTest.php @@ -0,0 +1,261 @@ +_getClient($config); + $index = $client->getIndex('benchmark'.uniqid()); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + return $index->getType('benchmark'); + } + + /** + * @dataProvider providerTransport + * @group benchmark + */ + public function testAddDocument(array $config, $transport) + { + $this->_checkThrift($transport); + + $type = $this->getType($config); + $index = $type->getIndex(); + $index->create(array(), true); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $data = $this->getData($i); + $doc = new Document($i, $data); + $result = $type->addDocument($doc); + $times[] = $result->getQueryTime(); + $this->assertTrue($result->isOk()); + } + + $index->refresh(); + + self::logResults('insert', $transport, $times); + } + + /** + * @depends testAddDocument + * @dataProvider providerTransport + * @group benchmark + */ + public function testRandomRead(array $config, $transport) + { + $this->_checkThrift($transport); + + $type = $this->getType($config); + + $type->search('test'); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $test = rand(1, $this->_max); + $query = new Query(); + $query->setQuery(new \Elastica\Query\MatchAll()); + $query->setPostFilter(new \Elastica\Filter\Term(array('test' => $test))); + $result = $type->search($query); + $times[] = $result->getResponse()->getQueryTime(); + } + + self::logResults('random read', $transport, $times); + } + + /** + * @depends testAddDocument + * @dataProvider providerTransport + * @group benchmark + */ + public function testBulk(array $config, $transport) + { + $type = $this->getType($config); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $docs = array(); + for ($j = 0; $j < 10; $j++) { + $data = $this->getData($i.$j); + $docs[] = new Document($i, $data); + } + + $result = $type->addDocuments($docs); + $times[] = $result->getQueryTime(); + } + + self::logResults('bulk', $transport, $times); + } + + /** + * @dataProvider providerTransport + * @group benchmark + */ + public function testGetMapping(array $config, $transport) + { + $client = $this->_getClient($config); + $index = $client->getIndex('benchmark'); + $index->create(array(), true); + $type = $index->getType('mappingTest'); + + // Define mapping + $mapping = new \Elastica\Type\Mapping(); + $mapping->setParam('_boost', array('name' => '_boost', 'null_value' => 1.0)); + $mapping->setProperties(array( + 'id' => array('type' => 'integer', 'include_in_all' => false), + 'user' => array( + 'type' => 'object', + 'properties' => array( + 'name' => array('type' => 'string', 'include_in_all' => true), + 'fullName' => array('type' => 'string', 'include_in_all' => true), + ), + ), + 'msg' => array('type' => 'string', 'include_in_all' => true), + 'tstamp' => array('type' => 'date', 'include_in_all' => false), + 'location' => array('type' => 'geo_point', 'include_in_all' => false), + '_boost' => array('type' => 'float', 'include_in_all' => false), + )); + + $type->setMapping($mapping); + $index->refresh(); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $response = $type->request('_mapping', \Elastica\Request::GET); + $times[] = $response->getQueryTime(); + } + self::logResults('get mapping', $transport, $times); + } + + public function providerTransport() + { + return array( + array( + array( + 'transport' => 'Http', + 'host' => $this->_getHost(), + 'port' => $this->_getPort(), + 'persistent' => false, + ), + 'Http:NotPersistent', + ), + array( + array( + 'transport' => 'Http', + 'host' => $this->_getHost(), + 'port' => $this->_getPort(), + 'persistent' => true, + ), + 'Http:Persistent', + ), + array( + array( + 'transport' => 'Thrift', + 'host' => $this->_getHost(), + 'port' => 9500, + 'config' => array( + 'framedTransport' => false, + ), + ), + 'Thrift:Buffered', + ), + ); + } + + /** + * @param string $test + * + * @return array + */ + protected function getData($test) + { + $data = array( + 'test' => $test, + 'name' => array(), + ); + for ($i = 0; $i < $this->_maxData; $i++) { + $data['name'][] = uniqid(); + } + + return $data; + } + + /** + * @param $name + * @param $transport + * @param array $times + */ + protected static function logResults($name, $transport, array $times) + { + self::$_results[$name][$transport] = array( + 'count' => count($times), + 'max' => max($times) * 1000, + 'min' => min($times) * 1000, + 'mean' => (array_sum($times) / count($times)) * 1000, + ); + } + + protected static function printResults() + { + echo sprintf( + "\n%-12s | %-20s | %-12s | %-12s | %-12s | %-12s\n\n", + 'NAME', + 'TRANSPORT', + 'COUNT', + 'MAX', + 'MIN', + 'MEAN', + '%' + ); + foreach (self::$_results as $name => $values) { + $means = array(); + foreach ($values as $times) { + $means[] = $times['mean']; + } + $minMean = min($means); + foreach ($values as $transport => $times) { + $perc = (($times['mean'] - $minMean) / $minMean) * 100; + echo sprintf( + "%-12s | %-20s | %-12d | %-12.2f | %-12.2f | %-12.2f | %+03.2f\n", + $name, + $transport, + $times['count'], + $times['max'], + $times['min'], + $times['mean'], + $perc + ); + } + echo "\n"; + } + } + + protected function _checkThrift($transport) + { + if (strpos($transport, 'Thrift') !== false && !class_exists('Elasticsearch\\RestClient')) { + self::markTestSkipped('munkie/elasticsearch-thrift-php package should be installed to run thrift transport tests'); + } + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php new file mode 100644 index 00000000..925c23bb --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/Type/MappingTest.php @@ -0,0 +1,331 @@ +_getClient(); + $index = $client->getIndex('test'); + + $index->create(array(), true); + $type = $index->getType('test'); + + $mapping = new Mapping($type, + array( + 'firstname' => array('type' => 'string', 'store' => 'yes'), + // default is store => no expected + 'lastname' => array('type' => 'string'), + ) + ); + $mapping->disableSource(); + + $type->setMapping($mapping); + + $firstname = 'Nicolas'; + $doc = new Document(1, + array( + 'firstname' => $firstname, + 'lastname' => 'Ruflin', + ) + ); + + $type->addDocument($doc); + + $index->refresh(); + $queryString = new QueryString('ruflin'); + $query = Query::create($queryString); + $query->setFields(array('*')); + + $resultSet = $type->search($query); + $result = $resultSet->current(); + $fields = $result->getFields(); + + $this->assertEquals($firstname, $fields['firstname'][0]); + $this->assertArrayNotHasKey('lastname', $fields); + $this->assertEquals(1, count($fields)); + + $index->flush(); + $document = $type->getDocument(1); + + $this->assertEmpty($document->getData()); + + $index->delete(); + } + + /** + * @group functional + */ + public function testEnableAllField() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + + $mapping = new Mapping($type, array()); + + $mapping->enableAllField(); + + $data = $mapping->toArray(); + $this->assertTrue($data[$type->getName()]['_all']['enabled']); + + $response = $mapping->send(); + $this->assertTrue($response->isOk()); + + $index->delete(); + } + + /** + * @group functional + */ + public function testEnableTtl() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $index->create(array(), true); + $type = $index->getType('test'); + + $mapping = new Mapping($type, array()); + + $mapping->enableTtl(); + + $data = $mapping->toArray(); + $this->assertTrue($data[$type->getName()]['_ttl']['enabled']); + + $index->delete(); + } + + /** + * @group functional + */ + public function testNestedMapping() + { + $client = $this->_getClient(); + $index = $client->getIndex('test'); + + $index->create(array(), true); + $type = $index->getType('test'); + + //$this->markTestIncomplete('nested mapping is not set right yet'); + $mapping = new Mapping($type, + array( + 'test' => array( + 'type' => 'object', 'store' => 'yes', 'properties' => array( + 'user' => array( + 'properties' => array( + 'firstname' => array('type' => 'string', 'store' => 'yes'), + 'lastname' => array('type' => 'string', 'store' => 'yes'), + 'age' => array('type' => 'integer', 'store' => 'yes'), + ), + ), + ), + ), + ) + ); + + $response = $type->setMapping($mapping); + $this->assertFalse($response->hasError()); + + $doc = new Document(1, array( + 'user' => array( + 'firstname' => 'Nicolas', + 'lastname' => 'Ruflin', + 'age' => 9, + ), + )); + + $type->addDocument($doc); + + $index->refresh(); + $resultSet = $type->search('ruflin'); + $this->assertEquals($resultSet->count(), 1); + + $index->delete(); + } + + /** + * @group functional + */ + public function testParentMapping() + { + $index = $this->_createIndex(); + $parenttype = new Type($index, 'parenttype'); + $parentmapping = new Mapping($parenttype, + array( + 'name' => array('type' => 'string', 'store' => 'yes'), + ) + ); + + $parenttype->setMapping($parentmapping); + + $childtype = new Type($index, 'childtype'); + $childmapping = new Mapping($childtype, + array( + 'name' => array('type' => 'string', 'store' => 'yes'), + ) + ); + $childmapping->setParent('parenttype'); + + $childtype->setMapping($childmapping); + + $data = $childmapping->toArray(); + $this->assertEquals('parenttype', $data[$childtype->getName()]['_parent']['type']); + + $index->delete(); + } + + /** + * @group functional + */ + public function testMappingExample() + { + $index = $this->_createIndex(); + $type = $index->getType('notes'); + + $mapping = new Mapping($type, + array( + 'note' => array( + 'store' => 'yes', 'properties' => array( + 'titulo' => array('type' => 'string', 'store' => 'no', 'include_in_all' => true, 'boost' => 1.0), + 'contenido' => array('type' => 'string', 'store' => 'no', 'include_in_all' => true, 'boost' => 1.0), + ), + ), + ) + ); + + $type->setMapping($mapping); + + $doc = new Document(1, array( + 'note' => array( + array( + 'titulo' => 'nota1', + 'contenido' => 'contenido1', + ), + array( + 'titulo' => 'nota2', + 'contenido' => 'contenido2', + ), + ), + ) + ); + + $type->addDocument($doc); + + $index->delete(); + } + + /** + * @group functional + * + * Test setting a dynamic template and validate whether the right mapping is applied after adding a document which + * should match the dynamic template. The example is the template_1 from the Elasticsearch documentation. + * + * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-root-object-type.html + */ + public function testDynamicTemplate() + { + $index = $this->_createIndex(); + $type = $index->getType('person'); + + // set a dynamic template "template_1" which creates a multi field for multi* matches. + $mapping = new Mapping($type); + $mapping->setParam('dynamic_templates', array( + array('template_1' => array( + 'match' => 'multi*', + 'mapping' => array( + 'type' => 'multi_field', + 'fields' => array( + '{name}' => array('type' => '{dynamic_type}', 'index' => 'analyzed'), + 'org' => array('type' => '{dynamic_type}', 'index' => 'not_analyzed'), + ), + ), + )), + )); + + $mapping->send(); + + // when running the tests, the mapping sometimes isn't available yet. Optimize index to enforce reload mapping. + $index->optimize(); + + // create a document which should create a mapping for the field: multiname. + $testDoc = new Document('person1', array('multiname' => 'Jasper van Wanrooy'), $type); + $index->addDocuments(array($testDoc)); + sleep(1); //sleep 1 to ensure that the test passes every time + + // read the mapping from Elasticsearch and assert that the multiname.org field is "not_analyzed" + $newMapping = $type->getMapping(); + $this->assertArrayHasKey('person', $newMapping, + 'Person type not available in mapping from ES. Mapping set at all?'); + $this->assertArrayHasKey('properties', $newMapping['person'], + 'Person type doesnt have any properties. Document properly added?'); + $this->assertArrayHasKey('multiname', $newMapping['person']['properties'], + 'The multiname property is not added to the mapping. Document properly added?'); + $this->assertArrayHasKey('fields', $newMapping['person']['properties']['multiname'], + 'The multiname field of the Person type is presumably not a multi_field type. Dynamic mapping not applied?'); + $this->assertArrayHasKey('org', $newMapping['person']['properties']['multiname']['fields'], + 'The multi* matcher did not create a mapping for the multiname.org property when indexing the document.'); + $this->assertArrayHasKey('index', $newMapping['person']['properties']['multiname']['fields']['org'], + 'Indexing status of the multiname.org not available. Dynamic mapping not fully applied!'); + $this->assertEquals('not_analyzed', $newMapping['person']['properties']['multiname']['fields']['org']['index']); + + $index->delete(); + } + + /** + * @group functional + */ + public function testSetMeta() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $mapping = new Mapping($type, array( + 'firstname' => array('type' => 'string', 'store' => 'yes'), + 'lastname' => array('type' => 'string'), + )); + $mapping->setMeta(array('class' => 'test')); + $type->setMapping($mapping); + + $mappingData = $type->getMapping(); + $this->assertEquals('test', $mappingData['test']['_meta']['class']); + + $index->delete(); + } + + /** + * @group functional + */ + public function testGetters() + { + $index = $this->_createIndex(); + $type = $index->getType('test'); + $properties = array( + 'firstname' => array('type' => 'string', 'store' => 'yes'), + 'lastname' => array('type' => 'string'), + ); + $mapping = new Mapping($type, $properties); + $all = array( + 'enabled' => true, + 'store' => 'yes', + ); + $mapping->setParam('_all', $all); + $get_all = $mapping->getParam('_all'); + + $this->assertEquals($get_all, $all); + + $this->assertNull($mapping->getParam('_boost', $all)); + + $this->assertEquals($properties, $mapping->getProperties()); + + $index->delete(); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/TypeTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/TypeTest.php new file mode 100644 index 00000000..dcb74ac5 --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/TypeTest.php @@ -0,0 +1,968 @@ +_createIndex(); + + $type = new Type($index, 'user'); + + // Adds 1 document to the index + $doc1 = new Document(1, + array('username' => 'hans', 'test' => array('2', '3', '5')) + ); + $type->addDocument($doc1); + + // Adds a list of documents with _bulk upload to the index + $docs = array(); + $docs[] = new Document(2, + array('username' => 'john', 'test' => array('1', '3', '6')) + ); + $docs[] = new Document(3, + array('username' => 'rolf', 'test' => array('2', '3', '7')) + ); + $type->addDocuments($docs); + $index->refresh(); + + $resultSet = $type->search('rolf'); + $this->assertEquals(1, $resultSet->count()); + + $count = $type->count('rolf'); + $this->assertEquals(1, $count); + + // Test if source is returned + $result = $resultSet->current(); + $this->assertEquals(3, $result->getId()); + $data = $result->getData(); + $this->assertEquals('rolf', $data['username']); + } + + /** + * @group functional + */ + public function testCreateSearch() + { + $client = $this->_getClient(); + $index = new Index($client, 'test_index'); + $type = new Type($index, 'test_type'); + + $query = new Query\QueryString('test'); + $options = array( + 'limit' => 5, + 'explain' => true, + ); + + $search = $type->createSearch($query, $options); + + $expected = array( + 'query' => array( + 'query_string' => array( + 'query' => 'test', + ), + ), + 'size' => 5, + 'explain' => true, + ); + $this->assertEquals($expected, $search->getQuery()->toArray()); + $this->assertEquals(array('test_index'), $search->getIndices()); + $this->assertTrue($search->hasIndices()); + $this->assertTrue($search->hasIndex($index)); + $this->assertTrue($search->hasIndex('test_index')); + $this->assertFalse($search->hasIndex('test')); + $this->assertEquals(array('test_type'), $search->getTypes()); + $this->assertTrue($search->hasTypes()); + $this->assertTrue($search->hasType($type)); + $this->assertTrue($search->hasType('test_type')); + $this->assertFalse($search->hasType('test_type2')); + } + + /** + * @group functional + */ + public function testCreateSearchWithArray() + { + $client = $this->_getClient(); + $index = new Index($client, 'test_index'); + $type = new Type($index, 'test_type'); + + $query = array( + 'query' => array( + 'query_string' => array( + 'query' => 'test', + ), + ), + ); + + $options = array( + 'limit' => 5, + 'explain' => true, + ); + + $search = $type->createSearch($query, $options); + + $expected = array( + 'query' => array( + 'query_string' => array( + 'query' => 'test', + ), + ), + 'size' => 5, + 'explain' => true, + ); + $this->assertEquals($expected, $search->getQuery()->toArray()); + $this->assertEquals(array('test_index'), $search->getIndices()); + $this->assertTrue($search->hasIndices()); + $this->assertTrue($search->hasIndex($index)); + $this->assertTrue($search->hasIndex('test_index')); + $this->assertFalse($search->hasIndex('test')); + $this->assertEquals(array('test_type'), $search->getTypes()); + $this->assertTrue($search->hasTypes()); + $this->assertTrue($search->hasType($type)); + $this->assertTrue($search->hasType('test_type')); + $this->assertFalse($search->hasType('test_type2')); + } + + /** + * @group functional + */ + public function testNoSource() + { + $index = $this->_createIndex(); + + $type = new Type($index, 'user'); + $mapping = new Mapping($type, array( + 'id' => array('type' => 'integer', 'store' => 'yes'), + 'username' => array('type' => 'string', 'store' => 'no'), + )); + $mapping->setSource(array('enabled' => false)); + $type->setMapping($mapping); + + $mapping = $type->getMapping(); + + $this->assertArrayHasKey('user', $mapping); + $this->assertArrayHasKey('properties', $mapping['user']); + $this->assertArrayHasKey('id', $mapping['user']['properties']); + $this->assertArrayHasKey('type', $mapping['user']['properties']['id']); + $this->assertEquals('integer', $mapping['user']['properties']['id']['type']); + + // Adds 1 document to the index + $doc1 = new Document(1, + array('username' => 'hans', 'test' => array('2', '3', '5')) + ); + $type->addDocument($doc1); + + // Adds a list of documents with _bulk upload to the index + $docs = array(); + $docs[] = new Document(2, + array('username' => 'john', 'test' => array('1', '3', '6')) + ); + $docs[] = new Document(3, + array('username' => 'rolf', 'test' => array('2', '3', '7')) + ); + $type->addDocuments($docs); + + // To update index + $index->refresh(); + + $resultSet = $type->search('rolf'); + + $this->assertEquals(1, $resultSet->count()); + + // Tests if no source is in response except id + $result = $resultSet->current(); + $this->assertEquals(3, $result->getId()); + $this->assertEmpty($result->getData()); + } + + /** + * @group functional + */ + public function testDeleteById() + { + $index = $this->_createIndex(); + $type = new Type($index, 'user'); + + // Adds hans, john and rolf to the index + $docs = array( + new Document(1, array('username' => 'hans', 'test' => array('2', '3', '5'))), + new Document(2, array('username' => 'john', 'test' => array('1', '3', '6'))), + new Document(3, array('username' => 'rolf', 'test' => array('2', '3', '7'))), + new Document('foo/bar', array('username' => 'georg', 'test' => array('4', '2', '5'))), + ); + $type->addDocuments($docs); + $index->refresh(); + + // sanity check for rolf + $resultSet = $type->search('rolf'); + $this->assertEquals(1, $resultSet->count()); + $data = $resultSet->current()->getData(); + $this->assertEquals('rolf', $data['username']); + + // delete rolf + $type->deleteById(3); + $index->refresh(); + + // rolf should no longer be there + $resultSet = $type->search('rolf'); + $this->assertEquals(0, $resultSet->count()); + + // sanity check for id with slash + $resultSet = $type->search('georg'); + $this->assertEquals(1, $resultSet->count()); + + // delete georg + $type->deleteById('foo/bar'); + $index->refresh(); + + // georg should no longer be there + $resultSet = $type->search('georg'); + $this->assertEquals(0, $resultSet->count()); + + // it should not be possible to delete the entire type with this method + try { + $type->deleteById(''); + $this->fail('Delete with empty string id should fail'); + } catch (\InvalidArgumentException $e) { + $this->assertTrue(true); + } + + try { + $type->deleteById(' '); + $this->fail('Delete with one space string id should fail'); + } catch (\InvalidArgumentException $e) { + $this->assertTrue(true); + } + + try { + $type->deleteById(null); + $this->fail('Delete with null id should fail'); + } catch (\InvalidArgumentException $e) { + $this->assertTrue(true); + } + + try { + $type->deleteById(array()); + $this->fail('Delete with empty array id should fail'); + } catch (\InvalidArgumentException $e) { + $this->assertTrue(true); + } + + try { + $type->deleteById('*'); + $this->fail('Delete request should fail because of invalid id: *'); + } catch (NotFoundException $e) { + $this->assertTrue(true); + } + + try { + $type->deleteById('*:*'); + $this->fail('Delete request should fail because document with id *.* does not exist'); + } catch (NotFoundException $e) { + $this->assertTrue(true); + } + + try { + $type->deleteById('!'); + $this->fail('Delete request should fail because document with id ! does not exist'); + } catch (NotFoundException $e) { + $this->assertTrue(true); + } + + $index->refresh(); + + // rolf should no longer be there + $resultSet = $type->search('john'); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * @group functional + */ + public function testDeleteDocument() + { + $index = $this->_createIndex(); + $type = new Type($index, 'user'); + + // Adds hans, john and rolf to the index + $docs = array( + new Document(1, array('username' => 'hans', 'test' => array('2', '3', '5'))), + new Document(2, array('username' => 'john', 'test' => array('1', '3', '6'))), + new Document(3, array('username' => 'rolf', 'test' => array('2', '3', '7'))), + ); + $type->addDocuments($docs); + $index->refresh(); + + $document = $type->getDocument(1); + $this->assertEquals(1, $document->getId()); + $this->assertEquals('hans', $document->get('username')); + + $this->assertEquals(3, $type->count()); + + $type->deleteDocument($document); + $index->refresh(); + + try { + $type->getDocument(1); + $this->fail('Document was not deleted'); + } catch (NotFoundException $e) { + $this->assertTrue(true); + $this->assertEquals(2, $type->count(), 'Documents count in type should be 2'); + } + } + + /** + * @group functional + * @expectedException \Elastica\Exception\NotFoundException + */ + public function testGetDocumentNotExist() + { + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + $type->addDocument(new Document(1, array('name' => 'ruflin'))); + $index->refresh(); + + $type->getDocument(1); + + $type->getDocument(2); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\ResponseException + */ + public function testGetDocumentNotExistingIndex() + { + $client = $this->_getClient(); + $index = new Index($client, 'index'); + $type = new Type($index, 'type'); + + $type->getDocument(1); + } + + /** + * @group functional + */ + public function testDeleteByQueryWithQueryString() + { + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + $type->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type->addDocument(new Document(2, array('name' => 'ruflin'))); + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(2, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(1, $response->count()); + + // Delete first document + $response = $type->deleteByQuery('nicolas'); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + // Makes sure, document is deleted + $response = $index->search('ruflin*'); + $this->assertEquals(1, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(0, $response->count()); + } + + /** + * @group functional + */ + public function testDeleteByQueryWithQuery() + { + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + $type->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type->addDocument(new Document(2, array('name' => 'ruflin'))); + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(2, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(1, $response->count()); + + // Delete first document + $response = $type->deleteByQuery(new SimpleQueryString('nicolas')); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + // Makes sure, document is deleted + $response = $index->search('ruflin*'); + $this->assertEquals(1, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(0, $response->count()); + } + + /** + * @group functional + */ + public function testDeleteByQueryWithQueryAndOptions() + { + $index = $this->_createIndex(null, true, 2); + $type = new Type($index, 'test'); + $type->addDocument(new Document(1, array('name' => 'ruflin nicolas'))); + $type->addDocument(new Document(2, array('name' => 'ruflin'))); + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(2, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(1, $response->count()); + + // Route to the wrong document id; should not delete + $response = $type->deleteByQuery(new SimpleQueryString('nicolas'), array('routing' => '2')); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + $response = $index->search('ruflin*'); + $this->assertEquals(2, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(1, $response->count()); + + // Delete first document + $response = $type->deleteByQuery(new SimpleQueryString('nicolas'), array('routing' => '1')); + $this->assertTrue($response->isOk()); + + $index->refresh(); + + // Makes sure, document is deleted + $response = $index->search('ruflin*'); + $this->assertEquals(1, $response->count()); + + $response = $index->search('nicolas'); + $this->assertEquals(0, $response->count()); + } + + /** + * Test to see if Elastica_Type::getDocument() is properly using + * the fields array when available instead of _source. + * + * @group functional + */ + public function testGetDocumentWithFieldsSelection() + { + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + $type->addDocument(new Document(1, array('name' => 'loris', 'country' => 'FR', 'email' => 'test@test.com'))); + $index->refresh(); + + $document = $type->getDocument(1, array('fields' => 'name,email')); + $data = $document->getData(); + + $this->assertArrayHasKey('name', $data); + $this->assertArrayHasKey('email', $data); + $this->assertArrayNotHasKey('country', $data); + } + + /** + * Test to see if search Default Limit works. + * + * @group functional + */ + public function testLimitDefaultType() + { + $client = $this->_getClient(); + $index = $client->getIndex('zero'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $docs = array(); + $docs[] = new Document(1, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(2, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(3, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(4, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(5, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(6, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(7, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(8, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(9, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(10, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + $docs[] = new Document(11, array('id' => 1, 'email' => 'test@test.com', 'username' => 'farrelley')); + + $type = $index->getType('zeroType'); + $type->addDocuments($docs); + $index->refresh(); + + // default results (limit default is 10) + $resultSet = $type->search('farrelley'); + $this->assertEquals(10, $resultSet->count()); + + // limit = 1 + $resultSet = $type->search('farrelley', 1); + $this->assertEquals(1, $resultSet->count()); + } + + /** + * Test Delete of index type. After delete will check for type mapping. + * + * @group functional + */ + public function testDeleteType() + { + $index = $this->_createIndex(); + $type = new Type($index, 'test'); + $type->addDocuments(array( + new Document(1, array('name' => 'ruflin nicolas')), + new Document(2, array('name' => 'ruflin')), + )); + $index->refresh(); + + // sleep a moment to be sure that all nodes in cluster has new type + sleep(5); + + $type->delete(); + $index->optimize(); + + $this->assertFalse($type->exists()); + } + + /** + * @group functional + */ + public function testMoreLikeThisApi() + { + $client = $this->_getClient(array('persistent' => false)); + $index = $client->getIndex('elastica_test'); + $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); + + $type = new Type($index, 'mlt_test'); + $type->addDocuments(array( + new Document(1, array('visible' => true, 'name' => 'bruce wayne batman')), + new Document(2, array('visible' => true, 'name' => 'bruce wayne')), + new Document(3, array('visible' => false, 'name' => 'bruce wayne')), + new Document(4, array('visible' => true, 'name' => 'batman')), + new Document(5, array('visible' => false, 'name' => 'batman')), + new Document(6, array('visible' => true, 'name' => 'superman')), + new Document(7, array('visible' => true, 'name' => 'spiderman')), + )); + $index->refresh(); + + $document = $type->getDocument(1); + + // Return all similar + $resultSet = $type->moreLikeThis($document, array('min_term_freq' => '1', 'min_doc_freq' => '1')); + $this->assertEquals(4, $resultSet->count()); + + // Return just the visible similar + $query = new Query(); + $filterTerm = new Term(); + $filterTerm->setTerm('visible', true); + $query->setPostFilter($filterTerm); + + $resultSet = $type->moreLikeThis($document, array('min_term_freq' => '1', 'min_doc_freq' => '1'), $query); + $this->assertEquals(2, $resultSet->count()); + } + + /** + * @group functional + */ + public function testUpdateDocument() + { + $client = $this->_getClient(); + $index = $client->getIndex('elastica_test'); + $type = $index->getType('update_type'); + $id = 1; + $type->addDocument(new Document($id, array('name' => 'bruce wayne batman', 'counter' => 1))); + $newName = 'batman'; + + $document = new Document(); + $script = new Script( + 'ctx._source.name = name; ctx._source.counter += count', + array( + 'name' => $newName, + 'count' => 2, + ), + null, + $id + ); + $script->setUpsert($document); + + $type->updateDocument($script, array('refresh' => true)); + $updatedDoc = $type->getDocument($id)->getData(); + $this->assertEquals($newName, $updatedDoc['name'], 'Name was not updated'); + $this->assertEquals(3, $updatedDoc['counter'], 'Counter was not incremented'); + } + + /** + * @group functional + */ + public function testUpdateDocumentWithIdForwardSlashes() + { + $client = $this->_getClient(); + $index = $client->getIndex('elastica_test'); + $type = $index->getType('update_type'); + $id = '/id/with/forward/slashes'; + $type->addDocument(new Document($id, array('name' => 'bruce wayne batman', 'counter' => 1))); + $newName = 'batman'; + + $document = new Document(); + $script = new Script( + 'ctx._source.name = name; ctx._source.counter += count', + array( + 'name' => $newName, + 'count' => 2, + ), + null, + $id + ); + $script->setUpsert($document); + + $type->updateDocument($script, array('refresh' => true)); + $updatedDoc = $type->getDocument($id)->getData(); + $this->assertEquals($newName, $updatedDoc['name'], 'Name was not updated'); + $this->assertEquals(3, $updatedDoc['counter'], 'Counter was not incremented'); + } + + /** + * @group functional + */ + public function testUpdateDocumentWithParameter() + { + $client = $this->_getClient(); + $index = $client->getIndex('elastica_test'); + $type = $index->getType('update_type'); + $id = 1; + $type->addDocument(new Document($id, array('name' => 'bruce wayne batman', 'counter' => 1))); + $newName = 'batman'; + + $document = new Document(); + $script = new Script( + 'ctx._source.name = name; ctx._source.counter += count', + array( + 'name' => $newName, + 'count' => 2, + ), + null, + $id + ); + $script->setUpsert($document); + + try { + $type->updateDocument($script, array('version' => 999)); // Wrong version number to make the update fail + } catch (ResponseException $e) { + $this->assertContains('VersionConflictEngineException', $e->getMessage()); + } + $updatedDoc = $type->getDocument($id)->getData(); + $this->assertNotEquals($newName, $updatedDoc['name'], 'Name was updated'); + $this->assertNotEquals(3, $updatedDoc['counter'], 'Counter was incremented'); + } + + /** + * @group functional + */ + public function testUpdateDocumentWithFieldsSource() + { + $client = $this->_getClient(); + $index = $client->getIndex('elastica_test'); + $type = $index->getType('update_type'); + + $client->setConfigValue('document', array('autoPopulate' => true)); + + $newDocument = new Document(null, array('counter' => 5, 'name' => 'Batman')); + + $this->assertFalse($newDocument->hasVersion()); + + $response = $type->addDocument($newDocument); + $responseData = $response->getData(); + + $this->assertTrue($newDocument->hasVersion()); + $this->assertArrayHasKey('_version', $responseData, '_version is missing in response data it is weird'); + $this->assertEquals(1, $responseData['_version']); + $this->assertEquals($responseData['_version'], $newDocument->getVersion()); + + $this->assertTrue($newDocument->hasId()); + + $script = new Script('ctx._source.counter += count; ctx._source.realName = realName'); + $script->setId($newDocument->getId()); + $script->setParam('count', 7); + $script->setParam('realName', 'Bruce Wayne'); + $script->setUpsert($newDocument); + + $newDocument->setFieldsSource(); + + $response = $type->updateDocument($script); + $responseData = $response->getData(); + + $data = $type->getDocument($newDocument->getId())->getData(); + + $this->assertEquals(12, $data['counter']); + $this->assertEquals('Batman', $data['name']); + $this->assertEquals('Bruce Wayne', $data['realName']); + + $this->assertTrue($newDocument->hasVersion()); + $this->assertArrayHasKey('_version', $responseData, '_version is missing in response data it is weird'); + $this->assertEquals(2, $responseData['_version']); + + $document = $type->getDocument($newDocument->getId()); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\InvalidException + */ + public function testUpdateDocumentWithoutId() + { + $index = $this->_createIndex(); + $this->_waitForAllocation($index); + $type = $index->getType('elastica_type'); + + $document = new Document(); + + $type->updateDocument($document); + } + + /** + * @group functional + */ + public function testUpdateDocumentWithoutSource() + { + $index = $this->_createIndex(); + $type = $index->getType('elastica_type'); + + $mapping = new Mapping(); + $mapping->setProperties(array( + 'name' => array( + 'type' => 'string', + 'store' => 'yes', ), + 'counter' => array( + 'type' => 'integer', + 'store' => 'no', + ), + )); + $mapping->disableSource(); + $type->setMapping($mapping); + + $newDocument = new Document(); + $newDocument->setAutoPopulate(); + $newDocument->set('name', 'Batman'); + $newDocument->set('counter', 1); + + $type->addDocument($newDocument); + + $script = new Script('ctx._source.counter += count; ctx._source.name = name'); + $script->setId($newDocument->getId()); + $script->setParam('count', 2); + $script->setParam('name', 'robin'); + + $script->setUpsert($newDocument); + + try { + $type->updateDocument($script); + $this->fail('Update request should fail because source is disabled. Fields param is not set'); + } catch (ResponseException $e) { + $this->assertContains('DocumentSourceMissingException', $e->getMessage()); + } + + $newDocument->setFieldsSource(); + + try { + $type->updateDocument($newDocument); + $this->fail('Update request should fail because source is disabled. Fields param is set to _source'); + } catch (ResponseException $e) { + $this->assertContains('DocumentSourceMissingException', $e->getMessage()); + } + } + + /** + * @group functional + */ + public function testAddDocumentHashId() + { + $index = $this->_createIndex(); + $type = $index->getType('test2'); + + $hashId = '#1'; + + $doc = new Document($hashId, array('name' => 'ruflin')); + $type->addDocument($doc); + + $index->refresh(); + + $search = new Search($index->getClient()); + $search->addIndex($index); + $resultSet = $search->search(new MatchAll()); + $this->assertEquals($hashId, $resultSet->current()->getId()); + + $doc = $type->getDocument($hashId); + $this->assertEquals($hashId, $doc->getId()); + } + + /** + * @group functional + */ + public function testAddDocumentAutoGeneratedId() + { + $index = $this->_createIndex(); + $type = $index->getType('elastica_type'); + + $document = new Document(); + $document->setAutoPopulate(); + $document->set('name', 'ruflin'); + $this->assertEquals('', $document->getId()); + $this->assertFalse($document->hasId()); + + $type->addDocument($document); + + $this->assertNotEquals('', $document->getId()); + $this->assertTrue($document->hasId()); + + $foundDoc = $type->getDocument($document->getId()); + $this->assertInstanceOf('Elastica\Document', $foundDoc); + $this->assertEquals($document->getId(), $foundDoc->getId()); + $data = $foundDoc->getData(); + $this->assertArrayHasKey('name', $data); + $this->assertEquals('ruflin', $data['name']); + } + + /** + * @group functional + * @expectedException \Elastica\Exception\RuntimeException + */ + public function testAddDocumentWithoutSerializer() + { + $index = $this->_createIndex(); + $this->_waitForAllocation($index); + + $type = new Type($index, 'user'); + + $type->addObject(new \stdClass()); + } + + /** + * @group functional + */ + public function testAddObject() + { + $index = $this->_createIndex(); + + $type = new Type($index, 'user'); + $type->setSerializer('get_object_vars'); + + $userObject = new \stdClass(); + $userObject->username = 'hans'; + $userObject->test = array('2', '3', '5'); + + $type->addObject($userObject); + + $index->refresh(); + + $resultSet = $type->search('hans'); + $this->assertEquals(1, $resultSet->count()); + + // Test if source is returned + $result = $resultSet->current(); + $data = $result->getData(); + $this->assertEquals('hans', $data['username']); + } + + /** + * @group unit + */ + public function testSetSerializer() + { + $index = $this->_getClient()->getIndex('foo'); + $type = $index->getType('user'); + $ret = $type->setSerializer('get_object_vars'); + $this->assertInstanceOf('Elastica\Type', $ret); + } + + /** + * @group functional + */ + public function testExists() + { + $index = $this->_createIndex(); + $this->assertTrue($index->exists()); + + $type = new Type($index, 'user'); + $this->assertFalse($type->exists()); + + $type->addDocument(new Document(1, array('name' => 'test name'))); + $index->optimize(); + + // sleep a moment to be sure that all nodes in cluster has new type + sleep(5); + + //Test if type exists + $this->assertTrue($type->exists()); + + $index->delete(); + $this->assertFalse($index->exists()); + } + + /** + * @group functional + */ + public function testGetMapping() + { + $typeName = 'test-type'; + + $index = $this->_createIndex(); + $indexName = $index->getName(); + $type = new Type($index, $typeName); + $mapping = new Mapping($type, $expect = array( + 'id' => array('type' => 'integer', 'store' => true), + )); + $type->setMapping($mapping); + + $client = $index->getClient(); + + $this->assertEquals( + array('test-type' => array('properties' => $expect)), + $client->getIndex($indexName)->getType($typeName)->getMapping() + ); + } + + /** + * @group functional + */ + public function testGetMappingAlias() + { + $aliasName = 'test-alias'; + $typeName = 'test-alias-type'; + + $index = $this->_createIndex(); + $index->addAlias($aliasName); + $type = new Type($index, $typeName); + $mapping = new Mapping($type, $expect = array( + 'id' => array('type' => 'integer', 'store' => true), + )); + $type->setMapping($mapping); + + $client = $index->getClient(); + + $this->assertEquals( + array('test-alias-type' => array('properties' => $expect)), + $client->getIndex($aliasName)->getType($typeName)->getMapping() + ); + } +} diff --git a/vendor/ruflin/elastica/test/lib/Elastica/Test/UtilTest.php b/vendor/ruflin/elastica/test/lib/Elastica/Test/UtilTest.php new file mode 100644 index 00000000..a5b0f42e --- /dev/null +++ b/vendor/ruflin/elastica/test/lib/Elastica/Test/UtilTest.php @@ -0,0 +1,139 @@ +assertEquals($escaped, Util::escapeTerm($unescaped)); + } + + public function getEscapeTermPairs() + { + return array( + array('', ''), + array('pragmatic banana', 'pragmatic banana'), + array('oh yeah!', 'oh yeah\\!'), + // Seperate test below because phpunit seems to have some problems + //array('\\+-&&||!(){}[]^"~*?:', '\\\\\\+\\-\\&&\\||\\!\\(\\)\\{\\}\\[\\]\\^\\"\\~\\*\\?\\:'), + array('some signs, can stay.', 'some signs, can stay.'), + ); + } + + /** + * @group unit + * @dataProvider getReplaceBooleanWordsPairs + */ + public function testReplaceBooleanWords($before, $after) + { + $this->assertEquals($after, Util::replaceBooleanWords($before)); + } + + public function getReplaceBooleanWordsPairs() + { + return array( + array('to be OR not to be', 'to be || not to be'), + array('ORIGINAL GIFTS', 'ORIGINAL GIFTS'), + array('Black AND White', 'Black && White'), + array('TIMBERLAND Men`s', 'TIMBERLAND Men`s'), + array('hello NOT kitty', 'hello !kitty'), + array('SEND NOTIFICATION', 'SEND NOTIFICATION'), + ); + } + + /** + * @group unit + */ + public function testEscapeTermSpecialCharacters() + { + $before = '\\+-&&||!(){}[]^"~*?:/<>'; + $after = '\\\\\\+\\-\\&&\\||\\!\\(\\)\\{\\}\\[\\]\\^\\"\\~\\*\\?\\:\\/\<\>'; + + $this->assertEquals(Util::escapeTerm($before), $after); + } + + /** + * @group unit + */ + public function testToCamelCase() + { + $string = 'hello_world'; + $this->assertEquals('HelloWorld', Util::toCamelCase($string)); + + $string = 'how_are_you_today'; + $this->assertEquals('HowAreYouToday', Util::toCamelCase($string)); + } + + /** + * @group unit + */ + public function testToSnakeCase() + { + $string = 'HelloWorld'; + $this->assertEquals('hello_world', Util::toSnakeCase($string)); + + $string = 'HowAreYouToday'; + $this->assertEquals('how_are_you_today', Util::toSnakeCase($string)); + } + + /** + * @group unit + */ + public function testConvertRequestToCurlCommand() + { + $path = 'test'; + $method = Request::POST; + $query = array('no' => 'params'); + $data = array('key' => 'value'); + + $connection = new Connection(); + $connection->setHost($this->_getHost()); + $connection->setPort('9200'); + + $request = new Request($path, $method, $data, $query, $connection); + + $curlCommand = Util::convertRequestToCurlCommand($request); + + $expected = 'curl -XPOST \'http://'.$this->_getHost().':9200/test?no=params\' -d \'{"key":"value"}\''; + $this->assertEquals($expected, $curlCommand); + } + + /** + * @group unit + */ + public function testConvertDateTimeObjectWithTimezone() + { + $dateTimeObject = new \DateTime(); + $timestamp = $dateTimeObject->getTimestamp(); + + $convertedString = Util::convertDateTimeObject($dateTimeObject); + + $date = date('Y-m-d\TH:i:sP', $timestamp); + + $this->assertEquals($convertedString, $date); + } + + /** + * @group unit + */ + public function testConvertDateTimeObjectWithoutTimezone() + { + $dateTimeObject = new \DateTime(); + $timestamp = $dateTimeObject->getTimestamp(); + + $convertedString = Util::convertDateTimeObject($dateTimeObject, false); + + $date = date('Y-m-d\TH:i:s\Z', $timestamp); + + $this->assertEquals($convertedString, $date); + } +} diff --git a/vendor/ruflin/elastica/test/phpunit.xhprof.xml b/vendor/ruflin/elastica/test/phpunit.xhprof.xml new file mode 100644 index 00000000..59878cc2 --- /dev/null +++ b/vendor/ruflin/elastica/test/phpunit.xhprof.xml @@ -0,0 +1,39 @@ + + + + lib/Elastica/Test/Transport/TransportBenchmarkTest.php + + + + + + + + /var/www/xhprof/xhprof_lib/utils/xhprof_lib.php + + + /var/www/xhprof/xhprof_lib/utils/xhprof_runs.php + + + http://xhprof.local/ + + + Elastica + + + XHPROF_FLAGS_CPU,XHPROF_FLAGS_MEMORY + + + /var/www/xhprof/xhprof_lib/config.php + + + call_user_func,call_user_func_array + + + + + + diff --git a/vendor/ruflin/elastica/test/phpunit.xml.dist b/vendor/ruflin/elastica/test/phpunit.xml.dist new file mode 100644 index 00000000..51993e0a --- /dev/null +++ b/vendor/ruflin/elastica/test/phpunit.xml.dist @@ -0,0 +1,27 @@ + + + + + ../lib/ + + + + + ./lib/Elastica/ + + + diff --git a/vendor/symfony/process/CHANGELOG.md b/vendor/symfony/process/CHANGELOG.md new file mode 100644 index 00000000..2f3c1beb --- /dev/null +++ b/vendor/symfony/process/CHANGELOG.md @@ -0,0 +1,40 @@ +CHANGELOG +========= + +2.5.0 +----- + + * added support for PTY mode + * added the convenience method "mustRun" + * deprecation: Process::setStdin() is deprecated in favor of Process::setInput() + * deprecation: Process::getStdin() is deprecated in favor of Process::getInput() + * deprecation: Process::setInput() and ProcessBuilder::setInput() do not accept non-scalar types + +2.4.0 +----- + + * added the ability to define an idle timeout + +2.3.0 +----- + + * added ProcessUtils::escapeArgument() to fix the bug in escapeshellarg() function on Windows + * added Process::signal() + * added Process::getPid() + * added support for a TTY mode + +2.2.0 +----- + + * added ProcessBuilder::setArguments() to reset the arguments on a builder + * added a way to retrieve the standard and error output incrementally + * added Process:restart() + +2.1.0 +----- + + * added support for non-blocking processes (start(), wait(), isRunning(), stop()) + * enhanced Windows compatibility + * added Process::getExitCodeText() that returns a string representation for + the exit code returned by the process + * added ProcessBuilder diff --git a/vendor/symfony/process/Exception/ExceptionInterface.php b/vendor/symfony/process/Exception/ExceptionInterface.php new file mode 100644 index 00000000..75c1c9e5 --- /dev/null +++ b/vendor/symfony/process/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Exception; + +/** + * Marker Interface for the Process Component. + * + * @author Johannes M. Schmitt + */ +interface ExceptionInterface +{ +} diff --git a/vendor/symfony/process/Exception/InvalidArgumentException.php b/vendor/symfony/process/Exception/InvalidArgumentException.php new file mode 100644 index 00000000..926ee211 --- /dev/null +++ b/vendor/symfony/process/Exception/InvalidArgumentException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Exception; + +/** + * InvalidArgumentException for the Process Component. + * + * @author Romain Neutron + */ +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/process/Exception/LogicException.php b/vendor/symfony/process/Exception/LogicException.php new file mode 100644 index 00000000..be3d490d --- /dev/null +++ b/vendor/symfony/process/Exception/LogicException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Exception; + +/** + * LogicException for the Process Component. + * + * @author Romain Neutron + */ +class LogicException extends \LogicException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/process/Exception/ProcessFailedException.php b/vendor/symfony/process/Exception/ProcessFailedException.php new file mode 100644 index 00000000..7523a5e9 --- /dev/null +++ b/vendor/symfony/process/Exception/ProcessFailedException.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Exception; + +use Symfony\Component\Process\Process; + +/** + * Exception for failed processes. + * + * @author Johannes M. Schmitt + */ +class ProcessFailedException extends RuntimeException +{ + private $process; + + public function __construct(Process $process) + { + if ($process->isSuccessful()) { + throw new InvalidArgumentException('Expected a failed process, but the given process was successful.'); + } + + $error = sprintf('The command "%s" failed.'."\nExit Code: %s(%s)", + $process->getCommandLine(), + $process->getExitCode(), + $process->getExitCodeText() + ); + + if (!$process->isOutputDisabled()) { + $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s", + $process->getOutput(), + $process->getErrorOutput() + ); + } + + parent::__construct($error); + + $this->process = $process; + } + + public function getProcess() + { + return $this->process; + } +} diff --git a/vendor/symfony/process/Exception/ProcessTimedOutException.php b/vendor/symfony/process/Exception/ProcessTimedOutException.php new file mode 100644 index 00000000..d4511469 --- /dev/null +++ b/vendor/symfony/process/Exception/ProcessTimedOutException.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Exception; + +use Symfony\Component\Process\Process; + +/** + * Exception that is thrown when a process times out. + * + * @author Johannes M. Schmitt + */ +class ProcessTimedOutException extends RuntimeException +{ + const TYPE_GENERAL = 1; + const TYPE_IDLE = 2; + + private $process; + private $timeoutType; + + public function __construct(Process $process, $timeoutType) + { + $this->process = $process; + $this->timeoutType = $timeoutType; + + parent::__construct(sprintf( + 'The process "%s" exceeded the timeout of %s seconds.', + $process->getCommandLine(), + $this->getExceededTimeout() + )); + } + + public function getProcess() + { + return $this->process; + } + + public function isGeneralTimeout() + { + return $this->timeoutType === self::TYPE_GENERAL; + } + + public function isIdleTimeout() + { + return $this->timeoutType === self::TYPE_IDLE; + } + + public function getExceededTimeout() + { + switch ($this->timeoutType) { + case self::TYPE_GENERAL: + return $this->process->getTimeout(); + + case self::TYPE_IDLE: + return $this->process->getIdleTimeout(); + + default: + throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType)); + } + } +} diff --git a/vendor/symfony/process/Exception/RuntimeException.php b/vendor/symfony/process/Exception/RuntimeException.php new file mode 100644 index 00000000..adead253 --- /dev/null +++ b/vendor/symfony/process/Exception/RuntimeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Exception; + +/** + * RuntimeException for the Process Component. + * + * @author Johannes M. Schmitt + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/process/ExecutableFinder.php b/vendor/symfony/process/ExecutableFinder.php new file mode 100644 index 00000000..a9c0a5c8 --- /dev/null +++ b/vendor/symfony/process/ExecutableFinder.php @@ -0,0 +1,89 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process; + +/** + * Generic executable finder. + * + * @author Fabien Potencier + * @author Johannes M. Schmitt + */ +class ExecutableFinder +{ + private $suffixes = array('.exe', '.bat', '.cmd', '.com'); + + /** + * Replaces default suffixes of executable. + * + * @param array $suffixes + */ + public function setSuffixes(array $suffixes) + { + $this->suffixes = $suffixes; + } + + /** + * Adds new possible suffix to check for executable. + * + * @param string $suffix + */ + public function addSuffix($suffix) + { + $this->suffixes[] = $suffix; + } + + /** + * Finds an executable by name. + * + * @param string $name The executable name (without the extension) + * @param string $default The default to return if no executable is found + * @param array $extraDirs Additional dirs to check into + * + * @return string The executable path or default value + */ + public function find($name, $default = null, array $extraDirs = array()) + { + if (ini_get('open_basedir')) { + $searchPath = explode(PATH_SEPARATOR, ini_get('open_basedir')); + $dirs = array(); + foreach ($searchPath as $path) { + if (is_dir($path)) { + $dirs[] = $path; + } else { + if (basename($path) == $name && is_executable($path)) { + return $path; + } + } + } + } else { + $dirs = array_merge( + explode(PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')), + $extraDirs + ); + } + + $suffixes = array(''); + if ('\\' === DIRECTORY_SEPARATOR) { + $pathExt = getenv('PATHEXT'); + $suffixes = $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes; + } + foreach ($suffixes as $suffix) { + foreach ($dirs as $dir) { + if (is_file($file = $dir.DIRECTORY_SEPARATOR.$name.$suffix) && ('\\' === DIRECTORY_SEPARATOR || is_executable($file))) { + return $file; + } + } + } + + return $default; + } +} diff --git a/vendor/symfony/process/LICENSE b/vendor/symfony/process/LICENSE new file mode 100644 index 00000000..43028bc6 --- /dev/null +++ b/vendor/symfony/process/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2015 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/process/PhpExecutableFinder.php b/vendor/symfony/process/PhpExecutableFinder.php new file mode 100644 index 00000000..f8f57cc5 --- /dev/null +++ b/vendor/symfony/process/PhpExecutableFinder.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process; + +/** + * An executable finder specifically designed for the PHP executable. + * + * @author Fabien Potencier + * @author Johannes M. Schmitt + */ +class PhpExecutableFinder +{ + private $executableFinder; + + public function __construct() + { + $this->executableFinder = new ExecutableFinder(); + } + + /** + * Finds The PHP executable. + * + * @param bool $includeArgs Whether or not include command arguments + * + * @return string|false The PHP executable path or false if it cannot be found + */ + public function find($includeArgs = true) + { + // HHVM support + if (defined('HHVM_VERSION')) { + return (getenv('PHP_BINARY') ?: PHP_BINARY).($includeArgs ? ' '.implode(' ', $this->findArguments()) : ''); + } + + // PHP_BINARY return the current sapi executable + if (defined('PHP_BINARY') && PHP_BINARY && in_array(PHP_SAPI, array('cli', 'cli-server')) && is_file(PHP_BINARY)) { + return PHP_BINARY; + } + + if ($php = getenv('PHP_PATH')) { + if (!is_executable($php)) { + return false; + } + + return $php; + } + + if ($php = getenv('PHP_PEAR_PHP_BIN')) { + if (is_executable($php)) { + return $php; + } + } + + $dirs = array(PHP_BINDIR); + if ('\\' === DIRECTORY_SEPARATOR) { + $dirs[] = 'C:\xampp\php\\'; + } + + return $this->executableFinder->find('php', false, $dirs); + } + + /** + * Finds the PHP executable arguments. + * + * @return array The PHP executable arguments + */ + public function findArguments() + { + $arguments = array(); + + // HHVM support + if (defined('HHVM_VERSION')) { + $arguments[] = '--php'; + } + + return $arguments; + } +} diff --git a/vendor/symfony/process/PhpProcess.php b/vendor/symfony/process/PhpProcess.php new file mode 100644 index 00000000..6a585874 --- /dev/null +++ b/vendor/symfony/process/PhpProcess.php @@ -0,0 +1,71 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process; + +use Symfony\Component\Process\Exception\RuntimeException; + +/** + * PhpProcess runs a PHP script in an independent process. + * + * $p = new PhpProcess(''); + * $p->run(); + * print $p->getOutput()."\n"; + * + * @author Fabien Potencier + * + * @api + */ +class PhpProcess extends Process +{ + /** + * Constructor. + * + * @param string $script The PHP script to run (as a string) + * @param string $cwd The working directory + * @param array $env The environment variables + * @param int $timeout The timeout in seconds + * @param array $options An array of options for proc_open + * + * @api + */ + public function __construct($script, $cwd = null, array $env = array(), $timeout = 60, array $options = array()) + { + $executableFinder = new PhpExecutableFinder(); + if (false === $php = $executableFinder->find()) { + $php = null; + } + + parent::__construct($php, $cwd, $env, $script, $timeout, $options); + } + + /** + * Sets the path to the PHP binary to use. + * + * @api + */ + public function setPhpBinary($php) + { + $this->setCommandLine($php); + } + + /** + * {@inheritdoc} + */ + public function start($callback = null) + { + if (null === $this->getCommandLine()) { + throw new RuntimeException('Unable to find the PHP executable.'); + } + + parent::start($callback); + } +} diff --git a/vendor/symfony/process/Pipes/AbstractPipes.php b/vendor/symfony/process/Pipes/AbstractPipes.php new file mode 100644 index 00000000..d8b57d07 --- /dev/null +++ b/vendor/symfony/process/Pipes/AbstractPipes.php @@ -0,0 +1,74 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Pipes; + +/** + * @author Romain Neutron + * + * @internal + */ +abstract class AbstractPipes implements PipesInterface +{ + /** @var array */ + public $pipes = array(); + + /** @var string */ + protected $inputBuffer = ''; + /** @var resource|null */ + protected $input; + + /** @var bool */ + private $blocked = true; + + /** + * {@inheritdoc} + */ + public function close() + { + foreach ($this->pipes as $pipe) { + fclose($pipe); + } + $this->pipes = array(); + } + + /** + * Returns true if a system call has been interrupted. + * + * @return bool + */ + protected function hasSystemCallBeenInterrupted() + { + $lastError = error_get_last(); + + // stream_select returns false when the `select` system call is interrupted by an incoming signal + return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call'); + } + + /** + * Unblocks streams + */ + protected function unblock() + { + if (!$this->blocked) { + return; + } + + foreach ($this->pipes as $pipe) { + stream_set_blocking($pipe, 0); + } + if (null !== $this->input) { + stream_set_blocking($this->input, 0); + } + + $this->blocked = false; + } +} diff --git a/vendor/symfony/process/Pipes/PipesInterface.php b/vendor/symfony/process/Pipes/PipesInterface.php new file mode 100644 index 00000000..09d3f61d --- /dev/null +++ b/vendor/symfony/process/Pipes/PipesInterface.php @@ -0,0 +1,60 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Pipes; + +/** + * PipesInterface manages descriptors and pipes for the use of proc_open. + * + * @author Romain Neutron + * + * @internal + */ +interface PipesInterface +{ + const CHUNK_SIZE = 16384; + + /** + * Returns an array of descriptors for the use of proc_open. + * + * @return array + */ + public function getDescriptors(); + + /** + * Returns an array of filenames indexed by their related stream in case these pipes use temporary files. + * + * @return string[] + */ + public function getFiles(); + + /** + * Reads data in file handles and pipes. + * + * @param bool $blocking Whether to use blocking calls or not. + * @param bool $close Whether to close pipes if they've reached EOF. + * + * @return string[] An array of read data indexed by their fd. + */ + public function readAndWrite($blocking, $close = false); + + /** + * Returns if the current state has open file handles or pipes. + * + * @return bool + */ + public function areOpen(); + + /** + * Closes file handles and pipes. + */ + public function close(); +} diff --git a/vendor/symfony/process/Pipes/UnixPipes.php b/vendor/symfony/process/Pipes/UnixPipes.php new file mode 100644 index 00000000..b3841031 --- /dev/null +++ b/vendor/symfony/process/Pipes/UnixPipes.php @@ -0,0 +1,214 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Pipes; + +use Symfony\Component\Process\Process; + +/** + * UnixPipes implementation uses unix pipes as handles. + * + * @author Romain Neutron + * + * @internal + */ +class UnixPipes extends AbstractPipes +{ + /** @var bool */ + private $ttyMode; + /** @var bool */ + private $ptyMode; + /** @var bool */ + private $disableOutput; + + public function __construct($ttyMode, $ptyMode, $input, $disableOutput) + { + $this->ttyMode = (bool) $ttyMode; + $this->ptyMode = (bool) $ptyMode; + $this->disableOutput = (bool) $disableOutput; + + if (is_resource($input)) { + $this->input = $input; + } else { + $this->inputBuffer = (string) $input; + } + } + + public function __destruct() + { + $this->close(); + } + + /** + * {@inheritdoc} + */ + public function getDescriptors() + { + if ($this->disableOutput) { + $nullstream = fopen('/dev/null', 'c'); + + return array( + array('pipe', 'r'), + $nullstream, + $nullstream, + ); + } + + if ($this->ttyMode) { + return array( + array('file', '/dev/tty', 'r'), + array('file', '/dev/tty', 'w'), + array('file', '/dev/tty', 'w'), + ); + } + + if ($this->ptyMode && Process::isPtySupported()) { + return array( + array('pty'), + array('pty'), + array('pty'), + ); + } + + return array( + array('pipe', 'r'), + array('pipe', 'w'), // stdout + array('pipe', 'w'), // stderr + ); + } + + /** + * {@inheritdoc} + */ + public function getFiles() + { + return array(); + } + + /** + * {@inheritdoc} + */ + public function readAndWrite($blocking, $close = false) + { + // only stdin is left open, job has been done ! + // we can now close it + if (1 === count($this->pipes) && array(0) === array_keys($this->pipes)) { + fclose($this->pipes[0]); + unset($this->pipes[0]); + } + + if (empty($this->pipes)) { + return array(); + } + + $this->unblock(); + + $read = array(); + + if (null !== $this->input) { + // if input is a resource, let's add it to stream_select argument to + // fill a buffer + $r = array_merge($this->pipes, array('input' => $this->input)); + } else { + $r = $this->pipes; + } + // discard read on stdin + unset($r[0]); + + $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null; + $e = null; + + // let's have a look if something changed in streams + if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) { + // if a system call has been interrupted, forget about it, let's try again + // otherwise, an error occurred, let's reset pipes + if (!$this->hasSystemCallBeenInterrupted()) { + $this->pipes = array(); + } + + return $read; + } + + // nothing has changed + if (0 === $n) { + return $read; + } + + foreach ($r as $pipe) { + // prior PHP 5.4 the array passed to stream_select is modified and + // lose key association, we have to find back the key + $type = (false !== $found = array_search($pipe, $this->pipes)) ? $found : 'input'; + $data = ''; + while ('' !== $dataread = (string) fread($pipe, self::CHUNK_SIZE)) { + $data .= $dataread; + } + + if ('' !== $data) { + if ($type === 'input') { + $this->inputBuffer .= $data; + } else { + $read[$type] = $data; + } + } + + if (false === $data || (true === $close && feof($pipe) && '' === $data)) { + if ($type === 'input') { + // no more data to read on input resource + // use an empty buffer in the next reads + $this->input = null; + } else { + fclose($this->pipes[$type]); + unset($this->pipes[$type]); + } + } + } + + if (null !== $w && 0 < count($w)) { + while (strlen($this->inputBuffer)) { + $written = fwrite($w[0], $this->inputBuffer, 2 << 18); // write 512k + if ($written > 0) { + $this->inputBuffer = (string) substr($this->inputBuffer, $written); + } else { + break; + } + } + } + + // no input to read on resource, buffer is empty and stdin still open + if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) { + fclose($this->pipes[0]); + unset($this->pipes[0]); + } + + return $read; + } + + /** + * {@inheritdoc} + */ + public function areOpen() + { + return (bool) $this->pipes; + } + + /** + * Creates a new UnixPipes instance + * + * @param Process $process + * @param string|resource $input + * + * @return UnixPipes + */ + public static function create(Process $process, $input) + { + return new static($process->isTty(), $process->isPty(), $input, $process->isOutputDisabled()); + } +} diff --git a/vendor/symfony/process/Pipes/WindowsPipes.php b/vendor/symfony/process/Pipes/WindowsPipes.php new file mode 100644 index 00000000..01dd5d06 --- /dev/null +++ b/vendor/symfony/process/Pipes/WindowsPipes.php @@ -0,0 +1,254 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Pipes; + +use Symfony\Component\Process\Process; +use Symfony\Component\Process\Exception\RuntimeException; + +/** + * WindowsPipes implementation uses temporary files as handles. + * + * @see https://bugs.php.net/bug.php?id=51800 + * @see https://bugs.php.net/bug.php?id=65650 + * + * @author Romain Neutron + * + * @internal + */ +class WindowsPipes extends AbstractPipes +{ + /** @var array */ + private $files = array(); + /** @var array */ + private $fileHandles = array(); + /** @var array */ + private $readBytes = array( + Process::STDOUT => 0, + Process::STDERR => 0, + ); + /** @var bool */ + private $disableOutput; + + public function __construct($disableOutput, $input) + { + $this->disableOutput = (bool) $disableOutput; + + if (!$this->disableOutput) { + // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big. + // Workaround for this problem is to use temporary files instead of pipes on Windows platform. + // + // @see https://bugs.php.net/bug.php?id=51800 + $this->files = array( + Process::STDOUT => tempnam(sys_get_temp_dir(), 'sf_proc_stdout'), + Process::STDERR => tempnam(sys_get_temp_dir(), 'sf_proc_stderr'), + ); + foreach ($this->files as $offset => $file) { + $this->fileHandles[$offset] = fopen($this->files[$offset], 'rb'); + if (false === $this->fileHandles[$offset]) { + throw new RuntimeException('A temporary file could not be opened to write the process output to, verify that your TEMP environment variable is writable'); + } + } + } + + if (is_resource($input)) { + $this->input = $input; + } else { + $this->inputBuffer = $input; + } + } + + public function __destruct() + { + $this->close(); + $this->removeFiles(); + } + + /** + * {@inheritdoc} + */ + public function getDescriptors() + { + if ($this->disableOutput) { + $nullstream = fopen('NUL', 'c'); + + return array( + array('pipe', 'r'), + $nullstream, + $nullstream, + ); + } + + // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800) + // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650 + // So we redirect output within the commandline and pass the nul device to the process + return array( + array('pipe', 'r'), + array('file', 'NUL', 'w'), + array('file', 'NUL', 'w'), + ); + } + + /** + * {@inheritdoc} + */ + public function getFiles() + { + return $this->files; + } + + /** + * {@inheritdoc} + */ + public function readAndWrite($blocking, $close = false) + { + $this->write($blocking, $close); + + $read = array(); + $fh = $this->fileHandles; + foreach ($fh as $type => $fileHandle) { + if (0 !== fseek($fileHandle, $this->readBytes[$type])) { + continue; + } + $data = ''; + $dataread = null; + while (!feof($fileHandle)) { + if (false !== $dataread = fread($fileHandle, self::CHUNK_SIZE)) { + $data .= $dataread; + } + } + if (0 < $length = strlen($data)) { + $this->readBytes[$type] += $length; + $read[$type] = $data; + } + + if (false === $dataread || (true === $close && feof($fileHandle) && '' === $data)) { + fclose($this->fileHandles[$type]); + unset($this->fileHandles[$type]); + } + } + + return $read; + } + + /** + * {@inheritdoc} + */ + public function areOpen() + { + return (bool) $this->pipes && (bool) $this->fileHandles; + } + + /** + * {@inheritdoc} + */ + public function close() + { + parent::close(); + foreach ($this->fileHandles as $handle) { + fclose($handle); + } + $this->fileHandles = array(); + } + + /** + * Creates a new WindowsPipes instance. + * + * @param Process $process The process + * @param $input + * + * @return WindowsPipes + */ + public static function create(Process $process, $input) + { + return new static($process->isOutputDisabled(), $input); + } + + /** + * Removes temporary files + */ + private function removeFiles() + { + foreach ($this->files as $filename) { + if (file_exists($filename)) { + @unlink($filename); + } + } + $this->files = array(); + } + + /** + * Writes input to stdin + * + * @param bool $blocking + * @param bool $close + */ + private function write($blocking, $close) + { + if (empty($this->pipes)) { + return; + } + + $this->unblock(); + + $r = null !== $this->input ? array('input' => $this->input) : null; + $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null; + $e = null; + + // let's have a look if something changed in streams + if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) { + // if a system call has been interrupted, forget about it, let's try again + // otherwise, an error occurred, let's reset pipes + if (!$this->hasSystemCallBeenInterrupted()) { + $this->pipes = array(); + } + + return; + } + + // nothing has changed + if (0 === $n) { + return; + } + + if (null !== $w && 0 < count($r)) { + $data = ''; + while ($dataread = fread($r['input'], self::CHUNK_SIZE)) { + $data .= $dataread; + } + + $this->inputBuffer .= $data; + + if (false === $data || (true === $close && feof($r['input']) && '' === $data)) { + // no more data to read on input resource + // use an empty buffer in the next reads + $this->input = null; + } + } + + if (null !== $w && 0 < count($w)) { + while (strlen($this->inputBuffer)) { + $written = fwrite($w[0], $this->inputBuffer, 2 << 18); + if ($written > 0) { + $this->inputBuffer = (string) substr($this->inputBuffer, $written); + } else { + break; + } + } + } + + // no input to read on resource, buffer is empty and stdin still open + if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) { + fclose($this->pipes[0]); + unset($this->pipes[0]); + } + } +} diff --git a/vendor/symfony/process/Process.php b/vendor/symfony/process/Process.php new file mode 100644 index 00000000..1474d698 --- /dev/null +++ b/vendor/symfony/process/Process.php @@ -0,0 +1,1526 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process; + +use Symfony\Component\Process\Exception\InvalidArgumentException; +use Symfony\Component\Process\Exception\LogicException; +use Symfony\Component\Process\Exception\ProcessFailedException; +use Symfony\Component\Process\Exception\ProcessTimedOutException; +use Symfony\Component\Process\Exception\RuntimeException; +use Symfony\Component\Process\Pipes\PipesInterface; +use Symfony\Component\Process\Pipes\UnixPipes; +use Symfony\Component\Process\Pipes\WindowsPipes; + +/** + * Process is a thin wrapper around proc_* functions to easily + * start independent PHP processes. + * + * @author Fabien Potencier + * @author Romain Neutron + * + * @api + */ +class Process +{ + const ERR = 'err'; + const OUT = 'out'; + + const STATUS_READY = 'ready'; + const STATUS_STARTED = 'started'; + const STATUS_TERMINATED = 'terminated'; + + const STDIN = 0; + const STDOUT = 1; + const STDERR = 2; + + // Timeout Precision in seconds. + const TIMEOUT_PRECISION = 0.2; + + private $callback; + private $commandline; + private $cwd; + private $env; + private $input; + private $starttime; + private $lastOutputTime; + private $timeout; + private $idleTimeout; + private $options; + private $exitcode; + private $fallbackExitcode; + private $processInformation; + private $outputDisabled = false; + private $stdout; + private $stderr; + private $enhanceWindowsCompatibility = true; + private $enhanceSigchildCompatibility; + private $process; + private $status = self::STATUS_READY; + private $incrementalOutputOffset = 0; + private $incrementalErrorOutputOffset = 0; + private $tty; + private $pty; + + private $useFileHandles = false; + /** @var PipesInterface */ + private $processPipes; + + private $latestSignal; + + private static $sigchild; + + /** + * Exit codes translation table. + * + * User-defined errors must use exit codes in the 64-113 range. + * + * @var array + */ + public static $exitCodes = array( + 0 => 'OK', + 1 => 'General error', + 2 => 'Misuse of shell builtins', + + 126 => 'Invoked command cannot execute', + 127 => 'Command not found', + 128 => 'Invalid exit argument', + + // signals + 129 => 'Hangup', + 130 => 'Interrupt', + 131 => 'Quit and dump core', + 132 => 'Illegal instruction', + 133 => 'Trace/breakpoint trap', + 134 => 'Process aborted', + 135 => 'Bus error: "access to undefined portion of memory object"', + 136 => 'Floating point exception: "erroneous arithmetic operation"', + 137 => 'Kill (terminate immediately)', + 138 => 'User-defined 1', + 139 => 'Segmentation violation', + 140 => 'User-defined 2', + 141 => 'Write to pipe with no one reading', + 142 => 'Signal raised by alarm', + 143 => 'Termination (request to terminate)', + // 144 - not defined + 145 => 'Child process terminated, stopped (or continued*)', + 146 => 'Continue if stopped', + 147 => 'Stop executing temporarily', + 148 => 'Terminal stop signal', + 149 => 'Background process attempting to read from tty ("in")', + 150 => 'Background process attempting to write to tty ("out")', + 151 => 'Urgent data available on socket', + 152 => 'CPU time limit exceeded', + 153 => 'File size limit exceeded', + 154 => 'Signal raised by timer counting virtual time: "virtual timer expired"', + 155 => 'Profiling timer expired', + // 156 - not defined + 157 => 'Pollable event', + // 158 - not defined + 159 => 'Bad syscall', + ); + + /** + * Constructor. + * + * @param string $commandline The command line to run + * @param string|null $cwd The working directory or null to use the working dir of the current PHP process + * @param array|null $env The environment variables or null to inherit + * @param string|null $input The input + * @param int|float|null $timeout The timeout in seconds or null to disable + * @param array $options An array of options for proc_open + * + * @throws RuntimeException When proc_open is not installed + * + * @api + */ + public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array()) + { + if (!function_exists('proc_open')) { + throw new RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.'); + } + + $this->commandline = $commandline; + $this->cwd = $cwd; + + // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started + // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected + // @see : https://bugs.php.net/bug.php?id=51800 + // @see : https://bugs.php.net/bug.php?id=50524 + if (null === $this->cwd && (defined('ZEND_THREAD_SAFE') || '\\' === DIRECTORY_SEPARATOR)) { + $this->cwd = getcwd(); + } + if (null !== $env) { + $this->setEnv($env); + } + + $this->input = $input; + $this->setTimeout($timeout); + $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR; + $this->pty = false; + $this->enhanceWindowsCompatibility = true; + $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled(); + $this->options = array_replace(array('suppress_errors' => true, 'binary_pipes' => true), $options); + } + + public function __destruct() + { + // stop() will check if we have a process running. + $this->stop(); + } + + public function __clone() + { + $this->resetProcessData(); + } + + /** + * Runs the process. + * + * The callback receives the type of output (out or err) and + * some bytes from the output in real-time. It allows to have feedback + * from the independent process during execution. + * + * The STDOUT and STDERR are also available after the process is finished + * via the getOutput() and getErrorOutput() methods. + * + * @param callable|null $callback A PHP callback to run whenever there is some + * output available on STDOUT or STDERR + * + * @return int The exit status code + * + * @throws RuntimeException When process can't be launched + * @throws RuntimeException When process stopped after receiving signal + * @throws LogicException In case a callback is provided and output has been disabled + * + * @api + */ + public function run($callback = null) + { + $this->start($callback); + + return $this->wait(); + } + + /** + * Runs the process. + * + * This is identical to run() except that an exception is thrown if the process + * exits with a non-zero exit code. + * + * @param callable|null $callback + * + * @return self + * + * @throws RuntimeException if PHP was compiled with --enable-sigchild and the enhanced sigchild compatibility mode is not enabled + * @throws ProcessFailedException if the process didn't terminate successfully + */ + public function mustRun($callback = null) + { + if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) { + throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); + } + + if (0 !== $this->run($callback)) { + throw new ProcessFailedException($this); + } + + return $this; + } + + /** + * Starts the process and returns after writing the input to STDIN. + * + * This method blocks until all STDIN data is sent to the process then it + * returns while the process runs in the background. + * + * The termination of the process can be awaited with wait(). + * + * The callback receives the type of output (out or err) and some bytes from + * the output in real-time while writing the standard input to the process. + * It allows to have feedback from the independent process during execution. + * If there is no callback passed, the wait() method can be called + * with true as a second parameter then the callback will get all data occurred + * in (and since) the start call. + * + * @param callable|null $callback A PHP callback to run whenever there is some + * output available on STDOUT or STDERR + * + * @throws RuntimeException When process can't be launched + * @throws RuntimeException When process is already running + * @throws LogicException In case a callback is provided and output has been disabled + */ + public function start($callback = null) + { + if ($this->isRunning()) { + throw new RuntimeException('Process is already running'); + } + if ($this->outputDisabled && null !== $callback) { + throw new LogicException('Output has been disabled, enable it to allow the use of a callback.'); + } + + $this->resetProcessData(); + $this->starttime = $this->lastOutputTime = microtime(true); + $this->callback = $this->buildCallback($callback); + $descriptors = $this->getDescriptors(); + + $commandline = $this->commandline; + + if ('\\' === DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) { + $commandline = 'cmd /V:ON /E:ON /C "('.$commandline.')'; + foreach ($this->processPipes->getFiles() as $offset => $filename) { + $commandline .= ' '.$offset.'>'.ProcessUtils::escapeArgument($filename); + } + $commandline .= '"'; + + if (!isset($this->options['bypass_shell'])) { + $this->options['bypass_shell'] = true; + } + } + + $this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options); + + if (!is_resource($this->process)) { + throw new RuntimeException('Unable to launch a new process.'); + } + $this->status = self::STATUS_STARTED; + + if ($this->tty) { + return; + } + + $this->updateStatus(false); + $this->checkTimeout(); + } + + /** + * Restarts the process. + * + * Be warned that the process is cloned before being started. + * + * @param callable|null $callback A PHP callback to run whenever there is some + * output available on STDOUT or STDERR + * + * @return Process The new process + * + * @throws RuntimeException When process can't be launched + * @throws RuntimeException When process is already running + * + * @see start() + */ + public function restart($callback = null) + { + if ($this->isRunning()) { + throw new RuntimeException('Process is already running'); + } + + $process = clone $this; + $process->start($callback); + + return $process; + } + + /** + * Waits for the process to terminate. + * + * The callback receives the type of output (out or err) and some bytes + * from the output in real-time while writing the standard input to the process. + * It allows to have feedback from the independent process during execution. + * + * @param callable|null $callback A valid PHP callback + * + * @return int The exitcode of the process + * + * @throws RuntimeException When process timed out + * @throws RuntimeException When process stopped after receiving signal + * @throws LogicException When process is not yet started + */ + public function wait($callback = null) + { + $this->requireProcessIsStarted(__FUNCTION__); + + $this->updateStatus(false); + if (null !== $callback) { + $this->callback = $this->buildCallback($callback); + } + + do { + $this->checkTimeout(); + $running = '\\' === DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen(); + $close = '\\' !== DIRECTORY_SEPARATOR || !$running; + $this->readPipes(true, $close); + } while ($running); + + while ($this->isRunning()) { + usleep(1000); + } + + if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) { + throw new RuntimeException(sprintf('The process has been signaled with signal "%s".', $this->processInformation['termsig'])); + } + + return $this->exitcode; + } + + /** + * Returns the Pid (process identifier), if applicable. + * + * @return int|null The process id if running, null otherwise + * + * @throws RuntimeException In case --enable-sigchild is activated + */ + public function getPid() + { + if ($this->isSigchildEnabled()) { + throw new RuntimeException('This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.'); + } + + $this->updateStatus(false); + + return $this->isRunning() ? $this->processInformation['pid'] : null; + } + + /** + * Sends a POSIX signal to the process. + * + * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php) + * + * @return Process + * + * @throws LogicException In case the process is not running + * @throws RuntimeException In case --enable-sigchild is activated + * @throws RuntimeException In case of failure + */ + public function signal($signal) + { + $this->doSignal($signal, true); + + return $this; + } + + /** + * Disables fetching output and error output from the underlying process. + * + * @return Process + * + * @throws RuntimeException In case the process is already running + * @throws LogicException if an idle timeout is set + */ + public function disableOutput() + { + if ($this->isRunning()) { + throw new RuntimeException('Disabling output while the process is running is not possible.'); + } + if (null !== $this->idleTimeout) { + throw new LogicException('Output can not be disabled while an idle timeout is set.'); + } + + $this->outputDisabled = true; + + return $this; + } + + /** + * Enables fetching output and error output from the underlying process. + * + * @return Process + * + * @throws RuntimeException In case the process is already running + */ + public function enableOutput() + { + if ($this->isRunning()) { + throw new RuntimeException('Enabling output while the process is running is not possible.'); + } + + $this->outputDisabled = false; + + return $this; + } + + /** + * Returns true in case the output is disabled, false otherwise. + * + * @return bool + */ + public function isOutputDisabled() + { + return $this->outputDisabled; + } + + /** + * Returns the current output of the process (STDOUT). + * + * @return string The process output + * + * @throws LogicException in case the output has been disabled + * @throws LogicException In case the process is not started + * + * @api + */ + public function getOutput() + { + if ($this->outputDisabled) { + throw new LogicException('Output has been disabled.'); + } + + $this->requireProcessIsStarted(__FUNCTION__); + + $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true); + + return $this->stdout; + } + + /** + * Returns the output incrementally. + * + * In comparison with the getOutput method which always return the whole + * output, this one returns the new output since the last call. + * + * @throws LogicException in case the output has been disabled + * @throws LogicException In case the process is not started + * + * @return string The process output since the last call + */ + public function getIncrementalOutput() + { + $this->requireProcessIsStarted(__FUNCTION__); + + $data = $this->getOutput(); + + $latest = substr($data, $this->incrementalOutputOffset); + + if (false === $latest) { + return ''; + } + + $this->incrementalOutputOffset = strlen($data); + + return $latest; + } + + /** + * Clears the process output. + * + * @return Process + */ + public function clearOutput() + { + $this->stdout = ''; + $this->incrementalOutputOffset = 0; + + return $this; + } + + /** + * Returns the current error output of the process (STDERR). + * + * @return string The process error output + * + * @throws LogicException in case the output has been disabled + * @throws LogicException In case the process is not started + * + * @api + */ + public function getErrorOutput() + { + if ($this->outputDisabled) { + throw new LogicException('Output has been disabled.'); + } + + $this->requireProcessIsStarted(__FUNCTION__); + + $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true); + + return $this->stderr; + } + + /** + * Returns the errorOutput incrementally. + * + * In comparison with the getErrorOutput method which always return the + * whole error output, this one returns the new error output since the last + * call. + * + * @throws LogicException in case the output has been disabled + * @throws LogicException In case the process is not started + * + * @return string The process error output since the last call + */ + public function getIncrementalErrorOutput() + { + $this->requireProcessIsStarted(__FUNCTION__); + + $data = $this->getErrorOutput(); + + $latest = substr($data, $this->incrementalErrorOutputOffset); + + if (false === $latest) { + return ''; + } + + $this->incrementalErrorOutputOffset = strlen($data); + + return $latest; + } + + /** + * Clears the process output. + * + * @return Process + */ + public function clearErrorOutput() + { + $this->stderr = ''; + $this->incrementalErrorOutputOffset = 0; + + return $this; + } + + /** + * Returns the exit code returned by the process. + * + * @return null|int The exit status code, null if the Process is not terminated + * + * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled + * + * @api + */ + public function getExitCode() + { + if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) { + throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); + } + + $this->updateStatus(false); + + return $this->exitcode; + } + + /** + * Returns a string representation for the exit code returned by the process. + * + * This method relies on the Unix exit code status standardization + * and might not be relevant for other operating systems. + * + * @return null|string A string representation for the exit status code, null if the Process is not terminated. + * + * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled + * + * @see http://tldp.org/LDP/abs/html/exitcodes.html + * @see http://en.wikipedia.org/wiki/Unix_signal + */ + public function getExitCodeText() + { + if (null === $exitcode = $this->getExitCode()) { + return; + } + + return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : 'Unknown error'; + } + + /** + * Checks if the process ended successfully. + * + * @return bool true if the process ended successfully, false otherwise + * + * @api + */ + public function isSuccessful() + { + return 0 === $this->getExitCode(); + } + + /** + * Returns true if the child process has been terminated by an uncaught signal. + * + * It always returns false on Windows. + * + * @return bool + * + * @throws RuntimeException In case --enable-sigchild is activated + * @throws LogicException In case the process is not terminated + * + * @api + */ + public function hasBeenSignaled() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + if ($this->isSigchildEnabled()) { + throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); + } + + $this->updateStatus(false); + + return $this->processInformation['signaled']; + } + + /** + * Returns the number of the signal that caused the child process to terminate its execution. + * + * It is only meaningful if hasBeenSignaled() returns true. + * + * @return int + * + * @throws RuntimeException In case --enable-sigchild is activated + * @throws LogicException In case the process is not terminated + * + * @api + */ + public function getTermSignal() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + if ($this->isSigchildEnabled()) { + throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); + } + + $this->updateStatus(false); + + return $this->processInformation['termsig']; + } + + /** + * Returns true if the child process has been stopped by a signal. + * + * It always returns false on Windows. + * + * @return bool + * + * @throws LogicException In case the process is not terminated + * + * @api + */ + public function hasBeenStopped() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + $this->updateStatus(false); + + return $this->processInformation['stopped']; + } + + /** + * Returns the number of the signal that caused the child process to stop its execution. + * + * It is only meaningful if hasBeenStopped() returns true. + * + * @return int + * + * @throws LogicException In case the process is not terminated + * + * @api + */ + public function getStopSignal() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + $this->updateStatus(false); + + return $this->processInformation['stopsig']; + } + + /** + * Checks if the process is currently running. + * + * @return bool true if the process is currently running, false otherwise + */ + public function isRunning() + { + if (self::STATUS_STARTED !== $this->status) { + return false; + } + + $this->updateStatus(false); + + return $this->processInformation['running']; + } + + /** + * Checks if the process has been started with no regard to the current state. + * + * @return bool true if status is ready, false otherwise + */ + public function isStarted() + { + return $this->status != self::STATUS_READY; + } + + /** + * Checks if the process is terminated. + * + * @return bool true if process is terminated, false otherwise + */ + public function isTerminated() + { + $this->updateStatus(false); + + return $this->status == self::STATUS_TERMINATED; + } + + /** + * Gets the process status. + * + * The status is one of: ready, started, terminated. + * + * @return string The current process status + */ + public function getStatus() + { + $this->updateStatus(false); + + return $this->status; + } + + /** + * Stops the process. + * + * @param int|float $timeout The timeout in seconds + * @param int $signal A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL + * + * @return int The exit-code of the process + * + * @throws RuntimeException if the process got signaled + */ + public function stop($timeout = 10, $signal = null) + { + $timeoutMicro = microtime(true) + $timeout; + if ($this->isRunning()) { + if ('\\' === DIRECTORY_SEPARATOR && !$this->isSigchildEnabled()) { + exec(sprintf('taskkill /F /T /PID %d 2>&1', $this->getPid()), $output, $exitCode); + if ($exitCode > 0) { + throw new RuntimeException('Unable to kill the process'); + } + } + // given `SIGTERM` may not be defined and that `proc_terminate` uses the constant value and not the constant itself, we use the same here + $this->doSignal(15, false); + do { + usleep(1000); + } while ($this->isRunning() && microtime(true) < $timeoutMicro); + + if ($this->isRunning() && !$this->isSigchildEnabled()) { + if (null !== $signal || defined('SIGKILL')) { + // avoid exception here : + // process is supposed to be running, but it might have stop + // just after this line. + // in any case, let's silently discard the error, we can not do anything + $this->doSignal($signal ?: SIGKILL, false); + } + } + } + + $this->updateStatus(false); + if ($this->processInformation['running']) { + $this->close(); + } + + return $this->exitcode; + } + + /** + * Adds a line to the STDOUT stream. + * + * @param string $line The line to append + */ + public function addOutput($line) + { + $this->lastOutputTime = microtime(true); + $this->stdout .= $line; + } + + /** + * Adds a line to the STDERR stream. + * + * @param string $line The line to append + */ + public function addErrorOutput($line) + { + $this->lastOutputTime = microtime(true); + $this->stderr .= $line; + } + + /** + * Gets the command line to be executed. + * + * @return string The command to execute + */ + public function getCommandLine() + { + return $this->commandline; + } + + /** + * Sets the command line to be executed. + * + * @param string $commandline The command to execute + * + * @return self The current Process instance + */ + public function setCommandLine($commandline) + { + $this->commandline = $commandline; + + return $this; + } + + /** + * Gets the process timeout (max. runtime). + * + * @return float|null The timeout in seconds or null if it's disabled + */ + public function getTimeout() + { + return $this->timeout; + } + + /** + * Gets the process idle timeout (max. time since last output). + * + * @return float|null The timeout in seconds or null if it's disabled + */ + public function getIdleTimeout() + { + return $this->idleTimeout; + } + + /** + * Sets the process timeout (max. runtime). + * + * To disable the timeout, set this value to null. + * + * @param int|float|null $timeout The timeout in seconds + * + * @return self The current Process instance + * + * @throws InvalidArgumentException if the timeout is negative + */ + public function setTimeout($timeout) + { + $this->timeout = $this->validateTimeout($timeout); + + return $this; + } + + /** + * Sets the process idle timeout (max. time since last output). + * + * To disable the timeout, set this value to null. + * + * @param int|float|null $timeout The timeout in seconds + * + * @return self The current Process instance. + * + * @throws LogicException if the output is disabled + * @throws InvalidArgumentException if the timeout is negative + */ + public function setIdleTimeout($timeout) + { + if (null !== $timeout && $this->outputDisabled) { + throw new LogicException('Idle timeout can not be set while the output is disabled.'); + } + + $this->idleTimeout = $this->validateTimeout($timeout); + + return $this; + } + + /** + * Enables or disables the TTY mode. + * + * @param bool $tty True to enabled and false to disable + * + * @return self The current Process instance + * + * @throws RuntimeException In case the TTY mode is not supported + */ + public function setTty($tty) + { + if ('\\' === DIRECTORY_SEPARATOR && $tty) { + throw new RuntimeException('TTY mode is not supported on Windows platform.'); + } + if ($tty && (!file_exists('/dev/tty') || !is_readable('/dev/tty'))) { + throw new RuntimeException('TTY mode requires /dev/tty to be readable.'); + } + + $this->tty = (bool) $tty; + + return $this; + } + + /** + * Checks if the TTY mode is enabled. + * + * @return bool true if the TTY mode is enabled, false otherwise + */ + public function isTty() + { + return $this->tty; + } + + /** + * Sets PTY mode. + * + * @param bool $bool + * + * @return self + */ + public function setPty($bool) + { + $this->pty = (bool) $bool; + + return $this; + } + + /** + * Returns PTY state. + * + * @return bool + */ + public function isPty() + { + return $this->pty; + } + + /** + * Gets the working directory. + * + * @return string|null The current working directory or null on failure + */ + public function getWorkingDirectory() + { + if (null === $this->cwd) { + // getcwd() will return false if any one of the parent directories does not have + // the readable or search mode set, even if the current directory does + return getcwd() ?: null; + } + + return $this->cwd; + } + + /** + * Sets the current working directory. + * + * @param string $cwd The new working directory + * + * @return self The current Process instance + */ + public function setWorkingDirectory($cwd) + { + $this->cwd = $cwd; + + return $this; + } + + /** + * Gets the environment variables. + * + * @return array The current environment variables + */ + public function getEnv() + { + return $this->env; + } + + /** + * Sets the environment variables. + * + * An environment variable value should be a string. + * If it is an array, the variable is ignored. + * + * That happens in PHP when 'argv' is registered into + * the $_ENV array for instance. + * + * @param array $env The new environment variables + * + * @return self The current Process instance + */ + public function setEnv(array $env) + { + // Process can not handle env values that are arrays + $env = array_filter($env, function ($value) { + return !is_array($value); + }); + + $this->env = array(); + foreach ($env as $key => $value) { + $this->env[(binary) $key] = (binary) $value; + } + + return $this; + } + + /** + * Gets the contents of STDIN. + * + * @return string|null The current contents + * + * @deprecated since version 2.5, to be removed in 3.0. + * Use setInput() instead. + * This method is deprecated in favor of getInput. + */ + public function getStdin() + { + @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the getInput() method instead.', E_USER_DEPRECATED); + + return $this->getInput(); + } + + /** + * Gets the Process input. + * + * @return null|string The Process input + */ + public function getInput() + { + return $this->input; + } + + /** + * Sets the contents of STDIN. + * + * @param string|null $stdin The new contents + * + * @return self The current Process instance + * + * @deprecated since version 2.5, to be removed in 3.0. + * Use setInput() instead. + * + * @throws LogicException In case the process is running + * @throws InvalidArgumentException In case the argument is invalid + */ + public function setStdin($stdin) + { + @trigger_error('The '.__METHOD__.' method is deprecated since version 2.5 and will be removed in 3.0. Use the setInput() method instead.', E_USER_DEPRECATED); + + return $this->setInput($stdin); + } + + /** + * Sets the input. + * + * This content will be passed to the underlying process standard input. + * + * @param mixed $input The content + * + * @return self The current Process instance + * + * @throws LogicException In case the process is running + * + * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0. + */ + public function setInput($input) + { + if ($this->isRunning()) { + throw new LogicException('Input can not be set while the process is running.'); + } + + $this->input = ProcessUtils::validateInput(sprintf('%s::%s', __CLASS__, __FUNCTION__), $input); + + return $this; + } + + /** + * Gets the options for proc_open. + * + * @return array The current options + */ + public function getOptions() + { + return $this->options; + } + + /** + * Sets the options for proc_open. + * + * @param array $options The new options + * + * @return self The current Process instance + */ + public function setOptions(array $options) + { + $this->options = $options; + + return $this; + } + + /** + * Gets whether or not Windows compatibility is enabled. + * + * This is true by default. + * + * @return bool + */ + public function getEnhanceWindowsCompatibility() + { + return $this->enhanceWindowsCompatibility; + } + + /** + * Sets whether or not Windows compatibility is enabled. + * + * @param bool $enhance + * + * @return self The current Process instance + */ + public function setEnhanceWindowsCompatibility($enhance) + { + $this->enhanceWindowsCompatibility = (bool) $enhance; + + return $this; + } + + /** + * Returns whether sigchild compatibility mode is activated or not. + * + * @return bool + */ + public function getEnhanceSigchildCompatibility() + { + return $this->enhanceSigchildCompatibility; + } + + /** + * Activates sigchild compatibility mode. + * + * Sigchild compatibility mode is required to get the exit code and + * determine the success of a process when PHP has been compiled with + * the --enable-sigchild option + * + * @param bool $enhance + * + * @return self The current Process instance + */ + public function setEnhanceSigchildCompatibility($enhance) + { + $this->enhanceSigchildCompatibility = (bool) $enhance; + + return $this; + } + + /** + * Performs a check between the timeout definition and the time the process started. + * + * In case you run a background process (with the start method), you should + * trigger this method regularly to ensure the process timeout + * + * @throws ProcessTimedOutException In case the timeout was reached + */ + public function checkTimeout() + { + if ($this->status !== self::STATUS_STARTED) { + return; + } + + if (null !== $this->timeout && $this->timeout < microtime(true) - $this->starttime) { + $this->stop(0); + + throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_GENERAL); + } + + if (null !== $this->idleTimeout && $this->idleTimeout < microtime(true) - $this->lastOutputTime) { + $this->stop(0); + + throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_IDLE); + } + } + + /** + * Returns whether PTY is supported on the current operating system. + * + * @return bool + */ + public static function isPtySupported() + { + static $result; + + if (null !== $result) { + return $result; + } + + if ('\\' === DIRECTORY_SEPARATOR) { + return $result = false; + } + + $proc = @proc_open('echo 1', array(array('pty'), array('pty'), array('pty')), $pipes); + if (is_resource($proc)) { + proc_close($proc); + + return $result = true; + } + + return $result = false; + } + + /** + * Creates the descriptors needed by the proc_open. + * + * @return array + */ + private function getDescriptors() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->processPipes = WindowsPipes::create($this, $this->input); + } else { + $this->processPipes = UnixPipes::create($this, $this->input); + } + $descriptors = $this->processPipes->getDescriptors($this->outputDisabled); + + if (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + // last exit code is output on the fourth pipe and caught to work around --enable-sigchild + $descriptors = array_merge($descriptors, array(array('pipe', 'w'))); + + $this->commandline = '('.$this->commandline.') 3>/dev/null; code=$?; echo $code >&3; exit $code'; + } + + return $descriptors; + } + + /** + * Builds up the callback used by wait(). + * + * The callbacks adds all occurred output to the specific buffer and calls + * the user callback (if present) with the received output. + * + * @param callable|null $callback The user defined PHP callback + * + * @return callable A PHP callable + */ + protected function buildCallback($callback) + { + $that = $this; + $out = self::OUT; + $callback = function ($type, $data) use ($that, $callback, $out) { + if ($out == $type) { + $that->addOutput($data); + } else { + $that->addErrorOutput($data); + } + + if (null !== $callback) { + call_user_func($callback, $type, $data); + } + }; + + return $callback; + } + + /** + * Updates the status of the process, reads pipes. + * + * @param bool $blocking Whether to use a blocking read call. + */ + protected function updateStatus($blocking) + { + if (self::STATUS_STARTED !== $this->status) { + return; + } + + $this->processInformation = proc_get_status($this->process); + $this->captureExitCode(); + + $this->readPipes($blocking, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true); + + if (!$this->processInformation['running']) { + $this->close(); + } + } + + /** + * Returns whether PHP has been compiled with the '--enable-sigchild' option or not. + * + * @return bool + */ + protected function isSigchildEnabled() + { + if (null !== self::$sigchild) { + return self::$sigchild; + } + + if (!function_exists('phpinfo')) { + return self::$sigchild = false; + } + + ob_start(); + phpinfo(INFO_GENERAL); + + return self::$sigchild = false !== strpos(ob_get_clean(), '--enable-sigchild'); + } + + /** + * Validates and returns the filtered timeout. + * + * @param int|float|null $timeout + * + * @return float|null + * + * @throws InvalidArgumentException if the given timeout is a negative number + */ + private function validateTimeout($timeout) + { + $timeout = (float) $timeout; + + if (0.0 === $timeout) { + $timeout = null; + } elseif ($timeout < 0) { + throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.'); + } + + return $timeout; + } + + /** + * Reads pipes, executes callback. + * + * @param bool $blocking Whether to use blocking calls or not. + * @param bool $close Whether to close file handles or not. + */ + private function readPipes($blocking, $close) + { + $result = $this->processPipes->readAndWrite($blocking, $close); + + $callback = $this->callback; + foreach ($result as $type => $data) { + if (3 == $type) { + $this->fallbackExitcode = (int) $data; + } else { + $callback($type === self::STDOUT ? self::OUT : self::ERR, $data); + } + } + } + + /** + * Captures the exitcode if mentioned in the process information. + */ + private function captureExitCode() + { + if (isset($this->processInformation['exitcode']) && -1 != $this->processInformation['exitcode']) { + $this->exitcode = $this->processInformation['exitcode']; + } + } + + /** + * Closes process resource, closes file handles, sets the exitcode. + * + * @return int The exitcode + */ + private function close() + { + $this->processPipes->close(); + if (is_resource($this->process)) { + $exitcode = proc_close($this->process); + } else { + $exitcode = -1; + } + + $this->exitcode = -1 !== $exitcode ? $exitcode : (null !== $this->exitcode ? $this->exitcode : -1); + $this->status = self::STATUS_TERMINATED; + + if (-1 === $this->exitcode && null !== $this->fallbackExitcode) { + $this->exitcode = $this->fallbackExitcode; + } elseif (-1 === $this->exitcode && $this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) { + // if process has been signaled, no exitcode but a valid termsig, apply Unix convention + $this->exitcode = 128 + $this->processInformation['termsig']; + } + + return $this->exitcode; + } + + /** + * Resets data related to the latest run of the process. + */ + private function resetProcessData() + { + $this->starttime = null; + $this->callback = null; + $this->exitcode = null; + $this->fallbackExitcode = null; + $this->processInformation = null; + $this->stdout = null; + $this->stderr = null; + $this->process = null; + $this->latestSignal = null; + $this->status = self::STATUS_READY; + $this->incrementalOutputOffset = 0; + $this->incrementalErrorOutputOffset = 0; + } + + /** + * Sends a POSIX signal to the process. + * + * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php) + * @param bool $throwException Whether to throw exception in case signal failed + * + * @return bool True if the signal was sent successfully, false otherwise + * + * @throws LogicException In case the process is not running + * @throws RuntimeException In case --enable-sigchild is activated + * @throws RuntimeException In case of failure + */ + private function doSignal($signal, $throwException) + { + if (!$this->isRunning()) { + if ($throwException) { + throw new LogicException('Can not send signal on a non running process.'); + } + + return false; + } + + if ($this->isSigchildEnabled()) { + if ($throwException) { + throw new RuntimeException('This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + } + + return false; + } + + if (true !== @proc_terminate($this->process, $signal)) { + if ($throwException) { + throw new RuntimeException(sprintf('Error while sending signal `%s`.', $signal)); + } + + return false; + } + + $this->latestSignal = $signal; + + return true; + } + + /** + * Ensures the process is running or terminated, throws a LogicException if the process has a not started. + * + * @param string $functionName The function name that was called. + * + * @throws LogicException If the process has not run. + */ + private function requireProcessIsStarted($functionName) + { + if (!$this->isStarted()) { + throw new LogicException(sprintf('Process must be started before calling %s.', $functionName)); + } + } + + /** + * Ensures the process is terminated, throws a LogicException if the process has a status different than `terminated`. + * + * @param string $functionName The function name that was called. + * + * @throws LogicException If the process is not yet terminated. + */ + private function requireProcessIsTerminated($functionName) + { + if (!$this->isTerminated()) { + throw new LogicException(sprintf('Process must be terminated before calling %s.', $functionName)); + } + } +} diff --git a/vendor/symfony/process/ProcessBuilder.php b/vendor/symfony/process/ProcessBuilder.php new file mode 100644 index 00000000..a782fd69 --- /dev/null +++ b/vendor/symfony/process/ProcessBuilder.php @@ -0,0 +1,287 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process; + +use Symfony\Component\Process\Exception\InvalidArgumentException; +use Symfony\Component\Process\Exception\LogicException; + +/** + * Process builder. + * + * @author Kris Wallsmith + */ +class ProcessBuilder +{ + private $arguments; + private $cwd; + private $env = array(); + private $input; + private $timeout = 60; + private $options = array(); + private $inheritEnv = true; + private $prefix = array(); + private $outputDisabled = false; + + /** + * Constructor. + * + * @param string[] $arguments An array of arguments + */ + public function __construct(array $arguments = array()) + { + $this->arguments = $arguments; + } + + /** + * Creates a process builder instance. + * + * @param string[] $arguments An array of arguments + * + * @return ProcessBuilder + */ + public static function create(array $arguments = array()) + { + return new static($arguments); + } + + /** + * Adds an unescaped argument to the command string. + * + * @param string $argument A command argument + * + * @return ProcessBuilder + */ + public function add($argument) + { + $this->arguments[] = $argument; + + return $this; + } + + /** + * Adds a prefix to the command string. + * + * The prefix is preserved when resetting arguments. + * + * @param string|array $prefix A command prefix or an array of command prefixes + * + * @return ProcessBuilder + */ + public function setPrefix($prefix) + { + $this->prefix = is_array($prefix) ? $prefix : array($prefix); + + return $this; + } + + /** + * Sets the arguments of the process. + * + * Arguments must not be escaped. + * Previous arguments are removed. + * + * @param string[] $arguments + * + * @return ProcessBuilder + */ + public function setArguments(array $arguments) + { + $this->arguments = $arguments; + + return $this; + } + + /** + * Sets the working directory. + * + * @param null|string $cwd The working directory + * + * @return ProcessBuilder + */ + public function setWorkingDirectory($cwd) + { + $this->cwd = $cwd; + + return $this; + } + + /** + * Sets whether environment variables will be inherited or not. + * + * @param bool $inheritEnv + * + * @return ProcessBuilder + */ + public function inheritEnvironmentVariables($inheritEnv = true) + { + $this->inheritEnv = $inheritEnv; + + return $this; + } + + /** + * Sets an environment variable. + * + * Setting a variable overrides its previous value. Use `null` to unset a + * defined environment variable. + * + * @param string $name The variable name + * @param null|string $value The variable value + * + * @return ProcessBuilder + */ + public function setEnv($name, $value) + { + $this->env[$name] = $value; + + return $this; + } + + /** + * Adds a set of environment variables. + * + * Already existing environment variables with the same name will be + * overridden by the new values passed to this method. Pass `null` to unset + * a variable. + * + * @param array $variables The variables + * + * @return ProcessBuilder + */ + public function addEnvironmentVariables(array $variables) + { + $this->env = array_replace($this->env, $variables); + + return $this; + } + + /** + * Sets the input of the process. + * + * @param mixed $input The input as a string + * + * @return ProcessBuilder + * + * @throws InvalidArgumentException In case the argument is invalid + * + * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0. + */ + public function setInput($input) + { + $this->input = ProcessUtils::validateInput(sprintf('%s::%s', __CLASS__, __FUNCTION__), $input); + + return $this; + } + + /** + * Sets the process timeout. + * + * To disable the timeout, set this value to null. + * + * @param float|null $timeout + * + * @return ProcessBuilder + * + * @throws InvalidArgumentException + */ + public function setTimeout($timeout) + { + if (null === $timeout) { + $this->timeout = null; + + return $this; + } + + $timeout = (float) $timeout; + + if ($timeout < 0) { + throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.'); + } + + $this->timeout = $timeout; + + return $this; + } + + /** + * Adds a proc_open option. + * + * @param string $name The option name + * @param string $value The option value + * + * @return ProcessBuilder + */ + public function setOption($name, $value) + { + $this->options[$name] = $value; + + return $this; + } + + /** + * Disables fetching output and error output from the underlying process. + * + * @return ProcessBuilder + */ + public function disableOutput() + { + $this->outputDisabled = true; + + return $this; + } + + /** + * Enables fetching output and error output from the underlying process. + * + * @return ProcessBuilder + */ + public function enableOutput() + { + $this->outputDisabled = false; + + return $this; + } + + /** + * Creates a Process instance and returns it. + * + * @return Process + * + * @throws LogicException In case no arguments have been provided + */ + public function getProcess() + { + if (0 === count($this->prefix) && 0 === count($this->arguments)) { + throw new LogicException('You must add() command arguments before calling getProcess().'); + } + + $options = $this->options; + + $arguments = array_merge($this->prefix, $this->arguments); + $script = implode(' ', array_map(array(__NAMESPACE__.'\\ProcessUtils', 'escapeArgument'), $arguments)); + + if ($this->inheritEnv) { + // include $_ENV for BC purposes + $env = array_replace($_ENV, $_SERVER, $this->env); + } else { + $env = $this->env; + } + + $process = new Process($script, $this->cwd, $env, $this->input, $this->timeout, $options); + + if ($this->outputDisabled) { + $process->disableOutput(); + } + + return $process; + } +} diff --git a/vendor/symfony/process/ProcessUtils.php b/vendor/symfony/process/ProcessUtils.php new file mode 100644 index 00000000..4f30b630 --- /dev/null +++ b/vendor/symfony/process/ProcessUtils.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process; + +use Symfony\Component\Process\Exception\InvalidArgumentException; + +/** + * ProcessUtils is a bunch of utility methods. + * + * This class contains static methods only and is not meant to be instantiated. + * + * @author Martin Hasoň + */ +class ProcessUtils +{ + /** + * This class should not be instantiated. + */ + private function __construct() + { + } + + /** + * Escapes a string to be used as a shell argument. + * + * @param string $argument The argument that will be escaped + * + * @return string The escaped argument + */ + public static function escapeArgument($argument) + { + //Fix for PHP bug #43784 escapeshellarg removes % from given string + //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows + //@see https://bugs.php.net/bug.php?id=43784 + //@see https://bugs.php.net/bug.php?id=49446 + if ('\\' === DIRECTORY_SEPARATOR) { + if ('' === $argument) { + return escapeshellarg($argument); + } + + $escapedArgument = ''; + $quote = false; + foreach (preg_split('/(")/', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) { + if ('"' === $part) { + $escapedArgument .= '\\"'; + } elseif (self::isSurroundedBy($part, '%')) { + // Avoid environment variable expansion + $escapedArgument .= '^%"'.substr($part, 1, -1).'"^%'; + } else { + // escape trailing backslash + if ('\\' === substr($part, -1)) { + $part .= '\\'; + } + $quote = true; + $escapedArgument .= $part; + } + } + if ($quote) { + $escapedArgument = '"'.$escapedArgument.'"'; + } + + return $escapedArgument; + } + + return escapeshellarg($argument); + } + + /** + * Validates and normalizes a Process input. + * + * @param string $caller The name of method call that validates the input + * @param mixed $input The input to validate + * + * @return string The validated input + * + * @throws InvalidArgumentException In case the input is not valid + * + * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0. + */ + public static function validateInput($caller, $input) + { + if (null !== $input) { + if (is_resource($input)) { + return $input; + } + if (is_scalar($input)) { + return (string) $input; + } + // deprecated as of Symfony 2.5, to be removed in 3.0 + if (is_object($input) && method_exists($input, '__toString')) { + @trigger_error('Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED); + + return (string) $input; + } + + throw new InvalidArgumentException(sprintf('%s only accepts strings or stream resources.', $caller)); + } + + return $input; + } + + private static function isSurroundedBy($arg, $char) + { + return 2 < strlen($arg) && $char === $arg[0] && $char === $arg[strlen($arg) - 1]; + } +} diff --git a/vendor/symfony/process/README.md b/vendor/symfony/process/README.md new file mode 100644 index 00000000..7c83ed41 --- /dev/null +++ b/vendor/symfony/process/README.md @@ -0,0 +1,51 @@ +Process Component +================= + +Process executes commands in sub-processes. + +In this example, we run a simple directory listing and get the result back: + +```php +use Symfony\Component\Process\Process; + +$process = new Process('ls -lsa'); +$process->setTimeout(3600); +$process->run(); +if (!$process->isSuccessful()) { + throw new RuntimeException($process->getErrorOutput()); +} + +print $process->getOutput(); +``` + +You can think that this is easy to achieve with plain PHP but it's not especially +if you want to take care of the subtle differences between the different platforms. + +And if you want to be able to get some feedback in real-time, just pass an +anonymous function to the ``run()`` method and you will get the output buffer +as it becomes available: + +```php +use Symfony\Component\Process\Process; + +$process = new Process('ls -lsa'); +$process->run(function ($type, $buffer) { + if (Process::ERR === $type) { + echo 'ERR > '.$buffer; + } else { + echo 'OUT > '.$buffer; + } +}); +``` + +That's great if you want to execute a long running command (like rsync-ing files to a +remote server) and give feedback to the user in real-time. + +Resources +--------- + +You can run the unit tests with the following command: + + $ cd path/to/Symfony/Component/Process/ + $ composer install + $ phpunit diff --git a/vendor/symfony/process/Tests/AbstractProcessTest.php b/vendor/symfony/process/Tests/AbstractProcessTest.php new file mode 100644 index 00000000..2add8cc9 --- /dev/null +++ b/vendor/symfony/process/Tests/AbstractProcessTest.php @@ -0,0 +1,1205 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\Exception\LogicException; +use Symfony\Component\Process\Exception\ProcessTimedOutException; +use Symfony\Component\Process\Exception\RuntimeException; +use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\Pipes\PipesInterface; +use Symfony\Component\Process\Process; + +/** + * @author Robert Schönthal + */ +abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase +{ + protected static $phpBin; + + public static function setUpBeforeClass() + { + $phpBin = new PhpExecutableFinder(); + self::$phpBin = $phpBin->find(); + } + + public function testThatProcessDoesNotThrowWarningDuringRun() + { + @trigger_error('Test Error', E_USER_NOTICE); + $process = $this->getProcess(self::$phpBin." -r 'sleep(3)'"); + $process->run(); + $actualError = error_get_last(); + $this->assertEquals('Test Error', $actualError['message']); + $this->assertEquals(E_USER_NOTICE, $actualError['type']); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException + */ + public function testNegativeTimeoutFromConstructor() + { + $this->getProcess('', null, null, null, -1); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException + */ + public function testNegativeTimeoutFromSetter() + { + $p = $this->getProcess(''); + $p->setTimeout(-1); + } + + public function testFloatAndNullTimeout() + { + $p = $this->getProcess(''); + + $p->setTimeout(10); + $this->assertSame(10.0, $p->getTimeout()); + + $p->setTimeout(null); + $this->assertNull($p->getTimeout()); + + $p->setTimeout(0.0); + $this->assertNull($p->getTimeout()); + } + + public function testStopWithTimeoutIsActuallyWorking() + { + $this->verifyPosixIsEnabled(); + + // exec is mandatory here since we send a signal to the process + // see https://github.com/symfony/symfony/issues/5030 about prepending + // command with exec + $p = $this->getProcess('exec php '.__DIR__.'/NonStopableProcess.php 3'); + $p->start(); + usleep(100000); + $start = microtime(true); + $p->stop(1.1, SIGKILL); + while ($p->isRunning()) { + usleep(1000); + } + $duration = microtime(true) - $start; + + $this->assertLessThan(4, $duration); + } + + public function testAllOutputIsActuallyReadOnTermination() + { + // this code will result in a maximum of 2 reads of 8192 bytes by calling + // start() and isRunning(). by the time getOutput() is called the process + // has terminated so the internal pipes array is already empty. normally + // the call to start() will not read any data as the process will not have + // generated output, but this is non-deterministic so we must count it as + // a possibility. therefore we need 2 * PipesInterface::CHUNK_SIZE plus + // another byte which will never be read. + $expectedOutputSize = PipesInterface::CHUNK_SIZE * 2 + 2; + + $code = sprintf('echo str_repeat(\'*\', %d);', $expectedOutputSize); + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code))); + + $p->start(); + // Let's wait enough time for process to finish... + // Here we don't call Process::run or Process::wait to avoid any read of pipes + usleep(500000); + + if ($p->isRunning()) { + $this->markTestSkipped('Process execution did not complete in the required time frame'); + } + + $o = $p->getOutput(); + + $this->assertEquals($expectedOutputSize, strlen($o)); + } + + public function testCallbacksAreExecutedWithStart() + { + $data = ''; + + $process = $this->getProcess('echo foo && php -r "sleep(1);" && echo foo'); + $process->start(function ($type, $buffer) use (&$data) { + $data .= $buffer; + }); + + while ($process->isRunning()) { + usleep(10000); + } + + $this->assertEquals(2, preg_match_all('/foo/', $data, $matches)); + } + + /** + * tests results from sub processes. + * + * @dataProvider responsesCodeProvider + */ + public function testProcessResponses($expected, $getter, $code) + { + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code))); + $p->run(); + + $this->assertSame($expected, $p->$getter()); + } + + /** + * tests results from sub processes. + * + * @dataProvider pipesCodeProvider + */ + public function testProcessPipes($code, $size) + { + $expected = str_repeat(str_repeat('*', 1024), $size).'!'; + $expectedLength = (1024 * $size) + 1; + + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code))); + $p->setInput($expected); + $p->run(); + + $this->assertEquals($expectedLength, strlen($p->getOutput())); + $this->assertEquals($expectedLength, strlen($p->getErrorOutput())); + } + + /** + * @dataProvider pipesCodeProvider + */ + public function testSetStreamAsInput($code, $size) + { + $expected = str_repeat(str_repeat('*', 1024), $size).'!'; + $expectedLength = (1024 * $size) + 1; + + $stream = fopen('php://temporary', 'w+'); + fwrite($stream, $expected); + rewind($stream); + + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg($code))); + $p->setInput($stream); + $p->run(); + + fclose($stream); + + $this->assertEquals($expectedLength, strlen($p->getOutput())); + $this->assertEquals($expectedLength, strlen($p->getErrorOutput())); + } + + public function testSetInputWhileRunningThrowsAnException() + { + $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $process->start(); + try { + $process->setInput('foobar'); + $process->stop(); + $this->fail('A LogicException should have been raised.'); + } catch (LogicException $e) { + $this->assertEquals('Input can not be set while the process is running.', $e->getMessage()); + } + $process->stop(); + } + + /** + * @dataProvider provideInvalidInputValues + * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException + * @expectedExceptionMessage Symfony\Component\Process\Process::setInput only accepts strings or stream resources. + */ + public function testInvalidInput($value) + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->setInput($value); + } + + public function provideInvalidInputValues() + { + return array( + array(array()), + array(new NonStringifiable()), + ); + } + + /** + * @dataProvider provideInputValues + */ + public function testValidInput($expected, $value) + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->setInput($value); + $this->assertSame($expected, $process->getInput()); + } + + public function provideInputValues() + { + return array( + array(null, null), + array('24.5', 24.5), + array('input data', 'input data'), + ); + } + + /** + * @dataProvider provideLegacyInputValues + * @group legacy + */ + public function testLegacyValidInput($expected, $value) + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->setInput($value); + $this->assertSame($expected, $process->getInput()); + } + + public function provideLegacyInputValues() + { + return array( + array('stringifiable', new Stringifiable()), + ); + } + + public function chainedCommandsOutputProvider() + { + if ('\\' === DIRECTORY_SEPARATOR) { + return array( + array("2 \r\n2\r\n", '&&', '2'), + ); + } + + return array( + array("1\n1\n", ';', '1'), + array("2\n2\n", '&&', '2'), + ); + } + + /** + * @dataProvider chainedCommandsOutputProvider + */ + public function testChainedCommandsOutput($expected, $operator, $input) + { + $process = $this->getProcess(sprintf('echo %s %s echo %s', $input, $operator, $input)); + $process->run(); + $this->assertEquals($expected, $process->getOutput()); + } + + public function testCallbackIsExecutedForOutput() + { + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('echo \'foo\';'))); + + $called = false; + $p->run(function ($type, $buffer) use (&$called) { + $called = $buffer === 'foo'; + }); + + $this->assertTrue($called, 'The callback should be executed with the output'); + } + + public function testGetErrorOutput() + { + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }'))); + + $p->run(); + $this->assertEquals(3, preg_match_all('/ERROR/', $p->getErrorOutput(), $matches)); + } + + public function testGetIncrementalErrorOutput() + { + // use a lock file to toggle between writing ("W") and reading ("R") the + // error stream + $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock'); + file_put_contents($lock, 'W'); + + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }'))); + + $p->start(); + while ($p->isRunning()) { + if ('R' === file_get_contents($lock)) { + $this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalErrorOutput(), $matches)); + file_put_contents($lock, 'W'); + } + usleep(100); + } + + unlink($lock); + } + + public function testFlushErrorOutput() + { + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }'))); + + $p->run(); + $p->clearErrorOutput(); + $this->assertEmpty($p->getErrorOutput()); + } + + public function testGetEmptyIncrementalErrorOutput() + { + // use a lock file to toggle between writing ("W") and reading ("R") the + // output stream + $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock'); + file_put_contents($lock, 'W'); + + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }'))); + + $p->start(); + + $shouldWrite = false; + + while ($p->isRunning()) { + if ('R' === file_get_contents($lock)) { + if (!$shouldWrite) { + $this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalOutput(), $matches)); + $shouldWrite = true; + } else { + $this->assertSame('', $p->getIncrementalOutput()); + + file_put_contents($lock, 'W'); + $shouldWrite = false; + } + } + usleep(100); + } + + unlink($lock); + } + + public function testGetOutput() + { + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { echo \' foo \'; $n++; }'))); + + $p->run(); + $this->assertEquals(3, preg_match_all('/foo/', $p->getOutput(), $matches)); + } + + public function testGetIncrementalOutput() + { + // use a lock file to toggle between writing ("W") and reading ("R") the + // output stream + $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock'); + file_put_contents($lock, 'W'); + + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }'))); + + $p->start(); + while ($p->isRunning()) { + if ('R' === file_get_contents($lock)) { + $this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches)); + file_put_contents($lock, 'W'); + } + usleep(100); + } + + unlink($lock); + } + + public function testFlushOutput() + { + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n=0;while ($n<3) {echo \' foo \';$n++;}'))); + + $p->run(); + $p->clearOutput(); + $this->assertEmpty($p->getOutput()); + } + + public function testGetEmptyIncrementalOutput() + { + // use a lock file to toggle between writing ("W") and reading ("R") the + // output stream + $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock'); + file_put_contents($lock, 'W'); + + $p = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }'))); + + $p->start(); + + $shouldWrite = false; + + while ($p->isRunning()) { + if ('R' === file_get_contents($lock)) { + if (!$shouldWrite) { + $this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches)); + $shouldWrite = true; + } else { + $this->assertSame('', $p->getIncrementalOutput()); + + file_put_contents($lock, 'W'); + $shouldWrite = false; + } + } + usleep(100); + } + + unlink($lock); + } + + public function testZeroAsOutput() + { + if ('\\' === DIRECTORY_SEPARATOR) { + // see http://stackoverflow.com/questions/7105433/windows-batch-echo-without-new-line + $p = $this->getProcess('echo | set /p dummyName=0'); + } else { + $p = $this->getProcess('printf 0'); + } + + $p->run(); + $this->assertSame('0', $p->getOutput()); + } + + public function testExitCodeCommandFailed() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does not support POSIX exit code'); + } + + // such command run in bash return an exitcode 127 + $process = $this->getProcess('nonexistingcommandIhopeneversomeonewouldnameacommandlikethis'); + $process->run(); + + $this->assertGreaterThan(0, $process->getExitCode()); + } + + public function testTTYCommand() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does have /dev/tty support'); + } + + $process = $this->getProcess('echo "foo" >> /dev/null && php -r "usleep(100000);"'); + $process->setTty(true); + $process->start(); + $this->assertTrue($process->isRunning()); + $process->wait(); + + $this->assertSame(Process::STATUS_TERMINATED, $process->getStatus()); + } + + public function testTTYCommandExitCode() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does have /dev/tty support'); + } + + $process = $this->getProcess('echo "foo" >> /dev/null'); + $process->setTty(true); + $process->run(); + + $this->assertTrue($process->isSuccessful()); + } + + public function testTTYInWindowsEnvironment() + { + if ('\\' !== DIRECTORY_SEPARATOR) { + $this->markTestSkipped('This test is for Windows platform only'); + } + + $process = $this->getProcess('echo "foo" >> /dev/null'); + $process->setTty(false); + $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'TTY mode is not supported on Windows platform.'); + $process->setTty(true); + } + + public function testExitCodeTextIsNullWhenExitCodeIsNull() + { + $process = $this->getProcess(''); + $this->assertNull($process->getExitCodeText()); + } + + public function testPTYCommand() + { + if (!Process::isPtySupported()) { + $this->markTestSkipped('PTY is not supported on this operating system.'); + } + + $process = $this->getProcess('echo "foo"'); + $process->setPty(true); + $process->run(); + + $this->assertSame(Process::STATUS_TERMINATED, $process->getStatus()); + $this->assertEquals("foo\r\n", $process->getOutput()); + } + + public function testMustRun() + { + $process = $this->getProcess('echo foo'); + + $this->assertSame($process, $process->mustRun()); + $this->assertEquals("foo".PHP_EOL, $process->getOutput()); + } + + public function testSuccessfulMustRunHasCorrectExitCode() + { + $process = $this->getProcess('echo foo')->mustRun(); + $this->assertEquals(0, $process->getExitCode()); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\ProcessFailedException + */ + public function testMustRunThrowsException() + { + $process = $this->getProcess('exit 1'); + $process->mustRun(); + } + + public function testExitCodeText() + { + $process = $this->getProcess(''); + $r = new \ReflectionObject($process); + $p = $r->getProperty('exitcode'); + $p->setAccessible(true); + + $p->setValue($process, 2); + $this->assertEquals('Misuse of shell builtins', $process->getExitCodeText()); + } + + public function testStartIsNonBlocking() + { + $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $start = microtime(true); + $process->start(); + $end = microtime(true); + $this->assertLessThan(0.2, $end-$start); + $process->wait(); + } + + public function testUpdateStatus() + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $this->assertTrue(strlen($process->getOutput()) > 0); + } + + public function testGetExitCodeIsNullOnStart() + { + $process = $this->getProcess(self::$phpBin.' -r "usleep(200000);"'); + $this->assertNull($process->getExitCode()); + $process->start(); + $this->assertNull($process->getExitCode()); + $process->wait(); + $this->assertEquals(0, $process->getExitCode()); + } + + public function testGetExitCodeIsNullOnWhenStartingAgain() + { + $process = $this->getProcess(self::$phpBin.' -r "usleep(200000);"'); + $process->run(); + $this->assertEquals(0, $process->getExitCode()); + $process->start(); + $this->assertNull($process->getExitCode()); + $process->wait(); + $this->assertEquals(0, $process->getExitCode()); + } + + public function testGetExitCode() + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $this->assertSame(0, $process->getExitCode()); + } + + public function testStatus() + { + $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $this->assertFalse($process->isRunning()); + $this->assertFalse($process->isStarted()); + $this->assertFalse($process->isTerminated()); + $this->assertSame(Process::STATUS_READY, $process->getStatus()); + $process->start(); + $this->assertTrue($process->isRunning()); + $this->assertTrue($process->isStarted()); + $this->assertFalse($process->isTerminated()); + $this->assertSame(Process::STATUS_STARTED, $process->getStatus()); + $process->wait(); + $this->assertFalse($process->isRunning()); + $this->assertTrue($process->isStarted()); + $this->assertTrue($process->isTerminated()); + $this->assertSame(Process::STATUS_TERMINATED, $process->getStatus()); + } + + public function testStop() + { + $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"'); + $process->start(); + $this->assertTrue($process->isRunning()); + $process->stop(); + $this->assertFalse($process->isRunning()); + } + + public function testIsSuccessful() + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $this->assertTrue($process->isSuccessful()); + } + + public function testIsSuccessfulOnlyAfterTerminated() + { + $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"'); + $process->start(); + while ($process->isRunning()) { + $this->assertFalse($process->isSuccessful()); + usleep(300000); + } + + $this->assertTrue($process->isSuccessful()); + } + + public function testIsNotSuccessful() + { + $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);throw new \Exception(\'BOUM\');"'); + $process->start(); + $this->assertTrue($process->isRunning()); + $process->wait(); + $this->assertFalse($process->isSuccessful()); + } + + public function testProcessIsNotSignaled() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does not support POSIX signals'); + } + + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $this->assertFalse($process->hasBeenSignaled()); + } + + public function testProcessWithoutTermSignalIsNotSignaled() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does not support POSIX signals'); + } + + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $this->assertFalse($process->hasBeenSignaled()); + } + + public function testProcessWithoutTermSignal() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does not support POSIX signals'); + } + + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $this->assertEquals(0, $process->getTermSignal()); + } + + public function testProcessIsSignaledIfStopped() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does not support POSIX signals'); + } + + $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"'); + $process->start(); + $process->stop(); + $this->assertTrue($process->hasBeenSignaled()); + } + + public function testProcessWithTermSignal() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does not support POSIX signals'); + } + + // SIGTERM is only defined if pcntl extension is present + $termSignal = defined('SIGTERM') ? SIGTERM : 15; + + $process = $this->getProcess(self::$phpBin.' -r "sleep(4);"'); + $process->start(); + $process->stop(); + + $this->assertEquals($termSignal, $process->getTermSignal()); + } + + public function testProcessThrowsExceptionWhenExternallySignaled() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Windows does not support POSIX signals'); + } + + if (!function_exists('posix_kill')) { + $this->markTestSkipped('posix_kill is required for this test'); + } + + $termSignal = defined('SIGKILL') ? SIGKILL : 9; + + $process = $this->getProcess('exec php -r "while (true) {}"'); + $process->start(); + posix_kill($process->getPid(), $termSignal); + + $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'The process has been signaled with signal "9".'); + $process->wait(); + } + + public function testRestart() + { + $process1 = $this->getProcess(self::$phpBin.' -r "echo getmypid();"'); + $process1->run(); + $process2 = $process1->restart(); + + $process2->wait(); // wait for output + + // Ensure that both processed finished and the output is numeric + $this->assertFalse($process1->isRunning()); + $this->assertFalse($process2->isRunning()); + $this->assertTrue(is_numeric($process1->getOutput())); + $this->assertTrue(is_numeric($process2->getOutput())); + + // Ensure that restart returned a new process by check that the output is different + $this->assertNotEquals($process1->getOutput(), $process2->getOutput()); + } + + public function testPhpDeadlock() + { + $this->markTestSkipped('Can cause PHP to hang'); + + // Sleep doesn't work as it will allow the process to handle signals and close + // file handles from the other end. + $process = $this->getProcess(self::$phpBin.' -r "while (true) {}"'); + $process->start(); + + // PHP will deadlock when it tries to cleanup $process + } + + public function testRunProcessWithTimeout() + { + $timeout = 0.5; + $process = $this->getProcess(self::$phpBin.' -r "usleep(600000);"'); + $process->setTimeout($timeout); + $start = microtime(true); + try { + $process->run(); + $this->fail('A RuntimeException should have been raised'); + } catch (RuntimeException $e) { + } + $duration = microtime(true) - $start; + + if ('\\' === DIRECTORY_SEPARATOR) { + // Windows is a bit slower as it read file handles, then allow twice the precision + $maxDuration = $timeout + 2 * Process::TIMEOUT_PRECISION; + } else { + $maxDuration = $timeout + Process::TIMEOUT_PRECISION; + } + + $this->assertLessThan($maxDuration, $duration); + } + + public function testCheckTimeoutOnNonStartedProcess() + { + $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"'); + $process->checkTimeout(); + } + + public function testCheckTimeoutOnTerminatedProcess() + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $process->checkTimeout(); + } + + public function testCheckTimeoutOnStartedProcess() + { + $timeout = 0.5; + $precision = 100000; + $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"'); + $process->setTimeout($timeout); + $start = microtime(true); + + $process->start(); + + try { + while ($process->isRunning()) { + $process->checkTimeout(); + usleep($precision); + } + $this->fail('A RuntimeException should have been raised'); + } catch (RuntimeException $e) { + } + $duration = microtime(true) - $start; + + $this->assertLessThan($timeout + $precision, $duration); + $this->assertFalse($process->isSuccessful()); + } + + public function testIdleTimeout() + { + $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"'); + $process->setTimeout(10); + $process->setIdleTimeout(0.5); + + try { + $process->run(); + + $this->fail('A timeout exception was expected.'); + } catch (ProcessTimedOutException $ex) { + $this->assertTrue($ex->isIdleTimeout()); + $this->assertFalse($ex->isGeneralTimeout()); + $this->assertEquals(0.5, $ex->getExceededTimeout()); + } + } + + public function testIdleTimeoutNotExceededWhenOutputIsSent() + { + $process = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 30; while ($n--) {echo "foo\n"; usleep(100000); }'))); + $process->setTimeout(2); + $process->setIdleTimeout(1); + + try { + $process->run(); + $this->fail('A timeout exception was expected.'); + } catch (ProcessTimedOutException $ex) { + $this->assertTrue($ex->isGeneralTimeout(), 'A general timeout is expected.'); + $this->assertFalse($ex->isIdleTimeout(), 'No idle timeout is expected.'); + $this->assertEquals(2, $ex->getExceededTimeout()); + } + } + + public function testStartAfterATimeout() + { + $process = $this->getProcess(sprintf('%s -r %s', self::$phpBin, escapeshellarg('$n = 1000; while ($n--) {echo \'\'; usleep(1000); }'))); + $process->setTimeout(0.1); + + try { + $process->run(); + $this->fail('A RuntimeException should have been raised.'); + } catch (RuntimeException $e) { + } + $process->start(); + usleep(1000); + $process->stop(); + } + + public function testGetPid() + { + $process = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $process->start(); + $this->assertGreaterThan(0, $process->getPid()); + $process->wait(); + } + + public function testGetPidIsNullBeforeStart() + { + $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"'); + $this->assertNull($process->getPid()); + } + + public function testGetPidIsNullAfterRun() + { + $process = $this->getProcess(self::$phpBin.' -v'); + $process->run(); + $this->assertNull($process->getPid()); + } + + public function testSignal() + { + $this->verifyPosixIsEnabled(); + + $process = $this->getProcess('exec php -f '.__DIR__.'/SignalListener.php'); + $process->start(); + usleep(500000); + $process->signal(SIGUSR1); + + while ($process->isRunning() && false === strpos($process->getOutput(), 'Caught SIGUSR1')) { + usleep(10000); + } + + $this->assertEquals('Caught SIGUSR1', $process->getOutput()); + } + + public function testExitCodeIsAvailableAfterSignal() + { + $this->verifyPosixIsEnabled(); + + $process = $this->getProcess('sleep 4'); + $process->start(); + $process->signal(SIGKILL); + + while ($process->isRunning()) { + usleep(10000); + } + + $this->assertFalse($process->isRunning()); + $this->assertTrue($process->hasBeenSignaled()); + $this->assertFalse($process->isSuccessful()); + $this->assertEquals(137, $process->getExitCode()); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\LogicException + */ + public function testSignalProcessNotRunning() + { + $this->verifyPosixIsEnabled(); + $process = $this->getProcess(self::$phpBin.' -v'); + $process->signal(SIGHUP); + } + + /** + * @dataProvider provideMethodsThatNeedARunningProcess + */ + public function testMethodsThatNeedARunningProcess($method) + { + $process = $this->getProcess(self::$phpBin.' -v'); + $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', sprintf('Process must be started before calling %s.', $method)); + $process->{$method}(); + } + + public function provideMethodsThatNeedARunningProcess() + { + return array( + array('getOutput'), + array('getIncrementalOutput'), + array('getErrorOutput'), + array('getIncrementalErrorOutput'), + array('wait'), + ); + } + + /** + * @dataProvider provideMethodsThatNeedATerminatedProcess + */ + public function testMethodsThatNeedATerminatedProcess($method) + { + $process = $this->getProcess(self::$phpBin.' -r "sleep(1);"'); + $process->start(); + try { + $process->{$method}(); + $process->stop(0); + $this->fail('A LogicException must have been thrown'); + } catch (\Exception $e) { + $this->assertInstanceOf('Symfony\Component\Process\Exception\LogicException', $e); + $this->assertEquals(sprintf('Process must be terminated before calling %s.', $method), $e->getMessage()); + } + $process->stop(0); + } + + public function provideMethodsThatNeedATerminatedProcess() + { + return array( + array('hasBeenSignaled'), + array('getTermSignal'), + array('hasBeenStopped'), + array('getStopSignal'), + ); + } + + private function verifyPosixIsEnabled() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('POSIX signals do not work on Windows'); + } + if (!defined('SIGUSR1')) { + $this->markTestSkipped('The pcntl extension is not enabled'); + } + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testSignalWithWrongIntSignal() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('POSIX signals do not work on Windows'); + } + + $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"'); + $process->start(); + $process->signal(-4); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testSignalWithWrongNonIntSignal() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('POSIX signals do not work on Windows'); + } + + $process = $this->getProcess(self::$phpBin.' -r "sleep(3);"'); + $process->start(); + $process->signal('Céphalopodes'); + } + + public function testDisableOutputDisablesTheOutput() + { + $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $this->assertFalse($p->isOutputDisabled()); + $p->disableOutput(); + $this->assertTrue($p->isOutputDisabled()); + $p->enableOutput(); + $this->assertFalse($p->isOutputDisabled()); + } + + public function testDisableOutputWhileRunningThrowsException() + { + $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $p->start(); + $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Disabling output while the process is running is not possible.'); + $p->disableOutput(); + } + + public function testEnableOutputWhileRunningThrowsException() + { + $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $p->disableOutput(); + $p->start(); + $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Enabling output while the process is running is not possible.'); + $p->enableOutput(); + } + + public function testEnableOrDisableOutputAfterRunDoesNotThrowException() + { + $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $p->disableOutput(); + $p->start(); + $p->wait(); + $p->enableOutput(); + $p->disableOutput(); + } + + public function testDisableOutputWhileIdleTimeoutIsSet() + { + $process = $this->getProcess('sleep 3'); + $process->setIdleTimeout(1); + $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Output can not be disabled while an idle timeout is set.'); + $process->disableOutput(); + } + + public function testSetIdleTimeoutWhileOutputIsDisabled() + { + $process = $this->getProcess('sleep 3'); + $process->disableOutput(); + $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Idle timeout can not be set while the output is disabled.'); + $process->setIdleTimeout(1); + } + + public function testSetNullIdleTimeoutWhileOutputIsDisabled() + { + $process = $this->getProcess('sleep 3'); + $process->disableOutput(); + $process->setIdleTimeout(null); + } + + /** + * @dataProvider provideStartMethods + */ + public function testStartWithACallbackAndDisabledOutput($startMethod, $exception, $exceptionMessage) + { + $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $p->disableOutput(); + $this->setExpectedException($exception, $exceptionMessage); + $p->{$startMethod}(function () {}); + } + + public function provideStartMethods() + { + return array( + array('start', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'), + array('run', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'), + array('mustRun', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'), + ); + } + + /** + * @dataProvider provideOutputFetchingMethods + */ + public function testGetOutputWhileDisabled($fetchMethod) + { + $p = $this->getProcess(self::$phpBin.' -r "usleep(500000);"'); + $p->disableOutput(); + $p->start(); + $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Output has been disabled.'); + $p->{$fetchMethod}(); + } + + public function provideOutputFetchingMethods() + { + return array( + array('getOutput'), + array('getIncrementalOutput'), + array('getErrorOutput'), + array('getIncrementalErrorOutput'), + ); + } + + public function responsesCodeProvider() + { + return array( + //expected output / getter / code to execute + //array(1,'getExitCode','exit(1);'), + //array(true,'isSuccessful','exit();'), + array('output', 'getOutput', 'echo \'output\';'), + ); + } + + public function pipesCodeProvider() + { + $variations = array( + 'fwrite(STDOUT, $in = file_get_contents(\'php://stdin\')); fwrite(STDERR, $in);', + 'include \''.__DIR__.'/PipeStdinInStdoutStdErrStreamSelect.php\';', + ); + + if ('\\' === DIRECTORY_SEPARATOR) { + // Avoid XL buffers on Windows because of https://bugs.php.net/bug.php?id=65650 + $sizes = array(1, 2, 4, 8); + } else { + $sizes = array(1, 16, 64, 1024, 4096); + } + + $codes = array(); + foreach ($sizes as $size) { + foreach ($variations as $code) { + $codes[] = array($code, $size); + } + } + + return $codes; + } + + /** + * provides default method names for simple getter/setter. + */ + public function methodProvider() + { + $defaults = array( + array('CommandLine'), + array('Timeout'), + array('WorkingDirectory'), + array('Env'), + array('Stdin'), + array('Input'), + array('Options'), + ); + + return $defaults; + } + + /** + * @param string $commandline + * @param null|string $cwd + * @param null|array $env + * @param null|string $input + * @param int $timeout + * @param array $options + * + * @return Process + */ + abstract protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array()); +} + +class Stringifiable +{ + public function __toString() + { + return 'stringifiable'; + } +} + +class NonStringifiable +{ +} diff --git a/vendor/symfony/process/Tests/ExecutableFinderTest.php b/vendor/symfony/process/Tests/ExecutableFinderTest.php new file mode 100644 index 00000000..61a471b4 --- /dev/null +++ b/vendor/symfony/process/Tests/ExecutableFinderTest.php @@ -0,0 +1,149 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\ExecutableFinder; + +/** + * @author Chris Smith + */ +class ExecutableFinderTest extends \PHPUnit_Framework_TestCase +{ + private $path; + + protected function tearDown() + { + if ($this->path) { + // Restore path if it was changed. + putenv('PATH='.$this->path); + } + } + + private function setPath($path) + { + $this->path = getenv('PATH'); + putenv('PATH='.$path); + } + + public function testFind() + { + if (!defined('PHP_BINARY')) { + $this->markTestSkipped('Requires the PHP_BINARY constant'); + } + + if (ini_get('open_basedir')) { + $this->markTestSkipped('Cannot test when open_basedir is set'); + } + + $this->setPath(dirname(PHP_BINARY)); + + $finder = new ExecutableFinder(); + $result = $finder->find($this->getPhpBinaryName()); + + $this->assertSamePath(PHP_BINARY, $result); + } + + public function testFindWithDefault() + { + if (ini_get('open_basedir')) { + $this->markTestSkipped('Cannot test when open_basedir is set'); + } + + $expected = 'defaultValue'; + + $this->setPath(''); + + $finder = new ExecutableFinder(); + $result = $finder->find('foo', $expected); + + $this->assertEquals($expected, $result); + } + + public function testFindWithExtraDirs() + { + if (!defined('PHP_BINARY')) { + $this->markTestSkipped('Requires the PHP_BINARY constant'); + } + + if (ini_get('open_basedir')) { + $this->markTestSkipped('Cannot test when open_basedir is set'); + } + + $this->setPath(''); + + $extraDirs = array(dirname(PHP_BINARY)); + + $finder = new ExecutableFinder(); + $result = $finder->find($this->getPhpBinaryName(), null, $extraDirs); + + $this->assertSamePath(PHP_BINARY, $result); + } + + public function testFindWithOpenBaseDir() + { + if (!defined('PHP_BINARY')) { + $this->markTestSkipped('Requires the PHP_BINARY constant'); + } + + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Cannot run test on windows'); + } + + if (ini_get('open_basedir')) { + $this->markTestSkipped('Cannot test when open_basedir is set'); + } + + $this->iniSet('open_basedir', dirname(PHP_BINARY).(!defined('HHVM_VERSION') ? PATH_SEPARATOR.'/' : '')); + + $finder = new ExecutableFinder(); + $result = $finder->find($this->getPhpBinaryName()); + + $this->assertSamePath(PHP_BINARY, $result); + } + + public function testFindProcessInOpenBasedir() + { + if (ini_get('open_basedir')) { + $this->markTestSkipped('Cannot test when open_basedir is set'); + } + + if (!defined('PHP_BINARY')) { + $this->markTestSkipped('Requires the PHP_BINARY constant'); + } + + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Cannot run test on windows'); + } + + $this->setPath(''); + $this->iniSet('open_basedir', PHP_BINARY.(!defined('HHVM_VERSION') ? PATH_SEPARATOR.'/' : '')); + + $finder = new ExecutableFinder(); + $result = $finder->find($this->getPhpBinaryName(), false); + + $this->assertSamePath(PHP_BINARY, $result); + } + + private function assertSamePath($expected, $tested) + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertEquals(strtolower($expected), strtolower($tested)); + } else { + $this->assertEquals($expected, $tested); + } + } + + private function getPhpBinaryName() + { + return basename(PHP_BINARY, '\\' === DIRECTORY_SEPARATOR ? '.exe' : ''); + } +} diff --git a/vendor/symfony/process/Tests/NonStopableProcess.php b/vendor/symfony/process/Tests/NonStopableProcess.php new file mode 100644 index 00000000..692feebb --- /dev/null +++ b/vendor/symfony/process/Tests/NonStopableProcess.php @@ -0,0 +1,36 @@ + (microtime(true) - $start)) { + usleep(1000); +} diff --git a/vendor/symfony/process/Tests/PhpExecutableFinderTest.php b/vendor/symfony/process/Tests/PhpExecutableFinderTest.php new file mode 100644 index 00000000..cd4abedc --- /dev/null +++ b/vendor/symfony/process/Tests/PhpExecutableFinderTest.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\PhpExecutableFinder; + +/** + * @author Robert Schönthal + */ +class PhpExecutableFinderTest extends \PHPUnit_Framework_TestCase +{ + /** + * tests find() with the env var PHP_PATH. + */ + public function testFindWithPhpPath() + { + if (defined('PHP_BINARY')) { + $this->markTestSkipped('The PHP binary is easily available as of PHP 5.4'); + } + + $f = new PhpExecutableFinder(); + + $current = $f->find(); + + //not executable PHP_PATH + putenv('PHP_PATH=/not/executable/php'); + $this->assertFalse($f->find(), '::find() returns false for not executable PHP'); + $this->assertFalse($f->find(false), '::find() returns false for not executable PHP'); + + //executable PHP_PATH + putenv('PHP_PATH='.$current); + $this->assertEquals($f->find(), $current, '::find() returns the executable PHP'); + $this->assertEquals($f->find(false), $current, '::find() returns the executable PHP'); + } + + /** + * tests find() with the env var PHP_PATH. + */ + public function testFindWithHHVM() + { + if (!defined('HHVM_VERSION')) { + $this->markTestSkipped('Should be executed in HHVM context.'); + } + + $f = new PhpExecutableFinder(); + + $current = getenv('PHP_BINARY') ?: PHP_BINARY; + + $this->assertEquals($current.' --php', $f->find(), '::find() returns the executable PHP'); + $this->assertEquals($current, $f->find(false), '::find() returns the executable PHP'); + } + + /** + * tests find() with the env var PHP_PATH. + */ + public function testFindArguments() + { + $f = new PhpExecutableFinder(); + + if (defined('HHVM_VERSION')) { + $this->assertEquals($f->findArguments(), array('--php'), '::findArguments() returns HHVM arguments'); + } else { + $this->assertEquals($f->findArguments(), array(), '::findArguments() returns no arguments'); + } + } + + /** + * tests find() with default executable. + */ + public function testFindWithSuffix() + { + if (defined('PHP_BINARY')) { + $this->markTestSkipped('The PHP binary is easily available as of PHP 5.4'); + } + + putenv('PHP_PATH='); + putenv('PHP_PEAR_PHP_BIN='); + $f = new PhpExecutableFinder(); + + $current = $f->find(); + + //TODO maybe php executable is custom or even Windows + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertTrue(is_executable($current)); + $this->assertTrue((bool) preg_match('/'.addslashes(DIRECTORY_SEPARATOR).'php\.(exe|bat|cmd|com)$/i', $current), '::find() returns the executable PHP with suffixes'); + } + } +} diff --git a/vendor/symfony/process/Tests/PhpProcessTest.php b/vendor/symfony/process/Tests/PhpProcessTest.php new file mode 100644 index 00000000..5dc546cc --- /dev/null +++ b/vendor/symfony/process/Tests/PhpProcessTest.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\PhpProcess; + +class PhpProcessTest extends \PHPUnit_Framework_TestCase +{ + public function testNonBlockingWorks() + { + $expected = 'hello world!'; + $process = new PhpProcess(<<start(); + $process->wait(); + $this->assertEquals($expected, $process->getOutput()); + } + + public function testCommandLine() + { + $process = new PhpProcess(<<find(); + + $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP before start'); + + $process->start(); + $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after start'); + + $process->wait(); + $this->assertSame($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after wait'); + } +} diff --git a/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php b/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php new file mode 100644 index 00000000..26673ea4 --- /dev/null +++ b/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php @@ -0,0 +1,63 @@ + 0) { + $written = fwrite(STDOUT, (binary) $out, 32768); + if (false === $written) { + die(ERR_WRITE_FAILED); + } + $out = (binary) substr($out, $written); + } + if (null === $read && '' === $out) { + $write = array_diff($write, array(STDOUT)); + } + + if (in_array(STDERR, $w) && strlen($err) > 0) { + $written = fwrite(STDERR, (binary) $err, 32768); + if (false === $written) { + die(ERR_WRITE_FAILED); + } + $err = (binary) substr($err, $written); + } + if (null === $read && '' === $err) { + $write = array_diff($write, array(STDERR)); + } + + if ($r) { + $str = fread(STDIN, 32768); + if (false !== $str) { + $out .= $str; + $err .= $str; + } + if (false === $str || feof(STDIN)) { + $read = null; + if (!feof(STDIN)) { + die(ERR_READ_FAILED); + } + } + } +} diff --git a/vendor/symfony/process/Tests/ProcessBuilderTest.php b/vendor/symfony/process/Tests/ProcessBuilderTest.php new file mode 100644 index 00000000..1b5056d1 --- /dev/null +++ b/vendor/symfony/process/Tests/ProcessBuilderTest.php @@ -0,0 +1,225 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\ProcessBuilder; + +class ProcessBuilderTest extends \PHPUnit_Framework_TestCase +{ + public function testInheritEnvironmentVars() + { + $_ENV['MY_VAR_1'] = 'foo'; + + $proc = ProcessBuilder::create() + ->add('foo') + ->getProcess(); + + unset($_ENV['MY_VAR_1']); + + $env = $proc->getEnv(); + $this->assertArrayHasKey('MY_VAR_1', $env); + $this->assertEquals('foo', $env['MY_VAR_1']); + } + + public function testAddEnvironmentVariables() + { + $pb = new ProcessBuilder(); + $env = array( + 'foo' => 'bar', + 'foo2' => 'bar2', + ); + $proc = $pb + ->add('command') + ->setEnv('foo', 'bar2') + ->addEnvironmentVariables($env) + ->inheritEnvironmentVariables(false) + ->getProcess() + ; + + $this->assertSame($env, $proc->getEnv()); + } + + public function testProcessShouldInheritAndOverrideEnvironmentVars() + { + $_ENV['MY_VAR_1'] = 'foo'; + + $proc = ProcessBuilder::create() + ->setEnv('MY_VAR_1', 'bar') + ->add('foo') + ->getProcess(); + + unset($_ENV['MY_VAR_1']); + + $env = $proc->getEnv(); + $this->assertArrayHasKey('MY_VAR_1', $env); + $this->assertEquals('bar', $env['MY_VAR_1']); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException + */ + public function testNegativeTimeoutFromSetter() + { + $pb = new ProcessBuilder(); + $pb->setTimeout(-1); + } + + public function testNullTimeout() + { + $pb = new ProcessBuilder(); + $pb->setTimeout(10); + $pb->setTimeout(null); + + $r = new \ReflectionObject($pb); + $p = $r->getProperty('timeout'); + $p->setAccessible(true); + + $this->assertNull($p->getValue($pb)); + } + + public function testShouldSetArguments() + { + $pb = new ProcessBuilder(array('initial')); + $pb->setArguments(array('second')); + + $proc = $pb->getProcess(); + + $this->assertContains('second', $proc->getCommandLine()); + } + + public function testPrefixIsPrependedToAllGeneratedProcess() + { + $pb = new ProcessBuilder(); + $pb->setPrefix('/usr/bin/php'); + + $proc = $pb->setArguments(array('-v'))->getProcess(); + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertEquals('"/usr/bin/php" "-v"', $proc->getCommandLine()); + } else { + $this->assertEquals("'/usr/bin/php' '-v'", $proc->getCommandLine()); + } + + $proc = $pb->setArguments(array('-i'))->getProcess(); + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertEquals('"/usr/bin/php" "-i"', $proc->getCommandLine()); + } else { + $this->assertEquals("'/usr/bin/php' '-i'", $proc->getCommandLine()); + } + } + + public function testArrayPrefixesArePrependedToAllGeneratedProcess() + { + $pb = new ProcessBuilder(); + $pb->setPrefix(array('/usr/bin/php', 'composer.phar')); + + $proc = $pb->setArguments(array('-v'))->getProcess(); + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertEquals('"/usr/bin/php" "composer.phar" "-v"', $proc->getCommandLine()); + } else { + $this->assertEquals("'/usr/bin/php' 'composer.phar' '-v'", $proc->getCommandLine()); + } + + $proc = $pb->setArguments(array('-i'))->getProcess(); + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertEquals('"/usr/bin/php" "composer.phar" "-i"', $proc->getCommandLine()); + } else { + $this->assertEquals("'/usr/bin/php' 'composer.phar' '-i'", $proc->getCommandLine()); + } + } + + public function testShouldEscapeArguments() + { + $pb = new ProcessBuilder(array('%path%', 'foo " bar', '%baz%baz')); + $proc = $pb->getProcess(); + + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertSame('^%"path"^% "foo \\" bar" "%baz%baz"', $proc->getCommandLine()); + } else { + $this->assertSame("'%path%' 'foo \" bar' '%baz%baz'", $proc->getCommandLine()); + } + } + + public function testShouldEscapeArgumentsAndPrefix() + { + $pb = new ProcessBuilder(array('arg')); + $pb->setPrefix('%prefix%'); + $proc = $pb->getProcess(); + + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertSame('^%"prefix"^% "arg"', $proc->getCommandLine()); + } else { + $this->assertSame("'%prefix%' 'arg'", $proc->getCommandLine()); + } + } + + /** + * @expectedException \Symfony\Component\Process\Exception\LogicException + */ + public function testShouldThrowALogicExceptionIfNoPrefixAndNoArgument() + { + ProcessBuilder::create()->getProcess(); + } + + public function testShouldNotThrowALogicExceptionIfNoArgument() + { + $process = ProcessBuilder::create() + ->setPrefix('/usr/bin/php') + ->getProcess(); + + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertEquals('"/usr/bin/php"', $process->getCommandLine()); + } else { + $this->assertEquals("'/usr/bin/php'", $process->getCommandLine()); + } + } + + public function testShouldNotThrowALogicExceptionIfNoPrefix() + { + $process = ProcessBuilder::create(array('/usr/bin/php')) + ->getProcess(); + + if ('\\' === DIRECTORY_SEPARATOR) { + $this->assertEquals('"/usr/bin/php"', $process->getCommandLine()); + } else { + $this->assertEquals("'/usr/bin/php'", $process->getCommandLine()); + } + } + + public function testShouldReturnProcessWithDisabledOutput() + { + $process = ProcessBuilder::create(array('/usr/bin/php')) + ->disableOutput() + ->getProcess(); + + $this->assertTrue($process->isOutputDisabled()); + } + + public function testShouldReturnProcessWithEnabledOutput() + { + $process = ProcessBuilder::create(array('/usr/bin/php')) + ->disableOutput() + ->enableOutput() + ->getProcess(); + + $this->assertFalse($process->isOutputDisabled()); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException + * @expectedExceptionMessage Symfony\Component\Process\ProcessBuilder::setInput only accepts strings or stream resources. + */ + public function testInvalidInput() + { + $builder = ProcessBuilder::create(); + $builder->setInput(array()); + } +} diff --git a/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php b/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php new file mode 100644 index 00000000..b028395f --- /dev/null +++ b/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php @@ -0,0 +1,136 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\Exception\ProcessFailedException; + +/** + * @author Sebastian Marek + */ +class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase +{ + /** + * tests ProcessFailedException throws exception if the process was successful. + */ + public function testProcessFailedExceptionThrowsException() + { + $process = $this->getMock( + 'Symfony\Component\Process\Process', + array('isSuccessful'), + array('php') + ); + $process->expects($this->once()) + ->method('isSuccessful') + ->will($this->returnValue(true)); + + $this->setExpectedException( + '\InvalidArgumentException', + 'Expected a failed process, but the given process was successful.' + ); + + new ProcessFailedException($process); + } + + /** + * tests ProcessFailedException uses information from process output + * to generate exception message. + */ + public function testProcessFailedExceptionPopulatesInformationFromProcessOutput() + { + $cmd = 'php'; + $exitCode = 1; + $exitText = 'General error'; + $output = 'Command output'; + $errorOutput = 'FATAL: Unexpected error'; + + $process = $this->getMock( + 'Symfony\Component\Process\Process', + array('isSuccessful', 'getOutput', 'getErrorOutput', 'getExitCode', 'getExitCodeText', 'isOutputDisabled'), + array($cmd) + ); + $process->expects($this->once()) + ->method('isSuccessful') + ->will($this->returnValue(false)); + + $process->expects($this->once()) + ->method('getOutput') + ->will($this->returnValue($output)); + + $process->expects($this->once()) + ->method('getErrorOutput') + ->will($this->returnValue($errorOutput)); + + $process->expects($this->once()) + ->method('getExitCode') + ->will($this->returnValue($exitCode)); + + $process->expects($this->once()) + ->method('getExitCodeText') + ->will($this->returnValue($exitText)); + + $process->expects($this->once()) + ->method('isOutputDisabled') + ->will($this->returnValue(false)); + + $exception = new ProcessFailedException($process); + + $this->assertEquals( + "The command \"$cmd\" failed.\nExit Code: $exitCode($exitText)\n\nOutput:\n================\n{$output}\n\nError Output:\n================\n{$errorOutput}", + $exception->getMessage() + ); + } + + /** + * Tests that ProcessFailedException does not extract information from + * process output if it was previously disabled + */ + public function testDisabledOutputInFailedExceptionDoesNotPopulateOutput() + { + $cmd = 'php'; + $exitCode = 1; + $exitText = 'General error'; + + $process = $this->getMock( + 'Symfony\Component\Process\Process', + array('isSuccessful', 'isOutputDisabled', 'getExitCode', 'getExitCodeText', 'getOutput', 'getErrorOutput'), + array($cmd) + ); + $process->expects($this->once()) + ->method('isSuccessful') + ->will($this->returnValue(false)); + + $process->expects($this->never()) + ->method('getOutput'); + + $process->expects($this->never()) + ->method('getErrorOutput'); + + $process->expects($this->once()) + ->method('getExitCode') + ->will($this->returnValue($exitCode)); + + $process->expects($this->once()) + ->method('getExitCodeText') + ->will($this->returnValue($exitText)); + + $process->expects($this->once()) + ->method('isOutputDisabled') + ->will($this->returnValue(true)); + + $exception = new ProcessFailedException($process); + + $this->assertEquals( + "The command \"$cmd\" failed.\nExit Code: $exitCode($exitText)", + $exception->getMessage() + ); + } +} diff --git a/vendor/symfony/process/Tests/ProcessInSigchildEnvironment.php b/vendor/symfony/process/Tests/ProcessInSigchildEnvironment.php new file mode 100644 index 00000000..3977bcdc --- /dev/null +++ b/vendor/symfony/process/Tests/ProcessInSigchildEnvironment.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\Process; + +class ProcessInSigchildEnvironment extends Process +{ + protected function isSigchildEnabled() + { + return true; + } +} diff --git a/vendor/symfony/process/Tests/ProcessUtilsTest.php b/vendor/symfony/process/Tests/ProcessUtilsTest.php new file mode 100644 index 00000000..e6564cde --- /dev/null +++ b/vendor/symfony/process/Tests/ProcessUtilsTest.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\ProcessUtils; + +class ProcessUtilsTest extends \PHPUnit_Framework_TestCase +{ + /** + * @dataProvider dataArguments + */ + public function testEscapeArgument($result, $argument) + { + $this->assertSame($result, ProcessUtils::escapeArgument($argument)); + } + + public function dataArguments() + { + if ('\\' === DIRECTORY_SEPARATOR) { + return array( + array('"\"php\" \"-v\""', '"php" "-v"'), + array('"foo bar"', 'foo bar'), + array('^%"path"^%', '%path%'), + array('"<|>\\" \\"\'f"', '<|>" "\'f'), + array('""', ''), + array('"with\trailingbs\\\\"', 'with\trailingbs\\'), + ); + } + + return array( + array("'\"php\" \"-v\"'", '"php" "-v"'), + array("'foo bar'", 'foo bar'), + array("'%path%'", '%path%'), + array("'<|>\" \"'\\''f'", '<|>" "\'f'), + array("''", ''), + array("'with\\trailingbs\\'", 'with\trailingbs\\'), + ); + } +} diff --git a/vendor/symfony/process/Tests/SigchildDisabledProcessTest.php b/vendor/symfony/process/Tests/SigchildDisabledProcessTest.php new file mode 100644 index 00000000..fdae5ec2 --- /dev/null +++ b/vendor/symfony/process/Tests/SigchildDisabledProcessTest.php @@ -0,0 +1,263 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +class SigchildDisabledProcessTest extends AbstractProcessTest +{ + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testGetExitCode() + { + parent::testGetExitCode(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testGetExitCodeIsNullOnStart() + { + parent::testGetExitCodeIsNullOnStart(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testGetExitCodeIsNullOnWhenStartingAgain() + { + parent::testGetExitCodeIsNullOnWhenStartingAgain(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testExitCodeCommandFailed() + { + parent::testExitCodeCommandFailed(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testMustRun() + { + parent::testMustRun(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testSuccessfulMustRunHasCorrectExitCode() + { + parent::testSuccessfulMustRunHasCorrectExitCode(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testMustRunThrowsException() + { + parent::testMustRunThrowsException(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + */ + public function testProcessIsSignaledIfStopped() + { + parent::testProcessIsSignaledIfStopped(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessWithTermSignal() + { + parent::testProcessWithTermSignal(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessIsNotSignaled() + { + parent::testProcessIsNotSignaled(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessWithoutTermSignal() + { + parent::testProcessWithoutTermSignal(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testCheckTimeoutOnStartedProcess() + { + parent::testCheckTimeoutOnStartedProcess(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved. + */ + public function testGetPid() + { + parent::testGetPid(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved. + */ + public function testGetPidIsNullBeforeStart() + { + parent::testGetPidIsNullBeforeStart(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved. + */ + public function testGetPidIsNullAfterRun() + { + parent::testGetPidIsNullAfterRun(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testExitCodeText() + { + $process = $this->getProcess('qdfsmfkqsdfmqmsd'); + $process->run(); + + $process->getExitCodeText(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testExitCodeTextIsNullWhenExitCodeIsNull() + { + parent::testExitCodeTextIsNullWhenExitCodeIsNull(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testIsSuccessful() + { + parent::testIsSuccessful(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testIsSuccessfulOnlyAfterTerminated() + { + parent::testIsSuccessfulOnlyAfterTerminated(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testIsNotSuccessful() + { + parent::testIsNotSuccessful(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method. + */ + public function testTTYCommandExitCode() + { + parent::testTTYCommandExitCode(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process can not be signaled. + */ + public function testSignal() + { + parent::testSignal(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessWithoutTermSignalIsNotSignaled() + { + parent::testProcessWithoutTermSignalIsNotSignaled(); + } + + public function testStopWithTimeoutIsActuallyWorking() + { + $this->markTestSkipped('Stopping with signal is not supported in sigchild environment'); + } + + public function testProcessThrowsExceptionWhenExternallySignaled() + { + $this->markTestSkipped('Retrieving Pid is not supported in sigchild environment'); + } + + public function testExitCodeIsAvailableAfterSignal() + { + $this->markTestSkipped('Signal is not supported in sigchild environment'); + } + + public function testRunProcessWithTimeout() + { + $this->markTestSkipped('Signal (required for timeout) is not supported in sigchild environment'); + } + + public function provideStartMethods() + { + return array( + array('start', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'), + array('run', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'), + array('mustRun', 'Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'), + ); + } + + /** + * {@inheritdoc} + */ + protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array()) + { + $process = new ProcessInSigchildEnvironment($commandline, $cwd, $env, $input, $timeout, $options); + $process->setEnhanceSigchildCompatibility(false); + + return $process; + } +} diff --git a/vendor/symfony/process/Tests/SigchildEnabledProcessTest.php b/vendor/symfony/process/Tests/SigchildEnabledProcessTest.php new file mode 100644 index 00000000..2668a9b4 --- /dev/null +++ b/vendor/symfony/process/Tests/SigchildEnabledProcessTest.php @@ -0,0 +1,148 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +class SigchildEnabledProcessTest extends AbstractProcessTest +{ + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessIsSignaledIfStopped() + { + parent::testProcessIsSignaledIfStopped(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessWithTermSignal() + { + parent::testProcessWithTermSignal(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessIsNotSignaled() + { + parent::testProcessIsNotSignaled(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessWithoutTermSignal() + { + parent::testProcessWithoutTermSignal(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved. + */ + public function testGetPid() + { + parent::testGetPid(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved. + */ + public function testGetPidIsNullBeforeStart() + { + parent::testGetPidIsNullBeforeStart(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved. + */ + public function testGetPidIsNullAfterRun() + { + parent::testGetPidIsNullAfterRun(); + } + + public function testExitCodeText() + { + $process = $this->getProcess('qdfsmfkqsdfmqmsd'); + $process->run(); + + $this->assertInternalType('string', $process->getExitCodeText()); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. The process can not be signaled. + */ + public function testSignal() + { + parent::testSignal(); + } + + /** + * @expectedException \Symfony\Component\Process\Exception\RuntimeException + * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved. + */ + public function testProcessWithoutTermSignalIsNotSignaled() + { + parent::testProcessWithoutTermSignalIsNotSignaled(); + } + + public function testProcessThrowsExceptionWhenExternallySignaled() + { + $this->markTestSkipped('Retrieving Pid is not supported in sigchild environment'); + } + + public function testExitCodeIsAvailableAfterSignal() + { + $this->markTestSkipped('Signal is not supported in sigchild environment'); + } + + public function testStartAfterATimeout() + { + if ('\\' === DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Restarting a timed-out process on Windows is not supported in sigchild environment'); + } + parent::testStartAfterATimeout(); + } + + public function testStopWithTimeoutIsActuallyWorking() + { + $this->markTestSkipped('Stopping with signal is not supported in sigchild environment'); + } + + public function testRunProcessWithTimeout() + { + $this->markTestSkipped('Signal (required for timeout) is not supported in sigchild environment'); + } + + public function testCheckTimeoutOnStartedProcess() + { + $this->markTestSkipped('Signal (required for timeout) is not supported in sigchild environment'); + } + + /** + * {@inheritdoc} + */ + protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array()) + { + $process = new ProcessInSigchildEnvironment($commandline, $cwd, $env, $input, $timeout, $options); + $process->setEnhanceSigchildCompatibility(true); + + return $process; + } +} diff --git a/vendor/symfony/process/Tests/SignalListener.php b/vendor/symfony/process/Tests/SignalListener.php new file mode 100644 index 00000000..bd4d138b --- /dev/null +++ b/vendor/symfony/process/Tests/SignalListener.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Process\Tests; + +use Symfony\Component\Process\Process; + +class SimpleProcessTest extends AbstractProcessTest +{ + private $enabledSigchild = false; + + protected function setUp() + { + ob_start(); + phpinfo(INFO_GENERAL); + + $this->enabledSigchild = false !== strpos(ob_get_clean(), '--enable-sigchild'); + } + + public function testGetExitCode() + { + $this->skipIfPHPSigchild(); // This test use exitcode that is not available in this case + parent::testGetExitCode(); + } + + public function testExitCodeCommandFailed() + { + $this->skipIfPHPSigchild(); // This test use exitcode that is not available in this case + parent::testExitCodeCommandFailed(); + } + + public function testProcessIsSignaledIfStopped() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved'); + parent::testProcessIsSignaledIfStopped(); + } + + public function testProcessWithTermSignal() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved'); + parent::testProcessWithTermSignal(); + } + + public function testProcessIsNotSignaled() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved'); + parent::testProcessIsNotSignaled(); + } + + public function testProcessWithoutTermSignal() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved'); + parent::testProcessWithoutTermSignal(); + } + + public function testExitCodeText() + { + $this->skipIfPHPSigchild(); // This test use exitcode that is not available in this case + parent::testExitCodeText(); + } + + public function testIsSuccessful() + { + $this->skipIfPHPSigchild(); // This test use PID that is not available in this case + parent::testIsSuccessful(); + } + + public function testIsNotSuccessful() + { + $this->skipIfPHPSigchild(); // This test use PID that is not available in this case + parent::testIsNotSuccessful(); + } + + public function testGetPid() + { + $this->skipIfPHPSigchild(); // This test use PID that is not available in this case + parent::testGetPid(); + } + + public function testGetPidIsNullBeforeStart() + { + $this->skipIfPHPSigchild(); // This test use PID that is not available in this case + parent::testGetPidIsNullBeforeStart(); + } + + public function testGetPidIsNullAfterRun() + { + $this->skipIfPHPSigchild(); // This test use PID that is not available in this case + parent::testGetPidIsNullAfterRun(); + } + + public function testSignal() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + parent::testSignal(); + } + + public function testProcessWithoutTermSignalIsNotSignaled() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved'); + parent::testProcessWithoutTermSignalIsNotSignaled(); + } + + public function testProcessThrowsExceptionWhenExternallySignaled() + { + $this->skipIfPHPSigchild(); // This test use PID that is not available in this case + parent::testProcessThrowsExceptionWhenExternallySignaled(); + } + + public function testExitCodeIsAvailableAfterSignal() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + parent::testExitCodeIsAvailableAfterSignal(); + } + + public function testSignalProcessNotRunning() + { + $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Can not send signal on a non running process.'); + parent::testSignalProcessNotRunning(); + } + + public function testSignalWithWrongIntSignal() + { + if ($this->enabledSigchild) { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + } else { + $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Error while sending signal `-4`.'); + } + parent::testSignalWithWrongIntSignal(); + } + + public function testSignalWithWrongNonIntSignal() + { + if ($this->enabledSigchild) { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + } else { + $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'Error while sending signal `Céphalopodes`.'); + } + parent::testSignalWithWrongNonIntSignal(); + } + + public function testStopTerminatesProcessCleanly() + { + try { + $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"'); + $process->run(function () use ($process) { + $process->stop(); + }); + } catch (\RuntimeException $e) { + $this->fail('A call to stop() is not expected to cause wait() to throw a RuntimeException'); + } + } + + public function testKillSignalTerminatesProcessCleanly() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + + try { + $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"'); + $process->run(function () use ($process) { + if ($process->isRunning()) { + $process->signal(defined('SIGKILL') ? SIGKILL : 9); + } + }); + } catch (\RuntimeException $e) { + $this->fail('A call to signal() is not expected to cause wait() to throw a RuntimeException'); + } + } + + public function testTermSignalTerminatesProcessCleanly() + { + $this->expectExceptionIfPHPSigchild('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + + try { + $process = $this->getProcess(self::$phpBin.' -r "echo \'foo\'; sleep(1); echo \'bar\';"'); + $process->run(function () use ($process) { + if ($process->isRunning()) { + $process->signal(defined('SIGTERM') ? SIGTERM : 15); + } + }); + } catch (\RuntimeException $e) { + $this->fail('A call to signal() is not expected to cause wait() to throw a RuntimeException'); + } + } + + public function testStopWithTimeoutIsActuallyWorking() + { + $this->skipIfPHPSigchild(); + + parent::testStopWithTimeoutIsActuallyWorking(); + } + + /** + * {@inheritdoc} + */ + protected function getProcess($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array()) + { + return new Process($commandline, $cwd, $env, $input, $timeout, $options); + } + + private function skipIfPHPSigchild() + { + if ($this->enabledSigchild) { + $this->markTestSkipped('Your PHP has been compiled with --enable-sigchild, this test can not be executed'); + } + } + + private function expectExceptionIfPHPSigchild($classname, $message) + { + if ($this->enabledSigchild) { + $this->setExpectedException($classname, $message); + } + } +} diff --git a/vendor/symfony/process/composer.json b/vendor/symfony/process/composer.json new file mode 100644 index 00000000..d0cae4d8 --- /dev/null +++ b/vendor/symfony/process/composer.json @@ -0,0 +1,33 @@ +{ + "name": "symfony/process", + "type": "library", + "description": "Symfony Process Component", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Process\\": "" } + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + } +} diff --git a/vendor/symfony/process/phpunit.xml.dist b/vendor/symfony/process/phpunit.xml.dist new file mode 100644 index 00000000..b5d605c2 --- /dev/null +++ b/vendor/symfony/process/phpunit.xml.dist @@ -0,0 +1,27 @@ + + + + + + + + + + ./Tests/ + + + + + + ./ + + ./Tests + + + + diff --git a/vendor/wikimedia/assert/COPYING b/vendor/wikimedia/assert/COPYING new file mode 100644 index 00000000..56f0386f --- /dev/null +++ b/vendor/wikimedia/assert/COPYING @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Wikimedia Deutschland e.V. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/wikimedia/assert/README.md b/vendor/wikimedia/assert/README.md new file mode 100644 index 00000000..6fa9b4d2 --- /dev/null +++ b/vendor/wikimedia/assert/README.md @@ -0,0 +1,43 @@ +This package provides an alternative to PHP's `assert()` that allows for an simple and reliable way +to check preconditions and postconditions in PHP code. It was proposed [as a MediaWiki RFC](https://www.mediawiki.org/wiki/Requests_for_comment/Assert), +but is completely generic and can be used by any PHP program or library. It is published under the +MIT license, see the COPYING file. + +Usage +------- + +The Assert class provides several static methods for checking various kinds of assertions. +The most common kind is to check the type of a parameter, typically in a constructor or a +setter method: + + function setFoo( $foo ) { + Assert::parameterType( 'integer', $foo, 'foo' ); + Assert::parameter( $foo > 0, 'foo', 'must be greater than 0' ); + } + + function __construct( $bar, array $bazz ) { + Assert::parameterType( 'Me\MyApp\SomeClass', $bar ); + Assert::parameterElementType( 'int', $bazz ); + } + +Checking parameters, or other assertions such as pre- or postconditions, is not recommended for +performance critical regions of the code, since evaluating expressions and calling the assertion +functions costs time. + + +Rationale +----------- +The background of this proposal is the recurring discussions about whether PHP's `assert()` +can and should be used in MediaWiki code. Two relevant threads: +* [Using PHP's assert in MediaWiki code](http://www.gossamer-threads.com/lists/wiki/wikitech/275737) +* [Is assert() allowed?](http://www.gossamer-threads.com/lists/wiki/wikitech/378676) + +The outcome appears to be that +* assertions are generally a good way to improve code quality +* but PHP's ''assert()'' is broken by design + +Following a [suggestion by Tim Starling](http://www.gossamer-threads.com/lists/wiki/wikitech/378815#378815), +this package provides an alternative to PHP's built in `assert()`. + +[![Build Status](https://secure.travis-ci.org/wmde/Assert.svg)](https://travis-ci.org/wmde/Assert) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/wmde/Assert/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/wmde/Assert/?branch=master) diff --git a/vendor/wikimedia/assert/composer.json b/vendor/wikimedia/assert/composer.json new file mode 100644 index 00000000..121f7162 --- /dev/null +++ b/vendor/wikimedia/assert/composer.json @@ -0,0 +1,24 @@ +{ + "name": "wikimedia/assert", + "description": "Provides runtime assertions", + "keywords": ["PHP", "QA", "assert", "assertions", "precondition", "postcondition"], + "homepage": "https://github.com/wmde/Assert", + "license": "MIT", + "authors": [ + { + "name": "Daniel Kinzler" + } + ], + + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + + "autoload": { + "psr-4": { + "Wikimedia\\Assert\\": "src/", + "Wikimedia\\Assert\\Test\\": "tests/phpunit/" + } + } + +} diff --git a/vendor/wikimedia/assert/phpunit.xml.dist b/vendor/wikimedia/assert/phpunit.xml.dist new file mode 100644 index 00000000..49a2f87d --- /dev/null +++ b/vendor/wikimedia/assert/phpunit.xml.dist @@ -0,0 +1,27 @@ + + + + + + ./tests/phpunit + + + + + src + + + + \ No newline at end of file diff --git a/vendor/wikimedia/assert/src/Assert.php b/vendor/wikimedia/assert/src/Assert.php new file mode 100644 index 00000000..53b438a5 --- /dev/null +++ b/vendor/wikimedia/assert/src/Assert.php @@ -0,0 +1,204 @@ +parameterName = $parameterName; + } + + /** + * @return string + */ + public function getParameterName() { + return $this->parameterName; + } + +} diff --git a/vendor/wikimedia/assert/src/ParameterElementTypeException.php b/vendor/wikimedia/assert/src/ParameterElementTypeException.php new file mode 100644 index 00000000..eaaa663f --- /dev/null +++ b/vendor/wikimedia/assert/src/ParameterElementTypeException.php @@ -0,0 +1,43 @@ +elementType = $elementType; + } + + /** + * @return string + */ + public function getElementType() { + return $this->elementType; + } + +} diff --git a/vendor/wikimedia/assert/src/ParameterTypeException.php b/vendor/wikimedia/assert/src/ParameterTypeException.php new file mode 100644 index 00000000..943f6c08 --- /dev/null +++ b/vendor/wikimedia/assert/src/ParameterTypeException.php @@ -0,0 +1,43 @@ +parameterType = $parameterType; + } + + /** + * @return string + */ + public function getParameterType() { + return $this->parameterType; + } + +} diff --git a/vendor/wikimedia/assert/src/PostconditionException.php b/vendor/wikimedia/assert/src/PostconditionException.php new file mode 100644 index 00000000..a7753ef0 --- /dev/null +++ b/vendor/wikimedia/assert/src/PostconditionException.php @@ -0,0 +1,18 @@ +setExpectedException( 'Wikimedia\Assert\PreconditionException' ); + Assert::precondition( false, 'test' ); + } + + public function testParameter_pass() { + Assert::parameter( true, 'foo', 'test' ); + } + + public function testParameter_fail() { + try { + Assert::parameter( false, 'test', 'testing' ); + } catch ( ParameterAssertionException $ex ) { + $this->assertEquals( 'test', $ex->getParameterName() ); + } + } + + public function validParameterTypeProvider() { + return array( + 'simple' => array( 'string', 'hello' ), + 'class' => array( 'RuntimeException', new RuntimeException() ), + 'multi' => array( 'string|array|Closure', function() {} ), + 'null' => array( 'integer|null', null ), + 'callable' => array( 'null|callable', 'time' ), + ); + } + + /** + * @dataProvider validParameterTypeProvider + */ + public function testParameterType_pass( $type, $value ) { + Assert::parameterType( $type, $value, 'test' ); + } + + public function invalidParameterTypeProvider() { + return array( + 'simple' => array( 'string', 5 ), + 'class' => array( 'RuntimeException', new LogicException() ), + 'multi' => array( 'string|integer|Closure', array() ), + 'null' => array( 'integer|string', null ), + 'callable' => array( 'null|callable', array() ), + ); + } + + /** + * @dataProvider invalidParameterTypeProvider + */ + public function testParameterType_fail( $type, $value ) { + try { + Assert::parameterType( $type, $value, 'test' ); + $this->fail( 'Expected ParameterTypeException' ); + } catch ( ParameterTypeException $ex ) { + $this->assertEquals( $type, $ex->getParameterType() ); + $this->assertEquals( 'test', $ex->getParameterName() ); + } + } + + public function testParameterType_catch() { + try { + Assert::parameterType( 'string', 17, 'test' ); + $this->fail( 'Expected exception' ); + } catch ( AssertionException $ex ) { + // ok + } + } + + public function validParameterElementTypeProvider() { + return array( + 'empty' => array( 'string', array() ), + 'simple' => array( 'string', array( 'hello', 'world' ) ), + 'class' => array( 'RuntimeException', array( new RuntimeException() ) ), + 'multi' => array( 'string|array|Closure', array( array(), function() {} ) ), + 'null' => array( 'integer|null', array( null, 3, null ) ), + ); + } + + /** + * @dataProvider validParameterElementTypeProvider + */ + public function testParameterElementType_pass( $type, $value ) { + Assert::parameterElementType( $type, $value, 'test' ); + } + + public function invalidParameterElementTypeProvider() { + return array( + 'simple' => array( 'string', array( 'hello', 5 ) ), + 'class' => array( 'RuntimeException', array( new LogicException() ) ), + 'multi' => array( 'string|array|Closure', array( array(), function() {}, 5 ) ), + 'null' => array( 'integer|string', array( null, 3, null ) ), + ); + } + + /** + * @dataProvider invalidParameterElementTypeProvider + */ + public function testParameterElementType_fail( $type, $value ) { + try { + Assert::parameterElementType( $type, $value, 'test' ); + $this->fail( 'Expected ParameterElementTypeException' ); + } catch ( ParameterElementTypeException $ex ) { + $this->assertEquals( $type, $ex->getElementType() ); + $this->assertEquals( 'test', $ex->getParameterName() ); + } + } + + public function testParameterElementType_bad() { + $this->setExpectedException( 'Wikimedia\Assert\ParameterTypeException' ); + Assert::parameterElementType( 'string', 'foo', 'test' ); + } + + public function testInvariant_pass() { + Assert::invariant( true, 'test' ); + } + + public function testInvariant_fail() { + $this->setExpectedException( 'Wikimedia\Assert\InvariantException' ); + Assert::invariant( false, 'test' ); + } + + public function testPostcondition_pass() { + Assert::postcondition( true, 'test' ); + } + + public function testPostcondition_fail() { + $this->setExpectedException( 'Wikimedia\Assert\PostconditionException' ); + Assert::postcondition( false, 'test' ); + } + +} diff --git a/vendor/wikimedia/avro/LICENSE.txt b/vendor/wikimedia/avro/LICENSE.txt new file mode 100644 index 00000000..6d3f211b --- /dev/null +++ b/vendor/wikimedia/avro/LICENSE.txt @@ -0,0 +1,308 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +---------------------------------------------------------------------- +License for the Jansson C JSON parser used in the C implementation: + +Copyright (c) 2009 Petri Lehtinen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +---------------------------------------------------------------------- +License for the Json.NET used in the C# implementation: + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------------------------------------- +License for msinttypes used in the C implementation: +Source from: +http://code.google.com/p/msinttypes/downloads/detail?name=msinttypes-r26.zip + +Copyright (c) 2006-2008 Alexander Chemeris + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +License for Dirent API for Microsoft Visual Studio used in the C implementation: +Source from: +http://www.softagalleria.net/download/dirent/dirent-1.11.zip + +Copyright (C) 2006 Toni Ronkko + +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 TONI RONKKO 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. + +---------------------------------------------------------------------- diff --git a/vendor/wikimedia/avro/NOTICE.txt b/vendor/wikimedia/avro/NOTICE.txt new file mode 100644 index 00000000..e601a8e9 --- /dev/null +++ b/vendor/wikimedia/avro/NOTICE.txt @@ -0,0 +1,9 @@ +Apache Avro +Copyright 2010 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +C JSON parsing provided by Jansson and +written by Petri Lehtinen. The original software is +available from http://www.digip.org/jansson/. diff --git a/vendor/wikimedia/avro/README.md b/vendor/wikimedia/avro/README.md new file mode 100644 index 00000000..5604baf2 --- /dev/null +++ b/vendor/wikimedia/avro/README.md @@ -0,0 +1,23 @@ +What the Avro PHP library is +============================ + +A library for using [Avro](http://avro.apache.org/) with PHP. + +Requirements +------------ + * PHP 5 + * On 32-bit platforms, the [GMP PHP extension](http://php.net/gmp) + * For testing, [PHPUnit](http://www.phpunit.de/) + +Both GMP and PHPUnit are often available via package management +systems as `php5-gmp` and `phpunit`, respectively. + +Getting started +--------------- +``` +$ composer require wikimedia/avro +``` + +History +------- +Extracted from https://github.com/apache/avro using `git subtree`. diff --git a/vendor/wikimedia/avro/lib/avro.php b/vendor/wikimedia/avro/lib/avro.php new file mode 100644 index 00000000..4805fb7a --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro.php @@ -0,0 +1,195 @@ +io = $io; + $this->decoder = new AvroIOBinaryDecoder($this->io); + $this->datum_reader = $datum_reader; + $this->read_header(); + + $codec = AvroUtil::array_value($this->metadata, + AvroDataIO::METADATA_CODEC_ATTR); + if ($codec && !AvroDataIO::is_valid_codec($codec)) + throw new AvroDataIOException(sprintf('Uknown codec: %s', $codec)); + + $this->block_count = 0; + // FIXME: Seems unsanitary to set writers_schema here. + // Can't constructor take it as an argument? + $this->datum_reader->set_writers_schema( + AvroSchema::parse($this->metadata[AvroDataIO::METADATA_SCHEMA_ATTR])); + } + + /** + * Reads header of object container + * @throws AvroDataIOException if the file is not an Avro data file. + */ + private function read_header() + { + $this->seek(0, AvroIO::SEEK_SET); + + $magic = $this->read(AvroDataIO::magic_size()); + + if (strlen($magic) < AvroDataIO::magic_size()) + throw new AvroDataIOException( + 'Not an Avro data file: shorter than the Avro magic block'); + + if (AvroDataIO::magic() != $magic) + throw new AvroDataIOException( + sprintf('Not an Avro data file: %s does not match %s', + $magic, AvroDataIO::magic())); + + $this->metadata = $this->datum_reader->read_data(AvroDataIO::metadata_schema(), + AvroDataIO::metadata_schema(), + $this->decoder); + $this->sync_marker = $this->read(AvroDataIO::SYNC_SIZE); + } + + /** + * @internal Would be nice to implement data() as an iterator, I think + * @returns array of data from object container. + */ + public function data() + { + $data = array(); + while (true) + { + if (0 == $this->block_count) + { + if ($this->is_eof()) + break; + + if ($this->skip_sync()) + if ($this->is_eof()) + break; + + $this->read_block_header(); + } + $data []= $this->datum_reader->read($this->decoder); + $this->block_count -= 1; + } + return $data; + } + + /** + * Closes this writer (and its AvroIO object.) + * @uses AvroIO::close() + */ + public function close() { return $this->io->close(); } + + /** + * @uses AvroIO::seek() + */ + private function seek($offset, $whence) + { + return $this->io->seek($offset, $whence); + } + + /** + * @uses AvroIO::read() + */ + private function read($len) { return $this->io->read($len); } + + /** + * @uses AvroIO::is_eof() + */ + private function is_eof() { return $this->io->is_eof(); } + + private function skip_sync() + { + $proposed_sync_marker = $this->read(AvroDataIO::SYNC_SIZE); + if ($proposed_sync_marker != $this->sync_marker) + { + $this->seek(-AvroDataIO::SYNC_SIZE, AvroIO::SEEK_CUR); + return false; + } + return true; + } + + /** + * Reads the block header (which includes the count of items in the block + * and the length in bytes of the block) + * @returns int length in bytes of the block. + */ + private function read_block_header() + { + $this->block_count = $this->decoder->read_long(); + return $this->decoder->read_long(); + } + +} + +/** + * Writes Avro data to an AvroIO source using an AvroSchema + * @package Avro + */ +class AvroDataIOWriter +{ + /** + * @returns string a new, unique sync marker. + */ + private static function generate_sync_marker() + { + // From http://php.net/manual/en/function.mt-rand.php comments + return pack('S8', + mt_rand(0, 0xffff), mt_rand(0, 0xffff), + mt_rand(0, 0xffff), + mt_rand(0, 0xffff) | 0x4000, + mt_rand(0, 0xffff) | 0x8000, + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)); + } + + /** + * @var AvroIO object container where data is written + */ + private $io; + + /** + * @var AvroIOBinaryEncoder encoder for object container + */ + private $encoder; + + /** + * @var AvroDatumWriter + */ + private $datum_writer; + + /** + * @var AvroStringIO buffer for writing + */ + private $buffer; + + /** + * @var AvroIOBinaryEncoder encoder for buffer + */ + private $buffer_encoder; // AvroIOBinaryEncoder + + /** + * @var int count of items written to block + */ + private $block_count; + + /** + * @var array map of object container metadata + */ + private $metadata; + + /** + * @param AvroIO $io + * @param AvroIODatumWriter $datum_writer + * @param AvroSchema $writers_schema + */ + public function __construct($io, $datum_writer, $writers_schema=null) + { + if (!($io instanceof AvroIO)) + throw new AvroDataIOException('io must be instance of AvroIO'); + + $this->io = $io; + $this->encoder = new AvroIOBinaryEncoder($this->io); + $this->datum_writer = $datum_writer; + $this->buffer = new AvroStringIO(); + $this->buffer_encoder = new AvroIOBinaryEncoder($this->buffer); + $this->block_count = 0; + $this->metadata = array(); + + if ($writers_schema) + { + $this->sync_marker = self::generate_sync_marker(); + $this->metadata[AvroDataIO::METADATA_CODEC_ATTR] = AvroDataIO::NULL_CODEC; + $this->metadata[AvroDataIO::METADATA_SCHEMA_ATTR] = strval($writers_schema); + $this->write_header(); + } + else + { + $dfr = new AvroDataIOReader($this->io, new AvroIODatumReader()); + $this->sync_marker = $dfr->sync_marker; + $this->metadata[AvroDataIO::METADATA_CODEC_ATTR] = $dfr->metadata[AvroDataIO::METADATA_CODEC_ATTR]; + + $schema_from_file = $dfr->metadata[AvroDataIO::METADATA_SCHEMA_ATTR]; + $this->metadata[AvroDataIO::METADATA_SCHEMA_ATTR] = $schema_from_file; + $this->datum_writer->writers_schema = AvroSchema::parse($schema_from_file); + $this->seek(0, SEEK_END); + } + } + + /** + * @param mixed $datum + */ + public function append($datum) + { + $this->datum_writer->write($datum, $this->buffer_encoder); + $this->block_count++; + + if ($this->buffer->length() >= AvroDataIO::SYNC_INTERVAL) + $this->write_block(); + } + + /** + * Flushes buffer to AvroIO object container and closes it. + * @return mixed value of $io->close() + * @see AvroIO::close() + */ + public function close() + { + $this->flush(); + return $this->io->close(); + } + + /** + * Flushes biffer to AvroIO object container. + * @returns mixed value of $io->flush() + * @see AvroIO::flush() + */ + private function flush() + { + $this->write_block(); + return $this->io->flush(); + } + + /** + * Writes a block of data to the AvroIO object container. + * @throws AvroDataIOException if the codec provided by the encoder + * is not supported + * @internal Should the codec check happen in the constructor? + * Why wait until we're writing data? + */ + private function write_block() + { + if ($this->block_count > 0) + { + $this->encoder->write_long($this->block_count); + $to_write = strval($this->buffer); + $this->encoder->write_long(strlen($to_write)); + + if (AvroDataIO::is_valid_codec( + $this->metadata[AvroDataIO::METADATA_CODEC_ATTR])) + $this->write($to_write); + else + throw new AvroDataIOException( + sprintf('codec %s is not supported', + $this->metadata[AvroDataIO::METADATA_CODEC_ATTR])); + + $this->write($this->sync_marker); + $this->buffer->truncate(); + $this->block_count = 0; + } + } + + /** + * Writes the header of the AvroIO object container + */ + private function write_header() + { + $this->write(AvroDataIO::magic()); + $this->datum_writer->write_data(AvroDataIO::metadata_schema(), + $this->metadata, $this->encoder); + $this->write($this->sync_marker); + } + + /** + * @param string $bytes + * @uses AvroIO::write() + */ + private function write($bytes) { return $this->io->write($bytes); } + + /** + * @param int $offset + * @param int $whence + * @uses AvroIO::seek() + */ + private function seek($offset, $whence) + { + return $this->io->seek($offset, $whence); + } +} diff --git a/vendor/wikimedia/avro/lib/avro/datum.php b/vendor/wikimedia/avro/lib/avro/datum.php new file mode 100644 index 00000000..ea275faf --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro/datum.php @@ -0,0 +1,984 @@ +writers_schema = $writers_schema; + } + + /** + * @param AvroSchema $writers_schema + * @param $datum + * @param AvroIOBinaryEncoder $encoder + * @returns mixed + * + * @throws AvroIOTypeException if $datum is invalid for $writers_schema + */ + function write_data($writers_schema, $datum, $encoder) + { + if (!AvroSchema::is_valid_datum($writers_schema, $datum)) + throw new AvroIOTypeException($writers_schema, $datum); + + switch ($writers_schema->type()) + { + case AvroSchema::NULL_TYPE: + return $encoder->write_null($datum); + case AvroSchema::BOOLEAN_TYPE: + return $encoder->write_boolean($datum); + case AvroSchema::INT_TYPE: + return $encoder->write_int($datum); + case AvroSchema::LONG_TYPE: + return $encoder->write_long($datum); + case AvroSchema::FLOAT_TYPE: + return $encoder->write_float($datum); + case AvroSchema::DOUBLE_TYPE: + return $encoder->write_double($datum); + case AvroSchema::STRING_TYPE: + return $encoder->write_string($datum); + case AvroSchema::BYTES_TYPE: + return $encoder->write_bytes($datum); + case AvroSchema::ARRAY_SCHEMA: + return $this->write_array($writers_schema, $datum, $encoder); + case AvroSchema::MAP_SCHEMA: + return $this->write_map($writers_schema, $datum, $encoder); + case AvroSchema::FIXED_SCHEMA: + return $this->write_fixed($writers_schema, $datum, $encoder); + case AvroSchema::ENUM_SCHEMA: + return $this->write_enum($writers_schema, $datum, $encoder); + case AvroSchema::RECORD_SCHEMA: + case AvroSchema::ERROR_SCHEMA: + case AvroSchema::REQUEST_SCHEMA: + return $this->write_record($writers_schema, $datum, $encoder); + case AvroSchema::UNION_SCHEMA: + return $this->write_union($writers_schema, $datum, $encoder); + default: + throw new AvroException(sprintf('Uknown type: %s', + $writers_schema->type)); + } + } + + /** + * @param $datum + * @param AvroIOBinaryEncoder $encoder + */ + function write($datum, $encoder) + { + $this->write_data($this->writers_schema, $datum, $encoder); + } + + /**#@+ + * @param AvroSchema $writers_schema + * @param null|boolean|int|float|string|array $datum item to be written + * @param AvroIOBinaryEncoder $encoder + */ + private function write_array($writers_schema, $datum, $encoder) + { + $datum_count = count($datum); + if (0 < $datum_count) + { + $encoder->write_long($datum_count); + $items = $writers_schema->items(); + foreach ($datum as $item) + $this->write_data($items, $item, $encoder); + } + return $encoder->write_long(0); + } + + private function write_map($writers_schema, $datum, $encoder) + { + $datum_count = count($datum); + if ($datum_count > 0) + { + $encoder->write_long($datum_count); + foreach ($datum as $k => $v) + { + $encoder->write_string($k); + $this->write_data($writers_schema->values(), $v, $encoder); + } + } + $encoder->write_long(0); + } + + private function write_union($writers_schema, $datum, $encoder) + { + $datum_schema_index = -1; + $datum_schema = null; + foreach ($writers_schema->schemas() as $index => $schema) + if (AvroSchema::is_valid_datum($schema, $datum)) + { + $datum_schema_index = $index; + $datum_schema = $schema; + break; + } + + if (is_null($datum_schema)) + throw new AvroIOTypeException($writers_schema, $datum); + + $encoder->write_long($datum_schema_index); + $this->write_data($datum_schema, $datum, $encoder); + } + + private function write_enum($writers_schema, $datum, $encoder) + { + $datum_index = $writers_schema->symbol_index($datum); + return $encoder->write_int($datum_index); + } + + private function write_fixed($writers_schema, $datum, $encoder) + { + /** + * NOTE Unused $writers_schema parameter included for consistency + * with other write_* methods. + */ + return $encoder->write($datum); + } + + private function write_record($writers_schema, $datum, $encoder) + { + foreach ($writers_schema->fields() as $field) + $this->write_data($field->type(), $datum[$field->name()], $encoder); + } + + /**#@-*/ +} + +/** + * Encodes and writes Avro data to an AvroIO object using + * Avro binary encoding. + * + * @package Avro + */ +class AvroIOBinaryEncoder +{ + /** + * Performs encoding of the given float value to a binary string + * + * XXX: This is not endian-aware! The {@link Avro::check_platform()} + * called in {@link AvroIOBinaryEncoder::__construct()} should ensure the + * library is only used on little-endian platforms, which ensure the little-endian + * encoding required by the Avro spec. + * + * @param float $float + * @returns string bytes + * @see Avro::check_platform() + */ + static function float_to_int_bits($float) + { + return pack('f', (float) $float); + } + + /** + * Performs encoding of the given double value to a binary string + * + * XXX: This is not endian-aware! See comments in + * {@link AvroIOBinaryEncoder::float_to_int_bits()} for details. + * + * @param double $double + * @returns string bytes + */ + static function double_to_long_bits($double) + { + return pack('d', (double) $double); + } + + /** + * @param int|string $n + * @returns string long $n encoded as bytes + * @internal This relies on 64-bit PHP. + */ + static public function encode_long($n) + { + $n = (int) $n; + $n = ($n << 1) ^ ($n >> 63); + $str = ''; + while (0 != ($n & ~0x7F)) + { + $str .= chr(($n & 0x7F) | 0x80); + $n >>= 7; + } + $str .= chr($n); + return $str; + } + + /** + * @var AvroIO + */ + private $io; + + /** + * @param AvroIO $io object to which data is to be written. + * + */ + function __construct($io) + { + Avro::check_platform(); + $this->io = $io; + } + + /** + * @param null $datum actual value is ignored + */ + function write_null($datum) { return null; } + + /** + * @param boolean $datum + */ + function write_boolean($datum) + { + $byte = $datum ? chr(1) : chr(0); + $this->write($byte); + } + + /** + * @param int $datum + */ + function write_int($datum) { $this->write_long($datum); } + + /** + * @param int $n + */ + function write_long($n) + { + if (Avro::uses_gmp()) + $this->write(AvroGMP::encode_long($n)); + else + $this->write(self::encode_long($n)); + } + + /** + * @param float $datum + * @uses self::float_to_int_bits() + */ + public function write_float($datum) + { + $this->write(self::float_to_int_bits($datum)); + } + + /** + * @param float $datum + * @uses self::double_to_long_bits() + */ + public function write_double($datum) + { + $this->write(self::double_to_long_bits($datum)); + } + + /** + * @param string $str + * @uses self::write_bytes() + */ + function write_string($str) { $this->write_bytes($str); } + + /** + * @param string $bytes + */ + function write_bytes($bytes) + { + $this->write_long(strlen($bytes)); + $this->write($bytes); + } + + /** + * @param string $datum + */ + function write($datum) { $this->io->write($datum); } +} + +/** + * Handles schema-specifc reading of data from the decoder. + * + * Also handles schema resolution between the reader and writer + * schemas (if a writer's schema is provided). + * + * @package Avro + */ +class AvroIODatumReader +{ + /** + * + * @param AvroSchema $writers_schema + * @param AvroSchema $readers_schema + * @returns boolean true if the schemas are consistent with + * each other and false otherwise. + */ + static function schemas_match($writers_schema, $readers_schema) + { + $writers_schema_type = $writers_schema->type; + $readers_schema_type = $readers_schema->type; + + if (AvroSchema::UNION_SCHEMA == $writers_schema_type + || AvroSchema::UNION_SCHEMA == $readers_schema_type) + return true; + + if ($writers_schema_type == $readers_schema_type) + { + if (AvroSchema::is_primitive_type($writers_schema_type)) + return true; + + switch ($readers_schema_type) + { + case AvroSchema::MAP_SCHEMA: + return self::attributes_match($writers_schema->values(), + $readers_schema->values(), + array(AvroSchema::TYPE_ATTR)); + case AvroSchema::ARRAY_SCHEMA: + return self::attributes_match($writers_schema->items(), + $readers_schema->items(), + array(AvroSchema::TYPE_ATTR)); + case AvroSchema::ENUM_SCHEMA: + return self::attributes_match($writers_schema, $readers_schema, + array(AvroSchema::FULLNAME_ATTR)); + case AvroSchema::FIXED_SCHEMA: + return self::attributes_match($writers_schema, $readers_schema, + array(AvroSchema::FULLNAME_ATTR, + AvroSchema::SIZE_ATTR)); + case AvroSchema::RECORD_SCHEMA: + case AvroSchema::ERROR_SCHEMA: + return self::attributes_match($writers_schema, $readers_schema, + array(AvroSchema::FULLNAME_ATTR)); + case AvroSchema::REQUEST_SCHEMA: + // XXX: This seems wrong + return true; + // XXX: no default + } + + if (AvroSchema::INT_TYPE == $writers_schema_type + && in_array($readers_schema_type, array(AvroSchema::LONG_TYPE, + AvroSchema::FLOAT_TYPE, + AvroSchema::DOUBLE_TYPE))) + return true; + + if (AvroSchema::LONG_TYPE == $writers_schema_type + && in_array($readers_schema_type, array(AvroSchema::FLOAT_TYPE, + AvroSchema::DOUBLE_TYPE))) + return true; + + if (AvroSchema::FLOAT_TYPE == $writers_schema_type + && AvroSchema::DOUBLE_TYPE == $readers_schema_type) + return true; + + return false; + } + + } + + /** + * Checks equivalence of the given attributes of the two given schemas. + * + * @param AvroSchema $schema_one + * @param AvroSchema $schema_two + * @param string[] $attribute_names array of string attribute names to compare + * + * @returns boolean true if the attributes match and false otherwise. + */ + static function attributes_match($schema_one, $schema_two, $attribute_names) + { + foreach ($attribute_names as $attribute_name) + if ($schema_one->attribute($attribute_name) + != $schema_two->attribute($attribute_name)) + return false; + return true; + } + + /** + * @var AvroSchema + */ + private $writers_schema; + + /** + * @var AvroSchema + */ + private $readers_schema; + + /** + * @param AvroSchema $writers_schema + * @param AvroSchema $readers_schema + */ + function __construct($writers_schema=null, $readers_schema=null) + { + $this->writers_schema = $writers_schema; + $this->readers_schema = $readers_schema; + } + + /** + * @param AvroSchema $readers_schema + */ + public function set_writers_schema($readers_schema) + { + $this->writers_schema = $readers_schema; + } + + /** + * @param AvroIOBinaryDecoder $decoder + * @returns string + */ + public function read($decoder) + { + if (is_null($this->readers_schema)) + $this->readers_schema = $this->writers_schema; + return $this->read_data($this->writers_schema, $this->readers_schema, + $decoder); + } + + /**#@+ + * @param AvroSchema $writers_schema + * @param AvroSchema $readers_schema + * @param AvroIOBinaryDecoder $decoder + */ + /** + * @returns mixed + */ + public function read_data($writers_schema, $readers_schema, $decoder) + { + if (!self::schemas_match($writers_schema, $readers_schema)) + throw new AvroIOSchemaMatchException($writers_schema, $readers_schema); + + // Schema resolution: reader's schema is a union, writer's schema is not + if (AvroSchema::UNION_SCHEMA == $readers_schema->type() + && AvroSchema::UNION_SCHEMA != $writers_schema->type()) + { + foreach ($readers_schema->schemas() as $schema) + if (self::schemas_match($writers_schema, $schema)) + return $this->read_data($writers_schema, $schema, $decoder); + throw new AvroIOSchemaMatchException($writers_schema, $readers_schema); + } + + switch ($writers_schema->type()) + { + case AvroSchema::NULL_TYPE: + return $decoder->read_null(); + case AvroSchema::BOOLEAN_TYPE: + return $decoder->read_boolean(); + case AvroSchema::INT_TYPE: + return $decoder->read_int(); + case AvroSchema::LONG_TYPE: + return $decoder->read_long(); + case AvroSchema::FLOAT_TYPE: + return $decoder->read_float(); + case AvroSchema::DOUBLE_TYPE: + return $decoder->read_double(); + case AvroSchema::STRING_TYPE: + return $decoder->read_string(); + case AvroSchema::BYTES_TYPE: + return $decoder->read_bytes(); + case AvroSchema::ARRAY_SCHEMA: + return $this->read_array($writers_schema, $readers_schema, $decoder); + case AvroSchema::MAP_SCHEMA: + return $this->read_map($writers_schema, $readers_schema, $decoder); + case AvroSchema::UNION_SCHEMA: + return $this->read_union($writers_schema, $readers_schema, $decoder); + case AvroSchema::ENUM_SCHEMA: + return $this->read_enum($writers_schema, $readers_schema, $decoder); + case AvroSchema::FIXED_SCHEMA: + return $this->read_fixed($writers_schema, $readers_schema, $decoder); + case AvroSchema::RECORD_SCHEMA: + case AvroSchema::ERROR_SCHEMA: + case AvroSchema::REQUEST_SCHEMA: + return $this->read_record($writers_schema, $readers_schema, $decoder); + default: + throw new AvroException(sprintf("Cannot read unknown schema type: %s", + $writers_schema->type())); + } + } + + /** + * @returns array + */ + public function read_array($writers_schema, $readers_schema, $decoder) + { + $items = array(); + $block_count = $decoder->read_long(); + while (0 != $block_count) + { + if ($block_count < 0) + { + $block_count = -$block_count; + $block_size = $decoder->read_long(); // Read (and ignore) block size + } + for ($i = 0; $i < $block_count; $i++) + $items []= $this->read_data($writers_schema->items(), + $readers_schema->items(), + $decoder); + $block_count = $decoder->read_long(); + } + return $items; + } + + /** + * @returns array + */ + public function read_map($writers_schema, $readers_schema, $decoder) + { + $items = array(); + $pair_count = $decoder->read_long(); + while (0 != $pair_count) + { + if ($pair_count < 0) + { + $pair_count = -$pair_count; + // Note: we're not doing anything with block_size other than skipping it + $block_size = $decoder->read_long(); + } + + for ($i = 0; $i < $pair_count; $i++) + { + $key = $decoder->read_string(); + $items[$key] = $this->read_data($writers_schema->values(), + $readers_schema->values(), + $decoder); + } + $pair_count = $decoder->read_long(); + } + return $items; + } + + /** + * @returns mixed + */ + public function read_union($writers_schema, $readers_schema, $decoder) + { + $schema_index = $decoder->read_long(); + $selected_writers_schema = $writers_schema->schema_by_index($schema_index); + return $this->read_data($selected_writers_schema, $readers_schema, $decoder); + } + + /** + * @returns string + */ + public function read_enum($writers_schema, $readers_schema, $decoder) + { + $symbol_index = $decoder->read_int(); + $symbol = $writers_schema->symbol_by_index($symbol_index); + if (!$readers_schema->has_symbol($symbol)) + null; // FIXME: unset wrt schema resolution + return $symbol; + } + + /** + * @returns string + */ + public function read_fixed($writers_schema, $readers_schema, $decoder) + { + return $decoder->read($writers_schema->size()); + } + + /** + * @returns array + */ + public function read_record($writers_schema, $readers_schema, $decoder) + { + $readers_fields = $readers_schema->fields_hash(); + $record = array(); + foreach ($writers_schema->fields() as $writers_field) + { + $type = $writers_field->type(); + if (isset($readers_fields[$writers_field->name()])) + $record[$writers_field->name()] + = $this->read_data($type, + $readers_fields[$writers_field->name()]->type(), + $decoder); + else + $this->skip_data($type, $decoder); + } + // Fill in default values + if (count($readers_fields) > count($record)) + { + $writers_fields = $writers_schema->fields_hash(); + foreach ($readers_fields as $field_name => $field) + { + if (!isset($writers_fields[$field_name])) + { + if ($field->has_default_value()) + $record[$field->name()] + = $this->read_default_value($field->type(), + $field->default_value()); + else + null; // FIXME: unset + } + } + } + + return $record; + } + /**#@-*/ + + /** + * @param AvroSchema $field_schema + * @param null|boolean|int|float|string|array $default_value + * @returns null|boolean|int|float|string|array + * + * @throws AvroException if $field_schema type is unknown. + */ + public function read_default_value($field_schema, $default_value) + { + switch($field_schema->type()) + { + case AvroSchema::NULL_TYPE: + return null; + case AvroSchema::BOOLEAN_TYPE: + return $default_value; + case AvroSchema::INT_TYPE: + case AvroSchema::LONG_TYPE: + return (int) $default_value; + case AvroSchema::FLOAT_TYPE: + case AvroSchema::DOUBLE_TYPE: + return (float) $default_value; + case AvroSchema::STRING_TYPE: + case AvroSchema::BYTES_TYPE: + return $default_value; + case AvroSchema::ARRAY_SCHEMA: + $array = array(); + foreach ($default_value as $json_val) + { + $val = $this->read_default_value($field_schema->items(), $json_val); + $array []= $val; + } + return $array; + case AvroSchema::MAP_SCHEMA: + $map = array(); + foreach ($default_value as $key => $json_val) + $map[$key] = $this->read_default_value($field_schema->values(), + $json_val); + return $map; + case AvroSchema::UNION_SCHEMA: + return $this->read_default_value($field_schema->schema_by_index(0), + $default_value); + case AvroSchema::ENUM_SCHEMA: + case AvroSchema::FIXED_SCHEMA: + return $default_value; + case AvroSchema::RECORD_SCHEMA: + $record = array(); + foreach ($field_schema->fields() as $field) + { + $field_name = $field->name(); + if (!$json_val = $default_value[$field_name]) + $json_val = $field->default_value(); + + $record[$field_name] = $this->read_default_value($field->type(), + $json_val); + } + return $record; + default: + throw new AvroException(sprintf('Unknown type: %s', $field_schema->type())); + } + } + + /** + * @param AvroSchema $writers_schema + * @param AvroIOBinaryDecoder $decoder + */ + private function skip_data($writers_schema, $decoder) + { + switch ($writers_schema->type()) + { + case AvroSchema::NULL_TYPE: + return $decoder->skip_null(); + case AvroSchema::BOOLEAN_TYPE: + return $decoder->skip_boolean(); + case AvroSchema::INT_TYPE: + return $decoder->skip_int(); + case AvroSchema::LONG_TYPE: + return $decoder->skip_long(); + case AvroSchema::FLOAT_TYPE: + return $decoder->skip_float(); + case AvroSchema::DOUBLE_TYPE: + return $decoder->skip_double(); + case AvroSchema::STRING_TYPE: + return $decoder->skip_string(); + case AvroSchema::BYTES_TYPE: + return $decoder->skip_bytes(); + case AvroSchema::ARRAY_SCHEMA: + return $decoder->skip_array($writers_schema, $decoder); + case AvroSchema::MAP_SCHEMA: + return $decoder->skip_map($writers_schema, $decoder); + case AvroSchema::UNION_SCHEMA: + return $decoder->skip_union($writers_schema, $decoder); + case AvroSchema::ENUM_SCHEMA: + return $decoder->skip_enum($writers_schema, $decoder); + case AvroSchema::FIXED_SCHEMA: + return $decoder->skip_fixed($writers_schema, $decoder); + case AvroSchema::RECORD_SCHEMA: + case AvroSchema::ERROR_SCHEMA: + case AvroSchema::REQUEST_SCHEMA: + return $decoder->skip_record($writers_schema, $decoder); + default: + throw new AvroException(sprintf('Uknown schema type: %s', + $writers_schema->type())); + } + } +} + +/** + * Decodes and reads Avro data from an AvroIO object encoded using + * Avro binary encoding. + * + * @package Avro + */ +class AvroIOBinaryDecoder +{ + + /** + * @param int[] array of byte ascii values + * @returns long decoded value + * @internal Requires 64-bit platform + */ + public static function decode_long_from_array($bytes) + { + $b = array_shift($bytes); + $n = $b & 0x7f; + $shift = 7; + while (0 != ($b & 0x80)) + { + $b = array_shift($bytes); + $n |= (($b & 0x7f) << $shift); + $shift += 7; + } + return (($n >> 1) ^ -($n & 1)); + } + + /** + * Performs decoding of the binary string to a float value. + * + * XXX: This is not endian-aware! See comments in + * {@link AvroIOBinaryEncoder::float_to_int_bits()} for details. + * + * @param string $bits + * @returns float + */ + static public function int_bits_to_float($bits) + { + $float = unpack('f', $bits); + return (float) $float[1]; + } + + /** + * Performs decoding of the binary string to a double value. + * + * XXX: This is not endian-aware! See comments in + * {@link AvroIOBinaryEncoder::float_to_int_bits()} for details. + * + * @param string $bits + * @returns float + */ + static public function long_bits_to_double($bits) + { + $double = unpack('d', $bits); + return (double) $double[1]; + } + + /** + * @var AvroIO + */ + private $io; + + /** + * @param AvroIO $io object from which to read. + */ + public function __construct($io) + { + Avro::check_platform(); + $this->io = $io; + } + + /** + * @returns string the next byte from $this->io. + * @throws AvroException if the next byte cannot be read. + */ + private function next_byte() { return $this->read(1); } + + /** + * @returns null + */ + public function read_null() { return null; } + + /** + * @returns boolean + */ + public function read_boolean() + { + return (boolean) (1 == ord($this->next_byte())); + } + + /** + * @returns int + */ + public function read_int() { return (int) $this->read_long(); } + + /** + * @returns long + */ + public function read_long() + { + $byte = ord($this->next_byte()); + $bytes = array($byte); + while (0 != ($byte & 0x80)) + { + $byte = ord($this->next_byte()); + $bytes []= $byte; + } + + if (Avro::uses_gmp()) + return AvroGMP::decode_long_from_array($bytes); + + return self::decode_long_from_array($bytes); + } + + /** + * @returns float + */ + public function read_float() + { + return self::int_bits_to_float($this->read(4)); + } + + /** + * @returns double + */ + public function read_double() + { + return self::long_bits_to_double($this->read(8)); + } + + /** + * A string is encoded as a long followed by that many bytes + * of UTF-8 encoded character data. + * @returns string + */ + public function read_string() { return $this->read_bytes(); } + + /** + * @returns string + */ + public function read_bytes() { return $this->read($this->read_long()); } + + /** + * @param int $len count of bytes to read + * @returns string + */ + public function read($len) { return $this->io->read($len); } + + public function skip_null() { return null; } + + public function skip_boolean() { return $this->skip(1); } + + public function skip_int() { return $this->skip_long(); } + + protected function skip_long() + { + $b = $this->next_byte(); + while (0 != ($b & 0x80)) + $b = $this->next_byte(); + } + + public function skip_float() { return $this->skip(4); } + + public function skip_double() { return $this->skip(8); } + + public function skip_bytes() { return $this->skip($this->read_long()); } + + public function skip_string() { return $this->skip_bytes(); } + + /** + * @param int $len count of bytes to skip + * @uses AvroIO::seek() + */ + public function skip($len) { $this->seek($len, AvroIO::SEEK_CUR); } + + /** + * @returns int position of pointer in AvroIO instance + * @uses AvroIO::tell() + */ + private function tell() { return $this->io->tell(); } + + /** + * @param int $offset + * @param int $whence + * @returns boolean true upon success + * @uses AvroIO::seek() + */ + private function seek($offset, $whence) + { + return $this->io->seek($offset, $whence); + } +} + diff --git a/vendor/wikimedia/avro/lib/avro/debug.php b/vendor/wikimedia/avro/lib/avro/debug.php new file mode 100644 index 00000000..2278f19b --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro/debug.php @@ -0,0 +1,194 @@ += $debug_level); + } + + /** + * @param string $format format string for the given arguments. Passed as is + * to vprintf. + * @param array $args array of arguments to pass to vsprinf. + * @param int $debug_level debug level at which to print this statement + * @returns boolean true + */ + static function debug($format, $args, $debug_level=self::DEBUG1) + { + if (self::is_debug($debug_level)) + vprintf($format . "\n", $args); + return true; + } + + /** + * @param string $str + * @returns string[] array of hex representation of each byte of $str + */ + static function hex_array($str) { return self::bytes_array($str); } + + /** + * @param string $str + * @param string $joiner string used to join + * @returns string hex-represented bytes of each byte of $str + joined by $joiner + */ + static function hex_string($str, $joiner=' ') + { + return join($joiner, self::hex_array($str)); + } + + /** + * @param string $str + * @param string $format format to represent bytes + * @returns string[] array of each byte of $str formatted using $format + */ + static function bytes_array($str, $format='x%02x') + { + $x = array(); + foreach (str_split($str) as $b) + $x []= sprintf($format, ord($b)); + return $x; + } + + /** + * @param string $str + * @returns string[] array of bytes of $str represented in decimal format ('%3d') + */ + static function dec_array($str) { return self::bytes_array($str, '%3d'); } + + /** + * @param string $str + * @param string $joiner string to join bytes of $str + * @returns string of bytes of $str represented in decimal format + * @uses dec_array() + */ + static function dec_string($str, $joiner = ' ') + { + return join($joiner, self::dec_array($str)); + } + + /** + * @param string $str + * @param string $format one of 'ctrl', 'hex', or 'dec' for control, + hexadecimal, or decimal format for bytes. + - ctrl: ASCII control characters represented as text. + For example, the null byte is represented as 'NUL'. + Visible ASCII characters represent themselves, and + others are represented as a decimal ('%03d') + - hex: bytes represented in hexadecimal ('%02X') + - dec: bytes represented in decimal ('%03d') + * @returns string[] array of bytes represented in the given format. + */ + static function ascii_array($str, $format='ctrl') + { + if (!in_array($format, array('ctrl', 'hex', 'dec'))) + throw new AvroException('Unrecognized format specifier'); + + $ctrl_chars = array('NUL', 'SOH', 'STX', 'ETX', 'EOT', 'ENQ', 'ACK', 'BEL', + 'BS', 'HT', 'LF', 'VT', 'FF', 'CR', 'SO', 'SI', + 'DLE', 'DC1', 'DC2', 'DC3', 'DC4', 'NAK', 'SYN', 'ETB', + 'CAN', 'EM', 'SUB', 'ESC', 'FS', 'GS', 'RS', 'US'); + $x = array(); + foreach (str_split($str) as $b) + { + $db = ord($b); + if ($db < 32) + { + switch ($format) + { + case 'ctrl': + $x []= str_pad($ctrl_chars[$db], 3, ' ', STR_PAD_LEFT); + break; + case 'hex': + $x []= sprintf("x%02X", $db); + break; + case 'dec': + $x []= str_pad($db, 3, '0', STR_PAD_LEFT); + break; + } + } + else if ($db < 127) + $x []= " $b"; + else if ($db == 127) + { + switch ($format) + { + case 'ctrl': + $x []= 'DEL'; + break; + case 'hex': + $x []= sprintf("x%02X", $db); + break; + case 'dec': + $x []= str_pad($db, 3, '0', STR_PAD_LEFT); + break; + } + } + else + if ('hex' == $format) + $x []= sprintf("x%02X", $db); + else + $x []= str_pad($db, 3, '0', STR_PAD_LEFT); + } + return $x; + } + + /** + * @param string $str + * @param string $format one of 'ctrl', 'hex', or 'dec'. + * See {@link self::ascii_array()} for more description + * @param string $joiner + * @returns string of bytes joined by $joiner + * @uses ascii_array() + */ + static function ascii_string($str, $format='ctrl', $joiner = ' ') + { + return join($joiner, self::ascii_array($str, $format)); + } +} diff --git a/vendor/wikimedia/avro/lib/avro/gmp.php b/vendor/wikimedia/avro/lib/avro/gmp.php new file mode 100644 index 00000000..3d41d034 --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro/gmp.php @@ -0,0 +1,222 @@ + gmp_sign($g)) + $g = self::gmp_twos_complement($g); + + $m = gmp_mul($g, gmp_pow(self::gmp_2(), $shift)); + $m = gmp_and($m, self::gmp_0xfs()); + if (gmp_testbit($m, 63)) + $m = gmp_neg(gmp_add(gmp_and(gmp_com($m), self::gmp_0xfs()), + self::gmp_1())); + return $m; + } + + /** + * Arithmetic right shift + * @param resource|int|string $g + * @param int $shift number of bits to shift right + * @returns resource $g shifted right $shift bits + */ + static function shift_right($g, $shift) + { + if (0 == $shift) + return $g; + + if (0 <= gmp_sign($g)) + $m = gmp_div($g, gmp_pow(self::gmp_2(), $shift)); + else // negative + { + $g = gmp_and($g, self::gmp_0xfs()); + $m = gmp_div($g, gmp_pow(self::gmp_2(), $shift)); + $m = gmp_and($m, self::gmp_0xfs()); + for ($i = 63; $i >= (63 - $shift); $i--) + gmp_setbit($m, $i); + + $m = gmp_neg(gmp_add(gmp_and(gmp_com($m), self::gmp_0xfs()), + self::gmp_1())); + } + + return $m; + } + + /** + * @param int|str $n integer (or string representation of integer) to encode + * @return string $bytes of the long $n encoded per the Avro spec + */ + static function encode_long($n) + { + $g = gmp_init($n); + $g = gmp_xor(self::shift_left($g, 1), + self::shift_right($g, 63)); + $bytes = ''; + while (0 != gmp_cmp(self::gmp_0(), gmp_and($g, self::gmp_n0x7f()))) + { + $bytes .= chr(gmp_intval(gmp_and($g, self::gmp_0x7f())) | 0x80); + $g = self::shift_right($g, 7); + } + $bytes .= chr(gmp_intval($g)); + return $bytes; + } + + /** + * @param int[] $bytes array of ascii codes of bytes to decode + * @return string represenation of decoded long. + */ + static function decode_long_from_array($bytes) + { + $b = array_shift($bytes); + $g = gmp_init($b & 0x7f); + $shift = 7; + while (0 != ($b & 0x80)) + { + $b = array_shift($bytes); + $g = gmp_or($g, self::shift_left(($b & 0x7f), $shift)); + $shift += 7; + } + $val = gmp_xor(self::shift_right($g, 1), gmp_neg(gmp_and($g, 1))); + return gmp_strval($val); + } + +} diff --git a/vendor/wikimedia/avro/lib/avro/io.php b/vendor/wikimedia/avro/lib/avro/io.php new file mode 100644 index 00000000..239e53d8 --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro/io.php @@ -0,0 +1,494 @@ +not like eof in C or feof in PHP: + * it returns TRUE if the *next* read would be end of file, + * rather than if the *most recent* read read end of file. + * @returns boolean true if at the end of file, and false otherwise + */ + public function is_eof() + { + throw new AvroNotImplementedException('Not implemented'); + } + + /** + * Closes this AvroIO instance. + */ + public function close() + { + throw new AvroNotImplementedException('Not implemented'); + } + +} + +/** + * AvroIO wrapper for string access + * @package Avro + */ +class AvroStringIO extends AvroIO +{ + /** + * @var string + */ + private $string_buffer; + /** + * @var int current position in string + */ + private $current_index; + /** + * @var boolean whether or not the string is closed. + */ + private $is_closed; + + /** + * @param string $str initial value of AvroStringIO buffer. Regardless + * of the initial value, the pointer is set to the + * beginning of the buffer. + * @throws AvroIOException if a non-string value is passed as $str + */ + public function __construct($str = '') + { + $this->is_closed = false; + $this->string_buffer = ''; + $this->current_index = 0; + + if (is_string($str)) + $this->string_buffer .= $str; + else + throw new AvroIOException( + sprintf('constructor argument must be a string: %s', gettype($str))); + } + + /** + * Append bytes to this buffer. + * (Nothing more is needed to support Avro.) + * @param str $arg bytes to write + * @returns int count of bytes written. + * @throws AvroIOException if $args is not a string value. + */ + public function write($arg) + { + $this->check_closed(); + if (is_string($arg)) + return $this->append_str($arg); + throw new AvroIOException( + sprintf('write argument must be a string: (%s) %s', + gettype($arg), var_export($arg, true))); + } + + /** + * @returns string bytes read from buffer + * @todo test for fencepost errors wrt updating current_index + */ + public function read($len) + { + $this->check_closed(); + $read=''; + for($i=$this->current_index; $i<($this->current_index+$len); $i++) + $read .= $this->string_buffer[$i]; + if (strlen($read) < $len) + $this->current_index = $this->length(); + else + $this->current_index += $len; + return $read; + } + + /** + * @returns boolean true if successful + * @throws AvroIOException if the seek failed. + */ + public function seek($offset, $whence=self::SEEK_SET) + { + if (!is_int($offset)) + throw new AvroIOException('Seek offset must be an integer.'); + // Prevent seeking before BOF + switch ($whence) + { + case self::SEEK_SET: + if (0 > $offset) + throw new AvroIOException('Cannot seek before beginning of file.'); + $this->current_index = $offset; + break; + case self::SEEK_CUR: + if (0 > $this->current_index + $whence) + throw new AvroIOException('Cannot seek before beginning of file.'); + $this->current_index += $offset; + break; + case self::SEEK_END: + if (0 > $this->length() + $offset) + throw new AvroIOException('Cannot seek before beginning of file.'); + $this->current_index = $this->length() + $offset; + break; + default: + throw new AvroIOException(sprintf('Invalid seek whence %d', $whence)); + } + + return true; + } + + /** + * @returns int + * @see AvroIO::tell() + */ + public function tell() { return $this->current_index; } + + /** + * @returns boolean + * @see AvroIO::is_eof() + */ + public function is_eof() + { + return ($this->current_index >= $this->length()); + } + + /** + * No-op provided for compatibility with AvroIO interface. + * @returns boolean true + */ + public function flush() { return true; } + + /** + * Marks this buffer as closed. + * @returns boolean true + */ + public function close() + { + $this->check_closed(); + $this->is_closed = true; + return true; + } + + /** + * @throws AvroIOException if the buffer is closed. + */ + private function check_closed() + { + if ($this->is_closed()) + throw new AvroIOException('Buffer is closed'); + } + + /** + * Appends bytes to this buffer. + * @param string $str + * @returns integer count of bytes written. + */ + private function append_str($str) + { + $this->check_closed(); + $this->string_buffer .= $str; + $len = strlen($str); + $this->current_index += $len; + return $len; + } + + /** + * Truncates the truncate buffer to 0 bytes and returns the pointer + * to the beginning of the buffer. + * @returns boolean true + */ + public function truncate() + { + $this->check_closed(); + $this->string_buffer = ''; + $this->current_index = 0; + return true; + } + + /** + * @returns int count of bytes in the buffer + * @internal Could probably memoize length for performance, but + * no need do this yet. + */ + public function length() { return strlen($this->string_buffer); } + + /** + * @returns string + */ + public function __toString() { return $this->string_buffer; } + + + /** + * @returns string + * @uses self::__toString() + */ + public function string() { return $this->__toString(); } + + /** + * @returns boolean true if this buffer is closed and false + * otherwise. + */ + public function is_closed() { return $this->is_closed; } +} + +/** + * AvroIO wrapper for PHP file access functions + * @package Avro + */ +class AvroFile extends AvroIO +{ + /** + * @var string fopen read mode value. Used internally. + */ + const FOPEN_READ_MODE = 'rb'; + + /** + * @var string fopen write mode value. Used internally. + */ + const FOPEN_WRITE_MODE = 'wb'; + + /** + * @var string + */ + private $file_path; + + /** + * @var resource file handle for AvroFile instance + */ + private $file_handle; + + public function __construct($file_path, $mode = self::READ_MODE) + { + /** + * XXX: should we check for file existence (in case of reading) + * or anything else about the provided file_path argument? + */ + $this->file_path = $file_path; + switch ($mode) + { + case self::WRITE_MODE: + $this->file_handle = fopen($this->file_path, self::FOPEN_WRITE_MODE); + if (false == $this->file_handle) + throw new AvroIOException('Could not open file for writing'); + break; + case self::READ_MODE: + $this->file_handle = fopen($this->file_path, self::FOPEN_READ_MODE); + if (false == $this->file_handle) + throw new AvroIOException('Could not open file for reading'); + break; + default: + throw new AvroIOException( + sprintf("Only modes '%s' and '%s' allowed. You provided '%s'.", + self::READ_MODE, self::WRITE_MODE, $mode)); + } + } + + /** + * @returns int count of bytes written + * @throws AvroIOException if write failed. + */ + public function write($str) + { + $len = fwrite($this->file_handle, $str); + if (false === $len) + throw new AvroIOException(sprintf('Could not write to file')); + return $len; + } + + /** + * @param int $len count of bytes to read. + * @returns string bytes read + * @throws AvroIOException if length value is negative or if the read failed + */ + public function read($len) + { + if (0 > $len) + throw new AvroIOException( + sprintf("Invalid length value passed to read: %d", $len)); + + if (0 == $len) + return ''; + + $bytes = fread($this->file_handle, $len); + if (false === $bytes) + throw new AvroIOException('Could not read from file'); + return $bytes; + } + + /** + * @returns int current position within the file + * @throws AvroFileExcpetion if tell failed. + */ + public function tell() + { + $position = ftell($this->file_handle); + if (false === $position) + throw new AvroIOException('Could not execute tell on reader'); + return $position; + } + + /** + * @param int $offset + * @param int $whence + * @returns boolean true upon success + * @throws AvroIOException if seek failed. + * @see AvroIO::seek() + */ + public function seek($offset, $whence = SEEK_SET) + { + $res = fseek($this->file_handle, $offset, $whence); + // Note: does not catch seeking beyond end of file + if (-1 === $res) + throw new AvroIOException( + sprintf("Could not execute seek (offset = %d, whence = %d)", + $offset, $whence)); + return true; + } + + /** + * Closes the file. + * @returns boolean true if successful. + * @throws AvroIOException if there was an error closing the file. + */ + public function close() + { + $res = fclose($this->file_handle); + if (false === $res) + throw new AvroIOException('Error closing file.'); + return $res; + } + + /** + * @returns boolean true if the pointer is at the end of the file, + * and false otherwise. + * @see AvroIO::is_eof() as behavior differs from feof() + */ + public function is_eof() + { + $this->read(1); + if (feof($this->file_handle)) + return true; + $this->seek(-1, self::SEEK_CUR); + return false; + } + + /** + * @returns boolean true if the flush was successful. + * @throws AvroIOException if there was an error flushing the file. + */ + public function flush() + { + $res = fflush($this->file_handle); + if (false === $res) + throw new AvroIOException('Could not flush file.'); + return true; + } + +} diff --git a/vendor/wikimedia/avro/lib/avro/protocol.php b/vendor/wikimedia/avro/lib/avro/protocol.php new file mode 100644 index 00000000..a558e66b --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro/protocol.php @@ -0,0 +1,86 @@ +real_parse(json_decode($json, true)); + return $protocol; + } + + function real_parse($avro) { + $this->protocol = $avro["protocol"]; + $this->namespace = $avro["namespace"]; + $this->schemata = new AvroNamedSchemata(); + $this->name = $avro["protocol"]; + + if (!is_null($avro["types"])) { + $types = AvroSchema::real_parse($avro["types"], $this->namespace, $this->schemata); + } + + if (!is_null($avro["messages"])) { + foreach ($avro["messages"] as $messageName => $messageAvro) { + $message = new AvroProtocolMessage($messageName, $messageAvro, $this); + $this->messages{$messageName} = $message; + } + } + } +} + +class AvroProtocolMessage +{ + /** + * @var AvroRecordSchema $request + */ + + public $request; + + public $response; + + public function __construct($name, $avro, $protocol) + { + $this->name = $name; + $this->request = new AvroRecordSchema(new AvroName($name, null, $protocol->namespace), null, $avro{'request'}, $protocol->schemata, AvroSchema::REQUEST_SCHEMA); + + if (array_key_exists('response', $avro)) { + $this->response = $protocol->schemata->schema_by_name(new AvroName($avro{'response'}, $protocol->namespace, $protocol->namespace)); + if ($this->response == null) + $this->response = new AvroPrimitiveSchema($avro{'response'}); + } + } +} + +class AvroProtocolParseException extends AvroException {}; diff --git a/vendor/wikimedia/avro/lib/avro/schema.php b/vendor/wikimedia/avro/lib/avro/schema.php new file mode 100644 index 00000000..3d7fbbb8 --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro/schema.php @@ -0,0 +1,1457 @@ +type) + { + case self::NULL_TYPE: + return is_null($datum); + case self::BOOLEAN_TYPE: + return is_bool($datum); + case self::STRING_TYPE: + case self::BYTES_TYPE: + return is_string($datum); + case self::INT_TYPE: + return (is_int($datum) + && (self::INT_MIN_VALUE <= $datum) + && ($datum <= self::INT_MAX_VALUE)); + case self::LONG_TYPE: + return (is_int($datum) + && (self::LONG_MIN_VALUE <= $datum) + && ($datum <= self::LONG_MAX_VALUE)); + case self::FLOAT_TYPE: + case self::DOUBLE_TYPE: + return (is_float($datum) || is_int($datum)); + case self::ARRAY_SCHEMA: + if (is_array($datum)) + { + foreach ($datum as $d) + if (!self::is_valid_datum($expected_schema->items(), $d)) + return false; + return true; + } + return false; + case self::MAP_SCHEMA: + if (is_array($datum)) + { + foreach ($datum as $k => $v) + if (!is_string($k) + || !self::is_valid_datum($expected_schema->values(), $v)) + return false; + return true; + } + return false; + case self::UNION_SCHEMA: + foreach ($expected_schema->schemas() as $schema) + if (self::is_valid_datum($schema, $datum)) + return true; + return false; + case self::ENUM_SCHEMA: + return in_array($datum, $expected_schema->symbols()); + case self::FIXED_SCHEMA: + return (is_string($datum) + && (strlen($datum) == $expected_schema->size())); + case self::RECORD_SCHEMA: + case self::ERROR_SCHEMA: + case self::REQUEST_SCHEMA: + if (is_array($datum)) + { + foreach ($expected_schema->fields() as $field) + if (!array_key_exists($field->name(), $datum) || !self::is_valid_datum($field->type(), $datum[$field->name()])) + return false; + return true; + } + return false; + default: + throw new AvroSchemaParseException( + sprintf('%s is not allowed.', $expected_schema)); + } + } + + /** + * @internal Should only be called from within the constructor of + * a class which extends AvroSchema + * @param string $type a schema type name + */ + public function __construct($type) + { + $this->type = $type; + } + + /** + * @param mixed $avro + * @param string $default_namespace namespace of enclosing schema + * @param AvroNamedSchemata &$schemata + * @returns AvroSchema + * @uses AvroSchema::real_parse() + * @throws AvroSchemaParseException + */ + protected static function subparse($avro, $default_namespace, &$schemata=null) + { + try + { + return self::real_parse($avro, $default_namespace, $schemata); + } + catch (AvroSchemaParseException $e) + { + throw $e; + } + catch (Exception $e) + { + throw new AvroSchemaParseException( + sprintf('Sub-schema is not a valid Avro schema. Bad schema: %s', + print_r($avro, true))); + } + + } + + /** + * @returns string schema type name of this schema + */ + public function type() { return $this->type; } + + /** + * @returns mixed + */ + public function to_avro() + { + return array(self::TYPE_ATTR => $this->type); + } + + /** + * @returns string the JSON-encoded representation of this Avro schema. + */ + public function __toString() { return json_encode($this->to_avro()); } + + /** + * @returns mixed value of the attribute with the given attribute name + */ + public function attribute($attribute) { return $this->$attribute(); } + +} + +/** + * Avro schema for basic types such as null, int, long, string. + * @package Avro + */ +class AvroPrimitiveSchema extends AvroSchema +{ + + /** + * @param string $type the primitive schema type name + * @throws AvroSchemaParseException if the given $type is not a + * primitive schema type name + */ + public function __construct($type) + { + if (self::is_primitive_type($type)) + return parent::__construct($type); + throw new AvroSchemaParseException( + sprintf('%s is not a valid primitive type.', $type)); + } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = parent::to_avro(); + // FIXME: Is this if really necessary? When *wouldn't* this be the case? + if (1 == count($avro)) + return $this->type; + return $avro; + } +} + +/** + * Avro array schema, consisting of items of a particular + * Avro schema type. + * @package Avro + */ +class AvroArraySchema extends AvroSchema +{ + /** + * @var AvroName|AvroSchema named schema name or AvroSchema of + * array element + */ + private $items; + + /** + * @var boolean true if the items schema + * FIXME: couldn't we derive this from whether or not $this->items + * is an AvroName or an AvroSchema? + */ + private $is_items_schema_from_schemata; + + /** + * @param string|mixed $items AvroNamedSchema name or object form + * of decoded JSON schema representation. + * @param string $default_namespace namespace of enclosing schema + * @param AvroNamedSchemata &$schemata + */ + public function __construct($items, $default_namespace, &$schemata=null) + { + parent::__construct(AvroSchema::ARRAY_SCHEMA); + + $this->is_items_schema_from_schemata = false; + $items_schema = null; + if (is_string($items) + && $items_schema = $schemata->schema_by_name( + new AvroName($items, null, $default_namespace))) + $this->is_items_schema_from_schemata = true; + else + $items_schema = AvroSchema::subparse($items, $default_namespace, $schemata); + + $this->items = $items_schema; + } + + + /** + * @returns AvroName|AvroSchema named schema name or AvroSchema + * of this array schema's elements. + */ + public function items() { return $this->items; } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = parent::to_avro(); + $avro[AvroSchema::ITEMS_ATTR] = $this->is_items_schema_from_schemata + ? $this->items->qualified_name() : $this->items->to_avro(); + return $avro; + } +} + +/** + * Avro map schema consisting of named values of defined + * Avro Schema types. + * @package Avro + */ +class AvroMapSchema extends AvroSchema +{ + /** + * @var string|AvroSchema named schema name or AvroSchema + * of map schema values. + */ + private $values; + + /** + * @var boolean true if the named schema + * XXX Couldn't we derive this based on whether or not + * $this->values is a string? + */ + private $is_values_schema_from_schemata; + + /** + * @param string|AvroSchema $values + * @param string $default_namespace namespace of enclosing schema + * @param AvroNamedSchemata &$schemata + */ + public function __construct($values, $default_namespace, &$schemata=null) + { + parent::__construct(AvroSchema::MAP_SCHEMA); + + $this->is_values_schema_from_schemata = false; + $values_schema = null; + if (is_string($values) + && $values_schema = $schemata->schema_by_name( + new AvroName($values, null, $default_namespace))) + $this->is_values_schema_from_schemata = true; + else + $values_schema = AvroSchema::subparse($values, $default_namespace, + $schemata); + + $this->values = $values_schema; + } + + /** + * @returns XXX|AvroSchema + */ + public function values() { return $this->values; } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = parent::to_avro(); + $avro[AvroSchema::VALUES_ATTR] = $this->is_values_schema_from_schemata + ? $this->values->qualified_name() : $this->values->to_avro(); + return $avro; + } +} + +/** + * Union of Avro schemas, of which values can be of any of the schema in + * the union. + * @package Avro + */ +class AvroUnionSchema extends AvroSchema +{ + /** + * @var AvroSchema[] list of schemas of this union + */ + private $schemas; + + /** + * @var int[] list of indices of named schemas which + * are defined in $schemata + */ + public $schema_from_schemata_indices; + + /** + * @param AvroSchema[] $schemas list of schemas in the union + * @param string $default_namespace namespace of enclosing schema + * @param AvroNamedSchemata &$schemata + */ + public function __construct($schemas, $default_namespace, &$schemata=null) + { + parent::__construct(AvroSchema::UNION_SCHEMA); + + $this->schema_from_schemata_indices = array(); + $schema_types = array(); + foreach ($schemas as $index => $schema) + { + $is_schema_from_schemata = false; + $new_schema = null; + if (is_string($schema) + && ($new_schema = $schemata->schema_by_name( + new AvroName($schema, null, $default_namespace)))) + $is_schema_from_schemata = true; + else + $new_schema = self::subparse($schema, $default_namespace, $schemata); + + $schema_type = $new_schema->type; + if (self::is_valid_type($schema_type) + && !self::is_named_type($schema_type) + && in_array($schema_type, $schema_types)) + throw new AvroSchemaParseException( + sprintf('"%s" is already in union', $schema_type)); + elseif (AvroSchema::UNION_SCHEMA == $schema_type) + throw new AvroSchemaParseException('Unions cannot contain other unions'); + else + { + $schema_types []= $schema_type; + $this->schemas []= $new_schema; + if ($is_schema_from_schemata) + $this->schema_from_schemata_indices []= $index; + } + } + + } + + /** + * @returns AvroSchema[] + */ + public function schemas() { return $this->schemas; } + + /** + * @returns AvroSchema the particular schema from the union for + * the given (zero-based) index. + * @throws AvroSchemaParseException if the index is invalid for this schema. + */ + public function schema_by_index($index) + { + if (count($this->schemas) > $index) + return $this->schemas[$index]; + + throw new AvroSchemaParseException('Invalid union schema index'); + } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = array(); + + foreach ($this->schemas as $index => $schema) + $avro []= (in_array($index, $this->schema_from_schemata_indices)) + ? $schema->qualified_name() : $schema->to_avro(); + + return $avro; + } +} + +/** + * Parent class of named Avro schema + * @package Avro + * @todo Refactor AvroNamedSchema to use an AvroName instance + * to store name information. + */ +class AvroNamedSchema extends AvroSchema +{ + /** + * @var AvroName $name + */ + private $name; + + /** + * @var string documentation string + */ + private $doc; + + /** + * @param string $type + * @param AvroName $name + * @param string $doc documentation string + * @param AvroNamedSchemata &$schemata + * @throws AvroSchemaParseException + */ + public function __construct($type, $name, $doc=null, &$schemata=null) + { + parent::__construct($type); + $this->name = $name; + + if ($doc && !is_string($doc)) + throw new AvroSchemaParseException('Schema doc attribute must be a string'); + $this->doc = $doc; + + if (!is_null($schemata)) + $schemata = $schemata->clone_with_new_schema($this); + } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = parent::to_avro(); + list($name, $namespace) = AvroName::extract_namespace($this->qualified_name()); + $avro[AvroSchema::NAME_ATTR] = $name; + if ($namespace) + $avro[AvroSchema::NAMESPACE_ATTR] = $namespace; + if (!is_null($this->doc)) + $avro[AvroSchema::DOC_ATTR] = $this->doc; + return $avro; + } + + /** + * @returns string + */ + public function fullname() { return $this->name->fullname(); } + + public function qualified_name() { return $this->name->qualified_name(); } + +} + +/** + * @package Avro + */ +class AvroName +{ + /** + * @var string character used to separate names comprising the fullname + */ + const NAME_SEPARATOR = '.'; + + /** + * @var string regular expression to validate name values + */ + const NAME_REGEXP = '/^[A-Za-z_][A-Za-z0-9_]*$/'; + + /** + * @returns string[] array($name, $namespace) + */ + public static function extract_namespace($name, $namespace=null) + { + $parts = explode(self::NAME_SEPARATOR, $name); + if (count($parts) > 1) + { + $name = array_pop($parts); + $namespace = join(self::NAME_SEPARATOR, $parts); + } + return array($name, $namespace); + } + + /** + * @returns boolean true if the given name is well-formed + * (is a non-null, non-empty string) and false otherwise + */ + public static function is_well_formed_name($name) + { + return (is_string($name) && !empty($name) + && preg_match(self::NAME_REGEXP, $name)); + } + + /** + * @param string $namespace + * @returns boolean true if namespace is composed of valid names + * @throws AvroSchemaParseException if any of the namespace components + * are invalid. + */ + private static function check_namespace_names($namespace) + { + foreach (explode(self::NAME_SEPARATOR, $namespace) as $n) + { + if (empty($n) || (0 == preg_match(self::NAME_REGEXP, $n))) + throw new AvroSchemaParseException(sprintf('Invalid name "%s"', $n)); + } + return true; + } + + /** + * @param string $name + * @param string $namespace + * @returns string + * @throws AvroSchemaParseException if any of the names are not valid. + */ + private static function parse_fullname($name, $namespace) + { + if (!is_string($namespace) || empty($namespace)) + throw new AvroSchemaParseException('Namespace must be a non-empty string.'); + self::check_namespace_names($namespace); + return $namespace . '.' . $name; + } + + /** + * @var string valid names are matched by self::NAME_REGEXP + */ + private $name; + + /** + * @var string + */ + private $namespace; + + /** + * @var string + */ + private $fullname; + + /** + * @var string Name qualified as necessary given its default namespace. + */ + private $qualified_name; + + /** + * @param string $name + * @param string $namespace + * @param string $default_namespace + */ + public function __construct($name, $namespace, $default_namespace) + { + if (!is_string($name) || empty($name)) + throw new AvroSchemaParseException('Name must be a non-empty string.'); + + if (strpos($name, self::NAME_SEPARATOR) + && self::check_namespace_names($name)) + $this->fullname = $name; + elseif (0 == preg_match(self::NAME_REGEXP, $name)) + throw new AvroSchemaParseException(sprintf('Invalid name "%s"', $name)); + elseif (!is_null($namespace)) + $this->fullname = self::parse_fullname($name, $namespace); + elseif (!is_null($default_namespace)) + $this->fullname = self::parse_fullname($name, $default_namespace); + else + $this->fullname = $name; + + list($this->name, $this->namespace) = self::extract_namespace($this->fullname); + $this->qualified_name = (is_null($this->namespace) + || $this->namespace == $default_namespace) + ? $this->name : $this->fullname; + } + + /** + * @returns array array($name, $namespace) + */ + public function name_and_namespace() + { + return array($this->name, $this->namespace); + } + + /** + * @returns string + */ + public function fullname() { return $this->fullname; } + + /** + * @returns string fullname + * @uses $this->fullname() + */ + public function __toString() { return $this->fullname(); } + + /** + * @returns string name qualified for its context + */ + public function qualified_name() { return $this->qualified_name; } + +} + +/** + * Keeps track of AvroNamedSchema which have been observed so far, + * as well as the default namespace. + * + * @package Avro + */ +class AvroNamedSchemata +{ + /** + * @var AvroNamedSchema[] + */ + private $schemata; + + /** + * @param AvroNamedSchemata[] + */ + public function __construct($schemata=array()) + { + $this->schemata = $schemata; + } + + public function list_schemas() { + var_export($this->schemata); + foreach($this->schemata as $sch) + print('Schema '.$sch->__toString()."\n"); + } + + /** + * @param string $fullname + * @returns boolean true if there exists a schema with the given name + * and false otherwise. + */ + public function has_name($fullname) + { + return array_key_exists($fullname, $this->schemata); + } + + /** + * @param string $fullname + * @returns AvroSchema|null the schema which has the given name, + * or null if there is no schema with the given name. + */ + public function schema($fullname) + { + if (isset($this->schemata[$fullname])) + return $this->schemata[$fullname]; + return null; + } + + /** + * @param AvroName $name + * @returns AvroSchema|null + */ + public function schema_by_name($name) + { + return $this->schema($name->fullname()); + } + + /** + * Creates a new AvroNamedSchemata instance of this schemata instance + * with the given $schema appended. + * @param AvroNamedSchema schema to add to this existing schemata + * @returns AvroNamedSchemata + */ + public function clone_with_new_schema($schema) + { + $name = $schema->fullname(); + if (AvroSchema::is_valid_type($name)) + throw new AvroSchemaParseException( + sprintf('Name "%s" is a reserved type name', $name)); + else if ($this->has_name($name)) + throw new AvroSchemaParseException( + sprintf('Name "%s" is already in use', $name)); + $schemata = new AvroNamedSchemata($this->schemata); + $schemata->schemata[$name] = $schema; + return $schemata; + } +} + +/** + * @package Avro + */ +class AvroEnumSchema extends AvroNamedSchema +{ + /** + * @var string[] array of symbols + */ + private $symbols; + + /** + * @param AvroName $name + * @param string $doc + * @param string[] $symbols + * @param AvroNamedSchemata &$schemata + * @throws AvroSchemaParseException + */ + public function __construct($name, $doc, $symbols, &$schemata=null) + { + if (!AvroUtil::is_list($symbols)) + throw new AvroSchemaParseException('Enum Schema symbols are not a list'); + + if (count(array_unique($symbols)) > count($symbols)) + throw new AvroSchemaParseException( + sprintf('Duplicate symbols: %s', $symbols)); + + foreach ($symbols as $symbol) + if (!is_string($symbol) || empty($symbol)) + throw new AvroSchemaParseException( + sprintf('Enum schema symbol must be a string %', + print_r($symbol, true))); + + parent::__construct(AvroSchema::ENUM_SCHEMA, $name, $doc, $schemata); + $this->symbols = $symbols; + } + + /** + * @returns string[] this enum schema's symbols + */ + public function symbols() { return $this->symbols; } + + /** + * @param string $symbol + * @returns boolean true if the given symbol exists in this + * enum schema and false otherwise + */ + public function has_symbol($symbol) + { + return in_array($symbol, $this->symbols); + } + + /** + * @param int $index + * @returns string enum schema symbol with the given (zero-based) index + */ + public function symbol_by_index($index) + { + if (array_key_exists($index, $this->symbols)) + return $this->symbols[$index]; + throw new AvroException(sprintf('Invalid symbol index %d', $index)); + } + + /** + * @param string $symbol + * @returns int the index of the given $symbol in the enum schema + */ + public function symbol_index($symbol) + { + $idx = array_search($symbol, $this->symbols, true); + if (false !== $idx) + return $idx; + throw new AvroException(sprintf("Invalid symbol value '%s'", $symbol)); + } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = parent::to_avro(); + $avro[AvroSchema::SYMBOLS_ATTR] = $this->symbols; + return $avro; + } +} + +/** + * AvroNamedSchema with fixed-length data values + * @package Avro + */ +class AvroFixedSchema extends AvroNamedSchema +{ + + /** + * @var int byte count of this fixed schema data value + */ + private $size; + + /** + * @param AvroName $name + * @param string $doc Set to null, as fixed schemas don't have doc strings + * @param int $size byte count of this fixed schema data value + * @param AvroNamedSchemata &$schemata + */ + public function __construct($name, $doc, $size, &$schemata=null) + { + $doc = null; // Fixed schemas don't have doc strings. + if (!is_integer($size)) + throw new AvroSchemaParseException( + 'Fixed Schema requires a valid integer for "size" attribute'); + parent::__construct(AvroSchema::FIXED_SCHEMA, $name, $doc, $schemata); + return $this->size = $size; + } + + /** + * @returns int byte count of this fixed schema data value + */ + public function size() { return $this->size; } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = parent::to_avro(); + $avro[AvroSchema::SIZE_ATTR] = $this->size; + return $avro; + } +} + +/** + * @package Avro + */ +class AvroRecordSchema extends AvroNamedSchema +{ + /** + * @param mixed $field_data + * @param string $default_namespace namespace of enclosing schema + * @param AvroNamedSchemata &$schemata + * @returns AvroField[] + * @throws AvroSchemaParseException + */ + static function parse_fields($field_data, $default_namespace, &$schemata) + { + $fields = array(); + $field_names = array(); + foreach ($field_data as $index => $field) + { + $name = AvroUtil::array_value($field, AvroField::FIELD_NAME_ATTR); + $type = AvroUtil::array_value($field, AvroSchema::TYPE_ATTR); + $order = AvroUtil::array_value($field, AvroField::ORDER_ATTR); + + $default = null; + $has_default = false; + if (array_key_exists(AvroField::DEFAULT_ATTR, $field)) + { + $default = $field[AvroField::DEFAULT_ATTR]; + $has_default = true; + } + + if (in_array($name, $field_names)) + throw new AvroSchemaParseException( + sprintf("Field name %s is already in use", $name)); + + $is_schema_from_schemata = false; + $field_schema = null; + if (is_string($type) + && $field_schema = $schemata->schema_by_name( + new AvroName($type, null, $default_namespace))) + $is_schema_from_schemata = true; + else + $field_schema = self::subparse($type, $default_namespace, $schemata); + + $new_field = new AvroField($name, $field_schema, $is_schema_from_schemata, + $has_default, $default, $order); + $field_names []= $name; + $fields []= $new_field; + } + return $fields; + } + + /** + * @var AvroSchema[] array of AvroNamedSchema field definitions of + * this AvroRecordSchema + */ + private $fields; + + /** + * @var array map of field names to field objects. + * @internal Not called directly. Memoization of AvroRecordSchema->fields_hash() + */ + private $fields_hash; + + /** + * @param string $name + * @param string $namespace + * @param string $doc + * @param array $fields + * @param AvroNamedSchemata &$schemata + * @param string $schema_type schema type name + * @throws AvroSchemaParseException + */ + public function __construct($name, $doc, $fields, &$schemata=null, + $schema_type=AvroSchema::RECORD_SCHEMA) + { + if (is_null($fields)) + throw new AvroSchemaParseException( + 'Record schema requires a non-empty fields attribute'); + + if (AvroSchema::REQUEST_SCHEMA == $schema_type) + parent::__construct($schema_type, $name); + else + parent::__construct($schema_type, $name, $doc, $schemata); + + list($x, $namespace) = $name->name_and_namespace(); + $this->fields = self::parse_fields($fields, $namespace, $schemata); + } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = parent::to_avro(); + + $fields_avro = array(); + foreach ($this->fields as $field) + $fields_avro [] = $field->to_avro(); + + if (AvroSchema::REQUEST_SCHEMA == $this->type) + return $fields_avro; + + $avro[AvroSchema::FIELDS_ATTR] = $fields_avro; + + return $avro; + } + + /** + * @returns array the schema definitions of the fields of this AvroRecordSchema + */ + public function fields() { return $this->fields; } + + /** + * @returns array a hash table of the fields of this AvroRecordSchema fields + * keyed by each field's name + */ + public function fields_hash() + { + if (is_null($this->fields_hash)) + { + $hash = array(); + foreach ($this->fields as $field) + $hash[$field->name()] = $field; + $this->fields_hash = $hash; + } + return $this->fields_hash; + } +} + +/** + * Field of an {@link AvroRecordSchema} + * @package Avro + */ +class AvroField extends AvroSchema +{ + + /** + * @var string fields name attribute name + */ + const FIELD_NAME_ATTR = 'name'; + + /** + * @var string + */ + const DEFAULT_ATTR = 'default'; + + /** + * @var string + */ + const ORDER_ATTR = 'order'; + + /** + * @var string + */ + const ASC_SORT_ORDER = 'ascending'; + + /** + * @var string + */ + const DESC_SORT_ORDER = 'descending'; + + /** + * @var string + */ + const IGNORE_SORT_ORDER = 'ignore'; + + /** + * @var array list of valid field sort order values + */ + private static $valid_field_sort_orders = array(self::ASC_SORT_ORDER, + self::DESC_SORT_ORDER, + self::IGNORE_SORT_ORDER); + + + /** + * @param string $order + * @returns boolean + */ + private static function is_valid_field_sort_order($order) + { + return in_array($order, self::$valid_field_sort_orders); + } + + /** + * @param string $order + * @throws AvroSchemaParseException if $order is not a valid + * field order value. + */ + private static function check_order_value($order) + { + if (!is_null($order) && !self::is_valid_field_sort_order($order)) + throw new AvroSchemaParseException( + sprintf('Invalid field sort order %s', $order)); + } + + /** + * @var string + */ + private $name; + + /** + * @var boolean whether or no there is a default value + */ + private $has_default; + + /** + * @var string field default value + */ + private $default; + + /** + * @var string sort order of this field + */ + private $order; + + /** + * @var boolean whether or not the AvroNamedSchema of this field is + * defined in the AvroNamedSchemata instance + */ + private $is_type_from_schemata; + + /** + * @param string $type + * @param string $name + * @param AvroSchema $schema + * @param boolean $is_type_from_schemata + * @param string $default + * @param string $order + * @todo Check validity of $default value + * @todo Check validity of $order value + */ + public function __construct($name, $schema, $is_type_from_schemata, + $has_default, $default, $order=null) + { + if (!AvroName::is_well_formed_name($name)) + throw new AvroSchemaParseException('Field requires a "name" attribute'); + + $this->type = $schema; + $this->is_type_from_schemata = $is_type_from_schemata; + $this->name = $name; + $this->has_default = $has_default; + if ($this->has_default) + $this->default = $default; + $this->check_order_value($order); + $this->order = $order; + } + + /** + * @returns mixed + */ + public function to_avro() + { + $avro = array(AvroField::FIELD_NAME_ATTR => $this->name); + + $avro[AvroSchema::TYPE_ATTR] = ($this->is_type_from_schemata) + ? $this->type->qualified_name() : $this->type->to_avro(); + + if (isset($this->default)) + $avro[AvroField::DEFAULT_ATTR] = $this->default; + + if ($this->order) + $avro[AvroField::ORDER_ATTR] = $this->order; + + return $avro; + } + + /** + * @returns string the name of this field + */ + public function name() { return $this->name; } + + /** + * @returns mixed the default value of this field + */ + public function default_value() { return $this->default; } + + /** + * @returns boolean true if the field has a default and false otherwise + */ + public function has_default_value() { return $this->has_default; } +} diff --git a/vendor/wikimedia/avro/lib/avro/util.php b/vendor/wikimedia/avro/lib/avro/util.php new file mode 100644 index 00000000..a43613e9 --- /dev/null +++ b/vendor/wikimedia/avro/lib/avro/util.php @@ -0,0 +1,67 @@ + $v) + { + if ($i !== $k) + return false; + $i++; + } + return true; + } + return false; + } + + /** + * @param array $ary + * @param string $key + * @returns mixed the value of $ary[$key] if it is set, + * and null otherwise. + */ + static function array_value($ary, $key) + { + return isset($ary[$key]) ? $ary[$key] : null; + } +} diff --git a/vendor/wikimedia/cdb/COPYING b/vendor/wikimedia/cdb/COPYING index 019694a9..d159169d 100644 --- a/vendor/wikimedia/cdb/COPYING +++ b/vendor/wikimedia/cdb/COPYING @@ -1,65 +1,65 @@ -== GNU GENERAL PUBLIC LICENSE == + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 -Version 2, June 1991 + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. + Preamble -=== Preamble === - -The licenses for most software are designed to take away your + The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to +the GNU Lesser General Public License instead.) You can apply it to your programs, too. -When we speak of free software, we are referring to freedom, not + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. -To protect your rights, we need to make restrictions that forbid + To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. -For example, if you distribute copies of such a program, whether + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. -We protect your rights with two steps: (1) copyright the software, and + We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. -Also, for each author's protection and ours, we want to make certain + Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. -Finally, any free program is threatened constantly by software + Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. -The precise terms and conditions for copying, distribution and + The precise terms and conditions for copying, distribution and modification follow. -== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION == + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -'''0.''' This License applies to any program or other work which contains + 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" @@ -76,7 +76,7 @@ is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. -'''1.''' You may copy and distribute verbatim copies of the Program's + 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the @@ -87,29 +87,29 @@ along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. -'''2.''' You may modify your copy or copies of the Program or any portion + 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - '''a)''' You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - '''b)''' You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - '''c)''' If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, @@ -131,26 +131,26 @@ with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. -'''3.''' You may copy and distribute the Program (or a work based on it, + 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - '''a)''' Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, - '''b)''' Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, - '''c)''' Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source @@ -169,7 +169,7 @@ access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. -'''4.''' You may not copy, modify, sublicense, or distribute the Program + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. @@ -177,7 +177,7 @@ However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -'''5.''' You are not required to accept this License, since you have not + 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by @@ -186,7 +186,7 @@ Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. -'''6.''' Each time you redistribute the Program (or any work based on the + 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further @@ -194,7 +194,7 @@ restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. -'''7.''' If, as a consequence of a court judgment or allegation of patent + 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not @@ -226,7 +226,7 @@ impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. -'''8.''' If the distribution and/or use of the Program is restricted in + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding @@ -234,7 +234,7 @@ those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. -'''9.''' The Free Software Foundation may publish revised and/or new versions + 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. @@ -247,7 +247,7 @@ Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. -'''10.''' If you wish to incorporate parts of the Program into other free + 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes @@ -255,9 +255,9 @@ make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. -=== NO WARRANTY === + NO WARRANTY -'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED @@ -267,7 +267,7 @@ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING @@ -277,47 +277,45 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - '''END OF TERMS AND CONDITIONS''' + END OF TERMS AND CONDITIONS -== How to Apply These Terms to Your New Programs == + How to Apply These Terms to Your New Programs -If you develop a new program, and you want it to be of the greatest + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. -To do so, attach the following notices to the program. It is safest + To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) + + Copyright (C) - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may @@ -328,15 +326,14 @@ You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. - Ty Coon, President of Vice + , 1 April 1989 + Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General +library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/vendor/wikimedia/cdb/Doxyfile b/vendor/wikimedia/cdb/Doxyfile deleted file mode 100644 index e77e75ae..00000000 --- a/vendor/wikimedia/cdb/Doxyfile +++ /dev/null @@ -1,32 +0,0 @@ -# Configuration file for Doxygen - -PROJECT_NAME = CDB -PROJECT_BRIEF = CDB functions for PHP - -OUTPUT_DIRECTORY = doc - -JAVADOC_AUTOBRIEF = YES -QT_AUTOBRIEF = YES - -WARN_NO_PARAMDOC = YES - -INPUT = README.md src/ -FILE_PATTERNS = *.php -RECURSIVE = YES -# Requires doxygen 1.8.3+ -USE_MDFILE_AS_MAINPAGE = README.md - -HTML_DYNAMIC_SECTIONS = YES -GENERATE_TREEVIEW = YES -TREEVIEW_WIDTH = 250 - -GENERATE_LATEX = NO - -HAVE_DOT = YES -DOT_FONTNAME = Helvetica -DOT_FONTSIZE = 10 -TEMPLATE_RELATIONS = YES -CALL_GRAPH = NO -CALLER_GRAPH = NO -# Makes dot run faster. Requires graphviz >1.8.10 -DOT_MULTI_TARGETS = YES diff --git a/vendor/wikimedia/cdb/README.md b/vendor/wikimedia/cdb/README.md index e4ef4498..02c1b94c 100644 --- a/vendor/wikimedia/cdb/README.md +++ b/vendor/wikimedia/cdb/README.md @@ -1,4 +1,4 @@ -[![Latest Stable Version](https://poser.pugx.org/cdb/cdb/v/stable.svg)](https://packagist.org/packages/cdb/cdb) [![License](https://poser.pugx.org/cdb/cdb/license.svg)](https://packagist.org/packages/cdb/cdb) +[![Latest Stable Version]](https://packagist.org/packages/wikimedia/cdb) [![License]](https://packagist.org/packages/wikimedia/cdb) CDB functions for PHP ===================== @@ -9,30 +9,28 @@ library wraps the CDB functionality exposed in PHP via the `dba_*` functions. In cases where `dba_*` functions are not present or are not compiled with CDB support, a pure-PHP implementation is provided for falling back. -Additional documentation about the library can be found on [MediaWiki.org](https://www.mediawiki.org/wiki/CDB). +Additional documentation about the library can be found on +[MediaWiki.org](https://www.mediawiki.org/wiki/CDB). Usage ----- -``` -// Reading a CDB file -$cdb = \Cdb\Reader::open( 'db.cdb' ); -$foo = $cdb->get( 'somekey' ); + // Reading a CDB file + $cdb = \Cdb\Reader::open( 'db.cdb' ); + $foo = $cdb->get( 'somekey' ); + + // Writing to a CDB file + $cdb = \Cdb\Writer::open( 'anotherdb.cdb' ); + $cdb->set( 'somekey', $foo ); -// Writing to a CDB file -$cdb = \Cdb\Writer::open( 'anotherdb.cdb' ); -$cdb->set( 'somekey', $foo ); -``` Running tests ------------- -``` -composer install --prefer-dist -cd test -../vendor/phpunit/phpunit/phpunit . -``` + composer install --prefer-dist + composer test + History ------- @@ -41,8 +39,11 @@ This library was first introduced in [MediaWiki 1.16][] ([r52203][]). It was split out of the MediaWiki codebase and published as an independent library during the [MediaWiki 1.25][] development cycle. + --- [CDB]: https://en.wikipedia.org/wiki/cdb_(software) [MediaWiki 1.16]: https://www.mediawiki.org/wiki/MediaWiki_1.16 [r52203]: https://www.mediawiki.org/wiki/Special:Code/MediaWiki/52203 [MediaWiki 1.25]: https://www.mediawiki.org/wiki/MediaWiki_1.25 +[Latest Stable Version]: https://poser.pugx.org/wikimedia/cdb/v/stable.svg +[License]: https://poser.pugx.org/wikimedia/cdb/license.svg diff --git a/vendor/wikimedia/cdb/composer.json b/vendor/wikimedia/cdb/composer.json deleted file mode 100644 index 2134d2f7..00000000 --- a/vendor/wikimedia/cdb/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "wikimedia/cdb", - "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.", - "license": "GPL-2.0", - "homepage": "https://www.mediawiki.org/wiki/CDB", - "authors": [ - { - "name": "Tim Starling", - "email": "tstarling@wikimedia.org" - }, - { - "name": "Chad Horohoe", - "email": "chad@wikimedia.org" - } - ], - "minimum-stability": "dev", - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "autoload": { - "classmap": ["src/"] - } -} diff --git a/vendor/wikimedia/cdb/doc/README b/vendor/wikimedia/cdb/doc/README deleted file mode 100644 index 15ee3b71..00000000 --- a/vendor/wikimedia/cdb/doc/README +++ /dev/null @@ -1 +0,0 @@ -Placeholder for doxygen documentation diff --git a/vendor/wikimedia/cdb/src/Reader.php b/vendor/wikimedia/cdb/src/Reader.php index 2df06ab3..b1aaa022 100644 --- a/vendor/wikimedia/cdb/src/Reader.php +++ b/vendor/wikimedia/cdb/src/Reader.php @@ -82,4 +82,21 @@ abstract class Reader { * @param string $key */ abstract public function get( $key ); + + /** + * Check whether key exists + * + * @param string $key + */ + abstract public function exists( $key ); + + /** + * Fetch first key + */ + abstract public function firstkey(); + + /** + * Fetch next key + */ + abstract public function nextkey(); } diff --git a/vendor/wikimedia/cdb/src/Reader/DBA.php b/vendor/wikimedia/cdb/src/Reader/DBA.php index 838bf6e0..62f1ad99 100644 --- a/vendor/wikimedia/cdb/src/Reader/DBA.php +++ b/vendor/wikimedia/cdb/src/Reader/DBA.php @@ -1,6 +1,7 @@ handle ); } + + public function exists( $key ) { + return dba_exists( $key, $this->handle ); + } + + public function firstkey() { + return dba_firstkey( $this->handle ); + } + + public function nextkey() { + return dba_nextkey( $this->handle ); + } } diff --git a/vendor/wikimedia/cdb/src/Reader/PHP.php b/vendor/wikimedia/cdb/src/Reader/PHP.php index 57b7d8ca..0f0d36ef 100644 --- a/vendor/wikimedia/cdb/src/Reader/PHP.php +++ b/vendor/wikimedia/cdb/src/Reader/PHP.php @@ -1,16 +1,14 @@ fileName = $fileName; @@ -68,9 +70,15 @@ class PHP extends Reader { if ( !$this->handle ) { throw new Exception( 'Unable to open CDB file "' . $this->fileName . '".' ); } - $this->findStart(); + $this->hashTable = fread( $this->handle, 2048 ); + if ( strlen( $this->hashTable ) !== 2048 ) { + throw new Exception( 'CDB file contains fewer than 2048 bytes of data.' ); + } } + /** + * Close the handle on the CDB file. + */ public function close() { if ( isset( $this->handle ) ) { fclose( $this->handle ); @@ -79,127 +87,180 @@ class PHP extends Reader { } /** + * Get the value of a key. + * * @param mixed $key - * @return bool|string + * @return bool|string The key's value or false if not found. */ public function get( $key ) { // strval is required if ( $this->find( strval( $key ) ) ) { - return $this->read( $this->dlen, $this->dpos ); + return $this->read( $this->dataPos, $this->dataLen ); } return false; } /** - * @param string $key - * @param int $pos - * @return bool + * Read data from the CDB file. + * + * @throws Exception When attempting to read past the end of the file. + * @param int $start Start reading from this position. + * @param int $len Number of bytes to read. + * @return string Read data. */ - protected function match( $key, $pos ) { - $buf = $this->read( strlen( $key ), $pos ); + protected function read( $start, $len ) { + $end = $start + $len; - return $buf === $key; - } + // The first 2048 bytes are the lookup table, which is read into + // memory on initialization. + if ( $end <= 2048 ) { + return substr( $this->hashTable, $start, $len ); + } - protected function findStart() { - $this->loop = 0; - } + // Read data from the internal buffer first. + $bytes = ''; + if ( $this->buf && $start >= $this->bufStart ) { + $bytes .= substr( $this->buf, $start - $this->bufStart, $len ); + $bytesRead = strlen( $bytes ); + $len -= $bytesRead; + $start += $bytesRead; + } else { + $bytesRead = 0; + } - /** - * @throws Exception - * @param int $length - * @param int $pos - * @return string - */ - protected function read( $length, $pos ) { - if ( fseek( $this->handle, $pos ) == -1 ) { - // This can easily happen if the internal pointers are incorrect - throw new Exception( - 'Seek failed, file "' . $this->fileName . '" may be corrupted.' ); + if ( !$len ) { + return $bytes; + } + + // Many reads are sequential, so the file position indicator may + // already be in the right place, in which case we can avoid the + // call to fseek(). + if ( $start !== $this->filePos ) { + if ( fseek( $this->handle, $start ) === -1 ) { + // This can easily happen if the internal pointers are incorrect + throw new Exception( + 'Seek failed, file "' . $this->fileName . '" may be corrupted.' ); + } } - if ( $length == 0 ) { - return ''; + $buf = fread( $this->handle, max( $len, 1024 ) ); + if ( $buf === false ) { + $buf = ''; } - $buf = fread( $this->handle, $length ); - if ( $buf === false || strlen( $buf ) !== $length ) { + $bytes .= substr( $buf, 0, $len ); + if ( strlen( $bytes ) !== $len + $bytesRead ) { throw new Exception( 'Read from CDB file failed, file "' . $this->fileName . '" may be corrupted.' ); } - return $buf; + $this->filePos = $end; + $this->bufStart = $start; + $this->buf = $buf; + + return $bytes; } /** - * Unpack an unsigned integer and throw an exception if it needs more than 31 bits - * @param string $s - * @throws Exception - * @return mixed + * Unpack an unsigned integer and throw an exception if it needs more than 31 bits. + * + * @param int $pos Position to read from. + * @throws Exception When the integer cannot be represented in 31 bits. + * @return int */ - protected function unpack31( $s ) { - $data = unpack( 'V', $s ); - if ( $data[1] > 0x7fffffff ) { + protected function readInt31( $pos = 0 ) { + $uint31 = $this->readInt32( $pos ); + if ( $uint31 > 0x7fffffff ) { throw new Exception( 'Error in CDB file "' . $this->fileName . '", integer too big.' ); } - return $data[1]; + return $uint31; } /** - * Unpack a 32-bit signed integer - * @param string $s + * Unpack a 32-bit integer. + * + * @param int $pos * @return int */ - protected function unpackSigned( $s ) { - $data = unpack( 'va/vb', $s ); + protected function readInt32( $pos = 0 ) { + static $lookups; + + if ( !$lookups ) { + $lookups = array(); + for ( $i = 1; $i < 256; $i++ ) { + $lookups[ chr( $i ) ] = $i; + } + } - return $data['a'] | ( $data['b'] << 16 ); + $buf = $this->read( $pos, 4 ); + + $rv = 0; + + if ( $buf[0] !== "\x0" ) { + $rv = $lookups[ $buf[0] ]; + } + if ( $buf[1] !== "\x0" ) { + $rv |= ( $lookups[ $buf[1] ] << 8 ); + } + if ( $buf[2] !== "\x0" ) { + $rv |= ( $lookups[ $buf[2] ] << 16 ); + } + if ( $buf[3] !== "\x0" ) { + $rv |= ( $lookups[ $buf[3] ] << 24 ); + } + + return $rv; } /** + * Search the CDB file for a key. + * + * Sets `dataLen` and `dataPos` properties if successful. + * * @param string $key - * @return bool + * @return bool Whether the key was found. */ - protected function findNext( $key ) { - if ( !$this->loop ) { - $u = Util::hash( $key ); - $buf = $this->read( 8, ( $u << 3 ) & 2047 ); - $this->hslots = $this->unpack31( substr( $buf, 4 ) ); - if ( !$this->hslots ) { - return false; - } - $this->hpos = $this->unpack31( substr( $buf, 0, 4 ) ); - $this->khash = $u; - $u = Util::unsignedShiftRight( $u, 8 ); - $u = Util::unsignedMod( $u, $this->hslots ); - $u <<= 3; - $this->kpos = $this->hpos + $u; - } + protected function find( $key ) { + $keyLen = strlen( $key ); - while ( $this->loop < $this->hslots ) { - $buf = $this->read( 8, $this->kpos ); - $pos = $this->unpack31( substr( $buf, 4 ) ); + $u = Util::hash( $key ); + $upos = ( $u << 3 ) & 2047; + $hashSlots = $this->readInt31( $upos + 4 ); + if ( !$hashSlots ) { + return false; + } + $hashPos = $this->readInt31( $upos ); + $keyHash = $u; + $u = Util::unsignedShiftRight( $u, 8 ); + $u = Util::unsignedMod( $u, $hashSlots ); + $u <<= 3; + $keyPos = $hashPos + $u; + + for ( $i = 0; $i < $hashSlots; $i++ ) { + $hash = $this->readInt32( $keyPos ); + $pos = $this->readInt31( $keyPos + 4 ); if ( !$pos ) { return false; } - $this->loop += 1; - $this->kpos += 8; - if ( $this->kpos == $this->hpos + ( $this->hslots << 3 ) ) { - $this->kpos = $this->hpos; + $keyPos += 8; + if ( $keyPos == $hashPos + ( $hashSlots << 3 ) ) { + $keyPos = $hashPos; } - $u = $this->unpackSigned( substr( $buf, 0, 4 ) ); - if ( $u === $this->khash ) { - $buf = $this->read( 8, $pos ); - $keyLen = $this->unpack31( substr( $buf, 0, 4 ) ); - if ( $keyLen == strlen( $key ) && $this->match( $key, $pos + 8 ) ) { - // Found - $this->dlen = $this->unpack31( substr( $buf, 4 ) ); - $this->dpos = $pos + 8 + $keyLen; - - return true; + if ( $hash === $keyHash ) { + if ( $keyLen === $this->readInt31( $pos ) ) { + $dataLen = $this->readInt31( $pos + 4 ); + $dataPos = $pos + 8 + $keyLen; + $foundKey = $this->read( $pos + 8, $keyLen ); + if ( $foundKey === $key ) { + // Found + $this->dataLen = $dataLen; + $this->dataPos = $dataPos; + + return true; + } } } } @@ -208,13 +269,36 @@ class PHP extends Reader { } /** - * @param mixed $key - * @return bool + * Check if a key exists in the CDB file. + * + * @param string $key + * @return bool Whether the key exists. */ - protected function find( $key ) { - $this->findStart(); + public function exists( $key ) { + return $this->find( strval( $key ) ); + } + + /** + * Get the first key from the CDB file and reset the key iterator. + * + * @return string Key. + */ + public function firstkey() { + $this->keyIterPos = 2048; + return $this->nextkey(); + } + + /** + * Get the next key from the CDB file. + * + * @return string Key. + */ + public function nextkey() { + $keyLen = $this->readInt31( $this->keyIterPos ); + $dataLen = $this->readInt31( $this->keyIterPos + 4 ); + $key = $this->read( $this->keyIterPos + 8, $keyLen ); + $this->keyIterPos += 8 + $keyLen + $dataLen; - return $this->findNext( $key ); + return $key; } } - diff --git a/vendor/wikimedia/cdb/src/Writer.php b/vendor/wikimedia/cdb/src/Writer.php index b994ec67..53216041 100644 --- a/vendor/wikimedia/cdb/src/Writer.php +++ b/vendor/wikimedia/cdb/src/Writer.php @@ -94,6 +94,6 @@ abstract class Writer { * @return bool */ protected function isWindows() { - return substr( php_uname(), 0, 7 ) == 'Windows'; + return strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN'; } } diff --git a/vendor/wikimedia/cdb/src/Writer/DBA.php b/vendor/wikimedia/cdb/src/Writer/DBA.php index eb525f4c..20d0adfb 100644 --- a/vendor/wikimedia/cdb/src/Writer/DBA.php +++ b/vendor/wikimedia/cdb/src/Writer/DBA.php @@ -1,6 +1,7 @@ markTestSkipped( 'Native CDB support is not available.' ); - } - $temp = sys_get_temp_dir(); - if ( !is_writable( $temp ) ) { - $this->markTestSkipped( "Temp dir [$temp] isn't writable." ); - } - $this->phpCdbFile = tempnam( $temp, get_class( $this ) . '_' ); - $this->dbaCdbFile = tempnam( $temp, get_class( $this ) . '_' ); - } - - /** - * Make a random-ish string - * @return string - */ - private static function randomString() { - $len = mt_rand( 0, 10 ); - $s = ''; - for ( $j = 0; $j < $len; $j++ ) { - $s .= chr( mt_rand( 0, 255 ) ); - } - - return $s; - } - - public function testCdbWrite() { - $w1 = new Writer\PHP( $this->phpCdbFile ); - $w2 = new Writer\DBA( $this->dbaCdbFile ); - - $data = array(); - for ( $i = 0; $i < 1000; $i++ ) { - $key = self::randomString(); - $value = self::randomString(); - $w1->set( $key, $value ); - $w2->set( $key, $value ); - - if ( !isset( $data[$key] ) ) { - $data[$key] = $value; - } - } - - $w1->close(); - $w2->close(); - - $this->assertEquals( - md5_file( $this->phpCdbFile ), - md5_file( $this->dbaCdbFile ), - 'same hash' - ); - - $r1 = new Reader\PHP( $this->phpCdbFile ); - $r2 = new Reader\DBA( $this->dbaCdbFile ); - - foreach ( $data as $key => $value ) { - if ( $key === '' ) { - // Known bug - continue; - } - $v1 = $r1->get( $key ); - $v2 = $r2->get( $key ); - - $v1 = $v1 === false ? '(not found)' : $v1; - $v2 = $v2 === false ? '(not found)' : $v2; - - # cdbAssert( 'Mismatch', $key, $v1, $v2 ); - $this->cdbAssert( "PHP error", $key, $v1, $value ); - $this->cdbAssert( "DBA error", $key, $v2, $value ); - } - } - - private function cdbAssert( $msg, $key, $v1, $v2 ) { - $this->assertEquals( - $v2, - $v1, - $msg . ', k=' . bin2hex( $key ) - ); - } -} diff --git a/vendor/wikimedia/composer-merge-plugin/.arcconfig b/vendor/wikimedia/composer-merge-plugin/.arcconfig new file mode 100644 index 00000000..3dfae3d9 --- /dev/null +++ b/vendor/wikimedia/composer-merge-plugin/.arcconfig @@ -0,0 +1,6 @@ +{ + "phabricator.uri" : "https://phabricator.wikimedia.org/", + "repository.callsign" : "GCMP", + "history.immutable" : false, + "unit.engine": "PhpunitTestEngine" +} diff --git a/vendor/wikimedia/composer-merge-plugin/.arclint b/vendor/wikimedia/composer-merge-plugin/.arclint new file mode 100644 index 00000000..da42f29a --- /dev/null +++ b/vendor/wikimedia/composer-merge-plugin/.arclint @@ -0,0 +1,13 @@ +{ + "exclude": "(^vendor/)", + "linters": { + "php": { + "type": "php", + "include": "(\\.php$)" + }, + "json": { + "type": "json", + "include": "(\\.json$)" + } + } +} diff --git a/vendor/wikimedia/composer-merge-plugin/LICENSE b/vendor/wikimedia/composer-merge-plugin/LICENSE index 55e376b4..3c9804a6 100644 --- a/vendor/wikimedia/composer-merge-plugin/LICENSE +++ b/vendor/wikimedia/composer-merge-plugin/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014 Bryan Davis, Wikimedia Foundation, and contributors +Copyright (c) 2015 Bryan Davis, Wikimedia Foundation, and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/wikimedia/composer-merge-plugin/README.md b/vendor/wikimedia/composer-merge-plugin/README.md index 53d64579..f020d40a 100644 --- a/vendor/wikimedia/composer-merge-plugin/README.md +++ b/vendor/wikimedia/composer-merge-plugin/README.md @@ -1,18 +1,34 @@ -[![Latest Stable Version](https://img.shields.io/packagist/v/wikimedia/composer-merge-plugin.svg?style=flat)](https://packagist.org/packages/wikimedia/composer-merge-plugin) [![License](https://img.shields.io/packagist/l/wikimedia/composer-merge-plugin.svg?style=flat)](https://github.com/wikimedia/composer-merge-plugin/blob/master/LICENSE) -[![Build Status](https://img.shields.io/travis/wikimedia/composer-merge-plugin.svg?style=flat)](https://travis-ci.org/wikimedia/composer-merge-plugin) -[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/wikimedia/composer-merge-plugin/master.svg?style=flat)](https://scrutinizer-ci.com/g/wikimedia/composer-merge-plugin/?branch=master) +[![Latest Stable Version]](https://packagist.org/packages/wikimedia/composer-merge-plugin) [![License]](https://github.com/wikimedia/composer-merge-plugin/blob/master/LICENSE) +[![Build Status]](https://travis-ci.org/wikimedia/composer-merge-plugin) +[![Code Coverage]](https://scrutinizer-ci.com/g/wikimedia/composer-merge-plugin/?branch=master) Composer Merge Plugin ===================== -Merge one or more additional composer.json files at runtime. +Merge multiple composer.json files at [Composer] runtime. + +Composer Merge Plugin is intended to allow easier dependency management for +applications which ship a composer.json file and expect some deployments to +install additional Composer managed libraries. It does this by allowing the +application's top level `composer.json` file to provide a list of optional +additional configuration files. When Composer is run it will parse these files +and merge their configuration settings into the base configuration. This +combined configuration will then be used when downloading additional libraries +and generating the autoloader. + +Composer Merge Plugin was created to help with installation of [MediaWiki] +which has core library requirements as well as optional libraries and +extensions which may be managed via Composer. + Installation ------------ + ``` $ composer require wikimedia/composer-merge-plugin ``` + Usage ----- @@ -26,33 +42,111 @@ Usage "include": [ "composer.local.json", "extensions/*/composer.json" - ] + ], + "require": [ + "submodule/composer.json" + ], + "recurse": true, + "replace": false, + "merge-dev": true, + "merge-extra": false } } } ``` -The `include` key can specify either a single value or an array of values. -Each value is treated as a glob() pattern identifying additional composer.json -style configuration files to merge into the configuration for the current -Composer execution. By default the merge plugin is recursive, if an included -file also has a "merge-plugin" section it will also be processed. This -functionality can be disabled by setting `"recurse": false` inside the -"merge-plugin" section. -The "require", "require-dev", "repositories" and "suggest" sections of the -found configuration files will be merged into the root package configuration -as though they were directly included in the top-level composer.json file. +Plugin configuration +-------------------- + +The plugin reads its configuration from the `merge-plugin` section of your +composer.json's `extra` section. An `include` setting is required to tell +Composer Merge Plugin which file(s) to merge. + + +### include + +The `include` setting can specify either a single value or an array of values. +Each value is treated as a PHP `glob()` pattern identifying additional +composer.json style configuration files to merge into the root package +configuration for the current Composer execution. + +The following sections of the found configuration files will be merged into +the Composer root package configuration as though they were directly included +in the top-level composer.json file: + +* [autoload](https://getcomposer.org/doc/04-schema.md#autoload) +* [autoload-dev](https://getcomposer.org/doc/04-schema.md#autoload-dev) + (optional, see [merge-dev](#merge-dev) below) +* [conflict](https://getcomposer.org/doc/04-schema.md#conflict) +* [provide](https://getcomposer.org/doc/04-schema.md#provide) +* [replace](https://getcomposer.org/doc/04-schema.md#replace) +* [repositories](https://getcomposer.org/doc/04-schema.md#repositories) +* [require](https://getcomposer.org/doc/04-schema.md#require) +* [require-dev](https://getcomposer.org/doc/04-schema.md#require-dev) + (optional, see [merge-dev](#merge-dev) below) +* [suggest](https://getcomposer.org/doc/04-schema.md#suggest) +* [extra](https://getcomposer.org/doc/04-schema.md#extra) + (optional, see [merge-extra](#merge-extra) below) + + +### require + +The `require` setting is identical to `[include](#include)` except when +a pattern fails to match at least one file then it will cause an error. + +### recurse + +By default the merge plugin is recursive; if an included file has +a `merge-plugin` section it will also be processed. This functionality can be +disabled by adding a `"recurse": false` setting. + + +### replace + +By default, Composer's conflict resolution engine is used to determine which +version of a package should be installed when multiple files specify the same +package. A `"replace": true` setting can be provided to change to a "last +version specified wins" conflict resolution strategy. In this mode, duplicate +package declarations found in merged files will overwrite the declarations +made by earlier files. Files are loaded in the order specified by the +`include` setting with globbed files being processed in alphabetical order. + + +### merge-dev + +By default, `autoload-dev` and `require-dev` sections of included files are +merged. A `"merge-dev": false` setting will disable this behavior. + + +### merge-extra + +A `"merge-extra": true` setting enables the merging the contents of the +`extra` section of included files as well. The normal merge mode for the extra +section is to accept the first version of any key found (e.g. a key in the +master config wins over the version found in any imported config). If +`replace` mode is active ([see above](#replace)) then this behavior changes +and the last key found will win (e.g. the key in the master config is replaced +by the key in the imported config). The usefulness of merging the extra +section will vary depending on the Composer plugins being used and the order +in which they are processed by Composer. + +Note that `merge-plugin` sections are excluded from the merge process, but are +always processed by the plugin unless [recursion](#recurse) is disabled. + Running tests ------------- + ``` $ composer install $ composer test ``` + Contributing ------------ + Bug, feature requests and other issues should be reported to the [GitHub project]. We accept code and documentation contributions via Pull Requests on GitHub as well. @@ -69,12 +163,21 @@ GitHub as well. easier for you to make sure you have updated the necessary tests and documentation. + License ------- + Composer Merge plugin is licensed under the MIT license. See the `LICENSE` file for more details. + --- +[Composer]: https://getcomposer.org/ +[MediaWiki]: https://www.mediawiki.org/wiki/MediaWiki [GitHub project]: https://github.com/wikimedia/composer-merge-plugin [PSR-2 Coding Standard]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md [PHP Code Sniffer]: http://pear.php.net/package/PHP_CodeSniffer +[Latest Stable Version]: https://img.shields.io/packagist/v/wikimedia/composer-merge-plugin.svg?style=flat +[License]: https://img.shields.io/packagist/l/wikimedia/composer-merge-plugin.svg?style=flat +[Build Status]: https://img.shields.io/travis/wikimedia/composer-merge-plugin.svg?style=flat +[Code Coverage]: https://img.shields.io/scrutinizer/coverage/g/wikimedia/composer-merge-plugin/master.svg?style=flat diff --git a/vendor/wikimedia/composer-merge-plugin/composer.json b/vendor/wikimedia/composer-merge-plugin/composer.json index 5ef429ad..dce70e7d 100644 --- a/vendor/wikimedia/composer-merge-plugin/composer.json +++ b/vendor/wikimedia/composer-merge-plugin/composer.json @@ -3,18 +3,23 @@ "description": "Composer plugin to merge multiple composer.json files", "type": "composer-plugin", "license": "MIT", + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": ">=5.3.2", - "composer-plugin-api": "1.0.0" + "composer-plugin-api": "^1.0", + "php": ">=5.3.2" }, "require-dev": { "composer/composer": "1.0.*@dev", - "phpunit/phpunit": "~4.0", "jakub-onderka/php-parallel-lint": "~0.8", - "squizlabs/php_codesniffer": "~2.1.0", - "phpspec/prophecy-phpunit": "~1.0" + "phpunit/phpunit": "~4.8|~5.0", + "squizlabs/php_codesniffer": "~2.1.0" }, "autoload": { "psr-4": { @@ -22,6 +27,9 @@ } }, "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + }, "class": "Wikimedia\\Composer\\MergePlugin" }, "config": { diff --git a/vendor/wikimedia/composer-merge-plugin/src/Logger.php b/vendor/wikimedia/composer-merge-plugin/src/Logger.php new file mode 100644 index 00000000..1635a2b0 --- /dev/null +++ b/vendor/wikimedia/composer-merge-plugin/src/Logger.php @@ -0,0 +1,102 @@ + + */ +class Logger +{ + /** + * @var string $name + */ + protected $name; + + /** + * @var IOInterface $inputOutput + */ + protected $inputOutput; + + /** + * @param string $name + * @param IOInterface $io + */ + public function __construct($name, IOInterface $io) + { + $this->name = $name; + $this->inputOutput = $io; + } + + /** + * Log a debug message + * + * Messages will be output at the "very verbose" logging level (eg `-vv` + * needed on the Composer command). + * + * @param string $message + */ + public function debug($message) + { + if ($this->inputOutput->isVeryVerbose()) { + $message = " [{$this->name}] {$message}"; + $this->log($message); + } + } + + /** + * Log an informative message + * + * Messages will be output at the "verbose" logging level (eg `-v` needed + * on the Composer command). + * + * @param string $message + */ + public function info($message) + { + if ($this->inputOutput->isVerbose()) { + $message = " [{$this->name}] {$message}"; + $this->log($message); + } + } + + /** + * Log a warning message + * + * @param string $message + */ + public function warning($message) + { + $message = " [{$this->name}] {$message}"; + $this->log($message); + } + + /** + * Write a message + * + * @param string $message + */ + protected function log($message) + { + if (method_exists($this->inputOutput, 'writeError')) { + $this->inputOutput->writeError($message); + } else { + // @codeCoverageIgnoreStart + // Backwards compatiblity for Composer before cb336a5 + $this->inputOutput->write($message); + // @codeCoverageIgnoreEnd + } + } +} +// vim:sw=4:ts=4:sts=4:et: diff --git a/vendor/wikimedia/composer-merge-plugin/src/Merge/ExtraPackage.php b/vendor/wikimedia/composer-merge-plugin/src/Merge/ExtraPackage.php new file mode 100644 index 00000000..ebecdff5 --- /dev/null +++ b/vendor/wikimedia/composer-merge-plugin/src/Merge/ExtraPackage.php @@ -0,0 +1,487 @@ + + */ +class ExtraPackage +{ + + /** + * @var Composer $composer + */ + protected $composer; + + /** + * @var Logger $logger + */ + protected $logger; + + /** + * @var string $path + */ + protected $path; + + /** + * @var array $json + */ + protected $json; + + /** + * @var CompletePackage $package + */ + protected $package; + + /** + * @param string $path Path to composer.json file + * @param Composer $composer + * @param Logger $logger + */ + public function __construct($path, Composer $composer, Logger $logger) + { + $this->path = $path; + $this->composer = $composer; + $this->logger = $logger; + $this->json = $this->readPackageJson($path); + $this->package = $this->loadPackage($this->json); + } + + /** + * Get list of additional packages to include if precessing recursively. + * + * @return array + */ + public function getIncludes() + { + return isset($this->json['extra']['merge-plugin']['include']) ? + $this->json['extra']['merge-plugin']['include'] : array(); + } + + /** + * Get list of additional packages to require if precessing recursively. + * + * @return array + */ + public function getRequires() + { + return isset($this->json['extra']['merge-plugin']['require']) ? + $this->json['extra']['merge-plugin']['require'] : array(); + } + + /** + * Read the contents of a composer.json style file into an array. + * + * The package contents are fixed up to be usable to create a Package + * object by providing dummy "name" and "version" values if they have not + * been provided in the file. This is consistent with the default root + * package loading behavior of Composer. + * + * @param string $path + * @return array + */ + protected function readPackageJson($path) + { + $file = new JsonFile($path); + $json = $file->read(); + if (!isset($json['name'])) { + $json['name'] = 'merge-plugin/' . + strtr($path, DIRECTORY_SEPARATOR, '-'); + } + if (!isset($json['version'])) { + $json['version'] = '1.0.0'; + } + return $json; + } + + /** + * @return CompletePackage + */ + protected function loadPackage($json) + { + $loader = new ArrayLoader(); + $package = $loader->load($json); + // @codeCoverageIgnoreStart + if (!$package instanceof CompletePackage) { + throw new UnexpectedValueException( + 'Expected instance of CompletePackage, got ' . + get_class($package) + ); + } + // @codeCoverageIgnoreEnd + return $package; + } + + /** + * Merge this package into a RootPackageInterface + * + * @param RootPackageInterface $root + * @param PluginState $state + */ + public function mergeInto(RootPackageInterface $root, PluginState $state) + { + $this->addRepositories($root); + + $this->mergeRequires('require', $root, $state); + if ($state->isDevMode()) { + $this->mergeRequires('require-dev', $root, $state); + } + + $this->mergePackageLinks('conflict', $root); + $this->mergePackageLinks('replace', $root); + $this->mergePackageLinks('provide', $root); + + $this->mergeSuggests($root); + + $this->mergeAutoload('autoload', $root); + if ($state->isDevMode()) { + $this->mergeAutoload('devAutoload', $root); + } + + $this->mergeExtra($root, $state); + } + + /** + * Add a collection of repositories described by the given configuration + * to the given package and the global repository manager. + * + * @param RootPackageInterface $root + */ + protected function addRepositories(RootPackageInterface $root) + { + if (!isset($this->json['repositories'])) { + return; + } + $repoManager = $this->composer->getRepositoryManager(); + $newRepos = array(); + + foreach ($this->json['repositories'] as $repoJson) { + if (!isset($repoJson['type'])) { + continue; + } + $this->logger->info("Adding {$repoJson['type']} repository"); + $repo = $repoManager->createRepository( + $repoJson['type'], + $repoJson + ); + $repoManager->addRepository($repo); + $newRepos[] = $repo; + } + + $unwrapped = self::unwrapIfNeeded($root, 'setRepositories'); + $unwrapped->setRepositories(array_merge( + $newRepos, + $root->getRepositories() + )); + } + + /** + * Merge require or require-dev into a RootPackageInterface + * + * @param string $type 'require' or 'require-dev' + * @param RootPackageInterface $root + * @param PluginState $state + */ + protected function mergeRequires( + $type, + RootPackageInterface $root, + PluginState $state + ) { + $linkType = BasePackage::$supportedLinkTypes[$type]; + $getter = 'get' . ucfirst($linkType['method']); + $setter = 'set' . ucfirst($linkType['method']); + + $requires = $this->package->{$getter}(); + if (empty($requires)) { + return; + } + + $this->mergeStabilityFlags($root, $requires); + + $requires = $this->replaceSelfVersionDependencies( + $type, + $requires, + $root + ); + + $root->{$setter}($this->mergeOrDefer( + $type, + $root->{$getter}(), + $requires, + $state + )); + } + + /** + * Merge two collections of package links and collect duplicates for + * subsequent processing. + * + * @param string $type 'require' or 'require-dev' + * @param array $origin Primary collection + * @param array $merge Additional collection + * @param PluginState $state + * @return array Merged collection + */ + protected function mergeOrDefer( + $type, + array $origin, + array $merge, + $state + ) { + $dups = array(); + foreach ($merge as $name => $link) { + if (!isset($origin[$name]) || $state->replaceDuplicateLinks()) { + $this->logger->info("Merging {$name}"); + $origin[$name] = $link; + } else { + // Defer to solver. + $this->logger->info( + "Deferring duplicate {$name}" + ); + $dups[] = $link; + } + } + $state->addDuplicateLinks($type, $dups); + return $origin; + } + + /** + * Merge autoload or autoload-dev into a RootPackageInterface + * + * @param string $type 'autoload' or 'devAutoload' + * @param RootPackageInterface $root + */ + protected function mergeAutoload($type, RootPackageInterface $root) + { + $getter = 'get' . ucfirst($type); + $setter = 'set' . ucfirst($type); + + $autoload = $this->package->{$getter}(); + if (empty($autoload)) { + return; + } + + $unwrapped = self::unwrapIfNeeded($root, $setter); + $unwrapped->{$setter}(array_merge_recursive( + $root->{$getter}(), + $this->fixRelativePaths($autoload) + )); + } + + /** + * Fix a collection of paths that are relative to this package to be + * relative to the base package. + * + * @param array $paths + * @return array + */ + protected function fixRelativePaths(array $paths) + { + $base = dirname($this->path); + $base = ($base === '.') ? '' : "{$base}/"; + + array_walk_recursive( + $paths, + function (&$path) use ($base) { + $path = "{$base}{$path}"; + } + ); + return $paths; + } + + /** + * Extract and merge stability flags from the given collection of + * requires and merge them into a RootPackageInterface + * + * @param RootPackageInterface $root + * @param array $requires + */ + protected function mergeStabilityFlags( + RootPackageInterface $root, + array $requires + ) { + $flags = $root->getStabilityFlags(); + $sf = new StabilityFlags($flags, $root->getMinimumStability()); + + $unwrapped = self::unwrapIfNeeded($root, 'setStabilityFlags'); + $unwrapped->setStabilityFlags(array_merge( + $flags, + $sf->extractAll($requires) + )); + } + + /** + * Merge package links of the given type into a RootPackageInterface + * + * @param string $type 'conflict', 'replace' or 'provide' + * @param RootPackageInterface $root + */ + protected function mergePackageLinks($type, RootPackageInterface $root) + { + $linkType = BasePackage::$supportedLinkTypes[$type]; + $getter = 'get' . ucfirst($linkType['method']); + $setter = 'set' . ucfirst($linkType['method']); + + $links = $this->package->{$getter}(); + if (!empty($links)) { + $unwrapped = self::unwrapIfNeeded($root, $setter); + if ($root !== $unwrapped) { + $this->logger->warning( + 'This Composer version does not support ' . + "'{$type}' merging for aliased packages." + ); + } + $unwrapped->{$setter}(array_merge( + $root->{$getter}(), + $this->replaceSelfVersionDependencies($type, $links, $root) + )); + } + } + + /** + * Merge suggested packages into a RootPackageInterface + * + * @param RootPackageInterface $root + */ + protected function mergeSuggests(RootPackageInterface $root) + { + $suggests = $this->package->getSuggests(); + if (!empty($suggests)) { + $unwrapped = self::unwrapIfNeeded($root, 'setSuggests'); + $unwrapped->setSuggests(array_merge( + $root->getSuggests(), + $suggests + )); + } + } + + /** + * Merge extra config into a RootPackageInterface + * + * @param RootPackageInterface $root + * @param PluginState $state + */ + public function mergeExtra(RootPackageInterface $root, PluginState $state) + { + $extra = $this->package->getExtra(); + unset($extra['merge-plugin']); + if (!$state->shouldMergeExtra() || empty($extra)) { + return; + } + + $rootExtra = $root->getExtra(); + $unwrapped = self::unwrapIfNeeded($root, 'setExtra'); + + if ($state->replaceDuplicateLinks()) { + $unwrapped->setExtra( + array_merge($rootExtra, $extra) + ); + + } else { + foreach (array_intersect( + array_keys($extra), + array_keys($rootExtra) + ) as $key) { + $this->logger->info( + "Ignoring duplicate {$key} in ". + "{$this->path} extra config." + ); + } + $unwrapped->setExtra( + array_merge($extra, $rootExtra) + ); + } + } + + /** + * Update Links with a 'self.version' constraint with the root package's + * version. + * + * @param string $type Link type + * @param array $links + * @param RootPackageInterface $root + * @return array + */ + protected function replaceSelfVersionDependencies( + $type, + array $links, + RootPackageInterface $root + ) { + $linkType = BasePackage::$supportedLinkTypes[$type]; + $version = $root->getVersion(); + $prettyVersion = $root->getPrettyVersion(); + $vp = new VersionParser(); + + return array_map( + function ($link) use ($linkType, $version, $prettyVersion, $vp) { + if ('self.version' === $link->getPrettyConstraint()) { + return new Link( + $link->getSource(), + $link->getTarget(), + $vp->parseConstraints($version), + $linkType['description'], + $prettyVersion + ); + } + return $link; + }, + $links + ); + } + + /** + * Get a full featured Package from a RootPackageInterface. + * + * In Composer versions before 599ad77 the RootPackageInterface only + * defines a sub-set of operations needed by composer-merge-plugin and + * RootAliasPackage only implemented those methods defined by the + * interface. Most of the unimplemented methods in RootAliasPackage can be + * worked around because the getter methods that are implemented proxy to + * the aliased package which we can modify by unwrapping. The exception + * being modifying the 'conflicts', 'provides' and 'replaces' collections. + * We have no way to actually modify those collections unfortunately in + * older versions of Composer. + * + * @param RootPackageInterface $root + * @param string $method Method needed + * @return RootPackageInterface|RootPackage + */ + public static function unwrapIfNeeded( + RootPackageInterface $root, + $method = 'setExtra' + ) { + if ($root instanceof RootAliasPackage && + !method_exists($root, $method) + ) { + // Unwrap and return the aliased RootPackage. + $root = $root->getAliasOf(); + } + return $root; + } +} +// vim:sw=4:ts=4:sts=4:et: diff --git a/vendor/wikimedia/composer-merge-plugin/src/Merge/MissingFileException.php b/vendor/wikimedia/composer-merge-plugin/src/Merge/MissingFileException.php new file mode 100644 index 00000000..873719d7 --- /dev/null +++ b/vendor/wikimedia/composer-merge-plugin/src/Merge/MissingFileException.php @@ -0,0 +1,18 @@ + + */ +class MissingFileException extends \RuntimeException +{ +} diff --git a/vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php b/vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php new file mode 100644 index 00000000..a191c1e8 --- /dev/null +++ b/vendor/wikimedia/composer-merge-plugin/src/Merge/PluginState.php @@ -0,0 +1,327 @@ + + */ +class PluginState +{ + /** + * @var Composer $composer + */ + protected $composer; + + /** + * @var array $includes + */ + protected $includes = array(); + + /** + * @var array $requires + */ + protected $requires = array(); + + /** + * @var array $duplicateLinks + */ + protected $duplicateLinks = array(); + + /** + * @var bool $devMode + */ + protected $devMode = false; + + /** + * @var bool $recurse + */ + protected $recurse = true; + + /** + * @var bool $replace + */ + protected $replace = false; + + /** + * Whether to merge the -dev sections. + * @var bool $mergeDev + */ + protected $mergeDev = true; + + /** + * Whether to merge the extra section. + * + * By default, the extra section is not merged and there will be many + * cases where the merge of the extra section is performed too late + * to be of use to other plugins. When enabled, merging uses one of + * two strategies - either 'first wins' or 'last wins'. When enabled, + * 'first wins' is the default behaviour. If Replace mode is activated + * then 'last wins' is used. + * + * @var bool $mergeExtra + */ + protected $mergeExtra = false; + + /** + * @var bool $firstInstall + */ + protected $firstInstall = false; + + /** + * @var bool $locked + */ + protected $locked = false; + + /** + * @var bool $dumpAutoloader + */ + protected $dumpAutoloader = false; + + /** + * @var bool $optimizeAutoloader + */ + protected $optimizeAutoloader = false; + + /** + * @param Composer $composer + */ + public function __construct(Composer $composer) + { + $this->composer = $composer; + } + + /** + * Load plugin settings + */ + public function loadSettings() + { + $extra = $this->composer->getPackage()->getExtra(); + $config = array_merge( + array( + 'include' => array(), + 'require' => array(), + 'recurse' => true, + 'replace' => false, + 'merge-dev' => true, + 'merge-extra' => false, + ), + isset($extra['merge-plugin']) ? $extra['merge-plugin'] : array() + ); + + $this->includes = (is_array($config['include'])) ? + $config['include'] : array($config['include']); + $this->requires = (is_array($config['require'])) ? + $config['require'] : array($config['require']); + $this->recurse = (bool)$config['recurse']; + $this->replace = (bool)$config['replace']; + $this->mergeDev = (bool)$config['merge-dev']; + $this->mergeExtra = (bool)$config['merge-extra']; + } + + /** + * Get list of filenames and/or glob patterns to include + * + * @return array + */ + public function getIncludes() + { + return $this->includes; + } + + /** + * Get list of filenames and/or glob patterns to require + * + * @return array + */ + public function getRequires() + { + return $this->requires; + } + + /** + * Set the first install flag + * + * @param bool $flag + */ + public function setFirstInstall($flag) + { + $this->firstInstall = (bool)$flag; + } + + /** + * Is this the first time that the plugin has been installed? + * + * @return bool + */ + public function isFirstInstall() + { + return $this->firstInstall; + } + + /** + * Set the locked flag + * + * @param bool $flag + */ + public function setLocked($flag) + { + $this->locked = (bool)$flag; + } + + /** + * Was a lockfile present when the plugin was installed? + * + * @return bool + */ + public function isLocked() + { + return $this->locked; + } + + /** + * Should an update be forced? + * + * @return true If packages are not locked + */ + public function forceUpdate() + { + return !$this->locked; + } + + /** + * Set the devMode flag + * + * @param bool $flag + */ + public function setDevMode($flag) + { + $this->devMode = (bool)$flag; + } + + /** + * Should devMode settings be processed? + * + * @return bool + */ + public function isDevMode() + { + return $this->mergeDev && $this->devMode; + } + + /** + * Set the dumpAutoloader flag + * + * @param bool $flag + */ + public function setDumpAutoloader($flag) + { + $this->dumpAutoloader = (bool)$flag; + } + + /** + * Is the autoloader file supposed to be written out? + * + * @return bool + */ + public function shouldDumpAutoloader() + { + return $this->dumpAutoloader; + } + + /** + * Set the optimizeAutoloader flag + * + * @param bool $flag + */ + public function setOptimizeAutoloader($flag) + { + $this->optimizeAutoloader = (bool)$flag; + } + + /** + * Should the autoloader be optimized? + * + * @return bool + */ + public function shouldOptimizeAutoloader() + { + return $this->optimizeAutoloader; + } + + /** + * Add duplicate packages + * + * @param string $type Package type + * @param array $packages + */ + public function addDuplicateLinks($type, array $packages) + { + if (!isset($this->duplicateLinks[$type])) { + $this->duplicateLinks[$type] = array(); + } + $this->duplicateLinks[$type] = + array_merge($this->duplicateLinks[$type], $packages); + } + + /** + * Get duplicate packages + * + * @param string $type Package type + * @return array + */ + public function getDuplicateLinks($type) + { + return isset($this->duplicateLinks[$type]) ? + $this->duplicateLinks[$type] : array(); + } + + /** + * Should includes be recursively processed? + * + * @return bool + */ + public function recurseIncludes() + { + return $this->recurse; + } + + /** + * Should duplicate links be replaced in a 'last definition wins' order? + * + * @return bool + */ + public function replaceDuplicateLinks() + { + return $this->replace; + } + + /** + * Should the extra section be merged? + * + * By default, the extra section is not merged and there will be many + * cases where the merge of the extra section is performed too late + * to be of use to other plugins. When enabled, merging uses one of + * two strategies - either 'first wins' or 'last wins'. When enabled, + * 'first wins' is the default behaviour. If Replace mode is activated + * then 'last wins' is used. + * + * @return bool + */ + public function shouldMergeExtra() + { + return $this->mergeExtra; + } +} +// vim:sw=4:ts=4:sts=4:et: diff --git a/vendor/wikimedia/composer-merge-plugin/src/Merge/StabilityFlags.php b/vendor/wikimedia/composer-merge-plugin/src/Merge/StabilityFlags.php new file mode 100644 index 00000000..1c106e02 --- /dev/null +++ b/vendor/wikimedia/composer-merge-plugin/src/Merge/StabilityFlags.php @@ -0,0 +1,181 @@ + + */ +class StabilityFlags +{ + + /** + * @var array Current package name => stability mappings + */ + protected $stabilityFlags; + + /** + * @var int Current default minimum stability + */ + protected $minimumStability; + + /** + * @var string Regex to extract an explict stability flag (eg '@dev') + */ + protected $explicitStabilityRe; + + + /** + * @param array $stabilityFlags Current package name => stability mappings + * @param int $minimumStability Current default minimum stability + */ + public function __construct( + array $stabilityFlags = array(), + $minimumStability = BasePackage::STABILITY_STABLE + ) { + $this->stabilityFlags = $stabilityFlags; + $this->minimumStability = $this->getStabilityInt($minimumStability); + $this->explicitStabilityRe = '/^[^@]*?@(' . + implode('|', array_keys(BasePackage::$stabilities)) . + ')$/i'; + } + + /** + * Get the stability value for a given string. + * + * @param string $name Stability name + * @return int Stability value + */ + protected function getStabilityInt($name) + { + $name = VersionParser::normalizeStability($name); + return isset(BasePackage::$stabilities[$name]) ? + BasePackage::$stabilities[$name] : + BasePackage::STABILITY_STABLE; + } + + /** + * Extract and merge stability flags from the given collection of + * requires with another collection of stability flags. + * + * @param array $requires New package name => link mappings + * @return array Unified package name => stability mappings + */ + public function extractAll(array $requires) + { + $flags = array(); + + foreach ($requires as $name => $link) { + $name = strtolower($name); + $version = $link->getPrettyConstraint(); + + $stability = $this->getExplicitStability($version); + + if ($stability === null) { + $stability = $this->getParsedStability($version); + } + + $flags[$name] = max($stability, $this->getCurrentStability($name)); + } + + // Filter out null stability values + return array_filter($flags, function ($v) { + return $v !== null; + }); + } + + + /** + * Extract the most unstable explicit stability (eg '@dev') from a version + * specification. + * + * @param string $version + * @return int|null Stability or null if no explict stability found + */ + protected function getExplicitStability($version) + { + $found = null; + $constraints = $this->splitConstraints($version); + foreach ($constraints as $constraint) { + if (preg_match($this->explicitStabilityRe, $constraint, $match)) { + $stability = $this->getStabilityInt($match[1]); + $found = max($stability, $found); + } + } + return $found; + } + + + /** + * Split a version specification into a list of version constraints. + * + * @param string $version + * @return array + */ + protected function splitConstraints($version) + { + $found = array(); + $orConstraints = preg_split('/\s*\|\|?\s*/', trim($version)); + foreach ($orConstraints as $constraints) { + $andConstraints = preg_split( + '/(?< ,]) *(?getStabilityInt( + VersionParser::parseStability($version) + ); + + if ($stability === BasePackage::STABILITY_STABLE || + $this->minimumStability > $stability + ) { + // Ignore if 'stable' or more stable than the global + // minimum + $stability = null; + } + + return $stability; + } + + + /** + * Get the current stability of a given package. + * + * @param string $name + * @return int|null Stability of null if not set + */ + protected function getCurrentStability($name) + { + return isset($this->stabilityFlags[$name]) ? + $this->stabilityFlags[$name] : null; + } +} +// vim:sw=4:ts=4:sts=4:et: diff --git a/vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php b/vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php index 04c55886..ea41d41a 100644 --- a/vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php +++ b/vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php @@ -2,7 +2,7 @@ /** * This file is part of the Composer Merge plugin. * - * Copyright (C) 2014 Bryan Davis, Wikimedia Foundation, and contributors + * Copyright (C) 2015 Bryan Davis, Wikimedia Foundation, and contributors * * This software may be modified and distributed under the terms of the MIT * license. See the LICENSE file for details. @@ -10,39 +10,56 @@ namespace Wikimedia\Composer; +use Wikimedia\Composer\Merge\ExtraPackage; +use Wikimedia\Composer\Merge\MissingFileException; +use Wikimedia\Composer\Merge\PluginState; + use Composer\Composer; -use Composer\Config; +use Composer\DependencyResolver\Operation\InstallOperation; use Composer\EventDispatcher\EventSubscriberInterface; +use Composer\Factory; +use Composer\Installer; use Composer\Installer\InstallerEvent; use Composer\Installer\InstallerEvents; +use Composer\Installer\PackageEvent; +use Composer\Installer\PackageEvents; use Composer\IO\IOInterface; -use Composer\Json\JsonFile; -use Composer\Package\BasePackage; -use Composer\Package\CompletePackage; -use Composer\Package\Loader\ArrayLoader; use Composer\Package\RootPackageInterface; -use Composer\Package\Version\VersionParser; use Composer\Plugin\PluginInterface; -use Composer\Script\CommandEvent; +use Composer\Script\Event; use Composer\Script\ScriptEvents; /** * Composer plugin that allows merging multiple composer.json files. * - * When installed, this plugin will look for a "merge-patterns" key in the - * composer configuration's "extra" section. The value of this setting can be - * either a single value or an array of values. Each value is treated as - * a glob() pattern identifying additional composer.json style configuration - * files to merge into the configuration for the current compser execution. + * When installed, this plugin will look for a "merge-plugin" key in the + * composer configuration's "extra" section. The value for this key is + * a set of options configuring the plugin. + * + * An "include" setting is required. The value of this setting can be either + * a single value or an array of values. Each value is treated as a glob() + * pattern identifying additional composer.json style configuration files to + * merge into the configuration for the current compser execution. * - * The "require", "require-dev", "repositories" and "suggest" sections of the + * The "autoload", "autoload-dev", "conflict", "provide", "replace", + * "repositories", "require", "require-dev", and "suggest" sections of the * found configuration files will be merged into the root package * configuration as though they were directly included in the top-level * composer.json file. * * If included files specify conflicting package versions for "require" or * "require-dev", the normal Composer dependency solver process will be used - * to attempt to resolve the conflict. + * to attempt to resolve the conflict. Specifying the 'replace' key as true will + * change this default behaviour so that the last-defined version of a package + * will win, allowing for force-overrides of package defines. + * + * By default the "extra" section is not merged. This can be enabled by + * setitng the 'merge-extra' key to true. In normal mode, when the same key is + * found in both the original and the imported extra section, the version in + * the original config is used and the imported version is skipped. If + * 'replace' mode is active, this behaviour changes so the imported version of + * the key is used, replacing the version in the original config. + * * * @code * { @@ -65,36 +82,24 @@ class MergePlugin implements PluginInterface, EventSubscriberInterface { /** - * @var Composer $composer + * Offical package name */ - protected $composer; + const PACKAGE_NAME = 'wikimedia/composer-merge-plugin'; /** - * @var IOInterface $inputOutput - */ - protected $inputOutput; - - /** - * @var ArrayLoader $loader - */ - protected $loader; - - /** - * @var array $duplicateLinks + * @var Composer $composer */ - protected $duplicateLinks; + protected $composer; /** - * @var bool $devMode + * @var PluginState $state */ - protected $devMode; + protected $state; /** - * Whether to recursively include dependencies - * - * @var bool $recurse + * @var Logger $logger */ - protected $recurse = true; + protected $logger; /** * Files that have already been processed @@ -109,7 +114,8 @@ class MergePlugin implements PluginInterface, EventSubscriberInterface public function activate(Composer $composer, IOInterface $io) { $this->composer = $composer; - $this->inputOutput = $io; + $this->state = new PluginState($this->composer); + $this->logger = new Logger('merge-plugin', $io); } /** @@ -119,69 +125,66 @@ class MergePlugin implements PluginInterface, EventSubscriberInterface { return array( InstallerEvents::PRE_DEPENDENCIES_SOLVING => 'onDependencySolve', - ScriptEvents::PRE_INSTALL_CMD => 'onInstallOrUpdate', - ScriptEvents::PRE_UPDATE_CMD => 'onInstallOrUpdate', + PackageEvents::POST_PACKAGE_INSTALL => 'onPostPackageInstall', + ScriptEvents::POST_INSTALL_CMD => 'onPostInstallOrUpdate', + ScriptEvents::POST_UPDATE_CMD => 'onPostInstallOrUpdate', + ScriptEvents::PRE_AUTOLOAD_DUMP => 'onInstallUpdateOrDump', + ScriptEvents::PRE_INSTALL_CMD => 'onInstallUpdateOrDump', + ScriptEvents::PRE_UPDATE_CMD => 'onInstallUpdateOrDump', ); } /** - * Handle an event callback for an install or update command by checking - * for "merge-patterns" in the "extra" data and merging package contents - * if found. + * Handle an event callback for an install, update or dump command by + * checking for "merge-plugin" in the "extra" data and merging package + * contents if found. * - * @param CommandEvent $event + * @param Event $event */ - public function onInstallOrUpdate(CommandEvent $event) + public function onInstallUpdateOrDump(Event $event) { - $config = $this->readConfig($this->composer->getPackage()); - if (isset($config['recurse'])) { - $this->recurse = (bool)$config['recurse']; - } - if ($config['include']) { - $this->loader = new ArrayLoader(); - $this->duplicateLinks = array( - 'require' => array(), - 'require-dev' => array(), - ); - $this->devMode = $event->isDevMode(); - $this->mergePackages($config); - } - } - - /** - * @param RootPackageInterface $package - * @return array - */ - protected function readConfig(RootPackageInterface $package) - { - $config = array( - 'include' => array(), - ); - $extra = $package->getExtra(); - if (isset($extra['merge-plugin'])) { - $config = array_merge($config, $extra['merge-plugin']); - if (!is_array($config['include'])) { - $config['include'] = array($config['include']); + $this->state->loadSettings(); + $this->state->setDevMode($event->isDevMode()); + $this->mergeFiles($this->state->getIncludes(), false); + $this->mergeFiles($this->state->getRequires(), true); + + if ($event->getName() === ScriptEvents::PRE_AUTOLOAD_DUMP) { + $this->state->setDumpAutoloader(true); + $flags = $event->getFlags(); + if (isset($flags['optimize'])) { + $this->state->setOptimizeAutoloader($flags['optimize']); } } - return $config; } /** * Find configuration files matching the configured glob patterns and * merge their contents with the master package. * - * @param array $config + * @param array $patterns List of files/glob patterns + * @param bool $required Are the patterns required to match files? + * @throws MissingFileException when required and a pattern returns no + * results */ - protected function mergePackages(array $config) + protected function mergeFiles(array $patterns, $required = false) { $root = $this->composer->getPackage(); - foreach (array_reduce( - array_map('glob', $config['include']), - 'array_merge', - array() - ) as $path) { - $this->loadFile($root, $path); + + $files = array_map( + function ($files, $pattern) use ($required) { + if ($required && !$files) { + throw new MissingFileException( + "merge-plugin: No files matched required '{$pattern}'" + ); + } + return $files; + }, + array_map('glob', $patterns), + $patterns + ); + + foreach (array_reduce($files, 'array_merge', array()) as $path) { + $this->mergeFile($root, $path); } } @@ -191,221 +194,121 @@ class MergePlugin implements PluginInterface, EventSubscriberInterface * @param RootPackageInterface $root * @param string $path */ - protected function loadFile($root, $path) + protected function mergeFile(RootPackageInterface $root, $path) { - if (in_array($path, $this->loadedFiles)) { - $this->debug("Skipping duplicate $path..."); + if (isset($this->loadedFiles[$path])) { + $this->logger->debug("Already merged $path"); return; } else { - $this->loadedFiles[] = $path; + $this->loadedFiles[$path] = true; } - $this->debug("Loading {$path}..."); - $json = $this->readPackageJson($path); - $package = $this->loader->load($json); - - $this->mergeRequires($root, $package); - $this->mergeDevRequires($root, $package); + $this->logger->info("Loading {$path}..."); - if (isset($json['repositories'])) { - $this->addRepositories($json['repositories'], $root); - } + $package = new ExtraPackage($path, $this->composer, $this->logger); + $package->mergeInto($root, $this->state); - if ($package->getSuggests()) { - $root->setSuggests(array_merge( - $root->getSuggests(), - $package->getSuggests() - )); - } - - if ($this->recurse && isset($json['extra']['merge-plugin'])) { - $this->mergePackages($json['extra']['merge-plugin']); + if ($this->state->recurseIncludes()) { + $this->mergeFiles($package->getIncludes(), false); + $this->mergeFiles($package->getRequires(), true); } } /** - * Read the contents of a composer.json style file into an array. - * - * The package contents are fixed up to be usable to create a Package - * object by providing dummy "name" and "version" values if they have not - * been provided in the file. This is consistent with the default root - * package loading behavior of Composer. + * Handle an event callback for pre-dependency solving phase of an install + * or update by adding any duplicate package dependencies found during + * initial merge processing to the request that will be processed by the + * dependency solver. * - * @param string $path - * @return array + * @param InstallerEvent $event */ - protected function readPackageJson($path) + public function onDependencySolve(InstallerEvent $event) { - $file = new JsonFile($path); - $json = $file->read(); - if (!isset($json['name'])) { - $json['name'] = 'merge-plugin/' . - strtr($path, DIRECTORY_SEPARATOR, '-'); - } - if (!isset($json['version'])) { - $json['version'] = '1.0.0'; - } - return $json; - } - - /** - * @param RootPackageInterface $root - * @param CompletePackage $package - */ - protected function mergeRequires( - RootPackageInterface $root, - CompletePackage $package - ) { - $requires = $package->getRequires(); - if (!$requires) { - return; + $request = $event->getRequest(); + foreach ($this->state->getDuplicateLinks('require') as $link) { + $this->logger->info( + "Adding dependency {$link}" + ); + $request->install($link->getTarget(), $link->getConstraint()); } - - $this->mergeStabilityFlags($root, $requires); - - $root->setRequires($this->mergeLinks( - $root->getRequires(), - $requires, - $this->duplicateLinks['require'] - )); - } - - /** - * @param RootPackageInterface $root - * @param CompletePackage $package - */ - protected function mergeDevRequires( - RootPackageInterface $root, - CompletePackage $package - ) { - $requires = $package->getDevRequires(); - if (!$requires) { - return; + if ($this->state->isDevMode()) { + foreach ($this->state->getDuplicateLinks('require-dev') as $link) { + $this->logger->info( + "Adding dev dependency {$link}" + ); + $request->install($link->getTarget(), $link->getConstraint()); + } } - - $this->mergeStabilityFlags($root, $requires); - - $root->setDevRequires($this->mergeLinks( - $root->getDevRequires(), - $requires, - $this->duplicateLinks['require-dev'] - )); } /** - * Extract and merge stability flags from the given collection of - * requires. + * Handle an event callback following installation of a new package by + * checking to see if the package that was installed was our plugin. * - * @param RootPackageInterface $root - * @param array $requires + * @param PackageEvent $event */ - protected function mergeStabilityFlags( - RootPackageInterface $root, - array $requires - ) { - $flags = $root->getStabilityFlags(); - foreach ($requires as $name => $link) { - $name = strtolower($name); - $version = $link->getPrettyConstraint(); - $stability = VersionParser::parseStability($version); - $flags[$name] = BasePackage::$stabilities[$stability]; + public function onPostPackageInstall(PackageEvent $event) + { + $op = $event->getOperation(); + if ($op instanceof InstallOperation) { + $package = $op->getPackage()->getName(); + if ($package === self::PACKAGE_NAME) { + $this->logger->info('composer-merge-plugin installed'); + $this->state->setFirstInstall(true); + $this->state->setLocked( + $event->getComposer()->getLocker()->isLocked() + ); + } } - $root->setStabilityFlags($flags); } /** - * Add a collection of repositories described by the given configuration - * to the given package and the global repository manager. + * Handle an event callback following an install or update command. If our + * plugin was installed during the run then trigger an update command to + * process any merge-patterns in the current config. * - * @param array $repositories - * @param RootPackageInterface $root + * @param Event $event */ - protected function addRepositories( - array $repositories, - RootPackageInterface $root - ) { - $repoManager = $this->composer->getRepositoryManager(); - $newRepos = array(); - - foreach ($repositories as $repoJson) { - $this->debug("Adding {$repoJson['type']} repository"); - $repo = $repoManager->createRepository( - $repoJson['type'], - $repoJson + public function onPostInstallOrUpdate(Event $event) + { + // @codeCoverageIgnoreStart + if ($this->state->isFirstInstall()) { + $this->state->setFirstInstall(false); + $this->logger->info( + '' . + 'Running additional update to apply merge settings' . + '' ); - $repoManager->addRepository($repo); - $newRepos[] = $repo; - } - $root->setRepositories(array_merge( - $newRepos, - $root->getRepositories() - )); - } + $config = $this->composer->getConfig(); - /** - * Merge two collections of package links and collect duplicates for - * subsequent processing. - * - * @param array $origin Primary collection - * @param array $merge Additional collection - * @param array &dups Duplicate storage - * @return array Merged collection - */ - protected function mergeLinks(array $origin, array $merge, array &$dups) - { - foreach ($merge as $name => $link) { - if (!isset($origin[$name])) { - $this->debug("Merging {$name}"); - $origin[$name] = $link; - } else { - // Defer to solver. - $this->debug("Deferring duplicate {$name}"); - $dups[] = $link; - } - } - return $origin; - } + $preferSource = $config->get('preferred-install') == 'source'; + $preferDist = $config->get('preferred-install') == 'dist'; - /** - * Handle an event callback for pre-dependency solving phase of an install - * or update by adding any duplicate package dependencies found during - * initial merge processing to the request that will be processed by the - * dependency solver. - * - * @param InstallerEvent $event - */ - public function onDependencySolve(InstallerEvent $event) - { - if (!$this->duplicateLinks) { - return; - } + $installer = Installer::create( + $event->getIO(), + // Create a new Composer instance to ensure full processing of + // the merged files. + Factory::create($event->getIO(), null, false) + ); - $request = $event->getRequest(); - foreach ($this->duplicateLinks['require'] as $link) { - $this->debug("Adding dependency {$link}"); - $request->install($link->getTarget(), $link->getConstraint()); - } - if ($this->devMode) { - foreach ($this->duplicateLinks['require-dev'] as $link) { - $this->debug("Adding dev dependency {$link}"); - $request->install($link->getTarget(), $link->getConstraint()); + $installer->setPreferSource($preferSource); + $installer->setPreferDist($preferDist); + $installer->setDevMode($event->isDevMode()); + $installer->setDumpAutoloader($this->state->shouldDumpAutoloader()); + $installer->setOptimizeAutoloader( + $this->state->shouldOptimizeAutoloader() + ); + + if ($this->state->forceUpdate()) { + // Force update mode so that new packages are processed rather + // than just telling the user that composer.json and + // composer.lock don't match. + $installer->setUpdate(true); } - } - } - /** - * Log a debug message - * - * Messages will be output at the "verbose" logging level (eg `-v` needed - * on the Composer command). - * - * @param string $message - */ - protected function debug($message) - { - if ($this->inputOutput->isVerbose()) { - $this->inputOutput->write(" [merge] {$message}"); + $installer->run(); } + // @codeCoverageIgnoreEnd } } // vim:sw=4:ts=4:sts=4:et: diff --git a/vendor/wikimedia/ip-set/COPYING b/vendor/wikimedia/ip-set/COPYING new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/vendor/wikimedia/ip-set/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/vendor/wikimedia/ip-set/README.md b/vendor/wikimedia/ip-set/README.md new file mode 100644 index 00000000..480e1678 --- /dev/null +++ b/vendor/wikimedia/ip-set/README.md @@ -0,0 +1,83 @@ +IPSet +===== + +IPSet is a PHP library for matching IP addresses against a set of CIDR +specifications. + +Here is how you use it: + +
      +// At startup, calculate the optimized data structure for the set:
      +$ipset = new IPSet( array(
      +    '208.80.154.0/26',
      +    '2620:0:861:1::/64',
      +    '10.64.0.0/22',
      +) );
      +
      +// Runtime check against cached set (returns bool):
      +if ( $ipset->match( $ip ) ) {
      +    // ...
      +}
      +
      + +In rough benchmarking, this takes about 80% more time than `in_array()` checks +on a short (a couple hundred at most) array of addresses. It's fast either way +at those levels, though, and IPSet would scale better than in_array if the +array were much larger. + +For mixed-family CIDR sets, however, this code gives well over 100x speedup vs +iterating `IP::isInRange()` over an array of CIDR specs. + +The basic implementation is two separate binary trees (IPv4 and IPv6) as nested +php arrays with keys named 0 and 1. The values false and true are terminal +match-fail and match-success, otherwise the value is a deeper node in the tree. + +A simple depth-compression scheme is also implemented: whole-byte tree +compression at whole-byte boundaries only, where no branching occurs during +that whole byte of depth. A compressed node has keys 'comp' (the byte to +compare) and 'next' (the next node to recurse into if 'comp' matched successfully). + +For example, given these inputs: + +
      +25.0.0.0/9
      +25.192.0.0/10
      +
      + +The v4 tree would look like: + +
      +root4 => array(
      +    'comp' => 25,
      +    'next' => array(
      +        0 => true,
      +        1 => array(
      +            0 => false,
      +            1 => true,
      +        ),
      +    ),
      +);
      +
      + +(multi-byte compression nodes were attempted as well, but were +a net loss in my test scenarios due to additional match complexity) + + +License +------- +Copyright 2014, 2015 Brandon Black + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + diff --git a/vendor/wikimedia/ip-set/src/IPSet.php b/vendor/wikimedia/ip-set/src/IPSet.php new file mode 100644 index 00000000..1c79f067 --- /dev/null +++ b/vendor/wikimedia/ip-set/src/IPSet.php @@ -0,0 +1,284 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @author Brandon Black + */ +namespace IPSet; + +/** + * Matches IP addresses against a set of CIDR specifications + * + * Usage: + * + * // At startup, calculate the optimized data structure for the set: + * $ipset = new IPSet( array( + * '208.80.154.0/26', + * '2620:0:861:1::/64', + * '10.64.0.0/22', + * ) ); + * + * // Runtime check against cached set (returns bool): + * $allowme = $ipset->match( $ip ); + * + * In rough benchmarking, this takes about 80% more time than + * in_array() checks on a short (a couple hundred at most) array + * of addresses. It's fast either way at those levels, though, + * and IPSet would scale better than in_array if the array were + * much larger. + * + * For mixed-family CIDR sets, however, this code gives well over + * 100x speedup vs iterating IP::isInRange() over an array + * of CIDR specs. + * + * The basic implementation is two separate binary trees + * (IPv4 and IPv6) as nested php arrays with keys named 0 and 1. + * The values false and true are terminal match-fail and match-success, + * otherwise the value is a deeper node in the tree. + * + * A simple depth-compression scheme is also implemented: whole-byte + * tree compression at whole-byte boundaries only, where no branching + * occurs during that whole byte of depth. A compressed node has + * keys 'comp' (the byte to compare) and 'next' (the next node to + * recurse into if 'comp' matched successfully). + * + * For example, given these inputs: + * + * 25.0.0.0/9 + * 25.192.0.0/10 + * + * The v4 tree would look like: + * + * root4 => array( + * 'comp' => 25, + * 'next' => array( + * 0 => true, + * 1 => array( + * 0 => false, + * 1 => true, + * ), + * ), + * ); + * + * (multi-byte compression nodes were attempted as well, but were + * a net loss in my test scenarios due to additional match complexity) + */ +class IPSet { + /** @var array $root4 The root of the IPv4 matching tree */ + private $root4 = array( false, false ); + + /** @var array $root6 The root of the IPv6 matching tree */ + private $root6 = array( false, false ); + + /** + * Instantiate the object from an array of CIDR specs + * + * Invalid input network/mask values in $cfg will result in issuing + * E_WARNING and/or E_USER_WARNING and the bad values being ignored. + * + * @param array $cfg Array of IPv[46] CIDR specs as strings + */ + public function __construct( array $cfg ) { + foreach ( $cfg as $cidr ) { + $this->addCidr( $cidr ); + } + + self::recOptimize( $this->root4 ); + self::recCompress( $this->root4, 0, 24 ); + self::recOptimize( $this->root6 ); + self::recCompress( $this->root6, 0, 120 ); + } + + /** + * Add a single CIDR spec to the internal matching trees + * + * @param string $cidr String CIDR spec, IPv[46], optional /mask (def all-1's) + */ + private function addCidr( $cidr ) { + // v4 or v6 check + if ( strpos( $cidr, ':' ) === false ) { + $node =& $this->root4; + $defMask = '32'; + } else { + $node =& $this->root6; + $defMask = '128'; + } + + // Default to all-1's mask if no netmask in the input + if ( strpos( $cidr, '/' ) === false ) { + $net = $cidr; + $mask = $defMask; + } else { + list( $net, $mask ) = explode( '/', $cidr, 2 ); + if ( !ctype_digit( $mask ) || intval( $mask ) > $defMask ) { + trigger_error( "IPSet: Bad mask '$mask' from '$cidr', ignored", E_USER_WARNING ); + return; + } + } + $mask = intval( $mask ); // explicit integer convert, checked above + + // convert $net to an array of integer bytes, length 4 or 16: + $raw = inet_pton( $net ); + if ( $raw === false ) { + return; // inet_pton() sends an E_WARNING for us + } + $rawOrd = array_map( 'ord', str_split( $raw ) ); + + // special-case: zero mask overwrites the whole tree with a pair of terminal successes + if ( $mask == 0 ) { + $node = array( true, true ); + return; + } + + // iterate the bits of the address while walking the tree structure for inserts + $curBit = 0; + while ( 1 ) { + $maskShift = 7 - ( $curBit & 7 ); + $node =& $node[( $rawOrd[$curBit >> 3] & ( 1 << $maskShift ) ) >> $maskShift]; + ++$curBit; + if ( $node === true ) { + // already added a larger supernet, no need to go deeper + return; + } elseif ( $curBit == $mask ) { + // this may wipe out deeper subnets from earlier + $node = true; + return; + } elseif ( $node === false ) { + // create new subarray to go deeper + $node = array( false, false ); + } + } + } + + /** + * Match an IP address against the set + * + * If $ip is unparseable, inet_pton may issue an E_WARNING to that effect + * + * @param string $ip string IPv[46] address + * @return bool True is match success, false is match failure + */ + public function match( $ip ) { + $raw = inet_pton( $ip ); + if ( $raw === false ) { + return false; // inet_pton() sends an E_WARNING for us + } + + $rawOrd = array_map( 'ord', str_split( $raw ) ); + if ( count( $rawOrd ) == 4 ) { + $node =& $this->root4; + } else { + $node =& $this->root6; + } + + $curBit = 0; + while ( 1 ) { + if ( isset( $node['comp'] ) ) { + // compressed node, matches 1 whole byte on a byte boundary + if ( $rawOrd[$curBit >> 3] != $node['comp'] ) { + return false; + } + $curBit += 8; + $node =& $node['next']; + } else { + // uncompressed node, walk in the correct direction for the current bit-value + $maskShift = 7 - ( $curBit & 7 ); + $node =& $node[( $rawOrd[$curBit >> 3] & ( 1 << $maskShift ) ) >> $maskShift]; + ++$curBit; + } + + if ( $node === true || $node === false ) { + return $node; + } + } + } + + /** + * Recursively merges adjacent nets into larger supernets + * + * @param array &$node Tree node to optimize, by-reference + * + * e.g.: 8.0.0.0/8 + 9.0.0.0/8 -> 8.0.0.0/7 + */ + private static function recOptimize( &$node ) { + if ( $node[0] !== false && $node[0] !== true && self::recOptimize( $node[0] ) ) { + $node[0] = true; + } + if ( $node[1] !== false && $node[1] !== true && self::recOptimize( $node[1] ) ) { + $node[1] = true; + } + if ( $node[0] === true && $node[1] === true ) { + return true; + } + return false; + } + + /** + * Recursively compresses a tree + * + * @param array &$node Tree node to compress, by-reference + * @param integer $curBit current depth in the tree + * @param integer $maxCompStart maximum depth at which compression can start, family-specific + * + * This is a very simplistic compression scheme: if we go through a whole + * byte of address starting at a byte boundary with no real branching + * other than immediate false-vs-(node|true), compress that subtree down to a single + * byte-matching node. + * The $maxCompStart check elides recursing the final 7 levels of depth (family-dependent) + */ + private static function recCompress( &$node, $curBit, $maxCompStart ) { + if ( !( $curBit & 7 ) ) { // byte boundary, check for depth-8 single path(s) + $byte = 0; + $cnode =& $node; + $i = 8; + while ( $i-- ) { + if ( $cnode[0] === false ) { + $byte |= 1 << $i; + $cnode =& $cnode[1]; + } elseif ( $cnode[1] === false ) { + $cnode =& $cnode[0]; + } else { + // partial-byte branching, give up + break; + } + } + if ( $i == -1 ) { // means we did not exit the while() via break + $node = array( + 'comp' => $byte, + 'next' => &$cnode, + ); + $curBit += 8; + if ( $cnode !== true ) { + self::recCompress( $cnode, $curBit, $maxCompStart ); + } + return; + } + } + + ++$curBit; + if ( $curBit <= $maxCompStart ) { + if ( $node[0] !== false && $node[0] !== true ) { + self::recCompress( $node[0], $curBit, $maxCompStart ); + } + if ( $node[1] !== false && $node[1] !== true ) { + self::recCompress( $node[1], $curBit, $maxCompStart ); + } + } + } +} diff --git a/vendor/wikimedia/utfnormal/COPYING b/vendor/wikimedia/utfnormal/COPYING new file mode 100644 index 00000000..019694a9 --- /dev/null +++ b/vendor/wikimedia/utfnormal/COPYING @@ -0,0 +1,342 @@ +== GNU GENERAL PUBLIC LICENSE == + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +=== Preamble === + +The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + +We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + +Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and +modification follow. + +== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION == + +'''0.''' This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + +'''1.''' You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +'''2.''' You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + '''a)''' You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + '''b)''' You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + '''c)''' If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +'''3.''' You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + '''a)''' Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + '''b)''' Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + '''c)''' Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + +'''4.''' You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +'''5.''' You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +'''6.''' Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +'''7.''' If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +'''8.''' If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + +'''9.''' The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + +'''10.''' If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +=== NO WARRANTY === + +'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + +'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + '''END OF TERMS AND CONDITIONS''' + +== How to Apply These Terms to Your New Programs == + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/vendor/wikimedia/utfnormal/Doxyfile b/vendor/wikimedia/utfnormal/Doxyfile new file mode 100644 index 00000000..c091ecb7 --- /dev/null +++ b/vendor/wikimedia/utfnormal/Doxyfile @@ -0,0 +1,32 @@ +# Configuration file for Doxygen + +PROJECT_NAME = utfnormal +PROJECT_BRIEF = "Unicode normalization for PHP" + +OUTPUT_DIRECTORY = doc + +JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = YES + +WARN_NO_PARAMDOC = YES + +INPUT = README.md src/ +FILE_PATTERNS = *.php +RECURSIVE = YES +# Requires doxygen 1.8.3+ +USE_MDFILE_AS_MAINPAGE = README.md + +HTML_DYNAMIC_SECTIONS = YES +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 + +GENERATE_LATEX = NO + +HAVE_DOT = YES +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +TEMPLATE_RELATIONS = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +# Makes dot run faster. Requires graphviz >1.8.10 +DOT_MULTI_TARGETS = YES diff --git a/vendor/wikimedia/wrappedstring/LICENSE b/vendor/wikimedia/wrappedstring/LICENSE new file mode 100644 index 00000000..5d34a4b3 --- /dev/null +++ b/vendor/wikimedia/wrappedstring/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 Timo Tijhof + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/wikimedia/wrappedstring/README.md b/vendor/wikimedia/wrappedstring/README.md new file mode 100644 index 00000000..5c8b8fb0 --- /dev/null +++ b/vendor/wikimedia/wrappedstring/README.md @@ -0,0 +1,24 @@ +WrappedString +============= + +WrappedString is a small PHP library for compacting redundant string-wrapping +code in text output. The most common use-case is to eliminate redundant runs of +HTML open/close tags and JavaScript boilerplate. + +Here is how you use it: + +
      +use WrappedString\WrappedString;
      +
      +$buffer = array(
      +	new WrappedString( '[foo]', '[', ']' ),
      +	new WrappedString( '[bar]', '[', ']' ),
      +);
      +$output = WrappedString::join( "\n", $buffer );
      +// Result: '[foobar]'
      +
      + +License +------- + +The project is licensed under the MIT license. diff --git a/vendor/wikimedia/wrappedstring/src/WrappedString.php b/vendor/wikimedia/wrappedstring/src/WrappedString.php new file mode 100644 index 00000000..ed2593de --- /dev/null +++ b/vendor/wikimedia/wrappedstring/src/WrappedString.php @@ -0,0 +1,110 @@ + + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * @file + */ + +namespace WrappedString; + +class WrappedString { + /** @var string */ + protected $value; + + /** @var string */ + protected $prefix; + + /** @var string */ + protected $suffix; + + /** + * @param string $value + * @param string $prefix + * @param string $suffix + */ + public function __construct( $value, $prefix = null, $suffix = null ) { + $this->value = $value; + $this->prefix = $prefix; + $this->suffix = $suffix; + } + + /** + * @param string $content + * @return WrappedString Newly wrapped string + */ + protected function extend( $value ) { + $wrap = clone $this; + $suffixlen = strlen( $this->suffix ); + if ( $suffixlen ) { + $wrap->value = substr( $this->value, 0, -$suffixlen ); + } + $wrap->value .= substr( $value, strlen( $this->prefix ) ); + return $wrap; + } + + /** + * Merge consecutive wrapped strings with the same before/after values. + * + * Does not modify the array or the WrappedString objects. + * + * @param WrappedString[] $wraps + * @return WrappedString[] + */ + protected static function compact( array &$wraps ) { + $consolidated = array(); + $prev = current( $wraps ); + while ( ( $wrap = next( $wraps ) ) !== false ) { + if ( $prev instanceof WrappedString + && $wrap instanceof WrappedString + && $prev->prefix !== null + && $prev->prefix === $wrap->prefix + && $prev->suffix !== null + && $prev->suffix === $wrap->suffix + ) { + $prev = $prev->extend( $wrap->value ); + } else { + $consolidated[] = $prev; + $prev = $wrap; + } + } + // Add last one + $consolidated[] = $prev; + + return $consolidated; + } + + /** + * Join a several wrapped strings with a separator between each. + * + * @param string $sep + * @param WrappedString[] $wraps + * @return string + */ + public static function join( $sep, array $wraps ) { + return implode( $sep, self::compact( $wraps ) ); + } + + /** @return string */ + public function __toString() { + return $this->value; + } +} diff --git a/vendor/zordius/lightncandy/HISTORY.md b/vendor/zordius/lightncandy/HISTORY.md index 577f953d..60237bbb 100644 --- a/vendor/zordius/lightncandy/HISTORY.md +++ b/vendor/zordius/lightncandy/HISTORY.md @@ -4,106 +4,145 @@ HISTORY master current trunk * align with handlebars.js master -v0.17 https://github.com/zordius/lightncandy/tree/v0.17 - * 7bcce4c1a7 support {{@last}} for {{#each}} on both object and array. +v0.21 https://github.com/zordius/lightncandy/tree/v0.21 + * align with handlebars.js 3.0.3 + * 9f24268d57 support FLAG_BARE to remove PHP start/end tags + * 60d5a46c55 handle object/propery merge when deal with partial + * d0130bf7e5 support undefined `{{helper undefined}}` + * 8d228606f7 support `lcrun` to use customized render library when compile() + * d0bad115f0 remove tmp PHP file when prepare() now + * d84bbb4519 support keeping tmp PHP file when prepare() + * ee833ae2f8 fix syntax validator bug on `{{helper "foo[]"}}` + * 30b891ab28 fix syntax validator bug on `{{helper 'foo[]'}}` + * 1867f1cc37 now count subexpression usage correctly + * 78ef9b8a89 new syntax validator on handlebars variable name + +v0.20 https://github.com/zordius/lightncandy/tree/v0.20 + * align with handlebars.js 3.0.0 + * 3d9a557af9 fix `{{foo (bar ../abc)}}` compile bug + * 7dc16ac255 refine custom helper error detection logic + * 72d32dc299 fix subexpression parsing bug inside `{{#each}}` + * d1f1b93130 support context access inside a hbhelper by `$options['_this']` + +v0.19 https://github.com/zordius/lightncandy/tree/v0.19 + * align with handlebars.js 3.0.0 + * 5703851e49 fix `{{foo bar=['abc=123']}}` parsing bug + * 7b4e36a1e3 fix `{{foo bar=["abc=123"]}}` parsing bug + * c710c8349b fix `{{foo bar=(helper a b c)}}` parsing bug + * 4bda1c6f41 fix subexpression+builtin block helper (EX: `{{#if (foo bar)}}`) parsing bug + * 6fdba10fc6 fix `{{foo ( bar) or " car" or ' cat' or [ cage]}}` pasing bug + * 0cd5f2d5e2 fix indent issue when custom helper inside a partial + * 296ea89267 support dynamic partial `{{> (foo)}}` + * f491d04bd5 fix `{{../foo}}` look up inside root scope issue + * 38fba8a5a5 fix scope issue for hbhelpers + * a24a0473e2 change internal variable structure and fix for `{{number}}` + * 7ae8289b7e fix escape in double quoted string bug + * 90adb5531b fix `{{#if 0.0}}` logic to behave as false + * 004a6ddffe fix `{{../foo}}` double usage count bug + * 9d55f12c5a fix subexpression parsing bug when line change inside it + +v0.18 https://github.com/zordius/lightncandy/tree/v0.18 + * align with handlebars.js 2.0.0 + * 7bcce4c1a7 support `{{@last}}` for `{{#each}}` on both object and array * b0c44c3b40 remove ending \n in lightncandy.php - * e130875d5a support single quoted string input: {{foo 'bar'}}. - * c603aa39d8 support `renderex` to extend anything in render function. - * f063e5302c now render function debug constants works well in standalone mode. - * 53f6a6816d fix parsing bug when there is a `=` inside single quoted string. - * 2f16c0c393 now really autoload when installed with composer. - * c4da1f576c supports {{^myHelper}}. + * e130875d5a support single quoted string input: `{{foo 'bar'}}` + * c603aa39d8 support `renderex` to extend anything in render function + * f063e5302c now render function debug constants works well in standalone mode + * 53f6a6816d fix parsing bug when there is a `=` inside single quoted string + * 2f16c0c393 now really autoload when installed with composer + * c4da1f576c supports `{{^myHelper}}` v0.17 https://github.com/zordius/lightncandy/tree/v0.17 + * align with handlebars.js 2.0.0 * 3b48a0acf7 fix parsing bug when FLAG_NOESCAPE enabled * 5c774b1b08 fix hbhelpers response error with options['fn'] when FLAG_BESTPERFORMANCE enabled * c60fe70bdb fix hbhelpers response error with options['inverse'] when FLAG_BESTPERFORMANCE enabled * e19b3e3426 provide options['root'] and options['_parent'] to hbhelpers - * d8a288e83b refine variable parsing logic to support {{@../index}}, {{@../key}}, etc. + * d8a288e83b refine variable parsing logic to support `{{@../index}}`, `{{@../key}}`, etc. v0.16 https://github.com/zordius/lightncandy/tree/v0.16 * align with handlebars.js 2.0.0 - * 4f036aff62 better error message for named arguments. - * 0b462a387b support {{#with var}} ... {{else}} ... {{/with}}. - * 4ca624f651 fix 1 ANSI code error. - * 01ea3e9f42 support instances with PHP __call magic funciton. - * 38059036a7 support {{#foo}} or {{#each foo}} on PHP Traversable instance. - * 366f5ec0ac add FLAG_MUSTACHESP and FLAG_MUSTACHEPAIN into FLAG_HANDLEBARS and FLAG_HANDLEBARSJS now. - * b61d7b4a81 align with handlebars.js standalone tags behavior. - * b211e1742e now render false as 'false'. - * 655a2485be fix bug for {{helper "==="}} + * 4f036aff62 better error message for named arguments + * 0b462a387b support `{{#with var}}` ... `{{else}}` ... `{{/with}}` + * 4ca624f651 fix 1 ANSI code error + * 01ea3e9f42 support instances with PHP __call magic funciton + * 38059036a7 support `{{#foo}}` or `{{#each foo}}` on PHP Traversable instance + * 366f5ec0ac add FLAG_MUSTACHESP and FLAG_MUSTACHEPAIN into FLAG_HANDLEBARS and FLAG_HANDLEBARSJS now + * b61d7b4a81 align with handlebars.js standalone tags behavior + * b211e1742e now render false as 'false' + * 655a2485be fix bug for `{{helper "==="}}` * bb58669162 support FLAG_NOESCAPE v0.15 https://github.com/zordius/lightncandy/tree/v0.15 * align with handlebars.js 2.0.0 - * 4c750806e8 fix for \ in template - * 12ab6626d6 support escape. \{{foo}} will be rendered as is. ( handlebars spec , require FLAG_SLASH ) + * 4c750806e8 fix for `\` in template + * 12ab6626d6 support escape. `\{{foo}}` will be rendered as is. ( handlebars spec , require FLAG_SLASH ) * 876bd44d9c escape ` to &#x60; ( require FLAG_JSQUOTE ) - * f1f388ed79 support {{^}} as {{else}} ( require FLAG_ELSE ) - * d5e17204b6 support {{#each}} == {{#each .}} now. - * 742126b440 fix {{>foo/bar}} partial not found bug. - * d62c261ff9 support numbers as helper input {{helper 0.1 -1.2}} - * d40c76b84f support escape in string arguments {{helper "test \" double quote"}} - * ecb57a2348 fix for missing partial in partial bug. - * 1adad5dbfa fix {{#with}} error when FLAG_WITH not used. - * ffd5e35c2d fix error when rendering array value as {{.}} without FLAG_JSOBJECT. - * bd4987adbd support changing context on partial {{>foo bar}} ( require FLAG_RUNTIMEPARTIAL ) - * f5decaa7e3 support name sarguments on partial {{>foo bar name=tee}} . fix {{..}} bug. - * c20bb36457 support `partials` in options. - * e8779dbe8c change default `basedir` hehavior, stop partial files lookup when do not prodive `basedir` in options. - * c4e3401fe4 fix {{>"test"}} or {{>[test]}} or {{>1234}} bug. - * e59f62ea9b fix seciton behavior when input is object, and add one new flag: FLAG_MUSTACHESEC. - * 80eaf8e007 use static::method not self::method for subclass. + * f1f388ed79 support `{{^}}` as `{{else}}` ( require FLAG_ELSE ) + * d5e17204b6 support `{{#each}}` == `{{#each .}}` now + * 742126b440 fix `{{>foo/bar}} partial not found bug + * d62c261ff9 support numbers as helper input `{{helper 0.1 -1.2}}` + * d40c76b84f support escape in string arguments `{{helper "test \" double quote"}}` + * ecb57a2348 fix for missing partial in partial bug + * 1adad5dbfa fix `{{#with}}` error when FLAG_WITH not used + * ffd5e35c2d fix error when rendering array value as `{{.}}` without FLAG_JSOBJECT + * bd4987adbd support changing context on partial `{{>foo bar}}` ( require FLAG_RUNTIMEPARTIAL ) + * f5decaa7e3 support name sarguments on partial `{{>foo bar name=tee}}` . fix `{{..}}` bug + * c20bb36457 support `partials` in options + * e8779dbe8c change default `basedir` hehavior, stop partial files lookup when do not prodive `basedir` in options + * c4e3401fe4 fix `{{>"test"}}` or `{{>[test]}}` or `{{>1234}}` bug + * e59f62ea9b fix seciton behavior when input is object, and add one new flag: FLAG_MUSTACHESEC + * 80eaf8e007 use static::method not self::method for subclass * 0bad5c8f20 fix usedFeature generation bugs v0.14 https://github.com/zordius/lightncandy/tree/v0.14 * align with handlebars.js 2.0.0-alpha.4 * fa6225f278 support boolen value in named arguments for cusotm helper - * 160743e1c8 better error message when unmatch {{/foo}} tag detected - * d9a9416907 support {{&foo}} - * 8797485cfa fix {{^foo}} logic when foo is empty list + * 160743e1c8 better error message when unmatch `{{/foo}}` tag detected + * d9a9416907 support `{{&foo}}` + * 8797485cfa fix `{{^foo}}` logic when foo is empty list * 523b1373c4 fix handlebars custom helper interface * a744a2d522 fix bad syntax when FLAG_RENDER_DEBUG + helpers * 0044f7bd10 change FLAG_THIS behavoir * b5b0739b68 support recursive context lookup now ( mustache spec , require FLAG_MUSTACHELOOKUP ) * 096c241fce support standalone tag detection now ( mustache spec , require FLAG_MUSTACHESP ) - * cea46c9a67 support {{=<% %>=}} to set delimiter - * 131696af11 support subexpression {{helper (helper2 foo) bar}} + * cea46c9a67 support `{{=<% %>=}}` to set delimiter + * 131696af11 support subexpression `{{helper (helper2 foo) bar}}` * 5184d41be6 support runtime/recursive partial ( require FLAG_RUNTIMEPARTIAL ) * 6408917f76 support partial indent ( mustache spec , require FLAG_MUSTACHEPAIN ) v0.13 https://github.com/zordius/lightncandy/tree/v0.13 * align with handlebars.js 2.0.0-alpha.4 - * e5a8fe3833 fix issue #46 ( error with {{this.foo.bar}} ) + * e5a8fe3833 fix issue #46 ( error with `{{this.foo.bar}}` ) * ea131512f9 fix issue #44 ( error with some helper inline function PHP code syntax ) * 522591a0c6 fix issue #49 ( error with some helper user function PHP code syntax ) - * c4f7e1eaac support {{foo.bar}} lookup on instance foo then property/method bar ( flagd FLAG_PROPERTY or FLAG_METHOD required ) + * c4f7e1eaac support `{{foo.bar}} lookup on instance foo then property/method bar ( flagd FLAG_PROPERTY or FLAG_METHOD required ) * 0f4c0daa4b stop simulate Javascript output for array when pass input to custom helpers * 22d07e5f0f BIG CHANGE of custom helper interface v0.12 https://github.com/zordius/lightncandy/tree/v0.12 * align with handlebars.js 2.0.0-alpha.2 - * 64db34cf65 support {{@first}} and {{@last}} + * 64db34cf65 support `{{@first}}` and `{{@last}}` * bfa1fbef97 add new flag FLAG_SPVARS * 10a4623dc1 remove json schema support * 240d9fa290 only export used LCRun2 functions when compile() with FLAG_STANDALONE now - * 3fa897c98c rename LCRun2 to LCRun3 for interface changed, old none standalone templates will error with newer version. + * 3fa897c98c rename LCRun2 to LCRun3 for interface changed, old none standalone templates will error with newer version * e0838c7418 now can output debug template map with ANSI color * 80dbeab63d fix php warning when compile with custom helper or block custom helper * 8ce6268b64 support Handlebars.js style custom helper v0.11 https://github.com/zordius/lightncandy/tree/v0.11 * align with handlebars.js 2.0.0-alpha.2 - * a275d52c97 use php array, remove val(). + * a275d52c97 use php array, remove val() * 8834914c2a only export used custom helper into render function now * eb6d82d871 refine option flag consts * fc437295ed refine comments for phpdoc * fbf116c3e2 fix for tailing ; after helper functions - * f47a2d5014 fix for wrong param when new Exception + * f47a2d5014 fix for wrong param when new Exception * 94e71ebcbd add isset() check for input value - * a826b8a1ab support {{else}} in {{#each}} now - * 25dac11bb7 support {{!-- comments --}} now (this extension allow }} apperas in the comments) - * e142b6e116 support {{@root}} or {{@root.foo.bar}} now + * a826b8a1ab support `{{else}}` in `{{#each}}` now + * 25dac11bb7 support `{{!-- comments --}}` now (this handlebars.js extension allow `}}` apperas in the comments) + * e142b6e116 support `{{@root}}` or `{{@root.foo.bar}}` now * 58c8d84aa2 custom helper can return extra flag to change html encoded behavior now v0.10 https://github.com/zordius/lightncandy/tree/v0.10 @@ -111,10 +150,10 @@ v0.10 https://github.com/zordius/lightncandy/tree/v0.10 * 4c9f681080 file name changed: lightncandy.inc => lightncandy.php * e3de01081c some minor fix for json schema * 1feec458c7 new variable handling logic, save variable name parsing time when render() . rendering performance improved 10~30%! - * 3fa897c98c rename LCRun to LCRun2 for interface changed, old none standalone templates will error with newer version. - * 43a6d33717 fix for {{../}} php warning message + * 3fa897c98c rename LCRun to LCRun2 for interface changed, old none standalone templates will error with newer version + * 43a6d33717 fix for `{{../}}` php warning message * 9189ebc1e4 now auto push documents from Travis CI - * e077d0b631 support named arguments for custom helpers {{helper name=value}} + * e077d0b631 support named arguments for custom helpers `{{helper name=value}}` * 2331b6fe55 support block custom helpers * 4fedaa25f7 support number value as named arguments * 6a91ab93d2 fix for default options and php warnings @@ -122,13 +161,13 @@ v0.10 https://github.com/zordius/lightncandy/tree/v0.10 v0.9 https://github.com/zordius/lightncandy/tree/v0.9 * align with handlebars.js 1.3 - * a55f2dd067 support both {{@index}} and {{@key}} when {{#each an_object}} + * a55f2dd067 support both `{{@index}}` and `{{@key}}` when `{{#each an_object}}` * e59f931ea7 add FLAG_JSQUOTE support * 92b3cf58af report more than 1 error when compile() * 93cc121bcf test for wrong variable name format in test/error.php - * 41c1b431b4 support advanced variable naming {{foo.[bar].10}} now + * 41c1b431b4 support advanced variable naming `{{foo.[bar].10}}` now * 15ce1a00a8 add FLAG_EXTHELPER option - * f51337bde2 support space control {{~sometag}} or {{sometag~}} + * f51337bde2 support space control `{{~sometag}}` or `{{sometag~}}` * fe3d67802e add FLAG_SPACECTL option * 920fbb3039 support custom helper * 07ae71a1bf migrate into Travis CI @@ -141,30 +180,31 @@ v0.9 https://github.com/zordius/lightncandy/tree/v0.9 v0.8 https://github.com/zordius/lightncandy/tree/v0.8 * align with handlebars.js 1.0.12 * aaec049 fix partial in partial not works bug - * 52706cc fix for {{#var}} and {{^var}} , now when var === 0 means true - * 4f7f816 support {{@key}} and {{@index}} in {{#each var}} - * 63aef2a prevent array_diff_key() PHP warning when {{#each}} on none array value - * 10f3d73 add more is_array() check when {{#each}} and {{#var}} - * 367247b fix {{#if}} and {{#unless}} when value is an empty array + * 52706cc fix for `{{#var}}` and `{{^var}}` , now when var === 0 means true + * 4f7f816 support `{{@key}}` and `{{@index}}` in `{{#each var}}` + * 63aef2a prevent array_diff_key() PHP warning when `{{#each}}` on none array value + * 10f3d73 add more is_array() check when `{{#each}}` and `{{#var}}` + * 367247b fix `{{#if}}` and `{{#unless}}` when value is an empty array * c76c0bb returns null if var is not exist in a template [contributed by dtelyukh@github.com] * d18bb6d add FLAG_ECHO support - * aec2b2b fix {{#if}} and {{#unless}} when value is an empty string + * aec2b2b fix `{{#if}}` and `{{#unless}}` when value is an empty string * 8924604 fix variable output when false in an array * e82c324 fix for ifv and ifvar logic difference - * 1e38e47 better logic on var name checking. now support {{0}} in the loop, but it is not handlebars.js standard + * 1e38e47 better logic on var name checking. now support `{{0}}` in the loop, but it is not handlebars.js standard v0.7 https://github.com/zordius/lightncandy/tree/v0.7 + * align with handlebarsjs 1.0.11 * add HISTORY.md * 777304c change compile format to include in val, isec, ifvar - * 55de127 support {{../}} in {{#each}} + * 55de127 support `{{../}}` in `{{#each}}` * 57e90af fix parent levels detection bug - * 96bb4d7 fix bugs for {{#.}} and {{#this}} + * 96bb4d7 fix bugs for `{{#.}}` and `{{#this}}` * f4217d1 add ifv and unl 2 new methods for LCRun - * 3f1014c fix {{#this}} and {{#.}} bug when used with {{../var}} - * cbf0b28 fix {{#if}} logic error when using {{../}} - * 2b20ef8 fix {{#with}} + {{../}} bug + * 3f1014c fix `{{#this}}` and `{{#.}}` bug when used with `{{../var}}` + * cbf0b28 fix `{{#if}}` logic error when using `{{../}}` + * 2b20ef8 fix `{{#with}}` + `{{../}}` bug * 540cd44 now support FLAG_STANDALONE - * 67ac5ff support {{>partial}} + * 67ac5ff support `{{>partial}}` * 98c7bb1 detect unclosed token now v0.6 https://github.com/zordius/lightncandy/tree/v0.6 @@ -174,8 +214,8 @@ v0.6 https://github.com/zordius/lightncandy/tree/v0.6 * fdc753b fix #each and section logic for 018-hb-withwith-006 * e6cc95a add FLAG_PARENT, detect template error when scan() * 1980691 make new LCRun::val() method to normal path.val logic - * 110d24f {{#if path.var}} bug fixed - * d6ae2e6 fix {{#with path.val}} when input value is null + * 110d24f `{{#if path.var}}` bug fixed + * d6ae2e6 fix `{{#with path.val}}` when input value is null * 71cf074 fix for 020-hb-doteach testcase v0.5 https://github.com/zordius/lightncandy/tree/v0.5 diff --git a/vendor/zordius/lightncandy/LICENSE.txt b/vendor/zordius/lightncandy/LICENSE.txt index 3df560d4..069e6cef 100644 --- a/vendor/zordius/lightncandy/LICENSE.txt +++ b/vendor/zordius/lightncandy/LICENSE.txt @@ -1,7 +1,7 @@ Copyrights for code authored by Yahoo! Inc. is licensed under the following terms: MIT License -Copyright (c) 2013, 2014 Yahoo! Inc. All Rights Reserved. +Copyright (c) 2013-2015 Yahoo! Inc. All Rights Reserved. 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 diff --git a/vendor/zordius/lightncandy/README.md b/vendor/zordius/lightncandy/README.md index 2afd6b9c..d5a3a5bc 100644 --- a/vendor/zordius/lightncandy/README.md +++ b/vendor/zordius/lightncandy/README.md @@ -7,7 +7,7 @@ Travis CI status: [![Unit testing](https://travis-ci.org/zordius/lightncandy.svg Scrutinizer CI status: [![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/zordius/lightncandy.svg)](https://scrutinizer-ci.com/g/zordius/lightncandy/) -Package on packagist: [![Latest Stable Version](https://poser.pugx.org/zordius/lightncandy/v/stable.svg)](https://packagist.org/packages/zordius/lightncandy) [![License](https://poser.pugx.org/zordius/lightncandy/license.svg)](https://github.com/zordius/lightncandy/blob/master/LICENSE.txt) [![Total Downloads](https://poser.pugx.org/zordius/lightncandy/downloads.svg)](https://packagist.org/packages/zordius/lightncandy) [![HHVM Status](http://hhvm.h4cc.de/badge/zordius/lightncandy.svg)](http://hhvm.h4cc.de/package/zordius/lightncandy) +Package on packagist: [![Latest Stable Version](https://poser.pugx.org/zordius/lightncandy/v/stable.svg)](https://packagist.org/packages/zordius/lightncandy) [![License](https://poser.pugx.org/zordius/lightncandy/license.svg)](https://github.com/zordius/lightncandy/blob/master/LICENSE.txt) [![Total Downloads](https://poser.pugx.org/zordius/lightncandy/downloads)](https://packagist.org/packages/zordius/lightncandy) [![HHVM Status](http://hhvm.h4cc.de/badge/zordius/lightncandy.svg)](http://hhvm.h4cc.de/package/zordius/lightncandy) Features -------- @@ -21,7 +21,7 @@ Features * Runs 4~10 times faster than mustache-php. * Runs 10~30 times faster than handlebars.php. * Detail performance test reports can be found here, go http://zordius.github.io/HandlebarsTest/ to see charts. -* **SMALL!** single PHP file, only 110K! +* **SMALL!** single PHP file, only 120K! * **ROBUST!** * 100% support mustache spec v1.1.2 (without lambda module) * Supports almost all handlebars.js spec @@ -133,8 +133,8 @@ Default is to compile the template as PHP, which can be run as fast as possible * `FLAG_RUNTIMEPARTIAL` : compile partial as runtime function, This enables recursive partials or context change for partials. * `FLAG_SLASH` : Skip a delimiter when it behind `\` . * `FLAG_ELSE` : support `{{else}}` or `{{^}}` as handlebars specification. Otherwise, `{{else}}` will be resolved as normal variable , and {{^}} will cause template error. -* `FLAG_PROPERTY` : support object instance attribute access. -* `FLAG_METHOD` : support object instance method access. +* `FLAG_PROPERTY` : support object instance attribute access. You MUST apply this if your data contains object. And, the rendering performance will be worse. +* `FLAG_METHOD` : support object instance method access. You MUST apply this if your data contains object. And, the rendering performance will be worse. * `FLAG_INSTANCE` : same with `FLAG_PROPERTY` + `FLAG_METHOD` * `FLAG_SPACECTL` : support space control `{{~ }}` or `{{ ~}}` in template. Otherwise, `{{~ }}` or `{{ ~}}` will cause template error. * `FLAG_SPVARS` : support special variables include @root, @index, @key, @first, @last. Otherwise, compile these variable names with default parsing logic. @@ -142,13 +142,13 @@ Default is to compile the template as PHP, which can be run as fast as possible * `FLAG_HANDLEBARS` : support all handlebars extensions (which mustache do not supports) , same with `FLAG_THIS` + `FLAG_WITH` + `FLAG_PARENT` + `FLAG_JSQUOTE` + `FLAG_ADVARNAME` + `FLAG_NAMEDARG` + `FLAG_SLASH` + `FLAG_ELSE` + `FLAG_MUSTACHESP` + `FLAG_MUSTACHEPAIN`. * `FLAG_HANDLEBARSJS` : align with handlebars.js behaviors, same with `FLAG_JS` + `FLAG_HANDLEBARS`. * `FLAG_MUSTACHESP` : align line change and spacing behaviors with mustache specification. -* `FLAG_MUSTACHELOOKUP` : align recursive lookup up behaviors with mustache specification. +* `FLAG_MUSTACHELOOKUP` : align recursive lookup up behaviors with mustache specification. And, the rendering performance will be worse. * `FLAG_MUSTACHEPAIN` : align partial indent behavior with mustache specification. -* `FLAG_MUSTACHESEC` : align section `{{#foo}}` context behavior with mustache specification. -* `FLAG_MUSTACHE` : support all mustache specification, same with `FLAG_ERROR_SKIPPARTIAL` + `FLAG_MUSTACHESP` + `FLAG_MUSTACHELOOKUP` + `FLAG_MUSTACHEPAIN` + `FLAG_MUSTACHESEC`. +* `FLAG_MUSTACHE` : support all mustache specification, same with `FLAG_ERROR_SKIPPARTIAL` + `FLAG_MUSTACHESP` + `FLAG_MUSTACHELOOKUP` + `FLAG_MUSTACHEPAIN`. * `FLAG_ECHO` : compile to `echo 'a', $b, 'c';` to improve performance. This will slow down rendering when the template and data are simple, but will improve 1% ~ 7% when the data is big and looping in the template. * `FLAG_BESTPERFORMANCE` : same with `FLAG_ECHO` now. This flag may be changed base on performance testing result in the future. * `FLAG_RENDER_DEBUG` : generate debug template to show error when rendering. With this flag, the performance of rendering may be slowed. +* `FLAG_BARE`: generate PHP code without PHP tags `` Partial Support --------------- @@ -205,8 +205,13 @@ By default, partial uses the same context with original template. If you want to {{>partial_name .}} // Same as {{>partial_name}} {{>partial_name foo}} // Change input context to foo, FLAG_RUNTIMEPARTIAL required {{>partial_name ..}} // use {{..}} as new input context, FLAG_RUNTIMEPARTIAL required + +{{>partial_name .. key=bar}} // use {{..}} as new input context, FLAG_RUNTIMEPARTIAL required + // also merge key into new context. ``` +You can use dynamic partial name by passing a custom helper as subexpression syntax, for example: `{{> (foo)}}` . the return value of custom helper `foo` will be the partial name. When you using dynamic partial, LightnCandy will compile all partial inside the `partials` option into template. (**TODO: add an example to show how to provide partials across templates to reduce size**) + Custom Helper ------------- @@ -321,6 +326,19 @@ return Array('Not&Same output \' " Ya!', 'enc'); return Array('Not&Same output \' " Ya!', 'encq'); ``` +In most case, a custom helper should always return a string. If you design a custom helper to be executed inside a subexpression, you can return an object or an array by this way: + +```php +// return an object +return Array($anObject, 'asis'); + +// in another way +return Array($anObject, 'raw'); + +// return Array(1, 3, 5) +return Array(Array(1, 3, 5), 'any_string_but_not_enc_nor_encq'); +``` + Block Custom Helper ------------------- @@ -400,7 +418,7 @@ The mission of a block custom helper is only focus on providing different contex Handlebars.js' Custom Helper ---------------------------- -You can implement helpers more like Handlebars.js way with `hbhelpers` option, all matched single custom helper and block custom helper will be handled. In Handlebars.js, a block custom helper can rendener child block by executing options->fn, and change context by send new context as first parameter. Here are some examples to explain the behavior of `hbhelpers` custom helper: +You can implement helpers more like Handlebars.js way with `hbhelpers` option, all matched single custom helper and block custom helper will be handled. In Handlebars.js, a block custom helper can rendener child block by executing `options.fn`; or change context by send new context as first parameter. Here are some examples to explain the behavior of `hbhelpers` custom helper: **#mywith (context change)** * LightnCandy @@ -504,6 +522,30 @@ Handlebars.registerHelper('sample', function(arg1, arg2, options) { }); ``` +**Data variables and context** + +You can get special data variables from `$options['data']`. Using `$options['_this']` to receive current context. + +```php +$php = LightnCandy::compile($template, Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'getRoot' => function ($options) { + print_($options['_this']); // dump current context + return $options['data']['root']; // same as {{@root}} + } + ) +)); +``` + +* Handlebars.js +```javascript +Handlebars.registerHelper('getRoot', function(options) { + console.log(this); // dump current context + return options.data.root; // same as {{@root}} +}); +``` + **Escaping** When a Handlebars.js style custom helper be used as block tags, LightnCandy will not escape the result. When it is a single {{...}} tag, LightnCandy will escape the result. To change the escape behavior, you can return extended information by Array(), please read Custom Helper Escaping for more. @@ -589,10 +631,32 @@ function ($in) {$ Please make sure the passed in `renderex` is valid PHP, LightnCandy will not check it. +Customize Rendering Runtime Class +--------------------------------- + +If you want to extend `LCRun3` class and replace default rendering runtime library, you may use `lcrun` when `compile()` . For example, this sample will generate render function based on your extended `MyLCRunClass`: + +```php +// Customized rendering runtime library to debug {{{foo}}} +class MyLCRunClass extends LCRun3 { + public static function raw($cx, $v) { + return '[[DEBUG:raw()=>' . var_export($v, true) . ']]'; + } +} + +// Use MyLCRunClass as rendering runtime library +$php = LightnCandy::compile($template, Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'lcrun' => 'MyLCRunClass' +)); +``` + +Please make sure `MyLCRunClass` exists when compile() or rendering based on your `FLAG_STANDALONE` . + Unsupported Feature (so far) ---------------------------- -* [NEVER] `{{foo/bar}}` style variable name, it is deprecated in official handlebars.js document. +* [NEVER] `{{foo/bar}}` style variable name, it is deprecated in official handlebars.js document, please use this style: `{{foo.bar}}`. * [maybe] mustache lambda : runtime time compile based on input value is far from lightncandy nature, not in the plan now. Suggested Handlebars Template Practices @@ -651,6 +715,8 @@ Go http://handlebarsjs.com/ to see more feature description about handlebars.js. * `{{../var}}` : parent template scope. (require `FLAG_PARENT`) * `{{>file}}` : partial; include another template inside a template. * `{{>file foo}}` : partial with new context (require `FLAG_RUNTIMEPARTIAL`) +* `{{>file foo bar=another}}` : partial with new context which mixed with followed key value (require `FLAG_RUNTIMEPARTIAL`) +* `{{>(helper) foo}}` : include dynamic partial by name provided from a helper (require `FLAG_RUNTIMEPARTIAL`) * `{{@index}}` : references to current index in a `{{#each}}` loop on an array. (require `FLAG_SPVARS`) * `{{@key}}` : references to current key in a `{{#each}}` loop on an object. (require `FLAG_SPVARS`) * `{{@root}}` : references to root context. (require `FLAG_SPVARS`) @@ -665,6 +731,13 @@ Go http://handlebarsjs.com/ to see more feature description about handlebars.js. * `{{{helper var}}}` : Execute custom helper then render the result * `{{helper var}}` : Execute custom helper then render the HTML escaped result * `{{helper "str"}}` or `{{helper 'str'}}` : Execute custom helper with string arguments (require `FLAG_ADVARNAME`) +* `{{helper 123 null true false undefined}}` : Pass number, true, false, null or undefined into helper * `{{helper name1=var name2=var2}}` : Execute custom helper with named arguments (require `FLAG_NAMEDARG`) * `{{#helper ...}}...{{/helper}}` : Execute block custom helper * `{{helper (helper2 foo) bar}}` : Execute custom helpers as subexpression (require `FLAG_ADVARNAME`) + +Framework Integration +--------------------- + +- [Slim 3.0.x](https://github.com/endel/slim-lightncandy-view) +- [Laravel 4](https://github.com/samwalshnz/lightncandy-l4) diff --git a/vendor/zordius/lightncandy/UPGRADE.md b/vendor/zordius/lightncandy/UPGRADE.md index 01f4c15b..680137be 100644 --- a/vendor/zordius/lightncandy/UPGRADE.md +++ b/vendor/zordius/lightncandy/UPGRADE.md @@ -5,6 +5,10 @@ Upgrade Notice * Recompile your none standalone templates when you upgrade LightnCandy. +CURRENT MASTER +-------------- +* Option FLAG_MUSTACHESEC removed, no need to use this flag anymore. + Version v0.13 ------------- * The interface of custom helpers was changed from v0.13 . if you use this feature you may need to modify your custom helper functions. diff --git a/vendor/zordius/lightncandy/build/gen_doc b/vendor/zordius/lightncandy/build/gen_doc index 428e619d..807bc21a 100644 --- a/vendor/zordius/lightncandy/build/gen_doc +++ b/vendor/zordius/lightncandy/build/gen_doc @@ -1,5 +1,5 @@ #!/bin/sh -curl -O https://cloud.github.com/downloads/apigen/apigen/ApiGen-2.8.0-standalone.zip +curl -O https://cloud.github.com/downloads/ApiGen/ApiGen/ApiGen-2.8.0-standalone.zip unzip -oq ApiGen-2.8.0-standalone.zip rm ApiGen-2.8.0-standalone.zip php -dopen_basedir=/ apigen/apigen.php --source src/ --destination build/result/docs/ --template-config apigen/templates/bootstrap/config.neon --deprecated yes diff --git a/vendor/zordius/lightncandy/src/lightncandy.php b/vendor/zordius/lightncandy/src/lightncandy.php index d7a62e57..bc62781c 100644 --- a/vendor/zordius/lightncandy/src/lightncandy.php +++ b/vendor/zordius/lightncandy/src/lightncandy.php @@ -3,7 +3,7 @@ Copyrights for code authored by Yahoo! Inc. is licensed under the following terms: MIT License -Copyright (c) 2013 Yahoo! Inc. All Rights Reserved. +Copyright (c) 2013-2015 Yahoo! Inc. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -29,6 +29,7 @@ class LightnCandy { // Compile the template as standalone PHP code which can execute without including LightnCandy const FLAG_STANDALONE = 4; + const FLAG_BARE = 33554432; const FLAG_NOESCAPE = 67108864; // JavaScript compatibility @@ -58,7 +59,6 @@ class LightnCandy { const FLAG_MUSTACHESP = 131072; const FLAG_MUSTACHELOOKUP = 262144; const FLAG_MUSTACHEPAIN = 2097152; - const FLAG_MUSTACHESEC = 33554432; // Template rendering time debug flags const FLAG_RENDER_DEBUG = 524288; @@ -66,7 +66,7 @@ class LightnCandy { // alias flags const FLAG_BESTPERFORMANCE = 16384; // FLAG_ECHO const FLAG_JS = 24; // FLAG_JSTRUE + FLAG_JSOBJECT - const FLAG_MUSTACHE = 40239104; // FLAG_ERROR_SKIPPARTIAL + FLAG_MUSTACHESP + FLAG_MUSTACHELOOKUP + FLAG_MUSTACHEPAIN + FLAG_MUSTACHESEC + const FLAG_MUSTACHE = 6684672; // FLAG_ERROR_SKIPPARTIAL + FLAG_MUSTACHESP + FLAG_MUSTACHELOOKUP + FLAG_MUSTACHEPAIN const FLAG_HANDLEBARS = 27402208; // FLAG_THIS + FLAG_WITH + FLAG_PARENT + FLAG_JSQUOTE + FLAG_ADVARNAME + FLAG_SPACECTL + FLAG_NAMEDARG + FLAG_SPVARS + FLAG_SLASH + FLAG_ELSE + FLAG_MUSTACHESP + FLAG_MUSTACHEPAIN const FLAG_HANDLEBARSJS = 27402232; // FLAG_JS + FLAG_HANDLEBARS const FLAG_INSTANCE = 98304; // FLAG_PROPERTY + FLAG_METHOD @@ -74,6 +74,7 @@ class LightnCandy { // RegExps const VARNAME_SEARCH = '/(\\[[^\\]]+\\]|[^\\[\\]\\.]+)/'; const EXTENDED_COMMENT_SEARCH = '/{{!--.*?--}}/s'; + const IS_SUBEXP_SEARCH = '/^\(.+\)$/s'; // Positions of matched token const POS_LOTHER = 1; @@ -105,7 +106,7 @@ class LightnCandy { } // Strip extended comments - $template = preg_replace(static::EXTENDED_COMMENT_SEARCH, '{{!*}}', $template); + $template = preg_replace(static::EXTENDED_COMMENT_SEARCH, '{{! }}', $template); // Do first time scan to find out used feature, detect template error. static::setupToken($context); @@ -115,8 +116,14 @@ class LightnCandy { return false; } + $context['scan'] = false; + // Do PHP code generation. static::setupToken($context); + + // Handle dynamic partials + static::handleDynamicPartial($context); + $code = static::compileTemplate($context, static::escapeTemplate($template)); // return false when fatal error @@ -128,7 +135,20 @@ class LightnCandy { return static::composePHPRender($context, $code); } - /* + /** + * Include all partials when using dynamic partials + */ + protected static function handleDynamicPartial(&$context) { + if ($context['usedFeature']['dynpartial'] == 0) { + return; + } + + foreach ($context['partials'] as $name => $code) { + static::readPartial($name, $context); + } + } + + /** * Escape template * * @param string $template handlebars template string @@ -136,7 +156,7 @@ class LightnCandy { * @return string Escaped template * * @expect 'abc' when input 'abc' - * @expect 'a\\bc' when input 'a\bc' + * @expect 'a\\\\bc' when input 'a\bc' * @expect 'a\\\'bc' when input 'a\'bc' */ protected static function escapeTemplate($template) { @@ -255,7 +275,6 @@ class LightnCandy { $flagProp = static::getBoolStr($context['flags']['prop']); $flagMethod = static::getBoolStr($context['flags']['method']); $flagMustlok = static::getBoolStr($context['flags']['mustlok']); - $flagMustsec = static::getBoolStr($context['flags']['mustsec']); $flagEcho = static::getBoolStr($context['flags']['echo']); $libstr = static::exportLCRun($context); @@ -264,9 +283,11 @@ class LightnCandy { $bhelpers = static::exportHelper($context, 'blockhelpers'); $hbhelpers = static::exportHelper($context, 'hbhelpers'); $debug = LCRun3::DEBUG_ERROR_LOG; + $phpstart = $context['flags']['bare'] ? '' : '"; // Return generated PHP code string. - return " array( 'jstrue' => $flagJStrue, @@ -275,7 +296,6 @@ class LightnCandy { 'prop' => $flagProp, 'method' => $flagMethod, 'mustlok' => $flagMustlok, - 'mustsec' => $flagMustsec, 'echo' => $flagEcho, 'debug' => \$debugopt, ), @@ -284,14 +304,14 @@ class LightnCandy { 'blockhelpers' => $bhelpers, 'hbhelpers' => $hbhelpers, 'partials' => array({$context['partialCode']}), - 'scopes' => array(\$in), + 'scopes' => array(), 'sp_vars' => array('root' => \$in), + 'lcrun' => '{$context['lcrun']}', $libstr ); {$context['renderex']} {$context['ops']['op_start']}'$code'{$context['ops']['op_end']} -} -?>"; +}$phpend"; } /** @@ -314,6 +334,7 @@ $libstr 'exception' => $flags & self::FLAG_ERROR_EXCEPTION, 'skippartial' => $flags & self::FLAG_ERROR_SKIPPARTIAL, 'standalone' => $flags & self::FLAG_STANDALONE, + 'bare' => $flags & self::FLAG_BARE, 'noesc' => $flags & self::FLAG_NOESCAPE, 'jstrue' => $flags & self::FLAG_JSTRUE, 'jsobj' => $flags & self::FLAG_JSOBJECT, @@ -331,13 +352,13 @@ $libstr 'mustsp' => $flags & self::FLAG_MUSTACHESP, 'mustlok' => $flags & self::FLAG_MUSTACHELOOKUP, 'mustpi' => $flags & self::FLAG_MUSTACHEPAIN, - 'mustsec' => $flags & self::FLAG_MUSTACHESEC, 'debug' => $flags & self::FLAG_RENDER_DEBUG, 'prop' => $flags & self::FLAG_PROPERTY, 'method' => $flags & self::FLAG_METHOD, 'runpart' => $flags & self::FLAG_RUNTIMEPARTIAL, ), 'level' => 0, + 'scan' => true, 'stack' => array(), 'error' => array(), 'basedir' => static::buildCXBasedir($options), @@ -365,13 +386,14 @@ $libstr 'this' => 0, 'parent' => 0, 'with' => 0, - 'dot' => 0, 'comment' => 0, 'partial' => 0, + 'dynpartial' => 0, 'helper' => 0, 'bhelper' => 0, 'hbhelper' => 0, 'delimiter' => 0, + 'subexp' => 0, ), 'usedCount' => array( 'var' => array(), @@ -385,6 +407,7 @@ $libstr 'blockhelpers' => array(), 'hbhelpers' => array(), 'renderex' => isset($options['renderex']) ? $options['renderex'] : '', + 'lcrun' => isset($options['lcrun']) ? $options['lcrun'] : 'LCRun3', ); $context['ops'] = $context['flags']['echo'] ? array( @@ -470,6 +493,16 @@ $libstr return static::compilePartial($name, $context, $cnt); } + if (preg_match(static::IS_SUBEXP_SEARCH, $name)) { + if ($context['flags']['runpart']) { + $context['usedFeature']['dynpartial']++; + return; + } else { + $context['error'][] = "You use dynamic partial name as '$name', this only works with option FLAG_RUNTIMEPARTIAL enabled"; + return; + } + } + if (!$context['flags']['skippartial']) { $context['error'][] = "Can not find partial file for '$name', you should set correct basedir and fileext in options"; } @@ -525,6 +558,8 @@ $libstr if ($context['flags']['mustpi']) { $sp = ', $sp'; $code = preg_replace('/^/m', "'{$context['ops']['seperator']}\$sp{$context['ops']['seperator']}'", $code); + // callbacks inside partial should be aware of $sp + $code = preg_replace('/\bfunction\s*\((.*?)\)\s*{/', 'function(\\1)use($sp){', $code); } else { $sp = ''; } @@ -640,7 +675,7 @@ $libstr return ''; } - $class = new ReflectionClass('LCRun3'); + $class = new ReflectionClass($context['lcrun']); $fname = $class->getFileName(); $lines = file_get_contents($fname); $file = new SplFileObject($fname); @@ -693,7 +728,7 @@ $libstr return 'array()'; } - $class = new ReflectionClass('LCRun3'); + $class = new ReflectionClass($context['lcrun']); $constants = $class->getConstants(); $ret = " array(\n"; foreach($constants as $name => $value) { @@ -790,19 +825,20 @@ $libstr * * @param string $php PHP code * @param string|null $tmpDir Optional, change temp directory for php include file saved by prepare() when cannot include PHP code with data:// format. + * @param boolean $delete Optional, delete temp php file when set to tru. Default is true, set it to false for debug propose * * @return Closure|false result of include() * * @deprecated */ - public static function prepare($php, $tmpDir = null) { + public static function prepare($php, $tmpDir = null, $delete = true) { if (!ini_get('allow_url_include') || !ini_get('allow_url_fopen')) { - if (!$tmpDir || !is_dir($tmpDir)) { + if (!is_string($tmpDir) || !is_dir($tmpDir)) { $tmpDir = sys_get_temp_dir(); } } - if ($tmpDir) { + if (is_dir($tmpDir)) { $fn = tempnam($tmpDir, 'lci_'); if (!$fn) { error_log("Can not generate tmp file under $tmpDir!!\n"); @@ -812,7 +848,14 @@ $libstr error_log("Can not include saved temp php code from $fn, you should add $tmpDir into open_basedir!!\n"); return false; } - return include($fn); + + $phpfunc = include($fn); + + if ($delete) { + unlink($fn); + } + + return $phpfunc; } return include('data://text/plain,' . urlencode($php)); @@ -827,10 +870,10 @@ $libstr * * @return string compiled Function name * - * @expect 'LCRun3::test(' when input array('flags' => array('standalone' => 0, 'debug' => 0)), 'test', '' - * @expect 'LCRun3::test2(' when input array('flags' => array('standalone' => 0, 'debug' => 0)), 'test2', '' - * @expect "\$cx['funcs']['test3'](" when input array('flags' => array('standalone' => 1, 'debug' => 0)), 'test3', '' - * @expect 'LCRun3::debug(\'abc\', \'test\', ' when input array('flags' => array('standalone' => 0, 'debug' => 1)), 'test', 'abc' + * @expect 'LCRun3::test(' when input array('flags' => array('standalone' => 0, 'debug' => 0), 'lcrun' => 'LCRun3'), 'test', '' + * @expect 'LCRun3::test2(' when input array('flags' => array('standalone' => 0, 'debug' => 0), 'lcrun' => 'LCRun3'), 'test2', '' + * @expect "\$cx['funcs']['test3'](" when input array('flags' => array('standalone' => 1, 'debug' => 0), 'lcrun' => 'LCRun3'), 'test3', '' + * @expect 'LCRun3::debug(\'abc\', \'test\', ' when input array('flags' => array('standalone' => 0, 'debug' => 1), 'lcrun' => 'LCRun3'), 'test', 'abc' */ protected static function getFuncName(&$context, $name, $tag) { static::addUsageCount($context, 'lcrun', $name); @@ -843,7 +886,7 @@ $libstr $dbg = ''; } - return $context['flags']['standalone'] ? "\$cx['funcs']['$name']($dbg" : "LCRun3::$name($dbg"; + return $context['flags']['standalone'] ? "\$cx['funcs']['$name']($dbg" : "{$context['lcrun']}::$name($dbg"; } /** @@ -883,7 +926,6 @@ $libstr * * @param array $vn variable name array. * @param array $context current compile context - * @param boolean $ishelper true when compile for helper * * @return array variable names * @@ -891,15 +933,11 @@ $libstr * @expect array('array(array($in,$in),array())', array('this', 'this')) when input array(null, null), array('flags'=>array('spvar'=>true)) * @expect array('array(array(),array(\'a\'=>$in))', array('this')) when input array('a' => null), array('flags'=>array('spvar'=>true)) */ - protected static function getVariableNames($vn, &$context, $ishelper = false) { + protected static function getVariableNames($vn, &$context) { $vars = array(array(), array()); $exps = array(); foreach ($vn as $i => $v) { - if (isset($v[0]) && preg_match('/^\(.+\)$/', $v[0])) { - $V = static::compileSubExpression($v[0], $context); - } else { - $V = static::getVariableName($v, $context, $ishelper); - } + $V = static::getVariableNameOrSubExpression($v, $context); if (is_string($i)) { $vars[1][] = "'$i'=>{$V[0]}"; } else { @@ -915,16 +953,17 @@ $libstr * * @param string $subExpression subExpression to compile * @param array $context current compile context + * @param boolean $keepCount keep original usage count * * @return array code representing passed expression */ - protected static function compileSubExpression($subExpression, &$context) { + protected static function compileSubExpression($subExpression, &$context, $keepCount = false) { // mock up a token for this expression $token = array_fill(self::POS_LOTHER, self::POS_ROTHER, ''); // strip outer ( ) from subexpression $token[self::POS_INNERTAG] = substr($subExpression, 1, -1); - + $oldCount = $context['usedFeature']; list(, $vars) = static::parseTokenArgs($token, $context); // no separator is needed, this code will be used as a function argument @@ -934,6 +973,21 @@ $libstr $ret = static::compileCustomHelper($context, $vars, true, true); $context['ops']['seperator'] = $origSeperator; + if ($keepCount) { + $context['usedFeature'] = $oldCount; + } else { + $context['usedFeature']['subexp']++; + // detect handlebars custom helpers. + if (isset($context['hbhelpers'][$vars[0][0]])) { + $context['usedFeature']['hbhelper']++; + } else { + // detect custom helpers. + if (isset($context['helpers'][$vars[0][0]])) { + $context['usedFeature']['helper']++; + } + } + } + return array($ret ? $ret : '', $subExpression); } @@ -942,47 +996,47 @@ $libstr * * @param array $var variable parsed path * @param array $context current compile context - * @param boolean $ishelper true when compile for helper$ + * + * @return array variable names + */ + protected static function getVariableNameOrSubExpression($var, &$context) { + if (isset($var[0]) && preg_match(static::IS_SUBEXP_SEARCH, $var[0])) { + return static::compileSubExpression($var[0], $context, true); + } + return static::getVariableName($var, $context); + } + + /** + * Internal method used by compile(). + * + * @param array $var variable parsed path + * @param array $context current compile context * * @return array variable names * * @expect array('$in', 'this') when input array(null), array('flags'=>array('spvar'=>true,'debug'=>0)) - * @expect array('true', 'true') when input array('true'), array('flags'=>array('spvar'=>true,'debug'=>0)), true - * @expect array('false', 'false') when input array('false'), array('flags'=>array('spvar'=>true,'debug'=>0)), true - * @expect array(2, '2') when input array('2'), array('flags'=>array('spvar'=>true,'debug'=>0)), true + * @expect array('((isset($in[\'true\']) && is_array($in)) ? $in[\'true\'] : null)', '[true]') when input array('true'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array('((isset($in[\'false\']) && is_array($in)) ? $in[\'false\'] : null)', '[false]') when input array('false'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array('true', 'true') when input array(0, 'true'), array('flags'=>array('spvar'=>true,'debug'=>0)) + * @expect array('false', 'false') when input array(0, 'false'), array('flags'=>array('spvar'=>true,'debug'=>0)) + * @expect array('((isset($in[\'2\']) && is_array($in)) ? $in[\'2\'] : null)', '[2]') when input array('2'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array('2', '2') when input array(0, '2'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0)) * @expect array('((isset($in[\'@index\']) && is_array($in)) ? $in[\'@index\'] : null)', '[@index]') when input array('@index'), array('flags'=>array('spvar'=>false,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) - * @expect array("((isset(\$cx['sp_vars']['index']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['index'] : null)", '@[index]') when input array('@index'), array('flags'=>array('spvar'=>true,'debug'=>0)) - * @expect array("((isset(\$cx['sp_vars']['key']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['key'] : null)", '@[key]') when input array('@key'), array('flags'=>array('spvar'=>true,'debug'=>0)) - * @expect array("((isset(\$cx['sp_vars']['first']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['first'] : null)", '@[first]') when input array('@first'), array('flags'=>array('spvar'=>true,'debug'=>0)) - * @expect array("((isset(\$cx['sp_vars']['last']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['last'] : null)", '@[last]') when input array('@last'), array('flags'=>array('spvar'=>true,'debug'=>0)) - * @expect array('\'a\'', '"a"') when input array('"a"'), array('flags'=>array('spvar'=>true,'debug'=>0)) + * @expect array("((isset(\$cx['sp_vars']['index']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['index'] : null)", '@[index]') when input array('@index'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array("((isset(\$cx['sp_vars']['key']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['key'] : null)", '@[key]') when input array('@key'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array("((isset(\$cx['sp_vars']['first']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['first'] : null)", '@[first]') when input array('@first'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array("((isset(\$cx['sp_vars']['last']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['last'] : null)", '@[last]') when input array('@last'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array('((isset($in[\'"a"\']) && is_array($in)) ? $in[\'"a"\'] : null)', '["a"]') when input array('"a"'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + * @expect array('"a"', '"a"') when input array(0, '"a"'), array('flags'=>array('spvar'=>true,'debug'=>0)) * @expect array('((isset($in[\'a\']) && is_array($in)) ? $in[\'a\'] : null)', '[a]') when input array('a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) * @expect array('((isset($cx[\'scopes\'][count($cx[\'scopes\'])-1][\'a\']) && is_array($cx[\'scopes\'][count($cx[\'scopes\'])-1])) ? $cx[\'scopes\'][count($cx[\'scopes\'])-1][\'a\'] : null)', '../[a]') when input array(1,'a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) * @expect array('((isset($cx[\'scopes\'][count($cx[\'scopes\'])-3][\'a\']) && is_array($cx[\'scopes\'][count($cx[\'scopes\'])-3])) ? $cx[\'scopes\'][count($cx[\'scopes\'])-3][\'a\'] : null)', '../../../[a]') when input array(3,'a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) * @expect array('((isset($in[\'id\']) && is_array($in)) ? $in[\'id\'] : null)', 'this.[id]') when input array(null, 'id'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) - * @expect array('LCRun3::v($cx, $in, array(\'id\'))', 'this.[id]') when input array(null, 'id'), array('flags'=>array('prop'=>true,'spvar'=>true,'debug'=>0,'method'=>0,'mustlok'=>0,'standalone'=>0)) + * @expect array('LCRun3::v($cx, $in, array(\'id\'))', 'this.[id]') when input array(null, 'id'), array('flags'=>array('prop'=>true,'spvar'=>true,'debug'=>0,'method'=>0,'mustlok'=>0,'standalone'=>0), 'lcrun' => 'LCRun3') */ - protected static function getVariableName($var, &$context, $ishelper = false) { - if (isset($var[0])) { - // Handle language constants or number , only for helpers - if ($ishelper) { - if ((count($var) == 1) && is_numeric($var[0])) { - // convert 0x00 or 0b00 numbers to decimal - return array((string) 1 * $var[0], $var[0]); - } - switch ($var[0]) { - case 'true': - return array('true', 'true'); - case 'false': - return array('false', 'false'); - } - } - - // Handle double quoted string - if (preg_match('/^"(.*)"$/', $var[0], $matched)) { - $t = addcslashes(stripslashes(preg_replace('/\\\\\\\\/', '\\', $matched[1])), "'"); - return array("'{$t}'", "\"{$t}\""); - } + protected static function getVariableName($var, &$context) { + if (isset($var[0]) && ($var[0] === 0)) { + return array($var[1], preg_replace('/\'(.*)\'/', '$1', $var[1])); } $levels = 0; @@ -994,7 +1048,9 @@ $libstr if (!is_string($var[0]) && is_int($var[0])) { $levels = array_shift($var); } + } + if (isset($var[0])) { // handle @root, @index, @key, @last, etc if ($context['flags']['spvar']) { if (substr($var[0], 0, 1) === '@') { @@ -1003,14 +1059,14 @@ $libstr $var[0] = substr($var[0], 1); } } + } - // change base when trace to parent - if ($levels > 0) { - if ($spvar) { - $base .= str_repeat("['_parent']", $levels); - } else { - $base = "\$cx['scopes'][count(\$cx['scopes'])-$levels]"; - } + // change base when trace to parent + if ($levels > 0) { + if ($spvar) { + $base .= str_repeat("['_parent']", $levels); + } else { + $base = "\$cx['scopes'][count(\$cx['scopes'])-$levels]"; } } @@ -1073,31 +1129,44 @@ $libstr * @return array Return variable name array * * @expect array('this') when input 'this', array('flags' => array('advar' => 0, 'this' => 0)) - * @expect array(null) when input 'this', array('flags' => array('advar' => 0, 'this' => 1)) - * @expect array(1, null) when input '../', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array(1, null) when input '../.', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array(1, null) when input '../this', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array(1, 'a') when input '../a', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array(2, 'a', 'b') when input '../../a.b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array(2, '[a]', 'b') when input '../../[a].b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array(2, 'a', 'b') when input '../../[a].b', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array('"a.b"') when input '"a.b"', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) - * @expect array(null, 'id') when input 'this.id', array('flags' => array('advar' => 1, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + * @expect array() when input 'this', array('flags' => array('advar' => 0, 'this' => 1)) + * @expect array(1) when input '../', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) + * @expect array(1) when input '../.', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) + * @expect array(1) when input '../this', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) + * @expect array(1, 'a') when input '../a', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) + * @expect array(2, 'a', 'b') when input '../../a.b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) + * @expect array(2, '[a]', 'b') when input '../../[a].b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) + * @expect array(2, 'a', 'b') when input '../../[a].b', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) + * @expect array('id') when input 'this.id', array('flags' => array('advar' => 1, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + * @expect array(0, '\'a.b\'') when input '"a.b"', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + * @expect array(0, '123') when input '123', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + * @expect array(0, 'null') when input 'null', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) */ protected static function fixVariable($v, &$context) { - $ret = array(); - $levels = 0; + // handle number + if (is_numeric($v)) { + // convert 0x00 or 0b00 numbers to decimal + return array(0, (string) 1 * $v); + } // handle double quoted string if (preg_match('/^"(.*)"$/', $v, $matched)) { - return array($v); + return array(0, "'" . preg_replace('/([^\\\\])\\\\\\\\"/', '$1"', preg_replace('/^\\\\\\\\"/', '"', $matched[1])) . "'"); } // handle single quoted string if (preg_match('/^\\\\\'(.*)\\\\\'$/', $v, $matched)) { - return array("\"{$matched[1]}\""); + return array(0, "'$matched[1]'"); } + // handle boolean, null and undefined + if (preg_match('/^(true|false|null|undefined)$/', $v)) { + return array(0, ($v === 'undefined') ? 'null' : $v); + } + + $ret = array(); + $levels = 0; + // handle .. if ($v === '..') { $v = '../'; @@ -1114,7 +1183,7 @@ $libstr if (!$context['flags']['parent']) { $context['error'][] = 'Do not support {{../var}}, you should do compile with LightnCandy::FLAG_PARENT flag'; } - $context['usedFeature']['parent']++; + $context['usedFeature']['parent'] += ($context['scan'] ? 1 : 0); } if ($context['flags']['advar'] && preg_match('/\\]/', $v)) { @@ -1123,15 +1192,11 @@ $libstr preg_match_all('/([^\\.\\/]+)/', $v, $matchedall); } - if (($v === '.') || ($v === '')) { - $matchedall = array(array('.'), array('.')); - } - foreach ($matchedall[1] as $m) { if ($context['flags']['advar'] && substr($m, 0, 1) === '[') { $ret[] = substr($m, 1, -1); - } else { - $ret[] = (($context['flags']['this'] && ($m === 'this')) || ($m === '.')) ? null : $m; + } else if ((!$context['flags']['this'] || ($m !== 'this')) && ($m !== '.')) { + $ret[] = $m; } } @@ -1146,24 +1211,31 @@ $libstr * * @return array Return parsed result * - * @expect array(false, array(array(null))) when input array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(true, array(array(null))) when input array(0,0,0,'{{{',0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(true, array(array(null))) when input array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 1)) - * @expect array(false, array(array('a'))) when input array(0,0,0,0,0,0,'a'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('b'))) when input array(0,0,0,0,0,0,'a b'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('"b'), array('c"'))) when input array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('"b c"'))) when input array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('b c'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('b c'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('a'), 'q' => array('b c'))) when input array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('a'), array('q=[b c'))) when input array(0,0,0,0,0,0,'a [q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('a'), 'q' => array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('a'), 'q' => array('b'), array('c'))) when input array(0,0,0,0,0,0,'a [q]=b c'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('a'), 'q' => array('"b c"'))) when input array(0,0,0,0,0,0,'a q="b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('(foo bar)'))) when input array(0,0,0,0,0,0,'(foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) - * @expect array(false, array(array('foo'), array("'=='"), array('bar'))) when input array(0,0,0,0,0,0,"foo '==' bar"), array('flags' => array('advar' => 1, 'namev' => 1)) + * @expect array(false, array(array())) when input array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(true, array(array())) when input array(0,0,0,'{{{',0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(true, array(array())) when input array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 1), 'scan' => false) + * @expect array(false, array(array('a'))) when input array(0,0,0,0,0,0,'a'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array('b'))) when input array(0,0,0,0,0,0,'a b'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array('"b'), array('c"'))) when input array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array(0, '\'b c\''))) when input array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array('b c'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array('b c'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), 'q' => array('b c'))) when input array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array('q=[b c'))) when input array(0,0,0,0,0,0,'a [q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), 'q' => array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), 'q' => array('b'), array('c'))) when input array(0,0,0,0,0,0,'a [q]=b c'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), 'q' => array(0, '\'b c\''))) when input array(0,0,0,0,0,0,'a q="b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('(foo bar)'))) when input array(0,0,0,0,0,0,'(foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0, 'exhlp' => 1), 'ops' => array('seperator' => ''), 'usedFeature' => array('subexp' => 0), 'scan' => false) + * @expect array(false, array(array('foo'), array("'=='"), array('bar'))) when input array(0,0,0,0,0,0,"foo '==' bar"), array('flags' => array('advar' => 1, 'namev' => 1, 'noesc' => 0, 'this' => 0), 'scan' => false) + * @expect array(false, array(array('( foo bar)'))) when input array(0,0,0,0,0,0,'( foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0, 'exhlp' => 1), 'ops' => array('seperator' => ''), 'usedFeature' => array('subexp' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array(0, '\' b c\''))) when input array(0,0,0,0,0,0,'a " b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), 'q' => array(0, '\' b c\''))) when input array(0,0,0,0,0,0,'a q=" b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('foo'), array(0, "' =='"), array('bar'))) when input array(0,0,0,0,0,0,"foo \' ==\' bar"), array('flags' => array('advar' => 1, 'namev' => 1, 'noesc' => 0, 'this' => 0), 'scan' => false) + * @expect array(false, array(array('a'), array(' b c'))) when input array(0,0,0,0,0,0,'a [ b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array(array('a'), 'q' => array(0, "' d e'"))) when input array(0,0,0,0,0,0,"a q=\' d e\'"), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + * @expect array(false, array('q' => array('( foo bar)'))) when input array(0,0,0,0,0,0,'q=( foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) */ protected static function parseTokenArgs(&$token, &$context) { trim($token[self::POS_INNERTAG]); @@ -1175,6 +1247,11 @@ $libstr return array(false, array()); } + // Skip validation on comments + if ($token[self::POS_OP] === '!') { + return array(false, array()); + } + $vars = array(); $count = preg_match_all('/(\s*)([^\s]+)/', $token[self::POS_INNERTAG], $matchedall); @@ -1196,46 +1273,54 @@ $libstr } // continue to next match when begin with '(' without ending ')' - if (preg_match('/^\([^\)]+$/', $t)) { + if (preg_match('/^\([^\)]*$/', $t)) { $prev = $t; $expect = ')'; continue; } // continue to next match when begin with '"' without ending '"' - if (preg_match('/^"[^"]+$/', $t)) { + if (preg_match('/^"[^"]*$/', $t)) { $prev = $t; $expect = '"'; continue; } + // continue to next match when begin with \' without ending ' + if (preg_match('/^\\\\\'[^\']*$/', $t)) { + $prev = $t; + $expect = '\''; + continue; + } + // continue to next match when '="' exists without ending '"' - if (preg_match('/="[^"]+$/', $t)) { + if (preg_match('/^[^"]*="[^"]*$/', $t)) { $prev = $t; $expect = '"'; continue; } - // continue to next match when begin with \' without ending ' - if (preg_match('/^\\\\\'[^\']+$/', $t)) { + // continue to next match when '[' exists without ending ']' + if (preg_match('/\\[[^\\]]*$/', $t)) { $prev = $t; - $expect = '\''; + $expect = ']'; continue; } // continue to next match when =\' exists without ending ' - if (preg_match('/=\\\\\'[^\']+$/', $t)) { + if (preg_match('/^[^\']*=\\\\\'[^\']*$/', $t)) { $prev = $t; $expect = '\''; continue; } - // continue to next match when '[' exists without ending ']' - if (preg_match('/\\[[^\\]]+$/', $t)) { + // continue to next match when =( exists without ending ) + if (preg_match('/.+\([^\)]*$/', $t)) { $prev = $t; - $expect = ']'; + $expect = ')'; continue; } + $vars[] = $t; } } else { @@ -1247,7 +1332,8 @@ $libstr $i = 0; foreach ($vars as $idx => $var) { // Skip advanced processing for subexpressions - if (preg_match('/^\(.+\)$/', $var)) { + if (preg_match(static::IS_SUBEXP_SEARCH, $var)) { + static::compileSubExpression($var, $context, !$context['scan']); $ret[$i] = array($var); $i++; continue; @@ -1262,7 +1348,9 @@ $libstr $var = $m[5]; } } - if ($context['flags']['advar']) { + + $esc = $context['scan'] ? '' : '\\\\'; + if ($context['flags']['advar'] && !preg_match("/^(\"|$esc')(.*)(\"|$esc')$/", $var)) { // foo] Rule 1: no starting [ or [ not start from head if (preg_match('/^[^\\[\\.]+[\\]\\[]/', $var) // [bar Rule 2: no ending ] or ] not in the end @@ -1273,13 +1361,22 @@ $libstr || preg_match('/\\.[^\\]\\[\\.]+\\[/', preg_replace('/^(..\\/)+/', '', preg_replace('/\\[[^\\]]+\\]/', '[XXX]', $var))) ) { $context['error'][] = "Wrong variable naming as '$var' in " . static::tokenString($token) . ' !'; + } else { + if (!$context['scan']) { + $name = preg_replace('/(\\[.+?\\])/', '', $var); + // Scan for invalid charactors which not be protected by [ ] + // now make ( and ) pass, later fix + if (preg_match('/[!"#%\'*+,;<=>{|}~]/', $name)) { + $context['error'][] = "Wrong variable naming as '$var' in " . static::tokenString($token) . ' ! You should wrap ! " # % & \' * + , ; < = > { | } ~ into [ ]'; + } + } } } if (($idx === 0) && ($token[self::POS_OP] === '>')) { $var = array(preg_replace('/^("(.+)")|(\\[(.+)\\])$/', '$2$4', $var)); - } else if (is_numeric($var)) { - $var = array('"' . $var . '"'); + } else if (preg_match('/^\(.+\)$/', $var)) { + $var = array($var); } else { $var = static::fixVariable($var, $context); } @@ -1368,7 +1465,7 @@ $libstr return ++$context['usedFeature']['delimiter']; case '^': - if ($vars[0][0]) { + if (isset($vars[0][0])) { $context['stack'][] = $token[self::POS_INNERTAG]; $context['level']++; return ++$context['usedFeature']['isec']; @@ -1391,14 +1488,20 @@ $libstr $context['stack'][] = $token[self::POS_INNERTAG]; $context['level']++; - // detect handlebars custom helpers. - if (isset($context['hbhelpers'][$vars[0][0]])) { - return ++$context['usedFeature']['hbhelper']; + if (!isset($vars[0][0])) { + return; } - // detect block custom helpers. - if (isset($context['blockhelpers'][$vars[0][0]])) { - return ++$context['usedFeature']['bhelper']; + if (is_string($vars[0][0])) { + // detect handlebars custom helpers. + if (isset($context['hbhelpers'][$vars[0][0]])) { + return ++$context['usedFeature']['hbhelper']; + } + + // detect block custom helpers. + if (isset($context['blockhelpers'][$vars[0][0]])) { + return ++$context['usedFeature']['bhelper']; + } } switch ($vars[0][0]) { @@ -1457,20 +1560,23 @@ $libstr $context['usedFeature'][$raw ? 'raw' : 'enc']++; } - // validate else and this. - switch ($vars[0][0]) { - case 'else': - if ($context['flags']['else']) { - return $context['usedFeature']['else']++; - } - break; - - case 'this': - case '.': + foreach ($vars as $var) { + if (!isset($var[0])) { if ($context['level'] == 0) { $context['usedFeature']['rootthis']++; } - return $context['usedFeature'][($vars[0] == '.') ? 'dot' : 'this']++; + $context['usedFeature']['this']++; + } + } + + if (!isset($vars[0][0])) { + return; + } + + if ($vars[0][0] === 'else') { + if ($context['flags']['else']) { + return $context['usedFeature']['else']++; + } } // detect handlebars custom helpers. @@ -1592,12 +1698,13 @@ $libstr return $ret; } - if ($ret = static::compileCustomHelper($context, $vars, $raw)) { - return $ret; - } - - if ($ret = static::compileElse($context, $vars)) { - return $ret; + if (isset($vars[0][0])) { + if ($ret = static::compileCustomHelper($context, $vars, $raw)) { + return $ret; + } + if ($ret = static::compileElse($context, $vars)) { + return $ret; + } } static::noNamedArguments($token, $context, $named, ', maybe you missing the custom helper?'); @@ -1619,27 +1726,31 @@ $libstr switch ($token[self::POS_OP]) { case '>': // mustache spec: ignore missing partial - if (!isset($context['usedPartial'][$vars[0][0]])) { + if (($context['usedFeature']['dynpartial'] === 0) && !isset($context['usedPartial'][$vars[0][0]])) { return $context['ops']['seperator']; } $p = array_shift($vars); if (!isset($vars[0])) { $vars[0] = array(); } - $v = static::getVariableNames($vars, $context, true); + $v = static::getVariableNames($vars, $context); $tag = ">$p[0] " .implode(' ', $v[1]); if ($context['flags']['runpart']) { - $sp = $context['tokens']['partialind'] ? ", '{$context['tokens']['partialind']}'" : ''; - return $context['ops']['seperator'] . static::getFuncName($context, 'p', $tag) . "\$cx, '$p[0]', $v[0]$sp){$context['ops']['seperator']}"; - } else { - if ($named || $v[0] !== 'array(array($in),array())') { - $context['error'][] = "Do not support {{{$tag}}}, you should do compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag"; + if (preg_match(static::IS_SUBEXP_SEARCH, $p[0])) { + list($p) = static::compileSubExpression($p[0], $context); + } else { + $p = "'$p[0]'"; } - return "{$context['ops']['seperator']}'" . static::compileTemplate($context, preg_replace('/^/m', $context['tokens']['partialind'], $context['usedPartial'][$p[0]]), $p[0]) . "'{$context['ops']['seperator']}"; + $sp = $context['tokens']['partialind'] ? ", '{$context['tokens']['partialind']}'" : ''; + return $context['ops']['seperator'] . static::getFuncName($context, 'p', $tag) . "\$cx, $p, $v[0]$sp){$context['ops']['seperator']}"; } + if ($named || $v[0] !== 'array(array($in),array())') { + $context['error'][] = "Do not support {{{$tag}}}, you should do compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag"; + } + return "{$context['ops']['seperator']}'" . static::compileTemplate($context, preg_replace('/^/m', $context['tokens']['partialind'], $context['usedPartial'][$p[0]]), $p[0]) . "'{$context['ops']['seperator']}"; case '^': // {{^}} means {{else}} - if (!$vars[0][0]) { + if (!isset($vars[0][0])) { $vars[0][0] = 'else'; $token[self::POS_OP] = ''; return; @@ -1647,7 +1758,7 @@ $libstr // Try to compile as custom helper {{^myHelper}} $r = static::compileBlockCustomHelper($context, $vars, true); - if ($r) { + if ($r !== null) { return $r; } @@ -1665,7 +1776,7 @@ $libstr case '#': // Try to compile as custom helper {{#myHelper}} $r = static::compileBlockCustomHelper($context, $vars); - if ($r) { + if ($r !== null) { return $r; } static::noNamedArguments($token, $context, $named, ', maybe you missing the block custom helper?'); @@ -1684,6 +1795,9 @@ $libstr * @return string|null Return compiled code segment for the token */ protected static function compileBlockCustomHelper(&$context, $vars, $inverted = false) { + if (!isset($vars[0][0])) { + return; + } $notHBCH = !isset($context['hbhelpers'][$vars[0][0]]); if (!isset($context['blockhelpers'][$vars[0][0]]) && $notHBCH) { @@ -1697,7 +1811,7 @@ $libstr $inverted = $inverted ? 'true' : 'false'; static::addUsageCount($context, $notHBCH ? 'blockhelpers' : 'hbhelpers', $ch[0]); - $v = static::getVariableNames($vars, $context, true); + $v = static::getVariableNames($vars, $context); return $context['ops']['seperator'] . static::getFuncName($context, $notHBCH ? 'bch' : 'hbch', ($inverted ? '^' : '#') . implode(' ', $v[1])) . "\$cx, '$ch[0]', {$v[0]}, \$in, $inverted, function(\$cx, \$in) {{$context['ops']['f_start']}"; } @@ -1763,8 +1877,8 @@ $libstr */ protected static function compileBlockBegin(&$context, $vars) { $each = 'false'; - $v = isset($vars[1]) ? static::getVariableName($vars[1], $context, true) : array(null, array()); - switch ($vars[0][0]) { + $v = isset($vars[1]) ? static::getVariableNameOrSubExpression($vars[1], $context) : array(null, array()); + switch (isset($vars[0][0]) ? $vars[0][0] : null) { case 'if': $context['stack'][] = 'if'; return $context['usedFeature']['parent'] @@ -1789,7 +1903,7 @@ $libstr } } - $v = static::getVariableName($vars[0], $context); + $v = static::getVariableNameOrSubExpression($vars[0], $context); $context['stack'][] = $v[1]; $context['stack'][] = '#'; return $context['ops']['seperator'] . static::getFuncName($context, 'sec', (($each == 'true') ? 'each ' : '') . $v[1]) . "\$cx, {$v[0]}, \$in, $each, function(\$cx, \$in) {{$context['ops']['f_start']}"; @@ -1805,20 +1919,22 @@ $libstr * * @return string|null Return compiled code segment for the token when the token is custom helper */ - protected static function compileCustomHelper(&$context, &$vars, $raw, $err = false) { + protected static function compileCustomHelper(&$context, $vars, $raw, $err = false) { $notHH = !isset($context['hbhelpers'][$vars[0][0]]); if (!isset($context['helpers'][$vars[0][0]]) && $notHH) { if ($err) { - $context['error'][] = "Custom helper '{$vars[0][0]}' not found!"; + if (!$context['flags']['exhlp']) { + $context['error'][] = "Can not find custom helper function defination {$vars[0][0]}() !"; + } } return; } $fn = $raw ? 'raw' : $context['ops']['enc']; $ch = array_shift($vars); - $v = static::getVariableNames($vars, $context, true); + $v = static::getVariableNames($vars, $context); static::addUsageCount($context, $notHH ? 'helpers' : 'hbhelpers', $ch[0]); - return $context['ops']['seperator'] . static::getFuncName($context, $notHH ? 'ch' : 'hbch', "$ch[0] " . implode(' ', $v[1])) . "\$cx, '$ch[0]', {$v[0]}, '$fn'" . ($notHH ? '' : ', \'$in\'') . "){$context['ops']['seperator']}"; + return $context['ops']['seperator'] . static::getFuncName($context, $notHH ? 'ch' : 'hbch', "$ch[0] " . implode(' ', $v[1])) . "\$cx, '$ch[0]', {$v[0]}, '$fn'" . ($notHH ? '' : ', $in') . "){$context['ops']['seperator']}"; } /** @@ -1842,6 +1958,7 @@ $libstr case 'each': case '#': return "{$context['ops']['f_end']}}, function(\$cx, \$in) {{$context['ops']['f_start']}"; + default: } } $context['error'][] = '{{else}} only valid in if, unless, each, and #section context'; @@ -1903,12 +2020,12 @@ class LCRun3 { * @param string $f runtime function name * @param array $cx render time context * - * @expect '{{123}}' when input '123', 'miss', array('flags' => array('debug' => LCRun3::DEBUG_TAGS)), '' - * @expect '{{#123}}{{/123}}' when input '123', 'wi', array('flags' => array('debug' => LCRun3::DEBUG_TAGS_HTML)), false, false, function () {return 'A';} + * @expect '{{123}}' when input '123', 'miss', array('flags' => array('debug' => LCRun3::DEBUG_TAGS), 'lcrun' => 'LCRun3'), '' + * @expect '{{#123}}{{/123}}' when input '123', 'wi', array('flags' => array('debug' => LCRun3::DEBUG_TAGS_HTML), 'lcrun' => 'LCRun3'), false, false, function () {return 'A';} */ public static function debug($v, $f, $cx) { $params = array_slice(func_get_args(), 2); - $r = call_user_func_array((isset($cx['funcs'][$f]) ? $cx['funcs'][$f] : "LCRun3::$f"), $params); + $r = call_user_func_array((isset($cx['funcs'][$f]) ? $cx['funcs'][$f] : "{$cx['lcrun']}::$f"), $params); if ($cx['flags']['debug'] & self::DEBUG_TAGS) { $ansi = $cx['flags']['debug'] & (self::DEBUG_TAGS_ANSI - self::DEBUG_TAGS); @@ -1999,10 +2116,14 @@ class LCRun3 { return $v; } $count--; - if ($count >= 0) { - $base = $cx['scopes'][$count]; - } else { - return null; + switch ($count) { + case -1: + $base = $cx['sp_vars']['root']; + break; + case -2: + return null; + default: + $base = $cx['scopes'][$count]; } } } @@ -2026,7 +2147,7 @@ class LCRun3 { * @expect true when input array(), array(0) */ public static function ifvar($cx, $v) { - return !is_null($v) && ($v !== false) && ($v !== 0) && ($v !== '') && (is_array($v) ? (count($v) > 0) : true); + return !is_null($v) && ($v !== false) && ($v !== 0) && ($v !== 0.0) && ($v !== '') && (is_array($v) ? (count($v) > 0) : true); } /** @@ -2149,6 +2270,8 @@ class LCRun3 { } return join(',', $ret); } + } else { + return 'Array'; } } @@ -2207,11 +2330,11 @@ class LCRun3 { * @expect '-a=' when input array('flags' => array('spvar' => 0)), array('a'), array('a'), false, function ($c, $i) {return "-$i=";} * @expect '-a=-b=' when input array('flags' => array('spvar' => 0)), array('a','b'), array('a','b'), false, function ($c, $i) {return "-$i=";} * @expect '' when input array('flags' => array('spvar' => 0)), 'abc', 'abc', true, function ($c, $i) {return "-$i=";} - * @expect '-b=' when input array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('a' => 'b'), array('a' => 'b'), true, function ($c, $i) {return "-$i=";} + * @expect '-b=' when input array('flags' => array('spvar' => 0)), array('a' => 'b'), array('a' => 'b'), true, function ($c, $i) {return "-$i=";} * @expect '1' when input array('flags' => array('spvar' => 0)), 'b', 'b', false, function ($c, $i) {return count($i);} * @expect '1' when input array('flags' => array('spvar' => 0)), 1, 1, false, function ($c, $i) {return print_r($i, true);} * @expect '0' when input array('flags' => array('spvar' => 0)), 0, 0, false, function ($c, $i) {return print_r($i, true);} - * @expect '{"b":"c"}' when input array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('b' => 'c'), array('b' => 'c'), false, function ($c, $i) {return json_encode($i);} + * @expect '{"b":"c"}' when input array('flags' => array('spvar' => 0)), array('b' => 'c'), array('b' => 'c'), false, function ($c, $i) {return json_encode($i);} * @expect 'inv' when input array('flags' => array('spvar' => 0)), array(), 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} * @expect 'inv' when input array('flags' => array('spvar' => 0)), array(), 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} * @expect 'inv' when input array('flags' => array('spvar' => 0)), false, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} @@ -2222,8 +2345,8 @@ class LCRun3 { * @expect 'cb' when input array('flags' => array('spvar' => 0)), 0, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} * @expect 'inv' when input array('flags' => array('spvar' => 0)), new stdClass, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} * @expect 'cb' when input array('flags' => array('spvar' => 0)), new stdClass, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} - * @expect '268' when input array('flags' => array('spvar' => 1)), array(1,3,4), 0, false, function ($c, $i) {return $i * 2;} - * @expect '038' when input array('flags' => array('spvar' => 1), 'sp_vars'=>array()), array(1,3,'a'=>4), 0, true, function ($c, $i) {return $i * $c['sp_vars']['index'];} + * @expect '268' when input array('flags' => array('spvar' => 1), 'sp_vars'=>array('root' => 0)), array(1,3,4), 0, false, function ($c, $i) {return $i * 2;} + * @expect '038' when input array('flags' => array('spvar' => 1), 'sp_vars'=>array('root' => 0)), array(1,3,'a'=>4), 0, true, function ($c, $i) {return $i * $c['sp_vars']['index'];} */ public static function sec($cx, $v, $in, $each, $cb, $else = null) { $isAry = is_array($v); @@ -2234,7 +2357,10 @@ class LCRun3 { $isObj = false; if ($isAry && $else !== null && count($v) === 0) { - return $else($cx, $in); + $cx['scopes'][] = $in; + $ret = $else($cx, $in); + array_pop($cx['scopes']); + return $ret; } // #var, detect input type is object or not @@ -2298,13 +2424,9 @@ class LCRun3 { return ''; } if ($isAry) { - if ($cx['flags']['mustsec']) { - $cx['scopes'][] = $v; - } + $cx['scopes'][] = $in; $ret = $cb($cx, $v); - if ($cx['flags']['mustsec']) { - array_pop($cx['scopes']); - } + array_pop($cx['scopes']); return $ret; } @@ -2317,7 +2439,10 @@ class LCRun3 { } if ($else !== null) { - return $else($cx, $in); + $cx['scopes'][] = $in; + $ret = $else($cx, $in); + array_pop($cx['scopes']); + return $ret; } return ''; @@ -2336,8 +2461,8 @@ class LCRun3 { * * @expect '' when input array(), false, false, function () {return 'A';} * @expect '' when input array(), null, null, function () {return 'A';} - * @expect '-Array=' when input array(), array('a'=>'b'), array('a' => 'b'), function ($c, $i) {return "-$i=";} - * @expect '-b=' when input array(), 'b', array('a' => 'b'), function ($c, $i) {return "-$i=";} + * @expect '{"a":"b"}' when input array(), array('a'=>'b'), array('a'=>'c'), function ($c, $i) {return json_encode($i);} + * @expect '-b=' when input array(), 'b', array('a'=>'b'), function ($c, $i) {return "-$i=";} */ public static function wi($cx, $v, $in, $cb, $else = null) { if (($v === false) || ($v === null)) { @@ -2360,7 +2485,19 @@ class LCRun3 { * */ public static function p($cx, $p, $v, $sp = '') { - return call_user_func($cx['partials'][$p], $cx, is_array($v[0][0]) ? array_merge($v[0][0], $v[1]) : $v[0][0], $sp); + $param = $v[0][0]; + + if (is_array($v[1])) { + if (is_array($v[0][0])) { + $param = array_merge($v[0][0], $v[1]); + } else if (($cx['flags']['method'] || $cx['flags']['prop']) && is_object($v[0][0])) { + foreach ($v[1] as $i => $v) { + $param->$i = $v; + } + } + } + + return call_user_func($cx['partials'][$p], $cx, $param, $sp); } /** @@ -2425,17 +2562,18 @@ class LCRun3 { * @param array|string|integer|null $vars variables for the helper * @param string $op the name of variable resolver. should be one of: 'raw', 'enc', or 'encq'. * @param boolean $inverted the logic will be inverted - * @param Closure $cb callback function to render child context + * @param Closure|null $cb callback function to render child context * @param Closure|null $else callback function to render child context when {{else}} * * @return string The rendered string of the token */ - public static function hbch($cx, $ch, $vars, $op, $inverted, $cb = false, $else = false) { + public static function hbch($cx, $ch, $vars, $op, $inverted, $cb = null, $else = null) { $isBlock = (is_object($cb) && ($cb instanceof Closure)); $args = $vars[0]; $options = array( 'name' => $ch, - 'hash' => $vars[1] + 'hash' => $vars[1], + '_this' => $isBlock ? $op : $inverted, ); // $invert the logic @@ -2451,12 +2589,13 @@ class LCRun3 { ob_start(); } if ($context === '_NO_INPUT_HERE_') { + $cx['scopes'][] = $op; $ret = $cb($cx, $op); } else { $cx['scopes'][] = $op; $ret = $cb($cx, $context); - array_pop($cx['scopes']); } + array_pop($cx['scopes']); return $cx['flags']['echo'] ? ob_get_clean() : $ret; }; } @@ -2480,7 +2619,6 @@ class LCRun3 { // prepare $options['data'] if ($cx['flags']['spvar']) { $options['data'] = $cx['sp_vars']; - $options['data']['root'] = $cx['scopes'][0]; } $args[] = $options; @@ -2493,12 +2631,6 @@ class LCRun3 { $e = "LCRun3: call custom helper '$ch' error: " . $E->getMessage(); } - if ($r === false) { - if ($e === null) { - $e = "LCRun3: call custom helper '$ch' error"; - } - } - if($e !== null) { if ($cx['flags']['debug'] & self::DEBUG_ERROR_LOG) { error_log($e); @@ -2528,7 +2660,7 @@ class LCRun3 { * @expect '2.6.5' when input array('blockhelpers' => array('a' => function ($cx,$in) {return array($cx,$in[0],5);})), 'a', array('6', 0), 2, false, function($cx, $i) {return implode('.', $i);} * @expect '' when input array('blockhelpers' => array('a' => function ($cx,$in) {})), 'a', array('6', 0), 2, false, function($cx, $i) {return implode('.', $i);} */ - public static function bch($cx, $ch, $vars, $in, $inverted, $cb, $else = false) { + public static function bch($cx, $ch, $vars, $in, $inverted, $cb, $else = null) { $r = call_user_func($cx['blockhelpers'][$ch], $in, $vars[0], $vars[1]); // $invert the logic @@ -2556,5 +2688,3 @@ class LCRun3 { return $ret; } } - -?> \ No newline at end of file diff --git a/vendor/zordius/lightncandy/tests/LCRun3Test.php b/vendor/zordius/lightncandy/tests/LCRun3Test.php index 63d6348e..03595298 100644 --- a/vendor/zordius/lightncandy/tests/LCRun3Test.php +++ b/vendor/zordius/lightncandy/tests/LCRun3Test.php @@ -12,10 +12,10 @@ class LCRun3Test extends PHPUnit_Framework_TestCase public function testOn_debug() { $method = new ReflectionMethod('LCRun3', 'debug'); $this->assertEquals('{{123}}', $method->invoke(null, - '123', 'miss', array('flags' => array('debug' => LCRun3::DEBUG_TAGS)), '' + '123', 'miss', array('flags' => array('debug' => LCRun3::DEBUG_TAGS), 'lcrun' => 'LCRun3'), '' )); $this->assertEquals('{{#123}}{{/123}}', $method->invoke(null, - '123', 'wi', array('flags' => array('debug' => LCRun3::DEBUG_TAGS_HTML)), false, false, function () {return 'A';} + '123', 'wi', array('flags' => array('debug' => LCRun3::DEBUG_TAGS_HTML), 'lcrun' => 'LCRun3'), false, false, function () {return 'A';} )); } /** @@ -237,7 +237,7 @@ class LCRun3Test extends PHPUnit_Framework_TestCase array('flags' => array('spvar' => 0)), 'abc', 'abc', true, function ($c, $i) {return "-$i=";} )); $this->assertEquals('-b=', $method->invoke(null, - array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('a' => 'b'), array('a' => 'b'), true, function ($c, $i) {return "-$i=";} + array('flags' => array('spvar' => 0)), array('a' => 'b'), array('a' => 'b'), true, function ($c, $i) {return "-$i=";} )); $this->assertEquals('1', $method->invoke(null, array('flags' => array('spvar' => 0)), 'b', 'b', false, function ($c, $i) {return count($i);} @@ -249,7 +249,7 @@ class LCRun3Test extends PHPUnit_Framework_TestCase array('flags' => array('spvar' => 0)), 0, 0, false, function ($c, $i) {return print_r($i, true);} )); $this->assertEquals('{"b":"c"}', $method->invoke(null, - array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('b' => 'c'), array('b' => 'c'), false, function ($c, $i) {return json_encode($i);} + array('flags' => array('spvar' => 0)), array('b' => 'c'), array('b' => 'c'), false, function ($c, $i) {return json_encode($i);} )); $this->assertEquals('inv', $method->invoke(null, array('flags' => array('spvar' => 0)), array(), 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} @@ -282,10 +282,10 @@ class LCRun3Test extends PHPUnit_Framework_TestCase array('flags' => array('spvar' => 0)), new stdClass, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';} )); $this->assertEquals('268', $method->invoke(null, - array('flags' => array('spvar' => 1)), array(1,3,4), 0, false, function ($c, $i) {return $i * 2;} + array('flags' => array('spvar' => 1), 'sp_vars'=>array('root' => 0)), array(1,3,4), 0, false, function ($c, $i) {return $i * 2;} )); $this->assertEquals('038', $method->invoke(null, - array('flags' => array('spvar' => 1), 'sp_vars'=>array()), array(1,3,'a'=>4), 0, true, function ($c, $i) {return $i * $c['sp_vars']['index'];} + array('flags' => array('spvar' => 1), 'sp_vars'=>array('root' => 0)), array(1,3,'a'=>4), 0, true, function ($c, $i) {return $i * $c['sp_vars']['index'];} )); } /** @@ -299,11 +299,11 @@ class LCRun3Test extends PHPUnit_Framework_TestCase $this->assertEquals('', $method->invoke(null, array(), null, null, function () {return 'A';} )); - $this->assertEquals('-Array=', $method->invoke(null, - array(), array('a'=>'b'), array('a' => 'b'), function ($c, $i) {return "-$i=";} + $this->assertEquals('{"a":"b"}', $method->invoke(null, + array(), array('a'=>'b'), array('a'=>'c'), function ($c, $i) {return json_encode($i);} )); $this->assertEquals('-b=', $method->invoke(null, - array(), 'b', array('a' => 'b'), function ($c, $i) {return "-$i=";} + array(), 'b', array('a'=>'b'), function ($c, $i) {return "-$i=";} )); } /** diff --git a/vendor/zordius/lightncandy/tests/LightnCandyTest.php b/vendor/zordius/lightncandy/tests/LightnCandyTest.php index 6f82f2bd..9c82aac3 100644 --- a/vendor/zordius/lightncandy/tests/LightnCandyTest.php +++ b/vendor/zordius/lightncandy/tests/LightnCandyTest.php @@ -6,6 +6,22 @@ require_once('src/lightncandy.php'); class LightnCandyTest extends PHPUnit_Framework_TestCase { + /** + * @covers LightnCandy::escapeTemplate + */ + public function testOn_escapeTemplate() { + $method = new ReflectionMethod('LightnCandy', 'escapeTemplate'); + $method->setAccessible(true); + $this->assertEquals('abc', $method->invoke(null, + 'abc' + )); + $this->assertEquals('a\\\\bc', $method->invoke(null, + 'a\bc' + )); + $this->assertEquals('a\\\'bc', $method->invoke(null, + 'a\'bc' + )); + } /** * @covers LightnCandy::buildHelperTable */ @@ -124,16 +140,16 @@ class LightnCandyTest extends PHPUnit_Framework_TestCase $method = new ReflectionMethod('LightnCandy', 'getFuncName'); $method->setAccessible(true); $this->assertEquals('LCRun3::test(', $method->invoke(null, - array('flags' => array('standalone' => 0, 'debug' => 0)), 'test', '' + array('flags' => array('standalone' => 0, 'debug' => 0), 'lcrun' => 'LCRun3'), 'test', '' )); $this->assertEquals('LCRun3::test2(', $method->invoke(null, - array('flags' => array('standalone' => 0, 'debug' => 0)), 'test2', '' + array('flags' => array('standalone' => 0, 'debug' => 0), 'lcrun' => 'LCRun3'), 'test2', '' )); $this->assertEquals("\$cx['funcs']['test3'](", $method->invoke(null, - array('flags' => array('standalone' => 1, 'debug' => 0)), 'test3', '' + array('flags' => array('standalone' => 1, 'debug' => 0), 'lcrun' => 'LCRun3'), 'test3', '' )); $this->assertEquals('LCRun3::debug(\'abc\', \'test\', ', $method->invoke(null, - array('flags' => array('standalone' => 0, 'debug' => 1)), 'test', 'abc' + array('flags' => array('standalone' => 0, 'debug' => 1), 'lcrun' => 'LCRun3'), 'test', 'abc' )); } /** @@ -193,32 +209,44 @@ class LightnCandyTest extends PHPUnit_Framework_TestCase $this->assertEquals(array('$in', 'this'), $method->invoke(null, array(null), array('flags'=>array('spvar'=>true,'debug'=>0)) )); + $this->assertEquals(array('((isset($in[\'true\']) && is_array($in)) ? $in[\'true\'] : null)', '[true]'), $method->invoke(null, + array('true'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + )); + $this->assertEquals(array('((isset($in[\'false\']) && is_array($in)) ? $in[\'false\'] : null)', '[false]'), $method->invoke(null, + array('false'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + )); $this->assertEquals(array('true', 'true'), $method->invoke(null, - array('true'), array('flags'=>array('spvar'=>true,'debug'=>0)), true + array(0, 'true'), array('flags'=>array('spvar'=>true,'debug'=>0)) )); $this->assertEquals(array('false', 'false'), $method->invoke(null, - array('false'), array('flags'=>array('spvar'=>true,'debug'=>0)), true + array(0, 'false'), array('flags'=>array('spvar'=>true,'debug'=>0)) )); - $this->assertEquals(array(2, '2'), $method->invoke(null, - array('2'), array('flags'=>array('spvar'=>true,'debug'=>0)), true + $this->assertEquals(array('((isset($in[\'2\']) && is_array($in)) ? $in[\'2\'] : null)', '[2]'), $method->invoke(null, + array('2'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + )); + $this->assertEquals(array('2', '2'), $method->invoke(null, + array(0, '2'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0)) )); $this->assertEquals(array('((isset($in[\'@index\']) && is_array($in)) ? $in[\'@index\'] : null)', '[@index]'), $method->invoke(null, array('@index'), array('flags'=>array('spvar'=>false,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) )); $this->assertEquals(array("((isset(\$cx['sp_vars']['index']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['index'] : null)", '@[index]'), $method->invoke(null, - array('@index'), array('flags'=>array('spvar'=>true,'debug'=>0)) + array('@index'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) )); $this->assertEquals(array("((isset(\$cx['sp_vars']['key']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['key'] : null)", '@[key]'), $method->invoke(null, - array('@key'), array('flags'=>array('spvar'=>true,'debug'=>0)) + array('@key'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) )); $this->assertEquals(array("((isset(\$cx['sp_vars']['first']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['first'] : null)", '@[first]'), $method->invoke(null, - array('@first'), array('flags'=>array('spvar'=>true,'debug'=>0)) + array('@first'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) )); $this->assertEquals(array("((isset(\$cx['sp_vars']['last']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['last'] : null)", '@[last]'), $method->invoke(null, - array('@last'), array('flags'=>array('spvar'=>true,'debug'=>0)) + array('@last'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) + )); + $this->assertEquals(array('((isset($in[\'"a"\']) && is_array($in)) ? $in[\'"a"\'] : null)', '["a"]'), $method->invoke(null, + array('"a"'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) )); - $this->assertEquals(array('\'a\'', '"a"'), $method->invoke(null, - array('"a"'), array('flags'=>array('spvar'=>true,'debug'=>0)) + $this->assertEquals(array('"a"', '"a"'), $method->invoke(null, + array(0, '"a"'), array('flags'=>array('spvar'=>true,'debug'=>0)) )); $this->assertEquals(array('((isset($in[\'a\']) && is_array($in)) ? $in[\'a\'] : null)', '[a]'), $method->invoke(null, array('a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) @@ -233,7 +261,7 @@ class LightnCandyTest extends PHPUnit_Framework_TestCase array(null, 'id'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0)) )); $this->assertEquals(array('LCRun3::v($cx, $in, array(\'id\'))', 'this.[id]'), $method->invoke(null, - array(null, 'id'), array('flags'=>array('prop'=>true,'spvar'=>true,'debug'=>0,'method'=>0,'mustlok'=>0,'standalone'=>0)) + array(null, 'id'), array('flags'=>array('prop'=>true,'spvar'=>true,'debug'=>0,'method'=>0,'mustlok'=>0,'standalone'=>0), 'lcrun' => 'LCRun3') )); } /** @@ -273,35 +301,41 @@ class LightnCandyTest extends PHPUnit_Framework_TestCase $this->assertEquals(array('this'), $method->invoke(null, 'this', array('flags' => array('advar' => 0, 'this' => 0)) )); - $this->assertEquals(array(null), $method->invoke(null, + $this->assertEquals(array(), $method->invoke(null, 'this', array('flags' => array('advar' => 0, 'this' => 1)) )); - $this->assertEquals(array(1, null), $method->invoke(null, - '../', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + $this->assertEquals(array(1), $method->invoke(null, + '../', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) )); - $this->assertEquals(array(1, null), $method->invoke(null, - '../.', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + $this->assertEquals(array(1), $method->invoke(null, + '../.', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) )); - $this->assertEquals(array(1, null), $method->invoke(null, - '../this', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + $this->assertEquals(array(1), $method->invoke(null, + '../this', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) )); $this->assertEquals(array(1, 'a'), $method->invoke(null, - '../a', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + '../a', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) )); $this->assertEquals(array(2, 'a', 'b'), $method->invoke(null, - '../../a.b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + '../../a.b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) )); $this->assertEquals(array(2, '[a]', 'b'), $method->invoke(null, - '../../[a].b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + '../../[a].b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) )); $this->assertEquals(array(2, 'a', 'b'), $method->invoke(null, - '../../[a].b', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + '../../[a].b', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0), 'scan' => true) )); - $this->assertEquals(array('"a.b"'), $method->invoke(null, + $this->assertEquals(array('id'), $method->invoke(null, + 'this.id', array('flags' => array('advar' => 1, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + )); + $this->assertEquals(array(0, '\'a.b\''), $method->invoke(null, '"a.b"', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) )); - $this->assertEquals(array(null, 'id'), $method->invoke(null, - 'this.id', array('flags' => array('advar' => 1, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + $this->assertEquals(array(0, '123'), $method->invoke(null, + '123', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) + )); + $this->assertEquals(array(0, 'null'), $method->invoke(null, + 'null', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0)) )); } /** @@ -310,59 +344,80 @@ class LightnCandyTest extends PHPUnit_Framework_TestCase public function testOn_parseTokenArgs() { $method = new ReflectionMethod('LightnCandy', 'parseTokenArgs'); $method->setAccessible(true); - $this->assertEquals(array(false, array(array(null))), $method->invoke(null, - array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + $this->assertEquals(array(false, array(array())), $method->invoke(null, + array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); - $this->assertEquals(array(true, array(array(null))), $method->invoke(null, - array(0,0,0,'{{{',0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + $this->assertEquals(array(true, array(array())), $method->invoke(null, + array(0,0,0,'{{{',0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); - $this->assertEquals(array(true, array(array(null))), $method->invoke(null, - array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 1)) + $this->assertEquals(array(true, array(array())), $method->invoke(null, + array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 1), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'))), $method->invoke(null, - array(0,0,0,0,0,0,'a'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + array(0,0,0,0,0,0,'a'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), array('b'))), $method->invoke(null, - array(0,0,0,0,0,0,'a b'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + array(0,0,0,0,0,0,'a b'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), array('"b'), array('c"'))), $method->invoke(null, - array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); - $this->assertEquals(array(false, array(array('a'), array('"b c"'))), $method->invoke(null, - array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + $this->assertEquals(array(false, array(array('a'), array(0, '\'b c\''))), $method->invoke(null, + array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), array('[b'), array('c]'))), $method->invoke(null, - array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), array('[b'), array('c]'))), $method->invoke(null, - array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), array('b c'))), $method->invoke(null, - array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0)) + array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), array('b c'))), $method->invoke(null, - array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), 'q' => array('b c'))), $method->invoke(null, - array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), array('q=[b c'))), $method->invoke(null, - array(0,0,0,0,0,0,'a [q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + array(0,0,0,0,0,0,'a [q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), 'q' => array('[b'), array('c]'))), $method->invoke(null, - array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('a'), 'q' => array('b'), array('c'))), $method->invoke(null, - array(0,0,0,0,0,0,'a [q]=b c'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + array(0,0,0,0,0,0,'a [q]=b c'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); - $this->assertEquals(array(false, array(array('a'), 'q' => array('"b c"'))), $method->invoke(null, - array(0,0,0,0,0,0,'a q="b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + $this->assertEquals(array(false, array(array('a'), 'q' => array(0, '\'b c\''))), $method->invoke(null, + array(0,0,0,0,0,0,'a q="b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('(foo bar)'))), $method->invoke(null, - array(0,0,0,0,0,0,'(foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0)) + array(0,0,0,0,0,0,'(foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0, 'exhlp' => 1), 'ops' => array('seperator' => ''), 'usedFeature' => array('subexp' => 0), 'scan' => false) )); $this->assertEquals(array(false, array(array('foo'), array("'=='"), array('bar'))), $method->invoke(null, - array(0,0,0,0,0,0,"foo '==' bar"), array('flags' => array('advar' => 1, 'namev' => 1)) + array(0,0,0,0,0,0,"foo '==' bar"), array('flags' => array('advar' => 1, 'namev' => 1, 'noesc' => 0, 'this' => 0), 'scan' => false) + )); + $this->assertEquals(array(false, array(array('( foo bar)'))), $method->invoke(null, + array(0,0,0,0,0,0,'( foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0, 'exhlp' => 1), 'ops' => array('seperator' => ''), 'usedFeature' => array('subexp' => 0), 'scan' => false) + )); + $this->assertEquals(array(false, array(array('a'), array(0, '\' b c\''))), $method->invoke(null, + array(0,0,0,0,0,0,'a " b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0), 'scan' => false) + )); + $this->assertEquals(array(false, array(array('a'), 'q' => array(0, '\' b c\''))), $method->invoke(null, + array(0,0,0,0,0,0,'a q=" b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + )); + $this->assertEquals(array(false, array(array('foo'), array(0, "' =='"), array('bar'))), $method->invoke(null, + array(0,0,0,0,0,0,"foo \' ==\' bar"), array('flags' => array('advar' => 1, 'namev' => 1, 'noesc' => 0, 'this' => 0), 'scan' => false) + )); + $this->assertEquals(array(false, array(array('a'), array(' b c'))), $method->invoke(null, + array(0,0,0,0,0,0,'a [ b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + )); + $this->assertEquals(array(false, array(array('a'), 'q' => array(0, "' d e'"))), $method->invoke(null, + array(0,0,0,0,0,0,"a q=\' d e\'"), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) + )); + $this->assertEquals(array(false, array('q' => array('( foo bar)'))), $method->invoke(null, + array(0,0,0,0,0,0,'q=( foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0), 'scan' => false) )); } /** diff --git a/vendor/zordius/lightncandy/tests/contextTest.php b/vendor/zordius/lightncandy/tests/contextTest.php new file mode 100644 index 00000000..8fa88d88 --- /dev/null +++ b/vendor/zordius/lightncandy/tests/contextTest.php @@ -0,0 +1,300 @@ +assertEquals($test['expected'], $context['usedFeature']); + } + + public function compileProvider() + { + $default = Array( + 'rootthis' => 0, + 'enc' => 0, + 'raw' => 0, + 'sec' => 0, + 'isec' => 0, + 'if' => 0, + 'else' => 0, + 'unless' => 0, + 'each' => 0, + 'this' => 0, + 'parent' => 0, + 'with' => 0, + 'comment' => 0, + 'partial' => 0, + 'dynpartial' => 0, + 'helper' => 0, + 'bhelper' => 0, + 'hbhelper' => 0, + 'delimiter' => 0, + 'subexp' => 0, + ); + + $compileCases = Array( + Array( + 'template' => 'abc', + ), + + Array( + 'template' => 'abc{{def', + ), + + Array( + 'template' => 'abc{{def}}', + 'expected' => Array( + 'enc' => 1 + ), + ), + + Array( + 'template' => 'abc{{{def}}}', + 'expected' => Array( + 'raw' => 1 + ), + ), + + Array( + 'template' => 'abc{{&def}}', + 'expected' => Array( + 'raw' => 1 + ), + ), + + Array( + 'template' => 'abc{{this}}', + 'expected' => Array( + 'enc' => 1 + ), + ), + + Array( + 'template' => 'abc{{this}}', + 'options' => Array('flags' => LightnCandy::FLAG_THIS), + 'expected' => Array( + 'enc' => 1, + 'this' => 1, + 'rootthis' => 1, + ), + ), + + Array( + 'template' => '{{#if abc}}OK!{{/if}}', + 'expected' => Array( + 'if' => 1 + ), + ), + + Array( + 'template' => '{{#unless abc}}OK!{{/unless}}', + 'expected' => Array( + 'unless' => 1 + ), + ), + + Array( + 'template' => '{{#with abc}}OK!{{/with}}', + 'expected' => Array( + 'with' => 1 + ), + ), + + Array( + 'template' => '{{#abc}}OK!{{/abc}}', + 'expected' => Array( + 'sec' => 1 + ), + ), + + Array( + 'template' => '{{^abc}}OK!{{/abc}}', + 'expected' => Array( + 'isec' => 1 + ), + ), + + Array( + 'template' => '{{#each abc}}OK!{{/each}}', + 'expected' => Array( + 'each' => 1 + ), + ), + + Array( + 'template' => '{{! test}}OK!{{! done}}', + 'expected' => Array( + 'comment' => 2 + ), + ), + + Array( + 'template' => '{{../OK}}', + 'expected' => Array( + 'parent' => 1, + 'enc' => 1, + ), + ), + + Array( + 'template' => '{{&../../OK}}', + 'expected' => Array( + 'parent' => 1, + 'raw' => 1, + ), + ), + + Array( + 'template' => '{{&../../../OK}} {{../OK}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'mytest' => function ($context) { + return $context; + } + ) + ), + 'expected' => Array( + 'parent' => 2, + 'enc' => 1, + 'raw' => 1, + ), + ), + + Array( + 'template' => '{{mytest ../../../OK}} {{../OK}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'mytest' => function ($context) { + return $context; + } + ) + ), + 'expected' => Array( + 'parent' => 2, + 'enc' => 2, + 'hbhelper' => 1, + ), + ), + + Array( + 'template' => '{{mytest . .}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'mytest' => function ($a, $b) { + return ''; + } + ) + ), + 'expected' => Array( + 'rootthis' => 2, + 'this' => 2, + 'enc' => 1, + 'hbhelper' => 1, + ), + ), + + Array( + 'template' => '{{mytest (mytest ..)}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'mytest' => function ($context) { + return $context; + } + ) + ), + 'expected' => Array( + 'parent' => 1, + 'enc' => 1, + 'hbhelper' => 2, + 'subexp' => 1, + ), + ), + + Array( + 'template' => '{{mytest (mytest ..) .}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'mytest' => function ($context) { + return $context; + } + ) + ), + 'expected' => Array( + 'parent' => 1, + 'rootthis' => 1, + 'this' => 1, + 'enc' => 1, + 'hbhelper' => 2, + 'subexp' => 1, + ), + ), + + Array( + 'template' => '{{mytest (mytest (mytest ..)) .}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'mytest' => function ($context) { + return $context; + } + ) + ), + 'expected' => Array( + 'parent' => 1, + 'rootthis' => 1, + 'this' => 1, + 'enc' => 1, + 'hbhelper' => 3, + 'subexp' => 2, + ), + ), + + Array( + 'id' => '134', + 'template' => '{{#if 1}}{{keys (keys ../names)}}{{/if}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'keys' => function ($context) { + return $context; + } + ) + ), + 'expected' => Array( + 'parent' => 1, + 'enc' => 1, + 'if' => 1, + 'hbhelper' => 2, + 'subexp' => 1, + ), + ), + ); + + return array_map(function($i) use ($default) { + if (!isset($i['options'])) { + $i['options'] = Array('flags' => 0); + } + if (!isset($i['options']['flags'])) { + $i['options']['flags'] = 0; + } + $i['expected'] = array_merge($default, isset($i['expected']) ? $i['expected'] : array()); + return Array($i); + }, $compileCases); + } +} + + +?> diff --git a/vendor/zordius/lightncandy/tests/errorTest.php b/vendor/zordius/lightncandy/tests/errorTest.php index 30ecd97d..8c1cbbf1 100644 --- a/vendor/zordius/lightncandy/tests/errorTest.php +++ b/vendor/zordius/lightncandy/tests/errorTest.php @@ -197,7 +197,7 @@ class errorTest extends PHPUnit_Framework_TestCase Array( 'template' => '{{testA[}}', 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), - 'expected' => 'Wrong variable naming as \'testA[\' in {{testA[}} !', + 'expected' => 'Wrong variable naming in {{testA[}}', ), Array( 'template' => '{{[testB}}', @@ -387,8 +387,27 @@ class errorTest extends PHPUnit_Framework_TestCase 'flags' => LightnCandy::FLAG_ADVARNAME, 'helpers' => Array('test_join'), ), - 'expected' => "Custom helper 'foo' not found!", + 'expected' => "Can not find custom helper function defination foo() !", ), + Array( + 'template' => '{{1 + 2}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array('test_join'), + ), + 'expected' => "Wrong variable naming as '+' in {{1 + 2}} ! You should wrap ! \" # % & ' * + , ; < = > { | } ~ into [ ]", + ), + Array( + 'template' => '{{> (foo) bar}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'basedir' => '.', + ), + 'expected' => Array( + "Can not find custom helper function defination foo() !", + "You use dynamic partial name as '(foo)', this only works with option FLAG_RUNTIMEPARTIAL enabled", + ) + ), ); return array_map(function($i) { diff --git a/vendor/zordius/lightncandy/tests/helpers_for_test.php b/vendor/zordius/lightncandy/tests/helpers_for_test.php index 93a1dbc7..80c3e860 100644 --- a/vendor/zordius/lightncandy/tests/helpers_for_test.php +++ b/vendor/zordius/lightncandy/tests/helpers_for_test.php @@ -1,5 +1,12 @@ ' . var_export($v, true) . ']]'; + } +} + // Classes for inputs or helpers class myClass { function test() { @@ -7,7 +14,7 @@ class myClass { } function helper2($arg) { - return "=$arg="; + return is_array($arg) ? '=Array=' : "=$arg="; } function __call($method, $args) { @@ -63,9 +70,12 @@ class twoDimensionIterator implements Iterator { // Custom helpers function helper1($arg) { + $arg = is_array($arg) ? 'Array' : $arg; return "-$arg-"; } function alink($u, $t) { + $u = is_array($u) ? 'Array' : $u; + $t = is_array($t) ? 'Array' : $t; return "$t"; } diff --git a/vendor/zordius/lightncandy/tests/regressionTest.php b/vendor/zordius/lightncandy/tests/regressionTest.php index bf591536..d7b6b96d 100644 --- a/vendor/zordius/lightncandy/tests/regressionTest.php +++ b/vendor/zordius/lightncandy/tests/regressionTest.php @@ -281,6 +281,612 @@ class regressionTest extends PHPUnit_Framework_TestCase 'expected' => 'NOT GOODNOT GOODNOT GOODNOT GOOD', ), + Array( + 'id' => 114, + 'template' => '{{^myeach .}}OK:{{.}},{{else}}NOT GOOD{{/myeach}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE, + 'blockhelpers' => Array( + 'myeach' => function ($input) { + return $input; + } + ), + ), + 'data' => Array(1, 'foo', 3, 'bar'), + 'expected' => 'NOT GOOD', + ), + + Array( + 'id' => 114, + 'template' => '{{^myeach .}}OK:{{.}},{{else}}NOT GOOD{{/myeach}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE, + 'blockhelpers' => Array( + 'myeach' => function ($input) { + return; + } + ), + ), + 'data' => Array(1, 'foo', 3, 'bar'), + 'expected' => 'OK:,', + ), + + Array( + 'id' => 124, + 'template' => '{{list foo bar abc=(lt 10 3) def=(lt 3 10)}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'lt' => function ($a, $b) { + return ($a > $b) ? Array("$a>$b", 'raw') : ''; + }, + 'list' => function () { + $out = 'List:'; + $args = func_get_args(); + $opts = array_pop($args); + + foreach ($args as $v) { + if ($v) { + $out .= ")$v , "; + } + } + + foreach ($opts['hash'] as $k => $v) { + if ($v) { + $out .= "]$k=$v , "; + } + } + return array($out, 'raw'); + } + ), + ), + 'data' => Array('foo' => 'OK!', 'bar' => 'OK2', 'abc' => false, 'def' => 123), + 'expected' => 'List:)OK! , )OK2 , ]abc=10>3 , ', + ), + + Array( + 'id' => 124, + 'template' => '{{#if (equal \'OK\' cde)}}YES!{{/if}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'equal' => function ($a, $b) { + return $a === $b; + } + ), + ), + 'data' => Array('cde' => 'OK'), + 'expected' => 'YES!' + ), + + Array( + 'id' => 124, + 'template' => '{{#if (equal true (equal \'OK\' cde))}}YES!{{/if}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'equal' => function ($a, $b) { + return $a === $b; + } + ), + ), + 'data' => Array('cde' => 'OK'), + 'expected' => 'YES!' + ), + + Array( + 'id' => 125, + 'template' => '{{#if (equal true ( equal \'OK\' cde))}}YES!{{/if}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'equal' => function ($a, $b) { + return $a === $b; + } + ), + ), + 'data' => Array('cde' => 'OK'), + 'expected' => 'YES!' + ), + + Array( + 'id' => 125, + 'template' => '{{#if (equal true (equal \' OK\' cde))}}YES!{{/if}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'equal' => function ($a, $b) { + return $a === $b; + } + ), + ), + 'data' => Array('cde' => ' OK'), + 'expected' => 'YES!' + ), + + Array( + 'id' => 125, + 'template' => '{{#if (equal true (equal \' ==\' cde))}}YES!{{/if}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'equal' => function ($a, $b) { + return $a === $b; + } + ), + ), + 'data' => Array('cde' => ' =='), + 'expected' => 'YES!' + ), + + Array( + 'id' => 125, + 'template' => '{{#if (equal true (equal " ==" cde))}}YES!{{/if}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'equal' => function ($a, $b) { + return $a === $b; + } + ), + ), + 'data' => Array('cde' => ' =='), + 'expected' => 'YES!' + ), + + Array( + 'id' => 125, + 'template' => '{{[ abc]}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'equal' => function ($a, $b) { + return $a === $b; + } + ), + ), + 'data' => Array(' abc' => 'YES!'), + 'expected' => 'YES!' + ), + + Array( + 'id' => 125, + 'template' => '{{list [ abc] " xyz" \' def\' "==" \'==\' "OK"}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'list' => function ($a, $b) { + $out = 'List:'; + $args = func_get_args(); + $opts = array_pop($args); + foreach ($args as $v) { + if ($v) { + $out .= ")$v , "; + } + } + return $out; + } + ), + ), + 'data' => Array(' abc' => 'YES!'), + 'expected' => 'List:)YES! , ) xyz , ) def , )== , )== , )OK , ' + ), + + Array( + 'id' => 127, + 'template' => '{{#each array}}#{{#if true}}{{name}}-{{../name}}-{{../../name}}-{{../../../name}}{{/if}}##{{#myif true}}{{name}}={{../name}}={{../../name}}={{../../../name}}{{/myif}}###{{#mywith true}}{{name}}~{{../name}}~{{../../name}}~{{../../../name}}{{/mywith}}{{/each}}', + 'data' => Array('name' => 'john', 'array' => Array(1,2,3)), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array('myif', 'mywith'), + ), + 'expected' => '#--john-##==john=###~~john~#--john-##==john=###~~john~#--john-##==john=###~~john~', + ), + + Array( + 'id' => 128, + 'template' => 'foo: {{foo}} , parent foo: {{../foo}}', + 'data' => Array('foo' => 'OK'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + ), + 'expected' => 'foo: OK , parent foo: ', + ), + + Array( + 'id' => 132, + 'template' => '{{list (keys .)}}', + 'data' => Array('foo' => 'bar', 'test' => 'ok'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'keys' => function($arg) { + return Array(array_keys($arg[0]), 'asis'); + }, + 'list' => function($arg) { + return join(',', $arg[0]); + } + ), + ), + 'expected' => 'foo,test', + ), + + Array( + 'id' => 133, + 'template' => "{{list (keys\n .\n ) \n}}", + 'data' => Array('foo' => 'bar', 'test' => 'ok'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'keys' => function($arg) { + return Array(array_keys($arg[0]), 'asis'); + }, + 'list' => function($arg) { + return join(',', $arg[0]); + } + ), + ), + 'expected' => 'foo,test', + ), + + Array( + 'id' => 133, + 'template' => "{{list\n .\n \n \n}}", + 'data' => Array('foo', 'bar', 'test'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'list' => function($arg) { + return join(',', $arg[0]); + } + ), + ), + 'expected' => 'foo,bar,test', + ), + + Array( + 'id' => 134, + 'template' => "{{#if 1}}{{list (keys ../names)}}{{/if}}", + 'data' => Array('names' => Array('foo' => 'bar', 'test' => 'ok')), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'keys' => function($arg) { + return Array(array_keys($arg[0]), 'asis'); + }, + 'list' => function($arg) { + return join(',', $arg[0]); + } + ), + ), + 'expected' => 'foo,test', + ), + + Array( + 'id' => 138, + 'template' => "{{#each (keys .)}}={{.}}{{/each}}", + 'data' => Array('foo' => 'bar', 'test' => 'ok', 'Haha'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'keys' => function($arg) { + return Array(array_keys($arg[0]), 'asis'); + } + ), + ), + 'expected' => '=foo=test=0', + ), + + Array( + 'id' => 140, + 'template' => "{{[a.good.helper] .}}", + 'data' => Array('ha', 'hey', 'ho'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'a.good.helper' => function($arg) { + return join(',', $arg[0]); + } + ), + ), + 'expected' => 'ha,hey,ho', + ), + + Array( + 'id' => 141, + 'template' => "{{#with foo}}{{#getThis bar}}{{/getThis}}{{/with}}", + 'data' => Array('foo' => Array('bar' => 'Good!')), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'getThis' => function($input, $options) { + return $input . '-' . $options['_this']['bar']; + } + ), + ), + 'expected' => 'Good!-Good!', + ), + + Array( + 'id' => 141, + 'template' => "{{#with foo}}{{getThis bar}}{{/with}}", + 'data' => Array('foo' => Array('bar' => 'Good!')), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'getThis' => function($input, $options) { + return $input . '-' . $options['_this']['bar']; + } + ), + ), + 'expected' => 'Good!-Good!', + ), + + Array( + 'id' => 143, + 'template' => "{{testString foo bar=\" \"}}", + 'data' => Array('foo' => 'good!'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'testString' => function($args, $named) { + return $args[0] . '-' . $named['bar']; + } + ), + ), + 'expected' => 'good!- ', + ), + + Array( + 'id' => 143, + 'template' => "{{testString foo bar=\"\"}}", + 'data' => Array('foo' => 'good!'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'testString' => function($args, $named) { + return $args[0] . '-' . $named['bar']; + } + ), + ), + 'expected' => 'good!-', + ), + + Array( + 'id' => 143, + 'template' => "{{testString foo bar=' '}}", + 'data' => Array('foo' => 'good!'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'testString' => function($args, $named) { + return $args[0] . '-' . $named['bar']; + } + ), + ), + 'expected' => 'good!- ', + ), + + Array( + 'id' => 143, + 'template' => "{{testString foo bar=''}}", + 'data' => Array('foo' => 'good!'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'testString' => function($args, $named) { + return $args[0] . '-' . $named['bar']; + } + ), + ), + 'expected' => 'good!-', + ), + + Array( + 'id' => 143, + 'template' => "{{testString foo bar=\" \"}}", + 'data' => Array('foo' => 'good!'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'testString' => function($arg1, $options) { + return $arg1 . '-' . $options['hash']['bar']; + } + ), + ), + 'expected' => 'good!- ', + ), + + Array( + 'id' => 147, + 'template' => '{{> test/test3 foo="bar"}}', + 'data' => Array('test' => 'OK!', 'foo' => 'error'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_RUNTIMEPARTIAL, + 'partials' => Array('test/test3' => '{{test}}, {{foo}}'), + ), + 'expected' => 'OK!, bar' + ), + + Array( + 'id' => 147, + 'template' => '{{> test/test3 foo="bar"}}', + 'data' => new foo(), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_RUNTIMEPARTIAL | LightnCandy::FLAG_INSTANCE, + 'partials' => Array('test/test3' => '{{bar}}, {{foo}}'), + ), + 'expected' => 'OK!, bar' + ), + + Array( + 'id' => 150, + 'template' => '{{{.}}}', + 'data' => Array('hello' => 'world'), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'lcrun' => 'MyLCRunClass', + ), + 'expected' => "[[DEBUG:raw()=>array (\n 'hello' => 'world',\n)]]", + ), + + Array( + 'id' => 153, + 'template' => '{{echo "test[]"}}', + 'data' => null, + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'echo' => function ($in) { + return "-$in[0]-"; + } + ) + ), + 'expected' => "-test[]-", + ), + + Array( + 'id' => 153, + 'template' => '{{echo \'test[]\'}}', + 'data' => null, + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'helpers' => Array( + 'echo' => function ($in) { + return "-$in[0]-"; + } + ) + ), + 'expected' => "-test[]-", + ), + + Array( + 'id' => 154, + 'template' => 'O{{! this is comment ! ... }}K!', + 'data' => null, + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + ), + 'expected' => "OK!" + ), + + Array( + 'template' => '{{testNull null undefined 1}}', + 'data' => 'test', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'testNull' => function($arg1, $arg2) { + return (($arg1 === null) && ($arg2 === null)) ? 'YES!' : 'no'; + } + ) + ), + 'expected' => 'YES!' + ), + + Array( + 'template' => '{{> (pname foo) bar}}', + 'data' => Array('bar' => 'OK! SUBEXP+PARTIAL!', 'foo' => Array('test/test3')), + 'options' => Array( + 'helpers' => Array( + 'pname' => function($arg) { + return $arg[0]; + } + ), + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_RUNTIMEPARTIAL, + 'partials' => Array('test/test3' => '{{.}}'), + ), + 'expected' => 'OK! SUBEXP+PARTIAL!' + ), + + Array( + 'template' => '{{> testpartial newcontext mixed=foo}}', + 'data' => Array('foo' => 'OK!', 'newcontext' => Array('bar' => 'test')), + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_RUNTIMEPARTIAL, + 'partials' => Array('testpartial' => '{{bar}}-{{mixed}}'), + ), + 'expected' => 'test-OK!' + ), + + Array( + 'template' => '{{[helper]}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'helper' => function () { + return 'DEF'; + } + ) + ), + 'data' => Array(), + 'expected' => 'DEF' + ), + + Array( + 'template' => '{{#[helper3]}}ABC{{/[helper3]}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'hbhelpers' => Array( + 'helper3' => function () { + return 'DEF'; + } + ) + ), + 'data' => Array(), + 'expected' => 'DEF' + ), + + Array( + 'template' => '{{#[helper3]}}ABC{{/[helper3]}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS, + 'blockhelpers' => Array( + 'helper3' => function () { + return Array('a', 'b', 'c'); + } + ) + ), + 'data' => Array(), + 'expected' => 'ABC' + ), + + Array( + 'template' => '{{hash abc=["def=123"]}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE, + 'hbhelpers' => Array( + 'hash' => function ($options) { + $ret = ''; + foreach ($options['hash'] as $k => $v) { + $ret .= "$k : $v,"; + } + return $ret; + } + ), + ), + 'data' => Array('"def=123"' => 'La!'), + 'expected' => 'abc : La!,', + ), + + Array( + 'template' => '{{hash abc=[\'def=123\']}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE, + 'hbhelpers' => Array( + 'hash' => function ($options) { + $ret = ''; + foreach ($options['hash'] as $k => $v) { + $ret .= "$k : $v,"; + } + return $ret; + } + ), + ), + 'data' => Array("'def=123'" => 'La!'), + 'expected' => 'abc : La!,', + ), + Array( 'template' => 'ABC{{#block "YES!"}}DEF{{foo}}GHI{{else}}NO~{{/block}}JKL', 'options' => Array( @@ -558,6 +1164,9 @@ VAREND 'he' => 'helper1', 'h2' => 'myClass::helper2', 'link' => function ($arg) { + if (is_array($arg)) { + $arg = 'Array'; + } return "click here"; }, 'alink', -- cgit v1.2.3-54-g00ecf From 257401d8b2cf661adf36c84b0e3fd1cf85e33c22 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 18 Dec 2015 06:04:58 +0100 Subject: Update to MediaWiki 1.26.1 --- RELEASE-NOTES-1.26 | 25 ++++++++++ .../SyntaxHighlight_GeSHi.class.php | 29 ++++++++---- extensions/SyntaxHighlight_GeSHi/composer.json | 2 +- .../maintenance/updateCSS.php | 22 +++++++-- .../maintenance/updateLexerList.php | 23 +++++++-- includes/DefaultSettings.php | 8 +++- includes/Hooks.php | 42 +---------------- includes/HttpFunctions.php | 17 ++++++- includes/MediaWiki.php | 44 +++++++++++++++--- includes/Setup.php | 15 ++++++ includes/User.php | 7 ++- includes/debug/logger/LoggerFactory.php | 2 +- includes/libs/MultiHttpClient.php | 13 ++++++ includes/libs/objectcache/APCBagOStuff.php | 54 +++++++++++++++++++++- includes/specialpage/RedirectSpecialPage.php | 12 +++++ includes/specials/SpecialExpandTemplates.php | 2 +- includes/specials/SpecialMyLanguage.php | 11 +++++ includes/specials/SpecialMyRedirectPages.php | 50 ++++++++++++++++++++ includes/specials/SpecialSearch.php | 2 +- includes/utils/IP.php | 22 ++++++--- .../includes/parser/MediaWikiParserTest.php | 1 + tests/phpunit/includes/parser/NewParserTest.php | 1 + tests/phpunit/includes/utils/IPTest.php | 33 +++++++++++-- tests/phpunit/suite.xml | 4 ++ 24 files changed, 356 insertions(+), 85 deletions(-) diff --git a/RELEASE-NOTES-1.26 b/RELEASE-NOTES-1.26 index 81405f50..0adfbe20 100644 --- a/RELEASE-NOTES-1.26 +++ b/RELEASE-NOTES-1.26 @@ -1,6 +1,31 @@ Security reminder: If you have PHP's register_globals option set, you must turn it off. MediaWiki will not work with it enabled. +== MediaWiki 1.26.1 == + +This is a maintenance release of the MediaWiki 1.26 branch. + +=== Changes since 1.26.0 === +* (T117899) SECURITY: $wgArticlePath can no longer be set to relative paths + that do not begin with a slash. This enabled trivial XSS attacks. + Configuration values such as "http://my.wiki.com/wiki/$1" are fine, as are + "/wiki/$1". A value such as "$1" or "wiki/$1" is not and will now throw an + error. +* (T119309) SECURITY: Use hash_equals() for edit token comparison +* (T118032) SECURITY: Don't allow cURL to interpret POST parameters starting + with '@' as file uploads +* (T115522) SECURITY: Passwords generated by User::randomPassword() can no + longer be shorter than $wgMinimalPasswordLength +* (T97897) SECURITY: Improve IP parsing and trimming. Previous behavior could + result in improper blocks being issued +* (T109724) SECURITY: Special:MyPage, Special:MyTalk, Special:MyContributions + and related pages no longer use HTTP redirects and are now redirected by + MediaWiki +* Fixed ConfigException in ExpandTemplates due to AlwaysUseTidy. +* Fixed stray literal \n in Special:Search. +* Fix issue that breaks HHVM Repo Authorative mode. +* (T120267) Work around APCu memory corruption bug + == MediaWiki 1.26 == === Configuration changes in 1.26 === diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php index 535e37af..9eed2763 100644 --- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php +++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php @@ -16,7 +16,7 @@ * http://www.gnu.org/copyleft/gpl.html */ -use KzykHys\Pygments\Pygments; +use Symfony\Component\Process\ProcessBuilder; // @codingStandardsIgnoreStart class SyntaxHighlight_GeSHi { @@ -276,18 +276,29 @@ class SyntaxHighlight_GeSHi { $output = $cache->get( $cacheKey ); if ( $output === false ) { - try { - $pygments = new Pygments( $wgPygmentizePath ); - $output = $pygments->highlight( $code, $lexer, 'html', $options ); - } catch ( RuntimeException $e ) { + $optionPairs = array(); + foreach ( $options as $k => $v ) { + $optionPairs[] = "{$k}={$v}"; + } + $builder = new ProcessBuilder(); + $builder->setPrefix( $wgPygmentizePath ); + $process = $builder + ->add( '-l' )->add( $lexer ) + ->add( '-f' )->add( 'html' ) + ->add( '-O' )->add( implode( ',', $optionPairs ) ) + ->getProcess(); + + $process->setInput( $code ); + $process->run(); + + if ( !$process->isSuccessful() ) { $status->warning( 'syntaxhighlight-error-pygments-invocation-failure' ); - wfWarn( - 'Failed to invoke Pygments. Please check that Pygments is installed ' . - 'and that $wgPygmentizePath is accurate.' - ); + wfWarn( 'Failed to invoke Pygments: ' . $process->getErrorOutput() ); $status->value = self::highlight( $code, null, $args )->getValue(); return $status; } + + $output = $process->getOutput(); $cache->set( $cacheKey, $output ); } diff --git a/extensions/SyntaxHighlight_GeSHi/composer.json b/extensions/SyntaxHighlight_GeSHi/composer.json index 709c1fb0..d8b8cc8e 100644 --- a/extensions/SyntaxHighlight_GeSHi/composer.json +++ b/extensions/SyntaxHighlight_GeSHi/composer.json @@ -2,7 +2,7 @@ "name": "mediawiki/syntax-highlight_geshi", "description": "Syntax highlighting extension for MediaWiki", "require": { - "kzykhys/pygments": "1.0" + "symfony/process": "~2.5" }, "require-dev": { "jakub-onderka/php-parallel-lint": "0.9", diff --git a/extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php b/extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php index a3c0c817..9299cd74 100644 --- a/extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php +++ b/extensions/SyntaxHighlight_GeSHi/maintenance/updateCSS.php @@ -22,7 +22,7 @@ * @ingroup Maintenance */ -use KzykHys\Pygments\Pygments; +use Symfony\Component\Process\ProcessBuilder; $IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..'; @@ -39,9 +39,25 @@ class UpdateCSS extends Maintenance { global $wgPygmentizePath; $target = __DIR__ . '/../modules/pygments.generated.css'; - $pygments = new Pygments( $wgPygmentizePath ); $css = "/* Stylesheet generated by updateCSS.php */\n"; - $css .= $pygments->getCss( 'default', '.' . SyntaxHighlight_GeSHi::HIGHLIGHT_CSS_CLASS ); + + $builder = new ProcessBuilder(); + $builder->setPrefix( $wgPygmentizePath ); + + $process = $builder + ->add( '-f' )->add( 'html' ) + ->add( '-S' )->add( 'default' ) + ->add( '-a' )->add( '.' . SyntaxHighlight_GeSHi::HIGHLIGHT_CSS_CLASS ) + ->getProcess(); + + $process->run(); + + if ( !$process->isSuccessful() ) { + throw new \RuntimeException( $process->getErrorOutput() ); + } + + $css .= $process->getOutput(); + if ( file_put_contents( $target, $css ) === false ) { $this->output( "Failed to write to {$target}\n" ); } else { diff --git a/extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php b/extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php index 75beb9b5..b5a7fc5a 100644 --- a/extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php +++ b/extensions/SyntaxHighlight_GeSHi/maintenance/updateLexerList.php @@ -22,7 +22,7 @@ * @ingroup Maintenance */ -use KzykHys\Pygments\Pygments; +use Symfony\Component\Process\ProcessBuilder; $IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..'; @@ -43,8 +43,25 @@ class UpdateLanguageList extends Maintenance { $header = '// Generated by ' . basename( __FILE__ ) . "\n\n"; - $pygments = new Pygments( $wgPygmentizePath ); - $lexers = array_keys( $pygments->getLexers() ); + $lexers = array(); + + $builder = new ProcessBuilder(); + $builder->setPrefix( $wgPygmentizePath ); + + $process = $builder->add( '-L' )->add( 'lexer' )->getProcess(); + $process->run(); + + if ( !$process->isSuccessful() ) { + throw new \RuntimeException( $process->getErrorOutput() ); + } + + $output = $process->getOutput(); + foreach ( explode( "\n", $output ) as $line ) { + if ( substr( $line, 0, 1 ) === '*' ) { + $newLexers = explode( ', ', trim( $line, "* :\n" ) ); + $lexers = array_merge( $lexers, $newLexers ); + } + } sort( $lexers ); $code = "getMessage(); - } catch ( Exception $e ) { - restore_error_handler(); - throw $e; - } - - restore_error_handler(); + $retval = call_user_func_array( $callback, $hook_args ); // Process the return value. if ( is_string( $retval ) ) { // String returned means error. throw new FatalError( $retval ); - } elseif ( $badhookmsg !== null ) { - // Exception was thrown from Hooks::hookErrorHandler. - throw new MWException( - 'Detected bug in an extension! ' . - "Hook $func has invalid call signature; " . $badhookmsg - ); } elseif ( $retval === false ) { // False was returned. Stop processing, but no error. return false; @@ -229,27 +212,4 @@ class Hooks { return true; } - - /** - * Handle PHP errors issued inside a hook. Catch errors that have to do - * with a function expecting a reference, and pass all others through to - * MWExceptionHandler::handleError() for default processing. - * - * @since 1.18 - * - * @param int $errno Error number (unused) - * @param string $errstr Error message - * @throws MWHookException If the error has to do with the function signature - * @return bool - */ - public static function hookErrorHandler( $errno, $errstr ) { - if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) { - throw new MWHookException( $errstr, $errno ); - } - - // Delegate unhandled errors to the default MW handler - return call_user_func_array( - 'MWExceptionHandler::handleError', func_get_args() - ); - } } diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php index bc5a9570..3dff9711 100644 --- a/includes/HttpFunctions.php +++ b/includes/HttpFunctions.php @@ -779,7 +779,22 @@ class CurlHttpRequest extends MWHttpRequest { $this->curlOptions[CURLOPT_HEADER] = true; } elseif ( $this->method == 'POST' ) { $this->curlOptions[CURLOPT_POST] = true; - $this->curlOptions[CURLOPT_POSTFIELDS] = $this->postData; + $postData = $this->postData; + // Don't interpret POST parameters starting with '@' as file uploads, because this + // makes it impossible to POST plain values starting with '@' (and causes security + // issues potentially exposing the contents of local files). + // The PHP manual says this option was introduced in PHP 5.5 defaults to true in PHP 5.6, + // but we support lower versions, and the option doesn't exist in HHVM 5.6.99. + if ( defined( 'CURLOPT_SAFE_UPLOAD' ) ) { + $this->curlOptions[CURLOPT_SAFE_UPLOAD] = true; + } else if ( is_array( $postData ) ) { + // In PHP 5.2 and later, '@' is interpreted as a file upload if POSTFIELDS + // is an array, but not if it's a string. So convert $req['body'] to a string + // for safety. + $postData = wfArrayToCgi( $postData ); + } + $this->curlOptions[CURLOPT_POSTFIELDS] = $postData; + // Suppress 'Expect: 100-continue' header, as some servers // will reject it with a 417 and Curl won't auto retry // with HTTP 1.0 fallback diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index fbacb250..2da2f6ce 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -36,6 +36,11 @@ class MediaWiki { */ private $config; + /** + * @var String Cache what action this request is + */ + private $action; + /** * @param IContextSource|null $context */ @@ -141,13 +146,11 @@ class MediaWiki { * @return string Action */ public function getAction() { - static $action = null; - - if ( $action === null ) { - $action = Action::getActionName( $this->context ); + if ( $this->action === null ) { + $this->action = Action::getActionName( $this->context ); } - return $action; + return $this->action; } /** @@ -242,8 +245,37 @@ class MediaWiki { // Handle any other redirects. // Redirect loops, titleless URL, $wgUsePathInfo URLs, and URLs with a variant } elseif ( !$this->tryNormaliseRedirect( $title ) ) { + // Prevent information leak via Special:MyPage et al (T109724) + if ( $title->isSpecialPage() ) { + $specialPage = SpecialPageFactory::getPage( $title->getDBKey() ); + if ( $specialPage instanceof RedirectSpecialPage + && $this->config->get( 'HideIdentifiableRedirects' ) + && $specialPage->personallyIdentifiableTarget() + ) { + list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBKey() ); + $target = $specialPage->getRedirect( $subpage ); + // target can also be true. We let that case fall through to normal processing. + if ( $target instanceof Title ) { + $query = $specialPage->getRedirectQuery() ?: array(); + $request = new DerivativeRequest( $this->context->getRequest(), $query ); + $request->setRequestURL( $this->context->getRequest()->getRequestURL() ); + $this->context->setRequest( $request ); + // Do not varnish cache these. May vary even for anons + $this->context->getOutput()->lowerCdnMaxage( 0 ); + $this->context->setTitle( $target ); + $wgTitle = $target; + // Reset action type cache. (Special pages have only view) + $this->action = null; + $title = $target; + $output->addJsConfigVars( array( + 'wgInternalRedirectTargetUrl' => $target->getFullURL( $query ), + ) ); + $output->addModules( 'mediawiki.action.view.redirect' ); + } + } + } - // Special pages + // Special pages ($title may have changed since if statement above) if ( NS_SPECIAL == $title->getNamespace() ) { // Actions that need to be made when we have a special pages SpecialPageFactory::executePath( $title, $this->context ); diff --git a/includes/Setup.php b/includes/Setup.php index 70e8cde4..905a1d10 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -510,6 +510,21 @@ MWExceptionHandler::installHandler(); require_once "$IP/includes/compat/normal/UtfNormalUtil.php"; + +$ps_validation = Profiler::instance()->scopedProfileIn( $fname . '-validation' ); + +// T48998: Bail out early if $wgArticlePath is non-absolute +if ( !preg_match( '/^(https?:\/\/|\/)/', $wgArticlePath ) ) { + throw new FatalError( + 'If you use a relative URL for $wgArticlePath, it must start ' . + 'with a slash (/).

      See ' . + '' . + 'https://www.mediawiki.org/wiki/Manual:$wgArticlePath.' + ); +} + +Profiler::instance()->scopedProfileOut( $ps_validation ); + $ps_default2 = Profiler::instance()->scopedProfileIn( $fname . '-defaults2' ); if ( $wgScriptExtension !== '.php' || defined( 'MW_ENTRY_PHP5' ) ) { diff --git a/includes/User.php b/includes/User.php index 22c90cdd..199dd1dc 100644 --- a/includes/User.php +++ b/includes/User.php @@ -1029,11 +1029,10 @@ class User implements IDBAccessObject { // stopping at a minimum of 10 chars. $length = max( 10, $wgMinimalPasswordLength ); // Multiply by 1.25 to get the number of hex characters we need - $length = $length * 1.25; // Generate random hex chars - $hex = MWCryptRand::generateHex( $length ); + $hex = MWCryptRand::generateHex( ceil( $length * 1.25 ) ); // Convert from base 16 to base 32 to get a proper password like string - return wfBaseConvert( $hex, 16, 32 ); + return substr( wfBaseConvert( $hex, 16, 32, $length ), -$length ); } /** @@ -4177,7 +4176,7 @@ class User implements IDBAccessObject { $salt, $request ?: $this->getRequest(), $timestamp ); - if ( $val != $sessionToken ) { + if ( !hash_equals( $sessionToken, $val ) ) { wfDebug( "User::matchEditToken: broken session data\n" ); } diff --git a/includes/debug/logger/LoggerFactory.php b/includes/debug/logger/LoggerFactory.php index 0b6965ff..1e44b708 100644 --- a/includes/debug/logger/LoggerFactory.php +++ b/includes/debug/logger/LoggerFactory.php @@ -94,7 +94,7 @@ class LoggerFactory { * @return \\Psr\\Log\\LoggerInterface */ public static function getInstance( $channel ) { - if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) { + if ( !interface_exists( 'Psr\Log\LoggerInterface' ) ) { $message = ( 'MediaWiki requires the PSR-3 logging ' . "library to be present. This library is not embedded directly in MediaWiki's " . diff --git a/includes/libs/MultiHttpClient.php b/includes/libs/MultiHttpClient.php index 6af3ed51..5555cbcb 100644 --- a/includes/libs/MultiHttpClient.php +++ b/includes/libs/MultiHttpClient.php @@ -335,6 +335,19 @@ class MultiHttpClient { ); } elseif ( $req['method'] === 'POST' ) { curl_setopt( $ch, CURLOPT_POST, 1 ); + // Don't interpret POST parameters starting with '@' as file uploads, because this + // makes it impossible to POST plain values starting with '@' (and causes security + // issues potentially exposing the contents of local files). + // The PHP manual says this option was introduced in PHP 5.5 defaults to true in PHP 5.6, + // but we support lower versions, and the option doesn't exist in HHVM 5.6.99. + if ( defined( 'CURLOPT_SAFE_UPLOAD' ) ) { + curl_setopt( $ch, CURLOPT_SAFE_UPLOAD, true ); + } else if ( is_array( $req['body'] ) ) { + // In PHP 5.2 and later, '@' is interpreted as a file upload if POSTFIELDS + // is an array, but not if it's a string. So convert $req['body'] to a string + // for safety. + $req['body'] = wfArrayToCgi( $req['body'] ); + } curl_setopt( $ch, CURLOPT_POSTFIELDS, $req['body'] ); } else { if ( is_resource( $req['body'] ) || $req['body'] !== '' ) { diff --git a/includes/libs/objectcache/APCBagOStuff.php b/includes/libs/objectcache/APCBagOStuff.php index 0dbbaba9..35e05e80 100644 --- a/includes/libs/objectcache/APCBagOStuff.php +++ b/includes/libs/objectcache/APCBagOStuff.php @@ -27,22 +27,72 @@ * @ingroup Cache */ class APCBagOStuff extends BagOStuff { + + /** + * @var bool If true, trust the APC implementation to serialize and + * deserialize objects correctly. If false, (de-)serialize in PHP. + */ + protected $nativeSerialize; + /** * @var string String to append to each APC key. This may be changed * whenever the handling of values is changed, to prevent existing code * from encountering older values which it cannot handle. - **/ - const KEY_SUFFIX = ':1'; + */ + const KEY_SUFFIX = ':2'; + + /** + * Constructor + * + * Available parameters are: + * - nativeSerialize: If true, pass objects to apc_store(), and trust it + * to serialize them correctly. If false, serialize + * all values in PHP. + * + * @param array $params + */ + public function __construct( array $params = array() ) { + parent::__construct( $params ); + + if ( isset( $params['nativeSerialize'] ) ) { + $this->nativeSerialize = $params['nativeSerialize']; + } elseif ( extension_loaded( 'apcu' ) && ini_get( 'apc.serializer' ) === 'default' ) { + // APCu has a memory corruption bug when the serializer is set to 'default'. + // See T120267, and upstream bug reports: + // - https://github.com/krakjoe/apcu/issues/38 + // - https://github.com/krakjoe/apcu/issues/35 + // - https://github.com/krakjoe/apcu/issues/111 + $this->logger->warning( + 'The APCu extension is loaded and the apc.serializer INI setting ' . + 'is set to "default". This can cause memory corruption! ' . + 'You should change apc.serializer to "php" instead. ' . + 'See .' + ); + $this->nativeSerialize = false; + } else { + $this->nativeSerialize = true; + } + } public function get( $key, &$casToken = null, $flags = 0 ) { $val = apc_fetch( $key . self::KEY_SUFFIX ); $casToken = $val; + if ( is_string( $val ) && !$this->nativeSerialize ) { + $val = $this->isInteger( $val ) + ? intval( $val ) + : unserialize( $val ); + } + return $val; } public function set( $key, $value, $exptime = 0 ) { + if ( !$this->nativeSerialize && !$this->isInteger( $value ) ) { + $value = serialize( $value ); + } + apc_store( $key . self::KEY_SUFFIX, $value, $exptime ); return true; diff --git a/includes/specialpage/RedirectSpecialPage.php b/includes/specialpage/RedirectSpecialPage.php index 9129ee5d..5047354e 100644 --- a/includes/specialpage/RedirectSpecialPage.php +++ b/includes/specialpage/RedirectSpecialPage.php @@ -94,6 +94,18 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage { ? $params : false; } + + /** + * Indicate if the target of this redirect can be used to identify + * a particular user of this wiki (e.g., if the redirect is to the + * user page of a User). See T109724. + * + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return false; + } } /** diff --git a/includes/specials/SpecialExpandTemplates.php b/includes/specials/SpecialExpandTemplates.php index b7582e6c..06eb2769 100644 --- a/includes/specials/SpecialExpandTemplates.php +++ b/includes/specials/SpecialExpandTemplates.php @@ -114,7 +114,7 @@ class SpecialExpandTemplates extends SpecialPage { } $config = $this->getConfig(); - if ( ( $config->get( 'UseTidy' ) && $options->getTidy() ) || $config->get( 'AlwaysUseTidy' ) ) { + if ( $config->get( 'UseTidy' ) && $options->getTidy() ) { $tmp = MWTidy::tidy( $tmp ); } diff --git a/includes/specials/SpecialMyLanguage.php b/includes/specials/SpecialMyLanguage.php index 3d8ff97b..d11fbe63 100644 --- a/includes/specials/SpecialMyLanguage.php +++ b/includes/specials/SpecialMyLanguage.php @@ -99,4 +99,15 @@ class SpecialMyLanguage extends RedirectSpecialArticle { return $base; } } + + /** + * Target can identify a specific user's language preference. + * + * @see T109724 + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return true; + } } diff --git a/includes/specials/SpecialMyRedirectPages.php b/includes/specials/SpecialMyRedirectPages.php index 5ef03f13..850b1f63 100644 --- a/includes/specials/SpecialMyRedirectPages.php +++ b/includes/specials/SpecialMyRedirectPages.php @@ -45,6 +45,16 @@ class SpecialMypage extends RedirectSpecialArticle { return Title::makeTitle( NS_USER, $this->getUser()->getName() . '/' . $subpage ); } + + /** + * Target identifies a specific User. See T109724. + * + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return true; + } } /** @@ -68,6 +78,16 @@ class SpecialMytalk extends RedirectSpecialArticle { return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() . '/' . $subpage ); } + + /** + * Target identifies a specific User. See T109724. + * + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return true; + } } /** @@ -90,6 +110,16 @@ class SpecialMycontributions extends RedirectSpecialPage { public function getRedirect( $subpage ) { return SpecialPage::getTitleFor( 'Contributions', $this->getUser()->getName() ); } + + /** + * Target identifies a specific User. See T109724. + * + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return true; + } } /** @@ -110,6 +140,16 @@ class SpecialMyuploads extends RedirectSpecialPage { public function getRedirect( $subpage ) { return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() ); } + + /** + * Target identifies a specific User. See T109724. + * + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return true; + } } /** @@ -132,4 +172,14 @@ class SpecialAllMyUploads extends RedirectSpecialPage { return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() ); } + + /** + * Target identifies a specific User. See T109724. + * + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return true; + } } diff --git a/includes/specials/SpecialSearch.php b/includes/specials/SpecialSearch.php index f50fb732..8c546edd 100644 --- a/includes/specials/SpecialSearch.php +++ b/includes/specials/SpecialSearch.php @@ -388,7 +388,7 @@ class SpecialSearch extends SpecialPage { } } - $out->addHTML( '
      \n' ); + $out->addHTML( '
      ' ); if ( $prevnext ) { $out->addHTML( "

      {$prevnext}

      \n" ); } diff --git a/includes/utils/IP.php b/includes/utils/IP.php index 666660aa..13586f3c 100644 --- a/includes/utils/IP.php +++ b/includes/utils/IP.php @@ -132,8 +132,9 @@ class IP { /** * Convert an IP into a verbose, uppercase, normalized form. - * IPv6 addresses in octet notation are expanded to 8 words. - * IPv4 addresses are just trimmed. + * Both IPv4 and IPv6 addresses are trimmed. Additionally, + * IPv6 addresses in octet notation are expanded to 8 words; + * IPv4 addresses have leading zeros, in each octet, removed. * * @param string $ip IP address in quad or octet form (CIDR or not). * @return string @@ -143,8 +144,16 @@ class IP { if ( $ip === '' ) { return null; } - if ( self::isIPv4( $ip ) || !self::isIPv6( $ip ) ) { - return $ip; // nothing else to do for IPv4 addresses or invalid ones + /* If not an IP, just return trimmed value, since sanitizeIP() is called + * in a number of contexts where usernames are supplied as input. + */ + if ( !self::isIPAddress($ip) ) { + return $ip; + } + if ( self::isIPv4( $ip ) ) { + // Remove leading 0's from octet representation of IPv4 address + $ip = preg_replace( '/(?:^|(?<=\.))0+(?=[1-9]|0\.|0$)/', '', $ip ); + return $ip; } // Remove any whitespaces, convert to upper case $ip = strtoupper( $ip ); @@ -399,8 +408,9 @@ class IP { if ( self::isIPv6( $ip ) ) { $n = 'v6-' . self::IPv6ToRawHex( $ip ); } elseif ( self::isIPv4( $ip ) ) { - // Bug 60035: an IP with leading 0's fails in ip2long sometimes (e.g. *.08) - $ip = preg_replace( '/(?<=\.)0+(?=[1-9])/', '', $ip ); + // T62035/T97897: An IP with leading 0's fails in ip2long sometimes (e.g. *.08), + // also double/triple 0 needs to be changed to just a single 0 for ip2long. + $ip = self::sanitizeIP( $ip ); $n = ip2long( $ip ); if ( $n < 0 ) { $n += pow( 2, 32 ); diff --git a/tests/phpunit/includes/parser/MediaWikiParserTest.php b/tests/phpunit/includes/parser/MediaWikiParserTest.php index 96ae3bec..210c17c5 100644 --- a/tests/phpunit/includes/parser/MediaWikiParserTest.php +++ b/tests/phpunit/includes/parser/MediaWikiParserTest.php @@ -7,6 +7,7 @@ require_once __DIR__ . '/NewParserTest.php'; * an PHPUnit_Framework_Test object * * @group Parser + * @group ParserTests * @group Database */ class MediaWikiParserTest { diff --git a/tests/phpunit/includes/parser/NewParserTest.php b/tests/phpunit/includes/parser/NewParserTest.php index df7da98c..d95e9225 100644 --- a/tests/phpunit/includes/parser/NewParserTest.php +++ b/tests/phpunit/includes/parser/NewParserTest.php @@ -672,6 +672,7 @@ class NewParserTest extends MediaWikiTestCase { /** * @group medium + * @group ParserTests * @dataProvider parserTestProvider * @param string $desc * @param string $input diff --git a/tests/phpunit/includes/utils/IPTest.php b/tests/phpunit/includes/utils/IPTest.php index 04b8f486..34aff796 100644 --- a/tests/phpunit/includes/utils/IPTest.php +++ b/tests/phpunit/includes/utils/IPTest.php @@ -307,12 +307,34 @@ class IPTest extends PHPUnit_Framework_TestCase { } /** - * Improve IP::sanitizeIP() code coverage - * @todo Most probably incomplete + * @covers IP::sanitizeIP + * @dataProvider provideSanitizeIP */ - public function testSanitizeIP() { - $this->assertNull( IP::sanitizeIP( '' ) ); - $this->assertNull( IP::sanitizeIP( ' ' ) ); + public function testSanitizeIP( $expected, $input ) { + $result = IP::sanitizeIP( $input ); + $this->assertEquals( $expected, $result ); + } + + /** + * Provider for IP::testSanitizeIP() + */ + public static function provideSanitizeIP() { + return array( + array( '0.0.0.0', '0.0.0.0' ), + array( '0.0.0.0', '00.00.00.00' ), + array( '0.0.0.0', '000.000.000.000' ), + array( '141.0.11.253', '141.000.011.253' ), + array( '1.2.4.5', '1.2.4.5' ), + array( '1.2.4.5', '01.02.04.05' ), + array( '1.2.4.5', '001.002.004.005' ), + array( '10.0.0.1', '010.0.000.1' ), + array( '80.72.250.4', '080.072.250.04' ), + array( 'Foo.1000.00', 'Foo.1000.00'), + array( 'Bar.01', 'Bar.01'), + array( 'Bar.010', 'Bar.010'), + array( null, ''), + array( null, ' ') + ); } /** @@ -336,6 +358,7 @@ class IPTest extends PHPUnit_Framework_TestCase { array( '80000000', '128.0.0.0' ), array( 'DEADCAFE', '222.173.202.254' ), array( 'FFFFFFFF', '255.255.255.255' ), + array( '8D000BFD', '141.000.11.253' ), array( false, 'IN.VA.LI.D' ), array( 'v6-00000000000000000000000000000001', '::1' ), array( 'v6-20010DB885A3000000008A2E03707334', '2001:0db8:85a3:0000:0000:8a2e:0370:7334' ), diff --git a/tests/phpunit/suite.xml b/tests/phpunit/suite.xml index 1acbc241..82086b9d 100644 --- a/tests/phpunit/suite.xml +++ b/tests/phpunit/suite.xml @@ -24,6 +24,10 @@ phpunit.php enables colors for other OSs at runtime languages + + includes/parser/MediaWikiParserTest.php + suites/ExtensionsParserTestSuite.php + skins -- cgit v1.2.3-54-g00ecf